Shell - Как найти каталог какой-либо команды?
Я знаю, что когда вы находитесь в оболочке, единственными командами, которые могут быть использованы, являются те, которые можно найти в каком-то каталоге, установленном в PATH.
Даже я не знаю, как посмотреть, что происходит на моей переменной PATH (и это еще один хороший вопрос, на который можно ответить), что я хотел бы знать:
Я прихожу к оболочке и пишу:
$ lshw
Я хочу знать команду на оболочке, которая может сказать мне, где эта команда находится. Другими словами, где находится этот "исполняемый файл"?
Что-то вроде:
$ location lshw
/usr/bin
Кто-нибудь?
Ответы
Ответ 1
Если вы используете 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
нет).
Ответ 2
Вот так:
which lshw
Чтобы увидеть все команды, соответствующие вашему пути:
which -a lshw
Ответ 3
PATH
- это переменная среды и может отображаться с помощью команды echo:
echo $PATH
Это список путей, разделенных символом двоеточия ':
'
Команда which
сообщает, какой файл запускается при запуске команды:
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
Ответ 4
~$ 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
Ответ 5
В оболочке TENEX C, tcsh, можно перечислить расположение команд или, если это встроенная команда, с помощью команды where
, например:
tcsh% where python
/usr/local/bin/python
/usr/bin/python
tcsh% where cd
cd is a shell built-in
/usr/bin/cd
Ответ 6
Оболочка Korn ksh
предлагает встроенный whence
, который идентифицирует другие встроенные встроенные оболочки, макросы и т.д. Однако команда which
более переносима.
Ответ 7
Альтернативой type -a
является command -V
Так как в большинстве случаев меня интересует только первый результат, я также pipe с головы. Таким образом, экран не будет заполнен кодом в случае использования функции bash.
command -V lshw | head -n1