Anzahl der Zeilen in einer Datei ermitteln

Immer wieder kommt es vor, das man wissen möchte wieviele Zeilen eine Datei hat. Zwar kann man sich mit Editoren wie nano die Zeilen anzeigen lassen, aber gerade bei größeren Dateien kommt man schnell seine Grenzen. Folgender Befehl kann genutzt werden, um herauszufinden wie viele Zeilen eine oder mehrere Textdatei hat.

$ find /var/log/apache2/*.log -print0 | xargs -0 wc -l
5232 /var/log/apache2/access.log
  58 /var/log/apache2/error.log
5290 insgesamt

Hinweis: Man kann auch nur eine einzelne Datei abfragen, indem man das *.log mit einem Dateinamen z.B. access.log ersetzt.

Schriftfarbe der Shell ändern

Ich denke jedem ist es schon einmal passiert, das man einen kritischen Befehl versehentlich auf einem Produktiv System ausgeführt hat. Ein Weg diesen flüchtigkeiten vorzubeugen ist die Modifikation der Bash, so das die Shell der produktiven Server sich schon optisch von den Test oder Desktop-Systemen unterscheidet.

Eine unveränderte Shell sieht in etwa so aus (Weiß auf Schwarz):

root@server01:~# Befehl

Um nun z.B. das Serversystem farblich hervorzuheben (z.B. rot) muss die Datei ~/.bashrc geöffnet und darin die Variable PS1 modifiziert werden. Die folgende Zeile …

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h:\w\[\033[00m\]\# '

… bewirkt, das folgende Ergebnis:

root@server01:~# Befehl

Eine Liste der möglichen Farben und weitere Einstellungsmöglichkeiten kann man z.B. auf ubuntuusers.de finden.

Hinweis:
Diese Vorgehensweise gilt für eine Bash. Ausnahme bilden Terminalemulatoren wie z.B. gnome-terminal, … die eigene Darstellungen und Profile unterstützen.

Anzahl der Dateien und Verzeichnisse ermitteln

Unter Linux kann man sich die Liste der Dateien und Ordner in einem Verzeichnis leicht mit dem Befehl ls anzeigen lassen. Will man jetzt aber wissen wie viele Dateien oder Ordner aufgelistet sind, hilft die Kombination mit dem Befehl wc (Bytes, Wörter und Zeilen von Dateien zählen) weiter. (Alternativ kann man natürlich auch die Ausgabe zählen. ;-))

$ ls /pfad/zum/verzeichnis | wc -l

Möchte ich aber nur die Anzahl der Dateien wissen, hilft z.B. das Programm find weiter. Der folgende Aufruf gibt nur die Anzahl der Dateien in einem Verzeichnis zurück.

$ find /pfad/zum/verzeichnis -maxdepth 1 -type f | wc -l

Um die Verzeichnisse zu zählen muss der Parameter -type auf d (Directory) gesetzt werden.

$ find /pfad/zum/verzeichnis -maxdepth 1 -type d | wc -l

Hinweis: Der Parameter -maxdepth gibt die Ebenen an, die in der Hierarchie des Verzeichnisbaums nach unten durchsucht werden. Lässt man diesen weg, werden auch Unterverzeichnisse durchsucht und mit gezählt.

Weitere Informationen zum Thema:
http://manpages.ubuntu.com/manpages/lucid/de/man1/ls.1.html
http://manpages.ubuntu.com/manpages/lucid/de/man1/wc.1.html
http://manpages.ubuntu.com/manpages/lucid/de/man1/find.1.html

logrotate um eigene Logdateien erweitern

Bei vielen Projekten verwende ich Logdateien um evtl. Fehler aufzudecken. Diese versuche ich wenn möglich in das Standartverzeichnis /var/log zu legen. Damit diese Logdateien nicht zu groß werden und das System zumüllen, verwende ich den Dienst Logrotate. Sollte er nicht vorhanden sein, kann er wie folgt nachinstalliert werden:

$ sudo apt-get install logrotate

Ich habe mir angewöhnt nicht die globale Konfiguration /etc/logrotate.conf zu Ändern, sondern eine eigene Konfigurationsdatei für das jeweilige Projekt unter /etc/logrotate.d anzulegen.

$ sudo nano /etc/logrotate.d/ProjektName

Ein Beispiel für eine solche Konfiguration könnte das folgende Script sein.

/var/log/ProjektName/*.log { 
        weekly                  # wöchentlich
        rotate 4                # Behalte die letzten vier Wochen
        compress                # Komprimieren
        delaycompress           # Komprimieren nachdem verschieben
        missingok               # Ignorieren falls nicht existiert
        notifempty              # Leere Logdateien werden nicht rotiert
}

Weitere Befehle / Optionen können in der Man Page z.B. hier nachgelesen werden.

Um seine Konfiguration zu testen kann man das Skript mit dem Befehl logrotate testen. Der Parameter -d bewirkt eine Ausgabe während -f die Ausführung erzwingt.

$ logrotate -d -f /etc/logrotate.d/ProjektName

Weitere Informationen zum Thema:
http://wiki.ubuntuusers.de/Logdateien
http://www.fibel.org/linux/lfo-0.6.0/node361.html
http://www.linux-praxis.de/lpic1/manpages/logrotate.html

tail für Windows

Zum Überwachen von Logdateien, gibt es unter Linux das Programm tail. Mit dem Parameter -f aufgerufen zeigt es alle neuen Zeilen der Logdatei an. Dies kann z.B. hilfreich sein um Fehler in einer Webseite aufzudecken oder Änderungen zu kontrollieren. Unter Linux würde das etwa so aussehen:

$ tail -f /var/log/apache2/error.log

Wer unter Windows testet hat dieses Programm leider nicht Standardmäßig. Um tail auch unter Windows in der Shell zu nutzen, kann es aus den Windows Server 2003 Resource Kit Tools nachinstalliert werden.

Die Datei rktools.exe findet man auf der Windows Server 2003 CD oder zum Download bei Microsoft.com.

Windows Command Shell - tail

Ein Aufruf unter Windows würde dann etwa so aussehen:

C:\>tail -f c:\xampp\apache\logs\error.log

Hinweis: Damit tail direkt, also ohne in das Installationsverzeichnis des Resource Kits zu wechseln, genutzt werden kann, muss das Installationsverzeichnis (C:\Programme\Windows Resource Kits\Tools\) in die PATH Variable eingetragen werden.

Wie auch unter Linux, kann der Parameter -n genutzt werden, um die Anzahl der auszugebenen Zeilen festzulegen. Der folgende Aufruf würde die letzten 50 Zeilen der angegebenen Datei zurückliefern.

C:\>tail -n 50 c:\xampp\apache\logs\error.log

Weitere Informationen zum Thema:
Download: Windows Server 2003 Resource Kit Tools
http://www.microsoft.com/windowsserver2003/downloads/tools/default.mspx