Übertragen von Dateien mit entfernten Computern

Zuletzt aktualisiert am 2025-08-04 | Diese Seite bearbeiten

Übersicht

Fragen

  • Wie übertrage ich Dateien zum (und vom) Cluster?

Ziele

  • Übertragen Sie Dateien zu und von einem Computer-Cluster.

Die Arbeit auf einem entfernten Computer ist nicht sehr nützlich, wenn wir keine Dateien zum oder vom Cluster bekommen können. Es gibt mehrere Optionen für die Übertragung von Daten zwischen Computerressourcen mit Hilfe von CLI- und GUI-Dienstprogrammen, von denen wir einige vorstellen werden.

Herunterladen von Lektionsdateien aus dem Internet


Einer der einfachsten Wege, Dateien herunterzuladen, ist die Verwendung von curl oder wget. Eines von beiden ist normalerweise in den meisten Linux-Shells, auf Mac OS Terminal und in GitBash installiert. Jede Datei, die über einen direkten Link in Ihrem Webbrowser heruntergeladen werden kann, kann mit curl oder wget heruntergeladen werden. Dies ist ein schneller Weg, um Datensätze oder Quellcode herunterzuladen. Die Syntax für diese Befehle lautet

  • wget [-O new_name] https://some/link/to/a/file
  • curl [-o new_name] https://some/link/to/a/file

Probieren Sie es aus, indem Sie etwas Material, das wir später benutzen werden, von einem Terminal auf Ihrem lokalen Rechner herunterladen, indem Sie die URL der aktuellen Codebase benutzen:

https://github.com/hpc-carpentry/amdahl/tarball/main

Download des “Tarballs”

Das Wort “tarball” in der obigen URL bezieht sich auf ein komprimiertes Archivformat, das häufig unter Linux verwendet wird, dem Betriebssystem, mit dem die meisten HPC-Cluster-Maschinen arbeiten. Ein Tarball ist vergleichbar mit einer .zip-Datei. Die eigentliche Dateierweiterung lautet .tar.gz, was den zweistufigen Prozess zur Erstellung der Datei widerspiegelt: Die Dateien oder Ordner werden mit tar zu einer einzigen Datei zusammengeführt, die dann mit gzip komprimiert wird, so dass die Dateierweiterung “tar-dot-g-z” lautet Das ist etwas langatmig, deshalb sagen die Leute stattdessen oft “der xyz Tarball”.

Sie können auch die Erweiterung .tgz sehen, was nur eine Abkürzung für .tar.gz ist.

Standardmäßig laden curl und wget Dateien unter demselben Namen wie die URL herunter: in diesem Fall main. Verwenden Sie einen der oben genannten Befehle, um den Tarball unter amdahl.tar.gz zu speichern.

BASH

[you@laptop:~]$ wget -O amdahl.tar.gz https://github.com/hpc-carpentry/amdahl/tarball/main
# or
[you@laptop:~]$ curl -o amdahl.tar.gz -L https://github.com/hpc-carpentry/amdahl/tarball/main

Die Option -L für curl weist es an, URL-Umleitungen zu folgen (was wget standardmäßig tut).

Nachdem Sie die Datei heruntergeladen haben, benutzen Sie ls, um sie in Ihrem Arbeitsverzeichnis zu sehen:

BASH

[you@laptop:~]$ ls

Dateien archivieren


Eine der größten Herausforderungen bei der Übertragung von Daten zwischen entfernten HPC-Systemen ist die große Anzahl von Dateien. Die Übertragung jeder einzelnen Datei ist mit einem Overhead verbunden, und wenn wir eine große Anzahl von Dateien übertragen, verlangsamen diese Overheads unsere Übertragungen in hohem Maße.

