Как найти источник операции в командной строке?

Предположим, я могу набрать abc в командной строке, и он запустится (поэтому оболочка не говорит «abc: команда не найдена»).

Как я могу узнать, что такое abc ? Это сценарий? Программа? Псевдоним?

18
задан 27 June 2021 в 15:09

5 ответов

Вы можете использовать команду 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
26
ответ дан 28 July 2021 в 11:24

Я предполагаю, что мы говорим об оболочках bash (или, может быть, zsh , если это достаточно похоже) здесь ...

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

Оболочка также может отображать abc в псевдоним оболочки или функцию оболочки. Псевдонимы могут быть перечислены с помощью встроенной команды alias , и они довольно просты.

Имена функций оболочки могут быть перечислены с помощью typeset -F , поэтому вы можете искать в выходных данных этой команды abc . Если вы хотите установить, какой код связан с данной функцией оболочки, вы можете использовать тип abc .

-1
ответ дан 28 July 2021 в 11:24

Предположим, я могу ввести abc в командной строке, и он делает что угодно, но возвращается

abc: команда не найдена

Как я могу узнать, что abc является или делает? Это скрипт? Программа? Псевдоним?

Ничего из вышеперечисленного. Если это не найдено, значит, это ничего не значит. Вы можете создать или установить (или добавить в путь поиска) скрипт, или программу, или псевдоним с именем abc, тогда это будет скрипт, или программа, или псевдоним. Но на данный момент это ничто.

-3
ответ дан 28 July 2021 в 11:24

Для уже установленных команд используйте ответ 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 - смотрите результаты по этой ссылке.

6
ответ дан 28 July 2021 в 11:24

Есть пара других возможностей:

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'
3
ответ дан 28 July 2021 в 11:24

Другие вопросы по тегам:

Похожие вопросы: