# Kopieren unter Linux: Mit CP ganz einfach

Wer unter einem der zahlreichen Open-Source-Distributionen, die auf [Linux](https://www.ionos.at/digitalguide/server/knowhow/linux-das-steckt-hinter-den-open-source-betriebssystemen/ "Linux: Das steckt hinter den Open-Source-Betriebssystemen") basieren, mit der Kommandozeile arbeiten will, muss verschiedene [Linux-Befehle](https://www.ionos.at/digitalguide/server/konfiguration/linux-befehle-terminal-kommandos-im-ueberblick/ "Linux-Befehle | Terminal-Kommandos im Überblick") kennen. Diese ermöglichen es, durch Ordnerstrukturen zu navigieren, Daten zu bearbeiten oder – wie in diesem Fall – Dateien und Verzeichnisse zu kopieren. Mit dem CP-Befehl (kurz für „copy“) können Sie **Kopien** **von ausgewählten Dateien oder ganzen Ordnern** erstellen.

## Wofür braucht man unter Linux CP?

Das Kopieren von Dateien und Ordnern gehört zu den Grundlagen eines jeden Betriebssystems und wird von den meisten Nutzern täglich ausgeführt. Kopien werden eingesetzt, um sie mit anderen Personen zu teilen oder zur Sicherung zu verwahren. In der Regel ist dieses Werkzeug fester (und bereits installierter) Bestandteil jeder Linux-Installation – egal, welche Distribution man verwendet. CP gehört zu den **GNU Core Utilities** (kurz: „coreutils“). Dieses Paket mit den wichtigsten Werkzeugen steht zur freien Verwendung bereit.

## Syntax von Linux-CP

Die grundlegende Funktion von CP ist einfach: Eine oder mehrere Dateien an einem vom Nutzer festgelegten Ort kopieren. Dafür sind vor allem zwei Informationen wichtig: **Name des Objekts und das Ziel des Vorgangs**. Dementsprechend ist auch die Syntax von CP aufgebaut:

```none
cp [Original] [Ziel]
```

Dafür navigiert man **in das Verzeichnis der zu kopierenden Datei** und gibt dann im Befehl den Dateinamen und den Pfad an, unter dem die neue Datei gespeichert werden soll.

```none
cp text.txt /home/benutzer/zielordner/
```

In diesem Beispiel erstellen wir eine neue Datei im Zielordner, die den gleichen Namen wie die Ausgangsdatei hat. Wer **mehrere Dateien gleichzeitig kopieren** möchte, führt diese innerhalb der gleichen Befehlszeile hintereinander auf.

```none
cp text1.txt text2.txt text3.txt /home/benutzer/zielordner/
```

In den bisherigen Beispielen haben wir der Kopie immer den gleichen Namen wie der Ausgangsdatei gegeben. Sie können den **Dateinamen frei bestimmen**, indem Sie diesen mit in den Zielparameter eintragen:

```none
cp text.txt /home/benutzer/zielordner/text_kopie.txt
```

Lässt man den Pfad des Zielordners weg, wird die Kopie **mit neuem Dateinamen im gleichen Ordner** wie die Originaldatei erzeugt.

```none
cp text1.txt text2.txt
```

## Besondere Funktionen von CP

Der Linux-CP-Befehl kann noch weitere Aufgaben erledigen. Dafür verwendet man das Optionenfeld:

```none
cp [Option(en)] [Original(e)] [Ziel]
```

Folgende Parameter (flags) können Sie in das Feld eintragen, um so die Kopierarbeit umfangreicher oder einfacher zu gestalten.

<table>
  <tbody>
    <tr>
      <td><strong>Parameter</strong></td>
      <td><strong>Beschreibung</strong></td>
      <td><strong>Beispiel</strong></td>
    </tr>
    <tr>
      <td>-a</td>
      <td>Kopiert die Datei mit der gleichen Rechteeinstellung und den gleichen Metadaten wie beim Original.</td>
      <td>cp -a text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>--archive</td>
      <td>Kopiert die Datei mit der gleichen Rechteeinstellung und den gleichen Metadaten wie beim Original.</td>
      <td>cp --archive text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>-b</td>
      <td>Erzeugt eine Kopie im Zwischenspeicher, wenn Original und Ziel den gleichen Dateinamen, aber unterschiedlichen Inhalt haben.</td>
      <td>cp -b text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>--backup</td>
      <td>Erzeugt eine Kopie im Zwischenspeicher, wenn Original und Ziel den gleichen Dateinamen, aber unterschiedlichen Inhalt haben.</td>
      <td>cp --backup text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>--backup=numbered</td>
      <td>Erstellt eine neue nummerierte Datei, wenn Original und Ziel den gleichen Dateinamen, aber unterschiedlichen Inhalt haben.</td>
      <td>cp --backup==numbered text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>--backup=existing</td>
      <td>Erstellt eine neue nummerierte Datei, wenn Original und Ziel den gleichen Dateinamen, aber unterschiedlichen Inhalt haben – und es bereits nummerierte Backups gibt.</td>
      <td>cp --backup==existing text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>-d</td>
      <td>Kopiert symbolische Links.</td>
      <td>cp -d text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>-f</td>
      <td>Erzwingt das Überschreiben beim Kopieren.</td>
      <td>cp -f text.txt /home/benutzer/zielordner/text.txt</td>
    </tr>
    <tr>
      <td>--force</td>
      <td>Erzwingt das Überschreiben beim Kopieren.</td>
      <td>cp --force text.txt /home/benutzer/zielordner/text.txt</td>
    </tr>
    <tr>
      <td>-i</td>
      <td>Fragt vor dem Überschreiben von gleichnamigen Dateien um Erlaubnis.</td>
      <td>cp -i text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>--interactive</td>
      <td>Fragt vor dem Überschreiben von gleichnamigen Dateien um Erlaubnis.</td>
      <td>cp --interactive text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>-l</td>
      <td>Erstellt statt einer Kopie einen Hardlink.</td>
      <td>cp -l text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>--link</td>
      <td>Erstellt statt einer Kopie einen Hardlink.</td>
      <td>cp --link text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>-n</td>
      <td>Vorhandene Dateien werden niemals überschrieben.</td>
      <td>cp -n text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>--no-cobbler</td>
      <td>Vorhandene Dateien werden niemals überschrieben.</td>
      <td>cp –no-cobbler text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>-p</td>
      <td>Attribute der Originaldatei werden beim Kopieren vererbt.</td>
      <td>cp -p text.txt text1.txt</td>
    </tr>
    <tr>
      <td>--preserve</td>
      <td>Attribute der Originaldatei werden beim Kopieren vererbt.</td>
      <td>cp --preserve text.txt text1.txt</td>
    </tr>
    <tr>
      <td>--preserve=mode</td>
      <td>Der Modus der Originaldatei wird beim Kopieren vererbt.</td>
      <td>cp --preserve==mode text.txt text1.txt</td>
    </tr>
    <tr>
      <td>--preserve=ownership</td>
      <td>Die Besitzrechte der Originaldatei werden beim Kopieren vererbt.</td>
      <td>cp --preserve==ownership text.txt text1.txt</td>
    </tr>
    <tr>
      <td>--preserve=timestamp</td>
      <td>Der Zeitstempel der Originaldatei wird beim Kopieren vererbt.</td>
      <td>cp --preserve==timestamp text.txt text1.txt</td>
    </tr>
    <tr>
      <td>--preserve=links</td>
      <td>Verlinkungen der Originaldatei werden beim Kopieren vererbt.</td>
      <td>cp --preserve==links text.txt text1.txt</td>
    </tr>
    <tr>
      <td>--preserve=context</td>
      <td>Der Sicherheitskontext der Originaldatei wird beim Kopieren vererbt.</td>
      <td>cp --preserve==context text.txt text1.txt</td>
    </tr>
    <tr>
      <td>--preserve=xattr</td>
      <td>Erweiterte Attribute der Originaldatei werden beim Kopieren vererbt.</td>
      <td>cp --preserve==xattr text.txt text1.txt</td>
    </tr>
    <tr>
      <td>--preserve=alle</td>
      <td>Alle Attribute der Originaldatei werden beim Kopieren vererbt.</td>
      <td>cp --preserve==all text.txt text1.txt</td>
    </tr>
    <tr>
      <td>-P</td>
      <td>Symbolische Links werden als solche gespeichert.</td>
      <td>cp -P text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>--no-dereference</td>
      <td>Symbolische Links werden als solche gespeichert.</td>
      <td>cp --no-dereference text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>-r</td>
      <td>Verzeichnisse werden inklusive Unterverzeichnisse rekursiv kopiert.</td>
      <td>cp -r /home/benutzer/originalordner/ /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>-R</td>
      <td>Verzeichnisse werden inklusive Unterverzeichnisse rekursiv kopiert.</td>
      <td>cp -R /home/benutzer/originalordner/ /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>--recursive</td>
      <td>Verzeichnisse werden inklusive Unterverzeichnisse rekursiv kopiert.</td>
      <td>cp --recursive /home/benutzer/originalordner/ /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>-s</td>
      <td>Erstellt einen symbolischen Link auf die Originaldatei.</td>
      <td>cp -s text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>--symbolic-link</td>
      <td>Erstellt einen symbolischen Link auf die Originaldatei.</td>
      <td>cp --symbolic-link text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>-S</td>
      <td>Überschreibt beim Kopieren mit --backup ein Backup-Suffix.</td>
      <td>cp --backup=simple -S text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>--suffix=eigenes\_suffix</td>
      <td>Überschreibt beim Kopieren mit --backup ein Backup-Suffix mit einem eigenen Begriff.</td>
      <td>cp --backup=simple –suffix=eigenes\_suffix text.txt /home/benutzer/zielordner/</td>
    </tr>
    <tr>
      <td>-u</td>
      <td>Kopiert die Datei nur, wenn die Zieldatei älter als das Original ist.</td>
      <td>cp -u text.txt /home/benutzer/zielordner/text.txt</td>
    </tr>
    <tr>
      <td>--update</td>
      <td>Kopiert die Datei nur, wenn die Zieldatei älter als das Original ist.</td>
      <td>cp --update text.txt /home/benutzer/zielordner/text.txt</td>
    </tr>
    <tr>
      <td>-v</td>
      <td>Gibt nach dem Kopiervorgang eine Meldung aus.</td>
      <td>cp -v text.txt text1.txt</td>
    </tr>
    <tr>
      <td>--verbose</td>
      <td>Gibt nach dem Kopiervorgang eine Meldung aus.</td>
      <td>cp --verbose text.txt text1.txt</td>
    </tr>
  </tbody>
</table>

---

### Tipp

Viele Optionen können Sie auch miteinander kombinieren. Dafür schreiben Sie die Parameter mit einem Leerzeichen getrennt in den Anfangsbereich des Befehls.

---

## Beispiele für den Einsatz von CP

An der Vielzahl der Optionen für den Copy-Befehl kann man erkennen, dass sich CP unter Linux nicht nur für das einfache Kopieren von Dateien und Ordnern einsetzen lässt. Indem Sie die **verschiedenen Parameter miteinander kombinieren**, können Sie umfangreiche Aufgaben bewältigen. Die folgenden drei Beispiele folgen typischen Anwendungsszenarien im Alltag eines Linux-Users.

### Nummeriertes Backup

Gehen wir davon aus, dass Sie an einer Datei arbeiten und von dieser mehr oder weniger regelmäßig ein Backup erzeugen möchten. Damit Sie Änderungen auch nachvollziehen und unter Umständen zu einem älteren Stand zurückkehren können, werden einzelne Dateien angelegt. Dafür verwenden wir die erweiterte Backup-Option.

```none
cp -f -v --backup=numbered text.txt text.txt
```

Wir erstellen dieses Backup unter dem gleichen Dateinamen und auch im gleichen Ordner. Damit dies möglich ist, nutzen wir die **‚force‘-Option**. Da wir zusätzlich die ‚numbered‘-Option aktiviert haben, entstehen dennoch jeweils neue Dateien mit durchnummerierten Dateinamen. Dank ‚verbose‘ erhalten Sie nach jedem Kopiervorgang eine Benachrichtigung.

Das sieht in der Konsole dann so aus:

```none
~$ cp -v -f --backup=numbered text.txt text.txt
'text.txt' -> 'text.txt.~1~'
~$ cp -v -f --backup=numbered text.txt text.txt
'text.txt' -> 'text.txt.~2~'
~$ cp -v -f --backup=numbered text.txt text.txt
'text.txt' -> 'text.txt.~3~'
~$ ls
text.txt  text.txt.~1~  text.txt.~2~  text.txt.~3~
```

---

### Tipp

In Linux können Sie mit dem ls-Befehl eine Liste der im Ordner bestehenden Dateien und Unterordner anzeigen lassen.

---

### Mit Wildcards Dateien sortieren

Sie haben einen Ordner voll mit verschiedensten Dateien: Bilder, Dokumente und Anwendungen sind durcheinander abgelegt. Nehmen wir nun an, dass Sie alle Bilder in einen Ordner kopieren möchten. Statt nun alle Bilder einzeln in den Befehl einzutragen, arbeiten wir mit dem **Asterisk (\*)**, der als Wildcard dient. In unserem Beispiel ersetzen wir den kompletten Dateinamen durch ein Sternchen und geben nur die Dateiendungen an.

```none
cp *.jpg *.png /home/benutzer/Bilder
```

Durch diesen Befehl kopieren Sie alle Dateien mit den Endungen JPG und PNG in den Bilderordner. Alle anderen Dateiformate werden ignoriert. Die Originaldateien bleiben übrigens bestehen, da Sie mit CP Daten nur kopieren und nicht verschieben.

### Kopieren von Verzeichnissen

Das **rekursive Kopieren** umfasst einen Ordner mitsamt seinen Unterordnern. Die Verzeichnisstruktur wird also mitgenommen. Beim einfachen Kopieren mit CP funktioniert das nicht: Versucht man einen Ordner ohne entsprechende Option zu kopieren, erhält man nur eine Fehlermeldung. Stattdessen setzt man den Parameter ‚-r‘ bzw. ‚--recursive‘ oder ‚-R‘.

In unserem Beispiel wollen wir regelmäßig eine Sicherungskopie eines Ordners samt Inhalt und Unterordner anlegen. Damit nicht immer alles kopiert werden muss, setzen wir zusätzlich die **‚update‘-Funktion** ein.

```none
cp -r -u /home/benutzer/Original/ /home/benutzer/Backups/
```

Wenn Sie den Befehl zum ersten Mal ausführen, wird innerhalb des Backup-Ordners das Verzeichnis ‚Original‘ erstellt. Alle Dateien und Unterverzeichnisse werden dort hineinkopiert. Bei großen Datenmengen kann dies einige Zeit dauern. Durch die Option ‚-u‘ kopieren Sie anschließend immer nur geänderte Daten.

## Alternativen zu Linux-CP

Trotz der zahlreichen Optionen von CP ist der Befehl nur relativ eingeschränkt nutzbar. Möchte man beispielsweise eine Kopie erstellen und das Original anschließend löschen, muss man zu **MV** (move) greifen. Auch bei diesem Befehl geben Sie das Ausgangsobjekt und den Zielpfad ein.

Etwas ausgereifter als CP ist der **DD**-Befehl. Bei diesem haben Sie zusätzlich die Möglichkeit, während des Kopiervorgangs das Format der Daten zu ändern. Dafür geht der Prozess Bit für Bit vor. Das Kommando eignet sich beispielsweise, wenn man komplette Festplatten oder Partitionen kopieren möchte.

Ebenfalls interessant ist der Linux-Befehl **PYCP**. Bei diesem erhalten Sie eine grafische Fortschrittsanzeige während des Kopiervorgangs. Sie benötigen allerdings Python 3.5 (oder neuer) dafür. In neueren Ubuntu-Versionen ist die Programmiersprache standardmäßig vorinstalliert.

Auch der [Linux-SCP-Befehl](https://www.ionos.at/digitalguide/server/konfiguration/linux-scp-befehl/ "Linux-SCP-Befehl") kann hilfreich sein. Mit Secure Copy transferieren Sie Daten vom lokalen Computer auf einen anderen oder umgekehrt. Dies geschieht per [SSH](https://www.ionos.at/digitalguide/server/tools/secure-shell-ssh/ "Secure Shell (SSH)") und ist daher ein verschlüsselter Vorgang.

---

### Fazit

Mit Linux-CP können Sie schnell und relativ einfach Dateien und Ordner kopieren. Durch viele Optionen lassen sich auch komplexere Aufgaben erledigen. Um regelmäßige Arbeiten durchzuführen, können Sie den Befehl auch gut in [Shell-Skripten](https://www.ionos.at/digitalguide/server/knowhow/wie-man-ein-einfaches-shell-skript-schreibt/ "Wie man ein einfaches Shell-Skript schreibt") unterbringen. Auf diese Weise schreiben Sie sich beispielsweise ein Skript für ein wöchentliches Backup.

---

Für den täglichen Gebrauch des Linux-Terminals sollten Sie noch weitere Befehle kennen. Informieren Sie sich beispielweise über diese Kommandos, um den Workflow zu vereinfachen:

- [Linux-SED-Befehl](https://www.ionos.at/digitalguide/server/konfiguration/linux-sed-befehl/): Ein einfacher Texteditor.
- [Linux-Tail-Befehl](https://www.ionos.at/digitalguide/server/konfiguration/linux-tail-befehl/): Zeigt die letzten Zeilen einer Datei an.
- [Linux-Head-Befehl](https://www.ionos.at/digitalguide/server/konfiguration/linux-head-befehl/): Zeigt die ersten Zeilen einer Datei an.
- [Linux-CAT-Befehl](https://www.ionos.at/digitalguide/server/konfiguration/linux-cat-befehl/): Zeigt den Inhalt einer Datei an.


This is a markdown version of: [https://www.ionos.at/digitalguide/server/konfiguration/linux-cp-befehl/](https://www.ionos.at/digitalguide/server/konfiguration/linux-cp-befehl/) for AI/LLM consumption.