你背单词时
阿拉斯加的鳕鱼正跃出水面
你算数学时
太平洋彼岸的海鸥振翅掠过城市上空
你晚自习时
极图中的夜空散漫了五彩斑斓
但是少年你别着急
在你为自己未来踏踏实实地努力时
那些你感觉从来不会看到的景色
那些你觉得终身不会遇到的人
正一步步向你走来。
——网易云热评《Something Just Like This》
还未深刻地了解Linux。知道的不多,那这次我们浅谈一下Linux中的I/O重定向和管道问题(让我不禁想到了马里奥),运行环境还如上次博客:CentOS6和CentOS7,工具为SecureCRT
SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单的说是Windows下登录UNIX或Linux服务器主机的软件。SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。百科得到的,总之SecureCRT是一个伪终端,我们在这上面解决问题。
一、I/O重定向(输入输出重定向),首先我们了解一下Linux终端里面的输入和输出,输入输出来自/dev/fd (fd是一个符号文件/软链接文件,不是固定存储在硬盘当中,而是随着终端的创建产生的临时目录。产生对应链接。)
Linux给程序提供三种I/O设备,分别为:
标准输入:Standard input (STDIN)
标准正确输出:Standard output (STDOUT)
标准错误输出:Standard error (STDERR)
Linux命令执行过程:
(1)我们可以把标准输出重新定向到文件
格式:Command >/>> filename
使用 > 命令
>把STDOUT重定向到文件 (默认)
2>把STDERR重定向到文件
&>把所有输出重定向到文件 (新式方法CentOS6以后)
2>&1把所有输出重定向到文件 (老式方法CentOS6之前)
举个栗子
众所周知,存在/etc/app,不存在/dev/app,则:
此外使用 > 文件内容会被覆盖,为了防止误操作可以使用命令set -C:禁止将内容覆盖已有文件,但可以追加,使用后想要偶尔覆盖文件,可以使用 >|file 来强制覆盖。相反set+C可以允许覆盖
(2)使用 >> 命令重定向
一言不合就上图
标准正确输出和错误输出还可以各自定向至不同位置,方便信息的查看。
Command > /path/to/file.out 2> /path/to/error.out
():合并多个输出到目的文件
二、 使用 < 来重定向标准输入
格式:Command < filename
某些命令能够接受从文件中导入的STDIN
tr ‘a-z’ ‘A-Z’ < filename
该命令会把输入文件中的小写字符都转换成大写字符
tr -d abc < filename
该命令会删除输入文件中的所有abc中任意字符
当然,还可以使用文件来代替键盘的输入
cat > filea < fileb
除了文本文件,其余也可以比如执行文件
把多行发送给STDIN
使用“<<终止词”命令从键盘把多行重导向给STDIN,多数使用EOF或END
输入时直到 终止词 位置的所有文本都发送给STDIN,文本有时被称 为就地文本(heretext)。
接下来重点来了,在实际工作中我们常用管道来转发各种标准输出
管道(Pipe)
管道(使用符号“| ”表示)用来连接命令
Command1 | Command2 | Command3 | …
将Command1 的STDOUT 发送给Command2 的STDIN ,Command2的STDOUT 发送Command3 的STDIN
STDERR 默认是不能通过管道转发,可利用2>&1 或 |& 实现
管道可以无限接续下去直到把文件处理满意
示例:获取root目录所在分区的可用空间(百分比)
获取本机的IP地址
重定向到多个目标(tee)
Command1 | tee [-a] filename | Command2
可以把Command1的STDOUT保存在文件中,此外做为Command2的输入
-a 可以追加内容
原创文章,作者:Mozart,如若转载,请注明出处:http://www.178linux.com/81952