Команда Linux для получения списка всех доступных команд и псевдонимов - PullRequest
255 голосов
/ 04 июня 2009

Существует ли команда Linux, в которой перечислены все доступные команды и псевдонимы для этого терминального сеанса?

Как будто вы набрали 'a' и нажали клавишу Tab, но для каждой буквы алфавита. Или запускать псевдоним, а также возвращать команды.

Почему? Я хотел бы запустить следующее и посмотреть, доступна ли команда:

ListAllCommands | grep searchstr

Ответы [ 21 ]

563 голосов
/ 04 июня 2009

Вы можете использовать встроенный bash (1) compgen

  • compgen -c перечислит все команды, которые вы могли бы выполнить.
  • compgen -a перечислит все псевдонимы, которые вы можете запустить.
  • compgen -b перечислит все встроенные модули, которые вы можете запустить.
  • compgen -k перечислит все ключевые слова, которые вы можете запустить.
  • compgen -A function перечислит все функции, которые вы можете запустить.
  • compgen -A function -abck перечислит все вышеперечисленное за один раз.

Проверьте справочную страницу на предмет других дополнений, которые вы можете сгенерировать.

Чтобы прямо ответить на ваш вопрос:

compgen -ac | grep searchstr

должен делать то, что ты хочешь.

38 голосов
/ 04 июня 2009

Добавить в .bashrc

function ListAllCommands
{
    echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 \
        -executable -type f -printf '%P\n' | sort -u
}

Если вам также нужны псевдонимы, то:

function ListAllCommands
{
    COMMANDS=`echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 \
        -executable -type f -printf '%P\n'`
    ALIASES=`alias | cut -d '=' -f 1`
    echo "$COMMANDS"$'\n'"$ALIASES" | sort -u
}
25 голосов
/ 04 июня 2009

Есть

type -a mycommand
Команда

, которая перечисляет все псевдонимы и команды в $ PATH, где используется mycommand . Может использоваться, чтобы проверить, существует ли команда в нескольких вариантах. Кроме этого ... Возможно, есть какой-то скрипт, который анализирует $ PATH и все псевдонимы, но не знает ни о каком таком скрипте.

6 голосов
/ 04 июня 2009

Используйте "which searchstr". Возвращает либо путь двоичного файла, либо настройку псевдонима, если это псевдоним

Edit: Если вы ищете список псевдонимов, вы можете использовать:

alias -p | cut -d= -f1 | cut -d' ' -f2

Добавьте это к любому ответу на поиск в PATH. Предполагается, что вы используете Bash ..

6 голосов
/ 07 сентября 2017

Другие команды не работают для меня во встроенных системах, потому что они требуют bash или более полной версии xargs (busybox был ограничен).

Следующие команды должны работать в любой Unix-подобной системе.

Список по папкам:

ls $(echo $PATH | tr ':' ' ')

Список всех команд по имени

ls $(echo $PATH | tr ':' ' ') | grep -v '/' | grep . | sort
5 голосов
/ 04 июня 2009

Попробуйте этот скрипт:

#!/bin/bash
echo $PATH  | tr : '\n' | 
while read e; do 
    for i in $e/*; do
        if [[ -x "$i" && -f "$i" ]]; then     
            echo $i
        fi
    done
done
3 голосов
/ 24 октября 2012

Для пользователей Mac ( find не имеет -executable и xargs не имеет -d):

echo $PATH | tr ':' '\n' | xargs -I {} find {} -maxdepth 1 -type f -perm '++x'
3 голосов
/ 07 ноября 2014

Полезно перечислить команды на основе ключевых слов, связанных с командой.

Использование: man -k "your keyword"

не стесняйтесь комбинировать с: | grep "another word"

например, чтобы найти текстовый редактор: man -k editor | grep text

2 голосов
/ 04 июня 2009

Попробуйте нажать ALT-? (alt и вопросительный знак одновременно). Дайте ему секунду или две, чтобы составить список. Должно работать в bash.

2 голосов
/ 11 сентября 2017

В качестве альтернативы, вы можете получить удобный список команд в сочетании с краткими описаниями (если у команды есть страница справочника, что есть у большинства):

apropos -s 1 ''

-s 1 returns only "section 1" manpages which are entries for executable programs.

'' is a search for anything. (If you use an asterisk, on my system, bash throws in a search for all the files and folders in your current working directory.)

Тогда вы просто делаете это так, как хотите.

apropos -s 1 '' | grep xdg

выходы:

xdg-desktop-icon (1) - command line tool for (un)installing icons to the desktop
xdg-desktop-menu (1) - command line tool for (un)installing desktop menu items
xdg-email (1)        - command line tool for sending mail using the user's preferred e-mail composer
xdg-icon-resource (1) - command line tool for (un)installing icon resources
xdg-mime (1)         - command line tool for querying information about file type handling and adding descriptions for new file types
xdg-open (1)         - opens a file or URL in the user's preferred application
xdg-screensaver (1)  - command line tool for controlling the screensaver
xdg-settings (1)     - get various settings from the desktop environment
xdg-user-dir (1)     - Find an XDG user dir
xdg-user-dirs-update (1) - Update XDG user dir configuration

Результаты не сортируются, поэтому, если вы ищете длинный список, вы можете бросить | сортировать | в середину, а затем направьте это на пейджер, как меньше / больше / больше. ала:

apropos -s 1 '' | sort | grep zip | less

, который возвращает отсортированный список всех команд, в названии которых содержится «zip» или их краткое описание, и выдает «пейджер« меньше » (Вы также можете заменить «less» на $ PAGER и использовать пейджер по умолчанию.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...