Die Lösung für dieses Problem ist die Archivierung mehrerer Dateien in eine kleinere Anzahl größerer Dateien, bevor wir die Daten übertragen, um unsere Übertragungseffizienz zu verbessern. Manchmal wird die Archivierung mit einer Komprimierung kombiniert, um die zu übertragende Datenmenge zu verringern und so die Übertragung zu beschleunigen. Der gebräuchlichste Archivierungsbefehl, den Sie auf einem (Linux-)HPC-Cluster verwenden werden, ist tar.

tar kann verwendet werden, um Dateien und Ordner zu einer einzigen Archivdatei zusammenzufassen und das Ergebnis optional zu komprimieren. Schauen wir uns die Datei an, die wir von der Lektionsseite heruntergeladen haben, amdahl.tar.gz.

Der Teil .gz steht für gzip, eine Kompressionsbibliothek. Es ist üblich (aber nicht notwendig!), dass diese Art von Datei durch das Lesen ihres Namens interpretiert werden kann: Es scheint, dass jemand Dateien und Ordner, die sich auf etwas namens “amdahl” beziehen, in eine einzige Datei mit tar verpackt hat und dann dieses Archiv mit gzip komprimiert hat, um Platz zu sparen.

Schauen wir mal, ob das der Fall ist, ohne die Datei zu entpacken. tar gibt das “table of contents” mit dem -t Flag aus, für die mit dem -f Flag angegebene Datei, gefolgt vom Dateinamen. Beachten Sie, dass Sie die beiden Flags verketten können: das Schreiben von -t -f ist austauschbar mit dem Schreiben von -tf zusammen. Allerdings muss das Argument nach -f ein Dateiname sein, also funktioniert -ft nicht.

BASH

[you@laptop:~]$ tar -tf amdahl.tar.gz
hpc-carpentry-amdahl-46c9b4b/
hpc-carpentry-amdahl-46c9b4b/.github/
hpc-carpentry-amdahl-46c9b4b/.github/workflows/
hpc-carpentry-amdahl-46c9b4b/.github/workflows/python-publish.yml
hpc-carpentry-amdahl-46c9b4b/.gitignore
hpc-carpentry-amdahl-46c9b4b/LICENSE
hpc-carpentry-amdahl-46c9b4b/README.md
hpc-carpentry-amdahl-46c9b4b/amdahl/
hpc-carpentry-amdahl-46c9b4b/amdahl/__init__.py
hpc-carpentry-amdahl-46c9b4b/amdahl/__main__.py
hpc-carpentry-amdahl-46c9b4b/amdahl/amdahl.py
hpc-carpentry-amdahl-46c9b4b/requirements.txt
hpc-carpentry-amdahl-46c9b4b/setup.py

Diese Beispielausgabe zeigt einen Ordner, der einige Dateien enthält, wobei 46c9b4b ein 8-stelliger git Commit-Hash ist, der sich ändert, wenn das Quellmaterial aktualisiert wird.

Nun wollen wir das Archiv entpacken. Wir werden tar mit ein paar üblichen Flags ausführen:

  • -x um das Archiv zu extrahieren
  • -v für eine verböse Ausgabe
  • -z für gzip Kompression
  • -f «tarball» für die zu entpackende Datei

Entpacken Sie das Archiv

Entpacken Sie den Quellcode-Tarball mit den obigen Flags in ein neues Verzeichnis mit dem Namen “amdahl” unter Verwendung von tar.

BASH

[you@laptop:~]$ tar -xvzf amdahl.tar.gz

AUSGABE

hpc-carpentry-amdahl-46c9b4b/
hpc-carpentry-amdahl-46c9b4b/.github/
hpc-carpentry-amdahl-46c9b4b/.github/workflows/
hpc-carpentry-amdahl-46c9b4b/.github/workflows/python-publish.yml
hpc-carpentry-amdahl-46c9b4b/.gitignore
hpc-carpentry-amdahl-46c9b4b/LICENSE
hpc-carpentry-amdahl-46c9b4b/README.md
hpc-carpentry-amdahl-46c9b4b/amdahl/
hpc-carpentry-amdahl-46c9b4b/amdahl/__init__.py
hpc-carpentry-amdahl-46c9b4b/amdahl/__main__.py
hpc-carpentry-amdahl-46c9b4b/amdahl/amdahl.py
hpc-carpentry-amdahl-46c9b4b/requirements.txt
hpc-carpentry-amdahl-46c9b4b/setup.py

