Nuetzliche Scripte: Unterschied zwischen den Versionen
Stippi (Diskussion | Beiträge) K (→BASH Skript: SYSInfo zum üben: Schreibfehler korrigiert) |
|||
Zeile 505: | Zeile 505: | ||
# should do the following: | # should do the following: | ||
# output a salutation, introduce the hostname, display date | # output a salutation, introduce the hostname, display date | ||
− | # and time as well as the kernel version used and | + | # and time as well as the kernel version used and a final |
# salutation at the end. | # salutation at the end. | ||
# Please consider to play with it and insert your own | # Please consider to play with it and insert your own |
Version vom 29. April 2017, 15:59 Uhr
Nützliche Scripte
Hier werden ein paar nützliche Scripte vorgestellt, die man nach Belieben anpassen kann. Ein paar hilfreiche Befehle, so genannte Kommandzeilen-Befehle, finden sich auf der Mini-HowTos Seite.
BASH-Script: JPEG EXIF Text schreiben
Ein bash-script welches ab dem Startverzeichnis alle Unterverzeichnisse rekursiv nach einem Dateifilter (hier *.jpg) durchsucht. Auf alle gefundenen Dateien (keine Verzeichnisse) wird dann das Tool exiftran angewendet. Dieses überschreibt den Bildkommentar mit dem angegebenen Text. Achtung der bisher dort stehende Kommentar geht wirklich verloren, da er überschrieben wird. Damit es aber kein böses Erwachen gibt, wird von jeder geänderten Datei eine Kopie mit der Endung ~ erstellt. Wenn man sich sicher ist, kann man natürlich die Option -b bei exiftran weglassen. Ich würde das nicht tun, sondern bei Bedarf lieber die Sicherheitskopien mit rm -rf *~ löschen.
Das Script wird auf der Kommandozeile mit dem Kommentartext als Parameter, am besten in Anführungszeichen, gestartet (nur wenn es in einem Verzeichnis aus PATH steht -> Anzeige mit echo $PATH, ansonsten muß natürlich der komplette Pfad mit angegeben werden): make_exif-name.sh "© Ulfi".
#!/bin/bash # Add a exif-comment to all JPEG-Files from this directory and all subdirectorys # # (c) LUG-VS (GPL) VERSION="make_exif-name.sh Version 0.0.2 from 23.10.2005" # # Input: comment text # Output: changed files # # Changes: # 0.0.2: comment as parameter from commandleine # 0.0.1: generation # COMMENTSTEXT=$* JPEGFILEFILTER=*.jpg # trap is executed if script breaks trap "echo '*** TRAP ***' ; exit" ERR # check if command exists else break which exiftran > /dev/null || echo "exiftran not found!" || exit; echo "Write Comment: <"${COMMENTSTEXT}">" # for each file in JPEGFILEFILTER do # exiftran - transform digital camera jpeg images and use the libexif-Library # -i Enable inplace editing of the images. # -b Create a backup file when doing inplace editing. # -p Preserve timestamps (atime + mtime) when doing inplace editing. # -c <text> Set jpeg comment tag to <text>. find . -type f -name "${JPEGFILEFILTER}" -exec exiftran -ibp -c "${COMMENTSTEXT}" {} \;
BASH-Script: Download von durchnummerierten Dateien
Manchmal möchte man einige Dateien mit durchlaufender Nummer von z.B. 01 bis 99 (also mit führender Null) durchnummeriert downloaden oder in einem Script anders verarbeiten. Setzt man aber ein Bash-Variable direkt ein, so erhält man 1 statt 01. Im nachfolgenden Skript habe ich mal sowas umgesetzt (ich möchte nicht ausschließen das es auch einen eleganteren Weg gibt).
Das Skript selber ist eigentlich recht simpel. Zunächst werden einige Variablen vorbelegt. Im Beispiel wird z.B. ein Proxy gesetzt, z.B. um einen Werbeblocker oder einen Anonymisierungsdienst dazwischen zu schalten. Anschließend wird in das Zielverzeichnis gewechselt. Nun startet eine for-Schleife welche die Variable NR hochzählt. Innerhalb der Schleife werden dann mit Hilfe einer arithmetischen Operation zunächst die Einer- und Zehner-Werte ermittelt. In der Bash wird eine arithmetischen Operation mit einem $ eingeleitet und innerhalb einer doppelten runden Klammer eingefasst z.B. $((567 / 10)). Diese ersetzt dann die Berechnung durch das Ergebnis, im Beispiel wird also $((567 / 10)) durch 56 ersetzt (also eine Integerzahl oder ganze Zahl). Sind nun die Zehnerpotenzen separiert, so können sie wie im Beispiel mit dem Download Tool wget verwendet werden. Dieses lädt die Datei (notfalls auch in mehreren Versuchen) über den Proxy ins lokale Verzeichnis. Sind alle Dateien geladen, wird die Schleife beendet und wieder zurück in das ursprüngliche Verzeichnis gewechselt. Damit der Nutzer dieses Skriptes seine Aufmerksamkeit in der Zwischenzeit anderen Dingen zuwenden kann, wird nach Beendigung der Operation mit dem Befehl beep ein akustisches Signal ausgegeben und der Vorgang als abgeschlossen gemeldet.
#!/bin/bash # (c) LUG-VS (GPL) # Set Variables export http_proxy=http://proxy.homenetz.de:1234/ # Set an Proxy # Change to destination path cd ${HOME}/MyDestinationPath # Do for every Number from 1 to 99 for (( NR=1; $NR < 100; NR=$NR+1 )); do # Calkulate exponents (10^1 and 10^0) ZNR=$((${NR}/10)) ENR=$((${NR}-$((10*${ZNR})))) # Echo and download the file with the number and save to an other name echo -e "\twget --proxy=on -c ftp://tst.de/path/File${ZNR}${ENR}.Ext -O Datei${ZNR}${ENR}.Ext\n" # download over proxy the file (option -c says repeat and reconect the download) wget --proxy=on -c ftp://tst.de/path/File${ZNR}${ENR}.Ext -O Datei${ZNR}${ENR}.Ext if [ "$?" -ne 0 ]; then # Delete the File if an error before and file exists test -e Datei${ZNR}${ENR}.Ext && rm Datei${ZNR}${ENR}.Ext fi; done; # Go back in the last path cd - # Make a short beep to sign that the download is ready beep
BASH-Skript: konvertiert Textdateien in utf8 CharSet
Das nachfolgendes Skript konvertiert eine Textdatei von einem anderen Zeichensatz (CharSet) in den Unicode (utf8). Dabei versucht es selbstständig den vorherigen Zeichensatz herauszufinden. Um Datenverlust zu vermeiden wird die Datei zuerst in eine Sicherheitskopie umbenannt (mit der "~" =Tilde als letztes Zeichen, wie das viele UNIX Editoren auch machen). Hat das Skript die Konvertierung abgeschlossen, schreibt es das bearbeitete (konvertierte) Ergebnis in den Original-Dateinamen zurück. Allerdings muss man dann selbst prüfen, ob man mit dem Ergebnis der Bearbeitung zufrieden ist. Ansonsten kann man das Ergebnis ja löschen und die Datei wieder mit dem vorherigen Namen benennen.
#!/bin/bash # Script wich converts a file in 'text/plain' from an not utf8 char set to utf8 char set # # (c) LUG-VS (GPL) VERSION="$0 Version 0.1.0 from 20.09.2006" # if [ "$1" == "" ]; then echo "Please enter Filename as first option which should be converted" echo echo -e "INFO:\n\tTo convert all old latin1 file-names in new utf8 file-names use:" echo -e "\t\t'convmv --notest -r -f latin1 -t utf-8 *'\n" exit -1 fi myNEWNAME=$1 myNEWNAMEsik=$(echo ${myNEWNAME}~) myFILETYPE=$(file -bi ${myNEWNAME} | cut -d';' -f1) myCHARSET=$(file -bi ${myNEWNAME} | cut -d'=' -f2) # if Filetype is convertable if [ "${myFILETYPE}" == "text/plain" ] && [ "${myCHARSET}" != "utf8" ]; then # If sik file exists break with error message test -e ${myNEWNAMEsik} && echo "File <${myNEWNAMEsik}> exists" && exit -2 mv ${myNEWNAME} ${myNEWNAMEsik} # Convert the old CharSet in utf8 echo "Convert ${myNEWNAME} from ${myCHARSET} to utf8" iconv -f ${myCHARSET} -t utf8 -o ${myNEWNAME} ${myNEWNAMEsik} else # Print error Message echo "Filetype not 'text/plain' (${myFILETYPE}) or char set is 'utf8' (${myCHARSET})" fi
BASH-Skript: konvertiert Dateien von z.B. WMF in z.B. SVG
Ab und zu möchte man Dateien, welche in irgend einem Grafikformat vorliegen, in ein anderes konvertieren. Dieses gelingt mit den Programm convert aus dem ImageMagick® Paket recht einfach. Eine Liste der unterstützten Formate findet man auf dieser Seite: http://www.imagemagick.org/script/formats.php. Dieses Skript definiert am Anfang das Quellformat in der Variablen FORMATin und das Ausgabeformat in der Variablen FORMATout. Durch Anpassen der entsprechenden Datei-Enden aus der Formatliste von ImageMagick® sollte man einen beliebigen Konverter bauen können. In den Zeilen welche zwischen echo -e und >> `echo ${TEMPfile}` das eigentliche Bearbeitungs-Skript generieren, können natürlich beliebige Ergänzungen eingebracht werden. Aber Achtung, man kann hier natürlich auch sehr viel falsch machen. Deshalb sollte man zunächst neue Befehle mit einem echo davor zunächst mal ansehen, bevor man sie dann durch das Entfernen von echo tatsächlich verwendet. Auch ein temporäres Verzeichnis mit kopierten Beispieldateien kann ganz hilfreich sein.
Benutzt wird das Skript, nachdem man die nachfolgenden Zeilen in eine Datei kopiert. Man öffnet es zum Beispiel mit dem Programm Kate im Zielpfad auf der Kommandozeile, bzw. im Terminal mit kate wmf2sfg.sh. Dann wird das Skript per copy & paste (Kopieren und Einfügen = Strg+C und danach Strg+V) in der leeren Datei abgespeichert. Die erzeugte Datei wmf2sfg.sh wird nun noch ausführbar gemacht - z. B. im Terminal mit chmod +x wmf2svg.sh. Das geht bei den meisten Distros aber auch grafisch im jeweiligen Dateimanager, indem man mit einem Rechtsklick auf die Datei in das Menü Eigenschaften gelangt und danach einen Haken im Feld Ausführbar (unter dem Reiter Berechtigungen) setzt. Aufgerufen ohne Parameter konvertiert das Skript alle Dateien mit FORMATin (bzw. des dort angegebenen Dateityps, bzw. der Dateiendung) aus dem aktuellen Verzeichnis und allen Unterverzeichnissen, in das Ausgabeformat FORMATout (bzw. des dort angegebenen Dateityps, bzw. der Dateiendung). Als Parameter kann man aber auch den Pfad direkt angeben, von dem aus das Skript alle Dateien, sowie diejenigen aus den Unterverzeichnissen konvertiert.
#!/bin/bash # Simple script to "convert" a grafik file format to an other # # (c) LUG-VS (GPL) VERSION="wmf2svg.sh Version 0.0.2 from 2006-12-27" # # Input: path # Output: changed files # # Changes: # 0.0.2: rebuild with temporary convertion file # 0.0.1: generation # FORMATin=.wmf FORMATout=.svg TEMPfile=`dirname $0`/$$.sh EXECpath=. # trap is executed if script breaks (remove temporary file if exists) trap "echo '*** TRAP ***' ; test -e ${TEMPfile} && rm ${TEMPfile} ; exit" ERR # check if command exists else break which convert > /dev/null || echo "convert not found!" || exit; # check if filename exists if [ -e ${TEMPfile} ] ; then echo '${TEMPfile} exists => call this comand a 2-nd time' exit fi # if path exists and is a path => use it if [ -d $1 ] ; then EXECpath=$1 fi # generate temporary script for manipulation and made it executable # change in this sektion what is to do # the "echo" comand writes the comand lines in the ${TEMPfile} echo '#!/bin/bash' > `echo ${TEMPfile}` echo -e 'myFILEin=$1\nmyFILEout=`dirname $1`/`basename $1 '${FORMATin}'`"'${FORMATout}'"' >> `echo ${TEMPfile}` echo -e 'echo convert ${myFILEin} ${myFILEout}' >> `echo ${TEMPfile}` echo -e 'convert ${myFILEin} ${myFILEout}' >> `echo ${TEMPfile}` echo -e '# write what you want to do without coment char "#" in this line' >> `echo ${TEMPfile}` echo -e '# rm ${myFILEin} ;# remove "#" befor rm if you want to delete the source' >> `echo ${TEMPfile}` chmod +x ${TEMPfile} # echo what is to do echo 'Start recursive convertion from *'${FORMATin}' in *'${FORMATout} # find all files (not case sensitive) that matching filter and execut script find ${EXECpath} -type f -iname "*${FORMATin}" -print0 | xargs -0 -n1 ${TEMPfile} # debug => remove this line if not need cat ${TEMPfile} # remove the temporary script rm ${TEMPfile}
BASH-Skript: Festplatte sicher löschen
Vielleicht haben Sie schon mal darüber nachgedacht eine Festplatte weiterzugeben, z. B. bei Ebay zu verkaufen. Damit auf diesem Weg nicht auch Ihre persönlichen Daten unbeabsichtigt weiter gegeben werden, sollten Sie deshalb diese Festplatte löschen. Das ist der Sinn dieses Skriptes: es überschreibt die Festplatte in zwei Schritten. Zuerst werden Zufallszahlen auf die gesamte Platte geschrieben und anschließend komplett mit Nullen gefüllt. So können die Daten nicht ohne erheblichen technischen Aufwand wiederhergestellt werden. Für Laien und ambitionierte Hobbytüftler also sicher. Aber Achtung! Bei aktuell recht großen Platten ab mehrere hundert GB, kann das Löschen auch schon mal einen Tag lang gehen! Anmerkung: Die Festplatte sollte entweder zusätzlich in den PC eingebaut sein oder mit Hilfe eines USB- oder eSATA-Anschlusses mit dem PC verbunden werden, damit das funktioniert. Es ist keine gute Idee das mit der /dev/sda1 bzw. /dev/hda1 eines laufenden GNU/LINUX-Systems zu machen!
Es geht aber auch, wenn man dieses Skript auf einen USB-Stick speichert und z. B. ein Live-LINUX von CD / DVD startet und das Skript von dort aus vom USB-Stick aufruft, wenn man z. B. einen Laptop verkaufen möchte ohne die Festplatte zuvor umständlich aus- und wieder einzubauen.
TIPP: Der Aufruf des Skriptes funktioniert nur, wenn man dem Skript als Variable den Pfad zur Festplatte (Device) angibt:
[Skriptname] /dev/sdX
Dabei ist der Name des Skriptes frei wählbar. Ich nenne es z. B. SchredderHDD.sh. Der Pfad zur Festplatte richtet sich nach der Festplatte selbst. Also /dev/sda für die erste, /dev/sdb für die zweite, /dev/sdc für die dritte Festplatte im Gerät u.s.w. Aber ACHTUNG! Wer sich nicht absolut sicher ist, das Richtige zu tun, sollte besser jemanden fragen, der sich damit auskennt. Ansonsten bitte die Finger davon lassen! Unwiederbringlich gelöschte Daten sind eben für immer gelöscht! Es darf normalerweise auf den PC keine noch benötigte Platte angeschlossen sein - nur das CD/DVD Laufwerk bzw. der USB Stick (idealerweise schreibgeschützt). Ansonsten löscht man aus Versehen seine noch benötigte Platte! SchredderHDD.sh downloaden
#!/bin/sh # Löscht ein komplettes Device # Version 0.1.1 # Vom 2012-10-15 # (c) LUG-VS (GPL) # teste ob vorhanden if [ "`whoami`" != "root" ] ; then echo 'Nicht ausreichend Rechte - bitte als "root" anmelden!' exit 10 fi # Überprüft ob Parameter vorhanden if [ $# -lt 1 ] ; then echo 'Device angeben z.B. "'$0' /dev/sdf"' exit 20 fi # teste ob vorhanden if [ ! -b $1 ] ; then echo 'Device existiert nicht' echo 'Device angeben z.B. "'$0' /dev/sdf"' exit 30 fi # Device zuweisen OF=$1 # Letze Nachfrage echo -n '*** Achtung! Device (Festplatte)' ${OF} 'wirklich löschen? (j/n)' read key echo "\n" if [ "${key}" != "j" ] ; then echo 'Antwort nicht "j" => abgebrochen durch Benutzer'; exit 1; fi; # Laufwerk aushängen echo 'Laufwerk aushängen' umount -f ${OF}* # Zufallszahlen beschreiben und anschließend löschen date +"%F %T" echo 'Schreibe Zufallszahlen auf' ${OF} dd if=/dev/urandom of=${OF} echo -en "\n" date +"%F %T" echo 'Schreibe Nullen auf' ${OF} dd if=/dev/zero of=${OF} bs=65536 date +"%F %T" echo 'Device (Festplatte)' ${OF} 'sicher gelöscht' OF= # 4 mal lüten #for (( INDEX=4 ; ${INDEX} ; INDEX=$(( ${INDEX} - 1 )) )) ; do # beep # => beep wird nicht gefunden ist auch kein alias ???!!! # wait #done #INDEX=
BASH Skript: Stellt sicher, dass Namen aus einer Datei als Verzeichnis angelegt sind
Dieses Skript hat unser Mitglied Gerhard für seine Auftragsbearbeitung erstellt und uns als GPL zur Verfügung gestellt. Danke dafür an Ihn!
Dieses Skript liest zeilenweise Daten im Format EingabeDatei.txt, in welchen Aufträge in der Formatierung YYANR-Name abgelegt sind. Dabei entspricht YY dem Jahr, ANR der dreistelligen Auftragsnummer und Name dem Namen des Auftrags. Diese Daten werden nach Jahren sortiert und - falls noch nicht vorhanden - als Unterordner neu angelegt. Dabei sollten auch ähnliche Einträge, die schon manuell angelegt wurden, erkannt werden und damit nicht erneut erzeugt werden.
#!/bin/bash # Loop für jede Zeile einer while read zeile ; do # Einzelne Komponenten aus der Datei JAHR=`echo $zeile | awk '{print substr($1,1,2)}'` RNR=`echo $zeile | awk '{print substr($1,3,3)}'` TXT=`echo $zeile | awk '{print $2}'` # In Zielverzeichnis nach Vorhandensein prüfen SUCHSTRING=/home/otto/Auftraege-20${JAHR}/${JAHR}-${RNR}* SUCHDIR=`(ls ${SUCHSTRING} | awk '{print $1}')` files=$(find ${SUCHSTRING} 2> /dev/null | wc -l) # Wenn noch nicht vorhanden, Verzeichnis anlegen if [ ! "${files}" != "0" ] ; then mkdir "/home/otto/Auftraege-20${JAHR}/${JAHR}-${RNR}-${TXT}" fi done < EingabeDatei.txt
BASH Skript: Führt ein komfortables und inkrementelles Backup/Restore aus
Diese Skript benutzt einen Zenity-Dialog und eine graphische Schnittstelle mit der der User einfach und komfortabel Backup/Restore machen kann. Die Ereignisse werden in einer Log-Datei /tmp/backup-restore-de.log erfasst, da für den Ordner /var/log root Zugangsrechte nötig sind.
#!/bin/bash -x # # (c) LUG-VS (GPL) # # Beschreibung: Führt ein komfortables und inkrementelles Backup aus. # Zusätzliche Pakete: Zenity-Library. # Skript Name: backup&restore-de.bash # Version: vom 15.01.2017 (Deutsch) # Bemerkung: Bei Dateiname oder Ordnername, # darf kein Leerezeichen dazwischen sein. # Nur mit Runlevel 5 bzw. xorg ausführbar und. # root Zugriffrechte. # Author: Giorgio Giuseppe Codardo (giuseppe.codardo@googlemail.com #=========================================================================== # Deklaration, Definition und Initialisierung von Variablen. SOURCE=' ' DESTINATION=' ' typeset -i OPERATION=0 RESULT=' ' typeset -i BYTES=0 DATE=$(date +%d.%m.%Y) TIME=$(date +%H:%M) #========================================================================== # echo $PATH # function verify_exit_status { if [ $? -ne 0 ]; then zenity --error \ --text="Es ist ein Fehler aufgetreten, deshalb wird dieses Script unterbrochen:\n - Bitte mit anderen Parametern neu starten, \n - oder Debugging verwenden um den Fehler zu suchen." exit fi } # # #========================================================================== function start_backup { SOURCE=$(zenity --file-selection \ --multiple \ --directory \ --title="Quelleverzeichnis wählen ...") # # '|' von Zenity wird ' 'ersetzt, so das man in der Kommandozeile für # cp benutzen kann. # SOURCE=${SOURCE//|/' '} # zenity --warning \ --text=" WICHTIG! \n - Externe Festplatte mounten,\n - Bei Home-Verzeichnis: Verlauf löschen und \n Papierkorb leeren, \n - Sicherstellen, dass das Dateisystem kompatibel ist." # DESTINATION=$(zenity --file-selection \ --directory \ --title="Zielverzeichnis wählen ...") # verify_exit_status # # Startet ein inkrementelles Backup # cp --archive --update $SOURCE $DESTINATION | zenity --progress \ --title="Backup wird ausgeführt" \ --width=400 --height=200 \ --text="Bitte warten ..." \ --pulsate \ --auto-close # # Hier werden die Bytes ermittelt, die kopiert wurden und # der Pfad weg geschnitten. # RESULT=$(du -bs $SOURCE) RESULT=${RESULT/'/'/'_'} BYTES=${RESULT%_*} # zenity --info \ --text="BACKUP erfolgreich ausgeführ !\n Es wurden $BYTES Bytes kopiert/aktualisiert.\n Weitere Infos: /tmp/backup-restore-de.log" } # End function start_backup # #========================================================================== # function start_restore { zenity --warning \ --text=" WICHTIG! \n - Externe Festplatte mounten,\n - Sicherstellen, dass das Dateisystem kompatibel ist." # SOURCE=$(zenity --file-selection \ --multiple \ --directory \ --title="Quelleverzeichnis wählen ...") verify_exit_status # SOURCE=${SOURCE//|/' '} # # DESTINATION=$(zenity --file-selection \ --directory \ --title="Zielverzeichnis wählen ...") # verify_exit_status # cp --recursive --force $SOURCE $DESTINATION | zenity --progress \ --title="Widerherstellung wird ausgeführt" \ --width=400 --height=200 \ --text="Bitte warten ..." \ --pulsate \ --auto-close # RESULT=$(du -bs $SOURCE) RESULT=${RESULT/'/'/'_'} BYTES=${RESULT%_*} # zenity --info \ --text="WIDERHERSTELLUNG erfolgreich ausgefuehrt !\n Es wurden $BYTES Bytes wiederhergestellt.\n Weitere Infos: /tmp/backup-restore-de.log" } # End function start_restore #========================================================================== # Main programm # # Eingabe für Superuser # PASSWORD=$(zenity --password) # echo $PASSWORD | sudo -S su # "Access Denied !!!" # OPERATION=$(zenity --list \ --title="Aktion wählen ..." \ --width=800 --height=400 \ --column="Nummer" --column="Aktion" --column="Beschreibung" \ 1 Backup "Ausführung eines inkrementellen Backups." \ 2 Restore "Wiederherstellung aus gesicherten Daten.") case $OPERATION in 1) start_backup echo "Backup wurde am: $DATE um $TIME durchgefürt und $RESULT Bytes gesichert/aktualisiert" \ >> /tmp/backup-restore-de.log 2>&1 verify_exit_status ;; 2) start_restore echo "Wiederherstellung wurde am: $DATE um $TIME durchgefuehrt und $RESULT Bytes gesichert/aktualisiert" \ >> /tmp/backup-restore-de.log 2>&1 verify_exit_status ;; *) verify_exit_status ;; esac # exit 0 #==========================================================================
BASH Skript: Führt ein komplettes Backup Deines 'Thunderbird' aus
Hier ein ganz einfaches Skript, das den eigenen .thunderbird-Ordner weg sichert. Das kann man noch optimieren, erweitern und auch automatisieren, wenn man will. In meinem Fall, genügt mir diese einfache Variante, weil ich es bewusst nach einzelnen Aktionen wie dem massenhaften Abrufen zahlreicher Mailkonten manuell einsetze. Es werden auch die Kalendereinträge im Kalendermodul ('Lightning') mit gesichert, wenn man dies benutzt. Diese Skript setzt folgendes voraus: Ein Verzeichnis namens 'bin' und ein Verzeichnis mit dem Namen 'backup' im eigenen HOME-Verzeichnis sind vorhanden:
cd mkdir bin backup
Das Skript muss in 'bin' abgespeichert werden. Der Name ist frei wählbar, ich habe es 'tbbup' (Thunderbird Backup) genannt. Es muss nach dem Erstellen noch ausführbar gemacht werden:
cd bin chmod u+x tbbup
Sobald man sich auf einer Konsole (Terminal) neu anmeldet, sollte bei einer Standard-Distribution wie z. B. Debian die Ausführung einfach durch die Eingabe von
user@localhost ~ $ tbbup
starten. (Hier bitte nur das fett Gedruckte eingeben. Der vorausgehende Teil ist der Prompt!) Wenn Thunderbird läuft, wird nun gefragt, ob das Programm beendet werden soll. Hier muss man mit 'y' antworten! Sonst bricht das Skript einfach ab. Hintergrund: Wenn Thunderbird gestartet ist, sollte man kein Backup machen, damit die Wiederherstellung überhaupt möglich wird. Bei laufendem TB existiert nämlich eine Lock-Datei, die einen Zeitstempel enthält. Die Datei wird beim Beenden gelöscht. Stellt man ein im laufenden Betrieb gesichertes TB später wieder her, macht diese Lock-Datei Probleme und TB kann anschließend nicht gestartet werden.
#!/bin/bash # name of script: tbbup - Thunderbird Backup-Script # license: GPLv2 or higher # author: u.stippekohl@sophtwearteam.de # date of first creation: 12/05/2015 (Dec. 5, 2015) # should do the following: # check if thunderbird is running and stop it if so # than create a tar.gz-file named 'tb_[date]_[time].tar.gz in a directory # named 'backup' in your home-directory # killall -i thunderbird && tar cvfz ~/backup/tb_$(/bin/date +%Y-%m-%d_%H:%M).tar.gz ~/.thunderbird/* exit 0
Hinweis: Beachte bitte, dass die Wiederherstellung über das tar-Kommando auf den versteckten Ordner .thunderbird in Deinem HOME-Verzeichnis funktioniert:
tar -xzvf backup/tb_[YYYY-MM-DD_hh:mm].tar.gz .thunderbird
Mit absoluten Pfaden:
tar -xzvf /home/[username]/backup/tb_[YYYY-MM-DD_hh:mm].tar.gz /home/[username]/.thunderbird
wobei der Teil [YYYY-MM-DD_hh:mm] mit den tatsächlichen Werten für Datum und Uhrzeit ersetzt werden muss! Deshalb bitte nicht vergessen, dass vor dem 'thunderbird' ein Punkt sitzt:
.thunderbird
Der absolute Pfad wäre in diesem Fall also: '/home/[Dein Benutzername]/.thunderbird'.
BASH Skript: SYSInfo zum üben
Dieses Skript ist nur zu Übungszwecken. inxi leistet hier wesentlich mehr und bessere Arbeit. Auch grafische Tools wie die Systemüberwachung sind sicherlich besser und übersichtlicher. Aber um zu verstehen, wie Skripte arbeiten und funktionieren und um einfach mal mit dem Skripten anzufangen, ist das eine gute Übung.
#!/bin/bash # name of script: sysinfo # license: GPLv2 or higher # author: u.stippekohl@sophtwearteam.de # date of first creation: 04/29/2015 (Apr. 29, 2017) # should do the following: # output a salutation, introduce the hostname, display date # and time as well as the kernel version used and a final # salutation at the end. # Please consider to play with it and insert your own # commands you are interrested in like e. g. # cat /etc/debian_version; df -h ~; ls echo "Welcome $(whoami)" echo "My name is '$(hostname)'" echo "The date and time is $(date)" echo "My kernel version is $(uname -r)" echo "Thank you for using sysinfo-script." echo "Good bye!"
Da dieses Skript unter der GPL v2 steht, darf man es verwenden, ändern und wieder weitergeben / veröffentlichen, solange man es unter die selbe Lizenz stellt. Ihr könnt Euch also daran austoben. Aber nicht vergessen: Sobald ihr Manipulationen am System vornehmt oder Befehle mit systemveränderndem Charakter einsetzt, wie zum Beispiel den rm-Befehl, kann es je nach Konstellation auch schädlich sein. Ihr benutzt also alle Skripte hier auf eigene Gefahr!
Bei Unklarheiten oder offensichtlichen Fehlern seid Ihr gefragt. Schreibt an die Mailingliste (lug-vs@lug-vs.org) oder fragt an einem unserer Stammtische einen der Autoren direkt. Wir lernen täglich aus unseren Fehlern und voneinander.
Links BASH Programmierung
Noch ein paar Links, wo man weitere Informationen zur BASH Programmierung findet.
- Einführung in die BASH auf selfLinux.org
- Bedienung der BASH auf Linux-Community.de
- Einführung in die BASH-Programmierung auf Linux-Community.de
- Einführung in die BASH auf bin-bash.de dem Treffpunkt für Linux-Shelluser
- Shell-Workshop, Teil 1: Shell-Skripte selbst schreiben (Teil 1) in der LinuxUser
- Shell-Workshop, Teil 2: Shell-Skripte selbst schreiben (Teil 2) in der LinuxUser
- Shell-Workshop, Teil 3: Ordnung schaffen in der LinuxUser
Sonstige nützliche Scripte aus dem Internet
Umbenennen von Dateien mit Sonderzeichen in ASCII konforme Namen
chnames.sh (bzw. auch unter) von Conny Faber ist ein BASH Script zum umbenennen von Dateinamen in eine ASCII basierte Version ohne Sonderzeichen.
Zurück zur Linux Hilfeseite oder zur Hauptseite