数据加载中……

linux下mysql的最常用的操作指令_创建用户、备份和还原数据库

 

1]如何创建mysqld数据库的管理用户?

数据库安装好后,我们应该为mysql数据库创建一个管理帐号。要把root用户设置为管理员,我们应该运行下面的命令;
[root@linuxsir01 root]# /opt/mysql/bin/mysqladmin -u root password 123456
[root@linuxsir01 root]#
通过上面的命令,我们可以知道,mysql数据库的管理员是root,密码是123456。


2]如何进入mysql数据库?以mysql数据库管理员root,密码为123456为例;

[root@linuxsir01 root]#/opt/mysql/bin/mysql -uroot -p123456
输出上面的命令后,出现的是如下的提示;
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 3.23.58
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
注意:操作这些命令的时候,应该把mysqld服务器打开。这些新手兄弟早就知道了吧


3]如何操作一个数据库呢,这个问题就比较多了,建议还是看一下mysql的手册吧。里面的东西太多了。如果操作一个数据库,首先是要指定一个数据库为当前数据库,应该用use命令

mysql>use [数据库];
比如我想指定linux这个数据库为当前数据库,应该是
mysql> use linux;
Database changed
mysql>

 

4]如何备份数据库??

比如我们要备份mysql中已经存在的名为linux的数据库,要用到命令mysqldump
命令格式如下:
[root@linuxsir01 root]# /opt/mysql/bin/mysqldump -uroot -p linux > /root/linux.sql
Enter password:在这里输入数据库的密码
通过上面的命令,我们要明白两件事,首先备份数据库是要以数据库管理员的身份备份;其次:备份目的地是/root,备份的文件名是linux.sql。其实备份的位置和文件名,根据自己的情况来定。文件名可以自己来取,路径也可以自己来安排;
比如我想把linux的数据库备份到/home/beinan,数据库的文件名为linuxsir031130.sql,所以应该输入如下的命令。
[root@linuxsir01 root]#/opt/mysql/bin/mysqldump -uroot -p linux > /home/beinan/linuxsir031130.sql
Enter password:在这里输入数据库管理员root的数据库密码
这样我们到/home/beinan目录下就能发现mysql中名为linux的数据库的备份文件linuxsir031130.sql
综上所述,我们学习时要学会变通。

5]如何把把备份的数据库导入到数据库中?

首先我们还是要操作上面几个过程,比如添加数据库管理员(如果您没有添加过mysql数据库管理员的话),创建数据库等。
比如我们要把在/home/beinan这个目录中的linuxsir031130.sql这个备份,导入名为linux的数据库中,应该如下操作;
[root@linuxsir01 root]# /opt/mysql/bin/mysql -uroot -p linux < /home/beinan/linuxsir031130.sql
Enter password:在这里输入密码
如果机器好,数据库比较小,几分钟就好了。


6]对mysql数据库常用命令的一点补充;

几个常用的mysql相关的管理命令
mysql 命令:基本文本的,显示和使用的mysql数据库。前面已经简单的提过用法;比如登录等。
mysqladmin 命令,用来创建和维护mysql数据库的命令,前面已经简单的提过;
isamchk 是用来修复、检查和优化.ism后缀的数据库文件;
mysqldump 是用于备份数据库,前面已经简单的说明过;
myisamchk 用来修复.myi后缀的数据库文件;

比如我们要检查名为linux的数据库.myi数据库表是否存在问题,应该用下面的命令;

要把mysqld服务器停下来
[root@linuxsir01 root]# /opt/mysql/share/mysql.server stop

然后执行
[root@linuxsir01 root]# /opt/mysql/bin/myisamchk /opt/mysql/var/linux/*.MYI

上面的命令的意思就是检查所有的.myi文件,数据库的目录在/opt/mysql/var/linux/目录中

如果有问题,应该用-r参数来修复
[root@linuxsir01 root]# /opt/mysql/bin/myisamchk -r /opt/mysql/var/linux/*.MYI

7]mysqlshow 命令:显示用户选择的数据库和表
[root@linuxsir01 root]# /opt/mysql/bin/mysqlshow -uroot -p [数据库名]

比如我要查看名为linux的数据库;应该是:

[root@linuxsir01 root]# /opt/mysql/bin/mysqlshow -uroot -p linux

posted @ 2010-09-25 17:40 doublezxh 阅读(79) | 评论 (0)编辑 收藏
TCP/IP的通讯协议介绍

 

这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。

TCP/IP整体构架概述

TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:

应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。

传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。

互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。

网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。

TCP/IP中的协议

以下简单介绍TCP/IP中的协议都具备什么样的功能,都是如何工作的:

1. IP

网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。

IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。

2. TCP

如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。

TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。

面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。

3.UDP

UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。

欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。

4.ICMP

ICMP与IP位于同一层,它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。

5. TCP和UDP的端口结构

TCP和UDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。

两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:

源IP地址 发送包的IP地址。

目的IP地址 接收包的IP地址。

源端口 源系统上的连接的端口。

目的端口 目的系统上的连接的端口。

端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25、Xwindows使用6000。这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。

posted @ 2010-09-25 17:39 doublezxh 阅读(86) | 评论 (0)编辑 收藏
shell入门

