103 GNU- und Unix-Kommandos

Einige Übungen zum Themenbereich 103.

103.1 Auf der Kommandozeile arbeiten

Frage 1: Übung: Finden Sie anhand diese Beispiele verschiedene Möglichkeiten heraus, Befehle zu kombinieren. Erklären Sie die Ergebnisse der Kommandoeingaben.

Vorgehensweise:

a) cd und ls nacheinander, ohne Bedingung:
cd /etc; ls *.conf
In der Praxis habe ich das bisher nur in Kombination mit einer subshell benutzt:
( cd /etc; ls *.conf )
b) erst grep ausführen, useradd nur wenn grep nicht erfolgreich:
grep -q '^nutzer15' /etc/passwd || useradd -m nutzer15
c) erst ping, wget nur wenn ping erfolgreich:
ping -c 3 www.heise.de && wget www.heise.de
d) rpm erzeugt ausgabe, grep sucht darin:
rpm -qa | grep samba
e) getent hosts mit Ausgabe von hostname -f als Argument:
getent hosts `hostname -f`
getent hosts $(hostname -f)
f) chown nobody für alle von find gefundenen Pakete ausführen:
find /var -nouser -exec chown nobody {} \;

Frage 2: Übung: Finden Sie anhand dieses Beispiels zu Shell- und Umgebungsvariablen die jeweilige Bedeutung der Kommandos heraus. Erklären Sie die Ergebnisse der Kommandoeingaben.

Vorgehensweise:

variable=42
bash -c 'echo $variable'
export variable
bash -c 'echo $variable'
echo 'export variable1=23' >> /etc/profile
echo 'export variable2=23' >> ~/.bashrc
echo 'export variable3=23' >> ~/.bash_profile
export variable=23
env | grep ^variable

103.2 Textströme mit Filtern verarbeiten

Frage 1: Übung: Finden Sie anhand diese Beispiele verschiedene Möglichkeiten heraus, die Befehle zum Filtern von Textströmen anzuwenden. Erklären Sie die Ergebnisse der Kommandoeingaben.

Vorgehensweise:

a) cat & split
dd if=/dev/urandom of=test.big count=100 bs=1M
split -b14m test.big
cat x?? > test2.big
md5sum test.big test2.big
b) tac
rpm -qa --last | tac
c) nl
nl /etc/init.d/network
d) cut & paste
cut -b28- /var/log/messages | sort
e) paste
Auseinandernehmen:
cut -d: -f1-3 /etc/passwd > spalte1-3
cut -d: -f4- /etc/passwd > spalte4-7
Wieder zusammensetzen
paste -d: spalte1-3 spalte4-7
f) sort
Dateien und Verzeichnisse unter / nach Größe sortiert ausgeben
du -mx / | sort -n
Benutzer nach Benutzernummer sortiert ausgeben:
sort -t : -k 3n -r /etc/passwd
g) uniq
Doppelte Zeilen loswerden:
egrep -v '^#' /etc/httpd/conf/httpd.conf | uniq
Welcher Benutzer hat wie viele Prozesse laufen:
ps -e --no-headers -o user | sort | uniq -c
h) expand
Tabs in Spaces
tr : "\t" < /etc/passwd | cat -T
tr : "\t" < /etc/passwd | expand -t 15,17,23,29,60,80
i) unexpand
Spaces in Tab
unexpand -a <<EOF | cat -T
eins 1
drei 3
fünf 5
sechs 6
sieben 7
acht 8
EOF
Aber nicht:
unexpand -a <<EOF | cat -T
eins 1
drei 3
fünf 5
sechs 6
sieben 7
acht 8
EOF
j) fmt
wget -q -O - www.gnu.org/licenses/gpl-3.0.txt | fmt -w 40
k) pr
wget -q -O - www.gnu.org/licenses/gpl-3.0.txt | pr
l) join
sort -t: -k 3 /etc/group > group
sort -t: -k 4 /etc/passwd > passwd
join -t: -1 4 -2 3 -o 1.1 2.1 passwd /etc/group
Aber:
join -t: -1 4 -2 3 -o 1.1 2.1 passwd /etc/group | wc -l
wc -l /etc/passwd
Wo ist der Rest?
Alternative:
perl -F: -ane 'BEGIN {$GROUPFILE=shift; open GROUPFILE; %h=map {(split /:/)[2,0]} <GROUPFILE> }; print "$F[0]: $h{$F[3]}\n"' /etc/group /etc/passwd
m) head
ps ax | head
n) tail
tail -f /var/log/messages
o) hexdump
dd if=/dev/sda count=1 bs=1M | hexdump | less
p) wc
wget -q -O - www.gnu.org/licenses/gpl-3.0.txt | wc
q) sed
a und b vertauschen:
sed y/ab/ba/ /etc/hosts
subnetz ersetzen:
sed -i s/192.168/10.0/g /etc/hosts
Verzeichnisweit ersetzen:
find -type f -name "*.c" -exec sed -i s/bla/blub/ {} \;
Benutzer nutzer22 aus /etc/passwd entfernen:
sed -e '/^nutzer22/d' /etc/passwd
r) tr
tr abc xyz < /etc/hosts

