链接的命令:ln - make links between files #在文件之间创建一个链接
创建硬链接会增加额外的记录项以引用文件
图中的1为链接数=文件的名字数量
将/mnt/f1做一个硬链接到/opt/f1 取名还叫f1
图中,俩个文件的元数据一样说明是同一个文件
链接次数都是2
然后把源文件改名并添加内容
这里可以看到,它们的元数据还是一样的,说明还是同一个文件,然后我们
查看它们的内容是不是一样
结果显而易见
那么,当我们删除源文件时,链接文件会不会也无效或被删呢?
链接文件还在,内容也没有丢失。但链接数量减1
当链接数量为0时。文件被删除
对应于同一文件系统上一个物理文件
每个目录引用相同的inode号
创建时链接数递增
硬链接不能跨驱动器或分区
演示
下图,/testdir目录是sda5分区与/opt不是同一个分区
然后我们将f1链接到/testdir目录下
提示不能跨分区链接。为什么?
硬链接的本质是同一个文件,给它增加一个新的名字,若不在一个分区里,即使元数据一样也不是同一个文件,所以这个违反了硬链接的定义,所以系统不会让你创建
硬链接不能给目录创建链接
符号(或软)链接
一个符号链接指向另一个文件
ls- l的 显示链接的名称和引用的文件
一个符号链接的内容是它引用文件的名
可以对目录进行
可以跨分区
不增加或减少目标文件inode的引用计数;
语法: ln -s filename [linkname]
软连接f1起名f11查看属性。元数据不一样;读写权限不一样;链接数也没有增加;数据大小也不一样。2这个数据是怎么来的呢?是从路径,路径有几个字符就是几
所以软连接与原始文件不是同一个文件。
当我们把原始文件删除以后,链接文件就会报错
链接文件里存放的是路径数据,当我们访问链接文件时,它会自动的转到原始文件那里,所以当我们把原始文件删除以后,它过去一找,哎!没有了?所以它就会告诉我们:我找不到!
这里有个很有意思的事:我们在原目录下用vi编辑器创建一个全新的f1,看看它能不能区别出来。
OK,这个f1是以前f1的弟弟!
系统果然没有认出来,它只是机械式的给我们一个链接,才不会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来说的