Абсолютная и относительная адресация. Команда cd

Часто выполняемыми задачами в командной строке являются просмотр содержимого каталога и переход в другой, т. е. изменение текущего каталога. В Bash по-умолчанию текущим является домашний каталог пользователя. Чтобы сделать текущим другой, используется команда cd.

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

В случае абсолютной адресации путь к каталогу указывается, начиная с корневого каталога, и далее вниз по дереву папок до требуемого. Так все следующие записи являются абсолютными адресами: /home/pl/Desktop, /boot, /etc/vim. Первый знак слэша (/) обозначает корневой каталог.

При относительной адресации путь к каталогу указывается, начиная с текущего каталога (другими словами, относительно текущего каталога). Когда используется относительная адресация, слэш никогда не бывает первым знаком. В случае относительного адреса начало может быть одним из следующих:

  • Точка в начале или отсутствие какого-либо спецзнака обозначают текущий каталог.

  • Двумя точками обозначается каталог на уровень выше текущего, т. е. родительский.

Примеры относительных адресов: ./Documents/images, Documents/images, ../test. Первые два адреса указывают на одно и то же: каталог (images), вложенный в каталог (Documents), который вложен в текущий. Точку-слэш имеет смысл ставить только перед исполняемыми файлами. Иначе Bash будет искать программу в системных каталогах, а не текущем.

Адрес ../test говорит, что надо подняться на один уровень выше текущего в иерархии папок. Уже оттуда перейти в имеющийся там каталог test.

Относительный адрес родительского каталога

Понятно, что в любую директорию можно перейти, используя как абсолютный, так относительный адрес. Однако уместность использования адресов зависит от ситуации. Так если требуется перейти в корневой каталог, то проще написать /, то есть абсолютный адрес. Если необходимо узнать содержимое каталога, вложенного в текущий, достаточно просто написать название нужной папки, то есть использовать относительную адресацию.

В командной оболочке Linux можно выделить еще один способ адресации – адрес относительно домашнего каталога пользователя. Обозначается домашний каталог знаком тильды (~). Так из любого каталога адрес ~ заставит обратиться в домашнюю папку. А адрес ~/Documents во вложенную в домашнюю.

В Bash для перемещения по дереву каталогов используется команда cd, которая в качестве аргумента принимает адрес места назначения.

Переход в каталог

В примере выше, используя относительную адресацию, мы переходим в каталог bin. Обратим внимание, что после перехода изменилось приглашение командной строки. Теперь в нем указан адрес относительно домашнего каталога. В папке bin мы запускаем скрипт pycharm.sh. Здесь также используется относительная адресация, но через точку, обозначающую текущий каталог.

Переход с абсолютным адресом

Если команде cd не передавать аргумент, то она сделает текущим домашний каталог пользователя, где бы вы до этого не находились. На скрине выше с помощью абсолютного адреса мы переходим в каталог /opt/google. После этого в приглашении Bash фигурирует абсолютный адрес.

Однако даже если вы используете абсолютную адресацию, но каталог находится в домашней папке пользователя, не важно на какой глубине, то приглашение Bash будет содержать адрес относительно домашнего каталога, т. е. через тильду.

Переход в домашний каталог

Следует помнить одну полезную особенность – это автодополнение при нажатии клавиши Tab. Для адресов оно работает также как для команд.

Вопросы

  1. Вы находитесь в домашнем каталоге. Где вы окажитесь после выполнения команды cd ../..?

  2. На ваш взгляд, какой может быть смысл в том, что при автодополнении Bash подставляет слэш в конце адреса? Например, сработает и так: cd programs. Но Bash предпочтет cd programs/.

Курс с ответами к заданиям и дополнительными уроками:
android-приложение, pdf-версия.