Gymterview
junior

Что такое символьная ссылка?

Символьная (символическая) ссылка (symlink) — это специальный файл в файловой системе, который содержит не пользовательские данные, а путь к другому файлу или каталогу.

Аналогия из жизни: символьная ссылка — это как ярлык на рабочем столе. Он указывает на программу, но сам программой не является. Если удалить ярлык, программа останется. Если удалить программу, ярлык станет «битым».

При обращении к символьной ссылке ОС автоматически перенаправляет операцию к целевому объекту. Целью ссылки может быть файл, каталог, другая ссылка или даже несуществующий объект (битая ссылка).

Отличие от жёстких ссылок

Характеристика Символьная ссылка Жёсткая ссылка
Содержит Путь к файлу Ссылку на inode
Может ссылаться на каталог Да Нет (обычно)
Работает между файловыми системами Да Нет
При удалении цели Становится битой Данные остаются, пока есть хотя бы одна ссылка

Работа в Java (NIO.2)

Пример
// Создание символьной ссылки
Path target = Path.of("/home/user/data.txt");
Path link = Path.of("/home/user/link_to_data.txt");
Files.createSymbolicLink(link, target);

// Проверка, является ли путь символьной ссылкой
boolean isSymlink = Files.isSymbolicLink(link); // true

// Получение цели ссылки
Path realTarget = Files.readSymbolicLink(link);

// Разрешение реального пути (с учётом символьных ссылок)
Path realPath = link.toRealPath();

По умолчанию методы Files.walk() и Files.copy() не следуют символьным ссылкам. Для следования используется опция FileVisitOption.FOLLOW_LINKS или LinkOption.NOFOLLOW_LINKS для явного игнорирования.

На собеседовании: дайте определение, объясните отличие от жёсткой ссылки и покажите, что NIO.2 полноценно поддерживает символьные ссылки через Files.createSymbolicLink(), Files.isSymbolicLink(), Files.readSymbolicLink().