D

date——显示或设置系统日期与时间

语法格式

        date [-R] [-d str] [-f datef] [-r file] [-s str] [--rfc-3339=time] [+format]
        date [-u] [MMDDhhmm[[CC]YY][.ss]]
        date [--help] [--version]

命令简介

date命令用于显示或设置系统时间。利用时间格式字符串,用户可以控制时间显示的形式与内容。如果是超级用户,也可以使用date命令设置系统时间。

其中,format是时间格式的定义,用于控制时间的输出内容与形式。详见“时间格式”一节的说明。

注意,环境变量TZ定义了系统的时区,时间的显示或设置都是基于当前时区的,除非命令行另有指定。如果TZ变量未设置,命令行也未指定,则以/etc/localtime文件为准。

命令选项

        -d str,--date=str            按照指定的时间描述字符串(如yesterday、tomorrow或“next Sunday”等)
                                    或者时间格式字符串(如“2012-01-22 10:20:30”或“Sun, 22 Jan 2010
                                    16:21:42 +0800”)显示时间。注意,这里的具体数字并不重要,重要的只
                                    是时间的格式与含有的时间元素,最终显示的还是当前时间。
        -f datef,--file=datef        从指定的文件中逐行读取时间描述字符串或时间格式字符串,作为“-d”
                                    选项的参数,按照要求显示时间。文件可以包含多行字符串,定义多个时
                                    间显示形式。
        -r file,--reference=file     显示指定文件最近一次的修改时间。
        -R,--rfc-2822               以RFC 2822定义的格式显示日期和时间,如“Sun, 22 Jan 2010 12:34:56
                                    +0800”。
        -s str,--set=str             按照指定的时间格式设置时间,例如,使用“[cc]yy-mm-dd”、
                                    “[cc]yymmdd”或“[cc]yy/mm/dd”等设置日期,使用“hh:mm[:ss]” 等
                                    设置时间。也可以组合在一起,同时设置日期与时间,如“[cc]yy-mm-dd
                                    hh:mm”。注意,组合设置日期与时间时,前后需要加引号。
        -u,--utc,--universal        显示或设置协调世界时(UTC),即格林威治时间(GMT)。
        --rfc-3339=time             以RFC 3339定义的格式显示日期和时间。其中的时间参数可以是date(仅
                                    显示日期)、seconds(显示日期、时间与时区)或ns(同seconds,但在秒
                                    后增加时间精度)。

时间格式

        时间格式可由下列特殊字符及其任意组合组成:
        %%        百分号“%”文字本身。
        %n        换行符。
        %t        制表符。
        %a        本地语言环境的星期缩写,如Sun或日。
        %A        本地语言环境的星期全称,如Sunday或星期日。
        %b        本地语言环境的月份缩写,如Jan。
        %B        本地语言环境的月份全称,如January或一月。
        %c        本地语言环境的日期与时间,如“Sun Jan 22 23:05:252010”或“2012年01月15日 星期日
                  21时43分30秒”。
        %C        世纪。类似于“%Y”,忽略最后两位数字,如20。
        %d        一月中的第几天。
        %D        日期,相当于“%m/%d/%y”。
        %e        一月中的第几天。相当于“%_d”,即使用空格替代前置0。
        %F        完整的日期表示,相当于“%Y-%m-%d”。
        %g        ISO标准的年份最后两位数字,通常与“%V”一起使用。
        %G        ISO标准的年份,通常与“%V”一起使用。
        %h        相当于“%b”,显示月份的缩写。
        %H        24小时制(0~23)的小时。
        %I        12小时制(1~12)的小时。
        %j        一年中的第几天(001~366)。
        %k        24小时制(0~23)的小时。
        %l        12小时制(1~12)的小时。
        %m        月(1~12)。
        %M        分(00~59)。
        %N        毫微秒(000000000~999999999)。
        %p        本地语言环境的上下午表示,如AM、PM、上午或下午等。
        %P        类似于“%p”,但采用小写字母。
        %r        本地语言环境的12小时制时钟时间,如“11:11:04 PM”,或“下午 09时29分30秒”。
        %R        24小时制的小时与分,相当于“%H:%M”。
        %s        从UNIX纪元(1970-01-01 00:00:00 UTC)算起的秒数。
        %S        秒(00~60)。
        %T        时间,相当于“%H:%M:%S”。
        %u        周(1~7),其中7表示星期日。
        %U        一年中的第几周(00~53),其中星期日作为每周的第一天。
        %V        ISO标准的第几周(01~53),其中星期一作为每周的第一天。
        %w        周(0~6),其中0表示星期日。
        %W        一年中的第几周(00~53),其中星期一作为每周的第一天。
        %x        本地语言环境的日期表示,如“01/15/12”或“2012年01月15日”。
        %X        本地语言环境的时间表示,如“21:26:06”或“21时26分06秒”。
        %y        年份的最后两位数字(00~99),如12。
        %Y        年,如2012。
        %z        数字形式“+hhmm”表示的时区,如“+0800”。
        %:z       数字形式“+hh:mm”表示的时区,如“+08:00”。
        %::z      数字形式“+hh:mm:ss”表示的时区,如“+08:00:00”。
        %:::z     数字形式的时区,增加必要的精度,如+08或+05:30等。
        %Z        时区的英文缩写,如CST。

通常,日期或时间的数值字段可能会包含前置0。为了控制显示前置0与否,可在上述特殊字符中插入下列字符标志:

        -(连字符)      禁止填充字段。
        _(下画线)      使用空格填充字段。
        0(数字0)       使用0填充字段。
        ^(上箭头)      尽可能使用大写字母。
        #(井号)        尽可能使用小写字母。

应用实例

1.设置系统时间。

        # date -s "20120405 10:20"
        Thu Apr  5 10:20:00 CST 2012
        #

2.使用格式字符串,模拟实现date命令显示的系统时间。

        $ date "+%x %A %T %Z"
        2012年04月05日 星期四 10:30:30 CST
        $

dd——复制与转换文件

语法格式

        dd [operands]
        dd [--help] [--version]

命令简介

dd命令主要用于复制文件,或按照要求在复制过程中执行必要的数据转换。如果不加if和of参数,则dd命令把标准输入复制到标准输出中。

dd命令的最大特点是能够采用原始读写的方式,逐块、逐道地把一个存储介质上的数据原封不动地复制到另一个存储介质上。此外还可以把一个文件系统完整地复制到另一个磁盘分区中,从而实现文件系统的备份。

在复制过程中,dd命令还具有数据转换功能,可以把不同代码格式的数据转换为另一种编码的数据,实现不同系统之间的数据交换。

在上述语法格式中,operands是一个或一组操作数,可用的操作数详见“命令参数”一节的说明。

在复制过程中,如果向正在运行的dd进程发送一个USR1信号,可以让dd把当前完成的I/O统计数据写到标准错误输出,然后恢复运行,继续复制数据。

