Linux操作系统
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.2 Linux系统的基本命令

Linux系统中的shell命令非常多,本节主要介绍目录操作、文件操作、文本文件处理、进程管理、时间管理、文件或目录比较等基本操作命令,其他专用的管理将分散到各相关管理章节进行介绍。

3.2.1 目录操作基本命令

1.列目录内容(ls)

1)功能与用法

ls(list)命令的功能是列出指定目录的内容,并将输出按某种方式排序。若不指定目录,则默认当前目录。其用法为:

                ls [options] [files]

2)参数说明

Ls命令的部分参数如表3-7所示。

表3-7 ls命令的部分参数

3)示例

                #ls-ltr s*       #列出目前工作目录下所有名称以s开头的文件,按修改时间倒序排序
                #ls-lR/bin     #递归列出/bin目录及其子目录
                #ls-AF        #列出当前目录,在目录名后加/,在可执行文件名后加*

ls命令位于目录/bin,经常使用的命令ls是它的一个别名,系统中还有它的另一个别名ll,相当于ls -l。

2.建立目录(mkdir)

1)功能与用法

mkdir(make directory)命令的功能是创建子目录,一次可以创建一个或多个子目录,还可以一次创建包括全部的父目录和子目录在内的一个完整的目录结构,它的使用受权限的制约。mkdir命令的用法为:

                mkdir [-p] [-m MODE] dirs

2)参数说明

                -p:如果要创建的目录存在也不报错,必要时可一同创建父目录。
                -m,--mode=MODE:按照权限MODE创建子目录(关于权限控制参见第5章)。

3)示例

                #mkdir temp               #在工作目录下建立一个名为temp的子目录
                #mkdir temp2 temp3 temp4   #一次创建多个目录
                #mkdir-p temp5/child       #在子目录temp5下创建子目录child,若父目录不存在,则一同创建。
                                    #若不使用-p参数,在父目录不存在时,将导致子目录创建失败

3.删除目录(rmdir)

rmdir(remove directory)命令的功能是删除空的子目录,其使用受权限制约。rmdir的用法为:

                rmdir [-p] dirs

使用-p参数,rmdir在删除一个目录时,若其子目录也是空的,则一并删除。rmdir命令使用示例:

                #rmdir temp            #删除子目录temp,若非空则报错
                #rmdir-p a/b/c         #删除目录时一同删除其空子目录
                # #注意,若a只有子目录b,b只有子目录c,则以上命令等同于:
                # rmdir a/b/c;rmdir a/b;rm a

4.改变工作目录(cd)

cd(change directory)命令的功能是改变用户的当前工作目录,其使用受权限制约,用户必须对要进入的目录有执行权。其用法为:

                cd [dir]

它需要一个目的目录作为参数,若不指定,默认切换到用户家目录$HOME。使用示例:

                #cd/tmp              #切换到目录/tmp
                #cd ~-               #切换到刚离开的目录,相当于cd$OLDPWD
                #cd..                 #切换到上级目录
                #cd                   #切换到家目录$HOME,相当于cd$HOME

5.显示当前目录(pwd)

pwd(print working directory)命令的功能是显示当前目录。其用法为:

                pwd [-P] [-L]

选项-P、-L分别用于显示当前目录的物理和逻辑位置,默认为后者。

3.2.2 文件操作基本命令

1.显示文件的内容或合并文件(cat)

1)功能与用法

cat(catenate)命令的功能是把文件内容显示到屏幕上,也可以同时显示多个文件。当不带参数运行cat命令时使用标准输入。使用cat命令可以通过I/O重定向的方法将多个文件的显示内容改道到某个文件中,从而实现文件合并。cat命令的用法为:

                cat [ options ] [ files ]

2)参数说明

cat命令的部分参数如表3-8所示。

表3-8 cat命令的部分参数

3)示例

                #cat test.txt                #显示文件test.txt的内容
                #cat-n test.txt              #显示文件test.txt的内容,并为所有行添加行号
                #cat*.txt                  #显示所有的*.txt文件
                #cat tst1.txt tst2.txt>tst.txt   #将tst1.txt和tst2.txt的内容合并为tst.txt
                #cat>myfile              #从键盘读入内容并将其保存到文件myfile。按^D结束

2.分屏显示文件内容(more)

1)功能与用法

more命令的功能是分屏显示文件的内容。more命令是UNIX/Linux操作系统中分页命令家族中的一员。分页命令能使用户在浏览文件时可以一次一屏或一行地进行,这在阅读大文件时特别有用。more命令的用法为:

more [-dflpcsu] -lines [+linenum | +/pattern] files

2)参数与命令说明

more命令的参数如表3-9所示,more命令的部分屏幕操作命令如表3-10所示。

表3-9 more命令的部分参数

表3-10 more命令的部分屏幕操作命令

3)示例

                #more/etc/passwd          #分屏显示/etc/passwd的内容
                #ls-l/dev|more           #列出系统设备目录并通过more分屏显示

用户可使用如表3-10所示的命令对显示过程进行控制,可通过按“q”键或在文件结束时退出。

3.使用less命令浏览文件

less命令和more命令一样都是分页处理命令,但less命令比more命令的功能更强大。它改进了more命令中的一些功能,并又添加了许多其他的特色。例如,可以使用PgUp和PgDn翻页,使用HOME和END直接跳到文件开始或结尾等。

less命令是许多程序(如man)等使用的默认的分页处理命令。如果想阅读压缩文件(带有.gz或.zip等后缀的文件),它会自动调用zless命令来处理。通过less分屏显示/dev/目录内容的示例:

                ls -l /dev | less

4.修改文件存取时间或创建空文件(touch)

1)功能与用法

