快樂的命令行(二)

1、使用命令

? ?1.1碟渺、命令是什么:

A鲜锚、是一個可執(zhí)行程序,就像我們所看到的位于目錄/usr/bin 中的文件一樣苫拍。 這一類程序可以是用諸如 C 和 C++語言寫成的程序編譯的二進制文件, 也可以是由諸如shell芜繁,perl,python绒极,ruby等等腳本語言寫成的程序 骏令。

B、是一個內(nèi)建于 shell 自身的命令集峦。bash 支持若干命令伏社,內(nèi)部叫做 shell 內(nèi)部命令 (builtins)。例如塔淤,cd 命令摘昌,就是一個 shell 內(nèi)部命令。

C高蜂、是一個 shell 函數(shù)聪黎。這些是小規(guī)模的 shell 腳本,它們混合到環(huán)境變量中备恤。 在后續(xù)的章節(jié)里稿饰,我們將討論配置環(huán)境變量以及書寫 shell 函數(shù)。但是現(xiàn)在露泊, 僅僅意識到它們的存在就可以了喉镰。

D、是一個命令別名惭笑。我們可以定義自己的命令侣姆,建立在其它命令之上。

? ?1.2沉噩、 識別命令

?type 命令:是 shell 內(nèi)部命令捺宗,它會顯示命令的類別,給出一個特定的命令名(做為參數(shù))川蒙。

type command? ? ? ? ??like: type ls 蚜厉、type type 、type cp

注意:ls 命令(在 Fedora 系統(tǒng)中)的檢查結(jié)果畜眨,ls 命令實際上 是 ls 命令加上選項”--color=tty”的別名昼牛。

which命令:確定所給定的執(zhí)行程序的準確位置。只對可執(zhí)行程序有效康聂,不包括內(nèi)建命令和命令別名匾嘱,別名是真正的可執(zhí)行程序的替代物。 當(dāng)我們試著使用 shell 內(nèi)建命令時早抠,例如霎烙,cd 命令,我們或者得不到回應(yīng)蕊连,或者是個錯誤信息悬垃。

which command? ? ? ?like: which ls?

help命令

注意表示法:出現(xiàn)在命令語法說明中的方括號,表示可選的項目甘苍。一個豎杠字符 表示互斥選項尝蠕。這種表示法說明,cd 命令可能有一個“-L”選項或者“-P”選項载庭,進一步看彼,可能有參數(shù)“dir”

help命令用法

許多可執(zhí)行程序支持一個 --help 選項廊佩,這個選項是顯示命令所支持的語法和選項說明。一些程序不支持 --help 選項靖榕,但不管怎樣試一下标锄。這經(jīng)常會導(dǎo)致輸出錯誤信息,但同時能 揭示一樣的命令用法信息茁计。

mkdir? --help

man

許多希望被命令行使用的可執(zhí)行程序料皇,提供了一個正式的文檔,叫做手冊或手冊頁(man page)星压。一個特殊的叫做 man 的分頁程序践剂,可用來瀏覽他們。它是這樣使用的:

man program

在大多數(shù) Linux 系統(tǒng)中娜膘,man 使用 less 工具來顯示參考手冊逊脯,所以當(dāng)瀏覽文檔時,你所熟悉的 less 命令都能有效竣贪。

手冊文檔的格式有點不同男窟,一般地包含一個標題、命令語法的綱要贾富、命令用途的說明歉眷、 以及每個命令選項的列表和說明。然而颤枪,手冊文檔通常并不包含實例汗捡,它打算 作為一本參考手冊,而不是教程畏纲。

手冊頁的組成形式

有時候扇住,我們需要查看參考手冊的特定章節(jié),從而找到我們需要的信息盗胀。 如果我們要查找一種文件格式艘蹋,而同時它也是一個命令名時,這種情況尤其正確。 沒有指定章節(jié)號票灰,我們總是得到第一個匹配項女阀,可能在第一章節(jié)。我們這樣使用 man 命令屑迂, 來指定章節(jié)號:

man section search_term? ? ? ? ? ? ? ? ? ? ? like: man 5 passwd

apropos適當(dāng)?shù)拿?/b>

