Unix für Anfänger


Universität für Bodenkultur Wien
Zentraler Informatikdienst ZID

 

U N I X
FÜR ANFÄNGER

 

Kursunterlage
Dr. Hubert Partl
partl@mail.boku.ac.at
Juli 1997

Einführung

 

Was ist Unix?

Entstehung

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.

Eigenschaften

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

Online-Manuals

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.

Achtung, aufgepaßt!

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!

Sicherheit unter UNIX

File-Protection

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.

Paßwörter

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).

Netz-Software

BokuNet und Internet

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".

Telnet

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

X-Window (X11)

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.

FTP (File Transfer Protocol)

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.

WWW (World-Wide Web)

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.

Electronic Mail

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.

Usenet News

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.

Wie funktioniert X-Window

Session beginnen:

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

Fenster-Steuerung:

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).

Session beenden (Logout):

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.

Overhead-Folien des Kurses "Unix für Anfänger"

 

Was ist das Besondere an Unix?

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

Benutzer-Identifikation:

Beginnen (Anmelden, Login):

login: username
password: paßwort

Paßwort ändern:

passwd
oldpw
newpw
newpw

Aufhören (Abmelden, Logout):

exit
logout
<Ctrl d>

in unserem Kurs:

telnet hp06
kurs
kurs-pw
(Return-Taste bei Terminaltyp VT100)
cd zuname
...
exit

beim ersten Mal:
mkdir zuname

niemals:
passwd
lp
...

Übung Nr. 1:

Machen Sie Login, legen Sie das Directory mit Ihrem Zunamen an, gehen Sie in dieses Directory, und machen Sie wieder Logout.

Befehls-Syntax:

commandname -optionen fileliste

commandfile -optionen fileliste

Groß-Klein-Schreibung!

Online-Manuals:

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

Ein- und Ausgabe Umleitung:

command <input

command >output

command >>output

command >&output       C-Shell
command >output 2>errors Bourne-Shell
command >output 2>&1

Wasserleitungen (pipes):

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

T-Stücke:

command1 | tee file | command2

command | tee file | more

Filenamen:

14 (oder 255) Zeichen, Groß-Klein-Schreibung,
kein / und keine ä ö ü ß,
möglichst nicht mit - oder . beginnen,
möglichst kein $ * ? usw.

Pathnames:

subdir/subdir/file

relativ
/dir/subdir/subdir/file
absolut
.
aktuelles Directory
..
Parent-Directory
./-xxx
wenn Filename "-xxx"

Wildcard expressions (file globbing):

*

a*

*.f

?a*

*a?

[abc]*

[A-Z]*.f

.??*

--> Liste aller zutreffenden Filenamen

Files:

Files kopieren (copy):

cp oldfile newfile
cp file1 file2 file3 directory

Files zusammenfügen (concatenate):

cat file1 file2 file3 >newfile

Filenamen ändern (move):

mv oldfile newfile
mv file1 file2 file3 directory

Zusätzliche Filenamen (links):

ln oldfile newfile
ln file1 file2 file3 directory

ln -s oldfile newfile

File oder Filename löschen (remove):

rm file

rm -i file

File-Inhalt am Bildschirm anschauen:

cat file

more file
blank oder q

pg file
enter oder q oder ...

head -20 file

tail -20 file

view file
siehe vi-Editor

File-Inhalt ausdrucken:

lp file
lp -ddrucker file

lpstat
cancel xxxxxx-nnn

man commandname | col -bx | lp -dxxx
pr -f -l60 file | lp -dxxx

lpstat -t | more

Directories:

neues Directory anlegen (make directory):

mkdir directory

Directory wechseln (change directory):

cd directory
cd

aktuelles Directory (print working dir.):

pwd

Liste der Files in einem Directory (list):

ls
ls directory
ls files
ls -d *
ls -l
ls -la

Directorynamen ändern (move):

mv olddir newdir

leeres Directory löschen (remove directory):

rmdir directory

Übung Nr. 2:

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

File-Protection

Owner (User)
Group
other

read

4
4+2+1=7
write
2
4+2=6
execute
1
4+1=5
umask 027
chmod 750 file

ls -l file
-rwxr-x---

ls -ld directory
drwxr-x---

Beispiele:
umask
ls -l ~
ls -l /var/mail

Spezielle Directories (Sys V.3, HP-UX 9):

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

Spezielle Directories (Sys V.4, HP-UX 10):

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

Befehls-Durchführung und -Abbruch:

Such-Pfad für Befehle:

echo $path | more

Vordergrund-Befehle:

command
<Ctrl d>
<Ctrl c>

Hintergrund-Befehle:

command <input >output &
nohup command <input >&output &
ps -fu username
ps
kill -1 pid
kill -9 pid
nohup nice -19 command <input >&output &

Befehls-Gruppen (Sub-Shells):

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

Maskierung (Quoting) und Befehls-Ergebnisse:

Sonderzeichen: < > ; & ( ) | \ $ * ? [ ] { } ! und andere

\x

1 Zeichen original
'text'
ganzer Text original
"text"
Text original bis auf $ und '
'command'
Ergebnis des Befehls
Beispiele:

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.

Einige weitere nützliche Befehle:

Datum und Uhrzeit:

date

Zeitmessung (CPU-Zeit und "echte" Zeit)

time command
time

Kalender:

