Linux文件链接
目录
软链接
硬链接
Linux中的链接分为软链接和硬链接两种链接方式,至于什么是链接,暂且可以按照Windows中的快捷方式来理解。其中,Linux中是通过ln指令创建链接的,详见:ln命令 – Linux命令大全
软链接
软连接的创建方式:
ln -s [参数] [源文件或目录] [目标文件或目录]
其中,文件或目录最好使用绝对地址,如果没有规定地址,那么默认就是在当前目录下。
例如:
ln -s myproc proc
就表示在当前目录下创建一个名为proc,myproc的软连接。
不光是文件,目录也可以进行软链接,用法相同,这里就不再演示了。
要注意,软连接是一份单独的文件,有属于他自己的inode,软链接文件和原文件的关系就好像是指针与变量一样。
硬链接
我们在使用 ls 指令查看文件信息时的这串数字就是这个文件的硬链接数。

创建硬链接的方法与软连接类似,就是去掉ln中的-s参数即可:
ln [参数] [源文件或目录] [目标文件或目录]
创建硬链接时,文件系统会在目录中添加一个新的目录项,并将新目录项指向与原始文件相同的inode。即新建一个inode与文件名之间的映射信息,这样就创建了一个新的文件名指向相同的文件数据。因此,硬链接并不是将文件的内容复制一份,而是共享相同的文件内容和inode。这种共享的机制使得硬链接能够节省磁盘空间,并且当你修改一个硬链接所指向的文件时,其他硬链接也会受到影响,因为它们都指向同一个inode。
特别的,每一个目录下都会有两个特殊的文件,分别是 . 和 .. 。其中 . 表示的是当前目录,.. 表示的是上级目录。而这两个 . 和 .. 就是对应目录的硬链接。所以硬链接数,其实就是相同文件名的目录项的个数。所以新目录创建之后,. 的硬连接数总是2。
特别的,为了安全起见,操作系统并不允许我们对目录进行手动指定硬链接,只能由操作系统自动建立硬链接。这是因为,我们知道Linux操作系统的文件结构是一种树状结构,如果肆意对目录使用硬链接,很可能会出现在某一个区间出现目录树的环状问题。
内容补充
- 软链接又叫符号链接,类似于Windows中的快捷方式。
- 不管是软链接还是硬链接,最好都统一使用绝对路径。
- ln指令是创建链接,而取消链接则需要使用unlink指令,用法为unlink+链接名。unlink命令用于系统调用函数unlink去删除指定的文件,和rm命令作用一样,都是删除文件。只不过一个是系统调用,一个是系统指令。
- 软链接的本质是一个单独的文件,相当于一个指针,指向了目标文件。硬链接的本质是一个目录项,是原文件的一个别名。
- 软连接可以链接目录,而硬链接不可以链接目录。
- 软链接可以跨文件系统进行连接,硬链接不可以。这是因为不同分区有可能有不同文件系统,就算系统相同,也会导致节点号有歧义冲突,因此硬链接不能跨分区建立。而软链接与文件系统无关,只是一种快捷方式,所以并无影响。