*Shell是什么?
  任何发明都具有供用户使用的界面。UNIX供用户使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要强大的多)。 Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。

  为了不同的需要,UNIX提供了不同的Shell。现在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)为例,一步步的领略UNIX Shell的强大功能,占先其强大魅力,达到更方便灵活的管理、应用UNIX的目的。

  1.UNIX内核和Shell的交互方法

  启动UNIX时,程序UNIX(内核)将被调入计算机内存,并一直保留在内存中直到机器关闭。在引导过程中,程序 init将进入后台运行一直到机器关闭。该程序查询文件/etc/inittab,该文件列出了连接终端的各个端口及其特征。当发现一个活动的终端时,init程序调用getty程序在终端上显示login等登陆信息。(username和passwd),在输入密码后, getty调用login进程,该进程根据文件/etc/passwd的内容来验证用户的身份。若用户通过身份验证,login进程 把用户的home目录设置成当前目录并把控制交给一系列setup程序。setup程序可以是指定的应用程序,通常setup程序 为一个Shell程序,如:/bin/sh 即Bourne Shell(command出来了,呵呵)。

  得到控制后,Shell程序读取并执行文件/etc/.profile以及.profile。这两个文件分别建立了系统范围内的和 该用户自己的工作环境。最后Shell显示命令提示符,如$。(这是以bsh为例,若是csh,为.cshrc,ksh为.kshrc,bash为.bashrc等等)    

  注:(不妨把/etc/.profile和.profile看成DOS的autoexec.bat 或 config.sys文件)

  当shell退出时,内核把控制交给init程序,该程序重新启动自动登陆过程。有两种方法使shell退出,一是用户执行exit命令,二是 内核(例如root用kill命令)发出一个kill命令结束shell进程。shell退出后,内核回收用户及程序使用的资源。

  用户登陆后,用户命令同计算机交互的关系为:命令进程--->Shell程序--->UNIX内核--->计算机硬件。当用户输入一个命令,如$ls, Shell将定位其可执行文件/bin/ls并把其传递给内核执行。内核产生一个新的子进程调用并执行/bin/ls。当程序执行完毕后,内核取消 该子进程并把控制交给其父进程,即Shell程序。例如执行:

    $ps

    该命令将会列出用户正在执行的进程,即Shell程序(下来详细说说,别急现在)和ps程序。若执行:

    $sleep 10 &
    $ps

  其中第一条命令将产生一个在后台执行的sleep子进程。ps命令执行时会显示出该子进程。

  每当用户执行一条命令时,就会产生一个子进程。该子进程的执行与其父进程或Shell完全无关,这样可以使Shell去做其他工作。(Shell只是把用户的意图告诉内核,然后该干嘛干嘛:)) 现在windows有个计划任务(在固定的时间,日期自动执行某任务),其实UNIX很早就有这个功能了,也就是所谓的Shell的自动执行。一些UNIX 资源,如cron可以自动执行Shell程序而无需用户的参与,(这个功能好象在/var/spool/crotab目录里)。 Crontab 程序对于系统管理员来说是非常有用的。Cron 服务用于计划程序在特定时间(月、日、周、时、分)运行。我们以root的crontab 为例。根用户的 crontab 文件放在 /var/spool/crontab/root 中,其格式如下:

  (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   /usr/bin/updatedb
      1. 分钟 (0-60)
      2. 小时 (0-23)
      3. 日 (1-31)
      4. 月 (1-12)
      5. 星期 (1-7)
      6. 所要运行的程序
  2.Shell的功能和特点
  1>命令行解释
  2>使用保留字
  3>使用Shell元字符(通配符)
  4>可处理程序命令
  5>使用输入输出重定向和管道
  6>维护一些变量
  7>运行环境控制
  8>支持Shell编程

  对于"命令行解释"就不多说了,就是在shell提示符(例如:"$","%","#"等)后输入一行unix命令,Shell将接收用户的输入。

  "使用保留字":Shell有一些具有特殊意义的字,例如在Shell脚本中,do,done,for等字用来控制循环操作,if,then等控制条件操作。 保留字随Shell环境的不同而不同。

  "通配符":* 匹配任何位置
       ? 匹配单个字符
       [] 匹配的字符范围或列表 例如:
       
          $ls [a-c]*
         
          将列出以a-c范围内字符开头的所有文件
          $ls [a,m,t]*
         将列出以e,m或t开头的所有文件

  "程序命令" :当用户输入命令后,Shell读取环境变量$path(一般在用户自己的.profile中设置),该变量包含了命令可执行文件可能存在的目录列表。 shell从这些目录中寻找命令所对应的可执行文件,然后将该文件送给内核执行。

  "输入输出重定向及管道" :重定向的功能同DOS的重定向功能:

     ">" 重定向输出
     "<" 重定向输入

  而管道符号,是unix功能强大的一个地方,符号是一条竖线:"|",用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2,例如:

    $ls -s|sort -nr|pg

  该命令列出当前目录中的所有文件,并把输出送给sort命令作为输入,sort命令按数字递减的顺序把ls的输出排序。然后把排序后的 内容传送给pg命令,pg命令在显示器上显示sort命令排序后的内容。

  "维护变量" :Shell可以维护一些变量。变量中存放一些数据供以后使用。用户可以用"="给变量赋值,如:

         $lookup=/usr/mydir

该命令建立一个名为lookup的变量并给其赋值/usr/mydir,以后用户可以在命令行中使用lookup来代替/usr/mydir,例如:          
         $echo $lookup
         结果显示:/usr/mydir

         为了使变量能被子进程使用,可用exprot命令,例如:

         $lookup=/usr/mydir
         $export lookup

  "运行环境控制" :当用户登陆启动shell后,shell要为用户创建一个工作的环境,如下:

  1>当login程序激活用户shell后,将为用户建立环境变量。从/etc/profile和.profile文件中读出,在这些文件中一般都用$TERM 变量设置终端类型,用$PATH变量设置Shell寻找可执行文件的路径。

  2>从/etc/passwd文件或命令行启动shell时,用户可以给shell程序指定一些参数,例如"-x",可以在命令执行前显示该命令及其参数。后面详细介绍这些参数。

  "shell编程" :本文主要介绍的内容。

  shell本身也是一种语言(*可以先理解为unix命令的组合,加上类C的条件,循环等程序控制语句,类似dos批处理,但要强大的多),用户可以 通过shell编程(脚本,文本文件),完成特定的工作。

SHELL变量

  下面我们详细的介绍Bourne Shell的编程:

  自从贝尔实验室设计了Bourne Shell。从那时起许多厂商根据不同的硬件平台设计了许多版本得unix。但在众多版本的unix中,Bourne Shell 一直保持一致。
  1>Bsh的启动:用户在登陆后,系统根据文件/etc/passwd中有关该用户的信息项启动Shell。例如某用户在passwd中 的信息项为:

    ice_walk:!:411:103:Imsnow ,ice_walk:/home/ice_walk:/bin/bsh

  则表明,用户名是ice_walk等信息,在最后一项"/bin/bsh"表明用户的sh环境类型是bsh,于是系统启动之。在启动或执行(包括下面我们要讲 的shell程序--脚本)过程中可以使用以下一些参数,我们一一说明:

  -a 将所有变量输出
  -c "string"从string中读取命令
  -e 使用非交互式模式
  -f 禁止shell文件名产生
  -h 定义
  -i 交互式模式
  -k 为命令的执行设置选项
  -n 读取命令但不执行
  -r 受限模式
  -s 命令从标准输入读取
  -t 执行一命令,然后退出shell
  -u 在替换时,使用未设置的变量将会出错
  -v 显示shell的输入行
  -x 跟踪模式,显示执行的命令
许多模式可以组合起来用,您可以试试了,但-ei好象不行,你说why呢?

  使用set可以设置或取消shell的选项来改变shell环境。打开选项用"-",关闭选项用"+",多数unix允许打开或关闭a、f、e、h、k、n、 u、v和x选项。若显示Shell中已经设置的选项,执行:

    $echo $-

  Bsh中每个用户的home目录下都有一个.profile文件,可以修改该文件来修改shell环境。为了增加一个可执行文件的路径(例如/ice_walk/bin), 可以把下面代码加入.profile中

    PATH=$PATH:/ice_walk/bin;exprot PATH

   .profile中shell的环境变量意思如下:

    CDPATH 执行cd命令时使用的搜索路径
    HOME 用户的home目录
    IFS 内部的域分割符,一般为空格符、制表符、或换行符
    MAIL 指定特定文件(信箱)的路径,有UNIX邮件系统使用
    PATH 寻找命令的搜索路径(同dos的config.sys的 path)
    PS1 主命令提示符,默认是"$"
    PS2 从命令提示符,默认是">"
    TERM 使用终端类型

  2>Bsh里特殊字符及其含义

  在Bsh中有一组非字母字符。这些字符的用途分为四类:作为特殊变量名、产生文件名、数据或程序控制以及引用和逃逸字符控制。他们 可以让用户在Shell中使用最少的代码完成复杂的任务。

     *> Shell变量名使用的特殊字符
        $# 传送给命令Shell的参数序号
        $- 在Shell启动或使用set命令时提供选项
        $? 上一条命令执行后返回的值
        $$ 当前shell的进程号
        $! 上一个子进程的进程号
        $@ 所有的参数,每个都用双括号括起
        $* 所有参数,用双括号括起
        $n 位置参数值,n表示位置
        $0 当前shell名
     *>产生文件名的特殊字符
        包括"*","?","[]",上面讲过,不再多说。
     *>数据或程序控制使用的特殊字符
        >(file) 输出重定向到文件中(没有文件则创建,有则覆盖)
        >>(file) 输出重定向到文件中(没有则创建,有则追加到文件尾部)
        <(file) 输入重定向到文件
        ; 命令分割符
        | 管道符
        & 后台运行(例如:sleep 10 &)
        ` ` 命令替换,重定向一条命令的输出作为另一命令的参数
     *>对于引用或逃逸的特殊字符

  Bsh用单引号' '和双引号" "将特殊字符或由空白分隔的字引用起来组成一个简单的数据串.使用单引号和双引号的区别是双引号中的内容可进行参数和变量替换.逃逸字符也一样.

        $echo "$HOME $PATH"
         结果显示$/u/ice_walk/bin:/etc:/usr/bin
        而$echo '$HOME $PATH' 结果显示$HOME $PATH

  shell的逃逸符是一个"",表示其后的字符不具有特殊的含义或不是shell的函数

        $echo $HOME $PATH
        结果显$$HOME /bin:/etc:/usr/bin:

3>Bsh的变量

  前面我们在多个地方引用了变量,当Shell遇到一个"$"符时(没有被引用或逃逸),它将认为其后为一变量。不论该变量是环境变量还是用户自定义的变量,在命令行中变量名要被变量值替换。例如命令:ls $HOME将列出变量HOME对应目录下的文件。 用户可以在命令行中的任何地方进行变量替换。包括命令名本身,例如:

    $dir=ls
    $$dir f*

  将列出以f开头的文件。

  现在详细的介绍下Bsh的变量。Bsh中有四类变量:用户定义的变量、位置变量(shell参数)、预定义变量及环境变量。

  用户定义的变量:

  用户定义的变量由字母和下划线组成,并且变量名的第一个字符不能为数字(0~9)。与其他UNIX名字一样,变量名是大小写敏感的。用户可以在命令行上用"="给变量赋值,例如:

    $NAME=ice_walk

  给变量NAME赋值为ice_walk,在应用变量NAME的时候,在NAME前加"$"即可,前面已说,不再废话(别说我废话多,关键是没当过老师:()。可以用变量和其他字符组成新的字,例如:

    $SUN=sun
    $echo ${SUN}day

  在应用shell变量时候,可以在变量名字两边$后面加上{},以更加清楚的显示给shell,哪个是真正的变量,以实现字符串的合并等功能。
 
  结果显示:sunday(注意不能echo $SUNday,因为SUNday变量没定义,读者试下执行结果) 用户也可以在命令行上同时对多个变量赋值,赋值语句之间用空格分开:

    $X=x Y=y

    注意变量赋值是从右到左进行的

    $X=$Y Y=y
    X的值是y
    $X=z Y=$Z

    Y的值是空(变量未赋值时,shell不报错,而是赋值为空)

  用户可以使用"unset <变量>"命令清除给变量赋的值
  用户使用变量时要在其前面加一"$"符,使变量名被变量值所替换。Bsh可以进行变量的条件替换,即只有某种条件发生时才进行替换。替换条件放在一对大括号{}中,如:

    ${variable: -value} variable是一变量值,value是变量替换使用的默认值

    $echo Hello $UNAME
    结果显示:Hello
    $echo Hello ${UNAME: -there}
    结果显示:Hello there
    $echo $UNAME
    结果显示: (空)
    $UNAME=John
    $echo Hello ${UNAME: -there}
    结果显示:Hello John

  可以看出,变量替换时将使用命令行中定义的默认值,但变量的值并没有因此而改变。另外一种替换的方法是不但使用默认值进行替换,而且将默认值赋给该变量。其形式如下:

    ${variable:=value}

  该形式在变量替换后同时把值value符给变量variable。

    $echo Hello $UNAME
    结果显示:Hello
    $echo Hello ${UNAME:=there}
    结果显示:Hello there
    $echo $UNAME
    结果显示:there
    $UNAME=John
    $echo Hello ${UNAME:-there}
    结果显示:Hello John

  变量替换的值也可以是` `括起来的命令:

    $USERDIR={$Mydir: -`pwd`}

  第三种变量的替换方法是只有当变量已赋值时才用指定值替换形式:

    ${variable: +value}

    只有变量variable已赋值时,其值才用value替换,否则不进行任何替换,例如:

    $ERROPT=A
    $echo ${ERROPT: +"Error tracking is acitive"}
    结果显示:Error tracking is acitive
    $ERROPT=
    $echo ${ERROPT: +"Error tracking is acitive"}
    结果显示: (空)

  我们还可以使用错误检查的条件进行变量替换:

    ${variable:?message}
当变量variable已设置时,正常替换。否则消息message将送到标准错误输出(若此替换出现在shell程序中,那么该程序将终止)。 例如:

    $UNAME=
    $echo $ {UNAME:?"UNAME HAS NOT BEEN SET"}
    结果显示:UNAME HAS NOT BEEN SET

    $UNAME=Stephanie
    $echo $ {UNAME:?"UNAME HAS NOT BEEN SET"}

    结果显示:Stephanie
    当没有指定message时,shell将显示一条默认的消息,例如:

    $UNAME=
    $echo $ {UNAME:?}
    结果显示:sh:UNAME:parameter null or not set

4>位置变量或Shell参数

  在shell解释用户的命令时,将把命令行的第一个字作为命令,而其他的字作为参数。当命令对应的可执行文件为Shell程序时,这些参数将作为位置变量传送给该程序。第一个参数记为$1,第二个为$2....第九个为$9。其中1到9是真正的参数名,"$"符只是用来标识变量的替换。

  位置变量$0指命令对应的可执行文件名。在后面将详细介绍位置变量。

  1.只读变量

  用户将变量赋值后,为了防止以后对该变量的修改,可以用以下命令将该变量设置为只读变量:

    readonly variable

  2.export命令

  shell执行一个程序时,首先为该程序建立一个新的执行环境,称为子shell。在Bourne Shell中变量都是局部的,即他们只在创建他们的Shell中有意义。用户可以用export命令让变量被其他子Shell识别。但某用户的变量是没法让其他用户使用的。

  当用户启动一个新shell时,该shell将使用默认的提示符。因为赋给变量PS1的值只在当前shell中有效。为了让子Shell使用当前Shell中定义的提示符号,可以使用export命令:

    $PS1="Enter command:"
    Enter command:export PS1
    Enter command:sh
    Enter command:

    此时变量PS1变成了全局变量。它可以被其子Shell使用。当变量被设置成全局的以后,将一直保持有效直到用户退出该变量所在的Shell。用户可以在文件.profile中给一个变量永久赋值。详见"规范Shell"。

基本语句

  从本节起,我们将详细介绍Shell程序设计的基本知识,通过编写Shell脚本,用户可以根据自己的需要有条件的或者重复的执行命令。通过Shell程序,可以把单个的UNIX命令组合成一个完全实用的工具,完成用户的任务。

  1>什么是Shell程序

  当用户在UNIX Shell中输入了一条复杂的命令,如:

    $ls -R /|greo myname |pg

  我们可以称用户在对Shell编程,当把这条语句写在一个文件里,并且符给该文件可执行权限,那么该文件就是我们传统上说的Shell程序。

  2>简单的Shell程序

  假设用户每天使用下述命令备份自己的数据文件:

    $cd /usr/icewalk;ls * |cpio -o > /dev/fd0

  我们可以把它写在一个文件,如:ba.sh中:

    $cat >ba.sh
    cd /usr/icewalk
    ls * |cpio -o > /dev/fd0
    ^D  (ctrl_d)

  程序ba.sh就是Shell脚本,用户可以用vi或其他编辑工具编写更复杂的脚本。

  此时用户备份文件只需要执行Shell程序ba.sh,执行时需在当前Shell中创建一个子Shell:

    $sh ba.sh

  程序sh与用户登陆时执行的Bourne Shell相同,但当Sh命令带参数ba.sh后,它将不再是一个交互式的Shell,而是直接从文件ba.sh中读取命令。

  执行ba.sh中命令的另一方法是给文件ba.sh执行权限:

    $chmod +x ba.sh

  此时,用户可以输入文件名ba.sh做为一个命令来备份自己的数据,需要注意的是,用这种方法执行命令的时候,文件ba.sh必须存在于环境变量$PATH所指定的路径上

posted @ 2010-09-25 17:32 doublezxh 阅读(142) | 评论 (0)编辑 收藏
linux 面试题

 

 

一.填空题:
1. 在Linux系统中,以 文件 方式访问设备 。
2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统。
3. Linux文件系统中每个文件用 i节点 来标识。
4. 全部磁盘块由四个部分组成,分别为引导块 、专用块 、 i节点表块 和数据存储块
5. 链接分为: 硬链接 和 符号链接
6. 超级块包含了i节点表 和 空闲块表 等重要的文件系统信息。
7. 某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限,则该八进制数为: 644 ,该文件属性是 目录
8. 前台起动的进程使用 Ctrl+c 终止。
9. 静态路由设定后,若网络拓扑结构发生变化,需由系统管理员修改路由的设置。
10. 网络管理的重要任务是: 控制 和 监控
11. 安装Linux系统对硬盘分区时,必须有两种分区类型: 文件系统分区 和 交换分区
13. 编写的Shell程序运行前必须赋予该脚本文件 执行 权限。
14. 系统管理的任务之一是能够在 分布式 环境中实现对程序和数据的安全保护、备份、恢复和更新。
15. 系统交换分区是作为系统 虚拟存储器 的一块区域

16. 内核分为 进程管理系统 、 内存管理系统 、 I/O管理系统 和文件管理系统 等四个子系统。
17. 内核配置是系统管理员在改变系统配置 硬件 时要进行的重要操作。
18. 在安装Linux系统中,使用netconfig程序对网络进行配置,该安装程序会一步步提示用户输入主机名、域名、域名服务器、IP地址、 网关地址 和 子网掩码 等必要信息。
19. 唯一标识每一个用户的是用户 ID 和用户名
20 . RIP 协议是最为普遍的一种内部协议,一般称为动态路由信息协议
21. 在Linux系统中所有内容都被表示为文件,组织文件的各种方法称为 文件系统
22. DHCP可以实现动态 IP 地址分配。
23. 系统网络管理员的管理对象是服务器、 用户 和服务器的进程 以及系统的各种资源。
24. 网络管理通常由监测、传输和管理三部分组成,其中管理部分是整个网络管理的中心。
25. 当想删除本系统用不上的 设备驱动程序 时必须编译内核,当内核不支持系统上的 设备驱动程序 时,必须对内核 升级 。
26 Ping命令可以测试网络中本机系统是否能到达 一台远程主机 ,所以常常用于测试网络的 连通性 。
27. vi编辑器具有两种工作模式: 命令模式 和 输入模式 。
28. 可以用ls –al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段,其中第一段占 1 位,表示 文件类型 ,第二段占3位,表示 文件所有者 对该文件的权限。
29. 进程与程序的区别在于其动态性,动态的产生和终止,从产生到终止进程可以具有的基本状态为: 运行态 、 就绪态 和 等待态(阻塞态) 。
30. DNS实际上是分布在internet上的主机信息的数据库,其作用是实现 IP地址和主机名 之间的转换。
31. Apache是实现WWW服务器功能的应用程序,即通常所说的“浏览web服务器”,在服务器端 为用户提供浏览 web服务 的就是apache应用程序。
32. 在Linux系统上做备份可以有两种类型:系统备份 和 用户备份 。其中前者是指对 操作系统 的备份,后者是指对 应用程序和用户文件的备份。
33. CD-ROM标准的文件系统类型是 iso9660 。
34. 当lilo.conf配置完毕后,使之生效,应运行的命令及参数是 lilo 。
35. 在使用ls命令时,用八进制形式显示非打印字符应使用参数 -b 。
36. Linux使用支持Windows 9.x/2000长文件名的文件系统的类型是 vfat 。
37. 设定限制用户使用磁盘空间的命令是 quota 。
38 在Linux系统中,用来存放系统所需要的配置文件和子目录的目录是 /etc 。
39. 硬连接只能建立对 文件 链接。符号链接可以跨不同文件系统创建。
40. 套接字文件的属性位是 s 。
41. 结束后台进程的命令是 kill 。
42. 进程的运行有两种方式,即 独立运行和使用父进程运行 。
43. Links分为 硬链接和符号链接 。
44. 在超级用户下显示Linux系统中正在运行的全部进程,应使用的命令及参数是 ps -aux
45. 管道文件的属性位是 p 。
46. 将前一个命令的标准输出作为后一个命令的标准输入,称之为 管道 。
47. 为脚本程序指定执行权的命令及参数是 chmod a+x filename
48. 进行远程登录的命令是 telnet 。
49. 欲发送10个分组报文测试与主机abc.tuu.edu.cn的连通性,应使用的命令和参数是: ping abc.tuu.edu.cn –c 10 。
50. DNS服务器的进程命名为named,当其启动时,自动装载 /etc目录下的 named.conf 文件中定义的DNS分区数据库文件。
51. Apache服务器进程配置文件是 httpd.conf

52.在 Linux系统中,压缩文件后生成后缀为.gz文件的命令是 gzip 。
53. 在用vi编辑文件时,将文件内容存入test.txt文件中,应在命令模式下键入 :w test.txt 。
54 可以在标准输出上显示整年日历的命令及参数是 cal -y 。
55. 在shell编程时,使用方括号表示测试条件的规则是:方括号两边必须有 空格 。
56. 检查已安装的文件系统/dev/had5是否正常,若检查有错,则自动修复,其命令及参数是
fsck –a /dev/had5 。
57. 在Windows9.x环境下共享Unix/Linux中的用户目录的一个工具是 Samba服务器 。
58. 系统管理员的职责是进行系统资源管理、系统性能管理、设备管理、安全管理和 系统性能监测 。
59 在Linux系统中,测试DNS服务器是否能够正确解析域名的的客户端命令,使用命令 nslookup
60. 在Linux系统下,第二个IDE通道的硬盘(从盘)被标识为 hdb 。
61. 当系统管理员需升级内核版本和改变系统硬件配置时,应 重新编译内核 。
62. 如果只是要修改系统的IP地址,应修改 /etc/rc.d/rc.inet1 配置文件。
63. 当LAN内没有条件建立DNS服务器,但又想让局域网内的用户可以使用计算机名互相访问时,应配置 /etc/hosts 文件。
64. 在vi编辑环境下,使用 Esc键 进行模式转换。
65. Slackware Linux 9.0通常使用 ext3 文件系统,系统的全部磁盘块由 四 部分组成。
66. 将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz文件,并将此文件保存到/home目录下,实现此任务的tar命令格式 tar zcvf /home/wang.tar.gz /home/stud1/wang 。
67. 管道就是将前一个命令的 标准输出 作为后一个命令的 标准输入 。
68. 在使用手工的方法配置网络时,可通过修改 /etc/HOSTNAME 文件来改变主机名,若要配置该计算机的域名解析客户端,需配置 /etc/resolv.conf 文件。
69. 启动进程有手动启动和调度启动两种方法,其中调度启动常用的命令为 at 、 batch 和 crontab
70. test.bns.com.cn的域名是 bns.com.cn ,
如果要配置一域名服务器,应在 named.conf 文件中定义DNS数据库的工作目录。
71. Sendmail邮件系统使用的两个主要协议是: SMTP 和 POP ,前者用来发送邮件,后者用来接收邮件。
72. DHCP是动态主机配置协议的简称,其作用是:为网络中的主机分配IP地址
73. 目前代理服务器使用的软件包有很多种,教材中使用的是 squid 。
74. rm命令可删除文件或目录,其主要差别就是是否使用递归开关 -r或-R 。
75. mv 命令可以移动文件和目录,还可以为文件和目录重新命名。
76. 路由选择协议(RIP)的跳数表示到达目的地之前必须通过的 网关 数,RIP接受的最长距离是 15跳 。
77. ping命令用于测试网络的连通性,
ping命令通过 ICMP 协议(internet控制信息协议)来实现。
78. nfs 协议用于实现Unix(/linux)主机之间的文件系统共享。
79. 在Linux操作系统中,设备都是通过特殊的 文件 来访问。
80. shell不仅是 用户命令的解释器 ,它同时也是一种功能强大的编程语言。 bash是Linux的缺省shell。
81. 用 >;>; 符号将输出重定向内容附加在原文的后面。
82. 增加一个用户的命令是:adduser 或useradd 。
83 进行字符串查找,使用grep命令。
84. 使用 * 每次匹配若干个字符。
85. /sbin 目录用来存放系统管理员使用的管理程序。

二.单项选择题:
1. 下面的网络协议中,面向连接的的协议是: A 。
A 传输控制协议 B 用户数据报协议 C 网际协议 D 网际控制报文协议
2. 在/etc/fstab文件中指定的文件系统加载参数中, D 参数一般用于CD-ROM等移动设备。
A defaults B sw C rw和ro D noauto
3. Linux文件权限一共10位长度,分成四段,第三段表示的内容是 C 。
A 文件类型 B 文件所有者的权限
C 文件所有者所在组的权限 D 其他用户的权限
4. 终止一个前台进程可能用到的命令和操作 B 。
A kill B <CTRL>;+C C shut down D halt
5.在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是 D 。
A -m B -d C -f D -p
6. 下面关于i节点描述错误的是 A
。(inode是一种数据结构,vfs中描述文件的相关参数??)
A i节点和文件是一一对应的
B i节点能描述文件占用的块数
C i节点描述了文件大小和指向数据块的指针
D 通过i节点实现文件的逻辑结构和物理结构的转换
7. 一个文件名字为rr.Z,可以用来解压缩的命令是: D 。
A tar B gzip C compress D uncompress
8. 具有很多C语言的功能,又称过滤器的是 C 。
A csh
B tcsh
C awk  (
awk详解
D sed
9. 一台主机要实现通过局域网与另一个局域网通信,需要做的工作是 C 。

A 配置域名服务器
B 定义一条本机指向所在网络的路由
C 定义一条本机指向所在网络网关的路由
D 定义一条本机指向目标网络网关的路由
10. 建立动态路由需要用到的文件有 D
A /etc/hosts B /etc/HOSTNAME C /etc/resolv.conf D /etc/gateways
11. 局域网的网络地址192.168.1.0/24,局域网络连接其它网络的网关地址是192.168.1.1。主机192.168.1.20访问172.16.1.0/24网络时,其路由设置正确的是 B
A route add –net 192.168.1.0 gw 192.168.1.1 netmask 255.255.255.0 metric 1
B route add –net 172.16.1.0 gw 192.168.1.1 netmask 255.255.255.255 metric 1
C route add –net 172.16.1.0 gw 172.16.1.1 netmask 255.255.255.0 metric 1
D route add default 192.168.1.0 netmask 172.168.1.1 metric 1
12. 下列提法中,不属于ifconfig命令作用范围的是 D 。
A 配置本地回环地址 B 配置网卡的IP地址
C 激活网络适配器 D 加载网卡到内核中
13. 下列关于链接描述,错误的是 B 。
A 硬链接就是让链接文件的i节点号指向被链接文件的i节点
B 硬链接和符号连接都是产生一个新的i节点
C 链接分为硬链接和符号链接 D 硬连接不能链接目录文件
14. 在局域网络内的某台主机用ping命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是 C。
A 主机IP设置有误
B 没有设置连接局域网的网关
C 局域网的网关或主机的网关设置有误
D 局域网DNS服务器设置有误
15. 下列文件中,包含了主机名到IP地址的映射关系的文件是: B 。
A /etc/HOSTNAME B /etc/hosts C /etc/resolv.conf D /etc/networks
16. 不需要编译内核的情况是 D 。
A 删除系统不用的设备驱动程序时 B 升级内核时
C 添加新硬件时 D 将网卡激活
17. 在shell中变量的赋值有四种方法,其中,采用name=12的方法称 A 。
A 直接赋值 B使用read命令
C 使用命令行参数 D使用命令的输出
18. D 命令可以从文本文件的每一行中截取指定内容的数据。
A cp B dd C fmt D cut
19. 下列不是Linux系统进程类型的是 D 。
A 交互进程 B 批处理进程 C 守护进程 D 就绪进程(进程状态)
20.配置Apache 1.3.19服务器需要修改的配置文件为___A______
A httpd.conf B access.conf C srm.conf D named.conf
21. 内核不包括的子系统是 D 。
A 进程管理系统 B 内存管理系统 C I/O管理系统 D硬件管理系统
22. 在日常管理中,通常CPU会影响系统性能的情况是: A 。
A CPU已满负荷地运转 B CPU的运行效率为30%
C CPU的运行效率为50% D CPU的运行效率为80%
23. 若一台计算机的内存为128MB,则交换分区的大小通常是 C 。
A 64MB B 128MB C 256MB D 512MB
24. 在安装Linux的过程中的第五步是让用户选择安装方式,如果用户希望安装部分组件(软件程序),并在选择好后让系统自动安装,应该选择的选项是 D 。
A full B expert C newbie D menu
25. Linux有三个查看文件的命令,若希望在查看文件内容过程中可以用光标上下移动来查看文件内容,应使用 C 命令。
A cat B more C less D menu
26. 下列信息是某系统用ps –ef命令列出的正在运行的进程, D 进程是运行Internet超级服务器,它负责监听Internet sockets上的连接,并调用合适的服务器来处理接收的信息。
A root 1 4.0 0.0 344 204? S 17:09 0:00 init
B root 2 0.0 0.1 2916 1520? S 17:09 0:00 /sbin/getty
C root 3 0.0 0.2 1364 632? S 17:09 0:00 /usr/sbin/syslogd
D root 4 0.0 1344 1204? S 17:09 0:10 /usr/sbin/inetd
27.在TCP/IP模型中,应用层包含了所有的高层协议,在下列的一些应用协议中, B 是能够实现本地与远程主机之间的文件传输工作。
A telnet B FTP C SNMP D NFS
28.当我们与某远程网络连接不上时,就需要跟踪路由查看,以便了解在网络的什么位置出现了问题,满足该目的的命令是 C 。
A ping B ifconfig C traceroute D netstat
29.对名为fido的文件用chmod 551 fido 进行了修改,则它的许可权是 D 。
A -rwxr-xr-x B -rwxr--r-- C -r--r--r-- D -r-xr-x—x
30. 在i节点表中的磁盘地址表中,若一个文件的长度是从磁盘地址表的第1块到第11块,则该文件共占有 B 块号。
A 256 B 266 C 11 D 256×10
(??)31. 用ls –al 命令列出下面的文件列表, D 文件是符号连接文件。
A -rw-rw-rw- 2 hel-s users 56 Sep 09 11:05 hello
B -rwxrwxrwx 2 hel-s users 56 Sep 09 11:05 goodbey
C drwxr--r-- 1 hel users 1024 Sep 10 08:10 zhang

D lrwxr--r-- 1 hel users 2024 Sep 12 08:12 cheng
32. DNS域名系统主要负责主机名和 A 之间的解析。
A IP地址 B MAC地址 C 网络地址 D 主机别名
33. WWW服务器是在Internet上使用最为广泛,它采用的是 B 结构。
A 服务器/工作站 B B/S C 集中式 D 分布式
34.Linux系统通过 C 命令给其他用户发消息。
A less B mesg y C write D echo to

[ 注:mesg [y|n] 所有使用者 决定是否允许其他人传讯息到自己的终端机介面 ]


35.NFS是 C 系统。
A 文件 B 磁盘 C 网络文件 D 操作
36. B 命令可以在Linux的安全系统中完成文件向磁带备份的工作。
A cp B tr C dir D cpio

[注:如果用 echo $PATH 或者 echo $LD_LIBRARY_PATH 等类似的命令来显示路径信息的话,我们看到的将会是一大堆用冒号连接在一起的路径, tr 命令可以把这些冒号转换为回车,这样,这些路径就具有很好的可读性了:
echo $PATH | tr ":" "\n"
]
37.Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于外部设备文件,一般应将其放在 C 目录中。
A /bin B /etc C /dev D /lib
38.在重新启动Linux系统的同时把内存中的信息写入硬盘,应使用 D 命令实现。
A # reboot B # halt C # reboot D # shutdown –r now
39.网络管理具备以下几大功能:配置管理、 A 、性能管理、安全管理和计费管理等。
A 故障管理 B 日常备份管理 C 升级管理 D 发送邮件
40.关于代理服务器的论述,正确的是 A 。
A 使用internet上已有的公开代理服务器,只需配置客户端。
B 代理服务器只能代理客户端http的请求。
C 设置好的代理服务器可以被网络上任何主机使用。
D 使用代理服务器的客户端没有自己的ip地址。
41.关闭linux系统(不重新启动)可使用命令 B 。
A Ctrl+Alt+Del B halt C shutdown -r now D reboot
42.实现从IP地址到以太网MAC地址转换的命令为: C 。
A ping B ifconfig C arp D traceroute
43.在vi编辑器中的命令模式下,键入 B 可在光标当前所在行下添加一新行。
A <a>; B <o>; C <I>; D A
44.在vi编辑器中的命令模式下,删除当前光标处的字符使用 A 命令。
A <x>; B <d>;<w>; C <D>; D <d>;<d>;
45.在vi编辑器中的命令模式下,重复上一次对编辑的文本进行的操作,可使用 C 命令。
A 上箭头 B 下箭头 C <.>; D <*>;
46.用命令ls -al显示出文件ff的描述如下所示,由此可知文件ff的类型为 A 。
-rwxr-xr-- 1 root root 599 Cec 10 17:12 ff
A 普通文件 B 硬链接 C 目录 D 符号链接
47.删除文件命令为: D 。
A mkdir B rmdir C mv D rm
48.在下列的名称中,不属于DNS服务器类型的是:____C_____
A Primary Master Server B Secondary Master Server
C samba D Cache_only Server
49.网络管理员对WWW服务器进行访问、控制存取和运行等控制,这些控制可在 A 文件中体现。
A httpd.conf B lilo.conf C inetd.conf D resolv.conf
50.邮件转发代理也称邮件转发服务器,它可以使用SMTP协议,也可以使用 C 协议。
A FTP B TCP C UUCP D POP
51.启动samba服务器进程,可以有两种方式:独立启动方式和父进程启动方式,其中前者是在 C 文件中以独立进程方式启动。
A /usr/sbin/smbd B /usr/sbin/nmbd C rc.samba D /etc/inetd.conf
52.DHCP是动态主机配置协议的简称,其作用是可以使网络管理员通过一台服务器来管理一个网络系统,自动地为一个网络中的主机分配___D______地址。
A 网络 B MAC C TCP D IP
53.为了保证在启动服务器时自动启动DHCP进程,应将 A文件中的dhcpd=no改为dhcpd=yes。
A rc.inet1 B lilo.conf C inetd.conf D httpd.conf

[注: 英文原义:RC

中文释义:含有程序(应用程序甚至操作系统)启动指令的脚本文件]

注解:这一文件在操作系统启动时会自动执行,它含有要运行的指令(命令或其它脚本)列表。


54.对文件进行归档的命令为 D 。
A dd B cpio C gzip D tar
55.改变文件所有者的命令为 C 。
A chmod B touch C chown D cat
56.在给定文件中查找与设定条件相符字符串的命令为: A 。
A grep B gzip C find D sort
57.建立一个新文件可以使用的命令为 D 。
A chmod B more C cp D touch(指令改变档案的时间记录。)
58.在下列命令中,不能显示文本文件内容的命令是: D 。
A more B less C tail D join
59.在使用匿名登录ftp时,用户名为 B 。
A users B anonymous C root D guest
60.在实际操作中,想了解命令logname 的用法,可以键入 D 得到帮助。
A logname --man B logname/? C help logname D logname --help
61.如果LILO被安装在MBR,使用 A 命令即可卸载LILO。
A lilo –u B lilo –c C lilo –v D lilo -V
62.当用命令ls –al查看文件和目录时,欲观看卷过屏幕的内容,应使用组合键 D 。
A Shift+Home B Ctrl+ PgUp C Alt+ PgDn D Shift+ PgUp
63.mc是UNIX风格操作系统的 C 。
A 文件编辑器/程序编译器 B 配置网络的窗口工具
C 目录浏览器/文件管理器 D Samba服务器管理工具
64.i节点是一个 D 长的表,表中包含了文件的相关信息。

A 8字节 B 16字节 C 32字节 D 64字节
65.文件权限读、写、执行的三种标志符号依次是 A 。
A rwx B xrw C rdx D srw
66.
Linux 文件名的长度不得超过 C 个字符。
A 64 B 128 C 256 D 512
67.进程有三种状态: C 。
A 准备态、执行态和退出态 B 精确态、模糊态和随机态
C 运行态、就绪态和等待态 D 手工态、自动态和自由态
68. 从后台启动进程,应在命令的结尾加上符号 A 。
A & B @ C # D $
69. B 不是邮件系统的组成部分。
A 用户代理 B 代理服务器 C 传输代理 D 投递代理
70.在Shell脚本中,用来读取文件内各个域的内容并将其赋值给Shell变量的命令是 D 。
A fold B join C tr D read
71.crontab文件由六个域组成,每个域之间用空格分割,其排列如下: B 。
A MIN HOUR DAY MONTH YEAR COMMAND
B MIN HOUR DAY MONTH DAYOFWEEK COMMAND
C COMMAND HOUR DAY MONTH DAYOFWEEK
D COMMAND YEAR MONTH DAY HOUR MIN

crontab命令:实现程序定时运行


72.用ftp进行文件传输时,有两种模式: C 。
A Word和binary B .txt和Word Document
C ASCII和binary D ASCII和Rich Text Format
73.某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限为 D 。
A 467 B 674 C 476 D 764
74.在DNS系统测试时,设named进程号是53,命令 D 通知进程重读配置文件。
A kill –USR2 53 B kill –USR1 53 C kill -INT 63 D kill –HUP 53
75.Apache服务器默认的接听连接端口号是 C 。
A 1024 B 800 C 80 (http)D 8
76.PHP和MySQL的联合使用解决了 C 。
A 在Proxy上处理数据库的访问问题 B 在WWW服务器上处理黑客的非法访问问题
C 在WWW服务器上处理数据库的访问问题
D 在Sendmail邮件系统上处理数据库的访问问题
77.OpenSSL是一个 A 。
A 加密软件 B 邮件系统 C 数据库管理系统 D 嵌入式脚本编程语言
78.Samba服务器的配置文件是 D 。
A httpd.conf B inetd.conf C rc.samba D smb.conf
79.关于DNS服务器,叙述正确的是 D 。
A DNS服务器配置不需要配置客户端
B 建立某个分区的DNS服务器时只需要建立一个主DNS服务器
C 主DNS服务器需要启动named进程,而辅DNS服务器不需要
D DNS服务器的root.cache文件包含了根名字服务器的有关信息
80.退出交互模式的shell,应键入 C 。
A <Esc>; B ^q C exit D quit
81.将Windows C:盘(hda1)安装在Linux文件系统的/winsys目录下,命令是 B 。
A
root@l04.edu.cn:~#mount dev/had1 /winsys
B
root@l04.edu.cn:~#mount /dev/had1 /winsys
C
root@l04.edu.cn:~#mount /dev/had1 winsys
D
root@l04.edu.cn:~#mount dev/had1 winsys
82.设超级用户root当前所在目录为:/usr/local,键入cd命令后,用户当前所在目录为 B 。
A /home B /root C /home/root D /usr/local
83.字符设备文件类型的标志是 B 。
A p B c C s D l
84.将光盘CD-ROM(hdc)安装到文件系统的/mnt/cdrom目录下的命令是 C 。
A mount /mnt/cdrom B mount /mnt/cdrom /dev/hdc
C mount /dev/hdc /mnt/cdrom D mount /dev/hdc
85.将光盘/dev/hdc卸载的命令是 C 。
A umount /dev/hdc B unmount /dev/hdc
C umount /mnt/cdrom /dev/hdc D unmount /mnt/cdrom /dev/hdc
86.在/home/stud1/wang目录下有一文件file,使用 D 可实现在后台执行命令,此命令将file文件中的内容输出到file.copy文件中。
A cat file >;file.copy B cat >;file.copy C cat file file.copy & D cat file >;file.copy &
87.在DNS配置文件中,用于表示某主机别名的是: B 。
A NS B CNAME C NAME D CN
88.可以完成主机名与IP地址的正向解析和反向解析任务的命令是: A 。
A nslookup B arp C ifconfig D dnslook
89.下列变量名中有效的shell变量名是: C 。
A -2-time B _2$3 C trust_no_1 D 2004file
90.qmail是 B 。
A 收取邮件的协议 B 邮件服务器的一种 C 发送邮件的协议 D 邮件队列
92.已知某用户stud1,其用户目录为/home/stud1。分页显示当前目录下的所有文件的文件或目录名、用户组、用户、文件大小、文件或目录权限、文件创建时间等信息的命令是 D 。
A more ls –al B more –al ls C more < ls –al D ls –al | more
93.关于进程调度命令, B 是不正确的。at--定期执行程序的调度命令
A 当日晚11点执行clear命令,使用at命令:at 23:00 today clear

B 每年1月1日早上6点执行date命令,使用at命令:at 6am Jan 1 date
C 每日晚11点执行date命令,crontab文件中应为:0 23 * * * date
D 每小时执行一次clear命令,crontab文件中应为:0 */1 * * * clear
94.系统中有用户user1和user2,同属于users组。在user1用户目录下有一文件file1,它拥有644的权限,如果user2用户想修改user1用户目录下的file1文件,应拥有 B 权限。
A 744 B 664 C 646 D 746
??95.如果想配置一台匿名ftp服务器,应修改 C 文件。
A /etc/gateway B /etc/ftpservers C /etc/ftpusers D /etc/inetd.conf
96.Samba服务器的进程由B 两部分组成 。
A named和sendmail B smbd和nmbd C bootp和dhcpd D httpd和squid
97.要配置NFS服务器,在服务器端主要配置 C 文件。
A /etc/rc.d/rc.inet1 B /etc/rc.d/rc.M C /etc/exports D /etc/rc.d/rc.S
98.为保证在启动服务器时自动启动DHCP进程,应对 B 文件进行编辑。
A /etc/rc.d/rc.inet2 B /etc/rc.d/rc.inet1 C /etc/dhcpd.conf D /etc/rc.d/rc.S
99.在配置代理服务器时,若设置代理服务器的工作缓存为64MB,配置行应为 D 。
A cache 64MB B cache_dir ufs /usr/local/squid/cache 10000 16 256
C cache_ mgr 64MB D cache_ mem 64MB
100.安全管理涉及的问题包括保证网络管理工作可靠进行的安全问题和保护网络用户及网络管理对象问题。 C 属于安全管理的内容。
A 配置设备的工作参数 B 收集与网络性能有关的数据
C 控制和维护访问权限 D 监测故障
101.以下命令对中,正确的是: B 。
A ls和sl B cat和tac C more和erom D exit和tixe

cat是显示文件夹的命令,这个大家都知道,tac是cat的倒写,意思也和它是相反的。cat是从第一行显示到最后一行,而tac是从最后一行显示到第一行,而rev 则是从最后一个字符显示到第一个字符


102. B 命令是在vi编辑器中执行存盘退出。
A :q B ZZ C :q! D :WQ
103.下列关于/etc/fstab文件描述,正确的是 D 。
A fstab文件只能描述属于linux的文件系统 B CD_ROM和软盘必须是自动加载的
C fstab文件中描述的文件系统不能被卸载 D 启动时按fstab文件描述内容加载文件系统
104.通过文件名存取文件时,文件系统内部的操作过程是通过 C 。
A 文件在目录中查找文件数据存取位置。B 文件名直接找到文件的数据,进行存取操作。
C 文件名在目录中查找对应的I节点,通过I节点存取文件数据。
D 文件名在中查找对应的超级块,在超级块查找对应i节点,通过i节点存取文件数据
105.Linux将存储设备和输入/输出设备均看做文件来操作, C 不是以文件的形式出现。
A 目录 B 软链接 C i节点表 D 网络适配器
106.关于i节点和超级块,下列论述不正确的是 B 。
A i节点是一个长度固定的表 B 超级块在文件系统的个数是唯一的
C i节点包含了描述一个文件所必需的全部信息
D 超级块记录了i节点表和空闲块表信息在磁盘中存放的位置
107. D 设备是字符设备。
A hdc B fd0 C hda1 D tty1(A,B,C为块设备)
108. B 目录存放着Linux的源代码。
A /etc B /usr/src C /usr D /home
109.关于文件系统的安装和卸载,下面描述正确的是 A 。
A 如果光盘未经卸载,光驱是打不开的 B 安装文件系统的安装点只能是/mnt下
C 不管光驱中是否有光盘,系统都可以安装CD-ROM设备
D mount /dev/fd0 /floppy 此命令中目录/floppy是自动生成的
110. B 不是进程和程序的区别。
A 程序是一组有序的静态指令,进程是一次程序的执行过程
B 程序只能在前台运行,而进程可以在前台或后台运行
C 程序可以长期保存,进程是暂时的
D 程序没有状态,而进程是有状态的
111.文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下列命令正确的是 A 。
A chmod a+x g+w exer1 B chmod 765 exer1
C chmod o+x exer1 D chmod g+w exer1
112.有关归档和压缩命令,下面描述正确的是 C 。
A 用uncompress命令解压缩由compress命令生成的后缀为.zip的压缩文件
B unzip命令和gzip命令可以解压缩相同类型的文件
C tar归档且压缩的文件可以由gzip命令解压缩
D tar命令归档后的文件也是一种压缩文件
113.不是shell具有的功能和特点的是 C 。
A 管道 B 输入输出重定向 C 执行后台进程 D 处理程序命令
114.下列对shell变量FRUIT操作,正确的是: C 。
A 为变量赋值:$FRUIT=apple B 显示变量的值:fruit=apple
C 显示变量的值:echo $FRUIT D 判断变量是否有值:[ -f “$FRUIT” ]

posted @ 2010-09-25 17:30 doublezxh 阅读(190) | 评论 (0)编辑 收藏
shell编程基础

可用任何一种文字编辑器,如:emacs、vi 等来编写shell脚本,必须以
      #!/bin/sh开始   ---符号#!用来告诉系统执行该脚本的程序。
      要执行脚本须先使其可执行: chmod +x filename
      此后在该脚本所在目录下,输入./filename即可执行该脚本。
------------------------------------
一、变量赋值和引用
shell编程中,使用变量无需事先声明,同时变量名的命名遵循如下规则:
         1. 首个字符必须为字母(a-z,A-Z)
         2. 中间不能有空格,可以使用下划线( _ )
         3. 不能使用标点符合
         4. 不能使用bash里的关键字(可用help命令查看保留关键字)
给变量赋值: 变量名=值 # (Attention: Donot keep blank between the variable with the equal operator '=')
要取用一个变量值,$变量名 
                  #!/bin/sh
                  #对变量赋值;
                  a="hello world"     #等号两边均不能有空格存在
                  #打印变量a的值
                  echo "A is :" $a
有时候变量名可能会和其它文字混淆,比如: 
                   num =2       
                  echo  "this is the $numnd"       # 这是shell会去搜索变量numnd,实际上numnd变量并不存在
                  输出结果:this  is the
                  echo  "this is the ${num}nd"   # 这是shell会去搜索变量num
                  输出结果:this is the 2nd

shell脚本中有许多变量是系统自动设定的,我们将在用到这些变量时再做说明。除了只在脚本内有效的普通shell变量外,还有环境变量,即那些有export关键字处理过的变量。环境变量一般只在登录脚本中用到。

Shell里的流程控制
if 语句
                     if ......; then
                        .........
                  elif .......; then
                        ........
                   else
                        ........
                    fi
                     如:
                              #!/bin/sh
                              if  [ "$SHELL" = "/bin/bash" ]; then

                                    echo "your login shell is the bash (bourne again shell)"
                              else
                                    echo "your login shell is not bash but $SHELL"
                              fi
                     变量$SHELL包含有登录shell的名称,我们拿它和/bin/bash进行比较以判断当前使用的shell是否为bash。
                        
                  大多数情况下,可以使用测试命令来对条件进行测试,比如可以比较字符串、判断文件是否存在及是否可读等等...通常用"[]" 来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格。
                  [ -f"somefile" ] :判断是否是一个文件
                  [  -x"/bin/ls" ] : 判断/bin/ls是否存在并有可执行权限
                  [ -n "$var" ] : 判断$var变量是否有值
                  [ "$a"="$b" ] : 判断$a和$b是否相等

执行man test可以查看所有测试表达式可以比较和判断的类型。

 “与” && 和“或”|| 操作符
                  例一、 
                        [ -f "/etc/shadow" ] && echo "This computer uses shadow passwords"  # 表示如果/etc/shadow文件存在,则打印 "This computer uses shadow passwords" 
                  例二、
                        #!/bin/sh
                        mainfolder=/var/spool/mail/james
                        [ -r "$mainfolder" ] || {echo "Can not read $mailfolder" ; exit l; }
                        echo "$mailfolder has mail from :"
                        grep "^From " $mailfolder
                        #该脚本首先判断mailfolder是否可读,如果可读则打印该文件中的"From" 一行。如果不可读则或操作生效,打印错误信息后脚本退出。使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。

case语句
可以用来匹配一个给定的字符串,而不是数字。
case ..... in
         ..... ) do something here ;;
esac
例如: smartzip 脚本,该脚本可以自动解压bzip,gzip 和zip 类型的压缩文件:
   #!/bin/sh
   
   ftype='file "$l"'
   case "$ftype" in                

         "$l : Zip archive"*)
            unzip "$l" ;;
         "$l : gzip compressed"*)
            gunzip "$l" ;;
         "$l : bzip2 compressed"*)
            bunzip2 "$l" ;;
         *) echo "File $l can not  be uncompressed with smartzip";;
         esac