命令参数

        bs=n            指定读写数据块的字节数量。数值n后面可以附加一个表示字节数量单位的字符,如
                        K、M、G和T等,分别表示n个1KB、1MB、1GB和1TB的数据块。如果未指定数
                        量单位字符,计数单位为字节。如果忽略了bs参数,默认的读写数据块为512字节。
                        注意,这个参数可以同时强制取代ibs和obs两个参数。
        cbs=n           表示每次转换多少个字节。数值n后面也可以附加一个表示字节数量单位的字符,如
                        K、M、G和T等,分别表示每次转换n个1KB、1MB、1GB和1TB的字节。
        conv=convs      指定一个或由逗号“,”分隔的一组转换关键字,按照指定的要求转换文件中的数据。
        count=blocks    指定复制的数据块数量。每个数据块的大小以ibs、obs或bs的定义为准。
        ibs=n           指定输入数据块的字节数量。数值n后面可以附加一个表示字节数量单位的字符,如
                        K、M、G和T等,分别表示n个1KB、1MB、1GB和1TB的数据块。如果未指定数
                        量单位字符,计数单位为字节。如果忽略了ibs参数,默认的输入数据块为512字节。
        if=file         指定输入文件。文件可以是普通数据文件,也可以是磁盘分区、磁带、软盘或
                        CD/DVD等设备文件。默认的输入文件为标准输入。
        iflag=flags     指定一个或一组标志(中间加逗号分隔符),使用指定的标志访问输入文件。
        obs=n           指定输出数据块的字节数量。数值n后面可以附加一个表示字节数量单位的字符,如
                        K、M、G和T等,分别表示n个1KB、1MB、1GB和1TB的数据块。如果未指定数
                        量单位字符,计数单位为字节。如果忽略了obs参数,默认的输出数据块为512字节。
        of=file         指定输出文件。文件可以是普通数据文件,也可以是磁盘分区、磁带、软盘或
                        CD/DVD等设备文件。默认的输出文件为标准输出。
        oflag=flags     指定一个或一组标志(中间加逗号分隔符),使用指定的标志访问输出文件。
        seek=blocks     在开始写入之前,首先从输出文件的起始位置跳过指定数量的数据块(以obs或bs定
                        义的输出数据块为计数单位)。
        skip=blocks     在开始读取之前,首先从输入文件的起始位置跳过指定数量的数据块(以ibs或bs定
                        义的输入数据块为计数单位)。
        status=noxfer   禁止显示复制过程的统计数据(常规显示的最后一行)。
        dd支持的数据转换关键字如下:
        ascii           根据POSIX指定的转换表,把EBCDIC转换成ASCII字符,对于所有的256字节,提
                        供1:1的转换。
        ebcdic          根据POSIX指定的转换表,把ASCII转换成EBCDIC字符。
        ibm             根据POSIX指定的补充转换表,把ASCII转换成补充的EBCDIC字符。
        block           对于每一行输入数据,使用空格替换其中的换行符,输出cbs指定字节长度的数据,
                        必要时附加适当数量的空格。
        unblock         对于cbs指定长度的输入数据,删除后面多余的空格,最后附加一个换行符。
        lcase           把大写字母转换成小写字母。
        nocreat         禁止创建输出文件,输出文件事先必须存在。
        excl            如果输出文件已经存在,则复制失败(输出文件必须由dd自己创建)。
        notrunc         禁止截断输出文件。
        ucase           把小写字母转换成大写字母。
        swab            交换输入的每一对字节(如果字节数为奇数,最后一个字节仅是复制而已)。
        noerror         遇到读数据错误时仍然继续。
        sync            对于每个输入数据块,在后面附加适当数量的NULL字符,以达到ibs指定的字节长
                        度。当与block或unblock一起使用时,附加空格而非NULL字符。
        fdatasync       在复制完成之前,采用物理写的方式同步输出数据。
        fsync           在复制完成之前,采用物理写的方式同步输出数据和元数据。
        dd支持的部分读写标志如下:
        append          采用追加模式写文件(仅适用于数据输出)。
        cio             采用并发的方式读写数据。
        direct          采用直接I/O的方式读写数据,避免使用缓存。
        dsync           采用同步方式读写数据。
        sync            采用同步方式读写数据与元数据。
        nonblock        采用非封锁的I/O方式。
        noatime         禁止更新文件的访问时间。
        nofollow        禁止读写符号链接文件引用的文件。

应用实例

1.软盘复制。首先使用dd命令把软盘复制到一个临时文件中。

        $ dd if=/dev/fd0 of=/tmp/tmpfile
        2880+0 records in
        2880+0 records out
        1474560 bytes (1.5 MB) copied. 48.6294 seconds. 30.3 kB/s
        $

然后,再使用dd命令,交换输入和输出文件的位置,把临时文件复制到一个新的软盘中:

        $ dd if=/tmp/tmpfile of=/dev/fd0
        2880+0 records in
        2880+0 records out
        1474560 bytes (1.5 MB) copied. 98.822 seconds. 14.9 kB/s
        $

2.给dd进程发送一个USR1信号,查询当前数据复制的进度。

        $ dd if=/dev/zero of=/dev/null count=256M & pid=$!
        [1] 2035
        $ kill -USR1 $pid; wait $pid
        6271544+0 records in
        6271544+0 records out
        3211030528 bytes (3.2 GB) copied, 10.1363 s, 317 MB/s
        16777216+0 records in
        16777216+0 records out
        8589934592 bytes (8.6 GB) copied, 27.1247 s, 317 MB/s
        [1]+  Done                 dd if=/dev/zero of=/dev/null count=16M
        $

debugfs——ext2/ext3/ext4文件系统调试器

语法格式

        debugfs [-Vwc] [-b blksz] [-s superblk] [-f cmdfile] [-R request] [device]

命令简介

debugfs是一个交互方式的文件系统调试器。可用于考察、修改或维护ext2、ext3或ext4文件系统的状态。其中,device是文件系统分区的设备文件名,如/dev/sdb2。

利用debugfs命令,可以恢复误删的文件等,这是debugfs命令最常见的用法。

debugfs命令使用DEBUGFS_PAGER或PAGER环境变量设置分页显示程序,默认的程序是less。许多交互命令,如ls、stat和stats均使用分页显示程序,逐页显示。由于less退出时总是清屏,故其并非理想的分页显示程序。如果喜欢使用其他分页程序,可在调用debugfs命令之前设置上述两个变量之一。

命令选项

        -b blksize      强制使用指定大小的文件系统逻辑数据块,而不是根据磁盘分区的容量,按照常规方
                       法确定数据块的大小。
        -c             假定文件系统已严重受损,可以使用这个选项,以只读方式尝试打开指定的文件系
                       统。
        -f cmdfile      采用批处理的方式,从指定的脚本文件中读取并执行debugfs交互命令。执行结束后
                       立即退出debugfs命令。
        -R request      执行指定的单个命令请求,然后立即结束debugfs命令的执行。
        -s superblk     按照给定的数据块地址读取文件系统的超级块(而不是读取位于文件系统起始位置偏
                       移值 1024 字节的主超级块)。注意,“-s”选项要求同时使用“-b”选项指定文件系
                       统数据块的大小。
        -V             显示debugfs命令的版本信息,然后退出。
        -w             以读写方式打开文件系统。如果未指定这个选项,只能以只读方式打开文件系统。在
                       文件系统调试期间发生的任何改动,无法写入文件系统。

交互命令

进入debugfs交互处理环境之后,可以使用其支持的交互子命令操作文件系统。许多debugfs交互命令使用 filespec 参数指定文件。filespec 参数具有两种表示方式:一是在信息节点号前后增加书名号,如“<2>”表示根目录;二是采用常规的路径名,如“/abc”。如果路径名的第一个字符是斜线“/”,则解释为相对于debugfs当前打开的文件系统根目录的绝对路径名,否则把路径名解释为相对于debugfs维护的当前工作目录的相对路径名。

