... just another site around the web ...





Bash


Beispiele

Einzeiler für ständiges Ausführen von Befehlen (quick-and-dirty-Überwachung)

while true; do sleep 5; clear; <befehl>; done

Tar packen mit Datum

tar czvf arbeit_vom_$(date +%Y%m%d-%H%M%S).tgz ~/arbeit

Ausgabeumleitung

Ausgabe eines Programms zur Eingabe in ein anderes Programm

command | command

Erzeuge eine neue Datei wenn nicht vorhanden, oder leere eine vorhandene Datei und schreibe dann die Ausgaben rein

command >datei

Erzeuge eine neue Datei wenn nicht vorhanden, oder hänge die Ausgabe an die vorhandene Datei an

command >>datei

Leite Standardausgabe (stdout) weiter

1>datei

Leite Standardfehlerausgabe (stderr) weiter

2>datei

stderr nach stdout

2>&1

stderr nach stdout und beides in Datei

>>datei 2>&1

Befehlsliste

  • whoami
    • Zeigt den Namen des Benutzers an (Wer bin ich?)
  • id
    • Zeigt Name, Hauptgruppe und weitere Gruppen des Benutzers an (Was bin ich?)
  • pwd
    • Zeigt den absoluten Pfad des aktuellen Verzeichnis (Wo bin ich?)
  • uname
    • Zeigt Informationen zum Betriebssystem an (Auf was bin ich?)
    • Alles anzeigen (-a)
      uname -a
  • uptime
    • Zeigt an wie lange das System läuft, wie viele Benutzer derzeit angemeldet sind und wie die durchschnittliche Systembelastung aussieht
  • last
    • Zeigt die letzten Systemaktionen an, wie Logins, Shutdown, Reboot, ... (Was ist zuletzt passiert?)
    • Anzahl der angezeigten Einträge begrenzen (-x oder -n x)
      last -<x>
  • date
    • Zeigt die aktuelle Systemzeit an (Wie spät ist es?)
      date
    • Formatierte Ausgabe
      date +"%Y-%m-%d"
      date +%Y%m%d-%H%M%S
    • Ausgabe in Variable speichern
      date +"%Y-%m-%d"
  • time
    • Zeigt an wie lange ein Aufruf gebraucht hat
      time dd if=/dev/hda1 of=datei.img
                  
  • passwd
    • Passwort ändern.
      passwd
    • Bei Angabe des Benutzernamens als Parameter kann (wenn man die entsprechenden Rechte hat, also root) auch das Passwort anderer Benutzer geändert werden.
      passwd benutzer
  • ls
    • Dateien einfach nacheinander anzeigen (per Standard wird alphabetisch sortiert)
      ls
    • Jede Datei in einer Zeile anzeigen
      ls -1
    • Alle Dateien anzeigen (auch mit . versteckte)
      ls -a
    • Inodes mit anzeigen
      ls -i
    • Größe mit anzeigen (size)
      ls -s
    • Angaben in "Human-readable" (10k, 20M, 3G, ...)
      ls -h
    • Sortiere nicht, also liste nach "directory order"
      ls -U
    • Sortiere nach "extension"
      ls -X
    • Sortiere nach Größe (absteigend)
      ls -S
    • Sortiere nach Modification-time (absteigend)
      ls -t
    • Sortiere nach Access-time (mit -l nur wirksam wenn auch -t)
      ls -u
    • Sortiere nach ctime (time of last modification of file status information) (mit -l nur wirksam wenn auch -t)
      ls -c
    • Zeige "Long-List", zeigt die meisten Informationen mit an (Größe, Besitzer, Gruppe, Zugriffsrechte), führt aber mit -u und -c auch zur Sortierung nach Namen, dann muss -t noch mit angegeben werden
      ls -l
    • Sortiere umgekehrt
      ls -r
    • Zeige Verzeichnisse rekursiv
      ls -R
    • Beispiele
      • Zeige alles "wichtige" in lesbarer form (long list, all files, human readable, inodes lassen wir mal aussen vor)
        ls -lah
      • Sortiere das nach Größe oder Modification-time
        ls -lahS
        ls -laht
      • Sortiere das umgekehrt
        ls -lahSr
        ls -lahtr
  • cat
    • Zusammenführen von Dateien (concatenate)
      cat datei1 > datei2
    • Anzeigen von Dateien
      cat datei
    • Erstellen von Dateien
      cat > datei
      fubar1
      fubar2
      STRG + D
  • more
    • Anzeige von Dateien auf dem Bildschirm
    • Eine Seite vor Space
    • Eine Seite zurück b
    • Verlassen
      q
  • tail
    • Anzeige von Dateien auf dem Bildschirm
    • Fortlaufende Ausgabe der Datei (follow)
      tail -f <datei>
    • Abbruch mit STRG + C
  • less
    • anzeigen von Dateien, Navigation mit Pfeiltasten
    • Seitenweise vorwärts
      space
    • Seitenweise rückwärts
      b
    • Ans Ende der Datei springen und jeden Zuwachs anzeigen (follow, wie "tail -f")
      F
      Fortlaufende Anzeige beenden mit
      STRG-C
    • Suchen vorwärts
      /<pattern>
    • Suchen rückwärts
      ?<pattern>
    • Verlassen (quit)
      q
  • file
    • Informationen über Dateien bekommen
    • Ermitteln der Kodierung von Textdateien
      file -i dateiname
  • mkdir
    • Verzeichnis erstellen (make dir)
    • Syntax
      mkdir <option> verzeichnis
    • Mit Erstellung von Pfaden (parent)
      mkdir -p verzeichnis
    • Ausgabe für jedes Erstellte Verzeichnis (verbose)
      mkdir -v verzeichnis
  • rm
    • Löschen von Dateien (remove)
    • Datei löschen
      rm <datei>
    • Verzeichnis rekursiv löschen
      rm -r <verzeichnis>
  • cp
    • Kopieren von Dateien (copy)
    • Preserve: ist gleich --preserve=mode,ownership,timestamps (default-Wert)
      cp -p <quelle> <ziel>
    • Preserve (--preserve[=ATTR_LIST]): preserve the specified attributes (default: mode,ownership,timestamps), if possible additional attributes: links, all
      cp --preserve[=attr-list] <quelle> <ziel>
    • No-Preserve: don't preserve the specified attributes
      cp --no-preserve[=attr-list] <quelle> <ziel>
    • Rekursiv (-R, -r, --recursive)
      cp -R <quelle> <ziel>
    • -v, --verbose
    • Ausgabe (-v, --verbose)
      cp -v <quelle> <ziel>
    • Backup (-b): Würde durch den Kopiervorgang eine bereits vorhandene Datei gleichen Namens überschrieben, so wird diese vorher gesichert.
      cp -b <quelle> <ziel>
    • Update (-u, --update): Wenn im Zielverzeichnis eine Datei gleichen Namens schon vorhanden ist, wird diese nur überschrieben, wenn die Datei, die kopiert werden soll neuer ist als die bereits vorhandene. Ist die Datei nicht vorhanden wird sie angelegt.
      cp -u <quelle> <ziel>
    • Force (-f, --force): Ist im Zielverzeichnis ein Dateiname bereits vorhanden, so wird die alte Datei überschrieben. Wenn eine existierende Zieldatei nicht geöffnet werden kann, wird sie gelöscht und der Kopiervorgang dann noch einmal versucht.
      cp -f <quelle> <ziel>
    • Mehrere Dateien kopieren
      cp file1 file2 file3 <zielverzeichnis>
      cp *.xyz <zielverzeichnis>
    • Dateien im bulk kopieren
      for i in *.txt; do cp $i ${i%.*}.bak; done
  • scp
    • Kopieren der Datei "file" vom Rechner "remotehost" ins aktuelle Verzeichnis.
      $ scp remoteuser@remotehost:file .
    • Kopieren der Datei "file1" vom Rechner "remotehost1" sowie der Datei "file2" vom Rechner "remotehost2" ins Verzeichnis "/tmp" auf dem lokalen Rechner.
      $ scp remoteuser1@remotehost1:file1 remoteuser2@remotehost2:file2 /tmp
    • Kopieren der Datei "file1" vom Rechner "remotehost1" auf den Rechner "remotehost2".
      $ scp remoteuser1@remotehost1:file1 remoteuser2@remotehost2:
    • Kopieren der Datei "/tmp/file.txt" von dem entfernten Rechner "remotehost" ins aktuelle Verzeichnis.
      $ scp remoteuser@remotehost:/tmp/file.txt .
    • Rekursives Kopieren des Verzeichnisses "/tmp" (also einschliesslich aller seiner Dateien und Unterverzeichnisse) von dem entfernten Rechner "remotehost" ins aktuelle Verzeichnis.
      $ scp -r remoteuser@remotehost:/tmp .
    • Kopieren der Datei "/etc/hosts" als Benutzer "remoteuser" auf dem entfernten Rechner "remotehost" ins aktuelle Verzeichnis auf dem lokalen Rechner.
      $ scp remoteuser@remotehost:/etc/hosts .
    • Kopieren der Datei "/etc/hosts" auf dem lokalen Rechner "localhost" als Benutzer "remoteuser" auf den Rechner "remotehost" ins Verzeichnis "/tmp".
      $ scp /etc/hosts remoteuser@remotehost:/tmp
    • Kopieren der Dateien "/etc/hosts" und "/etc/hosts.deny" als Benutzer "remoteuser" auf dem entfernten Rechner "remotehost" ins aktuelle Verzeichnis auf dem lokalen Rechner.
      $ scp remoteuser@remotehost:/etc/hosts scp remoteuser@remotehost:/etc/hosts.deny .
    • Kopieren der Datei "/tmp/test" und als Benutzer "remoteuser1" auf dem entfernten Rechner "remotehost1" ins Verzeichnis "/tmp" als Benutzer "remoteuser2" des entfernten Rechners "remotehost2".
      $ scp remoteuser1@remotehost1:/tmp/test remoteuser2@remotehost2:/tmp
  • mv
    • Verschieben von Dateien (move)
    • Update (nur wenn Quelldatei neuer ist als Zieldatei)
      mv -u
    • Ausgabe (Verbose)
      mv -v
  • chown
    • Eigentümer und/oder Gruppe von Dateien und Ordnern ändern (change owner)
    • chown [OPTION]... [OWNER][:[GROUP]] FILE
    • chown -R newuser:newgroup /path/to/dir
  • chgrp
    • Gruppenzugehörigkeit von Dateien und Ordnern ändern (change group)
    • chgrp [OPTION]... GROUP FILE
    • chgrp -R newgroup /path/to/dir
  • chmod
    • Zugriffsrechte von Dateien ändern (change mode)
    • chmod [OPTION]... MODE[,MODE]... FILE
    • chmod u+x file
  • find
    • Dateien nach Namen finden
      find / -type f -name <name> 
    • Alle Dateien die in den letzten 24h erzeugt wurden.
      find / -type f -mtime -1 
    • Alle Dateien die älter als ein Tag sind.
      find / -type f -mtime +1 
    • Alle Dateien die zwischen 5 und 6 Tagen alt sind.
      find / -type f -mtime 5 
    • Alle Dateien die neuer als eine Datei sind.
      find / -newer <datei>
    • Alle Dateien größer 10.000 finden
      find / -type f -size +10000
    • Für alle gefundenen Dateien einen Befehl ausführen
      find . -name *.log -mtime +7 -exec ls -all {} \; 
  • grep (durchsuchen von Text, egal ob aus einer Datei oder von der Konsole)
    grep [optionen] Suchstring [Datei(-liste)]
    • Suchmuster in allen Dateien suchen
      grep <suchmuster> *
    • alle Zeilen die dem Muster entsprechen
      grep <suchmuster>
    • alle Zeilen die NICHT dem Muster entsprechen
      grep -v <suchmuster>
    • -r rekursiv
      • Aus dem aktuellen Verzeichnis abwärts den Suchtext suchen
        grep -r "suchtext" .
    • -H Dateien mit ausgeben, nicht nur Zeilen
  • top
    • Ausgabe der größten Prozesse und der Systemauslastung
    • Vereinfacht: was läuft auf dem System grade und wie voll ist es hier?
    • CPU
      • us: user cpu time
      • sy: system cpu time
      • ni: user nice cpu time
      • id: idle cpu time
      • wa: io wait cpu time
      • hi: hardware irq (servicing hardware interrupts)
      • si: software irq (servicing software interrupts)
      • st: steal time (time in involuntary wait by virtual cpu while hypervisor is servicing another processor)
  • ps
    • Ausgabe aller Prozesse in einer Liste (processes)
      ps
    • für die Suche nach Prozessen am besten kombinieren mit grep.
        ps -ef | grep <...>
    • Wenn es dann nicht auch der eigene grep-Befehl sein soll der mit ausgeben wird
        ps -ef | grep <..> | grep -v grep
    • Ausgabe nach selbstdefinierten Spalten, hier Speicherverbrauch und Prozessorlast
        ps axo pid,vsz,rss,,pcpu,command
    • Sortierung (--sort [+|-]vsz, default +)
        ps axo pid,vsz,rss,command --sort +vsz
    • Speicherverbrauch überwachen
        while true; do sleep 5; clear; ps axo pid,vsz,rss,command --sort rss; done
    • Parameter
      • -e oder -A (Select every/all Processes)
      • -f (full Format Listing)("When used with -L, the NLWP (number of threads) and LWP (thread ID) columns will be added.")
      • r (only running processes)
      • a (Lift the BSD-style "only yourself" restriction)
      • x (Lift the BSD-style "must have a tty" restriction)
      • o format (specify user-defined format. Identical to -o and --format)
  • pstree
    • Listet alle Prozesse in einer Baumstruktur auf (processes tree)
  • nice
    • nice [-n increment] utility [argument ...]
    • -n = -20 (high) bis 20 (low)
    • Rückgabewerte
      • 1-125 An error occurred in the nice utility.
      • 126 The utility was found but could not be invoked.
      • 127 The utility could not be found.
      • Otherwise, the exit status of nice shall be that of utility.
  • kill
    • Signal an Prozess-ID senden
    • kill <signal> <prozess_id>
  • killall
    • Signal an Prozess-Namen senden
    • killall <signal> <prozess_name>
  • jobs
    • Gibt eine Liste aller Jobs und Jobnummern aus
      jobs
    • Schiebt das Kommando schon bei Aufruf in den Hintergrund
      <kommando> &
    • Holt den Job in den Vordergrund
      fg %<jobnummer>
    • Schiebt den Job in den Hintergrund (Beispiel: mit STRG-Z anhalten, dann bg)
      bg
    • Kommando vom Aufrufenden Benutzer trennen
      <command> & disown ()
  • at
    • Starten zu einem bestimmten Zeitpunkt
      at YYYYMMDDhhmm
  • tar
    • Parameter
      • v = verbose
      • c = create
      • x = extract
      • M = Multiple Files
      • f = input/output von/in Datei
    • Packen ohne Kompression
      tar -cvf dateiname.tar ./verzeichnis
    • Packen mit BZIP2-Kompression
      tar -cjvf dateiname.tar.bz2 ./verzeichnis
    • Packen mit GZIP-Kompression
      tar -czvf dateiname.tar.gz ./verzeichnis
    • Packen mit Aufteilung in Dateien (hier 1G=1024x1024=1048576)
      tar -c -M -v –tape-length=1048576 –file=file_part1.tar bigfile.tgz
      Prepare volume #2 for ‘file_part1.tar’ and hit return: n file_part2.tar
      Prepare volume #2 for ‘file_part2.tar’ and hit return: 
      Prepare volume #3 for ‘file_part2.tar’ and hit return: n file_part3.tar
      Prepare volume #3 for ‘file_part3.tar’ and hit return: 
      ...
      
    • Auflisten
      tar -tvf dateiname.tar
    • Entpacken ohne Kompression
      tar -xvf dateiname.tar ./verzeichnis
    • Entpacken mit BZIP2-Kompression
      tar -xjvf dateiname.tar.bz2 ./verzeichnis
    • Entpacken mit GZIP-Kompression
      tar -xzvf dateiname.tar.gz ./verzeichnis
    • Entpacken mit Aufteilung in Dateien
      tar -x -M -v –file=file_part1.tar bigfile.tgz
      bigfile.tgz
      Prepare volume #2 for `file_part1.tar’ and hit return: n file_part2.tar
      Prepare volume #2 for ‘file_part2.tar’ and hit return: 
      Prepare volume #3 for ‘file_part2.tar’ and hit return: n file_part3.tar
      Prepare volume #3 for ‘file_part3.tar’ and hit return: 
      ...
      
  • split
    • You can use split for this:
      
      tar czpvf - /path/to/archive | split -d -b 100M - tardisk
      
      This tells tar to send the data to stdout, and split to pick it from stdin - additionally using a numeric prefix (-d), a chunk size (-b) of 100M and using 'disk' as the base for the resulting filenames (tardisk00, tardisk01, etc.).
      
      To extract the data afterwards you can use this:
      
      cat tardisk* | tar xzpvf -
    • split –bytes=1m /path/to/large/file /path/to/output/file/prefix
      * You can change the output file size by changing the –bytes=1m to your preference. You can use b, k, or m. b represent bytes, k represent kilobytes, m represent megabytes.
      
      cat prefix* > NEWFILENAME
      
  • du (Disk usage)
    • Human-readable (xK, xM, xG)
      du -h
    • Block-Size Kilo (xK)
      du -k
    • Block-Size Mega (xM)
      du -m
    • Block-Size Giga (xG)
      du -g
    • Rekursionstiefe angeben
      du -d <depth>
    • Ausgabe für Lesefehler (default on)
      du -r
    • Platzverbrauch sortiert ermitteln
      du –sk * | sort -n
    • BLOCKSIZE If the environment variable BLOCKSIZE is set, and the -k option is not specified, the block counts will be displayed in units of that size block. If BLOCKSIZE is not set, and the -k option is not specified, the block counts will be displayed in 512-byte blocks.
  • df (Disk free)
    • Human-readable (xK, xM, xG)
      df -h
    • Auslastung in Prozent
      df -i
  • bdf (Berkeley df)
    • Füllstand ermitteln
      bdf /
  • uniq (write out the unique lines from the given Input)
    • Jede Zeile nur einmalig ausgeben
      uniq datei.txt
    • Nur die Zeilen ausgeben die einmalig auftreten
      uniq -u datei.txt
    • Zu jeder Zeilen die Anzahl des Auftretens mit ausgeben
      uniq -c datei.txt
    • Beim Vergleich der Zeilen "x" Felder (Spalten, durch blank oder tab getrennt) und/oder Zeichen (chars) ignorieren
      uniq -f x datei.txt
      uniq -s x datei.txt
  • wc
    • Word Count, zählt Wörter, Zeilen, oder auch Zeichen in Text, egal ob aus einer Datei oder von der Konsole
    • Zeilen zählen (ls | wc -l zählt alle Einträge in einem Verzeichnis)
      wc -l
    • Einträge in einem Verzeichnis zählen
      ls | wc -l
    • Gefundene Einträge einer Suche zählen
      find / -name *log* -mtime +365 | wc -l
  • alias
    • Auflisten
      alias
    • Anlegen
      alias dir='ls -all'
    • Löschen
      unalias dir
  • DiskDump (dd)
    • Partition sichern
      dd if=/dev/hda1 of=datei.img
    • Partition wieder herstellen
      dd if=datei.img of=/dev/hda1
    • Partition klonen
      dd if=/dev/hda1 of=/dev/hdb1
    • CD/DVD-Image erzeugen
      dd if=/dev/cdrom of=datei.iso
    • Fortschrittsanzeige (dd gibt Informationen über bereits kopierte Daten wenn es das Signal SIGUSR1 (10) bekommt)
      while true; do sleep 5; kill -USR1 `pidof dd`; done
  • DiskDump Rescue (ddrescue)
    • Partition erst mal sichern alles was geht
      ddrescue -B -n /dev/sda image.iso rescue.log
    • Fehlerhafte Bereiche erneut versuchen mit einem retry
      ddrescue -B -r 1 /dev/sda image.iso rescue.log
  • ISO erzeugen
    mkisofs -o datei.iso -l ./Verzeichnis/
  • Image-formate in ISO konvertieren
    • bin/cue (bchunk, universe)
      bchunk [quelldatei].bin [quelldatei].cue [zieldatei]
    • nrg (nrg2iso, universe)
      nrg2iso [quelldatei] [zieldatei]
    • mdf (mdf2iso, universe)
      mdf2iso [quelldatei] [zieldatei]
    • img/cdd/sub (ccd2iso, universe)
      ccd2iso [quelldatei].img [zieldatei].iso
  • sed (stream editor)
    • Betriebsmodi
      • (p)rinting
      • (d)eletion
      • (s)ubstitution
  • cpio
  • lsof (list open files)
    • Betriebsmodi
      • r Sekunden Wiederholt die Ausgabe alle x Sekunden
      • -n Gibt IP-Adressen statt Hostnamen aus
      • -l Gibt die Benutzer-ID statt des Benutzernamens aus
      • -P Gibt Port-Nummern statt Service-Namen aus.
      • -t Gibt nur eine PID Liste aus
      • -F Gibt alle Ergebnisse in einer einzigen Spalte aus
    • Formate
      • /Pfad/Datei Informationen über die Verwendung der angegebenen Datei
      • /dev/cdrom Informationen über die Verwendung von z.B. dem CD-ROM-Laufwerk
      • +D /home/benutzername Informationen über die Verwendung von Dateien z.B. des Home-Verzeichnisses des Anwenders
      • +p PID Liefert die Informationen welche PID welche Datei benutzt
      • -c Prozess Name Liefert die Informationen welcher Prozess welche Datei benutzt
      • -u Anwender Name Liefert die Informationen welcher Anwender welche Datei benutzt
      • -i TCP/UDP oder IP-Adresse oder Port-Nr. Liefert die Informationen welcher Netzwerkdienst von welchem Anwender, PID usw. benutzt wird
      • +L1 Liefert die Informationen über bereits gelöschte Dateien
      • -a logische UND-Verknüpfung von Optionen; dies macht immer dann Sinn, wenn lsof mit zwei Optionen aufgerufen wird und beide angewendet werden sollen, da per Voreinstellung immer eine ODER-Verknüpfung angewendet wird.
  • netstat
    • -t (zeige nur TCP Verbindungen, -u würde nur UDP Verbindungen zeigen)
    • -a (zeige alle Verbindungen, sowohl mit State=LISTEN als auch anderen States)
    • -p (zeige auch die PID und den Programmnamen zu denen die Verbindung gehört)
    • -e (erweiterte Anzeige, zeigt mehr Details)
    • -n (numerische Anzeige)
    • -r Routing-Tabelle ausgeben
    • -i Interface-Statistiken ausgeben
    • -s Interface-Statistiken ausgeben
  • Glance (HP-UX)
    • Aufruf
      glance
    • Einstellung
      u
    • Blättern vorwärts
      space
    • Blättern rückwärts
      b

