Einführung in Unix
B Bunk
24.2.2012
Zur Notation
Die vorgeschriebenen Teile der Befehle werden hier geschrieben wie
command. Was von Fall zu Fall angepasst werden muss, ist
kursiv gesetzt. Optionale Teile sind in [ ] eingeschlossen.
Das Unix-Prompt wird dargestellt durch prompt> , wie es
im Einzelfall aussieht, hängt von der lokalen Konfiguration ab.
Benutzer-Verwaltung
Jede(r) BenutzerIn bekommmt bei der Registrierung auf einem Unix-System
einen Login-Namen (username) und ein Passwort (password).
Das Passwort kann (und muss regelmäßig) geändert werden. Der
dafür unter Unix übliche Befehl passwd geht bei uns
nicht, weil unsere Benutzerverwaltung zentralisiert ist.
Stattdessen ruft man die Webseite
https://pass.physik.hu-berlin.de auf.
Gute Passwörter sind eine wichtige Sicherheitsmaßnahme,
sie sollten mindestens 7 Zeichen enthalten, möglichst den ganzen
Zeichensatz (Groß/Kleinbuchstaben, Ziffern, Sonderzeichen - aber keine
Umlaute und ß) ausnutzen und nicht aus (deutschen oder englischen)
Wörtern oder Namen bestehen, wie man sie in Wörterbüchern
finden kann.
Jede(r) BenutzerIn bekommt ein "Home-Verzeichnis", das
(bei geeigneter Wahl der Zugriffsrechte) nur er/sie selbst lesen und beschreiben
kann - vom Administrator ("root") abgesehen.
Neben dem Benutzernamen wird noch eine Gruppe zugewiesen, sie spielt
bei den Zugriffsrechten eine Rolle. Die Zuordnung kann man mit dem Befehl
id anzeigen.
Graphische Oberfläche
Unix-Systeme laufen mit einer graphischen Oberfläche, dem
X-Window-System, auch kurz X oder X11 genannt.
Zunächst erscheint ein Anmeldefenster, danach startet eine graphische
Sitzung (session), die eine bequeme Bedienung des Systems über
Fenster und Menüs erlaubt.
Unter Linux ist es meist KDE, es kommen auch Fvwm, WindowMaker, Gnome u.a.
in Frage.
Zur Abgabe von Befehlen auf der Kommandozeile öffnet man ein
Terminal-Fenster, z.B. XTerm oder die KDE-Konsole. Es erscheint ein
prompt und wartet auf...
Unix-Befehle
Unix unterscheidet zwischen Groß- und Kleinschreibung!
Unix-Befehle bestehen i.a. aus einem Befehlswort, gefolgt von Optionen
und Parametern. Kurze Optionen beginnen mit - , lange mit -- .
Mehrere Kurzoptionen können oft zusammengezogen werden: ls -l -a
ist dasselbe wie ls -la .
Befehle werden mit <ENTER> "abgeschickt".
Die Eingabe von Daten beendet man mit <CTRL><D> ,
ein harter Abbruch wird ggf. mit <CTRL><C> erreicht.
Beim Eintippen von Befehlsfolgen ist der Befehlspuffer nützlich: mit
den Pfeiltasten kann man senkrecht eine Liste der letzten Befehle durchlaufen,
waagerecht die Schreibmarke in der Befehlszeile bewegen, den Befehl ggf.
verändern und dann (mit <ENTER>) nochmals abschicken.
Außerdem hilft die Taste <TAB> bei der Vervollständigung
von Befehls- und Dateinamen.
Und noch ein Trick: ein Befehl, der einen länger laufenden
Vorgang startet (Editor, Browser etc), würde das Terminalfenster
blockieren. Ein angehängtes "&" lässt das
Programm in Hintergrund laufen und gibt das Prompt sofort zurück.
Zum Verständnis: das Systemprogramm, das diesen Dialog mit dem
Benutzer führt, nennt man eine Shell. Unter Linux ist es meist die
bash. Schon beim Einloggen wird eine solche Shell für den
Benutzer geöffnet, die eine persönliche, konfigurierbare
Arbeitsumgebung darstellt. Erst darüber baut sich die grafische
Oberfläche auf.
Hilfe
Hilfe ist unter Unix ein schwieriges Thema. Im allgemeinen wird sie durch
den Befehl man (manual) aufgerufen.
Wenn man den fraglichen Befehl oder ein naheliegendes Stichwort kennt, sagt man
prompt> man befehl
prompt> man -k stichwort
Die Antwort ist aber oft schwer verständlich (nicht nur für
Unix-Neulinge!).
Dateisystem
Das Dateisystem ist hierarchisch gegliedert (Baumstruktur), angefangen mit
/ , Unterverzeichnisse werden mit weiteren / angefügt.
Das Homeverzeichnis lautet z.B.
/users/stud/username
und kann durch ~ abkürzt werden. Außerdem steht "."
für das aktuelle und ".." für das übergeordnete
Verzeichnis.
Datei- und Verzeichnisnamen unterscheiden zwischen Groß- und
Kleinschreibung.
Man sollte Leerzeichen und länderspezifische Zeichen (Umlaute, ß)
vermeiden.
In bestimmten Situationen kann man Gruppen von Dateien und Verzeichnissen mit
Jokerzeichen (wildcards) ansprechen:
"*" für steht irgendeine Zeichenfolge (auch leer) und
"?" für genau ein Zeichen.
Wichtige Befehle im Dateisystem:
| pwd | aktuelles Verzeichnis
(print working directory)
|
| ls | Liste der Dateien (list)
|
| ls -l | ausführliche Liste (long)
|
| ls -a | vollständige Liste (all)
|
| cd verz | Verzeichnis wechseln (change directory)
|
| cp [-i] von nach | Datei kopieren (copy)
|
| mv [-i] von nach | Datei umbenennen (move)
|
| rm [-i] datei | Datei löschen (remove)
|
| mkdir verz | neues Verzeichnis anlegen
(make directory)
|
| rmdir verz | leeres Verzeichnis löschen
(remove directory)
|
Unter Unix gibt es keine einfache Möglichkeit, gelöschte Dateien
oder Verzeichnisse wieder herzustellen, also Vorsicht, insbesondere
im Gebrauch von Jokern!
Bei einigen der obigen Befehle hilft die Option -i : es wird
jedesmal nachgefragt, bevor etwas gelöscht oder überschrieben
wird.
Mit cp und mv kann man auch mehrere Dateien zugleich
kopieren bzw. umbenennen, das Ziel muss dann ein Verzeichnis sein, z.B.
cp datei1 datei2 .. verz
Zugriffsrechte
Die Zugriffsrechte auf Dateien und Verzeichnisse werden auf drei Ebenen
kontrolliert: Benutzer u (user), Gruppe g (group) und sonstige
o (others). Dort wird jeweils unterschieden zwischen dem Recht zum Lesen
r (read), Schreiben w (write) und Ausführen x
(execute), x wird auch bei Verzeichnissen gebraucht. Die gesetzten
Rechte werden mit ls -l angezeigt, und zwar (von links nach rechts)
ein d (directory), wenn es sich um ein Verzeichnis handelt, dann die
Rechte für u,g,o als Dreiergruppen. Beispiele:
| drwxrwxrwx | Verzeichnis mit vollem Zugriff für alle
|
| -rw-r----- | Datei mit Lese/Schreibrecht für den
Benutzer und Leserecht für die Gruppe
|
| drwxr-xr-x | Verzeichnis, in dem nur der Benutzer schreiben
(d.h. neue Dateien anlegen) darf
|
Zum Ändern der Rechte dient chmod:
| chmod g+rx verz | verz für Gruppe lesbar
|
| chmod go+r datei | datei für Gruppe und
andere lesbar
|
| chmod g-w,o-rw datei
| datei für Gruppe
nicht schreibbar
und für andere nicht
lesbar/schreibbar
|
Die Zugriffsrechte neu erzeugter Dateien und Verzeichnisse werden über
die Umask (user mask) kontrolliert. Das ist ein Bitmuster, das
bestimmte Rechte unterdrückt. Für u,g,o wird jeweils addiert:
r=4, w=2, x=1, die so entstehenden Ziffern 0..7 werden dann (von links
nach rechts) zu einer Oktalzahl zusammengestellt. So bedeutet 022,
dass für g und o der Schreibzugriff (w=2) verweigert wird, d.h. es
entstehen z.B. Dateien mit -rw-r--r-- und Verzeichnisse mit
drwxr-xr-x. Die Umask 027 dagegen
sperrt für g den Schreibzugriff und für o alle Zugriffe (4+2+1=7).
| umask | Maske anzeigen
|
| umask maske | Maske setzen
|
Dateien Anzeigen
Wichtige Befehle:
| cat datei
|
| more datei
|
| less datei
|
| grep zeichenkette datei
|
cat bringt die Datei unmittelbar auf den Schirm, more
erlaubt es, seitenweise vorwärts zu blättern (mit der Leertaste,
die Taste <q> bricht es ab). Mit less kann man sich in beiden
Richtungen durch den Text bewegen. more und less erlauben
es auch, interaktiv (durch Eingabe von /) nach einem Textfragment zu
suchen.
Mit grep zeigt man selektiv alle Zeilen einer Datei an, die
eine bestimmte Zeichenkette enthalten.
Schließlich kann man more, less, grep auch mit | an
einen anderen Befehl anhängen, um die Ausgabe zu kontrollieren, z.B.
prompt> ls -l | more
Text-Editor
Unter den vielen verfügbaren Editoren sei hier xedit genannt,
der auf den meisten Unix-Systemen installiert ist. Unter KDE bietet sich auch
kwrite als Alternative an. Ein solcher graphischer Editor
öffnet ein eigenes Fenster und ist intuitiv mit Maus und Tastatur
zu bedienen.
Aufruf:
prompt> xedit datei &
Wenn man das & vergessen hat und deshalb das Prompt nicht mehr
zurückbekommt, kann man den Editor stoppen und mit dem Befehl bg
(background) von Hand in den Hintergrund schicken:
prompt> xedit datei
<CTRL><Z>
prompt> bg
prompt>
Umgebungsvariablen
Die Arbeit unter einer Unix-Shell wird durch eine Reihe von Umgebungsvariablen
kontrolliert. Ihre Namen bestehen üblicherweise aus Großbuchstaben.
Will man ihren Wert abrufen, dann stellt man dem Namen ein $
voran. Eine Liste aller gerade gesetzten Umgebungsvariablen zeigt set .
Besonders zu erwähnen sind hier HOME und
PATH. HOME enthält den vollen Pfadnamen des
Home-Verzeichnisses, man kann ihn durch
echo $HOME
anzeigen. PATH speichert den Suchpfad für Befehle
als Liste von Verzeichnissen, getrennt durch ":". Wenn man
(wie üblich) einen Befehl ohne Pfad eingibt, dann werden nacheinander
die in PATH aufgeführten Verzeichnisse nach einer
ausführbaren Datei dieses Namens durchsucht. Mit
which befehl
kann man sich anzeigen lassen, was dabei ggf. gefunden wird (ohne
es tatsächlich aufzurufen).
Drucken
Der Befehl lpr schickt eine Datei auf den Standard-Drucker.
| lpr datei | Datei Drucken (line printer)
|
| lpr -P drucker datei
| Datei auf angegebenen Drucker schicken
|
| lpq -a | Warteschlangen anzeigen (queue)
|
| lpstat -o
|
| lpstat -a | Druckerstatus anzeigen
|
| lprm job# | Druckauftrag löschen (remove)
job# aus lpq
oder lpstat
|