Linux 101:讓你的Shell更強(qiáng)大
在我們的關(guān)于 shell 基礎(chǔ)的指導(dǎo)下,得到一個(gè)更靈活,功能更強(qiáng)大且多彩的命令行界面。
為何要這樣做?
- 使得在 shell 提示符下過(guò)得更輕松,高效
- 在失去連接后,恢復(fù)先前的會(huì)話
- Stop pushing around that fiddly rodent!
bash1
這是我的命令行提示符的設(shè)置。對(duì)于這個(gè)小的終端窗口來(lái)說(shuō),這或許有些長(zhǎng)。但你可以根據(jù)你的喜好來(lái)調(diào)整它。
作為一個(gè) Linux 用戶,你可能熟悉 shell (又名為命令行)。 或許你需要時(shí)不時(shí)的打開(kāi)終端來(lái)完成那些不能在 GUI 下處理的必要任務(wù),抑或是因?yàn)槟闾幵谝粋€(gè)將窗口鋪滿桌面的環(huán)境中,而 shell 是你與你的 linux 機(jī)器交互的主要方式。
在上面那些情況下,你可能正在使用你所使用的發(fā)行版本自帶的 Bash 配置。 盡管對(duì)于大多數(shù)的任務(wù)而言,它足夠好了,但它可以更加強(qiáng)大。 在本教程中,我們將向你展示如何使得你的 shell 提供更多有用信息、更加實(shí)用且更適合工作。我們將對(duì)提示符進(jìn)行自定義,讓它比默認(rèn)情況下提供更好的反饋,并向你展示如何使用炫酷的 tmux
工具來(lái)管理會(huì)話并同時(shí)運(yùn)行多個(gè)程序。 并且,為了讓眼睛舒服一點(diǎn),我們還將關(guān)注配色方案。那么,進(jìn)擊吧,少女!
讓提示符更美妙
大多數(shù)的發(fā)行版本配置有一個(gè)非常簡(jiǎn)單的提示符,它們大多向你展示了一些基本信息, 但提示符可以為你提供更多的內(nèi)容。例如,在 Debian 7 下,默認(rèn)的提示符是這樣的:
mike@somebox:~$
上面的提示符展示出了用戶、主機(jī)名、當(dāng)前目錄和賬戶類型符號(hào)(假如你切換到 root 賬戶, $ 會(huì)變?yōu)?#)。 那這些信息是在哪里存儲(chǔ)的呢? 答案是:在 PS1 環(huán)境變量中。 假如你鍵入 echo $PS1
, 你將會(huì)在這個(gè)命令的輸出字符串的最后有如下的字符:
\u@\h:\w$
這看起來(lái)有一些丑陋,并在瞥見(jiàn)它的第一眼時(shí),你可能會(huì)開(kāi)始尖叫,認(rèn)為它是令人恐懼的正則表達(dá)式,但我們不打算用這些復(fù)雜的字符來(lái)煎熬我們的大腦。這不是正則表達(dá)式,這里的斜杠是轉(zhuǎn)義序列,它告訴提示符進(jìn)行一些特別的處理。 例如,上面的 u 部分,告訴提示符展示用戶名, 而 w 則展示工作路徑。
下面是一些你可以在提示符中用到的字符的列表:
- d 當(dāng)前的日期
- h 主機(jī)名
- n 代表?yè)Q行的字符
- A 當(dāng)前的時(shí)間 (HH:MM)
- u 當(dāng)前的用戶
- w (小寫) 整個(gè)工作路徑的全稱
- W (大寫) 工作路徑的簡(jiǎn)短名稱
- $ 一個(gè)提示符號(hào),對(duì)于 root 用戶為 # 號(hào)
- ! 當(dāng)前命令在 shell 歷史記錄中的序號(hào)
下面解釋 w 和 W 選項(xiàng)的區(qū)別:對(duì)于前者,你將看到你所在的工作路徑的完整地址,(例如 /usr/local/bin),而對(duì)于后者, 它則只顯示 bin 這一部分。
現(xiàn)在,我們?cè)撛鯓痈淖兲崾痉? 你需要更改 PS1 環(huán)境變量的內(nèi)容,試試下面這個(gè):
export PS1="I am \u and it is \A $"
現(xiàn)在,你的提示符將會(huì)像下面這樣:
I am mike and it is 11:26 $
從這個(gè)例子出發(fā),你就可以按照你的想法來(lái)試驗(yàn)一下上面列出的其他轉(zhuǎn)義序列。 但等等 – 當(dāng)你登出后,你的這些努力都將消失,因?yàn)樵谀忝看未蜷_(kāi)終端時(shí),PS1 環(huán)境變量的值都會(huì)被重置。解決這個(gè)問(wèn)題的最簡(jiǎn)單方式是打開(kāi) .bashrc 配置文件(在你的家目錄下) 并在這個(gè)文件的最下方添加上完整的 export
命令。在每次你啟動(dòng)一個(gè)新的 shell 會(huì)話時(shí),這個(gè) .bashrc 會(huì)被 Bash
讀取, 所以你的加強(qiáng)的提示符就可以一直出現(xiàn)。你還可以使用額外的顏色來(lái)裝扮提示符。剛開(kāi)始,這將有點(diǎn)棘手,因?yàn)槟惚仨毷褂靡恍┫喈?dāng)奇怪的轉(zhuǎn)義序列,但結(jié)果是非常漂亮的。 將下面的字符添加到你的 PS1字符串中的某個(gè)位置,最終這將把文本變?yōu)榧t色:
\[\e[31m\]
你可以將這里的 31 更改為其他的數(shù)字來(lái)獲得不同的顏色:
- 30 黑色
- 32 綠色
- 33 黃色
- 34 藍(lán)色
- 35 洋紅色
- 36 青色
- 37 白色
所以,讓我們使用先前看到的轉(zhuǎn)義序列和顏色來(lái)創(chuàng)造一個(gè)提示符,以此來(lái)結(jié)束這一小節(jié)的內(nèi)容。深吸一口氣,彎曲你的手指,然后鍵入下面這只“野獸”:
export PS1="(\!) \[\e[31m\] \[\A\] \[\e[32m\]\u@\h \[\e[34m\]\w \[\e[30m\]$"
上面的命令提供了一個(gè) Bash 命令歷史序號(hào)、當(dāng)前的時(shí)間、彩色的用戶或主機(jī)名組合、以及工作路徑。假如你“野心勃勃”,利用一些驚人的組合,你還可以更改提示符的背景色和前景色。非常有用的 Arch wiki 有一個(gè)關(guān)于顏色代碼的完整列表:http://tinyurl.com/3gvz4ec。
Shell 精要
假如你是一個(gè)徹底的 Linux 新手并第一次閱讀這份雜志,或許你會(huì)發(fā)覺(jué)閱讀這些教程有些吃力。 所以這里有一些基礎(chǔ)知識(shí)來(lái)讓你熟悉一些 shell。 通常在你的菜單中, shell 指的是 Terminal、 XTerm 或 Konsole, 當(dāng)你啟動(dòng)它后, 最為實(shí)用的命令有這些:
ls (列出文件名); cp one.txt two.txt (復(fù)制文件); rm file.txt (移除文件); mv old.txt new.txt (移動(dòng)或重命名文件);
cd /some/directory (改變目錄); cd .. (回到上級(jí)目錄); ./program (在當(dāng)前目錄下運(yùn)行一個(gè)程序); ls > list.txt (重定向輸出到一個(gè)文件)。
幾乎每個(gè)命令都有一個(gè)手冊(cè)頁(yè)用來(lái)解釋其選項(xiàng)(例如 man ls – 按 Q 來(lái)退出)。在那里,你可以知曉命令的選項(xiàng),這樣你就知道 ls -la 展示一個(gè)詳細(xì)的列表,其中也列出了隱藏文件, 并且在鍵入一個(gè)文件或目錄的名字的一部分后, 可以使用 Tab 鍵來(lái)自動(dòng)補(bǔ)全。
#p#
Tmux: 針對(duì) shell 的窗口管理器
在文本模式的環(huán)境中使用一個(gè)窗口管理器 – 這聽(tīng)起來(lái)有點(diǎn)不可思議,是吧? 然而,你應(yīng)該記得當(dāng) Web 瀏覽器第一次實(shí)現(xiàn)分頁(yè)瀏覽的時(shí)候吧? 在當(dāng)時(shí), 這是在可用性上的一個(gè)重大進(jìn)步,它減少了桌面任務(wù)欄的雜亂無(wú)章和繁多的窗口列表。 對(duì)于你的瀏覽器來(lái)說(shuō),你只需要一個(gè)按鈕便可以在瀏覽器中切換到你打開(kāi)的每個(gè)單獨(dú)網(wǎng)站, 而不是針對(duì)每個(gè)網(wǎng)站都有一個(gè)任務(wù)欄或?qū)Ш綀D標(biāo)。這個(gè)功能非常有意義。
若有時(shí)你同時(shí)運(yùn)行著幾個(gè)虛擬終端,你便會(huì)遇到相似的情況; 在這些終端之間跳轉(zhuǎn),或每次在任務(wù)欄或窗口列表中找到你所需要的那一個(gè)終端,都可能會(huì)讓你覺(jué)得麻煩。 擁有一個(gè)文本模式的窗口管理器不僅可以讓你像在同一個(gè)終端窗口中運(yùn)行多個(gè) shell 會(huì)話,而且你甚至還可以將這些窗口排列在一起。
另外,這樣還有另一個(gè)好處:可以將這些窗口進(jìn)行分離和重新連接。想要看看這是如何運(yùn)行的最好方式是自己嘗試一下。在一個(gè)終端窗口中,輸入 screen
(在大多數(shù)發(fā)行版本中,它已經(jīng)默認(rèn)安裝了或者可以在軟件包倉(cāng)庫(kù)中找到)。 某些歡迎的文字將會(huì)出現(xiàn) – 只需敲擊 Enter 鍵這些文字就會(huì)消失。 現(xiàn)在運(yùn)行一個(gè)交互式的文本模式的程序,例如 nano
, 并關(guān)閉這個(gè)終端窗口。
在一個(gè)正常的 shell 對(duì)話中, 關(guān)閉窗口將會(huì)終止所有在該終端中運(yùn)行的進(jìn)程 – 所以剛才的 Nano 編輯對(duì)話也就被終止了, 但對(duì)于 screen 來(lái)說(shuō),并不是這樣的。打開(kāi)一個(gè)新的終端并輸入如下命令:
screen -r
瞧,你剛開(kāi)打開(kāi)的 Nano 會(huì)話又回來(lái)了!
當(dāng)剛才你運(yùn)行 screen 時(shí), 它會(huì)創(chuàng)建了一個(gè)新的獨(dú)立的 shell 會(huì)話, 它不與某個(gè)特定的終端窗口綁定在一起,所以可以在后面被分離并重新連接(即 -r 選項(xiàng))。
當(dāng)你正使用 SSH 去連接另一臺(tái)機(jī)器并做著某些工作時(shí), 但并不想因?yàn)橐粋€(gè)脆弱的連接而影響你的進(jìn)度,這個(gè)方法尤其有用。假如你在一個(gè) screen 會(huì)話中做著某些工作,并且你的連接突然中斷了(或者你的筆記本沒(méi)電了,又或者你的電腦報(bào)廢了——不是這么悲催吧),你只需重新連接或給電腦充電或重新買一臺(tái)電腦,接著運(yùn)行 screen -r 來(lái)重新連接到遠(yuǎn)程的電腦,并在剛才掉線的地方接著開(kāi)始。
現(xiàn)在,我們都一直在討論 GNU 的 screen,但這個(gè)小節(jié)的標(biāo)題提到的是 tmux。 實(shí)質(zhì)上, tmux (terminal multiplexer) 就像是 screen 的一個(gè)進(jìn)階版本,帶有許多有用的額外功能,所以現(xiàn)在我們開(kāi)始關(guān)注 tmux。 某些發(fā)行版本默認(rèn)包含了 tmux; 在其他的發(fā)行版本上,通常只需要一個(gè) apt-get、 yum install 或 pacman -S 命令便可以安裝它。
一旦你安裝了它過(guò)后,鍵入 tmux 來(lái)啟動(dòng)它。接著你將注意到,在終端窗口的底部有一條綠色的信息欄,它非常像傳統(tǒng)的窗口管理器中的任務(wù)欄: 上面顯示著一個(gè)運(yùn)行著的程序的列表、機(jī)器的主機(jī)名、當(dāng)前時(shí)間和日期。 現(xiàn)在運(yùn)行一個(gè)程序,同樣以 Nano 為例, 敲擊 Ctrl+B 后接著按 C 鍵, 這將在 tmux 會(huì)話中創(chuàng)建一個(gè)新的窗口,你便可以在終端的底部的任務(wù)欄中看到如下的信息:
0:nano- 1:bash*
每一個(gè)窗口都有一個(gè)數(shù)字,當(dāng)前呈現(xiàn)的程序被一個(gè)星號(hào)所標(biāo)記。 Ctrl+B 是與 tmux 交互的標(biāo)準(zhǔn)方式, 所以若你敲擊這個(gè)按鍵組合并帶上一個(gè)窗口序號(hào), 那么就會(huì)切換到對(duì)應(yīng)的那個(gè)窗口。你也可以使用 Ctrl+B 再加上 N 或 P 來(lái)分別切換到下一個(gè)或上一個(gè)窗口 – 或者使用 Ctrl+B 加上 L 來(lái)在最近使用的兩個(gè)窗口之間來(lái)進(jìn)行切換(有點(diǎn)類似于桌面中的經(jīng)典的 Alt+Tab 組合鍵的效果)。 若需要知道窗口列表,使用 Ctrl+B 再加上 W。
目前為止,一切都還好:現(xiàn)在你可以在一個(gè)單獨(dú)的終端窗口中運(yùn)行多個(gè)程序,避免混亂(尤其是當(dāng)你經(jīng)常與同一個(gè)遠(yuǎn)程主機(jī)保持多個(gè) SSH 連接時(shí))。 當(dāng)想同時(shí)看兩個(gè)程序又該怎么辦呢?
針對(duì)這種情況, 可以使用 tmux 中的窗格。 敲擊 Ctrl+B 再加上 % , 則當(dāng)前窗口將分為兩個(gè)部分:一個(gè)在左一個(gè)在右。你可以使用 Ctrl+B 再加上 O 來(lái)在這兩個(gè)部分之間切換。 這尤其在你想同時(shí)看兩個(gè)東西時(shí)非常實(shí)用, – 例如一個(gè)窗格看指導(dǎo)手冊(cè),另一個(gè)窗格里用編輯器看一個(gè)配置文件。
有時(shí),你想對(duì)一個(gè)單獨(dú)的窗格進(jìn)行縮放,而這需要一定的技巧。 首先你需要敲擊 Ctrl+B 再加上一個(gè) :(冒號(hào)),這將使得位于底部的 tmux 欄變?yōu)樯畛壬?現(xiàn)在,你進(jìn)入了命令模式,在這里你可以輸入命令來(lái)操作 tmux。 輸入 resize-pane -R 來(lái)使當(dāng)前窗格向右移動(dòng)一個(gè)字符的間距, 或使用 -L 來(lái)向左移動(dòng)。 對(duì)于一個(gè)簡(jiǎn)單的操作,這些命令似乎有些長(zhǎng),但請(qǐng)注意,在 tmux 的命令模式(前面提到的一個(gè)分號(hào)開(kāi)始的模式)下,可以使用 Tab 鍵來(lái)補(bǔ)全命令。 另外需要提及的是, tmux 同樣也有一個(gè)命令歷史記錄,所以若你想重復(fù)剛才的縮放操作,可以先敲擊 Ctrl+B 再跟上一個(gè)分號(hào),并使用向上的箭頭來(lái)取回剛才輸入的命令。
最后,讓我們看一下分離和重新連接 - 即我們剛才介紹的 screen 的特色功能。 在 tmux 中,敲擊 Ctrl+B 再加上 D 來(lái)從當(dāng)前的終端窗口中分離當(dāng)前的 tmux 會(huì)話。這使得這個(gè)會(huì)話的一切工作都在后臺(tái)中運(yùn)行、使用 tmux a
可以再重新連接到剛才的會(huì)話。但若你同時(shí)有多個(gè) tmux 會(huì)話在運(yùn)行時(shí),又該怎么辦呢? 我們可以使用下面的命令來(lái)列出它們:
tmux ls
這個(gè)命令將為每個(gè)會(huì)話分配一個(gè)序號(hào); 假如你想重新連接到會(huì)話 1, 可以使用 tmux a -t 1
. tmux 是可以高度定制的,你可以自定義按鍵綁定并更改配色方案, 所以一旦你適應(yīng)了它的主要功能,請(qǐng)鉆研指導(dǎo)手冊(cè)以了解更多的內(nèi)容。
tmux
上圖中, tmux 開(kāi)啟了兩個(gè)窗格: 左邊是 Vim 正在編輯一個(gè)配置文件,而右邊則展示著指導(dǎo)手冊(cè)頁(yè)。
Zsh: 另一個(gè) shell
選擇是好的,但標(biāo)準(zhǔn)同樣重要。 你要知道幾乎每個(gè)主流的 Linux 發(fā)行版本都默認(rèn)使用 Bash shell – 盡管還存在其他的 shell。 Bash 為你提供了一個(gè) shell 能夠給你提供的幾乎任何功能,包括命令歷史記錄,文件名補(bǔ)全和許多腳本編程的能力。它成熟、可靠并文檔豐富 – 但它不是你唯一的選擇。
許多高級(jí)用戶熱衷于 Zsh, 即 Z shell。 這是 Bash 的一個(gè)替代品并提供了 Bash 的幾乎所有功能,另外還提供了一些額外的功能。 例如, 在 Zsh 中,你輸入 ls ,并敲擊 Tab 鍵可以得到 ls 可用的各種不同選項(xiàng)的一個(gè)大致描述。 而不需要再打開(kāi) man page 了!
Zsh 還支持其他強(qiáng)大的自動(dòng)補(bǔ)全功能: 例如,輸入 cd /u/lo/bi 再敲擊 Tab 鍵, 則完整的路徑名 /usr/local/bin 就會(huì)出現(xiàn)(這里假設(shè)沒(méi)有其他的路徑包含 u, lo 和 bi 等字符)。 或者只輸入 cd 再跟上 Tab 鍵,則你將看到著色后的路徑名的列表 – 這比 Bash 給出的簡(jiǎn)單的結(jié)果好看得多。
Zsh 在大多數(shù)的主要發(fā)行版本上都可以得到了; 安裝它后并輸入 zsh 便可啟動(dòng)它。 要將你的默認(rèn) shell 從 Bash 改為 Zsh, 可以使用 chsh 命令。 若需了解更多的信息,請(qǐng)?jiān)L問(wèn) www.zsh.org。
“未來(lái)”的終端
你或許會(huì)好奇為什么包含你的命令行提示符的應(yīng)用被叫做終端。 這需要追溯到 Unix 的早期, 那時(shí)人們一般工作在一個(gè)多用戶的機(jī)器上,這個(gè)巨大的電腦主機(jī)將占據(jù)一座建筑中的一個(gè)房間,人們通過(guò)某些線路,使用屏幕和鍵盤來(lái)連接到這個(gè)主機(jī), 這些終端機(jī)通常被稱為“啞終端”, 因?yàn)樗鼈儾荒芸孔约鹤鋈魏沃匾膱?zhí)行任務(wù) – 它們只展示通過(guò)線路從主機(jī)傳來(lái)的信息,并輸送回從鍵盤的敲擊中得到的輸入信息。
今天,我們?cè)谧约旱臋C(jī)器上執(zhí)行幾乎所有的實(shí)際操作,所以我們的電腦不是傳統(tǒng)意義下的終端,這就是為什么諸如 XTerm、 Gnome Terminal、 Konsole 等程序被稱為“終端模擬器” 的原因 – 他們提供了同昔日的物理終端一樣的功能。事實(shí)上,在許多方面它們并沒(méi)有改變多少。誠(chéng)然,現(xiàn)在我們有了反鋸齒字體,更好的顏色和點(diǎn)擊網(wǎng)址的能力,但總的來(lái) 說(shuō),幾十年來(lái)我們一直以同樣的方式在工作。
所以某些程序員正嘗試改變這個(gè)狀況。 Terminology (http://tinyurl.com/osopjv9), 它來(lái)自于超級(jí)時(shí)髦的 Enlightenment 窗口管理器背后的團(tuán)隊(duì),旨在讓終端步入到 21 世紀(jì),例如帶有在線媒體顯示功能。你可以在一個(gè)充滿圖片的目錄里輸入 ls 命令,便可以看到它們的縮略圖,或甚至可以直接在你的終端里播放視頻。 這使得一個(gè)終端有點(diǎn)類似于一個(gè)文件管理器,意味著你可以快速地檢查媒體文件的內(nèi)容而不必用另一個(gè)應(yīng)用來(lái)打開(kāi)它們。
接著還有 Xiki (www.xiki.org),它自身的描述為“命令的革新”。它就像是一個(gè)傳統(tǒng)的 shell、一個(gè) GUI 和一個(gè) wiki 之間的過(guò)渡;你可以在任何地方輸入命令,并在后面將它們的輸出存儲(chǔ)為筆記以作為參考,并可以創(chuàng)建非常強(qiáng)大的自定義命令。用幾句話是很能描述它的,所以作者 們已經(jīng)創(chuàng)作了一個(gè)視頻來(lái)展示它的潛力是多么的巨大(請(qǐng)看 Xiki 網(wǎng)站的截屏視頻部分)。
并且 Xiki 絕不是那種在幾個(gè)月之內(nèi)就消亡的曇花一現(xiàn)的項(xiàng)目,作者們成功地進(jìn)行了一次 Kickstarter 眾籌,在七月底已募集到超過(guò) $84,000。 是的,你沒(méi)有看錯(cuò) – $84K 來(lái)支持一個(gè)終端模擬器。這可能是最不尋常的集資活動(dòng)了,因?yàn)槟承┋偪竦募一镆呀?jīng)決定開(kāi)始創(chuàng)辦它們自己的 Linux 雜志 ......
下一代終端
許多命令行和基于文本的程序在功能上與它們的 GUI 程序是相同的,并且常常更加快速和高效。我們的推薦有: Irssi (IRC 客戶端); Mutt (mail 客戶端); rTorrent (BitTorrent); Ranger (文件管理器); htop (進(jìn)程監(jiān)視器)。 若給定在終端的限制下來(lái)進(jìn)行 Web 瀏覽, Elinks 確實(shí)做的很好,并且對(duì)于閱讀那些以文字為主的網(wǎng)站例如 Wikipedia 來(lái)說(shuō)。它非常實(shí)用。
微調(diào)配色方案
在《Linux Voice》雜志社中,我們并不迷戀那些養(yǎng)眼的東西,但當(dāng)你每天花費(fèi)幾個(gè)小時(shí)盯著屏幕看東西時(shí),我們確實(shí)認(rèn)識(shí)到美學(xué)的重要性。我們中的許多人都喜歡調(diào)整我 們的桌面和窗口管理器來(lái)達(dá)到完美的效果,調(diào)整陰影效果、擺弄不同的配色方案,直到我們 100% 的滿意(然后出于習(xí)慣,擺弄更多的東西)。
但我們傾向于忽視終端窗口,它理應(yīng)也獲得我們的喜愛(ài),并且在 http://ciembor.github.io/4bit 你將看到一個(gè)極其棒的配色方案設(shè)計(jì)器,對(duì)于所有受歡迎的終端模擬器(XTerm, Gnome Terminal, Konsole 和 Xfce4 Terminal 等都是支持的應(yīng)用。),它可以輸出其設(shè)定。移動(dòng)滑塊直到你看到配色方案最佳, 然后點(diǎn)擊位于該頁(yè)面右上角的
得到方案
按鈕。相似的,假如你在一個(gè)文本編輯器,如 Vim 或 Emacs 上花費(fèi)了很多的時(shí)間,使用一個(gè)精心設(shè)計(jì)的調(diào)色板也是非常值得的。 Solarized http://ethanschoonover.com/solarized 是一個(gè)卓越的方案,它不僅漂亮,而且因追求最大的可用性而設(shè)計(jì),在其背后有著大量的研究和測(cè)試。