Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Linux文件的软链接和硬链接

Linux文件的软链接和硬链接

作者头像
恋喵大鲤鱼
发布于 2018-08-03 09:16:56
发布于 2018-08-03 09:16:56
7.9K0
举报
文章被收录于专栏:C/C++基础C/C++基础

1.Linux链接概念

Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

1.1索引节点

索引节点是指在许多类Unix文件系统中的一种数据结构。每个索引节点保存了文件系统中的一个文件系统对象的元信息数据,但不包括数据内容或者文件名。

inode包含文件的元信息,具体来说有以下内容:   * 文件的字节数   * 文件拥有者的User ID   * 文件的Group ID   * 文件的读、写、执行权限   * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。   * 链接数,即有多少文件名指向这个inode   * 文件数据block的位置 可以用stat命令,查看某个文件的inode信息: stat example.txt

**注意:**Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

1.2硬连接

一般情况下,文件名和inode号码是”一一对应”关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为”硬链接”(hard link)。

硬链接就是同一个文件使用了多个别名(他们有共同的 inode)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

1.3软链接

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

1.4硬链接与拷贝的区别

硬链接只是通过文件的别名指向了文件的inode(索引节点),inode是操作系统指定文件的依据,每个文件有且只有一个inode,所以操作硬链接就是操作源文件。而复制则可以看成新建一个文件并拷贝原文件的内容。

2.通过实验加深理解

[oracle@Linux]$ touch f1 #创建一个测试文件f1 [oracle@Linux]$ ln f1 f2 #创建f1的一个硬连接文件f2 [oracle@Linux]$ ln -s f1 f3 #创建f1的一个符号连接文件f3 [oracle@Linux]$ ls -li # -i参数显示文件的inode节点信息 total 0 9797648 -rw-r–r– 2 oracle oinstall 0 Apr 21 08:11 f1 9797648 -rw-r–r– 2 oracle oinstall 0 Apr 21 08:11 f2 9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f3 -> f1

从上面的结果中可以看出,硬连接文件f2与原文件f1的inode节点相同,均为9797648,然而符号连接文件的inode节点不同。

[oracle@Linux]$ echo “I am f1 file” >>f1 [oracle@Linux]$ cat f1 I am f1 file [oracle@Linux]$ cat f2 I am f1 file [oracle@Linux]$ cat f3 I am f1 file [oracle@Linux]$ rm -f f1 [oracle@Linux]$ cat f2 I am f1 file [oracle@Linux]$ cat f3 cat: f3: No such file or directory

通过上面的测试可以看出:当删除原始文件f1后,硬连接f2不受影响,但是符号连接f1文件无效。

3.总结

依此您可以做一些相关的测试,可以得到以下全部结论: (1)删除符号连接f3,对f1,f2无影响; (2)删除硬连接f2,对f1,f3也无影响; (3)删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效; (4)同时删除原文件f1,硬连接f2,整个文件会真正的被删除。 (5)硬链接是文件的不同名称,软连接是文件名的超链接,文件名不存在,超链接就失效了。

参考文献

