Linux:ShellScripte
Vorlage:GoogleAnalytics 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
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