下面是debugfs命令支持的交互子命令。

        bmap filespec logicblk    显示指定信息节点中与指定逻辑数据块号对应的物理数据块号。利用这个
                                  命令,可以找出一个文件的实际数据存储位置。
        cat filespec              显示指定文件的数据内容。
        cd filespec               进入指定的目录,作为当前工作目录。
        chroot filespec           把指定的目录作为虚拟根目录。
        close[-a]                 关闭当前打开的文件系统。如果指定了“-a”选项,还要把调试期间所做
                                  的任何修改写入文件系统的超级块(包括主超级块与所有的备份超级块)及
                                  其数据块组描述的数据结构中。
        clri file                 清除指定文件中的数据内容。
        dirty                     设置超级块的state状态字段,表示文件系统未同步或未正常卸载。
        dump[-p]filespec outfile  把指定文件中的数据写入指定的输出文件。如果加了“-p”选项,还要按
                                  照源文件信息节点中的属主、用户组和访问权限等属性设置输出文件。注
                                  意,输出文件位于调用debugfs命令之前所在的文件系统,而非当前正在调
                                  试的文件系统。因此,如果给出的是相对路径名,则输出文件应当是相对
                                  于运行debugfs命令时所处的工作目录。
        dump_unused               显示未用的数据块。
        expand_dir filespec       扩充指定目录文件的容量,即再为目录文件分配一个数据块。
        feature[fs_feature][-fs_feature]...
                                  显示、设置或清除超级块中的各种文件系统特性。在设置或清除指定的任
                                  何文件系统特性之后,显示文件系统特性集的当前状态。
        ffb[count[goal]]          find_free_block子命令的简化形式,用于找出第一个空闲数据块的地址(数
                                  据块号),或者从指定的数据块位置goal开始,找出指定数量count的空闲
                                  数据块地址。
        ffi[dir[mode]]            find_free_inode子命令的简化形式,用于找出第一个可分配的空闲信息节
                                  点。如果指定的目录dir存在,则从其信息节点开始找出空闲的信息节点。
                                  选用的模式参数用于指定新分配的信息节点的访问权限。
        freeb block[count]        把指定的数据块标记为未分配的空闲数据块。如果给出了数据块计数,则
                                  从指定的数据块开始标记指定数量的数据块。
        freei filespec            释放指定的信息节点。
        help                      列出debugfs命令支持的交互子命令。
        icheck blocks             显示占用了一个或多个指定数据块的信息节点(列表)。
        imap filespec             输出指定文件信息节点在信息节点区中的位置。
        init_filesys dev blksz    在指定的设备上,使用指定的数据块数量,创建一个ext2 文件系统。注
                                  意,这种做法只是调用低级的库函数,设置超级块和数据块组描述而已,
                                  没有完全初始化所有的数据结构。
        kill_file filespec        释放指定文件的信息节点及其数据块。但这种文件删除方式并不能删除指
                                  定文件在目录文件中占用的目录项。
        lcd dir                   把debugfs的当前工作目录改换到系统中的指定目录(而非当前正在调试的
                                  文件系统中的某个目录)。
        ln filespec destfile      使用指定的文件filespec创建一个硬链接文件destfile。注意,这种做法不会
                                  调整文件的链接计数。
        logdump[-acs][-b block][-i<inode>][-f journal][outfile]
                                  转储ext3 文件系统中的日志信息。通常,日志的信息节点是由超级块确定
                                  的,但可以利用“-i”选项指定日志实际使用的信息节点。“-f”选项用于
                                  指定包含日志数据的文件。“-s”选项表示利用超级块中的备份信息确定
                                  日志的存储位置。“-a”选项表示输出所有数据块组描述所在数据块中的
                                  内容。“-b”选项表示输出指定数据块涉及的所有日志记录。“-c”选项
                                  意味着输出“-a”和“-b”选项选择的所有数据块中的内容。
        ls[-dlp]filespec          列出指定目录中的文件。其中的“-l”选项表示以长列表的形式显示更多
                                  的文件属性信息。“-d”选项表示列出删除的文件。“-p”选项表示采用
                                  脚本容易解析的格式输出文件列表。
        lsdel                     显示删除的信息节点。
        mi filespec               modify_inode子命令的简化形式,用于修改指定文件信息节点结构中的数
                                  据。这是一种交互式操作,可以逐一审查系统提示的信息节点数据,必要
                                  时予以适当的修改。
        mkdir filespec            在当前目录中创建指定的子目录。
        mknod filespec[p|[[c|b]major minor]]
                                  创建一个指定的特殊文件(如命名的管道文件、字符特殊文件或块特殊文件
                                  等)。如果想要创建字符或块设备文件,还需要指定主次设备号。
        ncheck inodes             显示与指定信息节点号对应的文件名(列表)。
        open[-cefiw][-b blksize][-s superblk]device
                                  进入debugfs交互命令环境之后,打开准备调试的文件系统。其中的“-w”
                                  选项表示以写方式打开文件系统。“-f”选项表示强制打开文件系统,即
                                  使文件系统存在问题,无法正常打开。“-e”选项表示以排他方式打开,
                                  “-b”、“-c”、 “-i”和“-s”具有与debugfs命令同名选项相同的功能。
        pwd                       显示当前的工作目录。
        quit                      退出debugfs命令。
        rdump srcdir destdir      把指定目录及其中的所有文件(包括普通文件、符号链接文件以及子目录
                                  等)递归地复制到指定的目的目录位置(非当前调试的文件系统)。注意,
                                  在使用这个子命令之前,目的目录必须已经存在。
        rm file                   删除指定的文件。如果删除文件时导致信息节点的链接计数为 0,则释放
                                  相应的信息节点。这个子命令的功能等同于unlink()系统调用。
        rmdir filespec            删除指定的目录。
        setb block[count]         把指定的数据块标记为已分配的数据块。如果给出了数据块计数,则从指
                                  定的数据块开始,把指定数量的数据块均标记为已分配的数据块。
        set_bg bg#field value     set_block_group子命令的简化形式,用于修改指定的数据块组描述,把其
                                  中的指定字段设置为指定的值。此外,还可以利用“set_bg-l”命令,列出
                                  set_bg能够设置的数据块组描述中的所有字段。
        seti filespec             把指定的信息节点标记为已分配的信息节点。
        sif filespec field value  set_inode_field子命令的简化形式,用于修改指定的信息节点,把指定的字
                                  段设置为指定的值。此外,还可以利用“sif -l”命令,列出sif能够设置的
                                  所有信息节点字段。
        ssv field value           set_super_value子命令的简化形式,用于修复超级块,把指定的字段设置
                                  为指定的数值。此外,还可以利用“ssv -l”命令,列出ssv能够设置的所
                                  有超级块字段。
        stats[-h]                 show_super_stats子命令的简化形式,用于显示超级块和数据块组描述中的
                                  数据。如果给出了“-h”选项,仅显示超级块中的数据。
        stat filespec             show_inode_info子命令的另外一种形式,用于显示指定信息节点中的数据
                                  内容。
        testb block[count]        测试指定的数据块是否已经分配。如果同时给出了数据块计数,则从指定
                                  的数据块开始,测试指定数量的数据块是否均已分配。
        testi filespec            测试指定的信息节点是否已经分配。
        undel<inode>[dir]       undelete子命令的简化形式,用于恢复删除的信息节点号,把指定的信息节
                                  点及其存储数据块标记为当前正在使用的信息节点和数据块,同时把恢复
                                  的信息节点链接到指定的目录(如果指定了目录参数 dir)。在使用undel
                                  命令恢复误删的文件之后,应当总是运行e2fsck命令修复文件系统。注
                                  意,如果是恢复大量误删的文件,把信息节点连接到一个目录有可能需要
                                  扩展目录的存储空间,导致分配的数据块取自某个已删的文件,使相应的
                                  文件无法恢复。因此,比较安全的做法是在恢复所有的信息节点时不要指
                                  定目的目录,最后再单独使用debugfs的ln子命令,把信息节点链接到一
                                  个目的目录,或使用e2fsck命令修复文件系统,把恢复的所有信息节点链
                                  接到lost+found目录。
        unlink path               删除指定的文件。注意,如果删除的是一个硬链接文件,debugfs命令不会
                                  调整信息节点中的链接计数字段。
        write srcfile outfile     把文件系统内指定文件srcfile中的数据复制到新建的文件outfile中。注意,
                                  新建文件指的是调试文件系统中的文件。

应用实例

在使用命令行界面访问Linux系统时,如果使用rm等命令删除文件,一经执行,便会立即释放文件的信息节点和数据块,回收站在此不起任何作用。如果误删了文件,仅当满足下列条件时,才能利用debugfs命令挽救删除的文件:

1. 删除文件后,系统或用户没有在文件系统中创建任何新的文件(包括目录、符号链接文件等各种文件)。这个条件表示因删除文件而释放的信息节点和数据块没有再次分配使用。

2. 删除文件后,系统或用户也没有在文件系统中扩充原有的任何文件。这个条件表示删除文件时释放的数据块没有再次分配使用。

如果满足上述两个条件,可以立即卸载文件系统,仿照下列步骤,利用debugfs命令恢复误删的文件:

1. 利用ffi(find_free_inode)子命令,找出第一个空闲的信息节点。

2. 利用stat子命令,检查信息节点数据结构中的BLOCKS字段(Ext2/Ext3文件系统)。如果其中数据块指针的数据为空,说明当前的信息节点根本没有用过。如果其中给出了数据块号——单个数据块号或数据块号范围,说明相应的信息节点是一个删除的文件。

3. 利用cat子命令,检查其中的数据是否为误删的文件。

4. 如果是,利用dump子命令,把数据保存到系统中指定的文件。文件恢复过程结束。

5. 否则,利用seti子命令,在信息节点位图中,把指定的信息节点标记为已分配。

6. 从步骤1开始重复执行上述过程。

假定1.44MB软盘的Ext3文件系统中存在下列文件,在操作过程中不慎误删了其中的重要文件security:

        $ sudo mount /dev/fd0 /mnt
        [sudo] password for gqxing:
        $ ls -l /mnt
        total 71
        drwx------2 root   root   12288 Feb 11 13:02 lost+found
        -rw-r--r--1 gqxing gqxing 21822 Feb 11 13:03 schedule
        -rw-r--r--1 gqxing gqxing 10560 Feb 11 13:03 security
        -rw-r--r--1 gqxing gqxing 23666 Feb 11 13:03 typescript
        $ rm /mnt/security
        $

