溫馨提示×

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

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

Linux中怎么實(shí)現(xiàn)重定向

發(fā)布時(shí)間:2021-06-23 15:16:12 來(lái)源:億速云 閱讀:305 作者:Leah 欄目:系統(tǒng)運(yùn)維

這篇文章將為大家詳細(xì)講解有關(guān)Linux中怎么實(shí)現(xiàn)重定向,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

Linux 中的數(shù)據(jù)流

談到 Linux 的重定向,就不得不提以下這3種數(shù)據(jù)流:

  • 輸入信息會(huì)從 stdin 中讀取(標(biāo)準(zhǔn)輸入,通常是鍵盤(pán)或鼠標(biāo))。

  • 輸出信息會(huì)被輸出到 stdout (標(biāo)準(zhǔn)輸出,一個(gè)文本文件或者數(shù)據(jù)流)。

  • 錯(cuò)誤信息會(huì)被輸出到 stderr。

了解了這些數(shù)據(jù)流的存在,在你使用 Shell 時(shí),你就可以更好地控制數(shù)據(jù)的流向了。

在 Linux 系統(tǒng)中,標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出以及標(biāo)準(zhǔn)錯(cuò)誤都作為文件存在。你可以在 /dev 目錄下看到它們:

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

重定向輸出

在 Linux 系統(tǒng)中,使用 > 字符表示重定向輸出。例如,將 ls 命令的輸出重定向到一個(gè)文件中:

$ ls > list.txt

執(zhí)行以上命令后,屏幕上并不會(huì)顯示 ls 命令的輸出信息,因?yàn)檩敵鲂畔⒁呀?jīng)被重定向至 list.txt 文件中了。

除此之外,重定向還有許多用途,它還可以用于復(fù)制文件的內(nèi)容,而且不限于復(fù)制文本文件,二進(jìn)制文件也可以復(fù)制:

$ cat image.png > picture.png

如果你想要將一個(gè)文件的內(nèi)容復(fù)制到另一個(gè)文件的末尾,你只需將 > 字符換成 >> 字符串即可,像這樣:

$ cat lxlinux >> alvi

重定向輸入

與重定向輸出相反,重定向輸入使用的是 < 字符。

輸入重定向可以將輸入信息重定向至命令中作為參數(shù)使用。該功能可能比較少用,但是,當(dāng)命令需要一個(gè)參數(shù)列表時(shí),而這些參數(shù)都存在一個(gè)文件中,然后你想快速地將它們從文件中復(fù)制粘貼到終端,這時(shí)這個(gè)功能就能派上用場(chǎng)了。

例如,package.list 里記錄了你需要安裝的包的列表,而你想要快速地安裝所有的包,只需執(zhí)行以下這一條命令,就能一次性安裝 package.list  里的所有包:

$ sudo dnf install $(<package.list)

輸入重定向的常見(jiàn)用法是 Here-document (簡(jiǎn)稱 Here-doc) 以及 Here-string 。

Here-doc 將輸入的文本塊重定向至標(biāo)準(zhǔn)輸入流,直至遇到特殊的文件結(jié)束標(biāo)記符為止(文件結(jié)束標(biāo)記符可以是任意的唯一的字符串,但大部分人都默認(rèn)使用  EOF)。

你可以嘗試在終端輸入以下命令(直到第二個(gè) EOF 字符串結(jié)束):

$ cat << EOF > alvin > lxlinux.net > EOF

預(yù)期的輸出應(yīng)該是這樣的:

alvin lxlinux.net

Here-doc 是 Bash 腳本編寫(xiě)者們將多行文本轉(zhuǎn)儲(chǔ)到文件或屏幕上的常用技巧。

Here-string 與 Here-doc 相似,但是它只有一個(gè)字符串,或者幾個(gè)被引號(hào)括起來(lái)的字符串:

$ cat <<< alvin alvin $ cat <<< "alvin lxlinux.net" alvin lxlinux.net

重定向錯(cuò)誤信息

錯(cuò)誤信息默認(rèn)會(huì)進(jìn)入叫 stderr 的流,使用 2> 可以對(duì)其進(jìn)行重定向。例如,將錯(cuò)誤信息重定向到名為 output.log 的文件中:

$ ls /nope 2> output.log

重定向數(shù)據(jù)至 /dev/null

就像標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出以及標(biāo)準(zhǔn)錯(cuò)誤一樣,在 Linux 文件系統(tǒng)中,空,也存在一個(gè)文件與之對(duì)應(yīng),它叫做 null ,放在 /dev  目錄下。為了方便讀,人們經(jīng)常省略斜杠,直接把他讀作 dev null 。

/dev/null 并不保存數(shù)據(jù),被寫(xiě)入 /dev/null 的數(shù)據(jù)最終都會(huì)丟失,就像被丟進(jìn)虛空中一樣。因此,你可以使用重定向?qū)⒉恍枰臄?shù)據(jù)輸送到  /dev/null 。例如,find 命令的輸出往往很冗長(zhǎng),而且在搜索文件時(shí)還經(jīng)常會(huì)報(bào)告權(quán)限沖突的錯(cuò)誤,像這樣:

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

這時(shí),你就可以將錯(cuò)誤信息重定向到 /dev/null ,以過(guò)濾掉不必要的信息,像這樣:

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

關(guān)于Linux中怎么實(shí)現(xiàn)重定向就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向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