基于某個關(guān)鍵字的匹配項浸策。輸出結(jié)果每行的第一個字段是手冊頁的名字,第二個字段展示章節(jié)惹盼。注意庸汗,man 命令加上”-k”選項, 和 apropos 完成一樣的功能手报。

適當(dāng)?shù)拿?/div>

whatis?:?程序顯示匹配特定關(guān)鍵字的手冊頁的名字和一行命令說明

info:GNU 項目提供了一個命令程序手冊頁的替代物蚯舱,稱為”info”改化。info 內(nèi)容可通過 info 閱讀器 程序讀取。info 頁是超級鏈接形式的枉昏,和網(wǎng)頁很相似陈肛。

info命令

1.3、編寫命令

可以把多個命令放在同一行上凶掰,命令之間 用”;”分開。它像這樣工作:

command1;? command2 ;? command3

用 alias 命令創(chuàng)建我們自己的命令蜈亩。我們要做的第一件事就是為我們的新命令構(gòu)想一個名字懦窘。 比方說”test”。在使用”test”之前稚配,查明是否”test”命令名已經(jīng)存在系統(tǒng)中畅涂,是個很不錯 的主意。為了查清此事道川,可以使用 type 命令:

type test? ? test? is a shell builtin

創(chuàng)建命令格式:

alias name=‘string’

在命令”alias”之后午衰,輸入“name”,緊接著(沒有空格)是一個等號冒萄,等號之后是 一串用引號引起的字符串臊岸,字符串的內(nèi)容要賦值給 name。

刪除命令格式:

unalias name

在命令行中定義別名有點兒小問題尊流。當(dāng)你的 shell 會話結(jié)束時帅戒,它們會消失。

2崖技、重定向

I/O 重定向逻住。”I/O”代表輸入/輸出迎献, 通過這個工具瞎访,你可以重定向命令的輸入輸出,命令的輸入來自文件吁恍,而輸出也存到文件扒秸。 也可以把多個命令連接起來組成一個強大的命令管道。

2.1 常用命令

cat - 連接文件

sort - 排序文本行

uniq - 報道或省略重復(fù)行

grep - 打印匹配行

wc - 打印文件中換行符冀瓦,字鸦采,和字節(jié)個數(shù)

head - 輸出文件第一部分

tail - 輸出文件最后一部分

tee - 從標準輸入讀取數(shù)據(jù),并同時寫到標準輸出和文件

2.2 標準輸入輸出

我們用到的許多程序都會產(chǎn)生某種輸出咕幻。這種輸出渔伯,經(jīng)常由兩種類型組成。 第一肄程,程序運行結(jié)果锣吼;這是說选浑,程序要完成的功能。第二玄叠,我們得到狀態(tài)和錯誤信息古徒, 這些告訴我們程序進展。如果我們觀察一個命令读恃,像 ls隧膘,會看到它的運行結(jié)果和錯誤信息 顯示在屏幕上。

與 Unix 主題“任何東西都是一個文件”保持一致寺惫,程序疹吃,比方說 ls,實際上把他們的運行結(jié)果 輸送到一個叫做標準輸出的特殊文件(經(jīng)常用 stdout 表示)西雀,而它們的狀態(tài)信息則送到另一個 叫做標準錯誤的文件(stderr)萨驶。默認情況下,標準輸出和標準錯誤都連接到屏幕艇肴,而不是 保存到磁盤文件腔呜。除此之外,許多程序從一個叫做標準輸入(stdin)的設(shè)備得到輸入再悼,默認情況下核畴, 標準輸入連接到鍵盤。I/O 重定向允許我們更改輸出地點和輸入來源冲九。一般地膛檀,輸出送到屏幕,輸入來自鍵盤娘侍, 但是通過 I/O 重定向咖刃,我們可以做出改變。

2.3 標準輸出重定向

使用 “>” 重定向符后接文件名將標準輸出重定向到除屏幕以外的另一個文件憾筏。指定了一個不存在的目錄/bin/usr, 錯誤信息顯示在屏幕上而不是被重定向到文件嚎杨。因為 ls 程序不把它的錯誤信息輸送到標準輸出。反而氧腰,像許多寫得不錯的 Unix 程序枫浙,ls 把錯誤信息送到標準錯誤。因為我們只是重定向了標準輸出古拴,而沒有重定向標準錯誤箩帚, 所以錯誤信息被送到屏幕。

