Команда 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
Ярлык метод, чтобы перечислить все команды. Откройте терминал и дважды нажмите кнопку "вкладка". Это показывает все команды в терминале
Это зависит от того, что я имею в виду, это зависит от того, какую оболочку вы используете. Вот ограничения, которые я вижу:
- должен выполняться в том же процессе, что и ваша оболочка, чтобы перехватывать псевдонимы, функции и переменные, которые влияют на команды, которые вы можете найти, например, PATH или EDITOR, хотя EDITOR может быть вне области видимости. Вы можете иметь неэкспортированные переменные, которые могут влиять на вещи.
- это зависит от оболочки или вы уходите в ядро, /proc/pid/enviorn и друзья не имеют достаточно информации
Я использую ZSH, поэтому вот ответ zsh, он выполняет следующие 3 вещи:
- путь дампов
- сбрасывает псевдонимы
- сбрасывает функции, которые находятся в env
- сортирует их
вот:
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"?
Почему бы вам просто не набрать:
seachstr
В терминале.
Оболочка скажет что-то вроде
seacrhstr: command not found
РЕДАКТИРОВАТЬ:
Хорошо, я принимаю отрицательный ответ, потому что ответ глуп, я просто хочу знать: что не так с этим ответом!!! Аскер сказал:
и посмотреть, если команда доступна.
Ввод команды скажет вам, если она доступна!
Возможно, он / она имел в виду "без выполнения команды" или "включить ее в сценарий", но я не могу читать его мысли (не то, что я не могу регулярно, просто он носит дефлектор чтения мыслей)