Umgang mit dem Fehler 'Datei oder Verzeichnis nicht gefunden'

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Tutorial führt Sie durch die wesentlichen Aspekte der Linux-Dateisystemstruktur und hilft Ihnen bei der Fehlerbehebung des häufigen Fehlers 'Datei oder Verzeichnis nicht gefunden' (no such file or directory). Sie lernen, wie Sie in Verzeichnissen navigieren, Dateipfade verstehen und Strategien entwickeln, um solche Probleme in Zukunft zu vermeiden. Am Ende dieses Tutorials werden Sie ein besseres Verständnis dafür haben, wie Sie Dateien und Verzeichnisse auf einem Linux-Betriebssystem effektiv verwalten können.

Die Struktur des Linux-Dateisystems verstehen

Das Linux-Dateisystem ist in einer hierarchischen, baumartigen Struktur organisiert, die vom Root-Verzeichnis (/) ausgeht. Das Verständnis dieser Struktur ist unerlässlich, um Dateien effektiv zu navigieren und zu verwalten.

Ihren aktuellen Standort erkunden

Bestimmen wir zunächst, wo Sie sich im Dateisystem befinden, indem wir den Befehl pwd (print working directory) verwenden:

pwd

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

/home/labex/project

Dies zeigt, dass Sie sich im Verzeichnis project innerhalb des Home-Verzeichnisses des Benutzers labex befinden.

Verzeichnisinhalte auflisten

Um zu sehen, welche Dateien und Verzeichnisse an Ihrem aktuellen Standort existieren, verwenden Sie den Befehl ls:

ls

Sie sollten Folgendes sehen:

documents  images

Für detailliertere Informationen, einschließlich versteckter Dateien und Berechtigungen, verwenden Sie die Flags -la:

ls -la

Dies zeigt eine Ausgabe ähnlich der folgenden an:

total 16
drwxr-xr-x 4 labex labex 4096 Jan 1 00:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 00:00 ..
drwxr-xr-x 3 labex labex 4096 Jan 1 00:00 documents
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 images

Navigieren wir zum Verzeichnis documents mit dem Befehl cd (change directory):

cd documents

Überprüfen Sie Ihren neuen Standort:

pwd

Ausgabe:

/home/labex/project/documents

Listen Sie nun den Inhalt dieses Verzeichnisses auf:

ls

Ausgabe:

reports  templates

Navigieren wir weiter zum Verzeichnis reports:

cd reports

Und überprüfen Sie seinen Inhalt:

ls -l

Ausgabe:

total 4
-rw-r--r-- 1 labex labex 22 Jan 1 00:00 monthly_report.txt

Dateipfade verstehen

Es gibt zwei Arten von Dateipfaden in Linux:

  1. Absolute Pfade (absolute paths): Beginnen vom Root-Verzeichnis (/) und geben den vollständigen Pfad an.
  2. Relative Pfade (relative paths): Beziehen sich auf Standorte relativ zu Ihrem aktuellen Verzeichnis.

Untersuchen wir den Inhalt der Datei monthly_report.txt unter Verwendung beider Pfadtypen:

Verwendung eines absoluten Pfads:

cat /home/labex/project/documents/reports/monthly_report.txt

Verwendung eines relativen Pfads (von Ihrem aktuellen Standort im Verzeichnis reports):

cat monthly_report.txt

Beide Befehle sollten Folgendes anzeigen:

This is a sample report

Zurück zu übergeordneten Verzeichnissen

Um zum übergeordneten Verzeichnis zurückzukehren, verwenden Sie cd ..:

cd ..

Überprüfen Sie Ihren Standort:

pwd

Ausgabe:

/home/labex/project/documents

Um von überall in Ihr Home-Verzeichnis zurückzukehren, verwenden Sie cd ohne Argumente:

cd

Und um zum Projektverzeichnis zurückzukehren:

cd project

Häufige Ursachen für 'Datei oder Verzeichnis nicht gefunden' Fehler

In diesem Schritt werden wir absichtlich Szenarien erstellen, die zu Fehlern vom Typ 'Datei oder Verzeichnis nicht gefunden' (no such file or directory) führen, um deren Ursachen zu verstehen. Indem Sie diese häufigen Situationen erkennen, sind Sie besser darauf vorbereitet, sie zu beheben.

