Inhalt

4. Dateien und Programme

4.1 Dateien: Grundlegende Begriffe

Die Struktur des Dateisystems von Linux ist der von DOS/Win recht ähnlich. Die Namen für Verzeichnisse und Dateien gehorchen bestimmten Regeln, Dateien werden in Verzeichnissen abgelegt, es gibt ausführbare Dateien und diese haben oft auch wie unter DOS Kommandozeilenparameter. Darüber hinaus kann man auch Platzhalter, Umlenkung und Piping verwenden. Es gibt jedoch gegenüber DOS ein paar Unterschiede:

Wer will, kann jetzt mit dem Abschnitt Übertragen von Kommandos von DOS nach Linux weitermachen, aber es ist nützlich, sich vorher noch kurz ein paar Dinge anzuschauen, die es nicht in DOS oder Windows gibt.

4.2 Symbolische Links

UNIX hat noch einen weiteren Dateityp, der bei DOS nicht existiert. Es ist der symbolische Link. Ein solcher Link ist eigentlich keine richtige Datei, sondern nur eine Art Verweis auf eine andere, bereits existierende Datei oder Verzeichnis. Dieser Link kann dann anstelle der eigentlichen Datei verwendet werden. Ein solcher Link ist ähnlich den Verknüpfungen unter Windows (aber eben nur ähnlich). Beispiele für symbolische Links sind z.B. das Verzeichnis /usr/X11, welches ein Link auf /usr/X11R6 ist und /dev/modem, welches entweder auf /dev/ttyS0 oder /dev/ttyS1 zeigt.

Um einen symbolischen Link anzulegen gibt man ein:

$ ln -s <Datei_oder_Verzeichnis> <Linkname>

Beispiele:

$ ln -s /usr/doc/g77/DOC g77manual.txt

Jetzt kann man sich auf g77manual.txt beziehen anstelle von /usr/doc/g77/DOC. Links werden bei der Auflistung eines Verzeichnisses wie folgt angezeigt:

$ ls -F
g77manual.txt@
$ ls -l
(verschiedene Angaben zur Datei ...)   g77manual.txt -> /usr/doc/g77/DOC

Linux kennt noch einen anderen Typ von Links, den Hardlink (»harter Link«). Dieser Link hat aber gegenüber dem symbolischen Link gewisse Einschränkungen, und es gibt im Prinzip nichts was man mit dem Hardlink machen kann das nicht auch mit symbolischen Links geht. Deshalb soll hier nicht näher auf diese Links eingegangen werden.

4.3 Rechte und Eigentümer

DOS-Dateien haben folgende Attribute: A (archivieren), H (hidden - versteckt), R (read only - nur lesen) und S (System). Nur H und R sind unter Linux sinnvoll: H entspricht Dateien die mit einem Punkt anfangen, und R wird später besprochen.

Unter UNIX besitzt jede Datei »Rechte« und einen Eigentümer, der wiederum zu einer »Gruppe« gehört. Hier ein Beispiel:

$ ls -l /bin/ls
-rwxr-xr-x  1  root  bin  27281 Aug 15 1995 /bin/ls*

Das erste Feld enthält die Rechte der Datei /bin/ls, die root gehört, sowie der Gruppe bin. Die Zeichenfolge -rwxr-xr-x bedeutet von links nach rechts:

- ist der Dateityp (- = normale Datei, d = Verzeichnis, l = Link, usw.); rwx sind die Rechte für den Eigentümer der Datei (lesen, schreiben, ausführen); /r-x sind die Rechte für die Gruppe des Eigentümers (lesen, ausführen) - auf das Prinzip von Gruppen soll hier nicht weiter eingegangen werden, man kann als Anfänger auch sehr gut ohne auskommen) - ; r-x sind die Rechte für den Rest der Nutzer (lesen, ausführen). Für die Leute, bei denen Englisch nicht die zweite Muttersprache ist, hier die englische Bedeutung der Kürzel: r - Read, w - Write, x - eXecute, sowie beim Dateityp d für directory. Den Rest der Ausgabe schenken wir uns hier.

Das Verzeichnis /bin besitzt auch Rechte, siehe Abschnitt Verzeichnisrechte. Deshalb kann man also die Datei /bin/ls nicht löschen, es sei denn, man ist root: alle anderen haben nicht die notwendigen Rechte. Das Kommando, um die Rechte einer Datei zu ändern, ist:

