С чего начать Первые шаги трек · 15 ступеней
Linux Labs

cd — смена каталога

3 мин bash · zsh

Перемещение по файловой системе: cd, cd -, cd ~, cd .., pushd/popd, CDPATH.

Шпаргалка

8 команд Версия для печати
  • cd dir перейти в каталог
  • cd .. на уровень вверх
  • cd ~ домой
  • cd - назад в предыдущий
  • pushd dir перейти, запомнив прежний каталог в стеке
  • popd вернуться к предыдущему из стека
  • dirs -v показать стек каталогов
  • cd "путь с пробелом" путь с пробелом — всегда в кавычках

Обзор

cd (change directory) — встроенная команда оболочки: меняет текущий рабочий каталог. Это не отдельная программа, а builtin самого bash (поэтому у неё нет man cd — смотри help cd).

Где ты сейчас — показывает pwd; cd без аргументов вернёт домой.

Пути: . — текущий каталог, .. — родительский, ~ — домашний (/home/пользователь), / — корень, - — предыдущий каталог.

Ключи

4

У cd мало ключей — это builtin, а не отдельная программа с большим --help.

Ключ Что делает Пример
- Перейти в предыдущий рабочий каталог ($OLDPWD) и напечатать его. cd -
-L Следовать символическим ссылкам логически (учитывать `..` по пути ссылки). Поведение по умолчанию. cd -L /var/www/current
-P Разрешить символические ссылки физически — перейти в реальный каталог, `pwd` покажет настоящий путь. cd -P /var/www/current
-e Вместе с -P завершиться с ошибкой, если итоговый каталог не удалось определить. cd -Pe /var/www/current

Ничего не найдено. Попробуй запрос короче.

Рецепты

2

Примеры

bash
cd /etc                 # перейти по абсолютному пути
cd logs                 # по относительному (от текущего каталога)
cd ..                   # на уровень вверх
cd ../..                # на два уровня вверх
cd                      # в домашний каталог (то же, что cd ~)
cd ~                    # домашний каталог
cd ~user                # домашний каталог другого пользователя
cd -                    # вернуться в ПРЕДЫДУЩИЙ каталог (туда-сюда)
cd /var/log && ls       # перейти и сразу выполнить команду

cd - — самый частый трюк: прыгать между двумя каталогами (печатает, куда перешёл).

Хитрости

bash
pushd /var/log          # перейти и ЗАПОМНИТЬ прежний каталог в стек
pushd /etc/nginx        # ещё один — стек растёт
popd                    # вернуться к предыдущему из стека
dirs -v                 # показать стек каталогов с номерами

# CDPATH — «быстрые базы» для cd (как PATH, но для каталогов):
export CDPATH=".:/var:$HOME/projects"
cd nginx                # найдёт /var/log/nginx, даже если ты не там

В bash можно включить shopt -s autocd — тогда ввод одного пути без cd сам перейдёт в каталог. И cd понимает Tab-автодополнение имён.

Неполадки

4

cd: too many arguments

cd принимает один путь. Если в имени каталога пробел — заключи в кавычки: cd "My Folder" или экранируй: cd My\ Folder.

cd: not a directory

Целевой путь — файл, а не каталог. Проверь ls -ld путь.

cd: permission denied

Нет прав x (вход) на каталог. Нужен бит выполнения — см. chmod-chown.

«Перешёл в скрипте, а после него снова старый каталог»

Каждый процесс/скрипт имеет свой рабочий каталог. cd внутри bash-скрипта не меняет каталог родительской оболочки — это нормально.

Термины

1
домашний каталог home directory
Личный каталог пользователя, указанный в /etc/passwd, обычно /home/<имя>; у root — /root. Оболочка подставляет его вместо ~, путь хранится в переменной HOME. Ещё встречается в: useradd, Ограничения службы: User=, ProtectSystem, NoNewPrivileges, usermod, Пользователи и группы и ещё 3

См. также

  • files-basics — Навигация и файлы — ls, cd, cp, mv, rm, cat, less, head, tail, копипаст в терминале.
  • mc — Двухпанельный файловый менеджер в терминале: навигация, копирование, редактор, SFTP.
  • env-vars — env, export, $PATH, ~/.bashrc vs профили; почему «command not found».
Загрузка…