Linux命令:文件和目录操作相关命令

摘自:http://www.chineseliterature.com.cn/diannao/os/linuxunix/xxjj/006.htm

显示文件内容命令 

用户需要查看一个文件的内容时,可以根据显示要求的不同选用以下的命令。 

cat命令 

功能1:在标准输出上显示文件。 

语法:cat [ - 选项 ] 文件 

说明:该命令功能之一是用来显示文件。它依次读取其后所指文件的内容并将其输出到标准输出。 

cat命令中各个选项的含义为: 

- v 用一种特殊形式显示控制字符,LFD与TAB除外。 

加了- v选项后,- T和- E选项将起作用。其中: 

- T 将TAB显示为“ù I”。该选项需要与- v选项一起使用。即如果没有使用- v选项,则这个选项将被忽略。 

- E 在每行的末尾显示一个$符。该选项需要与- v选项一起使用。 

- u 输出不经过缓冲区。 

- A 等于- vET。 

- t 等于- vT。 

- e 等于- vE。 

例1:$ cat example.txt 

则在屏幕上显示出example.txt 文件的内容。 

本想今天去香山看红叶,无奈天公不作美没去成,真遗憾,但愿明天艳阳高照,使我们梦想成真。

例2:$ cat - A exam2.txt 

则在屏幕上显示出exam2.txt 文件的内容,而且如果文件中含有特殊字符的话,一并显示。 
 

I am a boy ! ùI You are a cute boy$ 

功能2:连接两个或多个文件 

说明:该命令功能之二是用来将两个或多个文件连接起来。 

例3:$ cat file1 file2 > file3 

这样就把文件filel和文件file2的内容合并起来,放入文件file3中。(此时在屏幕上并不能直接看到该命令执行后的结果。若想看到连接后的文件内容,可以再使用“cat file3”。) 

需要说明的是,当文件内容过多时,就带来一个问题,因为文本在屏幕上迅速地闪过,用户来不及看清其内容。因此,当文件内容较大时,一般可用more等命令分屏显示,以免因屏幕滚动太快而无法看清。 

more命令 

功能:在终端屏幕按屏显示文本文件。 

语法: more [ - 选项 ] 文件 

说明: 该命令一次显示一屏文本,显示满之后,停下来,并在终端底部打印出- - More- - ,系统还将同时显示出已显示文本占全部文本的百分比,若要继续显示,按回车或空格键即可。 

more命令中各个选项的含义为: 

- p 显示下一屏之前先清屏。 

- c 作用同- p基本一样。 

- d 在每屏的底部显示更友好的提示信息: 

- - More- - (XX%)[Press space to contiune , ‘q’ to quit . ] 

而且若用户输入了-个错误命令则显示出错信息,而不是简单地鸣响终端。 

- l 不处理< Ctrl+l >(换页符)。如果没有给出这个选项,则more命令在显示了一个包含有< Ctrl+l >字符的行后将暂停显示,并等待接收命令。 

- s 文件中连续的空白行压缩成一个空白行显示。 

执行中的命令 

在more命令的执行过程中,用户可以使用more自己的一系列命令动态地根据需要来选择显示的部分。more在显示完一屏内容之后,将停下来等待用户输 入某个命令。下面列出了more指令在执行中用到的一些常用命令,而有关这些命令的完整内容,可以在more执行时按h查看。这些命令的执行方法是先输入 i(行数)的值,再打所要的命令,不然它会以预设值来执行命令。 

i空格 若指定i,显示下面的i行;否则,显示下一整屏。 

i回车 若指定i,显示下面的i行;否则,显示下一行。 

iù D 按,若指定i,显示下面的i行;否则,往下显示半屏(一般为11行)。 

id 同iù D 。 

iz 同“i空格”类似,只是i将成为以下每个满屏的缺省行数。 

is 跳过下面的i行再显示一个整屏。预设值为1。 

if 跳过下面的i屏再显示一个整屏。预设值为1。 

iù B 按,往回跳过(即向文件首回跳)i屏,再显示一个满屏。预设值为1。 

b 与iù B相同。 

’ 回到上次搜索的地方  

q或Q 退出more。 

= 显示当前行号。 

v 在当前行启动/usr/bin/vi对之进行编辑修改。 

h 显示各命令的帮助信息。 

i/pattern 查找匹配该模式的第i行。预设值为1。 

in 查找符合表达式的倒数i行。预设值为1。 

! 或 :! 在子shell中执行命令。 

i:n 在命令行中指定了多个文件名的情况下,可用此命令使之显示第i个文件,若i过大(出界),则显示文件名列表中的最后一个文件。 

i:p 在命令行中指定了多个文件名的情况下,可用此命令使之显示倒数第i个文件。若i过大(出界),则显示第一个文件。 

i:f 显示当前文件的文件名和行数。 

· 重复上次键人的命令。 

例1:用分页的方式显示一个文件的内容。 

$ more example1.c 

/*-------------------------------------------*/ 

/* example1.c */ 

/*-------------------------------------------*/ 

/* author f opus.BBS@BBS.cs.nthu.edu.tw */ 

/* target f BBS main/login/top-menu routines */ 

/* create f 99/10/23 */ 

/* update f 99/12/15 */ 

/*-------------------------------------------*/ 

#define _MAIN_C_ 

#inc1ude < BBS. h > 

jmp_buf byebye; 

int talkrequest=NA; 

static uschar Enter_uflag i 

#ifdef SHOW_IDLE_TIME 

--More- (3%) 

  

例2:显示一个文件的内容,但显示之前先清屏,并且在显示器的最下方显示完整的百分比。 

$ more - dc example1.c 

执行该命令后,先清屏,然后显示文件example.c的内容。 

/*-------------------------------------------*/ 

/* example1.c */ 

/*-------------------------------------------*/ 

/* author f opus.BBS@BBS.cs.nthu.edu.tw */ 

/* target f BBS main/login/top-menu routines */ 

/* create f 99/10/23 */ 

/* update f 99/12/15 */ 

/*-------------------------------------------*/ 

#define _MAIN_C_ 

#inc1ude < BBS. h > 

jmp_buf byebye; 

int talkrequest=NA; 

static uschar Enter_uflag i 

#ifdef SHOW_IDLE_TIME 

char fromhost( ); 

--More- (3%)[Press space to continue , ‘q’ to quit .] 

  

例3:显示一个文件的内容,要求每十行显示一次,且显示之前先清屏。 

$ more - c - 10 example1.c 

执行该命令后,先清屏,然后将以每十行每十行的方式显示文件example.c的内容。 

/*-------------------------------------------*/ 

/* example1.c */ 

