Eine große Datei in viele kleine Dateien zerlegen

Ich hatte gerade eine sehr große Datei (3.3GB), die ich über eine langsame Internetverbindung auf einen Server verschieben wollte. Der Vorgang würde mehrere Stunden dauern. Die Wahrscheinlichkeit, dass der Upload unterbrochen würde, wäre relativ groß. In dem Falle müßte ich nochmal von vorne beginnen. Daher habe ich die Dateien in einzelne Dateien zerlegt. In diesem Artikel erkläre ich, wie man eine große Datei aufteilt und im Anschluss wieder zusammenfügt.

Ich habe eine Datei ergebnisse.zip, die ich in 10 MB große Stücke zerteilen möchte.

  1. Um den Erfolg überprüfen zu können, ermittle ich zunächst eine Prüfsumme (Hier: MD5-String) der Ausgangsdatei:
    md5sum ergebnisse.zip > ergebnisse.zip.md5
  2. Mit Hilfe des Programms split teile ich die Datei in 10MB große Stücke:
    split -b 10M ergebnisse.zip ergebnisse_split.zip.

    Dadurch werden viele Dateien erzeugt, die folgenden Aufbau haben:

    ergebnisse_split.zip.aa
    ergebnisse_split.zip.ab
    ergebnisse_split.zip.ac
    ergebnisse_split.zip.ad
    ...
    ergebnisse_split.zip.zy
    ergebnisse_split.zip.zz
    
  3. Nun kann man diese Dateien z.B. per SSH auf einem Server laden:
    scp ergebnisse_split.zip.* user@server.domain:~/zielordner

    Sollte nun der Vorgang unterbrochen werden, kann man im Anschluss einfach bei der Datei beginnen, bei der der Upload unterbrochen wurde.

  4. Nach erfolgtem Upload fügt man die Dateien mit Hilfe von cat einfach wieder zusammen:
    cat ergebnisse_split.zip.* > ergebnisse_cat.zip
  5. Nun muss nur noch geprüft werden, ob die zusammengefügte Datei den gleichen Inhalt wie die Ausgangsdatei hat. Dazu berechnet man erstmal die MD5-Summe:
    md5sum ergebnisse_cat.zip > ergebnisse_cat.zip.md5

    Wenn alles geklappt hat, stehen in ergebnisse.zip.md5 und ergebnisse_cat.zip.md5 die gleichen MD5-Summen.

  6. Weitere Möglichkeiten findest Du im Wiki von UbuntuUsers.

JavaScript-Datei im Theme-Editor sichtbar machen

Wer JavaScript-Dateien in seinem WordPress-Blog verwenden möchte, der möchte diese Dateien eventuell auch über den eingebauten Theme-Editor bearbeiten. Das Problem ist allerdings, dass der Theme-Editor solche Dateien nicht auflistet die in Unterverzeichnissen liegen oder deren Dateinamen nicht auf .css oder .php enden. In diesem Artikel zeige ich eine Möglichkeit, dieses Problem in drei Schritten zu umgehen.

  1. Verschiebe die Datei aus dem Unterverzeichnis direkt in das Wurzelverzeichnis deines Themes oder Child-Themes.
  2. Ändere die Endung der Datei auf .php.
  3. Schreibe zu Beginn der Datei folgenden PHP-Befehl:
    <?php
    header("Content-type: text/javascript; charset=UTF-8");
    ?>

    Mit diesem Befehl sendet PHP an den Browser, dass es sich um eine JavaScript-Datei handelt. Wenn vom Server keine (oder falsche) Informationen über den Inhalt der Datei gesendet würden, dann würde insbesondere Firefox diese Datei ignorieren. Solltest Du beim Erstellen der JavaScript-Datei einen anderen Zeichensatz als UTF-8 verwendet haben, musst Du die Angabe das charset entsprechend ändern.

JavaScript und jQuery in einem WordPress-Blog verwenden

