linux nav

cd

Сменить текущую рабочую директорию (Change Directory)

Описание

cd (от Change Directory) — встроенная команда оболочки для перемещения между директориями файловой системы. Это одна из фундаментальных операций при работе в терминале: практически любой сеанс работы начинается с навигации к нужной директории через cd.

Поскольку cd должна менять рабочую директорию текущего процесса оболочки, она реализована как встроенная команда (builtin), а не внешняя утилита. Внешняя программа не может изменить рабочую директорию родительского процесса — поэтому /usr/bin/cd существует лишь формально и не имеет практического смысла.

Команда поддерживает специальные сокращения: ~ — домашняя директория пользователя, - — предыдущая директория, .. — родительская директория, . — текущая. Сочетание этих сокращений с Tab-автодополнением делает навигацию по файловой системе быстрой и удобной.

Синтаксис

cd [-L|-P] [-e] [ДИРЕКТОРИЯ]

Компоненты команды:

cd # -> $HOME (/home/user) cd ~ # то же самое cd /etc # абсолютный путь cd documents # относительный путь (от текущей) cd ../sibling # на уровень вверх, затем в sibling/ cd - # вернуться в предыдущую директорию cd ~otheruser # домашняя директория другого пользователя

Флаги и опции

Флаг / форма Описание
-L Логический переход (по умолчанию): символические ссылки остаются частью пути в $PWD
-P Физический переход: разрешает все симлинки до перехода, $PWD содержит реальный путь
-e Используется с -P: вернуть код ошибки, если не удаётся определить текущую директорию
~ Домашняя директория текущего пользователя (раскрывается в значение $HOME)
- Предыдущая рабочая директория (значение $OLDPWD); выводит путь перед переходом
.. Родительская директория относительно текущей
. Текущая директория (переход в то же место; полезен в скриптах для нормализации $PWD)
~username Домашняя директория указанного пользователя
$CDPATH Переменная окружения: список директорий для поиска, если указан относительный путь без /
$HOME Переменная окружения: директория назначения при cd без аргументов
$OLDPWD Переменная окружения: предыдущая директория; используется при cd -

Паттерны использования

Базовая навигация

Переходы на распространённые места файловой системы.

cd ~            # домой
cd /            # корень файловой системы
cd /etc         # системные конфиги
cd /var/log     # системные журналы
cd /tmp         # временные файлы

Относительные пути и переход вверх

Перемещение относительно текущей позиции.

cd ..           # на уровень вверх
cd ../..        # на два уровня вверх
cd ../../other  # вверх и вбок

# Если в /home/user/projects/app/src:
cd ..           # -> /home/user/projects/app
cd ../tests     # -> /home/user/projects/app/tests

Быстрое переключение между двумя директориями

Команда cd - — переключатель туда/обратно.

cd /var/log
cd /home/user/projects
cd -           # -> /var/log
cd -           # -> /home/user/projects
echo $OLDPWD   # /var/log

CDPATH — поиск по известным местам

Переходить к часто используемым директориям без полного пути.

# В ~/.bashrc:
export CDPATH="$HOME/projects:$HOME"

# Теперь из любой директории:
cd myapp        # найдёт ~/projects/myapp
cd Documents    # найдёт ~/Documents

pushd / popd — стек директорий

Когда нужно вернуться не в одно, а в несколько предыдущих мест.

pushd /var/log      # запомнить и перейти
pushd /etc/nginx    # запомнить и перейти
dirs               # показать стек
popd               # -> /var/log
popd               # -> исходная директория

Обработка путей с пробелами

Имена с пробелами требуют кавычек или экранирования.

cd "My Documents"         # в кавычках
cd My\ Documents          # с экранированием
cd '/home/user/my dir'    # одинарные кавычки

# В скрипте — всегда кавычки:
TARGET="/home/user/my dir"
cd "$TARGET"

Советы и предупреждения

Tab-автодополнение — лучший друг cd
Нажмите Tab после частичного имени директории — оболочка дополнит путь автоматически. Двойное нажатие Tab покажет все варианты. Это быстрее ручного набора и исключает опечатки.
Zsh autocd и autojump / zoxide
В Zsh включите опцию setopt AUTO_CD — тогда ввод имени директории без cd сам выполнит переход. Для «умного» перехода по истории установите zoxide (z dirname) или autojump (j dirname) — они прыгают к часто посещаемым директориям по неполному имени.
cd в скриптах: проверяйте успешность
Если cd не удалась (директория не существует или нет прав), скрипт продолжит выполнение в неожиданном месте. Всегда проверяйте результат: cd /target || exit 1 или используйте set -e в начале скрипта для остановки при любой ошибке.
cd не работает как внешняя команда
Запуск /usr/bin/cd /some/path или bash -c "cd /some/path" не изменит рабочую директорию текущей оболочки — изменение произойдёт только внутри дочернего процесса, который сразу завершится. Используйте только встроенную cd.