/*-------------------------------------------*/ 

/* author f opus.BBS@BBS.cs.nthu.edu.tw */ 

/* target f BBS main/login/top-menu routines */ 

/* create f 99/10/23 */ 

/* update f 99/12/15 */ 

/*-------------------------------------------*/ 

#define _MAIN_C_ 

inc1ude < BBS. h > 

--More- (3%) 

less命令 

less命令的功能几乎和more命令一样,也是用来按页显示文件,不同之处在于less命令在显示文件时允许用户既可以向前又可以向后翻阅文件。 

less命令的使用与more命令类似,在此就不赘述了,用户如有不清楚的地方可直接查看联机帮助。 

用less命令显示文件时,若需要在文件中往前移动,按< b >键;要移动到用文件的百分比表示的某位置,则指定一个0到100之间的数,并按< p >即可。

例如,需要按页显示test文件 

$ less test 

  

head命令 

如果用户希望查看一个文件究竟保存的是什么内容,可以只查看文件的头几行,而不必浏览整个文件。用head命令只显示文件或标准输入的头几行。 

语法:head [- n ] 文件 

功能:显示指定文件的前若干行。 

说明:该命令显示每个指定文件的前面n行。如果没有给出n值,缺省设置为10。如果没有指定文件,head就从标准输入读取。例如显示文件example.c的前3行。 

$ head - 3 example.c 

/*-------------------------------------------*/ 

/* example1.c */ 

/*-------------------------------------------*/ 

  

tail命令 

同样,如果用户想查看文件的尾部,可以使用tail命令。 

语法:tail [+ / - num ] [参数] 文件 

说明:该命令显示一个文件的指定内容。它把指定文件的指定显示范围内的内容显示在标准输出上。如果没有给定文件名,则使用标准输入文件。 

tail命令中各个选项的含义为: 

+num 从第num行以后开始显示。 

- num 从距文件尾num行处开始显示。如果省略num参数,系统默认值为10。 

l 以文本行为num的计数单位。与参数选项+num或- num选项同时使用时,num表示要显示的文本行行数。 

c 以字节为num的计数单位。与参数选项+num或- num选项同时使用时,num表示要显示的字符数。 

(l、c选项可以省略,系统默认值为l,即按行计数)。 

例如: 

$ tail -4 example 

将显示文件example的最后4行。 
  

od命令 

用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。 

语法:od [选项] 文件… 

命令中各选项的含义: 

- A 指定地址基数,包括: 

d 十进制 

o 八进制(系统默认值) 

x 十六进制 

n 不打印位移值 

- t 指定数据的显示格式,主要的参数有: 

c ASCII字符或反斜杠序列 

d 有符号十进制数 

f 浮点数 

o 八进制(系统默认值为02) 

u 无符号十进制数 

x 十六进制数 

除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。 

说明:od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal Dump)。但这不是最有用的显示方式,用ASCII码和十六进制组合的方式能提供更有价值的信息输出。 

例如: 

$ od - Ax - tcx1 wh5 

000000 F i l e s y s t e m 

46 69 6c 65 73 79 73 74 65 6d 20 20 20 20 20 20 

000010 1 k - b l o c k s 

20 20 20 20 20 31 6b 2d 62 6c 6f 63 6b 73 20 20 

000020 U s e d A v a i l a b 

20 20 20 20 55 73 65 64 20 41 76 61 69 6c 61 62 

000030 l e U s e % M o u n t e d 

6c 65 20 55 73 65 25 20 4d 6f 75 6e 74 65 64 20 

000040 o n /n / d e v / h d a 8 

6f 6e 0a 2f 64 65 76 2f 68 64 61 38 20 20 20 20 

000050 3 0 4 4 4 

20 20 20 20 20 20 20 20 20 20 20 33 30 34 34 34 

000060 0 5 0 6 8 9 2 

30 20 20 20 20 20 35 30 36 38 39 20 20 20 20 32 

000070 3 8 0 2 8 1 8 % / /n / d e 

33 38 30 32 38 20 20 31 38 25 20 2f 0a 2f 64 65 

000080 v / h d a 9 

76 2f 68 64 61 39 20 20 20 20 20 20 20 20 20 20 

000090 5 4 6 3 6 9 

20 20 20 20 20 35 34 36 33 36 39 20 20 20 20 20 

0000a0 8 7 7 6 5 0 9 3 7 1 

20 38 37 37 36 20 20 20 20 35 30 39 33 37 31 20 

0000b0 2 % / h o m e /n /n /n 

20 20 32 25 20 2f 68 6f 6d 65 0a 0a 0a 

0000bd

