103-gnu-unix-commands
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
- 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
- http://unixhelp.ed.ac.uk/CGI/man-cgi?file
- feststellen um welchen Dateityp es sich handelt
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
- http://linuxseiten.kg-it.de/index.php?index=bash_Der_Befehl_sed
- http://de.wikipedia.org/wiki/Sed_%28Unix%29
- http://www.tty1.net/sed-intro_en.html
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
Einfügen, Löschen, Kopieren, Suchen
Befehlszeilenoptionen
uname -r 2.6.35.8
[]