我們平時(shí)都會(huì)需要復(fù)制黏貼數(shù)據(jù),假如打開文件進(jìn)行復(fù)制黏貼操作,那么就有的繁瑣,那么能不能省掉這些步驟呢?
當(dāng)然能,重定向是一種高效的方法,它無(wú)需大量的鼠標(biāo)與鍵盤操作就可以完成數(shù)據(jù)的轉(zhuǎn)移。重定向可以分為輸入重定向以及輸出重定向這兩種類型。由于所有程序都有輸入或者輸出,因此輸入和輸出的重定向是任何編程語(yǔ)言或腳本語(yǔ)言都自帶的功能。
每當(dāng)你與計(jì)算機(jī)交互時(shí),重定向就必然會(huì)發(fā)生。學(xué)會(huì)使用重定向,不僅可以讓你與計(jì)算機(jī)更好地交互,還可以提高你的工作效率。接下來(lái)給大家講解一下 Linux
系統(tǒng)中重定向的常見(jiàn)用法:
Linux 中的數(shù)據(jù)流
談到 Linux
的重定向,就不得不提以下這3種數(shù)據(jù)流:
- 輸入信息會(huì)從
stdin
中讀?。?biāo)準(zhǔ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 >> alvin
重定向輸入
與重定向輸出相反,重定向輸入使用的是 <
字符。
輸入重定向可以將輸入信息重定向至命令中作為參數(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
腳本編寫者們將多行文本轉(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ù),被寫入 /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
善用重定向
在 Bash
中,重定向是轉(zhuǎn)移數(shù)據(jù)的一種高效方法。你可能并不會(huì)總是使用重定向,但是學(xué)會(huì)如何使用重定向,在你需要的時(shí)候可以讓你省掉許多不必要的復(fù)制粘貼操作,因此也節(jié)省了許多操作鼠標(biāo)與鍵盤的時(shí)間。請(qǐng)不要執(zhí)著于復(fù)制粘貼了,使用重定向可以提高你的工作效率,難道,它不香嗎?
以上就是關(guān)于Linux
系統(tǒng)中的重定向的講解了,希望對(duì)大家的工作有所幫助,想學(xué)習(xí)更多Linux知識(shí)的同學(xué)可以看一下教程:
Linux教程:http://o2fo.com/linux/
Linux微課:http://o2fo.com/minicourse/play/linuxcourse
Linux就該這么學(xué):http://o2fo.com/linuxprobe/
文章參考來(lái)源:www.toutiao.com/a6854146447089074695/