touch命令的功能有两个:一是建立空文件,二是更新文件的存取时间。默认时,将文件属性中的三个时间都修改为系统的当前时间,若指定文件不存在,则创建空文件。touch命令的用法为:

                touch  [-acm][-r ref_file][-t[[CC]YYMMDDhhmm[.ss]]files
                touch[-acm]  [-t MMDD[yy]]  files

2)参数说明

touch命令的部分参数如表3-11所示。

表3-11 touch命令的部分参数

3)示例

                #touch myfile                            #将文件的访问时间等改为当前时间,若不存在则创建
                #touch-a-t 200601010030 myfile yourfile     #修改文件的存取时间
                #touch-m-t 200706050403 myfile           #修改文件的修改时间
                # touch -m -d "Feb 22006 18:20" /tmp/tmpf

5.文件或目录的删除(rm, unlink)

1)功能与用法

rm(remove)命令的功能是删除文件。它可以删除各种类型的文件,这并不奇怪,因为UNIX/Linux系统把设备和目录等都当成文件看待。由于它在删除文件时表现的功能特别强大,且UNIX/Linux系统内被删除的文件是不可恢复的,所以使用时要特别小心。rm命令的用法为:

                rm [options] files

2)参数说明

rm命令的部分参数如表3-12所示。

表3-12 rm命令的部分参数

Linux系统还有一个命令unlink用于删除单个文件,但不能删除目录。

3)示例

                #rm  myfile  hisfile               #交互式删除,删除前需要用户确认
                #rm  -r  -f  myf.c mydir          #同时删除文件myf.c和目录mydir
                #rm  --  -xyz                    #删除具有特殊名字的文件-xyz
                #rm  \*  \\                      #删除名字为*和\的文件
                #unlink/tmp/x                    #删除/tmp/x

6.文件移动或更名(mv)

1)功能与用法

mv(move)命令的功能是移动文件位置或更名。mv命令的用法为:

                mv[options]source  dest
                mv [options] source ... directory

第一种用法是将源文件移动到目的文件,可用于文件移动或更名;第二种用法是将一批文件移动到某个目录directory。mv命令是有副作用的,但可使用备份方式加以避免。

mv命令至少需要两个参数,一个用于源文件,另一个用于目标文件或位置。若目标为当前目录,则可用“.”表示,不能省略。

2)参数说明

mv命令的部分参数如表3-13所示。

表3-13 mv命令的部分参数

3)示例

                #mv file1 file2                 #若file2存在,则在不使用备份时将被覆盖
                #mv myfile/tmp/tmpf             #将文件myfile移动至/tmp/tmpf下或更名为/tmp/tmpf
                #mv file1 file2 mydir           #将文件fiel1和file2移动到目录mydir
                #mv-bf-Ⅴ"t"file1 file2 mydir   #以备份方式移动文件

7.文件和目录复制(cp)

1)功能与用法

cp(copy)命令的功能是复制文件或目录,不能复制设备文件,但可复制设备文件的内容以构造映像。cp命令的用法为:

                cp[options]source  dest
                cp [options] source ... directory

第一种用法是将源文件复制到目标文件;第二种用法是将一批文件复制到某个目录directory。cp命令也有副作用,但同样可使用备份方式加以避免。

cp命令至少需要两个参数,一个用于源文件,另一个用于目标文件或位置。若目标为当前目录,则可用“.”表示,不能省略。

2)参数说明

如表3-13所示的mv命令的参数在cp命令中均可使用,cp命令不同于mv命令的部分参数如表3-14所示。

表3-14 cp命令的部分参数

3)示例

                #cp file1 file2                 #将文件file1复制到file2,默认采用交互方式
                #cp/tmp/myp.c.                  #将文件/tmp/myp.c复制到当前目录
                #cp*.c*.txt/tmp                 #将文件*.c和*.txt复制到目录,保持原文件名
                #cp file1/tmp/file2             #将文件file1复制到/tmp并更名为file2
                #cp-rp dir1 dir2                #将目录dir1复制到目录dir2,并保持原属性
                #cp-R file1 file2 dir1 dir2     #将文件file?和dir1复制到目录dir2
                #cp/dev/cdrom/tmp/disk.img      #构造光盘映像到文件/tmp/disk.img

8.显示文件的开始或结尾部分(head/tail)

head和tail命令可用于显示文件开始和结束部分,用户可以通过参数-num或-n num来决定要显示的行数,默认为10行。其基本用法为:

                head [-num | -n num ] [ files ]
                tail [-num | -n num ] [ files ]

head和tail均可处理多个文件,此时输出中每个文件的内容均以

                ==>文件名<==

分隔,若要抑制文件名输出可以使用-q参数。

9.文件的格式输出(pr)

1)功能与用法

pr(print)命令的功能是对文本文件进行加工并按指定格式输出。pr可对文本文件按分页、分栏要求进行加工,若不指定输入和输出文件,则使用标准I/O。在pr的默认输出中,页面长度为标准的66行,每页都有包括56行的正文,前后各保留5行作为页眉和页脚。在页眉中有包含打印日期、时间、文件名和页码的标题。用户可通过命令行参数来控制pr的行为。pr命令的用法为:

              pr [ options ] files

2)参数说明

pr命令的部分参数如表3-15所示。

表3-15 pr命令的部分参数

3)示例

                #pr-n prog.c           #给C程序prog.c添加行号后输出
                #pr-2 mytxt.txt         #以对分方式分2栏输出文件mytxt.txt
                #ls/dev|pr-a-3        #以交叉方式分3栏显示/dev中的内容
                #pr-n-f prog.c>x      #给C程序prog.c添加行号且以\f(^L)分页后存放到x

10.以指定格式或进制显示文件内容(od)

1)功能与用法

od(octal dump)命令的功能是按不同进制或格式显示文件内容,默认为八进制。od可以处理多个文件,此时输出将文件按排列顺序合并。若不指定输入文件或输入文件为-,则使用标准输入。od命令的用法为:

                od [options] files
                od --traditional [files] [[+]offset [[+]label]]

2)参数说明

od命令的部分参数如表3-16所示。

表3-16 od命令的部分参数

3)示例

                #od-t x1 x             #按十六进制方式显示文件x
                #od-N32-ta a.out       #按命名字符显示a.out前32个字符
                #od-N32-tx1c a.out     #按1位十六进制和字符方式分别显示a.out前32个字符

11.显示文件或文件系统状态信息(stat)

1)功能与用法

stat命令的功能是显示指定文件状态信息或其所在文件系统的状态信息——属性信息。属性信息包括文件名、文件大小、文件类型、占用磁盘块数、i节点号、链接数、存取权限、UID、GID和三个时间。stat命令的用法为:

                stat [options] files

2)参数说明

stat命令的部分参数如表3-17所示。

表3-17 stat命令的部分参数

说明:对于-cFORMAT,可以使用的格式参数有%A/%a,权限;%b,已经分配的块数;%D/%d,设备号;%F,文件类型;%G/%g,文件的组;%h,硬链接数;%i,i节点号;%N/%n,文件名;%o,I/O大小;%s,大小;%T/%t,主/次设备号;%U/%u,文件所有者;%X/%x,最近访问时间;%Y/%y,最近修改时间;%Z/%z,最近改变时间。X、Y和Z为从1970.1.1 0:0:0至今的秒数。

3)示例

                #stat a.out                        #显示文件a.out的状态信息
                #stat-f a.out                      #显示文件a.out所在文件系统的状态信息
                #stat/dev/cdrom                   #显示文件/dev/cdrom的状态信息
                #stat-L/dev/cdrom                #显示文件/dev/cdrom的链接文件状态信息
                #stat-c"%A/%a %h %s"/etc/hosts    #显示/etc/hosts的权限、链接数和长度

3.2.3 文本文件编辑与操作基本命令

1.文本编辑命令(vi)

1)功能与用法

vi是UNIX/Linux系统默认文本文件的全屏编辑器。

vi一次可以编辑多个文件,若vi启动时没有指定文件名,则vi将创建一个无名的工作文件,待用户保存时由用户指定文件名。若用户指定的文件不存在,则vi创建一个新文件。若用户对文件的修改不保存,则对原文件不发生作用。

设vi编辑的文件为file,则vi在工作时,在与被编辑文件相同的目录内创建一个名为.file.swp的临时文件;若没有指定文件名,则在当前目录下创建.swp临时文件,此临时文件也叫交换文件。当vi结束对当前文件的编辑时,对应的临时文件被自动删除,但当vi非正常退出时,此临时文件就会被残留下来,在下次再编辑此文件时会出错误信息。vi的整个工作过程和被编辑的文件无关,只是在保存的时候才修改被编辑的文件。

vi有三种工作模式:命令模式、编辑模式和命令项模式,各模式的功能和区别如下所述。

(1)命令模式:当进入vi时,它处在命令模式。在这种模式下,用户可通过vi的命令对文件的内容进行处理,如删除、移动、复制等,也可通过插入命令进入编辑模式。

(2)编辑模式:用户可在命令模式下通过o、O、a、A、i、I等命令使vi进入编辑模式。在编辑模式下,用户能在光标处输入内容,或通过光标键移动光标。也可通过按“Esc”键返回命令模式。

(3)命令项模式(又称底行模式):在命令模式下用户输入冒号“:”后,光标会跳到底行,输入相关命令后可完成指定操作。

vi命令的用法为:

                vi[options]  [files]

2)参数说明

vi命令的部分参数如表3-18所示。

表3-18 vi命令的部分参数

3)vi的基本操作

(1)编辑模式。在命令模式下,用户可使用如表3-19所示的功能键或命令进入编辑模式,编辑完毕后通过“Esc”键返回命令模式。

表3-19 vi的插入功能键或命令

(2)删除命令。在命令模式下可以通过如表3-20所示的命令删除文字。

表3-20 vi的删除命令

#cmd是对命令状态可执行命令的重复执行,cmd是命令,#为重复次数。例如,3x将从光标处删除3个字符,相当于执行3次x命令;5dw将删除光标后的5个word或重复执行5次dw。

(3)修改或替换。在命令模式下输入如表3-21所示的命令可修改或替换文字。

表3-21 vi的修改与替换命令

(4)搜索与定位。在命令模式下可使用如表3-22所示的命令进行字符串搜索或定位光标。

表3-22 vi的搜索与定位命令

(5)搜索和替换。在命令模式下输入如表3-23所示的命令可进行文字搜索与替换。

表3-23 vi的搜索与替换命令

说明:在表示行和行范围时,规定“.”表示当前行,%表示“1,$”,即从第一行到最后一行的整个文档。“1,.”表示从第1行到当前行,“.,$”表示从当前行到最后一行。

(6)块操作命令。在命令模式下输入如表3-24所示的命令可进行文件内容的块移动、复制、删除和保存等操作。

表3-24 vi的块操作命令

(7)缓冲区操作命令。vi默认时使用无名缓冲区进行工作,如将文件的某些部分删除了,但可以用u命令进行撤销。文件内容的复制与移动都是通过缓冲区进行的。vi还可使用命名缓冲区a~z,然后通过缓冲区进行复制或粘贴等操作。用法如表3-25所示。

表3-25 vi的缓冲区操作命令

