Symbolic links vs Windows shortcuts?

What are the differences between symbolic links in Ubuntu and Windows shortcuts? Are they analogous concepts? Or is there something in Ubuntu that resembles more Windows shortcuts?


Solution 1:

Yes and no.

In order to understand the vagaries here, you need to understand the relationship between the inode table, and data written to disk.

Windows shortcuts are path data contained in regular files. Think of them like text files which only contain a URI for a file. From Wikipedia:

Shortcuts are treated like ordinary files by the file system and by software programs that are not aware of them. Only software programs that understand shortcuts (such as the Windows shell and file browsers) treat them as references to other files.

Another difference are the capabilities of the mechanism: Microsoft Windows shortcuts normally refer to a destination by an absolute path (starting from the root directory), whereas POSIX symbolic links can refer to destinations via either an absolute or a relative path. The latter is useful if both the location and destination of the symbolic link share a common path prefix, but that prefix is not yet known when the symbolic link is created (e.g., in an archive file that can be unpacked anywhere).

Microsoft Windows application shortcuts contain additional metadata that can be associated with the destination, whereas POSIX symbolic links are just strings that will be interpreted as absolute or relative pathnames.

Windows Vista, 7 and 8 also support symbolic links natively under NTFS

POSIX-Compliant symbolic links are not files. Instead, they are entries into the inode table which are automatically resolved by the file system. Any software program, upon accessing a symbolic link, will see the target instead, whether the program is aware of symbolic links or not.

Solution 2:

Symbolic links are much like Windows shortcuts. They are like an alias that points to the real object in the filesystem. If the object moves or is deleted, the link becomes broken.

Both windows and Linux have hard links, which are very different. I haven't used Windows since XP, and at that time, there was no UI for hard links, but there was an API, and an app could create a hard link (it could also be done by a user using Cygwin).

A hard link is another full-fledged object in the file system. You can have multiple links, and all of them act the same. They all point to the same storage, though. If you delete one, and the other will still exisst, the storage will not be deleted until you delete all the links.