I/O重定向
????每個進程都至少有3個信息:“標(biāo)準(zhǔn)輸入”stdin、“標(biāo)準(zhǔn)輸出”stdout、和“標(biāo)準(zhǔn)出錯”stderr。標(biāo)準(zhǔn)輸入通常來自鍵盤,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出通常被發(fā)往屏幕(并不會保存在磁盤文件中)。有些時候,需要從文件讀取輸入,或者將輸出結(jié)果和報錯信息寫入文件(寫入文件后不會在屏幕顯示)。這些都可以通過I/O重定向來實現(xiàn)。
重定向操作符
| 重定向操作符 | 功能 |
| < | 重定向輸入 |
| > | 重定向輸出 |
| >> | 追加輸出 |
| 2> | 重定向標(biāo)準(zhǔn)錯誤輸出 |
| 1>&2 | 將輸出重定向到標(biāo)準(zhǔn)錯誤輸出的去處 |
| 2>&1 | 將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤重定向到同一個文件 |
程序:指令+數(shù)據(jù) 讀入數(shù)據(jù):Input 輸出數(shù)據(jù):Output 打開的文件都有一個fd:file descriptor(文件描述符) 標(biāo)準(zhǔn)輸入:keyborad,0 標(biāo)準(zhǔn)輸出:monitor,1 標(biāo)準(zhǔn)錯誤輸出:mointor,2 IO重定向:改變標(biāo)準(zhǔn)位置 輸出重定向:COMMAND > NEW_POS,COMMAND >> NEW_POS >:覆蓋重定向,目標(biāo)文件中的原有內(nèi)容會被清除; >>:添加重定向,新內(nèi)容會追加至目標(biāo)文件尾部; #set -C:禁止覆蓋輸出重定向至已存在的文件,可以追加>>, 強制覆蓋:> | 注:加入管道符,強制覆蓋 #set +C:關(guān)閉上述特性 2>:覆蓋重定向錯誤輸出數(shù)據(jù)流; 2>>:追加重定向錯誤輸出數(shù)據(jù)流; 標(biāo)準(zhǔn)輸出和錯誤輸出各自定向至不同位置: COMMAND > /path/to/file.out 2> /path/to/error.out [root@node1 ~]# tail -5 /etc/rc.d/rc.local >/tmp/sys.out 2>/tmp/sys.err 注:命令執(zhí)行后sys.out和sys.err文件都會產(chǎn)生,有一個為空。 合并標(biāo)準(zhǔn)輸出和錯誤輸出為同一個數(shù)據(jù)流進行重定向: &>:覆蓋重定向 ? ? ? ? ?echo "$PATH" &> /tmp/path.out &>>:追加重定向 ? ? ? ? echo "$PATH" &>> /tmp/path.out COMMAND > /path/to/file.out 2> &1 這種方法也可以實現(xiàn)正確和錯誤都定向到同一文件,2> &1 :2表示錯誤,&1表示/path/to/file.out。這種方式更為靈活 上面內(nèi)容源自馬哥運維學(xué)習(xí)的筆記 |
示例
? ? 輸入重定向?<?使用tr命令,把/etc/issue中的內(nèi)容,把所有換成大寫
[root@c6 ~]# cat /etc/issue CentOS release 6.5 (Final) Kernel \r on an \m [root@c6 ~]# tr 'a-z' 'A-Z' < /etc/issue CENTOS RELEASE 6.5 (FINAL) KERNEL \R ON AN \M |
? ? ls命令將它的輸出重定向到文件lsfile,不把輸出結(jié)果發(fā)往屏幕
[root@c6 ~]# ls > lsfile [root@c6 ~]# cat lsfile? anaconda-ks.cfg install.log install.log.syslog lsfile shell.sh shell.txt zbox |
? ? date命令的輸出結(jié)果重定向追加到lsfile中
[root@c6 ~]# date >> lsfile [root@c6 ~]# cat lsfile? anaconda-ks.cfg install.log install.log.syslog lsfile shell.sh shell.txt zbox Thu Nov 24 11:42:55 CST 2016 |
????將錯誤輸出,重定向到errfile中
[root@c6 ~]# lq 2> errfile [root@c6 ~]# cat errfile? -bash: lq: command not found |
? ? 把標(biāo)準(zhǔn)輸出重定向到output.txt下。錯誤信息則被發(fā)往/dev/null,/dev/null相當(dāng)于黑洞,把任何東西放里面,都沒了
| [root@c7 app]# ld > output.txt 2> /dev/null |
? ? 如果我們希望把所有輸出的內(nèi)容都放在同一個獨立文件中,使用2>&1
[root@c7 app]# ls -l /bin/users > ls-output.txt 2>&1 |
?說明:使用這個方法,將執(zhí)行兩個重定向操作。首先重定向標(biāo)準(zhǔn)輸出到ls-output.txt文件中,然后使用標(biāo)記符2>&1的文件描述符2(標(biāo)準(zhǔn)錯誤)重定向到文件描述符1(標(biāo)識輸出)中。
???find命令查找echo命令將它的信息發(fā)往標(biāo)準(zhǔn)錯誤輸出。該命令的標(biāo)準(zhǔn)輸出也一同被發(fā)往標(biāo)準(zhǔn)錯誤輸出中
[root@c7 app]# echo "Hello world" 1>&2 Hello world |
學(xué)習(xí)自:
UNIX.shell范例精解(第4版)
馬哥Linux
轉(zhuǎn)載于:https://blog.51cto.com/zhaodongwei/1876095
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
- 上一篇: 微软老兵 Antoine LeBlond
- 下一篇: 函数的傅立叶展开掐死我吧_关于文章《傅里