文件内容查询命令     

  grep、fgrep和egrep命令 

  这组命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行 所在的文件名。grep命令一次只能搜索一个指定的模式;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串, 它不识别正则表达式,是快速搜索命令。 

  这组命令在搜索与定位文件中特定的主题方面非常有用。要搜索的模式可以被认为是一些关键词,您可以用它们来搜索文件中包含的这些关键词。编写程序时, 可以用它来寻找某一个函数,或是相关的词组。grep命令的搜索功能比fgrep强大,因为grep命令的搜索模式可以是正则表达式,而fgrep却不 能。有关正则表达式请参见shell一章。 

  该组命令中的每一个命令都有一组选项,利用这些选项可以改变其输出方式。例如,可以在搜索到的文本行上加入行号,或者只输出文本行的行号,或者输出所 有与搜索模式不匹配的文本行,或只简单地输出已搜索到指定模式的文件名,并且可以指定在查找模式时忽略大小写。 

  这组命令在指定的输入文件中查找与模式匹配的行。如果没有指定文件,则从标准输入中读取。正常情况下,每个匹配的行被显示到标准输出。如果要查找的文件是多个,则在每一行输出之前加上文件名。 

  语法: 

  grep [选项] [查找模式] [文件名1,文件名2,……] 

  egrep [选项] [查找模式] [文件名1,文件名2,……] 

  fgrep [选项] [查找模式] [文件名1,文件名2,……] 

  这组命令各选项的含义为: 

  - E 每个模式作为一个扩展的正则表达式对待。 

  - F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。 

  - b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。 

  - c 只显示匹配行的数量。 

  - i 比较时不区分大小写。 

  - h 在查找多个文件时,指示grep不要将文件名加入到输出之前。 

  - l 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。 

  - n 在输出前加上匹配串所在行的行号(文件首行行号为1)。 

  - v 只显示不包含匹配串的行。 

  - x 只显示整行严格匹配的行。 

  - e expression 指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。 

  - f expfile 从expfile文件中获取要搜索的模式,一个模式占一行。 

  对该组命令的使用还需注意以下方面: 

  在命令后键入搜索的模式,再键入要搜索的文件。其中,文件名列表中也可以使用特殊字符,如“*”等,用来生成文件名列表。如果想在搜索的模式中包含有 空格的字符串,可以用单引号把要搜索的模式括起来,用来表明搜索的模式是由包含空格的字符串组成。否则,Shell将把空格认为是命令行参数的定界符,而 grep命令将把搜索模式中的单词解释为文件名列表中的一部分。在下面的例子中,grep命令在文件example中搜索模式“text file”。 

  $ grep ’text file’ example 

   用户可以在命令行上用Shell特殊字符来生成将要搜索的文件名列表。在下面的例子中,特殊字符“*”用来生成一个文件名列表,该列表包含当前目录下所有的文件。该命令将搜索出当前目录下所有文件中与模式匹配的行。 

  $ grep data * 

   特殊字符在搜索一组指定的文件时非常有用。例如,如果想搜索所有的C程序源文件中特定的模式,您可以用“*.c”来指定文件名列表。假设用户的 C程序中包含一些不必要的转向语句(goto语句),想要找到这些语句,可以用如下的命令来搜索并显示所有包含goto语句的代码行: 

  $ grep goto *.c 

  用户可以在命令行上键入搜索模式,也可以使用-f选项从指定文件中读取要搜索的模式。在文件中,每个搜索模式占一行。如果经常要搜索一组常见字符串 时,这个功能非常有用。在下面的例子中,用户要在文件exam中搜索字符串“editor”和“create”,就把要搜索的模式放置在文件mypats 中,然后,grep命令从文件mypats中读取要搜索的模式。 

  $ cat mypats 

  editor 

  create 

  $ grep -f mypats exam 

  文件查找命令 

  find命令 

  功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。 

  语法:find 起始目录 寻找条件 操作 

  说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。 

  该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含义为: 

  (1)and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条件都满足时,寻找条件才算满足。例如: 

  $ find –name ’tmp’ –xtype c -user ’inin’ 

  该命令寻找三个给定条件都满足的所有文件。 

  (2)or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时,寻找条件就算满足。例如: 

  $ find –name ’tmp’ –o –name ’mina*’ 
  
  该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。 

  (3)not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件。例如: 

  $ find ! –name ’tmp’ 

  该命令查询文件名不是’tmp’的所有文件。 

  需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“”来去除括号的意义。 

  例:$ find (–name ’tmp’ –xtype c -user ’inin’ ) 

  寻找条件有以下选项: 

  首先,下列各个选项中的n值可以有三种输入方式,假设n为20,则: 

  +20 表示20以后(21,22,23等) 

  -20 表示20以前(19,18,17等) 

  20 表示正好是20 

  1. 以名称和文件属性查找。 

  - name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、[]。 

  - lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、[]。 

  -gid n 查找属于ID号为n的用户组的所有文件。 

  -uid n 查找属于ID号为n的用户的所有文件。 

  -group ’字串’ 查找属于用户组名为所给字串的所有的文件。 

  -user ’字串’ 查找属于用户名为所给字串的所有的文件。 

  -empty 查找大小为0的目录或文件。 

  -path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[]。 

  -perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。 

  -size n[bckw] 查找指定文件大小的文件,n后面的字符表示单位,缺省为b,代表512字节的块。 

  -type x 查找类型为x的文件,x为下列字符之一: 

  b 块设备文件 

  c 字符设备文件 

  d 目录文件 

  p 命名管道(FIFO) 

  f 普通文件 

  l 符号链接文件(symbolic links) 

  s socket文件 

  -xtype x 与-type基本相同,但只查找符号链接文件。 

  2. 以时间为条件查找 

  - amin n 查找n分钟以前被访问过的所有文件。 

  - atime n 查找n天以前被访问过的所有文件。 

  - cmin n 查找n分钟以前文件状态被修改过的所有文件。 

  - ctime n 查找n天以前文件状态被修改过的所有文件。 

  - mmin n 查找n分钟以前文件内容被修改过的所有文件。 

  - mtime n 查找n天以前文件内容被修改过的所有文件。 

  3. 可执行的操作 

  - exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“ ;”结束。 

  - ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令。 

  - ls 详细列出所找到的所有文件。 

  - fprintf 文件名 将找到的文件名写入指定文件。 

  - print 在标准输出设备上显示查找出的文件名。 

  - printf 格式 格式的写法请参考有关C语言的书。 

  例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。 

  $ find . - name ‘main*’ - exec more {} ; 

  例2:删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。 

  $ find . (- name a.out - o - name ‘*.o’) 

  > - atime +7 - exec rm {} ; 

  说明如下: 

  命令中的“.”表示当前目录,此时find将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。(和)表示括号(),其中的“”称为转义符。之所以这样写是由于对Shell而言,(和)另有不同的含义,而不是这里的用于组合条件的用途。“- name a.out”是指要查找名为a.out的文件;“- name ‘*.o’”是指要查找所有名字以 .o结尾的文件。这两个- name之间的- o表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件,find在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间是否在7天以前(条件-atime +7),若是,则对该文件执行命令rm(- exec rm{ };)。其中{ }代表当前查到的符合条件的文件名,;则是语法所要求的。上述命令中第一行的最后一个是续行符。当命令太长而在一行写不下时,可输入一个,之后系统将显示一个>,指示用户继续输入命令。 

  locate命令 

  locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作(crontab)程序来建立。当我们建立好这个数据库后,就可以方便地来搜寻所需文件了。 

  该命令的一般形式为: 

  locate 相关字 

  例如:查找相关字issue 

  $ locate issue 

  /etc/issue 

  /etc/issue.net 

  /usr/man/man5/issue.5 

  /usr/man/man5/issue.net.5 
 

  第十课(三) 文本处理命令               

  Sort命令 

  sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。 

  Sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。 

  语法: 

  sort [选项] 文件 

  说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“- ”,则表示排序内容来自标准输入。 

  sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。 

  改变缺省设置的选项主要有: 

  - m 若给定文件已排好序,合并文件。 

  - c 检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。 

  - u 对排序后认为相同的行只留其中一行。 

  - o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。 

  改变缺省排序规则的选项主要有: 

  - d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。 

  - f 将小写字母与大写字母同等对待。 

  - I 忽略非打印字符。 

  - M 作为月份比较:“JAN”<“FEB”<? <“DEC”。 

  - r 按逆序输出排序结果。 

  +posl - pos2 指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。 

  - b 在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。 

  - t separator 指定字符separator作为字段分隔符。 

  下面通过几个例子来讲述sort的使用。 
 

  用sort命令对text文件中各行排序后输出其结果。请注意,在原文件的第二、三行上的第一个单词完全相同,该命令将从它们的第二个单词vegetables与fruit的首字符处继续进行比较。 

  $ cat text 

  vegetable soup 

  fresh vegetables 

  fresh fruit 

  lowfat milk 

  $ sort text 

  fresh fruit 
  
  fresh vegetables 

  lowfat milk 

  vegetable soup 

  用户可以保存排序后的文件内容,或把排序后的文件内容输出至打印机。下例中用户把排序后的文件内容保存到名为result的文件中。 

  $ sort text>result 
 

  以第2个字段作为排序关键字对文件example的内容进行排序。 

  $ sort +1-2 example 
 

  对于file1和file2文件内容反向排序,结果放在outfile中,利用第2个字段的第一个字符作为排序关键字。 

  $ sort -r -o outfile +1.0 -1.1 example 
 

  sort排序常用于在管道中与其他命令连用,组合完成比较复杂的功能,如利用管道将当前工作目录中的文件送给sort进行排序,排序关键字是第6个至第8个字段。 

  $ ls - l | sort +5 - 7 

  sort命令也可以对标准输入进行操作。例如,如果您想把几个文件文本行合并,并对合并后的文本行进行排序,您可以首先用命令cat把多个文件合并, 然后用管道操作把合并后的文本行输入给命令sort,sort命令将输出这些合并及排序后的文本行。在下面的例子中,文件veglist与文件 fruitlist的文本行经过合并与排序后被保存到文件clist中。 

  $ cat veglist fruitlist | sort > clist 
 

  uniq命令 

  文件经过处理后在它的输出文件中可能会出现重复的行。例如,使用cat命令将两个文件合并后,再使用sort命令进行排序,就可能出现重复行。这时可以使用uniq命令将这些重复行从输出文件中删除,只留下每条记录的唯一样本。 

  语法:uniq [选项] 文件 

  说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示,则从标准输入读取。 

  该命令各选项含义如下:、 

  - c 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。 

  - d 只显示重复行。 

  - u 只显示文件中不重复的各行。 

  - n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。 

  +n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。 

  - f n 与- n相同,这里n是字段数。 

  - s n 与+n相同,这里n是字符数。 

  例如: 

  1. 显示文件example中不重复的行。 

  uniq - u example 

  2. 显示文件example中不重复的行,从第2个字段的第2个字符开始做比较。 

  uniq - u - 1 +1 example
