前言

我们都知道文件都有文件名和数据,这在 Linux 上被分成两个部分:用户数据(user data)与元数据(metadata)。

用户数据,即文件数据块(data block),数据块是记录文件真实内容的地方;

元数据是文件的附加属性,如文件大小、创建时间、所有者等信息。

在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号) 才是文件的唯一标识而非文件名。

文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。

下图为通过文件名打开文件的过程

在 Linux 系统中查看 inode 号可使用命令 stat 或 ls -li

ls -li test.php

输出:

total 0
8635155045 -rw-r--r-- 2 zhengjianhong staff 0 Jun 14 13:35 test.php

如果使用命令 mv 移动并重命名文件,不影响文件的用户数据及 inode 号。

一、什么是软链?

软链接(又称符号链接,即 soft link 或 symbolic link),若文件的数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接,类似变量引用或 Windows 中的快捷方式。

软链接有着自己的 inode 号以及用户数据块。

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

二、创建软链

ln  -s  [源文件或目录]  [目标文件或目录]

软链接的用户数据也可以是另一个软链接的路径,其解析过程是递归的。

但需注意:软链接创建时原文件的路径指向使用绝对路径较好。

使用相对路径创建的软链接被移动后该软链接文件将成为一个死链接(如果软链接使用相对路径,则不宜被移动),因为链接数据块中记录的亦是相对路径指向。

删除软链接

rm –rf 软链接名称

修改软链接

ln –snf  [新的源文件或目录]  [目标文件或目录]

这将会修改原有的链接地址为新的地址

三、为什么要使用软链

  • 节省磁盘空间;
  • 实现文件共享;
  • 增加权限安全。

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一份相同的文件,我们只要在某个固定的目录,放上该文件,然后在其他的目录下用 ln 命令链接它就可以,

不必重复的占用磁盘空间。

ln 命令会保持每一处链接文件的同步性,不论你改动了哪一处,其他的文件都会发生相同的变化。

四、什么是硬链

硬链接 (hard link),若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名。

硬链接可由命令 ln 创建。

五、创建硬链

ln oldfile newfile

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

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

硬链接不能对目录创建是受限于文件系统的设计。

现 Linux 文件系统中的目录均隐藏了两个个特殊的目录:当前目录(.)与父目录(..)。查看这两个特殊目录的 inode 号可知其实这两目录就是两个硬链接(注意目录 /mnt/lost+found/ 的 inode 号)。若系统允许对目录创建硬链接,则会产生目录环。

六、硬链和软链的区别

无法为文件夹创建硬链接;

只能对已存在的文件创建硬连接;

硬链不能交叉文件系统;

硬链有相同的 inode 号以及 data block;

无论硬链接还是软链接,文件都会保持同步变化。

Linux ln命令 软链和硬链的更多相关文章

  1. Linux:ln命令详解(软连接,硬链接)

    ln ln命令用来为文件创件连接,连接类型分为硬连接和软连接(符号连接)两种,默认的连接类型是硬连接.如果要创建软连接必须使用"-s"选项. 硬链接 建立硬链接时,在另外的目录或本 ...

  2. Linux ln命令:在文件之间建立链接(硬链接和软链接)详解版1

    Linux ln命令:在文件之间建立链接(硬链接和软链接)详解版 < Linux创建文件及修改文件时间戳(touch命令)Linux复制文件和目录(cp命令) > <Linux就该这 ...

  3. Linux ln命令具体解释及使用

    Linux ln命令具体解释及使用 ln是linux中一个很重要命令,它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最经常使用的參数是-s,详细使用方法是:ln –s 源文件 目标文 ...

  4. ln命令:软链接与硬链接的区别与应用

    ln命令:软链接与硬链接的区别与应用 摘要 Linux系统中,链接是一个十分常见且实用的文件处理命令,它分为软链接和硬链接两种类型.软链接类似于Windows中的快捷方式,硬链接又有着与原文件保持同步 ...

  5. Linux ln命令 - 建立文件/目录链接

    转自Linux ln命令 - 建立文件/目录链接 1. 使用方式:ln [option] source_file dist_file                     -f 建立时,将同档案名删 ...

  6. 每天一个linux命令21之ln: linux 下的软链和硬链

    首先理解一下一下inode:Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件. 表面上,用户通过文件名,打开文件.实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应 ...

  7. linux ln 命令(转载)

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件. 当我们需要在不同的目录,用到相同的 ...

  8. linux ln 命令使用参数详解(ln -s 软链接)

    ln是linux中一个非常重要的命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...

  9. linux ln 命令使用参数详解(ln -s 软链接)(转)

    这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件. 当 我们需要在不同的 ...

  10. Linux ln 命令

    Linux 中的文件分为 Hard Link 和 Symbolic Link 两种.Hard Link 文件又被称为硬链接文件.实体链接文件,Symbolic Link 文件则常被称为符号链接.软链接 ...

随机推荐

  1. 处理日期和时间的chrono库

    C++11中提供了日期和时间相关的库chrono,通过chrono库可以很方便地处理日期和时间,为程序的开发提供了便利.chrono库主要包含三种类型的类:时间间隔duration.时钟clocks. ...

  2. Ant Design Mobile 覆盖默认的样式。

    直接在css中这样写是不行的,完全没有效果. .am-list-item.am-input-item { height: 36px; min-height: 30px; } 要像下面这样,加上glob ...

  3. 支付宝携手HarmonyOS SDK实况窗,开启便捷停车生活

    6月,华为开发者大会2025与全球开发者一起,用代码和创新编制智慧时代的经纬.这里不仅是技术峰会,更是开发者的「主场」,6月21日,<HarmonyOS SDK使能高效开发,打造优质创新应用体验 ...

  4. pkuwc and noiwc游记

    博主有奇怪的打字癖好 eg(虽然可能并不会包含其中的某些东西): 豪吃=好吃 事=是 勒si人呐=这是人啊 姜汁=姜经理=副教 pkuwc游记 day -1 浙江的天气预报好神秘,怎么零下到十多度啊, ...

  5. Java学习篇(四)—— Java 多线程

    如何创建一个线程? Java创建线程有两种方法,这里对三种方法做一个梳理,方便理解. 实现Runnable接口和run()方法 Java的接口就是一种协议,约定了想要被统一管理的类要遵循的协议.在Ja ...

  6. SQL Server 游标写入数据

    https://www.cnblogs.com/wanghonghu/p/4093411.html set identity_insert 表名 ON --允许对自增列Id插入指定数据 insert ...

  7. c#基础(视频)

    可空类型 类型后面+?就可以声明可空类型了,可空类型和普通的类型是两种类型,赋值时需要进行类型转换 例如 double? num=null: 面向对象 三大特征 封装 打包,便于管理 继承 拿来主义, ...

  8. Transformer模型原理概述

      Transformer 是一种基于自注意力机制(Self-Attention)的深度学习模型,最初由 Google 在 2017 年的论文<Attention Is All You Need ...

  9. Codeforces Round #665 (Div. 2) ABC题解

    A. Distance and Axis 题意:给出OX坐标上OA的长度,每次可以将A移动一个单位,问最少多少次可以找出坐标B的整数解使得 | OB - AB | = k. 思路:分类讨论. 1.若B ...

  10. 如何测试wifi的吞吐率

    基本知识储备 Interval 表示时间间隔, transfer 表示时间间隔传输的数据量, Bandwidth是时间间隔里的传输速率. Jitter 表示抖动. Lost/Total 表示丢包的数量 ...