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:

  1. Temporäres Verzeichnis anlegen

    # mkdir convert && cd convert
    
  2. 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 .
    
  3. Datei mit der Zuordnung von CVS-Benutzernamen zu Mercurial-Benutzernamen anlegen

    Beispiel:

    # cat authors
    carsten=Carsten Grohmann
    
  4. 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:

diffmeminfo.awk

#!/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)