103-gnu-unix-commands

From My Mnemonic Rhyme
Jump to navigation Jump to search

103.1 - Grundlegende Shell Kommandos

Wichtige Begriffe / Kommandos

  • .
  • bash
  • echo
  • env
  • exec
  • export
  • pwd
  • set
  • unset
  • history
  • uname
  • man

Allgemein

  • shell = Schale

Kernel -> Shell <> User

Linux startet meist mit der Bash

  • bash = Bourne again shell

Aufbau eines Kommandos

Ein Kommando hat bis zu 3 verschiedene "Komponenten":

  • Das Kommando ansich (Systembefehl/ausführbare Datei/Script)
  • Optionen
    • (z.B. mount -a #Alles in der fstab einhängen)
    • Sagen einem Programm, wie es sich verhalten soll
  • Argumente (z.B. mount /dev/hda1 /boot #Erste IDE Platte nach /boot mounten)
    • Teilen einem Programm mit, was es verarbeiten soll


Es ist möglich einem Programm sowohl mehrere Optionen, als auch mehrere Argumente zu übergeben!
Die Reihenfolge ist bei den meißen Programmen sogar egal:

mount -o username=tobias,password=hastenichgesehn //server/data /mnt -t smbfs #Samba share auf Server mounten

Übergabe von Optionen

Mehrere gängige Methoden:

tar -xvzf
tar -x -v -z -f
tar --gzip --verbose --extract --file=test.tgz

Kann kominiert werden:

rpm --install -vh /i586/asd.rpm

Umgebungs- und Shellvariablen

Wert->Variable<-Programm

echo $OSTYPE
linux-gnu


Unterschied zwischen Umgebungs- und Shellvariablen

Umgebungsvariablen:

  • Gelten für alle Shells des Users
  • Werden automatisch in alle Subshells exportiert
  • Nur Großbuchstaben verwendet (normalerweise)

Shell-Variablen:

  • keine Vererbung!
  • Müssen in jeder Shell durch den User oder ein Script neu gesetzt werden
  • Standard nur kleinbuchstaben

Konfigurationsdateien für Variablen

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
fi
  • Ist die ERSTE vom System eingelesene Datei wenn sich ein User anmeldet
  • Enthält die este PATH-Anweisung!!!


/etc/bashrc
  • kann von der .bashrc des Users geladen werden
  • Wird beim Start jeder Shell neu eingelesen
  • Keine Neuanmeldung bei Änderungen


~/.bash_profile
  • Wird direkt nach /etc/profile eingelesen
  • Muss nicht vorhanden sein!


~/.bash_login
  • Alternative zu .bash_profile
  • Wird nur dann ausgeführt, wenn .bash_profile nicht extiert
  • Wird wie .bash_profile nur bei der Anmeldung abgearbeitet


~/.profile
  • .profile ist die ursprüngliche Konfigationsdatei der Bash
  • Wird nur dann abgebarbeitet, wenn weder .bash_profile noch .bash_login vorhanden sind


~/.bashrc
  • Die zweite ursprüngliche Konfigurationsdatei der Bash
  • Wird in jedem Fall eingelesen
  • keine Neuanmeldung des Benutzers notwendig
  • Beinhaltet Aliase und Funktionen


~/.bash_logout
  • optionale Datei die beim Logout eingelesen wird
  • z.B. Bildschirm löschen

Anzeigen der aktuell gesetzen Variablen:

set | less

Anzeigen der Umgebungsvariablen:

env | less

Variablen deklarieren

Normal gesetze Variablen werden nicht in Subshells exportiert!

root@mail:~$ x=1337
root@mail:~$ echo $x
1337
root@mail:~$ bash
root@mail:~$ echo $x

root@mail:~$

Die Variable muss für die Subshell exportiert werden!

root@mail:~$ x=1337
root@mail:~$ export x
root@mail:~$ bash
root@mail:~$ echo $x
1337
root@mail:~$

Oder als Einzeiler

root@mail:~$ export x=1337
root@mail:~$ bash
root@mail:~$ echo $x
1337
root@mail:~$

ACHTUNG!: Variablen können nicht in die übergeordnete Shell expotiert werden!!!! BY DESIGN!

Google Book Leseprobe Shell Programmierung
unset:

  • Variablen am Ende (oder auch am Anfang) eines Scripts zurücksetzen
root@mail:~$ unset x
root@mail:~$ echo $x

root@mail:~$

Beliebte Variablen für die Prüfung

  • $HISTSIZE

Anzahl der Zeichen in der Befehlshistory. Wird normalerweise in /etc/profile definiert.+

root@mail:~$ echo $HISTSIZE
500
  • $PS1

Definiert das Aussehen der Prompt

root@mail:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$


\u username \h Hostname @ Als normales Zeichen
Konfiguration normalerweise in /etc/bashrc

  • $?

Enthält das Errorlevel des letzen Kommandos I.d.R 0 Fehlerwerte variieren zwischen den Programmen. Beliebte Werte: 1 - "Default" Fehler 127 - Command not found

  • $1 $2 usw.

Enthalten die Optionen und Argumente die an Programme übergeben werden.

Befehls History / Auto Vervollständigung

  • TAB -> Autovervollstädigung
  • Befehls-History
~/.bash_history

HISTSIZE wird in /etc/profile definiert

  • Befehle wiederholen - pfeil nach oben

Befehls History Commands

  • !! Bang-Bang -> letzes Kommando nochmal
  • !n -> !2 Führt den Befehl #2 in der History aus
  • !-n -> !-2 führt den Vorletzen Befehl aus
  • !<Zeichenkette> tail /var/log/messages -> !ta (Anfangsbuchstaben)
  • ?<Zeichenkette> führt den letzen Befehl aus in dem <Zeichenkette vorkommt>

Befehlseingabe

  • Befehle mit ";" hintereinander hängen
root@mail:~$ df -h;free -m
Filesystem            Size  Used Avail Use% Mounted on
/dev/vzfs             100G  5.5G   95G   6% /
tmpfs                 1.0G     0  1.0G   0% /lib/init/rw
tmpfs                 1.0G     0  1.0G   0% /dev/shm
             total       used       free     shared    buffers     cached
Mem:          2048        695       1352          0          0          0
-/+ buffers/cache:        695       1352
Swap:         2048          0       2048
  • Kommand mit "\" über mehrere Zeilen übergeben
root@mail:~$ echo "Test \
> Test2"
Test Test2
root@mail:~$

Hinter dem Backslash darf KEIN Leerzeichen stehen!

PATH-Variable

  • Ein Programm dessen Ordner NICHT im PATH steht, muss mit dem komletten Pfad aufgerufen werden (.z.B. init Scripts)
  • Aufruf ohne Pfad -> Prüfung ob internes Shell Kommando (echo,fg,bg) -> Prüfung ob in Pfaden PATH Variable
  • Bei gleichen Namen greift die Reihenfolge in der PATH Variable
  • mit which kann geprüft werden welches Programm gestartet wird
root@mail:~$ which less
/usr/bin/less
  • ./script führt das Script im aktuellen Verzeichnis aus (nicht wie bei DOS nur der Name des Scripts)
  • Aktuelles Verzechnis mit pwd anzeigen
  • PATH-Variable mit echo $PATH anzeigen

Rekursive Befehlsausführung

  • Alle Unterordner / Dateien sind betroffen

Beispiele

rm, chmod, chown, chgrp, cp
--recursive
-R

uname

  • Informationen zum laufenden System
  • Genauere Infos über Module
uname -r
2.6.35.8

oder

root@mail:~$ uname -a
Linux mail.tobias-weiss.org 2.6.18-028stab070.14 #1 SMP Thu Nov 18 16:04:02 MSK 2010 x86_64 GNU/Linux

manpages

  • $MANPATH Pfad für man
  • /etc/manpath.config
# manpath.config
#
# This file is used by the man-db package to configure the man and cat paths.
# It is also used to provide a manpath for those without one by examining
# their PATH environment variable. For details see the manpath(5) man page.
  • In den gelisteten Verzeichnissen jeweils Unterordner nach Sektionen
  • manpages in komprimiertem Format -> wird von man entpackt und an den Pager übergeben
  • Temp-Dateien unter /var/cache/man (default) wird per crom von catman bereinigt

manpath

mail:~# manpath
/usr/local/man:/usr/local/share/man:/usr/share/man
mail:~# manpath -c
/var/cache/man/oldlocal:/var/cache/man/local:/var/cache/man
  • -c um das Cache-Verzeichnis zu finden

Sektionen des Mansystems

  • 1 Ausführbare Programme
  • 2 Systemaufrufe
  • 3 Librarys
  • 4 besondere Dateien (/dev)
  • 5 Dateiformate und Konventionen (Konfig)
  • 6 Spiele
  • 7 Sonstiges (Makros & Konventionen)
  • 8 administrative Programme (nur für root)
  • 9 Kernelroutinen
  • A mehrteilige manpages

Aufbau einer Manpage

Name -> Synopsis -> Description -> Defaults -> Overview -> Options -> Return Values -> See also -> Bugs -> Files

Verwandte Befehle whatis & apropos

  • whatis durchsucht das Feld Name aller manpages
mail:~# whatis crontab
crontab (5)          - tables for driving cron
crontab (1)          - maintain crontab files for individual users (Vixie Cron)
  • apropos durchsucht das Feld Description -> Nach bestimmten Aufgaben suchen
mail:~# apropos cron
cron (8)             - daemon to execute scheduled commands (Vixie Cron)
crontab (1)          - maintain crontab files for individual users (Vixie Cron)
crontab (5)          - tables for driving cron

103.2 - Textströme und Filter

Wichtige Begriffe / Kommandos

  • cat
  • cut
  • expand
  • unexpand
  • fmt
  • head
  • od
  • join
  • nl
  • paste
  • pr
  • sed
  • sort
  • split
  • tail
  • tr
  • uniq
  • wc

Allgemein

Es geht darum Texte zu manipulieren (zu filtern). Alle Nachfolgene Tools bieten dafür bestimmte Funktionen

cat

  • concatenate (verketten)
  • Textdatei auf den Bildschirm umleiten
  • -A Tabstops anzeigen (^I)
root@bl01:~$ cat -A test
^I^IAAA$
^I^IBBB$
^I^ICCC$
^I^IDDD$

tac

  • umgedrehtes cat
root@bl01:~$ tac test
                DDD
                CCC
                BBB
                AAA

head

  • zeigt die ersten 10 Zeilen einer / mehrerer Dateien an
  • -n Anzahl der Zeilen
root@bl01:~$ head test
                AAA
                BBB
                CCC
                DDD
root@bl01:~$ head test -n1
                AAA
root@bl01:~$ head test affe -n 1
==> test <==
                AAA

==> affe <==
                AAA

tail

  • zeigt die 10 letzen Zeilen an
  • -n Anzahl der Zeilen
  • -f fortlaufend ausgeben -> Abbrechen mit CTRL+C

expand / unexpand

  • Tabstops in Leerzeichen umwandeln
  • WICHTIG: compress ist nicht das Gegenteil zu expand! sondern ein Komprimierungstool
  • Ausgabe nach stdout -> UMLEITEN!
root@bl01:~$ expand test > test2
root@bl01:~$ cat test2
                AAA
                BBB
                CCC
                DDD
root@bl01:~$ cat test2 -A
                AAA$
                BBB$
                CCC$
                DDD$
  • Standard ist 8 Zeichen = 1 TAB
  • -t ändert diesen Wert
root@bl01:~$ expand test > test3 -t 2
root@bl01:~$ cat test3 -A
    AAA$
    BBB$
    CCC$
    DDD$
	
root@bl01:~$ expand test > test4 -t 0
expand: tab size cannot be 0

root@bl01:~$ unexpand test4 -t 1
                AAA
                BBB
                CCC
                DDD

fmt

  • entfernt automatisch Zeilenumbrüche
  • -w (width) gibt die Breite des Texts in Zeichen an
root@bl01:~$ fmt test
AAA BBB CCC DDD

root@bl01:~$ fmt test -w 8
AAA BBB
CCC DDD

nl

  • number lines -> nummeriert Zeilen
  • WICHTIG: nicht zu Verwechseln mit ln !!! ln erzeugt Links auf Dateien
root@bl01:~$ nl test > test5
root@bl01:~$ cat test5
     1  AAA
     2  BBB
     3  CCC
     4  DDD

TÖDLICH!:
root@bl01:~$ nl test > test 5
nl: 5: No such file or directory

pr

  • Dateien für den Druck vorbereiten
  • -h use a centered HEADER instead of filename in page header
  • Ebenfalls Umlenkung notwendig!
root@bl01:~$ pr -h Printtest test > test_print
root@bl01:~$ cat test_print


2011-04-30 11:25                    Printtest                     Page 1


AAA
BBB
CCC
DDD
...

wc

  • word count
  • Anzahl der Zeilen, Wörter und Bytes
  • Standardmäßig zählt wc alle 3 Werte in der obigen Reihenfolge
root@bl01:~$ wc test
 4  4 16 test
  • -c zeigt nur die Bytes an
  • -l zeigt nur die Zeilen (lines) an
  • -w zeigt nur die Anzahl der Wörter an
  • -m zeigt nur die Anzahl der Zeichen an
root@bl01:~$ wc test -m
16 test

hexdump

  • Daten in hexadezimal, dezimal, ASCII oder als Oktaldump dargestellt
  • kann Binärdateien einlesen
  • es lässt sich zu ziehmlich alles einlesen
  • u.a. die Partitionstabelle:
bl01:~#  hexdump /dev/sda | head -n 32 | tail -n 5
00001b0 0000 0000 0000 0000 bcc2 0004 0000 0180
00001c0 0001 fe83 ffff 003f 0000 11a3 0309 fe00
00001d0 ffff fe05 ffff 11e2 0309 cc1d 0016 0000
00001e0 0000 0000 0000 0000 0000 0000 0000 0000
00001f0 0000 0000 0000 0000 0000 0000 0000 aa55
  • Mit Head werden die ersten 32 Zeilen einelesen
  • 32 Zeilen * 16 Byte = 512 Byte = Größe des MBR
  • Mit tail -n 5 werden nur die letzen 5 Zeilen ausgegeben

od

  • octal dump
  • ähnelt vom Verwendungszweck hexdump
  • weniger Funktionsumfang
  • per default Octalformat
  • -x stellt die Ausgabe auf hexadezimal um
bl01:~# od /dev/sda | head -n 32 | tail -n 5
0000660 000000 000000 000000 000000 136302 000004 000000 000600
0000700 000001 177203 177777 000077 000000 010643 001411 177000
0000720 177777 177005 177777 010742 001411 146035 000026 000000
0000740 000000 000000 000000 000000 000000 000000 000000 000000
0000760 000000 000000 000000 000000 000000 000000 000000 125125
bl01:~# od /dev/sda -x | head -n 32 | tail -n 5
0000660 0000 0000 0000 0000 bcc2 0004 0000 0180
0000700 0001 fe83 ffff 003f 0000 11a3 0309 fe00
0000720 ffff fe05 ffff 11e2 0309 cc1d 0016 0000
0000740 0000 0000 0000 0000 0000 0000 0000 0000
0000760 0000 0000 0000 0000 0000 0000 0000 aa55

sort

  • Zeilen von Textdateien sortieren
  • -n sortiert nach numerischen Kriterien
  • -o outfile, sort gibt normalerweise nach stdout aus!
  • -r reverse, invertiert die Ausgabe
  • Andere Eingabequellen sind auch gut möglich, z.B.
bl01:~# mount | sort
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
udev on /dev type tmpfs (rw,mode=0755)

bl01:~# mount | sort -o test -r
bl01:~# cat test
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
proc on /proc type proc (rw,noexec,nosuid,nodev)
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)

uniq

  • Wiederholende Zeilen entfernen
  • Die Zeilen müssen aufeinander folgen
  • Falls die Duplikate nicht hintereinander sind sort vorschalten
bl01:~# cat test
AA
BB
AA
BB
AA
BB
bl01:~# sort test | uniq > test2
bl01:~# cat test2
AA
BB

split

  • Splittet mehrere große Dateien in eine kleine
  • arbeitet per default zeilenorientiert
  • ohne Parameter wird die Datei in Stücke je 1000 Zeilen unterteilt
  • -b gibt die Größe an (100m 100k)
  • mit cat die Dateien wieder zusammenfügen
bl01:~# split -b 100k rkhunter.log rkhunter.log_
bl01:~# ls -l
-rw-r----- 1 root root 268894 Apr 30 12:11 rkhunter.log
-rw-r--r-- 1 root root 102400 Apr 30 12:12 rkhunter.log_aa
-rw-r--r-- 1 root root 102400 Apr 30 12:12 rkhunter.log_ab
-rw-r--r-- 1 root root  64094 Apr 30 12:12 rkhunter.log_ac
bl01:~# rm rkhunter.log
bl01:~# cat rkhunter.log_a* > rkhunter.log
bl01:~# ls -l
-rw-r----- 1 root root 268894 Apr 30 12:15 rkhunter.log
-rw-r--r-- 1 root root 102400 Apr 30 12:12 rkhunter.log_aa
-rw-r--r-- 1 root root 102400 Apr 30 12:12 rkhunter.log_ab
-rw-r--r-- 1 root root  64094 Apr 30 12:12 rkhunter.log_ac

cut, paste und join

  • oft miteinander kombiniert
  • Beispieldateien
bl01:~# cat test
1:Affe
2:Esel
bl01:~# cat test2
1:Hans
2:Wurst

cut

  • Spalten einer Datei ausschneiden
  • Ausgabe nach stdout
  • -d delimiter Trenner
  • -f2 steht für field 2
bl01:~# cut -d: test -f2
Affe
Esel

cat test | cut -c 1-3
  • Normalerweise würde man einen Redirector benutzen

paste

  • mehrere Dateien zusammenführen
  • NICHT untereinander, sondern NEBENEINANDER
bl01:~# paste test test2
1:Affe  1:Hans
2:Esel  2:Wurst
  • unschöne doppelte Nummerierung

join

  • kann ebenfalls Textdateien verknüpfen
  • -t Delimiter
  • -j gemeinsamer Nenner
bl01:~# join -t : -j 1 test test2
1:Affe:Hans
2:Esel:Wurst

tr

  • translate - einzelne Zeichen ersetzen oder löschen
  • Übergabe der Datei nur per cat möglich
  • -d --delete löscht das angegebene Zeichen
  • -c --complement kehrt die Ausgabe ins Gegenteil um
  • -s --squeeze-repeats unterdrückt sich wiederholende Zeichen
cat infile | tr -cs "[:alnum:]" "\n" | sort | uniq -c | sort -rn


bl01:~# cat test | tr A X
1:Xffe
2:Esel

bl01:~# cat test | tr -d A
1:ffe
2:Esel

bl01:~# cat test | tr -s f x
1:Axe
2:Esel
  • Übersetzung aller Buchstaben
bl01:~# cat test | tr a-z A-Z
1:AFFE
2:ESEL
bl01:~# cat test | tr [:lower:] [:upper:]
1:AFFE
2:ESEL


  • [:alnum:] Buchstaben und Zahlen
  • [:alpha:] Buchstaben
  • [:blank:] Spaces und Tabstops
  • [:cntrl:] alle Steuerzeichen
  • [:graph:] alle druckbaren Zeichen ohne Spaces
  • [:upper:] alle Großbuchstaben
  • [:lower:] alle Kleinbuchstaben
  • [:print:] alle druckbaren Zeichen inklusive Spaces
  • [:punct:] alle Satzzeichen
  • [:space:] alle Whitespaces (Space, Tabstops)


  • einzelne Steuerzeichen mit vorangehendem Backslash
  • gilt vorallem für \ selbst -->
  • \\ schütz den Backslash
  • \NNN ASCII-Zeichen in Oktalschreibweise
  • \a audiobell -> gibt einen Piepston aus
  • \b Platzhalter für backspace
  • \f bezeichnet das form-feed Zeichen (Seitenumschalter)
  • \n new line
  • \r return
  • \t horizontal tab
  • \v vertical tab


Wikipedia - Steuerzeichen

  • Folgendes Script entfernt alle Audiotöne
cat script-laut | tr -d \a >script-leise

103.3 - Dateiverwaltung

Wichtige Begriffe / Kommandos

  • cp
  • find
  • mkdir
  • mv
  • ls
  • rm
  • rmdir
  • touch
  • tar
  • cpio
  • dd
  • file
  • gzip
  • gunzip
  • bzip2
  • Dateisuchmuster

Allgemein

Es geht darum grundlegende Befehle des Dateimanagements und deren Optionen zu kennen. Wildcards sind auch sehr wichtig!

ls

  • Listet Inhalt von Verzeichnissen auf
  • -l Listingformat
  • -i Inodes
  • -a auch Dateien mit einem .
  • -s zeigt in Kombination mit -l die Größe der Datei in Blocks an
  • -h human readable

cd und pwd

  • cd In ein Verzeichnis wechseln - relativ und absolut
  • pwd zeigt das aktuelle Verzeichnis an

Die Tilde

~ stellt das Heimatverzeichnis dar

  • cd ohne Argumente wechselt auch ins Heimatverzeichnis

Absolute Pfadangaben

= der komplette Pfad /var/log/syslog

Relative Pfadangaben

= relativ zum aktuellen Verzeichnis

Punkte

  • .. steht für das übergeordnete Verzeichnis
  • . steht für das aktuelle Verzeichnis

cp

  • Dateien und Verzeichnisse kopieren
  • benötigt immere Quelle und Ziel
  • das LETZTE Argument ist immer das Ziel
  • relative oder absolute Pfade möglich
  • Ziel kann sowohl Verzeichnis als auch Datei sein (wenn nur eine Quelle)
  • -i --interactive verhindert automatisches überschreiben
  • -f --force erzwingt den Schreibvorgang
  • -p --preserve Beibehaltung der Berechtigungen
  • -R -r --recursive kopiert rekursiv

mv

  • verschiebt Dateien und Verzeichnisse
  • benötigt immere Quelle und Ziel
  • -u --update verschiebt die Datei nur, wenn die auf dem Ziel exisitierende älter ist als sie selbst
  • -i --interactive fragt nach, ob überschrieben werden soll
  • -f --force

mkdir

  • erstellt Verzeichnisse

rm

  • löscht Dateien (und Verzeichnisse)
  • -R --recursive löscht ein Verzeichnis und alle enthaltenen Dateien / Verzichnisse
  • -i --interactive fragt bei jeder Datei nochmals nach
  • -f --force

rmdir

  • löscht Verzeichnisse
  • -p löscht ünergeordnete Verzeichnisse, falls diese dann leer sind

touch

  • ändert den Timestamp einer Datei / legt leere Dateien an
  • -t [CCYYMMDDhhmmss] einen Wert setzen
  • -a letze Zugriffszeit
  • -m letze Änderungszeit

find

sucht nach Dateien in einer Verzeichnisstruktur

find / -name textfile

Verwendung von Wildcards

  • Wildcards werden durch die Shell interpretiert
  • * ersetzt NULL oder mehr zeichen
  • ? ersetzt genau ein Zeichen
  • [a-z] ersetzt ein einzelnes Zeichen durch die ganze Range
  • [asd] ersetzt die angegeben Zeichen
  • [!a] einen Bestimmten Bereich ausschließen
mail:/home/homaar# ls az[az]
aza  azz
mail:/home/homaar# ls az[a-z]
aza  azf  azz
mail:/home/homaar# ls az[!a]
azf  azz

tar Tape Archiver)

  • Optionen können OPTIONAL mit oder ohne Strich übergeben werden!
  • sowohl -x --gunzip und -gunzip möglich!
  • -c --CREATE
  • -x --extract
  • -z --gunzip
  • -j --bzip2
  • -t --table
  • -f --file (Gibt an, dass mit einer Datei gearbeitet wird. Default: /dev/rmt0)