说明:使用各种删除命令删除的任何内容都被保留在无名缓冲区中,用户可以使用p命令在光标后追加它们。因此,命令串xp可以交换光标处及其后2个字符的位置;命令串ddp可以交换所在行及其下一行的位置。

(8)其他命令。在使用vi命令时,还可以使用一些命令进行行号设置、字符大小写转换等工作,相关命令如表3-26所示。

表3-26 vi的其他命令

(9)退出。当用户对文件编辑完成后,可以采用如表3-27所示的命令保存文件或退出vi。

表3-27 vi的退出

说明:

(1)在Linux系统中,vi还有很多其他命令,功能强大,这里只介绍了它的基本部分。

(2)在Linux系统中还有很多用于文本编辑的其他命令,如ex、view、vim、emacs等,另外还有用于图形界面的编辑器,如gedit等,用户可以有选择地使用它们。

2.字符串过滤命令(grep)

1)功能与用法

grep命令的功能是字符串搜索与过滤。用于字符串过滤的命令有三个,它们分别是grep、egrep和fgrep,三者都用于在指定文件或流中搜索指定字符串,并显示出它所在行的相关信息。默认情况下,grep使用标准正则表达式,egrep使用扩展正则表达式,fgrep则使用固定的字符串表达式。以grep为例,它的用法为:

                grep [ options ] pattern [ files ]
                grep [ options ] [ -e pattern | -f patternfile ] [ files ]

若不指定搜索的文件,则默认为标准输入。

2)参数说明

grep命令的部分参数如表3-28所示。

表3-28 grep命令的部分参数

3)grep搜索示例

(1)使用扩展正则表达式在file文件内搜索someone、Someone、Anyone或anyone:

                # grep -E '([Ss]ome)|([Aa]ny)one' file

(2)使用扩展正则表达式在file文件内搜索henry、Henry、henrietta或Henrietta:

                # grep -E '[Hh]enr(y)|(ietta)' file

(3)使用固定表达式在/etc/passwd内搜索root用户:

                # grep -F root /etc/passwd

(4)多文搜索,使用一般正则表达式在a*、b*和c*中搜索mytext:

                # grep mytext [abc]*

(5)流搜索,在目录/dev内搜索文件名中含字符串sda的文件:

                # ls /dev | grep 'sda'

(6)反向搜索,在文件/etc/inittab中搜索非注释行(行首字符不为#的行):

                # grep -v "^#" /etc/inittab

3.文件排序命令(sort)

1)功能与用法

sort命令的功能是对指定文件中的行按要求进行排序,并将结果写到标准输出。如果指定多个文件,那么sort命令将这些文件连接起来,并当作一个文件进行排序。如果不指定文件名或文件为-,则使用标准输入。如果不指定排序要求,则sort以行为单位,按ASCII码的顺序排序。sort命令的用法为:

                sort [options] [files]

2)参数说明

sort命令的部分参数如表3-29所示。

表3-29 sort命令的部分参数

3)示例

(1)对文件按字典顺序排序:

                #sort filei>fileo        #将filei按字典顺序排序后输出到fileo

(2)以第二个域为键进行排序:

                #sort-k 2,2 filei         #使用k指定绝对域号
                #sort+1-2 filei         #使用相对量定义域号

(3)以第二个域的第一个字符为键进行排序:

                # sort -k 2, 2.1 ifile
                # sort +1.0-2.1 ifile

说明:本地环境变量的设置将影响sort的排序结果。

4.处理文件中的重复行命令(uniq)

1)功能与用法

uniq命令的功能是处理文件中的重复行。该命令首先比较相邻的行,然后处理(删除或显示)其后重复的行,在文件中不相邻的重复行将不会被处理。若想发现某文件中的所有重复行,可先用sort命令进行排序。uniq命令将处理的结果输出到标准输出或指定文件,一般不会对输入文件造成影响,除非指定的输出文件与输入文件名相同。uniq命令的用法为:

                uniq [options] [infile [outfile]]

2)参数说明

uniq命令的部分参数如表3-30所示。

表3-30 uniq命令的部分参数

3)示例

                #uniq ifile ofile             #将输入文件中的非重复行保存到另一个文件中
                #uniq ifile>ofile           #同上
                #uniq-d ifile              #仅显示重复的行
                #uniq-D ifile              #显示所有重复行

说明:默认情况下,uniq以整行方式比较输入文件的所有行;输入和输出文件不能相同,否则不能保证得到正确结果;本地环境决定了-f标志使用的域分隔符,以及-s标志如何将字节解释成字符。

5.文件内容信息统计(wc)

1)功能与用法

wc命令的功能是对输入文件的信息进行统计。统计信息包括行数、单词数和总字节数等。若有多个输入文件,则将对每个输入文件进行分别统计,在最后还给出所有文件的统计信息。wc命令的用法为:

                wc [-c] [-m] [-w] [-l] [-L] files

2)参数说明

wc命令的部分参数如表3-31所示。

表3-31 wc命令的部分参数

3)示例

                #wc/etc/inittab             #综合统计/etc/inittab内容信息
                #wc-w/etc/inittab          #统计/etc/inittab的单词数
                #wc-l/etc/inittab           #统计/etc/inittab的行数
                #wc-c/etc/inittab           #统计/etc/inittab的字符数

3.2.4 进程管理基本命令

Linux系统在启动时,创建了很多进程,用户程序的运行也是通过进程方式实现的。进程的创建者称为父进程,被创建者称为子进程,子进程还可以创建子进程。父进程和子进程在操作系统中都表现为进程。为了对进程进行管理,系统为每个进程分配了一个编号——进程号,进程号也称为进程标志,用pid(process identification)来表示。在诸多的进程、父进程、子进程之间按先后创建关系构成一棵进程树,进程树上的每一个分支都对应或描述一组进程的家族关系。进程树可通过pstree命令来查询。

