Linux小白最佳實踐:《超容易的Linux系統管理入門書》(連載五)Linux系統的對話方式

本篇是Linux小白最佳實踐第5篇,目的就是讓白菜們瞭解Linux進程之間是如何對話的。以前連載的幾篇,在微信上引發了不少的反響,有人也反映圖多文字少,感受沒有乾貨.本篇選了大部分是實戰講解的"管道與重定向"進行連載,但願讓讀者能真正學到東西.segmentfault

8.3管道與重定向微信

管道與重定向是Linux系統進程間的一種通信方式,在系統管理中有着舉足輕重的做用。絕大部分Linux進程運行時須要使用3個文件描述符:標準輸入、標準輸出和標準錯誤輸出,對應的序號是0、1和2。通常來講,這3個描述符與該進程啓動的終端相關聯,其中輸入通常爲鍵盤。重定向和管道的目的是重定向這些描述符。管道通常爲輸入和輸出重定向的結合,一個進程向管道的一端發送數據,而另外一個進程從該管道的另外一端讀取數據。管道符是「|」。spa

8.3.1標準輸入與輸出操作系統

執行一個Shell命令行時一般會自動打開3個標準文件,如圖8.3所示。
請輸入圖片描述
圖 8.3 Shell執行時對應的3個標準文件命令行

標準輸入文件stdin,一般對應終端的鍵盤,標準輸出文件stdout和標準錯誤輸出文件stderr,這兩個文件都對應終端的屏幕。進程將從標準輸入文件中獲得輸入數據,將正常輸出數據輸出到標準輸出文件,而錯誤信息將打印到標準錯誤文件。進程

現以cat 命令爲例來介紹標準輸入與輸出。cat命令的功能是從命令行給出的文件中讀取數據,並將這些數據直接送到標準輸出文件,通常對應終端屏幕,如示例8-7所示。圖片

【示例8-7】ip

[root@CentOS ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:7F:08:9D
TYPE=Ethernet
UUID=3268d86a-3245-4afa-94e0-f100a8efae44
ONBOOT=yes
BOOTPROTO=static
BROADCAST=192.168.3.255
IPADDR=192.168.3.100
NETMASK=255.255.255.0
該命令會把文件ifcfg-eth0的內容顯示到標準輸出即屏幕上。若是cat命令行中沒有參數,會從標準輸入文件中通常對應鍵盤讀取數據,並將其送到標準輸出文件中,如示例8-8所示。文檔

【示例8-8】字符串

cat不帶任何參數時會從標準輸入中讀取數據並顯示到標準輸出文件中

[root@CentOS ~]# cat
mycontent
mycontent
hello
hello
用戶輸入的每一行信息都會馬上被cat命令輸出到屏幕上。用戶對輸入的數據沒法作進一步地處理。爲解決這個問題,Linux操做系統爲輸入、輸出的傳送引入了另外兩種機制:輸入/輸出重定向和管道。

8.3.2輸入重定向

輸入重定向是指把命令或可執行程序的標準輸入重定向到指定的文件中。也就是輸入能夠不來自鍵盤,而來自一個指定的文件。輸入重定向主要用於改變一個命令的輸入源。

例如上個示例中的cat命令,當鍵入該命令後並無任何反應,從鍵盤輸入的全部文本都出如今屏幕上,直至按下Ctrl+d組合鍵,命令纔會終止,可採用兩種方法:一種是爲該命令給出一個文件名,另一種方法是使用輸入重定向。

輸入重定向的通常形式爲:命令<文件名,輸入重定向符號爲「<」。示例8-9演示了此種狀況,此示例中的文件已不是參數,而是標準輸入。

【示例8-9】

[root@CentOS ~]# cat< /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:7F:08:9D
TYPE=Ethernet
UUID=3268d86a-3245-4afa-94e0-f100a8efae44
ONBOOT=yes
BOOTPROTO=static
BROADCAST=192.168.3.255
IPADDR=192.168.3.100
NETMASK=255.255.255.0
[root@CentOS ~]# wc </etc/sysconfig/network-scripts/ifcfg-eth0
99 188
還有一種輸入重定向,如示例8-10所示。

【示例8-10】

[root@CentOS ~]# cat <<EEE

line1
line2
line3
EEE
line1
line2
line3
標識符「EEE」表示輸入開始和結束的分隔符,此名稱不是固定的,可使用其餘字符串,主要是一個分隔的做用。文檔的重定向操做符爲「<<」。將一對分隔符之間的正文重定向輸入命令。例如上述示例中將「EEE」之間的內容做爲正文,而後做爲輸入傳給cat命令。因爲大多數命令都以參數的形式在命令行中指定輸入文件的文件名,因此輸入重定向並不常常使用。使用某些不能利用文件名做爲輸入參數的命令,須要的輸入內容又存在一個文件裏時,能夠用輸入重定向來解決問題。

請輸入圖片描述

相關文章
相關標籤/搜索