linux-labs

Вики / Базовые команды

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

Команда bash · zsh БазовоеФайлы

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

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

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

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

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

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

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-автодополнение имён.

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-скрипта не меняет каталог родительской оболочки — это нормально.

cd dir ; cd .. ; cd ~        # туда · вверх · домой
cd -                         # назад в предыдущий
pushd dir ; popd ; dirs -v   # стек каталогов
"путь с пробелом"            # всегда в кавычках

См. также