cal
cal 1997 | more
cal 10 1492

aktive Login-Sessions:

who
who -R

wer und wo bin ich?

who am i
logname
hostname

aktive Prozesse:

ps -ef | more
ps -fu username
ps

Wörter, Zeilen und Bytes zählen:

wc file
wc -wl file
wc *

nicht:     cat file | wc -l
sondern:   wc -l < file

echo $file ist 'wc -l < $file' Zeilen lang.

Filetyp untersuchen:

file file
file *

Sortieren:

sort file

ls -l | sort -r -n +4 | more

Unterschiede zwischen zwei Files (difference):

diff file1 file2

Beispiel:
cd
cat pi.f
cat bad.f
diff pi.f bad.f

Textsuche (global regular expression print):

fgrep 'text' file

grep 'muster' file

^

Zeilenanfang
$
Zeilenende
.
1 beliebiges Zeichen
.*
0 bis n beliebige Zeichen
egrep 'muster' file

[a-z]

1 Zeichen aus dieser Menge
[^a-z]
1 Zeichen nicht aus dieser Menge
-i     Groß-/Kleinschreibung egal
-v       logisches "not"
-l       nur Filename, nicht Zeilen (Binärfiles)
-c       nur Anzahl, nicht Zeilen (count)

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'

Files durch alle Subdirectories suchen:

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 {} \;

Textsuche in allen Files (Textfiles):

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

Plattenbelegung:

Plattenbelegung (disk usage, disk free):

du directory
du -a ~
du -s *

bdf
bdf .

File-Komprimierung:

compress file
--> file.Z
uncompress file

zcat file.Z | command

gzip file
--> file.gz
gunzip file

gzcat file.gz | command

Backup-Files

Backup-Files (Tape-Archive):

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

Directory kopieren (gefährlicher Trick):

(cd olddir; tar -cf - . ) | (cd newdir; tar -xvf - . )

vi Editor:

Aufruf:

vi filename
view filename

am Bildschirm positionieren:

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

Text schreiben und verändern:

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

Abschließen:

:w oder :w!

Ergebnis speichern
:q oder :q!
vi verlassen (ohne Speichern)
:wq oder ZZ
speichern und vi verlassen

Tutorial:

vitutor

Übung Nr. 3:

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

Programmierung:

FORTRAN-Programme:

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

C-Programme:

cc name.c
a.out

Tools:

adb

Debugging (absolute debugger)
ar
Libraries anlegen (archive)
make
automatische Updates

Übung Nr. 4:

Führen Sie das Fortran-Programm von Übung Nr. 3 aus (Korrekturen mit vi).

C-Shell (/usr/bin/csh):

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!

Bourne-Shell, Posix-Shell (/usr/bin/sh):

besonders für Shell-Prozeduren geeignet

.profile

variable=wert
$variable
set

export variable
env

Shell-Prozeduren:

#! /usr/bin/sh

erste Zeile
#
Kommentar
$n
Parameter
if ... then ... else ... fi

while ... do ... done

for name in liste do ... done

Korn-Shell (/usr/bin/ksh) :

komaptibel zur Bourne-Shell
mit Erweiterungen

Zugriff auf Unix-Rechner über das Internet

Telnet

telnet hostname
Unix-Username
Unix-Paßwort
setenv TERM vt100
... Unix-Befehle ...
exit

FTP (File Transfer Protocol)

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

Das X Window System (X11)

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

Achtung vor ungewollten fatalen Nebenwirkungen!

(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 /

letzte Übung:

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!

Ein kleines Vokabelheft

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.

Unix Shell-Programmierung (Bourne-Shell)

 

Shell-Scripts

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

Parameter

$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}

Variable

name=wert

$name
${name}
${name-defaultwert}

export name

if

if   command
then   commands
fi

if   command
then   commands
else   commands
fi

if   command
then   commands
elif   command
then   commands
else commands
fi

test

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

while   command
do
  commands
done

read

while read feld1 feld2 rest
do
  commands mit $feld1 $feld2
done < filename

expr

i=1
n=10
while [ $i -le $n ]
do
  commands mit $i
  i='expr $i + 1'
done

for

for name in wert1 wert2 wert3
do
  commands mit $name
done

case

case wert in
muster1)   commands ;;
muster2)   commands ;;
*) commands ;;
esac

exit

exit 0

erfolgreich beenden
exit 1
mit Fehler beenden
exit
Exit-Status des letzten Befehls

I-O-Redirection und Pipes

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

File-Globbing

*

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

Maskierung (Quoting):

\x

1 Zeichen
'text'
ganzer Text
"text"
Text bis auf $ und '
'command'
Ergebnis des Befehls

Sub-Shells

(date; who) >file

(cd sub; ls -l | more)

(cd old; tar -cf - .) | (cd new; tar -xvf - .)

crontab

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

sed

Stream Editor

sed -e 'command' textfile
sed -f commandfile textfile
sed -e 'command' inputfile >outputfile

Editor-Befehle wie bei ed und ex

Regular expressions

^

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

awk

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

Online-Manuals

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

Beispiele für einfache Shell-Scripts

ll

 

#! /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

 

tel

 

#!/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

 

clean-tmp

 

#! /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

 

vi-crontab

 

#! /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

 

Inhaltsverzeichnis

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

 

 

 

 


BOKU Wien - ZID - Handbücher - Copyright
Hubert Partl