# Ссылки

`ln -s <source> <destination>` - destination ссылается на source. Если destination нет - команда заменяет его на `.` и создает в текущей директории c таким же название == source.


### Типы ссылок

* Символическая (мягкая) ссылка - ссылаются на имя файла. Похож на ярлык из Windows.

* Жесткая ссылка (синхронизированная копия) - ссылаются на место файла в жестком диске (точнее на его [inode](https://eclecticlight.co/2018/03/03/how-macos-tracks-your-files-inside-the-inode/)). Не умеют работать с папками. Нельзя сделать ссылку между разными файловыми системами. 

Пример:

![Link(ln)](/pictures/Common/Link(ln).png?raw=true)


### Жесткая ссылка vs копия файла

Жесткая ссылка всегда взаимно синхронизирована с родительским файлом (source). 

Копия не зависит от изменений родительского файла (source).

![hardLinkVScopy](/pictures/Common/hardLinkVScopy.png?raw=true)


### Относительный путь и ошибка

ln -s source Folder/symbolicLink:

![ErrorSymbolikLink](/pictures/Common/ErrorSymbolikLink.png?raw=true)

Видно, что символическая ссылка не открывается. Вся проблема в том, что команда начала выполняться внутри папки `Folder/` и уже там пытается создаться на `./Folder/source` (но его там нет), тк `source` == `./source`

> ❗Поэтому правильным тоном является создание ссылки c абсолютным путем к каждому файлу: `ln -s ~/Desktop/source.txt ~/Desktop/Folder/symbolicLink`

### inode/vnodes serial number (ID)

1. [How macOS tracks your files: inside the inode](https://eclecticlight.co/2018/03/03/how-macos-tracks-your-files-inside-the-inode/)

Некоторые приложения не способны переоткрыть файл (`Open Recent?`) после изменения/перемещения/переименовывания, вам приходится открывать их заново. 

Вся разница в функции UNIX управления файлами - `inode`, которая является идентификатором для структуры данных, хранящей метаданные файла (владельца, разрешения, дата создания и тд). inode остается неизменной, независимо от того, как он назван или куда он перемещен.

Когда приложение открывает или сохраняет документ, оно использует путь к нему и имя файла - [URL](/2%20ComputerScience/2.3%20Networking/2.3.1%20API/2.3.1.3%20URI\URL\URN.md). Но лучшие приложения запоминают документы по серийным номерам `inode`, поэтому, когда они хотят открыть их снова, они запрашивают у macOS файл с этим серийным номером. Более слабые приложения запоминают документы по их [URL-адресам](/2%20ComputerScience/2.3%20Networking/2.3.1%20API/2.3.1.3%20URI\URL\URN.md), поэтому, если какая-либо их часть изменится, они не смогут найти документ, чтобы открыть его снова.

Узнать `inode`: `ls -i file`

![inode](/pictures/Common/inode.png?raw=true)

---

[1.3.3.1 Shells Theme](./1.3.3.1%20Shells.md) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) |  [1.3.4 Chmod Theme](./1.3.3.3%20Chmod.md)
