Commande Linux pour lister toutes les commandes et alias disponibles

Existe-t-il une commande Linux qui listera toutes les commandes et alias disponibles pour cette session de terminal?

Comme si vous tapiez ' A ' et appuyez sur tab, mais pour chaque lettre de l'alphabet. Ou exécuter 'alias' mais aussi renvoyer des commandes.

Pourquoi? Je voudrais exécuter ce qui suit et voir si une commande est disponible:

ListAllCommands | grep searchstr
238
demandé sur Jonathan Leffler 2009-06-04 04:29:44

21 réponses

Vous pouvez utiliser le bash(1) haut-compgen

  • {[2] } listera toutes les commandes que vous pourriez exécuter.
  • {[3] } listera tous les alias que vous pourriez exécuter.
  • {[4] } listera tous les built-ins que vous pourriez exécuter.
  • {[5] } Liste tous les mots-clés que vous pouvez exécuter.
  • {[6] } listera toutes les fonctions que vous pourriez exécuter.
  • {[7] } listera tout ce qui précède en une seule fois.

Vérifiez la page de manuel pour d'autres complétions que vous pouvez générer.

Pour répondre directement à votre question:

compgen -ac | grep searchstr

Devrait faire ce que vous voulez.

531
répondu camh 2011-05-25 01:13:52

Ajouter à .bashrc

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

Si vous voulez aussi des alias, alors:

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
}
37
répondu Ants Aasma 2009-06-04 20:32:47

Il y a le

type -a mycommand

Commande qui répertorie tous les Alias et commandes dans $ PATH où mycommand est utilisé. Peut être utilisé pour vérifier si la commande existe en plusieurs variantes. Autre que cela... Il y a probablement un script autour qui analyse $PATH et tous les alias, mais ne connaît pas un tel script.

22
répondu sunny256 2009-06-04 00:36:56

Utiliser "qui searchstr". Renvoie le chemin du binaire ou l'alias setup s'il s'agit d'un alias

Modifier: Si vous cherchez une liste d'Alias, vous pouvez utiliser:

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

Ajoutez cela à la réponse de recherche de chemin que vous aimez. Suppose que vous utilisez bash..

6
répondu Aaron 2009-06-04 01:28:23

Essayez ce 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
5
répondu victor hugo 2009-06-04 00:53:23

Il est utile de lister les commandes en fonction des mots-clés associés à la commande.

Utiliser: man -k "your keyword"

Hésitez pas à combiner avec:| grep "another word"

Par exemple, Pour trouver un éditeur de texte: man -k editor | grep text

3
répondu Finch 2014-11-07 17:46:26

Essayez D'appuyer sur ALT-? (alt et point d'interrogation en même temps). Donnez - lui une seconde ou deux pour construire la liste. Il devrait fonctionner dans bash.

2
répondu Igor Krivokon 2009-06-04 00:50:15

Voici une solution qui vous donne une liste de tous les exécutables et alias. Il est également portable pour les systèmes Sans xargs -d (par exemple Mac OS X), et gère correctement les chemins avec des espaces.

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

Utilisation: myscript.sh [grep-options] pattern, par exemple, pour trouver toutes les commandes qui commencent par ls, insensibles à la casse, faire:

myscript -i ^ls
2
répondu Adam Rosenfield 2009-06-04 01:50:56

Pour les utilisateurs de Mac (trouver n'est pas exécutable et xargs - n'a pas -d):

echo $PATH | tr ':' '\n' | xargs -I {} find {} -maxdepth 1 -type f -perm '++x'
2
répondu vault 2012-10-24 15:41:04

Méthode de raccourci pour lister toutes les commandes. Ouvrez le terminal et appuyez deux fois sur le bouton "tab". C'est afficher toutes les commandes dans le terminal

2
répondu denny 2016-09-25 19:24:29

La commande others n'a pas fonctionné pour moi sur les systèmes embarqués, car ils nécessitent bash ou une version plus complète de xargs.

Les commandes suivantes devraient fonctionner sur N'importe quel système de type Unix.

Liste par dossier :

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

Liste toutes les commandes par nom

ls $(echo $PATH | tr ':' ' ') | grep -v '/' | sort
2
répondu Olivier Lasne 2017-09-07 09:17:53

Vous pouvez toujours à ce qui suit:

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

Le shell exécutera la commande uniquement s'ils sont listés dans le chemin env var de toute façon.

1
répondu OscarRyz 2009-06-04 00:39:11

