理解Linux的硬链接与软链接

为了更好地理解什么是硬链接和软连接,在此之前,先来说说Linux的文件与目录。

Linux的文件与目录

UNIX 系统中除进程之外的一切皆是文件, Linux 保留了这一特性,并且为了便于文件的管理,Linux 还引入了目录(有时亦被称为文件夹)这一概念。目录使文件可被分类管理,且目录的引入使 Linux 的文件系统形成一个层级结构的目录树。如下为普通 Linux 系统的顶层目录结构。

/ 根目录
├── bin 存放用户二进制文件
├── boot 存放内核引导配置文件
├── dev 存放设备文件
├── etc 存放系统配置文件
├── home 用户主目录
├── lib 动态共享库
├── lost+found 文件系统恢复时的恢复文件
├── media 可卸载存储介质挂载点
├── mnt 文件系统临时挂载点
├── opt 附加的应用程序包
├── proc 系统内存的映射目录,提供内核与进程信息
├── root root 用户主目录
├── sbin 存放系统二进制文件
├── srv 存放服务相关数据
├── sys sys 虚拟文件系统挂载点
├── tmp 存放临时文件
├── usr 存放用户应用程序
└── var 存放邮件、系统日志等变化文件

在 Linux 中,与文件相关的数据被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。
通过文件名打开文件
下面就来说说什么是硬链接与软链接,以及两者之间的区别。

为了解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。
在这里插入图片描述

硬链接

硬连接指通过索引节点(inode)来进行连接。若一个 inode 号对应多个文件名,则称这些文件为硬链接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。
硬链接可由命令 link 或 ln 创建:

$ link source_fie target_file
或者
$ ln source_file target_file

由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:

  • 文件有相同的 inode 及 data block;
  • 只能对已存在的文件进行创建;
  • 不能交叉文件系统进行硬链接的创建;
  • 不能对目录进行创建,只可对文件创建;
  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件。

软链接

软连接相当于快捷方式,其作用是为某一个文件在另外一个位置建立一个同步的链接,最常用的是ln命令的-s参数:

$ ln -s source_file target_file

软链接的创建与使用没有类似硬链接的诸多限制:

  • 软链接有自己的文件属性及权限等;
  • 可对不存在的文件或目录创建软链接;
  • 软链接可交叉文件系统;
  • 软链接可对文件或目录创建;
  • 创建软链接时,链接计数 i_nlink 不会增加;
  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

可以看出,与硬链接相比, 软链接具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接,因而现在更为广泛使用。

应用举例

在Linux 上安装 Node.js时,Node 官网提供了已编译好的版本,我们可以直接下载解压后使用:

$ wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz  // 下载
$ tar xf  node-v10.9.0-linux-x64.tar.xz       // 解压
$ cd node-v10.9.0-linux-x64/                  // 进入解压目录
$ ./bin/node -v                               // 执行node命令 查看版本
v10.9.0

解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以使用 ln 命令来设置软连接:

$ ln -s /usr/software/nodejs/bin/npm   /usr/bin/ 
$ ln -s /usr/software/nodejs/bin/node   /usr/bin/

这与把 node 和 npm 可执行文件移动到 /usr/bin 目录下的效果是一样的。

在 /usr/bin/目录下执行以下命令可删除该软链接:(删除软链接,但不删除实际数据)
rm -rf ./node

主要参考文章:https://www.cnblogs.com/kex1n/p/5193826.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值