# 该脚本使用了一个特殊变量$l ,该变量包含有传递给该脚本的第一个参数值。如运行: smartzip articles.zip ; $l 就是字符串 articles.zip

select语句
select 表达式是bash的一种扩展应用,擅长于交互式场合。用户可以从一组不同的值中进行选择:
select var in ....... ;do
      break;
done
      ...... now $var can be used ....
例如:
         #!/bin/sh                        #如果脚本运行出现 select :NOT Found 将#!/bin/sh 改为 #!/bin/bash
         echo "What is your favourite OS ?"
         select var in "Linux" "Gnu Hurd" "FreeBSD" "Other"; do
                  break;
         done
         echo "You have selected $var"
         该脚本运行结果如下:
               What is your favourite OS?
                1) Linux
                2) Gnu Hurd
                3) FreeBSD
                4)Other
               #? 1
               You have selected Linux
while/for循环
                  while .......; do
                           ........
                   done                  #关键字break用来跳出循环,而关键字continue则可以跳过一个循环的余下部分,直接跳到下一次循环中。
for循环会查看一个字符串表(字符串用空格分隔),并将其赋给一个变量:
            for var in .......; do
                  .............
            done
                                       Eg: 把A B C分别打印到屏幕上:
                                          #!/bin/sh
                                          for var in A B C ; do
                                                      echo "var is $var"
                                          done
                                       Eg: 实用的脚本showrpm,功能是打印一些RPM包的统计信息:
                                          #!/bin/sh
                                          # list a content summary of a number of RPM package
                                          # USAGE: showrpm  rpmfile1 rpmfile2 ......
                                          # EXAMPLE : showrpm  /cdrom/RedHat/RPMS/*.rpm
                                          for rpmpackage in $* ;  do            
                                          # 这里出现了第二个特殊变量 $* ,该变量包含有输入的所有命令行参数值。
                                                if [ -r "$rpmpackage" ];then

                                                      echo "======================== $rpmpackage ==========="
                                                      rpm -qi -p &rpmpackage
                                                else
                                                      echo "ERROR:cannot read file  $rpmpackage"
                                                fi
                                 done
