软链接,硬链接,和mount的探索(Deepin的/home为例)

文章目录

  • 背景故事
  • 猜想1:软链接
  • 猜想2:硬链接
  • 猜想3:挂载
  • 三者区别

背景故事

今天偶然打开深度操作系统的终端查看系统的挂载情况,发现没有/home,但我明明记得家目录是做了单独分区的。就在这时,我发现有一个分区的大小和家目录一样,就是 /data
软链接,硬链接,和mount的探索(Deepin的/home为例)_第1张图片
可是在家里pwd明明就是在/home呀~~~~~

猜想1:软链接

第一个猜想就是软链接:毕竟软链接是最常用的文件链接方式。

  • 软链接的创建:ln -s 源 目标
  • 软链接的查看:ls -l 目标,会在行末显示一个箭头,如下图所示。
    软链接,硬链接,和mount的探索(Deepin的/home为例)_第2张图片

因此,我立刻ls -ld /home,然而,并没有看到那个箭头。

猜想2:硬链接

既然不是软链接,那么很有可能就是硬链接了。

  • 硬链接的创建:ln 源 目标
  • 硬链接的查看:硬链接无法直接查看,只能获取inode编号然后遍历。一些线索:
    • inode引用计数(ls -l第二列查看):这个文件有多少入口。对于普通文件,有多少引用计数就表示了有多少硬链接。目录就比较复杂,包含这四类情况:1) 绝对路径;2)从自身通过./进入;3)从子目录通过../进入;4)其他通过ln建立的硬链接
    • 查看inode:ls -i 第一列就是inode编号。

ls -i查看这两处,果然同样的inode。但是,硬链接是不能跨分区建立的!那么还有什么可能情况呢?查阅资料得知,还有一种可能是挂载。

猜想3:挂载

mount 通常是用来挂载设备,但也可以用来挂载文件。

  • 挂载一个文件夹到另一个文件夹:sudo mount --bind dir1/ dir2,将挂载信息写入到/etc/fstab,则可以在系统加载时就进行挂载。
  • 查看挂载 vim /proc/self/mountinfo,该文件可以查看到挂载信息

因此,我使用 vim /etc/fstab查看,果然,/data/home是挂载在/home的。
在这里插入图片描述

三者区别

我们把硬盘分区比作一座山,文件比作山洞,那么这三者可以这么理解:软链接是个路标,硬链接是一个山洞的几个洞口,挂载则是虫洞,能够在不同山之间穿梭。软链接是最简单,最方便的,但很多软件并不识别:例如git,dockerfile,是不会把软链接的文件纳入管理的。硬链接可以避免这个问题,但它仅限于同一个分区才能做硬链接(一个山洞的洞口不会出现在两座山上),挂载则可以跨分区,但缺点是需要root权限

链接方式 优点 缺点
软链接 简单、灵活 不被git、dockerfile识别
硬链接 “看不出“是链接(几处入口是等效的),可被软件识别 不能跨分区
挂载 可以跨分区,可以被软件识别 需要root权限

你可能感兴趣的:(linux,运维,服务器)