nginx linux centos 编程 Windows 开源 Ubuntu apache Python 微软 Android 云计算 shell 程序员 php java wordpress Firefox google mysql

管道符、重定向与环境变量

 既然我們已經在上一章學完了幾乎所有基礎且常用的Linux命令,那麽接下來的任務就是把多個Linux命令適當地組合到一起,使其協同工作,以便我們更加高效地處理數據。要做到這一點,就必須搞明白命令的輸入重定向和輸出重定向的原理。

 簡而言之,輸入重定向是指把文件導入到命令中,而輸出重定向則是指把原本要輸出到屏幕的數據信息寫入到指定文件中。在日常的學習和工作中,相較於輸入重定向,我們使用輸出重定向的頻率更高,所以又將輸出重定向分為了標準輸出重定向和錯誤輸出重定向兩種不同的技術,以及清空寫入與追加寫入兩種模式。聽起來就很玄妙?接下來將慢慢道來。標準輸入重定向(STDIN,文件描述符為0):默認從鍵盤輸入,也可從其他文件或命令中輸入。標準輸出重定向(STDOUT,文件描述符為1):默認輸出到屏幕。錯誤輸出重定向(STDERR,文件描述符為2):默認輸出到屏幕。

 比如我們分別查看兩個文件的屬性信息,其中第二個文件是不存在的,雖然針對這兩個文件的操作都分別會在屏幕上輸出一些數據信息,但這兩個操作的差異其實很大

  在上述命令中,名為linuxprobe的文件是存在的,輸出信息是該文件的一些相關權限、所有者、所屬組、文件大小及修改時間等信息,這也是該命令的標準輸出信息。而名為xxxxxx的第二個文件是不存在的,因此在執行完ls命令之後顯示的報錯提示信息也是該命令的錯誤輸出信息。那麽,要想把原本輸出到屏幕上的數據轉而寫入到文件當中,就要區別對待這兩種輸出信息。

  對於重定向中的標準輸出模式,可以省略文件描述符1不寫,而錯誤輸出模式的文件描述符2是必須要寫的。我們先來小試牛刀。通過標準輸出重定向將man bash命令原本要輸出到屏幕的信息寫入到文件readme.txt中,然後顯示readme.txt文件中的內容。

  命令時曾經見到過一個名為管道符的東西。同時按下鍵盤上的Shift+\鍵即可輸入管道符,其執行格式為“命令A | 命令B”。管道命令符的作用也可以用一句話來概括“把前一個命令原本要輸出到屏幕的標準正常數據當作是後一個命令的標準輸入”。在講解grep文本搜索命令時,我們通過匹配關鍵詞/sbin/nologin找出了所有被限制登錄系統的用戶。在學完本節內容後

 現在要做的就是把搜索命令的輸出值傳遞給統計命令,即把原本要輸出到屏幕的用戶信息列表再交給wc命令作進一步的加工,因此只需要把管道符放到兩條命令之間即可,具體如下。這簡直是太方便了!

 在修改用戶密碼時,通常都需要輸入兩次密碼以進行確認,這在編寫自動化腳本時將成為一個非常致命的缺陷。通過把管道符和passwd命令的--stdin參數相結合,我們可以用一條命令來完成密碼重置操作

延伸阅读

评论