首頁 > 軟體

Linux命令別名:定義自己的命令

2020-06-16 16:40:27

學習如何建立別名:你可以將太長或難以記憶的命令打包成你自己構建的命令。

命令別名Alias在 Linux shell 中指的是將一些太長或者太難記的多個命令組合起來,成為一個由使用者自己構建的命令。

可以通過 alias 命令來建立命令別名。在 alias 後面跟上想要建立的別名名稱、一個等號(=),以及希望使用這個別名來執行的命令,這樣一個命令別名就建立好了。舉個例子,ls 命令在預設情況下是不會對輸出的內容進行著色的,這樣就不能讓使用者一眼分辨出目錄、檔案和連線了。對此,可以建立這樣一個命令別名,在輸出目錄內容的時候為輸出內容著色:

  1. alias lc='ls --color=auto'

其中 lc 是自定義的命令別名,代表 “list with color” 的意思。在建立命令別名的時候,需要先確認使用的別名是不是已經有對應的命令了,如果有的話,原本的命令就會被覆蓋掉了。注意,定義命令別名的時候,= 兩端是沒有空格的。當執行 lc 的時候,就相當於執行了 ls --color 命令。

此後,執行 lc 列出目錄內容的時候,就會輸出帶有著色的內容了。

你可能會發現你在執行 ls 的時候,本來就是輸出帶有著色的內容。那是因為大部分 Linux 發行版都已經將 ls 設定為帶有著色的命令別名了。

可以直接使用的命令別名

實際上,執行不帶任何內容的 alias 命令就可以看到當前已經設定的所有命令別名。對於不同的發行版,包含的命令別名不盡相同,但普遍都會有以下這些命令別名:

  • alias ls='ls --color=auto':這個命令別名在前面已經提到過了。--color=auto 引數會讓 ls 命令在通過標準輸出在終端中顯示內容時進行著色,而其它情況(例如通過管道輸出到檔案)下則不進行著色。--color 這個引數還可以設定為 alwaysnever
  • alias cp='cp -i'-i 引數代表“互動interactive”。在使用 cp 命令複製檔案的時候,可能會無意中覆蓋現有的檔案,在使用了 -i 引數之後,cp 命令會在一些關鍵操作前向使用者發出詢問。
  • alias free='free -m':在 free 命令後面加上 -m 引數,就可以將輸出的記憶體資訊以 MiB 這個更方面閱讀和計算的單位輸出,而不是預設的 Byte 單位。

你使用的發行版自帶的命令別名可能多多少少和上面有些差別。但你都可以在命令前面加上 修飾符來使用命令的最基本形式(而不是別名)。例如:

  1. free

就是直接執行 free,而不是 free -m。還有:

  1. ls

執行的就是不帶有--color=auto 引數的 ls

如果想要持久地儲存命令別名,可以在 .bashrc 檔案中進行修改,而它來源於我們的 /etc/skel 目錄

使用命令別名糾正錯誤

各種發行版的設計者都會盡量設定使用者可能需要用到的命令別名。但是不同的使用者的習慣各不相同,一些使用者可能剛從其它作業系統遷移到 Linux,而不同作業系統的基本命令又因 shell 而異。因此,對於剛從 Windows/MS-DOS 系統遷移到 Linux 系統的使用者,不妨使用

  1. aliasdir='ls'

這個命令別名來列出目錄內容。

類似地,

  1. alias copy='cp'
  2. alias move='mv'

也可以在尚未完全熟悉 Linux 的時候用得順手。

還有一種情況,就是在經常出現輸入錯誤的場合中做出容錯,例如,對於我來說, Administration 這個單詞就很難快速正確地輸入,因此很多使用者都會設定類似這樣的別名:

  1. alias sl='ls'

以及

  1. alias gerp='echo "You did it *again*!"; grep'

grep 命令最基本的用途就是在檔案中查詢字串,在熟悉這個命令之後,它一定是最常用的命令之一,因此輸入錯誤導致不得不重輸命令就很令人抓狂。

在上面 gerp 的例子中,包含的不只是一條命令,而是兩條。第一條命令 echo "You did it *again*!" 輸出了一條提醒使用者拼寫錯誤的訊息,然後使用分號()把兩條命令隔開,再往後才是 grep 這一條正確的命令。

在我的系統上使用 gerp 來搜尋 /etc/skel/.bashrc 中包含“alias”這個單詞的行,就會輸出以下內容:

  1. $ gerp -R alias/etc/skel/.bashrc
  2. You did it *again*!
  3. aliasls='ls --color=auto'
  4. aliasgrep='grep --colour=auto'
  5. alias egrep='egrep --colour=auto'
  6. alias fgrep='fgrep --colour=auto'
  7. aliascp="cp -i"
  8. aliasdf='df -h'
  9. alias free='free -m'
  10. alias np='nano -w PKGBUILD'
  11. aliasmore=less
  12. shopt -s expand_aliases

在命令別名中以固定的順序執行多個命令,甚至更進一步,把多個命令串連起來,讓後面的命令可以使用到前面的命令的執行結果。這樣的做法已經非常接近 bash 指令碼了。這篇文章已經接近尾聲,我們將在下一篇文章中詳細介紹。

如果想要刪除在終端中臨時設定的別名,可以使用 unalias 命令。

  1. unalias gerp

如果想要持久儲存命令別名,可以將命令別名放在使用者主目錄的 .bashrc 檔案中。


IT145.com E-mail:sddin#qq.com