由于发现及时,没有在文件系统中再做其他操作,故文件系统满足文件恢复的要求。此时可以立即卸载文件系统,调用debugfs命令,执行文件的恢复过程。示例如下:

        $ sudo umount /mnt
        $ sudo debugfs -w /dev/fd0
        debugfs 1.41.9 (22-Aug-2009)
        debugfs:  ls -l
            2   40777   (2)     0     0    1024     11-Feb-2010 13:28 .
            2   40777   (2)     0     0    1024     11-Feb-2010 13:28 ..
            11   40700   (2)     0     0   12288     11-Feb-2010 13:02 lost+found
            12  100644   (1)  1000  1000   21822     11-Feb-2010 13:03 schedule
            14  100644   (1)  1000  1000   23666     11-Feb-2010 13:03 typescript
        (END)
        debugfs:  ffi
        Free inode found: 13
        debugfs:  stat <13>
        Inode: 13   Type: regular   Mode:  0644   Flags: 0x0
        Generation: 507723457   Version: 0x00000000
        User:  1000   Group:  1000   Size: 10560
        File ACL: 0   Directory ACL: 0
        Links: 0   Blockcount: 22
        Fragment:  Address: 0   Number: 0   Size: 0
        ctime: 0x4b739573-- Thu Feb 11 13:28:192010
        atime: 0x4b738fb7-- Thu Feb 11 13:03:512010
        mtime: 0x4b738fb7-- Thu Feb 11 13:03:512010
        dtime: 0x4b739573-- Thu Feb 11 13:28:192010
        BLOCKS:
        (0-10):70-80
        TOTAL: 11
        (END)
        debugfs:  cat <13>
        # This is a testing file for debugfs
        #
        # There is a lot of important data in this file
        …
        debugfs:  dump <13> rescued
        debugfs:  quit
        $ ls –l rescued
        -rw-r--r--1 root root 10560 Feb 11 13:32 recured
        $  cat rescured
        # This is a testing file for debugfs
        #
        # There is a lot of important data in this file
        …
        $

注意,恢复的文件rescured位于调用debugfs命令之前用户所在的工作目录,而非当前调试的文件系统,且由其输出数据可见,恢复后的文件rescured与原文件security的内容完全相同。

df——查询文件系统的可用空间与文件信息

语法格式

        df [-ahHiklPT] [-B size] [-t fstype] [-x type] [--direct] [--total]
          [--no-sync] [--sync] [filesys | files]
        df [--help] [--version]

命令简介

df命令主要用于显示指定文件系统或包含指定文件的文件系统的可用磁盘空间数量。其中,filesys 是一个或一组文件系统、文件系统分区的设备文件名或文件系统的安装点。files是一个或一组文件,表示包含指定文件的文件系统。如果未指定任何参数,df命令通常仅显示本地系统当前已经安装的所有文件系统的可用空间信息。通常,显示的磁盘空间数量以1KB的数据块为单位,除非已经设置了POSIXLY_CORRECT环境变量,在此情况下,磁盘空间数量以512字节的数据块为单位。

命令选项

        -a,--all                       显示所有文件系统(包括虚拟文件系统,如proc)的可用存储空间等
                                       统计数据。
        -B size,--block-size=size       使用指定字节数的数据块为计量单位,显示每个已安装文件系统的磁盘
                                       空间使用情况。输出信息包括文件系统的设备文件名、文件系统总容
                                       量、已分配的存储空间容量、可用的存储空间容量、已用存储空间占文
                                       件系统总容量的百分比,以及文件系统的安装点等。其中,size是一个
                                       数字,表示字节数,也可以是KB(1000)、K(1024)、MB(10002)、
                                       M(10242)、GB(10003)、G(10243)以及T、P、E、Z或Y等字
                                       符(字符前也可以加数字),表示相应的容量单位。
        --direct                       把命令行参数看作文件而非安装点,查询其所在文件系统的可用空间
                                       信息。
        --total                        在常规的数据显示之后增加一行统计数据,累加每一列数据。
        -h,--human-readable            采用容易阅读与理解的形式显示存储空间信息,以KB、MB或GB为
                                       单位,如12K、2.4M或2G等,显示每个已安装文件系统的存储空间
                                       使用情况。输出信息包括文件系统的设备文件名、文件系统总容量、
                                       已分配的存储空间容量、可用的存储空间容量、已用存储空间容量占
                                       文件系统总容量的百分比,以及文件系统的安装点。
        -H,--si                        以1000而非1024为递进单位显示存储空间信息。
        -i,--inodes                    仅显示信息节点而非数据块的有关信息,其中包括文件系统的设备文
                                       件名、信息节点(文件)总量、空闲信息节点数量、已用信息节点数
                                       量、已用信息节点数量占信息节点总量的百分比,以及文件系统的安
                                       装点等。
        -k                             相当于指定了“--block-size=1K”选项,表示以KB为单位,显示每
                                       个文件系统的存储空间使用情况。输出信息包括文件系统的设备文件
                                       名、文件系统的总容量、已分配的存储空间容量、可用的存储空间容
                                       量、已用存储空间占文件系统总容量的百分比,以及文件系统的安装
                                       点。通常,“-k”是df命令的默认选项。
        -l,--local                     仅限于输出已安装的本地文件系统的存储空间使用情况,包括可用的
                                       存储空间容量,以及可用的文件信息节点数量等。
        --no-sync                      在查询信息之前不必执行sync命令(默认)。
        -P,--portability               采用POSIX标准的输出格式显示数据。
        --sync                         在查询信息之前首先执行sync命令,以便获取的信息更准确。
        -t fstype,--type=fstype        仅限于输出与指定文件系统类型有关的磁盘空间总量与可用容量,信
                                       息节点(文件)总量与可用信息节点数量等信息。
        -T,--print-type                同时显示每个文件系统的类型。
        -x type,--exclude-type=type    显示除指定文件系统类型之外的其他文件系统的磁盘空间总量与可用
                                       容量、信息节点(文件)总量与可用信息节点数量等信息。

输出字段

        Size                       文件系统中存储空间的总容量。
        Used                       文件系统中已经占用的存储空间数量。
        Avail或Available           文件系统中可用的空闲存储空间数量。
        Use%                       文件系统中已用存储空间数量占全部存储空间总容量的百分比。
        Mounted on                 文件系统的安装点。
        1[KMG]-blocks              文件系统中存储空间的总容量(未加“-h”选项时)。
        Inodes                     文件系统中信息节点的总和。
        IUsed                      文件系统中已用信息节点的数量。
        IFree                      文件系统中空闲信息节点的数量。
        IUse%                      文件系统中已用信息节点数量占信息节点总和的百分比。

应用实例

1. 采用容易阅读与理解的形式显示文件系统存储空间的使用情况。

        $ df -t ext4 -h
        Filesystem          Size  Used Avail Use%   Mounted on
        /dev/mapper/vg_iscas-lv_root
                            23G    7.0G   15G  33%   /
        /dev/sda3           485M    29M  431M   7%   /boot
        $

2.查询文件系统信息节点的使用情况。

        $ df -t ext4 -i
        Filesystem          Inodes   IUsed   IFree IUse%   Mounted on
        /dev/mapper/vg_iscas-lv_root
                            1523712  110428  1413284   8%   /
        /dev/sda3            128016      38   127978    1%   /boot
        $

diff——显示文件之间的差别

语法格式

        diff [-abBcdeEilNqstTuwy] [-C num] [-I regexp] [-U num] [-W num] [gnu-opts]
              file1 file2
        diff [-abBcdeEilNqrstTuwy] [-C num] [-I regexp] [-S file] [-U num] [-W num]
              [-x pattern] [-X file] [gnu-opts] dir1 dir2
        diff [-abBcdeEilNqrstTuwy] [-C num] [-I regexp] [-S file] [-U num] [-W num]
              [-x pattern] [-X file] [gnu-opts] files dir
        diff [-abBcdeEilNqrstTuwy] [-C num] [-I regexp] [-S file] [-U num] [-W num]
              [-x pattern] [-X file] [gnu-opts] dir files
        diff [--help] [-v|--version]

命令简介

diff命令主要用于逐行比较两个指定的文件,显示文件之间的差异。也可以逐对比较两个目录中的相应文件。如果两个文件相同,diff命令通常不会输出任何信息;如果两个文件不同,diff命令将会以不同的方式(取决于命令行选项)显示两个文件的不同点。

在上述第一种语法格式中,file1file2是欲比较的两个文件。如果其中的一个文件指定为“-”,表示从标准输入读取数据,与另一个文件进行比较。

在第二种语法格式中,dir1dir2是两个目录,表示对两个目录中的同名文件逐对进行比较。

