Команда cd. Абсолютная и относительная адресация
Часто выполняемыми задачами в командной строке являются просмотр содержимого каталога и переход в другой, т. е. изменение текущего каталога. В Bash по-умолчанию текущим является домашний каталог пользователя. Чтобы сделать текущим другой, используется команда cd .
Ее применение аналогично тому, когда в графическом режиме вы переходите в разные папки с помощью вашего обычного файлового менеджера (файлового браузера). Текущей папкой можно считать ту, которую вы открыли в данный момент.
В качестве аргумента команде cd передается адрес директории, в которую мы хотим перейти (которую хотим сделать текущей). Адрес может быть задан двумя способами: с помощью абсолютной или относительной адресации.
В случае абсолютной адресации путь к каталогу указывается, начиная с корневого каталога, и далее вниз по дереву папок до требуемого. Так все следующие записи являются абсолютными адресами: /home/pl/Desktop , /boot , /etc/vim . Первый знак слэша ( / ) обозначает корневой каталог.
При относительной адресации путь к каталогу указывается, начиная с текущего каталога (другими словами, относительно текущего каталога). Когда используется относительная адресация, слэш никогда не бывает первым знаком. В случае относительного адреса начало может быть одним из следующих:
- Точка в начале или отсутствие какого-либо спецзнака обозначают текущий каталог.
- Двумя точками обозначается каталог на уровень выше текущего, т. е. родительский.
Примеры относительных адресов: ./Documents/images , Documents/images , ../test . Первые два адреса указывают на одно и то же: каталог ( images ), вложенный в каталог ( Documents ), который вложен в текущий. Точку-слэш имеет смысл ставить только перед исполняемыми файлами. Иначе Bash будет искать программу в системных каталогах, а не текущем.
Адрес ../test говорит, что надо подняться на один уровень выше текущего в иерархии папок. Уже оттуда перейти в имеющийся там каталог test .
В любую директорию можно перейти, используя как абсолютный, так относительный адрес. Однако уместность использования адресов зависит от ситуации. Так если требуется перейти в корневой каталог, то проще написать / , то есть абсолютный адрес. Если необходимо узнать содержимое каталога, вложенного в текущий, достаточно просто написать название нужной папки, то есть использовать относительную адресацию.
В командной оболочке Linux можно выделить еще один способ адресации – адрес относительно домашнего каталога пользователя. Обозначается домашний каталог знаком тильды ( ~ ). Так из любого каталога адрес ~ заставит обратиться в домашнюю папку. А адрес ~/Documents во вложенную в домашнюю.
Вернемся к команде cd . В Bash ее используют для перемещения по дереву каталогов, передавая ей в качестве аргумента адрес места назначения.
В примере выше, используя относительную адресацию, мы переходим в каталог bin . Обратим внимание, что после перехода изменилось приглашение командной строки. Теперь в нем указан адрес относительно домашнего каталога. В папке bin мы запускаем скрипт pycharm.sh . Здесь также используется относительная адресация, но через точку, обозначающую текущий каталог.

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

