Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。

硬链接和软链接

硬链接 --- ln 要链接的文件 新硬链接名

软连接 --- ln -s 要链接的文件 新软链接名

# 硬链接 删除 f1, f2依然有效, 直到把所有相关连的硬链接都删除, 文件才会删除
ln f1 f2
# 软链接 删除 f1, f2就无效了
ln -s f1 f2

硬链接

# 语法: ln 要链接的文件 生成的硬链接名
# 创建f1的一个硬连接文件f2
ln f1 f2
  • 硬链接是指通过索引节点来连接的, 在Linux文件系统中, 保存在磁盘中文件都会给它分配一个编号, 这个称之为索引节点号(Inode Index)。在Linux中存在多个文件名指向同一索引节点。比如:A是B的硬链接, 那么A和B就都指向同一索引节点, 删除A并不会影响B。

测试

[root@VM-0-5-centos test]# echo "Hello,World" >> F1   #先在 F1 中写入 "Hello,World"
[root@VM-0-5-centos test]# ls #查看, 可以看到 F1 文件
F1
[root@VM-0-5-centos test]# cat F1 # 查看 F1 的内容, 可以看到是 Hello,World
Hello,World
[root@VM-0-5-centos test]# ln F1 F2 # 创建F1的一个硬连接文件F2
[root@VM-0-5-centos test]# ls -li # 查看 inode 节点相同,均为 1180919
1180919 -rw-r--r-- 2 root root 12 Oct 22 17:45 F1
1180919 -rw-r--r-- 2 root root 12 Oct 22 17:45 F2
[root@VM-0-5-centos test]# cat F2 # 查看 F2 的内容, 和F1一样
Hello,World
[root@VM-0-5-centos test]# echo "改变F2" >> F2 # 往F2 追加内容 "改变F2"
[root@VM-0-5-centos test]# cat F2 # 查看 F2
Hello,World
改变F2
[root@VM-0-5-centos test]# cat F1 # 查看 F1, 可以发现 F1 也改变了
Hello,World
改变F2
[root@VM-0-5-centos test]# rm -rf F1 # 删除 F1
[root@VM-0-5-centos test]# cat F2 # F2 依旧不受影响
Hello,World
改变F2

软链接

# 语法: ln -s 要链接的文件 生成软链接文件名
# 创建f1的一个符号连接文件f2
ln -s f1 f2
  • 符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
[root@centos home]# touch f1 # 创建一个测试文件f1;
[root@centos home]# ls
f1
[root@centos home]# ln -s f1 f3 # 创建f1的一个符号连接文件f3;
[root@centos home]# ls -li # -i参数显示文件的inode节点信息;
397247 -rw-r--r-- 2 root root 0 Mar 13 00:50 f1
397248 lrwxrwxrwx 1 root root 2 Mar 13 00:50 f3 -> f1
[root@centos home]# rm -f f1 # 删除原文件f1,导致符号连接f3失效;
[root@centos home]# cat f3
cat: f3: No such file or directory

结论

  • 删除原文件,对硬连接没有影响,符号连接则会失效;
  • 同时删除原文件 ,和硬连接,整个文件会真正的被删除。

最新文章

  1. Socket开发框架之消息的回调处理
  2. ElasticSearch 2 (6) - 插件安装Head、Kopf与Bigdesk
  3. Struts2的标签库(四)——数据标签
  4. Maven学习随记
  5. jdbc学习(一)——SqlServer、Oracle和MySQL
  6. codeforces 342C Cupboard and Balloons(公式题)
  7. 201521123006 《Java程序设计》第4周学习总结
  8. 集群提交spark任务命令
  9. html的块级元素和内联元素
  10. 理解WebKit和Chromium: 硬件加速之RenderLayer树到合成树
  11. vs2012开发基于MFC的ActiveX控件
  12. ssh-login 一键密码加密登录工具
  13. 酷炫的loading
  14. Confluence 6 针对你的数据库类型确定校验 SQL
  15. java实现把对象数组通过excel方式导出的功能
  16. cocos2dx学习之路
  17. 0_Simple__simpleTemplates + 0_Simple__simpleTemplates_nvrtc
  18. 关于双系统下Ubuntu不能访问Windows中某个盘的问题
  19. 【转】JSON.parse()与JSON.stringify()的区别
  20. python线程、进程和协程

热门文章

  1. 2020传智博黑马python课
  2. 淘宝|蚂蚁|菜鸟|盒马|嘀嘀|饿了么面经(已拿多个offer)
  3. 02-flask-路由基础
  4. 移动端SCSS
  5. Django 3.x 原生支持websocket 配置
  6. solidworks 2018 因动态绘制边线显示视图延迟的解决方案
  7. C# 递归算法获取下级子级 2种方法
  8. ASP.NET Core Web 支付功能接入 微信-扫码支付篇(转)
  9. 201326JJ
  10. spring依赖注入的方式(一)