x
Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu.Weitere Informationen.
OK
Serving the Multimedia Community since 1989.
Shell-Zugang
Der Shell-Zugang - UNIX pur

Auf Ihren MicroRack Server können Sie auch per Shell zugreifen. Mit Ihrem Admin-Usernamen (login) und Ihrem Passwort können Sie sich in die Kommando-Konsole (Shell) einloggen. Diese Kommando-Konsole ist vergleichbar mit der MS-DOS Eingabeaufforderung, verfügt jedoch über wesentlich mächtigere Funktionen und Möglichkeiten.

Das Dateisystem

Die Struktur des Filesystems von UNIX ist für den Benutzer nach außen hin der von DOS recht ähnlich. Mit Struktur des Filesystems ist hier die Anordnung von Verzeichnissen und der darin enthaltenen Dateien gemeint. 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:

Unter DOS sind die Dateinamen in der 8.3-Form, d.h. wie etwa NICHGENG.TXT. Unter UNIX sind die Regeln für Dateinamen bei Benutzung des UMSDOS- oder EXT2-Filesystems wesentlich liberaler, vergleichbar etwa mit Win95. Es können bis zu 255 Zeichen verwandt werden, und der Punkt kann beliebig oft auftreten. Ein Beispiel für einen Dateinamen unter UNIX ist z.B. Das_ist.ein.SEHR_langer.dateiname. Man beachte, daß hier sowohl große als auch kleine Buchstaben verwandt werden, denn es wird auch hier zwischen großen und kleinen Buchstaben im Gegensatz zu DOS unterschieden. Das heißt, FILENAME.tar.gz und filename.tar.gz sind zwei unterschiedliche Dateien. So ist ls ein Kommando, LS dagegen wird höchst wahrscheinlich nur eine Fehlermeldung bringen.

Windows Nutzer werden wahrscheinlich Leerzeichen innerhalb der Dateinamen verwenden wollen. Wenn ein Name solche enthält (was nicht sehr empfehlenswert ist), muß er immer wenn er verwendet wird in Anführungszeichen eingeschlossen werden. Beispielsweise:

$ # das folgende Kommando legt ein Verzeichnis namens "Meine alten Dateien" an

$ mkdir "Meine alten Dateien"

$ ls

Meine alten Dateien bin tmp

Einige Zeichen können zwar verwendet werden, sollten es aber nicht, wie zum Beispiel !*$&. Ich will nicht erklären wie man das macht, denn es ist wirklich keine gute Idee. Diese Zeichen haben alle eine spezielle Bedeutung für die Shell, und wenn sie in Dateinamen auftauchen, kann das unerwartete Ergebnisse zeitigen wenn man nicht genau aufpaßt.

Für Programme gibt es keine zwangsweisen Erweiterungen wie .exe .com oder .bat für Batchdateien. Ausführbare Programme werden beim Auflisten mit dem Kommando ls -F mit einem Sternchen ’*’ am Ende des Namens versehen, zum Beispiel:

$ ls -F

Brief_an_Joe cindy.jpg cjpg* Ein_Verzeichnis/ mein_1._script* alt~

Hier sind die Dateien cjpg und mein_1._script ausführbar, d.h. Programme. Man beachte, daß der Stern nicht Teil der Dateinamen ist, sondern nur zur Kennzeichnung als ausführbar beim Auflisten dient. Unter DOS enden Backup-Dateien üblicherweise auf .BAK, während sie unter UNIX im allgemeinen mit einer Tilde ’~’ enden. Dateien, deren Name mit einem Punkt beginnt, werden als versteckte Dateien behandelt. Sie werden bei einem normalen Auflisten mit ls nicht angezeigt. Die Datei .Ich.bin.eine.versteckte.Datei wird also normalerweise bei einer Auflistung ignoriert, erst ein ls -a bringt sie zum Vorschein.

Optionen und Schalter werden unter DOS als /schalter angegeben, unter UNIX mit -schalter oder --schalter. Beispiel: dir /s wird zu ls -R. Man beachte, daß viele DOS-Programme Schalter nach UNIX-Art verwenden, so z.B. PKZIP oder ARJ.

Befehle zur Verwaltung von Verzeichnissen und Dateien:

Grundlegende Befehle zum Arbeiten mit Verzeichnissen:

! ls : Listet Dateinamen des aktuellen Verzeichnisses auf.

! cd usr : Wechsel in das Unterverzeichnis ’usr’ des aktuellen Verzeichnisses.

! cd .. : Wechsel zurück in das übergeordneten Verzeichnisses des aktuelllen Verzeichnisses.

! cd ~ : Wechselt in das Homeverzeichnis des momentanen Users (Anwenders).

! mkdir Zweig : Erstellt ein Unterverzeichnis mit dem Titel ’Zweig’.