mail:/~# tar -tvf file.tar
-rw-r--r-- root/root     11829 2011-04-07 14:18 file

mail:/~# tar -c -v -gunzip --file test.tgz az*
...
mail:/~# tar -cv -j --file test.tbz2 az*
...
mail:/~# tar -c -v -z --file test.tgz az*
az
aza
azam
azf
azz

mail:/~# tar --create --verbose -gunzip -file test.tgz test

gzip

  • komprimiert Archive
  • -c Orginaldatei beim Komprimieren erhalten
  • -l Inhalt eines Archivs auflisten
mail:/~# tar -cvf test.tar test
mail:/~# gzip test.tar -c > test.tar.gz ## !!! gzip test.tar -c einfach so funktioniert NICHT!!!
mail:/~# ls -l | grep test
-rw-r--r-- 1 root   root          0 May  8 08:30 test
-rw-r--r-- 1 root   root      10240 May  8 08:38 test.tar
-rw-r--r-- 1 root   root        114 May  8 08:38 test.tar.gz

gunzip

  • entkomprimieren von Archiven / Dateien
  • gzip -d (decompress)hat den gleichen Effekt
  • zcat verhält sich wie gunzip -c
       -c --stdout --to-stdout
              Write  output on standard output; keep original files unchanged.
              If there are several input  files,  the  output  consists  of  a
              sequence  of  independently compressed members. To obtain better
              compression, concatenate  all  input  files  before  compressing
              them.

       -d --decompress --uncompress
              Decompress.


       -l --list
              For each compressed file, list the following fields:

                  compressed size: size of the compressed file
                  uncompressed size: size of the uncompressed file
                  ratio: compression ratio (0.0% if unknown)
                  uncompressed_name: name of the uncompressed file

              The uncompressed size is given as -1 for files not in gzip  for-
              mat,  such  as compressed .Z files. To get the uncompressed size
              for such a file, you can use:

                  zcat file.Z | wc -c

