免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
Linux下的重定向輸入輸出(轉(zhuǎn)自黑基網(wǎng),http://www.hackbase.com/lib/2005-06-09/7836.html)
1. 標(biāo)準(zhǔn)輸入與輸出
我們知道,執(zhí)行一個shell命令行時通常會 1. 標(biāo)準(zhǔn)輸入與輸出
我們知道,執(zhí)行一個shell命令行時通常會自動打開三個標(biāo)準(zhǔn)文件,即標(biāo)準(zhǔn)輸入文件(stdin),通常對應(yīng)終端的鍵盤;標(biāo)準(zhǔn)輸出文件(stdout)和標(biāo)準(zhǔn)錯誤輸出文件(stderr),這兩個文件都對應(yīng)終端的屏幕。進(jìn)程將從標(biāo)準(zhǔn)輸入文件中得到輸入數(shù)據(jù),將正常輸出數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出文件,而將錯誤信息送到標(biāo)準(zhǔn)錯誤文件中。
我們以cat命令為例,cat命令的功能是從命令行給出的文件中讀取數(shù)據(jù),并將這些數(shù)據(jù)直接送到標(biāo)準(zhǔn)輸出。若使用如下命令:
$ cat config
將會把文件config的內(nèi)容依次顯示到屏幕上。但是,如果cat的命令行中沒有參數(shù),它就會從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù),并將其送到標(biāo)準(zhǔn)輸出。例如:
$ cat
Hello world
Hello world
Bye
Bye
 
$
用戶輸入的每一行都立刻被cat命令輸出到屏幕上。
另一個例子,命令sort按行讀入文件正文(當(dāng)命令行中沒有給出文件名時,表示從標(biāo)準(zhǔn)輸入讀入),將其排序,并將結(jié)果送到標(biāo)準(zhǔn)輸出。下面的例子是從標(biāo)準(zhǔn)輸入讀入一個采購單,并將其排序。
$ sort
bananas
carrots
apples
 