Cela dépend, je veux dire que cela dépend de quel shell vous utilisez. voici les contraintes que je vois:

  1. doit s'exécuter dans le même processus que votre shell, pour attraper les Alias et les fonctions et les variables qui affecteraient les commandes que vous pouvez trouver, pensez à PATH ou EDITOR bien que L'éditeur puisse être hors de portée. Vous pouvez avoir des variables non exportées qui peuvent affecter les choses.
  2. c'est spécifique au shell ou votre départ dans le noyau, / proc / pid / enviorn et vos amis n'en ont pas assez informations

J'utilise ZSH alors voici une réponse zsh, il fait les 3 choses suivantes:

  1. décharges chemin
  2. vide les noms d'alias
  3. décharges fonctions qui sont dans l'env
  4. les trie

Voici:

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

Si vous utilisez zsh cela devrait le faire.

1
répondu ms4720 2013-02-20 14:56:58

Alternativement, vous pouvez obtenir une liste pratique de commandes couplées à des descriptions rapides (tant que la commande a une page de manuel, ce que la plupart font):

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.)

Ensuite, vous le grep comme vous voulez.

apropos -s 1 '' | grep xdg

Rendements:

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

Les résultats ne semblent pas être triés, donc si vous cherchez une longue liste, vous pouvez lancer un / sort | au milieu, puis le rediriger vers un pager comme less/more/most. ala:

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

Qui renvoie une liste triée de toutes les commandes "zip" dans leur nom ou leur courte description, et les pompes que le pager "moins". (Vous pouvez également remplacer "less" par $PAGER et utiliser le pager par défaut.)

1
répondu Katastic Voyage 2017-09-11 08:08:58

Le problème est que l'achèvement des onglets recherche votre chemin, mais toutes les commandes ne sont pas dans votre chemin.

Pour trouver les commandes dans votre chemin en utilisant bash, vous pouvez faire quelque chose comme:

Pour x dans echo $PATH | cut -d":" -f1; do ls $x; done

0
répondu nikudesu 2009-06-04 00:42:59

Voici une fonction que vous pouvez mettre dans votre fichier bashrc:

function command-search
{
   oldIFS=${IFS}
   IFS=":"

   for p in ${PATH}
   do
      ls $p | grep $1
   done

   export IFS=${oldIFS}
}

Exemple d'utilisation:

$ command-search gnome
gnome-audio-profiles-properties*
gnome-eject@
gnome-keyring*
gnome-keyring-daemon*
gnome-mount*
gnome-open*
gnome-sound-recorder*
gnome-text-editor@
gnome-umount@
gnome-volume-control*
polkit-gnome-authorization*
vim.gnome*
$

FYI: IFS est une variable que bash utilise pour diviser les chaînes.

Il pourrait certainement y avoir de meilleures façons de le faire.

0
répondu Craig Wright 2009-06-04 00:58:59

Peut-être que je suis malentendu mais que faire si vous appuyez sur Escape jusqu'à ce que vous ayez L'affichage de toutes les possibilités X?

-1
répondu LB40 2009-06-04 01:02:33

Commandes de Base:

$ touch: - utilisateur pour créer un fichier vide

Syn:- appuyez sur le nom de fichier

Ex: toucher rama

$ls liste des fichiers et répertoires

$ ls –l Longue liste

Type de fichier, autorisations, fichiers de liens, nom de l'utilisateur(ou)propriétaire, nom du groupe, taille du fichier, horodatage, nom du fichier ou du répertoire.

- fichier normal (ou) normal

Répertoire D

L fichier de liaison

Ls –A: affiche tout (y compris les fichiers cachés)

Fichiers cachés et les répertoires commencent par . (point)

Trouver plus de commandes @ http://k2schools.com/linux-commands/

-1
répondu reddy 2015-08-11 06:50:11
compgen -c > list.txt && wc list.txt
-2
répondu some1 2015-04-05 04:55:56

Pourquoi ne Tapez-vous pas simplement:

seachstr

Dans le terminal.

Le shell dira quelque chose comme

seacrhstr: command not found 

Modifier:

Ok, je prends le downvote, parce que la réponse est stupide, je veux juste savoir: Quel est le problème avec cette réponse!!! Le demandeur a dit:

et de voir si une commande est disponible.

Taper la commande vous indiquera si elle est disponible!.

Probablement il/elle voulait dire " sans exécuter le commande " ou "pour l'inclure dans un script" Mais je ne peux pas lire son esprit ( n'est-ce pas que je ne peux pas régulièrement, c'est juste qu'il porte un déflecteur de lecture mentale )

-3
répondu OscarRyz 2009-06-04 00:57:33

Dans debian: ls/ bin | / grep "whatImSearchingFor"

-5
répondu Gabriel Sosa 2009-06-04 00:37:41