Linux Essentials//Die Einsteiger-Zertifizierung des LPI - Linup Front ...
Linux Essentials//Die Einsteiger-Zertifizierung des LPI - Linup Front ...
Linux Essentials//Die Einsteiger-Zertifizierung des LPI - Linup Front ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
132 9 Mehr über die Shell<br />
/home/hugo/bin/ls<br />
/usr/local/bin/ls<br />
/usr/bin/ls<br />
/bin/ls<br />
Nein …<br />
Immer noch nicht …<br />
Nach wie vor nicht …<br />
Hah, Treffer!<br />
Das Verzeichnis /usr/games wird nicht mehr angeschaut.<br />
Das heißt, zur Ausführung <strong>des</strong> Kommandos ls wird die Datei /bin/ls herangezogen.<br />
B<br />
B<br />
B<br />
<strong>Die</strong>se Suche ist natürlich ein relativ aufwendiger Prozess, und darum baut<br />
die Shell für die Zukunft vor: Wenn sie einmal die Datei /bin/ls als Implementierung<br />
<strong>des</strong> Kommandos ls ausgemacht hat, dann merkt sie sich diese<br />
Zuordnung bis auf weiteres. <strong>Die</strong>sen Vorgang nennt der Fachmann hashing,<br />
und dass er passiert ist, können Sie sehen, wenn Sie type auf unser Kommando<br />
ls anwenden:<br />
$ type ls<br />
ls is hashed (/bin/ls)<br />
Das Kommando »hash« sagt Ihnen, welche Kommandos Ihre Bash bereits<br />
»gehasht« hat und wie oft sie seitdem aufgerufen wurden. Mit »hash -r« können<br />
Sie das komplette Hashing-Gedächtnis der Shell löschen. Es gibt noch<br />
ein paar andere Optionen, die Sie in der Bash-Dokumentation nachschlagen<br />
oder per »help hash« herausfinden können.<br />
<strong>Die</strong> Variable PATH muss prinzipiell gesehen überhaupt keine Umgebungsvariable<br />
sein – für die aktuelle Shell funktioniert sie auch als Shellvariable<br />
(siehe Übung 9.5). Allerdings ist es bequem, sie als Umgebungsvariable zu<br />
definieren, damit auch die Kindprozesse der Shell (oft wieder Shells) den<br />
gewünschten Wert verwenden.<br />
Wenn Sie wissen wollen, genau welches Programm die Shell für ein externes<br />
Kommando heranzieht, können Sie dafür das Kommando which verwenden:<br />
$ which grep<br />
/bin/grep<br />
which verwendet dasselbe Verfahren wie die Shell – es beginnt beim ersten Verzeichnis<br />
in PATH und prüft jeweils, ob es in dem betreffenden Verzeichnis eine ausführbare<br />
Datei gibt, die so heißt wie das gesuchte Kommando.<br />
B<br />
which weiß nichts über die internen Kommandos der Shell; selbst wenn etwas<br />
wie »which test« also »/usr/bin/test« liefert, heißt das noch lange nicht,<br />
dass dieses Programm tatsächlich ausgeführt wird, denn interne Kommandos<br />
haben Vorrang gegenüber externen. Wenn Sie wissen wollen, was<br />
wirklich passiert, müssen Sie das Shell-Kommando »type« benutzen (Abschnitt<br />
4.3.3).<br />
Das Kommando whereis liefert nicht nur ausführbare Programme, sondern<br />
auch Dokumentationsdateien (Manpages), Quellcodedateien und andere interessante<br />
Dateien, die etwas mit den angegebenen Kommandos zu tun haben. Zum<br />
Beispiel:<br />
$ whereis passwd<br />
passwd: /usr/bin/passwd /etc/passwd /etc/passwd.org /usr/share/passwd✄<br />
✁ /usr/share/man/man1/passwd.1.gz /usr/share/man/man1/passwd.1ssl.gz✄<br />
✁ /usr/share/man/man5/passwd.5.gz<br />
Dafür wird ein im Programm hartcodiertes Verfahren verwendet, das (ansatzweise)<br />
in whereis(1) erklärt wird.<br />
Copyright © 2012 <strong>Linup</strong> <strong>Front</strong> GmbH