Ursache 1: Falscher Dateipfad

Navigieren Sie zurück zum Projektverzeichnis:

cd ~/project

Versuchen Sie nun, auf eine Datei mit einem falschen Pfad zuzugreifen:

cat documents/monthly_report.txt

Sie werden einen Fehler sehen:

cat: documents/monthly_report.txt: No such file or directory

Dieser Fehler tritt auf, weil der Dateipfad falsch ist. Die Datei monthly_report.txt befindet sich tatsächlich im Verzeichnis reports innerhalb des Verzeichnisses documents.

Der korrekte Befehl wäre:

cat documents/reports/monthly_report.txt

Ausgabe:

This is a sample report

Ursache 2: Versuch, auf eine nicht existierende Datei zuzugreifen

Versuchen wir, auf eine Datei zuzugreifen, die nicht existiert:

cat documents/reports/annual_report.txt

Fehlerausgabe:

cat: documents/reports/annual_report.txt: No such file or directory

Dieser Fehler tritt auf, weil die Datei annual_report.txt im angegebenen Verzeichnis nicht existiert.

Ursache 3: Probleme mit der Groß- und Kleinschreibung

Linux-Dateisysteme sind case-sensitive (Groß- und Kleinschreibung wird beachtet), was bedeutet, dass File.txt und file.txt als unterschiedliche Dateien behandelt werden. Demonstrieren wir dies:

cat documents/reports/MONTHLY_REPORT.txt

Fehlerausgabe:

cat: documents/reports/MONTHLY_REPORT.txt: No such file or directory

Der korrekte, case-sensitive Dateiname ist monthly_report.txt.

Ursache 4: Berechtigungsprobleme

Erkunden wir das Verzeichnis templates:

cd documents/templates
ls -l

Ausgabe:

total 8
-rw-r--r-- 1 labex labex 15 Jan 1 00:00 template1.txt
-r-------- 1 labex labex 15 Jan 1 00:00 template2.txt

Beachten Sie, dass template2.txt restriktivere Berechtigungen hat (-r--------), was bedeutet, dass es nur für den Eigentümer lesbar und für andere nicht zugänglich ist.

Versuchen wir, die Datei zu ändern:

echo "Adding new content" >> template2.txt

Fehlerausgabe:

bash: template2.txt: Permission denied

Obwohl dies streng genommen kein Fehler vom Typ 'Datei oder Verzeichnis nicht gefunden' ist, können Berechtigungsprobleme manchmal auf ähnliche Weise auftreten, insbesondere beim Versuch, Dateien in Verzeichnissen zu erstellen, in denen Sie keine Schreibberechtigung haben.

Ursache 5: Falsche Verwendung relativer Pfade

Navigieren Sie zurück zum Projektverzeichnis:

cd ~/project

Versuchen Sie nun, mit einem relativen Pfad vom falschen Ort aus auf eine Datei zuzugreifen:

cd images
cat monthly_report.txt

Fehlerausgabe:

cat: monthly_report.txt: No such file or directory

Dieser Fehler tritt auf, weil sich die Datei nicht in Ihrem aktuellen Verzeichnis befindet. Sie müssten einen korrekten relativen Pfad oder einen absoluten Pfad verwenden:

cat ../documents/reports/monthly_report.txt

Ausgabe:

This is a sample report

Kehren Sie für den nächsten Schritt zum Projektverzeichnis zurück:

cd ~/project

Behebung von 'Datei oder Verzeichnis nicht gefunden' Fehlern

Nachdem wir die häufigen Ursachen für diesen Fehler verstanden haben, wollen wir nun lernen, wie man ihn behebt und löst.

Technik 1: Überprüfen des Dateipfads

Wenn Sie auf einen Fehler vom Typ 'Datei oder Verzeichnis nicht gefunden' stoßen, ist der erste Schritt, den Dateipfad zu überprüfen. Sie können den Befehl ls verwenden, um den Verzeichnisinhalt aufzulisten und zu überprüfen, ob Dateien existieren:

