U N I X
FÜR ANFÄNGER
Kursunterlage
Dr. Hubert Partl
partl@mail.boku.ac.at
Juli 1997
Unix hat sich, zumindest im Bereich der Workstations, Server und Hochleistungsrechner, in den 80er-Jahren zum Standard entwickelt und damit die Ära der inkompatiblen, herstellerabhängigen Betriebssysteme wie MVS, VM, VMS, NOS/BE, Gecos, Primos etc. beendet. Heute gehörtUnix genauso zur Allgemeinbildung der Computer-Anwender wie die PC-Systeme MS-DOS und Windows-NT. Unix ist auf allen Arten von Rechnern implementiert - von den kleinsten Workstations bis zu den größten Superrechnern, und es gibt auch Unix-Versionen fuer PCs!
Die Entstehungsgeschichte von Unix ist etwas ungewöhnlich:
Ende der 60er, Anfang der 70er-Jahre gab es einmal ein großes Projekt, die Entwicklung des Betriebssystems Multics (von lateinisch multi = viele), das für viele Benutzer, viele Programme und viele verschiedene Computer geeignet sein sollte. Dieses Projekt war ein bißchen zu ehrgeizig und mußte reduziert werden. Aber einer der Systemprogrammierer, der die Multics-Komponenten mit einem Spiel-Programm getestet hatte, wollte auf dieses Spiel nicht verzichten. So bastelte er aus den Multics-Trümmern ein Mini-System, das nur die Funktionen enthielt, die für das Laufen seines Programms notwendig waren. Im Gegensatz zu Multics nannte er sein System Unix (von lateinisch unus = einer). Aber bald war er nicht mehr der einzige Benutzer - seine Kombination der genialen Ideen von Multics mit der realistischen Devise "small is beautiful" hat sich so gut bewährt, daß Unix heute in aller Welt verwendet wird.
Die Weiterentwicklung von Unix erfolgte sowohl im akademischen als auch im kommerziellen Bereich und führte zu mehreren verschiedenen Versionen. Die wichtigsten sind Unix System V von der Firma Bell-AT&T und BSD-Unix von der Universität von Berkeley. Die heute verwendeten Systeme sind meist Vereinigungsmengen dieser beiden Versionen. In diese Richtung zielt auch die Normung ("Open Systems", POSIX, System 5.4).
Seit es Unix gibt, haben auch viele andere Betriebssysteme Elemente aus der Unix-Welt in sich aufgenommen. Sie werden daher in Unix einiges wiederfinden, was Sie schon von anderen Systemen kennen. Dies gilt insbesondere für das PC-System MS-DOS.
Der wichtigste Unterschied zwischen Unix und MS-DOS liegt darin, daß Unix ein Betriebssystem für den Multi-User- und Multi-Task-Betrieb ist:
* Der PC "gehört" dem Benutzer, der vor ihm sitzt, und kann im wesentlichen immer nur einen Befehl nach dem anderen ausführen.
* Der Unix-Rechner wird von mehreren Benutzern gleichzeitig verwendet, und er kann viele Prozesse (Aufgaben, Befehle) parallel ausführen.
Die Benutzer müssen sich deshalb erstens immer mit dem sogenannten "Login" anmelden, d.h. durch die Eingabe von Username und Paßwort identifizieren. Erst dann können sie Unix-Befehle eingeben, und schließlich mit exit oder logout oder <Ctrl d> die Session beenden.
Zweitens sind in Unix Schutzmaßnahmen eingebaut, damit jedem Benutzer nur sein eigener Bereich "gehört" und er gegen Störungen durch andere Benutzer geschützt ist.
Ein weiterer Unterschied liegt darin, daß Unix in vielem "konsequenter" ist als MS-DOS oder Windows:
* Groß- und Klein-Buchstaben gelten immer als verschieden, auch in Befehlen und Filenamen.
* Der Stern * bedeutet immer die Liste aller Filenamen des aktuellen Directory, egal bei welchem Befehl.
* Der senkrechte Strich | als Pipe-Symbol kann immer dazu verwendet werden, die Ausgabe eines Befehls in die Eingabe des nächsten Befehls umzuleiten.
Beispiele für solche Pipes
Unter Unix kann man bei jedem beliebigen Befehl die Bildschirm-Ausgabe mit
command | more
nach jedem vollen Bildschirm warten lassen (auf blank für Fortsetzung oder q für Abbrechen) oder mit
command | lp
auf den Drucker umleiten.
Mit Pipes lassen sich auch komplexe Anwendungen aus einfachen Einzelschritten zusammenstellen. Die folgende Befehlszeile liefert zum Beispiel eine Liste der Files und Directories, die den meisten Plattenplatz belegen:
du -a $HOME | sort -n | tail -20
Ein wichtiger Unix-Befehl für Anfänger und Fortgeschrittene ist der man-Befehl zum Lesen der Online-Manuals. Mit
man -k keyword
erhält man eine Übersicht über alle Unix-Befehle, die sich auf einen bestimmten Begriff beziehen, und mit
man commandname
erhält man die komplette Beschreibung des jeweiligen Unix-Befehls.
Wenn Sie z.B. wissen wollen, wie das oben angeführte Beispiel (du ...) funktioniert, geben Sie die folgenden Befehle ein:
man du
man sort
man tail
Mit der Befehlszeile
man commandname | col -bx | lp
kann man einzelne man-Pages ausdrucken.
Bevor Sie sich nun aber sofort an einen Unix-Rechner setzen und wild darauflostippen wollen, eine kleine Warnung:
Unix ist sehr mächtig, und das ist gleichzeitig ein Vorteil und ein Nachteil. Sie können mit Unix sehr viel machen, Sie können dabei aber auch sehr viel falsch machen. Es gehört zur "Konsequenz" von Unix, daß es Ihnen sozusagen blindlings vertraut und auch Befehle mit für Sie möglicherweise fatalen ungewollten Folgen ohne weiteres ausführt. Deshalb: Bitte, erst denken, dann <Enter> tippen!
Vielfach wurde kritisiert, daß Unix-Systeme nur geringe Sicherheit bieten. Diese Kritik ist nicht gerechtfertigt. Unix erlaubt es nämlich jedem Benutzer, in einem sehr weiten Rahmen selbst zu entscheiden, wie weit er sich und seine Files gegenüber anderen Benutzern sowie gegenüber dem Zugriff von anderen Rechnern über das Netz schützen will - von sehr offen und ungeschützt bis zu sehr restriktiv und geschützt.
Aus des Sicht des Systems ist in Unix alles ein "File": echte Files, Directories, Programme, Geräte, Leitungen. Für alle diese Objekte ist daher derselbe Schutzmechanismus wirksam: die File-Protection.
Der Schutzmechanismus unterscheidet einerseits, wer etwas mit dem geschützten Objekt tun darf, und andererseits, was derjenige mit ihm tun darf.
Wer? Bei der Frage Wer? unterscheidet Unix zwischen Eigentümer (Owner, User), Gruppe (Group) und dem Rest der Welt (other):
Owner ist normalerweise der Benutzer (der Username), der das File angelegt hat.
Group ist normalerweise die Gruppe, der der Owner angehört, z.B. das Institut. Der Owner kann das File aber mit dem chgrp-Befehl einer anderen Gruppe zuordnen.
other sind alle anderen Benutzer (alle anderen Usernames).
Was? Bei der Frage Was? unterscheidet Unix zwischen Lesen (read), Schreiben (write) und Ausführen (execute).
Bei echten Files bedeuten
read das Lesen und Verwenden des File-Inhalts,
write das Schreiben, Verändern und Löschen des File-Inhalts,
execute das Ausführen des File-Inhalts, wenn dies ein ausführbares Programm ist.
Bei Directories bedeuten
read und execute die Verwendung der Filenamen (ohne execute-Erlaubnis auf ein Directory können also die darin enthaltenen Files und Sub-Directories nicht angesprochen werden, egal welche Permissions sie selbst haben), sowie die Durchführung von ls- und cd-Befehlenm
write das Anlegen und Löschen von Files und das Ändern von Filenamen.
Jedes File hat neun Protection-Bits: die Read-, Write- und Execute-Permission für Owner, Group und other. Das Recht, die Permissions zu setzen und zu ändern, hat immer nur der Owner des Files.
Beim Anlegen eines neuen Files erhält es die Protection-Bits, die sich aus der "Umask" des Benutzers ergeben. Diese Umask wird normalerweise in den Files .cshrc und .profile gesetzt, die (wie autoexec.bat am PC) beim Login automatisch ausgeführt werden. Nachträglich können die Protection-Bits mit dem chmod-Befehl geändert werden. Beispiele:
umask 077 oder chmod 700 file
bedeutet, daß nur der Owner das File verwenden kann.
umask 027 oder chmod 750 file
bedeutet, daß der Owner mit dem File alles tun kann, die übrigen Benutzer der Gruppe das File nur lesen und ausführen können, und alle anderen Benutzer gar keinen Zugriff darauf haben. Mit
chmod 500 file
kann sich der Owner auch selbst gegen irrtümliche Zerstörung eines eigenen Files schützen.
Genauere Informationen über die Befehle umask, chmod und chgrp finden Sie in den Online-Manuals (man-Befehl).
Anmerkung: Manche Programme wie ftp, vi oder fc erzeugen unter Umständen von der Umask abweichende Permissions. In diesen Fällen kann eine Korrektur mit chmod notwendig sein. Mit
ls -l file bzw. ls -ld directory
kann man die Protection eines Files bzw. eines Directory kontrollieren.
Alle diese Schutzmechanismen funktionieren natürlich nur, solange sichergestellt ist, daß unter jedem Username tatsächlich nur der betreffende Benutzer arbeitet. Die Usernames können unter Unix jederzeit abgefragt werden (z.B. mit who), der einzige Schlüssel für die Sicherheit ist daher das Paßwort.
Die Paßwörter normaler Benutzer bestehen unter Unix aus 6 bis 8 beliebigen Zeichen, von denen mindestens zwei Buchstaben und mindestens eines kein Buchstabe (also eine Ziffer oder ein Sonderzeichen) sein sollen.
Um eine sinnvolle Sicherheit zu erreichen, sind die folgenden Grundregeln einzuhalten:
* Jeder Username soll nur einer Person gehören, sodaß Paßwörter nie weitergegeben werden müssen.
* Wählen Sie keine Paßwörter, die leicht erraten werden können. Ihre Instituts- oder Telefonnummer oder der Vorname Ihrer Freundin sind nicht geeignet.
Aber auch andere typische Abkürzungen, Namen oder Wörter sollen nicht verwendet werden. Von Hackern werden nämlich Password-Crack-Programme verwendet, die natürlich nicht alle möglichen Kombinationen, aber einige Tausend typische Paßwörter ausprobieren.
Günstig, weil nur für Sie selbst leicht zu merken, sind z.B. die Anfangsbuchstaben eines Satzes. So könnte Prinz Hamlet etwa aus der Frage "To be or not to be?" das für Fremde kaum zu erratende Paßwort "2bon2b?" bilden.
* Schreiben Sie Paßwörter niemals auf, weder auf Papier noch in Files, sondern behalten Sie sie nur in Ihrem Kopf. (Falls Sie Ihr Paßwort vergessen, kann Ihnen der Systemadministrator jederzeit ein neues Paßwort vergeben.)
* Ändern Sie Ihr Paßwort mindestens einmal pro Jahr.
* Behandeln Sie Ihr Paßwort so sorgfältig wie Ihren Auto- oder Wohnungsschlüssel, und lassen Sie diesen Schlüssel nie "stecken", d.h. wann immer Sie Ihr Terminal verlassen, auch nur für kurz, machen Sie ein Logout (exit).
Die Institutsgebäude der Universität für Bodenkultur sind mit einem lokalen Netz (LAN) ausgestattet. Damit sind alle angeschlossenen PCs, Rechner und Ausgabe-Geräte physikalisch verbunden. Über eine Standleitung der Post bzw. Telekom ist dieses "BokuNet" außerdem an das weltweite Netz "Internet" angeschlossen. Der Domain-Name unserer Universität innerhalb des Internet ist "boku.ac.at".
Mit Telnet kann man den eigenen Rechner als Terminal für einen anderen Rechner verwenden, z.B. den eigenen PC als Terminal für einen Unix-Rechner. Beispiel:
telnet hostname
unixusername
unixpaßwort
setenv TERM
vt100
... (Unix-Befehle) ...
exit oder logout
Im Gegensatz zu Telnet, das nur die Text- und Zeilen-orientierte Arbeit auf einem Unix-Rechner ermöglicht, unterstützt X-Window auch Graphik-Ein- und Ausgabe. Sie können damit z.B. farbige Bilder auf einem Graphik-Bildschirm darstellen und eine Maus oder einen Digitizer verwenden.
X-Window ermöglicht es, auf einem Bildschirm mehrere Fenster nebeneinander zu verwenden, in denen mehrere Unix-Prozesse gleichzeitig laufen. X-Window ermöglicht es auch, von einem Bildschirm aus mehrere über das Netz erreichbare Unix-Rechner gleichzeitig zu verwenden. Mit einfachem Maus-Klick können Sie Texte zwischen den Fenstern kopieren.
Als "X-Server" wird der Rechner bezeichnet, auf dessen Bildschirm die Ein-Ausgabe erfolgt, also z.B. ein X-Terminal oder eine Unix-Workstation oder auch ein PC mit spezieller Software (z.B. HCL-eXceed).
Als "X-Client" wird der Rechner bezeichnet, auf dem die Applikation läuft, die die Ein-Ausgabe verarbeitet. Dies kann dieselbe oder eine andere Unix-Workstation oder ein größerer Rechner sein.
Mit FTP kann man Files zwischen zwei Rechnern hin- und herkopieren. Wenn man z.B. ein Text-File vom eigenen PC auf einen Unix-Rechner übertragen will, gibt man am PC die folgenden Befehle an:
ftp hostname
unixusername
unixpaßwort
put pcfile
unixfile
bye oder quit
Wenn man ein Unix-File auf den PC holen will, analog mit
get unixfile pcfile
Mit ascii oder binary kann man zwischen Text-Files und Binär-Files umschalten. Eine Liste weiterer FTP-Befehle erhält man mit help.
Mit WWW-Clients wie z.B. "netscape", "lynx" oder "mosaic" kann man Informationen (Texte, Hypertexte mit Links zum Anklicken, Bilder, Hypermedia), die irgendwo in der Welt auf einem an das Internet angeschlossenen WWW-Server gespeichert sind, einfach und bequem am eigenen Bildschirm ansehen und bei Bedarf ausdrucken oder weiterverarbeiten.
Mittels Electronic Mail kann man Nachrichten oder Files an andere Computer-Benutzer in aller Welt in Form von "elektronischen Briefen" senden. Als Mail-Programm können Sie auf den Unix-Rechnern "elm" oder "mailx" verwenden.
Die Newsgruppen des Usenet-News-Systems dienen für den Informationsaustausch mit großen Personengruppen in der Form von öffentlichen Fragen, Antworten und Diskussionen. Damit diese Kommunikation erfolgreich ist, müssen die Benimmregeln der "Netiquette" eingehalten werden. Als Newsreader-Programm können Sie auf den Unix-Rechnern "tin" verwenden.
Ausführlichere Informationen über diese Netz-Dienste finden Sie im Internet-Handbuch.
An der Unix-Workstation oder an einem X-Terminal:
Login am
Unix-Rechner
Am PC unter MS-Windows bei der Verwendung von HCL-eXceed:
eXceed-Icon
anklicken
Login am Unix-Rechner
Am PC unter MS-DOS bei der Verwendung von HCL-eXceed/P:
hclp
hostname
Login am Unix-Rechner
Die folgenden Angaben gelten für die Verwendung des Motif Window Manager "mwm" oder eines ähnlichen Window Manager (visual user environment VUE, common desktop environment CDE) am Unix-Rechner. Bei der Verwendung von HCL-eXceed unter MS-Windows müssen stattdessen die entsprechenden Funktionen von MS-Windows eingesetzt werden!
Fenster für Keyboard-Eingabe aktiv machen:
Maus in das Fenster
bewegen oder klicken.
Fenster verschieben:
Mausklick in den Titlebar und Bewegen mit
gedrückter Maustaste.
Fenster vergrößern oder verkleinern:
Mausklick in die
Kante oder Ecke und Bewegen mit gedrückter Maustaste.
Fenster auf Maximalgröße vergrößern:
Mausklick
auf Knopf rechts oben.
Zurücksetzen wieder mit Mausklick auf diesen
Knopf.
Fenster in den Vordergrund holen:
Mausklick auf den Rahmen des
Fensters.
Fenster in den Hintergrund setzen:
Alt-F3 drücken.
Fenster auf Ikone verkleinern:
Mausklick auf zweiten Knopf von rechts
oben. Das Programm läuft weiter.
Wiederherstellen des Fensters mit
Doppelklick auf die Ikone.
Text kopieren in den Terminal-Fenstern:
Text mit linker Maustaste
markieren, mit mittlerer Maustaste einfügen.
Text zurückholen im Terminal-Fenster:
Mausklick oben oder unten
(oder mit linker bzw. rechter Maustaste) oder Bewegen des Schiebers im
"Scroll-Bar" (evtl. mit mittlerer Maustaste).
zusätzliche Fenster öffnen:
Unix-Befehle wie
xterm
&
oder
hpterm &
oder Mausklick auf den Terminal-Knopf von
VUE bzw. CDE oder Auswahl von "New Window" im Workspace-Menü (Mausklick in
den Hintergrund).
Für die Verwendung eines anderen Client-Rechners: Erlaubnis mit "xhost", Login mit "telnet", Ausgabe mit DISPLAY-Variable festlegen.
Fenster schließen:
Programm bzw. Shell mit quit bzw. exit
beenden.
Achtung: Beim Schließen des Fensters mit Doppelklick auf den Knopf links oben oder mit Alt-F4 wird das Programm abgebrochen, man muß deshalb vorher alle Arbeiten abschließen und alle Ergebnisse sichern (save).
Mausklick auf den Logout-Knopf von VUE bzw. CDE (rechts unten) oder Auswahl von "Logout" im Workspace-Menü (Mausklick in den Hintergrund), oder Befehl "exit" im Console-Window.
Achtung: Beim Logout werden alle Programme abgebrochen, man muß deshalb vorher alle Arbeiten abschließen und alle Ergebnisse sichern (save).
Bei der Windows-Version von HCL-eXceed am PC wird die Verbindung durch Schließen des eXceed-Programms beendet (Doppelklick auf das Icon und Auswahl von "schließen" im Windows-Menü).
Bei der DOS-Version HCL-eXceed/P muß man die Verbindung mit Alt-Esc und Esc beenden.
PC:
gehört einem Benutzer
ein Befehl nach dem anderen
Unix-Rechner:
viele Benutzer gleichzeitig (Multi-User)
viele Prozesse
parallel (Multi-Tasking)
Sicherheit (Schutz der Benutzer und Prozesse):
Username, Paßwort
(Wer?)
File-Protection (Was darf wer?)
Super-User (System-Administrator, root)
Unix = Kernel + Shell
Unix System V und BSD Unix
und HP-UX, Solaris, AIX, IRIX, Linux, ...
POSIX, System V.4 (HP-UX ab 10.x)
C-Shell,
Bourne-Shll, Korn-Shell, Posix-Shell
login: username
password: paßwort
passwd
oldpw
newpw
newpw
exit
logout
<Ctrl d>
telnet hp06
kurs
kurs-pw
(Return-Taste bei Terminaltyp
VT100)
cd zuname
...
exit
beim ersten Mal:
mkdir zuname
niemals:
passwd
lp
...
Machen Sie Login, legen Sie das Directory mit Ihrem Zunamen an, gehen Sie in dieses Directory, und machen Sie wieder Logout.
commandname -optionen fileliste
commandfile -optionen fileliste
Groß-Klein-Schreibung!
man -k keyword
man commandname
man 1 commandname
man commandname | col -bx | lp -dxxx
man commandname | col -bx > filename
view filename
:q
Beispiel:
man -k manual
man man
command <input
command >output
command >>output
command >&output C-Shell
command >output 2>errors
Bourne-Shell
command >output 2>&1
command1 | command2 | command3
command | more
command | lp -dxxx
ls /usr/bin | wc -w
echo /usr/bin enthaelt 'ls /usr/bin | wc -w' Files.
du -a ~ | sort -n | tail -20
man commandname | col -bx | lp -dxxx
command1 | tee file | command2
command | tee file | more
14 (oder 255) Zeichen, Groß-Klein-Schreibung,
kein / und keine
ä ö ü ß,
möglichst nicht mit - oder . beginnen,
möglichst kein $ * ? usw.
subdir/subdir/file
|
relativ
|
| /dir/subdir/subdir/file
|
absolut
|
| .
|
aktuelles
Directory
|
| ..
|
Parent-Directory
|
| ./-xxx
|
wenn
Filename "-xxx"
|
*
a*
*.f
?a*
*a?
[abc]*
[A-Z]*.f
.??*
--> Liste aller zutreffenden Filenamen
cp oldfile newfile
cp file1 file2 file3 directory
cat file1 file2 file3 >newfile
mv oldfile newfile
mv file1 file2 file3 directory
ln oldfile newfile
ln file1 file2 file3 directory
ln -s oldfile newfile
rm file
rm -i file
cat file
more file
blank oder q
pg file
enter oder q oder ...
head -20 file
tail -20 file
view file
siehe vi-Editor
lp file
lp -ddrucker file
lpstat
cancel xxxxxx-nnn
man commandname | col -bx | lp -dxxx
pr -f -l60 file | lp -dxxx
lpstat -t | more
mkdir directory
cd directory
cd
pwd
ls
ls directory
ls files
ls -d *
ls -l
ls -la
mv olddir newdir
rmdir directory
Machen Sie Login, gehen Sie in Ihr eigenes Directory, legen Sie darin ein paar Files an (z.B. mit einem geeigneten command >file ), erzeugen Sie auch Sub-Directories und kopieren Sie Files von einem Directory in andere. Probieren Sie dann einige der gelernten Befehle aus.
Beispiele:
date > heute
who > wer.ist.da
cat heute
wer.ist.da > lange.liste
ls -l
pwd
tree
tree ~ | more
Owner (User)
Group
other
read
|
4
|
4+2+1=7
|
| write
|
2
|
4+2=6
|
| execute
|
1
|
4+1=5
|
ls -l file
-rwxr-x---
ls -ld directory
drwxr-x---
Beispiele:
umask
ls -l ~
ls -l /var/mail
Wurzel (root), Unix-Kernel:
/
Befehle (Binärprogramme):
/bin /usr/bin /usr/local/bin
...
Programmbibliotheken (Libraries):
/lib /usr/lib
/usr/local/lib
Online-Manuals (Man-Pages):
/usr/man
/usr/local/man
Header-Files (include) für
C-Programme:
/usr/include /usr/local/include
Systemverwaltung und Systemkonfiguration:
/etc /usr/local/etc
/usr/adm
Temporäre Files:
/tmp
/usr/tmp
Ein-Ausgabe-Geräte und Leitungen (devices):
/dev
/dev/null /cdrom
Datenspeicherung für System (Mail, Drucker
...):
/usr/mail /usr/spool/lp /usr/spool/mqueue ...
Datenspeicherung für Benutzer:
/users /users2 ... /a/users
/b/users ...
Home-Directory des Benutzers
$HOME ~ ~userid
Wurzel (root), Unix-Kernel:
/
Befehle (Binärprogramme) für Benutzer:
/usr/bin
/opt/local/bin /opt/xxx/bin
Programmbibliotheken (Libraries) für
Benutzer:
/usr/lib /opt/local/lib /opt/xxx/lib
Online-Manuals
(Man-Pages):
/usr/man /opt/local/man /opt/xxx/man
Header-Files
(include) für C-Programme:
/usr/include /opt/local/include
Systemverwaltung und Systemkonfiguration:
/sbin /etc /opt/local/etc
/var/adm ...
Temporäre Files:
/tmp
/var/tmp
Ein-Ausgabe-Geräte und Leitungen (devices):
/dev
/dev/null /cdrom
Datenspeicherung für System (Mail, Drucker
...):
/var/mail /var/spool/lp /var/spool/mqueue
Datenspeicherung für Benutzer:
/users /users2 ... /home
/home2 ...
Home-Directory des Benutzers
$HOME ~ ~userid
echo $path | more
command
<Ctrl d>
<Ctrl c>
command <input >output &
nohup command <input
>&output &
ps -fu username
ps
kill -1 pid
kill -9
pid
nohup nice -19 command <input >&output &
Was ist der Unterschied?
date; who >file
date >file; who >file
date >file; who
>>file
(date; who) >file
cd sub; ls -l | more
(cd sub; ls -l | more)
(command >output) >&error C-Shell
Sonderzeichen: < > ; & ( ) | \ $ * ? [ ] { } ! und andere
\x
|
1
Zeichen original
|
| 'text'
|
ganzer
Text original
|
| "text"
|
Text
original bis auf $ und '
|
| 'command'
|
Ergebnis
des Befehls
|
set name="Hubert Partl"
echo $name
set preis=1000\$
set preis='1000$'
echo $preis
set text="Heute ist 'date'"
echo $text
echo Heute ist 'date'
echo
/usr/bin enthaelt 'ls /usr/bin | wc -w' Files.
echo \$path = $path
echo * * * error * * *
echo "* * * error * * *"
echo Die Maskierung des Zeilenendes \
ermoeglicht Fortsetzungszeilen.
date
time command
time
cal
cal 1997 | more
cal 10 1492
who
who -R
who am i
logname
hostname
ps -ef | more
ps -fu username
ps
wc file
wc -wl file
wc *
nicht: cat file | wc -l
sondern: wc -l < file
echo $file ist 'wc -l < $file' Zeilen lang.
file file
file *
sort file
ls -l | sort -r -n +4 | more
diff file1 file2
Beispiel:
cd
cat pi.f
cat bad.f
diff pi.f bad.f
fgrep 'text' file
grep 'muster' file
^
|
Zeilenanfang
|
| $
|
Zeilenende
|
| .
|
1
beliebiges Zeichen
|
| .*
|
0
bis n beliebige Zeichen
|
[a-z]
|
1
Zeichen aus dieser Menge
|
| [^a-z]
|
1
Zeichen nicht aus dieser Menge
|
Beispiele:
grep 'Hubert' telefon.liste
grep 'Hubert Partl' telefon.liste
grep 'Hubert' *
grep 'pi' *.f /dev/null
who | grep 'username'
who | grep -v 'username'
ls -l | grep '^d'
ls -l | grep '^........w'
find directory parameter
find . -name '*.f' -print
find . -type d -print
find ~ -mtime -7
-print
find ~ -perm 666 -exec chmod 640 {} \; -print
find ~ -atime +100
-ok rm {} \;
find ~ -type f -exec grep 'Hubert' {} /dev/null \;
grep 'Hubert' 'find ~ -type f -print'
find ~ -type f -print | xargs grep 'Hubert'
Wenn nicht Textfiles: grep -l
du directory
du -a ~
du -s *
bdf
bdf .
compress file
--> file.Z
uncompress file
zcat file.Z | command
gzip file
--> file.gz
gunzip file
gzcat file.gz | command
tar -cf xxx.tar xxx
tar -tvf xxx.tar
tar -xvf xxx.tar xxx
tar -xvf xxx.tar file1 file2
cd directory; tar -cf ../backupfile.tar .
cd directory; tar -tvf
../backupfile.tar
cd directory; tar -xvf ../backupfile.tar .
cd
directory; tar -xvf ../backupfile.tar file1 file2
(cd olddir; tar -cf - . ) | (cd newdir; tar -xvf - . )
vi filename
view filename
h oder Linkspfeil
|
Cursor
1 Zeichen nach links
|
| j
oder Tiefpfeil
|
Cursor
1 Zeile nach unten
|
| k
oder Hochpfeil
|
Cursor
1 Zeile nach oben
|
| l
oder Rechtspfeil
|
Cursor
1 Zeichen nach rechts
|
| 0
oder ^
|
Cursor
an den Zeilenanfang
|
| $
|
Cursor
ans Zeilenende
|
| <Ctrl
f>
|
einen
Bildschirm vor
|
| <Ctrl
b>
|
einen
Bildschirm zurück
|
| 1G
|
erste
Zeile
|
| 200G
|
200-te
Zeile
|
| G
|
letzte
Zeile
|
| /muster
|
Text
"muster" suchen
|
| n
|
weitersuchen
|
i text <Esc>
|
Text
einfügen
|
| a
text <Esc>
|
Text
hinzufügen
|
| o
text <Esc>
|
Zeile
einfügen
|
| x
|
Zeichen
löschen
|
| r
|
Zeichen
ersetzen
|
| R
text <Esc>
|
Text
ersetzen
|
| cw
text <Esc>
|
Wort
ersetzen
|
| :1,$s/old/new/g
|
Text
überall ersetzen
|
| dd
|
Zeile
löschen
|
| 10dd
|
10
Zeilen löschen
|
| dw
|
Wort
löschen
|
| yy
|
Zeile
merken (zum Kopieren)
|
| p
|
gemerkten
Text einfügen
|
| xp
|
zwei
Zeichen austauschen
|
| ddp
|
zwei
Zeilen austauschen
|
| u
|
letzte
Änderung rückgängig
|
| .
|
letzte
Änderung hier nochmals
|
:w oder :w!
|
Ergebnis
speichern
|
| :q
oder :q!
|
vi
verlassen (ohne Speichern)
|
| :wq
oder ZZ
|
speichern
und vi verlassen
|
vitutor
Schreiben Sie mit vi ein Fortran-Programm (Filename muß mit .f enden, 6 Blanks an jedem Zeilenanfang).
program main
double precision pi
pi =
datan(1.0d0) * 4.0
print *, ' pi = ', pi
end
f77 name.f
f90 name.f
f77 name.f
-lnag
a.out
./a.out
a.out <input >output
a.out |
more
a.out | lp -dxxx
rm core
rm -i *.o
cc name.c
a.out
adb
|
Debugging
(absolute debugger)
|
| ar
|
Libraries
anlegen (archive)
|
| make
|
automatische
Updates
|
Führen Sie das Fortran-Programm von Übung Nr. 3 aus (Korrekturen mit vi).
besonders für interaktive Login-Sessions geeignet
.login
.cshrc
.logout
set variable=wert
$variable
set
setenv variable wert
env
history
!n
!!
!!:s/falsch/richtig
alias abkürzung text
alias
Shell-Prozeduren:
besser Bourne-Shell verwenden!
besonders für Shell-Prozeduren geeignet
.profile
variable=wert
$variable
set
export variable
env
#! /usr/bin/sh
|
erste
Zeile
|
| #
|
Kommentar
|
| $n
|
Parameter
|
while ... do ... done
for name in liste do ... done
komaptibel zur Bourne-Shell
mit Erweiterungen
telnet hostname
Unix-Username
Unix-Paßwort
setenv TERM
vt100
... Unix-Befehle ...
exit
ftp hostname
Unix-Username
Unix-Paßwort
help
dir
dir unixdirectory
cd unixdirectory
cd ..
pwd
lcd
pcdirectory
binary
ascii
put pcfile unixfile
get unixfile pcfile
bye
Login auf Workstation oder X-Terminal oder
HCL eXceed am PC
echo $DISPLAY
setenv DISPLAY internetadresse:0.0
man xhost
xterm &
exitFenster-Steuerung, Cut-and-Paste etc.:
MS-Windows,
Motif, VUE, CDE ...
Fenster erst dann schließen, wenn Applikation fertig!
Logout-Symbol oder eXceed schließen
(nicht ausprobieren!)
Was würde bei den folgenden Befehlen passieren:
rm *.o
rm * .o
rm -i *.o
cp * newdir
cp *
echo cp *
(cd olddir; tar -cf - . ) | (cd newdir; tar -xvf - . )
# "xcopy" oder "disk
full"?
mkdir "lieber nicht"
echo *
kill -1 2345
kill 1 2345
rm -r /
Löschen Sie alle Files und Subdirectories, die Sie in diesem Kurs angelegt haben (aber nur diese!).
Beispiel:
cd
rm -ri zuname
Viel Spaß mit Unix!
Der cat-Befehl zum Zusammenfügen von Files hat nichts mit Katzen zu tun; der Name kommt vom englischen Wort concatenate = verketten. Es gibt in Unix aber tatsächlich einen Hund: Das Programm biff, das Benutzer auf ankommende Electronic Mail aufmerksam macht, heißt nach dem Hund Biff, der am Universitäts-Campus von Berkeley immer so laut bellte, wenn der Briefträger kam.
Sie sehen aus diesen Beispielen, daß die Bedeutung der meist sehr kurzen Unix-Namen nicht immer leicht zu erraten ist. Deshalb hier ein kleines "Vokabelheft" mit den wichtigsten Unix-Namen - als Eselsbrücke zum leichteren Merken:
alias
|
alias
|
Künstlername
|
| ar
|
archive
|
Archiv
|
| at
|
at
a time
|
zu
einer Zeit
|
| awk
|
Aho,
Weinberger, Kernighan
|
(Autoren)
|
| batch
|
batch
|
Stapel
|
| cal
|
calender
|
Kalender
|
| cancel
|
cancel
|
abbrechen
|
| cat
|
concatenate
|
verketten
|
| cc
|
C
compiler
|
C-Compiler
|
| cd
|
change
directory
|
Directory
wechseln
|
| chdir
|
change
directory
|
Directory
wechseln
|
| chgrp
|
change
group
|
Gruppe
wechseln
|
| chmod
|
change
mode
|
Art
wechseln
|
| chown
|
change
owner
|
Eigentümer
wechseln
|
| cmp
|
compare
|
vergleichen
|
| col
|
column
|
Spalte
|
| cp
|
copy
|
kopieren
|
| cpio
|
copy
in and out
|
hin
und her kopieren
|
| crontab
|
cronos
table
|
Zeit-Tabelle
|
| csh
|
C
shell
|
C-ähnliche
Shell
|
| cut
|
cut
|
ausschneiden
|
| date
|
date
|
Datum
|
| dbg
|
debug
|
Ungeziefer
entfernen
|
| dd
|
device
to device
|
von
Gerät zu Gerät
|
| df
|
disk
free
|
freie
Platte
|
| diff
|
difference
|
Unterschied
|
| du
|
disk
usage
|
Plattenverwendung
|
| echo
|
echo
|
Echo
|
| ed
|
editor
|
Editor
|
| egrep
|
extended
grep
|
erweitertes
grep
|
| elm
|
electronic
mail
|
elektronische
Post
|
| env
|
environment
|
Umgebung
|
| eval
|
evaluate
|
auswerten
|
| ex
|
editor
extended
|
erweiterter
Editor
|
| exec
|
execute
|
ausführen
|
| exit
|
exit
|
hinausgehen
|
| export
|
export
|
hinausgeben
|
| expr
|
expression
|
Ausdruck
|
| fc
|
Fortran
compiler
|
Fortran-Compiler
|
| fgrep
|
fixed
grep
|
festes
grep
|
| file
|
file
|
Datei
|
| find
|
find
|
finden
|
| fork
|
fork
|
Gabelung
|
| grep
|
global
/ regular expression / print
|
(Editor)
|
| head
|
head
|
Kopf
|
| history
|
history
|
Geschichte
|
| home
|
home
|
zu
Hause
|
| if
|
if
|
wenn
|
| kill
|
kill
|
töten
|
| ld
|
link
edit
|
binden,
herausgeben
|
| limit
|
limit
|
Grenze
|
| line
|
line
|
Zeile
|
| ln
|
link
|
Verbindung
|
| login
|
log
in
|
eintragen
|
| logout
|
log
out
|
austragen
|
| lp
|
line
printer
|
Zeilendrucker
|
| lpstat
|
lp
state
|
lp-Status
|
| ls
|
list
|
auflisten
|
| mailx
|
mail
extended
|
erweiterte
Post
|
| make
|
make
|
erzeugen
|
| man
|
manual
|
Handbuch
|
| mkdir
|
make
directory
|
Directory
erzeugen
|
| more
|
more
|
mehr
|
| mount
|
mount
|
montieren
|
| mv
|
move
|
bewegen
|
| newgrp
|
new
group
|
neue
Gruppe
|
| news
|
news
|
Neuigkeiten
|
| nice
|
nice
|
nett
zu den anderen
|
| nohup
|
no
hang up
|
kein
Aufhängen
|
| nroff
|
new
runoff
|
neues
runoff
|
| passwd
|
password
|
Losungswort
|
| path
|
path
|
Pfad
|
| pipe
|
pipeline
|
Rohrleitung
|
| pg
|
page
|
Seite
|
| pr
|
print
|
Druckbild
|
| ps
|
process
status
|
Vorgänge,
Zustand
|
| pwd
|
print
working directory
|
Arbeits-Dir.
drucken
|
| rcp
|
remote
copy
|
fernes
Kopieren
|
| read
|
read
|
lesen
|
| remsh
|
remote
shell
|
ferne
Shell
|
| rlogin
|
remote
login
|
fernes
Login
|
| rm
|
remove
|
entfernen
|
| rmdir
|
remove
directory
|
Directory
entfernen
|
| rsh
|
restricted
shell
|
beschränkte
Shell
|
| rsh
|
remote
shell
|
ferne
Shell
|
| sed
|
stream
editor
|
Strom-Editor
|
| set
|
set
|
setzen
|
| setenv
|
set
environment
|
Umgebung
setzen
|
| sh
|
shell
|
Muschel-Schale
|
| shift
|
shift
|
verschieben
|
| size
|
size
|
Größe
|
| sleep
|
sleep
|
schlafen
|
| sort
|
sort
|
sortieren
|
| source
|
source
|
Quelle
|
| spell
|
spelling
|
Rechtschreibung
|
| split
|
split
|
aufsplittern
|
| stty
|
set
teletype
|
Terminal
setzen
|
| su
|
set
user
|
Benutzer
setzen
|
| tail
|
tail
|
Schwanz
|
| tar
|
tape
archive
|
Archiv
auf Band
|
| tee
|
T
|
T-Verzweigung
|
| term
|
terminal
|
Endgerät
|
| test
|
test
|
ausprobieren
|
| time
|
time
|
Zeit
|
| touch
|
touch
|
berühren
|
| tr
|
translate
|
übersetzen
|
| trap
|
trap
|
Falle
|
| troff
|
typesetter
nroff
|
nroff
für Terminal
|
| tty
|
teletype
|
Terminal
|
| tz
|
time
zone
|
Zeitzone
|
| ulimit
|
user
limit
|
Benutzer
Grenze
|
| umask
|
user
mask
|
Benutzer
Maske
|
| uniq
|
unique
|
eindeutig
|
| vi
|
visual
|
sichtbar
|
| view
|
view
|
ansehen
|
| wait
|
wait
|
warten
|
| wall
|
write
to all
|
an
alle schreiben
|
| wc
|
word
count
|
Wörter
zählen
|
| who
|
who?
|
wer?
|
| write
|
write
|
schreiben
|
Bitte beachten Sie, daß diese Liste nur die sprachliche Herkunft der Namen angibt. Was diese Befehle wirklich tun und wie man sie verwendet, können Sie u.a. mit dem man-Befehl in Erfahrung bringen.
vi filename erstellen
chmod 700 filename
sh -vx filename parameter 2>&1 | more (sh)
sh -vx filename
parameter |& more (csh)
testen
filename parameter aufrufen
#!/usr/bin/sh magic number (1. Zeile)
# Kommentar
zumindest: Name
Zweck
Autor
Datum
(Version)
if [ $# -lt 2 -o $# -gt 3 ]
then echo "Usage: filename par1 par2
[par3]"
exit 1
fi
$1 1. Parameter
$9 9. Parameter
oder Leerstring
"$1" 1.
Parameter mit ""
$* alle Parameter
"$@" alle Parameter, jeder mit
""
$# Anzahl der Parameter
shift
name=${1-defaultwert}
name=wert
$name
${name}
${name-defaultwert}
export name
if command
then commands
fi
if command
then commands
else commands
fi
if command
then commands
elif command
then commands
else
commands
fi
if test expression
if [ expression ]
-d file
|
Directory
|
| -f
file
|
File
|
| -s
file
|
nicht
leeres File (size)
|
| -r
file
|
Read-Permission
|
| -w
file
|
Write-Permission
|
| -x
file
|
Execute-Permission
|
| -z
"string"
|
Leerstring
(zero)
|
| =
|
Strings
gleich
|
| !=
|
Strings
ungleich
|
| -eq
|
Zahlen
gleich (equal)
|
| -ne
|
Zahlen
ungleich
|
| -gt
|
größer
(greater than)
|
| -ge
|
größer
gleich
|
| -lt
|
kleiner
(less than)
|
| -le
|
kleiner
gleich
|
| !
|
nicht
|
| -a
|
und
(and)
|
| -o
|
oder
(or)
|
| \(
\)
|
Teil-Expressions
|
while command
do
commands
done
while read feld1 feld2 rest
do
commands mit $feld1 $feld2
done
< filename
i=1
n=10
while [ $i -le $n ]
do
commands mit $i
i='expr
$i + 1'
done
for name in wert1 wert2 wert3
do
commands mit $name
done
case wert in
muster1) commands ;;
muster2) commands ;;
*)
commands ;;
esac
exit 0
|
erfolgreich
beenden
|
| exit
1
|
mit
Fehler beenden
|
| exit
|
Exit-Status
des letzten Befehls
|
command <infile
command <<eofstring
... Eingabe-Zeilen ...
eofstring
command >outfile
command >>outfile
command >outfile
2>errfile
command >outfile 2>&1
echo "Fehlermeldung"
1>&2
command1 | command2 | command3
command1 | tee outfile | command2
*
|
0
bis n beliebige Zeichen
|
| ?
|
1
beliebiges Zeichen
|
| [abc]
|
1
Zeichen aus Menge
|
| [a-z]
|
1
Zeichen aus Menge (Bereich)
|
| ![abc]
|
1
Zeichen nicht aus Menge
|
\x
|
1
Zeichen
|
| 'text'
|
ganzer
Text
|
| "text"
|
Text
bis auf $ und '
|
| 'command'
|
Ergebnis
des Befehls
|
(date; who) >file
(cd sub; ls -l | more)
(cd old; tar -cf - .) | (cd new; tar -xvf - .)
crontab -l
crontab -l > file
crontab < file
Minute Stunde Tag Monat Wochentag Befehl
1 0 1 * * command
jeden Monatsersten um 0:01 Uhr
30 19 8 3 * command
am 8. März um 19:30 Uhr
1 0 1 1,4,7,10 * command
an jedem Quartalsbeginn
0 5 * * 1 command
jeden Montag um 5 Uhr
0 5 * * 0,6 command
jeden Sonntag und Samstag
0 5 * * 1-5 command
jeden Montag bis Freitag
Stream Editor
sed -e 'command' textfile
sed -f commandfile textfile
sed -e 'command'
inputfile >outputfile
Editor-Befehle wie bei ed und ex
^
|
Zeilenanfang
|
| $
|
Zeilenende
|
| .
|
1
beliebiges Zeichen
|
| [abc]
|
1
Zeichen aus Menge
|
| [a-z]
|
1
Zeichen aus Menge (Bereich)
|
| [^abc]
|
1
Zeichen nicht aus Menge
|
| *
|
0
bis n solche Zeichen
|
| .*
|
0
bis n beliebige Zeichen
|
Alfred V. Aho
Peter J. Weinberger
Brian W. Kernighan
awk 'command' textfile
awk -f commandfile textfile
awk 'command'
inputfile >outputfile
bedingung { aktion }
$1
|
1.
Feld der Zeile
|
| $99
|
99.
Feld der Zeile
|
| $0
|
Zeile
|
| "wert"
|
Text-String
|
| wert
|
Zahl
|
| NF
|
Feld-Nummer
|
| NR
|
Zeilen-Nummer
(Record)
|
| FS
|
Feld-Separator
|
| ==
|
gleich
|
| <
|
kleiner
|
| <=
|
kleiner
gleich
|
| >
|
größer
|
| >=
|
größer
gleich
|
| ~
|
enthält
Teilstring
|
| !
|
nicht
|
| &&
|
und
|
| ||
|
oder
|
| BEGIN
|
vor
der ersten Zeile
|
| END
|
nach
der letzten Zeile
|
| print
|
Ausgabe
|
man -k keyword
man commandname
man chapter commandname
man ...
| col -bx | lp -ddruckername
1
|
Befehle
für Benutzer
|
| 1M
|
Befehle
für Systemadmin.
|
| 2
|
C-System-Calls
|
| 3
|
C-Library-Funktionen
|
| 3F
|
Fortran-Library-Funktionen
|
| 4
|
File-Formate
|
| 5
|
verschiedenes
|
| 7
|
Special-Files
(Devices)
|
| 8
|
Befehle
für Systemadmin.
|
| bsd
|
BSD-Versionen
|
#! /usr/bin/sh
#
# ll = ls -l (like under HP-UX)
#
# by Hubert Partl (EDV-Zentrum Boku Wien)
# last change: 1993-01-07
ls -l $*
exit
#!/usr/bin/sh
#
# tel - lookup BOKU phone numbers
#
# by Partl, BOKU Wien
# last change: Partl 92-11-13
#
# Usage:
# tel pattern
# prints all lines of $FILE that match the search pattern (name, part
# of name, number, part of number, regular expression as understood
# by egrep).
# $FILE contains the phone list (lastname, initial, extension).
FILE=/usr/local/lib/telefon.liste
if [ $# != 1 ]
then echo "Usage: tel searchpattern" 1>&2
exit 1
fi
if egrep -i "$1" $FILE
then exit
else echo "Keinen Eintrag fuer '$1' gefunden."
exit 1
fi
#! /usr/bin/sh
#
# clean-tmp woechentliche Verkleinerung von /tmp
# (Loeschen aller Files aelter als 1 Woche)
#
# last change Partl 93-01-27
#
# Aufruf als User root, jeden Montag frueh mittels crontab.
for dir in /tmp /usr/tmp /opt/tmp /var/tmp
do
if [ -d $dir ]
then find $dir -type f -mtime +7 -exec rm {} \;
fi
done
exit
#! /usr/bin/sh
#
# vi-crontab Prozedur zum Veraendern der crontab mittels vi
#
# Autor: Hubert Partl, BOKU Wien
# letzte Aenderung: 1992-03-08
# Aufruf (unter dem jeweiligen Username):
# vi-crontab
# (vi-Befehle, beenden mit :wq oder mit :q! )
# verwendete Files:
FILE=$HOME/crontab.copy
# behaelt den neuen Zustand der crontab des Usernames
# alte crontab holen:
crontab -l >$FILE
# Aenderungen durchfuehren:
vi $FILE
# wird mit :wq oder :q! beendet
crontab <$FILE
exit
Was ist Unix 2
Entstehung 2
Eigenschaften 3
Online-Manuals 4
Warnung 4
Sicherheit unter Unix 5
File-Protection 5
Paßwörter 7
Netz-Software 8
Telnet 8
X-Window 8
FTP 9
WWW 9
E-Mail 9
Usenet News 9
Wie funktioniert X-Window 10
Unix für Anfänger - Overhead-Folien 12
Was ist das Besondere an Unix 12
Login und Logout 13
Befehls-Syntax und Online-Manuals 14
Files und Directories 16
Befehls-Ausführung 20
einige nützliche Befehle 22
vi Editor 26
Programmierung 27
Telnet, FTP, X-Window 29
Warnungen 30
Ein kleines Vokabelheft 31
Unix Shell-Programmierung 35
Bourne-Shell 35
crontab 39
sed 39
awk 40
man 40
Beispiele 41