Shell 里的一些特殊符号
引号
 在向程序传递任何参数之前,程序会扩展通配符和变量。这里所谓的扩展是指程序会把通配符(比如*)替换成适当的文件名,把变量替换成变量值。我们可以使用引号来防止这种扩展,先来看一个例子,假设在当前目录下有两个jpg文件:mail.jpg 和 tux.jpg

#!/bin/sh
echo *.jpg
运行结果为:
                        mail.jpg   tux.jpg
引号(单引号 和 双引号)可以防止通配符*的扩展:
#!/bin/sh
      echo  "*.jpg"
      echo  '*.jpg'
运行结果为:
               *.jpg
               *.jpg
其中单引号更严格一些,它可以防止任何变量扩展;而双引号可以防止通配符扩展但允许变量扩展;
            #!/bin/sh
            echo $SHELL
            echo "$SHELL "
            echo '$SHELL'
运行结果为:
            /bin/sh
            /bin/sh
           $SHELL
此外还有一种防止这种扩展的方法,即使用转义字符--反斜杠:\ 
            echo \*.jpg
            echo \$SHELL
运行结果:
            *.jpg
            $SHELL
Here documents
当要将几行文字传递给一个命令时,用here documents 是一种不错的方法。对每个脚本写一段帮助性的文字是很有用的,此时如果使用here documents就不必用echo函数一行行输出。Here document 以 << 开头,后面接上一个字符串,这个字符串还必须出现在here document的末尾。下例子我们对多个文件进行重命名,并且使用here documents 打印帮助:
#!/bin/sh
# we have less than 3 arguments. Print the help text:
if [ $# -lt 3 ] ; then
cat << HELP
ren -- renames a number of files using sed regular expressions USAGE: ren 'regexp' 'replacement' files....
EXAMPLE: rename all *.HTM files in *.html:
 ren 'HTM$' 'html' *.HTM
HELP
 exit 0
fi
OLD="$1"
NEW="$2"
# The shift command removes one argument from the list of
#command line arguments.
shift
shift
# $* contains now all the files:
for file in $*; do
 if [ -f "$file" ] ; then
  newfile='echo "$file" | sed "s/${OLD}/${NEW}/g"'
  if [ -f "$newfile" ]; then
   echo "ERROR: $newfile exists already"
  else
   echo "renaming $file to $newfile ..."
   mv "$file" "$newfile"
  fi
 fi
done
说明:第一个if表达式判断输入命令行参数是否小于3个(特殊变量$#表示包含参数的个数)。如果输入参数小于3个,则将帮助文字传递给cat命令,然后由cat命令将其打印在屏幕上。打印帮助文字后程序退出。如果输入等于或大于3个,我们将第一个参数赋值给变量OLD,第二个参数赋值给变量NEW。下一步,我们使用shift命令将第一个和第二个参数从参数列表中删除,这样原来的第三个参数就成为参数列表$*的第一个参数。然后我们开始循环,命令行参数列表被一个接一个地被赋值给变量$file.接着判断该文件是否存在,如果存在则通过sed命令搜索和替换来产生新的文件名。然后将反短斜线内命令结果赋值给newfile。这样我们就达到了目的:得到了旧文件名和新文件名。然后使用mv命令进行重命名。
Shell里的函数
如:
functionname()
{
 # inside the body $l is the first argument given to the function
 # $2 the second ...
 body
}
需要在每个脚本的开始对函数进行声明
下面是一个名为xtitlebar的脚本,它可以改变终端窗口的名称。这里使用一个名为help的函数,该函数在脚本中使用了两次:
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
cat << HELP
xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole
USAGE: xtitlebar [ -h ] "string_for_titelbar"
OPTIONS: -h help text
EXAMPLE: xtitlebar "CVS"
HELP
exit 0
}
# in case of error or if -h is given we call the function help:
[ -z "$l" ] && help
[ "$l"="-h" ] && help
# send the escape sequence to change the xterm titelbar:
echo -e "33]0;$107"
#
在脚本中提供帮助是一种很好的编程习惯,可以方便使用和理解脚本。
命令行参数
我们已经见过$*和$1,$2,.......$9 等特殊变量,这些特殊变量包含了用户从命令行输入的参数。迄今为止,我们仅仅了解了一些简单的命令行语法(比如一些强制性的参数和查看帮助的-h选项)。但是在编写更复杂的程序时,你可能发现需要更多的自定义的选项。通常的惯例是在所有可选的参数之前加一个减号,后面再加上参数值(比如文件名)。
有好多方法可以实现对输入参数的分析,但是下面的使用case表达式的例子无疑是一个不错的方法。
#!/bin/sh
help()
   {
      cat << HELP
      This is a generic command line parser demo.
      USAGE EXAMPLE : cmdparser -l hello -f -- -somefile1 somefile2
      HELP
      exit0
   }
   while [ -n "%l" ] ; do
   case $1 in
               -h) help;shift l;;                      # function help is called
               -f) opt_f=l;shift l;;                # variable opt_f is set
               -l) opt_l=$2; shift 2;;          # -1 takes an argument -> shift by 2
              --) shift;break;;                   # end of options
             -*) echo "error: no such option $1. -h for help";exit 1;;
               *) break;;
      esac
      done
      echo "opt_f is $opt_f"
      echo "opt_l is $opt_l"
      echo "first arg is $1"
      echo "2nd arg is $2"
