硬链接和软链接的区别和作用

2023-11-06

首先说说目录的本质和节点的概念:

在linux系统下一切皆文件,目录它也是一个文件,只不过在它里面存储的是
一张表的文件。

而节点就类似我们c语言中学过的数组的下标,我们可以把每个文件都看成是
数组中的元素,而知道了节点号,就可以找到实质的文件内容了。

有了以上的认识,我们进一步说说硬链接和软链接吧。

硬链接和软链接的区别

1.原理上:

硬链接(hard link):文件A是文件B的硬链接,则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。

软链接(soft link):A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。


2.使用限制上:

硬链接:

a:不能对目录创建硬链接,原因有几种,最重要的是:文件系统不能存在链接环(目录创建时的”..”除外,这个系统可以识别出来),存在环的后果会导致例如文件遍历等操作的混乱(du,pwd等命令的运作原理就是基于文件硬链接,顺便一提,ls -l结果的第二列也是文件的硬链接数,即inode节点的链接数)

b:不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统下。

c:不能对不存在的文件创建硬链接,由原理即可知原因。

软链接:

a.可以对目录创建软链接,遍历操作会忽略目录的软链接。

b:可以跨文件系统

c:可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了


3.命令

硬链接:ln 源文件名 链接名

软链接:ln -s 源文件名 链接名

硬链接和软链接的作用


硬链接:

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。只删除一个连接并不影响节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

还有如果把链接名创建为一个以.开头的隐藏文件,还能很好的隐藏自己的隐私(你们懂的..呵呵呵)。

软链接:

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


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