文件内容统计命令 
 

  wc命令 

  wc命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。 

  语法:wc [选项] 文件… 

  说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。 

  该命令各选项含义如下: 

  - c 统计字节数。 

  - l 统计行数。 

  - w 统计字数。 

  这些选项可以组合使用。 

  输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。 

  行数、字数、字节数、文件名 

  如果命令行中没有文件名,则输出中不出现文件名。 

  例如: 

  $ wc - lcw file1 file2 

  4 33 file1 

  7 52 file2 

  11 11 85 total 

  省略任选项-lcw,wc命令的执行结果与上面一样。 
 

  第十课(五) 文件比较命令  
 

  这组命令可以用来比较两个文件内容的差别。 

  Comm命令 

  如果想对两个有序的文件进行比较,可以使用comm命令。 

  语法:comm [- 123 ] file1 file2 

  说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用“- ”,则表示从标准输入读取。 

  选项1、2或3抑制相应的列显示。例如comm - 12就只显示在两个文件中都存在的行;comm - 23只显示在第一个文件中出现而未在第二个文件中出现的行;comm - 123则什么也不显示。 

  例如:假设要对文件myfile1和myfile2进行比较 

  $ cat myfile1 

  main( ) 
  
  { 

  float a,b, i, j ,z ; 

  a=i=10 ; b=j=5 ; 

  z= i + j ; 

  printf(“z=%d/n”,z) ; 

  } 

  $ cat myfile2 

  #include 

  main( ) 

  { 

  float i, j ,z ; 

  i=10 ; j=5 ; 

  z= i + j ; 

  printf(“z=%f/n”,z) ; 

  } 

  $ comm - 12 myfile1 myfile2 

  main( ) 

  { 

  z= i + j ; 

  } 

  就只显示文件myfile1和myfile2中共有的行。 

  Diff命令 

  该命令的功能为逐行比较两个文本文件,列出其不同之处。它比comm命令完成更复杂的检查。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。 

  语法:diff [选项] file1 file2 

  说明:该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用“- ”表示file1或fiie2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。例如: 

  diff /usr/xu mine 

  把目录/usr/xu 中名为mine的文件与当前目录中的mine文件进行比较。 

  通常输出由下述形式的行组成: 

  n1 a n3,n4 

  n1,n2 d n3 

  n1,n2 c n3,n4 

  这些行类似ed命令把filel转换成file2。字母(a、d和c)之前的行号(n1,n2)是针对file1的,其后面的行号(n3,n4)是针对file2的。字母a、d和c分别表示附加、删除和修改操作。 

  在上述形式的每一行的后面跟随受到影响的若干行,以“<”打头的行属于第一个文件,以“>”打头的行属于第二个文件。 

  diff能区别块和字符设备文件以及FIFO(管道文件),不会把它们与普通文件进行比较。 

  如果file1和file2都是目录,则diff会产生很多信息。如果一个目录中只有一个文件,则产生一条信息,指出该目录路径名和其中的文件名。 

  diff各选项的含义如下: 

  - b 忽略行尾的空格,而字符串中的一个或多个空格符都视为相等。如How are you与How are you被视为相同的字符串。 

  - c 采用上下文输出格式(提供三行上下文)。 

  - C n 采用上下文输出格式(提供n行上下文)。 

  - e 产生一个合法的ed脚本作为输出。 

  - r 当file1和file2是目录时,递归作用到各文件和目录上。 

  例如,文件ml.c的内容为(左边行号是有意加上的,以便前后对照): 

  1 main( ) 
 

  { 
 

  printf(“Hello!\n”); 
 

  } 

  5 

  文件m2.c的内容为: 

  1 main() 

  2 { 

  3 int n , m ; 

  4 n= 10 ; 

  5 printf ( “ % d / n ” , m = n * 10); 

  6 } 

  输入命令: 

  $ diff m1.c m2.c 

  屏幕上显示: 

  3,5 c 3,6 
 

  printf(“Hello!\n”); 
 

  } 

  <5 

  >3 int n,m; 

  >4 n=10 ; 

  >5 printf ( “ % d / n ” , m = n * 10); 

  >6 } 

  

  表示把文件m1.c的3至5行改成m2.c的3至6行后,两个文件相同。