Umgebung ändern

Für einen Benutzer ändern:

~/.bashrc 
(~/.bash_profile)

Für alle Benutzer ändern:

/etc/profile

Für root ändern:

/root/.bashrc

Skripte

Kommentare

#....

Include in Shell mit

. $HOME/myscript.sh

oder

source $HOME/myscript.sh

Include erzeugt Gülltigkeit auch für das aufrufende Programm von der Stelle an der Eingebunden wurde an.

Export in Shell

PATH=$PATH:. # Das aktuelle Verzeichniss aufnehmen, an letzter Stelle
export PATH

Export erzeugt Gülltigkeit für alle Programme die von dem Skript aufgerufen werden, nicht jedoch für das aufrufende Programm selber, da dieses zum Startzeitpunkt noch mit den alten Umgebungsbedingungen gestartet wurde.

echo

echo "Hallo Welt"
echo "Hallo $name"
echo "Hallo "$name
echo $PATH

Ausgabe ohne Zeilenumbruch

echo -n "..."

test

KommandoKurzschreibweiseBedeutungBeschreibung
[! ...]not ...Ausdruck ist falsch
test -e[ -e $datei]existsDatei existiert
test -r[ -r $datei]readableDatei existiert und ist lesbar
test -w[ -w $datei]writeableDatei existiert und ist schreibbar
test -x[ -x $datei]executable
test -s[ -s $datei]size > 0
test -d[ -d $datei]directory
test -nt[ $dateiA -nt $dateiB]newer than
test -eq[ $zahlA -eq $zahlB]equal
test -ne[ $zahlA -ne $zahlB]not equal
test -lt[ $zahlA -lt $zahlB]lesser than
test -le[ $zahlA -le $zahlB]lesser or equal
test -gt[ $zahlA -gt $zahlB]greater than
test -ge[ $zahlA -ge $zahlB]greater or equal
test -z[ -z $string]zero
test -n[ -n $string]non zero
=[ $stringA = $stringB]
!=[ $stringA != $stringB]

