2015-03-01

Ubuntu 執行真正的內建指令

如果登入到了一台被高度客制化過的 Ubuntu 或 Linux 系統的話,有時候你在執行的指令可能不是你真正想執行的那個指令,因為,管理者為了操作方便,可以利用 alias、shopt 或自定 script 的方式來把原來的指令給蓋掉,所以,當你執行 ls 指令的時候,也許,執行的就不只是單純的 ls 指令哩 !



阿舍偶爾在借用別人的電腦或代看 Server 的時候,就會遇到類似的問題,而通常,阿舍覺得跑起來怪怪的時候,就會用 type 指令來檢查一下這個跑起來怪怪的指令哩 ! 舉例來說,假設有人用 alias 把 ls 指令改成 'ls -la',因此,當阿舍每次執行 ls 時,就會是執行 'ls -la',然後,阿舍用 type 指令檢查一下,就會知道,原來,ls 指令已經被 alias 蓋掉了哩 !

$ alias ls='ls -la'
$ type ls
$ ls is aliased to `ls -la'

不過,每個指令都要去檢查就太麻煩了,後來,阿舍就發現了另一個可以應用在這種情況下的好用指令,就叫做 'command',這個 command 指令有和 type 指令相同的功能 (如下面指令所示),可以照出指令的原形,但是,更好用的是,command 指令可以要求只用內建的指令來執行哩 !

# 效果同 type
$ command -v ls
alias ls='ls -a -l'

因此,當阿舍用下面這一行指令來執行時,就是真的執行 /bin 裡的那支 ls 程式而不是 alias 的那一支哩 ! 所以,當你在陌生的環境操作,想要保險一點的話,就可以在前加個 command 指令來執行指令,就可以比較確保不是在執行被加工過的指令囉 ! ...

$ command ls

# command 後面的指令用法就和一般沒什麼不同
$ command ls -l /bin | grep ls

用 command 執行的結果同原始指令


推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

2 則留言 :

RJ 提到...

執行指令時還要在開頭打 command 太長了...只要指令前面加上反斜線 '\' 就可以了
當然就沒有 "command -v" 可以查,不過要查直接打 type 比較短XD

Arthur 提到...

Hello,

原來還有斜線這一招可用 ... Cool ! Cool ! 阿舍不知道有這招哩 ! ... 呵呵 !

多謝囉 ! ... ^^=

張貼留言

歡迎留言提問和討論 .... 😁