Dec/080
Quickie: Sort IP-Addresses on linux command line (bash)
I have some ip-addresses in a text file. One address per line. The addresses are unsorted. I’d like to have them in a correct order. Some example from file “addresses”:
192.168.1.1 192.168.1.4 80.68.11.31 192.168.10.33 192.168.11.3 81.67.12.31
Now I run sort with the following options to sort these ip addresses:
:> sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n addresses
The sort command sends this to stdout:
80.68.11.31 81.67.12.31 192.168.1.1 192.168.1.4 192.168.10.33 192.168.11.3
Short explanation for the params:
-t .: Use dot as field seperator.
-k 1,1n: First sort key is field 1, sort it numeric.
The lines are sorted by each sort key one after another.
Apr/080
Linux: Quick host2host file copy
Heute ein schöner Tipp für das schnelle Kopieren einer Datei unter Linux. Es wird kein FTP, kein HTTP, kein SSH benötigt.
Hier zwei kurze Beispiele:
- Eine oder mehrere Dateien in das aktuelle Verzeichnis kopieren:
1 2 | host1:$ netcat -lvp <PORT> | tar -xv host2:$ tar -cv <FILE(S)> | netcat -v <IP/FQDN-HOST1> <PORT> |
Die in den spitzen Klammern gefassten Werten müssen durch die entsprechenden Werte ersetzt werden, so z.B. hier:
1 2 | host1:$ netcat -lvp 12345 | tar -xv host2:$ tar -cv file /home/username/.ssh/authorized_keys | netcat -v 192.168.1.2 12345 |
Was passiert da nun genau?
Host1 ist der Empfänger, mit dem ersten Befehl wird auf Host1 der Port 12345 geöffnet. Es kann natürlich ein beliebiger Port genutzt werden. Einzige Einschränkungen: Der Port darf nicht belegt sein und Ports kleiner als 1024 kann nur Root belegen. Die Empfangenen Daten werden mit tar ausgepackt. Host2 sendet etwas an Host1, mit dem zweiten Befehl werden auf Host2 zunächst eine oder mehrere Dateien in ein Tar-Archiv gepackt und anschließend via netcat über den vorher geöffneten Port 12345 an Host1 geschickt.
- Es kann z.B. auch ein Image eines Datenträgers oder einer Partition via dd erzeugt werden:
1 2 | host1:$ netcat -lvp 12345 | dd of=/backup/host2-sda1.img host2:$ dd if=/dev/sda1 | netcat -v 192.168.1.2 12345 |
Tolle Sache das…
Apr/082
[Archiv] PHP Tutorial: Thumbnails mit fester Größe und Rand
Ich habe gerade beim Aufräumen ein wenig in meinen Datensicherungen gewühlt und ein schönes Code-Schnipselchen von ~2004 gefunden. Es fühlt sich an, als wenn das eine Ewigkeit her ist, auf dem Papier sind es aber irgendwie doch “nur” vier Jahre.
Um die Zeit war ich in einer PHP-Community aktiv, im Rahmen einer Diskussion ist da irgendwann dieses kleine PHP-Script entstanden.
Das Script dient dazu aus Bildern im JPG-, GIF- oder PNG-Format Thumbnails (Vorschau-Bilder) zu erstellen. Soweit nichts besonderes. Das tolle an dem Snippet war, dass man eine feste Höhe UND Breite für das Bild angeben konnte, das Script hat das Thumbnail in dieser Größe erstellt und das Ursprungs-Bild unter Berücksichtigung der Seitenverhältnisse in dem Thumbnail abgebildet. Wenn das Bild nicht das komplette Thumnail ausfüllte, dann wurde dieses durch einen farbigen Rand ergänzt. Toll war das…
Mit Sicherheit würde ich das heute anders schreiben, ich möchte dieses Stück Code aber gerne so aufbewahren, wie es “damals” geschaffen wurde. Ich bin vor allem von der eifrigen Kommentierung beeindruckt, wobei da sicherlich einige Kommentare entbehrlich sind.
Dec/070
OpenSuSE NTFS-3g: Einbinden von NTFS Laufwerken mit Ruhezustand
Da ich nicht immer warten möchte, bis das Windows auf meinem Notebook heruntergefahren/gestartet ist, nutze ich den Ruhezustand – ein kompletten Neustart mache ich nur so selten, wie nötig.
Wenn ich dann OpenSuSE boote und das NTFS-Laufwerk einbinden möchte um auf gewisse Dateien zuzugreifen bekomme ich folgende Meldung präsentiert:
mobile:/ # mount /win/c
Windows is hibernated, refused to mount.
Failed to mount '/dev/sda1': Die Operation ist nicht erlaubt
The NTFS partition is hibernated. Please resume and shutdown Windows
properly, so mounting could be done safely.
Meißt reicht es mir, wenn ich lesenden Zugriff auf die Dateien habe. Falls ich die Dateien dann doch bearbeiten möchte, kann ich diese ja immer noch kopieren. Glücklicherweise lässt sich das Laufwerk im Read-Only Modus auch im Ruhezustand einbinden:
mobile:/ # mount /win/c -o ro
Und schon kann ich lesend auf die Windows-Partition zugreifen.
Nov/070
[Quickie] ISO unter Linux mounten
Im Gegensatz zu Windows wird bei Linux kein extra Programm ala Daemon Tools zum Mounten/Einbinden von ISO Images benötigt. Der Standard-Kernel bringt das Feature schon mit. Zum Einhängen des ISO-Images kann der Befehl mount genutzt werden. Man muss eben nur die richtigen Parameter übergeben. Da ich diese selbst immer vergesse, halte ich den hier endlich mal fest:
root@mobile:/# mount -o loop -t iso9660
.iso /mnt
Jetzt ist die ISO unter /mnt eingehängt, der INhalt kann nun unter dem Pfad eingesehen werden. Schließen kann man die Datei dann mit:
root@mobile:/# umount /mnt
Sep/077
Syslog-NG + phpSyslog-NG + MySQL
Ich habe einen Syslog-Server mit einem Syslog-NG Server laufen. Dieser Server empfängt brav Logs von entfernten Servern, Routern und sonstigen Geräten im Netz. Im Hintergrund werden die empfangenen Logs unter anderem an eine MySQL-Datenbank weiter geleitet. Syslog-NG schreibt die Informationen in eine Pipe, ein MySQL-Prozess zieht sich die Daten aus dieser Pipe und speichert sie ab. Aufgesetzt ist dieses System nach einem Howto im deutschen Nagios-Wiki (Artikel). Der MySQL-Prozess, der die Datenbank mit den Informationen aus der Pipe befüllt wird durch ein seperates Init-Script gesteuert. Es passierte hin und wieder mal, dass sich der MySQL-Prozess erhängt oder in Luft aufgelößt hat. Leider bin ich der Ursache des Problems nicht auf die Schliche gekommen. Durch Zufall hat sich mir aber eine andere Lösung aufgetan: Syslog-NG kann den MySQL-Prozess selbst steuern.
Ergänzt man folgende Zeile in der Destination d_mysql in der syslog-ng.conf:
program("/usr/bin/mysql --user=syslogfeeder --password='' syslog > /var/syslog-ng-mysql.pipe");
Das Ergebnis sollte dann in etwa so aussehen:
1 2 3 4 5 6 7 | destination d_mysql { program("/usr/bin/mysql --user=syslogfeeder --password='' syslog > /var/syslog-ng-mysql.pipe"); pipe("/var/syslog-ng-mysql.pipe" template("INSERT INTO logs (host, facility, priority, level, tag, datetime, program, msg) VALUES ( '$HOST', ' $FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC','$PROGRAM', '$MSG' );\n") template-escape(yes)); }; |
Jetzt kann man das Init-Script /etc/init.d/sqlsyslogd für den “sqlsyslog Daemon” entfernen, da der MySQL-Prozess jetzt durch Syslog-NG gesteuert wird.
Seit der Umstellung vor einigen Wochen läuft der Dienst durch – eine Sorge weniger.
Jul/070
Windows Uptime / Laufzeit
Ich habe des öfteren das Problem, dass ich herausfinden möchte, wie lange ein System schon läuft. Ich kann (oder will) mir die Befehle unter Windows aber nicht merken. Also hier eine kurze Notiz zu dem Thema:
Hiermit bekommt man das Datum und die Uhrzeit, zu dem das System hochgefahren wurde:
net statistics server | find "Statistik seit"
Oder auf einem englischen System:
net statistics server | find "Statistics since"
Dieser Befehl gibt die Dauer der Laufzeit aus:
systeminfo | find "Systembetriebszeit:"
Hier auch wieder englisch:
systeminfo | find "System Up Time:"
Zu beachten ist, dass es sich hier um ein Windows XP SP2 (Auf Windows 2003 funktionieren die Befehle aber auch) handelt, dass immer mal wieder in den Ruhezustand versetzt wird. Es wird also die Zeit zum letzten richtigen Reboot gezählt.
Überhaupt ist interessant, was systeminfo so an Infos ausspuckt. Da wird mir zum Beispiel das genaue Installationsdatum des Computers genannt. Ich bin begeistert
.
Jul/075
USB-Drive mit NTFS und Truecrypt unter openSuSE 10.2
Ich habe mir vor ein paar Tagen eine interessante Aufgabe gestellt: Schreibender Zugriff auf NTFS Dateisysteme unter Linux. Okay, im Nachhinein betrachtet war das ganze unspektakulärer, als ich erwartet hatte. Aber fangen wir am Anfang an…
Apr/071
Procurve: Update Firmware via SFTP/SCP
Finally it was no problem at all. The firmware was already downloaded to nearly all switches (old firmware in secondary image, new firmware in primary). I just had to reboot with other image and it was updated.
Oh, i said “nearly”.
And thats the interesting thing. To update the firmware on the already updated switches I downloaded the images via TFTP from my client. Not very secure, but this was not the problem in this case. The problem was that the switch couldn’t access my client with TFTP. Now, how to get the firmware image on it?
SFTP/SCP is the solution.
Configure the switch to allow file transfer via SSH (in my case it already was):
ip ssh
ip ssh filetransfer
Then conenct via SFTP to the switch. First I tried to connect via WinSCP (SFTP/SCP Client for Windows) from my client, renamed the image file to “primary” and copied it in os/ folder to replace the primary image with it. I couldn’t transfer the file because WinSCP tries to create a temporary <filename>.part in order to rename it when the transfer is completed – the problem: The switch doesn’t allow file creation.
No Problem, uploaded the image to a linux system and tried from there:
scp /path/to/image user@switch.fqdn.com:/os/primary
And it worked!
The switch checked the image and then, simply reboot the switch:
system boot flash primary
Now waitin’ for the switch to be booted with the firmware – That’s all the magic…







