Eigentlich ist das splitten von grossen Archiven eine ganz praktische Sache. Man kann dadurch grosse Archive in kleinere Häppchen schneiden. z.B. haben viele Mailserver eine Dateianhang Begrenzung von 10 MB. Hat man ein Paket das 16MB gross ist packt man es einfach nochmals neu, stellt aber ein, dass z.B. zwei 8MB Archive erzeugt werden. Der Empfänger speichert dann einfach beide Dateianhänge im selben Verzeichnis ab und kann diese wieder entpacken.
Soweit die Theorie. Leider musste ich feststellen, dass Multipart ZIP Archive doch einige Probleme bereiten können. Gerade bei Benutzern welche auf freie Alternativprodukte setzen, sei es nun unter Windows oder Linux, kommt es beim entpacken der Archive zu Problemen. So unterstützt z.B. 7-zip keine Multipart Archive. Und auch unter Linux heisst es in der Manpage von unzip:
[...]
BUGS
Multi-part archives are not yet supported, except in conjunction with
zip. (All parts must be concatenated together in order, and then ''zip
-F'' (for zip 2.x) or ''zip -FF'' (for zip 3.x) must be performed on
the concatenated archive in order to ''fix'' it. Also, zip 3.0 and
later can combine multi-part (split) archives into a combined single-
file archive using ''zip -s- inarchive -O outarchive''.
[...]
Schlussendlich hat bei mir die Variante funktioniert, welche ganz am Schluss der Manpage angegeben wird.
zip -s- archivname.zip -O archiv.zip
unzip archiv.zip
Das nächste mal produziere ich einfach weniger Daten
Ich hatte gerade ein Verzeichnis auf einem Solaris 10 System, welches eine Datei mit dem Namen ¨ beinhaltete. Meistens sind solche Dateien Überbleibsel von wilden Kommandozeilen Orgien, bei denen irgend eine Umleitung schief gelaufen ist. Irgend ein Sonderzeichen hat sich dann im Dateinamen verewigt.
Doch wie schaut man solch eine Datei an (um entscheiden zu können, dass diese wirklich weg kann?) und wie löscht man diese dann?
Am einfachsten geht das wohl, wenn man statt über den Dateinamen über die Inode Nummer geht. (Eine Inode ist ein Eintrag in einem Unix-Dateisystem, der Metadaten einer Datei enthält.)
# ls -alFi
385683 drwxr-xr-x 8 pcs iccc 512 Oct 29 11:59 ./
338148 drwxr-xr-x 23 root root 512 Oct 13 12:55 ../
461707 drwxrwsr-x 2 root iccc 512 Oct 13 12:54 tmp/
386788 -rw-r–r– 1 root root 7694 Sep 1 08:31 ¨
Nun hat man aber immer noch das Problem, dass z.B. ein cat oder ein rm die Datei nicht behandeln können, da diese Programme nicht mit der Inode umgehen können. Hier hilft find, welcher gezielt nach Inodes suchen kann und dabei den korrekten Dateinamen mittels exec an ein anderes Programm übergeben kann.
Einige Beispiele
# Die Datei umbenennen in foobar
find . -inum 386788 -exec mv {} foobar \;
# Datei anschauen mit less
find . -inum 386788 -exec less {} \;
# Datei direkt löschen
find . -inum 386788 -exec rm {} \;
Wo sind bloss die 50GB Speicherplatz geblieben?
Diese Frage musste ich mir heute Morgen auf einem unserer Solaris 8 Systeme stellen. Nach einigen Aufräumarbeiten war der Übeltäter gefunden. Eines unserer Projektverzeichnisse hatte Logdateien enthalten, welche 38GB gefressen hatten.
Das Problem: Mir konnte natürlich wiedermal niemand sagen ob die Daten noch gebraucht werden.
Also wollte ich all die Dateien mit gtar/bzip2 Archivieren. Doch da hatte ich die Rechnung ohne den Wirt gemacht. Ein gtar cvjpf Archivdatei.tar.bz2 logfiles* scheiterte an der Menge der übergebenen Dateien und beendete sich mit der Fehlermeldung:
/bin/tar: Argument list too long
Was? Wieviele Datein waren denn da auf dem Server? Ein ls -1|wc -l brachte mir die Gewissheit.
372’378 Dateien!
Das ist natürlich eine Menge. Und wie sichere ich die nun? Ganz einfach. Zuerst wird mittels find eine Liste aller Dateien erstellt und danach wird das tar File anhand dieser Datei erzeugt.
find . -name '*.log' -print >/tmp/archivliste
tar cvjpf logfiles.tar.bz2 --files-from /tmp/archivliste
So einfach kann es sein…
Nachtrag:
Will man die Dateien löschen, hat man mit rm natürlich wieder das selbe Problem. Aus diesem Grund hier der Befehl, wie die Dateien löschen kann.
find . -name '*.log' | xargs rm
Uebrigens:
Der Grund, warum es über die Argumente nicht geht ist die beschränkte Puffergrösse für Argumente. Denn ein logfiles* wird in logfiles1 logfiles2 logfiles3 etc. aufgeschlüsselt. Und bei knapp 380’000 Daeien ist dieser Pufferplatz schnell einmal voll. Zumal der Puffer wohl nur zwischen 32Kb und 64Kb gross sein wird.
Keine Panik, Eggers Familien-Blog ist nach wie vor Kinderfreundlich. Hier geht es mitnichten darum putzige kleine Erinaceidae zu quälen sondern um das hacken von Thin-Clients der Firma IGEL. Genauer geht es um das Hacken eines IGEL 5110 X-Term.
Das Problem:
Bei einem Kunden sind in gewissen Applikationen keine Elemente anwähl- oder verschiebbar. Um nun herauszufinden ob das Problem bei den X-Terminal Settings oder unserem Server zu suchen ist muss ich zuerst einmal Zugriff auf des Kundens X-Terminal Einstellungen haben. Doch wie kommt man an diese ran ohne sich mit ihm telefonisch durch das grafische Konfigurationsmenu zu quälen?
Die Lösung:
Man logt sich remote auf das Terminal ein und kopiert sich die Settings.
Das Problem ist nur, wie komme ich auf das Terminal wo doch nur eine Remote Shell und kein Remote Login zur Verfügung steht? Ganz Einfach, man bittet den Kunden um hilfe. (Pech gehabt ihr Skriptkiddies da draussen! Keine rüberhol und kopier Anleitung für euch!)
Mehr…
Die Firma ASUS ist hauptsächlich für Ihre qualitativ guten Motherboards bekannt. Auch ich verwende bei Systemen, welche ich komplett selber zusammenbaue immer wieder gerne deren Mutterplatinen.
Beim neusten Motherboard (einem Core 2 Quad fähigen Board) haben sich die Entwickler bei ASUS etwas ganz spezielles einfallen lassen. Das System besitzt ein minimalstes Linux auf einem Chip, welches innerhalb von 5 Sekunden gebootet werden kann. Beim ersten mal muss man noch einige Fragen über sich ergehen lassen (Sprache, IP Adresse fix oder DHCP) und hat dann einen absolut minimalen Desktop vor sich, auf dem sich ein abgespeckter Firefox 2.0 Browser mit integriertem Flash Plugin findet. Bookmarks und sonstige Einstellungen werden auf dem Chip solange gespeichert, bis man im BIOS die “Default Settings” auswählt.
Die grafische Oberfläche (oder die Linux Distribution?) nennt sich SplashTop. Auf der Website [http://www.splashtop.com/] findet man jedoch noch keine Informationen. Diese sollen ab dem 10. Oktober (Release Termin) verfügbar sein. Man darf gespannt sein… Was man bisher an Screenshots bei Phoronix sieht, macht aber bereits Lust auf dieses System.
Meiner Meinung nach ist diese Erweiterung endlich einmal ein brauchbares Feature. Man stelle sich vor, der Rechner kommt beim hochfahren nur mit einer Fehlermeldung hoch. Einfach das SplashTop Linux booten und nach der Fehlermeldung bei google suchen. Kein zweiter Computer ist mehr nötig, kein langes booten irgend eines Systems muss mehr abgewartet werden.
Tobias Scherbaum (a.k.a. dertobi123) hat endlich sein Buch Gentoo Linux – Die Metadistribution fertig gestellt. Unter angegebenem Link kann man bereits einmal das Inhaltverzeichnis, Vorwort, Kapitel 1 sowie das Stichwortverzeichnis als PDF herunterladen.
Drei Vorabexemplare inklusive CD hat er bereits erhalten und auch davon ein Photo geschossen. Wer also schon immer einmal Gentoo kennenlernen wollte, sich jedoch noch nicht an die zugegebenermasse komplexere Materie gewagt hat könnte es mit diesem Buch einmal versuchen.
Voraussichtlich wird es für 29€ verfügbar sein. In der Schweiz kann man es bereits bei buch.ch zum Preis von 49 CHF vorbestellen. Jedoch wird es dort noch als Gentoo Linux gehandelt.
Wird wohl langsam Zeit, dass ich mein Buch ebenfalls einmal auf die Beine stelle. Mir schwebt schon seit längerem ein unterhaltsam geschriebenes Linux/Gentoo Anfängerbuch vor. Ein Probekapitel kann im Gentoo Forum gelesen werden.
Das kommt davon, wenn man versucht seinen Rechner und die darauf laufenden Programme nach der Methode “alles raus was nicht benötigt wird” zu sichern. Irgend etwas vergisst man garantiert…
Mir wurde das bewusst, nachdem ich folgende Fehlermeldung beim betreiben des Blogs entgegengeschmettert bekam.
Call to undefined function: utf8_decode()
PHP will mir also mitteilen, dass er den übergebenen String gerne von UTF8 nach irgendwas decodieren möchte, dies jedoch aufgrund fehlender Funktionalität nicht möglich ist. Die Frage ist nur, wie kriege ich diese Funktionalität in PHP gepackt?
Die Antwort ist einfach. Man muss lediglich XML Unterstützung beim kompilieren aktivieren.
Wer (wie ich) Gentoo verwendet muss dabei nur wissen, welches USE Flag zu aktivieren ist.
- Für PHP4 wird zwingend das USE Flag expat benötigt.
- Für PHP5 wird zwingend das USE Flag xml benötigt.
So einfach kann es sein
Letzte Kommentare