Linux I/O 介紹

Linux I/O 介紹

Linux內(nèi)置的重定向功能提供了一組強(qiáng)大的工具,便于各種I/O任務(wù)。無(wú)論是通過(guò)命令行執(zhí)行文件管理操作還是通過(guò)軟件來(lái)操作文件,都需要了解各種Linux系統(tǒng)內(nèi)置的I/O流。

Linux系統(tǒng)的輸入和輸出分布在三個(gè)stream中:

  • standard input (stdin)
  • standard output (stdout)
  • standard error (stderr)

三種標(biāo)準(zhǔn)流對(duì)應(yīng)的數(shù)字是:

  • stdin(0)
  • stdout(1)
  • stderr(2)

用戶通過(guò)終端與Linux系統(tǒng)交互期間,標(biāo)準(zhǔn)輸入流包括鼠標(biāo)鍵盤(pán)等傳輸;標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤會(huì)議文件形式顯示在終端上,均是標(biāo)準(zhǔn)流。

輸入

標(biāo)準(zhǔn)輸入通常將數(shù)據(jù)從用戶設(shè)備傳輸?shù)较到y(tǒng)程序。而期望標(biāo)準(zhǔn)輸入的程序會(huì)從鍵盤(pán)等設(shè)備接收輸入,通過(guò)特殊標(biāo)識(shí)(EOF)來(lái)終止標(biāo)準(zhǔn)輸入流。EOF表示沒(méi)有更多可讀取的輸入流。

cat程序可以查看標(biāo)準(zhǔn)輸入,cat可以鏈接或者組合輸入,將兩個(gè)文件內(nèi)容進(jìn)行組合。cat單獨(dú)運(yùn)行時(shí)將打開(kāi)循環(huán)提示,啟動(dòng)cat然后通過(guò)鍵盤(pán)輸入一系列字符。

cat

鍵入一系列字符。

lance
linux
tutorials

當(dāng)輸入Enter建時(shí),標(biāo)準(zhǔn)輸入將會(huì)被發(fā)送到cat程序,反過(guò)來(lái)cat程序又會(huì)將輸入作為標(biāo)準(zhǔn)輸出發(fā)送回終端顯示屏。

可以通過(guò)crtl+d輸入EOF標(biāo)識(shí)符來(lái)終止輸入。

輸出

標(biāo)準(zhǔn)輸出是由程序生成的數(shù)據(jù),當(dāng)標(biāo)準(zhǔn)輸出流未重定向時(shí),將會(huì)輸出文本到終端顯示屏。

echo send an tutorials data to server

當(dāng)不帶任何其他選項(xiàng)時(shí),echo命令將在命令行終端顯示傳遞的所有參數(shù),即wcho程序接收到的所有信息。

echo

由于沒(méi)有參數(shù)輸入,將返回一個(gè)空行。

錯(cuò)誤

標(biāo)準(zhǔn)錯(cuò)誤將寫(xiě)入在執(zhí)行某個(gè)失敗的程序所生成的錯(cuò)誤。與標(biāo)準(zhǔn)輸出一樣,默認(rèn)輸出目標(biāo)是終端。

當(dāng)程序標(biāo)準(zhǔn)錯(cuò)誤通過(guò)管道輸出到第二應(yīng)用程序時(shí),管道傳輸?shù)臄?shù)據(jù),即有標(biāo)準(zhǔn)錯(cuò)誤組成的數(shù)據(jù),也會(huì)同時(shí)發(fā)送到終端。

通過(guò)ls命令輸出一個(gè)不存在的目錄內(nèi)容。

ls Empty

由于當(dāng)前目錄下不存在Empty子目錄,所以會(huì)產(chǎn)出標(biāo)準(zhǔn)錯(cuò)誤:

ls: cannot access 'Empty': No such file or directory

重定向

Linux包括每個(gè)流的重定向命令,這些命令將標(biāo)準(zhǔn)輸出寫(xiě)入文件。如果將不存在的文件作為寫(xiě)入目標(biāo),則在寫(xiě)入之前創(chuàng)建文件。

覆蓋命令(Overwrite) > < 2>

  • > 標(biāo)準(zhǔn)輸出
  • < 標(biāo)準(zhǔn)輸入
  • 2> 標(biāo)準(zhǔn)錯(cuò)誤

附加命令(Append) >> << 2>>

  • >> 標(biāo)準(zhǔn)輸出
  • << 標(biāo)準(zhǔn)輸入
  • 2>> 標(biāo)準(zhǔn)錯(cuò)誤

案例:

cat > write_file.log
lance
linux
tutorials
ctrl+d

查看當(dāng)前操作目錄下write_file.log文件,你會(huì)看到通過(guò)cat命令對(duì)應(yīng)的輸入。

可以通過(guò)>來(lái)覆蓋文件內(nèi)容,也可以使用>>命令來(lái)追加內(nèi)容。

管道命令(Pipes) |

管道命令將流從一個(gè)程序重定向到另一個(gè)程序。當(dāng)一個(gè)程序的標(biāo)準(zhǔn)輸出通過(guò)管道發(fā)送給另一個(gè)程序時(shí),第二個(gè)程序接收到的第一個(gè)程序輸出的數(shù)據(jù)將不會(huì)顯示在終端上,僅會(huì)顯示第二個(gè)程序的標(biāo)準(zhǔn)輸出。

ls | less

ls輸出并傳輸?shù)?code>less程序。

>>>|命令類似,前者將輸入重定向文件,后者將輸入重定向到程序命令。

過(guò)濾命令(Filters)

Filters命令是Linux系統(tǒng)的標(biāo)準(zhǔn)命令,可以單獨(dú)使用。

Filters是更改管道重定向和輸出的命令。

  • find 查找返回文件名與傳遞給查找的參數(shù)匹配的文件
  • grep 返回與傳遞grep命令的字符串模式匹配的文本
  • tee 將標(biāo)準(zhǔn)輸入重定向到標(biāo)準(zhǔn)輸出和一個(gè)或者多個(gè)文件
  • tr 查找并替換另一個(gè)字符串
  • wc 計(jì)算字符、行、單詞

小結(jié)

Linux系統(tǒng)內(nèi)置的命令程序非常豐富,提供了強(qiáng)大的工具集。作為專業(yè)技術(shù)從業(yè)者需要掌握其中很多基礎(chǔ)命令工具的使用方式,有助提高工作效率。
我們可以通過(guò)man命令來(lái)即時(shí)學(xué)習(xí)命令的使用文檔。

推薦一些工作常用的高效工具:

  • tmux
  • jq
  • sed
  • awk
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容