aptitude mit search pattern; Systeme ohne DNS; Apache Satisfy Direktive; bash Bedeutung der Klammern
- Loeschen von Paketen mittels aptitude und search pattern um mehrere Pakete gleichzeitig zu loeschen, aber nicht alle hintereinander einzugeben. Das kann man mit ~n. Hier ein klassisches Beispiel wo ich das anwende. Rausfinden welcher Kernel gerade laeuft, rausfinden was es alles an alten Kernel Images auf dem System gibt, loeschen aller linux-image-2.6.32-3*:
$ uname -a $ sudo aptitude search linux-image | grep "^i" $ sudo aptitude purge ~nlinux-image-2.6.32-3
- Manchmal hat man Systeme, bei denen kein DNS verfuegbar ist. Das fuehrt dann dazu, dass einige Sachen extrem lange dauern, weil Sie versuchen irgendetwas ueber DNS aufzuloesen und dann erst weiter machen wenn es einen Timeout gibt. Als erstes sollte man dann pruefen, dass der eigene Hostname in der /etc/hosts korrekt auf localhost gemappt ist. Oft rgibt es dann auch noch Sinn in der /etc/ssh/sshd_config den folgenden Schalter zu aktivieren:
UseDNS no
- Manchmal moechte man bei einem Apache Webserver etwas fuer einen bestimmten IP Bereich direkt freigeben, und ansonsten soll ein Passwort eingegeben werden. Jeweils das eine von beiden ist einfach realisiert. Wenn man beides moechte, braucht man die Satisfy Direktive. Klassisches Beispiel dafuer:
<Location "/foo"> Order deny,allow Deny from all AuthName "Foo Login" AuthUserFile /path/to/.htpasswd AuthType Basic Require valid-user Allow from 192.168 Satisfy Any ProxyPass http://localhost:8080/foo/ timeout=6000 ProxyPassReverse http://localhost:8080/foo/ </Location>
- bash Klammern. Immer wieder spannend, deswegen hier mal eben aus meinem Kopf heraus festgehalten wie ich mit ihnen arbeite:
-
() = Subshell. Benutze ich zum Beispiel beim anlegen von Sicherheitskopien mit:
$ mv foo.txt foo.txt-$(date -I)
- [] in Schleifen = Ruft das Programm "[" auf, oder auch "test". In einer if [ ! -d "/tmp" ]; echo "directory /tmp does not exist."; fi Schleife wird bei dem [ das Programm mit dem Namen "[" aufgerufen. Liegt zum Beispiel unter /usr/bin/[ und hat auch eine eigene manpage.
-
[[]] in Schleifen = Bash eigene Funktion. Darin kann man dann auch Regex verwenden. Beispiel
$ FOO=1234 $ if [[ $FOO =~ ^[0-9]*$ ]]; then echo "OK"; else echo "NO"; fi OK $ FOO=1234a $ if [[ $FOO =~ ^[0-9]*$ ]]; then echo "OK"; else echo "NO"; fi NO $
-
{} = Variablen und Listen. Ich nutze das um in Skripten Variablen besser ersichtlich zu machen, zum Beispiel
/bin/bash FOO=foo.txt mv ${FOO} ${FOO}_$(date -I)
Ausserdem fuer Listen, zum Beispiel wenn man mehrere Ordner mit Unterordnern anlegen moechte:
mkdir -p /tmp/foo/bar/{one,two,three,four}/Nicht zu vergessen die ganzen build-in Shell Funktionen bei den Klammern, z.B. hier, da, dort, guckstu, minneminne
-
() = Subshell. Benutze ich zum Beispiel beim anlegen von Sicherheitskopien mit:
Nagios: check Piwik Update Status
Wenn man Software nicht aus den Repositories einer Distribution, sondern von Hand installiert, muss man immer im Blick haben, ob fuer die Software nicht ein Update zur Verfuegung steht
Um sich dieses fuer Piwik zu vereinfachen habe ich dafuer ein sehr simples Nagios Plugin, check_piwik.sh, geschrieben:
#!/bin/bash ##### # # Simple Skript that checks if Piwik version from given URL is up to date # # Usage: ./check_piwik.php http://example.net/piwik/ MYTOKEN # ##### ## check if two parameters are given if [ "$#" -lt "2" ]; then echo -e "ERROR: You need to give two parameter, first option is URL and second option Token . Aborting." >&2 exit 1; fi PIWIKURL="$1" TOKEN="$2" ## check if needed programs are installed type -P curl &> /dev/null || { echo "ERROR: curl is required but seems not to be installed. Aborting." >&2 exit 1; } type -P sed &> /dev/null || { echo "ERROR: sed is required but seems not to be installed. Aborting." >&2 exit 1; } ## get latest piwik version from piwik api LATESTVERSION=$(curl -s http://api.piwik.org/1.0/getLatestVersion/) ## get piwik version from given url LOCALURL="$PIWIKURL/index.php?module=API&method=API.getPiwikVersion&format=xml&token_auth=$TOKEN" LOCALVERSION=$(curl -s $LOCALURL | sed -n -e 's/.*<result>\(.*\)<\/result>.*/\1/p') ## compare both strings if [ "$LATESTVERSION" != "$LOCALVERSION" ]; then echo "A new version is available: $LOCALVERSION -> $LATESTVERSION" exit 2 else echo "Your current version $LOCALVERSION is up to date" fi |
Es erwartet zwei Parameter, eine URL zu dem Piwik das ueberprueft werden soll, und den API Token fuer diese Installation. Dementsprechend muss in der command.cfg der Check wie folgt definiert werden:
define command {
command_name check_piwik
command_line $USER1$/check_piwik.sh $ARG1$ $ARG2$
} |
Der Check selbst wird dann wie folgt in die entsprechende Konfigurationsdatei eingetragen:
define service {
use my-service
host_name example.net
service_description Piwik
check_command check_piwik!http://example.net/piwik!abcdefghijklmnopqrstuvwxyz123
} |
Fertig eingerichtet bekommt man dann von seinem Nagios Auskunft ueber den Updatestatus der entsprechenden Installation:
![]()
![]()
Show disk usage based on file extension / regex
Problem: Show disk usage of a folder and its subfolders based on the file extension / regex.
Solution:
find . -regex '.*\.tif' -print0 | du --files0-from=- -ch | tail -1 |
[via]
