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