在第三种和第四种语法格式中,files 是一个或一组文件,dir 是一个目录,表示以指定的文件为准,与目录中的同名文件逐对进行比较。

命令选项

      -a,--text                         把所有文件当作文本文件处理,逐行比较。
      -b,--ignore-space-change          比较时忽略因空格数量的多少而引起的差别。
      -B,--ignore-blank-lines           比较时忽略因空行而引起的差别。
      -c,-C num,--context[=num]         首先输出两个文件的名字与修改时间等信息,其次输出第一个和第二
                                        个文件以起始行和终止行表示的数据行范围,最后输出不同的数据行
                                        及前后相邻的num行数据。num的默认值为3。
      -d,--minimal                      尽可能找出文件之间的微小差异。这个选项会影响diff命令的运行速
                                        度。
      -e,--ed                           针对两个文件的差别,输出一个ed脚本文件,利用其中提供的ed编
                                        辑命令,能够确保两个文件一致。
      -E,--ignore-tab-expansion         比较时忽略因制表符展开而引起的差异。
      -i,--ignore-case                  比较时忽略大小写字母的差异。
      -I regexp,--ignore-matching-lines=regexp
                                        比较时忽略两个文件中均匹配指定模式的数据行。
      -l,--paginate                     把比较结果传递给pr命令,形成一个标记时间、命令行和页码标题的
                                        输出形式,写到标准输出。
      -N,--new-file                     把不存在的文件作为空文件处理。
      -q,--brief                        仅当文件不同时才输出文字说明信息(文件相同时不显示任何信息)。
                                        可用于比较二进制数据文件。
      -r,--recursive                    按目录方式逐队比较文件时,递归地处理两个目录中的任何子目录。
      -s,--report-identical-files       如果两个文件相同,输出文字说明信息。如果两个文件不同,按常规
                                        处理,显示存在差异的数据行。
      -S file,--starting-file=file      比较目录时,从指定的文件开始逐一比较。可用于恢复中断的比较。
      -t,--expand-tabs                  展开制表符,输出适当数量的空格。
      -T,--initial-tab                  在输出的数据行之前插入一个制表符。
      -u,-U num,--unified[=num]         同“-c”选项,只是以起始行与输出行数替代数据行范围。
      -w,--ignore-all-space             比较时忽略所有的空格字符。
      -W num,--width=num                指定数据显示的最大行宽,默认的行宽为130列。
      -x pattern,--exclude=pattern      按目录方式比较时,忽略基本文件名部分(不含目录)匹配指定模式
                                        的文件或子目录。
      -X file,--exclude-from=file       按目录方式比较时,忽略基本文件名部分(不含目录)匹配指定文件
                                        中包含的任何模式的文件或子目录。
      -y,--side-by-side                 采用两列的形式显示文件之间的差异。
      --from-file=file1                 使用指定的文件作为第一个文件参数,与其他文件进行比较。注意,
                                        指定的文件可以是一个目录。
      --to-file=file2                   使用指定的文件作为第二个文件参数,与其他文件进行比较。注意,
                                        指定的文件可以是一个目录。
      --ignore-file-name-case           比较文件名时,忽略大小写字母的差异。
      --left-column                     指定“-y”选项两列显示时,再指定此选项表示仅在左边第一列输出
                                        相同的数据行,第二列省略。
      --speed-large-files               假定文件存在大量零散的微小差异,采用探索法加速处理这样的大型
                                        文件。
      --strip-trailing-cr               删除输入数据行尾的回车字符。
      --suppress-common-lines           禁止输出两个文件相同的数据行(默认的做法)。
      --unidirectional-new-file         把不存在的第一个文件作为空文件处理。

应用实例

1.比较两个文件,输出结果“3c3”表示两个文件的第3 行数据不同,原因是其中的数据发生了变动(“c”)。

      $ diff test1 test2
      3c3
      < which are all alike.
      ---
      > which are all different.
      $

2.采用两列的形式显示两个文件之间的差异。

      $ diff -W 80 -y test1 test2
      You are in a maze of                 You are in a maze of
      twisty little passages               twisty little passages
      which are all alike.               | which are all different.
      $

dig——查询DNS域名服务器

语法格式

      dig [server] [-b addr] [-c class] [-f batch] [-k key] [-m] [-p port]
          [-q name] [-t type] [-x addr] [-y [hmac:]name:key] [-4] [-6]
          [global-query-opts] [host] [type] [class] [local-query-opts]
      dig [-h] [-v]

命令简介

dig(domain information groper)是一种灵活的工具,用于查询DNS域名服务器,显示域名服务器返回的查询结果。正是由于其灵活性、易用及输出的信息明确,大多数DNS管理员都喜欢使用dig排解DNS问题。

在上述语法格式中,server是域名服务器的主机名或IP地址。当指定的server参数是主机名时,dig首先需要解析域名服务器的主机名,然后再查询域名服务器。如果未指定 server 参数,dig将查询/etc/resolv.conf文件,获取其中定义的域名服务器。host是欲查询的主机名(通常是规范域名)或IP地址(反向查询)。type表示查询的类型,可以是任何有效的查询类型,如ANY(查询任何资源记录)、A(查询IP地址)、NS(查询域名服务器)、SOA(查询区域授权记录)、MX(查询电子邮件服务器)、AXFR(查询区域配置文件)或SIG等。如果未提供类型参数,dig将会查询A记录。class是地址类型,如IN表示Internet。global-query-opts是全局查询选项,local-query-opts是本地查询选项,详见“查询选项”一节。

实际上,在dig命令的语法格式中,最常用的主要参数是域名服务器、主机名或IP地址,以及查询类型,简化的语法格式如下:

      dig [server] host [type]

尽管dig命令主要用于命令行的交互环境,通过读取文件中的查询请求,dig命令也可用于批处理操作模式。与早期的版本不同,BIND 9允许dig在一个命令行中同时发布多个查询。

除非告诉dig查询特定的域名服务器,dig命令将会尝试查询/etc/resolv.conf文件定义的每一个域名服务器。如果没有指定任何选项与参数,dig将会访问根域名服务器,执行NS查询。

利用${HOME}/.digrc文件,也可以设置基于用户的默认查询方式。在执行dig命令时,如果${HOME}/.digrc文件存在,dig将会读取其中的内容,把其中预设的任何选项置于命令行参数之前,形成一个组合的命令行。

注意,IN与CH既是地址类型的名字,也是顶级域的名字。因此,必要时可以使用“-c”与“-t”选项分别指定地址类型和查询类型,使用“-q”选项指定域名,或在查询顶级域时使用“IN.”与“CH.”,以免混淆。

在BIND 9环境中,除了支持“-f”选项,采用批处理的查询方式之外,dig命令还可以在一个命令行上同时指定多个查询。每个查询参数表示一个单独的查询,每个查询可以指定一组普通选项、查询标志位和查询选项等。

全局查询选项可以出现在命令行的最前面,其作用范围适用于任何一个查询。除了“+[no]cmd”查询选项之外,本地查询选项能够取消全局查询选项。例如,

        $ dig +qr www.isc.org any -x 159.226.97.84 isc.org ns +noqr

表示一个dig命令行能够同时执行3个查询:www.isc.org的任意资源记录查询,159.226.97.84地址的反向查询,以及isc.org域的NS资源记录的查询。全局查询选项“+qr”施加于每一个查询,表示dig命令应当显示每一个查询请求,而最后的查询中存在一个本地查询选项“+noqr”,意味着在dig命令查询isc.org域的NS资源记录时不需要显示查询请求。

