Чем абсолютный путь отличается от относительного в Linux?
Постоянно встречаю абсолютные и относительные пути, и команды то работают, то выдают «No such file or directory». Не понимаю разницу между путём с / в начале и без него. Объясните на примере.
2 ответа
Путь — это «адрес» файла. Бывает двух видов, и в этом вся суть.
Абсолютный путь начинается с корня / и описывает полный адрес от самого верха файловой системы. Он работает из любой папки, потому что не зависит от того, где ты стоишь:
/home/user/projects/app/config.py
Куда бы ты ни перешёл, этот путь всегда укажет на тот же файл.
Относительный путь отсчитывается от текущей папки (от того, где ты сейчас, — проверь через pwd). Он не начинается со /:
config.py
projects/app/config.py
Если ты в /home/user, то относительный projects/app/config.py ведёт к тому же файлу, что абсолютный выше.
Специальные обозначения для относительных путей:
.— текущая папка...— папка на уровень выше (родительская).~— домашняя папка (это, по сути, сокращение абсолютного пути вроде/home/user).
Например cd ../config = «поднимись на уровень выше и зайди в config».
Частая ошибка: относительный путь работает в одной папке и ломается «No such file or directory» в другой — потому что он считается от текущего места, а ты перешёл в другую папку. Если хочешь, чтобы путь работал везде одинаково (в скрипте, в cron) — используй абсолютный путь. Если важна переносимость внутри проекта — относительный.
Простая аналогия с адресом:
- Абсолютный путь — это полный почтовый адрес: «город, улица, дом 5». Найдёшь откуда угодно.
- Относительный путь — это «соседний дом справа». Понятно, только если знаешь, где стоишь сейчас.
Быстрый признак на глаз: путь начинается со / → абсолютный. Начинается с имени, ., .. или ~ → относительный (зависит от текущей папки).