链接的命令:ln - make links between files  #在文件之间创建一个链接

创建硬链接会增加额外的记录项以引用文件

图中的1为链接数=文件的名字数量

将/mnt/f1做一个硬链接到/opt/f1 取名还叫f1

图中,俩个文件的元数据一样说明是同一个文件

链接次数都是2

然后把源文件改名并添加内容

wKiom1efOg3h_451AAB69OizV3A428.jpg

这里可以看到,它们的元数据还是一样的,说明还是同一个文件,然后我们

查看它们的内容是不是一样wKioL1efOf-Q5pVBAABC-shwlrk858.jpg

结果显而易见

那么,当我们删除源文件时,链接文件会不会也无效或被删呢?wKioL1efOgaAWoRKAABf2aWRwfU231.jpg

链接文件还在,内容也没有丢失。但链接数量减1

当链接数量为0时。文件被删除

对应于同一文件系统上一个物理文件

每个目录引用相同的inode号

创建时链接数递增

硬链接不能跨驱动器或分区

演示

下图,/testdir目录是sda5分区与/opt不是同一个分区

然后我们将f1链接到/testdir目录下

提示不能跨分区链接。为什么?

硬链接的本质是同一个文件,给它增加一个新的名字,若不在一个分区里,即使元数据一样也不是同一个文件,所以这个违反了硬链接的定义,所以系统不会让你创建

硬链接不能给目录创建链接wKiom1efOgKieeEJAAAyNbvmmeA182.jpg

符号(或软)链接

一个符号链接指向另一个文件

ls- l的 显示链接的名称和引用的文件

一个符号链接的内容是它引用文件的名

可以对目录进行

可以跨分区

不增加或减少目标文件inode的引用计数;

语法: ln   -s  filename [linkname]

wKioL1efOgeBCS-WAABW7v8zar8374.jpg

软连接f1起名f11查看属性。元数据不一样;读写权限不一样;链接数也没有增加;数据大小也不一样。2这个数据是怎么来的呢?是从路径,路径有几个字符就是几

所以软连接与原始文件不是同一个文件。

当我们把原始文件删除以后,链接文件就会报错

wKioL1efOgri-vJEAABCKiN0nRI517.jpg

链接文件里存放的是路径数据,当我们访问链接文件时,它会自动的转到原始文件那里,所以当我们把原始文件删除以后,它过去一找,哎!没有了?所以它就会告诉我们:我找不到!

这里有个很有意思的事:我们在原目录下用vi编辑器创建一个全新的f1,看看它能不能区别出来。

OK,这个f1是以前f1的弟弟!

wKioL1efOgeBCS-WAABW7v8zar8374.jpg 

系统果然没有认出来,它只是机械式的给我们一个链接,才不会care到底以前的f1还是不是f1。只要名字一样,是它知道的那个地方就行。

接下来就是验证跨分区、跨设备操作

报错了。为什么呢?

因为它找不到。路径不对,

命令:ln –s f1 /testdir/f2

f1的路径应该是相对于/testdir/f2

所以路径应该写:/opt/f1

这里的f22就对了。没有报错

还有一种情况当软连接在它的子目录下时可以用另一种方式写

上图:pig1和dog1都在testdir目录下

我们将/testdir/dog/dog1/a文件软连接到/testdir/pig/pig1/a1起名叫a1(实在不知道起什么文件名好,大家别贱笑)

这里,软连接a1必须写绝对路径,而源文件可以写相对路径,这里的相对路径是相对软连接a1来说的