Skripte
In meiner Zeit als Systemadministrator sind ein paar für mich sehr nützliche Skripte entstanden, die ich Euch nicht vorenthalten möchte.
Alle Skripte sind unter der GPL ( englische Version , deutsche Version) lizenziert. Abweichende Lizenzierungen sind entsprechend im Skript vermerkt.
cvs2hg.sh - Vereinfacht die Umwandung von CVS-Repository in Mercurial-Repositories
cvs2hg.sh wandelt eine beliebige Anzahl von CVS-Modulen oder ein gesamtes CVS-Repository in Mercurial-Repositories um. Dabei wird jedes Modul innerhalb eines CVS-Repositories in ein eigenes Mercurial-Repository überführt. Die Standard-CVS-Verzeichnisse wie zum Beispiel CVSROOT oder CVS werden ignoriert.
Anwendungsbeispiel:
-
Temporäres Verzeichnis anlegen
# mkdir convert && cd convert
-
Gesamte CVS-Repository oder auch einzelne Module auschecken
Syntax:
cvs -d:pserver:<Benutzer>@<CVS-Server>:<absoluter Pfad zum Repository>
Beispiel:
# cvs -d:pserver:carsten@localhost:/home/cvs/projects/repository # cvs checkout .
-
Datei mit der Zuordnung von CVS-Benutzernamen zu Mercurial-Benutzernamen anlegen
Beispiel:
# cat authors carsten=Carsten Grohmann
-
Alle Module in eigene Mercurial-Repositories konvertieren
# cvs2hg.sh *
Dateiname | cvs2hg.sh [Signatur] | |
Größe | 1 KByte | |
Version | 0.1 | |
Sprache | Shell (Bash) |
diffmeminfo.awk - Diff für /proc/meminfo
Mit dem nachfolgende AWK-Skript kann man zwei zu verschiedenen Zeitpunkten gesicherte Stände von /proc/meminfo vergleichen und sich die Änderung anzeigen lassen.
Neben /proc/meminfo lassen sich mit dem Skript auch beliebige andere Dateien vergleichen, wenn die erste Spalte als Schlüssel dienen kann und die zweite Spalte den nummerischen Wert zum Vergleichen enthält. An weitere Formate läßt sich das Skript leicht anpassen.
Beispiel:
$ ./diffmeminfo.awk meminfo.1 meminfo.2 Name old new new - old MemTotal: 16126248 16126248 0 MemFree: 6233084 6213008 -20076 MemAvailable: 13498136 13478456 -19680 Buffers: 0 0 0 Cached: 8158748 8169076 10328 SwapCached: 0 0 0 Active: 5743340 5753652 10312 Inactive: 3814192 3824308 10116 Active(anon): 1295232 1305320 10088 Inactive(anon): 811004 820952 9948 Active(file): 4448108 4448332 224 Inactive(file): 3003188 3003356 168 [...] Hugepagesize: 2048 2048 0 DirectMap4k: 129200 129200 0 DirectMap2M: 16332800 16332800 0
Skript:
#!/usr/bin/awk -f # # Script : diffmeminfo.awk # Copyright : (c) 2017 Carsten Grohmann # Licence : MIT - THIS PROGRAM COMES WITH NO WARRANTY # Homepage : https://www.carstengrohmann.de # # Edit History: # 2017-06-16: Initial version # print headline BEGIN{ printf("%18s %12s %12s %12s\n", "Name", "old", "new", "new - old") } # FNR is the line number in the current file # NR is the overall line number # Thereby # FNR == NR: first file # FNR != NR: second, third, ... file { if(NR == FNR){ # first file n[$1] = $2; next; }else{ # second file printf("%18s %12d %12d %12d\n", $1, n[$1], $2, $2 - n[$1]) } }
getweblogfiles.pl - Ein Perlskript zur automatischen Auswertung von Logdateien
Holt und verarbeitet Logdateien des Webservers mit AWStats.
Da alles über eine kommentierte Konfiguratiosndatei gesteuert ist, entfällt sich regelmäßig wiederholende Tiparbeit.
Die Ausgaben des Skripts werden auf Wunsch per Mail versandt. Die Konfiguration erfolgt über eine kommentierte Datei und sollte sich auf für andere Programme einfach nutzen lassen.
Für die Version 2.2 wurde das Skript intern überarbeitet und verbessert. Auch wurden einige Fehler behoben. Zum Beispiel ist nun Passive FTP problemlos aktivierbar / deaktivierbar ist, was in den letzten Versionen nicht voll implementiert war.
Die Version 2.3 bringt eine eigene Implementierung von cat() mit benötigt daher das Modul File::Cat, daß meist zusätzlich installiert werden mußte, nicht mehr.
Details aller Änderungen stehen wie immer im ChangeLog.
Dateiname | getweblogfiles.pl.bz2 [Signatur] [ChangeLog] | |
Größe | 15 KByte | |
Version | 2.3 | |
Dokumentation | HTML | |
Sprache | Perl |
mkfloppyimg.sh - Vergößert das Abbild einer Diskette
Vergrößert das bootfähige Abbild einer Diskette auf eine frei wählbare Größe. Dabei bleibt der Inhalt erhalten und das neu erzeugte Abbild ist ebenfalls bootfähig.
Dateiname | mkfloppyimg.sh [Signatur] [ChangeLog] | |
Größe | 3 KByte | |
Version | Revision 1.3 | |
Sprache | Shell |
sortCLF.pl - Sortiert eine Logdatei im CLF-Format
Sortiert eine Logdatei nach dem Datum der Einträge. Dabei können die Daten entweder von der Standardeingabe oder aus Dateien gelesen werden. Die Ausgabe erfolgt auf die Standardausgabe.
Dateiname | sortCLF.pl.bz2 [Signatur] | |
Größe | 652 Byte | |
Version | 0.1 | |
Sprache | Perl |
sort_passwd.pl - Sortiert etc/passwd und /etc/shadow
sortpasswd.pl sortiert die beiden Dateien /etc/passwd und /etc/shadow nach der Benutzer-ID (uid). Desweiteren wird die Stimmigkeit der beiden Dateien überprüft und nicht korrespondierende Einträge gemeldet.
Dateiname | sort_passwd.pl.bz2 [Signatur] | |
Größe | 1 KByte | |
Version | 0.1 | |
Sprache | Perl |
supernetting.py - Faßt Subnet-Adressen zusammen
supernetting.py faßt Subnet-Adressen zusammen. Dabei werden spezifischere Adressen aus der Liste entfernt, wenn sie schon in einer allgemeineren Subnet-Adresse enthalten sind.
Weiterhin werden zwei aufeinander folgende Subnet-Adressen unter bestimmten Umständen zu einer Allgemeineren zusammengefaßt.
Man kann dieses Skript nutzen, um kleinere Routing-Tabellen oder kompaktere Firewall-Regelsätze zu erhalten.
Dateiname | supernetting.py [Signatur] [ChangeLog] | |
Größe | 28 KByte | |
Version | 1.0 | |
Dokumentation | HTML | |
Sprache | Python |
weekly.py - Verschickt die Tagebucheinträge einer Woche per Email
Mit weekly.py lassen sich die Einträge eines persönlichen Tagebuchs oder einer Logdatei wochenweise per Mail versenden. Dies kann sehr nützlich sein, um wöchentliche Arbeitsberichte zu versenden. Die lästige Suche nach den richtigen Einträgen vergangener Wochen übernimmt das Skript.
Die passenden Logeinträge lassen sich zum Beispiel gut mit dem Shell-Skript today.sh von Axel Wachtler erstellen.
Dateiname | weekly.py [Signatur] [ChangeLog] | |
Größe | 20 KByte | |
Version | 0.5 | |
Dokumentation | HTML | |
Sprache | Python |
writeCD - Ein Shellskript um CDs komfortabel zu brennen
Ein Bash-Skript zum Erzeugen von Multisession-CDs mit 'mkisofs`, cdrecord und sudo (falls die Rechte fehlen). Es kann auch CDRWs handhaben. Als Einschränkung gilt nur, daß der Benutzer ohne root-Rechte und ohne Lese- und Schreibrechte auf die SCSI-Devices nur die erste Session mit sudo erstellen kann. Mit den entsprechenden Rechten funktioniert es problemlos. Mit sudo natürlich auch.
Das ChangeLog bietet eine detaillierte Liste der Änderungen. Die beiden wichtigsten Änderungen sind:
Automatische Erkennung von Brennern hinzugefügt
Option zum Schreiben eines ISO-Abbildes hinzugefügt
Dateiname | writeCD [Signatur] [ChangeLog] | |
Größe | 36 KByte | |
Version | 0.7g | |
Sprache | Shell (Bash) |