可以这样运行这个脚本:
      cmdparser -l hello -f -- -somefile1 somefile2
返回结果如下:
      opt_f is 1
      opt_l is hello
      first arg is -somefile1
      2nd arg is somefile2
这个脚本是如何工作的呢?脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例,首先输入的应该是包含减号的参数。
Shell脚本示例
一般编程步骤
  任何优秀的脚本都应该具有帮助和输入参数。写一个框架脚本(framework.sh),该脚本包含了大多数脚本需要的框架结构,是一个非常不错的主意。这样一来,当我们开始编写新脚本时,可以先执行如下命令:
         cp framework.sh myscript
然后插入自己的函数
二进制到十进制的转换
脚本b2d将二进制数(比如 1101)转换为相应的十进制数。这是一个用expr命令进行数学运算的例子:
      $!/bin/sh
      # vim : set sw=4 ts=4 et:
      help()
      {
            cat << HELP
      b2b -- convert binary to decimal
      USAGE: b2d [ -h ] binarynum
      OPTIONS: -h help text
      EXAMPLE: b2d 111010
      will return 58
      HELP 
               exit 0
      }
      error()
      {
            # print an error and exit
            echo "$1"
            exit 1
      }
      lastchar()
      {
               # return the last character of a string in $rval
               if [ -z "$1" ]; then 
                     # empty string
                     rval=""
                     return
               fi
               # wc puts some space behind the output this is why we need sed:
               numofchar='echo -n "$1"' | wc -c | sed 's/  //g'
               # now cut out the last char
               rval='echo -n "$1" | cut -b $numofchar'
    }
   chop()
   {
            # remove the last character in string and return it in $rval
            if [ -z "$1" ]; then
                  # empty string
                  rval=""
                  return
            fi
           # wc puts some space behind the output this is why we need sed:

            numofchar='echo -n "$1" | wc -c | sed 's/   //g' '
            if  [  "$numofchar" = "1"  ]; then
                     # only one char in string
                     rval=""
                     return
               fi
               numofcharminusl='expr $numofchar "-" 1'
               # now cut all but the last char:
               rval='echo -n "$1" | cut -b -$numofcharminusl '
               #原来的 rval='echo -n "$1" | cut -b 0-${numofcharminusl} ' 运行时出错。
               #原因是cut从1开始技术,应该是cut -b 1-${numofcharminusl}
   }   
   while [  -n "$1"  ] ; do
   case $1 in
            -h) help;shift 1;;                      # function help is called
            --) shift;break;;                       # end of options
            -*) error "error: no such option $1. -h for help" ;;
             *) break;;
      esac
      done
      # The main program
      sum=0
      weight=1
      # one arg must be given:
      [ -z "$1" ]  && help
      binnum="$1"
      while [ -n "$binnum" ]; do
               lastchar "$binnum"
               if [ "$rval"="1" ]; then
                     sum='expr "$weight" "+"  "$sum" '
               fi
               # remove the last position in $binnum
               chop "$binnum"
               binnum="$rval"
               weight='expr "$weight" "*" 2'
          done
           echo "binary $binnumorig is decimal $sum"
            #
