Wichtige Unix Commands
Von Lukas Karrer (lkarrer auf trash.net)
based almost completely on the UNIX-Intro by Tobias Oettiker, SysAdmin at the ETH in Zürich
Hier ein kurzer Abriss über einige der wichtigsten UNIX `Commands'. Eine Bemerkung zu den `Commands' gleich vorne weg: Gross und Kleinschreibung sind bei Unix signifikant!
Passwort ändern
Das Passwort welches Dir zugeteilt worden ist, kann geändert werden, was auch von Zeit zu Zeit gemacht werden sollte.
username@stinky:~> passwd |
Ich brauche Hilfe
Einer der wichtigsten Befehle unter Unix dürfte wohl "man" (Abkürzung für Manual = Handbuch) sein. Dieser gibt Auskunft über Funktion, Anwendung und Optionen von Befehlen.
Natürlich gibt "man" auch gleich Auskunft über sich selbst. Die Ausgabe erfolgt Seitenweise. Um die nächste Seite anzuzeigen muss die Space-Taste kurz angetippt werden. Mit der Taste [b] lässt sich eine Seite zurückblättern. Hat man einmal die falsche Seite erwischt der die gewünschte Information bereits gefunden, kann man durch drücken der Taste [q] die Ausgabe abbrechen.
username@stinky:~> man man MAN(1) USER COMMANDS MAN(1) NAME man - display reference manual pages; find reference pages by keyword SYNOPSIS man [-] [-t] [-M path] [-T macro-package] [[section] title...] ... man [-M path] -k keyword ... man [-M path] -f filename ... DESCRIPTION man displays information from (...) |
Oftmals kennt man jedoch gerade die Schreibweise eines Befehls nicht. Hier kommt der Befehl apropos zum Zug. Damit lassen sich alle man-pages-Einträge finden, die ein bestimmtes Stichwort enthalten.
username@stinky:~> apropos shell |
Bei Syntaxfehlern wird oft eine kurze Erklärung über den korrekten Gebrauch des Befehls ausgegeben. Meistens ist diese kleine Hilfe auch mit der Option "-h" oder "--help" zu erreichen.
username@stinky:~> mv --help |
Die tcsh-Shell
Nach dem Aufstarten des Accounts erscheint auf dem Bildschirm ein weisses Fenster (xterm), in welches man Unix Befehle eintippen kann. Das Programm welches in dem Fenster drin die Befehle entgegennimmt und verarbeitet heisst tcsh (sprich Ti-Si-Schell).
Darüber informiert man sich am besten gleich selbst.
username@stinky:~> man tcsh |
Da die tcsh-Shell mit der csh-Shell (sprich Si-Schell) verwandt ist, sind viele wichtige Informationen in den tcsh-man-pages nicht mehr aufgeführt. Diese findet man also mit
username@stinky:~> man csh |
Dennoch ein paar Tips am Rand
Tip 1Nach Drücken der Tabulator-Taste versucht die Shell die Eingabe zu vervollständigen. Hierzu ein Beispiel:
Die Eingabe von "cd LangerDirectoryName" kann abgekürzt werden mit "cd Lang" + Tabulatortaste. Allerdings nur falls "Lang" eindeutig zuzuordnen ist. Das heisst, es existiert kein weiteres Directory, das mit "Lang" beginnt. Andernfalls wird eine Liste aller möglichen passenden Verzeichnis Namen angezeigt.
Mit den Cursor-Tasten [UP] und [DOWN] kann man die letzen Eingaben auf die Eingabezeile zurückholen.
Das Filesystem
username@stinky:~> ls |
Gibt eine Liste der Directoryeinträge im aktuellen Verzeichnis aus, die mit dem Parameter näher bestimmt werden können.
Verschiedene nützliche Optionen sind zum Beispiel:
- ls -l
- zeigt ausfürlichere Informationen, insbesondere die File-Attribute.
- ls -a
- Einträge, deren Name mit einem "." beginnen werden auch aufgelistet.
- ls -R
- Der ganze Sub-Baum wird auch angezeigt.
- ls -F
- Bei jeder Datei wird gleich mitangezeigt ob es sich dabei um ein Programm oder ein Verzeichnis handelt.
Natürlich können die Optionen kombiniert werden (Gross-/Kleinschreibung!).
username@stinky:~> cd <directoryname> |
Damit wechselt man ins Verzeichnis <directoryname>. Anstelle von <directoryname>kann man auch `..' schreiben, um im Verzeichnisbaum eine Stufe nach oben zu wechseln. Eine weitere nützliche Variante ist `cd damit landet man wieder im eigenen Home-Directory. Am Anfang jeder Eingabezeile wird jeweils der aktuelle Verzeichnis Namen angezeigt.
username@stinky:~> mkdir <directory-namen> |
Erzeugt ein neues Directory. Und zwar in dem Verzeichnis, in dem man sich gerade befindet.
Tja und so geht es weiter. Hier eine kleine Tabelle mit Befehlen und ihren Auswirkungen.
rmdir <directoryname> | löscht ein (leeres) Directory. |
rm -r <directoryname> | löscht ein Directory inklusiv Inhalt. |
mv <quelle> <ziel> | um eine Datei umzubenennen. |
mv <quelle> <ziel-verzeichis> | um eine Datei in einem anderen Directory zu plazieren. |
mv <quellen-dir> <ziel-dir> | um ein Directory umzubenennen oder es in einem anderen Directory zu plazieren. |
cp <quelle> <ziel> | kopiert eine Datei. |
cp <quelle> <ziel-dir> | kopiert eine Datei in ein anderes Directoy unter Beibehaltung des Namens. |
Achtung DOS-User: Sachen wie `cp *.dat *.txt' funktionieren nicht! Dazu später mehr.
Fileattribute
Jede Datei und jedes Directory, besitzt unter Unix nicht nur einen Namen sondern noch eine ganze Reihe weiterer Informationen. So ist zum Beispiel fuer jede Datei festgelegt wem sie gehört und unter welchen Umständen sie gelesen und verändert werden darf.
Vorallem das mit den Lese und Schreibrechten ist eine interessante Sache, schauen wir uns doch einmal eine Datei von nahem an:
username@stinky:~> ls -al [...] drwxr-xr-x 3 gaba 512 Jul 12 17:03 ./ -rw------- 1 gaba 1621 Jul 12 16:22 mbox 0123456789 |
10 Attribute (0-9) werden angezeigt.
Das Attribut 0 gibt Auskunft über die Art des Eintrags: `-' steht für ein normales File. `d' zeigt an, dass es sich um ein Directory handelt. Daneben sind auch noch andere Einträge im Feld null möglich, ich möchte hierzu aber auf die Manpage des chmod Commands verweisen.
Die Attribute 1-9 regeln die Zugriffsrechte auf das File bzw. Directory und haben folgende Bedeutung: `r' lesbar, `w' schreibbar (also auch löschbar), `x' ausführbar (Bei einer normalen Datei bedeutet das dass es sich dabei um ein Programm handelt. Bei einem Directory, bedeutet das `x' dass man mit cd in das Verzeichnis hinein wechseln kann).
Die Attribute 1-3 sind die sogenannten user-Attribute und regeln somit die Zugriffsrechte des Besitzers auf ein File bzw. Directory. Die Attribute 4-6, die group-Attribute, regeln analog die Zugriffsrechte einer Gruppe, in diesem Fall die aller Studenten an der Abteilung IIIB. Die Attribute 7-9, die others-Attribute, regeln die Zugriffsrechte von jedem beliebigen Aussenstehenden.
Files oder Directories vor fremdem Zugriff schützen
Wenn immer du in Deinem Account ein File oder ein Directory erzeugst werden die Attribute automatisch wie folgt gesetzt:
- Directory: drwxr-xr-x
- File: drw-r--r--
Das bedeutet, dass jedermann deine Directories einsehen, deine Files lesen und Programme ausführen kann. Auch neu erzeugte Files sind der Öffentlichkeit zur Einsicht freigegeben. Dies entspricht der offenen Philosophie von UNIX, sollte jedoch nie vergessen werden!
Eine Ausnamhe bilden `persönliche' Dateien wie Mail, News oder Netscape Sachen. Diese werden automatisch mit Attributen erzeugt, die einlesen durch andere verhindern.
Natürlich ist es auch möglich die File Attribute zu verändern. Und man kann auch festlegen welche Attribute vergeben werden wenn man Files neu erzeugt. Weitere Informationen dazu finden sich in den Manpages von chmod und umask
Wildcards
Die Zeichen `*', `?' und `[xyz]' werden von der tcsh speziell behandelt. Sie heissen wildcards und funktionieren folgendermassen:
Wenn immer die shell z.B. einen `*' in der Eingabezeile findet, wird dieser durch eine Liste der Dateinamen im aktuellen Verzeichnis ersetzt. Erst dann startet die shell das entsprechende Programm.
Wenn du also in einem Verzeichnis mit den Dateien `hallo.txt' und `timelord.txt' das command `ls *' eingibst, wird von der Shell erstmal der `*' durch `hallo.txt timelord.txt' ersetzt und dann `ls hallo.txt timelord.txt' ausgeführt. Daher wird ls dann die Verzeichnis Einträge für hallo.txt und timelord.txt zeigen.
Was bedeuten die Wildcards im einzelnen
* | Steht für beliebig viele (auch Null) Zeichen. |
? | Ist Platzhalter für genuau ein einzelnes Zeichen. |
[xyz] | Steht für jedes in der Klammer aufgeführte Zeichen. Hier also x,y und z. |
[g-t] | Ist Platzhalter für alle im Bereich enthaltenen Zeichen. Ein Bereich besteht aus zwei, durch ein "-" getrennte Zeichen. Hier also g bis t. |
Weitere Informationen findet man etwas versteckt in den man-pages zu csh unter dem Titel "filename substitution".
Hier noch einige weitere Beispiele
ls -a .* | Listet alle Directoryeinträge auf, die mit einem Punkt beginnen. |
ls -a [a-z]* | Listet alle Directoryeinträge auf, die mit einem kleinen Buchstaben beginnen. |
ls *.* | (Achtung DOS User) zeigt nicht wie gewohnt alle vorhandenen Files, sondern nur die, die einen Punkt im Namen enthalten. |
Programme im Hintergrund laufen lassen.
Hat man ein Programm aufgerufen, so bleibt die Shell "hängen", bis dieses beendet wird. Das kann verhindert werden, indem man das Programm im Hintergrund laufen lässt. Dies wird erreicht, indem man dem Programmnamen und den Parametern ein "&" anhängt.
Alternativ lassen sich Programme auch mit [Control]-[Z] und dem Befehl `bg' in den Hintergrund befördern.
Editoren
Für Einsteiger empfehle ich pico zu starten. Dies ist einen einfachen Texteditor.
vi
"vi" ist der unter UNIX wohl am weitesten verbreitete Editor. Und es gibt auch Leute die Fans davon sind. Sein grösstes Plus ist wohl, dass er wirklich auf jedem UNIX-System zu finden ist. Er basiert auf dem Zeileneditor "ex", von dem er auch etliche Komfortmängel geerbt hat. Wer sich die Mühe machen will, findet in den man-pages eine brauchbare Anleitung. Ohne Mühe geht's mit dem Wissens-Artikel zu vi.
Fileinhalt anzeigen mit "less"
less <filename> |
Less zeigt eine Datei seitenweise an. Mit den Pfeiltasten kann man sich darin hin und her bewegen. [?] zeigt einem alle verfügbaren Komandos an und mit [/] kann man die Datei durchsuchen.
Prozesse
Unter Unix laufen immer eine ganze Menge von Programmen (Prozessen) gleichzeitig. Mit den Befehlen ps und top kann man sich die Sache ansehen.
Besonders interessant ist top, da es die Prozesse gleich noch sortiert nach Belastung des Computers.
Ein Kurze Befehls Übersicht zu top:
u <username> | Zeigt nur die prozesse eines bestimmten Benutzers. |
k <PID> | Fordert ein Programm auf, sich zu beenden. |
k -9 <PID> | Kill ein Programm. Wer nicht hören will ... |
Für Details verweise ich wieder einmal auf die man-pages, einem wirklich nicht zu unterschätzenden Hilfsmittel.
Output umleiten
username@stinky:~> <command> > <filename> |
- schreibt die Daten, die der Befehl liefert, in ein File. Dies wird durch die noclobber option beinflusst. Mehr dazu in der csh manpage.
username@stinky:~> ls -l > savedir.txt |
- Erzeugt ein File namens savedir.txt, das eine Liste der Dateien im aktuellen Verzeichnis enthät
username@stinky:~> <Command> >> <filename> |
- fügt die Daten, die der Befehl liefert, einem File hinzu.
Pipe
leitet die Ausgabe des ersten Befehls direkt zum zweiten Befehl, der die kommenden Daten als Eingabe weiterverarbeitet.
- Gibt Directoryeinträge seitenweise aus.
- Unter Unix existieren sehr viele Programme, die speziell für die Verwendung mit pipes gemacht sind, die sogenannten Filter Hier eine kleine Auswahl:
username@stinky:~> <Command> | <Command> | |
username@stinky:~> ls -l | less | |
wc | zählt Wörter und Linien |
head -x | zeigt die ersten x Zeilen. |
tail -x | zeigt die letzten x Zeilen |
grep xyz | zeigt die Zeilen, die xyz enthalten |
sort | sortiert die Zeilen |
Natürlich lassen sich diese filter auch ohne Pipe verwenden: grep main *.c sucht das Wort main in allen Dateien, die auf .c enden. Pipes lassen sich übrigens auch verketten: ls *|sort|less.
Ich will mehr Details ...
OK also gut ... Im folgenden Abschnitt werde ich ein paar Worte über weitere grundsätzliche UNIX Konzepte verlieren:
Environmentvariablen
Gewisse Informationen werden unter UNIX in sogenannten Environmentvariablen abgelegt. Das funktioniert folgendermassen: Wenn immer ein Programm aufgerufen wird, erhält es eine Kopie aller environment Variablen seiner Eltern mit auf den Weg. Auf diese Weise können Informationen weitergegeben werden, ohne dass sie in irgend einer Datei gespeichert werden müssen. Mit folgenden Befehlen kannst Du den Inhalt von Environment-Variablen ansehen und verändern:
setenv XYZ "hi world" | Weist der Variable XYZ den Wert "hi world" zu |
unsetenv XYZ | Löscht die Variable XYZ. |
echo $XYZ | Zeigt den Inhalt von XYZ |
printenv | Zeigt ALLE Environmentvariablen, die zur Zeit definiert sind. |
Hier eine Aufstellung einiger wichtiger Environmentvariablen:
PATH | Eine durch ':' getrennte Liste der Verzeichnisse in denen nach Programmen gesucht wird. |
EDITOR | Der Name des Programms, das im Normalfall als Editor verwendet werden soll. |
Aliases
Eine sehr praktische Funktion der (t)csh sind die Aliase. Damit können auf einfache Art und Weise neue Befehle erzeugt werden.
alias | Zeigt eine Liste der momentan definierten Aliases. |
alias <name> <text> | Erzeugt ein neues alias (name), das den Befehl (text) ausführt. |
Ist man es leid, "ls -al" zu tippen, und möchte dafür eine Abkürzung, zum Beispiel "la", definieren, so geht man folgendermassen vor:
alias la "ls -al" |
Diese Definition geht allerdings beim Auschalten wieder verloren. Um das zu umgehen, kannst du die Alias-Definition in dein ~/.cshrc File einfügen.
.cshrc und .login
Wenn du dich in dein Konto einloggst werden folgende Dateien automatisch ausgeführt, bevor du irgendwelche Eingriffsmöglichkeit bekommst:
- /etc/.cshrc
- ~/.cshrc
- /etc/.login
- ~/.login
Die beiden Dateien im /etc Verzeichnis kannst du nicht verändern. Sie enthalten allgemeine Konfigurationsanweisungen die für jedes Konto auf Tardis gelten. Die Dateien in deinem Home Verzeichnis (~/.cshrc und ~/.login) kannst du jedoch mit einem Texteditor verändern.
Während die .login Dateien nur beim login gelesen werden, werden die beiden .cshrc jedes mal, wenn du eine neue tcsh startest, gelesen.
Bei Bedarf kann man die .login und .cshrc Dateien auch mit dem Befehl source .login oder souce .cshrc gezielt ausführen.
The End
Das sollte eigentlich reichen für den Anfang. Viel Spass beim Ausprobieren!