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