...

       zcat  is  identical  to  gunzip  -c.   (On  some  systems,  zcat may be
       installed as gzcat to preserve the original link  to  compress.)   zcat
       uncompresses either a list of files on the command line or its standard
       input and writes the uncompressed data on standard output.   zcat  will
       uncompress files that have the correct magic number whether they have a
       .gz suffix or not.

bzip2

  • komprimiert stärker als gzip, brauch länger
mail:/~# bzip2 test -c > test.bz2
mail:/~# ls -l | grep test
-rw-r--r-- 1 root   root          0 May  8 08:30 test
-rw-r--r-- 1 root   root         14 May  8 08:54 test.bz2

bunzip2

  • entkomprimierung von bz2 Dateien
  • bunzip2, bzip -d, bzcat sind analog zu gzip

cpio

  • Dateien in Archive hinein und/oder heraus kopieren
  • drei verschiedene Betriebsmodi
    • hängt von der ersten übergebenen Option ab
    • "Copy-in-Modus"
      • cpio -i | --extract
      • Dateien aus einem Archiv in das Dateisystem kopieren
      • -i In das Dateisystems kopieren!
    • "Copy-out-Modus"
      • cpio -o | --create
      • das Gegenteil von -i
      • Dateien aus dem Dateisystem in ein Archiv kopieren
    • "Passtrough-Modus"
      • cpio -p |--pass-trough
      • Liest stdout ein und speichert die Ausgabe in eine Datei