该脚本使用的算法是利用十进制和二进制数权值(1,2,4,8,16,......),比如二进制"10" 可以这样转换成十进制:
0*1+1*2=2
为了得到单个的二进制数我们是用了lastchar函数。该函数使用wc -c 计算字符个数,然后使用cut命令取出末尾一个字符。chop函数的功能是移除最后一个字符。
文件循环拷贝
你可能有这样的需求并一直都这么做:将所有发出邮件保持到一个文件中。但是过了几个月后,这个文件可能会变的很大以至于该文件的访问速度变慢;下面脚本rotatefile可以解决此问题。这个脚本可以重命名邮件保持文件(假设为outmail)为outmail.1,而原来的outmail.1 变成了outmail.2 等等。
#!/bin/sh
# vim: set sw=4 ts=4 et:
ver="0.1"
help()
{
      cat <<HELP
      rotatefiel -- rotate the file name
      USAGE: rotatefile [ -h ] filename
      OPTIONS: -h help text
      EXAMPLE: rotatefile out
      This will e.g rename out.2 to out.3, out.1 to out.2,out to out.1 and create an empty out-file
      The max number is 10
      version $ver
      HELP
      exit0
}
error()
      {
            echo "$1"
            exit 1
      }
      while [  -n "$1"  ]; do
            case $1 in
                  -h) help;shift 1;;
                  --) break;;
                  -*) echo "error: no such option $1. -h for help";exit 1;;
                   *) break;;
               esac
         done
         # input check:
         if [ -z "$1" ] ; then
                  error "ERROR: you must specify a file,use -h for help"
         fi
         filen="$1"
         # rename any.1,.2 etc file:
         for n in 9 8 7 6 5 4 3 2 1; then
               p='expr $n +1'
               echo "mv $filen.$n  $filen.$p"
               mv $filen.$n  $filen.$p
         fi
      done
      # rename the original file:
      if [  -f "$filen" ]; then
            echo "mv $filen $filen.1"
            mv $filen $filen.1
         fi
         echo touch $filen
