Random Thoughts & Pointless Posts
Posts tagged Linux
Argument List Too Long
May 18th
Aufgrund eines zu kleinen Buffers in einem der Header – Files (zuständig für die Übergabe der Kommandozeilen – Argumente an das Programm sprich Pipes) kann es schon mal passieren, dass Beispielsweise beim löschen von Dateien ein einfaches rm *.jpg mit der Fehlermeldung argument list too long quittiert wird. Um das zu umgehen kann man mit dem (oft unterschätzten) efehl find arbeiten:
Löschen mit find
find . -name '*.jpg' | xargs rm
Dieser Befehl funktioniert aber nur für Dateien im selben Verzeichnis und ohne Leerzeichen im Namen, sollte man Leerzeichen (oder andere Sonderzeichen) im Dateinamen haben, wäre folgender Befehl angebracht:
find . -maxdepth 1 -name '*.jpg' -exec rm {} \;
Hierbei kann gleich mit dem -maxdepth 1 Parameter angegeben werden, wie „tief“ er Verzeichnissbaum durchgegangen werden soll.
Rekursives verschieben in der Shell
May 18th
Üblicherweise funktioniert einfaches verschieben eines Verzeichnisses unter Linux mit dem
mv SOURCE DESTINATION
Befehl. Leider werden dadurch nicht wirklich die Dateien verschoben, sondern nur die Inodes geändert um auf die aktuelleren Daten zu zeigen. Gerade bei ganzen Verzeichnissen ist das manchmal problematisch, da so ein echtes rekursives verschieben kaum möglich ist
Anhilfe verschafft dabei das verpacken der Daten in ein Tar – Archiv und das entpacken der Daten an der Stelle an der sie gebraucht werden. Dazu gibt es einen recht praktischen Befehl, der die Dateien verpackt, das Archiv an den STDOUT gibt und per Pipe wieder an tar geschickt wird das die Daten an gewünschter Stelle wieder entpackt:
Im Quellverzeichniss einfach
tar cf - . |(cd /targetdir; tar xvf -)
ausführen und das „targetdir“ entsprechend anpassen.
Dabei werden alle bereits bestehenden Dateien im Targetverzeichnis beibehalten, Dateien mit gleichem Namen werden überschrieben.
Netzwerkdurchsatz mit Linux messen
Jan 23rd
Linux bietet eine sehr einfache Methode, mit der man den Netzwerkdurchsatz zwischen zwei Rechnern testen kann. Das ist vor allem dann praktisch, wenn man wissen möchte, ob das WLAN zum streamen von HD Videos ausreichend dimensioniert ist, oder ob die NAS auch den Durchsatz auf dem Netzwerkport schafft, der laut Hersteller angepriesen wird…
Am ersten Rechner startet man mit
nc -ulp 5000 > /dev/null
einen UDP Listener – Prozess der den ankommenden Verkehr gleich wegschmeisst. Am zweiten Rechner startet man analog mit
pv < /dev/zero | nc -u<listenerhost> 5000
einen Prozess der endlose 0 – Streams an den <listenerhost> schickt, der natürlich mit der IP Addresse des ersten Rechners ersetzt werden muss. Als Ergebniss erhält man von pv die Ausgabe der aktuellen Geschwindigkeit des Netzwerks. Bei einer Gigabit – Ethernet Verbindung ist die maximale Geschwindigkeit bei etwa 119 MB/sec. Lässt man bei beiden Prozessen die “-u“ Parameter weg, wird statt der UDP die TCP Geschwindigkeit getestet, die bei aktuellen Gigabit – Ethernet Netzen immer noch an die 100 MB/sec erreichen sollte (die Differenz ergibt sich aus dem grösseren Overhead der TCP Verbindung). Für die korrekte Funktion des ganzen müssen die Pakete „pv“ und „netcat“ auf den Systemen installiert sein.