Wie man JavaScript in einem WordPress-Blog einbindet, erschließt sich dem Anfängen nicht ohne weiteres. Insbesondere dann, wenn man die Bibliothek jQuery für seine Skripte verwenden möchte. In diesem Artikel werde ich zunächst zeigen, wie man JavaScript direkt in den Quelltext einfügt. Im zweiten Teil zeige ich, wie man JavaScript-Dateien in einen WordPress-Blog einbaut.

Direkter Einbau in den Quelltext

Es wird oftmals davon abgeraten, Skripte direkt in den Quelltext einzubauen. Dennoch werde ich diese Methode kurz vorstellen, um einen Fallstrick beim Einbau von jQuery in WordPress-Blogs zu zeigen.

Das folgende JavaScript kann direkt in den Quelltext einen Artikels oder einer Seite kopiert werden. Beim neu laden der Seite wird dann ein Fenster mit der Nachricht „JavaScript funktioniert!“ angezeigt.

<script>
alert('JavaScript funktioniert!');
</script>

In WordPress-Blogs wird jQuery im No Conflict Mode gestartet (siehe auch Blog von Matthew Ruddy). Daher funktioniert das $-Zeichen als Alias für jQuery() nicht mehr. An den entsprechenden Stellen muss man jQuery() verwenden.

Im folgenden Beispiel wird beim Klicken auf den Text jedes Mal das Wort „neu“ vor den eigentlichen Text gestellt:

<p id="meinTest">Klicke auf diesen Text.</p>
<script>
  jQuery("#meinTest").click(function(){
    jQuery(this).before("neu ");
  });
</script>

Um das Dollarzeichen wieder als Alias für jQuery() in den eigenen Skripten verwenden zu können, muss man beim registrieren seiner Funktionen (mittels jQuery(document).ready) der ersten Funktion das Dollarzeichen als Parameter mitliefern.

<p id="meinTest">Klick auf diesen Text</p>
<script>
jQuery(document).ready(function($) {
  $("#meinTest").click(function(){
    $(this).before("neu ");
  });
})
</script>

Einbinden von Skript-Dateien

Wenn man eigene JavaScript-Dateien einbauen möchte, sollte man die von WordPress zur Verfügung gestellten Funktionen nutzen. Mit ihnen kann man relativ leicht seine Skripte hinzuladen und aktivieren. Zudem stellt man sicher, dass alle benötigten Skript-Dateien (z.B. jQuery) rechtzeitig und in der richtigen Reihenfolge geladen werden.

  1. Zunächst erstellt man sich eine JavaScript-Datei (z.B. meinScript.js) mit der gewünschten Funktion. Durch das folgende Skript werden die H1-Überschriften versteckt, sobald man auf sie klickt.
    jQuery(document).ready(function($) {
      $("h1").click(function(){
        $(this).hide();
      });
    });

    Die Datei meinScript.js habe ich in den Ordner js/ meines eigenen Child-Themes gelegt (siehe auch StackOverflow).

  2. Im Anschluss kann man die Datei zu WordPress hinzufügen, indem man folgenden Quelltext in seine functions.php-Datei schreibt:
    function mein_script_laden() {
    wp_enqueue_script(
      // Name des Scripts (benötigt man z.B. zum Entfernen, etc.)
        'handlerMeinesScripts',
      // Ort der Script-Datei
        get_stylesheet_directory_uri() . '/js/meinScript.js',
      // Liste der Scripts, welche von der Script-Datei benötigt werden.
      // In diesem Falle das von Wordpress geladene jqeury
        array('jquery')
    );
    }
     
    add_action( 'wp_enqueue_scripts', 'mein_script_laden' );

    Da ich ein Child-Theme verwende, habe ich zur Ermittlung des Theme-Pfades die Funktion get_stylesheet_directory_uri() verwendet. Erstellt man ein komplett eigenes Theme, sollte man die Funktion get_template_directory_uri() verwenden.

  3. In Deinem Blog kannst Du auch andere Versionen von jQuery einbinden. Siehe hierzu: Die netzialisten.de und den Blog von Wlad Leirich.
  4. Du kannst auch die JavaScript-Datei im Theme-Editor sichtbar machen. Danach hast Du die Möglichkeit, die JavaScript-Datei direkt aus WordPress heraus zu editieren.

