Shell Scripting

Shellp Programmierung, Pattern Matching, Kornshell, Regular Expressions

  • Middleware,  PowerShell

    Umbenennung von Dateien per powershell

    In Linux Umgebungen haben Administratoren für Logdateien von WebSphere Application Server, Tomcat und andere Middleware Produkte meist Skripte, um die Protokolle täglich oder wöchentlich umzubenennen (per crontab). Unter Windows habe ich auf die schnelle keine vernünftige Scriptlösung gefunden. Meine Lösung stelle ich in meinem Azure DevOps Projekt pwshLogSwitch zur Verfügung. Das kleine Script erwartet mindestens ein Startverzeichnis als Parameter. Alle Dateien in diesem Verzeichnis und darunter werden umbenannt, solange die Kriterien passen. Die Auswahlkriterien werden mit den Parametern -Filter -IncludePattern -ExcludePattern definiert und entsprechen den gleichnamigen Parametern von Get-ChildItem. Es können auch reguläre Ausdrücke und Wildcards übergeben werden. Als Verzeichnis können mehrere Verzeichnisnamen per : getrennt übergeben werden. IncludePattern und…

  • PowerShell

    Powershell Tail und Head vereint

    Ausgabe der letzten und der ersten n-Zeilen in einemBefehl In Unix/Linux Derivaten sind die Befehle tail und Head oft benutzte Werkzeuge zur Ausgabe der ersten/letzten Zeilen einer Datei oder der Ergebnisse eines Befehls. Direkt kombinieren kann man sie nicht. Hier sind sed/awk und andere Werkzeuge und Lösungen gefordert. Powershell bietet eine sehr effiziente Lösung. Der erste Ansatz wäre die Ausgabe mit Select -Last und Select -First zu behandeln. Get-ChildItem somefolder | Select -First 10 Get-ChildItem somefolder | Select -Last 10 Das geht aber nicht in einem Befehl (oder nur mit einer zu schreibenden Funktion). Damit haben wir das gleiche Problem wie mit head und tail in Unix. Per Get-ChildItem und…

  • Middleware,  PowerShell

    Powershell tail für Textdateien

    In Powershell kann die Ausgabe der letzten n Zeilen in grossen Text/Ascii Dateien mit der -tail Option von Get-Content erfolgen: Get-Content meineRiesigeDatei.csv -tail 25 Seit Powershell v3 bietet Get-Content (oder der zugehörige alias gc) die Option -tail. Leider gibt es keinen tail -f zur fortlaufenden Aktualisierung.

  • Debian,  Korn Shell / Bash,  Linux,  RedHat,  Ubuntu

    Welcher Prozess belegt wieviel Swap?

    Wenn die Kommandos (in den Linux Varianten Debian, Ubuntu, RedHat und ähnlich)   free   cat /proc/swaps   swapon -s eine hohe Auslastung des Swap Spaces anzeigen, kommt die Frage nach dem Verbraucher des Swap hoch. Folgendes Miniskript gibt die Liste der Prozesse nach Größe des belegten Swap an. Mit der Variable THRESHOLD kann man die Liste auf die Verbraucher eingrenzen, die mehr als diesen Wert in kB an Swap belegen.   THRESHOLD=5000   for pid in `ls /proc`; do     vmswap=`awk '/VmSwa/{print $2}' /proc/${pid}/status 2>/dev/null`;     if [ ${vmswap} -gt ${THRESHOLD} ];then       pName=`ps -ef|awk '$2=="'"${pid}"'" {print $8}'`;       echo "PID ${pid}: ${vmswap} kB (${pName})";     fi;   done 2>/dev/null|sort -un -k3 Die Ausgabe sieht wie folgt aus:   PID 123857:…

  • PowerShell,  Windows

    PowerShell Drive alias:

    PowerShell nutzt das Konzept der Laufwerke (=PowerShell Drives) sehr ausgiebig. So werden die Umgebungsvariablen in env: verwaltet, die Windows Registry aber auch die “normalen” Laufwerke wie “C:”. Auch Aliasse für Kommandos sind ein PowerShell Drive sind. Get-ChildItem alias:

  • PowerShell,  Windows

    Mehrfache Einträge in großen Konfigurationsdateien oder Protokollen finden (Windows Powershell Lösung)

    Im Post Mehrfache Einträge in großen Konfigurationsdateien oder Protokollen finden(Linux/Unix) habe ich gezeigt, wie mehrfach vorkommende Zeilen in Textdateien gefunden und automatisch entfernt werden können. Windows hat im Zuge der Powershell ein mächtiges Werkzeug, dass dies auch kann. (Seit dem Windows 10 1709 Update kann man natürlich auch einfach die eingebaute bash nehmen….) Zur Demonstration verwende ich eine Datei duplicates.txt: Get-Content -Path duplicates.txt Zeile kommt nur einmal vor Zeile kommt zweimal vor Zeile kommt dreimal vor Zeile kommt zweimal vor Zeile kommt dreimal vor Zeile kommt auch nur einmal vor Zeile kommt dreimal vor Mehrfache vorkommende identische Zeilen und deren Anzahl findet und zählt man wie mit Group-Object Get-Content -Path…

  • Korn Shell / Bash,  Shell Scripting

    Mehrfache Einträge in großen Konfigurationsdateien oder Protokollen finden (Linux/Unix Lösung)

    Oft vermutet man in größeren Protokolldateien oder Konfigurationsdateien mehrfach vorhandene Einträge. Diese sollen schnell ermittelt und bei Bedarf entfernt werden. Unter Linux gibt es das Werkzeug uniq. Der Parameter --count gibt alle Zeilen aus und die Häufigkeit Ihres Auftretens in der ersten Spalte. Es funktioniert nur nicht so intuitiv, wie erwartet. Ich versuche es an einem Beispiel: uniq –count console.log 1 <?xml version=”1.0″ encoding=”UTF-8″ ?> 1 <Protokollzeile xxxyyyzzz > Diese Datei hat offensichtlich zwei Zeilen insgesamt und beide unterscheiden sich. Das ist im Moment nicht sehr hilfreich. Daher verdoppele ich die Datei und füge eine einzeln vorkommende Zeile hinzu: cat console.log >> consoleDup.log cat console.log >> consoleDup.log echo “Eine abweichende…

  • Shell Scripting,  Windows Bash

    Windows bash – Zugriff auf lokale Verzeichnisse

    Lokale Verzeichnisse in der Windows Bash können über den automatischen eingebunden Mount /mnt/ gelesen und geändert werden. [user1:/mnt/d/Cache] $ ls -ld /mnt/* drwxrwxrwx 0 root root 512 Mar 19 10:17 /mnt/c drwxrwxrwx 0 root root 4096 Mar 19 10:17 /mnt/d Der Zugriff auf C:\Users\user1\Documents (= Eigene Dokumente des Benutzers user1) erfolgt beispielsweise per: ls /mnt/c//Users/user1/Documents/