一、簡介
bash的數據流重定向(redirect)是將程序的執結果重新定向到另一文件或者設備?;蛘甙岩晃募囟ㄏ蚪o一程序作為數據來源。默認情況下,命令的執行結果顯示在屏幕上。文件系統中,分為:標準輸入,標準輸出,錯誤輸出。
二、用法
通常輸入一個命令,命令運行過程傳輸情況通常如下:
執行一個命令的時候,這個命令可以從文件中傳入數據,經過處理之后,正確的數據輸出到文件或者設備上,錯誤的數據也輸出到文件或者設備,輸出到這兩個文件或者設備可以相同或者不同。
2.1、輸入重定向
格式:command < position or command << position
[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 ~]#
2.2、輸出重定向
2.2.1、標準輸出
標準輸出中,通常在‘>’或者‘>>’號前面加數字1(默認為1,可省略)
'>'為覆蓋模式,'>>'為追加模式
[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::::::
2.2.2、錯誤輸出
錯誤輸出中,通常在‘>’或者‘>>’號前面加數字2(不可省略)
'2>'為覆蓋模式,'2>>'為追加模式
[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 ~]$
2.2.3、合并重定向
command &> position or command &>> position or command >position 2>&1 or command >position 1>&2
[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 ~]$
2.2.4、分別重定向
command > position1 2> position2 在指定了正確輸出的時候再在后面指定錯誤輸出或者前面錯誤輸出后面正確輸出
[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
三、總結
輸入輸出重定向分 標準輸出,標準輸入,錯誤輸出,無論標準輸出或者錯誤輸出都可以以追加或者覆蓋模式。
原創文章,作者:成吉思汗,如若轉載,請注明出處:http://www.www58058.com/6882