Команда Linux для получения списка всех доступных команд и псевдонимов
Есть ли команда Linux, которая будет перечислять все доступные команды и псевдонимы для этого сеанса терминала? Как будто вы набрали «a» и нажали вкладку, но для каждой буквы алфавита. Или запускайте «псевдоним», но также возвращаете команды. Почему? Я хотел бы запустить следующее и посмотреть, доступна ли команда:
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
должен делать то, что вам нужно.
Есть ли эквивалент этого для csh / tcsh? Эти терминалы также имеют какую-то функцию автозаполнения, используемую на вкладке, так что, может быть, что-то существует?
Вместо compgen | grep , может быть более эффективно передать строку в качестве аргумента самой compgen (если он известен как префикс, как подразумевается в вопросе). В этом случае это будет compgen -ac searchstr .
На самом деле, Ubuntu показывает «ничего не подходит» на whatis compgen и «Нет ручного ввода» для man compgen .
@MarAvFe: Это потому, что это встроенная команда bash , а не отдельная команда со своей собственной страницей руководства. Вам нужно прочитать help compgen страницу bash(1) или запустить help compgen в командной строке bash .
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 >
Это очень близко, но это не включая псевдонимы. Как я могу добавить псевдоним | сократить -f1 до результатов, но до сортировки?
Зачем беспокоиться о сортировке, если единственная цель состоит в том, чтобы в любом случае поставить вывод через grep? Философия Unix состоит в том, чтобы создавать простые инструменты, а затем объединять их в цепочки, если это необходимо, поэтому не включайте сортировку в ListAllCommands и, если пользователь хочет отсортировать вывод, он может это сделать.
@fotomut Может быть, вы используете Mac OS? На Mac вы можете вместо этого запустить: find . -type f -exec sh -c ‘test -x <> && echo <>‘ \; Это сработало для меня при рекурсивном поиске исполняемых файлов в текущей папке.
@VictorZamanian На самом деле я ssh в Unix. Но ответ хранилища работает для меня на моем unix и моем mac тоже.
Это не находит команды, которые являются символическими ссылками на исполняемые файлы. Используйте опцию -L on, чтобы следовать символическим ссылкам к их месту назначения. Примечание: -L является опцией, а не частью соответствующего выражения, поэтому его необходимо поместить перед путем в командной строке. В этом случае find -L <>
Возможно, вы захотите перенаправить STDERR в / dev / null, чтобы подавить несуществующие предупреждения каталога. echo -n $PATH | xargs -d : -I <> find <> -maxdepth 1 -executable -type f -printf ‘%P\n’ 2> /dev/null | sort -u (+1 для совместимости с zsh)
в которой перечислены все псевдонимы и команды в $PATH, где используется mycommand. Может использоваться для проверки наличия команды в нескольких вариантах. Помимо этого. Вероятно, существует около script, который анализирует $PATH и все псевдонимы, но не знает о таких script.
Даже если это не ответ на вопрос, я думаю, что это лучшее решение проблемы, чем призыв к grep. Таким образом, вы можете выполнить команду -a foo, и если foo недоступен, она возвращает команду not found или что-то в этом роде. Таким образом, вы можете проверить команду без вызова самой команды.
На самом деле это ответ на вопрос, поскольку ОП спросил: «Я хотел бы выполнить следующее и посмотреть, доступна ли команда», поэтому цель состоит в том, чтобы проверить, доступна ли команда, и этот ответ четко работает.
@lothar, что если команда, которую вы ищете, это что-то вроде «startserver» ?, «serverstart» ?, «server-что-or-other» ?. Я знаю, я просто «grep -i» для сервера и посмотреть, если это там. К сожалению. Бззз, не с этим решением. matey 🙂 Я не собираюсь опровергать этот ответ (поскольку он полезен, даже если он ограничен), но полное решение будет учитывать, что grep предназначен для регулярных выражений , а не только для фиксированных строк.
Используйте «which searchstr». Возвращает либо путь к двоичному, либо псевдониму, если он имеет псевдоним
Изменить: Если вы ищете список псевдонимов, вы можете использовать:
alias -p | cut -d= -f1 | cut -d' ' -f2
Добавьте это к любому интересующему вас поисковому запросу PATH. Предполагается, что вы используете bash..
Попробуйте выполнить script:
#!/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
Пока это единственное решение кода, которое делает это для всех команд, а не просто для того, чтобы увидеть, существует ли данная известная команда. +1.
метод быстрого вызова для отображения всех команд. Откройте терминал и дважды нажмите кнопку «Tab». Thats показывает все команды в терминале
Полезно перечислять команды на основе ключевых слов, связанных с командой.
Использование: man -k «your keyword»
не стесняйтесь сочетать: | grep «another word»
например, чтобы найти текстовый редактор: man -k editor | grep text
Для пользователей Mac (find не имеет -executable и xargs не имеет -d):
echo $PATH | tr ':' '\n' | xargs -I <> find <> -maxdepth 1 -type f -perm '++x'
Спасибо за это. На самом деле я использую не-Mac Unix, где ответ @AntsAasma не работает. Это работает для меня на Mac и мой Unix тоже. Какую команду я могу набрать, чтобы определить версию Unix, на которой я нахожусь, чтобы я мог ответить здесь, чтобы помочь другим в моей проблеме?
Вот решение, которое дает вам список всех исполняемых файлов и псевдонимов. Он также переносится в системы без 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 , без учета регистра, do:
Попробуйте нажать ALT-? (alt и вопросительный знак одновременно). Дайте ему второй или два, чтобы создать список. Он должен работать в bash.
Это зависит от того, что я имею в виду, это зависит от того, какую оболочку вы используете. вот ограничения, которые я вижу:
- должен работать в том же процессе, что и ваша оболочка, для поиска псевдонимов и функций и переменных, которые будут влиять на команды, которые вы можете найти, подумайте о PATH или EDITOR, хотя РЕДАКТОР может оказаться вне сферы действия. У вас могут быть невыполненные переменные, которые могут влиять на вещи.
- это оболочка специфическая или ваш выход в ядро, /proc/pid/enviorn и друзей не хватает информации
Я использую ZSH, поэтому вот ответ zsh, он выполняет следующие 3 вещи:
- dumps path
- выдает имена псевдонимов
- выдает функции, находящиеся в env
- сортирует их
Если вы используете 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.
В качестве альтернативы вы можете получить удобный список команд в сочетании с быстрыми описаниями (если у команды есть справочная страница, что больше всего):
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.)
Затем вы просто смажете его, как хотите.
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 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 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 и использовать пейджер по умолчанию.)
Справочник 70 основных команд Linux: полное описание с примерами
Одним из коренных отличий семейства ОС Linux от ОС Windows является ведущая роль командной строки или терминала в администрировании системы. Для успешной работы с «Линукс» одного графического интерфейса недостаточно. Полноценное управление тут возможно только через терминал. А в работе с терминалом никак не обойтись без изучения основных команд Linux.
В Linux насчитывается несколько сотен основных команд и их модификаций. Они группируются по нескольким категориям. По расположению — могут быть утилитами командной строки или встроенной функцией командной оболочки. По частоте применения – используемыми постоянно, эпизодически и редко. По типам действий – от получения справки до управления файлами и процессами. Именно третья, функциональная составляющая и станет основой группировки утилит в этой статье.
В обзоре собраны все важнейшие команды Linux, которые могут пригодиться для администрирования ОС Linux. Статья рассчитана как на новичков, так и на продвинутых пользователей, уже знакомых с основным функционалом терминала. Эту своеобразную шпаргалку можно смело добавлять в закладки всем, кто хочет извлечь из «Линукс» максимум полезных свойств и повысить свою продуктивность в несколько раз.
Справочная информация / документация
man
(Manual). Показывает инструкцию к программам и командам Linux. Чтобы получить руководство для программы, наберите: