如何自己制作一个网站,seo包年优化平台,跨境电商一般卖哪些产品,简单的小公司企业简介模板文章目录 一、软链接二、硬链接三、ln命令四、该如何理解硬链接#xff1f;五、如何理解软链接六、为什么要用软硬链接1.软链接的应用场景2.硬链接的应用场景 一、软链接
如下所示#xff0c;我们创建一个文件以后#xff0c;然后执行下面的指令
ln -s file.txt soft-link… 文章目录 一、软链接二、硬链接三、ln命令四、该如何理解硬链接五、如何理解软链接六、为什么要用软硬链接1.软链接的应用场景2.硬链接的应用场景 一、软链接
如下所示我们创建一个文件以后然后执行下面的指令
ln -s file.txt soft-link这时候我们看见了一个soft-link的文件这个文件指向file.txt。这就是一个软连接
如果我们去查看inode我们可以看到是两个inode说明是两个不同的文件因为一个文件一个inode 所以软连接是一个独立的文件因为具有独立的inode
二、硬链接
如果我们直接这样做
ln test.txt hard-link我们发现产生了一共hard-link文件并且它和test.txt的第二个属性变为了2
也就是说这个数字其实叫做硬链接数
如果我们再去查看他们的inode 我们会发现hard-link与test.txt的inode居然是一样的
所以硬链接不是一个独立的文件因为他没有独立的inode
三、ln命令
ln命令是链接命令它如果带上-s选项代表是软连接如果不带就是硬链接。
无论如何都是由后者指向前者
ln -s file.txt soft-link //软链接
ln test.txt hard-link //硬链接四、该如何理解硬链接
如下图所示 因为我们一开始是先创建的test.txt所以这个会献给test.txt分配一个inode
然后我们使用了硬链接我们发现出现了一共hard-link的文件并且这两个文件的inode是一样的这就说明了他们的文件属性文件内容一定是一样的
通过这里我们也可以再次印证文件名并不在inode中存储否则这两个文件名是一样的
所以我们建立一个硬链接这个硬链接做了什么么 所谓的建立硬链接本质其实就是在特定目录的数据块中新增文件名和指向的文件inode编号的映射关系 也就是说像我们上面的例子中就是在test_2023_12_03这个目录文件中对应的数据块上写上一个文件名和inode的对应关系。 这样的话假如我们将test.txt文件给删掉了其实这个文件本质上还是存在的因为inode为61的这个文件还是存在着的。不过引用计数由2变为1了 所以上面的工作我们成功的完成了一次取别名因为inode在这个文件就还在 任意一共文件无论是目录还是普通文件都有inode 每一个inode内部都有一个叫做引用计数的计数器 目录里面保存的是文件名inode编号的映射关系。 文件名1inode1234 文件名2inode1234 文件名3inode1234 文件名4inode1234 所以我们可以用不同的文件名映射同一个inode,所以因为inode本身的缘故我们可以间接的认为每一个文件名都指向同一个文件 而这个就是我们以前类似的指针 所以这个引用计数表示的就是有多少个文件名指向该文件 所以删除一个文件就是让引用计数减减然后删除掉这个映射关系。 只有当减到0的时候才会真正的删除掉这个inode文件 所以刚刚这个文件就没有被删除 所以我们建立的大多数普通文件他的硬连接数都是1。因为默认建立的文件只有一个文件名与inode对应。所以我们删除时候会直接删除到0进而删除掉这个文件 五、如何理解软链接
我们知道在我们前面使用软链接以后他的引用计数没有发生变化 并且软连接的文件和原来的文件有不同的inode所以他们是不同的文件
所以这里就告诉了我们一个事实我们的软连接是一个独立的文件且不影响目标文件的引用计数
那么我们如何理解软链接呢 由于软链接具有独立的inode和数据块所以我们可以将这个软连接想象成一个独立的文件该文件有自己的属性。 并且这个软连接文件里面放着的是所指向文件的路径 所以软链接是一个独立的文件有独立的inode,也有独立的数据块他的数据块里面保存的是指向的文件的路径 所以对于这个软链接他可以有如下的场景
像file.txt中写入文件但是我们可以用soft-link访问到对应的内容 所以如果我们删除掉了这个soft-link文件并不会影响到file.txt文件
但是一旦我们删除掉了file.txt文件就会影响到soft-link文件如下所示因为它指向的文件已经不存在了 其实这个软链接特别像windows中的快捷方式 删除这个软连接文件我们除了使用rm的方式也可以使用unlink的方式 六、为什么要用软硬链接
1.软链接的应用场景
当我们写了一个.c程序以后 如下所示当我们编译好软件以后我们会将可执行程序放入到一些更深层的目录中 如果我们要执行这个可执行程序必须按照路径依次往里找
这对于客户来说太麻烦了
所以我们就可以形成一个软链接文件 这样的话就可以直接运行这个程序了
所以我们就会发现在/lib64/这个目录下存在着大量的软链接 所以未来我们可以直接在下面的路径下建立一个可执行程序
sudo ln -s 可执行程序路径 /usr/bin/my.exe如下所示 所以未来我们要装软件的话我们可以随意装只需要在/usr/bin路径下安装一个软链接即可。
2.硬链接的应用场景
当我们建立一个普通文件的时候它的硬链接数是1 但是当我们创建一个目录文件的时候它的硬链接数为2 这是为什么呢
首先这个dir它自己本身就有一组映射关系所以这里已经有1了
但是当我们进入这个文件的时候我们知道它有两个隐藏文件
我们会发现这个点也叫60所以这个叫做当前目录 现在我们就理解了什么叫做当前目录了因为这个点就是dir的一个硬链接
而两个点表示这个上级路径
我们也可以注意到这里确实是一个硬链接 所以我们就理解了为什么cd …会进入到上级目录了因为这就是一个硬链接
当我们向这个dir文件里面继续创建了一个目录以后我们会发现这个引用计数变为了3 如下所示
就是因为存在这样一个点点目录 如果我们去查看根目录的引用计数 我们也就知道了当前我们系统的有效的目录是16个
所以在我们的系统中硬链接必须存在虽然它很少用但是它要维持linux的目录结构
所以硬链接通常用于路径定位采用硬链接可以进行目录间切换
但是我们要注意硬链接不允许对目录来进行定义但是可以软链接
那么Linux系统不允许对目录建立硬链接这是为什么呢 如下图所示这是一个Linux的一个目录假设第一个是一个根目录然后有一天我们在第三层的第一个文件中建立了一个硬链接那么此时造成了闭环。 未来当我使用find / -name test.c命令的时候会进入到环里面。 所以硬链接给目录很容易产生环路问题引发系统级别的bug 那么我们可能会好奇目录内部有点和点点这个不是目录的硬链接吗 这其实是因为系统不相信我们只相信自己系统自己不会产生环路问题。 可是我们又会好奇那既然系统自带点和点点那在搜索时候不是已经自带环路问题了吗 其实这是因为系统在搜索时默认不会搜索这两个文件