文件的复制、删除和移动命令 

  cp命令 

  该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的copy命令一样,功能非常强大。 

  语法: cp [选项] 源文件或目录 目标文件或目录 

  说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。 

  该命令的各选项含义如下: 

  - a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。 

  - d 拷贝时保留链接。 

  - f 删除已经存在的目标文件而不提示。 

  - i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。 

  - p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。 

  - r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。 

  - l 不作拷贝,只是链接文件。 

  需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名是一个已存在的文件名,用cp命令拷贝文件后,这个文件就会被新拷贝的源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。 

  $ cp - i exam1.c /usr/wang/shiyan1.c 

  该命令将文件exam1.c拷贝到/usr/wang 这个目录下,并改名为 shiyan1.c。若不希望重新命名,可以使用下面的命令: 

  $ cp exam1.c /usr/ wang/ 

  $ cp - r /usr/xu/ /usr/liu/ 

  将/usr/xu目录中的所有文件及其子目录拷贝到目录/usr/liu中。 
 

  mv命令 

  用户可以使用mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令如同DOS下的ren和move的组合。 

  语法:mv [选项] 源文件或目录 目标文件或目录 

   说明:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv 命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称 时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件 的链接也将丢失。 

  命令中各选项的含义为: 

  - I 交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答y或n,这样可以避免误覆盖文件。 

  - f 禁止交互操作。在mv操作要覆盖某已有的目标文件时不给任何指示,指定此选项后,i选项将不再起作用。 

  如果所给目标文件(不是目录)已存在,此时该文件的内容将被新文件覆盖。为防止用户在不经意的情况下用mv命令破坏另一个文件,建议用户在使用mv命令移动文件时,最好使用i选项。 

  需要注意的是,mv与cp的结果不同。mv好象文件“搬家”,文件个数并末增加,而cp对文件进行复制,文件个数增加了。 

  例1:将/usr/xu中的所有文件移到当前目录(用“.”表示)中: 

  $ mv /usr/xu/ * . 

  例2:将文件wch.txt重命名为wjz.doc 

  $ mv wch.txt wjz.doc 

  rm命令 

  在linux中创建文件很容易,系统中随时会有文件变得过时且毫无用处。用户可以用rm命令将其删除。该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。 

  rm命令的一般形式为: 

  rm [选项] 文件… 

  如果没有使用- r选项,则rm不会删除目录。 

  该命令的各选项含义如下: 

  - f 忽略不存在的文件,从不给出提示。 

  - r 指示rm将参数中列出的全部目录和子目录均递归地删除。 

  - i 进行交互式删除。 

  使用rm命令要格外小心。因为一旦一个文件被删除,它是不能被恢复的。例如,用户在输入cp,mv或其他命令时,不小心误输入了rm命令,当用户按了回车键并认识到自己的错误时,已经太晚了,文件已经没有了。为了防止此种情况的发生,可以使用rm命令中的 i选项来确认要删除的每个文件。如果用户输入y,文件将被删除。如果输入任何其他东西,文件将被保留。在下一个例子中,用户要删除文件test和example。然后会被要求对每个文件进行确认。用户最终决定删除example文件,保留test文件。 

  $ rm - ii test example 

  Remove test ?n 

  Remove example ?y 

  第十课(七) 文件链接命令 
 

ln命令 

  该命令在文件之间创建链接。这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称。对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题。 

  如果链接指向目录,用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名。而且,即使我们删除这个链接,也不会破坏原来的目录。 

  语法:ln [选项] 目标 [链接名] 

     ln [选项] 目标 目录 

  链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。 

  在硬链接的情况下,参数中的“目标”被链接至[链接名]。如果[链接名]是一个目录名,系统将在该目录之下建立一个或多个与“目标”同名的链接文件, 链接文件和被链接文件的内容完全相同。如果[链接名]为一个文件,用户将被告知该文件已存在且不进行链接。如果指定了多个“目标”参数,那么最后一个参数 必须为目录。 

  如果给ln命令加上- s选项,则建立符号链接。如果[链接名]已经存在但不是目录,将不做链接。[链接名]可以是任何一个文件名(可包含路径),也可以是一个目录,并且允许它 与“目标”不在同一个文件系统中。如果[链接名]是一个已经存在的目录,系统将在该目录下建立一个或多个与“目标”同名的文件,此新建的文件实际上是指向 原“目标”的符号链接文件。 

  例:$ ln - s lunch /home/xu 

  用户为当前目录下的文件lunch创建了一个符号链接/home/xu。

目录的创建与删除命令  

mkdir命令 

功能:创建一个目录(类似DOS下的md命令)。 

语法:mkdir [选项] dirname 

说明:该命令创建由dirname命名的目录。要求创建目录的用户在当前目录中(dirname的父目录中)具有写权限,并且dirname不能是当前目录中已有的目录或文件名称。 

命令中各选项的含义为: 

- m 对新建目录设置存取权限。也可以用chmod命令设置。 

- p 可以是一个路径名称。此时若路径中的某些目录尚不存在, 加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。 

例如:在当前目录中建立inin 和inin下的/mail目录,也就是连续建两个目录。 

$ mkdir - p - m 700 ./inin/mail/ 

该命令的执行结果是在当前目录中创建嵌套的目录层次inin /mail,权限设置为只有文件主有读、写和执行权限。 

rmdir 命令 

功能:删除空目录。 

语法:rmdir [选项] dirname 

说明:dirname表示目录名。该命令从一个目录中删除一个或多个子目录项。需要特别注意的是,一个目录被删除之前必须是空的。(注意,rm - r dir命令可代替rmdir,但是有很大危险性。)删除某目录时也必须具有对父目录的写权限。 

命令中各选项的含义为: 

- p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。 

例如: 

$ rmdir - p /usr/xu/txt 

将/usr/xu/txt目录删除。 

改变工作目录、显示目录内容命令 

cd 命令 

功能:改变工作目录。 

语法:cd [directory] 

说明:该命令将当前目录改变至directory所指定的目录。若没有指定directory,则回到用户的主目录。为了改变到指定目录,用户必须拥有对指定目录的执行和读权限。 

该命令可以使用通配符(通配符含义请参见第十章)。 

例如:假设用户当前目录是:/home/xu,现需要更换到/home/xu/pro目录中, 

$ cd pro 

此时,用户可以执行pwd命令来显示工作目录。 

$ pwd 

/home/xu/pro 

pwd 命令 

在Linux层次目录结构中,用户可以在被授权的任意目录下利用mkdir命令创建新目录,也可以利用cd命令从一个目录转换到另一个目录。然而,没有提示符来告知用户目前处于哪一个目录中。要想知道当前所处的目录,可以使用pwd命令,该命令显示整个路径名。 