注意:使用 “>” 重定向符來重定向輸出結(jié)果時黄痪,目標文件總是從開頭被重寫紧帕。簡單地使用重定向符,沒有命令在它之前,這會清空一個已存在文件的內(nèi)容或是 創(chuàng)建一個新的空文件是嗜。

因此愈案,使用”>>“操作符,將導(dǎo)致輸出結(jié)果添加到文件內(nèi)容之后鹅搪。如果文件不存在站绪,文件會 被創(chuàng)建,就如使用了”>”操作符丽柿。

標準輸出重定向

2.4 標準錯誤重定向

標準錯誤重定向沒有專用的重定向操作符恢准。為了重定向標準錯誤,我們必須參考其文件描述符甫题。 一個程序可以在幾個編號的文件流中的任一個上產(chǎn)生輸出馁筐。雖然我們已經(jīng)將這些文件流的前三個稱作標準輸入、輸出和錯誤幔睬,shell 內(nèi)部分別將其稱為文件描述符0眯漩、1和2芹扭。shell 使用文件描述符提供 了一種表示法來重定向文件麻顶。文件描述符”2”,緊挨著放在重定向操作符之前舱卡,來執(zhí)行重定向標準錯誤到文件 ls-error.txt 任務(wù)辅肾。

2 > ls-error.txt

2.5 標準輸出與標準錯誤同一個文件

我們希望捕捉一個命令的所有輸出到一個文件。為了完成這個轮锥,我們 必須同時重定向標準輸出和標準錯誤矫钓。有兩種方法來完成任務(wù)命斧。第一個荞估,傳統(tǒng)的方法, 在舊版本 shell 中也有效:

ls-output.txt? 2>&1

使用這種方法慧耍,我們完成兩個重定向既绩。首先重定向標準輸出到文件 ls-output.txt概龄,然后重定向文件描述符2(標準錯誤)到文件描述符1(標準輸出)使用表示法2>&1。

注意重定向的順序安排非常重要饲握。標準錯誤的重定向必須總是出現(xiàn)在標準輸出重定向之后私杜,要不然它不起作用。下面的命令標準錯誤定向到屏幕

2>&1 ls-output.txt

現(xiàn)在的 bash 版本提供了第二種方法救欧,更精簡合理的方法來執(zhí)行這種聯(lián)合的重定向衰粹。我們使用單單一個表示法 &> 來重定向標準輸出和錯誤到文件 ls-output.txt。

>& ls-output.txt

2.6 處理不需要的輸出

有時候“沉默是金”笆怠,我們不想要一個命令的輸出結(jié)果铝耻,只想把它們?nèi)拥簟_@種情況 尤其適用于錯誤和狀態(tài)信息蹬刷。系統(tǒng)通過重定向輸出結(jié)果到一個叫做”/dev/null”的特殊文件田篇,為我們提供了解決問題的方法替废。這個文件是系統(tǒng)設(shè)備,叫做位存儲桶泊柬,它可以接受輸入椎镣,并且對輸入不做任何處理。為了隱瞞命令錯誤信息兽赁,我們這樣做:

2 > /dev/null

2.7 標準輸入重定向

cat :讀取一個或多個文件状答,然后復(fù)制它們到標準輸出

cat ls-output.txt

如果cat后沒有其他參數(shù),它會從標準輸入讀入數(shù)據(jù)刀崖,又因為標準輸入默認情況下連接到鍵盤惊科, 它正在等待我們輸入數(shù)據(jù)!下一步亮钦,輸入 Ctrl-d(按住 Ctrl 鍵同時按下”d”)馆截,來告訴 cat,在標準輸入中蜂莉, 它已經(jīng)到達文件末尾(EOF)蜡娶。由于沒有文件名參數(shù),cat 復(fù)制標準輸入到標準輸出映穗,所以我們看到文本行重復(fù)出現(xiàn)窖张。 我們可以使用這種行為來創(chuàng)建簡短的文本文件。

cat創(chuàng)建簡單文本

