Kommandolokalisierung
Version vom 16. November 2022, 15:37 Uhr von Thomas.will (Diskussion | Beiträge)
Wie wird ein Kommando lokalisiert
- Die Shell versucht ein Kommando auszuführen.
- Dazu muss sie es aber erst lokalisieren.
- Das erste passende Kommando wird ausgeführt.
- Als Kommandoname wird immer das erste Wort eines einfachen Kommandos erkannt.
- Ein Kommandoname kann mit Pfadnamen in einem Verzeichnis angegeben werden.
- Die Shell erkennt dies an (mindestens) einem Slash `/' im Kommandonamen.
- Wenn kein Verzeichnis angegeben ist, versucht die Shell selbst, das Kommando zu finden.
- Dazu wird der Kommandoname zuerst in der Hashtabelle gesucht,
- Dann wird er mit den Synonymen
- Weiter mit den Scriptfunktionen
- Schließlich mit den Shellfunktionen verglichen.
- Schliesslich wird in der PATH-Umgebungsvariablen aufgeführten Verzeichnisse nach einer ausführbaren Datei dieses Namens durchsucht.
- Wird auch hier kein passendes Kommando gefunden, gibt die Shell eine Fehlermeldung aus.
Reihenfolge der Lokalisierung
- Hashtabelle
- Aliase
- Funktionen
- Shell Funktionen
- Pfad
which und type
which
which gibt die vollen Pfadnamen der Dateien aus, die bei Benutzung des angegebenen Befehls ausgeführt werden würden.
which [-a] Dateiname
Optionen:
- -a : Alle Treffer ausgeben, nicht nur den ersten
- --skip-dot : Verzeichnisse, die mit einem Punkt beginnen, auslassen
Beispiel
- which startx
/usr/bin/startx
type
Anzeigen der absoluten Pfadnamen von Befehlen, und ob sich diese Befehle in der Hash-Tabelle der aktuellen Shell befinden.
type [Optionen] Befehle
Beispiel
- type ls
ls is aliased to `ls --color=auto'
Optionen:
- -a : Alle vorkommenden Befehle werden ausgegeben, nicht nur das, welches aufgerufen werden würde
root@zero:~# type -a ls ls is aliased to `ls --color=auto' ls is /bin/ls
- -p : Anzeigen des Eintrags von Befehl in der Hash-Tabelle. Dieser Wert kann sich vom ersten Auftreten des Befehls in PATH
unterscheiden
root@zero:~# type -p apache2 /usr/sbin/apache2
- -t : Anzeigen, ob Befehl ein Aliasname, ein Schlüsselwort, eine Funktion, ein eingebauter Befehl oder eine Datei ist
root@zero:~# type -t apache2 file