Beachten Sie, dass wir dank der Flaggenkonkatenation -x -v -z -f nicht eingeben mussten, obwohl der Befehl in beiden Fällen identisch funktioniert – solange die konkatenierte Liste mit f endet, denn die nächste Zeichenkette muss den Namen der zu extrahierenden Datei angeben.

Der Ordner hat einen unglücklichen Namen, also ändern wir ihn in etwas Passenderes.

BASH

[you@laptop:~]$ mv hpc-carpentry-amdahl-46c9b4b amdahl

Überprüfen Sie die Größe des extrahierten Verzeichnisses und vergleichen Sie sie mit der Größe der komprimierten Datei, indem Sie du für “disk usage” verwenden.

BASH

[you@laptop:~]$ du -sh amdahl.tar.gz
8.0K     amdahl.tar.gz
[you@laptop:~]$ du -sh amdahl
48K    amdahl

Textdateien (einschließlich Python-Quellcode) lassen sich gut komprimieren: der “Tarball” ist nur ein Sechstel so groß wie die Rohdaten!

Wenn Sie den Prozess umkehren wollen - Rohdaten komprimieren statt extrahieren - setzen Sie ein c-Flag anstelle von x, setzen Sie den Dateinamen des Archivs und geben Sie dann ein Verzeichnis zum Komprimieren an:

BASH

[you@laptop:~]$ tar -cvzf compressed_code.tar.gz amdahl

AUSGABE

amdahl/
amdahl/.github/
amdahl/.github/workflows/
amdahl/.github/workflows/python-publish.yml
amdahl/.gitignore
amdahl/LICENSE
amdahl/README.md
amdahl/amdahl/
amdahl/amdahl/__init__.py
amdahl/amdahl/__main__.py
amdahl/amdahl/amdahl.py
amdahl/requirements.txt
amdahl/setup.py

Wenn Sie im obigen Befehl amdahl.tar.gz als Dateinamen angeben, wird tar den bestehenden Tarball mit allen Änderungen, die Sie an den Dateien vorgenommen haben, aktualisieren. Das würde bedeuten, dass der neue Ordner amdahl zu dem vorhandenen Ordner (hpc-carpentry-amdahl-46c9b4b) innerhalb des Tarballs hinzugefügt wird, was die Größe des Archivs verdoppelt!

Arbeiten mit Windows

Wenn Sie Textdateien von einem Windows-System auf ein Unix-System (Mac, Linux, BSD, Solaris, etc.) übertragen, kann dies zu Problemen führen. Windows kodiert seine Dateien etwas anders als Unix und fügt in jeder Zeile ein zusätzliches Zeichen ein.

Auf einem Unix-System endet jede Zeile in einer Datei mit einem \n (Zeilenumbruch). Unter Windows endet jede Zeile in einer Datei mit einem \r\n (Wagenrücklauf + Zeilenumbruch). Dies verursacht manchmal Probleme.

Obwohl die meisten modernen Programmiersprachen und Software dies korrekt handhaben, kann es in einigen seltenen Fällen zu Problemen kommen. Die Lösung besteht darin, eine Datei mit dem Befehl dos2unix von der Windows- in die Unix-Kodierung zu konvertieren.

Sie können mit cat -A filename erkennen, ob eine Datei Windows-Zeilenenden hat. Eine Datei mit Windows-Zeilenendungen hat ^M$ am Ende jeder Zeile. Eine Datei mit Unix-Zeilenendungen hat $ am Ende einer Zeile.