Bedingte Verzweigung

if [ <bedingung> ]; 
then
	...
	if [ <bedingung>  ]; 
	then
		...
	else
		...
	fi
else
	...
fi

Iteration

folders="folder1 folder2 folder3 ... "
for i in $folders
do
	...
done

Beispielskripte

#!/bin/sh
#
#

myname=$(basename $0)
mybase=$(cd $(dirname $0); pwd)
myhost=$(uname -n)
timestamp=`date +'%Y%m%d-%H%M%S'`

echo "myname="$myname
echo "mybase="$mybase
echo "myhost="$myhost
echo "timestamp="$timestamp
#!/bin/sh
#
#

myname=$(basename $0)
mybase=$(cd $(dirname $0); pwd)
myhost=$(uname -n)
timestamp=`date +'%Y%m%d-%H%M%S'`

#
# Filesystem-Monitoring
#

#
# Variables
#
scanfile="filesystem.scan"
scanfile_old="filesystem_old.scan"
difffile="filesystem.diff"

#
# Scanning Directory and save to file
#
echo -n "Doing filescan ... "
find . -type f -exec ls -lisa {} \; > $scanfile
echo "done"

#
# Checking for old Scanfile
#
if [ ! -e $scanfile_old ]
then
  echo -n "No initial file found, creating ... "
  mv $scanfile $scanfile_old
  echo "done"
  echo "Initial Scan created, exit for first time run."
  exit 0;
