Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

In Bash, cd changes the working directory of the current shell. Use cd .. to move to the parent directory, cd - to return to the previous one, and quote path variables—such as cd -- "$HOME/Project Files"—to handle spaces and paths beginning with a hyphen safely.

How to use cd in Linux

cd is a Bash builtin: it changes the current shell’s working directory. Because it changes the shell itself, it cannot be replaced by an ordinary external command; the Bash manual notes that builtins such as cd directly manipulate the shell.

Run cd without an operand to go to the directory in $HOME. Supply a path to change to another directory:

  • cd /var/log changes to an absolute path, which starts at /.
  • cd projects changes to a relative path, resolved from the current directory.
  • cd ./projects makes the current-directory starting point explicit.

For example, if your current directory is /home/lee, cd projects and cd ./projects both target /home/lee/projects.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How to move up or return to the previous directory

Move to the parent directory

Use cd .. to move to the parent of the current directory. The special path component .. means “parent”; it is subject to filesystem path validity and symlink behavior.

Switch between the current and previous directories

cd - changes to the directory held in $OLDPWD, usually the directory you were in before the last successful change. Bash prints the destination path when this succeeds. After a successful directory change, Bash sets $PWD to the new directory name and $OLDPWD to the directory you left.

How to handle spaces and paths beginning with a hyphen

Quote expansions that may contain spaces or shell-special characters so the shell passes the path as one argument. Use -- before a variable when a path might begin with a hyphen, preventing it from being interpreted as an option:

cd -- "$HOME/Project Files"
cd -- "$target"

-- marks the end of options; quoting preserves the path as a single argument. Both are useful when a path comes from a variable or user input.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Why cd may print an unexpected path

Bash can use CDPATH, a colon-separated list of directories, to search for a destination when the operand is non-absolute. An empty component in CDPATH represents the current directory. If Bash finds the destination through a non-empty CDPATH entry, a successful cd prints the resulting absolute pathname. That output can interfere with scripts that expect a quiet directory change.

Inspect the setting with:

printf '%sn' "$CDPATH"

For predictable behavior in automation, avoid exporting a broad CDPATH unless its search and output behavior is intentional.

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

Bash uses logical mode (-L) by default. The distinction matters when a path contains symbolic links and ..:

  • Logical mode: Bash processes .. before resolving symbolic links.
  • Physical mode: cd -P resolves symbolic links as it traverses the path, before processing ...

Use -P when you need navigation based on the physical filesystem location rather than the logical path through symlinks. To check the resulting path, use pwd -L for the logical name or pwd -P for the physical one. With cd -P -e, Bash also fails if it cannot determine the physical current directory after an otherwise successful change.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

How to use cd reliably in a script

Check the builtin’s status directly. It returns zero on success and non-zero on failure, so a script can stop rather than accidentally running later commands in the wrong directory:

if ! cd -- "$dir"; then
  printf 'cannot enter %sn' "$dir" >&2
  exit 1
fi

Run cd in the current shell when subsequent commands need to use the new directory. If it runs in a subshell—for example, as a component of a pipeline—the directory change does not affect the parent shell.

Fix common cd errors

  • No such file or directory: Check the spelling and inspect the current location with pwd and the target’s parent with ls. A relative path is resolved from wherever the shell currently is.
  • Permission denied: The user needs permission to search or traverse the target directory. Check directory permissions along the path.
  • A path with spaces fails: Quote the path or variable, such as cd -- "$dir".
  • A path is printed unexpectedly: Check CDPATH; a non-empty matching entry can make Bash print the destination.
  • A symlink leads somewhere unexpected: Compare cd -L and cd -P, then check the result with pwd -L or pwd -P.
  • A script does not stay in the new directory: Confirm that cd is running in the script’s current shell, not a subshell or pipeline component.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.