链接是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件。
链接无非是把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。
对链接进行编辑,实际上是对原始文件进行编辑。
硬链接
硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为 inode)。当您移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。
使用:
1 | ln [源文件] [目标文件] |
示例:
1 | # 创建一个测试文件 test.txt |
注意事项:
- 修改源文件或者目标文件, 对应另外一个文件也会发生相应修改;
- 删除源文件或者目标文件, 对另外一个文件没有影响;
- 硬链接文件不占用存储空间;
- 不能对目录文件进行创建硬链接操作;
- 硬链接文件不能跨文件系统。
软链接
软链接也称之为符号连接(Symbolic Link)。
软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。其包含了另一文件的位置信息。
使用:
1 | ln -s [源文件或目录] [目标文件或目录] |
示例:
1 | [root@hadoop-centos-01 test]# ln -s text.txt text.txt.soft |
硬链接与软链接的区别
在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号inode 。
软连接,其实就是新建立一个文件,这个文件就是专门用来指向别的文件的,类似于windows 下的快捷方式。删了这个软连接文件,不影响其指向的实体文件,但如果删除其指向的实体文件,则该软链接不可用。
硬连接,不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个inode,当然inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除的时候,系统调用会检查inode link count的数值,如果他大于等于1,那么inode不会被回收。因此文件的内容不会被删除。
创建硬链接实际上是为原文件在储存器中的资源再新建一个入口,所以硬链接和原文件指向的其实是储存器中的同一处资源(可以理解为硬链接和原文件就是同一个文件)。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。
软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vi这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);
软链接可以对目录进行连接,硬链接不可以。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建软链接。
参考: