Explanation The most likely reason for getting an error when creating a hard link to an ordinary file is that the source and the target are on different filesystems. A hard link is a directory entry that points to the same inode as the original file. An inode is a data structure that stores the metadata and location of a file on a filesystem. A hard link cannot span across different filesystems because each filesystem has its own inode table and numbering scheme. Therefore, a hard link can only refer to a file that exists on the same filesystem as the link. This is mentioned in the article by How-To Geek1 and the man page of ln2. The other options are not valid reasons for getting an error when creating a hard link. The source file being hidden, read-only, or a shell script does not affect the ability to create a hard link, as long as the user has the appropriate permissions. The source file being already a hard link also does not prevent creating another hard link to the same file, as long as the maximum number of links per inode is not exceeded. This is explained in the article by Linuxize3 and the man page of ln