语法:pwd 

说明:此命令显示出当前工作目录的绝对路径。 

例:$ pwd 

/home/xu 

显示的路径名为/home/xu,每个目录名都用“/”隔开,根目录以开头的“/”表示。 

ls 命令 

ls是英文单词list的简写,其功能为列出目录的内容。这是用户最常用的一个命令之一,因为用户需要不时地查看某个目录的内容。该命令类似于DOS下的dir命令。 

语法:ls [选项] [目录或是文件] 

对于每个目录,该命令将列出其中的所有子目录与文件。对于每个文件,ls将输出其文件名以及所要求的其他信息。默认情况下,输出条目按字母顺序排序。当未给出目录名或是文件名时,就显示当前目录的信息。 

命令中各选项的含义如下: 

- a 显示指定目录下所有子目录与文件,包括隐藏文件。 

- A 显示指定目录下所有子目录与文件,包括隐藏文件。但不列出“.”和“..”。 

- b 对文件名中的不可显示字符用八进制逃逸字符显示。 

- c 按文件的修改时间排序。 

- C 分成多列显示各项。 

- d 如果参数是目录,只显示其名称而不显示其下的各文件。往往与l选项一起使用,以得到目录的详细信息。 

- f 不排序。该选项将使lts选项失效,并使aU选项有效。 

- F 在目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记“@”,管道(或FIFO)后面标记“|”,socket文件后面标记“=”。 

- i 在输出的第一列显示文件的i节点号。 

- l 以长格式来显示文件的详细信息。这个选项最常用。每行列出的信息依次是: 

文件类型与权限 链接数 文件属主 文件属组 文件大小 建立或最近修改的时间名字 

对于符号链接文件,显示的文件名之后有“—〉”和引用文件路径名。 

对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。目录中的总块数显示在长格式列表的开头,其中包含间接块。 

- L 若指定的名称为一个符号链接文件,则显示链接所指向的文件。 

- m 输出按字符流格式,文件跨页显示,以逗号分开。 

- n 输出格式与l选项相同,只不过在输出中文件属主和属组是用相应的UID号和GID号来表示,而不是实际的名称。 

- o 与l选项相同,只是不显示拥有者信息。 

- p 在目录后面加一个“/”。 

- q 将文件名中的不可显示字符用“?”代替。 

- r 按字母逆序或最早优先的顺序显示输出结果。 

- R 递归式地显示指定目录的各个子目录中的文件。 

- s 给出每个目录项所用的块数,包括间接块。 

- t 显示时按修改时间(最近优先)而不是按名字排序。若文件修改时间相同,则按字典顺序。修改时间取决于是否使用了c或u选顶。缺省的时间标记是最后一次修改时间。 

- u 显示时按文件上次存取的时间(最近优先)而不是按名字排序。即将-t的时间标记修改为最后一次访问的时间。 

- x 按行显示出各排序项的信息。 

用ls - l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型,它可以是下述类型之一: 

- 普通文件 

d 目录 

l 符号链接 

b 块设备文件 

c 字符设备文件 

后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读、写和执行权限。 

各权限如下所示: 

r 读 

w 写 

x 执行。对于目录,表示进入权限。 

s 当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组ID)。 

t 设置标志位(留在内存,不被换出)。如果该文件是目录,在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如果它是可执行文件,在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。 

- 没有设置权限。 

例1:列出当前目录的内容。 

$ ls -F 

bin/ lib/ var/ 

etc/ tmp/ index. html 

例2:列出某个目录的内容。 

$ ls –F /home/xu 

Mai1/ map1e/ mm/ ptr/ telnetd* 

fd/ mbox mount sobsrc. tgz tmp/ 

例3:列出某个目录下所有的文件(包括隐藏文件)。 

$ 1s -aF /home/xu 

./ . .e1m/ .netscape/ map1e ptr/ 

../ .fvwin2rc95 .term/ mbox sobsrc. tgz 

.Xauthority .kermrc Mai1/ mm/ te1netd* 

.bash-history .ncftp/ fd/ mount tmp/ 

  

例4:用长格式列出某个目录下所有的文件(包括隐藏文件)。 

$ 1s -laF /home/xu 

total 584 

drwxr-xr-x l2 root root 1024 Nov 02 22:07 ./ 

drwxr-xr-x 15 bbs bbs 1024 Jul 29 07:08 ../ 

-rw-r--r-- 1 yu users 4343 Ju1 29 22:20 .bash-history 

drwx------ 2 yu users 1024 May 17 06:36 .e1m/ 

--rw------ 1 root root 4628 Jun 2 1l:34 mbox 

lrwxrwxrwx 1 root root l4 Ju1 29 03:08 mount->/mnt 

drwxrwxr-x 4 root root 1024 Ju1 23 03:43 ptr/ 

-rw--r--r- 1 root root 483997 Ju1 l5 17:3l sobsrc. tgz 

-rwxr-xr-x l root users 60177 Jun 8 01:29 telnetd* 

drwxr-xr-x 2 root root 1024 Mar 6 22:32 tmp/ 

  

例5:用长格式列出某个目录下所有的文件包括隐藏文件和它们的i节点号。并把文件属主和属组以UID号和GID号的形式显示。 

$ 1s -1ainF /home/xu 

tota1 584 

399672 drwxr-xr-x l2 0 0 l024 Nov 30 22:07 ./ 

333907 drwxr-xr-x 15 9999 99 l024  Ju1 29 07:08 ../ 

39980l -rw------- l 0 0 0 Jun 2 2:09 .Xauthority 

399679 -rw-r--r-- 1 505 l00 4343 Jul 29 22:20 .bash-hist0ry 

30l763 drwxr----- 2 505 100 l024  May 17 06:36 .e1m/ 
 
 

第十课(九) 改变文件或目录的访问权限命令     
 

Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。 
文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件作 为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任 何组合。 

有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。 

每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。例如: 

$ ls -l sobsrc. tgz 

-rw-r--r-- 1 root root 483997 Ju1 l5 17:3l sobsrc. tgz 

横线代表空许可。r代表只读,w代表写,x代表可执行。注意这里共有10个位置。第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是d,表示是一个目录。 

例如: 

- rw- r-- r-- 

普通文件 文件主 组用户 其他用户 

是文件sobsrc.tgz 的访问权限,表示sobsrc.tgz是一个普通文件;sobsrc.tgz的属主有读写权限;与sobsrc.tgz属主同组的用户只有读权限;其他用户也只有读权限。 

确定了一个文件的访问权限后,用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。 

下面分别对这些命令加以介绍。 

  

chmod 命令 

chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。 

该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。 

1. 文字设定法 

chmod [who] [+ | - | =] [mode] 文件名? 

命令中各选项的含义为: 

操作对象who可是下述字母中的任一个或者它们的组合: 

u 表示“用户(user)”,即文件或目录的所有者。 

g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。 

o 表示“其他(others)用户”。 

a 表示“所有(all)用户”。它是系统默认值。 

操作符号可以是: 

+ 添加某个权限。 

- 取消某个权限。 

= 赋予给定权限并取消其他所有权限(如果有的话)。 

设置mode所表示的权限可用下述字母的任意组合: 

r 可读。 

w 可写。 

x 可执行。 

X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。 

s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。 

t 保存程序的文本到交换设备上。 

u 与文件属主拥有一样的权限。 

g 与和文件属主同组的用户拥有一样的权限。 

o 与其他用户拥有一样的权限。 

文件名:以空格分开的要改变权限的文件列表,支持通配符。 

在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:chmod g+r,o+r example 

使同组和其他用户对文件example 有读权限。 

2. 数字设定法 

我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。 

例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。 

数字设定法的一般形式为: 

chmod [mode] 文件名? 

例子: 

(1)文字设定法: 

例1:$ chmod a+x sort 

即设定文件sort的属性为: 

文件属主(u) 增加执行权限 

与文件属主同组用户(g) 增加执行权限 

其他用户(o) 增加执行权限 
  

例2:$ chmod ug+w,o-x text 

即设定文件text的属性为: 

文件属主(u) 增加写权限 

与文件属主同组用户(g) 增加写权限 

其他用户(o) 删除执行权限 
  

例3:$ chmod u+s a.out 

假设执行chmod后a.out的权限为(可以用ls – l a.out命令来看): 

–rws--x--x 1 inin users 7192 Nov 4 14:22 a.out 

并且这个执行文件要用到一个文本文件shiyan1.c,其文件存取权限为“–rw-------”,即该文件只有其属主具有读写权限。 

当其他用户执行a.out这个程序时,他的身份因这个程序暂时变成inin(由于chmod命令中使用了s选项),所以他就能够读取shiyan1.c这个文件(虽然这个文件被设定为其他人不具备任何权限),这就是s的功能。 

因此,在整个系统中特别是root本身,最好不要过多的设置这种类型的文件(除非必要)这样可以保障系统的安全,避免因为某些程序的bug而使系统遭到入侵。 

例4:$ chmod a–x mm.txt 

$ chmod –x mm.txt 

$ chmod ugo–x mm.txt 

  

以上这三个命令都是将文件mm.txt的执行权限删除,它设定的对象为所有使用者。 

(2)数字设定法: 

例1: $ chmod 644 mm.txt 

$ ls –l 

即设定文件mm.txt的属性为: 

-rw-r--r-- 1 inin users 1155 Nov 5 11:22 mm.txt 

文件属主(u)inin 拥有读、写权限 

与文件属主同组人用户(g) 拥有读权限 

其他人(o) 拥有读权限 

  

例2: $ chmod 750 wch.txt 

$ ls –l 

-rwxr-x--- 1 inin users 44137 Nov 12 9:22 wchtxt 

即设定wchtxt这个文件的属性为: 

文件主本人(u)inin 可读/可写/可执行权 

与文件主同组人(g) 可读/可执行权 

其他人(o) 没有任何权限 

chgrp命令 

功能:改变文件或目录所属的组。 

语法:chgrp [选项] group filename? 

该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。 

该命令的各选项含义为: 

- R 递归式地改变指定目录及其下的所有子目录和文件的属组。 

例1:$ chgrp - R book /opt/local /book 

改变/opt/local /book/及其子目录下的所有文件的属组为book。 

chown 命令 

功能:更改某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件。 

语法:chown [选项] 用户或组 文件 

说明:chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。 

该命令的各选项含义如下: 

- R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。 

- v 显示chown命令所做的工作。 

例1:把文件shiyan.c的所有者改为wang。 

$ chown wang shiyan.c 

例2:把目录/his及其下的所有文件和子目录的属主改成wang,属组改成users。 