103.3 Grundlegende Dateiverwaltung


Frage 1: Übung: Finden Sie anhand dieser Beispiele verschiedene Möglichkeiten zur Anwendung von Befehlen für Verzeichnisse heraus. Erklären Sie die Ergebnisse der Kommandoeingaben.

Vorgehensweise:

mkdir Verzeichnis
Verzeichnisanlegen
mkdir -p Verzeichnis/Unterverzeichnis
Unterverzeichnis incl. Verzeichnisanlegen
cd
ins Heimatverzeichnis wechseln
cd Verzeichnis
in Verzeichniswechseln
cd -
in vorheriges Verzeichnis zurück wechseln
cd /
ins oberste Verzeichnis wechseln
cd ..
ein Verzeichnis nach oben wechseln
ls
Verzeichnisinhalt anzeigen
ls -a
Verzeichnis inkl. versteckte Dateien (.Dateien) anzeigen
ls -l
Verzeichnis inkl. Rechte, Größe und Zeit anzeigen
ls -lrt
Verzeichnis inkl. Rechte, Größe und Zeit anzeigen, sortiert nach zuletzt geänderten Dateien
cp Quelle Ziel
Quelle in Verzeichnis Ziel oder in Datei Zielkopieren
cp -a Quelle Ziel
Verzeichnis Quelle incl. Inhalt ins Verzeichnis Zielkopieren, Rechte und Symlinks beibehalten
cp -a Quelle/. Ziel
Verzeichnisinhalt von Quelle ins Verzeichnis Zielkopieren, Rechte und Symlinks beibehalten
mv Quelle Ziel
Quelle in Ziel umbenennen oder nach Verzeichnis Ziel verschieben
rmdir Verzeichnis
Verzeichnis löschen
rm -r Verzeichnis
Verzeichnis incl. Inhalt löschen

Frage 2: Übung: Verwenden Sie diese verschiedene Möglichkeiten zur Anwendung von Befehlen für Dateien. Erklären Sie die Ergebnisse der Kommandoeingaben.

Vorgehensweise:

touch Datei
Datei anlegen, eigentlich: Datumsstempel ändern
ls -l Datei
Datei inkl. Rechte, Größe und Zeit anzeigen
cp Quelle Ziel
Quelle in Verzeichnis Ziel oder in Datei Ziel kopieren
mv Quelle Ziel
Quelle in Ziel umbenennen oder nach Verzeichnis Ziel verschieben
rm Datei
Datei löschen
cat Datei
Inhalt von Datei ausgeben
less Datei
Inhalt von Datei betrachten, beenden mit q
vi Datei
Inhalt von Datei bearbeiten
pwd
Aktuelles Arbeitsverzeichnis

Frage 3: Übung: Verwenden Sie diese verschiedenen Befehle zum Vergleichen von Dateiinhalten / Verzeichnisinhalten. Erklären Sie die Ergebnisse der Kommandoeingaben.

Vorgehensweise:

Vergleichen von Dateiinhalten / Verzeichnisinhalten
a) Vergleichen von Dateien / Verzeichnissen zeilenweise
diff Datei1 Datei2
b) Vergleichen von sortierten Dateien zeilenweise
comm Datei1 Datei2
c) Vergleichen von 3 Dateien / Verzeichnissen
diff3 Datei1 Datei2 Datei3
d) Bytesweises Vergleichen von Dateien
cmp Datei1 Datei2
e) Vergleich anstellen und das Ergebnis in neue Datei stellen
sdiff [ -l ] [ -s ] [ -o output ] [ -w n ] Datei1 Datei2

Frage 4: Übung: Verwenden Sie diese verschiedenen Befehle für aktuellen Benutzer / Benutzerwechsel. Erklären Sie die Ergebnisse der Kommandoeingaben.

Vorgehensweise:

id
zeigt momentan angemeldeten Benutzer an
su
wechselt in den Super-User ( root) ( eingeschränkt empfehlenswert, besser siehe nächste Zeile)
su - <user>
wechselt in den übergebenen Benutzer <user>

103.4 Ströme, Pipes und Umleitungen verwenden

Frage 1: Übung: Verwenden Sie diese verschiedenen Befehle für Ströme, Pipes und Umleitungen. Erklären Sie die Ergebnisse der Kommandoeingaben und die bedeutung der Datei /dev/null.

Vorgehensweise:

a) Ergebnisse in dateien.txt:
find / -mount -name "*.au" > /tmp/dateien.txt
b) Fehlermeldungen unterdrücken:
find / -mount -name "*.au" > /tmp/dateien.txt 2> /dev/null
c) dateien.txt mit touch weiterverarbeiten:
xargs touch < /tmp/dateien.txt
d) Beide Operationen zusammenfassen:
find / -mount -name "*.au" 2> /dev/null | xargs touch
e) Das Selbe mit einer benannten Pipe:
mkfifo pipe
xargs touch < pipe &
find / -mount -name "*.au" 2> /dev/null > pipe
f) Fehlerausgabe und Standardausgabe zusammenfassen:
find / -mount -name "*.au" 2&>1 > /tmp/dateien.txt
g) Umgang mit Leer- und Sonderzeichen in Dateinamen:
find Eigene\ Dateien/ -type f -print0 | xargs -0 chmod a-x
h) Todo: Beispiel für tee
tee ausgabe1 ausgabe2 < /etc/passwd | wc -l
wc -l ausgabe1 ausgabe2

103.5 Prozesse erzeugen, überwachen und beenden

Frage 1: Übung: Verwenden Sie diese verschiedenen Befehle für die Jobverwaltung der bash. Erklären Sie die Ergebnisse der Kommandoeingaben.

Vorgehensweise:

a) Vordergrundprozess anhalten: STRG+z
b) Job in den Hintergrund schieben:
bg
c) Job in den Vordergrund schieben:
fg
d) Jobs anzeigen:
jobs
e) Programm im Hintergrund laufen lassen:
sleep 10 &

Frage 2: Übung: Verwenden Sie diese verschiedenen Befehle für die Prozessverwaltung. Erklären Sie die Ergebnisse der Kommandoeingaben.

Vorgehensweise:

a) Anzeigen aller Prozesse:
ps ax
b) Anzeigen aller Prozesse, incl. Benutzer:
ps aux
c) Anzeige nach eigenem Ermessen:
ps -eo cmd,uname,rsz,cputime,%cpu,state --sort rsz
d) Anzeigen, welche Dateien ein Prozess geöffnet hat:
lsof -p 4711
e) Prozesse baumartig darstellen:
pstree
f) Prozesse nach Ressourcenverbrauch sortiert anzeigen:
top
g) Prozess mit anderer Priorität starten:
nice
h) Priorität eines laufenden Prozesses ändern:
renice
i) Prozessen Signale schicken:
kill -SIGNAL 4711

Frage 3: Übung: Verwenden Sie diese verschiedenen Befehle für Prozessignale. Erklären Sie die Ergebnisse der Kommandoeingaben.

Vorgehensweise:

a) Prozess normal beenden, Daten werden gepeichert:
kill 4711
kill -TERM 4711
b) Prozess sofort beenden, ohne speichern:
kill -KILL 4711
kill -9 4711
c) Prozess bitten, die Konfigurationsdatei neu einzulesen (das funktioniert nur bei den meisten Serverdiensten):
kill -HUP 4711
d) aktuelle Shell informieren, daß sich die Fenstergröße geändert hat
kill -WINCH $$
e) Signal für aktuelle Shell umdefinieren:
trap 'echo bäah!' TERM
kill -TERM $$

Frage 4: Übung: Erzeugen Sie einen Zombie Prozess. Erklären Sie die Ergebnisse der Kommandoeingaben.

Antwort:

sleep 30 &
exec sleep 200

Frage 5: Übung: Verwenden Sie das Kommando 'free' anhand dieses Beispiels und lesen Sie die Erklärungen dazu durch.

Vorgehensweise:

free -m
total used free shared buffers cached
Mem: 503 296 206 0 26 102
-/+ buffers/cache: 167 336
Swap: 1592 0 1592
Hier das ganze mal beschriftet, damit klar ist, wovon ich unten rede:
free -m
total used free shared buffers cached
Mem: (1) (2) (3) (4) (5) (6)
-/+ buffers/cache: (7) (8)
Swap: (9) (10) (11)
1.Die physikalische Menge flüchtigen Speichers, abzüglich dessen, was für den Kernel und dessen Datenstrukturen draufgeht.
2.Der benutzte Speicher, also alles, was für Programme, deren Libraries, Datenhaltung draufgeht. Außerdem der Buffer- und der Pagecache.
3.Unbenutzter Speicher. Niemand hat dort Dinge abgelegt. Der Speicher kann direkt benutzt werden, wenn man welchen braucht. Wobei er u. U. natürlich initialisiert werden sollte
4.Der durch Shared Memory belegte Speicher.
5.Der durch den Buffer-Cache belegte Speicher
6.Der durch den Page Cache belegte Speicher
7.Der belegte Speicher von (2) abzüglich der Summe aus (5) und (6)
8.Der freie Speicher von (3) plus der Summe aus (5) und (6)
9.Die gesamte Menge an Swapspace, die zur Verfügung steht.
10.Der belegte Swapspace
11.Der noch freie Swapspace, also (9) abzüglich (10)
Das bedeutet also, dass im Falle ganz oben insgesamt 167M von Programmen und ähnlichem belegt ist und ich theoretisch 336M zusätzliche belegen könnte. Dann wäre aber der PageCache auf 0 und der Buffer Cache ebenfalls. Da das sehr auf die Performance ginge, würde der Kernel vorher bereits einige Programme, die selten laufen (z. B. ein unbeschäftigter exim oder irgendwelche anderen Daemons, die selten laufen) in den Swap verschieben. Zum schnellen Überblick, wie viel Speicher denn noch frei ist (also eigentlich, wie viel Speicher denn noch nutzbar ist), ist die Zahl unter (8) am besten als Indikator zu gebrauchen.

103.6 Prozess-Ausführungsprioritäten ändern

Frage 1: Übung: Lernen Sie, die Standardpriorität eines neu erzeugten Jobs zu verstehen und zu ändern.

Vorgehensweise:

a) Geben Sie das Kommando 'top' ein und schauen Sie sich an, wo sie die Standardpriorität ablesen können.

Frage 2: Übung: Lassen Sie ein Programm Ihrer Wahl mit einer höheren oder niedrigeren Priorität als im Normalfall laufen. Nutzen Sie dafür das Kommando 'top'.

103.7 Textdateien mit regulären Ausdrücken durchsuchen

Frage 1: Übung: Lassen Sie mit bestimmten Programmen Textdateien mit regulären Ausdrücken durchsuchen. Erklären Sie die Ergebnisse der Kommandoeingaben.

Vorgehensweise:

