Linux
Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm
Hochschule Harz
FB Automatisierung und Informatik
mwilhelm@hs-harz.de
http://www.miwilhelm.de
Raum 2.202
Tel. 03943 / 659 338
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)
Verzeichnis:
Anmeldeverzeichnis Homeverzeichnis Pfadnamen:
•
absoluter Pfad Beginnend mit /user
•
relativer Pfad Beginnend mit ./image
•
Aktuelles Verzeichnis ./
•
Oberes Verzeichnis ../
Befehle:
cd change directory cd ~ change to home
pwd print working directory
Bewegen im Dateibaum
Verzeichnisbaum
/
bin boot dev etc home lib mnt proc root sbin tmp usr var
bin local include usr
lib init.d sysconfig
etc
httpd user1 user2 user2
home
user3
sbin src tmp man spool
/
• Das Wurzelverzeichnis steht ganz oben in der Hierarchie.
/bin
• Wichtige Programme für Anwender, die immer verfügbar sein müssen, z. B. die Shells.
/boot
• Hier befinden sich die zum Hochfahren des Systems unbedingt erforderlichen Dateien (kernel mit dem Namen vmlinuz).
/dev
• Dieses Verzeichnis enthält nur Spezialdateien, sogenannte Gerätedateien.
/dev/hda ist die erste Festplatte,
• /dev/sda die erste SCSI-Festplatte im System.
/home
• Verzeichnis der Benutzers
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.
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.
/opt
• (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.
/mnt /media
• Hier werden die Laufwerke für den Zugriff angezeigt. Im Verzeichnis /dev sind sie nur sichtbar.
Verzeichnisse:
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
Dateibaum
Mount eines USB-Sticks mittels Namens:
■
Anlegen des USB-Verzeichnisses, mkdir /mnt/usb1
■
mount -t vfat /mnt/usb1 -L BUFF_E BUFF_E=Name
Logisches Dateisystem
Das Dateisystem unter Linux besitzt einen baumähnlichen Aufbau 5 Komponenten:
Normale Dateien: entspricht den üblichen Dateien
Gerätedateien: Verweise zu E/A-Geräten
Verzeichnisse: speichert Dateien und Verzeichnisse
Benannte Pipes Datentransfer zwischen Prozessen (FIFO)
Symbolische Links: Mehrere Verweise auf eine phys. Datei
Sockets: meist auf Servern
Syntaxdiagramm Kommando
Kommandoname
Parameter Trennzeichen
IFS Variable
• Kommando Leerzeichen optionale Parameter
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
Neuer User:
Einloggen mit root
–
login:
–
passwd:
useradd user1
passwd user1
–
123456
–
123456
userdel –r user1 // -r löschen des Homeverzeichnisse
Benutzertypen
root
–
Hat alle Rechte
–
uid=0 gid=0
Systembenutzer
–
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.
User- Gruppenfunktionen: /etc/group
Es ergeben sich 9 Zugriffsrechte
Folgende User-Befehle stehen zur Verfügung
–
adduser Benutzer hinzufügen
–
deluser Benutzer löschen
–
usermod Benutzer ändern
–
grpadd hinzufügen einer Gruppe
–
chgrp change group
–
chmod change mode, Zugriffrechte
–
umask updatemask, Rechte für neue Dateien
–
chown change owner
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
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
Userfunktionen:groupadd
groupadd optionen groupname
-g : ID des Kontos. Werte zwischen 0 bis 99 sind Systemgruppen zugeordnet
Beispiel:
groupadd mygroup
Userfunktionen:groupdel und groupmod
groupdel groupname Beispiel:
groupdel mygroup
groupmod groupoldname groupnewname Beispiel:
groupmod mygroup mygruppe
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 read
–
schreiben write
–
ausführen execute
Owner Group World
rwx rwx rwx
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.
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
Rechte Anz.
Links
Owner Group Size Datum device
drwxr-xr-x 10 root sys 4096 Apr 12 07:00 dev
drwxr-xr-x 16 root sys 8192 Apr 22 03:45 etc
drwxr-xr-x 9 root sys 136 Apr 21 05:00 home
drwxr-xr-x 2 root sys 0 Apr 22 12:19 hw
drwxr-xr-x 2 root sys 114 Mar 13 15:10 lib
drwxr-xr-x 2 root sys 69 Mar 13 15:10 lib32
drwxr-xr-x 2 root sys 36 Mar 13 15:10 lib64
drwxr-xr-x 5 root sys 60 Apr 21 03:47 linux
drwxr-xr-x 2 root sys 6 Apr 21 03:47 mp
drwxr-xr-x 1 root sys 21 Apr 12 07:00 ns
drwxr-xr-x 2 root sys 15 Mar 13 13:51 stand
drwxrwxrwt 3 sys sys 4096 Apr 22 12:17 tmp
-rwxr-xr-x 1 root sys 126116
56
Apr 3 06:30
unix
drwxr-xr-x 44 root sys 4096 Apr 12 07:00 usr
drwxr-xr-x 34 root sys 4096 Mar 13 15:37 var
Dateiverwaltungskommandos:
Unix Dos Beschreibung
cp copy Kopieren
mv ren move
ln link
rm del remove
mkdir md make directory
rmdir rmdir remove directory
pwd print working directory
cd „blank“ cd home
ls dir Liste aller Einträge
cat type Anzeige des Inhalts
lp print Drucken
ls Parameter
-1 eins, eine Spalte
-l kleines L, Longformat
-a all files, inkl. Hiddenfiles (Absturz vim)
-la kleines L, Longformat und Hiddenfiles
-lh kleines L, Longformat mit
-p / an den Verzeichnissen
-d / an den Verzeichnissen: ls -d */
-r Reihenfolge
-R Rekursiv
-s mit Dateigröße
-S sortiert nach Dateigröße
-f force
-i interactive, Nachfragen
-l erzeugt einen link, statt zu kopieren
-L erzeugt einen symbolischen link, statt zu kopieren
-n no überschreiben
-R -recursive
-r -recursive
-t target directory
-u -update, nur neuere Dateien kopieren
-v verbose, jede Aktion wird dokumentiert
cp Parameter
-f force
-i interactive, Nachfragen
-u -update, nur neuere Dateien kopieren
-v verbose, jede Aktion wird dokumentiert
mv Parameter
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
-f force
-i interactive, Nachfragen
-u -update, nur neuere Dateien kopieren
-v verbose, jede Aktion wird dokumentiert
rm Parameter
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
Gerätedateien kapseln die Unterschiede zwischen den Geräten.
Die Geräte werden durch logische Nummern angesprochen.
major device number minor device number
Liste der Abkürzungen:
Gerätedateien arbeiten block- oder zeichenorientiert
Befehl: ls -l /dev/mf0d ls -l -R /dev
• -b Blockorientiertes E/A-Gerät
• -c Character-E/A-Gerät
• -p FIFO-Datei (Named-Pipe)
• -l Symbolischen Link
• -s für Socket
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
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.
cat /etc/shells: chsh -s /bin/zsh
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
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
Liste aller Shells unter cygwin
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 Warnton
\d Datum
\h Hostname
\j Anzahl der Jobs
\n Zeilenumbruch
\s Name der aktuellen Shell
\t Aktuelle Zeit
\u User
\v Version der Shell
\$ Standardprompt
Ein- und Ausgabeumlenkung
Aufgabe:
Bestimmung der Anzahl der Dateien in einem Verzeichnis Bestimmen der Anzahl der Buchstaben aller Dateinamen Kommando: ls
ls
1.Dat fkt if mathe rekur case fminmax korn1 neg shell_proz cd folgezeichen
korn2 oder1 sort cd1 for liste oder2 t
cd2 grep loop read
Ein- und Ausgabeumlenkung
Aufgabe:
Kommando wc zählt die Zeichen / Wörter / Zeilen
Bestimmung der Anzahl der Dateien in einem Verzeichnis Kommando:
ls > liste Speichern der Ergebnisse in eine Datei wc < liste Aufruf des Befehls; Eingabe durch die
Datei „liste“
ls > liste wc < liste
25 25 138
25 Zeilen 25 Wörter 138 Zeichen
Ein- und Ausgabeumlenkung
Ein- und Ausgabeumlenkung
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
Ein- und Ausgabeumlenkung
Ein- und Ausgabeumlenkung
Beispiel:
Datei1:
Informatik ist toll
Elektrotechnik ebenso
Ein- und Ausgabeumlenkung
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
Ein- und Ausgabeumlenkung
Beispiel:
Der Befehl „who“ listet alle aktuell angemeldeten Benutzer who > user
wc -l user rm user
Ein- und Ausgabeumlenkung
who | wc -l // das ist ein kleines L
Standarddateien für Prozesse
Jedem Prozess sind Standarddateien zugeordnet
Standard- eingabe
Standard- fehlerausgabe
Standard- ausgabe
Prozess
0 = Standardeingabe 1 = Standardausgabe 2 = Fehlerausgabe
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
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
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
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 Dateien
prog* prog1
p??? p1.1, p1.2, p1.3, p1.4, p1.5, p1.6
*2* p1.2
p1.[136] p1.1, p1.3, p1.6
p1.[1-36] p1.1, p1.2, p1.3, p1.6 p1.[!1-36] p1.4, p1.5
../* Dateien oberhalb des aktuellen Verzeichnisses
./* prog1, p1.1, p1.2, p1.3, p1.4, p1.5 und p1.6
List-Kommando mit Wildcards
Dateien im Verzeichnis:
•
basis.c
•
bsp1
•
main.c
•
oder2
Befehl: ls b*
•
basis.c
•
bsp1 Befehl: ls b*.*
•
basis.c
Befehl: ls *.c
•
basis.c Befehle: ls b*
ls b*.*
Beispiele:
Alias Zuweisen von Zeichenketten an einem neuen Befehl
alias dir='ls –p'
alias ..='cd ..'
alias cd..='cd ..'
Beispiele:
cat Inhalt anzeigen von Dateien
-n mit Nummer am Anfang
-v Sonderzeichnen als ^X....
-e Ausgabe des Dollarzeichens am Ende jeder Zeile (mit -v)
-t Tabs als ^T, Formfeed als ^L
Beispiele:
who Anzeige der aktuellen Benutzer
-H mit Kopfzeile
-m Liste aller Benutzer, bezogen auf das aktuelle Terminal
-b Letzter Bootvorgang
■
su Neue Session mit anderem Account aufmachen
■
su root
■
sudo Befehl als root ausführen (ubuntu).
■
useradd Anlegen eines neuen Useraccounts
■
userdel Löschen eines Users.
■
usermod Ändern eines bestehenden Useraccounts.
Beispiele:
ps Anzeige der aktuellen Prozesse
-a Liste aller terminalabhängigen Prozesse, Vaterprozess
-A Liste aller Prozesse
-c Liste mit Priotitäten
-f Liste mit allen Informationen
-j Ausgabe mit PID und Group-ID
whoami Anzeige der aktuellen Benutzer
pwd Print working directory
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 Ausgabe wesentlicher Daten
■
touch test.dat Anlegen einer leeren Datei
■
head test.dat Anzeige der ersten zehn Zeilen oder bel.
■
tail test.dat Anzeige der letzten zehn Zeilen oder bel.
■
shutdown -r now neu starten
■
shutdown -h now runterfahren
■
clear löschen Bildschirm
■
alias
•
alias ll 'ls -l'
•
alias dir 'ls'
■
chgrp Gruppenzugehörigkeit einer Datei ändern
■
chmod Zugriffsrechte ändern
Beispiele:
■
touch Datum / Zeit einer Datei ändern
■
ifconfig 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
Beispiele:
Beispiele:
df Anzeige des freien Speichers (Disk free)
Filesystem Type blocks use avail %use Mounted on
/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 194.95.16.234:/home nfs 1989581056 1729751984 259829072 87 /home
Beispiele:
du Anzeige des benutzten Speichers (Disk used)
-k Anzeige in K-Byte
-a Anzeige als Liste mit allen Dateien
-s Es wird nur eine Summe pro Teilbaum ausgegeben
sort Sortieren einer Datei (aufsteigend)
-r Umgekehrte Reihenfolge (absteigend)
-n Numerisches Sortieren
-u Eindeutige Ergebnisse
Beispiele:
chmod Änderung des Zugriffs einer Datei(en)
nnn Hexadezimale Beschreibung (User, Group, Other, RWX)
go+r Setzen zum Lesen (g,u,o)
u+x Setzen als Ausführbare Datei
a Für alle Gruppen
r reading permission
w writing permission
x execution permission
X execution permission (see below)
s user or group set-ID is turned on
for nr in 1 2 3 4 5 6 7 8 9 do
adduser u$nr passwd u$nr < p done
for (( i=1; i<10; i++)) do
adduser u$i passwd u$i < p done
In Datei p steht das Passwort:
student student
Userfunktionen: adduser
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 Beispiel Bildausgabe
Prozesskommandos ps process status
kill process löschen
nice Priorität des Befehls ändern
nohup Kommando kann durch die Signale
− 1: Beenden der Verbindung
− 2: Interrupt-Signal (Del)
− 3: Quit-Signal (<Strg><\>
− 15: kill Befehl
sleep warten
− sleep 13
Befehl prozess ps
• Der Befehl ps listet alle vorhandenen Prozesse auf
ps -A
PID TTY TIME CMD
1 ? 0:28 init
78 ? 0:26 syslogd 187 ? 3:53 ilmid 271 ? 1:47 nsd
272 ? 0:00 rpcbind
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 / cd /
• ls -R ls& -R
Prozesspriorität
Linux verwaltet die Rechenzeit bzgl. der Prozesse im Timesharing Verfahren
Prozess 1
Umschaltung
Prozess 2 P 1 Prozess 3 Prozess 1
Prozesspriorität
Grundprioritäten der Prozesse:
Schedulerprozess 70-100 Systembereich 30-70
Anwender 0-30
Priorität = f(Grundpriorität, passive Zeit, nice-Wert) Beispiel:
nice -40 cc test.c
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 my=Bash
Gültigkeitsdauer von Variablen
$lage=oben Variable lage wird deklariert mit oben
$echo $lage Wert der Variablen wird referenziert oben Wert der Variablen auf dem Bildschirm
$ bash Aufruf einer Sub-Shell
$ echo $lage Wert der Variablen wird referenziert
Variable lage ist in der Sub-Shell nicht bekannt
$ lage=unten lage wird ein neuer Wert zugewiesen
$ echo $lage Wert der Variablen erneut referenziert unten neuer Wert auf dem Bildschirm
$ exit Abmelden von der Sub-Shell, damit ist die alte Shell aktiv
$ echo $lage erneut wird der Wert referenziert oben der erste Wert ist erhalten geblieben
Gültigkeitsdauer von Variablen
$lage=oben Variable lage wird deklariert mit oben
$echo $lage Wert der Variablen wird referenziert oben Wert der Variablen auf dem Bildschirm
$ export lage die Variable lage wird exportiert
$ bash Aufruf einer Sub-Shell
$ echo $lage Wert der Variablen wird referenziert
Variable lage ist in der Sub-Shell nicht bekannt
oben durch den Export der Variablen an die Sub-Shell übergeben
$ lage=unten lage wird ein neuer Wert zugewiesen
$ echo $lage Wert der Variablen erneut referenziert unten neuer Wert auf dem Bildschirm
$ exit Abmelden von der Sub-Shell, damit ist die alte Shell aktiv
Umgebungsvariablen einer Shell
Variable Bedeutung typischer Wert
HOME Home-Directory des Benutzers /home/otto PATH Anzahl von Directories zur
Kommandosuche
/bin:/usr/bin:/etc CDPATH Anzahl von Directories für das
Kommando cd
~/verz1:~/labor PS1 1. Promptzeichen $ oder # "$\PWD> "
PS2 2. Promptzeichen > "weiter> "
MAIL Pfad zum elektronischen Briefkasten /usr/spool/mail/otto IFS Separatorzeichen für Kommandozeile TAB, NL,
Leerzeichen
TZ Zeitzone MEZ-
1MESZ,3.2.0,9.2.0 SHELL Pfadname der aktiven Shell /bin/bash
RANDOM Anzeige einer Zufallszahl 0 bis 32767
Positionsparameter als Variable
Positionsparameter Bedeutung
$# Anzahl der Argumente ohne
kommandoname
$0 Name des Kommandos
(kommandoname)
$1 1. Argument nach dem
Kommandoname
: :
$9 9. Argument nach dem
Kommandoname
$@ alle Argumente ohne Kommandoname
$* alle Argumente ohne Kommandoname
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 ?!
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:
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
Apostrophierung:
echo guten morgen
echo eins zwei drei echo * wie gehts? *
echo '* wie gehts? *'
echo 'Pfadvariable: $PATH'
echo "Pfadvariable: $PATH, UID: $uid, GID: $gid"
IFS und die Apostrophierung:
•
Diese Variable bestimmt die Trennung der Parameter
•
IFS definiert die möglichen Trennzeichen
echo IFS Variable IFS wird ausgewertet
echo "IFS" Inhalt angezeigt, nur Variablenersetzung IFS= %:,
IFS=“_%:," Korrekte Definition: (Blank % ,) e1="1111 3333 5555"
echo $e1 ⇒ 1111 3333 5555
IFS=",%:" Trennzeichendefinition
echo $e1 ⇒ 1111 3333 5555
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
Ausgabe mit echo:
Zusätzliche Sonderzeichen:
Darstellung ASCII-Code Bedeutung
\a 7 Piepston
\b 8 Backspace
\c ? Ausgabe beenden ((Bash), Kornshell)
\f 12 Form Feed (Neue Seite)
\n 10 Zeilenvorschub
\r 13 Carriage Return (Wagenrücklauf)
\t 9 Tabulator
\v 11 Vertikaltabulator
\\ 92 Backslash
\0xxx xxx Zeichen mit ASCII-Code
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
Shell Sonderzeichen
Kommentar: #
–
print "Guten Morgen" # Kommentar
–
print # "Guten Morgen" # Kommentar
Folgezeile: \
–
print Dieses Komman\
do ist über meh\
rere Zeilen verteilt
Start: Strg+q
Start / Stop Strg+s
Shellende Strg+d
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
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: ?
-n Kein Zeilenumbruchzz ?
-t Ersetzen SonderzeichenEinlesen mit read:
Ausgabe eines Zusatztextes:
echo Eingabe read xx
echo -n Eingabe // Kein Zeilenumbruch read xx
echo -n "Eingabe: " // Kein Zeilenumbruch
read xx
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)
Alphabetische Vergleiche:
Abfrage
if [[ abc < abs ]]
if [ [ abc > abcd ]]
if [ [ 123 < 147 ] ] if [ [ 123 < 0147 ] ] if [ [ 0815 > 3 ] ] if [ [ 12345 <77 ] ]
wahr / falsch
# wahr
# falsch
# wahr
# falsch
# falsch
# wahr
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
Arithmetische Vergleiche:
Abfrage Bedeutung
$x -lt $y x ist kleiner als y
$x -le $y x ist kleiner oder gleich als y
$x -eq $y x ist gleich als y
$x -ne $y x ist ungleich als y
$x -gt $y x ist größer als y
$x -ge $y x ist größer oder gleich als y Beispiel:
if [ $x -lt $y ] then
Kontrollstrukturen:
Bedingte und einfache Fallunterscheidungen
if bedingung then
kommando_1a kommando_1b kommando_1c else
kommando_2a kommando_2b fi
if bedingung then
kommando_1 else
kommando_2
fi
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
Beispiele Bash:
typeset [-afFirtx] [-p] name[=value]
declare [-afFirtx] [-p] name[=value]
typeset -i k # Integervariable k
typeset -i k m n # Integervariable k, m, n
-a # Explizite Definition eines Arrays
-f # Use function name only
-r # Variablen sind readonly
-t # Erhält trace-Attribut (Debug)
-x # Export
-p # Anzeige aller Variablen und Namen -F # Verhindert die Anzeige der Funktions-
definitionen
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)
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> datei existiert und Eigentümer User -G <datei> datei existiert und Eigentümer Group -L <datei> datei existiert und ist symbolischer Link -S <datei> datei existiert und ist Socket
-N <datei> datei existiert und wurde nach dem letzten Lesen
geändert
Dateieigenschaften prüfen
if [ ausdruck datei ]
ausdruck Bedeutung
-d <datei> datei existiert und ist Verzeichnis -f <datei> datei existiert und ist einfache Datei
-h <datei> datei existiert und ist eine symbolische Linkdatei
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> datei existiert und Eigentümer User -G <datei> datei existiert und Eigentümer Group -L <datei> datei existiert und ist symbolischer Link -S <datei> datei existiert und ist Socket
-N <datei> datei existiert und wurde nach dem letzten Lesen
geändert
Dateiabfragen:
datei1 -nt datei2 datei1 ist neuer als datei2 datei1 -ot datei2 datei1 ist älter als datei2 datei1 -ef datei2 datei1, datei2 Links auf
dieselbe Datei
-z string string ist leer (zero)
-n string string ist nicht leer
Beispiel: if [ -n "$sStr" ]
then
Bedingte und einfache Fallunterscheidungen
Beispiele:
If [ -d $1 ] then
echo $1 ist ein Verzeichnis else
echo $1 ist kein Verzeichnis
fi
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.
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
Wahrheitstabellen
$ who | grep guest && write guest < nachricht
Anwesende
User
Kommando1 UND Kommando2
guest Result = 0
⇒ ok
Result = 0 ⇒ ok Kommando wird ausgeführt:
Result = 0 ⇒ ok Kein guest Result = 1
⇒ false
Result ≠ 0 ⇒ nichtok Kommando wird nicht ausgeführt:
Result ≠ 0 ⇒ nichtok
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
schmidt
Result = 0 ⇒ ok Wird nicht gestartet Result = 0 ⇒ ok
Echo wird ausgeführt schmidt Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok Result = 0 ⇒ ok
Echo wird ausgeführt Keiner
von beiden
Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok Echo wird nicht
ausgeführt
Frage: Welche User sind wann angemeldet?
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
Wahrheitstabellen
(who | grep meier) || (who | grep schmidt) || echo “ schmidt und meier"
Welche User sind wann angemeldet und welche Kommandos werden gestartet?
User Kommando1 Kommando2 Komanndo3 ODER
Result = 0 ⇒ ok Wird nicht gestartet Result = 0 ⇒ ok Wird nicht gestartet Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok
Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok
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
schmidt
Result = 0 ⇒ ok Wird nicht gestartet Wird nicht gestartet schmidt Result ≠ 0 ⇒ nichtok Result = 0 ⇒ ok Wird nicht gestartet Keiner
von beiden
Result ≠ 0 ⇒ nichtok Result ≠ 0 ⇒ nichtok Wird gestartet
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
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
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
Arithmetik:
Operatoren:
+ Addition
− Substraktion
* Multiplikation
/ Ganzzahlige Division
% Modulo
+= Addition
− = Substraktion
*= Multiplikation
/= Ganzzahlige Division
%= Modulo
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
Beispiele einer Zählschleife:
Wenn der Positionsparameter $* bzw. alle Parameter verwendet werden soll, wird die Zählschleife wie folgt notiert:
for name in $*
do
kommandoliste done
Feste Schleifenanzahl:
for i in 1 2 3 4 5 6 do
for (( i=1; i<10; i++ )) do
echo $i done
for i in {1,4,5,6,7,11}
for i in {1..5}
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
Whileschleife:
Schleife mit Eingangsbedingung:
while [ Bed ] do
kommandoliste done
Break und Continue ändern die Abarbeitung
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
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
Array
Es gibt einfache Felder und Hashmaps
Notation:
−
x=() leeres Feld
−
x[0]='a'
−
x[1]='b'
−
x=('a' 'b' 'c')
−
echo ${x[1]}
−
echo ${x[@]} alle Elemente
HashMap
Notation:
−
declare –a y leeres HashMap
−
declare –A y 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
Case / Switch Anweisung:
Statt verschachtelter if-Anweisungen erlaubt die Case-Anweisung eine übersichtlichere
Programmierung:
case Bed in
(muster1) kommandoliste
;;
(muster2) kommandoliste
;;
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..
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
;;
Aufruf mit
bash case2 Wollen..
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
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;;
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"
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
{
function list {
ls -aF }
# mainprogram ls > dat1
list
Beispiele für Funktionen
function readname {
echo -n "Bitte einen Namen eingeben:"
read name }
# mainprogram
readname
Beispiele für Funktionen: f1 und f2
typeset –i a b c d e f function add
{
f=$1+$2 echo $f }
# mainprogram add 1 3
a=1
typeset –i a b c d e f function add
{
focal f f=$1+$2 echo $f }
# mainprogram
add 1 3
Beispiele für Funktionen: f3
typeset –i a b c d e function add
{
f=$1+$2 echo $f }
# mainprogram add 1 3
a=1 b=4
add $a $b
Ausgabe
Beispiele:
function readname {
echo -n "Bitte einen Namen eingeben:"
read name }
# mainprogram
readname
Beispiel Funktion ohne Script:
$ function vii
> {
> for p
> do
> echo $p
> done
> }
Aufruf:
$ vii 11 22 33 44 11
22
33
44
typeset –i x temp function readzahl {
echo -n "Bitte eine Zahl eingeben:"
read temp }
# mainprogram readzahl
x=temp
x=x+1
echo $x
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"
Beispiel: Einlesen einer positiven Zahl
function lese {
while true do
read i
if [ $i -gt 0 ] then
break fi
done echo $i }
nr1=lese // fehler
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
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
Vim: Text bearbeiten
O
I_______ixa_______A x ist aktuelle Position o
Befehl Beschreibung
ESC i Fügt Text vor dem aktuellen Zeichen ein ESC I Fügt Text am Zeilenanfang ein
ESC a Fügt Text nach dem aktuellen Zeichen ein ESC A Fügt Text am Zeilenende hinzu
ESC o Fügt eine Zeile unter der aktuellen Zeile ein ESC O Fügt eine Zeile oberhalb der aktuellen ein ESC R Eingabe von Text im Überschreibemodus
Nach der Eingabe eines Textes können Sie mit folgenden Befehlen die
Kursorposition ändern
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
Vim: Ersetzen eines Zeichens
Befehl Beschreibung
ESC r Ersetzt ein Zeichen
ESC c Ändert text, bis ESC bestätigt wird ESC cw Ändert das nächste Wort
ESC cnw Ändert die nächsten n Wörter
Vim: Löschen von Zeichen
Befehl Beschreibung
ESC x Löscht ein Zeichen ESC dw Löscht bis Wortende
ESC db Löscht bis zum Wortanfang ESC dnw Löscht die nächsten n Wörter ESC dd Löscht die Zeile
ESC d0 Löscht bis zum Zeilenanfang
ESC D Löscht bis zum Zeilenende
ESC dg Löscht bis zur letzten Zeile
ESC dlg Löscht bis zur ersten Zeile
Vim: Zwischenspeicher
Befehl Beschreibung
ESC Y Übernimmt eine Textzeile in den Standardpuffer ESC nY Übernimmt n-Textzeilen in den Standardpuffer ESC ybsp Speichern den Textes „bsp“ in den Zwischenpuffer ESC yw Übernimmt das nächste Wort in den Standardpuffer
ESC nyw Übernimmt die nächsten n Wörter in den Standardpuffer ESC dd Übernimmt eine Textzeile in den Standardpuffer und
löscht diese.
ESC ddp Übernimmt eine Textzeile in den Standardpuffer und löscht diese und fügt diese nach der nächsten Zeile wieder ein.
ESC p Wenn der Standardpuffer eine Zeile enthält, wird unter der aktuellen Zeile eine neue Zeile eingefügt und der Inhalt des Standardpuffers eingefügt.
ESC P Wenn der Standardpuffer eine Zeile enthält, wird vor der
aktuellen Zeile eine neue Zeile eingefügt und der Inhalt
Vim: Dateioperationen
Befehl Beschreibung