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