$ chmod <werXrecht> <datei>

wobei »wer« für den steht, dessen Rechte geändert werden, also entweder u (user, der Eigentümer), g (group, die Gruppe), o (other, der Rest) oder a (all, alle Nutzer). »X« ist entweder +, - oder =, je nachdem, ob das Recht hinzugefügt oder weggenommen wird, bzw. auf den angegebenen Wert gesetzt wird. »recht« ist das Recht, welches geändert wird, also entweder r (read), w (write), oder x (execute).

Beispiele:

$ chmod +x datei

setzt das Ausführungsrecht für diese Datei für alle Nutzer.

$ chmod go-rw datei

nimmt das Leserecht und das Schreibrecht für alle außer den Eigentümer weg.

$ chmod ugo+rwx datei

setzt für alle Schreib-, Lese- und Ausführungsrechte. Man kann hier auch die Folge »ugo« einfach durch »a« (all) ersetzen.

# chmod +s datei

setzt das sogenannte (oben nicht erwähnte) »setuid« (oder »suid«) Recht (meistens als setuid-Bit bezeichnet). Damit wird eine Datei, wenn sie ausführbar ist, automatisch beim Aufruf mit den Rechten des Eigentümers ausgeführt und nicht wie sonst üblich mit den Rechten des Aufrufers. Typischerweise sind setuid Dateien solche die root gehören, welche dann wichtige Systemfunktionen ausführen, wie z.B. der X-Server.

Ein kürzerer Weg zur Angabe von Rechten ist die Angabe von Zahlen: rwxr-xr- x kann z.B. als 755 angegeben werden. Dabei entspricht jeder Buchstabe einem Bit: --- ist 0, --x ist 1, -w- ist 2, - wx ist 3... . Es ist zu Beginn etwas gewöhnungsbedürftig, aber nach und nach bekommt man Routine mit diesen Werten. Root kann als Systemverwalter die Rechte jeder Datei und jedes Verzeichnisses ändern, der normale Nutzer nur entsprechend der Rechte die er an der Datei/dem Verzeichnis hat. MSL.

4.4 Übertragen von Kommandos von DOS nach Linux

Auf der linken Seite ist das DOS-Kommando aufgeführt, auf der Rechten das Linux- Pendant

ATTRIB: chmod
COPY:           cp
DEL:            rm
MOVE:           mv
REN:            mv
TYPE:           more, less, cat

Umlenkungs- und Pipingoperatoren: < > >> |

Platzhalter: * ?

nul: /dev/null

prn, lpt1: /dev/lp0 oder /dev/lp1; lpr

Beispiele:

DOS                                     Linux
________________________________________________________________

C:\GUIDO>ATTRIB +R DATEI.TXT            $ chmod 400 datei.txt
C:\GUIDO>COPY JOE.TXT JOE.DOC           $ cp joe.txt joe.doc
C:\GUIDO>COPY *.* TOTAL                 $ cat * > total
C:\GUIDO>COPY FRAKTALE.DOC PRN          $ lpr fraktale.doc
C:\GUIDO>DEL TEMP                       $ rm temp
C:\GUIDO>DEL *.BAK                      $ rm *~
C:\GUIDO>MOVE VORTRAG.TXT TMP\          $ mv vortrag.txt tmp/
C:\GUIDO>REN VORTRAG.TXT VORTRAG.ASC    $ mv vortrag.txt vortrag.asc
C:\GUIDO>PRINT BRIEF.TXT                $ lpr brief.txt
C:\GUIDO>TYPE BRIEF.TXT                 $ more brief.txt
C:\GUIDO>TYPE BRIEF.TXT                 $ less brief.txt
C:\GUIDO>TYPE BRIEF.TXT > NUL           $ cat brief.txt > /dev/null
  nicht verfügbar                       $ more *.txt *.asc
  nicht verfügbar                       $ cat abschnitt*.txt | less

Bemerkungen:

4.5 Programme starten: Multitasking und Sessions

Um ein Programm auszuführen, gibt man einfach den Namen wie unter DOS ein. Falls das Verzeichnis (Abschnitt Verzeichnisse), in dem sich das Programm befindet, im Pfad in PATH (Abschnitt Der Systemstart) ist, startet das Programm. Unterschied zu DOS: ein Programm, das sich im aktuellen Verzeichnis befindet, wird nicht gefunden - es sei denn, das aktuelle Verzeichnis ist als ».« explizit im Pfad enthalten. Wenn nicht, hilft es statt dessen ./programm einzugeben.

