管道及重定向
1、重定向
在Linux中有時我們在命令的執行過程中,不想將執行結果顯示到屏幕上,或者將其結果輸出到其他位置 這時就需要重定向來解決這個問題了 首先了解一下Linux中的3種I/O設備: 0:標準輸入 1:標準輸出 2:標準錯誤輸出 輸出重定向:> >> 輸入重定向: < << >:將標準輸出重定向到文件 echo "Hello" > /app/test.tab 2>:將標準錯誤輸出重定向到文件 ls /etc /error > /app/test.tab 2> /app/error.tab &>:將所有輸出重定向到文件 ls /etc /error &> /app/test.tab >>:將標準輸出追加重定向到文件 2>>:將標準錯誤輸出追加到文件 &>>:將所有標準輸出追加到文件 <:標準輸入重定向(單行重定向) <<:(多行重定向)
eg:有些命令能夠通過輸入重定向接受來自文件的輸入 wc -l < /etc/motd 統計motd文件的行數 mail -s "help" root << eof 此命令是給root用戶發送一個郵件,其中指定多行重定向的終止符eof(也可是其它)來 指定退出時的終止符 >please help me >thanks >eof
2、管道
符號 "|" ,用來連接命令 CMD1 | CMD2 | CMD3 | … (1)將CMD1的標準輸出傳給CMD2,CMD2的標準輸出輸出再發給CMD3 (2)默認情況下標準錯誤輸出不能通過管道轉發,通過2>&1或|&來實現
eg: [root@Centos6 ~]#cat /etc/issue /error 2>&1 | sort cat: /error: No such file or directory CentOS release 6.9 (Final) Kernel \r on an \m
(3)最后一個命令會在當前shell進程的子shell進程中執行
3、”-“符號
在管道中"-"可以用來代替之前命令標準輸出
eg: tar -cvf - /app | tar -xvf - 將/app下的文件打包,打包后不記錄到文件里,而是傳到標準輸出在經管道傳給后面的 解包命令
4、tee 命令 重定向到多個目標
有時我們在使用管道時需要將不同階段的數據輸出到屏幕上,而還要將數據向下傳遞,我們就需要用到tee命令
eg: [root@Centos6 ~]#ls | tee | tr "a-z" "A-Z"
原創文章,作者:M25_ymd,如若轉載,請注明出處:http://www.www58058.com/82651