Linux指令从初学到精通
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 文本编辑

在 Linux 环境下文本的编辑命令具有多样化的特点,相关的操作命令较为丰富,使用也较为灵活、方便。这些命令对于编辑文本具有实际的应用意义。文本编辑操作通常在文本编辑器应用程序中交互地进行,用户可以根据需要去选择相关的编辑器,有些命令可以快速地完成任务。

2.1 col(过滤控制字符)

(1)频度等级:☆

(2)功能说明:

col命令用于过滤控制字符。

(3)语法:

        col [-bfx][-l<缓冲区列数>]

(4)所属包:

        util-linux

(5)使用技巧:

通常在使用col时,会使用管道符“|”和输出重定向符“>”或“>>”。

(6)相关命令:

        expand

(7)参数:

col的参数如表2-1所示。

表2-1 col参数表

(8)补充说明:

在许多UNIX说明文件中,都有RLF控制字符。当运用shell重向字符“>”和“>>”,把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符。

(9)典型实例:

下面以 man 命令帮助文档为例,讲解 col 命令的使用。将 man 命令的帮助文档保存为man_help,使用-b参数过滤所有控制字符。在终端中使用如下命令:

        man man | col-b > man_help
        #将man的帮助文件手册重定义为man_help文件,并使用col过滤掉所有的控制字符

提示

其中“|”用于建立管道,把man命令的输出结果转为col命令的输入数据。

在上例中,如果不使用col命令,直接使用vi命令查看,则会出现许多控制字符的乱码。

2.2 colrm(滤掉指定的列)

(1)频度等级:☆

(2)功能说明:

Colrm命令用于滤掉指定的列。

(3)语法:

        colrm [起始列编号<结束列编号>]

(4)所属包:

        util-linux

(5)使用技巧:

使用该命令如果不使用参数,则不会删除任何列,而只是将内容输出到标准输出设备中。

(6)相关命令:

        paste

(7)参数:

colrm的参数一般只包括需过滤的列,包括起始与结束的列,如表2-2所示。

表2-2 colrm参数表

(8)补充说明:

colrm 指令从标准输入设备读取数据,转而输出到标准输出设备。如果不加任何参数,则该指令不会过滤任何一列。

(9)典型实例:

例1:不带任何参数时该命令不会删除任何列。例如在命令行中输入:

        colrm                               #不删除任何列

按回车键后,光标将在第一行闪烁,等待标准输入,此时输入字符,如“Hello Linux!”,再按回车键后第二行将出现与第一行相同内容,此时按Ctrl+C组合键可以退出。终端中显示的内容如下所示:

        cmd@hdd-desktop:~$ colrm
        Hello Linux!                   #输入Hello Linux!字符串
        Hello Linux!                   #输出刚才输入的字符串Hello Linux!

例 2:使用该命令时不带参数没有太大的意义,一般我们使用该命令是为了删除指定列的内容,如想要删除第4列之后的所有内容,可以使用如下命令:

        colrm 4                         #删除第4列以后的所有内容

类似于上例,此时标准输入等待输入,用户输入字符串按回车键后,将输出如下结果:

        cmd@hdd-desktop:~$ colrm 4
        Hello Linux!                   #输入Hello Linux!字符串
        Hel                             #输出删除了第4列以后所有内容的字符串

例3:删除指定列的内容。如删除第4列到第6列的内容,可使用如下命令:

        colrm 4 6                           #删除从第4列到第6列字符

输出的结果如下:

        cmd@hdd-desktop:~$ colrm 4 6
        Hello Linux!                        #输入Hello Linux!字符串
        HelLinux!                           #输出删除了从第4列到第6列字符的字符串

例4:删除指定文件中指定列的内容。如想删除testfile文件第4到第6列之间的内容,可使用如下命令:

        colrm 4 6 < testfile

为了便于对比,首先查看一下testfile文件,使用cat命令可以看到testfile文件中的内容如下:

        cmd@hdd-desktop:~$ cat testfile          #cat命令查看testfile文件内容
        hello Linux!                             #以下为文件testfile的全部内容
        Linux is a free Unix-type operating system.
        This is a Linux testfile!
        Linux

然后使用colrm命令,过滤掉从第4列到第6列的内容,其输出的结果如下:

        cmd@hdd-desktop:~$ colrm 4 6 < testfile #使用colrm过滤字符
        helLinux!                                 #过滤后输出的文件内容
        Linis a free Unix-type operating system.
        This a Linux testfile!
        Lin

提示

需要说明的是,该命令并不是修改命令,它的输入与输出只是针对标准输入与输出终端,即源文件testfile中的内容并没有改变。

例5:删除指定文件列的内容再存储为新文件。如删除testfile文件第4到第6列之间的内容,然后将其存储为testfile1。此时,使用的命令应该为:

        colrm 4 6 < testfile > testfile1

查看testfile1文件的内容,可以看到:

        cmd@hdd-desktop:~$ cat testfile1         #cat命令查看testfile1文件内容
        helLinux!                                #过滤后输出到文件testfile1的内容
        Linis a free Unix-type operating system.
        This a Linux testfile!
        Lin

2.3 comm(比较两个已排序的文件)

(1)频度等级:☆☆

(2)功能说明:

comm命令用于比较两个已排过序的文件。

(3)语法:

        comm [-123][--help][--version][第1个文件][第2个文件]

(4)所属包:

        coreutils

(5)使用技巧:

comm命令比较的文件是有序文件,所以在使用comm命令之前,应该对比较的文件进行排序,关于排序的操作,请参考sort命令。

(6)相关命令:

        sort

(7)参数:

comm的参数如表2-3所示。

表2-3 comm参数表

(8)补充说明:

这项指令会一列列地比较两个已排序文件的差异,并将其结果显示出来,如果没有指定任何参数,则会把结果分成3行显示:第1行仅是在第1个文件中出现过的列,第2行是仅在第2个文件中出现过的列,第3行则是在第1与第2个文件里都出现过的列。若给予的文件名称为“-”,则comm指令会从标准输入设备读取数据。

(9)典型实例:

例1:以默认的方式比较排序文件。如要比较文件testfile_1和文件testfile_2(这两个文件只有第一行相同),可使用如下命令:

        comm testfile_1 testfile_2              #比较testfile_1和testfile_2文件

其中testfile_1文件的内容如下:

        cmd@hdd-desktop:~$ cat testfile_1
        HELLO LINUX!               #testfile_1中的第一行内容,与testfile_2中第一行相同
        LINUX IS A FREE UNIX-TYPE OPERATING SYSTEM. #从这一行开始不一样
        THIS IS A LINUX TESTFILE!
        LINUX

testfile_2文件的内容如下:

        cmd@hdd-desktop:~$ cat testfile_2
        HELLO LINUX!                                          #第一行与testfile_1中相同
        Linux is a free unix-type opterating system.          #不同于testfile_1文件
        This is a linux testfile!
        Linux test

当使用comm命令比较这两个文件之后,输出结果如下:

        cmd@hdd-desktop:~$ comm testfile_1 testfile_2
        HELLO LINUX!                                          #相同的第一行
        LINUX IS A FREE UNIX-TYPE OPERATING SYSTEM.           #不同的第一行,testfile_1中的内容
        Linux is a free unix-type opterating system.          #不同的第一行,testfile_2中的内容
        THIS IS A LINUX TESTFILE!                             #不同的第二行,testfile_1中的内容
        This is a linux testfile!                             #不同的第二行,testfile_2中的内容
        LINUX                                             #不同的第三行,testfile_1中的内容
        Linux test                                        #不同的第三行,testfile_2中的内容

例2:接上例,比较排序文件,不显示第一个文件中的独有的行。使用命令如下:

        comm -1 testfile_1 testfile_2

输出结果如下:

        cmd@hdd-desktop:~$ comm -1 testfile_1 testfile_2
            HELLO LINUX!                             #相同的第一行
        Linux is a free unix-type opterating system.#第二个文件出现的不同的行
        This is a linux testfile!
        Linux test

2.4 csplit(分割文件)

(1)频度等级:☆

(2)功能说明:

分割文件。

(3)语法:

        csplit [-kqsz][-b<输出格式>][-f<输出字首字符串>][-n<输出文件名位数>][--help][--version]
    [文件][范本样式...]

(4)所属包:

        coreutils

(5)使用技巧:

如果指定的文件为“-”,则csplit命令从标准输入设备读取数据,然后将输入的内容按指定的方式分割。

(6)相关命令:

        cat、split

(7)参数:

csplit的主要参数如表2-4所示。

表2-4 csplit参数表

(8)补充说明:

将文件依照指定的范本样式切割后,分别保存成名称为xx00,xx01,xx02…的文件。

(9)典型实例:

例1:将文本文件testfile以第2行为分界点切割成两份,使用如下命令:

        csplit testfile 2                   #以第2行为分界点切割文件

testfile文件中的内容如下:

        cmd@hdd-desktop:~$ cat testfile         #查看testfile文件内容
        hello Linux!
        Linux is a free Unix-type operating system.
        This is a Linux testfile!
        Linux

使用csplit命令,输出结果如下:

        cmd@hdd-desktop:~$ csplit testfile 2
        13                              #xx00文件字符个数
        76                              #xx01文件字符个数

其中第1行是第一个文件xx00的字符个数,同样,第2行为第二个文件xx01的字符个数。同时,在testfile的同目录下将生成两个文件,文件名分别为xx00、xx01,xx00中的内容为:

        cmd@hdd-desktop:~$ cat xx00                  #查看分割后的xx00文件内容
        hello Linux!                                 #testfile文件第1行的内容

xx01中的内容为:

        cmd@hdd-desktop:~$ cat xx01                 #查看分割后的xx01文件内容
        Linux is a free Unix-type operating system. #testfile文件第2行以后的内容
        This is a Linux testfile!
        Linux

2.5 dd(读取、转换并输出数据

(1)频度等级:☆☆

(2)功能说明:

读取、转换并输出数据。

(3)语法:

        dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<块数>][ibs=<字节数>][if=<文件>]
    [obs=<字节数>][of=<文件>][seek=<块数>][skip=<块数>][--help][--version]

(4)所属包:

        coreutils

(5)使用技巧:

使用dd指令可以制作光盘ISO镜像文件,指令格式为“dd if=/dev/cdrom/test.iso”。

使用dd指令还可以制作软盘镜像文件,格式为“dd if=/dev/fd/floppy”。

(6)相关命令:

(7)参数:

dd的主要参数如表2-5所示。

        cp

表2-5 dd参数表

(8)补充说明:

dd可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

(9)典型实例:

例1:在Linux下制作启动盘,可使用如下命令:

        dd if=boot.img of=/dev/fd0 bs=1440k

例2:将testfile文件中的所有英文字母转换为大写,然后转成为testfile_1文件,在命令提示符中使用如下命令:

        dd if=testfile_2 of=testfile_1 conv=ucase

其中testfile_2的内容为:

        cmd@hdd-desktop:~$ cat testfile_2           #testfile_2的内容
        HELLO LINUX!
        Linux is a free unix-type opterating system.
        This is a linux testfile!
        Linux test

转换完成后,testfile_1的内容如下:

        cmd@hdd-desktop:~$ dd if=testfile_2 of=testfile_1 conv=ucase #使用dd命令,大小写转换
        记录了 0+1 的读入
        记录了 0+1 的写出
        95字节(95 B)已复制,0.000131446 秒,723 KB/s
        cmd@hdd-desktop:~$ cat testfile_1           #查看转换后的testfile_1文件内容
        HELLO LINUX!
        LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.
        THIS IS A LINUX TESTFILE!
        LINUX TEST                               #testfile_2中的所有字符都变成了大写字母

例3:由标准输入设备读入字符串,并将字符串转换成大写后,再输出到标准输出设备,使用的命令为:

        dd conv=ucase

输入以上命令后按回车键,输入字符串,再按回车键,按组合键Ctrl+D退出,出现以下结果:

        cmd@hdd-desktop:~$ dd conv=ucase
        Hello Linux!                             #输入字符串后按回车键
        HELLO LINUX!                             #按组合键Ctrl+D退出,转换成大写结果
        记录了 0+1 的读入
        记录了 0+1 的写出
        13字节(13 B)已复制,12.1558 秒,0.0 KB/s

2.6 ed(文本编辑器)

(1)频度等级:☆

(2)功能说明:

ed命令用于文本编辑。

(3)语法:

        ed [-][-Gs][-p<字符串>][--help][--version][文件]

(4)所属包:

        ed

(5)使用技巧:

ed命令并不是一个常用的命令,一般使用比较多的是vi指令。但ed文本编辑器对于编辑大文件或对于在shell脚本程序中进行文本编辑很有用。

(6)相关命令:

        jed、joe、sed、vim

(7)参数:

ed的主要参数如表2-6所示。

表2-6 ed参数表

(8)补充说明:

ed是Linux中功能最简单的文本编辑程序,一次仅能编辑一行且是非全屏幕方式的操作。

ed文本编辑器有命令模式(command mode)和输入模式(input mode)。刚开始运行时进入的是命令模式,默认的命令模式没有任何提示信息,也没有命令提示符。在命令模式下输入参数可进入输入模式,如果要回到命令模式,可在新的一行输入“.”再按回车键即可。

ed编辑器的主要操作命令如表2-7所示。

表2-7 ed编辑器的操作命令表

(9)典型实例:

例 1:ed 文本编辑器默认情况下是没有命令提示符的,可以通过参数“-p”为其指定命令模式的提示符号。如给ed指定命令提示符为ed$,可使用命令:

        ed-p ed$                   #指定ed的命令提示符

运行后默认为命令模式,此时输入“a”、“c”或者“i”即可进行文本编辑,输入“q”则可退出ed编辑器,并返回到命令行提示符下,如下所示:

        cmd@hdd-desktop:~$ed      #运行ed编辑器
        q
        cmd@hdd-desktop:~$ed.p ed$#允许ed并指定ed的命令提示符
        ed$q

例2:通过ed编辑文件。通过ed命令编辑testfile文件,并给ed指定命令模式的提示符为ed$,使用命令为:

        ed testfile.p-ed$              #运行ed并指定ed的命令提示符

在打开ed后的第一行出现的是该文件的字节数,第二行为命令模式,“ed$”为设定的命令模式下的提示符,在该命令提示符后面输入“a”表示将输入的内容接在原文件内容最后一行的后面。输入完两行字符之后输入“.”,并按回车键回到命令模式。在命令模式下输入“w”将刚才的字符保存,此时将出现保存后该文件的大小(字节数),最后输入“q”退出编辑器并返回到命令提示符模式。

首先我们查看testfile文件的内容:

        cmd@hdd-desktop:~$ cat testfile
        hello Linux!               #原文件中的内容
        Linux is a free Unix-type operating system.
        This is a Linux testfile!
        Linux

然后使用ed添加内容后输出结果如下:

        cmd@hdd-desktop:~$ ed testfile
        89                              #显示文件的字节数,并进入编辑模式
        A                               #将输入的内容接在原文件内容最后一行的后面
        this file is edited in ed!      #输入字符串
        .                               #回到命令模式
        w                               #保存刚才的修改
        116                             #显示当前文件的字节数
        q                                    #退出ed指令
        cmd@hdd-desktop:~$ cat testfile      #查看修改后文件的内容
        hello Linux!
        Linux is a free Unix-type operating system.
        This is a Linux testfile!
        Linux
        this file is edited in ed!           #此行为添加的内容