cd ~/project
ls -la documents/

Ausgabe:

total 12
drwxr-xr-x 4 labex labex 4096 Jan 1 00:00 .
drwxr-xr-x 4 labex labex 4096 Jan 1 00:00 ..
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 reports
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 templates

Überprüfen Sie nun den Inhalt des Verzeichnisses reports:

ls -la documents/reports/

Ausgabe:

total 4
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 .
drwxr-xr-x 4 labex labex 4096 Jan 1 00:00 ..
-rw-r--r-- 1 labex labex   22 Jan 1 00:00 monthly_report.txt

Dies bestätigt, dass monthly_report.txt im Verzeichnis reports existiert, nicht direkt im Verzeichnis documents.

Technik 2: Verwenden der Tab-Vervollständigung

Die Tab-Vervollständigung ist eine nützliche Funktion, die Datei- und Verzeichnisnamen automatisch vervollständigt und so Tippfehler reduziert:

Beginnen Sie mit der Eingabe eines Teilpfads und drücken Sie die Tab-Taste:

cat documents/re[TAB]

Nach dem Drücken von Tab sollte dies vervollständigt werden zu:

cat documents/reports/

Fahren Sie mit einem weiteren Tab fort:

cat documents/reports/mo[TAB]

Dies sollte vervollständigt werden zu:

cat documents/reports/monthly_report.txt

Drücken Sie nun die Eingabetaste, um den Befehl auszuführen:

This is a sample report

Technik 3: Überprüfen der Dateiberechtigungen

Wenn Sie ein Berechtigungsproblem vermuten, verwenden Sie ls -l, um die Dateiberechtigungen anzuzeigen:

ls -l documents/templates/

Ausgabe:

total 8
-rw-r--r-- 1 labex labex 15 Jan 1 00:00 template1.txt
-r-------- 1 labex labex 15 Jan 1 00:00 template2.txt

In Linux werden Berechtigungen wie folgt dargestellt:

  • Das erste Zeichen gibt den Dateityp an (- für reguläre Datei, d für Verzeichnis)
  • Die nächsten drei Zeichen sind Berechtigungen für den Eigentümer (Lesen/Schreiben/Ausführen)
  • Die nächsten drei sind Gruppenberechtigungen
  • Die letzten drei sind Berechtigungen für andere

Um Berechtigungen zu ändern, verwenden Sie den Befehl chmod:

chmod 644 documents/templates/template2.txt
ls -l documents/templates/template2.txt

Ausgabe:

-rw-r--r-- 1 labex labex 15 Jan 1 00:00 template2.txt

Jetzt können Sie in die Datei schreiben:

echo "Adding new content" >> documents/templates/template2.txt
cat documents/templates/template2.txt

Ausgabe:

This is template 2
Adding new content

Technik 4: Erstellen fehlender Verzeichnisse

Wenn ein Verzeichnis in einem Pfad nicht existiert, können Sie es mit dem Befehl mkdir erstellen. Das Flag -p erstellt übergeordnete Verzeichnisse, falls diese nicht existieren:

mkdir -p documents/archives/2023

Überprüfen Sie die neue Verzeichnisstruktur:

ls -la documents/archives/

Ausgabe:

total 8
drwxr-xr-x 3 labex labex 4096 Jan 1 00:00 .
drwxr-xr-x 5 labex labex 4096 Jan 1 00:00 ..
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 2023

Jetzt können Sie eine Datei in diesem neuen Verzeichnis erstellen:

echo "This is an archived document" > documents/archives/2023/archive_doc.txt
cat documents/archives/2023/archive_doc.txt

Ausgabe:

This is an archived document

Technik 5: Verwenden von Find zum Auffinden von Dateien

Wenn Sie sich nicht sicher sind, wo sich eine Datei befindet, verwenden Sie den Befehl find:

find ~/project -name "*.txt"

Ausgabe:

/home/labex/project/documents/reports/monthly_report.txt
/home/labex/project/documents/templates/template1.txt
/home/labex/project/documents/templates/template2.txt
/home/labex/project/documents/archives/2023/archive_doc.txt

