Als Systemadministrator haben Sie es oft mit TExtdaten zu tun, die Sie auf irgendeine Art und Weise verarbeiten oder sortieren müssen. Dabei kämpfen Sie an allen Fronten: in der Windows- oder Linux-Kommandozeile, mit Microsoft Excel und mit simplen Texteditoren – seien es Linux/Unix-Shelleditroen wie vi, vim oder nano oder grafische Windows-Editoren wie Notepad, Wordpad oder Notepad++. Und zu guter letzt vergleichen Sie noch unterschiedliche Versionen einer Textdatei auf Unterschiede und fügen diese Unterschiede zusammen.
In diesem Blogpost zeige ich Ihnen anhand einiger Situationen aus meinem Administrationsalltag, wie Sie verschiedene Herausforderungen mit Hilfe von Kommandozeilen- und Shell-Kommandos, Microsoft Excel und den TExteditoren vi (Linux) und Notepad++ (Windows) lösen können. Der Post wird aktualisiert, sobald mir irgendwann wieder eine neue Situation begegnet, an der ich feilen muss.
Die Linux-Textverarbeitungstools auf Shell-Ebene
Den output von kommandos in Skripten loggen
Wenn ihr unter Linux ein Skript, etwa in Form einer .sh-Datei, schreibt, ist es euch vielleicht schonmla passiert, dass euer Skript nicht durch gelaufen, also auf einen Fehler gestoßen, ist. Zur Fehlersuche machen sich viele die Mühe und führen die einzelnen kommandos einen nach dem anderen aus, was jedoch absolut unnötig ist.
Stattdessen könnt ihr das Skript ausführen mit
sh -x <Skriptdatei> bzw. bash -x <Skriptdatei>
und euch wird der Output eurer kommandos angezeigt.
Und ihr könnt sogar, ohne das Skript live bie der Ausführung zu beobachten, den Output der Kommandos loggen. Dabei empfiehlt es sich, normalen Output in eine Datei, und Fehlermeldungen in eine sepzielle andere Datei zu loggen. Dazu würde ich einfach an das kommadno anhängen
sh -x <SkriptDatei> > normal.log 2> error.log
somit wird der normale Output der Skript-Kommandos in die Datei normal.log geschrieben und alle Fehlermeldungen in die Datei error.log. Wenn ihr nun eure Skriptdatei beispielsweise über die /etc/crontab so einplant, könnt ihr euch am nächsten Tag, wenn euer skript nicht sauber durchgelaufen ist, ansehen, warum das passiert ist. Dabei muss euch bewusst sein, dass die einfahcen >-Zeichen dafür sorgen, dass die Datei jedesmal überschrieben wird, wenn die Log-Datei neu befüllt wird, das heißt die alten Einträge verschwinden dann. WEnn ihr stattdessen die Einträge jedesmal an den aktuellen Inhalt einfach nur dranhängen wollt (ohne den alten zu überschrieben), müsst ihr statt einem > zwei hintereinander schreiben, also
sh -x <SkriptDatei> >> normal.log 2>> error.log
Was meine persönlich preferierte einstellung ist, mit dem Kommando date füge ich dann jedesmal, wenn das Skript läuft, einen aktuellen Zietstempel hinzu, damit ich später unterscheiden kann, welcher Log-Abschnitt zu welchem TAg gehört.
Wenn du mit Absicht verhindern möchtest, dass du versehentlich DAteien überschreibst, indem du in deinen Skripten statt zwei > nur einen > schreibst, dann kannst ud dies verhindern, indem du in der Shell den Befehl
set -o noclobber
wirfst. Von nun an kannst du Dateien nicht mehr mit einem > überschreiben, es sei denn du schreibst ab sofort >| oder stellst den Parameter wieder um über
set +o noclobber
Ich persönlich setze diesen Parameter immer wenn ich Skripte schreibe oder manuell mit Dateien auf der Kommandozeile rumspiele, zur Sicherheit.