Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule

Werbung
Linux
Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm
Hochschule Harz
FB Automatisierung und Informatik
[email protected]
http://www.miwilhelm.de
Raum 2.202
Tel. 03943 / 659 338
FB Automatisierung und Informatik: Linux
Inhalt
1. Einführung, Literatur, Begriffe
2. Installation
3. Konsolen-Befehle, Shell, Manual
4. Komplexe Befehle (grep, find, tar, sed, cron, netcat)
5. C-Programmierung (C, IO, Thread, make)
6. Python (Sprache)
7. Python (GUI)
FB Automatisierung und Informatik: Linux
2
Bewegen im Dateibaum
Verzeichnis:
Anmeldeverzeichnis
Homeverzeichnis
Pfadnamen:
• absoluter Pfad
• relativer Pfad
• Aktuelles Verzeichnis
• Oberes Verzeichnis
Beginnend mit /user
Beginnend mit ./image
./
../
Befehle:
cd
change directory
cd ~ change to home
pwd print working directory
FB Automatisierung und Informatik: Linux
3
Verzeichnisbaum
/
bin boot
dev
etc
home
lib
mnt
proc root
usr
var
user2
user3
home
etc
init.d
sbin tmp
sysconfig
user1
httpd
user2
usr
bin
local
include
lib
sbin
src
linux
bin
sbin
FB Automatisierung und Informatik: Linux
tmp
man
lpd
spool
mail
uucp
4
Verzeichnisse:
/
•
Das Wurzelverzeichnis steht ganz oben in der Hierarchie.
•
Wichtige Programme für Anwender, die immer verfügbar sein müssen, z. B. die
Shells.
/bin
/boot
•
Hier befinden sich die zum Hochfahren des Systems unbedingt erforderlichen
Dateien (kernel mit dem Namen vmlinuz).
•
Dieses Verzeichnis enthält nur Spezialdateien, sogenannte Gerätedateien.
/dev/hda ist die erste Festplatte,
/dev/sda die erste SCSI-Festplatte im System.
/dev
•
/home
•
Verzeichnis der Benutzers
FB Automatisierung und Informatik: Linux
5
Verzeichnisse:
/lib
•
Hier befinden sich die wichtigsten Funktionsbibliotheken des Systems.
Grundregel: Finger weg!
/proc
•
/proc ist ein Systemverzeichnis. Speicherung von Programmstati.
/root
•
Dies ist das Hauptverzeichnis des Systemverwalters root.
/sbin
• Enthält wie /bin wichtige Programme (ifconfig).
/tmp
• Temporäres Verzeichnis. Damit sich Benutzer nicht gegenseitig ihre Dateien
löschen, ist das sogenannte Sticky-Bit dieses Verzeichnisses gesetzt.
/usr
• Verzeichnisstruktur der installierten Software. Die Programmdateien sind meist
in /usr/bin, die Spiele in /usr/games.
FB Automatisierung und Informatik: Linux
6
Verzeichnisse:
/var
•
Unter diesem Verzeichnis werden hauptsächlich Dateien gespeichert, die sich
ständig verändern. Der Name /var steht für variabel, also veränderlich. Hier
befinden sich beispielsweise die Verzeichnisse für ausgehende E-Mail und noch
ungelesene eingehende, wenn der jeweilige Benutzer nicht dafür gesorgt hat, dass
neue E-Mails automatisch in sein Heimatverzeichnis übertragen werden.
•
(optionale Software) Kommerzielle Software oder sehr große Programme, die
nicht unmittelbar zum System gehören, wie etwa KDE, Netscape, Mozilla usw.
finden hier ihren Platz.
/opt
/mnt
/media
•
Hier werden die Laufwerke für den Zugriff angezeigt. Im Verzeichnis /dev sind
sie nur sichtbar.
FB Automatisierung und Informatik: Linux
7
Dateibaum
Wurzel des Dateibaumes ist das „Root“ (/)
Jeder Namen besteht aus 14 bzw. 255 Zeichen
Unterscheidung zwischen Groß- und Kleinschreibung
Es gibt nur einen Dateibaum
Es gibt keine Laufwerke
Festplatten sind in /dev eingetragen und werden mit dem mount-Befehl im
Verzeichnis /mnt oder /media eingetragen
Mount eines USB-Sticks mittels Namens:
■ Anlegen des USB-Verzeichnisses, mkdir /mnt/usb1
■ mount -t vfat /mnt/usb1 -L BUFF_E
unmount mittels Verzeichnis:
■ umount /mnt/usb1
FB Automatisierung und Informatik: Linux
BUFF_E=Name
8
Logisches Dateisystem
Das Dateisystem unter Linux besitzt einen baumähnlichen Aufbau
5 Komponenten:
Normale Dateien:
Gerätedateien:
Verzeichnisse:
Benannte Pipes
Symbolische Links:
Sockets:
entspricht den üblichen Dateien
Verweise zu E/A-Geräten
speichert Dateien und Verzeichnisse
Datentransfer zwischen Prozessen (FIFO)
Mehrere Verweise auf eine phys. Datei
meist auf Servern
FB Automatisierung und Informatik: Linux
9
Syntaxdiagramm Kommando
Kommandoname
Parameter
Trennzeichen
IFS Variable
•
Kommando Leerzeichen optionale Parameter
•
Die IFS Variable steuert die Trennung der Parameter
FB Automatisierung und Informatik: Linux
10
Zugang: Befehl login
nach der Verbindungsaufnahme
–
–
login:
passwd:
Passwörter werden durch einen nichtöffentlichen
Paßwortberechnungsalgorithmus verschlüsselt in
/etc/passwd gespeichert
Änderung des Paßworts:
– passwd
– passwd user1
FB Automatisierung und Informatik: Linux
11
Neuer User:
Einloggen mit root
–
–
login:
passwd:
useradd user1
passwd user1
–
–
123456
123456
userdel –r user1
// -r löschen des Homeverzeichnisse
Netzwerkadresse: /sbin/ifconfig
FB Automatisierung und Informatik: Linux
12
Benutzertypen
root
–
–
Systembenutzer
–
–
Hat alle Rechte
uid=0
gid=0
Ein spezieller Benutzer für Dienste.
Dieser Benutzer hat mehr Rechte, als ein normaler User,
aber wenige als der root.
Standardbenutzer
–
–
Hat nur eingeschränkte Rechte.
Damit sollte man immer arbeiten.
FB Automatisierung und Informatik: Linux
13
User- Gruppenfunktionen: /etc/group
Es ergeben sich 9 Zugriffsrechte
Folgende User-Befehle stehen zur Verfügung
–
–
–
–
–
–
–
–
–
adduser
deluser
usermod
grpadd
chgrp
chmod
umask
chown
passwd
Benutzer hinzufügen
Benutzer löschen
Benutzer ändern
hinzufügen einer Gruppe
change group
change mode, Zugriffrechte
updatemask, Rechte für neue Dateien
change owner
Paßwort ändern
FB Automatisierung und Informatik: Linux
14
Userfunktionen:chgrp
-c : zeigt die Dateien an, deren Gruppe geändert wird
-f : (force) es werden keine Fehlermeldungen ausgegeben
-v: (verbose) alle Aktionen werden angezeigt, detailliert
-R: (recursive) die Gruppenzugehörigkeit der Dateien in den
Unterverzeichnissen wird ebenfalls geändert
FB Automatisierung und Informatik: Linux
15
Userfunktionen:chgrp
•
•
•
•
•
•
chgrp mygroup test.txt
Die Gruppe der 'test.txt' Datei ist root, ändern auf die neue Gruppe
mygroup.
chgrp -R mygroup myDir
Die Gruppe des 'myDir' Verzeichnisses ist root. Mit -R wechseln
die Dateien und Unterverzeichnisse auch zur neuenGruppe
mygroup
chgrp -c mygroup test.txt
Die Gruppe der 'test.txt' Datei ist root, ändern auf die neue Gruppe
mygroup.
FB Automatisierung und Informatik: Linux
16
Userfunktionen:groupadd
groupadd optionen groupname
-g : ID des Kontos. Werte zwischen 0 bis 99 sind
Systemgruppen zugeordnet
Beispiel:
groupadd mygroup
FB Automatisierung und Informatik: Linux
17
Userfunktionen:groupdel und groupmod
groupdel groupname
Beispiel:
groupdel mygroup
groupmod groupoldname groupnewname
Beispiel:
groupmod mygroup mygruppe
FB Automatisierung und Informatik: Linux
18
Dateiattribute, Benutzerklassen, Zugriffsrechte
Jede Datei hat einen Eigentümer.
Anwender werden zu Gruppen zusammengefasst
Jeder Anwender hat eine UserIdentification (UID)
Jedes Objekt hat eine UID / GID / All
Jedes Objekt hat pro Benutzerklasse drei Zugriffsrechte
–
–
–
lesen
schreiben
ausführen
read
write
execute
Owner
rwx
Group
rwx
FB Automatisierung und Informatik: Linux
World
rwx
19
Spezialbits
Setuid-Bit: s
−
Jede Datei hat einen Eigentümer.
−
Diese wird zur Laufzeit geändert
−
Zur Laufzeit erhält der User die Rechte der Datei (Bsp: root-Rechte)
Setgit-Bit: s
−
Anwender werden zu Gruppen zusammengefasst
−
Zur Laufzeit erhält der User die Usergit der Datei
Sticky-Bit: t
−
Mehrere Anwender haben Dateien in einem Verzeichnis und alle Rechte diese
zu ändern (zum Beispiel /tmp).
−
Ist das Sticky-Bit gesetzt, kann jeder User nur seine eigenen Dateien löschen.
Owner
rwx
rws
Group
rwx
rws
FB Automatisierung und Informatik: Linux
World
rwx
rwt
20
Dateiattribute
Zusätzlich zum Dateinamen sind noch eine Reihe weitere
Eigenschaften von Dateien für die Verarbeitung durch
Programme wichtig.
•
•
•
•
•
•
•
•
Datei-Zugriffspfad
Dateityp (normal, Verzeichnis, pipe, link oder device file)
Zugriffsrechte
Dateilänge (in Byte oder Blöcken zu 512 bzw 1024 Byte)
Knotennummer (i-node number)
Anzahl der Verknüpfungen mit dieser Datei
Datum der Erstellung, der letzten Änderung, des letzten Zugriffs
UID und GID des Besitzers, im Klartext falls möglich
ls -l listet alle diese Eigenschaften auf
FB Automatisierung und Informatik: Linux
21
Rechte
Owner Group
Size
Datum
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxrwxrwt
-rwxr-xr-x
Anz.
Links
10
16
9
2
2
2
2
5
2
1
2
3
1
root
root
root
root
root
root
root
root
root
root
root
sys
root
sys
sys
sys
sys
sys
sys
sys
sys
sys
sys
sys
sys
sys
4096
8192
136
0
114
69
36
60
6
21
15
4096
126116
56
Apr
Apr
Apr
Apr
Mar
Mar
Mar
Apr
Apr
Apr
Mar
Apr
Apr
12
22
21
22
13
13
13
21
21
12
13
22
07:00
03:45
05:00
12:19
15:10
15:10
15:10
03:47
03:47
07:00
13:51
12:17
3
dev
etc
home
hw
lib
lib32
lib64
linux
mp
ns
stand
tmp
06:30
unix
drwxr-xr-x
drwxr-xr-x
44
34
root
root
sys
sys
4096
4096
Apr
Mar
12
13
07:00
15:37
usr
var
FB Automatisierung und Informatik: Linux
device
22
Dateiverwaltungskommandos:
Unix
cp
mv
ln
rm
mkdir
rmdir
pwd
cd „blank“
ls
cat
lp
Dos
copy
ren
del
md
rmdir
dir
type
print
Beschreibung
Kopieren
move
link
remove
make directory
remove directory
print working directory
cd home
Liste aller Einträge
Anzeige des Inhalts
Drucken
FB Automatisierung und Informatik: Linux
23
ls Parameter
-1
-l
-a
-la
-lh
-p
-d
-r
-R
-s
-S
-t
-X
eins, eine Spalte
kleines L, Longformat
all files, inkl. Hiddenfiles (Absturz vim)
kleines L, Longformat und Hiddenfiles
kleines L, Longformat mit
/ an den Verzeichnissen
/ an den Verzeichnissen: ls -d */
Reihenfolge
Rekursiv
mit Dateigröße
sortiert nach Dateigröße
sortiert nach Datum / Zeit
sortiert nach Dateierweiterung
FB Automatisierung und Informatik: Linux
24
cp Parameter
-f
-i
-l
-L
-n
-R
-r
-t
-u
-v
force
interactive, Nachfragen
erzeugt einen link, statt zu kopieren
erzeugt einen symbolischen link, statt zu kopieren
no überschreiben
-recursive
-recursive
target directory
-update, nur neuere Dateien kopieren
verbose, jede Aktion wird dokumentiert
FB Automatisierung und Informatik: Linux
25
mv Parameter
-f
-i
-u
-v
force
interactive, Nachfragen
-update, nur neuere Dateien kopieren
verbose, jede Aktion wird dokumentiert
mv benutzt man zum Verschieben und/oder Umbenennen
− mv a.sh b.sh
umbennen
− mv a.sh v1/
verschieben
− mv a.sh v1/b.sh
verschieben und umbennen
FB Automatisierung und Informatik: Linux
26
rm Parameter
-f
-i
-u
-v
force
interactive, Nachfragen
-update, nur neuere Dateien kopieren
verbose, jede Aktion wird dokumentiert
mv benutzt man zum Verschieben und/oder Umbenennen
− mv a.sh b.sh
umbennen
− mv a.sh v1/
verschieben
− mv a.sh v1/b.sh
verschieben und umbennen
FB Automatisierung und Informatik: Linux
27
Gerätedateien arbeiten block- oder zeichenorientiert
Gerätedateien kapseln die Unterschiede zwischen den Geräten.
Die Geräte werden durch logische Nummern angesprochen.
major device number
minor device number
Befehl: ls -l /dev/mf0d
ls -l -R /dev
Liste der Abkürzungen:
•
•
•
•
•
-b
-c
-p
-l
-s
Blockorientiertes E/A-Gerät
Character-E/A-Gerät
FIFO-Datei (Named-Pipe)
Symbolischen Link
für Socket
/dev/null: ?
/dev/null„Papierkorb“
FB Automatisierung und Informatik: Linux
28
Linux-Shells
Bourne Shell als Kommandointerpreter
Schnittstelle zwischen Benutzer und Betriebssystem
Alternative Shells
- C-Shell
Thompson-Shell
- Korn Shell
Job-Control-Shell
- Bourne-Shell
Bash Shell
- Debian-Almquist-Shell
TENEX-C-Shell
- easy-Shell
fish-Shell (friendly interactive Shell)
- Almquist-Shell
- Z-Shell: http://www.pro-linux.de/artikel/2/1186
Start nach dem Login Kommando
Nach dem Login wird die Datei /etc/profile ausgeführt
Ausgabe Reportdatei /etc/motd
Start von Programmen (mail etc.);
Verzweigung in das Home-Verzeichnis
Benutzereigene Ini-Datei .profile
FB Automatisierung und Informatik: Linux
29
Konsole vs. Shells
Kommandos werden in einem Konsolenfenster eingegeben
Die Kommandos werden dann von einer Shell ausgewertet
Einige Kommandos in den Shells implementiert.
− Diese Kommandos heißen auch interne Shellbefehle.
− Der Grund ist bessere Performance.
FB Automatisierung und Informatik: Linux
30
cat /etc/shells: chsh -s /bin/zsh
FB Automatisierung und Informatik: Linux
31
Z-Shell
Automatisches beheben von Tippfehlern
− tets.txt
nach test.txt
Globale Alias
− alias -g G='| grep'
Definition
− alias -g L='| less‚
− ls G txt
Benutzung
− ls G txt L
Suffix-Aliase
− Die Endung bestimmt das verknüpfte Programm
− alias -s pdf=evince Ext: pdf, Programm: evince
Auto-CD
− Mit autocd wechselt man das Verzeichnis ohne den „cd“
− for i in *.eps; do epstopdf $i; done
Alte Variante
− for i (*.eps) epstopdf $i
zShell
Globale History
− History mit Pfeil-Tasten in allen Shells synchron
Directory Stack
− pushd
popd
chsh -s /usr/bin/zsh user1
FB Automatisierung und Informatik: Linux
32
Shell
Shell-Programme
• Alle Shell-Programme sind in /bin gespeichert
Liste aller Shells
• cat /etc/shells
Änderung der Standard-Shell
• Kommando chsh:
• chsh /bin/csh
FB Automatisierung und Informatik: Linux
33
Liste aller Shells unter cygwin
FB Automatisierung und Informatik: Linux
34
Eingabe Prompt: PS2 bei mehrzeiliger Eingabe
Mit den Variablen PS1 und PS2 kann man das Aussehen auf
der Console bestimmen:
PS1="\w: "
à la pwd
PS1="\a\d $ "
char(7) und Datum
PS1="\u: \s $ "
root/user und shellname
\a
\d
\h
\j
\n
\s
\t
\u
\v
\$
Warnton
Datum
Hostname
Anzahl der Jobs
Zeilenumbruch
Name der aktuellen Shell
Aktuelle Zeit
User
Version der Shell
Standardprompt
FB Automatisierung und Informatik: Linux
35
Ein- und Ausgabeumlenkung
Aufgabe:
Bestimmung der Anzahl der Dateien in einem Verzeichnis
Bestimmen der Anzahl der Buchstaben aller Dateinamen
Kommando:
ls
1.Dat
rekur
neg
korn2
for
cd2
ls
fkt
case
shell_proz
oder1
liste
grep
if
fminmax
cd
sort
oder2
loop
FB Automatisierung und Informatik: Linux
mathe
korn1
folgezeichen
cd1
t
read
36
Ein- und Ausgabeumlenkung
EinAusgabeumlenkung
Aufgabe:
Kommando wc zählt die Zeichen / Wörter / Zeilen
Bestimmung der Anzahl der Dateien in einem Verzeichnis
Kommando:
ls > liste
wc < liste
Speichern der Ergebnisse in eine Datei
Aufruf des Befehls; Eingabe durch die
Datei „liste“
ls > liste
wc < liste
25
25
138
25 Zeilen
25 Wörter
138 Zeichen
FB Automatisierung und Informatik: Linux
37
Ein- und Ausgabeumlenkung
EinAusgabeumlenkung
Aufgabe:
Bestimmung der Anzahl der Dateien in einem Verzeichnis
Kommando als Pipe
ls | wc
ls -l | wc –c –l -w
26
227
1522
26 Zeilen
227 Wörter
1522 Zeichen
FB Automatisierung und Informatik: Linux
38
Ein- und Ausgabeumlenkung
EinAusgabeumlenkung
Beispiel:
Datei1:
Informatik ist toll
Elektrotechnik ebenso
Datei2:
Acht ist kleiner Neun.
Siebzehn ist eine Primzahl
Befehl:
cat datei2 datei1 > datei3
// datei3 erzeugt + kopiert
cat datei2 datei1 >> datei3
// datei3 bleibt + anhängen
FB Automatisierung und Informatik: Linux
39
Ein- und Ausgabeumlenkung
EinAusgabeumlenkung
Beispiel:
Der Befehl „who“ listet alle aktuell angemeldeten Benutzer
who > user
wc -l user
rm user
who | wc -l
// das ist ein kleines L
FB Automatisierung und Informatik: Linux
40
Standarddateien für Prozesse
Jedem Prozess sind Standarddateien zugeordnet
Standardeingabe
Prozess
0 = Standardeingabe
1 = Standardausgabe
2 = Fehlerausgabe
FB Automatisierung und Informatik: Linux
Standardausgabe
Standardfehlerausgabe
41
Standarddateien in Kommandos
Kommandos werden mittels Semikolon aneinandergereiht
Kommandos werden durch Sonderzeichen zur Festlegung
der Standarddateien beendet (<, >, <<, >>, |)
–
–
–
–
–
–
–
–
–
kommando < infile > outfile 2>errorfile
ls -l > listing
ls -l /bin >> listing
wc -l < listing
> listing wc -l
cat /etc/passwd > passwd
// Keine Anzeige
cat /etc/passwd > passwd 2>/dev/null
sort Datei_1 >Datei_1
cat 222 > erg222 2>fehler
"2>errorfile" muss ohne Leerzeichen eingetippt werden!
FB Automatisierung und Informatik: Linux
42
Shell Sonderzeichen
Das Semikolon trennt Kommandos
Das Ampersand-Zeichen „&“ startet das Kommandos als
Hintergrundprozess
Promptstring: $
Weitere Eingabe: >
Abbruch mit Strg+C
Suchpfad: path=/usr/local/bin/commands
Stringbegrenzer " und `
Folgezeichen: \ in einer Scriptdatei
FB Automatisierung und Informatik: Linux
43
Namensexpandierung (Wildcard)
In einem Kommando wird ein Wort das die
Zeichen *,? oder [..] enthält, als Namensmuster
betrachtet und vor der Verwendung expandiert.
Dabei bedeuten:
•
* = eine beliebige Zeichenkette, auch nichts
• ? = ein beliebiges Zeichen, nicht nichts !
• [...] = ein Satz einzelner Zeichen
• - = ein Bereich von Zeichen
• ! = benutzt in einer Gruppe. Wird als erstes Zeichen
nach dem [ eingegeben. Negation der Auswahl
Wildcards sind für rm, ls, cat, grep, find und cp geeignet
FB Automatisierung und Informatik: Linux
44
Beispiele für Wildcards
Das aktuelle Verzeichnis enthalte prog1, Prog1, p1.1, p1.2,
p1.3, p1.4, p1.5 und p1.6, p1.66, p1
Namensmuster
prog*
p???
*2*
p1.[136]
p1.[1-36]
p1.[!1-36]
../*
./*
Dateien
prog1
p1.1, p1.2, p1.3, p1.4, p1.5, p1.6
p1.2
p1.1, p1.3, p1.6
p1.1, p1.2, p1.3, p1.6
p1.4, p1.5
Dateien oberhalb des aktuellen Verzeichnisses
prog1, p1.1, p1.2, p1.3, p1.4, p1.5 und p1.6
FB Automatisierung und Informatik: Linux
45
List-Kommando mit Wildcards
Dateien im Verzeichnis:
• basis.c
• bsp1
• main.c
• oder2
Befehle: ls b*
ls b*.*
ls *.c
FB Automatisierung und Informatik: Linux
Befehl: ls b*
• basis.c
• bsp1
Befehl: ls b*.*
• basis.c
Befehl: ls *.c
• basis.c
• main.c
46
Beispiele:
Alias
alias
alias
alias
Zuweisen von Zeichenketten an einem neuen Befehl
dir='ls –p'
..='cd ..'
cd..='cd ..'
FB Automatisierung und Informatik: Linux
47
Beispiele:
cat Inhalt anzeigen von Dateien
-n
-v
-e
-t
mit Nummer am Anfang
Sonderzeichnen als ^X....
Ausgabe des Dollarzeichens am Ende jeder Zeile (mit -v)
Tabs als ^T, Formfeed als ^L
FB Automatisierung und Informatik: Linux
48
Beispiele:
who
-H
-m
-b
Anzeige der aktuellen Benutzer
mit Kopfzeile
Liste aller Benutzer, bezogen auf das aktuelle Terminal
Letzter Bootvorgang
■
su
Neue Session mit anderem Account aufmachen
■su root
■
sudo
useradd
userdel
usermod
Befehl als root ausführen (ubuntu).
Anlegen eines neuen Useraccounts
Löschen eines Users.
Ändern eines bestehenden Useraccounts.
■
■
■
FB Automatisierung und Informatik: Linux
49
Beispiele:
whoami
Anzeige der aktuellen Benutzer
pwd
Print working directory
ps Anzeige der aktuellen Prozesse
-a
-A
-c
-f
-j
Liste aller terminalabhängigen Prozesse, Vaterprozess
Liste aller Prozesse
Liste mit Priotitäten
Liste mit allen Informationen
Ausgabe mit PID und Group-ID
kill -9 1234
Prozess mit der Nr 1234 sofort löschen
FB Automatisierung und Informatik: Linux
50
Beispiele:
■
■
■
■
■
■
■
■
■
cat test.dat | more Seitenweise Anzeige des Inhalts
cat test.dat | less Seitenweise Anzeige des Inhalts, nach oben
whereis Suchen einer Datei, durchsucht Standardverzeichnisse
which
Sucht einen Befehl im Path
type
Sucht im Path, Alias und auch alle Shell-Befehle
stat test.dat
touch test.dat
head test.dat
tail test.dat
Ausgabe wesentlicher Daten
Anlegen einer leeren Datei
Anzeige der ersten zehn Zeilen oder bel.
Anzeige der letzten zehn Zeilen oder bel.
FB Automatisierung und Informatik: Linux
51
Beispiele:
■
■
■
■
■
■
■
shutdown -r now
shutdown -h now
clear
alias
• alias ll 'ls -l'
• alias dir 'ls'
chgrp
chmod
chown
neu starten
runterfahren
löschen Bildschirm
Gruppenzugehörigkeit einer Datei ändern
Zugriffsrechte ändern
Eigentümer einer Datei ändern
FB Automatisierung und Informatik: Linux
52
Beispiele:
■
■
■
■
■
■
■
■
■
touch
ifconfig
Datum / Zeit einer Datei ändern
Anzeige der Konfiguration Netzwerk
in /sbin zu finden
• ifconfig eth0 193.168.34.177 netmask 255.255.255.224
netstat
Info über Netzverbindungen
ping
test auf Verbindung
chown
Eigentümer einer Datei ändern
groupadd Anlegen einer neuen User-Gruppe
groupdel
Löschen einer bestehenden User-Gruppe
groupmod Ändern der Daten einer bestehenden User-Gruppe
groups
Zeigt die Gruppenzugehörigkeit eines Users
FB Automatisierung und Informatik: Linux
53
Beispiele:
df
Anzeige des freien Speichers (Disk free)
Filesystem
Type
blocks
use
/dev/root
xfs
13053888
4759811 8294077
37
/
/dev/dsk/dks0d3s7
xfs
35549344
4359272 31190072
13
/bscw
/dev/dsk/dks0d7s7
xfs
17761224
4165784 13595440
24
/linux
/dev/dsk/dks0d4s7
xfs
4183704
1216
4182488
1
/mp
/dev/dsk/dks0d2s7
xfs
4183704
660752
3522952
16
/opt
1989581056
1729751984 259829072 87
194.95.16.234:/home nfs
FB Automatisierung und Informatik: Linux
avail
%use Mounted on
/home
54
Beispiele:
du
-k
-a
-s
Anzeige des benutzten Speichers (Disk used)
sort
-r
-n
-u
Anzeige in K-Byte
Anzeige als Liste mit allen Dateien
Es wird nur eine Summe pro Teilbaum ausgegeben
Sortieren einer Datei (aufsteigend)
Umgekehrte Reihenfolge (absteigend)
Numerisches Sortieren
Eindeutige Ergebnisse
FB Automatisierung und Informatik: Linux
55
Beispiele:
chmod
nnn
go+r
u+x
a
r
w
x
X
s
t
l
Änderung des Zugriffs einer Datei(en)
Hexadezimale Beschreibung (User, Group, Other, RWX)
Setzen zum Lesen (g,u,o)
Setzen als Ausführbare Datei
Für alle Gruppen
reading permission
writing permission
execution permission
execution permission (see below)
user or group set-ID is turned on
sticky bit is turned on
mandatory locking will occur during access
FB Automatisierung und Informatik: Linux
chmod.bsp
56
Userfunktionen: adduser
for nr in 1 2 3 4 5 6 7 8 9
do
adduser u$nr
passwd u$nr < p
done
In Datei p steht das Passwort:
student
student
for (( i=1; i<10; i++))
do
adduser u$i
passwd u$i < p
done
FB Automatisierung und Informatik: Linux
57
Variablen und Parameter
Im Umgang mit Variablen der Shell sind einige Besonderheiten
gegenüber anderen Programmiersprachen zu beachten. Es lassen
sich grundlegend drei Formen unterscheiden:
- Variablendeklaration
- Wertzuweisung
- Wertreferenzierung (Zugriff auf den Wert einer Variablen)
Zur Verdeutlichung des Sachverhaltes sollen wenige Beispiele
dienen:
Form
Deklaration
Wertzuweisung
Wertreferenzierung
Beispiel
$ paul=
$ paul=otto
$ echo $paul
FB Automatisierung und Informatik: Linux
Bildausgabe
otto
58
Prozesskommandos
ps
kill process löschen
nice Priorität des Befehls ändern
nohup Kommando kann durch die Signale
−
−
−
−
process status
1: Beenden der Verbindung
2: Interrupt-Signal (Del)
3: Quit-Signal (<Strg><\>
15: kill Befehl
sleep warten
− sleep 13
FB Automatisierung und Informatik: Linux
59
Befehl prozess ps
• Der Befehl ps listet alle vorhandenen Prozesse auf
ps -A
PID TTY
1
78
187
271
272
TIME CMD
?
0:28
?
0:26
?
3:53
?
1:47
?
0:00
init
syslogd
ilmid
nsd
rpcbind
FB Automatisierung und Informatik: Linux
60
Hintergrundprozesse
• Jedes Kommando wird als Vordergrundprozess ausgeführt.
• Der Vaterprozess wird unterbrochen (synchrone Ausführung)
• Eine asynchrone Ausführung (Hintergrundprozess) erreicht man
durch Anhängen eines Ambersand-Zeichen an den Befehl
• Beispiel:
• cd /
• ls -R
cd /
ls& -R
FB Automatisierung und Informatik: Linux
61
Prozesspriorität
Linux verwaltet die Rechenzeit bzgl. der Prozesse
im Timesharing Verfahren
Umschaltung
Prozess 1
Prozess 2
P1
FB Automatisierung und Informatik: Linux
Prozess 3
Prozess 1
62
Prozesspriorität
Grundprioritäten der Prozesse:
Schedulerprozess
Systembereich
Anwender
70-100
30-70
0-30
Priorität = f(Grundpriorität, passive Zeit, nice-Wert)
Beispiel:
nice -40 cc test.c
FB Automatisierung und Informatik: Linux
63
Beispiel:
Paul=
Paul=Otto
echo Paul
echo paul
echo Otto
echo otto
echo $Paul
Deklaration
Wertzuweisung
Ausgabe Paul
Ausgabe paul
Ausgabe Otto
Ausgabe otto
Ausgabe des Inhalts von Paul
Otto
my=Bash
echo I like $myshell
my=Bash
echo I like ${my}shell
FB Automatisierung und Informatik: Linux
Korn1 korn2
64
Gültigkeitsdauer von Variablen
$lage=oben
$echo $lage
oben
Variable lage wird deklariert mit oben
Wert der Variablen wird referenziert
Wert der Variablen auf dem Bildschirm
$ bash
$ echo $lage
Aufruf einer Sub-Shell
Wert der Variablen wird referenziert
Variable lage ist in der Sub-Shell nicht bekannt
$ lage=unten
$ echo $lage
unten
$ exit
$ echo $lage
oben
lage wird ein neuer Wert zugewiesen
Wert der Variablen erneut referenziert
neuer Wert auf dem Bildschirm
Abmelden von der Sub-Shell, damit ist die alte Shell aktiv
erneut wird der Wert referenziert
der erste Wert ist erhalten geblieben
FB Automatisierung und Informatik: Linux
65
Gültigkeitsdauer von Variablen
$lage=oben
$echo $lage
oben
$ export lage
$ bash
$ echo $lage
oben
$ lage=unten
$ echo $lage
unten
$ exit
$ echo $lage
oben
Variable lage wird deklariert mit oben
Wert der Variablen wird referenziert
Wert der Variablen auf dem Bildschirm
die Variable lage wird exportiert
Aufruf einer Sub-Shell
Wert der Variablen wird referenziert
Variable lage ist in der Sub-Shell nicht bekannt
durch den Export der Variablen an die Sub-Shell übergeben
lage wird ein neuer Wert zugewiesen
Wert der Variablen erneut referenziert
neuer Wert auf dem Bildschirm
Abmelden von der Sub-Shell, damit ist die alte Shell aktiv
erneut wird der Wert referenziert
der erste Wert ist erhalten geblieben
FB Automatisierung und Informatik: Linux
66
Umgebungsvariablen einer Shell
Variable
HOME
PATH
PS1
PS2
MAIL
IFS
Bedeutung
Home-Directory des Benutzers
Anzahl von Directories zur
Kommandosuche
Anzahl von Directories für das
Kommando cd
1. Promptzeichen $ oder #
2. Promptzeichen >
Pfad zum elektronischen Briefkasten
Separatorzeichen für Kommandozeile
TZ
Zeitzone
CDPATH
SHELL
Pfadname der aktiven Shell
RANDOM Anzeige einer Zufallszahl 0 bis 32767
FB Automatisierung und Informatik: Linux
typischer Wert
/home/otto
/bin:/usr/bin:/etc
~/verz1:~/labor
"$\PWD> "
"weiter> "
/usr/spool/mail/otto
TAB, NL,
Leerzeichen
MEZ1MESZ,3.2.0,9.2.0
/bin/bash
67
Positionsparameter als Variable
Positionsparameter
$#
$0
$1
:
$9
$@
$*
Bedeutung
Anzahl der Argumente ohne
kommandoname
Name des Kommandos
(kommandoname)
1. Argument nach dem
Kommandoname
:
9. Argument nach dem
Kommandoname
alle Argumente ohne Kommandoname
alle Argumente ohne Kommandoname
FB Automatisierung und Informatik: Linux
68
Shellskript shell_proz
echo "Mein Name ist $0"
echo "Mir wurden $# Parameter übergeben"
echo "1. Parameter = $1"
echo "2. Parameter = $2"
echo "3. Parameter = $3"
echo "Alle Parameter zusammen:
$*"
echo "Meine Prozessnummer PID = $$"
Anzeige mit 1,2,3,4 und 5 Parametern ?!
FB Automatisierung und Informatik: Linux
69
Testlauf
Das Shell-Skript ausführbar machen
–
$ chmod u+x
meineShelldatei.sh
Das Shell-Skript erzeugt die folgenden Ausgaben auf
dem Bildschirm:
$ meineShelldatei.sh emil erna paul fred otto
Mein Name ist meineShelldatei.sh
Mir wurden 5 Parameter übergeben
1. Parameter = emil
2. Parameter = erna
3. Parameter = paul
Alle Parameter zusammen:
emil erna paul fred otto
Meine Prozessnummer PID = 4711
$
FB Automatisierung und Informatik: Linux
70
Aufgabe:
Erstellen Sie ein Script, welches den ersten Parameter
dazu verwendet, in ein Verzeichnis zu wechseln.
Existiert das Verzeichnis nicht, so soll dieses mit einer
eventuellen Fehlermeldung angelegt werden.
Lösung ohne Fehlerumleitung:
cd $1 || mkdir $1 && cd $1 || echo fehler
pwd
Lösung mit Fehlerumleitung:
cd $1 2>error || mkdir $1 2>error && cd $1 2>error || echo fehler
pwd
FB Automatisierung und Informatik: Linux
71
Apostrophierung:
echo guten morgen
echo eins zwei
drei
echo * wie gehts? *
echo '* wie gehts? *'
echo 'Pfadvariable: $PATH'
echo "Pfadvariable: $PATH, UID: $uid, GID: $gid"
"
'
Ersetzung von die Variablen
Keine Ersetzung
Ersetzung * und die Variablen
FB Automatisierung und Informatik: Linux
72
IFS und die Apostrophierung:
•
•
Diese Variable bestimmt die Trennung der Parameter
IFS definiert die möglichen Trennzeichen
echo IFS
echo "IFS"
Variable IFS wird ausgewertet
Inhalt angezeigt, nur Variablenersetzung
IFS= %:,
IFS=“_%:,"
Korrekte Definition: (Blank % ,)
e1="1111
echo $e1
IFS=",%:"
echo $e1
3333
⇒
⇒
5555"
1111 3333 5555
Trennzeichendefinition
1111 3333 5555
FB Automatisierung und Informatik: Linux
73
IFS und Beispiele:
IFS=“ %:“
neue Trennzeichendefinition
e1="1111,,,,,,,,,3333,,,,,,,,5555"
echo $e1
⇒
1111,,,,,,,,,3333,,,,,,,,5555
IFS=“,%:“
neue Trennzeichendefinition
echo $e1
⇒
1111 3333 5555
Alle Zeichen in „e1“, die in IFS enthalten sind, werden
durch ein Leerzeichen ersetzt
FB Automatisierung und Informatik: Linux
74
Ausgabe mit echo:
Zusätzliche Sonderzeichen:
Darstellung ASCII-Code Bedeutung
\a
\b
\c
\f
\n
\r
\t
\v
\\
\0xxx
7
8
?
12
10
13
9
11
92
xxx
Piepston
Backspace
Ausgabe beenden ((Bash), Kornshell)
Form Feed (Neue Seite)
Zeilenvorschub
Carriage Return (Wagenrücklauf)
Tabulator
Vertikaltabulator
Backslash
Zeichen mit ASCII-Code
FB Automatisierung und Informatik: Linux
75
Ausgabe mit echo:
text = 'DOS-Verzeichnis: \alpha\beta\gamma‘
Kornshell:
echo "$text“
⇒ DOS-Verzeichnis: lpheta\gamma
Bash (-e ausführen der Sonderzeichen)
echo -e "$text“
// bash
⇒ DOS-Verzeichnis: lpheta\gamma
echo '$text‘
oder echo $text
⇒ DOS-Verzeichnis: alphabetagamma
FB Automatisierung und Informatik: Linux
76
Shell Sonderzeichen
Kommentar:
#
–
print "Guten Morgen"
–
print # "Guten Morgen"
# Kommentar
# Kommentar
Folgezeile: \
–
print Dieses Komman\
do ist über meh\
rere Zeilen verteilt
Start:
Strg+q
Start / Stop Strg+s
Shellende Strg+d
FB Automatisierung und Informatik: Linux
77
Prozesse beenden
Mit dem Kommando kill kann man das Signal
(Strg D) zum Abbrechen einem Prozess
übermitteln.
Da nicht alle Programm darauf reagieren
signalisiert kill -9 PID die absolute
Aufforderung zum Beenden an einen eigenen
Prozess.
-9 = SIGKILL
FB Automatisierung und Informatik: Linux
78
Einlesen mit read:
Zum Einlesen in Variablen wird die Anweisung read benutzt:
read xx
Mit der Eingabe
1111
read xx yy zz
Mit der Eingabe
1111 2222 3333 4444
xx:
yy:
zz
?
?
?
-n
Kein Zeilenumbruch
-t
Ersetzen Sonderzeichen
FB Automatisierung und Informatik: Linux
read1 read2
79
Einlesen mit read:
Ausgabe eines Zusatztextes:
echo Eingabe
read xx
echo -n Eingabe
read xx
// Kein Zeilenumbruch
echo -n "Eingabe: "
read xx
// Kein Zeilenumbruch
read –p "Eingabe: " xx
// Kein Zeilenumbruch
FB Automatisierung und Informatik: Linux
read3
80
Kommandoersetzung:
Kombination aus Umleitung und Variablenersetzung:
liste=$(ls)
// Inhalt des Verzeichnisses in liste
zeit=$(date)
z1=$(grep freundlich verkauf)
z2=$(grep freundlich verkauf | sort)
dateien=$(ls *.java)
FB Automatisierung und Informatik: Linux
81
Alphabetische Vergleiche:
Abfrage
wahr / falsch
if [[ abc < abs ]]
# wahr
if [[ abc > abcd ]]
# falsch
if [[ 123 < 147 ]]
# wahr
if [[ 123 < 0147 ]]
# falsch
if [[ 0815 > 3 ]]
# falsch
if [[ 12345 <77 ]]
# wahr
if [[ püh < pöh ]]
# falsch
if2
FB Automatisierung und Informatik: Linux
82
Alphabetische Vergleiche:
Abfrage
wahr / falsch
if [ abc < abs ]
# wahr
if [ abc > abcd ]
# falsch
if [ 123 < 147 ]
# wahr
if [ 123 < 0147 ]
# falsch
if [ 0815 > 3 ]
# falsch
if [ 12345 <77 ]
# wahr
if [ püh < pöh ]
# falsch
FB Automatisierung und Informatik: Linux
83
Arithmetische Vergleiche:
Abfrage
$x -lt $y
$x -le $y
$x -eq $y
$x -ne $y
$x -gt $y
$x -ge $y
Bedeutung
x ist kleiner als y
x ist kleiner oder gleich als y
x ist gleich als y
x ist ungleich als y
x ist größer als y
x ist größer oder gleich als y
Beispiel:
if [ $x -lt $y ] then
Befehler
fi
FB Automatisierung und Informatik: Linux
84
Kontrollstrukturen:
Bedingte und einfache Fallunterscheidungen
if bedingung
then
kommando_1
else
kommando_2
fi
if bedingung
then
kommando_1a
kommando_1b
kommando_1c
else
kommando_2a
kommando_2b
fi
bsp/if/ if1
FB Automatisierung und Informatik: Linux
if2
85
Arithmetische Vergleiche:
T1=23
T2=44
if [ $T1 -lt $T2 ]
then
echo true
else
echo false
fi
Ausgabe:
true
T1=23
T2=44
T3=45
if [ $T1 -gt $T2 ]
then
echo 1
elif [ $T3 –gt $t2 ]
then
echo T3
else
echo T2
fi
fi
Ausgabe:
FB Automatisierung und Informatik: Linux
T3
86
Beispiele Bash:
typeset [-afFirtx] [-p] name[=value]
declare [-afFirtx] [-p] name[=value]
typeset -i k
typeset -i k m n
# Integervariable k
# Integervariable k, m, n
-a
-f
-r
-t
-x
-p
-F
# Explizite Definition eines Arrays
# Use function name only
# Variablen sind readonly
# Erhält trace-Attribut (Debug)
# Export
# Anzeige aller Variablen und Namen
# Verhindert die Anzeige der Funktionsdefinitionen
FB Automatisierung und Informatik: Linux
87
Dateieigenschaften prüfen
if [ ausdruck datei ]
ausdruck
Bedeutung
-a <datei>
datei existiert
-b <datei>
datei existiert und ist blockorientiertes Gerät
-c <datei>
datei existiert und ist zeichenorientiertes Gerät
-d <datei>
datei existiert und ist Verzeichnis
-e <datei>
datei existiert
-f <datei>
datei existiert und ist einfache Datei
-g <datei>
datei existiert und für Gruppe s-Bit gesetzt
-h <datei>
datei existiert und ist eine symbolische Linkdatei
-k <datei>
datei existiert und das sticky-Bit ist gesetzt
-p <datei>
datei existiert und ist ein pipe (FIFO)
-r <datei>
datei existiert und Leserecht
FB Automatisierung und Informatik: Linux
88
Dateieigenschaften prüfen
if [ ausdruck datei ]
ausdruck
Bedeutung
-r <datei>
datei existiert und Leserecht
-s <datei>
datei existiert und ist nicht leer
-u <datei>
datei existiert und für Eigentümer s-Bit gesetzt
-w <datei>
datei existiert und hat Schreibrecht
-x <datei>
datei existiert und hat Ausführungsrecht
-O <datei>
-G <datei>
-L <datei>
-S <datei>
-N <datei>
datei existiert und Eigentümer User
datei existiert und Eigentümer Group
datei existiert und ist symbolischer Link
datei existiert und ist Socket
datei existiert und wurde nach dem letzten Lesen
geändert
FB Automatisierung und Informatik: Linux
89
Dateieigenschaften prüfen
if [ ausdruck datei ]
ausdruck
Bedeutung
-d <datei>
-f <datei>
-h <datei>
datei existiert und ist Verzeichnis
datei existiert und ist einfache Datei
datei existiert und ist eine symbolische Linkdatei
FB Automatisierung und Informatik: Linux
90
Dateieigenschaften prüfen
if [ ausdruck datei ]
ausdruck
Bedeutung
-r <datei>
datei existiert und Leserecht
-s <datei>
datei existiert und ist nicht leer
-u <datei>
datei existiert und für Eigentümer s-Bit gesetzt
-w <datei>
datei existiert und hat Schreibrecht
-x <datei>
datei existiert und hat Ausführungsrecht
-O <datei>
-G <datei>
-L <datei>
-S <datei>
-N <datei>
datei existiert und Eigentümer User
datei existiert und Eigentümer Group
datei existiert und ist symbolischer Link
datei existiert und ist Socket
datei existiert und wurde nach dem letzten Lesen
geändert
FB Automatisierung und Informatik: Linux
91
Dateiabfragen:
datei1
datei1
datei1
-z string
-n string
Beispiel:
-nt
-ot
-ef
datei2
datei2
datei2
datei1 ist neuer als datei2
datei1 ist älter als datei2
datei1, datei2 Links auf
dieselbe Datei
string ist leer (zero)
string ist nicht leer
if [ -n "$sStr" ]
then
Befehle
fi
FB Automatisierung und Informatik: Linux
92
Bedingte und einfache Fallunterscheidungen
Beispiele:
If [ -d $1 ]
then
echo $1 ist ein Verzeichnis
else
echo $1 ist kein Verzeichnis
fi
if1
FB Automatisierung und Informatik: Linux
if2
93
Logische Verknüpfungen mit UND und ODER
UND (&&):
Kommandofolgen werden von links beginnend abgearbeitet,
solange der „Exitstatus 0“ liefert.
ODER (||):
Kommandofolgen werden von links beginnend abgearbeitet, bis
ein Kommando als „Exitstatus 0“ liefert.
FB Automatisierung und Informatik: Linux
94
Beispiele:
$ who | grep guest && write guest < nachricht
• who gibt alle angemeldeten User nach grep
• Wenn guest vorhanden, dann erhält guest eine Nachricht.
(who | grep $1) || (who | grep $2) && echo "$1 oder $2 ist da“
• who gibt alle angemeldeten User nach grep
• Wenn 1. oder 2. Parameter vorhanden, dann Ausgabe.
(who | grep meier) || (who | grep schmidt) && write schulz <
nachricht
• who gibt alle angemeldeten User nach grep
• Wenn meier oder schmidt vorhanden, dann Nachricht an schmidt.
⇒ Wahrheitstabellen
FB Automatisierung und Informatik: Linux
95
Wahrheitstabellen
$ who | grep guest && write guest < nachricht
Anwesende
User
Kommando1 UND
Kommando2
guest
Result = 0
⇒ ok
Kommando wird
ausgeführt:
Result = 0 ⇒ ok
Kommando wird nicht
ausgeführt:
Result ≠ 0 ⇒ nichtok
Kein guest Result = 1
⇒ false
Result = 0 ⇒ ok
Result ≠ 0 ⇒ nichtok
FB Automatisierung und Informatik: Linux
96
Wahrheitstabellen
(who | grep meier) || (who | grep schmidt) && echo “ schmidtmeier"
User
Kommando1
Kommando2
Klammerausdruck
UND
meier
Result = 0 ⇒ ok
Wird nicht gestartet
Result = 0 ⇒ ok
Echo wird ausgeführt
meier
Result = 0 ⇒ ok
schmidt
Wird nicht gestartet
Result = 0 ⇒ ok
Echo wird ausgeführt
schmidt Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok
Keiner
von
beiden
Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok
Result = 0 ⇒ ok
Echo wird ausgeführt
Result ≠ 0 ⇒ nichtok
Echo wird nicht
ausgeführt
Frage: Welche User sind wann angemeldet?
FB Automatisierung und Informatik: Linux
97
Wahrheitstabellen
(who | grep meier) || (who | grep schmidt) && echo “ schmidtmeier"
User
Kommando1
Kommando2
Klammerausdruck
ODER
?
Result = 0 ⇒ ok
Wird nicht gestartet
Result = 0 ⇒ ok
Echo wird ausgeführt
?
Result = 0 ⇒ ok
Wird nicht gestartet
Result = 0 ⇒ ok
Echo wird ausgeführt
?
Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok
Result = 0 ⇒ ok
Echo wird ausgeführt
?
Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok
Result ≠ 0 ⇒ nichtok
Echo wird nicht
ausgeführt
Frage: Welche User sind wann angemeldet?
FB Automatisierung und Informatik: Linux
98
Wahrheitstabellen
(who | grep meier) || (who | grep schmidt) || echo “ schmidt und meier"
User
Kommando1
Kommando2
Result = 0 ⇒ ok
Wird nicht gestartet
Result = 0 ⇒ ok
Wird nicht gestartet
Komanndo3
ODER
Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok
Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok
Welche User sind wann angemeldet und welche Kommandos werden gestartet?
FB Automatisierung und Informatik: Linux
99
Wahrheitstabellen
(who | grep meier) || (who | grep schmidt) || echo “ schmidt und meier"
User
Kommando1
Kommando2
Komanndo3
ODER
meier
Result = 0 ⇒ ok
Wird nicht gestartet
Wird nicht gestartet
meier
Result = 0 ⇒ ok
schmidt
Wird nicht gestartet
Wird nicht gestartet
schmidt Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok
Keiner
von
beiden
Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok
Wird nicht gestartet
Wird gestartet
Welche User sind wann angemeldet und welche Kommandos werden gestartet?
FB Automatisierung und Informatik: Linux
100
Arithmetik:
Anweisungen werden ohne Leerzeichen eingeben:
typeset -i a b sum
a=1
b=2
sum=a+b
echo $sum
a=2
b=3
sum=`expr $a + $b`
echo $sum
FB Automatisierung und Informatik: Linux
101
Arithmetik:
Anweisungen mit Dollar-Klammer:
a=1
b=2
sum=$[ 1 + ( a + b ) * ( a - b ) ]
echo $sum
Anweisungen mit Dollar-Klammer:
a=1
b=2
sum=$(( 1 + ( a + b ) * ( a - b ) ))
echo $sum
FB Automatisierung und Informatik: Linux
102
Arithmetik:
Anweisungen mit der Klammer (( )) :
a=1
b=2
(( sum= 1 + ( a + b ) * ( a - b ) ))
echo $sum
Fehlerhafte Eingabe:
a = 1
b = 2
(( sum= 1 + ( a + b ) * ( a - b ) ))
echo $sum
FB Automatisierung und Informatik: Linux
103
Arithmetik:
Operatoren:
+
−
*
/
%
+=
−=
*=
/=
%=
Addition
Substraktion
Multiplikation
Ganzzahlige Division
Modulo
Addition
Substraktion
Multiplikation
Ganzzahlige Division
Modulo
FB Automatisierung und Informatik: Linux
104
Zählschleife:
Es wird der Zählschleife eine Menge von Werten
übergeben. Bei jedem Durchlauf wird einer Variablen
der nächste Wert aus der Menge von Werten
übergeben.
Die Anzahl von Durchläufen ist an die Menge von
übergebenen Werten gebunden
Break und Continue ändern die Abarbeitung
for name in wert_1 wert_2 wert_3 wert_4
do
kommandoliste
done
FB Automatisierung und Informatik: Linux
105
Beispiele einer Zählschleife:
Wenn der Positionsparameter $* bzw. alle Parameter verwendet
werden soll, wird die Zählschleife wie folgt notiert:
for name in $*
for (( i=1; i<10; i++ ))
do
kommandoliste
do
done
echo $i
done
Feste Schleifenanzahl:
for i in 1 2 3 4 5 6
do
echo "Hallo"
done
FB Automatisierung und Informatik: Linux
for i in {1,4,5,6,7,11}
for i in {1..5}
do
echo $i
done
106
Beispiele einer Zählschleife:
Dateien Schleife:
liste=$(ls *.c)
for datei in $liste
do
echo $datei
done
Feste Schleifenanzahl:
for i in 1 2 3 4 5 6
do
if [ $i -eq 4 ]
then
break
fi
echo "Hallo"
done
Break und Continue ändern die Abarbeitung
FB Automatisierung und Informatik: Linux
107
Whileschleife:
Schleife mit Eingangsbedingung:
while [ Bed ]
do
kommandoliste
done
Break und Continue ändern die Abarbeitung
FB Automatisierung und Informatik: Linux
108
Beispiele einer Whileschleife:
i=1
while [ $i -lt 10 ]
do
echo $i
done
i=1
while [ $i -lt 10 ]
do
echo $i
i=`expr $i \+ 1 `
done
FB Automatisierung und Informatik: Linux
i=1
while [ $i -lt 10 ]
do
echo $i
i=$i+1
done
i=1
while [ $i -lt 10 ]
do
echo $i
i=i+1
done
109
Array
Es gibt einfache Felder und Hashmaps
Notation:
−
−
−
−
−
−
x=()
x[0]='a'
x[1]='b'
x=('a' 'b' 'c')
echo ${x[1]}
echo ${x[@]}
leeres Feld
alle Elemente
FB Automatisierung und Informatik: Linux
110
HashMap
Notation:
−
−
−
−
−
−
−
−
−
declare –a y
declare –A y
leeres HashMap
leeres HashMap
y[abc]=123
y[efg]=xxx
y=([abc]=123 [efg]=xxx )
echo ${y[abc]}
y['abc']=1234
echo ${y['abc']}
echo ${y[@]}
alle Elemente
FB Automatisierung und Informatik: Linux
111
Case / Switch Anweisung:
Statt verschachtelter if-Anweisungen erlaubt die
Case-Anweisung eine übersichtlichere
Programmierung:
case Bed in
(muster1) kommandoliste
;;
(muster2) kommandoliste
;;
esac
FB Automatisierung und Informatik: Linux
112
1. Beispiel einer Case Anweisung:
prompt = $*
echo -n "$prompt (ja/nein): "
read antwort
case $antwort in
([jJ]) echo ja
exit 0
;;
([nN]) echo nein
exit 1
;;
(*)
echo rest
exit 2
esac
Aufruf mit
bash case2 Wollen..
FB Automatisierung und Informatik: Linux
case1 case2
113
1. Beispiel einer Case Anweisung:
prompt = $*
echo -e "$prompt (ja/nein): "
read antwort
case $antwort in
j|J)
echo ja
exit 0
;;
n|N) echo nein
exit 1
;;
*)
echo rest
exit 2
esac
Aufruf mit
bash case2 Wollen..
FB Automatisierung und Informatik: Linux
case1 case2
114
2. Beispiel einer Case Anweisung:
Aufgabe:
Einen Script soll ein einfacher Name übergeben werden.
name=$1
case $name in
(*/*) echo "$name ist kein einfacher Name"
exit 1;;
(' ' ) echo "$name ist kein einfacher Name"
exit 1;;
esac
FB Automatisierung und Informatik: Linux
115
3. Beispiel einer Case Anweisung:
Einen Script soll ein einfacher Name übergeben werden,
optional als 1. Parameter ein Schalter -n
s1=-n
case $1 in # 1. parameter
($s1) schalter=S1 name=$2
;;
(* ) name=$1
esac
case $name in
(*/*) print -u2 "$name ist kein einfacher Name"
exit 1;;
(' ' ) print -u2 "$name ist kein einfacher Name"
exit 1;;
esac
FB Automatisierung und Informatik: Linux
116
4. Beispiel einer Case Anweisung:
Bestimmung der Anzahl der Tage eines Monats
read monat
case $monat in
(1|3|5|7|8|10|12)
maxtage=31 ;;
(* )
maxtage=0;;
esac
echo “Anzahl der Tage ist $maxtage"
FB Automatisierung und Informatik: Linux
117
Funktionen:
Funktionen dienen dazu, Befehle unter einem Namen
zusammenzufassen.
• Speicherung innerhalb eines Scriptes
• Schneller Aufruf
• Verwendung der Scriptparameter
• Verwendung der lokalen Variablen
• In der Shell definierte Funktionen können aufgerufen werden
Aufbau:
function name
{
Anweisungen
}
FB Automatisierung und Informatik: Linux
118
Beispiele für Funktionen
function readname
{
echo -n "Bitte einen Namen eingeben:"
read name
}
function list
{
ls -aF
}
# mainprogram
ls > dat1
list
# mainprogram
readname
FB Automatisierung und Informatik: Linux
119
Beispiele für Funktionen: f1 und f2
typeset –i a b c d e f
typeset –i a b c d e f
function add
{
f=$1+$2
echo $f
}
function add
{
focal f
f=$1+$2
echo $f
}
# mainprogram
add 1 3
a=1
b=4
add $a $b
# mainprogram
add 1 3
a=1
b=4
add $a $b
FB Automatisierung und Informatik: Linux
120
Beispiele für Funktionen: f3
typeset –i a b c d e
function add
{
f=$1+$2
echo $f
}
Ausgabe
# mainprogram
add 1 3
a=1
b=4
add $a $b
FB Automatisierung und Informatik: Linux
frage
121
Beispiele:
function readname
{
echo -n "Bitte einen Namen eingeben:"
read name
}
# mainprogram
readname
FB Automatisierung und Informatik: Linux
122
Beispiel Funktion ohne Script:
$ function vii
>{
> for p
> do
> echo $p
> done
>}
Aufruf:
$ vii 11 22 33 44
11
22
33
44
FB Automatisierung und Informatik: Linux
123
typeset –i x temp
function readzahl
{
echo -n "Bitte eine Zahl eingeben:"
read temp
}
# mainprogram
readzahl
x=temp
x=x+1
echo $x
FB Automatisierung und Informatik: Linux
124
Beispiel: Einlesen einer positiven Zahl
function lese
{
while true
do
read i
if [ $i -gt 0 ]
then
break
fi
done
retcode=$i
}
lese
nr1=$retcode
lese
nr2=$retcode
echo "nr1: $nr1 nr2: $nr2"
FB Automatisierung und Informatik: Linux
fminmax
125
Beispiel: Einlesen einer positiven Zahl
function lese
{
while true
do
read i
if [ $i -gt 0 ]
then
break
fi
done
echo $i
}
nr1=lese
echo "nr1: $nr1"
// fehler
FB Automatisierung und Informatik: Linux
fminmax
126
Beispiel: Einlesen einer positiven Zahl
function lese
{
while true
do
echo -n Bitte eine Zahl eingeben:
read i
if [ $i -gt 0 ]
then
break
fi
done
echo $i
}
nr1=`lese`
// korrekt
echo "nr1: $nr1"
Eingabe: 123
Ergebnis: Bitte eine Zahl eingeben: 123
FB Automatisierung und Informatik: Linux
fminmax
127
Beispiel: Einlesen einer positiven Zahl
function lese
{
while true
do
read i
if [ $i -gt 0 ]
then
break
fi
done
echo $i
}
echo -n Bitte eine Zahl eingeben
nr1=`lese`
// korrekt
echo "nr1: $nr1"
FB Automatisierung und Informatik: Linux
fminmax
128
Vim: Text bearbeiten
O
I_______ixa_______A
o
Befehl
ESC i
ESC I
ESC a
ESC A
ESC o
ESC O
ESC R
x ist aktuelle Position
Beschreibung
Fügt Text vor dem aktuellen Zeichen ein
Fügt Text am Zeilenanfang ein
Fügt Text nach dem aktuellen Zeichen ein
Fügt Text am Zeilenende hinzu
Fügt eine Zeile unter der aktuellen Zeile ein
Fügt eine Zeile oberhalb der aktuellen ein
Eingabe von Text im Überschreibemodus
Nach der Eingabe eines Textes können Sie mit folgenden Befehlen die
Kursorposition ändern
FB Automatisierung und Informatik: Linux
129
Vim: Kursorposition ändern
Befehl
Beschreibung
ESC j
Eine Zeile nach unten
ESC k
Eine Zeile nach oben
ESC h
Ein Zeichen nach links
ESC l
Ein Zeichen nach rechts
ESC w
Ein Wort nach rechts
ESC Shift I
An den Zeilenanfang
ESC Shift A
An das Zeilenende,
ESC (
An den Satzanfang
ESC )
An das Satzende
ESC {
An den Anfang des Absatzes
ESC}
An das Ende des Absatzes
STRG+F
Eine Seite rückwärts
STRG+B
Eine Seite vorwärts
STRG+H
Kursor geht zurück, ohne den Editmodus zu verlassen
FB Automatisierung und Informatik: Linux
130
Vim: Ersetzen eines Zeichens
Befehl
ESC r
ESC c
ESC cw
ESC cnw
Beschreibung
Ersetzt ein Zeichen
Ändert text, bis ESC bestätigt wird
Ändert das nächste Wort
Ändert die nächsten n Wörter
FB Automatisierung und Informatik: Linux
131
Vim: Löschen von Zeichen
Befehl
ESC x
ESC dw
ESC db
ESC dnw
ESC dd
ESC d0
ESC D
ESC dg
ESC dlg
Beschreibung
Löscht ein Zeichen
Löscht bis Wortende
Löscht bis zum Wortanfang
Löscht die nächsten n Wörter
Löscht die Zeile
Löscht bis zum Zeilenanfang
Löscht bis zum Zeilenende
Löscht bis zur letzten Zeile
Löscht bis zur ersten Zeile
FB Automatisierung und Informatik: Linux
132
Vim: Zwischenspeicher
Befehl
ESC Y
ESC nY
ESC ybsp
ESC yw
ESC nyw
ESC dd
ESC ddp
ESC p
ESC P
Beschreibung
Übernimmt eine Textzeile in den Standardpuffer
Übernimmt n-Textzeilen in den Standardpuffer
Speichern den Textes „bsp“ in den Zwischenpuffer
Übernimmt das nächste Wort in den Standardpuffer
Übernimmt die nächsten n Wörter in den Standardpuffer
Übernimmt eine Textzeile in den Standardpuffer und
löscht diese.
Übernimmt eine Textzeile in den Standardpuffer und
löscht diese und fügt diese nach der nächsten Zeile
wieder ein.
Wenn der Standardpuffer eine Zeile enthält, wird unter
der aktuellen Zeile eine neue Zeile eingefügt und der
Inhalt des Standardpuffers eingefügt.
Wenn der Standardpuffer eine Zeile enthält, wird vor der
aktuellen Zeile eine neue Zeile eingefügt und der Inhalt
des
Standardpuffers
eingefügt.
133
FB
Automatisierung
und Informatik:
Linux
Vim: Dateioperationen
Befehl
Beschreibung
ESC ZZ
ESC :w name
ESC :w
ESC :w!
ESC :x
ESC :q!
ESC :set number
ESC:30,60w datei
Speichert und beendet
Schreibt die Datei
Schreibt die Datei
Überschreibt eine Readonly-Datei
Speichert die Änderung und beendet
Ende ohne zu speichern
Zeilennumerierung anschalten
Schreibt Zeile 30 bis 60 in eine neue
datei
Schreibt Zeile 30 bis 60 an Ende von
datei
ESC:30,60w>>datei
FB Automatisierung und Informatik: Linux
134
Vim: Beenden
Befehl
ESC:x
ESC:wq!
ESC ZZ
ESC:q!
ESC:q
Beschreibung
Beenden ohne sichern des Inhaltes
Inhalt nicht zurückschreiben und Ende des Editors
Inhalt zurückschreiben und Ende des Editors
Beenden ohne sichern des Inhaltes
Beenden falls gesichert des Inhaltes
FB Automatisierung und Informatik: Linux
135
Vim: Suchen
Befehl
ESC /=
ESC n
n
:%s/ab/cd/
Beschreibung
Sucht das erste = ab Position
Nächste Suche
Nächste Suche
Ersetzt die Buchstaben ab durch cd
Vim: Sprung / Goto
Befehl
ESC +100
ESC :n
ESC G
Beschreibung
Sprung zur 100. Zeile
Cursor in Zeile n
Cursor ans Ende des Dokumentes
FB Automatisierung und Informatik: Linux
136
Befehl
Beschreibung
ESC i
Einfügemodus, vor dem Cursor
ESC a
Einfügemodus, nach dem Cursor
ESC x
Zeichen löschen
ESC d
Löscht die Zeile ab Kursorposition
ESC dd
Löscht die Zeile
ESC O
Neue Zeile oberhalb
ESC o
Neue Zeile unter aktuellen
ESC I
Fügt Text am Zeilenanfang ein
ESC A
Fügt Text am Zeilenende ein
ESC :w name
Speichert die Datei unter dem Namen
ESC :w
Speichert die Datei
ESC: w!
Speichert die Datei auch bei Schreibschutz
ESC :x
Speichert die Änderung und beendet
ESC :q!
Ende ohne zu speichern, ohne Abfrage
ESC :q
Ende ohne zu speichern, mit Abfrage
ESC ZZ, :wq
Speichert und Ende
ESC u
FB
Automatisierung und Informatik: Linux
UNDO
Vim:
Zusammenfassung
137
Hilfe:
- -help
−
−
Jedem Kommando - - help (ohne Leerzeichen) anfügen
Beispiel: ls --help
Manual (Manpages)
−
Das Manual verweist auf viele externe Kommandos
Beispiele:
−
•
•
man –k Suchbegriff
man –f Kurzbegriff
help
−
Hilfe für die internen Kommandos der Shells
info
−
Für Programm, die keine interne Hilfe haben
Beispiele:
−
•
info ls
FB Automatisierung und Informatik: Linux
138
Zugehörige Unterlagen
Herunterladen