$ chown - R wang.users /his
备份与压缩命令              

  用户经常需要备份计算机系统中的数据,为了节省存储空间,常常将备份文件进行压缩。下面分别介绍备份与压缩的命令。 

  tar命令 

  tar可以为文件和目录创建档案。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。 tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于 备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。 

  语法:tar [主选项+辅选项] 文件或者目录 

  使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。 

  主选项: 

  c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。 

  r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。 

  t 列出档案文件的内容,查看已经备份了哪些文件。 

  u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。 

  x 从档案文件中释放文件。 

  辅助选项: 

  b 该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为20(20*512 bytes)。 

  f 使用档案文件或设备,这个选项通常是必选的。 

  k 保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。 

  m 在还原文件时,把所有文件的修改时间设定为现在。 

  M 创建多卷的档案文件,以便在几个磁盘中存放。 

  v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。 

  w 每一步都要求确认。 

  z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。 

  例1:把/home目录下包括它的子目录全部做备份文件,备份文件名为usr.tar。 

  $ tar cvf usr.tar /home 

  例2:把/home目录下包括它的子目录全部做备份文件,并进行压缩,备份文件名为usr.tar.gz 。 

  $ tar czvf usr.tar.gz /home 

  例3:把usr.tar.gz这个备份文件还原并解压缩。 

  $ tar xzvf usr.tar.gz 

  例4:查看usr.tar备份文件的内容,并以分屏方式显示在显示器上。 

  $ tar tvf usr.tar | more 

  要将文件备份到一个特定的设备,只需把设备名作为备份文件名。 

  例5:用户在/dev/fd0设备的软盘中创建一个备份文件,并将/home 目录中所有的文件都拷贝到备份文件中。 

  $ tar cf /dev/fd0 /home 

  要恢复设备磁盘中的文件,可使用xf选项: 

  $ tar xf /dev/fd0 

  如果用户备份的文件大小超过设备可用的存贮空间,如软盘,您可以创建一个多卷的tar备份文件。M选项指示tar命令提示您使用一个新的存贮设 备,当使用M选项向一个软驱进行存档时,tar命令在一张软盘已满的时候会提醒您再放入一张新的软盘。这样您就可以把tar档案存入几张磁盘中。 

  $ tar cMf /dev/fd0 /home 

  要恢复几张盘中的档案,只要将第一张放入软驱,然后输入有x和M选项的tar命令。在必要时您会被提醒放入另外一张软盘。 

  $ tar xMf /dev/fd0 

  gzip命令 

  减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。 

  语法:gzip [选项] 压缩(解压缩)的文件名 

  各选项的含义: 

  -c 将输出写到标准输出上,并保留原有文件。 

  -d 将压缩文件解压。 

  -l 对每个压缩文件,显示下列字段: 

  压缩文件的大小 

  未压缩文件的大小 

  压缩比 

  未压缩文件的名字 

  -r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。 

  -t 测试,检查压缩文件是否完整。 

  -v 对每一个压缩和解压的文件,显示文件名和压缩比。 

  -num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。 

  假设一个目录/home下有文件mm.txt、sort.txt、xx.com。 

  例1:把/home目录下的每个文件压缩成.gz文件。 

  $ cd /home 

  $ gzip * 

  $ ls 

  m.txt.gz sort.txt.gz xx.com.gz 

  例2:把例1中每个压缩的文件解压,并列出详细的信息。 

  $ gzip -dv * 

  mm.txt.gz 43.1%-----replaced with mm.txt 

  sort.txt.gz 43.1%-----replaced with sort.txt 

  xx.com.gz 43.1%-----replaced with xx.com 

  $ ls 

  mm.txt sort.txt xx.com 
 

  例3:详细显示例1中每个压缩的文件的信息,并不解压。 

  $ gzip -l * 

  compressed uncompr. ratio uncompressed_name 

  277 445 43.1% mm.txt 

  278 445 43.1% sort.txt 

  277 445 43.1% xx.com 

  $ ls 

  mm.txt.gz sort.txt.gz xx.com.gz 

  例4:压缩一个tar备份文件,如usr.tar,此时压缩文件的扩展名为.tar.gz 

  $ gzip usr.tar 

  $ ls 

  usr.tar.gz 

  unzip命令 

  用MS Windows下的压缩软件winzip压缩的文件如何在Linux系统下展开呢?可以用unzip命令,该命令用于解扩展名为.zip的压缩文件。 

  语法:unzip [选项] 压缩文件名.zip 

  各选项的含义分别为: 

  -x 文件列表 解压缩文件,但不包括指定的file文件。 

  -v 查看压缩文件目录,但不解压。 

  -t 测试文件有无损坏,但不解压。 

  -d 目录 把压缩文件解到指定目录下。 

  -z 只显示压缩文件的注解。 

  -n 不覆盖已经存在的文件。 

  -o 覆盖已存在的文件且不要求用户确认。 

  -j 不重建文档的目录结构,把所有文件解压到同一目录下。 

  例1:将压缩文件text.zip在当前目录下解压缩。 

  $ unzip text.zip 

  例2:将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。 

  $ unzip -n text.zip -d /tmp 

  例3:查看压缩文件目录,但不解压。 

  $ unzip -v text.zip 

  zgrep命令 

  这个命令的功能是在压缩文件中寻找匹配的正则表达式,用法和grep命令一样,只不过操作的对象是压缩文件。如果用户想看看在某个压缩文件中有没有某一句话,便可用zgrep命令。 
 

第十课(十一)  在Linux环境下运行DOS命令  
 

  Linux系统提供了一组称为mtools的可移植工具,可以让用户轻松地从标准的DOS软盘上读、写文件和目录。它们对DOS和Linux环 境之间交换文件非常有用。它们是不具备共同的文件系统格式的系统之间交换文件的有力手段。对于一个MS-DOS的软盘,只要把软盘放在软驱中,就可以利用 mtools提供的命令来访问软盘上的文件。 

  mtools的主要命令如下: 

  mcd 目录名 改变MSDOS目录; 

  mcopy 源文件 目标文件 在MSDOS和Unix之间复制文件; 

  mdel 文件名 删除MSDOS文件; 

  mdir 目录名 显示MSDOS目录; 

  mformat 驱动器号 在低级格式化的软盘上创建MSDOS文件系统; 

  rnlabel 驱动器号 产生MSDOS卷标; 

  mmd 目录名 建立MSDOS目录; 

  mrd 目录名 删除MSDOS目录; 

  mren 源文件 目标文件 重新命名已存在的MSDOS文件; 

  mtype 文件名 显示MSDOS文件的内容。 

  这些命令和对应的不加 m的 MSDOS命令非常相似。 

  例1:在Linux环境下看DOS盘最上层的目录的内容: 

  $ mdir a: 

  Volume in drive A has no label 

  Volume Serial Number is 15F6-3362 

  Directory of A: 

  SS6 CPP 331 09-24-99 7:41 ss6.cpp 

  CH9 <DIR> 11-20-99 16:22 ch9 

  XXQ 0 11-20-99 16:24 xxq 

  95CZXTA DOC 36,864 06-15-98 22:51 95czxta.doc 

  95CZXTB DOC 39,936 06-16-98 7:18 95czxtb.doc 

  HTCA DOC 27,136 01-08-99 0:13 htca.doc 

  HTCB DOC 27,136 01-08-99 0:12 htcb.doc 

  6 file(s) 131,403 bytes 

  1 dir(s) 1,295,872 bytes free 

  例2:将DOS盘上的文件xxq复制到当前目录下,并用ls命令进行验证。 

  $ mcopy a:htca.doc 

  $ ls –l htca.doc 

  -rw-r— -r- - 1 xxq xxq 27136 Jan 1 01:80 htca.doc 

  思 考 题 

  1. 如何找到用户主目录的绝对路径名?在自己的系统上,用户主目录的绝对路径名是什么? 

  2. 将当前工作目录从/home/xxq转到/home/wang需要使用什么命令? 

  3. 如何显示当前目录? 

  4. 如何在当前目录下建立子目录text? 

  5. 如何删除子目录text? 

  6. 如何查看当前目录下的内容? 

  7. 如何将文件text的权限设定为:text属主可读、可写、可执行,同组用户可读、可执行,其他用户可执行? 

  8. 如何将当前目录包括所有子目录全部做备份文件,备份文件名为first.tar? 

  9. 如何将目录/home下每一个文件压缩成.gz文件? 

  10. 如何把上例中每个压缩的文件解压,并列出详细的信息? 

  11. 如何将当前目录下的text文件拷贝到DOS软盘上,并用什么命令可以进行验证? 

  12. 如何将DOS盘上的example文件复制到当前目录下,并用什么命令可以进行验证? 

  13. 假设你以普通用户身份访问系统,显示文件系统中所有文件名为core的文件清单。 

  14. TurboLiunx系统提供了哪些有关文件显示的命令,它们从功能上来说有何区别? 

  15. 如何将目录/home/xxq下的文件text复制到目录/home/wang下,并将文件名重新命名为example,最后将目录/home/xxq下的文件text删除。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值