硬链接和软链接的区别和作用 的相关文章

  • 段错误...关于你好世界

    这段代码非常简单 但我在 x86 64 Linux 系统上遇到了段错误 这让我很烦恼 刚开始接触asm 请耐心等待 与 NASM 组装nasm f elf64 test asm 与连接ld o test test o SECTION tex
  • 何时用引号将 shell 变量括起来?

    我应该或不应该在 shell 脚本中用引号括住变量吗 例如 下列说法正确的是 xdg open URL eq 2 or xdg open URL eq 2 如果是这样 为什么 一般规则 如果它可以为空或包含空格 或实际上任何空格 或特殊字符
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • Linux 内核使用的设备树文件 (dtb) 可视化工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以图形化表示Linux内核中使用的硬件设备树的工具 我正在尝试了解特定 Arm 芯片组
  • 在 scapy 中通过物理环回发送数据包

    我最近发现了 Scapy 它看起来很棒 我正在尝试查看 NIC 上物理环回模块 存根上的简单流量 但是 Scapy sniff 没有给出任何结果 我正在做的发送数据包是 payload data 10 snf sniff filter ic
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • Python glob,操作系统,相对路径,将文件名放入列表中[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个目录中所有文件的列表 其中文件名以 root 结尾 在阅读了论坛中的一些文章后 我尝试使用 glob 和 os listdir 的基本策略 但我都遇到了麻烦 首先 当我使用 import glo
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 在汇编中使用 printf 会导致管道传输时输出为空,但可以在终端上使用

    无输出 https stackoverflow com questions 54507957 printf call from assembly do not print to stdout即使在终端上 当输出不包含换行符时也有相同的原因
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的

随机推荐

  • Hadoop环境搭建(主机名、Ip地址、映射及网络配置)

    一 在安装的虚拟机上修改主机名地址 1 显示当前主机名命令 hostname 2 修改主机名命令 方法 输入 vi etc hostname 方法 输入 hostnamectl set hostname 进入后在编辑模式下 删除原来的主机名
  • java操作excel获取每列的信息并按照学号-姓名格式创建文件夹

    1 导入Maven依赖
  • 数据库连接工具类

    数据库连接 概述 一 jdbc 实验环境搭建 二 Druid连接数据库 实验环境搭建 三 Maven连接数据库 实验环境搭建 四 mybatis连接数据库 实验环境搭建 五 Spring连接数据库 六 SSM 概述 什么是JDBC Java
  • 前端实现Jest单元测试

    介绍 最近在学一些关于工程化的内容 里面正好提到了jest单元测试 首先简单理解一下什么是单元测试 举个例子 小明同学偶然发现海海同学做的组件库不错 想学习一下 于是就拉了代码 不过在看代码的过程中发现有的代码有更优性能的方法 但是呢他自己
  • ctf.show web web1-web10

    ctf show web web1 web10笔记 记录一些web的知识点 本人刚开始学习web很多资料都是借鉴大佬的 许多复现的过程都是大同小异的 写的菜了请大佬们下手轻点 web1 一道简单的入门题 打开环境发现只有一串英文 flag在
  • 唯一索引比普通索引快吗?运行原理是什么?

    推荐阅读 项目实战 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画 AI讲话 翻译 GPU点亮AI想象空间 资源分享 史上最全文档AI绘画stab
  • 从源码角度深入分析iScroll中的scrollToElement方法

    问题1 官方解释 scrollToElement el time offsetX offsetY easing You re gonna like this Sit tight The only mandatory parameter is
  • cocos2d-x-2.2.4 (四) 将MyGame在Android上跑起来

    继续上一篇 我接着在MyGame工程干活 这次要将MyGame运行在Android设备上 要将cocos2dx的项目在Android上跑起来需要NDK和eclipse NDK用来编译cocos2dx的cpp文件 将其打包成动态库文件 例如l
  • 数字信号处理技术(二)变分模态分解(VMD)-Python代码

    本文仅对变分模态分解 VMD 的原理简单介绍和重点介绍模型的应用 1 VMD原理 变分模态分解 VMD 的原理在此不做详细介绍 推荐两个不错的解释参考连接 变分模态分解原理步骤 和VMD算法的介绍 官方源码 2 VMD应用实战 2 1 简介
  • AngularJS系列之JavaScript函数和对象

    转载请注明来源 http blog csdn net caoshiying viewmode contents 这篇文章针对的是有2年以上编程经验的朋友们参考的 作参考资料之用 不从基础讲起 在ES6之前 JavaScript没有class
  • Mybatis 入门

    1 Mybatis 项目构建 新建数据库 CREATE DATABASE mybatis USE mybatis DROP TABLE IF EXISTS user CREATE TABLE user id INT 20 NOT NULL
  • 多元共进|拓宽知识边界,持续增长技能

    在开放且迅速迭代的技术生态中 开发者面临着无限的机遇 与此同时 开发者的知识储备和技能水平也被赋予了更高的期待 2023 Google 开发者大会与开发者们共享了技术新知 也同步提供持续更新的学习资源 包括可以上手实践的课程和练习 加深开发
  • python+opencv+numpy入门

    一 简介 python是一门编程语言 由于其可以调用很多科学计算包 如numpy scipy matplotlib等而功能强大 numpy是python可调用的科学计算包 主要用于矩阵运算 它是python的数值计算扩展 这种工具可用来存储
  • STM32软件加密

    摘要 知识产权的保护 如何让自已辛勤的劳动成果不被别人抄袭 采用有效的手段对IC加密是值得每一个设计者关注的问题 当然 有人说 没有解不了密的IC 的确 解密是一项技术 只要有人类在不断的研究 它就有破解的一天 但是加密后的IC会增加破解的
  • 【数据库实验报告】关于SQL Server 简单的使用

    关于SQL Server 简单的使用 1 登陆SSMS 首先登陆 之前开启了sa账户 现在使用sa账户登陆 2 创建数据库 右键数据库 点击新建数据 输入数据库名称 然后确定 这个时候 已经新建了一个数据库了 现在在左侧管理器中 就可以看到
  • CaffeineCache基本使用 & SpringBoot集成缓存

    文章目录 一 常用API 1 get 2 getAll 3 refresh 二 缓存回收 清除 1 显式回收 2 隐式回收 2 1 基于容量 2 2 基于时间 2 3 基于引用 2 4 基于权重 三 刷新缓存 reload 四 监听器 五
  • 机房建设--服务器机柜尺寸参考

    自建或托管机房中常用的机柜规格为19英寸机柜 宽度 48 26cm 42U高度 1Unit 4 445cm 1 75英寸 选购需注意服务器机柜的进深通常为800mm 19英寸机柜尺度参考 称号 类型 规范尺度 mm 高 宽 深 备注 标准机
  • pktgen网络测试工具介绍

    pktgen是一款网络测试工具 可以用于压力测试 性能测试 负载均衡测试等方面 它使用Lua脚本来生成和发送数据包 并且支持多线程处理 pktgen可以在Linux系统上运行 支持多种协议和数据包类型 如TCP UDP ICMP ARP等
  • 砕月~イノチ~ - 小森きり

    From 我爱二次元 虾米电台 http www xiami com u 5627589 spm a1z1s 6626017 1561534497 3 3qsa0i Vocal 小森 Arranger 妄想放出所 haru 山野 原曲 砕月
  • 硬链接和软链接的区别和作用

    首先说说目录的本质和节点的概念 在linux系统下一切皆文件 目录它也是一个文件 只不过在它里面存储的是 一张表的文件 而节点就类似我们c语言中学过的数组的下标 我们可以把每个文件都看成是 数组中的元素 而知道了节点号 就可以找到实质的文件