Что такое символьная ссылка?
Символьная (символическая) ссылка (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().