pcregrep gegen grep

Um mit reguläre Ausdrücken auf der Linux-Konsole zu suchen, verwendete ich meist das Programm grep. Zufällig bin ich jetzt auf pcregrep gestoßen. Das kleine Tool befindet sich in den Paketquellen von Ubuntu und kann wie folgt installiert werden.

$ sudo apt-get install pcregrep

Im direkten Vergleich zeigt sich, das pcregrep deutlich schneller bei der Verarbeitung von Perl Kompatiblen Ausdrücken ist als grep -E.

$ time grep -o -E ‚^[0-9.]+\s‘ access.log > /dev/null
real 0m1.526s
user 0m1.508s
sys 0m0.012s

im Vergleich zu ….

$ time pcregrep -o ‚^[0-9.]+(?=\s)‘ access.log > /dev/null
real 0m0.036s
user 0m0.032s
sys 0m0.000s

Die Grundlage des Vergleichs ist die Suche nach IP Adressen in einer ca. 7 MB großen access.log Datei eines Apache. Wenn man das Ergebnis mal hochrechnet auf eine GB große Datei, macht sich der Unterschied schon ganz schön bemerkbar.

Weitere Informationen zum Thema:
http://manpages.ubuntu.com/manpages/precise/man1/pcregrep.1.html
http://manpages.ubuntu.com/manpages/precise/man1/grep.1.html

Inhalt mehrerer Dateien in einer Datei Zusammenführen

Heute mal ein kleiner Schnipsel der sicherlich für den ein oder anderen hilfreich sein kann. Es geht um das Zusammenführen des Inhalts von zwei oder mehr Dateien. Hierfür kann z.B. der Befehl cat verwendet werden.

$ cat datei1.txt datei2.txt > datei12.txt

Selbstverständlich lässt sich der Befehl auch prima mit einem find oder ls kombinieren. Damit lassen sich dann auch ganze Order oder nur bestimmte Dateien in einem Verzeichnis zusammenführen.

Externe IP Adresse in der Konsole anzeigen

Heute mal eine kleine Gedankenstütze für das Anzeigen der Öffentlichen IP-Adresse in der Shell. Denn gerade wenn eine Maschine über ein Gateway oder Proxy mit dem Internet verbunden ist, finden sich in den bekannten Systemtools wie ifconfig keinerlei Informationen über externe Anschlüsse.

Aber wie am Desktop auch hilft hier eine der zahlreichen Webseiten die meine aktuelle IP-Adresse zurückgeben. Ein Beispiel könnte zum Beispiel so aussehen.

$ wget http://ipecho.net/plain -O – -q ; echo
178.254.11.33

Über Vorschläge weiterer Endpoints würde ich mich in den Kommentaren freuen.

Pwd und Symlinks

Um das aktuelle Verzeichnis anzuzeigen kann man unter Linux den Befehl pwd verwenden.

$ pwd
/var/www/www.projektname.de/

In meinem Fall verwende ich Symlinks um verschiedene Builds eines Projektes via Jenkins auszuspielen. Möchte ich aber den aktuellen Build wissen, ist die obere Ausgabe allerdings nicht hilfreich. Hier hilft aber der Parameter -P weiter.

$ pwd -P
/home/jenkins/builds/1.274/projektname/

Natürlich gibt es auch hier wieder verschiedene Wege um an die gewünschte Information zu kommen. Ich stelle hier nur die von mir priorisierte Variante vor.

Weitere Informationen zum Thema:
http://manpages.ubuntu.com/manpages/precise/en/man1/pwd.1.html