script
ROT13 bash
Also auf die Idee bin ich noch nicht gekommen, einen ROT13 einfach mit ‚tr‘ zu erzeugen:
echo "Hallo Welt" | tr [a-zA-Z] [n-za-mN-ZA-M] Unyyb Jryg echo "Unyyb Jryg" | tr [a-zA-Z] [n-za-mN-ZA-M] Hallo Welt
Powershell Stringverwendung
Ein Script verhält sich anders auf Windows 2008 und Windows 2012? Scheinbar hat sich die Stringverarbeitung leicht verändert. Wo unter 2012 eine Variable aufgelöst wird, passiert das unter 2008 nicht:
Windows 2008 R2
$A="IchBinEineVariable" echo "-p$A" -pIchBinEineVariable echo -p"$A" -p"$A" echo -p$A -p$A
Windows 2012 R2
$A="IchBinEineVariable" echo "-p$A" -pIchBinEineVariable echo -p"$A" -pIchBinEineVariable echo -p$A -p$A
Powershell 32 Bit vs. 64 Bit
Wenn einem Certutil.exe bei manchen Parametern mitteilt, dass manche Klassen nicht geladen werden könne, ist möglicherweise die 32 Bit vs. 64 Bit Problematik daran schuld.
C:\windows\System32\certutil.exe -view -restrict "Issued Common Name=<CN>, Disposition=20" -out "RequestID,RequesterName" -config "<CAHostName>\<CAName>" CertUtil: -view command FAILED: 0x80040154 (-2147221164) CertUtil: Class not registered
Wie tritt das auf, wenn ich doch ein 64 Bit Betriebssystem habe? Und wie stelle ich fest, was ich für eine PowerShell am laufen habe?
Eine „normale“ PowerShell:
> [Environment]::Is64BitProcess True
Die „gleiche“ PowerShell geöffnet in MobaXterm:
> [Environment]::Is64BitProcess False
Erst Version 10 von MobaXterm soll das Problem beheben und auf 64 Bit Systemen die korrekte PowerShell öffnen.
Interessantes Detail am Rande, eine 64 Bit PowerShell liegt unter C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe die 32 Bit Version ist zu finden unter C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe!
Start a not running process via cron
Beispielcode zum Starten eines Prozesses, wenn diese nicht mehr Läuft. Direkt zur Verwendung in Cron.
#!/bin/bash PROG="apache" ps -ww aux | grep -v grep | grep $PROG >/dev/null 2>&1 if [[ $? -eq 0 ]]; then echo "$PROG found" else echo "$PROG not found" # hier restart einfügen fi
Achtung: Das Script einfach parametrisierbar zu machen via $1 statt $PROG funktioniert nicht, da $1 auch wieder von PS gefunden wird. Es wird daher immer der $PROG found Zweig durchlaufen!
WordPress und PHP7
Ein neues PHP ist verfügbar für den Webspace! Sofort aktivieren, für WordPress ist das kein Problem!
Doch was passiert – alle Beiträge sind leer.
Was steht im Log?
Got error 'PHP message: PHP Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
Die Lösung habe ich unter wordpress.org gepostet. Dieses nette wp-code-highlight Plugin zerreisst es leider komplett, wenn ich diese Zeilen einfüge.
Gute Infos gibt es auf stackoverflow
Aufräumen wenn ein Script abgebrochen wurde
#!/bin/bash TMPFILE1=$(mktemp /tmp/im1.XXXXXX) TMPFILE2=$(mktemp /tmp/im2.XXXXXX) trap "rm -f $TMPFILE1 $TMPFILE2; exit 1" INT sleep 10
Frei nach How Linux Works, S. 264
From String to Array of Strings in Bash
Definition eines String:
STRING="A"
Definition eines Array:
STRING[0]="A" STRING[1]="B"
oder
STRING="A" STRING[1]="B"
Das heißt, nur mit STRING=“A“ kann noch nicht unterschieden werden, ob es nur ein String ist, oder ein Array. D.h. man kann eine bestehende Definition einfach weiterverwenden. Und auch, diese bei Bedarf einfach um ein zweites Feld erweitern.
Wie aber muss der Code aussehen, damit er von Haus aus mit der Erweiterung umgehen kann?
Feststellen der Anzahl der Elemente im Array
${#STRING[*]}
COUNT=0 while [[ ${COUNT} -lt ${#STRING[*]} ]]; do echo ${STRING[$COUNT]}; COUNT=$((COUNT+1)); done
Output für
unset STRING
(kein Output)
Output für
STRING="a" a
Output für
STRING="a" STRING[1]="b" a b
Voraussetzungen: Elemente im Array von 0 weg zählend durchnummerieren. Das erleichtert das durchlaufen einer Zählschleife ungemein!
Empty Array in Powershell
Ein leeres Array braucht man z.B. damit eine Schleife die auf das Array zugreift gar nicht erst durchläuft.
Initialisiert wird es mit
$array = @()
Ein Array allgemein definieren
$array="wert1","wert2","wert3"
Die Schleife dazu sieht so aus
foreach ($element in $array) { print ("$element"); }
OpenSSL STR_COPY variable has no value
Openssl kann Shellvariablen im der Konfigurationsdatei verarbeiten. Kommt dabei eine Fehlermeldung wie
openssl.exe version 6870300:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:618:line 19
liegt das daran, dass die Shellvariable nicht definiert ist.
Eine leere Variable dagegen ist aber OK.
Ich dachte schon einen Bug gefunden zu haben. Der Report dafür wurde aber nicht anerkannt, weil das Verhalten so gewünscht und dokumentiert ist.
Wie kommt man zum Fehler? Mit einer Config wie:
[req] promt=no distinguished_name=dn default_md=sha256 default_bits=2048 req_extensions=alt_names [dn] C=AT ST=NOe L=xxx O="org" OU="ou" E="test@example.com" [alt_names] subjectAltName=${ENV::SAN}
Wie repariert man es?
Indem man einen Default Wert in der Config setzt:
SAN="" [req] promt=no distinguished_name=dn default_md=sha256 default_bits=2048 req_extensions=alt_names [dn] C=AT ST=NOe L=xxx O="org" OU="ou" E="test@example.com" [alt_names] subjectAltName=${ENV::SAN}
Dokumentation, wenn auch leicht verwirrend findet man unter https://www.openssl.org/docs/man1.0.2/apps/config.html bzw. https://www.openssl.org/docs/manmaster/apps/config.html für die letzte Version.
Suchen auf der Seite nach Begrif „ENV“.