[1]http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html [2]http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html [3]http://zhidao.baidu.com/link?url=U9a3ioCFwNCSsubL1Fg9FKDHgs6q5GE8qnFY_HdYh-9elU4Cwl0PQV4_zSnVYQqluKjLJ2Y8ZEtUss-r2jZzla [4]索引节点.百度百科

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年07月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
安装服务启动报错Failed to get D-Bus connection: Operation not permitted
今天别人给我了一个 linux 主机的远程登录方式,让我上去帮他安装个 docker。这么简单的事情不是手到擒来吗。于是开始搞
张琳兮
2021/02/24
13.8K0
Centos7 将home空间分配给根目录(/dev/centos/root)
根据:Free PE / Size 33159 / <129.53 GiB判断 可用空间为129.53 GiB
IT小马哥
2024/09/29
6130
K8s上用cephfs存储
前言 k8s对ceph rbd模式不支持ReadWriteMany(RWX),为了满足k8s的灵活性需求,采用支持多点挂载的cephfs工作模式
院长技术
2020/06/11
1.4K0
JAVA 应用线上故障排查手册
线上故障主要会包括 CPU、磁盘、内存(含JVM)以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。 基本上出问题就是 df、free、top、jstack、jmap具体问题具体分析
IT运维技术圈
2022/10/24
6940
一个轻量的Linux运维监控脚本
下面就脚本和小伙伴简单介绍下,如果小伙伴也有我这样的情况,可以参考。主要监控信息有以下几部分内容
山河已无恙
2023/03/02
1.5K0
一个轻量的Linux运维监控脚本
Docker容器学习梳理-容器硬盘热扩容
前面已介绍了docker很多知识点的操作记录,今天这里梳理下docker容器空间扩展的操作。默认情况下,docker容器的空间是10G。在实际生产环境下,对docker容器进行热扩容(动态扩容)是非常重要的一个需求。 Docker容器动态扩展的优点: 1)不需要修改docker配置,不需要重启docker服务; 2)可以直接对运行中的容器进行动态扩展(只能增,无法缩); Docker容器动态扩展的条件: 1)docker所在宿主机分区的格式必须是ext2、ext3、ext4; 2)docker存储引擎必
洗尽了浮华
2018/01/23
3.2K0
docker服务器出现/opt/n-bash: 无法为立即文档创建临时文件: 设备上没有空间问题
可看到如下结果: 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/cl-root xfs 37G 37G 20K 100% / devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev tmpfs tmpfs 7.8G 84K 7.8G 1% /dev/shm tmpfs tmpfs
SL_World
2021/09/18
1.7K0
索引构建磁盘IO太高,巧用tmpfs让内存来帮忙
在文本索引构建这种需要大量占用磁盘IO的任务,如果正巧你的内存还有点余粮,是否可以先索引存储到内存,然后再顺序写入到磁盘呢?,需要大量占用磁盘IO,如果正巧你的内存还有点余粮,是否可以先索引存储到内存,然后再顺序写入到磁盘呢?
JadePeng
2024/02/07
1960
索引构建磁盘IO太高,巧用tmpfs让内存来帮忙
Centos缩容home磁盘空间到根目录/下操作
自己在家里老笔记搭建的CentOS7系统用来跑一些服务,前段时间通过samba共享存储把小米摄像头视频进行实时转存到笔记本上,最近发现磁盘不足了,因为我默认是挂载到根目录下的,以前安装操作系统时把所有空间分配给了/home目录下,现在根目录的磁盘空间,又不想更改目录,所以打算把/home目录的空间腾出挂载给根目录,于是有了本篇文章。
Lcry
2022/11/29
2.1K0
springboot第49集:【思维导图】多线程,常用类与基础API,集合框架,泛型,数据结构源码...
在继承Thread类的方式中,同步监视器要慎用this,可以考虑使用:当前类.class。
达达前端
2024/01/17
3250
springboot第49集:【思维导图】多线程,常用类与基础API,集合框架,泛型,数据结构源码...
Docker疑难杂症汇总一
来源:https://www.escapelife.site/posts/43a2bb9b.html
入门笔记
2022/06/03
7700
Docker疑难杂症汇总一
docker - 占满根目录空间的解决方案
Docker 默认会占用根目录的空间,时间久了就会吧根目录占满,本文记录解决方案。 问题复现 不知不觉根目录已经没有空间,ls 的补全都会报错。 cannot create temp file for here-document: No space left on devic 可以看到 /已经没有空间了 $ df -h Filesystem Size Used Avail Use% Mounted on udev
为为为什么
2022/08/05
1.6K0
docker技术入门与精通(2020.12笔记总结)
大家好,又见面了,我是全栈君。 一.docker基本概念和框架 1.docker简介 docker:将引用程序自动部署到容器 2. docker info 显示docker 信息 3.docker Linux安装方法 并将当前用户加入docker用户组,不必须用sudo开头 docker安装后报错 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon run
全栈程序员站长
2022/07/18
4960
docker技术入门与精通(2020.12笔记总结)
Kubernetes(k8s)之分布式文件系统glusterfs
答:使用持久化存储nfs,但是使用nfs这个共享存储特别简单,但是后期在扩容和管理方面都特别的不方便,在生产中一般都是使用分布式文件系统,这里使用的是分布式文件系统glusterfs。
别先生
2020/07/06
1.4K0
Kubernetes(k8s)之分布式文件系统glusterfs
迁移 Docker 容器储存位置
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
soulteary
2019/09/27
2.3K0
GlusterFS分布式存储集群部署记录-相关补充
接着上一篇Centos7下GlusterFS分布式存储集群环境部署记录文档,继续做一些补充记录,希望能加深对GlusterFS存储操作的理解和熟悉度。 ========================清理glusterfs存储环境========================= 由上面可知,该glusterfs存储集群有四个节点: [root@GlusterFS-master ~]# cat /etc/hosts ....... 192.168.10.239 GlusterFS-master 192.1
洗尽了浮华
2018/04/19
1.9K0
CentOS 8合并home分区到root
新装CentOS的时候,选择了默认分区方案。300G的硬盘,装完后发现默认会分配50G到/root目录下,然后分配一些其他的目录,剩下的都会分配给/home目录。
Qwe7
2022/01/30
1.5K0
Docker是如何实现隔离的
容器化技术在当前云计算、微服务等体系下大行其道,而 Docker 便是容器化技术的典型,对于容器化典型的技术,我们有必要弄懂它,所以这篇文章,我会来分析下 Docker 是如何实现隔离技术的,Docker 与虚拟机又有哪些区别呢?接下来,我们开始逐渐揭开它的面纱。
xcbeyond
2020/06/19
1.9K0
Docker是如何实现隔离的
Docker Storage Driver - Overlay2
目前有多种文件系统可以被当作联合文件系统,实现如上的功能:overlay2,aufs,devicemapper,btrfs,zfs,vfs等等。而overlay2是docker目前推荐的文件系统:https://docs.docker.com/storage/storagedriver/select-storage-driver/
后端云
2022/11/25
7220
Docker Storage Driver - Overlay2
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
这些字段是用于描述ifstat命令输出结果中的网络接口的信息。下面是对这些字段的介绍:
刘大猫
2024/11/04
1780
推荐阅读
相关推荐
安装服务启动报错Failed to get D-Bus connection: Operation not permitted
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档