此时,如果发现文件最后一行有误,如刚刚编辑的testfile文件的最后一行应该是“Linux”,可通过“c”命令将文件的最后一行替换,操作命令如下:

        …
        ed$c                       #将文件的最后一行替换
        Linux                      #输入新的字符串
        .                          #回到命令模式
        ed$w                       #保存当前的修改
        95                         #显示当前文件的字节数
        ed$q                       #退出ed指令
        cmd@hdd-desktop:~$ cat testfile     #查看修改后文件的内容
        hello Linux!
        Linux is a free Unix-type operating system.
        This is a Linux testfile!
        Linux
        Linux                               #此行被替换为新输入的字符串“Linux”

2.7 egrep(查找文件里符合条件的字符串)

(1)频度等级:☆

(2)功能说明:

在文件内查找指定的字符串。egrep执行效果与“grep-E”相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。egrep是用extended regular expression语法来解读的,而grep则用basic regular expression语法解读,extended regular expression比basic regular expression的表达更规范。

(3)语法:

        egrep [范本模式] [文件或目录]

(4)所属包:

        egrep

(5)相关命令:

        fgrep、grep、rgrep

(6)补充说明:

该参数的执行效果和“grep-E”命令相同,可以参看grep命令。类似的命令还有fgrep, grep命令与“grep-F”命令执行效果相同。

(7)典型实例:

显示文件中符合条件的字符。例如,查找当前目录下所有文件中包含字符串“Linux”的文件,可以使用如下命令:

        egrep Linux *

结果如下所示:

        cmd@hdd-desktop:~$ egrep Linux *    #查找当前目录下包含字符串“Linux”的文件
        testfile:hello Linux!               #以下五行为testfile中包含Linux字符的行
        testfile:Linux is a free Unix-type operating system.
        testfile:This is a Linux testfile!
        testfile:Linux
        testfile:Linux
        testfile1:helLinux!                          #以下两行为testfile1中含Linux字符的行
        testfile1:This a Linux testfile!
        #以下两行为testfile_2中包含Linux字符的行
        testfile_2:Linux is a free unix-type opterating system.
        testfile_2:Linux test
        xx00:hello Linux!                                     #xx00包含Linux字符的行
        xx01:Linux is a free Unix-type operating system.      #以下三行为xx01包含Linux字符的行
        xx01:This is a Linux testfile!
        xx01:Linux

2.8 ex(在ex模式下启动vim 文本编辑器)

(1)频度等级:☆

(2)功能说明:

在ex模式下启动vim文本编辑器。

(3)语法:

        ex [选项][参数]

(4)所属包:

        vim-minimal

(5)使用技巧:

ex指令进入ex模式后,在vim中输入“:vi”或“:visual”指令即可回到vi默认的全屏编辑模式。

(6)相关命令:

        vi

(7)参数:

ex的主要参数如表2-8所示。

表2-8 ex参数表

(7)补充说明:

ex执行效果与“vi-E”相同。

(5)典型实例:

例:在ex指令后输入文件名按回车键后,即可进入ex编辑模式,如编辑testfile文件,使用的命令格式如下:

        ex testfile

输出的信息如下:

        "testfile" 5L, 95C         #“testfile”表示文件名,5L表示5行,95表示字节数
        进入ex 模式。输入“visual”回到正常模式
        :

它的操作与 vim 中是一样的,此时如果在“:”后输入“visual”后按回车键,将进入到vi指令全屏界面;如果输入“q”,则退出编辑器。

2.9 fgrep(查找文件里符合条件的字符串)

(1)频度等级:☆

(2)功能说明:

查找文件里符合条件的字符串。

(3)语法:

        fgrep [范本样式][文件或目录...]

(4)所属包:

        grep

(5)相关命令:

        egrep、grep、rgrep

(6)补充说明:

本指令相当于执行grep指令加上参数“-F”,是grep命令的链接,详见grep指令说明。

(7)典型实例:

具体使用实例请参考grep命令。

2.10 fmt(编排文本文件)

(1)频度等级:☆

(2)功能说明:

fmt命令设置理想的简易文本文件格式编排程序。

(3)语法:

        fmt [-cstu][-p<列起始字符串>][-w<每列字符数>] [--help][--version]
        fmt [-DIGITS][OPTION]…[文件...]

(4)所属包:

        coreutils

(5)使用技巧:

该命令直接输出到标准输出设备,可以使用输出重定向将其传送到文件中并保存起来。

(6)相关命令:

        fold

(7)参数:

fmt的参数如表2-9所示。

表2-9 fmt参数表

(8)补充说明:

fmt 指令会从指定的文件里读取内容,将其依照指定格式重新编排后,输出到标准输出设备。若指定的文件名为“-”,则fmt指令会从标准输入设备读取数据。

(9)典型实例

例1:重排指定文件。如文件testfile共5行文字,可以通过命令对该文件格式进行重排,其命令为:

        fmt testfile

输出结果如下:

        cmd@hdd-desktop:~$ fmt testfile         #重排testfile文件
        hello Linux!  Linux is a free Unix-type operating system.  This is a
        Linux testfile!  Linux Linux

fmt 命令默认将 5 行文字连接在一起,连接的两行间用一个空格隔开,如果某一行以句号结尾,则两行间以两个空格隔开。

例 2:如果不为 fmt 命令指定文件名,则该命令会从标准输入设备读取数据。如输入命令:

        fmt

结果如下:

        cmd@hdd-desktop:~$ fmt                       #重排输入的字符
        Hello world!                                 #输入第一行字符
        hello Linux!                                 #输入第二行字符
        Hello everyone!                              #输入第三行字符
        Hello world!  hello Linux!  Hello everyone! #按Ctrl+D组合键之后,重排输入的三行字符串

分别输入3行文字,然后按Ctrl+D组合键退出程序,此时将重排后的内容输出到标准输出,并返回命令行提示符。

例3:将文件testfile重新排成85个字符一行,并在标准输出设备上输出,其命令应该为:

        Fmt.w 85 testfile

为了对比,先使用cat命令查看文件内容:

        cmd@hdd-desktop:~$ cat testfile                  #查看testfile文件的内容
        hello Linux!
        Linux is a free Unix-type operating system.
        This is a Linux testfile!
        Linux
        Linux

使用fmt命令重排之后,输出结果如下:

        cmd@hdd-desktop:~$ fmt -w 85 testfile            #指定重排宽度为85个字符
        hello Linux!  Linux is a free Unix-type operating system.  This is a Linux testfile!
        Linux Linux

2.11 fold(限制文件列宽)

(1)频度等级:☆

(2)功能说明:

限制文件列宽。fold 命令是折叠有限宽度的输出设备长行的过滤器。作为默认值,该命令折叠标准输入的内容,阻断那些达到80列宽的行。用户也可以指定一个或者多个文件作为该命令的输入。fold 命令在输入行中插入一个换行字符,这样每个输出行就可以达到尽可能的宽而不会超过设定的Width的参数值。如果指定了-b标志,行宽就可以按字节来计数。如果没有指定-b 标志,宽度可以按照被 LC_CTYPE 环境变量所决定的列来计数。一个退格字符减少输出行的长度1。一个制表符跳到下一个列,它的位置是列增加8。fold命令接受在包含制表符的文件中 8 的倍数的 -w 宽度值。当文件包含制表符时,要用其他宽度值,应该在使用 fold 命令以前使用 expand 命令。

(3)语法:

        fold [-bs][-w<每列行数>][--help][--version][文件...]