1.进程树及进程状态查询(pstree)

1)功能与用法

pstree命令的功能是显示系统内进程间的关系——进程树。将系统中所有进程间的关系以树状图显示,系统中所有进程的进程树都会以基本进程init(1)为根,如果指定用户,则只显示此用户拥有的进程树状图。pstree命令的用法为:

                pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]

2)参数说明

pstree命令的部分参数如表3-32所示。

表3-32 pstree命令的部分参数

3)示例

                #pstree                   #显示系统进程树
                #pstree-p|grep vsftpd      #查询进程vsftpd的进程信息
                #pstree user               #显示指定用户(user)的进程

2.终止进程执行(kill)

1)功能与用法

kill命令的功能是向指定进程(pid)发送一个特定的信号(signal)。默认情况下,kill发送终止信号TERM,其值为15。按照系统规定,当进程收到某信号后,应该采取相应动作(参见第6章),默认动作是结束执行。kill命令的用法为:

                kill [-s signame | -n signum | -signame ] pid ...
                kill -l [signame]

2)参数说明

kill命令的部分参数如表3-33所示。

表3-33 kill命令的部分参数

3)示例

(1)列可用信号:

                #kill-l                #列出所有信号
                    1)SIGHUP           2)SIGINT            3)SIGQUIT          4)SIGILL
                    5)SIGTRAP          6)SIGABRT          7)SIGBUS           8)SIGFPE
                    9)SIGKILL          10)SIGUSR1         11)SIGSEGⅤ         12)SIGUSR2
                    13)SIGPIPE          14)SIGALRM        15)SIGTERM        16)SIGCHLD
                    17)SIGCONT        18)SIGSTOP         19)SIGTSTP         20)SIGTTIN
                    21)SIGTTOU         22)SIGURG          23)SIGXCPU         24)SIGXFSZ
                    25)SIGⅤTALRM      26)SIGPROF         27)SIGWINCH       28)SIGIO
                    29)SIGPWR          30)SIGSYS          …

(2)终止已知pid的进程:

                #kill-93231           #发送信号9(kill)终止PID为3231的进程

(3)终止已知进程名的进程:

                # #终止名为named的进程
                #pstree-p|grep named      #查询进程信息
                  |-named(1656)            #命令输出,由此可见named的pid为1656
                # #可使用以下命令中的任意一个终止pid为1656的进程named
                #kill-91656               #向pid为1656的进程发信号9,终止它
                #kill-KILL 1656           #同上
                #kill-SIGKILL 1656        #同上

3.2.5 时间管理命令

1.日期与时间管理命令(date)

1)功能与用法

date命令的功能是显示或设置系统的日期与时间。日期和时间的设置与显示受环境变量TZ的影响,格林尼治标准时区的TZ=UTC,中国的标准时区是TZ=CST。date命令的用法为:

                date [-d datestr] [-s datestr] [-u] [+form] [MMDDhhmm[CC]YY][.ss]

2)参数说明

date命令的部分参数如表3-34所示。

表3-34 date命令的部分参数

在显示方面,用户可以指定显示的格式,格式为+form,“+”号后接数个格式显示控制标记(参见表3-35和表3-36)。如果不是以“+”作为开头,则表示设定时间,时间格式为MMDD hhmm[CC]YY][.ss],其中MM为月份,DD为日,hh为小时,mm为分钟,CC为世纪,YY为年份的后两位数字,ss为秒数。只有root用户才能设置时间。

表3-35 date显示格式1(日期显示控制格式)

表3-36 date显示格式2(时间显示控制格式)

3)日期和时间使用示例

                #date                     #以默认格式显示系统当前时间
                #date+%T%n%D          #按指定格式显示当前系统时间,时间和日期各占一行
                #date 01311010            #设置系统时间:1月31日10:10:00 CST当年
                #date+"%Z%t%z%t%:z%t%::z%:::z"     #显示不同格式的时区
                #date-s"+2 minutes"        #将系统时间提前2min
                # #将从格林尼治标准时间1970-01-01 0:0:0到时间字符d的时间转换为秒
                #date-d"2011-01-01 00:00:00 CST"+%s     #仅转换而不设置时间
                #date-d"2011-01-01 00:00:00 GMT"+%s    #同上

4)说明

date命令依赖环境变量TZ,若设置该变量,则按其指示显示日期和时间;若没有指定该变量,则使用/etc/localtime文件。

对于时钟的设置来说,时区一定要正确,否则机器时钟的时间与手表的时间就可能不一致。对于有营业时间限制的业务系统更是如此,否则可能造成正是营业时间,但系统却不工作,或者非营业时间,系统却正在工作。前者会造成客户的不满,后者会造成安全隐患。

我国的时区为CST(China Standard Time),在系统安装时应该对其进行设置。若系统安装时没有设置正确,安装后还应该通过“System->Administration->Date & Time”或system-config-date,system-config-time,dateconf命令启动“日期和时间”设置界面。若是图形界面,通过“Date & Time”选项卡可以设置日期和时间,通过“Time Zone”选项卡可以设置时区。在设置时间时选择“Asia->Shanghai”。若为字符界面,则可以设置时区,然后通过date命令设置日期和时间。

2.日历显示命令(cal)

cal命令用来显示日历。其用法为:

                cal [-smjy13] [[month] year]

cal命令的部分参数如表3-37所示。

表3-37 cal命令的部分参数

如果只有一个参数,那么它代表年份(1~9999),年份必须全部写出。例如,cal 07显示的既不是1907年,也不是2007年的日历,而是公元7年的日历。

