ll /proc/$$/fd 查看当前进程所打开的文件描述符,如下图所示,0,1,2输入输出都默认在/dev/pts/4 这个终端上
- 0:输入信息
- 1:输出信息
- 2:错误信息
像如下图所示,xxx即为错误的输出
如下图所示,rm 文件名出现的提示也归纳为错误
我们新开一个终端
然后在另外一个终端可以看到,注意这里是默认为/dev/pts/5中
重定向redirect
标准输出
在/dev/pts/4上做重定向输出到/dev/pts/5(等同于ls 1>/dev/pts/5)
注意看这里有新信息
去/dev/pts/5看下,输出了/dev/pts/4的内容
hostname 把输出重定向到文件data.log,如果没有会创建data.log文件,cat一下可以看到文件的内容,同样的方法使用uname -r 重定向,会发现原来的东西会被覆盖掉,此时就需要用到>>(追加)
我们用rm 删除文件重定向,发现删除文件的提示信息也算错误被输出到data.log
我们想把标准输出的信息放在一个文件里面。错误的输出信息放到另外一个文件里面去,如下图所示即可实现
如果把对的错的都放一个文件里使用 &>即可实现
还有一种写法达到和&>一样的效果,2>&1的意思是把错误的往1里面放,1的输出到/data/all.log所以错误的输出也是往/data/all.log
如果把写法反过来放,就是不对的,因为执行次序是从左往右执行,执行2>&1的时候还没明确标准输出1>往哪里放,所以还是默认在屏幕打印。后面就是把标准输出打印到/data/all.log上,产生下面的结果
同理,下图也是正确的
标准输入
把data.txt的文件作为输入的内容传给bc,从而计算出结果
把seq -s +10命令输入到文件作为bc的输入项,可以计算出结果
输出错误格式给bc,然后把错误重定向到erro.log文件
管道符 CMD1 | CMD2 (左边是标准输出,右边是标准输入)
使用管道符进行运算,不用创建临时文件。
把错误执行结果传给bc。等价于 1+2 2>&1 | bc
tr命令
tr和管道灵活用法(替换、删除、去重)
去重后再添加+号
单使用cat命令,输入line1输出line1,cat>a.txt输入line1,重定向到a.txt
多行重定向,将输入以!结束的时候才会重定向到a.txt,不像上面的输入一行重定向一行
把2+4作为标准输入给bc
下图,会生成一个临时文件,执行完后就没了
tee命令
把标准输出的内容同步生成到文件中
输出的结果同步输出到test.log
这个命令的文件会覆盖,如果不想覆盖需要加-a 参数
cat 命令发送邮件,第一种方法是以EOF结尾输入,第二种是定义文件内容的方式输入给mail