Команда Linux для получения списка всех доступных команд и псевдонимов

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

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

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

ListAllCommands | grep searchstr

21 ответ

Решение

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

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

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

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

compgen -ac | grep searchstr

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

Добавить в.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
}

Здесь

type -a mycommand

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

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

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

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

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

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

ls $(echo $PATH | tr ':' ' ') | grep -v '/' | grep . | sort

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

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 и использовать пейджер по умолчанию.)

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

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

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

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

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

#!/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

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

echo $PATH | tr ':' '\n' | xargs -I {} find {} -maxdepth 1 -type f -perm '++x'

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

Вот решение, которое дает вам список всех исполняемых файлов и псевдонимов. Это также переносимо на системы без xargs -d (например, Mac OS X), и правильно обрабатывает пути с пробелами в них.

#!/bin/bash
(echo -n $PATH | tr : '\0' | xargs -0 -n 1 ls; alias | sed 's/alias \([^=]*\)=.*/\1/') | sort -u | grep "$@"

Использование: myscript.sh [grep-options] patternНапример, чтобы найти все команды, которые начинаются с lsбез учета регистра выполните:

myscript -i ^ls

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

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

не стесняйтесь сочетать с:| grep "another word"

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

Ярлык метод, чтобы перечислить все команды. Откройте терминал и дважды нажмите кнопку "вкладка". Это показывает все команды в терминале

Это зависит от того, что я имею в виду, это зависит от того, какую оболочку вы используете. Вот ограничения, которые я вижу:

  1. должен выполняться в том же процессе, что и ваша оболочка, чтобы перехватывать псевдонимы, функции и переменные, которые влияют на команды, которые вы можете найти, например, PATH или EDITOR, хотя EDITOR может быть вне области видимости. Вы можете иметь неэкспортированные переменные, которые могут влиять на вещи.
  2. это зависит от оболочки или вы уходите в ядро, /proc/pid/enviorn и друзья не имеют достаточно информации

Я использую ZSH, поэтому вот ответ zsh, он выполняет следующие 3 вещи:

  1. путь дампов
  2. сбрасывает псевдонимы
  3. сбрасывает функции, которые находятся в env
  4. сортирует их

вот:

feed_me() {
    (alias | cut -f1 -d= ; hash -f; hash -v | cut -f 1 -d= ; typeset +f) | sort
}

Если вы используете zsh, это должно быть сделано.

Вы всегда можете следующее:

1. Hold the $PATH environment variable value.
2. Split by ":"
3. For earch entry: 
    ls * $entry 
4. grep your command in that output.

Оболочка выполнит команду только в том случае, если они все равно перечислены в пути env var.

Вот функция, которую вы можете поместить в ваш файл bashrc:

функция команда-поиск
{
   oldIFS=${IFS}
   IFS=":"

   для р в ${PATH}
   делать
      ls $p | grep $1
   сделанный

   IFS экспорта =${oldIFS}
}

Пример использования:

$ command-search gnome
гном-аудио-профили-свойства *
гном-вытолкнуть @
гном-брелок *
гном-брелок-демон *
гном-крепление *
гном открыть *
гном-звук-рекордер *
гном-текстовый редактор @
гном-размонтировать @
гном-объемно-контроль *
polkit-гном-авторизации *
vim.gnome*
$

К вашему сведению: IFS - это переменная, которую bash использует для разделения строк.

Конечно, могут быть и лучшие способы сделать это.

Проблема в том, что завершение табуляции ищет ваш путь, но не все команды находятся на вашем пути.

Чтобы найти команды на вашем пути, используя bash, вы можете сделать что-то вроде:

для х в echo $PATH | cut -d":" -f1; сделать ls $x; сделанный

Основные команды:

$ touch:- пользователь для создания пустого файла

Син:- коснитесь имени файла

Пример: сенсорный рама

$ls список файлов и каталогов

$ ls –l Длинный список

Тип файла, права доступа, файлы ссылок, имя пользователя (или) владельца, имя группы, размер файла, отметка времени, имя файла или каталога.

- обычный (или) обычный файл

d каталог

л файл ссылки

ls –a: показать все (включая скрытые файлы)

Скрытые файлы и каталоги начинаются с. (Точка)

найти больше команд @ http://k2schools.com/linux-commands/

Может быть, я неправильно понимаю, но что, если вы нажмете Escape, пока не получите возможности "Показать все X"?

compgen -c > list.txt && wc list.txt

Почему бы вам просто не набрать:

seachstr

В терминале.

Оболочка скажет что-то вроде

seacrhstr: command not found 

РЕДАКТИРОВАТЬ:

Хорошо, я принимаю отрицательный ответ, потому что ответ глуп, я просто хочу знать: что не так с этим ответом!!! Аскер сказал:

и посмотреть, если команда доступна.

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

Возможно, он / она имел в виду "без выполнения команды" или "включить ее в сценарий", но я не могу читать его мысли (не то, что я не могу регулярно, просто он носит дефлектор чтения мыслей)

В Debian: ls /bin/ | grep "whatImSearchingFor"

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