3.2.6 文件或目录比较命令

1.比较两个文件的内容(cmp)

1)功能与用法

cmp(compare)命令的功能是比较两个文件是否有差异。默认情况下,若发现有差异,则标示出第一个不同的字符和行号后退出。cmp命令的用法为:

                cmp [ -l ] [ -s ] file1 file2 [ skip1 [ skip2 ]]

2)参数说明

cmp命令的部分参数说明如表3-38所示。

表3-38 cmp命令的部分参数

3)示例

                #cmp prog.o.bak prog.o         #确定两个文件是否相同
                #cmp-l prog.o.bak prog.o        #显示两个文件的所有不同字节对
                #cmp-s prog.c.bak prog.c        #比较两个文件而不输出信息,可使用其返回值

说明:通常使用cmp命令比较非文本文件,使用diff命令比较文本文件。

2.比较文件的差异(diff)

1)功能与用法

diff(different)命令的功能是比较文本文件,而且仅当输入为文本文件时才有效,它也用于比较目录。diff命令的用法为:

                diff [options] file1 file2

如果file1是目录,而file2不是,则diff将目录file1中与file2同名的文件与file2比较,反之也是这样。当file1和file2都是目录时,diff并不是将两个目录作为目录文件来比较,而是比较其中相应文件的内容,若不使用-r选项,则不做递归处理。

2)参数说明

diff命令的部分参数如表3-39所示。

表3-39 diff命令的部分参数

3)示例

                #diff chap1.back chap1          #比较文件chap1.bak和chap1的不同处
                #diff-w myp.c.bak myp.c        #比较两个文件,但是忽略空格字符个数的区别
                #diff-r dir1 dir2               #比较目录dir1和dir2

3.逐行比较两个已经排序的文件(comm)

1)功能与用法

comm(common)命令的功能是比较两个已排序的文件的相同和不同之处,并将结果显示出来。comm命令的用法为:

                comm [-123] file1 file2

默认情况下,comm输出包含三栏内容:第一栏为file1中的不同行,第二栏为file2中的不同的行,第三栏为两个文件相同的行。

2)参数说明

comm命令的部分参数说明如表3-40所示。

表3-40 comm命令的部分参数

3)示例

                #comm-12 file1 file2        #显示两个文件中相同的行
                #comm-23 file1 file2        #显示只出现在file1中的不同的行
                #comm-3  file1 file2       #只显示两个文件中不同的行

4.显示或剪取文件行的指定部分(cut)

1)功能与用法

cut命令的功能是从文件或标准输入中读取内容,并截取每一行的特定部分,然后将结果送到标准输出。cut命令的用法为:

                cut [ options ] [ files ]

2)参数说明

cut命令的部分参数如表3-41所示。

表3-41 cut命令的部分参数

在使用-b、-c和-f时,列表可用以下方式指定。N:第N个;N-M:从第N个到第M个;N-:从第N个到最后一个;-M:从第一个到第M个;N1-M1,…,Nn-Mn:逗号连接的多个连续列表。

3)示例

                #cut-d:-f1/etc/passwd          #显示系统中的所有用户名
                # #显示以Tab分隔的组和组成员
                # cut --output-delimiter=$'\t' -d: -f1,4 /etc/group

5.连接文件的行(paste)

1)功能与用法

paste命令的功能是连接输入文件的行。默认情况下,paste命令将每个文件的行当成一栏,并用制表符水平连接它们(并行合并)。顺序连接时,可以将paste命令作为cat命令。paste命令的用法为:

                paste [ options ] [ files]

2)参数说明

-d Sep:指定在并行合并时使用Sep作为输出分隔符,默认为Tab。

-s:顺序合并文件。

3)示例

                #paste file1 file2 file3                      #将多个文件按栏粘贴到一起
                #paste-d"@"names places>emailusers      #用“@”作为栏分隔符
                #ls|paste---                            #以3栏方式列出当前目录

6.连接两个文件的行(join)

1)功能与用法

join命令的功能是连接两个文件的数据字段。join命令读取指定的文件,并根据“连续指标”连接文件中的行,将结果写到标准输出。这里的“连接指标”是指两个输入文件中具有相同值的(指定)域。被连接的文件必须为文本文件。join命令的用法为:

                join [ options ] file1 file2

2)参数说明

join命令的部分参数如表3-42所示。

表3-42 join命令的部分参数

3)示例

                # #在默认域(第一个文件的第一个域)上连接文件
                # join -t: /etc/passwd /etc/group
                # #在默认域上连接文件,空的域用字符串“---”代替
                # join -e"---" -t":" /etc/passwd /etc/group
                # #连接文件并按指定格式输出(输出第一个文件的第1,3,4域和第二个文件的第4个域)
                # join -t: -e--- -o1.1,1.3,1.4,2.4 /etc/passwd /etc/group

7.文本文件排版(fmt)

1)功能与用法

fmt命令的功能是从指定的文件里读取内容,将其按照指定格式重新编排后,输出到标准输出设备,因此可用其进行简单“排版”。fmt命令的用法为:

                fmt [ -num ] [ options ] [ files ]

2)参数说明

fmt命令的部分参数如表3-43所示。

表3-43 fmt命令的部分参数

8.文本文件包装(fold)

1)功能与用法

fold命令的功能是将输入文件的长行分成多个固定宽度的行,然后将其输出到标准输出设备,默认行宽为80列。fold命令的用法为:

                fold [ options ] [ files ]

2)参数说明

fold命令的部分参数如表3-44所示。

表3-44 fold命令的部分参数

3)示例

                #fold-s-w 72 myfile        #将文件myfile按72列宽度在空格处分行

3.2.7 其他操作命令

1.清屏命令(clear)

clear命令用于清除用户的终端屏幕,使光标回到屏幕的左上角。其用法为:

                clear

说明:在一般终端都可以使用组合键“Ctrl_L(^L)”完成清屏操作。

2.字符串或变量输出命令(echo)

1)功能与用法

echo命令将其命令行参数中的字符串或变量的值写到标准输出设备。默认情况下,每个echo命令执行完毕后会产生一个换行符,如果不带参数执行此命令,将输出一个空行。echo命令的使用方式为:

                echo [options] string ...

2)参数说明

echo既是内部命令又是外部命令,内部命令的搜索一般先于外部命令。常用参数如下:-e用于处理转义字符;-n用于抑制默认的换行符;-E用于抑制对转义字符的处理。

3)示例

                #echo Please insert diskette…                      #显示字符串常量
                #echo"My cell phone number is:\n13903750000"      #不处理转义字符
                #echo[-e]"My cell phone number is:\n\t13903750000" #处理转义字符
                #echo-n"I am student,"                          #不处理换行
                #echo"my name is Bill Joy"                       #与上一命令的输出在同一行上

3.变量输入命令(read)

1)功能与用法

read命令从标准输入上读入一行,并将它读到的内容按分隔符分隔的字符串传递给相应变量。若值的个数多于变量个数,多余的部分赋给最后一个变量;若值的个数少于变量个数,则后面多余的变量被置空。如果没有指定变量名,则默认使用REPLY作为变量名。read的用法为:

                read [-d delim] [ -n num] [-p prompt] [-r] [-s] [-t time] var1 var2 …

2)参数说明

read命令的部分参数如表3-45所示。

表3-45 read命令的部分参数

3)示例

                #read x y                                #输入:Hello World
                #echo-e"x=$x\tⅤar y=$y"                   #x=Hello   y=World
                #read-p"Name and Telephone number:"x y   #输入:Bill 123456
                # echo "Name is $x, and Telephone is $y"

4.显示环境变量命令(env)

env(environment)命令用于显示当前环境变量或为一个将要运行的命令设置临时环境变量。如果不带参数运行,则它将显示用户所有当前环境变量。其使用方式为:

                env [-|-i] [-u env_var] [var=value] … [cmd ]

参数-i或-用于忽略所有继承的环境变量设置;-u env_var用于取消env_var环境变量的设置;var=value用于设置新的环境变量var,其值为value;cmd为在新环境下执行的命令。

env命令设置或取消的环境变量只对cmd的运行子环境有效,而不影响当前的环境变量。

env命令的使用示例如下:

                #date                        #显示当前系统日期
                #env TZ=GMT date            #以新环境变量执行命令,显示格林尼治标准时间

5.环境变量的定义(export)

export是bash的内部命令,用于环境变量的定义、修改和撤销。其用法为:

                export [-fn] [name[=value]] ...
                export -p

第一种用法用于定义、修改或撤销环境变量,第二种用法用于显示当前shell通过export定义的环境变量。参数-f用于定义一个函数,-n用于撤销一个环境变量。export的示例如下:

                #my_env1="MyEnv1"              #定义本地或局部变量my_env1
                #export my_env1                  #将my_env1变为环境变量
                #export my_env2="MyEnv2"        #直接定义环境my_env2
                #env|grep my_env                #显示新定义的环境变量
                #echo$my_env1$my_env2         #显示新定义环境变量的值
                #export-n my_env1                #撤销对环境变量my_env1的定义
                #env|grep my_env                #显示新环境变量的定义(只有my_env2了)

从示例可以看出,可以通过先定义变量,再执行export命令的方法定义环境变量:

                my_env1="MyEnv1"; export my_env1

也可采用一步走的办法直接定义环境变量:

                export my_env2="MyEnv2"

对于错误定义或不再需要的环境变量可以重新定义或撤销。

6.定位可执行程序及相关信息(which、whereis、whatis和apropos)

find命令可用于各种文件的查找与搜索,但Linux还给用户提供了which、whereis、whatis和apropos命令专门用于对命令及其相关信息进行搜索。

1)which

which命令用于定位一个程序文件的位置,输出信息中包括别名和路径等。其用法为:

                which [options] filenames

which命令只能定位可执行文件的位置,它的搜索只在PATH指定的目录内进行,因此不能定位其他类型的文件。可用--skip-alias参数抑制别名的输出。

which命令使用示例如下:

                #which which              #查找which命令在PATH中的位置
                #which ls                 #查找ls命令
                #which--skip-alias ls        #查找ls命令,不要别名
                # which date time

2)whereis

wherei命令可用于搜索一个二进制命令文件、源代码和手册页位置。其用法为:

                whereis [ -bmsu ] file ...

参数b、s和m分别用于搜索file的二进制、源代码和手册页文件,例如:

                #whereis ls who        #查找命令ls和who的二进制、源代码和手册页文件位置
                #whereis-b ls who      #查找命令ls和who的二进制文件位置
                #whereis-m ls who      #查找命令ls和who的手册页文件位置

3)whatis和apropos

whatis和apropos命令用于查找whatis数据库。whatis数据库是makewhatis工具根据各种已经安装的手册页创建的包含各种手册页摘要或眉批的数据库。因此,通过whatis命令可以查找到各类已经安装的,如命令、系统调用、库函数、配置文件格式等的摘要信息。如果能找到查找的主题(命令或字符串),则这些摘要信息可以告诉用户它们是干什么用的,以及在手册页的什么位置。

whatis等价于man -f,用于从whatis数据库中查找完整的单词,属于精确查找,而apropos等价于man -k,用于从数据库中查找字符串,属于模糊查找。

