Linux下链接分两种,即硬链接(Hard link)和软链接(Symbolic link)。当然windows下面也有软链接、硬链接之分。
为了区分硬链接和软链接,首先需要清楚Linux系统中一切皆文件,文件由两个部分组成:用户数据,即数据块和元数据,即保存文件附加属性的数据(文件大小、创建时间、inode等)。Linux系统下的同一个文件系统中,每个文件都有一个唯一的inode(索引结点)号,inode才是文件的唯一标识,在访问文件时实际上都是通过inode号来访问文件的实际数据块。
硬链接和软件链接在访问时都共用一个目标数据块,主要区别就是每个硬链接相当于一个是一个指针,该指针指向同一个inode号,只要一个文件有任意一个硬链接存在,那么该文件就可以直接通过文件的硬链接访问,也就是说当删除一个硬链接时,并不影响其他硬链接来访问文件,硬链接本身并没有单独的inode号,同一个文件的硬链接都共用一个inode号只是文件名不同,甚至可以理解为我们在linux中使用ls看到的文件本身也就是某个数据块的一个硬链接。所以当使用mv命令移动这些硬链接时,并不影响对文件的访问,因为inode都一样。
而软链接即符号链接,软链接本身就是个独立的完整文件,相当于windows下的快捷方式,有自己的inode号,只是在访问该软链接时,会被转发为访问其链接到的实际文件,当删除软链接时,并不影响实际文件,甚至删除所有的软链接对实际文件也没有影响。当删除或移动实际文件时,都将无法通过软链接访问到该文件。