fi

#
# File diffenrences
#
echo -n "Checking differences and save to $difffile ... "
diff $scanfile_old $scanfile | grep -v $scanfile | grep -v $scanfile_old | grep -v $difffile > $difffile
echo "done"

#
# Print summary
#
echo "Sumary of differences"
echo "Last time:"
grep "<" $difffile
echo "Actual:"
grep ">" $difffile

#
# Saving old Diff as Archive
#
echo -n "Saving old diff for archive ... "
mv $difffile $difffile"."$timestamp
echo "done"

#
# Saving new Scan as old one
#
echo -n "Saving actual data for next scan ... "
mv $scanfile $scanfile_old
echo "done"

#
# End
#
exit 0

Aufräume/Sichern alter Dateien

# Verzeichniss aus dem gesichert werden soll
workdir=/opt/<service>/<pfad>/

# Verzeichniss in das gesichert werden soll
backupdir=/backup/<service>/<pfad>/

# Verzeichnisse die gesichert werden sollen, durch Leerzeichen getrennt
folders="folder1 folder2 folder3 ... "

# Anzahl max Dateien
files_count_max=20000

# Zeitraum max Prod
time_workdir_max=365

# Zeitraum max Backup
time_backupdir_max=730

# Iteration über die Verzeichnisse
for i in $folders
do
	# Wegschieben nach einem Jahr (time_workdir_max-Tage oder älter)
	find $workdir$i -type f -mtime +$time_workdir_max -exec mv {} $backupdir$i \;
	# Löschen nach zwei Jahren (time_backupdir_max-Tage oder älter)
	find $backupdir$i -type f -mtime +$time_backupdir_max -exec rm -r {} \;
done 

Ausführungsmodus von Skripten

set -x (Debug-mode)

set +x (abschalten)

set -u (Abbruch bei nutzung einer nicht initialisierten Variable, geht auch: set -o nounset)

set +u (abschalten)

set -e (Abbruch wenn ein Kommando Fehler "nicht true" zurückliefert, geht auch: set -o errexit)

set +e (abschalten)









Copyright © 2017

Impressum