新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一篇對大家學(xué)習(xí),理解linux很有用的文章

一篇對大家學(xué)習(xí),理解linux很有用的文章

作者: 時間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

由于大多數(shù)命令都以參數(shù)的形式在命令行上指定輸入文件的文件名,所以輸入重定向并不經(jīng)常使用。盡管如此,當(dāng)要使用一個不接受文件名作為輸入?yún)?shù)的命令,而需要的輸入內(nèi)容又存在一個文件里時,就能用輸入重定向解決問題。

1. 輸出重定向

輸出重定向是指把命令(或可執(zhí)行程序)的標(biāo)準(zhǔn)輸出或標(biāo)準(zhǔn)錯誤輸出重新定向到指定文件中。這樣,該命令的輸出就不顯示在屏幕上,而是寫入到指定文件中。

輸出重定向比輸入重定向更常用,很多情況下都可以使用這種功能。例如,如果某個命令的輸出很多,在屏幕上不能完全顯示,那么將輸出重定向到一個文件中,然后再用文本編輯器打開這個文件,就可以查看輸出信息;如果想保存一個命令的輸出,也可以使用這種方法。還有,輸出重定向可以用于把一個命令的輸出當(dāng)作另一個命令的輸入(還有一種更簡單的方法,就是使用管道,將在下面介紹)。

輸出重定向的一般形式為:命令>文件名。例如:

$ ls > directory.out

$ cat directory.out

ch1.doc ch2.doc ch3.doc chimp config mail/ test/

$

將ls命令的輸出保存為一個名為directory.out的文件。

注:如果>符號后邊的文件已存在,那么這個文件將被重寫。

為避免輸出重定向中指定文件只能存放當(dāng)前命令的輸出重定向的內(nèi)容,shell提供了輸出重定向的一種追加手段。輸出追加重定向與輸出重定向的功能非常相似,區(qū)別僅在于輸出追加重定向的功能是把命令(或可執(zhí)行程序)的輸出結(jié)果追加到指定文件的最后,而該文件原有內(nèi)容不被破壞。

如果要將一條命令的輸出結(jié)果追加到指定文件的后面,可以使用追加重定向操作符>>。形式為:命令>>文件名。例如:

$ ls *.doc>>directory.out

$ cat directory.out

ch1.doc ch2.doc ch3.doc chimp config mail/ test/

ch1.doc ch2.doc ch3.doc

$

和程序的標(biāo)準(zhǔn)輸出重定向一樣,程序的錯誤輸出也可以重新定向。使用符號2>(或追加符號2>>)表示對錯誤輸出設(shè)備重定向。例如下面的命令:

$ ls /usr/tmp 2> err.file

可在屏幕上看到程序的正常輸出結(jié)果,但又將程序的任何錯誤信息送到文件err.file中,以備將來檢查用。

還可以使用另一個輸出重定向操作符(>)將標(biāo)準(zhǔn)輸出和錯誤輸出同時送到同一文件中。例如:

$ ls /usr/tmp > output.file

利用重定向?qū)⒚罱M合在一起,可實現(xiàn)系統(tǒng)單個命令不能提供的新功能。例如使用下面的命令序列:

$ ls /usr/bin > /tmp/dir

$ wc –w /tmp/dir

459

統(tǒng)計了/usr/bin目錄下的文件個數(shù)。

管 道

將一個程序或命令的輸出作為另一個程序或命令的輸入,有兩種方法,一種是通過一個臨時文件將兩個命令或程序結(jié)合在一起,例如上個例子中的/tmp/dir文件將ls和wc命令聯(lián)在一起;另一種是Linux所提供的管道功能。這種方法比前一種方法更好。

管道可以把一系列命令連接起來,這意味著第一個命令的輸出會作為第二個命令的輸入通過管道傳給第二個命令,第二個命令的輸出又會作為第三個命令的輸入,以此類推。顯示在屏幕上的是管道行中最后一個命令的輸出(如果命令行中未使用輸出重定向)。

通過使用管道符“|”來建立一個管道行。用管道重寫上面的例子:

$ ls /usr/bin|wc -w

1789

再如:

$ cat sample.txt|grep High|wc -l

管道將cat命令(列出一個文件的內(nèi)容)的輸出送給grep命令。grep命令在輸入里查找單詞High,grep命令的輸出則是所有包含單詞High的行,這個輸出又被送給wc命令,wc命令統(tǒng)計出輸入中的行數(shù)。假設(shè)sample.txt文件的內(nèi)容如下:

Things to do today:

Low:Go grocery shopping

High:Return movie

High:Clear level 3 in Alien vs. Predator

Medium:Pick up clothes from dry cleaner

那么該管道行的結(jié)果是2。

命令替換

命令替換和重定向有些相似,但區(qū)別在于命令替換是將一個命令的輸出作為另外一個命令的參數(shù)。常用命令格式為:

command1 `command2`

其中,command2的輸出將作為command1的參數(shù)。需要注意的是這里的`符號,被它括起來的內(nèi)容將作為命令執(zhí)行,執(zhí)行后的結(jié)果作為command1的參數(shù)。例如:

$ cd `pwd`

該命令將pwd命令列出的目錄作為cd命令的參數(shù),結(jié)果仍然是停留在當(dāng)前目錄下。

第二十二課 在Bash中的操作      2000年/5月/29日

命令和文件名擴(kuò)展特性

Bash命令行具有命令和文件名擴(kuò)展特性。當(dāng)輸入一個還沒完成的命令或文件名時,只需鍵入Tab鍵就能激活命令和文件名擴(kuò)展特性,從而完成該命令的剩余輸入。如果有多個命令或文件的前綴相同,Bash將響鈴并等待用戶輸入足夠的字符,以便選擇唯一的命令或文件名,如果找到,系統(tǒng)將自動補(bǔ)齊搜索到的命令或文件名,用戶按回車鍵后,系統(tǒng)將執(zhí)行這條指令。例如:

$ cat pre

$ cat preface

Bash也能列出當(dāng)前目錄下部分匹配的文件名來完成文件名擴(kuò)展。如果鍵入Esc,然后鍵入?,shell將列出所有與輸入的字符串相匹配的文件名。例如下例,在沒有完成的輸入后鍵入Esc ?,shell將列出所有與輸入的字符串相匹配的字符串,然后shell回顯命令行,根據(jù)列出的文件名,可以鍵入要輸入的文件名或按下Tab鍵來完成文件名擴(kuò)展。例如:

$ ls

document docudrama

$ cat doc

document

docudrama

$ cat docudrama

[例】下面是一個目錄包含的文件列表:

Firebird2.7.tgz Firebird.README Firebird2.60.tgz

FireBird Firebird2.60.tgz.README

現(xiàn)在要刪除Firebird2.60.tgz.README文件,鍵入:

$ rm –f Fi

系統(tǒng)會發(fā)出警報聲,并且自動將命令行補(bǔ)全為:

$ rm –f Fire

并等待用戶進(jìn)一步輸入文件名的后面部分?,F(xiàn)在再鍵入:

b



關(guān)鍵詞: 學(xué)習(xí) linux

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