In dieser “Zu Befehl”-Folge zeigen wir Ihnen, wie Sie Dateien an andere Stellen kopieren oder verschieben. Bei genauem Hinsehen geschehen manchmal recht ungewöhnliche Dinge: Was passiert, wenn man einen symbolischen Link kopiert? Wie bleiben möglichst viele Eigenschaften einer Datei beim Kopieren erhalten? Und wie kopiert man Unterverzeichnisse?
Zu Befehl
Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.
Original oder Fälschung?
Der Befehl cp datei1 datei2 (englisch “copy”) erzeugt eine neue Datei mit dem Inhalt der Ausgangsdatei, wobei diese unverändert bleibt. Sollte datei2 schon existieren, wird sie einfach überschrieben. Eine Sicherheitsabfrage bauen Sie mit dem Parameter -i (oder in Langform –interactive) ein:
huhn@asteroid:~$ cp -i datei1 datei2 cp: »datei2« überschreiben?
Jede Antwort, die mit j, J, y oder Y beginnt, wird als Bestätigung interpretiert – alles andere heißt “nein”. So eine Sicherheitsabfrage ist schön; vorsichtige Menschen setzen sich ein Alias. Für die Linux-Standard-Shell bash würde der Eintrag in der privaten Konfigurationsdatei .bashrc aus dem Home-Verzeichnis so aussehen:
alias cp='cp -i'
Wie bei allen Standardkommandos, die auf diese Weise neu definiert werden, sollten Sie auch hier Vorsicht walten lassen: Hat man sich einmal an die Sicherheitsabfrage gewöhnt, kann man leicht ins Schleudern kommen, wenn es den schützenden Alias auf einem anderen System oder unter einem anderen Account nicht gibt.
Noch mehr Sicherheit bietet der Parameter -b (–backup). Ist die Zieldatei bereits vorhanden, wird automatisch eine Sicherungskopie angelegt. Diese kann man an der Tilde erkennen: datei2~.
Was passiert aber, wenn Sie keine “normalen” Dateien, sondern einen symbolischen Linkkopieren? Die Referenz vom Link auf die Datei wird hierbei aufgelöst. Im Klartext heißt das: Kopiert wird die Datei, auf die der Link zeigt. Möchten Sie stattdessen einen neuen Link erzeugen, greifen Sie zur Option cp -d (–no-dereference) – dann wird nicht “dereferenziert”, der Link (die Referenz) also nicht aufgelöst.
Es ist auch möglich, mehrere Dateien in ein Zielverzeichnis zu kopieren: Dazu hängen Sie einfach die Dateinamen hintereinander: cp datei1 datei2 datei3 verzeichnis. Für das Kopieren eines ganzen Verzeichnisses mit sämtlichen Dateien und Unterverzeichnissen, verwenden Sie cp -R (–recursive). So wird das ganze Verzeichnis rekursiv (also mit allen Dateien bis in den letzten Winkel eventuell enthaltener Unterverzeichnisse) dupliziert.
Hinter den Kulissen
Normalerweise wird die beim Kopieren entstehende neue Datei mit ownerund groupdes kopierenden Benutzers angelegt und erhält einen aktuellen timestamp. Die Zugriffsrechte der Kopie richten sich nach der gesetzten umask. Um stattdessen möglichst viele Eigenschaften der Originaldatei zu übernehmen, verwendet man die Option -p (–preserve). Hier werden auf jeden Fall Zugriffsrechte und Zeitstempel der Ursprungsdatei übernommen.
Beachten Sie, dass nur root fremdes Dateieigentum “verschenken” oder dem Verzeichnis eines bestimmten Benutzers Dateien, die einem anderen gehören, hinzufügen kann. Nur ein als root ausgeführtes cp -p bewirkt, dass die neue Datei demselben User gehört. Kopiert man als gewöhnlicher User, macht man sich damit zum Besitzer. Anderenfalls könnte ja jeder anderen eine veränderte Datei als Kuckucksei unterschieben. Systemverwalter benötigen die Option -p, um User-Verzeichnisse zu sichern. Müsste ein Administrator jedesmal nach dem Kopieren wieder Rechte und Gruppenzugehörigkeit ändern, wäre das ganz schön viel Aufwand.
Lieber verschieben
Mit der Zeit sammeln sich in den eigenen Home-Verzeichnissen jede Menge einsame Dateien an. Damit man nicht in einem unübersichtlichen Chaos dauernd nach etwas suchen muss, legt man sich am besten Unterverzeichnisse an (mkdir neuesverzeichnis) und sortiert die Files. Hier kommt das Kommando mv (englisch “move”) ins Spiel: Mit mv datei verzeichnis wird die angegebene datei in das entsprechende verzeichnis bewegt. Auch hier gibt es wie bei cp die Option -i (–interactive). Liegt im Ziel-Directory bereits eine Datei mit gleichem Namen, wird beim Aufruf eine Warnung ausgegeben:
huhn@asteroid:~$ mv -i datei verzeichnis mv: »verzeichnis/datei« überschreiben?
Sie können mv auch dazu verwenden, eine Datei umzubenennen: Liegt wie im Beispiel oben schon ein File mit dem Namen datei in verzeichnis, können Sie diese mit mv datei datei1 (ausgeführt in diesem Verzeichnis) zunächst aus dem Weg räumen. Selbstverständlich lassen sich auch ganze Verzeichnisse verschieben; seit einiger Zeit sogar über Partitionsgrenzen hinweg.
Backups nicht vergessen!
Genau wie cp kennt auch mv die Option -b (–backup). Hier gibt es noch mehr interessante Features zu entdecken: So kann man beispielsweise nicht nur das Backup-Suffix (Standard ist die Tilde ~) verändern, sondern auch die Sicherungskopien durchnumerieren lassen.
huhn@asteroid:~$ mv -b -V t datei1 neuedatei huhn@asteroid:~$ mv -b -V t datei2 neuedatei huhn@asteroid:~$ ls neuedatei.~1~ neuedatei.~2~
Hier ist -V die Kurzoption für –version-control, und das t (Langform numbered) steht für durchnumerierte Backups. Ein eigenes Backup-Suffix können Sie als Umgebungsvariable setzen; in der bash definieren Sie das Standard-“Anhängsel” an Sicherungskopien SIMPLE_BACKUP_SUFFIX:
huhn@asteroid:~$ export SIMPLE_BACKUP_SUFFIX="-backup"
Eine Datei, die Sie mit mv -b verschieben, heißt jetzt beispielsweise datei-backup. Wenn Sie lieber mehrere durchnumerierte Sicherungskopien aufbewahren möchten, tippen Sie:
huhn@asteroid:~$ export VERSION_CONTROL=t
Vorsicht: Das gesetzte SIMPLE_BACKUP_SUFFIX kommt jetzt nicht mehr zum Einsatz, Backups werden wieder durchnumeriert. Möchten Sie diese Einstellungen dauerhaft verwenden, tragen Sie einfach den entsprechenden export-Aufruf direkt in die .bashrc ein. Für den Fall, dass Sie die Variable lieber wieder loswerden möchten, verwenden Sie das Kommando unset, also z. B. unset VERSION_CONTROL. Um die Aufräumarbeiten im /home komplett zu machen, lesen Sie in der nächsten Ausgabe, wie man mit dem Kommando rm die ganzen “Backupleichen” in den Datenkeller räumt.
Glossar
-
Alias
-
Um ein Programm (mit seinen Optionen) unter einem anderen, vielleicht kürzeren oder prägnanteren Namen aufrufen zu können, gibt es die Möglichkeit, mit dem Befehl alias eine “Abkürzung” zu definieren: alias cp=’cp -i’. Dauerhaft wird das allerdings erst, wenn man dies in die Konfigurationsdatei der eigenen Shell schreibt.
-
symbolischen Link
-
Ein Verweis auf eine andere Datei, der von Anwendungsprogrammen wie eben diese Datei behandelt wird. Wenn die Datei, auf die ein Symlink verweist, gelöscht wird, zeigt der Link ins Leere. Symlinks werden mit ln -s erzeugt.
-
owner
-
Der Eigentümer einer Datei, also der Benutzer, dem sie gehört.
-
group
-
Neben den Benutzern kennt Unix/Linux auch das Konzept der Gruppen; analog gehört auch jede Datei einer Gruppe. Die Zugriffsrechte von Besitzer und Gruppe auf Dateien regelt man über die permissions.
-
permissions
-
Die Zugriffrechte auf eine Datei gliedern sich in die Rechte des Besitzers, der Gruppe und aller sonstigen Benutzer auf, wobei jeweils Rechte für das Lesen (Read, r), das Schreiben (Write, w) und das Ausführen (eXecute, x) vergeben werden.
-
timestamp
-
Unix-Dateisysteme verwalten für eine Datei verschiedene Datumseinträge, z. B. die Zeit des letzten Zugriffs oder der letzten Änderung. Gerade für Backups oder Sicherungskopien ist es wichtig, den Zeitstempel der Originalzeit (z. B. den der letzten Modifikation) zu behalten, bevor man vielleicht ein falsches File weiter bearbeitet.
-
umask
-
Beeinflusst die Rechte, mit denen neue Dateien erzeugt werden: umask gibt an, welche Zugriffsrechte auf keinen Fall gesetzt werden sollen, wenn eine neue Datei erzeugt wird. Bestimmte Dateien werden im Modus 777 (für jeden alle Rechte), Textdateien hingegen mit dem Modus 644 (für jeden Lese- und Schreibrecht) erzeugt. Wenn eine Datei also neu geschrieben wird, wird von dem entsprechenden Modus der umask-Wert gewissermaßen abgezogen. Die Systemvariable umask kann mit dem Kommando umask wert gesetzt werden, z. B. also umask 022 (das ist in der Regel der Standardwert). Wird jetzt eine Textdatei erzeugt, bekommt sie den Modus 666 – 022, also 644 (-rw-r–r–). Das Kommando umask ohne Argument liefert den augenblicklichen Wert der Variable.





