[ASCII] orientierung auf einem unix system
Florian Cramer
cantsin@zedat.fu-berlin.de
Fri, 1 Mar 2002 13:57:32 +0100
Am Fri, 01.Mar.2002 um 12:14:35 +0100x schrieb Stephan Klinger:
> Und dann habe ich auch noch eine Frage. Wie findet man auf einem
> Unix-System heraus welche "tools" überhaupt vorhanden sind ?
Zwei Methoden, neben der von Aleks beschriebenen:
- Du gibts den Anfangsbuchstaben des Programms (also z.B. "l" für
"links") ein, dann die Tabulatortaste, und bekommst eine Liste aller
Programme, die mit diesem Buchstaben anfangen.
- Du gibst auf der Kommandozeile "echo $PATH" ein. In der Variable $PATH
stehen alle Verzeichnisse, in denen Programme liegen. Auf meinem
System lautet die Ausgabe:
"/usr/local/bin:/usr/local/staroffice/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games"
Nun kannst du mit "ls" nachsehen, was sich in diesen Verzeichnissen
befindet, also z.B. per "ls /usr/local/bin".
Natürlich kann man das mit ein bißchen Kommandozeilen-Magie noch
vereinfachen... Der Output von "echo $PATH" müßte nur so gefiltert werden,
daß anstelle der Doppelpunkte Semikolons stehen (für das Ende eines
Befehls) und vor den Verzeichnisnamen ein "ls" gesetzt wird. Die
passende Kommandozeile lautet:
echo ls $PATH | sed -e "s/:/\; ls /g"
(Ein "ls" wird schon im "echo"-Befehl vorangestellt, die weiteren durch
Suchen und Ersetzen der Doppelpunkte per "sed" eingefügt.) Da die obige
Befehlszeile nur die "ls"-Befehle, nicht aber ihr Ergebnis ausgibt, muß
ihr Output noch von der Shell ausgeführt werden. Das geht mit einer
einfachen Pipe:
echo ls $PATH | sed -e "s/:/\; ls /g" | sh
Zum bequemen Lesen der so erzeugten Programmliste empfiehlt sich "less":
echo ls $PATH | sed -e "s/:/\; ls /g" | sh | less
Jetzt stört noch, daß die Programme mehrspaltig und unsortiert
ausgegeben werden. Die Mehrspaltigkeit kann man "ls" mit der Option
"--format=single-column" austreiben:
echo ls --format=single-column $PATH | sed -e "s/:/\; ls
--format=single-column /g" | sh | less
Jetzt können wir den Output noch alphabetisch sortieren, indem wir das
"sort"-Kommando in die Eimerkette einfügen:
echo ls --format=single-column $PATH | sed -e "s/:/\; ls
--format=single-column /g" | sh | sort | less
Perfektionisten stört jetzt noch ein Detail: Wenn, wie auf vielen
Unix-Systemen üblich, manche Programme mehrfach auf dem System
installiert sind, z.B. ein von der Distribution mitgeliefert "vim" in
/usr/bin und ein selbstkompilierter, getunter "vim" in /usr/local/bin,
tauchen sie auch mehrfach hintereinander in der sortierten Liste auf.
Diese Dubletten lassen sich mit dem Programm "uniq" herausfiltern:
echo ls --format=single-column $PATH | sed -e "s/:/\; ls
--format=single-column /g" | sh | sort | uniq | less
Wir haben uns also selbst ein Kommando gebaut, das eine Funktion
nachrüstet, die das Betriebssystem von sich aus nicht bietet (nämlich
eine Komplettliste aller verfügbaren Programmbefehle). Wir können diese
Zeile nun eine Datei schreiben, die wir z.B. "programlist" nennen, mit
"chmod 755" für alle Benutzer les- und ausführbar machen und,
Administrator-Privilegien vorausgesetzt, in /usr/local/bin allen
Benutzern des Systems zur Verfügung stellen.
Ohne Administratorprivilegien kann man sich z.B. per "makdir
/home/$USER/bin" ein privates Programmverzeichnis anlegen und dies mit
dem Befehl
PATH="$PATH:/home/$USER/bin"
in die "PATH"-Variable (d.h. ins Verzeichnis aller Programme) eintragen.
Um diese Änderung permanent bei jedem neuen Login beizubehalten, muß man
diese Zeile in die Datei ".profile" im eigenen Arbeitsverzeichnis
schreiben.
Falls es für das an der HU eingesetzte Unix einen vorkompilierten links
oder ein vorkompiliertes mutt gibt und Du genügend freien Speicherplatz
auf Deinem Shell-Account hast, kannst Du Dir diese Programme auch
einfach in diesem individuellen Programm-Verzeichnis installieren.
Gruß,
Florian
--
http://userpage.fu-berlin.de/~cantsin/homepage/
http://www.complit.fu-berlin.de/institut/lehrpersonal/cramer.html
GnuPG/PGP public key ID 3200C7BA, finger cantsin@mail.zedat.fu-berlin.de