web-dev-qa-db-fra.com

Commande Linux pour lister toutes les commandes et alias disponibles

Existe-t-il une commande Linux répertoriant toutes les commandes et alias disponibles pour cette session de terminal?

Comme si vous aviez tapé 'a' et appuyé sur l'onglet, mais pour chaque lettre de l'alphabet. Ou exécuter 'alias' mais aussi renvoyer des commandes.

Pourquoi? J'aimerais lancer ce qui suit et voir si une commande est disponible:

ListAllCommands | grep searchstr
256
ack

Vous pouvez utiliser le bash (1) intégré compgen

  • compgen -c listera toutes les commandes que vous pouvez exécuter.
  • compgen -a listera tous les alias que vous pourriez exécuter.
  • compgen -b listera tous les fichiers intégrés que vous pourriez exécuter.
  • compgen -k listera tous les mots-clés que vous pourriez utiliser.
  • compgen -A function listera toutes les fonctions que vous pouvez exécuter.
  • compgen -A function -abck listera tout ce qui précède en une fois.

Consultez la page de manuel pour connaître les autres compléments que vous pouvez générer.

Pour répondre directement à votre question:

compgen -ac | grep searchstr

devrait faire ce que vous voulez.

569
camh

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
}
39
Ants Aasma

Il y a le

type -a mycommand

commande qui répertorie tous les alias et toutes les commandes de $ 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 de $ PATH et tous les alias, mais je ne connais pas un tel script.

25
sunny256

Utilisez "qui searchstr". Renvoie le chemin du binaire ou la configuration de l'alias s'il s'agit d'un alias.

Edit: Si vous cherchez une liste d’alias, vous pouvez utiliser:

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

Ajoutez-le à la réponse de votre recherche dans PATH. Suppose que vous utilisez bash ..

6
Aaron

La commande other ne fonctionnait pas pour moi sur les systèmes embarqués, car elle nécessite bash ou une version plus complète de xargs (busybox était limité).

Les commandes suivantes devraient fonctionner sur tout système de type Unix.

Liste par dossier:

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

Lister toutes les commandes par nom

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

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
victor hugo

Pour les utilisateurs de Mac (find n'a pas -executable et xargs n'a pas -d):

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

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

Utilisez: man -k "your keyword"

n'hésitez pas à combiner avec: | grep "another Word"

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

3
Finch

Voici une solution qui vous donne une liste de tous les exécutables et alias. Il est également portable sur les systèmes sans xargs -d (par exemple, Mac OS X) et gère correctement les chemins contenant 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 rechercher toutes les commandes commençant par ls, en respectant la casse, faites:

myscript -i ^ls
2
Adam Rosenfield

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

2
Igor Krivokon

méthode de raccourci pour lister toutes les commandes. Ouvrez le terminal et appuyez deux fois sur la touche "onglet". Cela montre toutes les commandes dans le terminal

2
denny

Alternativement, vous pouvez obtenir une liste pratique de commandes associée à des descriptions rapides (à condition que la commande ait 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 faites comme vous le souhaitez.

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 recherchez une longue liste, vous pouvez lancer un | trier | dans le milieu, puis dirigez cela vers un téléavertisseur comme less/more/most. ala:

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

Ce qui retourne une liste triée de toutes les commandes ayant "Zip" dans leur nom ou leur brève description et envoie le "moins" pager. (Vous pouvez également remplacer "moins" par $ PAGER et utiliser le pager par défaut.)

2
Katastic Voyage

Vous pouvez toujours faire 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 n’exécutera la commande que s’ils sont répertoriés dans le chemin env var.

1
OscarRyz

cela dépend, je veux dire par là que cela dépend de ce que vous utilisez Shell. voici les contraintes que je vois:

  1. doit s’exécuter dans le même processus que votre shell pour capturer des alias, des fonctions et des variables qui affectent les commandes que vous pouvez trouver, pensez à PATH ou à EDITOR bien que EDITOR soit hors de portée. Vous pouvez avoir des variables non exportées pouvant avoir des effets.
  2. c'est spécifique à Shell ou si vous entrez dans le noyau,/proc/pid/enviorn et vos amis n'ont pas assez d'informations

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

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

c'est ici:

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
ms4720

Le problème est que la complétion par tabulation 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; est-ce que ls $ x; terminé

0
nikudesu

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

 fonction recherche-commande 
 {
 oldIFS = $ {IFS} 
 IFS = ":" 
 
 pour p dans $ {PATH} 
 Do 
 Ls $ p | grep $ 1 
 terminé 
 
 exportez IFS = $ {oldIFS} 
} 

Exemple d'utilisation:

 $ gnome de recherche de commandes 
 gnome-audio-profiles-properties * 
 éject de gnome @ 
 gnome-keyring * 
 gnome-keyring- daemon * 
 gnome-mount * 
 gnome-open * 
 gnome-enregistreur-de-son * 
 gnome-text-editor @ 
 gnome-umount @ 
 gnome-volume-control * 
 polkit-gnome-authorisation * 
 vim.gnome * 
 $ 

FYI: IFS est une variable utilisée par bash pour scinder des chaînes.

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

0
Craig Wright