Einführung
In diesem Labor erhalten Sie praktische Erfahrung in der effizienten und sicheren Verwaltung und Übertragung von Dateien auf einem RHEL-System. Sie lernen, Dateien zu erstellen, aufzulisten und aus tar-Archiven, einschließlich komprimierter Archive, zu extrahieren. Dies ist essentiell für die Verpackung und Sicherung von Daten.
Darüber hinaus führt Sie dieses Labor durch die sichere Übertragung von Dateien mithilfe von sftp für interaktive Dateiübertragungen und rsync für robuste und effiziente Dateisynchronisation. Dies gewährleistet die Datenintegrität und Sicherheit während der Netzwerkvorgänge.
tar-Archive erstellen und auflisten
In diesem Schritt lernen Sie, wie man tar-Archive erstellt und auflistet. Das tar-Dienstprogramm ist ein leistungsstarkes Kommandozeilen-Tool zum Archivieren von Dateien und Verzeichnissen. Es wird häufig für Sicherungen und die Übertragung von Dateien verwendet.
Der Befehl tar benötigt einen Aktionsoption, um anzugeben, welche Operation ausgeführt werden soll. Zu den gängigen Aktionsoptionen gehören:
-coder--create: Erstellt ein neues Archiv.-toder--list: Listet den Inhalt eines Archivs auf.-xoder--extract: Extrahiert Dateien aus einem Archiv.
Zusätzlich verwendet tar oft allgemeine Optionen, um sein Verhalten zu modifizieren:
-voder--verbose: Zeigt die Dateien an, die während des Archivierens oder der Extraktion verarbeitet werden.-foder--file: Gibt den Namen der Archivdatei an. Dieser Option muss der Archivdateiname folgen.
Beginnen wir mit der Erstellung einiger Beispieldateien, die wir archivieren werden. Navigieren Sie zu Ihrem Verzeichnis ~/project, Ihrem Standardarbeitsverzeichnis.
cd ~/project
Erstellen Sie nun ein neues Verzeichnis namens my_files und einige Beispieltextdateien darin.
mkdir my_files
echo "Dies ist der Inhalt von Datei1." > my_files/file1.txt
echo "Dies ist der Inhalt von Datei2." > my_files/file2.txt
echo "Dies ist der Inhalt von Datei3." > my_files/file3.txt
ls my_files
Sie sollten die drei Dateien sehen:
file1.txt file2.txt file3.txt
Erstellen wir nun ein tar-Archiv des Verzeichnisses my_files. Wir nennen das Archiv my_archive.tar.
tar -cvf my_archive.tar my_files
Die Ausgabe zeigt die Dateien an, die dem Archiv hinzugefügt werden:
my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt
Sie können überprüfen, dass die Archivdatei my_archive.tar in Ihrem aktuellen Verzeichnis erstellt wurde:
ls
Sie sollten my_archive.tar zusammen mit my_files sehen:
my_archive.tar my_files
Als Nächstes listen wir den Inhalt der Datei my_archive.tar mit den Optionen -t (Liste) und -f (Datei) auf.
tar -tf my_archive.tar
Die Ausgabe zeigt den Inhalt des Archivs an:
my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt
Wenn Sie detailliertere Informationen wie Dateirechte, Eigentümer und Größe sehen möchten, können Sie die Option -v (verbose) hinzufügen:
tar -tvf my_archive.tar
Die Ausgabe wird ähnlich aussehen und bietet detailliertere Informationen zu jedem archivierten Element:
drwxr-xr-x labex/labex 0 2023-10-27 10:00 my_files/
-rw-r--r-- labex/labex 22 2023-10-27 10:00 my_files/file1.txt
-rw-r--r-- labex/labex 22 2023-10-27 10:00 my_files/file2.txt
-rw-r--r-- labex/labex 22 2023-10-27 10:00 my_files/file3.txt
Beachten Sie, dass tar standardmäßig die führenden / aus absoluten Pfaden entfernt, wenn es archive. Dies ist eine Sicherheitsmaßnahme, um versehentliches Überschreiben von Systemdateien beim Extrahieren von Archiven zu verhindern. Wenn Sie beispielsweise /etc/hosts archivieren würden, würde es als etc/hosts im tar-Archiv gespeichert werden. Dies ermöglicht es Ihnen, es an einen neuen Ort zu extrahieren, ohne die ursprüngliche Datei /etc/hosts zu beeinträchtigen.
Dateien aus tar-Archiven extrahieren
In diesem Schritt lernen Sie, wie man Dateien aus einem tar-Archiv extrahiert. Das Extrahieren von Dateien ist der Prozess, die archivierten Inhalte wieder in das Dateisystem zu platzieren.
Die primäre Option zum Extrahieren von Dateien ist -x oder --extract. Sie verwenden typischerweise auch -f, um die Archivdatei anzugeben, und -v für eine ausführliche Ausgabe, um zu sehen, welche Dateien extrahiert werden.
Vor dem Extrahieren ist es gut, Archive in ein leeres Verzeichnis zu extrahieren, um zu vermeiden, dass vorhandene Dateien überschrieben oder mit anderen Inhalten vermischt werden. Erstellen wir ein neues Verzeichnis namens extracted_files in Ihrem Verzeichnis ~/project.
cd ~/project
mkdir extracted_files
Navigieren Sie nun in das Verzeichnis extracted_files. Dadurch wird sichergestellt, dass die Inhalte des Archivs hier extrahiert werden.
cd extracted_files
Extrahieren wir nun den Inhalt von my_archive.tar (das sich im übergeordneten Verzeichnis ~/project befindet) in das aktuelle Verzeichnis extracted_files.
tar -xvf ../my_archive.tar
Die Ausgabe zeigt die extrahierten Dateien an:
my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt
Nach dem Extrahieren können Sie den Inhalt des aktuellen Verzeichnisses (~/project/extracted_files) auflisten, um zu überprüfen, ob das Verzeichnis my_files und dessen Inhalte erfolgreich extrahiert wurden.
ls
Sie sollten das Verzeichnis my_files sehen:
my_files
Überprüfen wir nun den Inhalt des Verzeichnisses my_files innerhalb von extracted_files:
ls my_files
Sie sollten die ursprünglichen Dateien sehen:
file1.txt file2.txt file3.txt
Sie können auch den Inhalt einer der extrahierten Dateien anzeigen, um deren Integrität zu bestätigen:
cat my_files/file1.txt
Die Ausgabe sollte sein:
This is file1 content.
Beim Extrahieren von Dateien verwendet der Befehl tar den aktuellen umask, um Berechtigungen für die extrahierten Dateien festzulegen. Wenn Sie jedoch die ursprünglichen Dateiberechtigungen wie im Archiv erhalten möchten, können Sie die Option -p oder --preserve-permissions verwenden. Dies ist besonders nützlich bei ausführbaren Skripten oder Konfigurationsdateien, bei denen bestimmte Berechtigungen entscheidend sind. Für den Benutzer root ist diese Option oft standardmäßig aktiviert. Für reguläre Benutzer ist es empfehlenswert, sie aufzunehmen, wenn die Erhaltung der Berechtigungen wichtig ist.
Für dieses Labor werden wir die Option -p nicht explizit demonstrieren, da das Standardverhalten für unsere Textdateien ausreichend ist. Beachten Sie diese Option jedoch für zukünftige Anwendungsfälle.
Erstellen von komprimierten tar-Archiven
In diesem Schritt lernen Sie, wie man komprimierte tar-Archive erstellt. Während tar selbst nur Dateien bündelt, kann es mit Komprimierungswerkzeugen wie gzip, bzip2 und xz integriert werden, um kleinere Archivdateien zu erstellen. Dies ist entscheidend, um Festplattenspeicher zu sparen und Übertragungszeiten zu reduzieren.
Der Befehl tar bietet spezifische Optionen für verschiedene Komprimierungsalgorithmen:
-zoder--gzip: Verwendet diegzip-Komprimierung, was zu einer.tar.gz- oder.tgz-Endung führt. Dies ist die häufigste und schnellste Komprimierungsmethode.-joder--bzip2: Verwendet diebzip2-Komprimierung, was zu einer.tar.bz2- oder.tbz-Endung führt. Im Allgemeinen bietet dies eine bessere Komprimierung alsgzip, ist aber langsamer.-Joder--xz: Verwendet diexz-Komprimierung, was zu einer.tar.xz- oder.txz-Endung führt. Dies bietet die beste Komprimierungsrate unter den drei, ist aber die langsamste.-aoder--auto-compress: Ermöglicht estar, den Komprimierungsalgorithmus basierend auf der Archivendung (z. B..tar.gzimpliziertgzip) automatisch zu bestimmen. Dies ist eine bequeme Option.
Beginnen wir damit, sicherzustellen, dass Sie sich in Ihrem Verzeichnis ~/project befinden.
cd ~/project
Zuerst erstellen wir ein mit gzip komprimiertes Archiv des Verzeichnisses my_files. Wir nennen es my_archive.tar.gz.
tar -czvf my_archive.tar.gz my_files
Die Ausgabe zeigt die Dateien an, die hinzugefügt und komprimiert werden:
my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt
Sie können die Erstellung des komprimierten Archivs überprüfen:
ls -lh my_archive.tar.gz
Die Optionen -lh für ls liefern eine menschenlesbare Größe. Sie sehen eine Ausgabe ähnlich dieser, die die Dateigröße anzeigt:
-rw-r--r-- 1 labex labex 180 Okt 27 10:00 my_archive.tar.gz
(Hinweis: Die genaue Größe kann je nach System und Inhalt leicht variieren, aber sie wird für diese kleinen Textdateien eine kleine Größe sein.)
Versuchen wir nun, ein mit xz komprimiertes Archiv zu erstellen, das typischerweise eine bessere Komprimierung bietet. Wir nennen es my_archive.tar.xz.
tar -cJvf my_archive.tar.xz my_files
Wieder zeigt die Ausgabe die verarbeiteten Dateien an:
my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt
Überprüfen Sie die Größe des xz-Archivs:
ls -lh my_archive.tar.xz
Sie werden feststellen, dass my_archive.tar.xz etwas kleiner als my_archive.tar.gz ist, was die bessere Komprimierungsrate von xz demonstriert.
-rw-r--r-- 1 labex labex 168 Okt 27 10:00 my_archive.tar.xz
Um ein komprimiertes tar-Archiv zu extrahieren, erkennt tar die Komprimierungsart beim Verwenden der Option -x oft automatisch. Es ist jedoch empfehlenswert, die entsprechende Dekomprimierungsoption (-z, -j oder -J) oder die Option -a (automatische Komprimierung) explizit zu verwenden.
Versuchen wir, my_archive.tar.gz in ein neues Verzeichnis namens extracted_gz zu extrahieren.
mkdir extracted_gz
tar -xzvf my_archive.tar.gz -C extracted_gz
Die Option -C (Verzeichnis ändern) teilt tar mit, die Dateien in das angegebene Verzeichnis zu extrahieren. Dies ist eine sehr nützliche Option, um Ihr aktuelles Verzeichnis nicht zu überladen.
Überprüfen Sie den Inhalt von extracted_gz:
ls extracted_gz/my_files
Sie sollten sehen:
file1.txt file2.txt file3.txt
Dateien sicher per sftp übertragen
In diesem Schritt lernen Sie, wie Sie Dateien sicher zwischen Systemen mit sftp (Secure File Transfer Program) übertragen. sftp ist ein interaktives Dateiübertragungsprogramm, das SSH (Secure Shell) für die sichere Kommunikation verwendet und Verschlüsselung und Authentifizierung bietet. Es ist Teil der OpenSSH-Suite.
Für dieses Labor simulieren wir ein entferntes System, indem wir den Benutzer labex auf demselben Host wie einen "entfernten" Benutzer verwenden. Dies ermöglicht es uns, sftp-Befehle zu üben, ohne eine separate virtuelle Maschine zu benötigen.
Stellen Sie zunächst sicher, dass Sie sich in Ihrem Verzeichnis ~/project befinden.
cd ~/project
Erstellen wir eine Datei, die wir auf das Homeverzeichnis des simulierten entfernten Benutzers "hochladen" werden.
echo "Diese Datei wird per sftp hochgeladen." > local_file.txt
Starten Sie nun eine sftp-Sitzung mit dem Benutzer labex auf localhost.
sftp labex@localhost
Sie werden nach dem Passwort für labex@localhost gefragt. Geben Sie labex ein.
Die Authentizität des Hosts 'localhost (127.0.0.1)' kann nicht festgestellt werden.
ED25519-Schlüssel-Fingerprint ist SHA256:....
Sind Sie sicher, dass Sie die Verbindung fortsetzen möchten (ja/nein/[Fingerprint])? ja
Warnung: 'localhost' (ED25519) wurde dauerhaft der Liste der bekannten Hosts hinzugefügt.
Passwort von labex@localhost: labex
Verbindung zu localhost hergestellt.
sftp>
Sie befinden sich nun in der interaktiven sftp-Eingabeaufforderung.
Innerhalb der sftp-Eingabeaufforderung können Sie verschiedene Befehle verwenden, die einer normalen Shell ähneln.
pwd: Zeigt das aktuelle Arbeitsverzeichnis auf dem entfernten System an.lpwd: Zeigt das aktuelle Arbeitsverzeichnis auf Ihrem lokalen System an.ls: Listet Dateien auf dem entfernten System auf.lls: Listet Dateien auf dem lokalen System auf.
Probieren wir sie aus:
sftp> pwd
Entferntes Arbeitsverzeichnis: /home/labex
sftp> lpwd
Lokales Arbeitsverzeichnis: /home/labex/project
sftp> ls
(Der Befehl ls zeigt den Inhalt von /home/labex auf der entfernten Seite an, was Ihrem eigenen Homeverzeichnis entspricht.)
Laden wir nun local_file.txt aus Ihrem lokalen Verzeichnis ~/project in das Homeverzeichnis des entfernten Benutzers labex (/home/labex) hoch. Verwenden Sie den Befehl put.
sftp> put local_file.txt
Hochladen von local_file.txt nach /home/labex/local_file.txt
local_file.txt 100% 32 0.0KB/s 00:00
sftp>
Sie können überprüfen, ob die Datei hochgeladen wurde, indem Sie das entfernte Verzeichnis auflisten:
sftp> ls
Sie sollten local_file.txt unter den Dateien in /home/labex sehen.
Laden wir nun eine Datei vom entfernten System herunter. Wir laden die Datei .bashrc aus dem Homeverzeichnis des entfernten Benutzers labex in Ihr lokales Verzeichnis ~/project herunter. Verwenden Sie den Befehl get.
sftp> get .bashrc
Abrufen von /home/labex/.bashrc nach .bashrc
/home/labex/.bashrc 100% 193 0.2KB/s 00:00
sftp>
Sie können den Download überprüfen, indem Sie Ihr lokales Verzeichnis auflisten:
sftp> lls
Sie sollten .bashrc in Ihrem lokalen Verzeichnis ~/project sehen.
Um die sftp-Sitzung zu beenden, verwenden Sie den Befehl exit oder bye.
sftp> exit
Sie kehren zu Ihrer normalen Shell-Eingabeaufforderung zurück.
Dateien sicher mit rsync synchronisieren
In diesem Schritt lernen Sie, wie Sie Dateien zwischen Systemen mit dem Befehl rsync synchronisieren. rsync ist ein leistungsstarkes und vielseitiges Werkzeug zum Kopieren und Synchronisieren von Dateien und Verzeichnissen, lokal und remote. Sein Hauptvorteil ist die Fähigkeit, nur die Unterschiede zwischen Dateien zu übertragen, was es sehr effizient für Aktualisierungen macht. Wie sftp kann rsync SSH für sichere, verschlüsselte Übertragungen verwenden.
Die häufigsten Optionen für rsync umfassen:
-aoder--archive: Dies ist eine Kombination aus mehreren Optionen (-rlptgoD), die die meisten Dateiattribute (rekursiv, Links, Berechtigungen, Zeiten, Gruppe, Besitzer, Geräte-Dateien) beibehält. Es wird oft als "Archivmodus" bezeichnet und ist für die meisten Synchronisierungsaufgaben sehr empfehlenswert.-voder--verbose: Erhöht die Detailgenauigkeit und zeigt mehr Informationen über die Übertragung an.-zoder--compress: Komprimiert die Dateiinformationen während der Übertragung, was die Übertragungsgeschwindigkeit bei langsamen Verbindungen erhöhen kann.-hoder--human-readable: Gibt Zahlen in einem menschenlesbaren Format aus.-noder--dry-run: Führt einen Testlauf aus, ohne Änderungen vorzunehmen. Dies ist äußerst nützlich, um zu überprüfen, wasrsynctun wird, bevor der Befehl tatsächlich ausgeführt wird.
Beginnen wir damit, sicherzustellen, dass Sie sich in Ihrem Verzeichnis ~/project befinden.
cd ~/project
Wir simulieren ein Synchronisierungsszenario, indem wir ein Quelldatei- und ein Zielverzeichnis erstellen.
Erstellen Sie ein Quelldatei-Verzeichnis source_dir mit einigen Dateien:
mkdir source_dir
echo "Inhalt von DateiA" > source_dir/fileA.txt
echo "Inhalt von DateiB" > source_dir/fileB.txt
mkdir source_dir/subdir
echo "Inhalt von Unterdatei1" > source_dir/subdir/subfile1.txt
Erstellen Sie ein leeres Zielverzeichnis dest_dir:
mkdir dest_dir
Führen wir nun einen Trockenlauf aus, um zu sehen, was rsync tun würde, wenn es source_dir mit dest_dir synchronisiert. Wir verwenden die Optionen -avh für Archivmodus, ausführliche Ausgabe und menschenlesbare Größen sowie -n für den Trockenlauf.
rsync -avhn source_dir/ dest_dir/
Wichtiger Hinweis zu den nachgestellten Schrägstrichen:
source_dir/: Der nachgestellte Schrägstrich bedeutet, dass der Inhalt vonsource_dirkopiert wird.source_dir: Ohne nachgestellten Schrägstrich bedeutet dies, dasssource_dirselbst in das Zielverzeichnis kopiert wird.
Die Ausgabe des Trockenlaufs zeigt Ihnen die Dateien an, die übertragen würden:
sending incremental file list
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt
sent 186 bytes received 12 bytes 396.00 bytes/sec
total size is 66 speedup is 0.33 (DRY RUN)
Beachten Sie das (DRY RUN) am Ende, was anzeigt, dass keine tatsächlichen Änderungen vorgenommen wurden.
Führen wir nun die tatsächliche Synchronisierung durch. Entfernen Sie die Option -n.
rsync -avh source_dir/ dest_dir/
Die Ausgabe ist ähnlich wie beim Trockenlauf, aber ohne die Kennzeichnung (DRY RUN):
sending incremental file list
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt
sent 186 bytes received 12 bytes 396.00 bytes/sec
total size is 66 speedup is 0.33
Überprüfen Sie, ob die Dateien in dest_dir kopiert wurden:
ls -R dest_dir
Sie sollten sehen:
dest_dir:
fileA.txt fileB.txt subdir
dest_dir/subdir:
subfile1.txt
Ändern wir nun eine Datei in source_dir und fügen eine neue Datei hinzu, um die Effizienz von rsync zu sehen.
echo "Aktualisierter Inhalt für DateiA" > source_dir/fileA.txt
echo "Neuer Dateiinhalt" > source_dir/new_file.txt
Führen Sie einen weiteren Trockenlauf aus, um zu sehen, welche Dateien rsync diesmal übertragen würde:
rsync -avhn source_dir/ dest_dir/
Die Ausgabe zeigt nur die geänderten und neuen Dateien an:
sending incremental file list
./
fileA.txt
new_file.txt
sent 128 bytes received 12 bytes 280.00 bytes/sec
total size is 100 speedup is 0.71 (DRY RUN)
Dies demonstriert die Fähigkeit von rsync, nur die Unterschiede zu übertragen.
Führen Sie nun erneut die tatsächliche Synchronisierung durch:
rsync -avh source_dir/ dest_dir/
Überprüfen Sie erneut den Inhalt von dest_dir:
ls -R dest_dir
cat dest_dir/fileA.txt
cat dest_dir/new_file.txt
Sie sollten new_file.txt in dest_dir sehen und fileA.txt sollte "Aktualisierter Inhalt für DateiA" enthalten.
Zusammenfassung
In diesem Labor haben wir praktische Erfahrungen mit der Verwaltung und Übertragung von Dateien auf RHEL-Systemen mit essentiellen Befehlszeilenwerkzeugen gesammelt. Wir begannen mit der Beherrschung des tar-Dienstprogramms, lernten, wie man Dateien aus Archiven erstellt, auflistet und extrahiert, einschließlich der Erstellung komprimierter tar.gz-Archive für effiziente Speicherung und Übertragung.
Anschließend erkundeten wir sichere Dateiübertragungsmethoden. Wir nutzten sftp für interaktive und sichere Dateiübertragungen zwischen Systemen und verstanden seine Fähigkeiten zum Hochladen und Herunterladen von Dateien. Schließlich tauchten wir in rsync ein, ein leistungsstarkes Werkzeug zur Synchronisierung von Dateien und Verzeichnissen, wobei wir seine Effizienz bei der Bearbeitung von inkrementellen Aktualisierungen und die Sicherstellung der Datenskonsistenz an verschiedenen Standorten hervorhoben.