命令选项

        -b addr       设置查询请求的源IP地址。指定的地址addr必须是本地主机的有效网络接口地址、
                      0.0.0.0或“::”。必要时也可以附加一个选用的端口号“#port”。
        -c class      指定查询的地址类型。默认的地址类型是IN(Internet)。其他有效的地址类型是HS
                     (Hesiod)和CH(Chaosnet)。
        -f batch      表示以批处理的方式运行dig命令,读取指定文件batch中的一系列查询请求,依次执
                      行每一个查询。batch 是一个文本文件,其中包含一系列查询请求,每个查询请求占
                      一行。每个查询请求的组成方式同命令行的用法完全一样。
        -i            使用RFC1886标准的IP6.INT域执行IPv6地址的反向查询。
        -k key        若想使用指定的事务签字(TSIG)签发dig命令发送的DNS查询及响应信息,可以使
                      用“-k”选项指定一个TSIG密钥文件。当然,也可以使用命令行选项“-y”直接指定
                      一个TSIG密钥本身。参见“-y”选项的说明。
        -m            启用内存使用情况的调试功能。
        -p port       如果需要使用非标准的端口号发送查询请求,可以使用“-p”选项。其中port是一个
                      端口号,用于取代默认的端口号 53。仅当域名服务器使用非标准的端口号监听DNS
                      查询时,这个选项才有用。
        -q name       用于指定欲查询的域名,以区别于其他参数。
        -t type       设置查询类型为指定的类型type。指定的查询类型可以是BIND 9支持的任何有效查询
                      类型。默认的查询类型是A,除非指定了“-x”选项,表示反向查询。如果指定的类
                      型是AXFR,表示请求传输区域配置文件。当请求传输增量区配置信息(IXFR)时,
                      可以把type设置成“ixfr=n”,其中n是SOA资源记录的序列号,表示传输自指定的
                      序列号迄今区内发生变动的配置信息。
        -x addr       反向查询,表示把IP地址解析成主机名。其中,addr是一个IPv4或IPv6地址。指定
                      “-x”选项时,不需要提供名字、地址类型和查询类型,dig自动地执行类似于
                      11.12.13.10.in-addr.arpa的反向名字查询,分别设置查询类型和地址类型为PTR与IN。
                      IPv6地址检索通常采用IP6.ARPA域的格式。
        -y[hmac:]name:key
                      指定TSIG密钥。其中,hmac是TSIG的类型,默认的类型是HMAC-MD5,name是
                      TSIG密钥的名字,key 是实际的密钥。密钥是一个 64 位编码的字符串。通常是由
                      dnssec-keygen命令生成的。当dig命令使用TSIG密钥认证时,查询的域名服务器需要
                      知道密钥及使用的算法,而这需要在named.conf配置文件使用server语句、key语句
                      和密钥进行适当的配置。
        -4,-6         强制dig仅使用IPv4或IPv6查询。
        -h            显示dig命令的语法格式、命令行选项、参数及其简单说明。
        -v            显示dig命令的版本信息,然后退出。

查询选项

dig命令支持的一系列能够影响其查询方式和输出结果的查询选项。每个查询选项由一个关键字加前置加号“+”组成。部分查询选项通过增加“no”的方式用于否定查询选项的意义,如设置或清除查询请求头信息中的标志位,部分查询选项用于确定究竟显示哪一部分查询结果,其他查询选项采用赋值的方式,用于确定超时或重新尝试的策略。

根据查询选项出现在命令行中的位置,查询选项分为全局查询选项与本地查询选项。当查询选项位于host参数之前的任何位置时,查询选项就是全局查询选项,位于host参数之后的任何位置时,查询选项就是本地查询选项。全局查询选项施加于所有的查询,本地查询选项仅影响特定的查询。下面是dig命令支持的部分查询选项。

      +[no]aaonly, +[no]aaflag
                           设置或清除查询分组数据中的aa标志位。
      +[no]additional      显示或禁止显示附加信息部分(即“additional”节)。dig命令通常会显示附加
                           信息部分。
      +[no]adflag          设置或清除查询分组数据中的AD(Authentic Data)标志位。这意味着请求域名
                           服务器说明返回的所有查询结果和授权信息部分是否已经按照域名服务器的安
                           全策略做了安全验证。AD=1 表示所有资源记录已经验证是安全的,查询结果没
                           有超出OPT-OUT范围。AD=0表示查询结果的部分信息是不安全的或未做过验
                           证。
      +[no]all             设置或清除所有的显示标志。
      +[no]answer          显示或禁止显示查询结果部分(即“answer”节)。dig命令通常会显示查询结果
                           部分。
      +[no]authority       显示或禁止显示授权信息部分(即“authority”节)。dig命令通常会显示授权信
                           息部分。
      +[no]besteffort      尝试显示或禁止显示残缺的响应信息。默认的做法是禁止显示残缺的响应信
                           息。
      +[no]cdflag          设置或清除查询分组数据中的CD(Checking Disabled)标志位。这意味着请求域
                           名服务器不要执行响应信息的DNSSEC验证。
      +[no]cl              输出资源记录信息时显示或禁止显示CLASS信息。
      +[no]cmd             显示或禁止显示dig命令的版本信息和预置的查询选项。dig命令通常会输出命
                           令版本等基本说明信息。
      +[no]comments        表示是否显示注释行与标题信息。dig命令通常会显示注释行和标题信息。
      +[no]dnssec          设置或清除查询分组数据中的DO(DNSSEC OK)标志位,表示发送或禁止发送
                           DNSSEC记录(位于查询请求的OPT附加节)。
      +[no]fail            如果收到SERVFAIL响应信息,允许或禁止尝试查询下一个域名服务器。默认
                           的做法是禁止尝试查询下一个域名服务器。
      +[no]identify        当启用了“+short”选项时,表示显示还是禁止显示提供查询结果的域名服务器
                           的IP地址和端口号。如果要求提供简洁的查询结果(参见“+short”查询选项),
                           默认的做法是不显示提供查询结果的域名服务器的源地址和端口号。
      +[no]ignore          UDP响应信息不完整时忽略之,不必采用TCP连接重试。默认的做法是执行
                           TCP重试操作。
      +[no]multiline       以多行形式详细显示SOA资源记录或禁止多行显示。通常,dig命令每行显示一
                           个资源记录,以便于解析dig命令的输出。因此,SOA记录将会压缩在一行中输
                           出。
      +[no]nsid            在发送查询请求时,指定是否包括EDNS域名服务器ID。
      +[no]nssearch        指定这个查询选项时,dig将会尝试找出授权的域名服务器,其中的区配置信息
                           中恰好包含欲查询的域名,显示区域中每个域名服务器的SOA记录。
      +[no]qr              显示或禁止显示发送的查询请求。通常不显示查询请求。
      +[no]question        返回查询结果时是否显示查询请求部分(即“question”节)。作为一种说明信
                           息,dig命令通常会显示查询请求部分。
      +[no]recurse         设置或清除查询分组数据中的RD(Recursion Desired)标志位。RD标志位是一
                           个默认设置,意味着dig命令通常会发送递归的查询请求。当使用“+nssearch”
                           或“+trace”查询选项时,dig命令将会自动禁用递归查询功能。
      +[no]search          使用或禁止使用/etc/resolv.conf文件中由domain或search语句定义的域名检索列
                           表,组合成完整的规范域名。通常,dig命令不使用域名检索列表。
      +[no]short           提供详细的还是简洁的查询结果,即是否采用最简洁的形式回答查询请求。dig
                           命令通常会提供详细的查询结果。
      +[no]showsearch      执行或禁止执行显示中间结果的探索。
      +[no]stats           表示是否显示查询统计信息。dig命令通常会显示查询的统计数据。
      +[no]tcp,+[no]vc     查询域名服务器时使用或不使用TCP连接。默认的做法是使用UDP连接,除非
                           请求的查询是AXFR或IXFR,此时要求使用TCP连接。
      +[no]trace           在查询域名解析信息时,确定是否启用从根域名服务器开始的查询路径跟踪功
                           能。dig命令通常禁用查询路径的跟踪功能。启用跟踪功能时,dig命令将会采用
                           迭代查询方式解析域名信息,并从根域名服务器开始,显示每个DNS服务器处
                           理域名解析请求时返回的查询结果。
      +[no]ttlid           输出资源记录信息时显示或禁止显示TTL值。
      +bufsize=bytes       设置使用EDNS0广播的UDP消息缓冲区的容量,单位为字节。最大和最小缓冲
                           区的容量分别是65535字节和0。如果设置的数值大于0,将会引起dig命令发送
                           EDNS查询。
      +domain=dname        设置域名检索列表,使之包含指定的单个域 dname。如同指定了“+search”查
                           询选项一样,启用域名检索列表处理。注意,“+domain”查询选项指定的域同
                           /etc/resolv.conf文件中domain语句定义的域的效果是相同的。
      +edns=num            指定查询的EDNS版本。有效的版本值是0~255。设置EDNS版本将会引起dig
                           发送EDNS查询。“+noedns”将会清除已设置的EDNS版本。
      +ndots=dots          设置在规范域名中一个绝对域名必须存在的句点“.”的数量。默认值是
                           /etc/resolv.conf文件中ndots语句定义的数量,如果语句不存在,默认值是1。句
                           点少于指定数量或默认值的域名按相对域名解释,从而需要在/etc/resolv.conf文
                           件search或domain语句中指定的域中检索。
      +retry=count         设置重试UDP查询域名服务器的次数。重试的默认次数为 2。与“+tries”不
                           同,这里不包括原先已做过的查询。
      +time=timeout        把查询的超时值设置为count秒。默认的超时值为5秒。如果设置的超时值小于
                           1秒,dig自动调整为1秒。
      +tries=count         设置尝试使用UDP查询域名服务器的次数。count的默认值为3次。如果指定的
                           次数小于等于0,dig自动调整尝试次数为1。

