В чем разница между hardlink и symlink в Linux?

«В чем разница между hardlink и symlink в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Это два принципиально разных механизма ссылок в Linux.

Hardlink:

  • Что это: Прямая ссылка на inode (метаданные и данные файла). Создание хардлинка добавляет еще одну запись в директории, указывающую на тот же inode.
  • Поведение: Все хардлинки — это одно и то же. Изменение содержимого, прав доступа или владельца по одному имени отразится на всех. Файл физически удаляется с диска только когда удален последний хардлинк на него.
  • Ограничение: Нельзя создать хардлинк для директории (обычно) и нельзя пересекать границы файловых систем.

Symlink (Symbolic Link):

  • Что это: Отдельный файл специального типа, который содержит текстовый путь к целевому файлу или папке.
  • Поведение: Это указатель. Если переместить или удалить цель, симлинк "сломается". Права доступа у симлинка свои, но при операциях чтения/записи через него проверяются права цели.
  • Гибкость: Может ссылаться на что угодно, включая директории и файлы на других разделах (mount points).

Ключевая аналогия: Хардлинк — это дополнительное имя для человека. Симлинк — это записка с указанием, где этого человека найти.

Пример из DevOps-практики: При развертывании приложения (deploy) часто используется схема с симлинками для текущей версии:

/opt/myapp/releases/v1.2.3/
/opt/myapp/releases/v1.3.0/
/opt/myapp/current -> /opt/myapp/releases/v1.3.0/  # Symlink для быстрого rollback