Dieser Befehl durchsucht das gesamte Verzeichnis ~/project nach Dateien mit der Erweiterung .txt.

Verhindern von 'Datei oder Verzeichnis nicht gefunden' Fehlern

Nachdem Sie nun wissen, wie man diese Fehler behebt, wollen wir bewährte Verfahren erkunden, um zu verhindern, dass sie überhaupt erst auftreten.

Best Practice 1: Verwenden Sie absolute Pfade für Skripte

Beim Schreiben von Skripten oder Befehlen, die von verschiedenen Orten aus ausgeführt werden sollen, verwenden Sie absolute Pfade:

Erstellen wir ein einfaches Skript, das absolute Pfade verwendet:

cd ~/project
nano absolute_path_script.sh

Fügen Sie dem Skript den folgenden Inhalt hinzu:

#!/bin/bash
echo "Datei mit absolutem Pfad lesen:"
cat /home/labex/project/documents/reports/monthly_report.txt

Speichern Sie die Datei, indem Sie Ctrl+O, dann Enter drücken und mit Ctrl+X beenden.

Machen Sie das Skript ausführbar:

chmod +x absolute_path_script.sh

Führen Sie das Skript aus:

./absolute_path_script.sh

Ausgabe:

Datei mit absolutem Pfad lesen:
This is a sample report

Das Skript funktioniert, weil es einen absoluten Pfad verwendet, unabhängig davon, wo es ausgeführt wird.

Best Practice 2: Überprüfen Sie, ob Dateien/Verzeichnisse existieren, bevor Sie sie verwenden

Erstellen Sie ein weiteres Skript, das überprüft, ob eine Datei existiert, bevor versucht wird, sie zu verwenden:

nano file_check_script.sh

Fügen Sie den folgenden Inhalt hinzu:

#!/bin/bash
FILE="/home/labex/project/documents/reports/monthly_report.txt"
NONEXISTENT_FILE="/home/labex/project/documents/reports/quarterly_report.txt"

## Überprüfen, ob die Datei existiert, bevor sie verwendet wird
if [ -f "$FILE" ]; then
  echo "Datei existiert, Inhalt wird gelesen:"
  cat "$FILE"
else
  echo "Fehler: $FILE existiert nicht"
fi

## Auf nicht existierende Datei prüfen
if [ -f "$NONEXISTENT_FILE" ]; then
  cat "$NONEXISTENT_FILE"
else
  echo "Die Datei $NONEXISTENT_FILE existiert nicht"
  echo "Wird jetzt erstellt..."
  echo "This is a quarterly report" > "$NONEXISTENT_FILE"
  echo "Datei erfolgreich erstellt"
fi

Speichern und beenden (Ctrl+O, Enter, Ctrl+X).

Machen Sie das Skript ausführbar:

chmod +x file_check_script.sh

Führen Sie das Skript aus:

./file_check_script.sh

Ausgabe:

Datei existiert, Inhalt wird gelesen:
This is a sample report
Die Datei /home/labex/project/documents/reports/quarterly_report.txt existiert nicht
Wird jetzt erstellt...
Datei erfolgreich erstellt

Überprüfen Sie, ob die neue Datei erstellt wurde:

cat documents/reports/quarterly_report.txt

Ausgabe:

This is a quarterly report

Best Practice 3: Organisieren Sie Ihre Dateien logisch

Eine gut organisierte Dateistruktur hilft, Fehler zu vermeiden. Erstellen wir eine besser organisierte Struktur für ein neues Projekt:

mkdir -p ~/project/new_project/{src,docs,config,data}

Dies erstellt ein Verzeichnis mit vier Unterverzeichnissen in einem Befehl.

Überprüfen Sie die Struktur:

ls -la ~/project/new_project/

Ausgabe:

total 20
drwxr-xr-x 6 labex labex 4096 Jan 1 00:00 .
drwxr-xr-x 5 labex labex 4096 Jan 1 00:00 ..
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 config
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 data
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 docs
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 src

Erstellen Sie eine README-Datei im Projektstamm, um die Struktur zu dokumentieren:

cat > ~/project/new_project/README.txt << EOF
Project Directory Structure:
- src/: Source code files
- docs/: Documentation
- config/: Configuration files
- data/: Data files
EOF

