Linux 软链接和硬链接详解:ln 命令背后的 inode 原理
Linux 软链接和硬链接详解ln 命令背后的 inode 原理1. 前言Linux 中经常会看到链接文件例如/bin -/usr/bin python -python3 current -/opt/app/releases/v2Linux 链接主要有两种软链接symbolic link 硬链接hard link创建链接使用ln命令。本文重点讲清楚inode 是什么软链接是什么硬链接是什么二者有什么区别删除源文件后分别会怎样实际项目中怎么用。2. inode 是什么Linux 文件可以简单理解为两部分文件名 inode文件名保存在目录中。inode 保存文件的元数据和数据块位置。inode 中常见信息包括文件类型权限所属用户所属用户组文件大小时间戳数据块位置硬链接数量。查看 inodels-ifile.txt查看详细信息statfile.txt3. 硬链接是什么硬链接可以理解为多个文件名指向同一个 inode创建硬链接lnsource.txt hard.txt查看ls-lisource.txt hard.txt可能输出123456-rw-r--r--2user user100source.txt123456-rw-r--r--2user user100hard.txt两个文件 inode 一样说明它们本质上指向同一份文件数据。修改任意一个echohellohard.txtcatsource.txt会发现内容也变了。4. 删除源文件后硬链接还在吗创建文件和硬链接echolinuxsource.txtlnsource.txt hard.txt删除源文件名rmsource.txt查看硬链接cathard.txt仍然可以读取内容。原因是rm 删除的是一个文件名不是立即删除 inode 数据。 只要还有硬链接指向 inode数据就还在。只有硬链接数量变成 0文件数据才会真正释放。5. 软链接是什么软链接也叫符号链接。它更像快捷方式保存的是目标路径。创建软链接ln-ssource.txt soft.txt查看ls-lsoft.txt输出soft.txt -source.txt查看 inodels-lisource.txt soft.txt可能看到两个 inode 不同。这说明软链接是一个独立文件只是里面保存了目标路径。6. 删除源文件后软链接会怎样创建软链接echohellosource.txtln-ssource.txt soft.txt删除源文件rmsource.txt再访问catsoft.txt会报错No such file or directory此时软链接还在但目标路径不存在所以它变成了断链。7. 软链接和硬链接对比对比项软链接硬链接是否有独立 inode有没有和源文件共用 inode指向对象路径inode能否跨文件系统可以通常不可以能否链接目录可以普通用户通常不可以删除源文件后失效仍可访问类似概念快捷方式同一文件的多个名字创建命令ln -sln一句话总结软链接指向路径硬链接指向 inode。8. ln 命令常用写法创建硬链接lnsource.txt hard.txt创建软链接ln-ssource.txt soft.txt强制更新软链接ln-sfn/opt/app/releases/v2 /opt/app/current常用参数参数作用-s创建软链接-f强制覆盖-n把已有软链接当作普通文件处理-v显示过程查看链接指向readlink soft.txt readlink-fsoft.txt9. 为什么硬链接不能跨文件系统硬链接指向 inode。inode 编号只在当前文件系统内部有意义。不同磁盘分区或不同文件系统中inode 编号可能重复。所以硬链接通常不能跨文件系统。如果尝试跨文件系统创建硬链接可能报错Invalid cross-device link软链接不受这个限制因为它保存的是路径。10. 为什么硬链接通常不能链接目录如果允许普通用户随意给目录创建硬链接可能形成目录循环。这会让遍历、备份、删除都变得复杂。所以普通用户通常不能给目录创建硬链接。如果要链接目录使用软链接ln-s/var/log logs进入cdlogs实际上进入的是/var/log。11. 实际使用场景11.1 版本切换/opt/app/releases/v1 /opt/app/releases/v2 /opt/app/current -/opt/app/releases/v2切换版本ln-sfn/opt/app/releases/v1 /opt/app/current这种方式常用于部署和回滚。11.2 配置启用Nginx 常见结构/etc/nginx/sites-available/demo.conf /etc/nginx/sites-enabled/demo.conf -../sites-available/demo.conf启用配置ln-s../sites-available/demo.conf /etc/nginx/sites-enabled/demo.conf11.3 避免重复存储同一大文件需要多个名字时可以用硬链接lnbigfile.dat backup_bigfile.dat注意修改任意一个都会影响同一份数据。12. 常见问题12.1 如何判断是不是软链接ls-lfile如果开头是llrwxrwxrwx就是软链接。12.2 删除软链接会删除源文件吗不会。rmsoft.txt只删除软链接本身。但要注意目录软链接后面不要随便加/后再rm -rf否则可能进入目标目录删除内容。12.3 如何找同 inode 的硬链接查看 inodels-ifile.txt查找find/path-inum12345613. 小结软链接和硬链接核心区别软链接指向路径 硬链接指向 inode常用命令lnsourcehardlinkln-ssourcesoftlinkls-listatfilereadlinklinkreadlink-flink选择建议链接目录用软链接 跨文件系统用软链接 版本切换用软链接 同一文件多个名字可用硬链接 避免重复存储大文件可用硬链接理解 inode 后Linux 文件、链接、删除、磁盘占用之间的关系会清楚很多。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2643986.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!