一、 硬链接(实际链接)

(以linux系统为例)

1. 文件的索引节点inode

假设我们在硬盘当前目录下建立了一个名为mytext文本文件,其内容只有一行:This is my file。

(1) 这行文字存储在磁盘数据区某个具体位置里(物理上要通过磁头号、柱面号和扇区号来描述,在本例中假设分别是1、20、30)。

(2) 假设其inode是262457,那么系统通过一段标准程序,就能将这个inode转换成存放此文件的具体物理地址(1磁头、20柱面、30扇区),最终读出文件的内容:“This is my file.”

(3) 所以inode是指向一个文件数据区的指针号码,一个inode对应着系统中唯一的一片物理数据区,而位于两个不同物理数据区的文件必定分别对应着两个不同的inode号码。

2. 硬链接与inode的关系

通过上面的讨论,我们知道:

(1) 1个inode号码肯定和一片完全属于一个文件的数据区一一对应。那么一个文件系统中两个或更多个不同的文件名能否对应同一个文件呢?答案是肯定的。

(2) 我们知道inode号码是记录在文件名对应的目录项中的,我们可以使两个或多个文件的目录项具有相同的inode值,实际上就使它们对应着同一个文件。

(3) 有几个目录项具有相同的inode号,我们就说这个文件有几个硬连接(hardlink)。

(4) 对于普通文件,ls -l命令的连接计数count域的数值就是本文件拥有的硬连接数。硬连接可以通过ln命令建立

(5) 例如:

# ln /home/zyd/mytext hardlink_mytext,就建立了一个新的文件hardlink_mytext,这个文件的inode同样是262457。建立硬连接实际上只是增加了一个目录项,原文件的数据区由两个文件共享。这一方面能够节约大量磁盘空间,同时可以保证两个文件能同步更新。

262457 -rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 hardlink_mytext

262457 -rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 mytext

3. 链接计数count

文件的连接计数域表明本系统中共有几个文件目录项的inode和本文件相同,也就是本文件共有几个硬连接。如上面的例子中hardlink_mytext和mytext文件的count值都是2。

目录的count同样表示共有多少个目录项指向此目录,具体是等于本目录包含的直接子目录数(包括目录”.”和”..”,不包括子目录以下的目录)

4. 删除操作对硬链接的影响

当我们删除其中一个文件时,系统首先将(count-1)->;count,如果结果是零,就将其目录项和数据区都删除,否则只将本目录项删除,数据区仍然保留,仍然可以通过另外的文件名访问。根据这个特性,可以通过为重要的文件建立硬连接的方法来防止其被误删除。

5. 硬链接与复制的区别

(1) 复制

在当前目录复制一个文件,需要

a. 在当前目录中增加一个目录项,其文件名域填入新名字,并分配了一个新的inode号;

b. 将原文件的内容复制了一份到新的空闲物理块;

c. 填写一些其他关键信息,使系统通过这些信息及inode号码可以完成物理地址的转换。

所以文件复制要分配新的inode和新的数据区,虽然两个文件的内容是一样的。

(2) 硬链接

建立硬连接实际上只是增加了一个目录项,但并不复制文件数据区,原文件的数据区由两个文件共享。

6. 硬链接的限制

由于硬链接是在同一个分区上建立数据关联,所以有以下限制:

(1) 不能跨文件系统

(2) 不能链接目录

二、 软链接(符号链接)

软链接就是建立一个独立的文件,这个文件会让数据的读取指向它连接的文件内容,类似于windows系统的快捷方式。由于软链接是一个独立文件,因此会分配新的inode与块。

通过ln –s 源文件 符号链接文件 可以创建一个符号链接。

三、参考

1. 《shell十三问》

(完)

