it-swarm.com.de

Linux-Befehl, um alle verfügbaren Befehle und Aliase aufzulisten

Gibt es einen Linux-Befehl, der alle verfügbaren Befehle und Aliase für diese Terminalsitzung auflistet?

Als ob Sie 'a' eingegeben und die Tabulatortaste gedrückt hätten, jedoch für jeden Buchstaben des Alphabets. Oder 'alias' ausführen, aber auch Befehle zurückgeben.

Warum? Ich möchte Folgendes ausführen und prüfen, ob ein Befehl verfügbar ist:

ListAllCommands | grep searchstr
256
ack

Sie können die in bash (1) integrierte Funktion compgen verwenden.

  • compgen -c listet alle Befehle auf, die Sie ausführen können.
  • compgen -a listet alle Aliase auf, die Sie ausführen können.
  • compgen -b listet alle eingebauten Funktionen auf, die Sie ausführen können.
  • compgen -k listet alle Keywords auf, die Sie ausführen können.
  • compgen -A function listet alle Funktionen auf, die Sie ausführen können.
  • compgen -A function -abck listet alle oben genannten auf einmal auf.

Überprüfen Sie die Manpage auf andere Vervollständigungen, die Sie generieren können.

Um Ihre Frage direkt zu beantworten:

compgen -ac | grep searchstr

sollte tun, was du willst.

569
camh

Hinzufügen zu .bashrc

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

Wenn Sie auch Aliase möchten, dann:

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

Dort ist der

type -a mycommand

befehl, der alle Aliase und Befehle in $ PATH auflistet, wobei mycommand verwendet wird. Kann verwendet werden, um zu überprüfen, ob der Befehl in mehreren Varianten vorhanden ist. Davon abgesehen gibt es wahrscheinlich einige Skripte, die $ PATH und alle Aliase analysieren, aber keine solchen Skripte kennen.

25
sunny256

Verwenden Sie "which searchstr". Gibt entweder den Pfad der Binärdatei oder das Alias-Setup zurück, wenn es sich um einen Alias ​​handelt

Bearbeiten: Wenn Sie nach einer Liste von Aliasen suchen, können Sie Folgendes verwenden:

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

Fügen Sie dies zu der von Ihnen gewünschten PATH-Suchantwort hinzu. Angenommen, Sie verwenden bash ..

6
Aaron

Der Befehl others hat auf eingebetteten Systemen bei mir nicht funktioniert, da sie bash oder eine vollständigere Version von xargs benötigen (busybox war begrenzt).

Die folgenden Befehle sollten auf jedem Unix-ähnlichen System funktionieren.

Liste nach Ordner:

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

Listet alle Befehle nach Namen auf

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

Versuchen Sie dieses Skript:

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

Für Mac-Benutzer (find hat kein -executable und xargs hat kein -d):

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

Es ist nützlich, die Befehle basierend auf den mit dem Befehl verknüpften Schlüsselwörtern aufzulisten.

Verwenden: man -k "your keyword"

fühlen Sie sich frei zu kombinieren mit: | grep "another Word"

so finden Sie beispielsweise einen Texteditor: man -k editor | grep text

3
Finch

Hier ist eine Lösung, die Ihnen eine Liste aller ausführbaren Dateien nd Aliase gibt. Es ist auch portabel auf Systeme ohne xargs -d (z. B. Mac OS X) und behandelt Pfade mit Leerzeichen ordnungsgemäß.

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

Verwendungszweck: myscript.sh [grep-options] pattern, z.B. Um alle Befehle zu finden, die mit ls beginnen, wobei die Groß- und Kleinschreibung nicht berücksichtigt wird, gehen Sie wie folgt vor:

myscript -i ^ls
2
Adam Rosenfield

Versuchen Sie ALT-? (Alt und Fragezeichen gleichzeitig). Geben Sie ihm ein oder zwei Sekunden, um die Liste zu erstellen. Es sollte in bash funktionieren.

2
Igor Krivokon

verknüpfungsmethode zum Auflisten aller Befehle. Öffnen Sie das Terminal und drücken Sie zweimal die Taste "tab". Das zeigt alle Befehle im Terminal

2
denny

Alternativ können Sie eine bequeme Liste von Befehlen zusammen mit Kurzbeschreibungen erhalten (sofern der Befehl eine Manpage enthält, was die meisten tun):

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

Dann greifst du einfach so, wie du willst.

apropos -s 1 '' | grep xdg

ergibt:

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

Die Ergebnisse scheinen nicht sortiert zu sein. Wenn Sie also nach einer langen Liste suchen, können Sie | werfen sortieren | in die Mitte, und leiten Sie das dann zu einem Pager wie less/more/most. ala:

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

Die eine sortierte Liste aller Befehle zurückgibt, deren Name oder Kurzbeschreibung "Zip" enthält, und die den "weniger" Pager pumpt. (Sie können auch "less" durch $ PAGER ersetzen und den Standard-Pager verwenden.)

2
Katastic Voyage

Sie können immer zu Folgendem:

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

Die Shell führt den Befehl nur dann aus, wenn sie ohnehin im Pfad env var aufgeführt sind.

1
OscarRyz

das hängt davon ab, ich meine, es hängt davon ab, welche Shell Sie verwenden. Hier sind die Einschränkungen, die ich sehe:

  1. muss im selben Prozess wie Ihre Shell ausgeführt werden, um Aliase und Funktionen und Variablen abzufangen, die sich auf die Befehle auswirken, die Sie finden können. Sie können nicht exportierte Variablen haben, die sich auf Dinge auswirken können.
  2. es ist Shell-spezifisch oder Sie gehen in den Kernel,/proc/pid/enviorn und Freunde haben nicht genug Informationen

Ich benutze ZSH, also hier ist eine Antwort von zsh, es macht die folgenden 3 Dinge:

  1. dump-Pfad
  2. gibt Aliasnamen aus
  3. dumps-Funktionen, die in der Umgebung sind
  4. sortiert sie

hier ist es:

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

Wenn Sie zsh verwenden, sollte dies der Fall sein.

1
ms4720

Das Problem ist, dass die Tab-Vervollständigung Ihren Pfad durchsucht, sich jedoch nicht alle Befehle in Ihrem Pfad befinden.

Um die Befehle in Ihrem Pfad mit bash zu finden, können Sie Folgendes tun:

für x in echo $PATH | cut -d":" -f1; tue ls $ x; getan

0
nikudesu

Hier ist eine Funktion, die Sie in Ihre bashrc-Datei einfügen können:

 Funktionsbefehlssuche 
 {
 oldIFS = $ {IFS} 
 IFS = ":" 
 
 nach p in $ {PATH} 
 Do 
 Ls $ p | grep $ 1 
 done 
 
 export IFS = $ {oldIFS} 
} 

Anwendungsbeispiel:

 $ befehlssuche gnome 
 gnome-audio-profile-eigenschaften * 
 gnome-auswerfen @ 
 gnome-schlüsselbund * 
 gnome-schlüsselbund- daemon * 
 gnome-mount * 
 gnome-open * 
 gnome-sound-recorder * 
 gnome-text-editor @ 
 gnome-umount @ 
 Gnome-Lautstärkeregler * 
 Polkit-Gnome-Autorisierung * 
 vim.gnome * 
 $ 

Zu Ihrer Information: IFS ist eine Variable, mit der Bash Zeichenfolgen aufgeteilt werden.

Natürlich könnte es dafür bessere Möglichkeiten geben.

0
Craig Wright