Абсолютные и относительные пути
Тема дорожной карты · Linux & Unix Fundamentals
Абсолютные пути начинаются с символа / и указывают на конкретное местоположение в файловой системе, независимо от текущей рабочей директории. Примеры абсолютных путей включают /var/log/syslog или /home/user/documents. Относительные пути, напротив, используются относительно текущей рабочей директории и могут включать сокращения, такие как . для текущей директории, .. для родительской директории, ~ для домашней директории пользователя и - для предыдущей директории, которую можно использовать с командой cd. В контексте написания скриптов использование абсолютных путей или вычисление их с помощью команд readlink -f или realpath позволяет избежать проблем, когда скрипт запускается из другой директории или из cron-заданий.
Кроме того, необходимо учитывать влияние символьных ссылок (symlinks) на поведение команд. Команда pwd -P возвращает абсолютный путь, игнорируя символические ссылки, в то время как pwd -L возвращает путь, который может включать символические ссылки. Это может быть критически важно при работе с файлами и директориями, особенно если они содержат символические ссылки. Также важно помнить, что пути с пробелами должны быть заключены в кавычки, чтобы избежать неправильного распознавания аргументов командной строки.
Как это работает
Абсолютные и относительные пути относятся к одному корневому дереву файловой системы, начинающемуся с корневого каталога /. В Linux и Unix системах точки монтирования, такие как диски, разделы и сетевые шары, подключаются как поддиректории корневого каталога. Это означает, что нет необходимости использовать буквы дисков, как это делается в Windows (C:/D:). В стандартной раскладке файловой системы (Filesystem Hierarchy Standard, FHS) используются определенные директории для различных типов данных и конфигураций. Например, /etc используется для хранения конфигурационных файлов, /var для хранения изменяемых данных, таких как логи и очереди, /usr для хранения программ, доступных для чтения, /opt для сторонних программ, /home для данных пользователей, /tmp для временных файлов, /proc и /sys для псевдо-файловых систем, предоставляемых ядром.
Распространенные файловые системы включают ext4, которая является стандартной файловой системой для Linux, xfs, которая поддерживает большие файлы, btrfs и zfs, которые поддерживают снапшоты и дедупликацию, а также tmpfs, которая хранит данные в оперативной памяти.
Когда применять
Выбор конкретной файловой системы зависит от специфических требований системы. Например, ext4 является стандартной файловой системой для boot/root, но в некоторых случаях может потребоваться использование xfs для работы с очень большими данными или btrfs/zfs для работы с снапшотами. На production-серверах рекомендуется вынести директорию /var/log на отдельный раздел, чтобы избежать затопления root директории логами. LVM (Logical Volume Manager) используется, когда может потребоваться рост или сжатие volume. Команда mount с параметрами noexec, nosuid и nodev может использоваться для защиты от выполнения кода, изменения владельцев файлов или использования устройств в определенных директориях, таких как /tmp и /home.
Типичные ошибки
Типичные ошибки при работе с абсолютными и относительными путями включают исчерпание inode-ресурсов до истощения дискового пространства (например, из-за большого количества мелких файлов, что можно проверить с помощью команды df -i). Также часто возникает путаница между абсолютными и относительными путями, когда скрипты или команды зависят от текущей рабочей директории. Попытки редактирования содержимого директорий /proc и /sys без полного понимания их функциональности могут привести к непредсказуемым результатам, поскольку эти директории являются псевдо-файловыми системами, управляемыми ядром. Удаление файлов из директорий /usr/bin или других системных директорий может привести к нестабильной работе системы. Также следует избегать ситуации, когда директория /tmp является доступной и исполняемой, так как это может стать вектором для повышения привилегий.