Linux 软连接和硬链接

2023-11-12

Linux 软连接和硬链接的'区别':
(1)软连接可以‘跨文件系统’,也即可以跨不同目录分区;而硬连接不可以;
(2)关于 I节点的问题 。硬连接不管有多少个,都指向的是同一个I节点(I节点相同),会把‘结点连接数’增加;
   (I节点,也即文件的编号,唯一标示)只要结点的连接数不是0,文件就一直存在 ;不管你删除的是源文件还是连接的文件 ,
    只要有一个存在 ,文件就存在; (其实也不分什么源文件、连接文件的,因为他们指向的‘都是同一个I节点’)
    注意:不能随便删除硬链接文件,否则会删除源文件; 当你修改源文件或者连接文件任何一个的时候 ,其他的文件都会做
    ‘同步的修改’。软链接‘不直接使用i节点号’作为文件指针,而是‘使用文件路径名’作为指针。
   (也即软连接文件的I节点与源文件不相同,而是重新生成;)所以删除软连接文件(符号链接文件),对源文件无影响;
    但是删除源文件,则对于所有的连接文件就会找不到要指向的文件 。
    软链接有自己的inode,并在磁盘上有一小片空间存放路径名.
(3)软连接可以对一个‘不存在的文件名’进行连接 。
(4)软连接可以‘对目录’(文件当然可以)进行连接。(而硬链接‘只能对文件’进行连接;)


备注:
I节点 :
它是UNIX内部用于描述‘文件特性’的数据结构. 我们通常称‘I节点’为文件索引结点(信息结点). i节点含有关于文件的大部分的重要信息,包括‘文件数据块’在磁盘上的地址. 每一个I节点有它‘自己的标志号’,我们称为文件顺序号. I节点包含的信息:1.文件类型 2.文件属主关系 3.文件的访问权限 4.文件的时间截.
linux系统下提供‘ln指令’来进行文件链接。 文件链接主要分为硬链接和软链接。
硬链接: 由于linux下的文件是‘通过索引节点(Inode)’来识别文件; ‘硬链接’可以认为是‘一个指针’,指向文件索引节点的指针,系统并‘不为’它重新分配inode。 每添加一个一个硬链接,文件的链接数就加1。
  可以用:‘ln命令’来建立硬链接。语法:
  ln [options] existingfile(已存在的文件) newfile
ln[options] existingfile-list directory
用法: 第一种:为”existingfile”创建硬链接,文件名为”newfile”。 第二种:在”directory”目录中,为 ”existingfile-list”中包含的‘所有文件’创建一个同名的硬链接。 常用可选[options] ,–f 无论”newfile”存在与否,都创建链接; -n 如果”newfile”已存在,就不创建链接。 硬链接‘不足之处’:

尽管硬链接节省空间,也是Linux系统‘整合文件系统’的传统方式,但是: (1)不可以在‘不同文件系统’的文件间建立链接 (2)‘只有超级用户’才可以‘为目录’创建硬链接。 (一般用户只能‘对文件’进行硬链接;)
软链接(符号链接):

软链接克服了硬链接的不足,没有任何文件系统的限制, ‘任何用户’可以创建‘指向目录’的符号链接。 因而现在更为广泛使用,它具有更大的灵活性, 甚至可以跨越不同机器、不同网络对文件进行链接。
如果给ln命令加上- s选项,则可以建立软链接。 如果[链接名]已经存在但不是目录,将不做链接。 [链接名]可以是任何一个文件名(可包含路径),也可以是一个目录, 并且允许它与 “目标”不在同一个文件系统中。 如果[链接名]是一个‘已经存在的目录’,系统将‘在该目录下’建立一个或多个与“目标”同名的文件, 此新建的文件实际上是‘指向原 “目标”’的符号链接文件。
软链接与硬链接,区别不仅仅是在概念上,在实现上也是不同的。 ‘实现上的’区别在于: 硬链接原文件和链接文件‘公用’一个inode号,说明他们是同一个文件; 而软链接原文件和链接文件‘拥有不同的’inode号,表明他们是两个不同的文件; 在文件属性上‘软链接’明确写出了是链接文件,而硬链接没有写出来; 因为‘在本质上’,硬链接文件和原文件是完全平等关系; 链接数目是不一样的,软链接的链接数目不会增加; 文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,因为二者是‘等同’的嘛; 而这里软链接显示的大小与原文件就不同了,如file1大小是48B,而file1soft是5B, 这里面的5,实际上就是“file1”的大小。
总之,建立‘软链接’就是建立了一个‘新文件’。 当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到‘真正要访问的文件’。
对于‘软连接’的缺点:
因为链接文件包含有原文件的路径信息, 所以当原文件从一个目录下‘移到’其他目录中,再访问链接文件,系统就找不到了; 而硬链接就没有这个缺陷,你想怎么移就怎么移; 还有,它要系统分配额外的空间,用于建立‘新的索引节点’和保存原文件的路径。

