Skip to Content

1. Introduction

Navigating directories in a Linux terminal is a core skill, and the cd command is the primary tool for this task. It changes your current working directory, the default location where the shell looks for files or creates new ones unless a specific path is provided. cd stands for Change Directory, and mastering it is essential for efficient command-line navigation. This guide covers basic usage, advanced features like symbolic link handling, and practical examples to help you move through the filesystem with confidence.

2. Basic Syntax

The cd command has a straightforward syntax:

# Change to a specified directory $ cd [OPTIONS] [directory_path]
  • [OPTIONS]: Typically limited to -L (logical path, default) and -P (physical path), discussed later.
  • [directory_path]: The target directory, which can be:
    • Absolute Path: Starts from the root (/), e.g., /var/log.
    • Relative Path: Starts from the current directory, e.g., Documents, ../images.
    • Special Shortcut: Symbols like ~ (home), - (previous directory), or .. (parent directory).

3. Common Usage and Examples

Below are practical examples demonstrating how to use cd. Use the pwd command to verify your current location.

3.1 Changing to a Subdirectory (Relative Path)

To move into a Documents directory within /home/user:

# Move into Documents $ cd Documents # Verify the new location $ pwd /home/user/Documents

3.2 Changing to a Specific Directory (Absolute Path)

To navigate directly to /etc/nginx, regardless of your current location:

# Move to /etc/nginx $ cd /etc/nginx # Verify the new location $ pwd /etc/nginx

3.3 Going “Up” One Level (Parent Directory ..)

The .. path refers to the parent directory of your current location.

# Assume current directory is /home/user/Documents $ pwd /home/user/Documents # Move up to /home/user $ cd .. # Verify $ pwd /home/user

You can chain .. to move up multiple levels, e.g., cd ../.. moves up two directories.

3.4 Going to Your Home Directory (~ or No Argument)

You can return to your home directory in two ways:

Method 1: No Argument

Typing cd alone takes you to your home directory:

# Assume current location is /tmp $ pwd /tmp # Go to home directory $ cd # Verify $ pwd /home/user

Method 2: Using the Tilde ~

The ~ symbol represents your home directory:

# Assume current location is /var/log $ pwd /var/log # Go to home directory $ cd ~ # Verify $ pwd /home/user

3.5 Going to the Previous Working Directory (-)

The - path switches to the directory you were in immediately before the current one, useful for toggling between locations.

# Start in home directory $ cd ~ $ pwd /home/user # Move to /etc $ cd /etc $ pwd /etc # Return to previous directory (/home/user) $ cd - /home/user # Bash typically prints the new directory # Toggle back to /etc $ cd - /etc

3.6 Handling Paths with Spaces or Special Characters

For directory names with spaces or special characters (e.g., *, ?, &), use quotes or escape the spaces.

First, create a directory with spaces:

# Create a directory with spaces $ mkdir "My Work Files"

Navigate to it:

  • Using quotes (recommended):
# Navigate using quotes $ cd "My Work Files" $ pwd /home/user/My Work Files
  • Using escaping:
# Navigate using escaped spaces $ cd My\ Work\ Files $ pwd /home/user/My Work Files
  • Incorrect approach (without quotes or escaping):
# Attempt without quotes or escaping $ cd My Work Files bash: cd: too many arguments

Tip: Use Tab completion to automatically handle quotes or escaping for complex names.

3.7 Going to the Root Directory (/)

To navigate to the filesystem’s root:

# Move to root directory $ cd / # Verify $ pwd /

3.8 Going to Another User’s Home Directory (~username)

To navigate to another user’s home directory (e.g., bob), you need execute permissions on their home directory:

# Attempt to navigate to bob's home $ cd ~bob $ pwd /home/bob # Succeeds if permissions allow, otherwise fails

4. Logical vs. Physical Paths (-L vs. -P)

The cd command offers two options for handling symbolic links (symlinks):

  • -L (Logical, Default): Uses the logical path, including symlink names in the path.
  • -P (Physical): Resolves symlinks to the actual directory location.

Example:

Set up a symlink scenario:

# Set up in home directory $ cd ~ $ mkdir real_target_dir $ ln -s real_target_dir symlink_to_dir $ ls -l symlink_to_dir lrwxrwxrwx 1 user user 15 May 3 16:30 symlink_to_dir -> real_target_dir
  • Logical path (-L, default):
# Navigate using logical path $ cd symlink_to_dir $ pwd # Equivalent to pwd -L /home/user/symlink_to_dir # Return to home $ cd ..
  • Physical path (-P):
# Navigate using physical path $ cd -P symlink_to_dir $ pwd # Equivalent to pwd -P /home/user/real_target_dir

Using -P is useful in scripts to ensure you’re working with the actual directory, avoiding symlink-related issues.

5. The $PWD Environment Variable

Shells maintain a PWD environment variable that stores the current working directory’s logical path.

# Assume current directory is /home/user/Documents $ echo $PWD /home/user/Documents

While $PWD often matches pwd -L, using pwd -P is more reliable in scripts needing the physical path.

6. Important Considerations

  • Permissions: You need execute (x) permission on a directory and its parents to cd into it.
  • Shell Built-in: cd is a shell built-in, necessary for changing the shell’s environment, unlike external commands.
  • Case Sensitivity: Linux paths are case-sensitive; Documents and documents are distinct.
  • Tab Completion: Pressing Tab while typing paths helps avoid errors and auto-escapes special characters.

7. Frequently Asked Questions (FAQ)

7.1 How do I go back to my home directory quickly?

  • Type cd or cd ~ and press Enter.

7.2 How do I go back to the directory I was just in?

  • Use cd -.

7.3 Why does cd My Folder not work if the directory exists?

  • The shell interprets My and Folder as separate arguments. Use quotes (cd "My Folder") or escape the space (cd My\ Folder).

7.4 What’s the difference between cd /some/path and cd some/path?

  • /some/path is an absolute path from the root (/).
  • some/path is a relative path from the current directory.

7.5 Can cd fail?

  • Yes, if:
    • The directory doesn’t exist.
    • You lack execute (x) permission.
    • The path is a file, not a directory.
    • Multiple arguments are provided (e.g., unquoted spaces).

7.6 What is the difference between cd -L and cd -P?

  • -L (default) retains symlink names in the path.
  • -P resolves symlinks to the physical directory.

8. Conclusion

The cd command is essential for navigating the Linux filesystem. By mastering absolute and relative paths, shortcuts like ~, .., and -, and options like -L and -P for symlink handling, you can move efficiently and avoid common pitfalls. Paired with pwd for orientation and ls for directory contents, cd is a cornerstone of command-line proficiency.

9. cd Command: Reference Table of Key Options

(Change directory)

Option(s)DescriptionExample CommandUse Case
(no option)Change to home directory, or to specified directorycd / cd DocumentsNavigate the filesystem
~Shortcut for the current user’s home directorycd ~/projectsQuickly navigate relative to home
-Change to the previous working directorycd -Toggle between the two most recent directories
..Change to the parent directorycd ..Move one level up in the directory tree
-LForce following symbolic links (Logical path - often default)cd -L link_dirNavigate using the symlink path (usually the default)
-PResolve symbolic links before traversing (Physical path)cd -P link_dirNavigate to the actual directory a symlink points to

(Note: cd is a shell built-in. -L and -P control how it handles symlinks during the directory change and how $PWD might be updated.)