Короткий ответ
Жёсткая ссылка — ещё одно имя для того же inode на той же файловой системе, symlink — отдельный файл, хранящий путь к другому файлу и может указывать на другой раздел или вообще на несуществующий путь.
Как это работает подробнее
Жёсткие ссылки работают на уровне inode: все имена равноправны, и файл физически удаляется только когда счётчик ссылок (link count) становится нулём. Symlink — это специальный файл с содержимым-путём, который резолвится заново при каждом обращении.
Пример кода
commands.sh
echo "data" > file.txt
ln file.txt hardlink.txt
ln -s file.txt symlink.txt
rm file.txt
cat hardlink.txt # выведет "data"
cat symlink.txt # ошибка: No such file or directoryЧто использовать на практике
- Практика. Жёсткие ссылки нельзя создать на каталог и нельзя протянуть между разными файловыми системами, поэтому для кросс-FS ссылок и для ссылок на каталоги используют symlink; при переносе или архивировании важно помнить, что tar по умолчанию может как сохранять, так и разворачивать symlink в зависимости от флагов.
Подводные камни
- Риск. Частая ошибка — думать, что удаление исходного файла сломает жёсткую ссылку: на самом деле данные остаются доступны, пока жив хотя бы один link; для symlink наоборот — при удалении цели ссылка становится «битой» (dangling).