小列子:cat輸入到文件在從文件讀取信息蚁滋。注意:輸入結(jié)束Ctrl+d宿接。

小列子

使用“<”重定向操作符,我們把標準輸入源從鍵盤改到文件 lazy_dog.tx辕录。我們看到結(jié)果 和傳遞單個文件名作為參數(shù)的執(zhí)行結(jié)果一樣睦霎。把這和傳遞一個文件名參數(shù)作比較,不是特別有意義走诞, 但它是用來說明把一個文件作為標準輸入源副女。有其他的命令更好地利用了標準輸入,我們不久將會看到速梗。

cat修改標準輸入源

2.7.1 管道線

命令從標準輸入讀取數(shù)據(jù)并輸送到標準輸出的能力被一個稱為管道線的 shell 特性所利用肮塞。 使用管道操作符”|”(豎杠),一個命令的標準輸出可以通過管道送至另一個命令的標準輸入:

command1 | command2

?less 命令接受標準輸入姻锁。我們用 less 來一頁一頁地顯示任何命令的輸出枕赵,命令把它的運行結(jié)果輸送到標準輸出。

ls -l /usr/bin | less

2.7.2 過濾器

管道線經(jīng)常用來對數(shù)據(jù)完成復(fù)雜的操作位隶。有可能會把幾個命令放在一起組成一個管道線拷窜。 通常,以這種方式使用的命令被稱為過濾器。過濾器接受輸入篮昧,以某種方式改變它赋荆,然后 輸出它。

第一個我們想試驗的過濾器是 sort懊昨。想象一下窄潭,我們想把目錄/bin 和/usr/bin 中 的可執(zhí)行程序都聯(lián)合在一起,再把它們排序酵颁,然后瀏覽執(zhí)行結(jié)果嫉你。因為我們指定了兩個目錄(/bin 和/usr/bin),ls 命令的輸出結(jié)果由有序列表組成躏惋, 各自針對一個目錄幽污。通過在管道線中包含 sort,我們改變輸出數(shù)據(jù)簿姨,從而產(chǎn)生一個有序列表距误。

ls /bin /usr/bin | sort? | less

2.7.3 報道或忽略重復(fù)行

uniq 命令經(jīng)常和 sort 命令結(jié)合在一起使用。uniq 從標準輸入或單個文件名參數(shù)接受數(shù)據(jù)有序 列表(詳情查看 uniq 手冊頁)扁位,默認情況下准潭,從數(shù)據(jù)列表中刪除任何重復(fù)行。如果我們想看到 重復(fù)的數(shù)據(jù)列表贤牛,讓 uniq 命令帶上”-d”選項惋鹅,就像這樣:

ls /bin /usr/bin | sort | uniq | less

ls /bin /usr/bin | sort | uniq-d | less

2.7.4 WC

wc(字計數(shù))命令是用來顯示文件所包含的行數(shù)则酝、字數(shù)和字節(jié)數(shù)殉簸。wc 打印出來三個數(shù)字:包含在文件中的行數(shù),單詞數(shù)和字節(jié)數(shù)沽讹, 正如我們先前的命令般卑,如果 wc 不帶命令行參數(shù),它接受標準輸入爽雄◎鸺欤”-l”選項限制命令輸出只能 報道行數(shù)。添加 wc 到管道線來統(tǒng)計數(shù)據(jù)挚瘟,是個很便利的方法叹谁。查看我們的有序列表中程序個數(shù), 我們可以這樣做

wc 字計數(shù)

2.7.5 grep

grep 是個很強大的程序乘盖,用來找到文件中的匹配文本焰檩。這樣使用 grep 命令:

grep pattern [file...]

當(dāng) grep 遇到一個文件中的匹配”模式”,它會打印出包含這個類型的行订框。grep 能夠匹配的模式可以 很復(fù)雜析苫,但是現(xiàn)在我們把注意力集中在簡單文本匹配上面。

比如說,我們想在我們的程序列表中衩侥,找到文件名中包含單詞”zip”的所有文件国旷。這樣一個搜索, 可能讓我們了解系統(tǒng)中的一些程序與文件壓縮有關(guān)系茫死。這樣做:

grep 匹配