a) Hilfreich
Kurzbefehl für buntes egrep einrichten:
b) alias g='egrep --colour'
Beispiel
g home /etc/passwd
c) Metazeichen
Diese Übersicht ist nicht vollständig. Vollständige Übersichten gibt es z.B. hier:
man grep
perldoc perlre
d) Anker
^
Zeilenanfang
$
Zeilenende
e) Beispiel
Alle Nutzer mit bash als Shell:
g 'bash$' /etc/passwd
Zeichenauswahl
.
ein beliebiges Zeichen
[aeiou]
Eines der Zeichen a, e, i, o oder u
[^aeiou]
Ein Zeichen, aber nicht a, e, i, o oder u
f) Wiederholungszeichen
?
0 oder 1 mal
*
0 oder mehr mal
+
1 oder mehr mal
{n,m}
mindestens n-Mal, maximal m-Mal
Beispiel
Alle Nutzernamen:
g -o '^[^:]+' /etc/passwd
g) Gruppierung
(samba)
Das Wort samba gruppieren und fangen
Beispiel
sed -n 's/^\([^:]\+\)/\1-test/p' /etc/passwd

103.8 Grundlegendes Editieren von Dateien mit dem vi

Frage 1: Übung: Benutzen Sie die folgenden Beispiele, um den Editor VI, bzw. Vim, in seiner ganzen Bandreite kennenzulernen. Erklären Sie die Ergebnisse der Kommandoeingaben.

a) Überleben mit vi
Befehl
Funktion
i
Einfügemodus
<ESC>
Befehlsmodus
:w
speichern
:q!
beenden ohne speichern
:wq
speichern und beenden
:x
speichern und beenden
b) Weitere Befehle
u
Rückgängig
Strg+r
undo Wiederherstellen
c) Befehle auf Zeilenebene
J
hängt die nächste Zeile an das Ende der aktuellen Zeile an
nJ
hängt n - Zeilen an das Ende der aktuellen Zeile an
d) suchen und ersetzen 1
/
suchen
.. Suchwort eingeben ..
v
visueller modus
.. Suchwort markieren ..
c
markierten text ändern
.. Ersatzwort eingeben
<ESC>
Änderung beenden
n
nächster Treffer
.
letzen Befehl wiederholen
e) copy & paste
yy
Zeile kopieren
dd
Zeile ausschneiden
P
einfügen
vwy
Wort kopieren
yw
Wort kopieren
f) Fortgeschrittene Befehle
Befehl
Funktion
ZZ
speichern & verlassen
:x
speichern & verlassen
g) Suchen und Ersetzen II
Befehl
Funktion
:g/^$/d
Alle Leerzeilen löschen
:%s/suchwort/ersatz/gc
suchen und ersetzen, mit Bestätigung
h) Alternativen
Befehl
SuSE Paket
Debian Paket
Fedora Paket
mcedit
mc
mc
e3ne
e3
e3
aee
aee
i) Nützliche Tips
Dateinamen-Ergänzung a la Tab-Taste
Im Einfügemodus:
Strg+x f
Mehr dazu: vim.org Dokumentation
Mehrere Dateien bearbeiten
vi -o file1 file2
horizontaler Split
(Fenster wechseln mit Ctrl+W Cursortaste)
vi -O file1 file2
vertikaler Split (Dateien nebeneinander)
vi -p file1 file2
Tab-Modus
(Dateitabs wechseln mit gt (goto) - T für rückwärts

TeilnehmerLogin

Wählen Sie eine Sprache

  • Us Uk
  • Nl Nl

LPI Partner Statement

"Seit ihrer Gründung steht die Linux-Magazin Academy für durchdachte sowie technisch und inhaltlich hochwertige Onlinetrainings zu aktuellen Linux- und Open Source-Themen."

LPI-ATP-Logo_a_2009

Testimonials

"Super, bin sehr zufrieden! Hab mir die Videos immer wieder angesehen, was bei einer Präsenzschulung gar nicht ginge!"

"Vielen Dank für den prompten Service, das nenne ich wirkliche Kundenorientierung!"

"Die Kurse sind sehr gut strukturiert, die Trainer sehr kompetent!"

Kundenliste (Auszug)

Bürgerschaft der Freien und Hansestadt Hamburg

Deutsche Post Direkt GmbH

Deutsche Telekom AG

Deutschlandradio

ETH Zürich

Hans-Böckler-Stiftung

Haufe-Lexware Services GmbH

IBM

IDS-Scheer AG

Merck KGaA

RTL interactive GmbH

Ruhr-Universität Bochum

Siemens AG

sipgate GmbH

Universität Hannover