В чем разница между hard link и symbolic (soft) link в Linux?

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

Ответ

Hard link — это дополнительное имя файла, которое напрямую ссылается на тот же inode (запись в файловой системе о данных файла). Все хардлинки равноправны. Удаление исходного имени файла не удаляет данные, пока существует хотя бы один хардлинк. Ограничение: хардлинки можно создавать только в пределах одной файловой системы.

Symbolic link (symlink, soft link) — это специальный файл, который содержит путь к целевому файлу или директории. Это указатель. Если удалить целевой файл, симлинк становится "битым" (dangling). Симлинки могут ссылаться на объекты в других файловых системах и даже на несуществующие пути.

Пример из практики:

# Создаю файл и хардлинк к нему
$ echo "data" > original.txt
$ ln original.txt hardlink.txt  # Создание hard link

# Изменения в одном видны в другом (это один файл)
$ echo "more data" >> hardlink.txt
$ cat original.txt  # Выведет: datanmore data

# Создаю symbolic link
$ ln -s original.txt symlink.txt

# Удаляю оригинал
$ rm original.txt

# Проверяю ссылки
$ cat hardlink.txt  # Работает! Данные целы.
$ cat symlink.txt   # Ошибка: No such file or directory (битая ссылка)
$ ls -l symlink.txt # Покажет 'symlink.txt -> original.txt' красным цветом

В инфраструктуре симлинки часто используются для управления версиями конфигов (например, /etc/nginx/nginx.conf -> /opt/nginx/conf/nginx.conf.1.2).