! rmdir Zweig : Löscht das Unterverzeichnis ’Zweig’ , das allerdings leer sein muß.

! rm -r Verzeichnisname : Löscht das Unterverzeichnis ’Verzeichnisname’ und alle Dateien, die es beinhaltet.

! pwd : Gibt aktuelle Position im Dateibaum an.

Befehle zum Kopieren von Dateien:

! cp Namealt Nameneu : Kopiert Datei ’Namealt’ nach ’Nameneu’.

! mv Namealt Nameneu : Benennt Datei ’Namealt’ in ’Nameneu’ um.

Ausgabebefehle:

! cat dateiname : Gibt den Inhalt dateiname auf der Standardausgabe (meist Bildschirm) aus.

! more dateiname : Gibt den Inhalt der Datei dateiname seitenweis auf der Standardausgabe (meist Bildschirm) aus.

! echo Hallo Du : Gibt Hallo Du auf der Standardausgabe aus.

! man befehl : Liefert Informationen und Anleitungen über das Programm oder den Befehl namens befehl .

  • hostname : Gibt Name des Rechners an, an dem man gerade arbeitet.

Wichtige Systembefehle:

  • su username : su erlaubt dem Administrator oder der User "root" sich temporär mit den Rechten des jeweiligen Benutzer ausstatten. Durch die Eingabe von exit beenden Sie diese Umschaltung wieder.
  • chown username dateiname : Mit dem Befehl chown kann der Inhaber einer Datei ändern.
  • df : Der Befehl df zeigt die Speicherplatz-Belegung Ihres Servers an.
  • ps : Gibt eine Liste aller laufenden Vordergrund-Prozesse aus
  • ps –x : Gibt eine Liste aller laufenden Prozesse aus
  • kill <PID> : Beendet einen Prozess vorschriftsmäßig.
  • kill –KILL <PID> : Beendet einen Prozess auch wenn ein normales Beenden des Programmes nicht mehr möglich ist.

Links

UNIX hat noch einen weiteren Dateityp, der bei DOS nicht existiert. Es ist der Link. Ein Link ist eigentlich keine richtige Datei, sondern nur eine Art Verweis auf eine andere, bereits existierende Datei oder Verzeichnis. Es gibt zwei Typen von Links, den Hardlink und den symbolischen Link. Es soll hier nicht weiter auf den Unterschied zwischen beiden eingegangen werden, da sie sich äußerlich für den Nutzer kaum unterscheiden. Heutzutage werden üblicherweise vorwiegend symbolische Links eingesetzt, da sie etwas flexibler sind. Am ehesten vergleichbar sind symbolische Links mit den Windows Shortcuts. Beispiele für symbolische Links sind z.B. das Verzeichnis /www welches ein Link auf /usr/local/etc/httpd ist und /shlib.

Um einen symbolischen Link anzulegen gibt man ein:

$ ln -s <Datei_oder_Verzeichnis> <Linkname>

Beispiele:

$ ln -s /usr/home/domainname.com/htdocs webdaten

Jetzt kann man sich auf webdaten beziehen anstelle von /usr/home/domainname.com/htdocs. 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

Rechte und Eigentümer

Dos-Dateien haben folgende Attribute: A (archivieren), H (versteckt), R (nur lesbar) und S (System). Nur H und R sind unter UNIX sinnvoll: H sind 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 kernel system 27281 Aug 15 1995 /bin/ls*

Das erste Feld enthält die Rechte der Datei /bin/ls, die kernel gehört, sowie der Gruppe system. 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 das 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.

Im Falle unseres /bin/ls kann man also die Datei nicht verändern, da nur kernel schreibzugriff auf diese Datei hat. 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, und recht ist das Recht, was geändert wird, also entweder r (read), w (write), oder x (execute).

Beispiele:

$ chmod u+x file

setzt die Ausführungsrechte für den Eigentümer.

$ chmod go-wx file

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

$ chmod ugo+rwx file

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

Mit dem Befehl su (switch user / wechsle Benutzer) kann der Administrator oder der User "root" sich temporär mit den Rechten des jeweiligen Benutzer ausstatten. Nach Eingabe des Befehls

$ su bernd

werden alle Eingaben mit den Rechten des Benutzers "bernd" ausgeführt. Durch die Eingabe von exit beenden Sie diese Umschaltung wieder.

Übertragen von Kommandos von DOS nach UNIX

Auf der linken Seite ist das DOS Kommando aufgeführt, auf der Rechten das UNIX-Pendent:

COPY: cp

DEL: rm

MOVE: mv

REN: mv

TYPE: more, less, cat

Umleitungs- und Pipingoperatoren: < > >> |

Platzhalter: * ?

nul: /dev/null

 

