Wie man den Fehler 'Datei oder Verzeichnis nicht gefunden' behandelt

LinuxLinuxBeginner
Jetzt üben

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

Introduction

This tutorial will guide you through the essential aspects of the Linux file system structure and help you troubleshoot the common 'no such file or directory' error. You will learn how to navigate directories, understand file paths, and develop strategies to prevent such issues in the future. By the end of this tutorial, you will have a better understanding of how to effectively manage files and directories on a Linux operating system.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/pwd("Directory Displaying") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/FileandDirectoryManagementGroup -.-> linux/find("File Searching") subgraph Lab Skills linux/ls -.-> lab-415661{{"Wie man den Fehler 'Datei oder Verzeichnis nicht gefunden' behandelt"}} linux/cat -.-> lab-415661{{"Wie man den Fehler 'Datei oder Verzeichnis nicht gefunden' behandelt"}} linux/chmod -.-> lab-415661{{"Wie man den Fehler 'Datei oder Verzeichnis nicht gefunden' behandelt"}} linux/cd -.-> lab-415661{{"Wie man den Fehler 'Datei oder Verzeichnis nicht gefunden' behandelt"}} linux/pwd -.-> lab-415661{{"Wie man den Fehler 'Datei oder Verzeichnis nicht gefunden' behandelt"}} linux/mkdir -.-> lab-415661{{"Wie man den Fehler 'Datei oder Verzeichnis nicht gefunden' behandelt"}} linux/find -.-> lab-415661{{"Wie man den Fehler 'Datei oder Verzeichnis nicht gefunden' behandelt"}} end

Understanding the Linux File System Structure

The Linux file system is organized in a hierarchical tree-like structure, starting from the root directory (/). Understanding this structure is essential for navigating and managing files effectively.

Exploring Your Current Location

First, let's determine where you are in the file system by using the pwd (print working directory) command:

pwd

You should see output similar to:

/home/labex/project

This shows that you are in the project directory within the labex user's home directory.

Listing Directory Contents

To see what files and directories exist in your current location, use the ls command:

ls

You should see:

documents  images

For more detailed information, including hidden files and permissions, use the -la flags:

ls -la

This will display output similar to:

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

Let's navigate to the documents directory using the cd (change directory) command:

cd documents

Verify your new location:

pwd

Output:

/home/labex/project/documents

Now list the contents of this directory:

ls

Output:

reports  templates

Let's continue navigating to the reports directory:

cd reports

And check its contents:

ls -l

Output:

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

Understanding File Paths

There are two types of file paths in Linux:

  1. Absolute paths: Start from the root directory (/) and specify the complete path
  2. Relative paths: Reference locations relative to your current directory

Let's examine the content of the monthly_report.txt file using both types of paths:

Using an absolute path:

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

Using a relative path (from your current location in the reports directory):

cat monthly_report.txt

Both commands should display:

This is a sample report

Going Back to Parent Directories

To go back to the parent directory, use cd ..:

cd ..

Check your location:

pwd

Output:

/home/labex/project/documents

To return to your home directory from anywhere, use cd without arguments:

cd

And to return to the project directory:

cd project

Common Causes of 'No Such File or Directory' Errors

In this step, we will deliberately create scenarios that lead to 'no such file or directory' errors to understand their causes. By recognizing these common situations, you will be better prepared to troubleshoot them.

Cause 1: Incorrect File Path

Navigate back to the project directory:

cd ~/project

Now, try to access a file with an incorrect path:

cat documents/monthly_report.txt

You will see an error:

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

This error occurs because the file path is incorrect. The monthly_report.txt file is actually located in the reports directory inside the documents directory.

The correct command would be:

cat documents/reports/monthly_report.txt

Output:

This is a sample report

Cause 2: Trying to Access a Non-existent File

Let's try to access a file that doesn't exist:

cat documents/reports/annual_report.txt

Error output:

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

This error occurs because the file annual_report.txt doesn't exist in the specified directory.

Cause 3: Case Sensitivity Issues

Linux file systems are case-sensitive, which means File.txt and file.txt are treated as different files. Let's demonstrate this:

cat documents/reports/MONTHLY_REPORT.txt

Error output:

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

The correct case-sensitive filename is monthly_report.txt.

Cause 4: Permission Issues

Let's explore the templates directory:

cd documents/templates
ls -l

Output:

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

Notice that template2.txt has more restrictive permissions (-r--------), meaning it's read-only for the owner and not accessible to others.

Let's try to modify the file:

echo "Adding new content" >> template2.txt

Error output:

bash: template2.txt: Permission denied

Although this isn't strictly a 'no such file or directory' error, permission issues can sometimes manifest in similar ways, especially when attempting to create files in directories where you lack write permission.

Cause 5: Using Relative Paths Incorrectly

Navigate back to the project directory:

cd ~/project

Now, try to access a file using a relative path from the wrong location:

cd images
cat monthly_report.txt

Error output:

cat: monthly_report.txt: No such file or directory

This error occurs because the file is not in your current directory. You would need to use a proper relative path or an absolute path:

cat ../documents/reports/monthly_report.txt

Output:

This is a sample report

Return to the project directory for the next step:

cd ~/project

Troubleshooting 'No Such File or Directory' Errors

Now that we understand the common causes of this error, let's learn how to troubleshoot and resolve them.

Technique 1: Verify the File Path

When you encounter a 'no such file or directory' error, the first step is to verify the file path. You can use the ls command to list directory contents and check if files exist:

cd ~/project
ls -la documents/

Output:

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

Now, check the contents of the reports directory:

ls -la documents/reports/

