Loading... <p><strong><span style="font-size: 24px">一、简介</span></strong></p> <p><span style="font-size: 14px"> bash的数据流重定向(redirect)是将程序的执结果重新定向到另一文件或者设备。或者把一文件重定向给一程序作为数据来源。默认情况下,命令的执行结果显示在屏幕上。文件系统中,分为:标准输入,标准输出,错误输出。</span></p> <p><strong><span style="font-size: 24px">二、用法</span></strong></p> <p><span style="font-size: 14px"> 通常输入一个命令,命令运行过程传输情况通常如下:</span></p> <p><span style="font-size: 14px"> <img src="//cto.wang/usr/uploads/2016/07/20160703160706-40.jpg" alt="1438930313497043.jpg" /></span></p> <p><span style="font-size: 14px"> 执行一个命令的时候,这个命令可以从文件中传入数据,经过处理之后,正确的数据输出到文件或者设备上,错误的数据也输出到文件或者设备,输出到这两个文件或者设备可以相同或者不同。</span></p> <p><strong><span style="font-size: 14px"> <span style="font-size: 18px"> 2.1、输入重定向</span></span></strong></p> <p><strong><span style="font-size: 14px"><span style="font-size: 18px"> </span></span></strong><span style="font-size: 14px"><span style="font-size: 14px">格式:command < position or command << position<br /></span></span></p> <pre class="brush:bash;toolbar:false"> [root@dns ~]# cat < /etc/issue #/etc/issue作为cat的标准输入来源 CentOS release 6.5 (Final) Kernel \r on an \m [root@dns ~]# cat <<EOF #从键盘键入数据作为cat的标准输入来源 > hello,i'm leon #从EOF之后键入数据 > write by leon > thanks > EOF #EOF此处结束输入,EOF中间的数据为输入来源 hello,i'm leon write by leon thanks [root@dns ~]#</pre> <p><strong><span style="font-size: 14px"><span style="font-size: 18px"> 2.2、输出重定向</span></span></strong></p> <p><strong><span style="font-size: 18px"> <span style="font-size: 14px"></span></span></strong><span style="font-size: 16px"><strong>2.2.1、</strong><strong>标准输出</strong></span></p> <p><span style="font-size: 16px"><strong> <span style="font-size: 16px"><span style="font-size: 14px">标准输出中,通常在‘>’或者‘>>’号前面加数字1(默认为1,可省略)</span></span></strong></span></p> <p><span style="font-size: 16px"><span style="font-size: 14px"> '>'为覆盖模式,'>>'为追加模式</span></span> </p> <pre class="brush:bash;toolbar:false"> [root@dns ~]# cat /etc/issue > /tmp/issue #重定向到/tmp/issue [root@dns ~]# echo $? #查看上条命令状态执行结果 0 [root@dns ~]# cat /tmp/issue CentOS release 6.5 (Final) Kernel \r on an \m [root@dns ~]# cat /etc/shadow >> /tmp/issue #/etc/shadow内容追加到/tmp/issue文件中 [root@dns ~]# echo $? #查看上条命令状态执行结果 0 [root@dns ~]# cat /tmp/issue CentOS release 6.5 (Final) Kernel \r on an \m root:$6$jMs2qfrQ.sqYe71o$hbnsy97.LY3G.kFQGKCGDDIg5XVbNroZiT/f/pzfEUsw.lDxyZuLwnNp32MreoQZZ7G0AErZerCp/9oxjJLSQ0:16620:0:99999:7::: bin:*:15980:0:99999:7::: daemon:*:15980:0:99999:7::: adm:*:15980:0:99999:7::: ...... named:!!:16620:::::: mysql:!!:16620::::::</pre> <p><span style="font-size: 18px"><span style="font-size: 16px"><strong> 2.2.2、错误输出</strong></span></span><strong><span style="font-size: 18px"> <br /></span></strong> <span style="font-size: 16px"><strong> <span style="font-size: 16px"><span style="font-size: 14px">错误输出中,通常在‘>’或者‘>>’号前面加数字2(不可省略)</span></span></strong></span></p> <p><span style="font-size: 16px"><span style="font-size: 14px"> '2>'为覆盖模式,'2>>'为追加模式</span></span></p> <pre class="brush:bash;toolbar:false"> [leon@dns ~]$ find / -name "passwd" 2> /tmp/error #错误输出重定向到/tmp/error /selinux/class/passwd /selinux/class/passwd/perms/passwd /usr/bin/passwd /etc/pam.d/passwd /etc/passwd /tmp/mytest2/pam.d/passwd /tmp/mytest1/pam.d/passwd /tmp/mytest1/passwd [leon@dns ~]$ cat /tmp/error find: `/proc/tty/driver': Permission denied find: `/proc/1/task/1/fd': Permission denied find: `/proc/1/task/1/fdinfo': Permission denied find: `/proc/1/task/1/ns': Permission denied find: `/proc/1/fd': Permission denied find: `/proc/1/fdinfo': Permission denied find: `/proc/1/ns': Permission denied ...... find: `/tmp/mytest1/pki/rsyslog': Permission denied find: `/tmp/mytest1/pki/CA/private': Permission denied find: `/lost+found': Permission denied [leon@dns ~]$ hehe / -name "passwd" 2>> /tmp/error [leon@dns ~]$ tail /tmp/error find: `/etc/named': Permission denied find: `/etc/dhcp': Permission denied find: `/etc/audisp': Permission denied find: `/etc/cups/ssl': Permission denied find: `/tmp/mytest2/sudoers.d': Permission denied find: `/tmp/mytest1/pki/rsyslog': Permission denied find: `/tmp/mytest1/pki/CA/private': Permission denied find: `/lost+found': Permission denied -bash: hehe: command not found -bash: hehe: command not found [leon@dns ~]$</pre> <p><span style="font-size: 16px"><span style="font-size: 14px"></span></span></p> <p> <span style="font-size: 14px"><strong><span style="font-size: 18px">2.2.3、合并重定向</span></strong></span></p> <p><span style="font-size: 14px"><strong><span style="font-size: 18px"> </span></strong><span style="font-size: 18px"> command <span style="font-size: 14px">&> position or command &>> position or command >position 2>&1 or command >position 1>&2 </span></span></span> </p> <pre class="brush:bash;toolbar:false"> [leon@dns ~]$ find / -name "passwd" &> /tmp/errorAndright #错误和正确输出都重定向到/tmp/errorAndright [leon@dns ~]$ cat /tmp/errorAndright find: `/proc/tty/driver': Permission denied #错误输出 find: `/proc/1/task/1/fd': Permission denied find: `/proc/1/task/1/fdinfo': Permission denied find: `/proc/1/task/1/ns': Permission denied find: `/proc/1/fd': Permission denied find: `/proc/1/fdinfo': Permission denied find: `/proc/1/ns': Permission denied ...... find: `/proc/3570/task/3570/ns': Permission denied find: `/proc/3570/fd': Permission denied find: `/proc/3570/fdinfo': Permission denied find: `/proc/3570/ns': Permission denied find: `/boot/lost+found': Permission denied /selinux/class/passwd #标准输出 /selinux/class/passwd/perms/passwd find: `/root': Permission denied find: `/usr/lib64/audit': Permission denied [leon@dns ~]$ wc -l /tmp/errorAndright #查看原文件有多少行 746 /tmp/errorAndright [leon@dns ~]$ find / -name "passwd" &>> /tmp/errorAndright #以追加模式合并到errorAndright [leon@dns ~]$ wc -l /tmp/errorAndright #查看追加后文件有多少行 1492 /tmp/errorAndright [leon@dns ~]$</pre> <p><span style="font-size: 14px"><strong><span style="font-size: 18px"> 2.2.4、分别重定向</span></strong></span></p> <p><span style="font-size: 14px"> command > position1 2> position2 在指定了正确输出的时候再在后面指定错误输出或者前面错误输出后面正确输出 <strong> </strong></span> </p> <pre class="brush:bash;toolbar:false"> [leon@dns ~]$ find / -name "passwd" > /tmp/error 2>&1 find: `/proc/1731/fd': Permission denied find: `/proc/1731/fdinfo': Permission denied find: `/proc/1731/ns': Permission denied find: `/proc/1735/task/1735/fd': Permission denied find: `/proc/1735/task/1735/fdinfo': Permission denied find: `/proc/1735/task/1735/ns': Permission denied ...... /tmp/mytest1/pam.d/passwd /tmp/mytest1/passwd find: `/lost+found': Permission denied</pre> <p> <span style="font-size: 24px"><strong> 三、总结</strong></span></p> <p> 输入输出重定向分 标准输出,标准输入,错误输出,无论标准输出或者错误输出都可以以追加或者覆盖模式。</p> <p> <br /><span style="font-size: 14px"></span><span style="font-size: 14px"><strong><span style="font-size: 18px"></span></strong></span></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信