Предположим, я могу набрать abc
в командной строке, и он запустится (поэтому оболочка не говорит «abc: команда не найдена»).
Как я могу узнать, что такое abc
? Это сценарий? Программа? Псевдоним?
Вы можете использовать команду type
, например. введите abc
. Например, в оболочке bash:
$ type while cd ls gcc apt
while is a shell keyword
cd is a shell builtin
ls is aliased to `ls --color=auto'
gcc is /usr/bin/gcc
apt is hashed (/usr/bin/apt)
Команда plain type
показывает только первый результат. Если существует несколько версий abc
в разных местах на вашем ПУТЬ
, или abc
предоставляется как ключевое слово оболочки и внешний исполняемый файл, либо для просмотра обоих версии команды с псевдонимом и без псевдонима, вы можете использовать type -a
, чтобы перечислить их все, например:
$ type -a time
time is a shell keyword
time is /usr/bin/time
$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
$ type -a datamash
datamash is /usr/local/bin/datamash
datamash is /usr/bin/datamash
В bash, type
сам по себе является встроенной оболочкой. Другие оболочки, такие как zsh
и ksh
и dash
(который предоставляет / bin / sh
в Ubuntu), предоставляют аналогичные функции (хотя dash
в настоящее время не предоставляет тип -a
). В tcsh
ближайшим эквивалентом является встроенная which
команда - не путать с внешней командой which
- см. Почему бы не использовать «which» ? Что тогда использовать?
Для команд, которые определены как внешние программы (т.е. имеют путь, например / usr / bin / gcc
), вы можете использовать команду file
, чтобы найти из какой программы:
$ file /bin/ls /usr/bin/gcc /usr/sbin/adduser
/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f15ad836be3339dec0e2e6a3c637e08e48aacbd, for GNU/Linux 3.2.0, stripped
/usr/bin/gcc: symbolic link to gcc-9
/usr/sbin/adduser: Perl script text executable
Я предполагаю, что мы говорим об оболочках bash
(или, может быть, zsh
, если это достаточно похоже) здесь ...
Команды типа , которые
и whereis
, о которых упоминалось в других ответах, ищут соответствующие файлы в каталогах, перечисленных в переменной среды PATH
. Таким образом, вы также можете просто проверить наличие команды с именем abc
в этих каталогах вручную. Команда whereis
делает немного больше: проверяет места, перечисленные в других переменных среды, ищет файлы, соответствующие имени, заданному с некоторыми стандартными расширениями, и т. Д. Кроме того, если найдено abc
в нескольких местах, который
показывает только тот, который будет запущен, тогда как whereis
показывает их все.
Оболочка также может отображать abc
в псевдоним оболочки или функцию оболочки. Псевдонимы могут быть перечислены с помощью встроенной команды alias
, и они довольно просты.
Имена функций оболочки могут быть перечислены с помощью typeset -F
, поэтому вы можете искать в выходных данных этой команды abc
. Если вы хотите установить, какой код связан с данной функцией оболочки, вы можете использовать тип abc
.
Предположим, я могу ввести
abc
в командной строке, и он делает что угодно, но возвращаетсяabc: команда не найдена
Как я могу узнать, что
abc
является или делает? Это скрипт? Программа? Псевдоним?
Ничего из вышеперечисленного. Если это не найдено, значит, это ничего не значит. Вы можете создать или установить (или добавить в путь поиска) скрипт, или программу, или псевдоним с именем abc
, тогда это будет скрипт, или программа, или псевдоним. Но на данный момент это ничто.
Для уже установленных команд используйте ответ steeldriver'а.
О неустановленных командах читайте ниже.
Существует специальный пакет под названием command-not-found
. Его назначение
Предлагать установку пакетов в интерактивных сессиях bash
После установки этот пакет будет выполнять свою работу и предлагать вам установить deb-пакет с известным исполняемым именем.
Если вам известно имя исполняемого файла и/или часть пути к нему, то вы можете найти его пакет, используя один из двух вариантов:
local apt-file
by
sudo apt-get install apt-file
sudo apt-file update
apt-file search bin/htop
чтобы получить что-то вроде
htop: /usr/bin/htop
онлайн, используя поиск содержимого пакета на https://packages.ubuntu.com - смотрите результаты по этой ссылке.
Есть пара других возможностей:
which abc
вернет местоположение программы abc в вашей системе.
Например,
which cat
/bin/cat
Если ваша программа abc поставлялась с какой-либо документацией, можно найти больше о ней, выполнив
man abc
Это покажет вам страницу руководства, если таковая имеется для этой программы. Вы можете узнать гораздо больше о его использовании, параметрах командной строки и параметрах. Вы даже можете найти примеры того, как использовать abc или веб-страницу, где сопровождающие поддерживают программу.
Альтернативой man или manual страницам является утилита, называемая info.Некоторые сопровождающие программы хотят предоставить вам тот же или похожий контент на мужскую страницу, используя вместо этого информацию.
info abc
, например, покажет вам, какая помощь может быть предложена.
Поскольку вы упомянули псевдонимы, вы можете показать псевдонимы и их определения с помощью команды alias
alias
Вот пример выходных данных на моей машине Ubuntu 20.04
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echoterminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'