(4)所属包:

        coreutils

(5)使用技巧:

该命令直接输出到标准输出设备,可以使用输出重定向将其传送到文件中并保存起来。

fold 命令可能影响当前的下画线,并且不能在多字节的字符中间插入换行字符,即使使用“-b”标志也不行。

(6)相关命令:

(7)参数:

fold的主要参数如表2-10所示。

        fmt

表2-10 fold参数表

(8)补充说明:

fold 指令会从指定的文件里读取内容,将超过限定列宽的列加入增列字符后,输出到标准输出设备。若不指定任何文件名称,或是所给予的文件名为“-”,则fold指令会从标准输入设备读取数据。

(9)典型实例:

例:将一个名为 testfile 的文件的行折叠成宽度为30,可使用如下命令:

        Fold-w 30 testfile

为了对比,先将testfile文件输出如下:

        cmd@hdd-desktop:~$ cat testfile             #查看testfile中的内容
        Linux networks are becoming more and more common, but security is often an overlooked
    issue. Unfortunately, in today’s environment all networks are potential hacker targets,
    from top-secret military research networks to small home LANs.
        Linux Network Security focuses on securing Linux in a networked environment, where the
    security of the entire network needs to be considered rather than just isolated machines.
    It uses a mix of theory and practical techniques to teach administrators how to install and
    use security applications, as well as how the applications work and why they are necessary.

然后使用fold命令折叠显示:

        cmd@hdd-desktop:~$ fold-w 30 testfile       #行折叠成宽度为30,显示testfile文件
        Linux networks are becoming mo
        re and more common, but securi
        ty is often an overlooked issu
        e. Unfortunately, in today’s
          environment all networks are
        potential hacker targets, from
          top-secret military research
        networks to small home LANs.
        Linux Network Security focuses
          on securing Linux in a networ
        ked environment, where the sec
        urity of the entire network ne
        eds to be considered rather th
        an just isolated machines. It
        uses a mix of theory and pract
        ical techniques to teach admin
        istrators how to install and u
        se security applications, as w
        ell as how the applications wo
        rk and why they are necessary.

2.12 grep(查找文件里符合条件的字符串)

(1)频度等级:☆☆☆

(2)功能说明:

grep命令用于查找文件里符合条件的字符串。

(3)语法:

        grep [-abcEFGhHi lLnqr svVwxy] [-A<显示列数>] [-B<显示列数>] [-C<显示列数>] [-d<进行动作
    >][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录…]

(4)所属包:

        grep

(5)相关命令:

        egrep、fgrep、rgrep

(6)使用技巧:

grep指令中使用规则表达式可以实现非常灵活的搜索功能。

(7)参数:

grep的主要参数如表2-11所示。

表2-11 grep参数表

(8)补充说明:

grep指令用于查找内容中包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。

(9)典型实例:

例 1:在当前目录中,查找后缀有“test”字样的文件中包含“test”字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:

        grep test *file

结果如下所示:

        cmd@hdd-desktop:~$ grep test test*      #查找后缀有“test”的文件包含“test”字符串的文件
        testfile1:This a Linux testfile!        #列出testfile1文件中包含test字符的行
        testfile_2:This is a linux testfile!    #列出testfile_2文件中包含test字符的行
        testfile_2:Linux test                   #列出testfile_2文件中包含test字符的行

例2:以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi及其子目录(如果存在子目录的话)下所有文件中包含字符串“update”的文件,并打印出该字符串所在行的内容,使用的命令为:

        grep-r update /etc/acpi

输出结果如下:

        cmd@hdd-desktop:~$ grep-r update /etc/acpi                #以递归的方式查找“etc/acpi”
    #下包含“update”的文件
        /etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.)
    Rather than
        /etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of
    IO.)  Rather than
        /etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update

例 3:反向查找。前面各个例子是查找并打印出符合条件的行,通过“-v”参数可以打印出不符合条件行的内容。此时,使用的命令为:

        grep-v test*

结果如下所示:

        cmd@hdd-desktop:~$ grep-v test*    #查找文件名中包含test的文件中不包含test的行
        testfile1:helLinux!
        testfile1:Linis a free Unix-type operating system.
        testfile1:Lin
        testfile_1:HELLO LINUX!
        testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.
        testfile_1:THIS IS A LINUX TESTFILE!
        testfile_2:HELLO LINUX!
        testfile_2:Linux is a free unix-type opterating system.

2.13 ispell(拼写检查程序)

(1)频度等级:☆

(2)功能说明:

ispell命令用于拼写检查程序。

(3)语法:

        ispell [-aAbBClmMnNPStVx][-d<字典文件>][-L<行数>][-p<字典文件>][-w<非字母字符>][-W<字符串
    长度>][要检查的文件]

(4)所属包:

        aspell

(5)相关命令:

        look、spell

(6)使用技巧:

ispell命令不但能检查拼写错误,还能纠正错误。

(7)参数:

ispell的主要参数如表2-12所示。

表2-12 ispell参数表

(8)补充说明:ispell会预设使用/usr/lib/ispell/english.hash字典文件来检查文本文件。若在检查的文件中找到字典没有的词汇,ispell会建议使用的词汇,或是让用户把新的词汇加入到个人字典里。

(9)典型实例:

例1:检查文件的拼写。例如,检查testfile文件,可使用如下命令:

        ispell testfile

如果文件中出现可疑词汇,则第一个出现的可疑词汇以高亮显示,并在屏幕下方给出词汇的修改意见,以及ispell的操作命令。如下所示:

        netwrks              File: testfile
        
        Linux netwrks are becoming more and more common, but security is often an overlooked
    issue. Unfortunately
        
          0: networks
        
        [SP] <number> R)epl A)ccept I)nsert L)ookup U)ncap Q)uit e(X)it or ? for help

本例中,检查出netwrks错误,并提示纠正信息,此时输入“0”,即使用networks来纠正错误,同时继续显示下一个错误,直到所有的错误显示完毕。

例2:通过实例1我们可以发现,文件testfile中有拼写错误,对该文件进行修改后需备份文件。此时使用如下命令:

        ispell-b testfile                       #检查拼写错误的同时,备份文件

如果文件已经无拼写错误,则不显示任何信息,通过ls命令我们也可以查看到当前文件目录下产生了文件testfile的备份文件testfile.bak。查看结果如下所示:

        cmd@hdd-desktop:~$ ls                   #以列表的形式查看当前目录下的文件
        examples.desktop   testfile_1  testfile.bak  xx01    模板  图片  音乐
        testfile          testfile1  testfile_2  xx00          公共的  视频  文档  桌面

其中,testfile.bak文件就是刚才命令生成的备份文件,内容与原来的testfile文件内容是一样的。

2.14 jed(编辑文本文件)

(1)频度等级:☆

(2)功能说明:

jed命令主要用于编辑程序源代码,也可编辑文本文件。

(3)语法:

        jed[-2n][-batch][-f<函数>][-g<行数>][-i<文件>][-I<文件>][-s<字符串>][文件]

(4)所属包:

        jed

(5)相关命令:

        ed、joe、sed、vi、vim。

(6)使用技巧:

jed能识别源代码,并将源代码格式化为容易阅读的格式。

(7)参数:

Jed的主要参数如表2-13所示。

表2-13 jed参数表

(8)补充说明:

jed是以Slang写成的程序,适合用来编辑程序原始代码。

(9)典型实例:

例:jed主要用于编辑程序的源码,编辑源码时将以彩色高亮的方式显示程序的语法。例如使用jed编辑一个C语言的源代码文件,可使用如下命令:

        jed main.c                          #用jed编辑器打开main.c文件