Zeigen Sie die README an:

cat ~/project/new_project/README.txt

Ausgabe:

Project Directory Structure:
- src/: Source code files
- docs/: Documentation
- config/: Configuration files
- data/: Data files
EOF

Best Practice 4: Verwenden Sie Umgebungsvariablen für gängige Pfade

Umgebungsvariablen können helfen, Pfade konsistenter zu verwalten:

nano ~/.zshrc

Fügen Sie diese Zeilen am Ende der Datei hinzu:

## Projektverzeichnisse
export PROJECT_ROOT=~/project
export DOCS_DIR=$PROJECT_ROOT/documents
export REPORTS_DIR=$DOCS_DIR/reports

Speichern und beenden (Ctrl+O, Enter, Ctrl+X).

Übernehmen Sie die Änderungen:

source ~/.zshrc

Jetzt können Sie diese Variablen in Befehlen verwenden:

echo "Zugriff auf Bericht mit Umgebungsvariable:"
cat $REPORTS_DIR/monthly_report.txt

Ausgabe:

Zugriff auf Bericht mit Umgebungsvariable:
This is a sample report

Erstellen Sie ein Skript, das diese Umgebungsvariablen verwendet:

nano env_var_script.sh

Fügen Sie den folgenden Inhalt hinzu:

#!/bin/bash
echo "Berichtsverzeichnis ist: $REPORTS_DIR"
echo "Dateien im Berichtsverzeichnis:"
ls -la $REPORTS_DIR

Speichern, beenden und ausführbar machen:

chmod +x env_var_script.sh

Führen Sie das Skript aus:

./env_var_script.sh

Ausgabe:

Berichtsverzeichnis ist: /home/labex/project/documents/reports
Dateien im Berichtsverzeichnis:
total 8
drwxr-xr-x 2 labex labex 4096 Jan 1 00:00 .
drwxr-xr-x 5 labex labex 4096 Jan 1 00:00 ..
-rw-r--r-- 1 labex labex   22 Jan 1 00:00 monthly_report.txt
-rw-r--r-- 1 labex labex   25 Jan 1 00:00 quarterly_report.txt

Zusammenfassung

In diesem Lab haben Sie wichtige Fähigkeiten zur Verwaltung von Dateien und Verzeichnissen in einem Linux-System erlernt:

  1. Das Linux-Dateisystem verstehen (Understanding the Linux File System): Sie haben die hierarchische Dateistruktur erkundet, gelernt, in Verzeichnissen zu navigieren, und sowohl absolute als auch relative Dateipfade verwendet.

  2. Häufige Ursachen für 'Datei oder Verzeichnis nicht gefunden' Fehler (Common Causes of 'No Such File or Directory' Errors): Sie haben typische Szenarien identifiziert, die zu diesem Fehler führen, einschließlich falscher Pfade, nicht existierender Dateien, Problemen mit der Groß- und Kleinschreibung und Berechtigungsproblemen.

  3. Fehlerbehebungstechniken (Troubleshooting Techniques): Sie haben das Überprüfen von Dateipfaden, die Verwendung der Tab-Vervollständigung, das Überprüfen von Dateiberechtigungen, das Erstellen fehlender Verzeichnisse und die Verwendung des Befehls find zum Auffinden von Dateien geübt.

  4. Best Practices zur Prävention (Prevention Best Practices): Sie haben Strategien implementiert, um diese Fehler zu vermeiden, einschließlich der Verwendung absoluter Pfade in Skripten, der Überprüfung, ob Dateien existieren, bevor sie verwendet werden, der logischen Organisation von Dateien und der Verwendung von Umgebungsvariablen für gängige Pfade.

Diese Fähigkeiten helfen Ihnen, effizienter mit dem Linux-Dateisystem zu arbeiten und häufige Fehler zu vermeiden, die Ihren Arbeitsablauf unterbrechen können. Denken Sie daran, dass die richtige Datei- und Verzeichnisverwaltung grundlegend ist, um in Linux und anderen Unix-ähnlichen Betriebssystemen versiert zu werden.