Вопрос:

Shell - Как найти каталог какой-то команды?

linux shell command-line

85302 просмотра

6 ответа

1970 Репутация автора

Я знаю, что когда вы находитесь в оболочке, единственными командами, которые можно использовать, являются те, которые можно найти в некотором каталоге, установленном в PATH. Даже я не знаю, как узнать, какие каталоги находятся в моей переменной PATH (и это еще один хороший вопрос, на который можно ответить), что я хотел бы знать:

Я прихожу к раковине и пишу:

$ lshw

Я хочу знать команду оболочки, которая может сказать мне, где находится эта команда. Другими словами, где находится этот «исполняемый файл»?

Что-то вроде:

$ location lshw
/usr/bin

Кто-нибудь?

Автор: Gabriel L. Oliveira Источник Размещён: 19.05.2010 08:21

Ответы (6)


55 плюса

609107 Репутация автора

Как это:

which lshw

Чтобы увидеть все команды, которые соответствуют вашему пути:

which -a lshw 
Автор: Ignacio Vazquez-Abrams Размещён: 19.05.2010 08:23

5 плюса

13231 Репутация автора

~$ 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
Автор: Jack Размещён: 19.05.2010 08:25

17 плюса

86536 Репутация автора

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
Автор: hasen Размещён: 19.05.2010 08:28

0 плюса

2435 Репутация автора

Оболочка Korn kshпредлагает whenceвстроенную оболочку, которая определяет другие встроенные функции оболочки, макросы и т. Д. Однако эта whichкоманда более переносима.

Автор: mpez0 Размещён: 20.05.2010 01:12

159 плюса

256228 Репутация автора

Решение

Если вы используете 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как не делает).

Автор: Dennis Williamson Размещён: 20.05.2010 01:14

2 плюса

2700 Репутация автора

В оболочке 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
Автор: Pierz Размещён: 04.04.2018 06:30
Вопросы из категории :
32x32