标准输入和输出: 打开的文件都有一个fd:file description(文件描述符) 标准输入(0 STDIN)默认接受来自键盘的输入 标准输出(1 STDOUT)、标准错误(2 STDERR)的默认设备就是当前窗口 I/O重定向是改变默认位置
STDOUT和STDERR可以被重定向到文件:命令 操作符号 文件名
支持的操作符号包括: > 把STDOUT重定向到文件 2>把STDERR重定向到文件 &>把所有输出重定向到文件
>文件内容会被覆盖 :set -C禁止将内容覆盖已有文件,但可追加 强制覆盖:>| set +c允许覆盖
>>在原有内容上,追加内容
标准输出和错误输出各自定向至不同位置:COMMAND > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向: &>:覆盖重定向 COMMAND > /path/to/file.out 2> &1
&>>:追加重定向 COMMAND >> /path/to/file.out 2>> &1
():合并多个程序的STDOUT (cal 2007;cal 2008)> all.txt
标准输入的重定向: 例如要群发一封邮件 我们会到用命令:mail -s ____ 用户名
我们可以先用nano命令编辑好一封mail的txt文档 然后发邮件的时候 把编辑好的文档重定向给mail命令: mail -s hi guoquan <mail.txt另一位用户就会收到邮件
多行重定向:使用“<<终止词”命令从键盘把多行重导向给STDIN 直到“终止词”位置把文本发给STDIN
tr命令:translate 转换删除字符 tr[OPTION]... SET1 [SET2] 只做显示结果的转换
选项:-c取字符集的补集 -d删除所有属于第一字符集的字符
-s把重复的字符以单独一个字符表示 -t将第一个字符集对应字符转化成第二个字符集对应字符
例:把小写转换成大写 tr 'a-z' 'A-Z'
也可以利用重定向完成一些需求
小练习:
一个linux 用户给root 发邮件,要求邮件标题为”help” ,邮件正文如下:Hello, I am 用户名,the system version is here,please help me to check it ,thanks!
管道:用 | 表示,用来连接命令 命令1|命令2|命令3 只能处理正确结果
前面所说的发邮件的命令可以用管道来表示:cat mail.txt | mail -s hi guoquan 结果是一样的
管道处理完是不在屏幕上显示的 既想在屏幕显示 还要处理结果 |tee命令可以实现
练习: 将当前系统登录用户的信息转换为大写后保存至/tmp/who.out
将/root/ 下文件列表,显示成一行,并文件名之间用 空格 隔开