这个脚本是如何工作的:在检验到用户提供了一个文件名之后,首先进行一个9到1的循环;文件名.9重命名为文件名.10,文件名.8重命名为文件名.9 等等。循环结束后,把原始文件命名为文件名.1,同时创建一个和原始文件同名的空文件(touch $filen)。
脚本调试
最简单的调试方法是使用echo。可以在任何怀疑出错的地方用echo打印变量值,这也是大部分shell程序员花费80%的时间用于调试的原因。shell脚本的好处在于无需重新编译,而插入一个echo也不需要多少时间。
shell也有一个真正的调试模式,如脚本"strangescript"出错,可以使用如下命令进行调试:
sh -x strangescript
上述命令会执行该脚本同时显示所有变量的值。
shell还有一个不执行脚本只检查语法的模式,命令如下:
sh -n your_script
这个命令会返回所有语法错误。
}

posted @ 2010-09-25 17:26 doublezxh 阅读(199) | 评论 (0)编辑 收藏
RHEL基本网络配置

##########################################
#   /etc/sysconfig/network-scripts/eth
##########################################
vi /etc/sysconfig/network-scripts/eth0      //编辑指定网络接口配置文件
DEVICE=eth0                                 //指定接口名称
ONBOOT=yes                                  //系统启动时加载
BOOTPROTO=static                            //IP地址静态配置,若该值为“dhcp”则为动态获得
IPADDR=192.168.0.1                          //设置IP地址
NETMASK=255.255.255.0                       //设置子网掩码
GATEWAY=192.168.0.254                       //设置默认网关
##########################
#
#  /etc/sysconfig/network
#
##########################
vi /etc/sysconfig/network         //通过配置文件修改主机名
NETWORKING=yes
HOSTNAME=localhost.localdomain    //修改该值作为主机名,如:rhel.lpwr.net
##########################
#
#        /etc/hosts
#
##########################
vi /etc/hosts                                //设置本地DNS解析文件
127.0.0.1   localhost.localdomain localhost  //该行强烈建议保留
192.168.0.1  rhel.lpwr.net  rhel             //必须有三个字段:IP、FQDN、HOSTNAME
##########################
#
#     /etc/resolv.conf
#
##########################
vi /etc/resolv.conf        //指定当前主机的DNS服务器,最多可指定三个
search lpwr.net            //设置当前主机的默认查找域
nameserver 192.168.0.100   //指定首选DNS服务器
nameserver 172.16.254.2
##########################
#
#   /sbin/ifconfig 
#
##########################
/sbin/ifconfig      //显示ifconfig命令查看网络接口的信息
ifconfig eth0       //显示指定接口的信息
ifconfig -a         //显示所有接口的信息(无论是否活跃)
ifconfig eth0 192.168.0.2 netmask 255.255.255.0      //临时修改接口IP地址(无需重启接口)
##########################
#
#      /sbin/route 
#
##########################
/sbin/route                                          //显示当前Linux主机中的路由表信息
route del default gw 192.168.0.1                     //临时删除默认网关192.168.0.1
route add -net 192.168.1.0/24 gw 192.168.0.254       //临时添加一条静态路由
##########################
#
#          ping 
#
##########################
ping                         //测试与其他主机的网络连接
ping -c 4 192.168.0.1        //指定发出ICMP包个数
##########################
#
#       traceroute
#
##########################
traceroute                  //测试当前主机到目的著急的网络连接
##########################
#
#       hostname
#
##########################
hostname            //查看当前主机的主机名
hostname linsrv     //临时修改当前主机名
##########################
#
#       nslookup
#
##########################
nslookup              //测试DNS域名解析
>server               //显示当前DNS服务器
>server 192.168.0.1   //临时指定DNS服务器地址
##########################
#
#       dhclient
#
##########################
dhclient              //为当前主机申请网络配置信息
##########################
#
#       netconfig
#
##########################
netconfig           //通过向导在字符界面下修改网络配置信息
##########################
#
#   /etc/init.d/network
#
##########################
/etc/init.d/network restart       //重启网络服务
/etc/init.d/network stop          //停止网络服务
/etc/init.d/network start         //启动网络服务
/**无论是通过netconfig,还是通过修改配置文件的方式修改了网络配置信息,都需要重启network服务才能生效**/
##########################
#
#       service
#
##########################
service network start             //启动网络服务
service network stop              //停止网络服务
service network restart           //重启网络服务
service network status            //查看网络服务状态
/**在RHEL4中可以通过service命令来管理大多数服务的启动、停止、重启以及查看其工作状态等**/
##########################
#
#       chkconfig
#
##########################
chkconfig --list | grep network       //查看某服务的自动启动级别
chkconfig --level 35 network off      //设置在级别35不自动启动某服务
chkconfig --level 3 network on        //设置在级别3自动启动某服务
##########################
#
#       ntsysv
#
##########################
ntsysv        //通过向导在字符界面下修改服务的自启动选项
 nameserver 202.106.0.20
