溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何通過(guò)重定向在Linux終端任意讀寫數(shù)據(jù)

發(fā)布時(shí)間:2021-12-04 09:27:50 來(lái)源:億速云 閱讀:122 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章主要為大家展示了“如何通過(guò)重定向在Linux終端任意讀寫數(shù)據(jù)”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何通過(guò)重定向在Linux終端任意讀寫數(shù)據(jù)”這篇文章吧。


重定向是一種十分高效的數(shù)據(jù)流動(dòng)方式,它能幫你減少很多鼠標(biāo)和鍵盤上的操作。

對(duì)于任何編程或腳本語(yǔ)言,輸入與輸出重定向都是很自然的功能。嚴(yán)格來(lái)說(shuō),當(dāng)你使用電腦時(shí),數(shù)據(jù)自然而然地在發(fā)生著重定向。從 stdin(標(biāo)準(zhǔn)輸入,通常是你的鍵盤或者鼠標(biāo))讀取輸入,輸入則發(fā)往 stdout(標(biāo)準(zhǔn)輸出,一段文本或者數(shù)據(jù)流),最后錯(cuò)誤信息送至 stderr。如果你使用 Bash 或 Zsh 之類的 shell,那么理解這些數(shù)據(jù)流能夠讓你更好地控制信息流向。

標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出以及標(biāo)準(zhǔn)錯(cuò)誤輸出都存在于 Linux 文件系統(tǒng)中。你可以在 /dev 查看:

$ ls /dev/std*/dev/stderr@  /dev/stdin@  /dev/stdout@

你可能沒(méi)法直接使用它們,但將它們想象成你能傳遞數(shù)據(jù)的元位置,會(huì)很有幫助。

重定向的基礎(chǔ)很簡(jiǎn)單:用一些 > 符號(hào)重定向輸出,然后用另外一些 < 符號(hào)重定向輸入。

重定向輸出

將 ls 命令的輸出寫入一個(gè)文件:

$ ls > list.txt

你沒(méi)法像平常那樣看到 ls 的輸出,因?yàn)樗鼈儾](méi)有被發(fā)送到屏幕,而是被寫入 list.txt 文件了,這個(gè)功能用處太多了,事實(shí)上,你甚至可以用它來(lái)將文件內(nèi)容拷貝到另一個(gè)文件。不一定是文本文件,你也可以用將重定向用于二進(jìn)制數(shù)據(jù):

$ cat image.png > picture.png

(你可能會(huì)好奇為什么要這樣做,有時(shí)候?qū)τ?nbsp;文件權(quán)限信息 而間接有用。)

重定向輸入

你也能將輸入重定向“到”一個(gè)命令??梢哉f(shuō),它沒(méi)有重定向輸出那么有用,因?yàn)樵S多命令已經(jīng)被硬編碼,只從你的參數(shù)中接收輸入。但是,如果某個(gè)命令需要一系列參數(shù),而且你把這些參數(shù)寫在文件里,想要快速“復(fù)制粘貼”到終端的時(shí)候(除非你并不想復(fù)制粘貼),它就幫得上忙了。

$ sudo dnf install $(<package.list)

重定向輸入得常規(guī)用法是嵌入文檔here-document(簡(jiǎn)寫成 here-doc)和嵌入字符串here-string 技巧。這種輸入方法將一整塊文本重定向至標(biāo)準(zhǔn)輸入流,直到碰見(jiàn)一個(gè)特殊的文件結(jié)束標(biāo)記(許多人習(xí)慣用 EOF,實(shí)際上你可以使用任何字符串,只要它是唯一的)。試著把這些(在第二個(gè) EOF 標(biāo)記之前)敲進(jìn)你的終端:

$ echo << EOF> foo> bar> baz> EOF

輸出結(jié)果:

foobarbaz

使用 Bash 編寫腳本的人常常用這個(gè)技巧,將數(shù)行文本一次性寫入文件或者打印到屏幕上。只要你別忘了末尾的文件結(jié)束標(biāo)記,這會(huì)是一個(gè)幫你避免大量繁瑣 echo 或 printf 語(yǔ)句的好辦法。

嵌入字符串類似于嵌入文檔,但是它只含有一個(gè)字符串(或者用引號(hào)包裹的幾個(gè)字符串,同樣會(huì)被當(dāng)成一個(gè)字符串)

$ cat <<< "foo bar baz"foo bar baz

重定向錯(cuò)誤信息

錯(cuò)誤信息流叫做 stderr,通過(guò) 2> 實(shí)現(xiàn)這個(gè)目的。下面這個(gè)命令把錯(cuò)誤信息定向到 output.log 文件:

$ ls /nope 2> output.log

將數(shù)據(jù)送往 /dev/null

既然標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出都有自己的位置,那么“空空如也”也應(yīng)該在 Linux 文件系統(tǒng)占有一席之地。沒(méi)錯(cuò),它叫做 null,位于 /dev,頻繁使用的人懶得說(shuō) “slash dev slash null”,于是索性叫它 “devnull”。

通過(guò)重定向,你可以把數(shù)據(jù)發(fā)送到 /dev/null。比如,find 命令常常會(huì)輸出很多具體信息,而且在搜索文件遇到權(quán)限沖突時(shí),會(huì)事無(wú)巨細(xì)地報(bào)告:

$ find ~ -type f/home/seth/actual.filefind: `/home/seth/foggy': Permission deniedfind: `/home/seth/groggy': Permission deniedfind: `/home/seth/soggy': Permission denied/home/seth/zzz.file

find 命令把那些當(dāng)作錯(cuò)誤,所以你可以只把錯(cuò)誤信息重定向至 /dev/null

$ find ~ -type f 2>; /dev/null/home/seth/actual.file/home/seth/zzz.file

使用重定向

在 Bash 中,重定向是轉(zhuǎn)移數(shù)據(jù)的有效方法。你可能不會(huì)頻繁使用重定向,但是學(xué)會(huì)如何使用它,能幫你在打開(kāi)文件、復(fù)制粘貼數(shù)據(jù)這類需要移動(dòng)鼠標(biāo)、大量按鍵操作上,節(jié)省很多不必要的時(shí)間。不要做如此浪費(fèi)時(shí)間的事情。使用重定向,好好享受生活。

以上是“如何通過(guò)重定向在Linux終端任意讀寫數(shù)據(jù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI