全部博文(26)
分类: 系统运维
2012-08-24 10:24:35
摘自:[美]Harley Hahn:Unix & Linux大学教程
(1)标准输入、标准输出和标准错误
标准输入是读取数据的通用方法,标准输出用于正常输出,标准错误用于错误信息。
(2)重定向输出 >(大于号)
如果希望命令的输出写入到文件中,在命令的后面输入>(大于号)字符,后面接文件名称即可。当以这种方式将命令输出写入到文件中,文件如不存在将创建,存在则替换。
>>告诉shell将新数据追加到文件尾部
(3)防止文件被重定向替换或创建
设置noclobber功能
Bourne shell: set -o noclobber 复位:set +o noclobber
C-shell: set noclobber 复位:unset noclobber
临时忽略noclobber,Bourne shell用>|来取代>,C-shell用>!
(4)重写向标准输入<
例 sort < names
标准输入和标准输出重定向可同时指定,如
sort < rawdata > report
这个命令从rawdata中读取数据,排序之后输出到report中。
(5)文件描述符、标准错误转出重定向
在Unix进程中,每个输入源和输出目标都有一个唯一的数字标识,这个数字称为文件描述符( file descriptor )
默认情况下,Unix为每个进程提供3个预定义的文件描述符,0代表标准输入,1代表标准输出,2代表标准错误。
用法:command 0< inputfile
command 1> outfile
command 2> errorfile
其中command是命令,inputfile, outputfile, errorfile是文件名称,0和1可省略。
可以在同一条命令中使用多个重定向,如:
sort 0< rawdata 1>results 2>errors
sort < rawdata >results 2>errors
有时候,可能希望在子shell中运行一小组命令或者一条命令,但又不希望启动一个全新的shell,可以将命令括在圆括号中。如:
(date)
位于圆括号中的这些命令被称为一个编组。使用编组和子shell最常见的原因是防止cd命令影响当前的shell,其通用格式为:
(cd directory; command)
对于C-shell家族,重定向标准错误的语法为
command >& outputfile
当使用>&时,shell将同时重定向标准输出和标准错误,所以使用
(command > outputfile) >& errorfile 重定向标准错误。
(6)组合标准输出和标准错误
C-shell: >&和>>&
Bourne shell: command x>outputfile y>&x
对于Bash,可用&>或者>&同时定向标准输出和标准错误,但如果希望使用追加功能,则必须使用Bourne shell通用模式,如:
sort >> output 2>&1
(7)抛弃输出
将数据输出到 /dev/null,例
update > /dev/null
Bourne shell抛弃所有输出,如: update > /dev/null 2>&1
C-shell抛弃标准错误 (update > /dev/tty) >& /dev/null
特殊文件/dev/tty表示终端
(8)管道线
shell允许创建一序列命令,在这一序列命令中,一个程序的标准输出可以自动地发送给下一个程序的标准输入。当这样做时,两个程序之间的连接就是管道,而命令序列本身被称为管道线。
将标准输出和标准错误组合在一起,然后发送给下一个程序
Bourne shell: command1 2>&1 | command2
C-shell: command1 |& command2
(9)管道线分流:tee
有时候,可能希望将程序的输出同时发送到两个地方,可使用tee命令。tee命令的作用是从标准输入读取数据,并向标准输出和一个文件各发送一条数据。tee命令的语法为
tee [-a] file…
-a ( append, 追加)可以在文件末尾添加数据,而不是替换文件。
(10)条件执行
有时候,希望在前一条命令成功执行的条件下执行另一个命令,语法为 command1 && command2
有时候,希望在前一条命令没有成功执行时执行另一条命令,语法为 command1 || command2