Hinweis: das aktuelle Verzeichnis ist unter UNIX/Linux oft am Ende des Pfades eingetragen (aus Gründen der Systemsicherheit), d.h. es werden erst alle anderen Verzeichnisse nach programm durchsucht und zum Schluß erst das aktuelle Verzeichnis. Wenn man z.B. ein kleines Programm geschrieben hat und es test nennt, wird, wenn man es mit test aufruft und nicht mit ./test, zuerst das UNIX-Kommando test selbigen Namens gefunden (oder die Shell-interne Funktion, je nach Shell) und ausgeführt und nicht das eigene Programm im aktuellen Verzeichnis. Das führt oft zu langem Grübeln, bis man endlich merkt, daß das falsche Programm aufgerufen wurde, denn test ohne Parameter gibt keinerlei Meldungen o.ä. aus. Auf diesen »Trick« sind schon Generationen von Einsteigern hereingefallen und werden wahrscheinlich auch noch weitere Generationen hereinfallen.

Hier das Aussehen eines typischen Kommandos:

$ kommando [-s1 [-s2] ... [-sn]] [par1 [par2] ... [parn]] [< input] [> output]

wobei -s1, ..., -sn die Programmschalter sind und par1, ..., parn die Parameter. Der Rest sind die Umlenkungen, d.h. das Programm erhält seine Eingaben aus der Datei input und schreibt die Ausgaben in die Datei output. Es müssen natürlich nicht immer alle Teile enthalten sein.

Mehrere Kommandos hintereinander können so eingegeben werden:

$ kommando1 ; kommando2 ; ... ; kommandon

Das ist alles, was man braucht, um ein Kommando aufzurufen. Es gibt jedoch darüber hinaus Möglichkeiten, die Linux zusätzlich zu den von DOS/Windows bekannten bietet. Einer der Gründe die für Linux sprechen ist es, daß es ein Betriebsystem mit Multitasking ist, d.h. es kann mehrere Programme (ab jetzt Prozesse genannt) gleichzeitig ausführen. Man kann einen Prozeß im Hintergrund starten und mit einem anderen weiterarbeiten. Darüber hinaus bietet Linux auch mehrere Sitzungen (Sessions) gleichzeitig an. Es ist so, als ob man an mehreren Rechnern arbeiten würde.

Mit diesen Kommandos kann man Disketten formatieren, Archive komprimieren, Programme kompilieren, Berechnungen ausführen usw. und trotzdem noch einen benutzbaren Prompt haben. Man versuche das einmal mit Windows! Windows kennt zwar auch Multitasking, jedoch ist das System meistens mit einem Programm bereits so ausgelastet, daß es für ein sinnvolles Arbeiten mit einem weiteren kaum noch reicht (oder es gleich abstürzt).

4.6 Programme über das Netz auf anderen Rechnern ausführen

Um ein Programm auf einem anderen Rechner auszuführen, dessen Adresse z.B. andere.maschine.de ist, gibt man ein:

$ telnet andere.maschine.de

Nachdem man eingeloggt ist, kann man das gewünschte Programm starten. Natürlich muß man eine Zugangsberechtigung mit Zugriff auf die Shell auf dieser Maschine haben (ein sogenannter Shellaccount).

Wenn man X-Windows (auch X11 genannt) benutzt, kann man sogar ein X-Programm auf dem anderen Rechner starten und sich die Ausgabe auf den eigenen Rechner umlenken. Wenn anderer.grosser.de der entfernte Rechner ist und lokal.linux.box.de der eigene Linuxrechner, muß man wie folgt vorgehen, um ein Programm auf anderer.grosser.de zu starten und es von lokal.linux.box.de aus zu bedienen:

Und siehe da! progname startet jetzt auf anderer.grosser.de und wird auf dem eigenen lokalen Rechner angezeigt. Man sollte jedoch vorsichtig sein beim Versuch, dies über eine langsame Modemleitung o.ä. zu machen. Bei so geringer Transferrate dürfte ein sinnvolles Arbeiten kaum möglich sein. Darüber hinaus ist es auch nicht das sicherste Verfahren. Zu dem Thema gibt es ein (englisches) Mini-HOWTO, das »Remote X Apps mini-HOWTO« unter

www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html


Inhalt