http://de.wikipedia.org/wiki/Cpio

#Listet den Dateiinhalt auf ohne zu extrahieren
[root@rhel ~]# cpio -it < net-snmp-5.5-27.el6_0.1.x86_64.cpio
./etc/rc.d/init.d/snmpd
./etc/rc.d/init.d/snmptrapd
./etc/snmp
./etc/snmp/snmpd.conf
    • -d, --make-directories Create leading directories where needed.
    • -i, --extract Run in copy-in mode. see Copy-in mode.
    • -m, --preserve-modification-time Retain previous file modification
      times when creating files.
    • -v, --verbose List the files processed, or with â-tâ, give an âls -lâ
      style table of contents listing.  In a verbose table of contents  of  a
      ustar archive, user and group names in the archive that do not exist on
      the local system are replaced by the names that correspond  locally  to
      the numeric UID and GID stored in the archive.

dd

  • Dateien kopieren oder konvertieren
  • Dateien von einem Datenträger lesen und auf einen anderen mit veränderter Blockgröße schreiben
  • dd liest und schreibt per default nach STDIN/STDOUT
dd bs=4M if=2017-04-10-raspbian-jessie.img of=/dev/sdX status=progress

MBR Sicherung & dd_rescue

dd if=/dev/sdb of=/alix.bnv-re.img count=1 bs=446
dd_rescue /dev/sdb1 /alix.bnv-re.img
dd_rescue /path/to/alix.sda1.img /dev/sdb1
dd if=/path/to/alix.MBR.img of=/dev/sdb count=1 bs=446
root@bt:/~# dd
test
test
0+2 records in
0+1 records out
5 bytes (5 B) copied, 9.01088 s, 0.0 kB/s
  • problemlos Daten 1zu1 kopieren
  • es sollten identische Festplatten verwendet werden
