程序的数据流又三种(默认):
输入的数据流:<标准输入(stdin),键盘
输出的数据流:>标准输出(stdout),显示器
输出的数据流:>错误输出(stderr),显示器
fs:file descriptor,文件描述符
标准输入:0
标准输出:1
错误标准输出:2
输出重定向:
覆盖输出重定向:> 命令的输出结果为其他的文件或设备,而不是默认的位置。
例子:
~]# cat /etc/issue > /tmp/issue.stdout
~]# cat /etc/issue > /dev/tty1
这就是输出重定向,但是这个命令非常危险,例如:~]# cat /etc/issue > /dev/sda
,这样会覆盖硬盘上的数据。
追加输出重定向:>>
~]#cat /etc/issue >> /tmp/issue.stdout
为了防止覆盖输出重定向,可以使用~]# set -C,避免误操作。如果要取消这功能使用set +C,set特性仅对当前shell进程有效。
在开启set -C的情况下,如果要强行覆盖目标文件,可以在>加多个竖线,>|
~]# cat /etc/issue >| /tmp/issue.stdout
错误输出重定向 : 2> 2>>
合并正常输出流和错误输出流:&> &>>
合并正常输出和错误输出的另外一种方法:
~]# cat /etc/issue >> /tmp/issue.stdout 2>&1 \\意思是如果有错误输出,也输出到标准输出。
特殊的输出 /dev/null
输入重定向
~]# cat /etc/issue
和 ~]# cat < /etc/issue
是一样的结果。
tr命令:
tr[OPTION]…SET1 [SET2]
把输入的数据当中的字符,凡是SET1定义范围内出现的,通通对位转换为SET2出现的字符。
例如:~]# tr [a-z] [A-Z] < /etc/issue
这样,可以将/etc/issue里的内容从小写转换为大写。
tr命令还用另外一种用法,例如~]# tr -d [abc] < /etc/issue
加上-d的参数后,会将/etc/issue中的abc字符删除掉。
<<并不是追加的意思,而是此处创建文档。
~]# cat > /tmp/cat.out <<END
>how are you ?
>what are you doing ?
>END
评论