应用实例

1.查询指定域(如isc.org)的域名服务器。

      $ dig isc.org ns

2.利用dig命令的查询选项,仅仅显示用户想要的返回信息。

      $ dig +noall isc.org ns +answer
      isc.org.              4781  IN     NS     ns.isc.afilias-nst.info.
      isc.org.              4781  IN     NS     ord.sns-pb.isc.org.
      isc.org.              4781  IN     NS     ams.sns-pb.isc.org.
      isc.org.              4781  IN     NS     sfba.sns-pb.isc.org.
      $

3.查询指定域(如isc.org)中SOA资源记录。

      $ dig isc.org SOA

dirname——显示文件路径名的目录部分

语法格式

      dirname name
      dirname [--help] [--version]

命令简介

显示给定文件路径名name的目录部分(即删除文件路径名中的文件名及最后一个斜线字符“/”)。如果给定的文件名参数不包含斜线字符“/”,输出一个句点“.”,意味着当前目录。

命令选项

      --help         显示命令的简单说明与用法等帮助信息,然后正常退出。
      --version      显示命令的版本与作者等信息,然后正常退出。

应用实例

1.显示文件路径名“/usr/bin/sort”的目录部分。

      $ dirname /usr/bin/sort
      /usr/bin
      $

2.显示文件路径名“stdio.h”的目录部分(隐含着文件路径名中存在一个当前目录“.”部分)。

      $ dirname stdio.h
      .
      $

dmesg——显示或控制系统内核的环形缓冲区

语法格式

      dmesg [-cr] [-n level] [-s bufsize]

命令简介

dmesg命令主要用于考察或控制系统内核的环形缓冲区。利用这个命令,可以查询系统引导过程中输出的诊断信息。

命令选项

      -c             显示环形缓冲区中的数据之后清除其中的数据内容。
      -n level       设置控制台显示的日志信息记录级别。例如,“-n 1”表示除了系统瘫痪信息之外,
                     禁止其他级别的日志信息出现在控制台上。但所有级别的日志信息仍会写入
                     /proc/kmsg文件,故仍然可以利用syslogd(8)控制究竟把什么内核信息写入哪个日志文
                     件中。当使用“-n”选项时,dmesg将会禁止输出或清除内核环形缓冲区。
      -r             显示环形消息缓冲区中的原始数据,包括日志级别前缀等。
      -s bufsize     使用指定大小的缓冲区查询系统内核的环形缓冲区。默认的缓冲区为 16392 字节,默
                     认的内核环形缓冲区为 16384 字节。如果已经把内核环形缓冲区设置得大于默认值,
                     利用这个选项可以查询其完整的内容。

应用实例

1.查询系统引导过程中输出的诊断信息。

      $ dmesg

2.显示系统内核环形消息缓冲区中的原始数据。

      $ dmesg -r

du——查询文件系统磁盘空间使用情况

语法格式

      du [-0abcDhHklLmPsSx] [-B size] [-X file] [gnu-opts] [dirs]
      du [-0abcDhHklLmPsSx] [-B size] [gnu-opts] --files0-from=file
      du [--help] [--version]

命令简介

du命令用于显示指定目录或当前目录中每个文件、每个子目录,以及其中的每个文件占用的数据块数量(默认的单位是1KB),最终给出整个目录占用的磁盘空间总量。如果指定的命令行参数是一个普通文件,则显示指定文件占用的存储空间。

在上述第一种语法格式中,dirs是准备检查的目录或文件。如果同时指定多个目录或文件,则目录或文件之间需加空格分隔符。第二种语法格式表示从指定的文件file中读取目录或文件,检查其空间使用情况。

命令选项

      -0,--null                       使用NULL字符(而非换行符)作为每个输出数据行的行终止符。
      -a,--all                        以KB为单位,显示指定目录或当前目录中每个文件、每个子目录,
                                      以及其中每个文件占用的磁盘空间数量,最终给出整个目录占用的磁
                                      盘空间总量。如果指定的命令行参数是一个普通文件,则显示指定文
                                      件占用的存储空间。
      -b,--bytes                      以字节为单位,显示指定目录或当前目录包括其中所有子目录与文件
                                      占用的磁盘空间数量,最后给出累计占用的磁盘空间总量。这相当于
                                      同时指定了“--apparent-size”与“--block-size=1”选项。
      -B size,--block-size=size        以指定字节数量的数据块为计数单位,显示指定目录或当前目录以及
                                      其中所有子目录占用的磁盘空间数量。其中,size 是一个数字,表示
                                      字节数,也可以是KB(1000)、K(1024)、MB(10002)、M(10242)、
                                      GB(10003)、G(10243)以及T、P、E、Z或Y等字符(字符前也
                                      可以加数字),表示相应的单位。
      -c,--total                      以KB为单位,显示指定目录或当前目录包括其中所有子目录与文件
                                      占用的磁盘空间数量,最后给出累计占用的磁盘空间总量。
      -D,--dereference-args           仅对命令行参数指定的符号链接文件,计算其引用的文件或目录。
      -h,--human-readable             采用容易阅读与理解的形式显示存储空间信息,即以KB、MB或GB
                                      为单位,如12K、2.4M或2G等,显示指定目录或当前目录以及其中
                                      所有子目录占用的磁盘空间数量。
      -H                              相当于“-D”选项。
      -k                              以KB为单位,显示指定目录或当前目录以及其中所有子目录与文件
                                      占用的磁盘空间数量。通常,“-k”是du命令的默认选项,也相当于
                                      “--block-size=1K”选项。
      -l,--count-links                计算所有的文件,即使是硬链接文件,也不考虑存储空间是否共用,
                                      全部按独立文件计算。
      -L,--dereference                总是计算符号链接文件引用的任何文件或目录。
      -m                              以MB为单位,显示指定目录或当前目录以及其中所有子目录与文件
                                      占用的磁盘空间数量。“-m”选项相当于“--block-size=1M”选项。
      -P,--no-dereference             总是计算符号链接文件本身,而不考虑其引用的文件或目录(这是du
                                      命令默认的做法)。
      -s,--summarize                  以KB为单位,显示指定目录或当前目录(包括其中的所有子目录和
                                      文件)占用的磁盘空间数量。
      -S,--separate-dirs              统计时不计算子目录。
      -x,--one-file-system            跳过位于不同文件系统中的目录。
      -X file,--exclude-from=file      排除匹配指定文件中包括的任何模式的文件。
      --apparent-size                 按照文件或目录本身的大小而非分配的数据块计算其占用的存储空
                                      间。
      --exclude=pattern               排除匹配指定模式的文件。这里所谓的模式只是Shell文件名模式,
                                      并非正则表达式,指定文件名模式时可以使用“?”或“*”等通配
                                      符。例如,如果指定的模式为“*.o”,表示排除匹配文件名后缀为
                                      “.o”的任何文件。
      --files0-from=file              读取指定的文件,其中含有以NULL字符为文件名终止符的文件,计
                                      算并累计每个文件占用的磁盘空间。如果指定的文件为“-”,则从
                                      标准输入读取文件名。
      --max-depth=n                   除当前或指定目录之外,还统计其n级目录之内所有子目录占用的存
                                      储空间。如果指定了“-a”选项,也包括 n 级子目录内的文件。因
                                      此,“--max-depth=0”相当于“-s”选项。
      --si                            类似于“-h”选项,但以1000(而非1024)作为递进单位。
      --time                          显示任何文件或子目录的最近修改时间。
      --time=word                     按照 word 指定的时间类型显示文件或子目录的时间,其中atime、
                                      access或use均表示最近访问时间,ctime或status均表示文件状态改
                                      变时间。

应用实例

1.查询指定目录的存储空间使用情况。

      $ du -h /home/gqxing/data
      2.6M   /home/gqxing/data/backup
      3.8M   /home/gqxing/data/security
      1.6M   /home/gqxing/data/recent
      8.0M   /home/gqxing/data
      $

2.统计/boot目录占用的存储空间数量(约19MB)。

      $ du -s /boot
      18570    /boot
      $

dump——ext2/ext3/ext4文件系统备份

