标签: ShellScript

1 文件

1.1 列出文件

ls [option]... [file]...   #参考Shell手册

1.2 文件类型(ALL is file ——UNIX)

1.普通文件。在ls -l命令中,普通文件的第一列的第一个字符是连字符- 2.目录。  目录的作用是组织和访问其它文件。 3.伪文件。 如键盘,鼠标等。。。

1.3 文件的权限

2 查找文件

2.1 find命令及其语法

find path test action

其中,path表示要搜索的路径,test表示测试条件,用户可以同时指定多个路径和多个测试条件,路径和测试条件之间用空格隔开。 action表示对于搜索结果要执行的操作。

find命令的工作流程如下: (1)搜索所有指定的路径,包括所有的子目录。

(2)对于遇到的每个文件,检查是否符合用户指定的条件。在该步骤中,所有符合条件的文件形成一个列表。

(3)对于结果列表中的每个文件,执行用户指定的操作。

2.2 find命令:路径,测试

1.通常情况下,路径都是一个目录名,可以用相对路径,绝对路径,以及简写形式来指定路径 2.一些简单的测试条件(详细的参考Shell手册)

  • -name pattern 表示包含指定匹配模式的文件名
  • -iname pattern 表示包含指定匹配模式的文件名,此条件不区分大小写
  • -type 指定文件类型,可以取f和d这两个值,分别表示普通文件和目录
  • -perm mode 匹配其权限被设置为指定mode的文件
  • user userid 匹配其所有者为指定用户ID的文件

… 参数太多,感觉find好强大啊。。。

2.3 find命令: 使用!运算符对测试求反

!两边必须留空格,且用单引号或者用反斜线引用。

2.4 find命令:action

  • -print 默认动作,将搜索结果写入到标准输出
  • -fprint file 与-print相同,但是将搜索结果写入到文件file
  • -ls 以详细格式(长格式)显示搜索结果
  • -fls file 同-ls,但是将搜索结果写入到文件file
  • -delete 将搜索到的文件删除
  • -exec command{}\; 查找并执行命令,{}表示搜索到的文件名
  • -ok command{}\; 查找并执行命令,但是要用户确认
'command' {} \;
command表示Shell命令,大括号{}表示搜索结果中的文件名,最后的分号(需要转义,与大括号有个空格)表示命令的结束。

3 比较文件

3.1 使用comm比较文件

comm命令的作用是逐行比较两个有序的文件,其语法如下:

comm [option]... file file2

其中,option表示comm命令的有关选项。常用的选项有:

  • -1 不显示第一个文件中独有的文本行
  • -2 不显示第二个文件中独有的文本行
  • -3 不显示两个文件中共同的文本行
  • –check-order 检查参与比较的两个文件是否已经排序
  • –nocheck-order 不检查参与比较的两个文件是否已经排序

默认情况下,comm命令会输出3列,分别为第一个文件独有的文本行,第二个文件独有的文本行,以及两个文件公共的文本行。

3.2 使用diff比较文件

diff命令功能也是逐行比较多个文件的内容。与comm不同的是,diff命令并不要求参与比较的文件都是有序的。另外, diff不仅可以比较普通文件,而且还可以比较多个目录的内容的差异。基本语法如下:

diff [option]... files

其中,option表示命令选项。diff命令的选项主要是用来控制输出的格式,常用的选项如下:

  • -c 输出包含上下文环境的格式。
  • -u 以统一格式显示文件的不同。
  • -y 以并列的方式显示文件的异同之处。

4 比较描述符

1.什么是文件描述符

从形式上讲,文件描述符是一个非整数。实际上,它是一个索引值,指向内核为每个进程所维护的该进程打开文件的记录表。当程序打开 一个现有的现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。

 文件描述符从0开始,其最大值与当前系统中可以打开的最大文件数有关。文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的 文件。

2.标准输入、标准输出和标准错误

 标准输入的文件描述符为0,表示默认的输入文件,即Shell需要执行命令的来源。

 标准输出的文件描述符为1,表示默认的输出文件,即显示Shell命令的执行结果的地方。

 标准错误的文件描述符为2,标准Shell命令的错误消息输出的地方。

5 重定向

5.1 输出重定向(覆盖)

输出重定向是指将原本输出到标准输出的数据输出到其它文件或者设备中。输出重定向的操作符为大于号>,基本语法如下:

cmd > file

上面的语法中,cmd表示Shell命令,大于号>为从定向操作符,file表示重定向的目标文件。

5.2 输出重定向(追加)

cmd [n]>> file  #n为文件描述符

5.3 输入重定向

从文件中获取输入,这种输入的机制为输入重定向。

cmd < file

5.4 当前文档

输入重定向另外一个用途就是生成当前文档(here documents)。当前文档主要用在命令行中需要多行输入的情况。语法如下:

cmd << delimiter
document
delimiter     #自定义的分隔符,不能含有空格或者制表符

5.5 重定向两个文件描述符

n>&m

n和m都是文件描述符。当n=1,且m=2时,文件描述符1成为文件描述符2的副本,所有的标准输出都被重定向到标准错误; 当n=2,m=1时,文件描述符2成为描述符1的副本,所以所有的标准错误都被重定向到标准输出。当n=1时,可以省略。

5.6 使用exec命令分配文件描述符