Kommandolokalisierung: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(8 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=Wie wird ein Kommando lokalisiert=
+
= Wie wird ein Kommando lokalisiert =
Wenn die Shell alle Ersetzungen in der Kommandozeile vorgenommen und alle Umleitungen vorbereitet hat, ist der Zeitpunkt
 
gekommen, auf den der Anwender die ganze Zeit gewartet hat. Die Shell versucht das 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
+
* Die Shell versucht ein Kommando auszuführen.
einem Verzeichnis (absolut oder relativ) angegeben werden. Die Shell erkennt dies an (mindestens) einem Slash `/'  
+
* Dazu muss sie es aber erst lokalisieren.
im Kommandonamen. Wenn kein Verzeichnis angegeben ist, versucht die Shell selbst, das Kommando zu finden. Dazu wird  
+
* Das erste passende Kommando wird ausgeführt.
der Kommandoname zuerst in der Hashtabelle gesucht, dann wird er mit den Synonymen, mit den Scriptfunktionen und
+
* Als Kommandoname wird immer das erste Wort eines Befehls erkannt.
schließlich mit den Shellfunktionen verglichen.  
+
* Ein Kommandoname kann mit absolutem oder relativem Pfad 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.
 +
* Danach wird er mit definierten Aliasen verglichen.
 +
* Anschließend werden Bash-Funktionen überprüft.
 +
* Dann werden eingebaute Shell-Befehle (Built-ins) abgefragt.
 +
* Schließlich werden die 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.
  
Wird auf diese Weise kein Programm dieses Namens gefunden, werden alle in der PATH-Umgebungsvariablen aufgeführten
+
= Reihenfolge der Lokalisierung =
Verzeichnisse nach einer ausführbaren Datei dieses Namens durchsucht. Wird auch hier kein passendes Kommando gefunden,
+
* [[Hashtabelle]]
gibt die Shell eine Fehlermeldung aus.
+
* [[Aliase]]
 +
* [[Bash Funktion]]
 +
* [[Eingebaute Bash Funktion]]
 +
* [[Linux-Dateisystem#Pfadnamen|Pfad]]
  
=Reihenfolge der Lokalisierung=
+
== which und type ==
*Hashtabelle
 
*Aliase
 
*Funktionen
 
*Shell Funktionen
 
*Pfad
 
  
===which und type===
+
=== which ===
====which====
+
Der Befehl '''which''' gibt den vollständigen Pfadnamen des Programms aus, das bei Eingabe eines Kommandos ausgeführt würde.
which gibt die vollen Pfadnamen der Dateien aus, die bei Benutzung des angegebenen Befehls ausgeführt werden würden.
 
  
  which [-a] Dateiname  
+
  '''which [-a] Dateiname'''
  
 
Optionen:
 
Optionen:
 +
* '''-a''' – Alle Treffer ausgeben, nicht nur den ersten 
 +
* '''--skip-dot''' – Verzeichnisse, die mit einem Punkt beginnen, auslassen 
  
* -a : Alle Treffer ausgeben, nicht nur den ersten
+
Beispiel:
* --skip-dot : Verzeichnisse, die mit einem Punkt beginnen, auslassen
+
* '''which startx'''
 
 
Beispiel
 
root@zero:~# which startx
 
 
  /usr/bin/startx
 
  /usr/bin/startx
  
====type====
+
=== type ===
Anzeigen der absoluten Pfadnamen von Befehlen, und ob sich diese Befehle in der Hash-Tabelle der aktuellen
+
Der Befehl '''type''' zeigt an, ob ein Befehl ein Alias, eine Funktion, ein Built-in oder eine externe Datei ist, und gibt – falls vorhanden – den absoluten Pfad aus.
Shell befinden.
 
  
  type [Optionen] Befehle
+
  '''type [Optionen] Befehl'''
  
Beispiel
+
Beispiel:
root@zero:~# type ls
+
* '''type ls'''
 
  ls is aliased to `ls --color=auto'
 
  ls is aliased to `ls --color=auto'
  
 
Optionen:
 
Optionen:
 +
* '''-a''' – Alle vorkommenden Befehle werden ausgegeben, nicht nur der tatsächlich aufgerufene 
 +
root@zero:~# '''type -a ls''' 
 +
ls is aliased to `ls --color=auto' 
 +
ls is /bin/ls 
  
* -a : Alle vorkommenden Befehle werden ausgegeben, nicht nur das, welches aufgerufen werden würde
+
* '''-p''' – Zeigt den Eintrag des Befehls in der Hash-Tabelle an (kann vom ersten Treffer in PATH abweichen) 
root@zero:~# type '''-a''' ls
+
  root@zero:~# '''type -p apache2'''
ls is aliased to `ls --color=auto'
+
  /usr/sbin/apache2
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
+
* '''-t''' – Gibt an, ob ein Befehl ein Alias, Schlüsselwort, eine Funktion, ein Built-in oder eine Datei ist
  root@zero:~# type '''-t''' apache2
+
  root@zero:~# '''type -t apache2'''
 
  file
 
  file

Aktuelle Version vom 12. Oktober 2025, 19:24 Uhr

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 Befehls erkannt.
  • Ein Kommandoname kann mit absolutem oder relativem Pfad 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.
  • Danach wird er mit definierten Aliasen verglichen.
  • Anschließend werden Bash-Funktionen überprüft.
  • Dann werden eingebaute Shell-Befehle (Built-ins) abgefragt.
  • Schließlich werden die 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

which und type

which

Der Befehl which gibt den vollständigen Pfadnamen des Programms aus, das bei Eingabe eines Kommandos ausgeführt würde.

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

Der Befehl type zeigt an, ob ein Befehl ein Alias, eine Funktion, ein Built-in oder eine externe Datei ist, und gibt – falls vorhanden – den absoluten Pfad aus.

type [Optionen] Befehl

Beispiel:

  • type ls
ls is aliased to `ls --color=auto'

Optionen:

  • -a – Alle vorkommenden Befehle werden ausgegeben, nicht nur der tatsächlich aufgerufene
root@zero:~# type -a ls  
ls is aliased to `ls --color=auto'  
ls is /bin/ls  
  • -p – Zeigt den Eintrag des Befehls in der Hash-Tabelle an (kann vom ersten Treffer in PATH abweichen)
root@zero:~# type -p apache2  
/usr/sbin/apache2  
  • -t – Gibt an, ob ein Befehl ein Alias, Schlüsselwort, eine Funktion, ein Built-in oder eine Datei ist
root@zero:~# type -t apache2  
file