Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Nachdem wir im ersten Teil unserer LPIC-1-Serie die grundlegenden Konzepte der Linux-Kommandozeile kennengelernt haben, widmen wir uns nun einem Thema, das für jeden Linux-Administrator zur täglichen Routine gehört: der Navigation im Dateisystem und den grundlegenden Befehlen zur Dateiverwaltung.
Diese Fähigkeiten bilden das Rückgrat der Linux-Administration – wer das Dateisystem nicht effizient nutzen kann, wird selbst bei einfachen Aufgaben ins Stolpern geraten. Nicht ohne Grund nimmt dieses Thema einen bedeutenden Teil der LPIC-1-Prüfung 101 ein und gehört zu den am häufigsten abgefragten Prüfungsinhalten.
❗Wichtiger Hinweis: Wie bereits beim ersten Artikel unserer Serie möchten wir betonen, dass dieser Beitrag keinen offiziellen Prüfungsvorbereitungskurs für die LPIC-1-Zertifizierung ersetzt. Er dient als praxisorientierte, didaktisch aufbereitete Ergänzung für dein Selbststudium und soll dir helfen, die teils komplexen Inhalte besser zu verstehen und anzuwenden.
┌ In den kommenden Abschnitten werden wir folgende Themen behandeln:
├ Die standardisierte Struktur des Linux-Dateisystems verstehen
├ Effizientes Navigieren mit den wichtigsten Befehlen (pwd,ls
,cd
)
├ Der Unterschied zwischen absoluten und relativen Pfaden
├ Die Macht der Wildcards zur Arbeit mit mehreren Dateien gleichzeitig
├ Dateien und Verzeichnisse erstellen, kopieren, verschieben und löschen
└ Unterschiede zwischen symbolischen Links und Hard-Links
Besonders wertvoll für LPIC-1-Kandidaten: Wir werden typische Prüfungsfragen und Fallstricke behandeln, damit du optimal vorbereitet bist.
┌ Dieser Artikel richtet sich an:
├ Angehende Linux-Administratoren, die sich auf die LPIC-1-Prüfung vorbereiten
├ Linux-Einsteiger, die ihre Kommandozeilenfähigkeiten systematisch aufbauen möchten
├ IT-Profis aus anderen Bereichen, die ihre Linux-Kenntnisse auffrischen wollen
└ Alle, die Wert auf praxisnahe, klar erklärte Beispiele legen
Für optimales Lernen empfehle ich dir dringend, die Befehle parallel in einer Linux-Umgebung auszuprobieren. Erstelle testweise Dateien und Verzeichnisse, experimentiere mit den vorgestellten Befehlen und beobachte die Ergebnisse. Linux-Befehle lernt man am besten durch aktives Tun!
Im gesamten Artikel findest du wieder spezielle Markierungen:
Lass uns ohne weitere Umschweife ins Linux-Dateisystem eintauchen – ein System, das auf den ersten Blick komplex erscheinen mag, aber nach diesem Artikel für dich logisch und navigierbar sein wird.
Eine der ersten Herausforderungen für Linux-Einsteiger ist die Orientierung im Dateisystem. Anders als bei Windows gibt es keine Laufwerksbuchstaben wie C:
oder D:
– stattdessen verfügt Linux über eine einzige, zusammenhängende Verzeichnisstruktur, die nach bestimmten Standards organisiert ist.
Der Filesystem Hierarchy Standard (FHS) ist eine von der Linux Foundation gepflegte Richtlinie für die Verzeichnisstruktur in Unix-ähnlichen Betriebssystemen. Er wurde 1993 ins Leben gerufen und liegt aktuell in Version 3.0 (Stand: März 2015) vor.
Der FHS definiert, wo bestimmte Dateitypen und Programme im Dateisystem zu finden sein sollten:
/ (Wurzelverzeichnis)
├── bin/ (Essentielle Befehle)
├── boot/ (Bootloader-Dateien)
├── dev/ (Gerätedateien)
├── etc/ (Systemkonfiguration)
├── home/ (Benutzerverzeichnisse)
├── lib/ (Systembibliotheken)
├── media/ (Einhängepunkte für Wechseldatenträger)
└── ...
💡 Tipp: Der FHS sorgt dafür, dass Linux-Distributionen grundsätzlich ähnlich aufgebaut sind. Als Administrator kannst du dich daher leicht in verschiedenen Linux-Systemen zurechtfinden, da z.B. Konfigurationsdateien immer in/etc
und Benutzerverzeichnisse immer in/home
zu finden sind.
Hier ein Überblick über die wichtigsten Verzeichnisse und ihre Bedeutung:
/ (Wurzelverzeichnis)
Das oberste Verzeichnis im Linux-Dateisystem. Es wird durch einen einzelnen Schrägstrich dargestellt und ist der Ausgangspunkt für alle Pfade./bin (Binaries)
Enthält grundlegende Befehle wiels
,cp
,mv
undchmod
, die für alle Benutzer zugänglich sein müssen und für die Systemfunktionalität unerlässlich sind./boot
Enthält die zum Systemstart notwendigen Dateien wie Kernel-Images und Bootloader-Konfigurationen./dev (Devices)
Hier werden alle Geräte des Systems als Dateien dargestellt – von Festplatten bis zu USB-Sticks./etc (Configuration)
Das zentrale Verzeichnis für Systemkonfigurationsdateien. Hier finden sich Einstellungen für Netzwerk, Benutzerkonten, Dienste und mehr.
🔧 Praktisches Beispiel:
ls -l /etc/
total 1088
-rw-r--r-- 1 root root 3028 Jan 3 2024 adduser.conf
drwxr-xr-x 2 root root 4096 Mar 25 2024 apt
-rw-r--r-- 1 root root 2319 Apr 4 2023 bash.bashrc
...
/home
Hier befinden sich die persönlichen Verzeichnisse der regulären Benutzer. Jeder Benutzer hat ein eigenes Unterverzeichnis (z.B./home/username
)/lib, /lib64
Enthalten wichtige Systembibliotheken, die von/bin
und/sbin
benötigten Programmen verwendet werden/media, /mnt
Einhängepunkte für Wechseldatenträger (/media
) und temporär eingehängte Dateisysteme (/mnt
)/opt (Optional)
Hier werden üblicherweise zusätzliche Softwarepakete installiert, die nicht Teil der Standarddistribution sind./proc, /sys
Diese Verzeichnisse existieren nur im Arbeitsspeicher und bieten Informationen über laufende Prozesse und die Hardware. Sie sind keine echten Dateien auf der Festplatte, sondern virtuelle Dateisysteme./root
Das Home-Verzeichnis des Administrators (root-Benutzer). Aus Sicherheitsgründen nicht unter/home
./sbin (System Binaries)
Enthält wichtige Systemprogramme, die normalerweise nur vom Administrator verwendet werden./tmp (Temporary)
Speicherort für temporäre Dateien. Wird oft beim Systemstart geleert./usr (Unix System Resources)
Zweite Hierarchieebene mit Programmen, Bibliotheken und Dokumentation für alle Benutzer. Ursprünglich für Benutzerdateien gedacht, enthält heute hauptsächlich installierte Software./var (Variable)
Enthält veränderliche Daten wie Logs, Spool-Dateien, Mail-Queues und andere Dateien, deren Inhalt sich während des Systembetriebs ändert.
⚠️ Achtung: Besonders in den Verzeichnissen/
,/bin
,/sbin
,/lib
und/etc
solltest du als Anfänger nichts verändern, es sei denn, du weißt genau, was du tust. Hier können selbst kleine Fehler das System unbrauchbar machen!
Der FHS kategorisiert Dateien nach zwei Aspekten:
Diese Kategorisierung hilft bei Entscheidungen zur Sicherung und Netzwerkfreigabe von Verzeichnissen.
Obwohl sich die meisten Linux-Distributionen an den FHS halten, gibt es kleinere Unterschiede:
/bin
, /sbin
und /lib
symbolische Links zu entsprechenden Verzeichnissen unter /usr
werden1.💡Tipp für die Prüfung: In der LPIC-1-Prüfung wird erwartet, dass du die Standardverzeichnisse und ihre Hauptfunktionen kennst. Besonders wichtig sind/etc
(Konfiguration),/var
(variable Daten) und die Unterschiede zwischen/bin
,/sbin
,/usr/bin
und/usr/sbin
.
Ein wichtiges Konzept in Linux ist das „Mounten“ von Dateisystemen. Anders als bei Windows, wo jedes Laufwerk einen eigenen Buchstaben erhält, werden in Linux alle Laufwerke und Partitionen in die bestehende Verzeichnisstruktur „eingehängt“
┌ Wichtige Begriffe:
├ Mount Point: Ein Verzeichnis im Dateisystem, an dem ein anderes Dateisystem eingehängt wird.
├ Root-Partition: Die primäre Partition, die an/
eingehängt ist
└ Mounting: Der Prozess des Einhängens eines Dateisystems.
🔧 Praktisches Beispiel:
Wenn du einen USB-Stick einsteckst, wird dieser automatisch an einem Ort wie /media/username/USB-NAME
eingehängt. Alle Dateien auf dem USB-Stick sind dann unter diesem Pfad zugänglich.
mount | grep media
/dev/sdb1 on /media/username/USB-STICK type vfat (rw,nosuid,nodev,...)
⚠️ Wichtig: Ein Mount-Point kann ein beliebiges Verzeichnis sein – es muss nicht leer sein! Wenn du ein Dateisystem auf ein nicht leeres Verzeichnis mountest, werden die ursprünglichen Inhalte während des Mounts „versteckt“ und erst wieder sichtbar, wenn das eingehängte Dateisystem unmounted wird.
Zwei wichtige Dateien steuern das Mounten von Dateisystemen:
┌ Zwei wichtige Dateien steuern das Mounten von Dateisystemen:
├/etc/fstab
(Filesystem Table): Hat Informationen darüber, welche Dateisysteme beim Boot automatisch eingehängt werden
└/etc/mtab
(Mount Table): Eine dynamische Datei, die alle aktuell eingehängten Dateisysteme auflistet
❗ Typischer Fehler: Eine häufige Fehlerquelle ist das Unmounten von Dateisystemen, auf die noch zugegriffen wird. Dies führt zu der Fehlermeldung "device is busy". Lösung: Alle Prozesse beenden, die auf das Dateisystem zugreifen, oder den Parameter -f
(force) verwenden - aber nur mit Vorsicht!
Mit diesem Grundverständnis der Linux-Verzeichnisstruktur bist du nun bereit, tiefer in die Navigation und Dateisystemoperationen einzusteigen. Die standardisierte Struktur des FHS mag anfangs kompliziert erscheinen, aber sie bietet ein logisches und konsistentes System, das dir bei deiner täglichen Arbeit als Linux-Administrator helfen wird.
Nachdem wir nun die grundlegende Struktur des Linux-Dateisystems kennengelernt haben, ist es an der Zeit, die wichtigsten Befehle zu erkunden, mit denen du dich in diesem System bewegen kannst. Diese Befehle bilden das tägliche Handwerkszeug jedes Linux-Administrators und sind entsprechend häufig Gegenstand der LPIC-1-Prüfung.
Der Befehl pwd
(print working directory) zeigt dir das Verzeichnis an, in dem du dich gerade befindest:
pwd
/home/username/documents
┌ Auf den ersten Blick erscheint dieser Befehl sehr einfach, aber er ist aus mehreren Gründen wichtig:
├ Er gibt dir Orientierung, besonders nach mehreren Verzeichniswechseln
├ Er zeigt den vollständigen Pfad an, nicht nur den aktuellen Ordnernamen
└ Der angezeigte Pfad kann für Skripte oder andere Befehle kopiert werden
🔧 Praktisches Beispiel:
cd /var/log
pwd
/var/log
cd ../..
pwd
/
💡 Tipp: Wenn dein Prompt bereits den aktuellen Verzeichnispfad anzeigt, scheintpwd
überflüssig. Allerdings kann der Prompt gekürzt sein oder den relativen statt des absoluten Pfads anzeigen. Mitpwd
erhältst du immer den vollständigen, absoluten Pfad.
Der ls
-Befehl (list) ist einer der am häufigsten verwendeten Befehle und dient zum Anzeigen des Inhalts von Verzeichnissen. In seiner einfachsten Form zeigt er einfach die Dateien und Unterverzeichnisse im aktuellen Verzeichnis an:
ls
Documents Downloads Music Pictures Videos
Das wahre Potenzial von ls
entfaltet sich jedoch erst durch seine zahlreichen Optionen:
Wichtige ls-Optionen:
Option | Beschreibung | Beispiel |
---|---|---|
-l | Lange, detaillierte Listung | ls -l |
-a | Zeigt auch versteckte Dateien (beginnend mit .) | ls -a |
-h | „Human-readable“ Größenangaben (KB, MB) | ls -lh |
-t | Sortierung nach Änderungszeit | ls -lt |
-r | Umgekehrte Sortierung | ls -ltr |
-S | Sortierung nach Dateigröße | ls -lS |
-R | Rekursive Anzeige aller Unterverzeichnisse | ls -R |
🔧 Praktisches Beispiel:
ls -la
total 84
drwxr-xr-x 14 username group 4096 May 10 15:24 .
drwxr-xr-x 3 root root 4096 Mar 8 09:12 ..
-rw------- 1 username group 9807 May 10 14:30 .bash_history
-rw-r--r-- 1 username group 220 Mar 8 09:12 .bash_logout
drwxr-xr-x 3 username group 4096 Apr 25 19:42 Documents
-rw-r--r-- 1 username group 8980 May 9 11:02 report.pdf
┌ Die lange Listung (ls -l
) zeigt für jede Datei folgende Informationen (von links nach rechts):
├ Dateityp und Berechtigungen (drwxr-xr-x
)
├ Anzahl der Links zur Datei (14
)
├ Eigentümer (username
)
├ Gruppe (group
)
├ Dateigröße in Bytes (4096
)
├ Letztes Änderungsdatum und -zeit (May 10 15:24
)
└ Name der Datei oder des Verzeichnisses (.
)
┌ ⚠️ Achtung: Bei der Interpretation der Ausgabe vonls -l
ist der erste Buchstabe besonders wichtig:
├-
steht für eine reguläre Datei
├d
zeigt ein Verzeichnis an
├l
kennzeichnet einen symbolischen Link
├b
undc
stehen für Blockgeräte bzw. Zeichengeräte
├s
für Socket-Dateien
└p
für FIFO/Pipes
💡 Tipp: Nicht alle diese Dateitypen werden in der LPIC-1-Prüfung behandelt, aber die ersten drei solltest du auf jeden Fall kennen!
Viele Linux-Distributionen haben ls
so konfiguriert, dass verschiedene Dateitypen in unterschiedlichen Farben angezeigt werden:
┌Blau
: Verzeichnisse
├Grün
: Ausführbare Dateien
├Rot
: Komprimierte Archive
└Cyan
: Symbolische Links
💡 Tipp: Die Farbkodierung ist praktisch zur schnellen Orientierung, funktioniert aber nicht in allen Umgebungen. Verlasse dich zur sicheren Identifizierung von Dateitypen besser auf die detaillierte Ausgabe mit ls -l
.
Mit dem Befehl cd
(change directory) wechselst du in ein anderes Verzeichnis. Dieser Befehl ist grundlegend für die Navigation im Dateisystem:
cd /etc
Der cd
-Befehl bietet verschiedene praktische Verwendungsmöglichkeiten:
Wichtige cd-Varianten:
Befehl | Aktion |
---|---|
cd /pfad/zum/verzeichnis | Wechselt zu einem absoluten Pfad |
cd verzeichnis | Wechselt zu einem Unterverzeichnis im aktuellen Verzeichnis |
cd .. | Wechselt zum übergeordneten Verzeichnis |
cd ../.. | Geht zwei Ebenen nach oben |
cd ~ oder einfach cd | Wechselt zum Home-Verzeichnis des aktuellen Benutzers |
cd - | Wechselt zum vorherigen Arbeitsverzeichnis (sehr praktisch!) |
cd ~benutzer | Wechselt zum Home-Verzeichnis des angegebenen Benutzers |
🔧 Praktisches Beispiel:
pwd
/home/username
cd /var/log
pwd
/var/log
cd -
/home/username
cd -
/var/log
❗ Typischer Fehler: Ein häufiger Fehler ist der Versuch, in eine Datei zu wechseln statt in ein Verzeichnis, was zu einer Fehlermeldung führt.
cd /etc/hosts
bash: cd: /etc/hosts: Not a directory
In Linux beginnen versteckte Dateien und Verzeichnisse mit einem Punkt (.
). Diese Dateien werden standardmäßig von ls
nicht angezeigt, es sei denn, du verwendest die Option -a
:
ls -a
. .config Downloads Pictures
.. .dbus .gnupg .profile
.bash_history Desktop .local Videos
.bash_logout Documents Music .Xauthority
.bashrc .mozilla .ssh
┌ Die zwei speziellen Einträge.
und..
haben besondere Bedeutung:
├.
(einzelner Punkt): Bezieht sich auf das aktuelle Verzeichnis
└..
(doppelter Punkt): Bezieht sich auf das übergeordnete Verzeichnis
Diese versteckten Einträge sind in jedem Verzeichnis vorhanden und spielen eine wichtige Rolle bei der Navigation mit relativen Pfaden.
┌ Typische versteckte Dateien und Verzeichnisse im Home-Verzeichnis eines Benutzers:
├.bashrc
,.bash_profile
: Konfigurationsdateien für die Bash-Shell
├.config/
: Verzeichnis für Programmkonfigurationen
├.local/
: Lokale Anwendungsdaten
├.ssh/
: SSH-Schlüssel und Konfiguration
└.cache/
: Zwischengespeicherte Daten von Anwendungen
💡 Tipp für die Praxis: Um nur versteckte Dateien anzuzeigen, kannst du ein Muster verwenden:
ls -d .*
⚠️ Achtung: Das Löschen versteckter Dateien kann unerwartete Folgen haben, da sie oft wichtige Konfigurationen enthalten. Informiere dich vorher über deren Bedeutung!
In der Praxis werden diese Befehle oft in Kombination verwendet, um schnell durch das Dateisystem zu navigieren und einen Überblick zu bekommen:
cd /etc && ls -l | grep network
drwxr-xr-x 6 root root 4096 Apr 12 10:34 network
-rw-r--r-- 1 root root 650 Nov 8 2023 networks
Der obige Befehl wechselt ins /etc
-Verzeichnis und sucht dann nach allen Einträgen, die „network
“ im Namen haben.
💡 Tipp für die Prüfungsvorbereitung: Für die LPIC-1-Prüfung solltest du diese grundlegenden Navigationsbefehle nicht nur kennen, sondern auch in- und auswendig beherrschen. Sie werden in vielen praktischen Aufgaben benötigt und bilden die Grundlage für alle weiteren Operationen im Dateisystem.
Die Meisterung dieser Grundbefehle mag einfach erscheinen, ist aber ein wichtiger Schritt auf deinem Weg zum Linux-Administrator. In realen Umgebungen mit komplexen Dateisystemstrukturen und zahlreichen Dateien ist die effiziente Navigation ein wesentlicher Bestandteil der täglichen Arbeit.
Pfade sind die „Adressen“ im Linux-Dateisystem und zeigen den Weg zu einer bestimmten Datei oder einem Verzeichnis. Ein gutes Verständnis von Pfaden ist unerlässlich, um effizient mit der Kommandozeile zu arbeiten und Befehle korrekt auszuführen.
Im Linux-Dateisystem gibt es zwei grundlegende Arten von Pfaden: absolute und relative Pfade
┌ Absolute Pfade:
├ Beginnen immer mit einem Schrägstrich (/
), der das Wurzelverzeichnis darstellt
├ Geben den vollständigen Weg vom Wurzelverzeichnis bis zur gewünschten Datei an
├ Funktionieren unabhängig vom aktuellen Arbeitsverzeichnis
└ Sind eindeutig und unveränderlich
/home/username/Documents/report.pdf
/etc/ssh/sshd_config
/var/log/syslog
┌ Relative Pfade:
├ Beginnen nicht mit einem Schrägstrich
├ Beziehen sich auf das aktuelle Arbeitsverzeichnis
└ Sind abhängig vom aktuellen Verzeichnis
Documents/report.pdf # relativ zum aktuellen Verzeichnis
../Downloads/file.zip # ein Verzeichnis nach oben, dann in Downloads
🔧 Praktisches Beispiel:
Angenommen, du befindest dich in /home/username
:
pwd
/home/username
cat Documents/report.txt # relativer Pfad
cat /home/username/Documents/report.txt # absoluter Pfad (identisches Ergebnis)
Beide Befehle führen zur selben Datei, aber der erste verwendet einen relativen Pfad von deinem aktuellen Verzeichnis aus, während der zweite den vollständigen, absoluten Pfad angibt.
💡 Tipp: Verwende absolute Pfade in Skripten, die unabhängig vom Ausführungsort funktionieren sollen. Verwende relative Pfade für die tägliche Arbeit, um Zeit zu sparen und die Eingabe zu vereinfachen.
In jedem Verzeichnis gibt es zwei spezielle Einträge:
┌ (einzelner Punkt):
├ Repräsentiert das aktuelle Verzeichnis
├ Nützlich, um explizit auf das aktuelle Verzeichnis zu verweisen
└ Hilfreich bei der Ausführung von Skripten oder Programmen im aktuellen Verzeichnis
./script.sh # Führt script.sh aus dem aktuellen Verzeichnis aus
cp /etc/hosts ./ # Kopiert hosts in das aktuelle Verzeichnis
┌ (doppelter Punkt):
├ Repräsentiert das übergeordnete Verzeichnis
├ Ermöglicht Navigation "nach oben" in der Verzeichnisstruktur
└ Kann mehrfach kombiniert werden, um mehrere Ebenen aufzusteigen.
$ cd .. # Ein Verzeichnis nach oben
$ cd ../.. # Zwei Verzeichnisse nach oben
$ cp ../file.txt . # Kopiert file.txt aus dem übergeordneten Verzeichnis ins aktuelle
⚠️ Achtung: Wenn du im Wurzelverzeichnis (/
) bist, führt..
ebenfalls zum Wurzelverzeichnis, da es keine höhere Ebene gibt.
cd /
pwd
/
cd ..
pwd
/
Die Tilde (~
) ist eine praktische Abkürzung für das Home-Verzeichnis des aktuellen Benutzers:
cd ~ # Wechselt zum Home-Verzeichnis (identisch mit cd ohne Argumente)
ls ~/Documents # Listet den Inhalt des Documents-Verzeichnisses im Home-Verzeichnis
Du kannst die Tilde auch mit einem Benutzernamen kombinieren, um direkt auf das Home-Verzeichnis eines bestimmten Benutzers zuzugreifen:
ls ~john/Documents # Listet Johns Documents-Verzeichnis auf
cd ~root # Wechselt zum Home-Verzeichnis des root-Benutzers
❗ Typischer Fehler: Die Tilde wird von der Shell interpretiert, nicht vom Betriebssystem direkt. In manchen Kontexten (z.B. in bestimmten Konfigurationsdateien oder Skripten) kann sie möglicherweise nicht erkannt werden, was zu Pfadproblemen führt.
Pfade in Linux können Leerzeichen und Sonderzeichen enthalten, aber diese erfordern besondere Behandlung, da sie sonst von der Shell falsch interpretiert werden können.
Methoden zum Umgang mit Leerzeichen:
cd "Meine Dokumente"
cp "/home/username/Urlaub 2023/Fotos" .
cd Meine\ Dokumente
ls Urlaub\ 2023/Fotos
$
oder ~
):cd 'Meine Dokumente'
⚠️ Wichtig: Viele Linux-Administratoren vermeiden Leerzeichen in Datei- und Verzeichnisnamen komplett, indem sie stattdessen Unterstriche(_)
oder Bindestriche(-)
verwenden. Das vereinfacht die Arbeit auf der Kommandozeile erheblich.
Weitere problematische Sonderzeichen:
Bestimmte Sonderzeichen haben in der Shell besondere Bedeutung und müssen entsprechend behandelt werden:
┌?
,*
,[, ]
(Wildcards)
├$
(Variablensubstitution)
├&
,;
,|
,<
,>
(Befehlssteuerung)
└`
🔧 Praktisches Beispiel:
# Wenn eine Datei mit dem Namen "file?.txt" existiert (wörtlich mit Fragezeichen)
ls file\?.txt # Escapen des Fragezeichens
# Wenn ein Verzeichnis mit einem $-Zeichen im Namen existiert
cd 'verzeichnis$name'
💡 Tipp für die Prüfung: In der LPIC-1 können durchaus Aufgaben vorkommen, bei denen du mit speziellen Zeichen in Dateinamen umgehen musst. Verstehe die verschiedenen Escape-Methoden und wann welche anzuwenden ist.
Die Tab-Vervollständigung ist eines der mächtigsten Werkzeuge zur Effizienzsteigerung bei der Arbeit mit der Linux-Kommandozeile. Sie spart nicht nur Zeit, sondern reduziert auch Tippfehler erheblich.
┌ Grundlegende Tab-Vervollständigung:
├ Beginne die Eingabe eines Befehls oder Pfades
├ Drücke die Tab-Taste
├ Wenn es genau eine Möglichkeit zur Vervollständigung gibt, wird diese automatisch eingefügt
└ Bei mehreren Möglichkeiten zeigt ein zweites Tab-Drücken die verfügbaren Optionen
cd /ho[TAB] # Vervollständigt zu "/home/"
cd /home/us[TAB] # Vervollständigt zu "/home/username/" wenn eindeutig
Erweiterte Funktionen der Tab-Vervollständigung:
Befehlsvervollständigung: Funktioniert auch für Befehle
sys[TAB][TAB]
systemctl systemd-analyze systemd-run
Optionsvervollständigung: Bei vielen Befehlen werden auch Optionen vervollständigt
ls --[TAB][TAB]
--all --directory --human-readable
--almost-all --dereference --inode
Variable Vervollständigung: Funktioniert bei Umgebungsvariablen
echo $HO[TAB] # Vervollständigt zu $HOME
Hostnamen-Vervollständigung: Bei netzwerkbezogenen Befehlen
ssh server[TAB] # Vervollständigt Hostnamen aus bekannten Hosts
💡 Tipp: Die Tab-Vervollständigung funktioniert auch bei Pfaden mit Leerzeichen und Sonderzeichen. Sie fügt automatisch die nötigen Escape-Zeichen oder Anführungszeichen hinzu. Dies ist einer der besten Wege, um mit komplexen Dateinamen umzugehen.
🔧 Beispiel für effizientes Arbeiten:
# Ohne Tab-Vervollständigung:
cp /var/log/apache2/error.log /home/username/backups/apache_error_20230514.log
# Mit Tab-Vervollständigung (viel weniger Tipparbeit):
cp /v[TAB]lo[TAB]ap[TAB]er[TAB] ~/ba[TAB]apache_error_20230514.log
⚠️ Beachte: Bei vielen möglichen Vervollständigungen kann die Ausgabe den Bildschirm füllen. Mit der Eingabe weiterer Zeichen kannst du die Auswahl eingrenzen, bevor du erneut Tab drückst.
Mit dem Verständnis von absoluten und relativen Pfaden sowie den verschiedenen Abkürzungen kannst du nun effizienter im Dateisystem navigieren:
# Kombinierte Verwendung von Pfadabkürzungen
cp ~/Documents/report.txt ../shared/
mv ./temp/* ~/archive/
find . -name "*.log" -exec cp {} ~/logs/ \;
❗ Typischer Anfängerfehler: Viele Linux-Einsteiger verwechseln absolute und relative Pfade. Wenn ein Befehl einen Fehler wie "No such file or directory" zurückgibt, obwohl du sicher bist, dass die Datei existiert, überprüfe, ob du den richtigen Pfadtyp verwendet hast.
Die effiziente Verwendung von Pfaden ist ein Schlüsselelement für produktives Arbeiten auf der Kommandozeile. Mit etwas Übung wird die Navigation im Linux-Dateisystem und der Umgang mit verschiedenen Pfadtypen zur zweiten Natur – eine Fähigkeit, die in der LPIC-1-Prüfung und vor allem in deiner täglichen Arbeit als Linux-Administrator unverzichtbar ist.
Wenn du in Linux mit Dateien arbeitest, möchtest du oft mehrere Dateien mit ähnlichen Namen gleichzeitig bearbeiten. Anstatt jeden Dateinamen einzeln einzugeben, erlauben Wildcards (auch als „Globbing-Muster“ bekannt) dir, mit einfachen Mustern ganze Gruppen von Dateien anzusprechen. Diese Fähigkeit gehört zu den leistungsstärksten Werkzeugen in deinem Linux-Arsenal.
Linux unterstützt zwei primäre Wildcards, die in fast allen Kommandozeilen-Situationen funktionieren:
┌ Der Stern (*)
├ Steht für beliebig viele Zeichen (auch null Zeichen)
├ Ist die am häufigsten verwendete Wildcard
└ Kann an jeder Stelle im Dateinamen stehen
ls *.txt # Alle Dateien mit der Endung .txt
ls report* # Alle Dateien, die mit "report" beginnen
ls *2023* # Alle Dateien, die "2023" irgendwo im Namen enthalten
ls /var/log/*.log # Alle Log-Dateien im Verzeichnis /var/log
┌ Das Fragezeichen (?)
├ Steht für genau ein beliebiges Zeichen
└ Nützlich, wenn du die Länge des Namens kennst oder eingrenzen möchtest
ls report?.txt # Trifft z.B. "report1.txt", "reportA.txt", aber nicht "report10.txt"
ls file??.txt # Trifft auf alle Dateinamen mit "file" und genau zwei weiteren Zeichen
ls /etc/rc?.d/ # Entspricht rc0.d, rc1.d, rc2.d usw.
🔧 Praktisches Beispiel:
Stell dir vor, du hast folgende Dateien in einem Verzeichnis:
┌ report.txt
├ report1.txt
├ report2.txt
├ report_final.txt
├ presentation.ppt
└ notes.txt
rm *.txt # Löscht alle Dateien mit der Endung .txt
cp report?.txt backup/ # Kopiert report1.txt und report2.txt, aber nicht report.txt oder report_final.txt
[ ]
┌ Mit eckigen Klammern kannst du bestimmte Zeichen oder Zeichenbereiche angeben:
├[abc]
entspricht einem einzelnen Zeichen, das entweder a, b oder c ist
├[a-z]
entspricht einem einzelnen Kleinbuchstaben
├[0-9]
entspricht einer einzelnen Ziffer
└[a-zA-Z]
entspricht einem beliebigen Buchstaben (Groß- oder Kleinschreibung)
ls file[123].txt # Entspricht file1.txt, file2.txt, file3.txt
ls [a-c]*.txt # Alle .txt-Dateien, die mit a, b oder c beginnen
ls Report[A-Z]*.pdf # Alle PDF-Dateien, die mit "Report" und einem Großbuchstaben beginnen
Zeichenklassen können auch kombiniert werden:
ls [a-zA-Z0-9]*.conf # Alle .conf-Dateien, die mit einem alphanumerischen Zeichen beginnen
💡Tipp: Zeichenklassen sind besonders nützlich, wenn du Dateien nach bestimmten Nummern oder alphanumerischen Mustern filtern möchtest, wie z.B. Logdateien mit Datumsangaben.
[! ]
Mit einem Ausrufezeichen als erstes Zeichen innerhalb einer Zeichenklasse kannst du alle Zeichen AUSSER den angegebenen auswählen:
ls [!a]*.txt # Alle .txt-Dateien, die NICHT mit 'a' beginnen
ls report[!0-9]*.pdf # Alle PDF-Dateien, die mit "report" beginnen, gefolgt von einem Nicht-Ziffern-Zeichen
rm *[!.txt] # VORSICHT! Löscht alle Dateien, die NICHT mit ".txt" enden!
⚠️ Achtung: Der letzte Beispielbefehl ist gefährlich und funktioniert nicht wie erwartet! Er würde tatsächlich Dateien wie "file.txta" löschen, aber "file.txt" intakt lassen. Um alle Dateien außer .txt-Dateien zu löschen, verwende stattdessen erweitertes Globbing oder find mit dem -not-Operator.
Die Bash-Shell bietet erweiterte Globbing-Funktionen, die über die Standardwildcards hinausgehen. Um sie zu aktivieren, verwende:
shopt -s extglob
┌ Mit aktiviertem erweiterten Globbing stehen dir diese zusätzlichen Muster zur Verfügung:
├?(muster)
: Null oder ein Vorkommen des Musters
├*(muster)
: Null oder mehr Vorkommen des Musters
├+(muster)
: Ein oder mehr Vorkommen des Musters
├@(muster1|muster2|...)
: Genau eines der angegebenen Muster
└!(muster1|muster2|...)
: Alles außer den angegebenen Mustern
ls +(file|log)*.txt # Alle .txt-Dateien, die mit "file" oder "log" beginnen
rm !(*.txt|*.pdf) # Löscht alle Dateien AUSSER .txt und .pdf-Dateien
cp @(jan|feb|mar)_*.doc reports/ # Kopiert nur Dokumente, die mit jan_, feb_ oder mar_ beginnen
⚠️ Prüfungstipp: In der LPIC-1-Prüfung werden vorwiegend die Standard-Wildcards (*
und?
) sowie Zeichenklassen ([]
) abgefragt. Die erweiterten Glob-Muster sind gut zu wissen, werden aber seltener in Prüfungsaufgaben verwendet.
Brace Expansion ist keine Wildcard im eigentlichen Sinne, sondern generiert Textmuster. Sie ist sehr nützlich für Operationen mit mehreren ähnlichen Dateinamen:
mkdir {2022,2023}-backup # Erstellt drei Verzeichnisse: 2022-backup und 2023-backup
touch file{1..5}.tx # Erstellt file1.txt bis file5.txt
cp report.{txt,pdf,docx} archive # Kopiert report.txt, report.pdf und report.docx nach archive/
mkdir -p backup/{jan,feb,mar}/{data,logs} # Erstellt eine verschachtelte Verzeichnisstruktur
Im Gegensatz zu Wildcards wird Brace Expansion vor der Dateinamensexpansion durchgeführt und funktioniert auch für nicht existierende Dateien.
Hier sind einige typische Anwendungsfälle, die zeigen, wie Wildcards deine Arbeit effizienter gestalten können:
Logdateien von bestimmten Tagen finden:
grep "Error" /var/log/syslog.2023-05-*
Bestimmte Dateitypen in einem Verzeichnisbaum suchen:
find . -name "*.conf" -type f
Nur Skripte mit bestimmten Rechten auflisten:
ls -l [a-z]*.sh
Alle Backup-Dateien löschen:
rm *~
rm *.bak
Beim Arbeiten mit Wildcards gibt es einige häufige Fehlerquellen, auf die du achten solltest:
❗Leeres Muster: Wenn ein Muster zu keiner Datei passt, wird es bei den meisten Befehlen unverändert übernommen:
ls *.xyz # Wenn keine .xyz-Dateien existieren, wird "*.xyz" als Literal ausgegeben
rm *.xyz # Fehlermeldung, wenn keine .xyz-Dateien existieren
❗Zu breites Muster: Besondere Vorsicht bei Löschbefehlen:
rm * # Löscht ALLE Dateien im aktuellen Verzeichnis!
rm ./* # Das gleiche wie oben
rm /* -rf # NIEMALS AUSFÜHREN! Würde das ganze System zerstören
⚠️ Achtung: Bei kritischen Operationen wierm
ist es ratsam, zuerst mitls
zu testen, welche Dateien vom Wildcard-Muster erfasst werden.
❗ Versteckte Dateien werden nicht erfasst: Der Stern (*) erfasst standardmäßig keine Dateien, die mit einem Punkt beginnen:
ls * # Zeigt alle nicht-versteckten Dateien
ls .* # Zeigt versteckte Dateien, aber auch . und ..
ls [.]* oder # Zeigt alle versteckten Dateien
ls -a # Zeigt alle Dateien einschließlich versteckter Dateien
❗ Wildcards vs. Anführungszeichen: Wildcards werden von der Shell interpretiert, bevor der Befehl ausgeführt wird. Wenn du eine Wildcard wörtlich verwenden möchtest, musst du sie escapen oder in Anführungszeichen setzen:
grep "report*" file.txt # Sucht nach dem wörtlichen Text "report*" in file.txt
grep report\* file.txt # Gleiche Funktion wie oben
⚠️ Prüfungstipp: In der LPIC-1 kommen häufig Aufgaben vor, bei denen du Dateien basierend auf bestimmten Namenskriterien finden oder manipulieren sollst. Verstehe die Unterschiede zwischen*
,?
,[...]
und[!...]
gut, da diese grundlegend für viele praktische Szenarien sind.
Die Beherrschung von Wildcards ist ein Zeichen für einen erfahrenen Linux-Benutzer. Sie ermöglichen es dir, mit wenigen Tastenanschlägen komplexe Dateioperationen durchzuführen – eine Fähigkeit, die sowohl in der LPIC-1-Prüfung als auch in der täglichen Systemadministration von unschätzbarem Wert ist.
Nachdem wir nun wissen, wie wir uns im Linux-Dateisystem bewegen und Dateien finden können, ist es an der Zeit, zu lernen, wie wir Dateien und Verzeichnisse erstellen und bei Bedarf wieder löschen. Diese grundlegenden Operationen gehören zum täglichen Handwerkszeug eines Linux-Administrators und sind entsprechend wichtig für die LPIC-1-Prüfung.
Der touch
-Befehl ist die einfachste Methode, um leere Dateien zu erstellen:
touch datei.txt
touch protokoll.log bericht.pdf notizen.md
Mit einem einzigen Befehl kannst du mehrere Dateien gleichzeitig erstellen, indem du ihre Namen durch Leerzeichen trennst.
💡Was viele nicht wissen: Der eigentliche Zweck von touch
ist nicht das Erstellen von Dateien, sondern das Aktualisieren der Zugriffs- und Änderungszeiten einer Datei. Wenn die angegebene Datei nicht existiert, wird sie als Nebeneffekt erstellt.
ls -l datei.txt
-rw-r--r-- 1 username group 0 Mai 14 10:23 datei.txt
touch datei.txt
ls -l datei.txt
-rw-r--r-- 1 username group 0 Mai 14 10:24 datei.txt # Beachte die aktualisierte Zeit
Nützliche touch-Optionen:
Option | Beschreibung | Beispiel |
---|---|---|
-a | Aktualisiert nur die Zugriffszeit | touch -a datei.txt |
-m | Aktualisiert nur die Änderungszeit | touch -m datei.txt |
-t | Setzt eine bestimmte Zeit | touch -t 202305141030 datei.txt |
-r | Verwendet die Zeit einer Referenzdatei | touch -r ref.txt datei.txt |
🔧 Praktisches Beispiel:
# Datei mit einem bestimmten Zeitstempel erstellen (14. Mai 2023, 10:30 Uhr)
touch -t 202305141030.00 bericht.txt
# Mehrere Dateien mit dem gleichen Zeitstempel wie eine Referenzdatei versehen
touch -r bericht.txt dokument1.pdf dokument2.docx
💡 Tipp: Wenn du eine Datei erstellen möchtest, aber nicht die Zeit einer bestehenden Datei ändern willst, verwende die Option -c
:
touch -c existierende_datei.txt # Ändert die Zeit nur, wenn die Datei existiert
Neben touch
gibt es weitere Möglichkeiten, Dateien zu erstellen:
Mit Umleitungen:
echo "Hallo Welt" > datei.txt # Erstellt oder überschreibt die Datei
echo "Neue Zeile" >> datei.txt # Fügt Text an das Ende der Datei an
> leere_datei.txt # Erstellt eine leere Datei oder leert eine bestehende
Mit Editoren:
nano neue_datei.txt # Öffnet den Nano-Editor mit einer neuen Datei
vim dokument.txt # Öffnet Vim mit einer neuen Datei
⚠️ Achtung: Bei der Verwendung von >
wird eine bestehende Datei ohne Warnung überschrieben! Sei vorsichtig mit dieser Methode, besonders in Verzeichnissen mit wichtigen Dateien.
Mit dem Befehl mkdir
(make directory) erstellst du neue Verzeichnisse:
mkdir projekte
mkdir dokumente bilder videos # Erstellt mehrere Verzeichnisse gleichzeitig
Standardmäßig kann mkdir
nur ein Verzeichnis erstellen, wenn das übergeordnete Verzeichnis bereits existiert. Mit der Option -p
(parents) kannst du jedoch ganze Verzeichnispfade auf einmal erstellen:
mkdir -p projekte/2023/quartal1/berichte
Dieser Befehl erstellt die gesamte Verzeichnisstruktur, auch wenn keines der Zwischenverzeichnisse existiert.
🔧 Praktisches Beispiel für komplexe Verzeichnisstrukturen:
# Erstellt eine Projektstruktur mit mehreren Unterverzeichnissen
mkdir -p projekt/{src,docs,tests}/{main,backup}
# Dies erzeugt:
# projekt/
# ├── src/
# │ ├── main/
# │ └── backup/
# ├── docs/
# │ ├── main/
# │ └── backup/
# └── tests/
# ├── main/
# └── backup/
Weitere nützliche mkdir-Optionen:
Option | Beschreibung | Beispiel |
---|---|---|
-m | Setzt Zugriffsrechte für neue Verzeichnisse | mkdir -m 755 secure_dir |
-v | Ausführliche Ausgabe (zeigt erstellte Verzeichnisse) | mkdir -v backup |
💡 Tipp: Die Kombination von -p
und -v
ist besonders nützlich, um zu sehen, welche Verzeichnisse tatsächlich erstellt wurden:
mkdir -pv archiv/2023/{jan,feb,mar}
# Ausgabe:
mkdir: created directory 'archiv'
mkdir: created directory 'archiv/2023'
mkdir: created directory 'archiv/2023/jan'
mkdir: created directory 'archiv/2023/feb'
mkdir: created directory 'archiv/2023/mar'
Der Befehl rm
(remove) wird zum Löschen von Dateien verwendet:
rm datei.txt
rm bericht1.pdf bericht2.pdf # Löscht mehrere Dateien
rm *.tmp # Löscht alle Dateien mit der Endung .tmp
Wichtige rm-Optionen:
Option | Beschreibung | Beispiel |
---|---|---|
-i | Interaktiver Modus (fragt vor dem Löschen) | rm -i wichtig.txt |
-f | Erzwingen (keine Nachfragen, ignoriert nicht existierende Dateien) | rm -f *.bak |
-r oder -R | Rekursiv (für Verzeichnisse und deren Inhalt) | rm -r altes_projekt |
-v | Ausführliche Ausgabe (zeigt gelöschte Dateien) | rm -v temp.txt |
⚠️ WICHTIGE WARNUNG: In Linux gibt es keinen Papierkorb für die Kommandozeile! Mitrm
gelöschte Dateien sind sofort und unwiderruflich weg. Besondere Vorsicht bei der Verwendung von Wildcards und der Option-f
.
🔧 Sicherere Arbeitsweise:
# Interaktives Löschen (fragt bei jeder Datei nach)
$ rm -i *.log
# Ausführliche Ausgabe zeigt, was gelöscht wird
$ rm -v projekt/*.bak
❗ Typischer Anfängerfehler: Die Kombination vonrm -rf
mit Wildcards oder unvollständigen Pfaden kann katastrophale Folgen haben. Der berüchtigte Befehlrm -rf /
würde versuchen, das gesamte Dateisystem zu löschen (moderne Distributionen haben Sicherheitsvorkehrungen dagegen).
💡 Tipp für mehr Sicherheit: Viele erfahrene Linux-Administratoren definieren einen Alias für rm
, der standardmäßig interaktiv oder mit Bestätigung arbeitet:
alias rm='rm -i' # Füge diese Zeile zu deiner .bashrc hinzu
Zum Löschen von Verzeichnissen gibt es zwei Hauptmethoden:
rmdir – nur für leere Verzeichnisse:
rmdir leeres_verzeichnis
rmdir ordner1 ordner2 # Löscht mehrere leere Verzeichnisse
Der Befehl rmdir
löscht nur leere Verzeichnisse. Wenn das Verzeichnis Dateien oder Unterverzeichnisse enthält, wird eine Fehlermeldung ausgegeben:
rmdir nicht_leeres_verzeichnis
# Ausgabe:
rmdir: failed to remove 'nicht_leeres_verzeichnis': Directory not empty
rm -r – für Verzeichnisse mit Inhalt:
rm -r projekt
Mit der Option -r
(rekursiv) löscht rm
ein Verzeichnis und seinen gesamten Inhalt, einschließlich aller Unterverzeichnisse und Dateien.
🔧 Praktisches Beispiel für sichere Verzeichnislöschung:
# Interaktives Löschen eines Verzeichnisses (fragt bei jeder Datei)
rm -ri altes_projekt/
# Löschen mit Bestätigung nur für schreibgeschützte Dateien
rm -r altes_projekt/
⚠️ WICHTIGE WARNUNG: Die Kombination rm -rf
ist besonders gefährlich, da sie rekursiv und ohne Nachfrage löscht. Verwende sie nur, wenn du absolut sicher bist, was du tust!
Das endgültige Löschen von Dateien in Linux birgt Risiken. Hier sind einige Sicherheitsmaßnahmen und Alternativen:
Sicherere Alternativen zum direkten Löschen:
Verschieben statt Löschen:
mkdir -p ~/trash
mv unwanted_file.txt ~/trash/
Verwenden von Hilfsprogrammen wie trash-cli
:
trash-put datei.txt # Verschiebt in den Papierkorb statt zu löschen
trash-list # Zeigt den Inhalt des Papierkorbs
trash-restore # Stellt gelöschte Dateien wieder her
Testen mit ls
vor dem Löschen:
ls *.tmp # Überprüfe, welche Dateien betroffen wären
rm *.tmp # Wenn die Liste korrekt ist, führe den Löschbefehl aus
Verwenden von find
mit -delete
für präziseres Löschen:
find . -name "*.tmp" -type f -print # Erst anzeigen
find . -name "*.tmp" -type f -delete # Dann löschen
💡 Tipp für die Praxis: Erstelle Skripte oder Aliase für häufige Löschoperationen, die zusätzliche Sicherheitsmaßnahmen enthalten.
❗Wichtig für die LPIC-1-Prüfung: Verstehe die Unterschiede zwischenrm
,rmdir
undrm -r
, sowie die Bedeutung der verschiedenen Optionen, insbesondere-f
,-i
und-r
. Diese Befehle werden häufig in praktischen Prüfungsaufgaben verwendet.
Das Erstellen und Löschen von Dateien und Verzeichnissen gehört zu den grundlegendsten Operationen in Linux. Mit dem Wissen aus diesem Abschnitt kannst du nun effizient Dateisystemstrukturen aufbauen und bei Bedarf wieder entfernen. Denke immer daran, dass Linux keine „Rückgängig“-Funktion für gelöschte Dateien bietet – daher ist Vorsicht besonders beim Löschen geboten.
Das Kopieren und Verschieben von Dateien und Verzeichnissen gehört zu den häufigsten Aufgaben in der Linux-Administration. Diese Operationen ermöglichen dir, Inhalte zu duplizieren, neu zu organisieren und umzubenennen – alles essenzielle Fähigkeiten für die LPIC-1-Prüfung und die tägliche Arbeit als Linux-Administrator.
Der Befehl cp
(copy) erstellt Duplikate von Dateien:
cp quelldatei zieldatei
cp bericht.txt bericht_backup.txt
cp /etc/ssh/sshd_config ~/backup/
Du kannst auch mehrere Dateien gleichzeitig in ein Zielverzeichnis kopieren:
cp datei1.txt datei2.txt datei3.txt zielverzeichnis/
cp *.jpg bilder/
Wichtige cp-Optionen:
Option | Beschreibung | Beispiel |
---|---|---|
-i | Interaktiv (fragt nach, bevor eine Datei überschrieben wird) | cp -i datei.txt backup/ |
-v | Ausführlich (zeigt an, welche Dateien kopiert werden) | cp -v *.log logs/ |
-p | Erhält Berechtigungen, Eigentümer und Zeitstempel | cp -p wichtig.txt backup/ |
-a | Archiv-Modus (wie -p , aber erhält auch Links und kopiert rekursiv) | cp -a quelle/ ziel/ |
-u | Update (kopiert nur, wenn Quelldatei neuer ist oder Zieldatei nicht existiert) | cp -u *.conf /etc/backup/ |
-n | Keine Überschreibung (bestehende Dateien werden nicht überschrieben) | cp -n *.txt backup/ |
-f | Erzwingen (überschreibt Zieldateien ohne Nachfrage) | cp -f kritisch.conf /etc/ |
🔧 Praktisches Beispiel:
# Alle Konfigurationsdateien sichern, mit Erhaltung der Metadaten und Bestätigung bei Überschreibung
cp -ivp /etc/*.conf ~/config_backup/
# Nur neuere Dateien kopieren (nützlich für inkrementelle Backups)
cp -uv ~/dokumente/*.docx ~/backup/dokumente/
⚠️ Achtung: Standardmäßig überschreibtcp
existierende Zieldateien ohne Warnung! Verwende-i
, wenn du eine Bestätigung wünschst, oder-n
, wenn du bestehende Dateien nie überschreiben möchtest.
💡 Tipp für die Praxis: Viele Administratoren definieren einen Alias, der cp
standardmäßig mit der Option -i
verwendet:
alias cp='cp -i' # Füge diese Zeile zu deiner .bashrc hinzu
Um ein Verzeichnis inklusive seines gesamten Inhalts zu kopieren, benötigst du die Option -r
(rekursiv):
cp -r quellverzeichnis/ zielverzeichnis/
Ohne die Option -r
gibt cp
eine Fehlermeldung aus, wenn du versuchst, ein Verzeichnis zu kopieren:
$ cp dokumente/ backup/
# Ausgabe:
cp: -r not specified; omitting directory 'dokumente/'
Beachte beim Kopieren von Verzeichnissen:
Zielverzeichnis existiert nicht:
cp -r projekte/ neues_projekt/
# Erstellt neues_projekt/ und kopiert den Inhalt von projekte/ dorthin
Zielverzeichnis existiert bereits:
$ cp -r projekte/ bestehendes_verzeichnis/
# Kopiert projekte/ als Unterverzeichnis in bestehendes_verzeichnis/
Kopieren des Inhalts, nicht des Verzeichnisses selbst:
$ cp -r projekte/* bestehendes_verzeichnis/
# Kopiert nur den INHALT von projekte/ nach bestehendes_verzeichnis/
🔧 Praktisches Beispiel für komplexes Kopieren:
# Verzeichnisstruktur kopieren, aber nur .txt-Dateien
cp -r --parents $(find projekte/ -name "*.txt") backup/
# Dies behält die Verzeichnisstruktur bei, kopiert aber nur die .txt-Dateien
💡 Tipp: Die Option -a
(Archiv) ist oft besser als -r
, wenn du ein genaues Duplikat eines Verzeichnisses erstellen möchtest, da sie Berechtigungen, Eigentümer, Zeitstempel und symbolische Links erhält:
cp -a quellverzeichnis/ zielverzeichnis/
Der Befehl mv
(move) verschiebt Dateien oder Verzeichnisse von einem Ort zu einem anderen:
mv quelldatei zielverzeichnis/
mv bericht.txt ~/dokumente/
Anders als bei cp
benötigst du beim Verschieben von Verzeichnissen keine spezielle Option:
mv quellverzeichnis/ zielverzeichnis/
Wichtige mv-Optionen:
Option | Beschreibung | Beispiel |
---|---|---|
-i | Interaktiv (fragt nach, bevor überschrieben wird) | mv -i datei.txt ziel/ |
-v | Ausführlich (zeigt an, was verschoben wird) | mv -v *.log logs/ |
-u | Update (verschiebt nur, wenn Quelle neuer ist) | mv -u *.dat neuer_ort/ |
-n | Keine Überschreibung (bestehende Dateien bleiben unberührt) | mv -n *.conf /etc/ |
-f | Erzwingen (überschreibt ohne Nachfrage) | mv -f alt.txt neu.txt |
-b | Backup (erstellt Backups überschriebener Dateien) | mv -b datei.txt ziel/ |
⚠️ Achtung: Wie beicp
überschreibtmv
standardmäßig bestehende Dateien ohne Warnung. Verwende-i
für eine Bestätigung vor dem Überschreiben.
🔧 Praktisches Beispiel:
# Alle PDF-Dateien in das Archiv-Verzeichnis verschieben,
# mit Bestätigung vor Überschreibung
mv -iv *.pdf ~/archiv/
# Verschieben nur, wenn die Quelldatei neuer ist
mv -uv *.conf /etc/
In Linux gibt es keinen separaten Befehl zum Umbenennen von Dateien. Stattdessen wird auch hierfür der mv
-Befehl verwendet:
mv alter_name.txt neuer_name.txt
Konzeptionell ist das Umbenennen einer Datei dasselbe wie das Verschieben an denselben Ort, aber mit einem anderen Namen.
# Umbenennen einer Datei
mv bericht_alt.doc bericht_neu.doc
# Umbenennen eines Verzeichnisses
mv altes_projekt/ neues_projekt/
💡 Tipp für Batch-Umbenennungen:
Wenn du viele Dateien nach einem bestimmten Muster umbenennen möchtest, ist der rename
-Befehl (oder prename
auf manchen Distributionen) nützlicher als mv
:
# Alle .txt-Dateien in .md umwandeln
rename 's/.txt$/.md/' *.txt
# Alle Dateien von Großbuchstaben in Kleinbuchstaben umwandeln
rename 'y/A-Z/a-z/' *
💡Beachte, dass rename
nicht auf allen Linux-Distributionen standardmäßig vorhanden ist und je nach Distribution unterschiedlich funktionieren kann.
Beim Kopieren und Verschieben von Dateien und Verzeichnissen treten einige typische Fehler immer wieder auf:
❗ Zielverzeichnis falsch angegeben:
# FALSCH: Versucht, alle .txt-Dateien in eine Datei namens "Backup" zu kopieren
cp *.txt Backup
# RICHTIG: Kopiert in ein Verzeichnis namens "Backup"
cp *.txt Backup/
Der Schrägstrich am Ende macht deutlich, dass es sich um ein Verzeichnis handelt. Wenn „Backup“ keine Datei ist, sondern ein Verzeichnis sein soll, solltest du sicherstellen, dass es existiert, bevor du den Kopiervorgang startest.
❗ Unbeabsichtigtes Überschreiben:
# Gefährlich: Könnte wichtige Dateien überschreiben
cp wichtig.conf /etc/
# Sicherer: Fragt nach, bevor überschrieben wird
cp -i wichtig.conf /etc/
❗ Ignorieren von Fehlermeldungen:
# Typischer Fehler bei fehlendem Zielverzeichnis
$ cp datei.txt nicht_existierendes_verzeichnis/
# Ausgabe:
cp: cannot create regular file 'nicht_existierendes_verzeichnis/datei.txt': No such file or directory
Stelle sicher, dass du Fehlermeldungen liest und verstehst. In diesem Fall musst du zuerst das Zielverzeichnis erstellen:
mkdir -p nicht_existierendes_verzeichnis/
cp datei.txt nicht_existierendes_verzeichnis/
❗ Verwechslung von Quelle und Ziel:
# FALSCH: Vertauschte Reihenfolge könnte Datenverlust bedeuten
$ cp wichtige_daten.txt leere_datei.txt # überschreibt wichtige_daten.txt mit leere_datei.txt!
# RICHTIG: Quelle zuerst, dann Ziel
$ cp leere_datei.txt wichtige_daten.txt
Die Reihenfolge bei cp
und mv
ist immer: cp QUELLE ZIEL
bzw. mv QUELLE ZIEL
.
┌ ⚠️ Wichtig für die Praxis: Bei kritischen Kopier- oder Verschiebeoperationen:
├ Verwende die Option-v
(verbose), um zu sehen, was passiert
├ Verwende-i
(interaktiv) oder-n
(no-clobber) zum Schutz vor Überschreibungen
├ Teste komplexe Operationen zuerst mitecho
oderls
└ Erstelle bei wichtigen Daten vorab ein Backup
🔧 Beispiel für sicheres Testen:
# Testen, welche Dateien betroffen wären
ls -l *.txt
# Echo verwenden, um den Befehl zu simulieren
for f in *.txt; do echo "Würde $f nach backup/ kopieren"; done
# Wenn alles gut aussieht, den eigentlichen Befehl ausführen
cp -iv *.txt backup/
💡 Tipp für die LPIC-1-Prüfung: Verstehe die Unterschiede zwischen den Optionen-i
,-f
und-n
beicp
undmv
. Wisse auch, wann-r
oder-a
fürcp
benötigt wird und wann nicht. Diese Aspekte werden häufig in praktischen Prüfungsaufgaben abgefragt.
Die Befehle cp
und mv
gehören zu den Grundpfeilern der Dateisystemverwaltung in Linux. Mit dem Wissen aus diesem Abschnitt kannst du nun effizient Dateien und Verzeichnisse kopieren, verschieben und umbenennen – grundlegende Fähigkeiten, die sowohl für die LPIC-1-Zertifizierung als auch im Linux-Alltag unerlässlich sind.
Linux-Dateisysteme bieten ein leistungsstarkes Konzept, das in Windows-Umgebungen oft missverstanden wird: Links. Diese speziellen Dateien ermöglichen es, auf andere Dateien oder Verzeichnisse zu verweisen, ohne sie zu kopieren – eine essenzielle Technik für effizientes Dateisystemmanagement und Speicherplatznutzung.
Links sind im Wesentlichen Verweise auf andere Dateien oder Verzeichnisse. Sie ermöglichen es, dass dieselbe Datei unter verschiedenen Namen und an verschiedenen Orten im Dateisystem erscheint. Linux kennt zwei Arten von Links:
┌ Hard Links: Direkte Verweise auf den Inhalt einer Datei (ihre Inode)
└ Symbolische Links (auch Soft Links oder Symlinks): Verweise auf den Pfad einer Datei oder eines Verzeichnisses
Links spielen eine wichtige Rolle in der Linux-Systemarchitektur. Viele Systemdateien sind tatsächlich Links, die auf andere Dateien verweisen, um Redundanz zu vermeiden und die Wartung zu vereinfachen.
Hard Links werden mit dem Befehl ln
ohne zusätzliche Optionen erstellt:
ln quelldatei ziel_hardlink
🔧 Praktisches Beispiel:
echo "Wichtiger Inhalt" > original.txt
ln original.txt hardlink.txt
ls -l
# Ausgabe:
total 8
-rw-r--r-- 2 username group 17 May 14 11:20 hardlink.txt
-rw-r--r-- 2 username group 17 May 14 11:20 original.txt
Beachte die Zahl „2“ nach den Berechtigungen – sie zeigt die Anzahl der Hard Links zu dieser Datei an.
Wichtige Eigenschaften von Hard Links:
Gleiche Inode: Ein Hard Link und die Original-Datei verweisen auf dieselbe Inode (denselben physischen Speicherort auf der Festplatte).
$ ls -i original.txt hardlink.txt
# Ausgabe:
1234567 hardlink.txt
1234567 original.txt # Gleiche Inode-Nummer
$ rm original.txt
$ cat hardlink.txt
Wichtiger Inhalt # Inhalt ist noch verfügbar
┌ ⚠️Einschränkungen von Hard Links:
├ Funktionieren nur innerhalb desselben Dateisystems
├ Können keine Verzeichnisse verlinken (außer für den Systemadministrator, was aber potenziell gefährlich ist)
└ Verweisen auf Inodes, nicht auf Pfade, daher keine Erkennung der "Quelle"
💡 Tipp: Hard Links eignen sich hervorragend für Situationen, in denen du eine 100% identische Kopie einer Datei benötigst, aber keinen zusätzlichen Speicherplatz verbrauchen möchtest.
Symbolische Links (Symlinks) werden mit dem Befehl ln
und der Option -s
erstellt:
ln -s quelldatei symbolischer_link
🔧 Praktisches Beispiel:
echo "Inhalt der Originaldatei" > original.txt
ln -s original.txt symlink.txt
ls -l
# Ausgabe:
total 4
-rw-r--r-- 1 username group 25 May 14 11:30 original.txt
lrwxrwxrwx 1 username group 11 May 14 11:30 symlink.txt -> original.txt
💡Beachte das l
am Anfang der Berechtigungen und den Pfeil ->
, der auf die Zieldatei zeigt.
Wichtige Eigenschaften von symbolischen Links:
$ ls -i original.txt symlink.txt
1234567 original.txt
1234568 symlink.txt # Unterschiedliche Inode-Nummer
$ ln -s /var/log logs
$ ls -l
lrwxrwxrwx 1 username group 8 May 14 11:35 logs -> /var/log
❗ Typische Fehlerquelle – Gebrochene symbolische Links:
ln -s original.txt symlink.txt
rm original.txt
ls -l
# Ausgabe:
lrwxrwxrwx 1 username group 11 May 14 11:40 symlink.txt -> original.txt
cat symlink.txt
#Ausgabe:
cat: symlink.txt: No such file or directory
Der symbolische Link existiert noch, aber seine Zieldatei ist nicht mehr vorhanden.
Um die Unterschiede besser zu verstehen, hier eine Gegenüberstellung:
Eigenschaft | Hard Link | Symbolischer Link |
---|---|---|
Inode | Identisch mit Original | Eigenständig (verweist auf Pfad) |
Dateisystemgrenzen | Nur im gleichen Dateisystem | Über Dateisystemgrenzen hinweg |
Bei Löschen der Originaldatei | Inhalt bleibt erhalten | Link wird gebrochen |
Verzeichnisse | Nicht möglich (außer für root) | Möglich |
Erkennbarkeit | Nicht als Link erkennbar | Als Link erkennbar (ls -l zeigt Ziel) |
Größe | Wie Originaldatei | Nur wenige Bytes (Pfadlänge) |
Berechtigungsverhalten | Identisch mit Original | Hat eigene Berechtigungen, nutzt aber die der Zieldatei |
🔧 Veranschaulichendes Beispiel:
Hardlink-Struktur:
Datei1 ---> [Inode #1234] <--- Datei2 (Hardlink)
|
v
[Datenblöcke]
Symlink-Struktur:
Datei1 ---> [Inode #1234] ---> [Datenblöcke]
^
|
Symlink ---> [Inode #5678] (enthält Pfad zu Datei1)
💡 Tipp für die LPIC-1-Prüfung: Die Unterschiede zwischen Hard Links und Symlinks werden oft abgefragt. Besonders wichtig: die Auswirkung des Löschens der Originaldatei und die Möglichkeit, über Dateisystemgrenzen hinweg zu verlinken.
Links sind keine theoretischen Konstrukte – sie haben viele praktische Anwendungsfälle im Linux-Alltag:
Effiziente Datensicherung:
ln ~/wichtig.txt ~/backup/wichtig.txt
Spart Speicherplatz, da beide Dateien denselben physischen Speicherbereich nutzen.
Mehrere Versionen einer Konfigurationsdatei:
ln /etc/config.conf /etc/config.stable
Beide Dateien verweisen auf denselben Inhalt, Änderungen an einer wirken sich auf beide aus.
Gemeinsame Datenbasis für mehrere Anwendungen:
ln /var/data/shared.db /opt/app1/data.db
ln /var/data/shared.db /opt/app2/data.db
Beide Anwendungen greifen auf dieselbe Datenbank zu.
Anwendungsfälle für symbolische Links:
Alternativen-System:
$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 Apr 16 08:53 /usr/bin/python -> python2.7
Linux verwendet Symlinks für das Alternativen-System, um zwischen verschiedenen Versionen einer Software zu wechseln.
Vereinfachte Pfade:
ln -s /var/www/html/very/long/path/to/website ~/website
Schneller Zugriff auf tief verschachtelte Verzeichnisse.
Versionierte Software:
ln -s apache-tomcat-9.0.45 tomcat
Du kannst die Software aktualisieren, indem du einfach den symbolischen Link änderst.
Verschiebung von Verzeichnissen:
# Wenn /var zu klein wird, kannst du die Logs auf eine andere Partition verschieben
mv /var/log /data/log
ln -s /data/log /var/log
Programme suchen weiterhin unter /var/log
, aber die Daten befinden sich physisch woanders.
Das Erkennen und Verwalten von Links erfordert spezielle Befehle und Optionen:
Links identifizieren:
# Symbolische Links mit ls erkennen
ls -l
lrwxrwxrwx 1 user group 11 May 14 11:50 symlink.txt -> original.txt
# Hard Links finden (sucht alle Dateien mit derselben Inode wie "datei.txt")
find /pfad -xdev -samefile datei.txt
# Informationen über Links mit stat anzeigen
stat datei.txt
Mit kaputten symbolischen Links umgehen:
# Kaputte Links finden
find /pfad -type l -xtype l
# Symbolischen Link aktualisieren
ln -sf neue_datei.txt alter_symlink.txt
💡Die Option -f
erzwingt das Überschreiben eines existierenden symbolischen Links.
Befehle, die Links speziell behandeln:
cp
: Standardmäßig werden symbolische Links als reguläre Dateien kopiert, es sei denn, du verwendest -a
oder -d
:
cp -a symlink.txt backup/ # Kopiert den Link als Link
cp symlink.txt backup/ # Kopiert den Inhalt der verlinkten Datei
rm
: Löscht nur den Link, nicht die verlinkte Datei:
rm symlink.txt # Löscht nur den Link
find
: Kann nach Links suchen:
find /pfad -type l # Findet symbolische Links
⚠️ Achtung bei Backups: Wenn du ein Verzeichnis mit symbolischen Links sicherst, stelle sicher, dass dein Backup-Tool symbolische Links korrekt behandelt. Manche Tools folgen Links standardmäßig und sichern die Zieldateien, andere speichern nur den Link selbst.
❗ Typischer Fehler – Rekursive symbolische Links:
Ein symbolischer Link, der direkt oder indirekt auf ein übergeordnetes Verzeichnis verweist, kann zu endlosen Schleifen führen:
mkdir -p test/subdir
cd test/subdir
ln -s .. loop
ls -la loop/subdir/loop/subdir/loop/
Befehle wie ls -R
oder cp -r
können in eine unendliche Rekursion geraten. Viele moderne Tools erkennen solche Schleifen, aber nicht alle.
💡 Tipp für die Praxis: Wenn du symbolische Links erstellst, überlege dir, ob du relative oder absolute Pfade verwenden solltest:
ln -s /pfad/zur/datei link
) funktionieren von überall, aber brechen, wenn die Zieldatei verschoben wirdln -s ../datei link
) funktionieren nur, wenn die Relation zwischen Link und Ziel bestehen bleibt, sind aber robuster bei Verschiebung ganzer Verzeichnisstrukturen🔧 Beispiel für bewusste Entscheidung:
# Absolute Pfade für systemweite Links
sudo ln -s /opt/jdk-11.0.11 /usr/local/jdk
# Relative Pfade für projektbezogene Links
cd ~/projekte/webapp
ln -s ../shared/config config
In vielen Linux-Systemen findest du folgende Situation:
ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 Apr 16 08:53 /usr/bin/python -> python3
ls -l /etc/alternatives/editor
lrwxrwxrwx 1 root root 17 Mar 9 15:11 /etc/alternatives/editor -> /usr/bin/vim.basic
ls -li /usr/bin/gcc*
2884360 -rwxr-xr-x 1 root root 1014648 Jun 23 2023 /usr/bin/gcc
2884361 -rwxr-xr-x 3 root root 1014648 Jun 23 2023 /usr/bin/gcc-9
2884361 -rwxr-xr-x 3 root root 1014648 Jun 23 2023 /usr/bin/gcc-ar-9
2884361 -rwxr-xr-x 3 root root 1014648 Jun 23 2023 /usr/bin/gcc-nm-9
💡Hier siehst du:
/usr/bin/python
ist ein symbolischer Link auf python3
(verschiedene Versionen)gcc-9
, gcc-ar-9
und gcc-nm-9
sind Hard Links zur selben Datei (gleiche Inode 2884361)Diese gemischte Verwendung von symbolischen Links und Hard Links ist typisch für die elegante Art, wie Linux mit verschiedenen Versionen, Alternativen und gemeinsamen Ressourcen umgeht.
Links sind ein fundamentales Konzept in Linux-Dateisystemen und gehören zu den Themen, die in der LPIC-1-Prüfung auf verschiedenen Ebenen abgefragt werden. Mit dem Verständnis beider Link-Typen und ihrer jeweiligen Vor- und Nachteile kannst du dein Dateisystem optimal organisieren und verwalten.
Die Navigation im Dateisystem und der effiziente Umgang mit Dateien und Verzeichnissen sind nicht nur theoretisches Wissen – sie bilden das Fundament für praktisch jede Aufgabe, die du als Linux-Administrator ausführen wirst. Für die LPIC-1-Zertifizierung sind diese Fähigkeiten aus mehreren Gründen entscheidend:
┌ Im LPIC-1 Exam 101 ist der Umgang mit dem Dateisystem ein zentrales Prüfungsthema
├ Bis zu 25% der Prüfungsfragen beziehen sich direkt oder indirekt auf Navigation und Dateioperationen
├ Die Prüfung enthält sowohl theoretische Fragen als auch praktische Szenarien
├ Besonders die korrekte Verwendung von Wildcards, Links und verschiedenen Befehlsoptionen wird häufig geprüft
└ Das Verständnis relativer und absoluter Pfade ist oft in komplexere Aufgaben eingebettet
💡 Prüfungstipp: Befehle wie ls, cp, mv, ln und ihre Optionen solltest du nicht nur kennen, sondern in- und auswendig beherrschen. Prüfer bevorzugen Aufgaben, die elementare Befehle in nicht-trivialen Situationen kombinieren.
Wie bereits im ersten Teil dieser Serie erwähnt, möchte ich dir wichtige Informationen zu Lernressourcen und zur Durchführung der LPIC-1-Prüfung geben.
Für deine Vorbereitung auf die LPIC-1-Zertifizierung stehen verschiedene hochwertige Ressourcen zur Verfügung:
Die LPIC-1-Zertifizierung besteht aus zwei separaten Prüfungen:
Jede Prüfung umfasst 60 Fragen (Multiple-Choice und Lückentextaufgaben) und muss innerhalb von 90 Minuten absolviert werden. Zum Bestehen benötigst du mindestens 500 von 800 möglichen Punkten
Du hast zwei Hauptoptionen, um die LPIC-1-Prüfungen abzulegen:
Zusätzlich werden LPIC-Prüfungen oft zu vergünstigten Konditionen bei Linux-Veranstaltungen wie dem Tübinger Linuxtag (Tübix) oder der OpenRheinRuhr angeboten.
Um dich zur Prüfung anzumelden, benötigst du:
Die Kosten für die LPIC-1 Exam 101 betragen standardmäßig 200 USD, können aber je nach Region variieren.
Die LPIC-1-Prüfungen sind in mehreren Sprachen verfügbar:
💡 Tipp: Achte bei der Vorbereitung darauf, die aktuellen Lernziele für die Version 5.0 (Prüfungscodes 101-500 und 102-500) zu verwenden, da diese die Grundlage der aktuellen Prüfungen bilden.
Die Beherrschung der grundlegenden Dateisystembefehle und Navigationstechniken ist ein entscheidender Schritt auf deinem Weg zum Linux-Administrator. In diesem Artikel haben wir die Struktur des Linux-Dateisystems kennengelernt, verstanden, wie man effizient navigiert und gelernt, wie man Dateien und Verzeichnisse erstellt, kopiert, verschiebt und löscht.
Besonders die Arbeit mit Wildcards und Links bietet mächtige Werkzeuge, die deine tägliche Arbeit mit Linux erheblich effizienter gestalten können. Diese Befehle mögen auf den ersten Blick einfach erscheinen, aber ihre geschickte Kombination und die Nutzung der richtigen Optionen machen den Unterschied zwischen einem Anfänger und einem erfahrenen Administrator aus.
💡 Tipp: Die LPIC-1-Zertifizierung legt großen Wert auf diese Grundlagenfähigkeiten, da sie das Fundament für komplexere Aufgaben bilden. Mit den in diesem Artikel vorgestellten Befehlen und Konzepten bist du gut gerüstet für die praxisorientierten Fragen der Prüfung.
Im nächsten Artikel unserer Serie werden wir uns mit dem Anzeigen und Bearbeiten von Dateiinhalten beschäftigen – wie du Textdateien lesen, bearbeiten und analysieren kannst, um Systemkonfigurationen zu verstehen und anzupassen. Bis dahin empfehle ich dir, die hier vorgestellten Befehle regelmäßig zu üben, denn Praxis ist der Schlüssel zur Meisterschaft in der Linux-Administration.