输出结果如下:

        F10 key ==> File   Edit   Mode Search Buffers Windows System Help #编辑器菜单
        /*-*- linux-c-*-*/                                                  #编辑区
        
        #include <linux/mm.h>
        #include <linux/sysctl.h>
        #include <linux/nsproxy.h>
        
        static struct list_head *
        net_ctl_header_lookup(struct ctl_table_root *root, struct nsproxy *namespaces)
        {
                return &namespaces->net_ns->sysctl_table_headers;
        }
        static struct ctl_table_root net_sysctl_root = {
                .lookup = net_ctl_header_lookup,
        };
        static int sysctl_net_init(struct net *net)
        {
                INIT_LIST_HEAD(&net->sysctl_table_headers);
                return 0;
        }
        
        -----+(Jed 0.99.18U) Emacs: main.c    (C)  All   6:06pm-----------------------------
        #从左到右分别为jed版本编号、当前是模拟emacs编辑器、打开的文件名、现在的时间
        loading /usr/share/jed/lib/modeinfo.slc

2.15 joe(编辑文本文件)

(1)频度等级:☆☆☆

(2)功能说明:

joe命令用于编辑文本文件。

(3)语法:

        Joe[-asis][-beep][-csmode][-dopadding][-exask][-force][-help][-keepup][-lightoff][-
    marking][-mid][-nobackups]     [-nonotice][-nosta][-noxon][-orphan][-backpath<    目    录
    >][-columns<字段>][-lines<行数>][-pg<行数>][-skiptop<行数>][-autoindent crlf l inums overwri
    te rdonly wordwrap][+<行数>] [-indentc<缩排字符>][-istep<缩排字符数>][-keymap<按键配置文件
    >][-lmargin<栏数>][-rmargin<栏数>][-tab<栏数>][要编辑的文件]
        joe [globle-options][[local-options]filename]…
        jstar [globle-options][[local-options]filename]…
        rjoe [globle-options][[local-options]filename]…
        jpico [globle-options][[local-options]filename]…

(4)所属包:

        aspell

(5)相关命令:

        look、spell

(6)使用技巧:

使用joe指令的“-autoindent”选项可以实现自动缩排。

(7)参数:(程序参数)

joe的主要参数如表2-14所示。

表2-14 joe参数表

(8)补充说明:

joe 是一个功能强大的全屏幕文本编辑程序。操作的复杂度要比 pico 高一点,但是功能较为齐全。

joe一次可开启多个文件,每个文件各放在一个编辑区内,并可在文件之间执行剪切的动作。

(9)典型实例:

例:利用joe命令编辑文本文件。例如利用joe编辑C语言源代码main.c,使用如下命令:

        joe main.c

与jed类似,joe编辑器中C语言的语法也以彩色的方式显示。效果如下:

          I A   main.c (c)                    Row 1    Col 1   12:28  Ctrl-K H for help
        #上排从左至右分别为打开的文件名、光标所在行列数、现在时间、显示操作说明
        /*-*- linux-c-*-*/                  #编辑区
        
        #include <linux/mm.h>
        #include <linux/sysctl.h>
        #include <linux/nsproxy.h>
        
        static struct list_head *
        net_ctl_header_lookup(struct ctl_table_root *root, struct nsproxy *namespaces)
        {
                return &namespaces->net_ns->sysctl_table_headers;
        }
        static struct ctl_table_root net_sysctl_root = {
                .lookup = net_ctl_header_lookup,
        };
        static int sysctl_net_init(struct net *net)
        {
                INIT_LIST_HEAD(&net->sysctl_table_headers);
                return 0;
        }
        
        ** Joe's Own Editor v3.5 ** (utf-8) ** Copyright © 2006 ** #joe编辑区的版本及版权信息

joe编辑器有一些常用的组合键,例如可以通过Ctrl+K+H寻求联机帮助,首先按Ctrl+K组合键,再输入字母 H,即可调出帮助菜单,通过该帮助信息可以方便地获知如何对 joe 编辑器进行操作。

2.16 join(将两个文件中指定字段内容相同的行连接起来)

(1)频度等级:☆

(2)功能说明:

join命令用于令将两个文件中指定字段内容相同的行连接起来。

(3)语法:

        join [-i][-a<1 或 2>][-e<字符串>][-o<格式>][-t<字符>][-v<1 或 2>][-1<字段>][-2<字段
    >][--help] [--version][文件1][文件2]

(4)所属包:

        coreutils

(5)相关命令:

        paste

(6)使用技巧:

在默认情况下,join命令的字段分隔符是空格,可以通过“-t”参数来修改。

(7)参数:

join的参数如表2-15所示。

表2-15 join参数表

(8)补充说明:

找出两个文件中指定字段内容相同的行,并加以合并,再输出到标准输出设备。

(9)典型实例

例:连接两个文件。为了清楚地了解join命令,首先通过cat命令显示文件testfile_1和testfile_2的内容。然后以默认的方式比较两个文件,将两个文件中指定字段的内容相同的行连接起来,在终端中输入命令:

        join testfile_1 testfile_2

首先查看testfile_1、testfile_2中的文件内容:

        cmd@hdd-desktop:~$ cat testfile_1        #testfile_1文件中的内容
        Hello 95                                 #例如,本例中第一列为姓名,第二列为数额
        Linux 85
        test 30
        cmd@hdd-desktop:~$ cat testfile_2        #testfile_2文件中的内容
        Hello 2005                               #例如,本例中第一列为姓名,第二列为年份
        Linux 2009
        test 2006

然后使用join命令,将两个文件连接,结果如下:

        cmd@hdd-desktop:~$ join testfile_1 testfile_2     #连接testfile_1、testfile_2中的内容
        Hello 95 2005                                     #连接后显示的内容
        Linux 85 2009
        test 30 2006

文件1与文件2的位置对输出到标准输出的结果是有影响的。例如将命令中的两个文件互换,即输入如下命令:

        join testfile_2 testfile_1

最终在标准输出的输出结果将发生变化,如下所示:

        cmd@hdd-desktop:~$ join testfile_2 testfile_1     #改变文件顺序连接两个文件
        Hello 2005 95                                     #连接后显示的内容
        Linux 2009 85
        test 2006 30

2.17 look(查询单词)

(1)频度等级:☆

(2)功能说明:

look命令用于查询单词。

(3)语法:

        look [-adf][-t<字尾字符串>][字首字符串][字典文件]

(4)所属包:

        util-linux

(5)相关命令:

        ispell、spell

(6)使用技巧:

look命令要求给出的文件必须是sort命令排序后的文件。

(7)参数:

look的主要参数如表2-16所示。

表2-16 look参数表

(8)补充说明:

look指令用于英文单词的查询。用户仅需提供欲查询单词的首字符串,它就会显示所有开头字符串符合该条件的内容。

(9)典型实例:

例:查找单词。例如,为了查找在testfile文件中以字母L开头的所有的行,可以输入如下命令:

        look  L testfile

原文件testfile中的内容如下:

        cmd@hdd-desktop:~$ cat testfile         #查看testfile文件内容
        HELLO LINUX!
        Linux is a free unix-type opterating system.
        This is a linux testfile!
        Linux test

在testfile文件中使用look命令查找以“L”开头的单词,结果如下:

        cmd@hdd-desktop:~$ look L testfile                #查找以“L”开头的单词
        Linux is a free unix-type opterating system.      #第二行以“L”开头,列出全句
        Linux test                                        #第四行以“L”开头,列出全句

2.18 mtype(显示MS-DOS文件的内容)

(1)频度等级:☆

(2)功能说明:

mtype命令用于显示MS-DOS文件的内容。

(3)语法:

        mtype [-st][文件]

(4)所属包:

        mtools

(5)相关命令:

        cat

(6)使用技巧:

MS-DOS文件系统工具软件包可模拟很多 MS-DOS命令。mtype是 mtools命令的符号链接。

(7)参数:

mtype的主要参数如表2-17所示。

表2-17 mtype参数表

(8)补充说明:

mtype为mtools工具的指令,模拟MS-DOS的type指令,可显示MS-DOS文件的内容。

(9)典型实例:

例:显示MS-DOS文件的内容。例如打开名为dos.txt的MS-DOS文件可使用如下命令:

        mtype dos.txt                            #打开MS-DOS文件

显示结果如下:

        cmd@hdd-desktop:~$ mtype dos.txt        #打开MS-DOS文件
        Linux networks are becoming more and more common, but security is often an overlooked
    issue. Unfortunately, in today’s environment all networks are potential hacker targets,
    from top-secret military research networks to small home LANs.
        Linux Network Securty focuses on securing Linux in a networked environment, where the
    security of the entire network needs to be considered rather than just isolated machines.
    It uses a mix of theory and practicl techniques to teach administrators how to install and
    use security applications, as well as how the applcations work and why they are necessary.

2.19 pico(编辑文本文件)

(1)频度等级:☆☆☆

(2)功能说明:

pico命令用于编辑文本文件。

(3)语法:

        pico [-bdefghjkmqtvwxz][-n<间隔秒数>][-o<工作目录>][-r<编辑页宽>][-s<拼字检查器>][+<列数编
    号>][文件]

(4)所属包:

        pine

(5)相关命令:

        pine、vim

(6)使用技巧:

pico编辑器的内置功能是通过快捷键的方式提供的。常用的快捷键如表2-18所示。

表2-18 pico快捷键列表

(7)参数:

pico的主要参数如表2-19所示。

表2-19 pico参数表

(8)补充说明:

pico是个简单易用、以显示导向为主的文字编辑程序,它伴随着处理电子邮件和新闻组的程序pine而来。

另外,该命令是“红帽”系列才具有的命令,它具有简单易操作的特点,并提供快捷键,使用较为方便。在红帽的后续版本Fedora中已经没有这个文件编辑器,取代它的是nano。

(9)典型实例:

例:编辑文本文件。使用pico命令来编辑testfile文件,在终端中输入如下命令:

        pico testfile

输出结果如下:

          GNU nano 2.0.9             文件: testfile             #从左到右分别为编辑器版本号、文件名
        #编辑区
        Linux networks are becoming more and more common, but security is often an over$
        Linux Network Securty focuses on securing Linux in a networked environment, whe$
                                          [ 已读取 3 行 ]                 #以下为菜单栏
        ^G 求助      ^O 写入      ^R 读档      ^Y 上页      ^K 剪切文字  ^C 在标位置
        ^X 离开      ^J 对齐      ^W 搜寻      ^V 下页      ^U 还原剪切  ^T 拼写检查

2.20 rgrep(递归查找文件中符合条件的字符串)

(1)频度等级:☆

(2)功能说明:

rgrep命令可递归查找文件中符合条件的字符串。

(3)语法:

        rgrep[-?BcDFhHilnNrv][-R<范本样式>][-W<列长度>] [-x<扩展名>][--help][--version] [范本样
    式][文件或目录...]

(4)所属包:

        rgrep

(5)相关命令:

        egrep、grep、grep

(6)使用技巧:

rgrep指令的功能和grep指令类似,可查找内容中包含指定的范本样式的文件。如果发现某文件的内容符合所指定的范本样式,预设rgrep指令会把含有范本样式的那一列显示出来。

(7)参数:

rgrep的主要参数如表2-20所示。

表2-20 rgrep参数表

(8)补充说明:

rgrep命令是只有Mandrake Linux才有的命令。

(9)典型实例:

例:在当前目录下查找句子中包含“Hello”字符串的文件,可使用如下命令:

        rgrep Hello *

其搜索结果如下:

        cmd@hdd-desktop:~$ rgrep Hello *    #在当前目录下查找句子中包含“Hello”字符串的文件
        testfile_1:Hello 95                 #testfile_1中包含“Hello”字符串的句子
        testfile_2:Hello 2005               #testfile_2中包含“Hello”字符串的句子

2.21 sed(利用script来处理文本文件)

(1)频度等级:☆

(2)功能说明:

Stream Editor利用script来处理文本文件,属于非交互式上下文流编辑器。

(3)语法:

        sed [-hnV][-e<script>][-f<script文件>][文本文件]
        sed[OPTION]…{script-only-if-no-other-script}[input-file]…

(4)所属包:

        sed

(5)相关命令:

        ed、jed、joe、vi、vim、tr

(6)使用技巧:

sed命令经常被用在shell脚本编程中处理文本文件。

(7)参数:

sed的主要参数如表2-21所示。

表2-21 sed参数表

选项中的script语法说明:[行号][/查找字符串/命令<参数>],具体语法说明如表2-22所示。

表2-22 script语法说明表

(8)补充说明:

script命令可以直接在命令列中输入,或是写成script脚本文件。

(9)典型实例:

例:在指定行号后添加一行,指定的行要采用[NUM]的形式,也可以通过查找字符串确定指定行。例如在testfile文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:

        sed-e 4a\newLine testfile

首先查看testfile中的内容如下:

        cmd@hdd-desktop:~$ cat testfile         #查看testfile中的内容
        HELLO LINUX!
        Linux is a free unix-type opterating system.
        This is a linux testfile!
        Linux test

使用sed命令后,输出结果如下:

        cmd@hdd-desktop:~$ sed-e 4a\newline testfile      #使用sed在第四行后添加新字符串
        HELLO LINUX!                                      #testfile文件原有的内容
        Linux is a free unix-type opterating system.
        This is a linux testfile!
        Linux test
        newline                                           #添加的字符串

2.22 sort(对文本文件内容进行排序)

(1)频度等级:☆

(2)功能说明:

sort命令用于对文本文件内容进行排序。

(3)语法:

        sort[-bcdfimMnr][-o< 输 出 文 件 >][-t< 分 隔 字 符 >][+< 起 始 字 段 >-< 结 束 字 段 >][--help]
    [--verison][文件]
        sort[OPTION]…[FILE]…

(4)所属包:

        coreutils

(5)相关命令:

        comm

(6)使用技巧:

在默认情况下,sort 命令在标准输出设备中显示排序结果,可以使用“-o”参数指定保存文件。

(7)参数:

sort的参数如表2-23所示。

表2-23 sort参数表

(7)补充说明:

sort可针对文本文件的内容,以行为单位来排序。

(8)典型实例:

例:对文本文件的行进行排序,默认对第一列进行操作。例如在使用sort命令以默认的方式对文件的行进行排序,使用的命令如下:

        sort testfile

sort命令将以默认的方式将文本文件的第一列以ASCII码的次序排列,并将结果输出到标准输出。

使用cat命令显示testfile文件可知其原有的排序如下:

        cmd@hdd-desktop:~$ cat testfile         #testfile文件原有排序
        test 30
        Hello 95
        Linux 85

使用sort命令重排后的结果如下:

        cmd@hdd-desktop:~$ sort testfile        #重排结果
        Hello 95
        Linux 85
        test 30

2.23 spell(拼写检查程序)

(1)频度等级:☆

(2)功能说明:

spell命令可建立拼写检查程序。

(3)语法:

        spell [FILE]…

(4)所属包:

        aspell

(5)相关命令:

        ispell、look

(6)使用技巧:

spell只能检查英文的拼写错误,对汉语没有意义。

(7)补充说明:

spell可从标准输入设备读取字符串,结束后显示拼错的词汇。注意,只有某些版本中才有spell命令,它实际上是一个script脚本文件,执行“ispell-l”命令。如果spell后面没有指定文件,则spell命令将从标准输入读取字符串,并显示拼写错误的单词,按Ctrl+D组合键可以退出spell。

(8)典型实例:

例1:检查指定文件的拼写错误。例如,检查文件testfile是否有拼写错误,在命令行提示符下输入如下命令:

        spell testfile

如果文件中有单词拼写错误,则输出如下信息:

        cmd@hdd-desktop:~$ spell testfile            #检查testfile拼写错误
        scurity                                      #以下为有错误的单词
        tp
        LANs
        Securty
        practicl
        applcations
        necesary

如果所检查的文件没有单词拼写错误,那么,命令运行后不会给出任何信息。

例2:检查从标准输入读取的字符串。例如在命令行中输入如下命令:

        spell

按回车键后,输入一串字符串,然后按Ctrl+D组合键退出spell,屏幕上将显示拼写有错误的单词。如下所示:

        cmd@hdd-desktop:~$ spell            #检查标准输入的字符串的拼写错误
        hell,this is a linx sustem!         #拼写错误的字符串
        linx                                #以下为有拼写错误的单词
        sustem

2.24 tr(转换或删除字符)

(1)频度等级:☆

(2)功能说明:

tr命令用于转换或删除文件中的字符。

(3)语法:

        tr [-cdst][--help][--version][第一字符集][第二字符集]
        tr [OPTION]…SET1[SET2]

(4)所属包:

        coreutils

(5)相关命令:

        sed

(6)使用技巧:

在shell脚本编程中经常使用tr命令实现字符集的转换和删除操作。

tr命令输出的内容可以使用输出重定向传送到指定的文件并保存。

(7)参数:

tr的主要参数如表2-24所示。

表2-24 tr参数表

(8)补充说明:

tr指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。

(9)典型实例:

例:字母大小写转换。例如将文件testfile中的小写字母全部转换成大写字母,此时,可使用如下命令:

        cat testfile |tr a-z A-Z

testfile文件中的内容如下:

        cmd@hdd-desktop:~$ cat testfile                  #testfile原来的内容
        Linux networks are becoming more and more common, but scurity is often an overlooked
    issue. Unfortunately, in today’s environment all networks are potential hacker targets,
    fro0m tp-secret military research networks to small home LANs.
        Linux Network Securty focuses on securing Linux in a networked environment, where the
    security of the entire network needs to be considered rather than just isolated machines.
    It uses a mix of theory and practicl techniques to teach administrators how to install and
    use security applications, as well as how the applcations work and why they are necesary.

使用tr命令大小写转换后,得到如下输出结果:

        cmd@hdd-desktop:~$ cat testfile | tr a-z A-Z             #转换后的输出
        LINUX NETWORKS ARE BECOMING MORE AND MORE COMMON, BUT SCURITY IS OFTEN AN OVERLOOKED
    ISSUE. UNFORTUNATELY, IN TODAY’S ENVIRONMENT ALL NETWORKS ARE POTENTIAL HACKER TARGETS,
    FROM TP-SECRET MILITARY RESEARCH NETWORKS TO SMALL HOME LANS.
        LINUX NETWORK SECURTY FOCUSES ON SECURING LINUX IN A NETWORKED ENVIRONMENT, WHERE THE
    SECURITY OF THE ENTIRE NETWORK NEEDS TO BE CONSIDERED RATHER THAN JUST ISOLATED MACHINES.
    IT USES A MIX OF THEORY AND PRACTICL TECHNIQUES TO TEACH ADMINISTRATORS HOW TO INSTALL AND
    USE SECURITY APPLICATIONS, AS WELL AS HOW THE APPLCATIONS WORK AND WHY THEY ARE NECESARY.

大小写转换,也可以通过[:lower][:upper]参数来实现。例如使用如下命令:

        cat testfile |tr [:lower:] [:upper:]

输出结果如下:

        cmd@hdd-desktop:~$ cat testfile | tr [:lower:] [:upper:]          #转换后的输出
        LINUX NETWORKS ARE BECOMING MORE AND MORE COMMON, BUT SCURITY IS OFTEN AN OVERLOOKED
    ISSUE. UNFORTUNATELY, IN TODAY’S ENVIRONMENT ALL NETWORKS ARE POTENTIAL HACKER TARGETS,
    FROM TP-SECRET MILITARY RESEARCH NETWORKS TO SMALL HOME LANS.
        LINUX NETWORK SECURTY FOCUSES ON SECURING LINUX IN A NETWORKED ENVIRONMENT, WHERE THE
    SECURITY OF THE ENTIRE NETWORK NEEDS TO BE CONSIDERED RATHER THAN JUST ISOLATED MACHINES.
    IT USES A MIX OF THEORY AND PRACTICL TECHNIQUES TO TEACH ADMINISTRATORS HOW TO INSTALL AND
    USE SECURITY APPLICATIONS, AS WELL AS HOW THE APPLCATIONS WORK AND WHY THEY ARE NECESARY.

2.25 uniq(检查及删除文本文件中重复出现的行列)

(1)频度等级:☆

(2)功能说明:

uniq命令用于检查及删除文本文件中重复出现的行列。

(3)语法:

        uniq [-cdu][-f<字段>][-s<字符位置>][-w<字符位置>] [--help][--version][输入文件][输出文件]

(4)所属包:

        coreutils

(5)相关命令:

        sort

(6)使用技巧:

uniq命令必须应用到有序的文件才能达到预期的效果,所以在使用该命令之前,需要对文件进行排序。

(7)参数:

uniq主要参数如表2-25所示。

表2-25 uniq参数表

(8)补充说明:

uniq可检查文本文件中重复出现的行列,但是如果不加参数则会删除重复的行。

(9)典型实例:

例1:以默认的方式检查文件并删除文件中重复出现的行。例如,文件testfile中第2行、第5行、第9行为相同的行,使用uniq命令删除重复的行,可使用以下命令:

        uniq testfile

testfile中的原有内容为:

        cmd@hdd-desktop:~$ cat testfile             #原有内容
        test 30
        test 30
        test 30
        Hello 95
        Hello 95
        Hello 95
        Hello 95
        Linux 85
        Linux 85

使用uniq命令删除重复的行后,有如下输出结果:

        cmd@hdd-desktop:~$ uniq testfile            #删除重复行后的内容
        test 30
        Hello 95
        Linux 85

例 2:检查文件并删除文件中重复出现的行,并在行首显示该行重复出现的次数。使用如下命令:

        uniq-c testfile

结果输出如下:

        cmd@hdd-desktop:~$ uniq-ctestfile   #删除重复行后的内容
                3  test 30                  #前面的数字的意义为该行共出现了3次
            4  Hello 95                     #前面的数字的意义为该行共出现了4次
            2  Linux 85                     #前面的数字的意义为该行共出现了2次

2.26 vi(编辑文本文件)

(1)频度等级:☆☆☆

(2)功能说明:

vi命令用于文本文件编辑。

(3)语法:

        vi [-befFghlnrRsVZ][-c<命令>][-d<设备>][-o<窗口数>][-r<交换文件>][-s<script 文件>][-T<终
    端类型>][-w<script文件>][-W< script文件>][--<version>][+][+<行数编号>][+/<范本样式>][--]

(4)所属包:

        vim-minimal

(5)相关命令:

        ed、joe、jed、sed、vim

(6)使用技巧:

使用vi编辑指定文件时,会自动在当前目录下创建一个文件名为“.文件名.swp”的临时隐藏文件。当正常退出编辑器时该文件自动删除,如果非正常退出或同时打开两次,则会有警告提示。

vi有许多快捷键,常用的快捷键如表2-26所示。

表2-26 vi快捷键列表