============================================================================================
其他资料: http://www.cyberciti.biz/tips/understanding-unixlinux-symbolic-soft-and-hard-links.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 软连接和硬链接 的相关文章

  • 如何为 Linux 桌面条目文件指定带有相对路径的图标?

    对于我的一个 Linux 应用程序 我有应用程序二进制文件 一个 launcher sh 脚本 针对 LD LIBRARY PATH 和一个 desktop 文件 所有这些都位于同一文件夹中 我想使用图标的相对路径而不是绝对路径 我试过了
  • 在 Linux 上以编程方式设置 DNS 名称服务器

    我希望能够通过我的 C C 程序为 Linux 上的 DNS 名称服务器添加 IP 地址 我在一个带有只读 etc resolv conf 的嵌入式平台上 这意味着我不能简单地将 nameserver xxx xxx xxx xxx 行添加
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 内核的panic()函数是否完全冻结所有其他进程?

    我想确认内核的panic 功能和其他类似kernel halt and machine halt 一旦触发 保证机器完全冻结 那么 所有的内核和用户进程都被冻结了吗 是panic 可以被调度程序中断吗 中断处理程序仍然可以执行吗 用例 如果
  • 配置tomat的server.xml文件并自动生成mod_jk.conf

    我在用apache 2 2 15 and tomcat6 6 0 24 on CentOS 6 4并希望使用 tomcat 服务器的功能 通过添加以下内容自动生成 mod jk conf 文件
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • ansible unarchive 模块如何查找 tar 二进制文件?

    我正在尝试执行一个 ansible 剧本 该剧本的任务是利用unarchive模块 因为我是在 OSX 上执行此操作 所以我需要使用它gnu tar 而不是bsd tar通常与 OSX 一起提供 因为BSD tar 不受官方支持 https
  • 何时用引号将 shell 变量括起来?

    我应该或不应该在 shell 脚本中用引号括住变量吗 例如 下列说法正确的是 xdg open URL eq 2 or xdg open URL eq 2 如果是这样 为什么 一般规则 如果它可以为空或包含空格 或实际上任何空格 或特殊字符
  • 来源和出口有什么区别?

    我正在编写一个 shell 脚本 以读取具有 key value 对的文件并将这些变量设置为环境变量 但我有疑问 如果我这样做source file txt是否会将该文件中定义的变量设置为环境变量 或者我应该逐行读取文件并使用导出命令设置它
  • 如何在shell脚本中给出密码?

    在 shell 脚本文件中 我使用一些命令 例如scp and make install要求我输入密码 我运行一个 shell 脚本来编译一个大项目 一段时间后它会要求我输入密码才能使用scp 我需要等待该过程并在此之后提供密码 我只想通过
  • 在 C 中运行 setuid 程序的正确方法

    我有一个权限为4750的进程 我的Linux系统中存在两个用户 root 用户和 appz 用户 该进程继承以 appz 用户身份运行的进程管理器的权限 我有两个基本惯例 void do root void int status statu

