歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> RHEL7管道與重定向

RHEL7管道與重定向

日期:2017/2/28 13:49:35   编辑:Linux教程

文件描述符

可以理解為linux跟蹤打開文件,而分配的一個數字,這個數字有點類似c語言操作文件時候的句柄,通過句柄就可以實現文件的讀寫操作
用戶可以自定義文件描述符范圍是:3-num,這個最大數字,跟用戶的:ulimit –n 定義數字有關系,不能超過最大值

查看系統文件描述符最大值

[root@localhost ~]# ulimit -n
1024

linux系統默認文件描述符

文件描述符用途POSIX名稱stdio流說明 0 標准輸入 STDIN_FILENO stdin 默認的設備是鍵盤
命令將從標准輸入文件中讀取
在執行過程中的需要的輸入數據
數據來源於文件 1 標准輸出 STDOUT_FILENO stdout 默認的設備是顯示器
命令執行後的輸出結果發送到標准輸出文件
結果輸出到文件 2 標准錯誤 STDERR_FILENO stderr 默認的設備是顯示器
命令將執行期間的各種錯誤信息發送到標准錯誤文件
錯誤信息發送到文件

標准輸入,標准輸出和標准錯誤默認使用鍵盤和顯示器作為關聯設備與操作系統進行交互完成最基本的輸入,輸出操作

命令執行過程

重定向輸出

語法:命令 [文件描述符] >或>> 文件或文件操作符或設備
查看當前目錄下的文件

[[email protected] ~]# ls
test.txt

查看當前目錄下的test.txt文件和一個不存在的test1.txt文件

[[email protected] ~]# ls test.txt test1.txt
ls: cannot access test1.txt: No such file or directory
test.txt

將正確的輸出重定向到文件success.txt中

[[email protected] ~]# ls test.txt test1.txt 1>success.txt
ls: cannot access test1.txt: No such file or directory
[[email protected] ~]# cat success.txt
test.txt

將錯誤的輸出重定向到文件error.txt中

[[email protected] ~]# ls test.txt  test1.txt 2>error.txt
test.txt
[[email protected] ~]# cat error.txt
ls: cannot access test1.txt: No such file or directory

&1:代綁定到表標准輸出
&2:代表綁定到標准錯誤輸出
&-:代表關閉與他綁定的文件描述符
關閉標准錯誤輸出

[[email protected] ~]# ls test.txt  test1.txt >success.txt 2>&-
[[email protected] ~]# cat success.txt
test.txt

將標准錯誤輸出綁定到標准輸出

[[email protected] ~]# ls test.txt  test1.txt > all.txt 2>&1
[[email protected] ~]# cat all.txt
ls: cannot access test1.txt: No such file or directory
test.txt

將標准錯誤輸出重定向到黑洞設備

[[email protected] ~]# ls test.txt  test1.txt 2>/dev/null
test.txt

&>:混合輸出(不分對錯)

[[email protected] ~]# ls test.txt  test1.txt &> all.txt
[[email protected] ~]# cat all.txt
ls: cannot access test1.txt: No such file or directory
test.txt

注意事項:

  1. shell遇到”>”操作符,會判斷右邊文件是否存在,如果存在就先刪除,並且創建新文件。不存在直接創建。 無論左邊命令執行是否成功。右邊文件都會變為空
  2. “>>”操作符,判斷右邊文件,如果不存在,先創建
    以添加方式打開文件,會分配一個文件描述符[不特別指定,默認為1,2]然後,與左邊的標准輸出(1)或錯誤輸出(2) 綁定
  3. 當命令:執行完,綁定文件的描述符也自動失效。0,1,2又會空閒
  4. 一條命令啟動,命令的輸入,正確輸出,錯誤輸出,默認分別綁定0,1,2文件描述符
  5. 一條命令在執行前,先會檢查輸出是否正確,如果輸出設備錯誤,將不會進行命令執行

重定向輸入

將命令中接收輸入的途徑由默認的鍵盤改為其他文件而不是等待從鍵盤輸入
通過重定向輸入可以使一些交互式操作過程能夠通過讀取文件來完成

操作符: <
使用passwd設置密碼時,每次都根據提示輸入密碼比較煩瑣
改用重定向輸入將可以忽略交互式的過程而自動完成密碼設置
使用非交互式的去執行設置密碼

[[email protected] ~]# touch passwd.txt
[[email protected] ~]# echo 123456 > passwd.txt
[[email protected] ~]# passwd test --stdin < passwd.txt
Changing password for user test.
passwd: all authentication tokens updated successfully.

管道

管道命令操作符是:”|”,它僅��處理經由前面一個指令傳出的正確輸出信息
也就是 standard output 的信息,對於 stdandard error 信息沒有直接處理能力
然後,傳遞給下一個命令,作為標准的輸入 standard input


command1正確輸出,作為command2的輸入 然後comand2的輸出作為,comand3的輸入 ,comand3輸出就會直接顯示在屏幕上面了
通過管道之後:comand1,comand2的正確輸出不顯示在屏幕上面

  1. 管道命令只處理前一個命令正確輸出,不處理錯誤輸出
  2. 管道命令右邊命令,必須能夠接收標准輸入流命令才行
[[email protected] ~]# ls -f | grep all
all.txt

管道與重定向的區別

  • 左邊的命令應該有標准輸出 | 右邊的命令應該接受標准輸入
  • 左邊的命令應該有標准輸出 > 右邊只能是文件
  • 左邊的命令應該需要標准輸入 < 右邊只能是文件
  • 管道觸發兩個子進程執行"|"兩邊的程序,而重定向是在一個進程內執行
Copyright © Linux教程網 All Rights Reserved