Um die Datei zu konvertieren, führen Sie einfach dos2unix filename aus. (Umgekehrt können Sie unix2dos filename ausführen, um die Datei wieder in das Windows-Format zu konvertieren)

Übertragen von einzelnen Dateien und Ordnern mit scp


Um eine einzelne Datei in oder aus dem Cluster zu kopieren, können wir scp (“secure copy”) verwenden. Die Syntax kann für neue Benutzer ein wenig kompliziert sein, aber wir werden sie aufschlüsseln. Der scp-Befehl ist ein Verwandter des ssh-Befehls, den wir für den Zugriff auf das System verwendet haben, und kann denselben Public-Key-Authentifizierungsmechanismus verwenden.

Um eine Datei auf einen anderen Computer hochzuladen, lautet der Vorlagenbefehl

BASH

[you@laptop:~]$ scp local_file yourUsername@cluster.hpc-carpentry.org:remote_destination

an, wobei @ und : Feldtrennzeichen sind und remote_destination ein Pfad relativ zu Ihrem entfernten Heimatverzeichnis oder ein neuer Dateiname ist, wenn Sie ihn ändern möchten, oder sowohl ein relativer Pfad als auch ein neuer Dateiname. Wenn Sie keinen bestimmten Ordner im Sinn haben, können Sie das remote_destination weglassen und die Datei wird in Ihr Heimatverzeichnis auf dem entfernten Computer kopiert (mit ihrem ursprünglichen Namen). Wenn Sie ein remote_destination einschließen, beachten Sie, dass scp dies genauso interpretiert wie cp beim Erstellen von lokalen Kopien: wenn es existiert und ein Ordner ist, wird die Datei in den Ordner kopiert; wenn es existiert und eine Datei ist, wird die Datei mit dem Inhalt von local_file überschrieben; wenn es nicht existiert, wird angenommen, dass es ein Zieldateiname für local_file ist.

So laden Sie das Unterrichtsmaterial in Ihr entferntes Heimatverzeichnis hoch:

BASH

[you@laptop:~]$ scp amdahl.tar.gz yourUsername@cluster.hpc-carpentry.org:

Warum nicht direkt auf HPC Carpentry’s Cloud Cluster herunterladen?

Die meisten Computer-Cluster sind durch eine Firewall vor dem offenen Internet geschützt. Um die Sicherheit zu erhöhen, sind einige so konfiguriert, dass sie Datenverkehr eingehend, aber nicht ausgehend zulassen. Das bedeutet, dass ein authentifizierter Benutzer eine Datei an einen Cluster-Rechner senden kann, aber ein Cluster-Rechner kann keine Dateien vom Rechner eines Benutzers oder dem offenen Internet abrufen.

Versuchen Sie, die Datei direkt herunterzuladen. Beachten Sie, dass dies fehlschlagen kann, und das ist OK!

BASH

[you@laptop:~]$ ssh yourUsername@cluster.hpc-carpentry.org
[yourUsername@login1 ~] wget -O amdahl.tar.gz https://github.com/hpc-carpentry/amdahl/tarball/main
# or
[yourUsername@login1 ~] curl -o amdahl.tar.gz https://github.com/hpc-carpentry/amdahl/tarball/main

Warum nicht direkt auf HPC Carpentry’s Cloud Cluster herunterladen? (continued)

Hat es funktioniert? Wenn nicht, was sagt die Terminalausgabe über den Vorgang aus?

Übertragen eines Verzeichnisses


Um ein ganzes Verzeichnis zu übertragen, fügen wir das Flag -r für “recursive” hinzu: Kopieren Sie das angegebene Element, und jedes Element darunter, und jedes Element darunter… bis Sie das untere Ende des Verzeichnisbaums erreichen, dessen Wurzel der von Ihnen angegebene Ordnername ist.

BASH

[you@laptop:~]$ scp -r amdahl yourUsername@cluster.hpc-carpentry.org:

Vorsicht

Bei einem großen Verzeichnis – entweder in der Größe oder in der Anzahl der Dateien – kann das Kopieren mit -r sehr lange dauern, bis es abgeschlossen ist.

Bei der Verwendung von scp ist Ihnen vielleicht aufgefallen, dass ein : immer dem Namen des entfernten Computers folgt. Eine Zeichenkette nach dem : gibt das entfernte Verzeichnis an, in das Sie die Datei oder den Ordner übertragen wollen, einschließlich eines neuen Namens, wenn Sie das entfernte Material umbenennen wollen. Wenn Sie dieses Feld leer lassen, ist scp standardmäßig Ihr Heimatverzeichnis und der Name des zu übertragenden lokalen Materials.

Auf Linux-Computern ist / das Trennzeichen in Datei- oder Verzeichnispfaden. Ein Pfad, der mit / beginnt, wird absolut genannt, da es nichts oberhalb der Wurzel / geben kann. Ein Pfad, der nicht mit / beginnt, wird relativ genannt, da er nicht an der Wurzel verankert ist.

Wenn Sie eine Datei an einen Ort innerhalb Ihres Heimatverzeichnisses hochladen wollen - was oft der Fall ist -, dann brauchen Sie kein führendes /. Nach dem : können Sie den Zielpfad relativ zu Ihrem Heimatverzeichnis angeben. Wenn Ihr Heimatverzeichnis das Ziel ist, können Sie das Zielfeld leer lassen oder der Vollständigkeit halber ~ - die Abkürzung für Ihr Heimatverzeichnis - eingeben.

Mit scp ist ein abschließender Schrägstrich im Zielverzeichnis optional und hat keine Auswirkungen. Ein nachgestellter Schrägstrich im Quellverzeichnis ist wichtig für andere Befehle, wie rsync.

Eine Anmerkung zu rsync

Wenn Sie Erfahrung mit der Übertragung von Dateien haben, werden Sie den Befehl scp vielleicht als einschränkend empfinden. Das rsync Dienstprogramm bietet erweiterte Funktionen für die Dateiübertragung und ist in der Regel schneller als scp und sftp (siehe unten). Es ist besonders nützlich für die Übertragung von großen und/oder vielen Dateien und für die Synchronisierung von Ordnerinhalten zwischen Computern.

Die Syntax ist ähnlich wie bei scp. Zum Übertragen auf einen anderen Computer mit häufig verwendeten Optionen:

BASH

[you@laptop:~]$ rsync -avP amdahl.tar.gz yourUsername@cluster.hpc-carpentry.org:

Die Optionen sind:

  • -a (einArchiv), um u.a. Datei-Zeitstempel, Berechtigungen und Ordner zu erhalten; impliziert Rekursion
  • -v (verbose), um eine ausführliche Ausgabe zu erhalten, die Ihnen hilft, die Übertragung zu überwachen
  • -P (partial/progress), um teilweise übertragene Dateien im Falle einer Unterbrechung aufzubewahren und auch den Fortschritt der Übertragung anzuzeigen.

Um ein Verzeichnis rekursiv zu kopieren, können wir die gleichen Optionen verwenden:

BASH

[you@laptop:~]$ rsync -avP amdahl yourUsername@cluster.hpc-carpentry.org:~/

Wie geschrieben, wird das lokale Verzeichnis und sein Inhalt unter Ihrem Heimatverzeichnis auf dem entfernten System abgelegt. Wenn ein abschließender Schrägstrich an die Quelle angehängt wird, wird kein neues Verzeichnis erstellt, das dem übertragenen Verzeichnis entspricht, und der Inhalt des Quellverzeichnisses wird direkt in das Zielverzeichnis kopiert.

Um eine Datei herunterzuladen, ändern wir einfach die Quelle und das Ziel:

BASH

[you@laptop:~]$ rsync -avP yourUsername@cluster.hpc-carpentry.org:amdahl ./