root@bt:/~# dd if=/dev/sda2 of=/home/asd/test.dd
204800+0 records in
204800+0 records out
104857600 bytes (105 MB) copied, 18.509 s, 5.7 MB/s

Sichern des Master Boot Record mittels dd

  • ibs steht für "in block size" -> der gelesene Block ist so groß wie angegeben
  • count gibt die Anzahl der zu lesenden Blöcke an
root@bt:/~# dd if=/dev/sda of=/home/asd/mbr.dd ibs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00011242 s, 4.6 MB/s

dd auf Streamer

http://de.wikipedia.org/wiki/Bandlaufwerk

  • Sichert auf den ersten SCSI-Streamer
  • Spult das Band anschließend zurück
  • cbs gibt die Blockgröße an
dd if=/home of=/dev/st0 cbs=16b

file

root@bt:/home/homaar# file /pentest/exploits/framework3/msfd
/pentest/exploits/framework3/msfd: a ruby script text executable

103.4 - Ströme, Pipes und Umleitungen

Wichtige Begriffe / Kommandos

  • tee

Allgemein

  • pipe -> Verkettung von Programmen
  • Die Ausgabe von Programm1 muss nicht zwischengespeichert werden


  • Wenn die Standardeingabe normalerweise die Tastatur ist, so muss die Ausgabe umgeleitet werden
  • Man spricht von einem Redirect

stdin, stdout und stderr

  • die 3 sog. Standard-I/Os
  • gibt es bei jedem Linux Programm
  • stdin
    • Standardeingabekanal
    • normalerweise die Tastatur
    • Programme die Dateien als Input benötigen benutzen stdin nicht
  • stdout
    • Standardausgabekanal
    • normalerweise ein Terminal
    • viele Programme verwenden stdout für ihre Ausgabe
  • stderr
    • Standardfehlerkanal
    • vom Verhalten wie stdout
    • erfolgt normalerweise auch auf ein Terminal
    • kann in ein separates Errorlog umgeleitet werden

Umleitungen (Redirects)

  • Standard-I/Os in eine Datei / aus einer Datei heraus umlenken
  • z.B. dann erforderlich, wenn man einem Programm keine Dateien als Argumente übergeben kann
  • oder das syslog per grep filtern und die Ausgabe in eine Datei umleiten
tail /var/log/syslog > test


  • Die Ausgabe und die Fehlerausgabe in unterschiedliche Dateien speichern:
script 2>error.log 1>status.log
  • 2>&1 leitet stderr auf stdout um
  • Das & besagt, dass es keine Datei ist - ohne & würden die Fehler in die Datei "1" umgeleitet werden
script 1>status.log 2>&1


  • Standardeingabekanal umleiten
mail -s "Test" spam@tobias-weiss.org < /var/log/messages

Zusammenfassung

  • Standardausgabe umlenken
    • Kommando > Ziel (überschreibend)
    • Kommando 1> Ziel (überschreibend)
    • Kommando >> Ziel (anhängend)
    • Kommando 1>> Ziel (anhängend)
  • Standardfehlerkanal umlenken
    • Kommando 2> Ziel (überschreibend)
    • Kommando 2>> Ziel (anhängend)
  • Fehler- und Ausgabekanal umlenken
    • Kommando > Ziel 2>1& (gemeinsame Zieldatei)
    • Kommando 1> Ziel1 2>Ziel2 (getrennte Zieldatei)
  • Standardeingabe umlenken
    • Kommando < Quelle

Pipes

  • Ausgabe eines Programms direkt als Eingabe für das nächste Programm
  • Beispielprogramme: tr, cat, less
root@bt:/proc# cat interrupts | less
root@bt:/proc# cat txtfile | tr \n \r > txtfile2