文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/6_system/linux/Linuxjs/20090320/163487.html

posted @ 2010-09-05 16:35 doublezxh 阅读(340) | 评论 (0)编辑 收藏
RHEL5中TFTP服务器的安装与配置

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。TFTP承载在UDP上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达。与FTP相比,TFTP的大小要小的多,TFTP是用来下载远程文件的最简单网络协议,它基于UDP协议而实现。它使用的是UDP的69端口 。

1、检查系统是否安装tftp服务

[root@localhost /]# rpm -qa | grep tftp

tftp-server-0.49-2
       tftp-0.49-2

如果没有安装可以挂载RHEL5光盘,进入Server目录安装

[root@localhost Server]#  rpm -ivh tftp-****.i386.rpm

[root@localhost Server]#   rpm -ivh tftp-server-****.i386.rpm

2、修改启动配置文件

默认情况下TFTP服务是禁用的,所以要修改文件来开启服务。

修改文件/etc/xinetd.d/tftp。主要是设置TFTP服务器的根目录,开启服务。

修改后的配置文件如下:

service tftp

{

disable = yes           //把这里的yes改为no

socket_type = dgram

protocol = udp

wait = yes

user = root

server = /usr/sbin/in.tftpd

server_args = -s /tftpboot -c

per_source = 11

cps = 100 2

flags = IPv4

}

这里指定/tftpboot 为tftp服务器的根目录

参数-s指定chroot,-c指定了可以创建文件。

3、创建tftp根目录,关闭防火墙,启动tftp-server

[root@localhost /]#   mkdir /tftpboot

[root@localhost /]#   chmod -R 777 /tftpboot

[root@localhost /]#  /etc/init.d/iptables stop

[root@localhost /]#  service xinetd restart

重启xinetd服务,因为TFTP服务受控与xinetd服务。

4.检查是否配置好

命令:

[root@localhost /]#    netstat -a | grep tftp

udp        0      0 *:tftp                      *:*    

出现上面这行就表示配置好了。

posted @ 2010-09-05 15:59 doublezxh 阅读(306) | 评论 (0)编辑 收藏
仅列出标题
共2页: 1 2