apples
bananas
carrots
$
這時我們在屏幕上得到了已排序的采購單。
直接使用標(biāo)準(zhǔn)輸入/輸出文件存在以下問題:
輸入數(shù)據(jù)從終端輸入時,用戶費(fèi)了半天勁輸入的數(shù)據(jù)只能用一次。下次再想用這些數(shù)據(jù)時就得重新輸入。而且在終端上輸入時,若輸入有誤修改起來不是很方便。
輸出到終端屏幕上的信息只能看不能動。我們無法對此輸出作更多處理,如將輸出作為另一命令的輸入進(jìn)行進(jìn)一步的處理等。
為了解決上述問題,Linux系統(tǒng)為輸入、輸出的傳送引入了另外兩種機(jī)制,即輸入/輸出重定向和管道。
輸入重定向
輸入重定向是指把命令(或可執(zhí)行程序)的標(biāo)準(zhǔn)輸入重定向到指定的文件中。也就是說,輸入可以不來自鍵盤,而來自一個指定的文件。所以說,輸入重定向主要用于改變一個命令的輸入源,特別是改變那些需要大量輸入的輸入源。
例如,命令wc統(tǒng)計指定文件包含的行數(shù)、單詞數(shù)和字符數(shù)。如果僅在命令行上鍵入:
$ wc
wc將等待用戶告訴它統(tǒng)計什么,這時shell就好象死了一樣,從鍵盤鍵入的所有文本都出現(xiàn)在屏幕上,但并沒有什么結(jié)果,直至按下<ctrl+d>,wc才將命令結(jié)果寫在屏幕上。
如果給出一個文件名作為wc命令的參數(shù),如下例所示,wc將返回該文件所包含的行數(shù)、單詞數(shù)和字符數(shù)。
$ wc /etc/passwd
20 23 726 /etc/passwd
$
另一種把/etc/passwd文件內(nèi)容傳給wc命令的方法是重定向wc的輸入。輸入重定向的一般形式為:命令<文件名。可以用下面的命令把wc命令的輸入重定向為/etc/passwd文件:
$ wc < /etc/passwd
20 23 726
$
另一種輸入重定向稱為here文檔,它告訴shell當(dāng)前命令的標(biāo)準(zhǔn)輸入來自命令行。here文檔的重定向操作符使用<<。它將一對分隔符(本例中用delim表示)之間的正文重定向輸入給命令。下例將一對分隔符delim之間的正文作為wc命令的輸入,統(tǒng)計出正文的行數(shù)、單詞數(shù)和字符數(shù)。
$ wc< delim
>this text forms the content
>of the here document,which
>continues until the end of
>text delimter
>delim
4 17 98
在<<操作符后面,任何字符都可以作為正文開始前的分隔符,本例中使用delim作為分隔符。here文檔的正文一直延續(xù)到遇見另一個分隔符為止。第二個分隔符應(yīng)出現(xiàn)在新行的開頭。這時here文檔的正文(不包括開始和結(jié)束的分隔符)將重新定向送給命令wc作為它的標(biāo)準(zhǔn)輸入。
由于大多數(shù)命令都以參數(shù)的形式在命令行上指定輸入文件的文件名,所以輸入重定向并不經(jīng)常使用。盡管如此,當(dāng)要使用一個不接受文件名作為輸入?yún)?shù)的命令,而需要的輸入內(nèi)容又存在一個文件里時,就能用輸入重定向解決問題。
輸出重定向
輸出重定向是指把命令(或可執(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
系統(tǒng)再次發(fā)出警報聲,并且自動將命令行補(bǔ)全為:
$ rm –f Firebird
并等待用戶進(jìn)一步輸入文件名的后面部分?,F(xiàn)在再鍵入:
2.6
系統(tǒng)再次發(fā)出警報聲,并且自動將命令行補(bǔ)全為:
$ rm –f Firebird2.60.tgz
并等待用戶進(jìn)一步輸入文件名的后面部分?,F(xiàn)在再鍵入:
.
此時命令將被補(bǔ)全為:
$ rm –f Firebird2.60.tgz..README
從上例可以看到,bash總是盡力根據(jù)用戶輸入的信息來補(bǔ)全命令。當(dāng)無法根據(jù)現(xiàn)有信息補(bǔ)全命令時,則提示用戶再給出更多的信息,然后再根據(jù)用戶的提示來進(jìn)一步補(bǔ)全命令。作為用戶最好是能夠一次性給出足夠的信息以便于bash進(jìn)行命令補(bǔ)全;否則多按幾次 ,時間也就消耗掉了。
命令行編輯
在Bash中可以對命令行進(jìn)行編輯,以便用戶在執(zhí)行所鍵入的命令之前能夠修改所鍵入的命令。如果在鍵入命令時出現(xiàn)拼寫錯誤,只需在運(yùn)行所鍵入的命令之前,使用編輯命令來糾正編輯錯誤,然后執(zhí)行它,而不用重新輸入整行命令。這個功能對以長路徑文件名作參數(shù)的命令特別有用。
表10-2是對命令行編輯操作的一個總結(jié)。
表10-2 命令行編輯操作
 
命令行編輯操作
功能
Ctrl+b或左箭頭鍵
左移一個字符(移至前一個字符)
Ctrl+f或右箭頭鍵
右移一個字符(移至后一個字符)
Ctrl+a
移至行首
Ctrl+e
移至行尾
Esc b
左移一個單詞
Esc f
右移一個單詞
Del
刪除光標(biāo)所在處的字符
Ctrl+d
刪除光標(biāo)所在處的字符
BACKSPACE或Ctrl+h
刪除光標(biāo)左邊的字符
Ctrl+k
刪除至行尾
 

命令歷史
在Bash中,history命令能夠保存最近所執(zhí)行的命令。這些命令的歷史記錄號從1開始,只有有限個命令可以被保存起來,最多500個,即history命令的歷史記錄號缺省值為500。要查看最近執(zhí)行的命令,只要鍵入history命令,然后鍵入回車鍵,最近執(zhí)行過的命令即按先后順序被顯示出來(各條命令前的數(shù)字為歷史記錄號)。
[例】
$ history
1 cp mydata today
2 vi mydata
3 mv mydata reports
4 cd reports
5 ls
所有這些命令都被稱為事件(event),一個事件表示一個操作已經(jīng)發(fā)生,即一個命令已被執(zhí)行。這些事件根據(jù)它們被執(zhí)行的先后順序用數(shù)字標(biāo)識,這一標(biāo)識稱為歷史事件號。最后執(zhí)行的歷史事件的事件號最大。每個事件都可由它的歷史事件號或命令的初始字符或字符串等確定。
利用history命令能夠查詢以前的事件,并可把它們顯示到命令行上執(zhí)行這一事件。最簡便的方法就是利用上下箭頭鍵,把先前的事件逐次顯示到命令行。這個操作不需要運(yùn)行history命令就可以執(zhí)行。按動一下上箭頭鍵,那么上一次執(zhí)行的一個事件就將出現(xiàn)在命令行上,再按一下,上一次的前一事件又會出現(xiàn)在命令行上;按動一下下箭頭鍵,將會使當(dāng)前事件的下一事件出現(xiàn)在命令行上。
Bash也可以通過鍵入Esc、Tab鍵來完成對歷史事件的字符擴(kuò)展。和標(biāo)準(zhǔn)命令行擴(kuò)展特性一樣,鍵入歷史事件的部分字符串,然后鍵入Esc,再鍵入Tab鍵,與剛才鍵入的字符串相匹配的歷史事件將自動擴(kuò)展并回顯到命令行處。如果不止一個事件與輸入的字符串相匹配,就會聽到一聲響鈴,繼續(xù)鍵入字符或字符串,shell將會唯一確定用戶所要鍵入的歷史事件。
還有一個查詢和執(zhí)行歷史事件的命令——!命令。在!命令后鍵入與歷史事件相關(guān)聯(lián)的字符,這個關(guān)聯(lián)字符可以是歷史事件的歷史事件號,也可以是該事件的前幾個字符。在下面的例子中,查詢到歷史事件號為3的事件,然后又用其開頭的幾個字符去匹配,也查詢到該命令。
[例】
$ !3
mv mydata reports
$ !mv
mv mydata reports
也可以用一個偏移量(相對于歷史事件列表中最后一個事件)來查詢歷史事件。負(fù)的偏移量將從歷史事件列表表尾向前偏移。在下面的例子中,歷史事件號為2的事件“vi mydata”就是用一個負(fù)的偏移量查詢到的。必須注意的是,這個偏移量是相對于歷史事件列表中的最后一個事件的。在本例中,歷史事件列表中最后一個事件是事件5,歷史事件列表中第一個事件為1。從歷史事件號為5的事件,往前偏移4,即是歷史事件號為2的事件。
[例】
$ !-4
vi mydata
如果鍵入!!,則系統(tǒng)默認(rèn)為上一事件。
本篇文章來源于 黑基網(wǎng)-中國最大的網(wǎng)絡(luò)安全站點(diǎn) 原文鏈接:http://www.hackbase.com/lib/2005-06-09/7836.html
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
linux下shell的工作原理
什么是shell
DOS命令大全:Dir命令詳解
第三章 Linux基本命令
熟悉 Shell腳本 - 基本文本處理
第3章 Linux操作基礎(chǔ)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服