Programmierung I Einführung in Unix/Linux

Transcription

Programmierung I Einführung in Unix/Linux
Was ist UNIX?
Ein Betriebssystem
Programmierung I
Einführung in Unix/Linux
Eine Sammlung von nützlichen Tools
Eine (Computer-)Kultur
Wintersemester 2003/2004
University Bonn
Dr. Gabriel Zachmann
Wer braucht UNIX?
Vorteile von UNIX
"Unix ist zwar ein Mainframe-Betriebssystem (und damit obsolet)
hat aber noch viele Anhänger."
Extrem ausgereift (besonders die kommerziellen Unices)
Windows MSCE-Training-Guide Windows 2000 Server
Kapitel 2.6.3 "Zusammenspiel mit UNIX"
Verlag Markt & Technik
Relativ sicher
Von Anfang an Multi-User- und Multi-Task-fähig
Flexibler
Programmierer
Performanter
Web-Server
Distributed Computing
Wesentlich leichter zu administrieren (wenn die
Lernkurve erst einmal durchschritten ist)
Wer braucht UNIX nicht (unbedingt) ?
Auf allen Plattformen verfügbar
Sekretärinnen
Büro- und Business-Software (Word, Buchhaltung, Powerpoint,
Lagerhaltung, …)
Plattformen
Die Erfinder
Sun (SunOS)
Ca. 1970:
HP (HP-UX)
SGI (IRIX)
IBM (AIX)
Mac (OS-X)
PC (Linux)
PDA
Set-top boxes
Armbanduhr
Auto
…
http://www.linuxdevices.com/
Ken Thompson and Dennis Ritchie
Your new heroes
1
UNIX Komponenten
UNIX-Konzepte
Kernel: Herz des OS,
managet Hardware
Shell: eine Applikation,
nimmt Kommandos
entgegen und führt sie
aus (CLI)
Einige wenige Grundkonzepte:
Alles ist ein File (Programm, Daten, Speicher, …)
Alles ist ein Prozeß (OS, laufendes Programm, Editor, Shell, …)
Viele kleine Utilities, die kombiniert werden können
Utilities
Kernel
…
Shell
Utilities: viele kleine (und
große) Tools zur täglichen
Arbeit, z.B. Files kopieren,
ASCII-Texte editieren, …
Processes (time sharing, protected address space)
Interprocess comm.
(signals, pipes sockets, …)
Kernel
Virtual memory
(swapping, paging, mapping)
The filesystem (files, directories, devices, pipes, namespace, …)
Das Filesystem
Directories ("Folders") und Files
Files/directories werden in einem
Baum organisiert
File = sequentielle Folge von Zeichen
Interpretation ist Sache des benutzenden Programms:
Text, Zahlen, Programm, Speicherauszug, …
"root directory"
/
Jeder File hat einen Namen:
Case-sensitive! (UNIX allg.)
bin
dev
commands
devices
Lang (typ. bis zu 1024)
Können beliebige Zeichen enthalten –
besser nur alphanumerische Zeichen und Underscore!
usr
etc
home
boot and
config files
homes of
users
Directory ("Verzeichnis"):
Spezieller File
Enthält Name von File und Verweis darauf
bin
man
more
commands
man pages
local
bob
alice
etc
home
zach
Verschlungene Pfade
Eindeutigkeit:
Beispiele:
/
Files im selben Verzeichnis müssen verschiedene Namen haben
Files in verschiedenen Directories dürfen gleiche Namen haben!
Definition "Pfadname" (pathname) eines Files:
Konkatenierung aller Verzeichnisnamen und des
Filenamens auf dem Weg von der Wurzel bis zum File,
getrennt durch /
Eindeutigkeit von Pfadnamen garantiert
bin
dev
/bin/ls
ls
bin
cp
man
usr
/bin/cp
local
bob
bin
/home/zach/lehre/Programmierung
VR
alice
zach
lehre
Programmierung
2
Absolute Pfadnamen: starten mit /
Spezielle Verzeichnisse:
. Bezeichnet das aktuelle Verzeichnis
Relative Pfadnamen:
Bsp.: /bin/ls = /bin/./ls = /bin/././ls …
starten von einem anderen Dir aus
Sind also relativ zu diesem Dir
.. Bezeichnet das Vater-Verzeichnis (parent diretory)
/
Beispiele: der absolute Pfad
/home/zach/lehre/Programmierung von …
usr
etc
Bsp.: /usr/bin/w = /home/../usr/bin/w =
/usr/man/../bin/w …
home
Wird besonders wichtig im Zusammenhang mit dem CWD (current
working directory)
home aus = zach/lehre/Programmierung
bob
zach aus = lehre/Programmierung
alice
bin
zach
lehre
lehre aus = Programmierung
VR
Programmierung
Symbolische Links
Andere Platten
Der Verzeichnisbaum enthält (i.A.) mehrere Platten!
Problem: File "gehört" genau einem Verzeichnis
Einige davon sind auf anderen Rechnern (NFS)
Beispiel: File /home/zach/pics/cobain.jpg
soll auch im Dir. /home/zach/music/Nirvana
sichtbar sein …
Lösung: symbolic links (symlinks)
/
Bsp.: music/Nirvana/cobain.jpg
ist ein Symlink nach
../../pics/cobain.jpg
zach
pics
cobain.jpg
Gibt auch Hard Links,
braucht man aber nie
bin
music
Nirvana
etc
home
student
tmp
usr
zach
cobain.jpg
Home Sweet Home
Jeder User hat ein Home
Z.B. /home/stud/zach
File Permissions
File gehört genau 1 User
File ist assoziiert zu genau 1 Group
Enthält normalerweise alle Daten des Users
Alle Konfigurationsfiles aller Programme ("Dot-Files", z.B.
.login) (riesiger Vorteil gegenüber Registry!)
Beim Einloggen "startet man im Home"
/home/rob% ls –l file
-rw-r----- 1 rob student
343 Dec
5 13:51 file
Normalerweise auf einem Fileserver
Ist auf jeder Maschine gleich zugreifbar
Filetyp
Owner Group
World
Owner Group
3 Personengruppen: Owner, Group, World (Other)
Für jede 3 File-Permissions: read, write, execute
3
Weitere File-Attribute
Filetyp-Flag:
Zeiten:
Kein Permissionflag
Modification (write):
ls -l
Zeigt Filetyp an:
Creation:
ls -lc
Access (read):
ls -lu
- = normaler File
d = Directory
l = Symlink
/home/rob% ls –l file
-rw-r----- 1 rob student
Bedeutung der Permissions
343 Dec
5 13:51 file
Read & write: klar
Executable: Programm
Andere, sehr praktische Flags (set-GID, set-UID, sticky, …)
mod time
Größe, Links, …
Prozesse
Spawning processes
Programm, das gerade läuft, schläft, oder hängt
Ein Prozeß wurde immer von einem anderen erzeugt
Jeder Prozeß führt ein Environment mit sich:
Heißt Vater-Prozeß (parent process)
Prozeß-ID (PID), User-ID (UID), Group-ID (GID), u.a. IDs
Vorgang heißt engl. to spawn
current working directory (CWD, manchmal auch PWD)
Child process erbt das komplette Environment (außer
Environment-Variablen (Paare von Strings)
seinen IDs u.ä.)
…
Relative Pfade werden bzgl. des CWD's des Prozesses
interpretiert
Erstes Einloggen
Das User-Interface
Wie bekommt man eine Shell?
Ist immer noch die Kommandozeile
(CLI = command line interface)
An der "Konsole" ("console")
Remote (ssh, rlogin, telnet)
Login/passwd sind
case-sensitive!
Wieviele Shells
kann man haben?
Beliebig viele …
TerminalFenster
Gibt inzwischen zwar auch Windows-Look-Alikes
Für Programmierer ist CLI sehr viel effizienter!
Lernkurve ist natürlich länger ("steiler")
/home/rob%
Möglichkeiten
Das Prompt
Prompt
von der Shell
Zeit
4
Aufbau einer Kommandozeile
Optionen
Kommando
Editieren der Kommandozeile
Parameter
/home/rob% ls –l data
-rw------- 1 rob student
343 Dec
In der Zeile:
5 13:51 data
Optionen (options, flags): ändern Verhalten
Taste
Tab
Ctrl-B
Ctrl-W
Ctrl-A
Ctrl-U
Ctrl-A
Ctrl-A
Komando
!!
!string
!17
^a^b
/ Ctrl-F
/
/
/
/
Ctrl-E
Ctrl-K
Ctrl-E
Ctrl-E
In der History:
Taste
Cursor-Up / -Down
Ctrl-P / Ctrl-N
Parameter: i.a. Files, auf denen Kommando operiert
Kommandowiederholung
Funktion
File- / Command-Completion
Wortweise vor / zurück springen
Voriges Wort löschen
An Ende / Anfang springen
Zeile bis zum Anfang / Ende löschen
An Ende / Anfang springen
An Ende / Anfang springen
Funktion
In der History rauf / runter
Match in der History nach
oben / unten suchen
Prozeßkontrolle
Bedeutung
Letztes Kommando wiederholen
Kommando, das mit 'string' beginnt, wiederholen
Kommando mit Nummer 17 i.d. History wiederholen
Letztes Kommando wiederholen, dabei das erste
Vorkommen von 'a' durch 'b' ersetzen
Komando
Ctrl-C
Ctrl-Z
fg
bg
Ctrl-S / Ctrl-Q
History anzeigen: history (alias h)
Shells: Was passiert mit einem Kommando?
Bedeutung
Kommando / Programm abbrechen
Kommandoanhalten
Kommando weiterlaufen lassen
Gestopptes Kommando/Programm im Hintergrund
weiterlaufen lassen
Ausgabe des Programms
anhalten / weiterlaufen lassen
Aliases
Shell durchläuft folgenden Zyklus:
Ersatz für häufige / längliche Kommandos
1. Kommando wird aus der Eingabezeile oder einem Script gelesen
Beispiel:
2. Aliases werden expandiert
3. Variable Substitutions werden vorgenommen
4. Wildcards werden expandiert
5. Das Kommando wird ausgeführt:
%
%
%
%
alias mo less
alias uni "ssh –l zach –X zeus.uni-bonn.de
mo program.cpp
uni
Entweder von der Shell selbst (built-in commands)
Oder in einem neuen Prozeß
Im folgenden Annahme tcsh (csh)
alias zeigt alle Aliases an
Alias 'uni' wird ersetzt …
Alias 'mo' wird ersetzt …
Definiert Alias 'uni'
Definiert Alias 'mo'
5
Variablen
Variable = Name + Wert, Wert = Zeichenkette
2 Arten:
Normale Shell-Variablen
Anhängen:
% setenv PATH ${PATH}:${HOME}/bin
% setenv PATH ${HOME}/bin:${PATH}
Environment-Variablen,
sind auch in Kind-Prozessen (child process) bekannt
Setzen:
% setenv TMP "/tmp"
% set tmpdir = "/home/stud/zach/tmp"
Ersetzen:
% cp file ${tmpdir}
% echo ${TMP}
Wichtige Environment- Variablen
Variable
DISPLAY
HOME
PRINTER
TMP
PATH
MANPATH
PWD
Bedeutung
Display, auf dem neue Fenster geöffnet werden
(Bsp.: aurikel:0.0)
Home-Verzeichnis
Default-Drucker
Verzeichnis für temporäre Files
Suchpfad für Kommandos
Suchpfad für Man-Pages
Aktuelles Verzeichnis, in dem man sich gerade
befindet (CWD)
File Patterns
File-Name mit Wildcards: *
Wildcard
?
*
{0,1,2}
[0-9]
[a-zA-Z0-9]
[^0-9]
?
[]
Bedeutung
Genau ein beliebiges Zeichen
Beliebig viele beliebige Zeichen (auch 0)
Genau ein Zeichen aus der Menge {0,1,2}
Genau ein Zeichen aus der Menge {0,…,9}
Genau ein Zeichen aus der Menge {a,…,z,A,…,Z,0,…,9}
Genau ein Zeichen nicht aus der Menge {0,…,9}
Beispiele:
printenv druckt alle Environment-Variablen aus
% ls *.cpp *.h
echo $VAR druckt Wert dieser Environment-Variablen
% ls [0-9][0-9]*.ppt
% ls *[^a-zA-Z0-9_.,-]*
Quotation
Kommando ausführen
Achtung: das Kommando sieht die Wildcards nie!
Shell expandiert dieses
Built-in: Shell führt Kommando selbst aus
Beispiel: echo
Quotation verhindert, daß Wildcards (allg. Meta-Zeichen)
von der Shell expandiert werden
Sonst: externes Programm
Arten:
command in PATH (Environment-Variable) suchen
\ verhindert Expansion des folgenden Zeichens
% echo \*.ppt \$PATH
"…" verhindert Expansion der Wildcards, erlaubt Variablen
% echo "*.ppt $PATH"
'…' verhindert jegliche Expansion (Wildcards, Variablen, …)
% echo '*.ppt $PATH'
Beispiel: ls arg1 arg2 …
Falls nicht gefunden, Fehlermeldung
Kind-Prozeß erzeugen
Erinnerung: erbt Environment des Vater-Prozesses (Shell)
Argumente (Zeichenketten) im Environment bereitstellen
Argumente werden durch Space (i.a.) getrennt
Warten bis Kind-Prozeß beendet
6
Standard-I/O
Suchpfade
Environment-Variable mit :-getrennten Verzeichnissen
Shell etabliert 3 Kanäle zu / vom Prozeß:
Beispiel:
% echo $PATH
.:/usr/bin:/bin:/usr/local/bin:/home/II/zach
Standard Input
(stdin)
Standard Output
(stdout)
Program
Program
Kommandos werden in PATH gesucht
File mit Namen des Kommandos im ersten Verzeichnis und
executable? → ausführen
Standard Error
(stderr)
Sonst: nächstes Verzeichnis in PATH untersuchen …
Analog für Man-Pages und andere
Redirection
Default-mäßig mit Terminal (Fenster & Keyboard)
verbunden
Pipelines
Verbindet Standard-I/O mit Files
Prozeß (Programm) bemerkt davon nichts!
Redirection
Bedeutung
> file
>> file
>& file
< file
…
stdout wird nach file geschrieben
stdout wird an file angehängt
stdout und stderr umlenken
Programm liest aus file, nicht von Keyboard
Shell bietet noch viele weitere Möglichkeiten
Beispiel:
Selber Mechanismus, um Prozesse miteinander zu
verbinden:
stdout
Utility or
User Program
pipe
stdin
Utility or
User Program
Syntax: command | command | command | …
Beispiele:
% ls –l > dir-listing
Shell Scripts
% ls -1 *.cpp | wc –l
% ls -1 *.cpp | sort > sorted-dir
Initialisierungs-Files
Alles, was man interaktiv schreiben kann, kann man auch
in einen ASCII-File schreiben:
Erste Zeile:
#!/bin/tcsh -f
Executable-Bit in den Permissions setzen:
chmod u+x script
Ausführen mit ./script, oder in ein Verzeichnis im PATH
moven.
Shell enthält komplette Programmiersprache!
Für tcsh: ~/.tcshrc (und ~/.cshrc)
Inhalt: beliebige Kommandos (shell-built-in & extern)
Ausgeführt von jeder Shell des Users
Typischerweise:
Environment-Variablen setzen (PATH, MANPATH, …)
Aliases definieren
Completion-Regeln (für Tab an verschiedenen Positionen)
Achtung: neue Shell aufmachen, falls Änderung
Empfehlung: Dot-Files von der Vorlesungs-Home-Page
installieren
7
Deutsches UNIX
Wichtige Utilities und Programme
Große Unsitte
Moving Around
Wegen Terminologie
File-Manipulation
setenv LANG=en
Filter (oft in Pipelines oder mit Redirection)
Tools
Prozeß-Manipulation
Suchen (find & grep)
Dokumentation anzeigen
Moving Around
File- und Verzeichnis-Manipulation
Utility
Funktion
Kommando
cd dir
cd cd
pwd
Ins Verzeichnis dir wechseln
Ins vorige Verzeichnis zurück wechseln
Ins Home wechseln
Aktuelles Verzeichnis anzeigen
rm
ls
ls
ls
cp
cp
ln
Funktion
File löschen
Verzeichnis / File anzeigen
Mehr Infos zum Verzeichnis / File anzeigen
Dot-Files (.*) anzeigen
Files kopieren
Kopie von File1 erzeugen und File2 nennen
Symbolischen Link von File2 nach File1 erzeugen
(Eselsbrücke: ln –s statt cp)
mv file1 … dir
Files verschieben
mv file1 file2
File umbenennen
cat file1 file2 … > file Files aneinanderhängen (konkatenieren)
chmod new-perm file
Permissions von File ändern
file
[dir]
–l [dir]
–a [dir]
file1 … dir
file1 file2
–s file1 file2
Neues Verzeichnis erzeugen
Verzeichnis löschen (muß leer sein)
mkdir dir
rmdir dir
Achtung: ES GIBT KEIN RECYCLE-BIN!!! …
Task: Shoot Yourself in The Foot
The proliferation of modern programming languages (all of which seem
to have stolen countless features from one another) sometimes makes
it difficult to remember what language you're currently using. This
handy reference is offered as a public service to help programmers who
find themselves in such a dilemma.
% ls foot.c foot.h foot.o toe.c toe.o
% rm * .o
rm: .o no such file or directory
% ls
%
Permissions modifizieren
Syntax von chmod ("change mode"):
chmod <level><op><perm> filename
level = String aus: u, g, o, a (user, group, other, all)
op = ein Zeichen aus +, -, = (gets, loses, equals)
perm = String aus: r, w, x, … (read, write, execute, …)
Beispiele:
% chmod u+rwx,go-w foobar
% chmod g=u temp/
% chmod u=rwx,g=rwx,o= shared/
8
Tools
Bedeutung der Permissions
Permission File
Directory
r (read)
Read a file
List files in …
w (write)
Write a file
Create / move / remove
a file in …
x (execute)
Execute a file
Access a file in …
(Shell-Script or Binary)
Utility
Funktion
more
less
head / tail
cat file
echo string(s)
diff file1 file2
File anzeigen (more ist ein sog. Pager)
Noch besser als more
Anfang / Ende des Files ausgeben
File ausgeben (keine Funktionalität)
String(s) auf stdout (typ. Terminalfenster) ausgeben
Unterschiede zwischen 2 Files anzeigen
du –sk dirs …
df –h dir
df -hl
quota -v
Speicherbedarf der Verzeichnisse in kB anzeigen
Größe und freien Platz auf einer Platte anzeigen
Größe und freien Platz aller lokalen Platten anzeigen
Freie Quota anzeigen
lpr [–Pdrucker] file.ps
Postscript-File ausdrucken
lpq [–Pdrucker]
Printer-Queue anzeigen
a2ps [–Pdrucker] file
ASCII-File (z.B. Listing) ausdrucken
Remote auf einem anderen Rechner einloggen
ssh machine
Prozesse aus Sicht der Shell
Utility
Funktion
id
who / w
Eigene IDs ausgeben
Wer ist eingeloggt?
date
cal
Datum anzeigen
Jahreskalender anzeigen
locate file
where command
Ort von File anzeigen (auch Teilstrings)
Ort(e) von Command anzeigen
tar czf archive.tgz dirs … Komplettes Verzeichnis (inkl. Unterverzeichnisse)
zusammenpacken und komprimieren
tar xzf archive.tgz
Archiv wieder auspacken
gzip/gunzip
File komprimieren / dekomprimieren
mount /mnt/floppy
Floppy mounten / unmounten
Prozeßkontrolle
Befehl
Funktion
ps
ps -edfjw
kill pid
kill -9 pid
command … &
nohup
jobs
Ctrl-C
Ctrl-Z
fg
bg
Ctrl-S
Ctrl-Q
top
Prozesse anzeigen
Alle Prozesse anzeigen
Prozeß mit PID pid abbrechen (wie Ctrl-C)
… wenn der Prozeß trotzdem nicht aufhören will ☺
Prozeß im Hintergrund starten
…
Prozesse im Hintergrund anzeigen
Foreground-Prozeß abbrechen (interrupt)
Foreground-Prozeß anhalten (stoppen)
Zuletzt angehaltenen Prozeß im Foreground weiterlaufen lassen
Angehaltenen Prozeß im Background weiterlaufen lassen
Ausgabe des Foreground-Prozesses anhalten (Pr. läuft weiter!)
Ausgabe weiterlaufen lassen
tabellarische Ansicht aller Prozesse und deren CPU-Verbrauch
3 Zustände eines Prozesses (aus Sicht der Shell)
1. Foreground: Default
Ausgabe (stdout) des Prozesses erscheint im Terminal-Fenster
Eingabe (stdin) des Prozesses kommt vom Keyboard
2. Background:
Ausgabe erscheint im Fenster
Eingabe nicht erlaubt
3. Gestoppt:
Prozeß schläft
Filter
Lesen von stdin, schreiben auf stdout
Arbeiten oft zeilenweise
Utility
Funktion
cut
fmt
sort
uniq
wc
tr
grep
rev
Felder oder Zeichenspalten ausschneiden
Auf 72 Zeichen umformatieren
Zeilenweise sortieren (auch nach Teil-Key)
Duplikate entfernen
Zeichen, Wörter, und Zeilen zählen
Zeichen ersetzen
Zeichenketten in der Eingabe suchen (s.u.)
Reihenfolge der Zeichen umkehren (zeilenweise)
9
Unix-Philosophie
Editoren
"Small is beautiful"
Programmierer schreiben ASCII, insbesondere Software
Make each tool do one thing only
Heiliger Krieg, welches der beste ist
Make it do it well
Ein Programmier-Editor sollte …
Read from stdin, write to stdout (if sensible)
Use ASCII-Files
Effizientes UI haben (nicht intuitiv!)
Wenige Tasten / Mauskilometer für die häufigen Aktionen
Syntax Highlighting
Makros
Reguläre Ausdrücke zum Suchen und Ersetzen
Multi-Plattform sein
Suchen & Finden
Einige Editoren zur Auswahl:
Vim / gvim (Obermenge von vi, welcher immer installiert ist)
Die Homepage von vim: www.vim.org
Emacs/xemacs (extrem umfangreich)
"Emacs wäre gar kein so schlechtes Betriebssystem,
wenn es nur einen brauchbaren Editor hätte" ☺
Nedit (kein non-GUI-Mode)
Pico, joe, …
Suchen Sie sich einen hinreichend mächtigen Editor aus,
und lernen Sie diesen gut und möglichst vollständig
beherrschen!
Reference-Cards für VIM und Emacs auf der Homepage
der Vorlesung
Find
find: findet Files aus einem Verzeichnisbaum
Kriterien:
Name
Datum
Größe
…
Aktionen:
Filename ausgeben
Löschen
…
grep: findet Zeilen in einem File, in denen bestimmte
Zeichenketten vorkommen
Beispiele
Syntax:
Den File foo im Home finden:
find dirs … criteria actions
Kriterien:
-name file-pattern
-type file-type
-size file-size
-date …
Aktionen:
-print
-exec command {} \;
-ls
…
% find $HOME –name foo
Wenn man den Namen nicht mehr genau kennt:
% find $HOME –iname '*foo*'
Alle JPEG's finden und File-Namen in File schreiben:
% find $HOME –name '*.jpg' > image-list
Alle JPEG's größer als 100kB finden:
% find $HOME –name '*.jpg' –size +100k
Alle core's löschen:
% find . –name core –print –exec rm {} \;
10
Grep
Reguläre Ausdrücke
Besteht aus normalen Zeichen und Meta-Zeichen:
Syntax:
Meta-Zeichen: . ? [ ] * + $ ^ \ ( )
grep 'reg-exp' files …
Normale Zeichen: alle übrigen
Varianten: fgrep, egrep
reg-exp = regular expression (eine Art Pattern-Matching)
Default: Zeilen ausgeben, die matchen
Einige Optionen:
-v
Invertierung: Zeilen ausgeben, die nicht matchen
-i
case-insensitive
-n
Zeilennummern ausgeben
-H
Filenamen zu den Matches ausgeben
-e RE weitere reg-exp's (Oder-Verknüpfung)
Regulärer Ausdruck = Zeichenkette aus normalen Zeichen
und Meta-Zeichen
Matching:
Vergleicht gegebene Zeichenkette und RE von links nach rechts
Arbeitet Zeichen ab, falls sie, gemäß Regeln, "übereinstimmen"
Arbeitet "greedy"
Extended RE's
Beispiele
grep 'abc' file:
Zeichen
a
. (Punkt)
[abc-f]
[^abc]
^$
a?
a+
a*
(RE)
RE1|RE2
\
...
Bedeutung / Match
matcht das Zeichen selbst
matcht ein beliebiges Zeichen
matcht ein Zeichen aus {a,b,c,d,e,f}
matcht ein Zeichen nicht aus {a,b,c}
stehen für den Anfang/Ende der Zeile
a ist optional ("schluckt" a, falls vorhanden)
a muß einmal oder öfter vorkommen
a darf belieb oft, auch keinmal, vorkommen
Gruppierung
matcht a oder b
hebt Bedeutung des nachfolgenden MetaZeichens auf
More input? (info)
alle Zeilen, die "abc" enthalten
grep 'a.c' file:
alle Zeilen, die "axc" enthalten, wobei x beliebiges Zeichen ist
grep –e 'a[x-z]b' –e 'c[u-w]d' file:
"axb" oder "cud" oder "ayb" …
grep 'a\[[^]]*\]=' file:
alle Vorkommen der Form "a[…]=", wobei … eine beliebig lange
Zeichenkette ist, die kein ] enthält
grep 'a\[[^]]*\] *=' file:
wie vorher, mit beliebig vielen Spaces zwischen "]="
Format of each man page
4 Arten von Informationsquellen:
Name
1. Man Pages
Syntax
2. Info pages
Description
3. HTML-Seiten
4. Sonstige …
Man Pages:
Name und 1-zeilige Beschreibung
Ausführliche Beschreibung
Options
Files
Liste von Files wichtig für diesen Befehl
'man cmd' – Man-Page zu cmd anzeigen
(Programm oder Funktion)
Return values
Diagnostics
Mögliche Fehlermeldungen und Ursachen
man –k keyword – Alle Man-Pages nach keyword
durchsuchen (nur die 1-zeiligen "Köpfe" jeder Seiten)
Bugs
Bekannte Bugs und Unzulänglichkeiten
See also
Verwandte Befehle und Infos
man –K keyword – Alle Man-Pages nach keyword
durchsuchen (komplette Seite)
Start-Menü → Help
11
Info & HTML
Info-Seiten:
Minimalwissen
Folgende Befehle sollten Sie gut beherrschen:
'info cmd' – Sog. Info-Seite in einem einfachen Viewer anzeigen
ls, cd, mkdir, rmdir, cp, mv, rm, ln, chmod,
Hierarchisch (angelehnt an HTML)
less, cat, sort, wc
Steuerung:
grep, find
Return auf Stern – In Unterseite springen
u – zur übergeordneten Seite zurück
/string – suchen
ps, jobs
Später: make, g++, gdb
Lesen Sie deren Man-Pages (immer wieder)
HTML-Seiten:
Hauptproblem: finden
Normalerweise in /usr/share/docs
Hilfsmittel: locate
Grundregeln unter UNIX
Don't Panic!
RTFM! ("read the f*ing manual")
Probieren geht über studieren …
12