2. Einführung in UNIX
Transcription
2. Einführung in UNIX
UNIX System, Netz und Kommunikation Seite 1 von 31 UNIX System, Netz und Kommunikation, version dated 2005-05-12 14:15:52 2. Einführung in UNIX Wir wollen uns möglichst rasch mit den wichtigsten Eigenschaften und Kommandos von UNIX vertraut machen. Du findest hier Informationen über 2.1 Namen 2.2 Grundbegriffe - Shells 2.3 File- und Directorystruktur 2.4 Elementare Kommandos 2.5 Parameterexpansion (Wild Cards) 2.6 Der History-Mechanismus der C-Shell 2.7 Eingabe und Ausgabe 2.8 Weitere nützliche UNIX-Kommandos zur File-Bearbeitung Druckversion: Abschnitt 2 als pdf-File (162 Kb) 2.1 Namen UNIX ist "case-sensitive", erkennt also einen Unterschied zwischen Groß- und Kleinbuchstaben. Das ist vor allem bei Kommandos wichtig! Namen (z.B. von Files, siehe unten) sind in UNIX im Prinzip völlig frei aus beliebigen druckbaren Zeichen kombinierbar. In BSD-UNIX kann er bis zu 256 Zeichen lang sein, in SYS V laut Standard zwar nur bis zu 14 Zeichen, in den meisten Implementationen aber ebenfalls 256 Zeichen. Aus praktischen Gründen sollte man nur ". ", "_", "-" und "+" als Sonderzeichen verwenden, da viele der anderen Sonderzeichen spezielle Bedeutungen haben und bei Verwendung in Namen zu Umständlichkeiten (Escape-Zeichen) führen. Wichtig für alle, die unter MS-Windows zu arbeiten gewohnt sind: Dort sind Namen wie "Eigene Dateien" gebräuchlich, welche Leerzeichen enthalten. Damit handelt man sich im UNIX-Bereich (auch bei Web-Servern!) Probleme ein, da das Leerzeichen dort ein Trennzeichen ist. Wenn man unter UNIX Leerzeichen als Teil des Namens verwenden will, muss man ein sogenanntes "Escape-Zeichen" (backslash \) davorstellen, also zum Beispiel "Eigene\ Dateien" schreiben. Daher: Leerzeichen in Namen besser überhaupt vermeiden. UNIX Befehle werden wir in diesem Text dadurch besonders kenntlich machen, dass sie (und etwaige Optionen) im Font "Courier" geschrieben sind. Weitere Argumente werden kursiv (italic) geschrieben. Zu Beginn gleich der wichtigste Befehl: Es bewirkt das UNIX-Kommando man chmod das Ausschreiben der UNIX-Information zu einem UNIX-Befehl (in unserem Beispiel: chmod). Die Erklärung wird auf den Bildschirm in das aktive Fenster geschrieben. Wenn der Text zu lange ist, kann man durch Eingabe der http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 2 von 31 Leertaste weiterblättern oder durch Eingabe von "q" (quit) abbrechen. Falls es mehrere Wahlmöglichkeiten für Argumente gibt, werden sie in unserer Beschreibung durch eckige Klammern und vertikale Trennstriche [var1|var2|var3] angedeutet. Leerzeichen sind Trennzeichen. Der Backslash "\" dient an Ende einer Zeile als Fortsetzungszeichen zur nächsten Zeile. Man kann auch mehrere UNIX Kommandos in eine Zeile schreiben, indem man sie durch das Zeichen ";" trennt. Die Befehle werden dann hintereinander ausgeführt. Wenn man die Befehle durch den senkrechten Strich "|" trennt, werden die Befehle auch hintereinander ausgeführt, der Output des einen Befehls dient dann aber auch als Input des nächsten Befehls. Dieser subtile, aber wichtige Unterschied ("piping") wird später ( UNIX Kommando Pipeline ) noch genauer besprochen. Die Eingabe wird jeweils durch das Zeichen <CR> ("carriage return ", Wagenrücklauf) abgeschlossen. Wir werden in unseren Beispielen dieses Abschlusszeichen meist nicht ausdrücklich angeben. Das Zeichen ^ ("caret") steht für die Taste "control" (oft: ctrl), es bedeutet ^d also Drücken der Tasten control und d (control wird festgehalten, während zusätzlich d gedrückt wird). Aufgabe 2.1.A.1 Aufgabe 2.1.A.2 Aufgabe 2.1.A.3 2.2 Grundbegriffe - Shells UNIX ist modular und quasi schalenartig aufgebaut. Das Herzstück des Betriebssystems ist der Kernel: ( Benutzerprogramm ( Shell ( UNIX-Kernel ) ) ) Der Kernel kommuniziert mit der Hardware, also dem Prozessor und den diversen anderen Komponenten und Medien des Computers (Speicher, Bus, etc.). Er enthält die Prozessverwaltung, Gerätetreiber ("Driver") und http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 3 von 31 verwaltet auch das Filesystem. Unter einer typischen Linux-Installation findet man ihn zum Beispiel als File "vmlinuz" in der Bootpartition /boot. Der Benutzer kommuniziert nicht direkt mit dem Kernel, sondern mit einem Programm, das seine Eingaben interpretiert, sie selbst ausführt oder an andere Programme weiterreicht. Dieses Programm wird deshalb Kommandointerpreter bezeichnet und trägt den Namen Shell, weil es wie eine Schale um den Kern des Systems liegt. Es gibt nicht nur eine Art von Shell, sondern viele. Die Shell des Standard-UNIX heißt nach ihrem Autor Bourne-Shell "sh". Daneben gibt es auch die Korn-Shell "ksh", die sich zunehmender Verbreitung erfreut, und die (für Administratoren im Linux Bereich übliche, im Rahmen der Free Software Foundation entwickelte) GNU Bourne-Again Shell "bash". Leider gibt es subtile Unterschiede zwischen verschiedenen Shells; zum Beispiel werden die Environment Variablen (die oft sehr nützlich sind) unterschiedlich gesetzt und abgefragt (siehe 5.2.2 Environment Variablen .) Die vom Normalverbraucher heute meist verwendete Shell ist die Berkeley-Shell oder C-Shell "csh" und eine Weiterentwicklung namens tc-Shell "tcsh". Daneben gibt es (für Altgediente) noch spezielle Varianten wie die VMS-Shell (ein Programm, das VMS-Kommandos akzeptiert) oder eine DOS-Shell (was macht die wohl?) und viele andere. Ein Benutzer startet durch den Login im Normalfall einen Shell-Prozess. Auf einem Computer mit graphischer Oberfläche wird beim Login zuerst eine graphische Benutzeroberfläche aufgebaut, die intern aus einer Vielzahl von Prozessen besteht. Eines der Fenster ist meist ein zur Texteingabe geeignetes (ein UNIX-Fenster), das also wie der Bildschirm bei einem einfachen Textterminal aussieht. In diesem Fenster ist dann üblicherweise eine Shell aktiv und wartet (beim sogenannten "Prompt"-Zeichen) auf die Eingabe (siehe auch Zugang zu einem UNIX-Account . Es können gleichzeitig mehrere solcher Fenster offen sein. Das jeweils aktive Fenster wird dann meist durch andersfarbige Titelleisten markiert. Durch Klicken mit dem Mauszeiger in das gewünschte Fenster wird es jeweils aktiviert. In einem Netzwerkbetrieb kommt es vor, dass ein Benutzer an mehreren Maschinen gleichzeitig Shells eröffnet, und damit also Programme startet, die jeweils Kommandos für die einzelnen Maschinen entgegennehmen. Es ist in UNIX einfach, eigene Kommandos zu schaffen, die dann vollkommen gleichberechtigt zu den StandardBefehlen (aber natürlich benutzerspezifisch) sind. Auch in der Shell kann man wieder neue Shells öffnen oder parallel starten. Man kann so eine mehr oder weniger hierarchisch aufgebaute Vielzahl von Shell-Prozessen aktivieren. Die einem Benutzer zugeordnete Shell wird durch den SysAdmin festgelegt. An den Maschinen im Bereich der Theoretischen Physik wird bei Login grundsätzlich eine tc-Shell gestartet. Aufgabe 2.2.A.1 2.3 File- und Directorystruktur In UNIX gibt es 6 Arten von Files, nämlich - normale Files enthalten z.B. Daten oder (ausführbaren) Code - Directories (auch Folder genannt) sind eine Gruppe von Files - Gerätedateien ("device files") sind I/O Kanäle - Links sind Zeiger auf andere Files (es gibt "hard" und "soft" Links: hard Links sind feste Einträge auf denselben File, soft Links sind nur logische Zeiger auf den entsprechenden Filenamen) - Sockets für den TCP/IP Datenaustausch - FIFOs ("first-in-first-out", auch "named pipes") für Datentransfer zwischen verschiedenen Prozessen Genau das ist eine der Stärken von UNIX: Alle Files werden syntaktisch identisch behandelt, sodass auch Geräte-Input/Output als Schreiben oder Lesen von/zu einem normalen File erscheint (z.B. ist /dev/ttym1 ein File, http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 4 von 31 der physikalisch eine serielle Leitung ist). 2.3.1 Directory Struktur 2.3.2 Filenamen 2.3.1 Directory Struktur Die Directories sind hierarchisch strukturiert. Der Startpunkt ist die Wurzel des Filebaums mit dem Namen "/" ("Root-Partition", "root-directory", "top-level-directory"). Die Filestruktur ist baumartig wie im MS-DOS und wird hier in vereinfachter Form dargestellt. / bin/ bash cat csh sh tcsh ... boot/ SystemMap boot.0300 vmlinuz ... dev/ hda hda1 ... etc/ init.d/ rc0.d/ rc1.d/ startup-scripts ... httpd/ lilo.conf manpath.config passwd ... home/ cbl/ jfk/ ... hosts/ physik/ meitner/ dummy/ ... lib/ libc.so.6 libm.so.6 ... media/ cdrecorder/ cdrom/ floppy/ sda1/ .... bin/ Mail/ MyTexts/ .cshrc ... paper.tex ... SomeTexts/ newer.txt ... mnt/ http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation opt/ Seite 5 von 31 OpenOffice/ intel/ kde2/ kde3/ netscape/ ... proc/ root/ bin/ install/ doc/ ... sbin/ fsck mkfs ... srv/ ftp/ www/ ... tmp/ install1235/ kde-cbl/ kde-jfk/ junkfile ... usr/ X11R6/ root-script1 bin/ etc/ lib/ ... bin/ include/ var/ lib/ liblapack.so.3 ... local/ bin/ include/ lib/ src/... sbin/ atd atrun automount ... share/ a2ps/ man/ texmf/ ... src/ ... packages/ X11R6/ bin/ ... adm/ lib/ man/ mysql/ texmf/ ... lock/ log/ boot.msg boot.log ... http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation spool/ Seite 6 von 31 atjobs/ cron/ lpd/ ... tmp/ windows/ c/ d/ ... Typischer File-Baum einer UNIX-Maschine; die meisten angegebenen Namen sind hier wiederum Directories. Um diese als Folder zu kennzeichnen, wird jeweils ein Schrägstrich / an den Namen angefügt. Die kursiv herausgehobenen Namen bezeichneten Files: bash, cat, ls, paper.tex. Die Hierarchie geht von links (oberstes "root"-Directory "/") nach rechts (z.B. /home/cbl/bin). Der vollständige Name ergibt sich durch Aneinandereihung aller Foldernamen vom Root-Folder abwärts, also zum Beispiel /home/cbl/MyTexts/paper.tex. Ein Beispiel für den Inhalt des Root-Directories findest du auch in 2.4.1 . Der Filebaum in einem UNIX-System ist weitgehend standardisiert. Allerdings haben sich Details des Standards (vor allem was /etc, /usr und /var betrifft) in den letzten Jahren geändert. Nicht alle hier aufgelisteten Folder sind immer vorhanden. Daneben kann die SysAdmin auch weitere geeignet Folder anlegen. Vom root-directory "/" aus gibt es eine Reihe von System-Directories. /bin ("binaries") Enthält viele Files; jeder File ist ein ausführbares UNIXKommando, wie z.B ls (list directory); oft (z.B. in IRIX) ist /bin ein Link zu /usr/bin. /boot Bei Linux findet man dort den aktuellen Kernel, also das Betriebssytem und entsprechende Tabellen. Meist ist das ein besonderer Teil der Harddisk (getrennte Partition). /dev ("devices") Enthält die Gerätefiles, z.B. /dev/ttym2 könnte ein Terminal an einem seriellen Ausgang bezeichnen. /etc Enthält Systemfiles für die Initialisierung und weitere Systemkommandos. /home Enthält die Benutzer Homedirectories. /hosts (Nicht Standard, aber vor allem bei kleinen Netzen nützlich:) Enthält die Links zu den temporär über NFS verbundenen Filesysteme. /lib Dort findet man zum Beispiel die C-Libraries (Programm-Module) /lost+found Dort deponiert das System Filefragmente, die es beim "Aufräumen" findet und keinem anderen File oder Folder zuordnen kann. /media Enthält (zumindest in neueren Linux-Versionen) die Filenamen einiger externer oder interner Geräte, wie zum Beispiel: /floppy, /cdrom, /cdrecoder, /sda1 (als Beispiel für eine USBFlashdisk) oder auch andere Harddisks. All diese können unter vom SysAdmin dafür vorgesehenen Filenamen angesprochen werden. /mnt Enthält lokal angemeldete andere Filesysteme. /opt Optionale Software (z.B. Compiller) /proc Systemadressen und Files /root Das Home des "Superusers" Root (das ist meist der SysAdmin). Da Root besondere Zugriffsrechte hat, wird dieses Home meist getrennt von denen der normalen Benutzer eingerichtet. http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 7 von 31 /sbin Weitere Basiskommandos (z.B. beim Systemstart notwendig) /srv Kann Folder für den Serverbetrieb (ftp, www) enthalten. /tmp Enthält temporäre Daten, die auch von Benutzern kommen können. /usr Enthält weitere Directories wie etwa das Directory "local" in dem die lokale installierten Programme, die von allen Benutzer verwendet werden können, die aber nicht zum Standard UNIX Betriebssystem gehören, liegen. /var Variable Files, die speziell für den Betrieb dieses Computers angelegt wurden (etwa Printer-Zwischenspeicher oder Log-Files). (Der Folder namens /windows in der Liste weiter oben wurde auf einem PC mit "dual-boot" - auf dem also beide Betriebssysteme MS-Windows und Linux liegen - eingerichtet, um von Linux aus einfach auf die Windows-Files zugreifen zu können.) Unter Linux sind die Benutzer meist im Directory /home zu finden. An manchen anderen Installationen (zum Beispiel unter IRIX) sind Benutzer-Directories unter einem gemeinsamen Überdirectory /u1/people oder unter /usr/people angeordnet. Aufgabe 2.3.1.A.1 Aufgabe 2.3.1.A.2 2.3.2. Filenamen Ein vollständiger Filename ist gleichzeitig auch die Adresse des Files im Directory-Baum. Aber beginnen wir beim lokalen Namen innerhalb des Directories, in dem sich der File befindet. Es ist auch in UNIX wie in MS-DOS oder VMS aus mnemotechnischen Gründen üblich, den Punkt in Filenamen zur näheren Bezeichnung von Files zu verwenden. Man folgt am besten folgender Konvention: filename.f , filename.f90 Fortran (f77, f90)-Quellprogramm filename.c (filename.cpp) C-Quellprogramm (C++-Programm) filename.p Pascal-Quellprogramm filename.o Objectcode filename.a Library filename.x Ausführbares Programm filename.[bak|bck] Backup-Version des Files filename.[z|Z|gz] Komprimierter File (unterschiedliche Komprimierungsmethoden) filename.tar Tar-Archiv (mehrere Files) filename.tgz = filename.tar.gz filename.x Ausführbares Programm filename.tex TeX oder LaTeX File http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 8 von 31 filename.txt ASCII Text File filename.dvi DVI (Device Independent) File filename.ps POSTSCRIPT File filename.eps Encapsulated POSTSCRIPT File filename.htm (html) HTML File (siehe WWW ) filename.mpeg (mpg, mov,avi) Videofile-Formate filename.jpeg (jpg,gif) Bildfile-Formate filename.php PHP-File (Web Scripting Sprache) Das ist zwar üblich, aber keineswegs bindend, und viele Filenamen enthalten keinen Punkt. Aufgabe 2.3.2.A.1 Files, deren Name mit einem Punkt beginnen, werden oft (z.B. von der C-Shell) als Initialisierungsfiles verschiedener Programme interpretiert und geringfügig anders behandelt als andere Files; mehr davon später (z.B. werden Files mit den Namen .cshrc, .login bei jedem login als Kommandofiles zur Initialisierung der Shell aufgefasst und durchlaufen). Der vollständige Filename des Files "paper.tex" in der Abbildung im vorhergehenden Teil Directory Struktur ist /home/jfk/paper.tex; dies ist der absolute Pfadname. Er ist also der vollständige Name, der eben auch die Position im gesamten Filebaum angibt. Unterdirectories sind jeweils durch / separiert. Der File /home/jfk/paper.tex ist also der File paper.tex im Folder /home/jfk aber auch der File jfk/paper.tex im Folder /home. Beim Login bekommt man ein aktuelles Directory zugeordnet, das sogenannte Home. Es befindet sich in unserem Beispiel im Directory /home und hat den vollständigen Pfadnamen /home/jfk. Man kann sich selbst aber im weiteren Verlauf der "Session" in andere Directories begeben. Das jeweils aktuelle Directory kann durch den Befehl pwd (print working directory) angezeigt werden. Man sagt, der Benutzer "befindet sich im Directory /home/jfk". Befindet man sich in einem Directory unterhalb des Root-Directories, können alle Files von diesem Directory aus einfacher durch den relativen Pfadnamen bezeichnet werden, der ohne führendes /-Zeichen angegeben wird. Ist das aktuelle Directory /home/jfk, ist der relative Pfadname von "/home/jfk/paper.tex" einfach paper.tex; ist das aktuelle Directory dagegen /home, ist der relative Pfadname von "paper.tex" nun jfk/paper.tex . Wie im DOS steht ".." für das unmittelbar übergeordnete (Parent) Directory und "." für das aktuelle. Sei das aktuelle Directory /home/mao. Dann ist der relative Pfadname von /home/jfk/paper.tex einfach ../jfk/paper.tex . Im Directory /home/jfk ist paper.tex auch als ./paper.tex ansprechbar. Es gibt einige nützliche Abkürzungen bei der Arbeit mit Directories: $HOME ist eine C-shell Variable, die immer den Wert des Home-Directories des aktuellen Benutzer hat. Wenn dieses also /home/abc sein sollte, so bezeichnet $HOME/paper.tex den File /home/abc/paper.tex. ~jfk ist eine Möglichkeit, sich auf das Home eines (beliebigen) Benutzer (hier: jfk) zu beziehen; ~jfk/paper.tex bezeichnet also den File /home/jfk/paper.tex und ~abc/paper.tex den File /home/abc/paper.tex. ~ (die "Tilde") allein ist ebenfalls eine Abkürzung für das Home des aktuellen Benutzers. Der File $HOME/paper.tex kann also auch mittels http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 9 von 31 ~/paper.tex angesprochen werden. . (ein Punkt) bezieht sich auf das aktuelle Directory, in dem man gerade arbeitet ("sich darin befindet"). Wenn man sich im $HOME befindet und den File paper.tex verwenden will kann man ihn paper.tex oder ./paper.tex nennen. Das sieht im Moment vielleicht überflüssig aus, ist in manchen Fällen aber nützlich (mehr drüber später). .. (zwei Punkte) sind eine Abkürzung für das aktuelle Elterndirectory, das "darüber liegende Directory, also jenes, dessen "Kind" das aktuelle Directory ist. Eine Eigenart des UNIX (und seiner Benutzer) ist, dass man versucht, alle Befehls- und damit Filenamen so kurz wie möglich zu halten. Aufgabe 2.3.2.A.2 Aufgabe 2.3.2.A.3 Aufgabe 2.3.2.A.4 2.4 Elementare Kommandos Nach der login-Aufforderung, die auf einem Datenendgerät erscheint, ist der login-Name des Benutzers und ein Passwort anzugeben. Beides wird vom Systembetreuer zugeteilt. Man befindet sich dann in einer Shell und in seinem persönlichen "home-directory". In den unten beschriebenen Kommandos muss oft ein Name für einen File oder ein Directory als Argument angegeben werden. Er ist meist mit Pfadname bezeichnet. Die Kursivschreibung deutet nur an, dass an dieser Stelle etwas Passendes einzusetzen ist. Das kann ein relativer Pfadname oder ein absoluter Pfadname sein (Beispiel: /home/jfk/paper.tex). Das wurde im Abschnitt über Filenamen besprochen. Das (sicher für den Anfänger, aber auch später) wichtigste Kommando lautet - wie schon erwähnt man command Ausgabe der Online-UNIX-Manualseiten zum Kommando command. Damit erhältst du auch für alle hier besprochenen Befehle genauere Informationen, insbesondere die verschiedenen Optionen betreffend. In dieser Online-Lecture findest du im Menü links einen Button "Man-Pages", mit dem du das man Kommando auf der Web-Server ausführen kannst. Besser wäre es, du tust das auf deinem Lieblings-UNIX-Rechner! Auf vielen Installationen geht man dazu über, die Man-Seiten und andere Informationen auf lokalen html-Seiten (die über eine WWW-Browser, siehe 6.4.1 WWW , abrufbar sind) abzuspeichern. Unter Linux gibt es dies zum Beispiel über die KDE-Oberfläche. Auf der Physik haben wir intern zugängliche WWW-Seiten. Und was sagt GNU dazu? Auf der man-Seite zum Kommando "tar" findet man den Hinweis: "...The GNU folks, in general, abhor man pages, and create info documents instead...." . Dennoch werden wir uns hier auf das originale man-Kommando beschränken, da es auch im Line-Modus ziemlich allgemein verfügbar ist. Der Partner des Kommandos man ist der Befehl apropos Begriff Auflistung der UNIX-Kommandos zum Stichwort Begriff. (=man -k Begriff ) Hier findest du Listen von den wichtigsten Befehlen. Sieh dir jeden der Abschnitte gut an und überlege dir die dazugehörigen Aufgaben. http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 10 von 31 2.4.1 Directory-bezogene Kommandos 2.4.2 File-bezogene Kommandos 2.4.3 Login, logout, unterbrechen, abbrechen 2.4.4 System-Kommandos 2.4.5 C und Fortran - ein erster Blick 2.4.6 Optionen 2.4.1 Directory-bezogene Kommandos Das aktuelle Directory (auch Folder genannt) ist dein aktueller Arbeitsbereich. Wenn du zum Beispiel einen File mit dem Namen paper.tex ansprichst, so geht das System davon aus, dass sich dieser File im aktuellen Directory befindet. pwd "print working directory" ls ("list saved") Auflisten des Inhalts des aktuellen Directory. Dabei werden (standardmäßig) Files und Subdirectories ohne Unterschied angezeigt ls Pfadname Auflisten des Inhalts des Directory Pfadname. mkdir Pfadname Anlegen eines (Sub-)Directory Pfadname rmdir Pfadname Entfernen eines (Sub-)Directory Pfadname cd Pfadname Ändern ("change directory") des aktuellen Directory zu Pfadname cd Das Home-Directory des Benutzers wird zum aktuellen Directory cd $HOME Das Home-Directory des Benutzers wird zum aktuellen Directory (Beachte: die Shell-Variable $HOME hat immer den Wert des vollständigen Pfadnamens des BenutzerHomes.) cd ~jfk Das Homedirectory des Benutzers jfk wird zum aktuellen Directory. cd .. Ändern des aktuellen Directory zu dem im Filebaum darüberliegenden Elterndirectory Aufgabe 2.4.1.A.1 Aufgabe 2.4.1.A.2 http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 11 von 31 Aufgabe 2.4.1.A.3 Hier noch als Beispiel das Ergebnis des Kommandos ls -l / auf dem Kursrechner: # ls -l insgesamt 105 drwxr-xr-x 2 drwxr-xr-x 3 drwxr-xr-x 2 drwxr-xr-x 15 drwxr-xr-x 50 drwxr-xr-x 2 drwxr-xr-x 5 drwxr-xr-x 6 drwxr-xr-x 2 drwxr-xr-x 2 drwxr-xr-x 17 dr-xr-xr-x 60 drwx-----10 drwxr-xr-x 4 drwxrwxrwt 12 drwxr-xr-x 23 drwxr-xr-x 21 root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root 4096 1024 4096 32768 8192 4096 4096 4096 16384 4096 4096 0 4096 4096 4096 4096 4096 Feb Feb Jan Mär Mär Jan Mär Feb Feb Jan Feb Mär Mär Feb Mär Feb Feb 19 19 18 14 15 18 14 19 19 18 20 14 14 19 14 19 19 17:42 17:05 02:14 16:02 12:06 02:14 15:18 17:24 16:46 02:14 09:25 17:01 15:49 17:24 23:25 17:38 17:30 bin boot cdrom dev etc floppy home lib lost+found mnt opt proc root sbin tmp usr var 2.4.2 File-bezogene Kommandos Eigentlich ist die Aufteilung in File- oder Directory-bezogene Kommandos künstlich und dient nur der besseren Strukturierung dieses Abschnitts. Bei vielen Kommandos kann der Pfadname sowohl ein File oder auch ein Directory bezeichnen (oder mehrere). Die Bedeutung kann sich dadurch ändern. Man sollte also (vor allem bei den Kommandos cp und mv) vorsichtig sein und sich über die Bedeutung Gewissheit verschaffen. touch file1 file2 ... Erzeuge Files file1 file2 ... der Länge 0, also leere Files. Das kann vor allem für Testzwecke nützlich sein. (Wenn ein schon existierender File so "berührt" wird, so ändert sich sein Zugriffsdatum, da ja darauf "zugegriffen" wurde, der Inhalt bleibt unverändert.) rm file1 file2 ... Lösche Files file1 file2 ... cp file1 file2 Kopiere den Inhalt von File file1 auf den File file2 cp file1 file2 ... dir Kopiere die Files file1, file2, usw. auf das Directory mit Namen dir. Achtung: Nur das letzte Argument darf ein Directory sein! mv file1 file2 ("move") Umbenennen des Files file1 zu file2 mv file1 file2 ... dir (Umbenennen=)Verschieben der Files file1, file2 ins Directory dir. Achtung: Nur das letzte Argument darf ein Directory sein! cat filename Direkte Ausgabe des Inhalts des Files filename ("catenate"; entspricht "type" in DOS) http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 12 von 31 more filename Seitenweise Ausgabe des Files filename .Nach jeder Seite stoppt die Ausgabe. Durch Betätigen der Leertaste wird die nächste Seite angezeigt, mit q ("quit") wird die Ausgabe beendet. lp -dprinter filename Ausdrucken des Files filename auf dem Drucker printer. Das ist ein spezielles SYS V Printkommando. Der File muss dazu Leserechte für die Welt haben (s.u.), sonst wird er nicht gedruckt. Man kann dieses Problem durch den Befehl "lp-dprinter < filename "umgehen. Meist gibt es aber je nach Workstation, Drucker und/oder Netz spezielle Varianten des Printbefehls (vgl. Anhang). Wenn du z.B. am Laserwriter tp_a des Inst. f. Theoret. Physik drucken willst, so verwendest du den Befehl "lp -dtp_a< filename ". Das entsprechnde BSD-Kommando lautet lpr -Pprinter filename (Dieses ist auf Linux verfügbar.) ln existingfile linkname Es wird ein sogenanntes Link angelegt, also ein Zeiger mit dem Namen linkname, der eigentlich auf den File oder das Directory existingfile zeigt, sich in UNIX Kommandos also wie dieser oder dieses verhält. Im Normalfall wird man dieses Kommando mit der Option "-s" (siehe unten) aufrufen. Aufgabe 2.4.2.A.1 Aufgabe 2.4.2.A.2 2.4.3 Login, logout, unterbrechen, abbrechen login [username] Anmelden am System des aktuellen Computers unter dem Namen username. Wenn man von einem Terminal (oder z.B. einer Terminal-Emulation eines PC) aus einloggt, braucht man dieses Kommando nicht, da man automatisch nach Username und Password gefragt wird. Ebenso geht es beim Einloggen an einer Workstation über ein herstellerspezifisches Login-Fenster. Man braucht dieses Kommando also nur beim Einloggen unter einem anderen Benutzernamen an der aktuellen Maschine. (Superuser: siehe man su ) logout Abmelden vom System oder der aktuellen Shell http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 13 von 31 stty -a Gibt die Liste der aktuellen Einstellungen, also insbesondere der wirksamen ctrl-Zeichen wie ^c oder ^d . exit Schließen der aktuellen Shell ^c "Interrupt", Unterbrechung (=oft auch Abbruch) des aktuellen Prozesses ^\ "Quit", Abbruch des aktuellen interaktiven Prozesses ^d Entspricht eof (end of file, z.B. Ende der Eingabe), aber auch end of shell = logout. Das "^d" hat in UNIX mehrere Bedeutungen. Es schließt sowohl Files ab, als auch die Shell (=logout oder exit). Es kommt vor, dass man einen File abschließen möchte, und irrtümlich zweimal "^d" eintippt. Dann bewirkt das zweite "^d" ein logout. ^s/^q xoff/xon Anhalten und Weiterlaufen der BildschirmAusgabe. Bei der heute schon sehr großen Ausgabegeschwindigkeit ist dieser Befehl meist nutzlos. Man sollte andere Möglichkeiten der Portionierung des Output wählen (siehe man more). kill -9 Prozessnummer Bricht den Prozess mit der Nummer Prozessnummer sofort und bedingungslos ab. Diese Nummer ersieht man durch Eingabe von "ps" oder "ps -ef" (siehe Systemkommandos und Optionen ). ^z Der (im Vordergrund) laufende Prozess wird angehalten, kann aber durch "fg" oder "bg" im Vordergund (fg=foreground) oder Hintergrund (bg=background) wieder gestartet werden. 2.4.4 System-Kommandos passwd Kommando zum Umsetzen des Passwords. Notwendig beim ersten Anmelden! Nur 7 Zeichen des Passwords sind signifikant.; es muss zumindest ein nicht-alphanumerisches Zeichen enthalten. Bitte verwende keinen einfachen Begriff, der in einem Wörterbuch vorkommen kann und auch nicht einen aus deinem Namen abgeleiteten Ausdruck (unrühmliche Beispiele: "proton5" oder "1verona"). Es gibt erstaunlich gute Password-CrackProgramme. Nichtautorisierter Zugriff unter deinem Namen kann nicht nur dir schaden, sondern auch anderen Benutzern des Computers/Netzes! ps Listen aller Prozesse des Benutzers, die in der laufenden Shell gestartet wurden. du pathname Informiert über den belegten Platten-Speicher im File http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 14 von 31 oder Directory pathname in Kilobytes. df Informiert über den freien Speicherplatz auf der gesamten Disk date Ausgabe von Datum und Uhrzeit who Gibt eine Liste aller im Augenblick angemeldeten Benutzer whoami Gibt den Account-Namen des gerade arbeitendenen Benutzers, also im Normalfall deinen Benutzernamen (Dies ist ein BSD-Befehl) echo Das ist ein Text Der String "Das herausgeschrieben. ist ein Text" wird Aufgabe 2.4.4.A.1 Aufgabe 2.4.4.A.2 Aufgabe 2.4.4.A.3 Anmerkung: "ls -l filename" und "du -k filename" liefern nicht identische Größenangaben. Der Befehl "du -k filename" liefert die Größe in Vielfachen von 1KB=1024 Byte; auch der tatsächliche Bedarf beim speichern von Daten ist (auf dem Kursrechner) mindestens 1024 (je nach Preformatierung der Disk auch mehr oder weniger). D.h. ein File mit 1 KByte Länge benoetigt 1024 Byte (auf dem Kursrechner). Das ist übrigens wichtig bei der Systemkonfiguration: Wenn man sehr viele kleine Files hat, sollte man diesen Parameter nicht zu groß wählen. Andrerseits: wenn er zu klein ist, liest das System von der Disk zu kleine Portionen, dafür recht viele ein... 2.4.5 C und Fortran - ein erster Blick Programme in höheren Sprachen, wie C oder Fortran, müssen von eigenen Übersetzungsprogrammen (sogenannten Compilern) zuerst übersetzt werden, dann mit Standard- Bibliotheksunterprogrammen "gelinkt" also verbunden - und zu einem ausführbaren Programm kombiniert werden. Es verschiedene Programmiersprachen und daher auch verschiedene Compiler. Wir werden unsere Beispiel aus dem Linux-Bereich (die GNU Compiler) und dem SGI-Bereich wählen, die vor Ort verfügbaren Betriebssysteme. Entsprechend können die Aufrufe der Compiler unterschiedlich sein. Mittels "man"kannst du die lokalen Besonderheiten erfahren. cc main.c gcc main.c g77 main.f Übersetzen und laden eines C-Quell-Programmes main.c. (Der GNU C-Compiler heißt gcc.) Es wird ein ausführbares Programm mit dem Default-Namen a.out erzeugt. Dieses kann durch Aufruf a.out gestartet werden. Werden mehrere Programmnamen (z.B. main.c sub1.c sub2.c) angegeben, so werden Objektfiles mit der Extension .o erzeugt (z.B. main.o sub1.o sub2.o) und vom Linker zu einem ausführbaren Programm a.out verbunden. Die Files mit Extension .o bleiben in diesem Fall erhalten. GNU Fortran-77 Compiler; übersetzen und laden des Fortran-77 Quell-Programmes main.f. Es wird ein http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 15 von 31 exekutierbares Programm mit dem Default-Namen a.out erzeugt. Dieses kann durch Aufruf a.out gestartet werden. Werden mehrere Programmnamen (z.B. main.f sub1.f sub2.f) angegeben, so werden Objektfiles mit der Extension .o erzeugt (z.B. main.o sub1.o sub2.o) und vom Linker zu einem ausführbaren Programm a.out verbunden. Die Files mit Extension .o bleiben in diesem Fall erhalten. Analog gibt es unter IRIX den Aufruf f77 oder, für Fortran90, das Kommando f90. Auf vielen Installationen gibt es weitere spezielle Namen für verschiedene Compiler-Variationen. 2.4.6 Optionen Fast alle Kommandos sind mit "flags" ausgestattet: Es lassen sich Optionen angeben, mit denen die Kommandos teils geringfügig, teils beträchtlich andere Wirkung bekommen. Die Optionen sind durch ein vorangestelltes "-" gekennzeichnet. "-l" oder "-a" bedeutet meist "long" oder "all", "-r" rekursiv und "-v" steht meist für "verbose", d.h. ausführliche Angabe. Die Optionen haben für die UNIX-Versionen BSD und SYS V oft unterschiedliche Bedeutung. Wir halten uns hier an des SVR4 Standard. man -k string Gib Informationen über Befehle, die irgendwie mit string zu tun haben (= "apropos string"). ps -ef Listet alle Prozesse, die auf der Maschine laufen. Hier unterscheiden sich Linux (BSD-ähnlich) und IRIX (SVR4 ähnlich) in der Bedeutung der Optionen. Die erste Variante gilt für SVR4-Unix (IRIX), die zweite für BSD (und Linux). (Das "-" kann in diesem speziellen Fall entfallen.) oder ps -aux ps [-defl] oder ps [-auxl] Liste alle Prozesse. Je mehr Optionen verwendet werden, desto ausführlich ist die gelieferte Information. Ohne Optionen werden nur deine Prozesse gelistet. Es wird u.a. die Prozessnummer "PID", die verbrauchte CPU-Zeit in Minuten, und der Programmname ausgegeben. cp -r dir1 dir2 Kopiere Directory dir1 (samt allen darin enthalten Files und Subdirectories und den darin enthaltenen...:r=rekursiv) in das Directory dir2. (Für letzteres dürfen keine Metazeichen verwendet werden, siehe unten!) ls -l dirname Ausführlichere Liste (mit Angaben über Protection, Größe, Art, Erstellungsdatum des Files/Directory) der Files im Directory dirname. Wenn kein Name angegeben wird, so wird das aktuelle Directory gelistet. ls -a Im Normalfall werden nur Filenamen, die nicht mit einem Punkt beginnen, angezeigt (also z.B. nicht .cshrc). Mit der Option -a werden alle Files angezeigt. ls -la Beispiel für die Verwendung mehrerer Optionen, hier a und l. http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 16 von 31 ls -F Auflisten des Inhalts des aktuellen Directory, wobei Directory-Namen durch einen nachfolgenden /, ausführbare Programme durch einen nachfolgenden *, und Links durch das Zeichen @ gekennzeichnet werden. Diese Zeichen sind jedoch nicht Teil der Filenamen, sondern nur eine Hilfe in dieser Liste. ls -Q ls -b Nur unter BSD-(Linux)-UNIX: Mit der Option "Q" bekommt man die Filenamen unter Anführungszeichen. Das ist dann wichtig, wenn man verborgene Leerzeichen sehen will... . In beiden UNIX-Versionen liefert die Option "b" etwaig in Filenamen vorkommende Kontrollzeichen in Oktalcode (in der Form \nnn). ln -s existingfile linkname Es wird ein sogenanntes symbolisches Link angelegt, also ein Zeiger mit dem Namen linkname, der auf den File oder das Directory existingfile zeigt, sich in UNIX Kommandos also wie dieser oder dieses verhält. Die Option -s sollte immer verwendet werden, da sonst "hard links" erzeugt werden, die weiteren Einschränkungen unterworfen sind (siehe "man ln"). rm -r pathname Pathname kann ein File oder ein Directory sein, im zweiten Fall wird aufgrund der Option "-r" auch das Directory mit Inhalt (Files und Subdirectories) gelöscht. Wenn schreibgeschützte Files ohne weitere Nachfrage ebenfalls geslöscht werden sollen, dann erledigt das "rm -rf" (Zyniker sagen, das wäre die Abkürzung für "read mail - really fast"). rm -i pathname Bevor der File pathname gelöscht wird, wird noch einmal nachgefragt ("Remove ? (yes(no)[no] :") und man kann für jeden File mit y oder n zustimmen oder ablehnen. cat -v filename Wenn der File filename nichtdruckbare ASCII-Zeichen enthält, kann man sie so sichtbar machen. find directory -name \ 'balsa.x' -print Dieser Befehl durchsucht den angegebenen DirectoryBaum nach Files des Namen "balsa.x" und schreibt die gefundenen Pfadnamen aus. Die Angabe des einfachen Hochkommas (') ist sehr wichtig, wenn man wild cards verwenden will (siehe weiter unten ). Das Zeichen "\" dient hier nur zur Fortsetzung des Kommandos in einer neuen Zeile. Aufgabe 2.4.6.A.1 Aufgabe 2.4.6.A.2 Aufgabe 2.4.6.A.3 2.5 Parameterexpansion (Wild Cards) http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 17 von 31 Einige Zeichen haben in Kommandos, Strings oder File- und Directorynamen besondere Bedeutung: * ! [ ] ( ) ? \ ; ' " ` | (die Zeichen im Fettdruck). Insbesondere bei Angaben von File- oder Directory-Namen interpretiert die Shell eine Reihe von Zeichen als Sonderzeichen besonderer Bedeutung, sogenannte Metazeichen: * steht für "eine beliebige Zeichenfolge" (auch die leere) als Bestandteil eines oder mehrerer Filenamen, jedoch nicht "." als erstes Zeichen eines Filenamen [...] steht für "eines der in der Klammer vorkommenden Zeichen" [a-e] steht für "eines der Zeichen im Bereich a-e" \ steht für "interpretiere das folgende Zeichen als normales Zeichen und nicht als Metazeichen" ("Escapezeichen", nicht mit dem Zeichen ESC zu verwechseln!) ? steht für "ein beliebiges einzelnes Zeichen" Beispiele: rm a*x Entferne alle Files im aktuellen Directory, deren Name mit a beginnt und mit x endet. rm \? Enferne den File mit Namen "?". Ohne das \ würde das Kommando alle Files, deren Namen nur aus einem Zeichen besteht, weglöschen!!! ls .* Liste alle Files und Directories (und deren Inhalt), deren Namen mit "." beginnen. cat *[012] Liste den Inhalt aller Files im aktuellen Directory, deren Name mit 0 oder 1 oder 2 endet. find . -name 'aba*' -print Sucht im aktuellen Directory und danach rekursiv in allen Sub-directories des aktuellen Directory nach Files, deren Name mit "aba" beginnt, und gibt - bei Erfolg - die vollständigen Pfadnamen aus. cp [a-m]* dirx Kopiere alle Files des aktuellen Directory, deren Namen mit a,b,..,m beginnen, unter dem gleichen Namen ins Directory dirx. (Falls Directories darunter sind, gibt es Probleme!) cp * dir1 Kopiere alle Files des aktuellen Directory (ohne Subdirectories) ins Directory dir1. Für letzteres dürfen keine Metazeichen verwendet werden! dir1 kann aber "." sein, z.B. cp /home/* . Kopiere alle Files im Directory /home ins aktuelle Directory. ACHTUNG: z "cp *1 *2" ist nicht erlaubt und bewirkt nicht etwa das Umkopieren aller Files, die mit 1 aufhören, in Files, die mit 2 aufhören (Für diese Falschannahme sind vor allem ehemalige VMS Programmierer anfällig)! Ein solcher Fehler kann fürchterliche Folgen haben. Wenn genau ein Directory existiert, das mit 2 aufhört, werden alle Files, die mit 1 enden, dorthin kopiert! (Siehe Zauberlehrling, Goethe.) http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 18 von 31 z Im Kommando mv nach Möglichkeit überhaupt keine Metazeichen verwenden! z "rm *" entfernt ohne Warnung alle Files im aktuellen Directory. Auch "rm a *" mit einem Leerzeichen zwischen a und * entfernt ohne Warnung den File a (sofern er existiert) und auf jeden Fall auch alle Files im aktuellen Directory!! z Wenn ein Directory genau 2 Files enthält, etwa "a" und "b", dann bewirkt "cp*" ein "cp a b", d.h. "b" wird ohne Warnung überschrieben. z Mit der rm-Option "-i" wird vor dem Entfernen noch einmal Ihr OK erfragt. Wenn du eigenen Fehlern vorbeugen wollen, empfiehlt es sich also, prinzipiell "rm -i ..." zu verwenden. Verwende Wild-Cards in UNIX nur mit äußerster Vorsicht, und nur, wenn du sicher bist, sie richtig anzuwenden! Aufgabe 2.5.A.1 Aufgabe 2.5.A.2 2.6 Der History-Mechanismus der C-Shell Die (t)C-Shell kennt einen außerordentlich nützlichen "history"-Mechanismus. Auf manchen Maschinen ist er (vom SysAdmin) bereits für jeden Benutzer aktiviert (Du wirst später sehen, warum; siehe .cshrc-file, Initialisierungsfiles ). Die Kommando-Eingaben werden automatisch durchnumeriert. Man kann mit !25 das Kommando Nr. 25 wiederholen; !! das letzte Kommando wiederholen; !f das letzte Kommando, das mit dem Buchstaben f begann, wiederholen; history listet z.B. die letzten 20 Befehle. Wieviele es sind, liegt an der Initialisierung einer entsprechenden Systemvariablen. Diese Zahl kann beliebig geändert werden (siehe .cshrc-file in Initialisierungsfiles ). Der im Beispiel angegebene Befehl !25 funktioniert nur, wenn der 25. Befehl noch innerhalb der Liste der gespeicherten Befehle liegt. Die (t)C-Shell bietet noch weitere Möglichkeiten. Als Beispiel nehmen wir an, dass der letzte eingegebene Befehl lautet: f77 main.f sub1.f sub2.f sub3.f Dann bedeutet !! f77 main.f sub1.f sub2.f sub3.f http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 19 von 31 Manchmal möchte man aber nur Teile von Kommandos wiederholen. Auch das ist möglich, z.B. bedeutet in unserem Beispiel !^ main.f (1. Argument, z.B. "f77 !^ ") !$ sub3.f (letztes Argument) !* main.f sub1.f sub2.f sub3.f (alle Argumente) In der tc-Shell kann man auch durch Betätigung der Cursortasten die Befehlseingabe korrigieren (Cursor links oder rechts) oder vorangegangene Befehle wiederholen (Cursor auf und ab). Die vollständigen Informationen über die (t)c-Shell sind online mit "man csh" und "man tcsh"zu erhalten. Aufgabe 2.6.A.1 Aufgabe 2.6.A.2 2.7 Prozesssteuerung, Eingabe und Ausgabe Files und Prozesse sind die wesentlichen Bausteine im Konzept von UNIX und sie sind eng miteinander verbunden. 2.7.1Prozesssteuerung Jedem Prozess sind zumindest Eingabe- und Ausgabe-Files zugeordnet. 2.7.2 Eingabe und Ausgabe Der Mechanismus ist oft auch für aufeinanderfolgende Kommandos nützlich, wenn der Output des einen Programms ohne Zwischenspeicherung gleich der Input des nächsten sein soll. Das nennt man 2.7.3 Pipelines und die Details werden hier vorgestellt. 2.7.1 Prozesssteuerung (Drei s, whow!) Ein Prozess hat z z z z eine eindeutige Nummer (Prozess-IP PID) eine Befehlsfolge (Thread) einen virtuellen Speicher-Adressraum zugeordnete Files Die Befehlsfolge ist das auszuführende Programm; im Speicherbereich befindet sich dieses Programm und auch die dem Programm zugeordneten Daten und Systemdaten(Informatioen über den Prozess und die zugeordneten Systemressourcen). Der Bereich ist virtuell, da nur aktiv benötigte Teile in den eigentlichen Arbeitsspeicher http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 20 von 31 geladen werden, andere Teile aber auf Disk (zum Beispeil im Swap-Bereich) gelagert werden, bis sie benötigt werden. Jedem Prozess sind zumindest drei "virtuelle" Files" zugeordnet (Input = stdin, Output = stdout, Error = stderr), die oft auch "primärer Input", "Standardinput", sowie "primärer Output" etc. genanntwerden. Die Liste der im Augenblick aktiven (oder schlafenden) Prozesse erhält man mit dem (schon in beschriebenen) Kommando Optionen ps Optionen Leider sind die Optionen in letzter Zeit recht unübersichtlich geworden. Mit man ps bekomme ich die Nachricht This version of ps accepts several kinds of options. Unix98 options may be grouped and must be preceeded by a dash. BSD options may be grouped and must not be used with a dash. GNU long options are preceeded by two dashes. Options of different types may be freely mixed. Man könnte (systemabhängig, hier Linux) mit ps -ef dann zum Beispiel folgenden Output erhalten UID root root root root root root root root root root root ... root bin root at root .... root root cbl cbl ..... cbl cbl cbl cbl cbl cbl cbl cbl cbl cbl PID 1 2 3 4 5 6 7 8 9 13 353 PPID 0 1 1 0 0 0 0 0 1 1 1 C 0 0 0 0 0 0 0 0 0 0 0 STIME 18:14 18:14 18:14 18:14 18:14 18:14 18:14 18:14 18:14 18:15 18:15 TTY ? ? ? ? ? ? ? ? ? ? ? TIME 00:00:04 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 CMD init [5] [keventd] [kapmd] [ksoftirqd_CPU0] [kswapd] [bdflush] [kupdated] [kinoded] [mdrecoveryd] [kreiserfsd] [eth0] 681 694 742 774 814 1 1 1 1 1 0 0 0 0 0 18:15 18:15 18:15 18:15 18:15 ? ? ? ? ? 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 /sbin/cardmgr -k -m /lib/modules/2.4.18-4GB/ -n pcmcia /sbin/portmap /usr/sbin/sshd /usr/sbin/atd /usr/sbin/cron 1014 1016 1042 1103 1013 1013 1016 1 0 0 0 0 18:15 18:15 18:15 18:15 ? ? ? ? 00:00:04 00:00:00 00:00:00 00:00:00 /usr/X11R6/bin/X :0 vt07 -auth /var/lib/xdm/authdir/authfile -:0 /bin/sh /usr/bin/X11/kde kdeinit: Running... 1163 1166 1197 1211 1213 1499 1500 1509 1510 1546 1 1160 1166 1103 1211 1166 1499 1500 1509 1213 0 0 0 0 0 0 0 0 0 0 18:16 18:16 18:17 18:20 18:20 18:48 18:48 18:48 18:48 18:56 ? pts/1 pts/1 ? pts/2 pts/1 pts/1 pts/1 pts/1 pts/2 00:00:00 00:00:00 00:00:00 00:00:01 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 kalarmd --login -bin/tcsh /usr/X11R6/bin/nedit U-2-7-001.html kdeinit: konsole -icon konsole -miniicon konsole -bin/tcsh man ps sh -c (echo '.ll 9.7i'; /usr/bin/zsoelim '/usr/share/man/man sh -c (echo '.ll 9.7i'; /usr/bin/zsoelim '/usr/share/man/man /usr/bin/less ps -ef wobei { { UID die Eigentümerin des Prozesses PID die ProzessID http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation { { { { { Seite 21 von 31 PPID die ParentPID, also die PID des Prozesses der diesen aktiviert hat STIME den Zeitpunkt des Beginns des Prozesses TTY das kontrollierende Terminaldevice des Prozesses TIME die verbrauchte CPU-Zeit COMMAND das Kommando des Prozesses angeben. Daneben kann man auch die virtuelle und die tatsächliche Größe des dem Prozess zugeordneten Speicherbereiches erfahren, sowie die Priorität, mit welcher der Prozess ausgeführt wird.. Wenn man die im Augenblick aktivsten Prozesse sehen will, so gibt man top an. Das Fenster soll dazu VT100-kompatibel sein (als Zeichenfenster soll jede Zeichenposition ansteuerbar sein; beim üblichen xterm-Fenster ist das der Fall). Man sieht dann eine ps-ähnliche Liste der wichtigsten Prozesse, die im Sekundentakt aktualisiert wird. Mit CTRL-C kann man den Anzeigeprozess wieder beenden. Auch diese Prozess frisst CPU-Ressourcen, sollte also nicht permanent verwendet werden (wie es manche tun...). Die Sicherheitseinstellungen des Systems können so sein, dass eine Benutzerin nur ihre eigenen Prozesse sehen kann. Abbrechen kann sie immer nur die eigenen (mit dem Befehl kill -9 PID). Wenn man allerdings alle Prozesse zu sehen bekommt, kann die Liste oft recht lang sein und man sollte sie mittels grep filtern, mehr darüber aber später. Prozesse startest auch du, wenn du ein Kommando eingibst. Wenn du einfach nur den Kommandonamen meinkommando angibst, dann wird der Prozess "im Vordergrund" ausgeführt und du kannst erst dann wieder neue Befehl eingeben, wenn dieser abgearbeitet ist. Wenn du das vermeiden willst, zum Beispiel weil es sich um ein länger dauerndes Programm handelt, das nur auf Files schreibt und keinen weiteren Input oder Output aus der aufrufenden Shell benötigt, so kann du den Prozess "im Hintergrund" laufen lassen. Das passiert mittels meinkommando & und damit hast du einen unabhängigen "Child-Prozess" gestartet. Auch dieser kann wieder weitere ChildProzesse starten, genau wie das auch das UNIX-Betriebssystem tut. Daher also die vielen unabhängigen Prozesse - eben eine der großen Stärken des Sytems. Wie schon in der Vorstellung von UNIX erwähnt, laufen die Prozesse nicht tatsächlich parallel zueinander ab (das geht ja nicht, wenn man nur einen Prozessor zur Verfügung hat), sondern das System (PID 0) teil die Zeit in viele kleine Teile (Timesclices) ein, die den Prozesses abwechselnd entsprechend ihrer Priorität zugeordnet werden. So kann es nicht passieren, dass ein "Absturz" eines Prozesses das gesamte System blockiert (Stichwort: Blauer Bildschirm...). Wenn du übrigens aus einer Shell Child-Prozesse gestartet hat und dann die Shell (durch exit oder CTRL-D) abbrichst, so werden im Normalfall alle noch aktiven Childprozesse ebenfalls abgebrochen. Man kann dieses Verhalten durch geeignete Kommandos (zum Beispiel in der Systeminitialisierung) modifizieren. Auf jeden Fall kann man durch das Kommando nohup meinkommando & ("no hangup") erreichen, dass der Hintergrundprozess auch weiterläuft, wenn der aufrufende Prozess sich verabschiedet. (Mit kill werden dem Prozess Signale geschickt, das Signal Nummer 1 heisst SIGHUP; nohup bewirkt das Ignorieren dieses Signals.) 2.7.2 Eingabe und Ausgabe Jedem Prozess sind zumindest drei "virtuelle" Files" zugeordnet: http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation z z z Seite 22 von 31 Input (stdin) Output (stdout) Error (stderr) (oft auch "primärer Input", "Standardinput", sowie "primärer Output" etc. genannt). Im interaktiven Fall werden diese mit der Tastatur und dem Display identifiziert. Ruft also der Benutzer ein Kommando oder Programm auf, erfolgt die Ausgabe üblicherweise am Terminalbildschirm. So bewirkt date die Ausgabe von Datum und Uhrzeit oder % echo This is a text This is a text % die Ausgabe des Strings "This is a text" oder % cat mytext Dieser Text ist im File mytext abgespeichert. % die Ausgabe des Inhalts des ASCII-Textfiles mytext. Input und Output sind also Files wie andere auch und können geeignet ersetzt werden Durch das Größerzeichen, Kommando > Pfadname wird die Ausgabe in den File Pfadname geschrieben (die Leerzeichen sind nicht nötig). (Wenn die Variable noclobber gesetzt wurde, vgl. Variable und Initialisierungsfiles , so darf der File Pfadname noch nicht existieren, sonst gibt es eine Fehlermeldung.) Um eine Ausgabe ans Ende eines Files anzuhängen, schreibt man Kommando >> Pfadname Beispiele: ls > inhalt schreibt das Inhaltsverzeichnis des aktuellen Directory in den File "inhalt". cat first > second bewirkt das gleiche wie das Kommando cp. Der Inhalt von "first" wird gelistet, aber die Ausgabe geht in den File "second". Grundsätzlich werden neue Files automatisch erzeugt, bzw. überschrieben, wenn sie schon existieren (dies lässt sich verhindern; siehe Variable und Initialisierungsfiles bzgl. der Systemvariablen "noclobber"). Der Befehl cat file1 file2 file3 > alles_zusammen bewirkt, dass ein File alles_zusammen angelegt wird, der die Files "file1", "file2", "file3" hintereinander in dieser Reihenfolge enthält. Die Befehlsfolge cat file1 > alles_zusammen cat file2 >> alles_zusammen cat file3 >> alles_zusammen http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 23 von 31 bewirkt das gleiche Ergebnis. Was passiert, wenn man in dem Befehl "cat first > second" den File first weglässt? cat > second bewirkt, dass alle nachfolgenden Eingaben vom Standard-Input (d.h. Terminal) auf den File second umgelenkt werden. Dies gilt solange, bis man ein ^d für EOF eingibt. Beispiel: cat > second Dies ist die erste Zeile ^d Dies liefert einen einzeiligen File "second" mit dem Inhalt "Dies ist die erste Zeile". Damit hat man die einfachste Form einer Fileerzeugung (entspricht dem "create" im VMS)! Wie die Standardausgabe lässt sich auch die Standardeingabe umlenken. Nehmen wir an, wir haben ein FortranProgramm, das folgende Zeilen enthält: . . . read(*,*) in1,in2,in3,in4 write(*,*) in1+2, in2+2, in3-2, in4-2 . . . Der File indat möge eine Zeile mit 4 durch Leerzeichen getrennten Integer-Zahlen enhalten. Das übersetzte Fortranprogramm möge "a.out" heißen. Statt die 4 Zahlen, die das "read(*,*)" verlangt, vom Terminal einzugeben und die durch das "write(*,*)" erzeugten 4 Zahlen vom Terminal abzuschreiben, kann man eingeben: a.out < indat > outdat Damit wird die Standardeingabe auf den File indat umgelenkt, d.h. die 4 Integer-Zahlen vom File indat gelesen, und die Standardausgabe erfolgt nicht auf dem Terminal-Schirm, sondern wird auf den File outdat umgelenkt. Mit more outdat kann man sich die Ausgabe ansehen. Wie gesagt: Jedes Kommando in UNIX ordnet sich üblicherweise 3 Dateien zu, nämlich den Standardeingabefile, den Standardausgabefile und den Standard-Fehlerausgabefile für die Fehlermitteilungen. Bisher haben wir nur den normalen Output besprochen, doch was passiert mit Fehlermeldungen? Mit a.out < indat >& outdat werden auch etwaige Fehlermitteilungen auf den File outdat umgelenkt. Dies ist wichtig vor allem bei Batchfiles oder eigenen Kommandoprozeduren. Wenn keine Umlenkung des Fehler-Outputs erfolgt, versucht das System, auf das Terminal zu schreiben. Im Falle eines Batchjobs ist kein Terminal zugeordnet, und daher wird auf manchen Maschinen dann der Prozess abgebrochen. Vor allem in Batchjobs (oder in den später noch zu besprechenden Shell-Scripts) kommt es vor, dass man die Eingabe statt von einem File (wie etwa von indat im Beispiel oben) direkt im Anschluss an das Kommando machen möchte. Im interaktiven Fall ist das trivialerweise so und man schließt dort die Eingabe mit ^d ab. Bei einem Scriptfile aber gibt es folgende Möglichkeit: a.out << EOF >& outdat Eingabezeile 1 Eingabezeile 2 ... letzte Eingabezeile EOF Dann werden alle, der Kommandozeile folgenden Zeilen bis zur der Zeile, die nur aus den Zeichen "EOF" besteht, als Eingabe verwendet. Statt "EOF" kann man auch beliebige andere Zeichenfolgen oder Zeichen http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 24 von 31 verwenden, wie zum Beispiel "!". So erzeugt folgende Kommandofolge bei interaktiver Eingabe am Terminal (ich habe hier zum besseren Verständnis auch die Promptzeichen ausgeschrieben) einen Textfile, der als Input für obige Programm verwendet werden kann. %cat <<! > indat %17 25 36 -777 %! % Achtung: Das Abschlusszeichen darf keine anschließenden unsichtbaren Zeichen - wie etwa Leerzeichen haben, sondern die neue Zeile muss sich unmittelbar anschließen. Andernfalls wird der Abschlussstring nicht als solcher erkannt! 2.7.3 Befehlsfilter und "Pipes" Wie schon am Kapitelanfang erwähnt, kann man auch mehrere UNIX Kommandos in eine Zeile schreiben, indem man sie durch ein ";" trennt, ls dir1; cat mytext.tex In diesem Fall wird das Ergebnis (der Output) der verschiedenen Kommandos auf den primären Output (im interaktiven Fall der Bildschirm) gelegt. Es gibt aber noch eine andere Variante, bei der der jeweilige Output einfach an das darauffolgende Kommando als Input übergeben wird. In diesem Fall werden die Kommandos durch das Zeichen "|" getrennt. Will man zum Beispiel den Inhalt eines Files mittels "cat file" auflisten will, so ist das Resultat dieser Eingabe ein unaufhaltsamer Strom von Daten. Um diese Information bildschirmweise zu bekommen, könnte man so vorgehen: cat find > zwischenfile ; more zwischenfile Dies lässt sich in UNIX mit der sogenannten Pipe direkter, das heisst ohne Umweg über den File zwischenfile bewerkstelligen: cat find | more Der Output des ersten Kommandos dient als Input für das zweite Kommando, das durch den senkrechten Strich (|) vom ersten getrennt ist. Das könnte man beliebig fortsetzen. Dieser Vorgang "Pipelining" macht natürlich nur Sinn, wenn das sich jeweils anschließende Kommando mit dem Output des Vorgängers etwas anzufangen weiß, andernfalls verschwindet dieser Output im Datennirwana. Das Kommando more liefert unter SysV-Unix den Text jeweils seitenweise (definiert durch die Größe des jeweiligen Fensters). Mit der Leertaste kann man weiterblättern, mit "q" (fuer quit) abbrechen. Leider funktioniert dieses Kommando unter BSD-Unix (und unter Linux) anscheinend nicht immer. (Auf dem Kursrechner musste ich es durch ein funktionierendes Kommando einer anderen Distribution ersetzen.) Allgemein sollte man unter Linux statt dessen das Kommando less verwenden, also z.B. liefert ls -l /etc|less den Inhalt des Folders /etc seitenweise. Mittels "f" (forward) und "b" (backwards) kann man vor- und zurück blättern. Mittels "d" blättert man nur eine halbe Seite vor. Näheres siehe man less. Oft will man aus einem langen File filename nur eine Zeile mit einer bestimmten Zeichenkette text wissen. Dazu gibt man ein http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 25 von 31 cat filename | grep 'text' Das "cat" geht durch einen Filter und es werden letztlich nur diejenigen Zeilen ausgegeben, die den Text text enthalten. Das Kommando grep bedeutet übrigens "global regular expressions print". (Dieses Beispiel hätte man auch durch Eingabeumlenkung lösen können, nämlich wie?) Mit grep string filename(n) kann man übrigens auch alle angegebenen Files auf etwaig in den Files (nicht in den Namen, sondern in den Inhalten!) enthaltene Strings durchsuchen lassen. Dazu gibt es auch ein eigenes Kommando: egrep. So findet zum Beispiel egrep DEBUG /etc/init.d/* alle Files in /etc/init.d/, in denen der String "DEBUG" vorkommt. Nehmen wir an, "orig.f" ist ein Fortran-Programm, und "next.f" ist eine modifizierte Version. Mit dem Befehl diff -e orig.f new.f > changes erzeugt man einen File changes, der nur die Änderungen des Programms new.f in einer Form enthält, die der Editor ed lesen kann. Mit folgendem Kommando erhält man aus dem ursprünglichen File orig.f und dem Änderungsfile changes einen File, der am Terminal ausgegeben wird und genau dem File new.f entspricht: (cat changes; echo '1,$p')|ed - orig.f (Merke: Der String in echo beginnt mit der Ziffer 1, nicht dem Buchstaben l; die Leerzeichen vor und nach dem "" sind wichtig!) Es ist daher im Prinzip unnötig, den File new.f aufzuheben; man behält nur die ursprüngliche Version des Programms und die Files, die in übersichtlicher Form die Änderungen angeben. Das ist sozusagen die Kindergartenversion eines "File Revision Control Systems". Professionelle Varianten davon gibt es mehrere und wir werden sie später im Abschnitt Systemadministration kurz besprechen. In diesem Beispiel ruft die letzte Pipe den Editor ed auf; die Editier-Kommandos kommen aber nicht vom Terminal (Standardinput), sondern von der davorstehenden Pipe. Diese enthält zwei Kommandos, die hintereinander exekutiert werden. Mit "cat" werden die gewünschten Änderungen angegeben. Das 2. Kommando weist den Editor an, die Änderungen im ganzen File ( von Zeile 1 bis letzter Zeile = $ ) durchzuführen und das Ergebnis auszugeben (=p für print). Manchmal will man auch, dass ein unnötiger Output einfach verschwindet. Man kann das durch Umlenken auf den File /dev/null erreichen. Er ist gleichsam ein schwarzes Loch, das alle Daten widerspruchslos aufnimmt (und vergisst). Aufgabe 2.7.3.A.1 Aufgabe 2.7.3.A.2 Aufgabe 2.7.3.A.3 2.8 Weitere nützliche UNIX-Kommandos zur File-Bearbeitung Wir wollen hier einige Kommandos näher besprechen, da sie oft sehr praktisch sind: 2.8.1 Sortieren 2.8.2 Fileunterschiede http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 26 von 31 2.8.3 Zugriffsberechtigungen 2.8.4 Eigentümer Aufgabe 2.8.A.1 2.8.1 Sortieren Das Kommando "sort" liest den Input und sortiert ihn zum Output. Mit sort < file1 > file2 wird file1 sortiert und auf file2 gespeichert. Mit verschiedenen Optionen kann die Art der Sortierung (z.B. ASCII, lexikographisch, numerisch, etc.) gesteuert werden. So erhalten wir % cat testfile Eva Adam Franz Helga %sort < testfile Adam Eva Franz Helga Wir haben dabei (zu deiner Information) den zu sortierenden File zuerst mittels cat ausgeschrieben. Was ist das Ergebnis von sort -n <<! > file_out 17 2 19 5 ! daher ? Nützlich ist auch die Option -u (kurz für "unique"), mit der etwaige Duplikate beim Sortieren ausgeschieden werden. Aufgabe 2.8.1.A.1 2.8.2 Fileunterschiede Oft möchte man source-Files vergleichen oder verschiedene Versionen eines Programms aufheben. Mit dem Kommando diff filea fileb werden die Unterschiede in den Files filea und fileb am Terminal ausgegeben. (Es gibt auch Fullscreen-Partner http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 27 von 31 dazu: unter Linux xdiff oder mgdiff.) Mit weiteren Optionen kann die Art der Angaben beeinflusst werden. Dieses Kommando erlaubt auch eine effiziente Verwaltung verschiedener Programm-Versionen (vgl. Befehlsfilter und "Pipes" ). Das Kommando comm [-123] filea fileb schreibt in drei Spalten (1.) Zeilen, die nur in filea vorkommen, (2.) Zeilen die nur in fileb vorkommen (3.) Zeilen, die in beiden vorkommen. Die beiden Files sollten ASCII sortiert sein. Mit den Optionen unterdrückt man die jeweilige(n) Spalte(n). Aufgabe 2.8.2.A.1 2.8.3 Zugriffsberechtigungen Die Grundzüge der File-Zugriffsberechtigung im UNIX sind recht einfach. Es gibt nur 3 Benutzerklassen: z z z den Besitzer (u = user) die Gruppe (g = group) alle anderen Benutzer (o = others) Jeder Benutzer kann 3 Arten von Rechten bei einem File haben: z z z r = read (Lesen) w = write (Schreiben und Löschen); seit Linux Kernel 2.4 müssen zum Löschen auch die w-Rechte für das Directory gegeben sein) x = execute (Ausführen: Kommandofile oder ausführbares Programm) Bei einem Directory gibt es die gleichen Rechte, die folgendes bedeuten: z z z r = Erlaubnis zum Auflisten w = Erlaubnis zum Hinzufügen eines neuen Files (oder zum Löschen eines Files, sofern auch die wRechte fü den File gegeben sind) x = Durchsuchen von Subdirectories Die Option l ("long") bei ls gibt neben den Filenamen auch die Zugriffsrechte der Files an. Man erhält beispielweise -rw-r----- 1 jfk tph 188 Dec 2 17:34 adressen drwxr-xr-x 1 jfk tph 1024 Nov 10 08:27 mydir -rwxr-x--- 1 jfk tph 608 Dec 29 12:24 a.out Man erkennt daraus: Das aktuelle Directory des Benutzers jfk (Gruppe thp, siehe auch z z z Eigentümer ) enthält einen Datenfile "adressen" (188 Byte, letztmalig bearbeitet am 2. Dez. um 17:34 Uhr), ein Sub-directory "mydir" ein exekutierbares Programm "a.out" Der linke Block (bestehend aus 1|3|3|3 Zeichen) der Ausgabe bedeutet: Art (d directory, - file) | rwx-Rechte von u | rwx-Rechte von g | rwx-Rechte von o http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 28 von 31 Somit hat der Besitzer (u) beim File "adressen" r und w-Rechte, aber keine x-Rechte (es ist also kein exekutierbarer File), die Gruppe (g) kann den File lesen, und alle anderen (o) haben gar keine Rechte. Im Gegensatz dazu kann die ganze Welt den Inhalt des Subdirectory mydir ansehen und sich mittels "cd" auch "hineinsetzen". Übrigens, zur Erinnerung: Eingabe von "ls" allein liefert: adressen a.out dir Eingabe von "ls -lF" dagegen liefert: adressen a.out* dir/ Man kann die Zugriffsrechte auf Files und Directories mit dem Kommando chmod [u|g|o|a] [+|-|=] [r|w|x]filename(n) ändern. Dabei bedeuten u: User, g: Gruppe, o:Others, a=ugo(alle) und +, - und = das Hinzufügen, Wegnehmen oder Gleichsetzen der Rechte. Beispiele sind chmod g-w file2 Der Gruppe werden die w-Rechte für "file2" entzogen. chmod a=rx file2 Alle bekommen die Rechte rx, ein entsprechendes ls liefert also -r-x-r-x-r-x. Man kann diese Rechte übrigens auch mittels Oktalcode eingeben. Dabei entspricht jedes Bit dem Setzen des entsprechenden Rechts in der rwxrwxrwx-Reihe mit der Bedeutung r=4,w=2,x=1, gar keine Rechte =0. So ergibt sich der richtige Oktacode bei chmod durch Addition der gewünschten Rechte für jede Klasse. Damit entspricht chmod 777 (folgt aus 1+2+4) dem Maximum und chmod 000 dem Minimum an Rechten für alle Klassen. Der Befehl chmod 555 file2 ist etwa dem letzten Beispiel oben äquivalent. Welche Rechte bekommt ein (z.B. mittels touch oder vi) neu angelegter File? Das hängt von einer Shellvariablen (siehe auch Variable ) namens "umask" ab. Man kann ihren Wert durch Eingabe von umask feststellen. Der Wert besteht aus drei Oktalzahlen, die eine Maske für die verbotenen Rechte darstellt. Der Wert 022, der derzeit Default auf unseren Maschinen ist, entspricht also dem Kommando "chmod g-w,o-w". Damit würde ein File, der vom Programm vi oder touch mit den natürlichen Rechten rw-rw-rw erzeugt wird, nur die Rechte rw-r--r-- erhalten. Viele Benutzer setzen ihre umask-Variable noch restriktiver: umask 027 damit keiner der "others" Files lesen kann, besonders misstrauische Leute wählen sogar umask 077 und erlauben damit weder Gruppe noch anderen den Zugriff. Ein normaler Textfile wird durch die gesetzte umask nicht ausführbar, d.h. der Besitzer hat kein x-Recht (das ist ein nützlicher Schutzmechanismus!). Was macht man, wenn dieser Textfile aber einen Kommandofile darstellen soll und somit exekutiert werden muss? Man gibt dem File Exekutier-Rechte mittels chmod u+x file1 Der Besitzer soll x-Rechte für "file1" dazubekommen http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 29 von 31 Wenn du verhindern willst, dass ein wichtiger File ohne Rückfrage (vielleicht irrtümlich durch dich selbst) mittels "rm" gelöscht werden kann, dann nimm dir einfach selbst die Schreibrechte: chmod a-w file1 Niemand darf den File ändern oder löschen Aufgabe 2.8.3.A.1 Aufgabe 2.8.3.A.2 Neben den hier besprochenen Rechten (und chmod-Bits) gibt es noch weitere (wie etwa das "Sticky-Bit"; Informationen dazu sind am besten mitels man chmod abzurufen. 2.8.4 Eigentümer In der Seite über Zugriffsrechte haben wir mittels "ls -l" das Ergebnis -rw-r----- 1 jfk tph 188 Dec 2 17:34 adressen drwxr-xr-x 1 jfk tph 1024 Nov 10 08:27 mydir -rwxr-x--- 1 jfk tph 608 Dec 29 12:24 a.out erhalten. Wir erkennen daraus, dass diese Files dem Benutzer jfk der Gruppe tph gehören. Diese Zugehörigkeit kann der jeweilige Besitzer auch ändern. Der Befehl chown user.group pathname ändert den Besitzer des Objekts pathname (meist ein File oder ein Directory) auf die neuen Werte user.group . Mit der Option -R passiert das rekursiv, falls pathname ein Directory ist. Dann werden also die Besitzer aller darunter liegenden Files und Folder ebenfalls geändert, und so weiter. Das kann sich (vor allem für den Superuser) als nützlich erweisen, wenn man (zum Beispiel mittels "tar") einige Files und Directories "importiert" hat und sicher gehen will, dass diese auch den richtigen Besitzer aufweisen. Allerdings: chown kann nur vom SysAdmin ausgeführt werden, da ein normaler Benutzer das Eigentum nicht auf andere übertragen darf! Wenn nur die Gruppenzugehörigkeit geändert werden soll, gibt es das Kommando chgrp, ebenfalls für die oder den SysAdmin reserviert (mehr mit man chgrp ). 2.9 Kommunikation von Benutzer zu Benutzer Die einfachste Art, einem anderen Benutzer Files oder Informationen zukommen zu lassen, ist mittels "mail" . Was muss man dazu wissen? Nur den login-Namen des Empfängers. Dieser ist mit dem Kommando finger Nachname für einen Benutzer mit dem Nachnamen Nachname feststellbar. (Es klappt auch mit dem Vornamen ;). Meist besteht der login-Name aus den Initialen des Benutzers. Man bekommt darüber hinaus noch weitere dem System bekannte Informationen über den Benutzer, sowie eine Kopie eines Files ".plan", soferne der Benutzer kommunikationsbedürftig genug ist, so einen File in seinem Home-Directory angelegt zu haben. Mit "finger username" bekommt ebenfalls diese Informationen. In neuerer Zeit wird das Kommando finger allerdings aus Security-Gründen oft deaktiviert. Mail http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 30 von 31 Um nun z.B. dem Benutzer xyz (auf dem gleichen Computer!) einen vorher erstellten File "nachricht" zu schicken, gibt man ein: mail xyz ~r nachricht . Unix-Mail hat eine wechselvolle Vergangenheit. Zuerst gabe es das mail-Kommando unter Version 1 AT&T Unix, spä als Mail unter BSD-Unix. Wenn man BSD-Mailer verwendet, muss man Mail mit einem Großbuchstaben schreiben (oder ein entsprechendes Alias setzen, siehe das Kapitel über .cshrc 5.4 Initialisierungsfiles ). Unter Linux sind die beiden zusammengeführt und mail ist ein Alias fü Mail Statt des "~r nachricht" kann man auch interaktiv beliebig viel Text eingeben. Die Mail-Message wird jedenfalls mit einem Punkt in der ersten Spalte einer Zeile (und anschließendem <CR> = "Carriage Return" = "Wagenrücklauf-Taste") abgeschlossen. Der Empfänger erfährt automatisch, ob eine Nachricht für ihn angekommen ist. Es erscheint auf dem Terminal eine Nachricht wie "you have mail" oder "new mail arrived". Daraufhin gibt er oder sie ein mail (Zeichen <CR> nicht vergessen!) Nun kann man einfach durch Eingabe eines weiteren <CR>-Zeichens die 1. Nachricht, anschließend die 2. - sofern vorhanden - usw. ansehen. Die Liste der vorliegenden Mails kann man durch das Zeichen "h" (für "Headers") nochmals ausschreiben lassen. Mittel "p n" wird die "n-te" Nachricht ausgeschrieben. Durch Eingabe von q <CR> beendet man das mail-Programm wieder. Alle empfangenen Nachrichten werden dabei automatisch an einen File "mbox" im Home-Directory des Benutzers angehängt. Wenn der File nicht existiert, wird er angelegt. Bitte räume regelmäßig diesen File auf, er kann sonst astronomische Größen erreichen. Weitere Mail-Befehle kann man mit "man mail" online erhalten. Unter anderem gibt es die Möglichkeit, das Verhalten des Mail-Programms seinen Bedürfnissen mit Hilfe eines Initialisierungsfiles .mailrc anzupassen. Neben der Klasse der normalen Benutzer gibt es noch den "Superuser" mit dem Usernamen "root". Die SystemFiles und -Prozesse "gehören" ihm. Die oder der SysAdmin arbeitet oft als "root" und kann unter diesem Benutzernamen Mail versenden und erhalten. Wenn du Probleme mit dem System hast, sende also Mail an root. Auf manchen Systemen werden das BSD-Mail und das System-V Mail unterschiedlich aufgerufen (zum Beispiel auf SGIs: Informationen mit "man Mail" (BSD) und "man mail" (SVR4)). Neben dem Standard-Mailprogramm mail gibt es noch andere, komfortablere: Pine Wenn dein Terminal den VT100-Zeichensatz versteht (oder über einen richtig eingestellten anderen Terminaltyp auch im Zeilenmodus der ganze Bildschirn angesprochen werden kann), dann erlaubt pine, die Mail in einem Full-Screen-Modus zu lesen und zu bearbeiten. Das kann nützlich sein, wenn du nur in einem Zeilen-Modus auf dem Computer einloggen kannst. Netscape Mail Das ist ein Unterprogramm des Navigators (Communicators) von Netscape, das auf praktisch allen graphikfähigen Frontends (Terminals) verfügbar ist. Primär ist der Navigator ein WWW-Browser . KDE kmail Unter Linux und der KDE-Oberfläche verwendbares Mail Frontendprogramm. http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005 UNIX System, Netz und Kommunikation Seite 31 von 31 Aufgabe 2.9.A.1 http://physik.uni-graz.at/~cbl/Unix/admin/mk_combined_file.php 12.05.2005