Linux软链接与硬链接区别

2023-11-10

一、背景

链接---------是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。

要了解链接,我们首先得了解一个概念,叫索引节点(inode)。在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号,我们可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。系统是通过索引节点(而不是文件名)来定位每一个文件。

ls -li
total xx
533124 drwxr-xr-x 9 apple apple 4096 May  4 10:22 apache-tomcat-8.5.41
360908 -rw-rw-r-- 1 apple apple   18 Jun  1 23:50 helloWolrd
360974 drwxr-xr-x 4 apple apple 4096 Jun  3 10:15 hi-cat
393217 drwxrwxr-x 6 apple apple 4096 May 28 09:37 program
518079 drwxrwxr-x 3 apple apple 4096 Mar  4 11:31 project

如上述命令 “ls -li” 结果中的第一列就是文件的 inode 号。系统是通过 inode 号寻找正确的文件数据块。 

二、硬链接(Hard Link)

硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的 innode 连接数就会增加 1 ; 而且只有当该文件的 inode 连接数为 0 时,才算彻底被将它删除。因此即便删除原始文件,依然可以通过硬链接文件来访问。需要注意的是,我们不能跨分区对文件进行链接。


可以用:ln命令来建立硬链接。

ln [options] existingfile newfile
ln [options] existingfile-list directory

用法:
第一种为”existingfile”创建硬链接,文件名为”newfile”。
第二种在”directory”目录中,为” existingfile-list”中包含的所有文件创建一个同名的硬链接。
常用可选[options]:-f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接。

使用java来描述这种行为,所有对象都是原始对象的引用,所以更改一个对象,其他对象都要改变

        Student student = new Student();  // 等同于在 Linux 新建了一个文件
        Student newStudent = student;     // 等同于给 Linux 文件新建一个硬链接
        student = null;                   // 删除原文件(的指针)
        if (newStudent != null) {      
            System.out.println("newStudent 不为空"); // 对象仍然存在 等同于 文件仍然存在
        }
 

三、软链接(Soft Link)

软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。和windows下的快捷方式差不多。所以删除了源文件,快捷方式都失效
可以用:ln -s 命令来建立软链接。

ln -s existingfile newfile
ln -s existingfile-list directory


参考:

ln - 软链接与硬链接区别_我的博客-CSDN博客_硬链接

linux ln 用法,知识(软链接和硬链接)_mengzuchao的专栏-CSDN博客_ln链接

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

Linux软链接与硬链接区别 的相关文章

  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定