(7)参数:

vi的主要参数如表2-27所示。

表2-27 vi参数表

(8)补充说明:

该命令采用传统字符界面,是Linux下默认的文本编辑器,其功能较为完善,现在用得较多的是vi的改良版本vim。

(9)典型实例:

参见vim。

2.27 vim(编辑文本文件)

(1)频度等级:☆☆☆

(2)功能说明:

vim命令也用于编辑文本文件,不过已经被改良。

(3)语法:

        vim [-bCefFghlLnNrRsvVZ][-c<命令>][-d<设备>][-i<信息文件>] [-o<窗口数>][-r<交换文件
    >][-s<script文件>][-T<终端类型>][-u<环境文件>][-U<环境文件>] [-w<script文件>][-W< script文件
    >][--<version>][+][+<行数编号>][+/<范本样式>][--]
        vim [options] [file…]
        vim [options]-t tag
        vim [options]-q [errorfile]

vim [options]-

(4)所属包:

        vim-minimal

(5)相关命令:

        ed、joe、jed、sed、vi、view

(6)使用技巧:

使用vim编辑指定文件时,同样会自动在当前目录下创建一个文件名为“.文件名.swp”的临时隐藏文件。

(7)参数:

vim的主要参数如表2-28所示,大部分参数的含义可参照表2-27。

表2-28 vim参数表

(8)补充说明:

vim是与vi兼容的文本编辑器,是vi的改良版本,可用于编辑各种纯文本文件,特别是用于编辑程序代码。vim在vi的基础上增加了许多功能,如多窗口、符号高亮显示、命令行编辑、文件名自动补齐和在线联机帮助等,可以通过“:help vi_diff.txt”命令查看 vim 和 vi的区别。

vim在命令模式下输入大写字母和小写字母产生的效果是不同的,所以要特别注意Caps Lock键的状态,否则可能使vim给出错误信息。

(9)典型实例:

例1:以默认方式编辑文本文件。使用vim编辑器以默认的方式打开testfile文件,进行修改、查看操作。在命令提示符中输入如下命令:

        vim testfile                             #使用vim编辑器编辑testfile文件

得到如下结果:

        #编辑区
        Linux networks are becoming more and more common, but scurity is often an overlooked
    issue. Unfortunately, in today’s environment all networks are potential haker targets, from
    tp-secret military research networks to small home LANs.
        Linux Network Securty focuses on securing Linux in a networked environment, where the
    security of the entire network needs to be considered rather than just isolated machines.
    It uses a mix of theory and practicl techniques to teach administrators how to install and
    use security applications, as well as how the applcations work and why they are necesary.
        
        ~
        ~
        ~
        ~
        ~
        ~
        "testfile" 3L, 598C                                             1,1          全部
        #从左至右依次为文件名、行列号、当前光标位置在整个文件中所占的百分比

例2:以只读的方式编辑testfile文件。在命令提示符中输入如下命令:

        Vim-R testfile

输出结果如下所示,从中我们可以看到,在最底端,testfile显示为只读状态。

        #编辑区
        Linux networks are becoming more and more common, but scurity is often an overlooked
    issue. Unfortunately, in today’s environment all networks are potential haker targets, from
    tp-secret military research networks to small home LANs.
        Linux Network Securty focuses on securing Linux in a networked environment, where the
    security of the entire network needs to be considered rather than just isolated machines.
    It uses a mix of theory and practicl techniques to teach administrators how to install and
    use security applications, as well as how the applcations work and why they are necesary.
        
        ~
        ~
        ~
        ~
        ~
        ~
        "testfile"  [只读] 3L, 598C                                           1,1          全部
        #从左至右依次为文件名、只读属性、行列号、当前光标位置在整个文件中所占的百分比

(10)vim操作命令:

vim有大量的操作命令,如表2-29~2-31所示。

表2-29 模式切换命令表

表2-30 command mode操作命令表

表2-31 last line mode 操作命令表

2.28 view(文字查看)

(1)频度等级:☆

(2)功能说明:

view命令用于文字查看。

(3)语法:

        view [-bdmnrRsV][-C<命令>][-o<数字>][+<行数>] [-clw][--help][--version]

(4)所属包:

        vim-minimal

(5)相关命令:

        ed、joe、jed、sed、vi、vim

(6)参数:

view的主要参数如表2-32所示。

表2-32 view参数表

(7)补充说明:

该命令用于查看文本文件中的文字,它链接了 vi 命令,并且部分命令与 vi 具有相同的用处。

(8)典型实例:

例:如果只使用vim浏览文件,而不编辑文件,可以使用该命令。在命令行中输入如下命令:

        view testfile                       #使用view命令查看testfile文件

view命令是以只读的方式打开文件,实际上,view工具与带有“-R”参数的vim编辑器产生的效果是相同的。

其输出结果如下:

        #编辑区
        Linux networks are becoming more and more common, but scurity is often an overlooked
    issue. Unfortunately, in today’s environment all networks are potential haker targets, from
    tp-secret military research networks to small home LANs.
        Linux Network Securty focuses on securing Linux in a networked environment, where the
    security of the entire network needs to be considered rather than just isolated machines.
    It uses a mix of theory and practicl techniques to teach administrators how to install and
    use security applications, as well as how the applcations work and why they are necesary.
        
        ~
        ~
        ~
        ~
        ~
        ~
        "testfile"  [只读] 3L, 598C                                           1,1          全部
        #从左至右依次为文件名、只读属性、行列号、当前光标位置在整个文件中所占的百分比

2.29 wc(计算字数)

(1)频度等级:☆

(2)功能说明:

wc命令用于计算每个文件的行、字及字节数。

(3)语法:

        wc [-clw][--help][--version][文件...]

(4)所属包:

        coreutils

(5)使用技巧:

wc命令经常和系统维护类命令联合使用,以统计系统输出的有用信息。例如ps命令所输出的进程数可以使用命令“ps-aux | wc-l”来实现。

(6)参数:

wc的主要参数如表2-33所示。

表2-33 wc参数表

(7)补充说明:

利用 wc 指令我们可以计算文件的字节数、字数或是列数。若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。

(8)典型实例:

例1:以默认的方式统计文件信息。在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。使用的命令为:

        wc testfile

先查看testfile文件的内容,可以看到:

        cmd@hdd-desktop:~$ cat testfile
        Linux networks are becoming more and more common, but scurity is often an overlooked
    issue. Unfortunately, in today’s environment all networks are potential hacker targets,
    fro0m tp-secret military research networks to small home LANs.
        Linux Network Securty focuses on securing Linux in a networked environment, where the
    security of the entire network needs to be considered rather than just isolated machines.
    It uses a mix of theory and practicl techniques to teach administrators how to install and
    use security applications, as well as how the applcations work and why they are necesary.

使用wc统计,结果如下:

        cmd@hdd-desktop:~$ wc testfile                   # testfile文件的统计信息
          3  92 598 testfile       # testfile文件的行数为3、单词数92、字节数598

其中,3个数字分别表示testfile文件的行数、单词数,以及该文件的字节数。

例2:如果想同时统计多个文件的信息,例如同时统计testfile、testfile_1、testfile_2,可使用如下命令:

        wc testfile testfile_1 testfile_2                    #统计三个文件的信息

输出结果如下:

        cmd@hdd-desktop:~$ wc testfile testfile_1 testfile_2#统计三个文件的信息
          3  92 598 testfile         #第一个文件行数为3、单词数92、字节数598
          9  18  78 testfile_1       #第二个文件的行数为9、单词数18、字节数78
          3   6  32 testfile_2       #第三个文件的行数为3、单词数6、字节数32
          15 116 708 总用量           #三个文件总共的行数为15、单词数116、字节数708