Output:

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

This confirms that monthly_report.txt exists in the reports directory, not directly in the documents directory.

Technique 2: Use Tab Completion

Tab completion is a helpful feature that autocompletes file and directory names, reducing typing errors:

Start typing a partial path and press the Tab key:

cat documents/re[TAB]

After pressing Tab, it should complete to:

cat documents/reports/

Continue with another Tab:

cat documents/reports/mo[TAB]

This should complete to:

cat documents/reports/monthly_report.txt

Now press Enter to execute the command:

This is a sample report

Technique 3: Check File Permissions

If you suspect a permission issue, use ls -l to view file permissions:

ls -l documents/templates/

Output:

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, permissions are represented as follows:

  • The first character indicates the file type (- for regular file, d for directory)
  • The next three characters are owner permissions (read/write/execute)
  • The next three are group permissions
  • The final three are permissions for others

To modify permissions, use the chmod command:

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

Output:

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

Now you can write to the file:

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

Output:

This is template 2
Adding new content

Technique 4: Creating Missing Directories

If a directory in a path doesn't exist, you can create it using the mkdir command. The -p flag creates parent directories if they don't exist:

mkdir -p documents/archives/2023

Verify the new directory structure:

ls -la documents/archives/

Output:

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

Now you can create a file in this new directory:

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

Output:

This is an archived document

Technique 5: Using Find to Locate Files

If you're not sure where a file is located, use the find command:

find ~/project -name "*.txt"

Output:

/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

This command searches the entire ~/project directory for files with the .txt extension.

Preventing 'No Such File or Directory' Errors

Now that you know how to troubleshoot these errors, let's explore best practices to prevent them from occurring in the first place.

Best Practice 1: Use Absolute Paths for Scripts

When writing scripts or commands that will be run from different locations, use absolute paths:

Let's create a simple script that uses absolute paths:

cd ~/project
nano absolute_path_script.sh

Add the following content to the script:

#!/bin/bash
echo "Reading file using absolute path:"
cat /home/labex/project/documents/reports/monthly_report.txt

Save the file by pressing Ctrl+O, then Enter, and exit with Ctrl+X.

Make the script executable:

chmod +x absolute_path_script.sh

Run the script:

./absolute_path_script.sh

Output:

Reading file using absolute path:
This is a sample report

The script works because it uses an absolute path, regardless of where it's executed from.

Best Practice 2: Check If Files/Directories Exist Before Using Them

Create another script that checks if a file exists before attempting to use it:

nano file_check_script.sh

Add the following content:

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

## Check if file exists before using it
if [ -f "$FILE" ]; then
  echo "File exists, reading content:"
  cat "$FILE"
else
  echo "Error: $FILE does not exist"
fi

## Check for non-existent file
if [ -f "$NONEXISTENT_FILE" ]; then
  cat "$NONEXISTENT_FILE"
else
  echo "The file $NONEXISTENT_FILE does not exist"
  echo "Creating it now..."
  echo "This is a quarterly report" > "$NONEXISTENT_FILE"
  echo "File created successfully"
fi

Save and exit (Ctrl+O, Enter, Ctrl+X).

Make the script executable:

chmod +x file_check_script.sh

Run the script:

./file_check_script.sh

Output:

File exists, reading content:
This is a sample report
The file /home/labex/project/documents/reports/quarterly_report.txt does not exist
Creating it now...
File created successfully

Verify the new file was created:

cat documents/reports/quarterly_report.txt

Output:

This is a quarterly report

Best Practice 3: Organize Your Files Logically

A well-organized file structure helps prevent errors. Let's create a more organized structure for a new project:

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

This creates a directory with four subdirectories in one command.

Check the structure:

ls -la ~/project/new_project/

Output:

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

Create a README file in the project root to document the structure:

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

View the README:

cat ~/project/new_project/README.txt

Output:

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

Best Practice 4: Use Environment Variables for Common Paths

Environment variables can help manage paths more consistently:

nano ~/.zshrc

Add these lines at the end of the file:

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

Save and exit (Ctrl+O, Enter, Ctrl+X).

Apply the changes:

source ~/.zshrc

Now you can use these variables in commands:

echo "Accessing report using environment variable:"
cat $REPORTS_DIR/monthly_report.txt

Output:

Accessing report using environment variable:
This is a sample report

Create a script that uses these environment variables:

nano env_var_script.sh

Add the following content:

#!/bin/bash
echo "Reports directory is: $REPORTS_DIR"
echo "Files in reports directory:"
ls -la $REPORTS_DIR

Save, exit, and make executable:

chmod +x env_var_script.sh

Run the script:

./env_var_script.sh

Output:

Reports directory is: /home/labex/project/documents/reports
Files in reports directory:
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

Summary

In this lab, you have learned essential skills for managing files and directories in a Linux system:

  1. Understanding the Linux File System: You explored the hierarchical file structure, learned to navigate directories, and used both absolute and relative file paths.

  2. Common Causes of 'No Such File or Directory' Errors: You identified typical scenarios that lead to this error, including incorrect paths, non-existent files, case sensitivity issues, and permission problems.

  3. Troubleshooting Techniques: You practiced verifying file paths, using tab completion, checking file permissions, creating missing directories, and using the find command to locate files.

  4. Prevention Best Practices: You implemented strategies to prevent these errors, including using absolute paths in scripts, checking if files exist before using them, organizing files logically, and using environment variables for common paths.

These skills will help you work more efficiently with the Linux file system and avoid common errors that can interrupt your workflow. Remember that proper file and directory management is foundational to becoming proficient in Linux and other Unix-like operating systems.