Ü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.
Nachdem Sie die Datei heruntergeladen haben, benutzen Sie
ls
, um sie in Ihrem Arbeitsverzeichnis zu sehen:
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
.
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.
Ü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:
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
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:
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!
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.
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:
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:
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:
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.
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
undcurl -O
laden eine Datei aus dem Internet herunter. -
scp
undrsync
ü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.