grep 有一些方便的選項:”-i”使得 grep 在執(zhí)行搜索時忽略大小寫(通常跪但,搜索是大小寫 敏感的),”-v”選項會告訴 grep 只打印不匹配的行峦萎。

2.7.6 head/tail

head 命令打印文件的前十行特漩,而 tail 命令打印文件的后十行。默認情況下骨杂,兩個命令 都打印十行文本涂身,但是可以通過”-n”選項來調(diào)整命令打印的行數(shù)。

head tail的使用

tail 有一個選項允許你實時地瀏覽文件搓蚪。當(dāng)觀察日志文件的進展時蛤售,這很有用,因為 它們同時在被寫入妒潭。使用”-f”選項悴能,tail 命令繼續(xù)監(jiān)測這個文件,當(dāng)新的內(nèi)容添加到文件后雳灾,它們會立即 出現(xiàn)在屏幕上漠酿。這會一直繼續(xù)下去直到你輸入 Ctrl-c。

2.7.7?tee - 從 Stdin 讀取數(shù)據(jù)谎亩,并同時輸出到 Stdout 和文件

為了和我們的管道隱喻保持一致炒嘲,Linux 提供了一個叫做 tee 的命令,這個命令制造了 一個”tee”匈庭,安裝到我們的管道上夫凸。tee 程序從標準輸入讀入數(shù)據(jù),并且同時復(fù)制數(shù)據(jù)到標準輸出(允許數(shù)據(jù)繼續(xù)隨著管道線流動)和一個或多個文件阱持。當(dāng)在某個中間處理階段來捕捉一個管道線的內(nèi)容時夭拌,這很有幫助。

我們重復(fù)執(zhí)行一個先前的例子衷咽, 這次包含 tee 命令鸽扁,在 grep 過濾管道線的內(nèi)容之前,來捕捉整個目錄列表到文件 ls.txt:

捕獲
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镶骗,一起剝皮案震驚了整個濱河市桶现,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卖词,老刑警劉巖巩那,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吏夯,死亡現(xiàn)場離奇詭異,居然都是意外死亡即横,警方通過查閱死者的電腦和手機噪生,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來东囚,“玉大人跺嗽,你說我怎么就攤上這事∫吃澹” “怎么了桨嫁?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長份帐。 經(jīng)常有香客問我璃吧,道長,這世上最難降的妖魔是什么废境? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任畜挨,我火速辦了婚禮,結(jié)果婚禮上噩凹,老公的妹妹穿的比我還像新娘巴元。我一直安慰自己,他們只是感情好驮宴,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布逮刨。 她就那樣靜靜地躺著,像睡著了一般堵泽。 火紅的嫁衣襯著肌膚如雪修己。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天落恼,我揣著相機與錄音箩退,去河邊找鬼离熏。 笑死佳谦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的滋戳。 我是一名探鬼主播钻蔑,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奸鸯!你這毒婦竟也來了咪笑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤娄涩,失蹤者是張志新(化名)和其女友劉穎窗怒,沒想到半個月后映跟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡扬虚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年努隙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辜昵。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡荸镊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堪置,到底是詐尸還是另有隱情躬存,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布舀锨,位于F島的核電站岭洲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坎匿。R本人自食惡果不足惜钦椭,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碑诉。 院中可真熱鬧彪腔,春花似錦、人聲如沸进栽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽快毛。三九已至格嗅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唠帝,已是汗流浹背屯掖。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留襟衰,地道東北人贴铜。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像瀑晒,于是被迫代替她去往敵國和親绍坝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,383評論 0 5
  • Ubuntu的發(fā)音 Ubuntu把介,源于非洲祖魯人和科薩人的語言勤讽,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,278評論 9 467
  • .bat腳本基本命令語法 目錄 批處理的常見命令(未列舉的命令還比較多拗踢,請查閱幫助信息) 1地技、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,102評論 1 19
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,168評論 2 33
  • 白是一只鹿的名字,它有兩只巨大的鹿角秒拔,是同伴們公認的最美的一只鹿莫矗,常游于山林之間,日不落不歸還砂缩。 白見過瀑布作谚,見過...
    寞涼閱讀 1,252評論 16 30