Dateien in ein komprimiertes Archiv verschieben

In meinen Simulationen werden oftmals viele Dateien erzeugt. Damit bin ich schon das ein oder andere Mal an die Grenzen für die Zahl der erlaubten Dateien und den verfügbaren Speicherplatz (quota) gestoßen. Abgesehen davon dauert es länger, wenn man anstatt einer großen Datei viele kleine Dateien herunterlädt.

Daher verschiebe ich die Dateien regelmäßig in ein gepacktes tar-Archiv. Im folgenden Befehl werden alle Dateien mit der Endung .plot in ein neu erstelltes Archiv plot.tar.gz verschoben.

tar --remove-files -czf plot.tar.gz *.plot
–remove-files
Diese Option sorgt dafür, dass die Orginal-Dateien gelöscht werden, sobald sie ins Archiv kopiert wurden.
-c
Diese Option sorgt dafür, dass ein neues Archiv erzeugt wird. Der Name des Archivs wird mit der Option -f angegeben.
Alternativ können mit der Option -r Dateien zu einem bestehenden Archiv hinzugefügt werden:

tar --remove-files -rf plot.tar *.plot

Archive, an die man Dateien anhängen möchte, dürfen allerdings nicht gepackt sein (siehe -z). Ansonsten bekommt man folgende Fehlermeldung:

tar: Cannot update compressed archives
tar: Error is not recoverable: exiting now
-z
Diese Option sorgt dafür, dass das Archiv mit Hilfe von gzip komprimiert wird.
-f
Diese Option legt den Namen des zu behandelnden Archivs fest. Der Name muss (mit einem Leerzeichen getrennt) direkt nach -f stehen.

Generell ist die Reihenfolge der Optionen egal. Allerdings sollte man darauf achten, dass bei Optionen die einen Wert erwarten (z.B. -f), der Wert weiterhin hinter der Option zu finden ist. Zudem müssen die hinzugefügten Dateien ganz am Ende stehen. Hier einige Beispiele für gültige und ungültige Befehle:

# Korrekt:
tar --remove-files -czf plot.tar.gz *.plot
tar --remove-files -c -z -f plot.tar.gz *.plot
tar -f plot.tar.gz --remove-files -zc *.plot
 
# Fehlerhaft:
# Die Namen der zu archivierenden Dateien stehen nicht am Ende
tar *.plot --remove-files -czf plot.tar.gz
# Der Name des Archivs steht nicht hinter -f
tar --remove-files -cfz plot.tar.gz *.plot

Hinweis: Auf Mac OS X-Systemen (oder FreeBSD) ist meistens BSDtar installiert (tar --version ergibt z.B. „bsdtar 2.6.2 – libarchive 2.6.2“). Im Gegensatz zu GNU tar gibt es bei BSDtar die Option --remove-files nicht.

Dateien aus verschlüsseltem Home-Verzeichnis kopieren und löschen

