====== Разница между абсолютным и относительным путем ======
----
В Linux файлы и каталоги расположены в иерархической структуре, которая начинается с корневого каталога **/**. При работе с объектами файловой системы их местоположение можно указывать двумя способами: с помощью абсолютного или относительного пути.
===== Что такое абсолютный путь =====
Абсолютный путь указывает полное расположение файла или каталога, начиная с корневого каталога **/**. Он всегда начинается со знака / и не зависит от того, где пользователь находится в данный момент в файловой системе. Благодаря этому абсолютные пути считаются наиболее надежным способом указания местоположения объектов:
* Независимо от текущего рабочего каталога, абсолютный путь всегда указывает на один и тот же ресурс. Например, **/etc/passwd** ссылается на один и тот же файл, будь Вы в папке **/home/kirill** или в **/var/log**.
* Так как абсолютные пути не зависят от местоположения пользователя, они широко применяются в конфигурационных файлах, системных службах и скриптах, запускаемых автоматически.
* Доступ ко многим важным файлам Linux (например, **/etc/hosts** или **/var/log/syslog**) осуществляется именно через абсолютные пути - это гарантирует корректность работы команд в непредсказуемых средах.
Предположим, мы находимся в домашнем каталоге пользователя **/home/kirill**. Нам нужно просмотреть содержимое системного файла **passwd**, который находится в каталоге **/etc**. Поскольку файл находится в другой части файловой системы, удобнее использовать абсолютный путь к нему:
nano /etc/passwd
Вывод в терминале:
{{ :linux:the-difference-between-the-absolute-and-relative_path-screan-01.jpg |}}
Аналогично, абсолютные пути применяются для перемещения файла из одного каталога в другой. Например:
mv /home/kirill/file.txt /etc
Абсолютные пути особенно часто используются, когда нужно перейти в каталог, находящийся в другой части файловой системы, вне зависимости от текущего рабочего каталога.
Допустим, мы находимся в домашнем каталоге пользователя **/home/kirill**, но хотим перейти в системный каталог **/etc**. Поскольку **/etc** находится в другой ветке файловой системы, следует использовать абсолютный путь:
cd /etc
Вывод в терминале:
kirill@NEO-M136:~$ cd /etc
kirill@NEO-M136:/etc$
===== Что такое относительный путь =====
Относительный путь указывает расположение файла или каталога относительно текущего рабочего каталога. В отличие от абсолютного, он не начинается с **/** и зависит от того, где вы находитесь в данный момент. Ключевые особенности относительных путей:
* Путь строится от текущего каталога. Например, **Документы/report.txt** будет означать разные файлы, если Вы находитесь в **/home/kirill** или **/var/log**.
* Нет необходимости указывать полный путь от корня, если Вы уже находитесь в нужной ветке каталогов.
* Особенно удобен для проектов и скриптов, которые расположены внутри одной структуры каталогов.
Допустим, в текущем каталоге есть папка **Видео**. Чтобы в нее перейти, не обязательно писать абсолютный путь - можно воспользоваться относительным:
cd Видео
Вывод в терминале:
{{ :linux:the-difference-between-the-absolute-and-relative_path-screan-02.jpg |}}
В текущем рабочем каталоге есть каталог Документы, а в нем - файл file3.txt. Поскольку этот документ находится в той же ветке файловой системы, что и текущий каталог, можно использовать относительный путь для доступа к нему:
cat Документы/file3.txt
Вывод в терминале:
{{ :linux:the-difference-between-the-absolute-and-relative_path-screan-03.jpg |}}
Однако, если файл или каталог расположены в разных директориях, не связанных между собой, использовать относительный путь нельзя. Иначе команда может обратиться к другому объекту файловой системы или вызвать ошибку.
Например, если мы находимся в домашнем каталоге **/home/kirill** и хотим перейти в системный каталог **etc**, попробуем применить относительный путь:
cd etc
Вывод в терминале:
bash: cd: etc: Нет такого файла или каталога
Как видите, команда выдаёт ошибку, так как прямого доступа к каталогу **/etc** из текущей директории нет.