tee

  • vergleichbar mit einem "T-Stück"
  • Ausgabe auf die Konsole UND in eine Textdatei umleiten
#Gibt die Ergebnisse aus und schreibt sie in eine Datei
grep pppd /var/log/messages | tee pppdmessages

xargs

  • Mehrzeilige Ausgabe als Einzeiliges Argument übergeben
#cut isoliert die erste Spalte, sort (sortieren), uniq(jede IP nur 1 Mal), Übergabe an host zur Namensauflösung (einzeln) 

mail:~# cut -d " " -f1 /var/log/apache2/access_wiki.tobias-weiss.org.log |sort | uniq | xargs -n1 host

102.71.125.123.in-addr.arpa domain name pointer baiduspider-123-125-71-102.crawl.baidu.com.
186.71.249.66.in-addr.arpa domain name pointer crawl-66-249-71-186.googlebot.com.
46.72.249.66.in-addr.arpa domain name pointer crawl-66-249-72-46.googlebot.com.
105.181.112.95.in-addr.arpa domain name pointer stgt-5f70b569.pool.mediaWays.net.

103.5 - Prozesse erzeugen, überwachen und beenden

Wichtige Begriffe / Kommandos

  • &
  • bg
  • fg
  • jobs
  • nohup
  • ps
  • top
  • free
  • uptime
  • killall

Allgemein

  • Jedes Programm besteht aus mindestens einem Prozess
  • Prozesse sind in Baumhierarchie angeordnet
  • init ist die "Wurzel" aller Prozesse
  • init startet beim Systemstart als erstes und wird beim beenden als letzes gestoppt
  • init hat immer PID1. PID0 gibt es NICHT!
mail:~# ps -A | head -4
  PID TTY          TIME CMD
    1 ?        00:05:21 init
 1756 ?        00:00:09 apache2
 3721 ?        00:00:31 miniserv.pl

Überwachen von Prozessen

ps

  • aktuell laufende Prozesse anzeigen
  • Momentaufnahme
  • Programme mit kurzer Lebensdauer (z.B. df) sind per ps nicht darstellbar!
  • Übergabe von Optionen mit und ohne "-" möglich
-A              Select all processes. Identical to -e.

-a              Select all processes except both session leaders (see
                getsid(2)) and processes not associated with a
                terminal.

-C cmdlist      Select by command name.
                This selects the processes whose executable name is
                given in cmdlist.

mail:~# ps -C amavisd-new
  PID TTY          TIME CMD
25992 ?        00:00:00 amavisd-new
25996 ?        00:00:00 amavisd-new
25997 ?        00:00:00 amavisd-new

-T              Select all processes associated with this terminal.
                Identical to the t option without any argument.

-U userlist     select by real user ID (RUID) or name.
                It selects the processes whose real user name or ID is
                in the userlist list. The real user ID identifies the
                user who created the process, see getuid(2).

-u userlist     Select by effective user ID (EUID) or name.
                This selects the processes whose effective user name or
                ID is in userlist. The effective user ID describes the
                user whose file access permissions are used by the
                process (see geteuid(2)). Identical to U and --user.

-x              Führt auch Prozesse auf die nicht mit dem Terminal verbunden sind

mail:~# ps aux | head -3
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   8348   804 ?        Ss   Apr04   5:21 init [2]

bl01:~# ps -A | grep apache
 1150 ?        00:00:00 apache2
 1287 ?        00:00:00 apache2
 1288 ?        00:00:00 apache2

pstree

  • Baumdiagramm uas ASCII-Zeichen
  • Hierarchie der Prozesse
init-+-amavisd-new---2*[amavisd-new]
     |-apache2---6*[apache2]
     |-clamd---{clamd}
     |-cron
     |-dbus-daemon
     |-freshclam
     |-inetd
  • -a zeigt zusätzliche Optionen und Argumente an
  • -G VT100 Modus
init(1)-+-apache2(1756)-+-apache2(5328)
        |               |-apache2(16234)
        |               |-apache2(19479)
        |               |-apache2(19480)
        |               |-apache2(24332)
        |               `-apache2(28529)
        |-miniserv.pl(3721)-+-miniserv.pl(23972)---create_vpn.cgi(23973)
        |                   `-miniserv.pl(26584)---create_vpn.cgi(26585)
        |-snmpd(3759)
        |-portmap(7294)
        |-syslogd(7404)
  • -p zeigt die PIDs an
  • -n Sortierung nach PIDs (Default alphabethisch)
mail:~# pstree -pn
init(1)-+-apache2(1756)-+-apache2(5328)
        |               |-apache2(16234)
        |               |-apache2(19479)
        |               |-apache2(19480)
        |               |-apache2(24332)
        |               `-apache2(28529)
        |-miniserv.pl(3721)-+-miniserv.pl(23972)---create_vpn.cgi(23973)
        |                   `-miniserv.pl(26584)---create_vpn.cgi(26585)
        |-snmpd(3759)
        |-portmap(7294)
        |-syslogd(7404)

top

  • laufende Prozesse in Echtzeit überwachen
  • allgemeine Informationen: Uhrzeit, Uptime, User, Systemlast
  • Tasks: Prozesse gesamt, laufende / schlafende Prozesse, gestoppte Prozesse, Zombie-Prozesse
  • CPU(s): Last (Benutzer- / Systemprozesse), Idle-Prozess
  • MEM: Speicher gesamt, Verwendung, freier Speicher
  • Swap: Info zur Verwendung der Swap(s)
  • Auflistung der laufenden Prozesse in Reihenfolge der CPU-Verwendung
  • Interaktivprozesse in Reihenfolge der PIDs
  • top selbst benötigt auch Systemressourcen!
top - 21:12:22 up  1:25,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  85 total,   1 running,  84 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.2%sy,  0.0%ni, 98.5%id,  0.9%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    254744k total,   237804k used,    16940k free,    47636k buffers
Swap:   746980k total,      388k used,   746592k free,   114000k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0  2032  664  608 S  0.0  0.3   0:01.51 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    6 root      20   0     0    0    0 S  0.0  0.0   0:00.05 events/0
    7 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cpuset
    8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper
    9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns
  • Man kann top sowohl beim Aufruf als auch zur Laufzeit Optionen übergeben
Wichtige Interaktivoptionen
  • k (kill)t einen Prozess
    • Kill PID 3325 with signal [15]:
  • n (number of)
    • Maximum tasks = 0, change to (0 is unlimited):
  • r (renice)
    • PID to renice: 1285
    • Renice PID 1 to value:-20
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1 root       0 -20  2032  664  608 S  0.0  0.3   0:01.52 init
 1285 mysql     15  -5  130m  29m 5032 S  0.3 12.0   0:03.01 mysqld
  • h (help)
  • q (quit)
