cd
Сменить текущую рабочую директорию (Change Directory)
Описание
cd (от Change Directory) — встроенная команда оболочки для перемещения между
директориями файловой системы. Это одна из фундаментальных операций при работе в терминале: практически
любой сеанс работы начинается с навигации к нужной директории через cd.
Поскольку cd должна менять рабочую директорию текущего процесса оболочки, она
реализована как встроенная команда (builtin), а не внешняя утилита. Внешняя программа
не может изменить рабочую директорию родительского процесса — поэтому /usr/bin/cd
существует лишь формально и не имеет практического смысла.
Команда поддерживает специальные сокращения: ~ — домашняя директория пользователя,
- — предыдущая директория, .. — родительская директория, . — текущая.
Сочетание этих сокращений с Tab-автодополнением делает навигацию по файловой системе быстрой и удобной.
Синтаксис
Компоненты команды:
- cd — сама команда (встроенная в оболочку).
- -L — логический переход: символические ссылки в пути сохраняются (поведение по умолчанию).
- -P — физический переход: разрешает символические ссылки перед переходом.
- -e — с
-P: завершить с ошибкой, если текущую директорию определить невозможно. - [ДИРЕКТОРИЯ] — путь назначения. Если не указан — переход в домашнюю директорию (
$HOME).
Флаги и опции
| Флаг / форма | Описание |
|---|---|
-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 после частичного имени директории — оболочка дополнит путь автоматически. Двойное нажатие Tab покажет все варианты. Это быстрее ручного набора и исключает опечатки.
В Zsh включите опцию
setopt AUTO_CD — тогда ввод имени директории без cd
сам выполнит переход. Для «умного» перехода по истории установите zoxide (z dirname)
или autojump (j dirname) — они прыгают к часто посещаемым директориям по
неполному имени.
Если
cd не удалась (директория не существует или нет прав), скрипт продолжит выполнение
в неожиданном месте. Всегда проверяйте результат: cd /target || exit 1 или используйте
set -e в начале скрипта для остановки при любой ошибке.
Запуск
/usr/bin/cd /some/path или bash -c "cd /some/path" не изменит
рабочую директорию текущей оболочки — изменение произойдёт только внутри дочернего процесса,
который сразу завершится. Используйте только встроенную cd.