linux系统文件的链接的更多相关文章

  1. Linux系统硬链接和软链接介绍

    1.链接的概念 在Linux系统中链接分为硬链接和软连接两种,一种为硬链接,另一种为软连接或符号链接(symbolic Link).ln命令就是创建链接文件的,在默认不带参数的情况下,执行ln命令创建 ...

  2. linux系统文件说明

    linux系统文件说明 bin 系统命令目录 dev 设备目录 home 用户的家(每个系统用户在home下都有一个自己家) root超级用户在根目录下 lib 系统库目录.so动态库文件 media ...

  3. Linux操作系统的文件链接

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++标题:Linux操作系统的文件链接内容:文件链接时间:2019年 ...

  4. Linux系统文件和目录管理

    Linux系统文件和目录管理 相关命令的解析 1.pwd:显示用户当前的工作目录 2.ls: -a:显示所有文件,包括隐藏文件 -l:显示文件的详细信息 3.设备文件统一存放在/dev 设备文件 块设 ...

  5. linux系统文件

    关于linux系统文件命令 (1)Linux的文件系统目录配置要遵循FHS规范,规范定义的两级目录规范如下:        /home  每个账号在该目录下都有一个文件夹,进行数据的管理        ...

  6. 理解 Linux 的硬链接与软链接(待研究)

    从 inode 了解 Linux 文件系统 硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux ...

  7. linux文件系统与链接

    Linux的文件属性图1 图1   linux的文件属性 ls -lhi -l 长格式 -h 人性化 -i inodo -d 看目录自己的信息 inode 源自于文件系统 分区 平面设计图 格式化 施 ...

  8. 程序的链接和装入及Linux下动态链接的实现

    http://www.ibm.com/developerworks/cn/linux/l-dynlink/ 程序的链接和装入及Linux下动态链接的实现 程序的链接和装入存在着多种方法,而如今最为流行 ...

  9. 【原创】Linux下编译链接中常见问题总结

    前言 一直以来对Linux下编译链接产生的问题没有好好重视起来,出现问题就度娘一下,很多时候的确是在搜索帮助下解决了BUG,但由于对原因不求甚解,没有细细研究,结果总是在遇到在BUG时弄得手忙脚乱得. ...

随机推荐

  1. 【转】linux内核态和用户态的区别

    原文网址:http://www.mike.org.cn/articles/linux-kernel-mode-and-user-mode-distinction/ 内核态与用户态是操作系统的两种运行级 ...

  2. Markdown语法简单介绍

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 一.标题 # 这是标题一 ## 这是标题二 ### 这是标题三 #### 这是标题 ...

  3. logcat调试系统

    日志存放位置:/dev/log shell@xxx:/ $ ls /dev/log -l crw-rw-rw- root log , -- : events crw-rw-rw- root log , ...

  4. JAVASE02-Unit012: Unit07: XML语法 、 XML解析

    Unit07: XML语法 . XML解析 emplist.xml <?xml version="1.0" encoding="UTF-8"?> & ...

  5. cpp分解质因数

    原理有点像埃氏筛. #include <stdio.h> #include <iostream> #include <stdlib.h> using namespa ...

  6. git 查看&修改用户名

    $ git config user.name   查看用户名 $ git config user.email   查看邮箱 $ git config --global user.name " ...

  7. Codeforces-417D总结&题解

    在分析题目前,一定要完全读懂题目意思,否则一些都是白搭.这道理谁都懂,但是能每次都做到的人不多.比如本人,这次又粗心地在这里疯狂地踩坑了. (1)本题有这么一句话:But Gena's friends ...

  8. RAC环境TNS-12541报错处理

    按照前文所述搭建好RAC环境后,发现在rac2上面无法查看到listener的状态,如下: [oracle@rac2 ~]$ lsnrctl status LSNRCTL for Linux: Ver ...

  9. poj 3518 Prime Gap

    Prime Gap Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7392   Accepted: 4291 Descrip ...

  10. Linux 之 利用Google Authenticator实现用户双因素认证

    一.介绍:什么是双因素认证 双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产 ...