首先是IO重定向
所谓IO,也就是所说的输入输出,常见的输入输出设备有键盘,显示器等,那重定向是什么呢,重新定位方向,如果我们执行一条
命令的时候,输出结果有正确有错误,·而我们所看到的这些结果是输出在了显示器上,但是如果我们想改变这个输出方向,把这个命令的输出结果不管是正确还是错误的都拿到另一个文件中,或者只要错误的,或者只要正确的,这时,重定向就派上了用场。
输出重定向
> :若文件不存在,则创建,若文件已存在,则覆盖
>>: 若文件不存在,则创建,若文件已存在,则追加
fd: fail descriptor,文件描述符
标准输入:0
标准输出:1
错误输出:2
错误输出流重定向:2>,2>>
(1)&>,&>>
(2)COMMAND > /PATH/to/somefile 2>&1
COMMAND >> /path/to/somefile 2>&1
输入重定向
输入重定向用<表示
再输入重定向中<< 可不是表示输入追加。在这里<<表示Here Document,也就是此处创建文档。
在我理解看来就是不管是输入重定向还是输出重定向都是把大于号或者小于号的口朝向的一边输出的东西拿到另一边,就仿佛漏斗一样。
在我们正常输入命令后,如果命令正确,执行后输出的结果就是正确的;但是如果我们输入错误命令,输出的结果就是错误输出,有时候我们要把错误输出放到一个文件中,正确输出放到另一个文件中,或者正确的和错误的放到一个文件中,再或者把正确的变成错误的放到一个文件中,这些都用到管道。
比如,我要把一个正确的输出和错误的输出全放到一个文件中,首先我要找一个输出正确和错误结果的命令
这两个命令一个是正确输出,一个是错误输出,现在把他们全拿到/app/err_r下,就有两种方法
当然,把正确的输出放到一个文件中,错误的输出放到另一个文件中也是可以的,主要就是一个是覆盖,一个是追加
管道
管道是什么呢
正常来说,我们在执行1命令之后的执行结果会放到一个地方,在那个圆中,而其他命令需要调用这个结果的时候再从这个圆中把结果取出来用,但是为什么要这么麻烦呢,我们直接让2命令调用1的执行结果不行吗,当然可以,在1和2之间建立一个管道就行了,这就是管道。
有些人会问,这不是跟输出重定向一样吗,都是把前面结果拿给后面,在这里我们要注意的是输出重定向只是把这个结果定向到一个文件或目录下面了,它并不能把这个结果定向给一条命令,所以管道。
在下面几道练习题及答案来参考
1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
cat /etc/issue | tr [:lower:] [:upper:] >> /tmp/issue.out
• 2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
who am i | tr [:lower:] [:upper:] > /tmp/who.out
• 3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
Hello, I am 用户名,The system version is here,please help me to check
it ,thanks!
操作系统版本信息
echo "Hello, I am $(whoami),The system version is here,please help me to check $(cat /etc/redhat-release)" | mail -s help root
• 4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开
ls -l /root/ | tr '\n' ' '
• 5、计算1+2+3+..+99+100的总和
echo {1..100} | tr ' ' '+' | bc