whatis和apropos命令的使用示例如下:

                #whatis echo或  man-f echo
                #apropos echo   或  man-k echo

从whatis echo的输出可以看出,echo的内容分布在man手册的4个不同章节里,并且分别给出了简单的功能描述,但从apropos echo的输出可以得到所有包含echo的项目位置及摘要描述。

当使用whatis或apropos命令不能得到某个命令的描述信息时,如:

                #whatis ls              #查找ls,得到以下错误信息
                ls:nothing appropriate

说明ls在whatis数据库中不存在,此时需要重建whatis数据库,方法是:

                makewhatis [-w]

7.为可执行程序定义别名(alias)

alias命令用于为一个可执行程序定义别名。当一个别名定义之后,就可以像命令一样被使用。例如,常用命令ll就是ls命令的一个别名,它的定义为:

                alias ll='ls -l --color=tty'

当用户输入命令“ll”时,系统执行的命令是ls -l --color=tty。

alias是bash的一个内部命令,其用法为:

                alias [-p] [name[=value]] …

参数-p用于显示别名列表,当不带参数运行alias时,将显示当前的所有别名。

alias的使用示例如下:

                #alias                 #显示所有已经定义的别名
                #alias ll rm             #显示ll和rm的别名定义
                #alias li='ls-l-i'         #定义别名li,其功能为ls-l-i

说明:在shell搜索命令时,别名先于内部命令,内部命令等于外部命令,因此设置别名时不应覆盖内部或外部命令。但也有例外,如从alias的输出中可以看到,系统已经定义的别名cp='cp -i'、mv='mv -i'、rm='rm -i'、ll='ls -l --color=tty'和vi='vim'等,前三个“覆盖”了原来的命令,带来了安全性;后两个也“覆盖”了原来的命令,但却带来了灵活性和方便性。

由alias定义的别名可由unalias取消。unalias ll将取消对ll的别名定义;也可执行unalias-a,取消所有的别名。

8.任意精度计算器(bc)

bc命令是一个支持任意精度计算的解释语言,提供交互式操作。其用法为:

                bc [-l] [file ...]

若提供file参数,则bc命令首先读取指定的输入文件file,其中必须为包含bc命令序列、语句或函数定义的文本文件,在输入处理完毕后,继续读取标准输入作为处理和解释对象。若不带参数运行bc,则它进入交互式界面。

bc支持类似C语言的语法,使用起来较为方便,还可通过-l选项使用函数库。可用以下三种办法之一退出bc:quit、halt、Ctrl+D。

1)数

bc命令允许用户指定十进制、八进制、十六进制或其他进制作为输入和输出进制。ibase=n指定输入进制,obase=m指定输出进制,默认值为十进制。bc命令始终使用“.”(点)来表示小数点,用户还可用scale=n来指定输出数据的小数部分的位数为n。

在十六进制中,A、B、C、D、E和F分别表示十进制的10、11、12、13、14和15。

2)变量

在bc中,数可被存入两种类型变量:简单变量和数组变量,数组变量的形式为name[ ]。所有变量的字母都必须是小写的。特殊变量有ibase、obase、scale和last,last代表最后显示的数据的值。显示一个变量值的办法是输入变量名后直接按“Enter”键,也可以通过直接输入数值或表达式后按“Enter”键的办法进行直接计算或数制转换(输入和输出进制由ibase和obase决定)。

3)注释

可以使用shell的方式进行注释,也可以使用C语言中的“/*… …*/”进行注释,但不能使用“//”方式。

4)继续行

若一行内容太长,可以像C语言和shell一样使用继续行。

5)表达式

可以像其他高级语言一样使用表达式,在表达式中可用的运算符如表3-46所示。

表3-46 bc的运算符

6)函数

(1)bc使用的标准函数有length(var)(变量的有效长度)、read()(读取一个字符串,如x=read())、scale(var)(求一个变量的小数位)和sqrt(var)(求一个数的开平方)。

(2)库函数(使用-l参数时):s(var)(sin)、c(var)(cos)、a(var)(arctan)、l(var)(ln)、e(var)(exp)和j(n,x)(x的n阶贝济埃函数)。

(3)自定义函数:用户可以自己定义函数,方法为:

                define func_name(parameters) {
                    auto_list
                    statement_list
                }

7)语句

bc可使用的语句有print list(输出列表);if(expr) statement1 else statement2(if结构);while(expr) statement(while结构);for([expr1];[expr2];[expr3]) statements(for结构);break;continue(循环控制);halt、quit(退出bc);return,return(expr)(函数中返回);limits(显示bc的最大值)等。

8)示例

(1)一般(数学)计算:

                #bc-l                        #进入bc,以下为在bc环境下的输入
                    scale=4                   /*定义小数位数*/
                    123+456*850−s(2)^2       /*计算123+456*850−s(2)^2*/
                #387722.1734                  /*输出结果*/

(2)进制转换:

                #bc                          #进入bc,以下为在bc环境下的输入
                    obase=16                 /*定义输出进制为16*/
                    32767                    /*结果为7FFF*/
                    123456                   /*结果为1E240*/

(3)使用自定义函数:

                #bc-l                        #-l启动使用库函数
                scale=2
                define myf(x){                /*定义函数myf*/
                    auto i,j                   /*定义自动变量*/
                    j=1
                    for(i=1;i<=x;i++)
                      j=i*j
                    return (j)
                }
                myf(5)                       /*计算myf(5),结果为120*/
                l(myf(10))+5^6                /*计算ln(myf(10))+5^6,结果为15640.10*/

(4)在shell中使用bc计算:

                #pi=$(echo"scale=10;4*a(1)"|bc-l)     #计算π的值,并赋给变量pi
                #echo$pi                            #显示π的值:3.1415926532