我知道,當你在shell上時,可以使用的唯一命令是可以在PATH上設置的某個目錄中找到的命令。 即使我不知道如何看到我的PATH變量上有哪些目錄(這是另一個可以回答的好問題),我想知道的是:外殼 - 如何找到一些命令的目錄?
我來找殼並寫下:
$ lshw
我想知道一個shell命令,可以告訴我這個命令位於何處。換句話說,這個「可執行文件」位於何處?
喜歡的東西:
$ location lshw
/usr/bin
有人嗎?
我知道,當你在shell上時,可以使用的唯一命令是可以在PATH上設置的某個目錄中找到的命令。 即使我不知道如何看到我的PATH變量上有哪些目錄(這是另一個可以回答的好問題),我想知道的是:外殼 - 如何找到一些命令的目錄?
我來找殼並寫下:
$ lshw
我想知道一個shell命令,可以告訴我這個命令位於何處。換句話說,這個「可執行文件」位於何處?
喜歡的東西:
$ location lshw
/usr/bin
有人嗎?
如果你使用bash或zsh中,使用此:
type -a lshw
這將顯示該目標是否是一個內置的,函數,別名或外部可執行文件。如果是後者,它會顯示它出現在你的每個地方PATH
。
bash$ type -a lshw
lshw is /usr/bin/lshw
bash$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
bash$ zsh
zsh% type -a which
which is a shell builtin
which is /usr/bin/which
在bash,對於功能type -a
也將顯示函數定義。你可以使用declare -f functionname
來做同樣的事情(你必須使用它作爲zsh,因爲type -a
不會)。
像這樣:
which lshw
此外,它還可以查看所有在您的路徑中匹配的命令。 – AlG 2010-05-19 20:25:18
我相信這隻適用於命令($ PATH可執行文件),而不是函數。 – 2015-12-08 23:36:37
~$ echo $PATH
/home/jack/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
~$ whereis lshw
lshw: /usr/bin/lshw /usr/share/man/man1/lshw.1.gz
PATH
是一個環境變量,並且可以通過echo命令被顯示:
echo $PATH
這是通過冒號'分隔的路徑列表:
'
which
command t當你運行一個命令時,你會發現哪個文件被執行:
which lshw
有時你得到的是一個符號鏈接的路徑;如果你想跟蹤該鏈接到實際的可執行的生活,你可以使用readlink
和飼料它的which
輸出:
readlink -f $(which lshw)
的-f
參數指示readlink
保持遞歸以下符號鏈接。
下面是我的機器的例子:
$ which firefox
/usr/bin/firefox
$ readlink -f $(which firefox)
/usr/lib/firefox-3.6.3/firefox.sh
Korn shell中,ksh
,提供whence
內置,標識等外殼內置插件,宏等which
命令更便於攜帶,然而。
在ksh中,'whence -a'類似於Bash的'type -a'。 – 2010-05-20 01:16:49
謝謝大家誰回答,但這個答案是最令人興奮的!謝謝!我在想我是瘋了,因爲我(很久以前)定義了一種方法來做到這一點:'更新',並且這已經做了'apt-get update; apt-get dist-upgrade'給我。但是現在,我試圖在某處找到一些update.sh文件,而我找不到它。這就是我開始這個問題的原因。但是現在,使用'type -a update'我發現這只是我的〜home中的.bashrc上定義的別名。真的很感謝你。 – 2010-05-20 13:36:50
@ Gabriel:如果你不熟悉'locate',它可以幫助查找文件。它使用由'updatedb'維護的數據庫,該數據庫是從cron作業運行的。由於'locate'搜索數據庫而不是整個文件系統,它比'find'(可以作爲最後的手段)要快得多。 – 2010-05-20 14:10:10
謝謝。我將學習這個工具,並且看看updatedb是如何計劃在Ubuntu的cronjob上運行的。 – 2010-05-20 15:58:26