命令別名:保護和服務(wù)
Linux shell 允許你將命令彼此鏈接在一起,一次觸發(fā)執(zhí)行復(fù)雜的操作,并且可以對此創(chuàng)建別名作為快捷方式。
讓我們將繼續(xù)我們的別名系列。到目前為止,你可能已經(jīng)閱讀了我們的關(guān)于別名的***篇文章,并且應(yīng)該非常清楚它們是如何為你省去很多麻煩的最簡單方法。例如,你已經(jīng)看到它們幫助我們減少了輸入,讓我們看看別名派上用場的其他幾個案例。
別名即快捷方式
Linux shell 最美妙的事情之一是可以使用數(shù)以萬計的選項和把命令連接在一起執(zhí)行真正復(fù)雜的操作。好吧,也許這種美麗是在旁觀者的眼中的,但是我們覺得這個功能很實用。
不利的一面是,你經(jīng)常需要記得難以記憶或難以打字出來的命令組合。比如說硬盤上的空間非常寶貴,而你想要做一些清潔工作。你的***步可能是尋找隱藏在你的家目錄里的東西。你可以用來判斷的一個標(biāo)準(zhǔn)是查找不再使用的內(nèi)容。ls
可以幫助你:
ls -lct
上面的命令顯示了每個文件和目錄的詳細(xì)信息(-l
),并顯示了每一項上次訪問的時間(-c
),然后它按從最近訪問到最少訪問的順序排序這個列表(-t
)。
這難以記住嗎?你可能不會每天都使用 -c
和 -t
選項,所以也許是吧。無論如何,定義一個別名,如:
alias lt='ls -lct'
會更容易一些。
然后,你也可能希望列表首先顯示最舊的文件:
alias lo='lt -F | tac'
圖 1:使用 lt 和 lo 別名。
這里有一些有趣的事情。首先,我們使用別名(lt
)來創(chuàng)建另一個別名 —— 這是完全可以的。其次,我們將一個新參數(shù)傳遞給 lt
(后者又通過 lt
別名的定義傳遞給了 ls
)。
-F
選項會將特殊符號附加到項目的名稱后,以便更好地區(qū)分常規(guī)文件(沒有符號)和可執(zhí)行文件(附加了 *
)、目錄文件(以 /
結(jié)尾),以及所有鏈接文件、符號鏈接文件(以 @
符號結(jié)尾)等等。-F
選項是當(dāng)你回歸到單色終端的日子里,沒有其他方法可以輕松看到列表項之間的差異時用的。在這里使用它是因為當(dāng)你將輸出從 lt
傳遞到 tac
時,你會丟失 ls
的顏色。
第三件我們需要注意的事情是我們使用了管道。管道用于你將一個命令的輸出傳遞給另外一個命令時。第二個命令可以使用這些輸出作為它的輸入。在包括 Bash 在內(nèi)的許多 shell 里,你可以使用管道符(|
) 來做傳遞。
在這里,你將來自 lt -F
的輸出導(dǎo)給 tac
。tac
這個命令有點玩笑的意思,你或許聽說過 cat
命令,它名義上用于將文件彼此連接(concat
),而在實踐中,它被用于將一個文件的內(nèi)容打印到終端。tac
做的事情一樣,但是它是以逆序?qū)⒔邮盏降膬?nèi)容輸出出來。明白了嗎?cat
和 tac
,技術(shù)人有時候也挺有趣的。
cat
和 tac
都能輸出通過管道傳遞過來的內(nèi)容,在這里,也就是一個按時間順序排序的文件列表。
那么,在有些離題之后,最終我們得到的就是這個列表將當(dāng)前目錄中的文件和目錄以新鮮度的逆序列出(即老的在前)。
***你需要注意的是,當(dāng)在當(dāng)前目錄或任何目錄運行 lt
時:
# 這可以工作:
lt
# 這也可以:
lt /some/other/directory
……而 lo
只能在當(dāng)前目錄奏效:
# 這可工作:
lo
# 而這不行:
lo /some/other/directory
這是因為 Bash 會展開別名的組分。當(dāng)你鍵入:
lt /some/other/directory
Bash 實際上運行的是:
ls -lct /some/other/directory
這是一個有效的 Bash 命令。
而當(dāng)你鍵入:
lo /some/other/directory
Bash 試圖運行:
ls -lct -F | tac /some/other/directory
這不是一個有效的命令,主要是因為 /some/other/directory
是個目錄,而 cat
和 tac
不能用于目錄。
更多的別名快捷方式
alias lll='ls -R'
會打印出目錄的內(nèi)容,并深入到子目錄里面打印子目錄的內(nèi)容,以及子目錄的子目錄,等等。這是一個查看一個目錄下所有內(nèi)容的方式。mkdir='mkdir -pv'
可以讓你一次性創(chuàng)建目錄下的目錄。按照mkdir
的基本形式,要創(chuàng)建一個包含子目錄的目錄,你必須這樣:
mkdir newdir
mkdir newdir/subdir
或這樣:
mkdir -p newdir/subdir
而用這個別名你將只需要這樣就行:
mkdir newdir/subdir
你的新 mkdir
也會告訴你創(chuàng)建子目錄時都做了什么。
別名也是一種保護
別名的另一個好處是它可以作為防止你意外地刪除或覆寫已有的文件的保護措施。你可能聽說過這個 Linux 新用戶的傳言,當(dāng)他們以 root 身份運行:
rm -rf /
整個系統(tǒng)就爆了。而決定輸入如下命令的用戶:
rm -rf /some/directory/ *
就很好地干掉了他們的家目錄的全部內(nèi)容。這里不小心鍵入的目錄和 *
之間的那個空格有時候很容易就會被忽視掉。
這兩種情況我們都可以通過 alias rm='rm -i'
別名來避免。-i
選項會使 rm
詢問用戶是否真的要做這個操作,在你對你的文件系統(tǒng)做出不可彌補的損失之前給你第二次機會。
對于 cp
也是一樣,它能夠覆蓋一個文件而不會給你任何提示。創(chuàng)建一個類似 alias cp='cp -i'
來保持安全吧。
下一次
我們越來越深入到了腳本領(lǐng)域,下一次,我們將沿著這個方向,看看如何在命令行組合命令以給你真正的樂趣,并可靠地解決系統(tǒng)管理員每天面臨的問題。