Beispiele:


DOS UNIX

________________________________________________________________

C:\GUIDO>copy joe.txt joe.doc $ cp joe.txt joe.doc

C:\GUIDO>copy *.* total $ cat * > total

C:\GUIDO>copy fractals.doc prn $ lpr fractals.doc

C:\GUIDO>del temp $ rm temp

C:\GUIDO>del *.bak $ rm *~

C:\GUIDO>move paper.txt tmp\ $ mv paper.txt tmp/

C:\GUIDO>ren paper.txt paper.asc $ mv paper.txt paper.asc

C:\GUIDO>print letter.txt $ lpr letter.txt

C:\GUIDO>type letter.txt $ more letter.txt

C:\GUIDO>type letter.txt $ less letter.txt

C:\GUIDO>type letter.txt > nul $ cat letter.txt > /dev/null

nicht vorhanden $ more *.txt *.asc

nicht vorhanden $ cat section*.txt | less

Bemerkungen:

Der * ist unter UNIX intelligenter: * paßt auf alle Dateien, außer auf die versteckten, *.* paßt nur auf solche Dateien, die ein ’.’ in der Mitte oder am Ende haben, p*r paßt auf ‘peter’ und ‘pfeiffer’ (mit 3 f ;-), *c* paßt auf ‘picken’, ‘pack.txt’, ‘mac’ und ‘c’ selbst.

Wenn man more benutzt, kann man mit LEERTASTE in der Datei weiterblättern, mit ’q’ oder CTRL-C beendet man es. less ist etwas intuitiver und läßt einen mit den Cursortasten durch die Datei wandern. Manchmal ist more einfach nur ein Link auf less, so daß sich beide gleich verhalten.

Es gibt kein UNDELETE, also zweimal überlegen bevor man etwas löscht.

Zusätzlich zu den DOS-üblichen < > >> hat UNIX noch 2> um Fehlermeldungen umzulenken (stderr). Darüber hinaus lenkt 2>&1 stderr nach stdout um und 1>&2 stdout nach stderr.

UNIX hat noch einen anderen Platzhalter: das []. Verwendung: [abc]* paßt z.B. auf alle Dateien, die auf a, b oder c beginnen; *[I-N,1,2,3] paßt auf alle Dateien, die mit I, J, K, L, M, N, 1, 2 oder 3 enden.

Es gibt standardmäßig kein DOS-ähnliches RENAME; d.h. mv *.xxx *.yyy funktioniert nicht. Es gibt jedoch ein Programm namens mmv (Multiple MoVe), das Analoges leistet. Es ist in vielen Distributionen bereits enthalten. Um die Shell daran zu hindern, den Platzhalter selber zu interpretieren, muß der erste Dateiname in Anführungszeichen eingeschlossen werden. Beispiel:

# mmv ’*.xxx’ #1.yyy

#1 wird hierbei durch den zum ersten (und in diesem Falle einzigen) Platzhalter in *.xxx passenden String ersetzt. Es gibt noch ein paar andere kleine Unterschiede zu RENAME, also hier wieder mal --- MSL.

Man benutze cp -i und mv -i , um gewarnt zu werden, wenn eine Datei dadurch überschrieben würde;

Programme starten und verwalten

Um ein Programm auszuführen, gibt man einfach den Namen wie unter DOS ein. Falls das Verzeichnis, in dem sich das Programm befindet, im Pfad PATH ist, wird das Programm starten. 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 ein ./programm. Hinweis: das aktuelle Verzeichnis ist unter UNIX 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 Progrämmchen 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, dass 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 UNIX zusätzlich zu den von DOS bekannten bietet. Einer der Gründe die für UNIX 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.

Die Shell gibt jedem Prozeß eine PID (ProzessID).

Um alle Prozesse auflisten zu lassen:

$ ps -x

Dieses gibt eine Liste aller gerade laufenden Prozesse aus.

Um einen Prozeß zu beenden:

$ kill <PID>

Dies ist nützlich, um einen Prozeß zu beenden, wenn man entweder nicht weiß, wie man das Programm "vorschriftsmäßig" beendet, oder diese eigentlich vorgesehene Methode nicht mehr funktioniert. Manchmal kann ein Prozeß nur noch durch folgendes Kommando beendet werden:

$ kill -9 <PID>

kill -9 beendet jeden Prozeß, da dieses Signal nicht vom Prozeß abgefangen werden kann, d.h. der Prozeß wird vom Betriebssystem zwangsweise rausgeschmissen.

Ferner gibt es wie unter Windows die Möglichkeit mit CTRL-C einen im Vordergrund laufenden Prozeß anzuhalten (funktioniert nicht immer, das Programm kann das explizit verhindern).

 




Texte von Marco Budde und Olaf Penugaow