09.04.2014 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!