Wichtige Kommandozeilenoptionen
  • -i zeigt nur aktive Prozesse an
  • -b (batch) Kombo mit Redirector -> Ausgabe in eine Datei
  • -d (delay) Aktualisierungsinterval in sec.
  • -q Echtzeitausgabe (kann zu einem instabilen System führen!)

Signale an Prozesse senden

  • Prozesse zur Laufzeit beeinflussen
  • es gibt ingesamt 64 verschiedene Signale
bl01:~# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
Wichige Signale
  • 1 (SIGHUP) Hang-up-Signal - Ursprünglich um Modems aufzuhängen, Daemons wie bind & squid lesen ihre Config neu ein
  • 9 (SIGKILL) Beendet einen Prozess mit Gewalt - Nur für Notfälle, wenn Signal 15 kein Ergebnis bringt. SIGKILL räumt nicht auf (temps, etc.)
  • 15 (SIGTERM) Signal sich selbst zu beenden (inkl. Aufräumen)


  • 2 (SIGINT) Programmabbruch CTRL+C
  • 18 (SIGCONT) setzt einen Prozess fort. Wird durch bg und fg gesendet
  • 19 (SIGSTOP) hält einen Prozess an. Fortsetzung durch SIGCONT
  • 20 (SIGTSTP) hält einen Prozess (speicherresident) an CTRL+Z

kill

  • primär zum beenden von Prozessen (default SIGTERM)
  • kill übermittelt allerdings alle 64 Signale
  • es gibt 11 Varianten einen Prozess zu beenden :)
bl01:~# kill 3591
bl01:~# kill -s 15 3591
bl01:~# kill -s SIGTERM 3591
bl01:~# kill -s TERM 3591
bl01:~# kill -s sigterm 3591
bl01:~# kill -s term 3591
bl01:~# kill -15 3591
bl01:~# kill -SIGTERM 3591
bl01:~# kill -TERM 3591
bl01:~# kill -sigterm 3591
bl01:~# kill -term 3591
  • Prozesse die sich nicht beenden lassen (z.B. mc, netscape) mit SIGKILL beenden
bl01:~# kill -s 9 3591
bl01:~# kill -SIGKILL 3591
... 10 Varianten (ohne Voreinstellung)
Verkettung / Backquotes
  • backquotes verketten das Ergebnis von cat
bl01:~# cat /var/run/dbus/pid
1111
bl01:~# kill -SIGHUP `cat /var/run/dbus/pid`

killall

  • verwendet keine PIDs, sondern Prozessnamen
  • mehrere glichnamige Prozesse auf einmal beenden
  • Alle Instanzen eines Programms mit Gewalt beenden:
bl01:~# killall -s 9 mc
mc: no process found

Jobs im Vorder- und Hintergrund

  • In einer Shell können beliebig viele Prozesse laufen
  • Aber immer nur ein Prozess im Vordergrund
  • Programme im Hintergrund können den Status "running" oder "stopped" haben
  • Mit CTRL+Z (20 SIGTSTP) wird ein Prozess im Vordergrund gestoppt
  • & (Et-Zeichen) diehnt dazu Prozesse direkt im Hintergrund ablaufen zu lassen

jobs

  • zeigt alle aktuellen Prozesse an
  • -l zeigt zusätzlich PIDs an
  • -p zeigt NUR PIDs an
  • Stopped / Started / Done
  • Jobnummer in []
bl01:~# updatedb &
[1] 3771
bl01:~# jobs
[1]+  Running                 updatedb &
bl01:~#

bg und fg

  • bg sendet Signal 18 (SIGCONT)
  • Ohne Parameter wird der Prozess mit dem "+"-Zeichen in jobs verwendet
bl01:~# bg 1

bl01:~# fg 1

nohup

  • Prozesse unabhängig von einem Terminal laufen lassen
  • Macht einen Prozess imun gegen Signale wie SIGHUB
  • Leitet stdout in ~/nohup.out um
bl01:~# nohup updatedb &
[1] 3898
bl01:~# nohup: ignoring input and appending output to `nohup.out'
bl01:~# exit
exit

uptime

bl01:~# uptime
 21:58:10 up  2:11,  1 user,  load average: 1.07, 0.37, 0.17
  • wird auch von w verwendet
