Мы все знаем, что такое ярлык, верно? Ну… в Linux ярлыки называются ссылками, и есть два их очень разных типа: жесткие ссылки и символические ссылки. Давайте копнем немного глубже, чтобы выяснить, кто есть кто и когда что использовать.

Сначала немного предыстории. В системе Linux каждый файл на самом деле является ссылкой на inode. Вы можете думать об индексном узле как об адресе дома, где дом и его содержимое являются самим файлом. Таким образом, когда файл создается впервые, ему присваивается как имя, так и номер инода, который представляет собой уникальное целое число, хранящееся в каталоге, в котором хранятся иноды и файлы, которые на них ссылаются.

По умолчанию Linux создает жесткую ссылку, когда вы используете команду ln. Жесткая ссылка указывает на тот же индекс, на который указывает исходный файл. Так что это в основном другое имя для одного и того же файла. Если вы по ошибке сотрете исходный файл, вы все равно сможете получить доступ к его содержимому, если где-то в системе все еще существует жесткая ссылка на его индексный дескриптор.. еще не все потеряно. Если вы внесете изменения либо в исходный файл, либо в жесткую ссылку, эти изменения будут отражены в них обоих. Жесткая ссылка не может быть подключена к каталогам, только к файлам.

Напротив, символическая ссылка (также известная как программная ссылка) [ln -s] не имеет того же номера инода, что и файл, на который она ссылается. Он просто содержит путь к этому файлу, но не его содержимое. Если файл удаляется или изменяется его путь, все символические ссылки на него перестают работать и становятся оборванными ссылками, указывающими на несуществующий файл. Символические ссылки могут быть связаны с каталогами.

Если вам интересно узнать больше о жестких и символических ссылках, ознакомьтесь с этим замечательным постом на эту тему.