Какой командой сменить директорию в Linux
Что проверяют
Уверенно ли вы ходите по файловой системе стенда: логи, конфиги, каталог с автотестами. Команду знают все, поэтому оценивают детали: пути, спецсимволы, права. Следом часто спрашивают, почему cd внутри скрипта не меняет каталог в вашем терминале.
Как отвечать
Ответ: cd (change directory). Дальше коротко про формы:
- абсолютный путь:
cd /var/log/nginx, начинается с корня/и работает откуда угодно; - относительный путь:
cd tests/api, считается от текущего каталога; cd ..: на уровень выше,cd ../..на два;cdбез аргументов илиcd ~: домашний каталог пользователя;cd -: возврат в предыдущий каталог, путь при этом печатается;- пробелы в именах:
cd "Test Reports"илиcd Test\ Reports, иначе оболочка поймёт это как два аргумента.
Хорошо добавить, что cd это встроенная команда оболочки, а не отдельная программа. Скрипт запускается в дочернем процессе, меняет каталог себе и завершается, а ваш терминал остаётся на месте. Если переход должен сохраниться, скрипт подключают через source.
Для тестировщика полезны ещё два момента. Чтобы войти в каталог, нужно право на исполнение (x) для него, иначе будет Permission denied, даже если читать каталог можно. В Dockerfile каждая инструкция RUN выполняется в новой оболочке, поэтому RUN cd /app на следующие шаги не влияет, каталог задают через WORKDIR. Для частых переходов между двумя местами есть pushd и popd, а Tab дописывает путь и спасает от опечаток.
Где спотыкаются
Забывают, что Linux различает регистр. cd Logs и cd logs ведут в разные каталоги, и привычка из Windows заканчивается No such file or directory.
Пишут cd в одном шаге CI и ждут, что следующий шаг начнётся в том же каталоге. Во многих CI-системах каждый шаг стартует заново из рабочего каталога задачи.
Не экранируют пробелы и спецсимволы в пути и получают too many arguments или переход не туда.