Ich habe mir kürzlich eine neue Festplatte gekauft und darauf ein neues Ubuntu eingerichtet. Nun möchte ich die Daten von meiner alten Festplatte herunterladen und auf die neue Festplatte spielen. Das Problem ist allerdings, dass ich mein Home-Verzeichnis auf der alten Festplatte mit Hilfe von eCryptfs verschlüsselt hatte. In diesem Artikel erkläre ich schrittweise, wie man dennoch die Daten aus einem verschlüsselten Verzeichnis verschieben, kopieren und löschen kann.

  1. Zunächst ist es hilfreich, wenn man sein altes Login-Passwort griffbereit hat. Alternative kann man auch das eCryptfs Mount-Passwort verwenden. Das hat man sich im Optimalfall nach der Installation notiert, oder zu einem späteren Zeitpunkt mit Hilfe des folgenden Befehls angeschaut:

    ecryptfs-unwrap-passphrase
  2. Im Anschluss muss man das Laufwerk/Speichermedium mounten, auf dem sich das verschlüsselte Verzeichnis befindet. Tipp: interne Festplatten und deren Partitionen sind nicht automatisch gemountet – auch nicht, wenn das Symbol in der Seitenleiste von Ubuntu angezeigt wird. In dem Falle muss man einfach einmal auf das Symbol klicken.
  3. Daraufhin gibt man im Terminal einen der beiden folgenden Befehle ein (mit Root-Rechten!; siehe auch UbuntuUsers Forum):

    # Verzeichnis nur mit Leserechten einbinden
    sudo ecryptfs-recover-private
     
    # Verzeichnis mit Schreibrechten einbinden
    # in "man ecryptfs-recover-private" ist die Option --rw etwas versteckt genannt
    sudo ecryptfs-recover-private --rw

    eCryptfs durchsucht nun alle gemounteten Medien nach eCryptfs-verschlüsselten Verzeichnissen. Das kann eine Weile dauern.

    INFO: Searching for encrypted private directories (this might take a while)…

  4. Hat eCryptfs die Suche beendet, wird für jedes gefundene Verzeichnis gefragt, ob es eingebunden werden soll. Dabei sollte man beachten, dass auch das Verzeichnis des angemeldeten Nutzers gefunden wird (in meinem Falle also nicht nur das alte, sondern auch das neue Home-Verzeichnis).

    INFO: Found [/media/neuerusername/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/.ecryptfs/alterusername/.Private].

    Nun wird man zunächst nach seinem Login-Passwort gefragt:

    INFO: Found your wrapped-passphrase
    Do you know your LOGIN passphrase? [Y/n]

    Falls man dieses nicht kennt, wird man nach dem (meist 32-stelligen) Mount-Passwort gefragt:

    INFO: To recover this directory, you MUST have your original MOUNT passphrase.
    INFO: When you first setup your encrypted private directory, you were told to record
    INFO: your MOUNT passphrase.
    INFO: It should be 32 characters long, consisting of [0-9] and [a-f].

    Enter your MOUNT passphrase:

  5. Hat man eines der beiden Passwörter korrekt eingegeben, so wird das Verzeichnis innerhalb des Ordners /tmp eingehängt:

    INFO: Success! Private data mounted at [/tmp/ecryptfs.PW48rluR].

  6. Nun kann man das Verzeichnis im Datei-Browser öffnen – entweder durch klicken, oder durch den Start von nautilus (mit dem Verzeichnis als Parameter) aus dem Terminal heraus:

    nautilus /tmp/ecryptfs.PW48rluR
  7. Hinweis: Sollten sich in dem Verzeichnis nur Dateien befinden, die z.B. mit ECRYPTFS_FNEK_ENCRYPTED. beginnen, hat man das Mount-Passwort sehr wahrscheinlich falsch eingegeben.

Datenträger unter Ubuntu bereinigen

Ich habe gerade eben folgende Fehlermeldung nach dem Start von Ubuntu bekommen:

Auf dem Datenträger „Wurzelordner des Dateisystems“ ist nur noch XXX kB Speicherplatz verfügbar.

