Что происходит при удалении hard link в Linux?

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

Ответ

Удаляется лишь одна из записей каталога, ссылающаяся на конкретный inode. Сам файл (данные на диске) остается.

Детальный процесс:

  1. Файловая система уменьшает счетчик жестких ссылок (link count) в метаданных inode.
  2. Если счетчик становится равным нулю (удалена последняя жесткая ссылка), ядро:
    • Помечает блоки данных файла как свободные (если на них нет других ссылок).
    • Помечает сам inode как свободный для повторного использования.
  3. Пока счетчик ссылок > 0, данные файла остаются доступны по другим оставшимся путям (hard link'ам).

Пример и проверка:

# Создаем файл и жесткую ссылку
echo "Important data" > original.txt
ln original.txt link_to_file.txt

# Проверяем, что оба имени указывают на один inode (одинаковый первый столбец)
ls -li original.txt link_to_file.txt
# 1234567 -rw-r--r-- 2 user group 15 Apr 10 10:00 original.txt
# 1234567 -rw-r--r-- 2 user group 15 Apr 10 10:00 link_to_file.txt
# ^ inode номер

# Удаляем оригинальное имя
rm original.txt

# Данные все еще доступны по второй ссылке
cat link_to_file.txt  # Выведет: Important data

# Проверяем счетчик ссылок (теперь 1)
ls -l link_to_file.txt
# -rw-r--r-- 1 user group 15 Apr 10 10:00 link_to_file.txt

Важно: Hard link'и можно создавать только в пределах одной файловой системы (одного раздела). Для каталогов (кроме . и ..) они обычно запрещены.