Linux:ShellScripte

Aus Alexander's Wiki

Auf Linuxsystemen kann man einige Dinge leichter durch Scripte durchführen bzw. automatisieren. Es gibt verschiedene Shells, aber ich bevorzuge die Shell bash. Die paar Scripte, die hier gezeigt werden, sind sehr einfach, zeigen aber auch gleichzeitig einige Befehle.

Verzeichnis-Links erstellen

  ln -s /mnt/HD_b2/SCRIPTE /home/root/a
  ln -s /mnt/HD_b2/FTP /home/root/b

Damit werden zwei Links mit Namen a und b erzeugt. A zeigt auf ein SCRIPTE-Verzeichnis und b zeigt auf ein FTP-Verzeichnis.

Mounten eines NFS-Volumens auf einem anderen Computer

  mount -t nfs 192.168.1.55:/media/truecrypt1/Samba-Freigabe/ /mnt/HD_b2/FTP/Weiterleitung_SAN/1-TB-Platte/
  mount -t nfs 192.168.1.55:/media/truecrypt2/                /mnt/HD_b2/FTP/Weiterleitung_SAN/2-TB-Platte/

Hier werden zwei NFS-Volumen vom Rechner mit der IP 192.168.1.55 an zwei Verzeichnisse gemountet. Ein Benutzer, der auf diese Verzeichnisse zugreift, greift in Wirklichkeit auf die Dateien des anderen Servers zu.

Update der Cronjobs

Crontab Aufbau
  echo '10 0 * * * /mnt/HD_b2/SCRIPTE/sync'  >> /var/spool/cron/crontabs/root
  echo ' 1 0 * * * /mnt/HD_b2/SCRIPTE/rmmac' >> /var/spool/cron/crontabs/root

Bei mir werden nach dem Neustart des NAS immer die Cronjobs gelöscht. Mit folgendem Script wird das Script sync wieder in die Crontab geschrieben. Der Doppelpfeil (>>) bewirkt im Gegensatz zum einfachen Pfeil (>), dass die Zeile in die Datei hinzugefügt wird und nicht neu erstellt wird. Der Aufbau der Zeilen in der Crontab findet man z.B. hier. In diesem Fall werden jeden Tag um 0:10 Uhr das Script sync und um 0:01 Uhr das Script rmmac ausgeführt.

Automatisches Löschen vom Mac erzeugter Dateien

  #!/ffp/bin/bash

  # Löschen der .DS_Store Dateien
  find /mnt/HD_b2/PRIVAT/. -name '.DS_Store' -exec rm {} \;
  find /mnt/HD_b2/FTP/. -name '.DS_Store' -exec rm {} \;

  # Löschen aller anderen Mac-Dateien
  find /mnt/HD_b2/PRIVAT/. -name '._*' -exec rm {} \;
  find /mnt/HD_b2/FTP/. -name '._*' -exec rm {} \;

Der Mac hinterlässt in jedem Verzeichnis versteckte Dateien, die mich stören. Für den Mac sind sie evtl. sinnvoll und werden bei diesem auch ausgeblendet, auf dem NAS stören sie aber und somit löscht dieses Script die Dateien und Verzeichnisse in den Ordnern PRIVAT und FTP. Mit dem Script sollte man aber vorsichtigt sein, denn weg ist wahrscheinlich auch weg.

Backup mit dem Programm rsync

Als Königsdisziplin stelle ich hier ein Script vor, welches ein Backup mit wöchentlicher oder monatlicher Rotation erstellt. Man kann also eine Woche bzw. einen Monat lang immer die Dateien des Vortages zurück erhalten. Um Speicherplatz zu sparen wird nicht alles kopiert, sondern nur Veränderungen. Daher sieht es manchmal so aus, als ob das Script nicht funktionieren würde. Tut es aber. ;-) An Hand der Kommentare sollte man das Script verstehen. Zu dem Script gehört eine weitere Datei, s. u..

  #!/ffp/bin/bash

  BDIR=/mnt/HD_b2/PRIVAT

  # Zielverzeichnis für rsync
  DDIR=/mnt/HD_a2/BACKUP

  # Excludes - zeilenweise mit mit Plus/Minus
  EXCLUDES=/mnt/HD_b2/SCRIPTE/rsy.excl

  # wöchentliche Rotation
  BACKUPDIR=${1:-`date +%A`}
  # ... oder monatliche Rotation
  #BACKUPDIR=${1:-"day"`date +%d`}

  #OPTS="
  #--force--ignore-errors \
  OPTS="--delete-excluded \
  --exclude-from=$EXCLUDES
  --delete --backup --backup-dir=$DDIR/$BACKUPDIR -a -v"

  export PATH=$PATH:/ffp/bin:/ffp/sbin

  # Fehlendes Verzeichnis erzeugen
  [ -d $DDIR ] || mkdir $DDIR

  # Logdatei schreiben
  echo oooooooooooooooooooooooooooooooooooooooooooo >> /mnt/HD_b2/SCRIPTE/rsy.log
  date >> /mnt/HD_b2/SCRIPTE/rsy.log

  # Altes Backup-Verzeicnis löschen
  [ -d $DDIR/$BACKUPDIR ] && (echo remaking $DDIR/$BACKUPDIR >> /mnt/HD_b2/SCRIPTE/rsy.log; rm -r $DDIR/$BACKUPDIR)

  # Aktueller Transfer
  rsync $OPTS $BDIR $DDIR/current >> /mnt/HD_b2/SCRIPTE/rsy.log

Beim Anpassen des Script übersieht man manchmal eine Zeile. Dann gibt es natürlich einen Fehler. Gelogged wird in die Datei rsy.log. Die Datei rsy.excl steuert, ob Verzeichnisse ausgelassen oder berücksichtigt werden sollen. Sie sieht z.B. so aus:

  + Bilder
  + Dokumente
  + Joomla_Stuff
  - Literatur
  - Mathematische_Simulationen
  - Mobile_Phone
  + Präsentationen
  - Treiber
  - Webseite
  - .DS_Store