In meinem Falle war XXX gleich 0. Es war also höchste Zeit, dass ich mal wieder unnötige Dateien von meiner System-Partition lösche. Ich hatte allerdings längst wieder vergessen, was man alles machen kann. Daher habe ich nun eine kleine Liste zusammengestellt:

  • Zunächst habe ich den Inhalt des temporären Verzeichnisses gelöscht.

    1
    2
    
    # Temporäreres Verzeichnis leeren
    rm -r /tmp/*

    Darin hatten sich Fehlermeldungen von apport angesammelt, die bei Programmabstürzen erstellt worden waren. Teilweise konnten diese aber nicht abgesendet werden, weil keine Internetverbindung bestand. In meinem Falle hatten sich über die Jahre mehr als 1.5 GB angesammelt.

  • Im Anschluss habe ich heruntergeladene Paket-Dateien, sowie nicht mehr benötigte Pakete gelöscht:

    1
    2
    3
    4
    
    # Paketdateien löschen
    sudo apt-get clean
    # Nicht mehr benötigte Pakete löschen
    sudo apt-get --purge autoremove

    Letzterer Befehl hat früher scheinbar auch nicht mehr benötigte Kernel-Versionen gelöscht (UbuntuUsers Forum). Das ist jetzt allerdings nicht mehr der Fall.

  • In regelmäßigen Abständen sollte man auch das Programm baobab („Festplattenbelegung analysieren“) aufrufen. Damit kann man herausfinden, welche Verzeichnisse besonders viele Daten enthalten. In meinem Falle habe ich gesehen, dass sich viele Kernel-Versionen angesammelt hatten (Ordner: /usr/src und /lib/modules):

    Das Programm "baobab" stellt die Größe von Ordnern grafisch dar. In diesem Fall kann man erkennen, dass ein großer Teil der Partition mit alten Kernel-Versionen belegt ist.
    Das Programm „baobab“ stellt die Größe von Ordnern grafisch dar. In diesem Fall kann man erkennen, dass ein großer Teil der Partition mit alten Kernel-Versionen belegt ist.

    Wie im UbuntuUsers-Forum beschrieben, kann man im Terminal ähnlich vorgehen:

    1
    2
    
    # Platzbedarf der Ordner im Wurzelverzeichnis anzeigen
    sudo du -h / --max-depth=1

    Im Anschluss kann man sich weiter auf die Suche machen und z.B. eine Liste der installierten Kernel-Versionen ausgeben lassen:

    1
    2
    
    # Installierte Kernel-Versionen anzeigen lassen
    dpkg -l linux-image-*

    Die Ausgabe könnte dann folgendermaßen aussehen:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    
     

    Da bei mir vor allem die Zahl der alten Linux-Kernel ein Problem war, habe ich einige davon gelöscht. Wie im Wiki von UbuntuUsers beschrieben, habe ich dazu in der Paketverwaltung Synaptic nach

    1. linux-image-
    2. linux-headers-

    gesucht und entsprechende Pakete vollständig entfernt. Mindestens eine ältere Version sollte man allerdings behalten. Dadurch habe ich 3.5GB frei machen können.

    Wenn man die Kernel im Terminal entfernen möchte, sind diverse Lösungen im Netz zu finden: LinuxMintUsers.de, webupd8.org, linuxundich.de, UbuntuUsers Forum

  • Große Dateien können sich auch im Verzeichnis /var/log ansammeln. Das war bei mir allerdings nicht der Fall, was ich folgenden Befehlen überprüft habe:

    # Dateien sortiert nach Nutzungsdatum auflisten
    ls -aluh /var/log
    # Größe des gesamten Ordners ausgeben lassen
    sudo du -sh /var/log
  • Wenn man im eigenen Home-Verzeichnis Ordnung schaffen möchte, bietet sich das Programm FSlint an. Nach der Installation des Programmpaketes fslint, lässt sich das Programm über den Befehl fslint-gui starten. Im Anschluss kann man viele ungenutzte Dateien und Ordner suchen und ggf. direkt löschen:

    • Duplikate
    • Temporäre Dateien (außerhalb des Verzeichnisses /tmp)
    • Leere Verzeichnisse
    • Fehlerhafte Symlinks
    Das Programm FSlint kann unter anderem Dateien mit identischem Inhalt finden. Dabei spielt es keine Rolle, ob die Dateien unterschiedliche Namen oder Erstellungsdaten haben.
    Das Programm FSlint kann unter anderem Dateien mit identischem Inhalt finden. Dabei spielt es keine Rolle, ob die Dateien unterschiedliche Namen oder Erstellungsdaten haben.