Dateiübertragungen, die sowohl scp als auch rsync benutzen, verwenden SSH, um die über das Netzwerk gesendeten Daten zu verschlüsseln. Wenn Sie also eine Verbindung über SSH herstellen können, werden Sie in der Lage sein, Dateien zu übertragen. SSH verwendet standardmäßig den Netzwerkanschluss 22. Wenn ein benutzerdefinierter SSH-Port verwendet wird, müssen Sie ihn mit dem entsprechenden Flag angeben, oft -p, -P oder --port. Prüfen Sie --help oder die man Seite, wenn Sie sich unsicher sind.

Ändern Sie den Rsync-Port

Angenommen, wir müssen rsync über Port 768 statt 22 verbinden. Wie würden wir diesen Befehl ändern?

BASH

[you@laptop:~]$ rsync amdahl.tar.gz yourUsername@cluster.hpc-carpentry.org:

Hinweis: Sehen Sie auf der man Seite oder in der “Hilfe” nach rsync.

BASH

[you@laptop:~]$ man rsync
[you@laptop:~]$ rsync --help | grep port
     --port=PORT             specify double-colon alternate port number
See http://rsync.samba.org/ for updates, bug reports, and answers
[you@laptop:~]$ rsync --port=768 amdahl.tar.gz yourUsername@cluster.hpc-carpentry.org:

(Beachten Sie, dass dieser Befehl fehlschlägt, da der korrekte Port in diesem Fall der Standardwert ist: 22.)

Interaktives Übertragen von Dateien mit FileZilla


FileZilla ist ein plattformübergreifender Client für das Herunterladen und Hochladen von Dateien auf und von einem entfernten Computer. Er ist absolut narrensicher und funktioniert immer gut. Er verwendet das sftp-Protokoll. Sie können mehr über die Verwendung des sftp-Protokolls in der Kommandozeile in der Lektionsdiskussion lesen.

Laden Sie den FileZilla-Client von https://filezilla-project.org herunter und installieren Sie ihn. Nach der Installation und dem Öffnen des Programms sollten Sie auf der linken Seite des Bildschirms ein Fenster mit einem Dateibrowser Ihres lokalen Systems sehen. Wenn Sie sich mit dem Cluster verbinden, werden Ihre Clusterdateien auf der rechten Seite angezeigt.

Um sich mit dem Cluster zu verbinden, müssen wir nur unsere Anmeldedaten oben auf dem Bildschirm eingeben:

  • Host: sftp://cluster.hpc-carpentry.org
  • Benutzer: Ihr Clusternutzername
  • Passwort: Ihr Clusterkennwort
  • Port: (leer lassen, um den Standardport zu verwenden)

Drücken Sie “Quickconnect”, um eine Verbindung herzustellen. Ihre entfernten Dateien sollten auf der rechten Seite des Bildschirms angezeigt werden. Sie können Dateien per Drag-and-Drop zwischen der linken (lokalen) und der rechten (entfernten) Seite des Bildschirms verschieben, um Dateien zu übertragen.

Wenn Sie große Dateien (in der Regel größer als ein Gigabyte) von einem entfernten Computer auf einen anderen übertragen müssen, melden Sie sich per SSH auf dem Computer an, auf dem sich die Dateien befinden, und verwenden Sie scp oder rsync, um die Dateien auf den anderen Computer zu übertragen. Dies ist effizienter als die Verwendung von FileZilla (oder ähnlichen Anwendungen), die von der Quelle auf Ihren lokalen Rechner und dann auf den Zielrechner kopieren würden.

Hauptpunkte

  • wget und curl -O laden eine Datei aus dem Internet herunter.
  • scp und rsync übertragen Dateien zu und von Ihrem Computer.
  • Sie können einen SFTP-Client wie FileZilla verwenden, um Dateien über eine grafische Benutzeroberfläche zu übertragen.