bl01:~# w
 21:58:55 up  2:11,  1 user,  load average: 0.50, 0.32, 0.16
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
homaar   pts/0    192.168.178.31   20:43    0.00s  0.29s  0.03s sshd: homaar [p

free

  • momentane Speicherauslastung
  • -b (bytes) Anzeige in Bytes
  • -k (kilo) Anzeige in KB
  • -m (mega) Anzeige in MB
  • -g (giga) Anzeige in GB
  • -l Details aus High- und Low-Memory anzeigen
  • -o (old) altes Anzeigeformat
  • -t (total) Summen für RAM und Swap
  • -s (seconds) Aktualisierung der anzeige in Sekunden
  • -c (count) Anzahl der automatischen Aktualisierungen mit -s
  • -V (Version) NICHT verbose!!
bl01:~# free -s 5
             total       used       free     shared    buffers     cached
Mem:        254744     236424      18320          0     105852      40508
-/+ buffers/cache:      90064     164680
Swap:       746980        792     746188

103.6 - Prozess-Ausführpriorität ändern

Wichtige Begriffe / Kommandos

  • nice
  • ps
  • renice
  • top

Allgemeines

  • Benutzer können maximal einen nice Wert von 0 einstellen

nice

  • nice Wert beim starten festlegen
  • Ohne Optionen wird der Prozess um 10 "netter"
  • Werte von -20 bis +19
  • nice Wert und Prozesspriorität sind nicht das selbe, es wird nur Einfluss darauf genommen
  • nice einen positiven Wert übergeben
nice -n 12 nano
nice -12 nano #Der Strich ist KEIN Minus!!!
  • nice einen negativen Wert übergeben
nice -n -15 nano
nice --15 nano #Strich + Minus Zeichen!

renice

  • nice Wert zur Laufzeit ändern
  • Optionsübergabe ohne Strich,d.h.
renice -10 nano
  • setzt den nice Wert auf -10!!!!
  • -u (hier ist der Strick pflicht -.-) alle Prozesse eines Benutzers renicen
mail:/var/lib/dpkg# renice 5 -u homaar
1000: old priority 0, new priority 5

Überprüfung von Prioritäten

  • top und ps
mail:/var/lib/dpkg# ps -au
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     14125  0.0  0.0   6600   828 pts/0    R+   01:41   0:00 ps -au
homaar   21655  0.0  0.0   9520  1784 pts/0    SNs  00:53   0:00 -bash
root     21663  0.0  0.0  35800  1224 pts/0    S    00:53   0:00 su
root     21672  0.0  0.0   9708  2004 pts/0    S    00:53   0:00 bash
  • Die Spalte STAT gibt Infos über den nice Wert
  • N Der Prozess ist nice.
  • < Prozess läuft mit erhöhter Prio
  • S Interruptable Sleep
  • + weist auf einen Prozess im Vordergrund hin
  • top um den tatsächlichen nice Wert zu ermitteln
PID   PROZESS   PRIO NICE
26418 www-data  15   0  256m  23m 5804 S  3.7  1.2   0:12.11 apache2
  • Hier wird deutlich, dass PRIO != NICE
  • R-Taste zur Laufzeit von top -> PID Eingabe -> Nice Wert ändern

103.7 - Textdateien mit regulären Ausdrücken durchsuchen

Wichtige Begriffe / Kommandos

  • grep
  • egrep
  • fgrep
  • sed
  • regex(7)

Allgemeines

regex, regexp, regular expression -> Dateien nach einem Suchmuster durchsuchen

Für dir Prüfung ist nur die Benutzung von grep, sed und vi von Bedeutung.

U.a. verwenden awk, Perl, Phython, gawk auch regexp

Reguläre Ausdrücke

Allgemeine Metazeichen

  • ^ - Zeilenanfang
  • $ - Zeilenende
  • \< - Wortanfang
  • \> - Wortende
  • \ - Escape-Zeichen
  • [] - enhät den Ausdruck
  • [abcd] - enthält a,b,c und d
  • [a-d] - enthält a bis d
  • ^[^#] - kein Raute Zeichen am Zeilenanfang

Wildcards (Joker)

Wildcards ersetzen einzelne Zeichen im Suchmuster:

  • * - null bis beliebig viele Wiederholungen des vorangegangenen Zeichens
  • ? - null oder eine Wiederholung des vorangegangenen Zeichens. Alte Versionen von Grep unterstützen ? nicht! -> Auf egrep ausweichen
  • + - zimindest eine Wiederholung des vorangegangenen Zeichens
  • . (Punkt) - ein beliebiges Zeichen (außer Zeilenvorschub)

Achtung: Im GEGENSATZ zu regexp werden in der Shell mit * meherere beliebige zeichen und mit ? ein beliebiges Zeichen ersetzt!!!

grep

  • search Globally for Regular Expressions and Print out
  • Zeilen einer Datei nach regex durchsuchen.
  • Unterschied zu sed: grep führt keine Änderungen durch

Optionen:

  • -v invertiert die Ausgabe
  • -n fügt eine Zeilennummerierung hinzu
  • -E aktiviert den erweiterten Regexp Modus (verhält sich dann wie egrep)
  • -c zählt die Anzahl der Übereinstimmungen
  • -i ignoriert Groß-/Kleinschreibung

grep Beispiele

#Sucht nach 'Tobias' in der Datei liste
grep Tobias liste

#Sucht nach Variationen von Tobias tobiaS TobiaS tobias
grep [Tt]obia[sS]

#Igoriere Groß-/Kleinschreibung
grep -i tobias liste

#Das zweite Zeichen durch ein beliegiges ersetzen
grep T.bias liste

#Alle Zeilen die mit einer Raute am Zeilenanfrang ausgeben
grep [#] config

#2 Möglichkeiten nur nicht auskommentierte Zeilen auszugeben
grep -v [#] config
grep ^[^#] config

#Leere Zeilen entfernen
grep -v ^$ config

#Auskommentierte Zeilen und Leerzeilen entfernen
grep ^[^#] config | grep -v ^$

#Wort + beliegig viele Ziffern
grep 'Wort[1-9]*\>' file

#Alle Logeinträge vom 03.07
grep '^3 Jul' /var/log/messages

#3, 4 oder 5 Einsen
grep '1\{3,5\}' Suchdatei

*Die Klammern müssen geschützt werden
*{Mindestanzahl,Maximum}

#Nur Midnestanzahl angeben
grep '1\{3,\} Suchdatei

#Alle Zahlen die öfter als 3 Mal vorkommen
grep '[0-9]\{3,\}' Suchdatei

#Alle Großbuchstaben die öfter als 3 Mal vorkommen
grep '[A-Z]\{3,\}' Suchdatei

#Suche nach mindestens 3-stelligem $-Betrag
grep '\$[0-9]\{3,\}\>' Suchdatei

*Hier wird der Doller gegen die Interpretataion als Zeilenende geschützt

#Auch / müssen geschützt werden
grep '\/var\/log\/syslog' Suchdatei

#Und auch der Backslash sebst
grep 'c:\\windows' Suchdatei

#Zeilen die mindestens einen Großbuchstaben enthalten
grep '[A-Z]\+' Suchdatei

#Syslog ohne NRPE Spam ausgeben
egrep -v '(nrpe)' /var/log/syslog

Links

http://de.w3support.net/index.php?db=sf&id=77613

egrep und fgrep

  • e = extended
  • f = fixed

egrep und fgrep wird nur noch zur Abwärtskompatibilität behalten

grep -E     = egrep
grep -F     = fgrep

agrep & zgrep

  • agrep für fehlertolerntes Suchen
  • zgrep für die Such in gepackten Archiven

sed

  • stream eitor
  • Ziel darf NICHT die Quelle sein!!!
sed 's/aaa/bbb/g' datei1 >datei2

Optionen

-e Kommando - optional bei einem einzelnen Kommando
-f Scriptfile - Gibt einen Datei mit Kommandos an
-g - Globales Suchen ~ Normalerweise sucht sed nur nach dem ERSTEN Vorkommen eines Suchmusters!

Adressierung

  • Positionsangaben im File (ab wo / bis wohin gesucht wird)


Es gibt 3 Arten von Adressen:

  • Zeilennummern
  • $ - letzte Zeile
  • regexp

Adressen werden mit Komma voneinander getrennt - Auchtung: Einige Kommandos arbeiten nur mit einer Adresse!
z.B. a (append) - hängt an einer Zeile Text an

Kommandos

Links

103.8 - vi

Wichtige Begriffe / Kommandos

  • vi
  • /,?
  • h,j,k,l
  • i,o,a
  • c,d,p,y,dd,yy
  • ZZ,:w!,:q!,e!

Allgemeines

Bedienungsgrundlagen

Start

Modi

save & quit

save & quit

Navigation

Einfügen, Löschen, Kopieren, Suchen

Befehlszeilenoptionen

uname -r
2.6.35.8

[]