随机推荐

  • 超简单! Flutter便捷添加资源图片,自动生成2x,x

    超简单 Flutter便捷添加资源图片 自动生成2x x https juejin im post 5e959da6e51d4546c349e52f 简书 https www jianshu com p 6df4663a7a14 注意 该插
  • C++11多线程:condition_variable头文件

  • VSCODE 使用插件 Doxygen Documentation Generator

    VSCODE 使用插件 Doxygen Documentation Generator 文章目录 VSCODE 使用插件 Doxygen Documentation Generator 1 安装插件 Doxygen Documentatio
  • QT5.14.2 Windows10下安装和配置

    QT5 14 2 Windows10下安装和配置 Qt下载 Qt安装 Qt创建一个项目 Qt下载 Qt的最新版本已更新 Qt6 5版本 但已改为登录Qt账号并在线安装 在线安装替换源 清华大学开源软件镜像站 本片选用最后的可离线安装的 ex
  • [论文阅读] (04) 人工智能真的安全吗?浙大团队外滩大会分享AI对抗样本技术

    外滩大会 AI安全 智能时代的攻守道 Deep Learning Security From the NLP Perspective 浙江大学 秀璋带你读论文 系列主要是督促自己阅读优秀论文及听取学术讲座 并分享给大家 希望您喜欢 由于作者
  • Labelme安装及使用教程

    Labelme安装教程 基于anaconda 1 创建anaconda虚拟环境labelme conda create n labelme python 3 6 完成之后如图所示 由于我已经创建了labelme故这里用labelme1代替
  • 产品思维用户思维

    用户思维是一种关注用户需求 体验和价值的思维方式 将用户放在产品设计 开发和提供服务的核心位置 它强调了理解用户在不同场景下的需求 提供与之相匹配的解决方案 从而帮助用户实现他们的目标 描述一个用户时 可以从不同角度来考虑 按人口属性描述用
  • 什么是搜索引擎?

    搜索引擎 搜索引擎是指根据一定的策略 运用特定的计算机程序从互联网上搜集信息 在对信息进行组织和处理后 为用户提供检索服务 将用户检索相关的信息展示给用户的系统 搜索引擎包括全文索引 目录索引 元搜索引擎 垂直搜索引擎 集合式搜索引擎 门户
  • 排序算法-选择排序

    属性 基本思想 每一次从待排序的数据元素中选出最小 或最大 的一个元素 存放在序列的起始位置 直到全部待排序的数据元素排完 过程 在元素集合array i array n 1 中选择关键码最大 小 的数据元素 若它不是这组元素中的最后一个
  • 刷脸支付完全融入了我们的日常生活

    现金支付的假币 丢失等问题层出不穷 随着现金交易出现的不便 银行卡的出现成为人们支付方式的一大转变 智能手机的发展和网络科技的进步催生了网络支付方式 AI智能技术的不断发展又让人们迎来了一场刷脸支付的新革命 刷脸支付是指用户在购物后的支付认
  • rabbitmq 连接报错 An unexpected connection driver error occured(亲测)

    在服务器上安装了一个RabbitMq 并新创建了一个用户授予了管理员角色 登录控制台查看一切正常 兴高采烈启动项目进行连接 结果一盆冷水下来 报如下错误 o s a r l SimpleMessageListenerContainer Fa
  • git中format-patch和chery-pick的区别和联系

    chery pick 把其他分支的一次或多次commit 在当前分支上重演 典型的使用场景 其他分支有很多提交 但是你只对其中的一部分感兴趣 这时候可以使用chery pick 只挑选其他分支感兴趣的commit 合并到自己的分支中 for
  • mybatis if-else(写法)

  • Debian GNU/Linux 中以源码方式安装Odoo 14(社区版)

    Odoo是一种流行的开源商务应用程序套件 可帮助公司管理和运营其业务 也可用于在线教学 它包括广泛的应用程序 Debian GNU Linux 是社区版服务器的代表 本文将介绍如何在Debian GNU Linux中以源码方式安装和部署Od
  • 垃圾回收之CMS GC

    一 六个阶段 阶段 1 Initial Mark 初始标记 这个阶段伴随着 STW 暂停 初始标记的目标是标记所有的 根对象 包括根对象直接引用的对象 以及被年轻代中所 有存活对象所引用的对象 老年代单独回收 阶段 2 Concurrent
  • 剑指 Offer 57. 和为s的两个数字(java+python)

    输入一个递增排序的数组和一个数字s 在数组中查找两个数 使得它们的和正好是s 如果有多对数字的和等于s 则输出任意一对即可 示例 1 输入 nums 2 7 11 15 target 9 输出 2 7 或者 7 2 示例 2 输入 nums
  • MyBatis快速入门

    Mybatis概述 Mybatis概念 MyBatis 是一款优秀的持久层框架 用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis 2010年这个项目由apache software foundatio
  • show process cpu

    Router show proc cpu CPU utilization for five seconds 63 50 one minute 58 five minutes 58 PID Runtime ms Invoked uSecs 5
  • NVM在windows下切换node版本

    如果您很忙或者很急 请直接阅读 三 步骤 一 问题背景 生活里偶尔穿梭在大街小巷中 工作中时常并行于多项目任务里 当多个项目并行时 由于创建的时间或人为选择等因素 各个项目里有着差异的node版本 这样我们在不同的项目里需要切换不同版本的N
  • Linux软链接与硬链接区别

    一 背景 链接 是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法 Linux中包括两种链接 硬链接 Hard Link 和软链接 Soft Link 软链接又称为符号链接 Symbolic link 要了解链接 我们首先得了