Port unter CentOS freigeben

Wenn unter CentOS der Dienst FirewallD aktiviert ist und man eine wie auch immer geartete Serverapplikation auf dem Server betreiben möchte, wird man feststellen das der Dienst von außen nicht zu erreichen ist. Die einfache wenn auch nicht zielführende Möglichkeit wäre es natürlich die Firewall komplett zu deaktivieren. Sinnvoller ist es hingegen den entsprechenden Port welcher benötigt wird freizuschalten. Dies geschieht dabei mit dem Kommando:

firewall-cmd --zone=public --add-port=1234/tcp --permanent

Damit wird der Port 1234, wenn er über TCP angesprochen wird, in der Zone Public freigeschaltet. Die aktiven Zonen auf dem System können dabei mittels:

firewall-cmd --get-active-zones

angezeigt werden. Die Änderung der Regel wird dabei nicht sofort übernommen. Stattdessen müssen die Einstellungen neu geladen werden:

firewall-cmd --reload

Java-Klassen visualisieren

Wenn man die Verbindung von Klassen und deren Komponenten analysieren möchte, so kann man dies in vielen Java-IDEs mit Hilfe eines automatisch erzeugten Klassendiagrames. Verfügt die eigene IDE nicht über eine solche Funktionalität, so kann das Werkzeug Class Visualizer genutzt werden, welches unter class-visualizer.net zu finden ist.

Der Class Visualizer nach dem Start

Der Class Visualizer nach dem Start

Das Tool lädt dabei eine Reihe von Klassen aus einer JAR-Datei, bzw. aus einem Verzeichnis und analysiert diese anschließend. Danach kann die Klassenhierarchie durchsucht und die einzelnen Klassen analysiert werden. Dabei werden Ableitungen, Berechtigungen und vieles mehr übersichtlich darstellt, so das man auch komplexe Abhängigkeiten schnell durchschaut hat. Bei der Software handelt es sich um Freeware.

maybe

Das Terminal ist geöffnet und ein Befehl wie:

rm -rf img*

soll abgesetzt werden. Nun stellt sich die Frage ob man diesen Befehl wirklich so ausführen möchte. Natürlich könnte es sein, das der Befehl zu weit greift, was dazu führt das man mehr löscht als einem lieb ist. Einen Ausweg aus dieser Misere bietet das in Python geschriebene Tool maybe. Installiert werden kann dieses auf der Konsole mittels:

pip install maybe

Führt man nun ein Skript mittels maybe aus:

maybe test.sh

so ermittelt maybe, welche Operationen das Skript vornehmen möchte und zeigt diese an. Nach einer Bestätigung kann der Befehl anschließend ausgeführt werden. Technisch funktioniert das ganze dabei indem der Prozess unter der Kontrolle von ptrace ausgeführt wird. Hierbei werden allerdings nur einige Systemaufrufe blockiert, so das man maybe nur mit Skripten nutzen sollte, welchen man vertraut. Der Quelltext von maybe ist auf GitHub zu finden. Lizenziert ist das Tool unter der GPL in Version 3 und damit freie Software.

Linux-Distribution auf der Kommandozeile ermitteln

Vor ein paar Tagen stand ich vor dem Problem, das ich ermitteln wollte welche Distribution auf einem Server lief. Die Kernelversion einer Linux-Distribution kann dabei einfach über:

uname -or

ermittelt werden. Als Ausgabe erhält man z.B.

3.10.0-229.el7.x86_64 GNU/Linux

Um die Distribution weiter einzugrenzen könnte man Dateien nutzen welche sich auf eine bestimmte Distribution beziehen – unter Ubuntu wäre dies die Datei lsb-release. Distributionsübergreifender funktioniert die Ermittlung derselben mit:

cat /etc/issue

Für ein Ubuntu 14.04 LTS würde die Ausgabe dabei so aussehen:

Ubuntu 14.04.03 LTS

Bei bestimmten Distribution kann es allerdings auch bei der issue-Datei passieren, das diese Datei leer ist und man somit tiefer graben muss um die Distribution zu ermitteln.

Alle .git Ordner rekursiv entfernen

Vor kurzem stand ich vor dem Problem, das ich eine Menge Git-Repositories auf der Festplatte hatte und diese um den .git Ordner bereinigen wollte. Unter Linux und Mac OS X kann man sich für diese Aufgabe mit der Kommandozeile behelfen. Dazu wechselt man in den entsprechenden Ordner und gibt im Terminal folgendes ein:

find . | grep .git | xargs rm -rf

Damit werden sämtliche .git Ordner rekursiv gesucht und gelöscht. Was übrig bleibt sind die aktuellen Arbeitskopien der jeweiligen Git-Repositores.