语法格式

      dump [-level] [-aMnqSuv] [-A file] [-B records] [-b blocks] [-D file]
          [-e inodes] [-E file] [-f file] [-F script] [-L label] [-T date]
          filesys
      dump [-W|-w]

命令简介

dump命令用于考察ext2/3/4文件系统中的文件,确定哪些文件需要备份,把需要备份的文件复制到给定的磁盘、磁带或其他存储介质(至于远程备份详见“-f”选项的说明)。

filesys可以是需要备份的文件系统安装点、文件系统分区的设备文件名(包括尚未安装的文件系统),或作为文件系统子集的一组文件与目录。文件系统安装点是文件系统目录层结构中的一个目录,其中安装了某个文件系统。

如果备份的是一组文件与目录,不能使用“-u”选项更新/etc/dumpdates文件,备份级别只能选用0,选择的所有文件与目录必须位于同一个文件系统。

如果未用“-f”选项指定设备文件名,dump将使用TAPE变量的值作为备份设备。TAPE变量的值可以是tapename(磁带机)、host:tapename(远程主机上的磁带机)或user@host:tapename。如果TAPE变量为空,默认的备份设备是/dev/st0。

如果备份的数据量大于输出介质,dump可以把备份数据分成多个卷。目前,大多数存储介质都有额定的容量。在开始备份之前,可以使用“-S”选项估算备份的数据量,根据存储介质的额定容量计算需要多少存储介质。此外,也可以使用“-B”选项指定存储介质的容量。当写满一个存储介质之后,根据存储设备返回的介质结束标志,dump会使用相同的设备文件名,提示用户更换介质。

dump命令的主要用途是备份系统或应用数据。在开始备份之前,首先要有一个备份策略,根据系统的状况,数据的容量,备份的时间,恢复的要求,以及存储介质的情况,制订一个备份计划,例如,每周、每10天、每半月或每月制作一个完整备份,然后每天做一次增量备份等。

在制作完整备份时,必须使用备份级别0。制作增量备份时,可以在1~9中任选一个备份级别。

注意,在运行dump命令时,文件系统应处于静止状态,否则无法确保当前文件系统与实际备份数据的一致性,从而导致restore命令无法正确地恢复文件。一个文件系统能够保持静止状态,仅当文件系统已经卸载,或系统处于单用户运行模式。

命令选项

      -level        备份级别。备份级别可以是任何整数(合法的备份级别之前为 0~9,现可为任意整
                    数),其中0表示完整备份整个文件系统。大于0的任何备份级别均为增量备份,这
                    意味着仅仅备份自上一次执行较低级别的备份以来新建或修改过的所有文件。默认的
                    备份级别为0。
      -a            表示由dump自动确定存储介质的容量,或只管写,直至遇到介质结束标志再做处
                    理。这是默认的处理方式。
      -A file       生成一个备份文件列表,写入指定的文件中,以便restore命令能够确定准备恢复的文
                    件是否位于备份介质的档案文件中。
      -b blocks     指定每个备份记录包含多少1KB的数据块。每个备份记录通常由10个1KB的数据块
                    组成。可以指定的最大值为1024,但最好不要超过64个1KB的数据块。
      -B records    指定每个存储介质能够容纳的 1KB数据块的数量。通常不需要指定,dump能够检测
                    存储介质的结束标志。当达到指定的容量(或写满存储介质)时,dump会提示并等待
                    用户更换介质。这个选项将禁止dump基于长度和密度计算磁带的容量。指定这个参
                    数时可以提供一组数值,中间加逗号“,”分隔符。每个数值依次对应一个备份卷。
      -D file       指定存储完整备份或增量备份信息的文件。默认的文件为/etc/dumpdates。
      -e inodes     备份时排除指定信息节点号对应的文件。指定信息节点时,多个信息节点之间需加逗
                    号“,”分隔符。注意,如果想要查询文件和目录的信息节点,可以使用stat或ls命
                    令。
      -E file       从指定的文本文件中获取欲排除的信息节点,其中每个信息节点占一行。
      -f file       把备份数据写到指定的文件。文件参数可以是设备文件(如/dev/st0磁带机)、普通文
                    件或减号“-”(标准输出)。指定这个参数时可以同时给出多个文件,文件名之间加
                    逗号“,”分隔符。按照给定的顺序,每个文件可以作为多卷备份中的一个备份卷。如
                    果指定的文件为“host:file”或“user@host:file”,dump将利用rmt命令,把备份数据
                    写入远程主机中的指定文件(文件必须事先存在,dump不会在远程系统中创建新的文
                    件)。远程rmt命令默认的路径名为/etc/rmt,必要时可以使用环境变量RMT重新定
                    义。
      -F script     在写入每个备份卷(最后一个除外)结束之后,运行指定的脚本。dump将会把设备文
                    件名和当前备份卷的卷号作为命令行参数传递给指定的脚本。脚本运行结束后,如果
                    其返回值为0,意味着dump可以继续执行备份,无须请求用户更换磁带。如果返回值
                    为 1,dump将会提示用户更换介质,然后才能继续执行备份。其他返回值将会导致
                    dump终止执行。
      -L label      作为备份介质的卷标,把指定的字符串写入备份文件的头部,使restore和file等工具
                    能够快速访问及识别文件的类型。当前,字符串的长度限于16 个字符(包括终止符
                    “\0”)。
      -M            支持多卷备份功能。“-f”选项指定的文件名将会作为一个前缀,用于命名一系列备
                    份文件,如<filename>001、<filename>002 等。dump将会依次写入每个备份文件。在
                    ext2文件系统中,为了克服2GB文件大小的限制,存储备份文件,这个选项是非常有
                    用的。
      -n            无论何时,只要需要操作员干预,dump将会利用类似wall命令的方法,通知属于用户
                    组operator的所有用户。
      -q            无论何时遇到问题需要操作员干预(写错误或需更换磁带等),不提示任何信息,而
                    是立即终止dump的运行。
      -S            仅仅估算存储容量的需求,而不真正备份。在开始备份之前,可利用这个选项确定究
                    竟需求多大的存储空间或容量,从而确定需要多少备份介质。注意,dump显示的是
                    指定文件系统、目录或文件的字节数量。
      -T date       使用指定的时间(而非/etc/dumpdates文件中记录的时间)作为起始备份时间,时间格
                    式为“www mmm dd hh:mm:ss yyyy”,如“Thu Nov 12 00:55:052012”,时区偏移值
                    格式为“±HHMM”,如+0800(北京时间)。如果未指定时区偏移值,可把备份时
                    间看作本地时间。注意,“-T”选项不能与“-u”选项一起使用。
      -u            在成功完成备份之后,更新/etc/dumpdates文件。这是一个ASCII文件,文件由“<文
                    件系统或设备文件名><备份级别><备份时间><时区偏移值>”格式的记录组成(如果
                    未指定时区偏移值,可以把备份时间看作本地时间)。
      -v            采用详细显示方式,输出命令的处理过程及动作等信息。
      -w            类似于“-W”,但仅限于显示/etc/mtab与/etc/fstab文件中需要备份的文件系统。
      -W            指定这个选项时,dump将会依据/etc/dumpdates、/etc/fstab与/etc/mtab文件,告诉用户
                    哪些文件系统需要备份,文件系统的最近备份日期与备份级别,并高亮显示应备份的
                    文件系统。如果选用了“-W”选项,dump将会忽略其他选项,显示上述信息后立即
                    退出。

应用实例

1.使用0 作为备份级别,制作一个的完整备份,把数据写到一个7GB的磁带上,且在完成备份后更新/etc/dumpdates文件。

      # dump -0uf /dev/st0 /appdata
        DUMP: Date of this level 0 dump: Fri Apr 11 01:00:302012
        DUMP: Dumping /dev/sdb2 (/appdata) to /dev/st0
        DUMP: Label: none
        DUMP: Writing 10 Kilobyte records
        DUMP: mapping (Pass I) [regular files]
        DUMP: mapping (Pass II) [directories]
        DUMP: estimated 6105231 blocks.
        DUMP: Volume 1 started with block 1 at: Fri Apr 11 01:00:322012
      ︙
      #

2.在制作完整备份之后,选用一个大于0的备份级别,定期执行增量备份,备份发生变动的文件。

      # dump -6uf /dev/st0 /appdata
          DUMP: Date of this level 6 dump: Sat Apr 12 01:00:302012
          DUMP: Date of last level 0 dump: Fri Apr 11 01:00:302012
          DUMP: Dumping /dev/sdb2 (/appdata) to /dev/st0
          DUMP: Label: none
          DUMP: Writing 10 Kilobyte records
      ︙
      #