Ich bin ja auch ein Freund von Klickibunti-Software, aber die guten, alten Kommandozeilen-Tools sind auch nicht zu verachten. Am Wochenende stand ich vor dem Problem ca. 20 GB von einem Laptop zum nächsten zu befördern. Erst versuchte ich es mittels SMB. Auf der einen Seite der Leitung ein Mac OS X, auf der anderen ein Ubuntu Edgy mt GNOME, welche direkt miteinander verbunden waren. Die Transferrate betrug dabei jämmerliche 2,5 MB/s. Mir dauerte das aber deutlich zu lang. Glücklicherweise hatte ich mal von einem Freund das kleine, schicke Tool "netcat" gezeigt bekommen. Im folgenden möchte ich eine kleine, möglichst verständliche Anleitung geben, ohne wirklich alle Möglichkeiten von netcat aufzuzeigen. Der Text richtet sich an Interessierte, die keine (prinzipielle) Scheu vor der Kommandozeile haben, aber auch keine Geeks sind, also Leute wie Du und ich. :-)

Netcat, oder kurz "nc", ist das Schweizer Taschenmesser für TCP/IP und sollte jedem halbwegs brauchbaren Unix (also auch Mac OS X und GNU/Linux) beiliegen. Es liest Daten aus der Standard-Eingabe (siehe dazu Wikipedia) und schickt sie an einen angegebenen Port auf einem angegebenen Netzwerk-Rechner.

mein.computer.org $ netcat irgendein.computer.net 1234 -q 1 < eine_datei.txt

netcat
Klar, das Programm selber. Ich schreibe hier netcat aus, auf manchen System ist es aber nur als nc zu finden.
irgendein.computer.net
Der Hostname des Computers. Mensch kann auch die IP verwenden.
1234
Der Port des Rechners. Dieser ist frei wählbar, darf aber nicht anderweitig belegt sein. Für Ports unter 1024 braucht mensch aber root-Rechte.
-q 1
Die Option -q veranlasst netcat sich nach einem End-of-File sich zu Beenden. Dabei muss dieser Option ein Wert mitgegeben werden, nach wie viel Sekunden dies der Fall sein soll. In diesem Beispiel nach einer Sekunde.
<
Besagt, dass die nachfolgende Datei in die Standard-Eingabe geleitet wird. Ich finde zwar "cat eine_datei.txt | netcat..." intuitiver und bildlicher, aber bevor ich von Johl wegen einem useless use of cat gebasht werde ..., hihi.
eine_datei.txt
... ist eine beliebige Datei. Dabei ist es egal, um was für Art von Datei es sich handelt.

Das war aber nur die halbe Miete. Auf der anderen Seite muss auch noch jemand diesen Datensstrom annehmen. Es muss sich dabei nicht zwangsläufig um netcat handeln, aber es ist das Naheliegende.

irgendein.computer.net $ netcat -l -p 1234 > eine_datei.txt

-l
Anstatt Daten zu senden lauscht es auf eingehende Verbindungen.
-p 1234
Hiermit geben wir an, dass netcat auf Port 1234 lauschen soll. Es muss natürlich der gleiche sein, wie jener der bei der ausgehenden Verbindung benutzt wird. Ports sind so wie Kanäle. Wenn ihr auf dem Funkgerät auf Kanal 1 spricht und die Gegenseite auf Kanal 2 lauscht wird das nix mit der Kommunikation.
> eine_datei.txt
Damit leitet mensch die Standard-Ausgabe in eine Datei um. Also alles was bei netcat hinten rauskommt, wird in die Datei "eine_datei.txt" geschrieben. Der Dateiname kann völlig frei gewählt werden. Es hätte auch hier "irgendwas.txt" stehen können.

Die Empfänger-Seite muss übrigens als erstes gestartet werden. Sonst bekommt ihr den Fehler "Connection refused". Ich fand es aber verständlicher, erst das Senden und dann das Empfangen zu erklären.

Netcat kopiert also Daten über das Netzwerk. Dabei ist es sehr schnell, aber auch sehr minimalistisch. Eigentlich kopiert es nur Datenströme. Die Daten an Netcat zu verfüttern und auf der anderen Seite wieder auseinander zu sortieren und in Dateien zu speichern ist Euer Job.

Das oben genannte Beispiel ist für das Kopieren einer einzelnen Datei schon ganz brauchbar. Wie sieht es nun mit ganzen Verzeichnissen aus? Dazu nutzen wir den guten, alten Klassiker "tar". Es kommt noch aus Zeiten der Bandlaufwerke und steht für "tape archiver (Bandarchivierer)". Wir nutzen tar um ein Verzeichnis zu packen, also in eine einzelne handliche Datei zu schreiben. Aber wir schreiben die Datei nicht auf die Festplatte, sondern gleich in die Standard-Ausgabe, wo netcat schon drauf wartet.

mein.computer.org $ tar c Meine_Dateien/ | netcat irgendein.computer.net 1234 -q 1

Das unscheinbare c steht für create. Auf der anderen Seite nehmen wir das Päckchen mit netcat an und reichen sie an tar weiter. Tar entpackt die Dateien umgehend.

irgendein.computer.net $ netcat -l -p 1234 | tar xv

Hier steht x für extract und v für verbose. Letztere steht für ausführlichere Ausgaben, was tar eigentlich macht. So seht ihr, wie die Dateien entpackt werden. Das macht aber den ganzen Geschwindigkeitsvorteil zugrunde, daher begnügt Euch mit "... | tar x".

Noch ein letztes Wort zu netcats Minimalismus. Da es so schlicht ist, kennt es selbstverstädlich auch keine Verschlüßelung oder ähnlichen schnickschnack. Daher solltet ihr es auch nur in sicheren, also eigenen Netzen mit ausschließlich vertrauenswürdigen TeilnehmerInnen benutzen, oder für Daten die sowieso öffentlich sind (etwa Filme, Musik usw.).

Und wer mal wissen will, wie schnell Netcat ist, hier einige Vergleichswerte:

  100MB Zip 52MB Ogg, m3u 69MB /usr/share/doc
netcat 22s 19s 44s
scp 48s 36s / 32s* 1m11s / 40s**
rsync 50s 32s 2m9s
http 22s - -

* mit Kompression (scp -C)
** mit Hilfe von tar