随机推荐

  • 最全微信小程序button按钮各种默认样式(需重置button样式时必备)

    默认样式 button position relative display block margin left auto margin right auto padding left 14px padding right 14px box
  • python随机添加噪声(高斯,椒盐,对比度高低)

    class NoiseGenerator object def generated noise self img num print for i1 char in enumerate num if num i1 0 img self ori
  • 层次聚类详解(附代码)

    本篇博客主要介绍机器学习算法中的层次聚类 层次聚类不同于传统的K Means聚类算法 它在初始K值和初始聚类中心点的选择问题上会存在优势 层次聚类 层次聚类就是一层一层的进行聚类 可以由下向上 或由上向下进行聚类 先计算样本之间的距离 每次
  • DLL注入技术

    转载自 http hi baidu com xwind85 blog item ae5332ad04bb7f034a36d662 html 一 DLL注入技术的用途 DLL注入技术的用途是很广泛的 这主要体现在 1 假如你要操纵的对象涉及的
  • 4diacIDE IEC61499 开发环境编译

    4diac是IEC61499 分布式控制系统的开源项目 主要分为开发环境IDE和运行时Forte两部分组成 IDE 是基于Eclipse IDE 使用java 开发的程序 而Forte是使用C 开发的程序 4diac 项目要在实际工程中使用
  • 【matplotlib】画图基本函数 pyplot 画曲线图

    from matplotlib import pyplot as plt 1 1 plot函数 生成1991 到2021数据作为x轴 dates np arange 1991 2021 生成50到500的随机数 30个作为y轴 sales
  • 出现段错误的情况汇总

    1 访问数组时超过数组边界 int data 20 int n for n 0 n lt 20 n operate on data n 上面声明的数组长度为20 但是却会访问data 20 已经超过了数组边界 导致段错误出现 2 数组的长度
  • git 重新定位服务器地址

    git服务器地址变了 客户端需要两个步骤来切换到新地址 1 首先重新生成ssh 使用如下命令 ssh keygen t rsa C qq com 这条命令会生成秘钥文件 默认文件路径是 userprofile ssh id rsa pub
  • 微信小程序:云开发·初探二

    I ll never finish falling in love with you 自己编写云服务 后台 在目录cloudfunctions上右键 新建node js云函数 开发者工具会自动打开终端 package json 是npm的配
  • 回顾:C++语法点等

    多态 虚函数相关 封装可以使代码模块化 继承可以在原有的代码基础上扩展 它们的目的都是为了代码重用 而多态则是为了接口重用 就是说不论传递过来的是哪个类的对象 函数都能够通过同一个接口调用到适应各自对象的实现方法 多态主要通过重载 静态 和
  • windows环境下进入docker虚拟机的方式

    今天在docker的简易应用栈搭建的过程中 遇到一个问题 就是查看一个容器的存储卷挂在本地 发现进不去 原因是 我的环境docker是装在win10上的一个虚拟机上 我直接在power shell的命令行下进入会报错 提示我没有这个路径 原
  • 2023-5-24第二十四天

    corrupt贪污 腐败 破坏 interrupt中断 utility公共设施 多功能的 esoteric只有内行才懂的 难领略的 intergrate合并 整合 specification规格 规范 标准 concept概念 观点 pre
  • an exception occurred while initializing the database.

    对于手动删除本地的LocalDB数据库之后出现标题所示异常的 推荐下面的命令 sqllocaldb exe stop v11 0 sqllocaldb exe delete v11 0 在程序包管理器控制台或者Visual Studio自带
  • 基于Python和mysql开发的商城购物管理系统分为前后端(源码+数据库+程序配置说明书+程序使用说明书)

    一 项目简介 本项目是一套基于Python和mysql开发的商城购物管理系统 主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者 包含 项目源码 项目文档 数据库脚本等 该项目附带全部源码可作为毕设使用 项目都经
  • 关于内存地址和内存空间的理解。

    1 内存地址用4位16进制和8位16进制表示的区别 例如经常可以看到某些书籍上写的内存地址0x0001 在另外一些书籍上写的内存地址又变成了0x00000001 都是表示的编号为1的内存地址 为什么一个是4位16进制表示 另外一个又是用8位
  • MPP架构学习

    原文链接 https blog csdn net qq 42189083 article details 80610092 1 什么是MPP MPP Massively Parallel Processing 即大规模并行处理 在数据库非共
  • PE文件资源解析(九)版本信息资源的解析

    版本信息资源 在这里指的是资源类型为RT VERSION的资源信息 通过ResHacker看到的效果图如下 版本信息资源存储编码格式是UNICODE 解析代码如下 HRSRC hResrc FindResourceEx HMODULE hM
  • 搭建个人深度学习环境(一)—— 单GPU主机配置

    前言 硬件配置 配置表 选择原因 配置总结 系统环境配置及驱动安装 安装ubuntu 16 04 制作启动盘 安装系统 UEFI启动 安装驱动 网卡驱动 显卡驱动 前言 因为实验室服务器不够用 所以准备自己搭建一台搭载高性能GPU的主机作为
  • 用来进行虚拟仿真实验的软件有哪些?这3款简单易懂的软件值得你拥有

    用来进行虚拟仿真实验的软件有哪些 实验教学是高等院校培养高素质合格人才的重要实践性环节 它是学生巩固和加深对理论知识的理解 锻炼在实践中发现问题 分析问题和解决问题的能力 虚拟实验室在培养学生的实践能力 研究能力 创新能力和综合素质等方面有
  • Linux 软连接和硬链接

    Linux 软连接和硬链接的 区别 1 软连接可以 跨文件系统 也即可以跨不同目录分区 而硬连接不可以 2 关于 I节点的问题 硬连接不管有多少个 都指向的是同一个I节点 I节点相同 会把 结点连接数 增加 I节点 也即文件的编号 唯一标示