Следует помнить одну полезную особенность – это автодополнение при нажатии клавиши Tab . Для адресов оно работает также как для команд.
- Вы находитесь в домашнем каталоге. Где вы окажитесь после выполнения команды cd ../.. ?
- На ваш взгляд, какой может быть смысл в том, что при автодополнении Bash подставляет слэш в конце адреса? Например, сработает и так: cd programs . Но Bash предпочтет cd programs/ .
Курс с ответами к заданиям и дополнительными уроками в PDF
X Скрыть Наверх
Введение в Linux и Bash. Курс
Относительный и абсолютный путь к файлу
В данном уроке мы объясним новичкам, что такое абсолютный и относительный путь к файлу, а также в каком случае какой из них лучше использовать. Если вы уже знакомы с данной темой, вы можете переходить к следующему уроку.
Итак, начнем с определения самого термина «путь»:
Путь (англ. path) — набор символов, показывающий расположение файла в файловой системе, адрес каталога.
Википедия
Если говорить о сайтах, то путь — это то же, что и ссылка. Ссылки могут быть абсолютными и относительными. Рассмотрим оба варианта более подробно.
Что такое абсолютный путь к файлу
Абсолютный адрес ссылки на файл включает в себя протокол (например, http:// ), имя сайта в Сети, подкаталог (или несколько подкаталогов), название файла. Пример того, как выглядит абсолютный URL:
Абсолютный путь можно использовать в CSS. Например, чтобы задать рисунок в качестве фона, вы можете взять абсолютный URL к файлу с изображением И указать его в таблице стилей:
background-image: url(http://www.example.com/img/bg.png);
Абсолютная ссылка всегда будет указывать на одно и то же место, независимо от того, где расположен содержащий ее документ (в нашем случае таблица стилей). Чего не скажешь об относительной ссылке.
Что такое относительный путь к файлу
С относительным адресом всё намного интереснее — он может отсчитываться как от корня сайта, так и от текущего документа. Корневой относительный путь — это путь, который указывает на расположение файла относительно корневого каталога сайта. В этом случае адрес не содержит ни протокола, ни имени домена, и начинается со знака слэша / , который указывает на корневую папку. Выглядит этот адрес так:
background-image: url(/img/bg.png);
Как легко определить корневой относительный адрес? Просто возьмите абсолютную ссылку и уберите из нее протокол и название домена, оставив слэш и все символы, которые идут дальше.
Относительный путь к файлу от документа — это путь к файлу относительно текущего документа. Такой адрес зависит от расположения файла, в котором он записан. Так, когда относительная ссылка указывается в таблице стилей, она рассчитывает путь к файлу, отталкиваясь от таблицы стилей, а не от текущей веб-страницы либо корневой папки. Приведем несколько примеров.
Пример I

Если наша таблица стилей style.css и файл с фоновым рисунком bg.png находятся в одной папке (не обязательно корневой), то относительный путь от таблицы до рисунка будет выглядеть так:
background-image: url(bg.png); /* вы просто пишете имя файла */
Пример II

Если таблица стилей находится в корне, а рисунок — в папке img , относительная ссылка будет таковой:
background-image: url(img/bg.png); /* слэш в начале не нужен */
Пример III

Если таблица стилей находится в папке, а рисунок соседствует с этой папкой, то относительный путь будет таким:
background-image: url(../bg.png); /* две точки — подняться на один уровень */
Пример IV

Если таблица стилей находится в двух папках, а рисунок соседствует с первой папкой, то относительный путь будет следующий:
background-image: url(../../bg.png); /* поднимаемся на два уровня */
Две точки и слэш в начале относительного пути означают подъем на один уровень вверх. В зависимости от количества уровней (каталогов), на которые нужно подняться, необходимо прописать нужное количество точек со слэшом. К примеру, если таблица стилей лежит не в двух, а в четырех папках, запись, соответственно, будет следующей:
background-image: url(../../../../bg.png);
В том случае, когда рисунок спрятан в папку img , а таблица стилей — в папку css , вам понадобится выйти из папки css и зайти в папку img . Вот так:
background-image: url(../img/bg.png);
Если папок несколько, необходимо также прописать их. Изменим предыдущий пример: представим, что в папке img есть еще одна папка backgrounds , в которой лежит наш рисунок. Относительный путь будет таким:
background-image: url(../img/backgrounds/bg.png);
Какой путь лучше использовать
Абсолютный адрес ссылки понадобится использовать, если файл, на который вы ссылаетесь, находится на другом сайте. В пределах одного сайта абсолютный путь практически не используется (хоть он и будет работать). Это связано с несколькими моментами: во-первых, такие ссылки могут быть весьма громоздкими, а во-вторых, если имя домена изменится, то возникнет проблема — все ссылки будут вести на старый домен, что может повлечь за собой множество ошибок и битых ссылок.
Корневой относительный путь будет работать на веб-сервере, но он бесполезен при разработке на локальном компьютере. Но преимущество этого типа ссылок в том, что вы можете перемещать свою таблицу стилей в любую папку сайта и не бояться, что адреса фоновых изображений станут нерабочими.
Относительный путь от документа — наилучший вариант при веб-разработке на локальной машине без использования сервера. В браузере вы сможете нормально просматривать веб-страницы, хранящиеся на вашем компьютере, и адреса файлов будут работать. Они будут работать и на живом сайте, но с одним условием — если не перемещать таблицу стилей в другое место (иначе придется корректировать пути).
Попробуйте потренироваться в использовании относительных путей как на локальном компьютере, так и на веб-сервере. Понимание того, как это работает, непременно пригодится вам в любом проекте.
Далее в учебнике: свойство background-repeat — управление повтором фонового изображения.
Что такое абсолютный и относительный путь к файлу
Всё дело в том, что в разных ситуациях нам нужно указывать абсолютный путь к файлу (длинная запись), а в других — относительный (короткий). Посмотрим, что это — во имя компьютерной грамотности.
Абсолютный путь к файлу
Абсолютный (он же полный) путь — это когда мы указываем все диски и папки, в которые нужно зайти, чтобы добраться до нужного файла.
В Windows всё начинается с диска — это может быть C:, D: или диск с любой другой буквой. Если на диске C: сделать папку Thecode, внутри неё — папку Media, а в Media положить файл «статья.txt», то абсолютный путь к этому файлу будет такой:
Полный путь к файлу в Windows формируется так: Диск → все вложенные папки → имя файла. Обратите внимание — названия дисков, папок и файлов отделяются друг от друга обратной косой чертой.
❌ C\Thecode\Media\статья.txt ← пропущено двоеточие после буквы диска.
❌ C: Thecode Media статья.txt ← нет разделителей между названиями папок и файлов.
❌ C:\Thecode\Media ← это путь к папке, но имя файла не указано.
В MacOS у дисков нет отдельной назначенной буквы, поэтому всё начинается с корневой папки /, внутри которой и находятся все остальные папки.
Кстати, в MacOS, Linux и любой UNIX-подобной файловой системе все диски — это тоже папки. Например, когда мы делали скрипт для бэкапа, то флешка с названием WIN10_64 находилась по такому адресу: /Volumes/WIN10_64. А всё потому, что все новые диски по умолчанию подключаются как папки внутри папки /Volumes.
Ещё одно отличие MacOS и Linux в том, что вместо обратной косой черты используется просто косая черта, у которой наклон в другую сторону: /. Всё остальное работает по тому же принципу: в абсолютном пути мы собираем все папки, которые нужно пройти, начиная с корня.
Например, если у нас есть в документах папка Notes, внутри которой лежит markdown-файл с задачами на день tasks.md, то полный путь к нему будет в MacOS выглядеть так:

Когда скрипт или программа встречают абсолютный путь, они точно знают, где взять конкретный файл. Например, почти все ссылки в интернете, которые ведут с сайта на сайт, — абсолютные, чтобы браузер точно знал, где взять нужный файл со страницей.
Но если вы сделали проект на своём компьютере и использовали абсолютные пути, то при запуске на другом компьютере он может выдать ошибку, если файлы не будут лежать в точно таких же папках и дисках. Поэтому в такой ситуации лучше использовать относительный путь.
Относительный путь к файлу
Относительный путь — это путь к файлу относительно текущего каталога. Текущий каталог — это тот, в котором запускается скрипт, программа или открывается страница в браузере.
Например, если мы в папку Notes из примера выше положим файлы нашего калькулятора на JavaScript, то абсолютные пути к каждому файлу будут выглядеть так:
/Users/mike/Documents/Notes/index.html
/Users/mike/Documents/Notes/style.css
/Users/mike/Documents/Notes/script.js
Видно, что путь к файлу отличается только именем, потому что они все лежат в одной папке. В этом случае используют относительный путь к файлу, просто указывая его имя:
index.html
style.css
script.js
Когда браузер встретит такой путь, он возьмёт путь к каталогу, где лежит страница, и в нём будет искать эти файлы. А если нам понадобится файл data.json из папки Documents, которая лежит уровнем выше, то мы можем обратиться к нему так:
Первая точка означает текущий каталог, вторая — на уровень выше, а косая черта — что нам нужно зайти в тот каталог и взять оттуда файл data.json.

Когда что использовать
В наших проектах при подключении файлов скриптов или стилей мы используем относительный путь, потому что они лежат в той же папке, что и веб-страница для браузера. А вот когда мы подключаем скрипты из интернета, то указываем полный путь, потому что они лежат не в нашей папке, а на своём сервере.
Общее правило будет такое: если вы работаете со своими файлами, лучше указывать относительный путь, а если нужен чужой файл из интернета — то абсолютный.
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Текущая директория в Python
Как в Python — программе узнать путь до текущей директории со скриптом. Я знаю, что для этого требуется библиотека os, но там столько различных классов и функций, что можно пол дня убить на поиски.
Отслеживать
52.2k 11 11 золотых знаков 108 108 серебряных знаков 312 312 бронзовых знаков
задан 15 июн 2016 в 12:24
7,708 17 17 золотых знаков 70 70 серебряных знаков 132 132 бронзовых знака
связанный вопрос: Find current directory and file’s directory
26 ноя 2016 в 22:54
ассоциация: stackoverflow.com/questions/5137497/…
2 мар 2017 в 12:37
pwd — отображает текущую рабочую директорию
23 фев 2018 в 8:08
5 ответов 5
Сортировка: Сброс на вариант по умолчанию
Если вы запускаете скрипт C:\Scripts\script.py из D:\work папки:
D:\work> py C:\Scripts\script.py
- D:\work — это текущая рабочая директория на момент старта скрипта. open(‘file.txt’) будет пытаться открыть D:\work\file.txt файл
- C:\Scripts — это директория со скриптом.
Текущая рабочая директория
Текущая рабочая директория возвращается os.getcwd() функцией, где CWD это Current Working Directory («текущая рабочая директория»). os.getcwdb() возвращает путь в виде байт. Происхождение функции от POSIX getcwd(3) . Другие способы могут вернуть разные результаты в зависимости от настроек доступа промежуточных директорий, общей длины (от платформы зависит) итд—не изобретайте своих способов, если не осознаёте всех последствий возможного изменения в поведении функции. Также нетрадиционные способы получения рабочей директории могут ухудшить читаемость другими Питон-программистами. Из The Zen of Python :
There should be one— and preferably only one —obvious way to do it.
По умолчанию относительные пути используют именно эту директорию, поэтому явно вызывать os.getcwd() редко нужно. Например, open(‘file.txt’) вызов открывает файл ‘file.txt’ в текущей директории. Если необходимо передать полный путь в виде строки, то можно использовать os.path.abspath(‘file.txt’) — getcwd() снова явно не используется.
Path.cwd() из pathlib модуля возвращает путь к текущей директории как объект c разными полезными и удобными методами такими как .glob(‘**/*.py’) .
Директория со скриптом
Текущая рабочая директория может отличаться от директории с текущим Питон-скриптом. Часто, но не всегда можно os.path.dirname(os.path.abspath(__file__)) использовать, чтобы получить директорию с текущим Питон скриптом, но это не всегда работает. Посмотрите на get_script_dir() функцию, которая поддерживает более общий случай.
Если хочется получить данные из файла, расположенного относительно установленного Питон-модуля, то используйте pkgutil.get_data() или setuptools’ pkg_resources.resource_string() вместо построения путей c помощью __file__ . Это работает даже, если ваш пакет упакован в архив. В Python 3.7 появился importlib.resources модуль. К примеру, если у вас есть Питон пакет data внутри которого лежит файл.txt , то чтобы достать текст:
import importlib.resources text = importlib.resources.read_text('data', 'файл.txt')
Если вы хотите найти место куда пользовательские данные можно положить, то appdirs модуль предоставляет переносимый способ:
import appdirs # $ pip install appdirs user_data_dir = appdirs.user_data_dir("Название приложения", "Кто создал")
Разные платформы (Windows, MacOS, Linux) используют разные соглашения, appdirs позволяет не плодить сущностей и использовать на каждой платформе подходящие директории.
