1.Linux链接概念

Linux链接分两种,一种被称为硬链接(Hard Link)。还有一种被称为符号链接(Symbolic Link)。默认情况下。ln命令产生硬链接。

1.1索引节点

索引节点是指在很多类Unix文件系统中的一种数据结构。每一个索引节点保存了文件系统中的一个文件系统对象的元信息数据,但不包括数据内容或者文件名称。

inode包括文件的元信息,详细来说有下面内容:

  * 文件的字节数

  * 文件拥有者的User ID

  * 文件的Group ID

  * 文件的读、写、运行权限

  * 文件的时间戳。共同拥有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  * 链接数,即有多少文件名称指向这个inode

  * 文件数据block的位置

  

能够用stat命令。查看某个文件的inode信息:

stat example.txt

**注意:**Unix/Linux系统内部不使用文件名称,而使用inode号码来识别文件。对于系统来说,文件名称仅仅是inode号码便于识别的别称或者外号。表面上,用户通过文件名称,打开文件。

实际上,系统内部这个过程分成三步:首先,系统找到这个文件名称相应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

1.2硬连接

普通情况下。文件名称和inode号码是”一一相应”关系,每一个inode号码相应一个文件名称。可是,Unix/Linux系统同意,多个文件名称指向同一个inode号码。这意味着,能够用不同的文件名称訪问相同的内容;对文件内容进行改动。会影响到全部文件名称;可是,删除一个文件名称。不影响还有一个文件名称的訪问。这样的情况就被称为”硬链接”(hard link)。

硬链接就是同一个文件使用了多个别名(他们有共同的 inode)。在Linux中,多个文件名称指向同一索引节点是存在的。一般这样的连接就是硬连接。硬连接的作用是同意一个文件拥有多个有效路径名,这样用户就能够建立硬连接到关键文件。以防止“误删”的功能。其原因如上所述。由于相应该文件夹的索引节点有一个以上的连接。仅仅删除一个连接并不影响索引节点本身和其他的连接。仅仅有当最后一个连接被删除后。文件的数据块及文件夹的连接才会被释放。也就是说,文件真正删除的条件是与之相关的全部硬连接文件均被删除。

1.3软链接

第二种连接称之为符号连接(Symbolic Link),也叫软连接。

软链接文件有相似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中。文件实际上是一个文本文件,当中包括的有还有一文件的位置信息。

1.4硬链接与拷贝的差别

硬链接仅仅是通过文件的别名指向了文件的inode(索引节点)。inode是操作系统指定文件的根据。每一个文件有且仅仅有一个inode。所以操作硬链接就是操作源文件。而复制则能够看成新建一个文件并拷贝原文件的内容。

2.通过实验加深理解

[oracle@Linux]$ touch f1 #创建一个測试文件f1

[oracle@Linux]$ ln f1 f2 #创建f1的一个硬连接文件f2

[oracle@Linux]$ ln -s f1 f3 #创建f1的一个符号连接文件f3

[oracle@Linux]$ ls -li # -i參数显示文件的inode节点信息

total 0

9797648 -rw-r–r– 2 oracle oinstall 0 Apr 21 08:11 f1

9797648 -rw-r–r– 2 oracle oinstall 0 Apr 21 08:11 f2

9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f3 -> f1

从上面的结果中能够看出,硬连接文件f2与原文件f1的inode节点相同。均为9797648,然而符号连接文件的inode节点不同。

[oracle@Linux]$ echo “I am f1 file” >>f1

[oracle@Linux]$ cat f1

I am f1 file

[oracle@Linux]$ cat f2

I am f1 file

[oracle@Linux]$ cat f3

I am f1 file

[oracle@Linux]$ rm -f f1

[oracle@Linux]$ cat f2

I am f1 file

[oracle@Linux]$ cat f3

cat: f3: No such file or directory

通过上面的測试能够看出:当删除原始文件f1后,硬连接f2不受影响。可是符号连接f1文件无效。

3.总结

依此您能够做一些相关的測试。能够得到下面全部结论:

(1)删除符号连接f3,对f1,f2无影响;

(2)删除硬连接f2,对f1,f3也无影响;

(3)删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;

(4)同一时候删除原文件f1,硬连接f2,整个文件会真正的被删除。

(5)硬链接是文件的不同名称,软连接是文件名称的超链接。文件名称不存在。超链接就失效了。

參考文献

[1]http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html

[2]http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html

[3]

url=U9a3ioCFwNCSsubL1Fg9FKDHgs6q5GE8qnFY_HdYh-9elU4Cwl0PQV4_zSnVYQqluKjLJ2Y8ZEtUss-r2jZzla">http://zhidao.baidu.com/link?

url=U9a3ioCFwNCSsubL1Fg9FKDHgs6q5GE8qnFY_HdYh-9elU4Cwl0PQV4_zSnVYQqluKjLJ2Y8ZEtUss-r2jZzla

[4]索引节点.百度百科

Linux文件的软链接和硬链接的更多相关文章

  1. 深入解读键值产生原理,linux中的软链接和硬链接(转)

    键值 = 文件标示符 + 项目ID 当用到进程间的通信时, 必须要注意到的是键值是怎么产生的,我们知道任何一个文件时通过文件名来访问的, 而内核在对应的给其一个值,也就是文件标示符. 系统建立IPC通 ...

  2. Linux中的链接文件_软链接和硬链接

    一.链接文件介绍 Linux操作系统中的“链接文件”分为硬链接(hard link)和软链接(symbolic link).两种链接的本质区别在于inode.以下是详细介绍: 硬链接:当系统要读取一个 ...

  3. 2017-7-18-每日博客-关于Linux下的软链接和硬链接.doc

    ln命令 该命令在文件之间创建链接.这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称.对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题. 如果链 ...

  4. Linux学习笔记 软链接和硬链接

    Linux 中,"everything is file".接下来给大家介绍 linux 如何通过链接,达到节省磁盘空间.共享文件等目的.链接文件有两种方式,软链接(soft lin ...

  5. Linux常用基本命令(软链接与硬链接 )

    硬链接:相当于文件的多个入口,作用:备份文件,创建快照等 软链接:相当于windows的快捷方式 命令格式: ln option 源文件 目标文件 -s: 创建软链接 1,创建硬链接: ghostwu ...

  6. Linux中的软链接与硬链接

    软链接相当于windows的快捷方式,当源文件不存在时,软链接失效. 链接是指向文件名,当指向的文件名字删除的时候,就找不到源文件了.硬链接是指向文件本身,删除一个文件名字,还是可以找到源文件的.ls ...

  7. linux下的软链接与硬链接

    在 Linux 底下的连结档有两种,一种是类似 Windows 的快捷方式功能的文件,可以让你快速的链接到目标文件(或目录);这种链接称为软链接. 另一种则是透过文件系统的 inode 连结来产生新档 ...

  8. linux 创建软链接和硬链接

    Linux 系统中有软链接和硬链接两种特殊的“文件”. 软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录. 硬链接则透过文件系统的inode来产生新档名,而不是产生新档案. ...

  9. Linux 中软链接和硬链接的使用

    Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link). 硬链接和软链接 硬链接 --- ln 要链接的文件 新硬链接名 软连接 --- l ...

随机推荐

  1. Mac 安装zsh

    1.安装zsh mac下自带zsh,但不是最新.查看zsh版本:zsh --version如果没有安装, 可以通过brew安装最新版,brew install zsh 2.安装oh-my-zsh cd ...

  2. Android在Gallery中每次滑动只显示一页

    import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; impo ...

  3. Eclipse with ADT的安装和配置

    我们从安卓官方网站(https://developer.android.com/sdk/index.html#download)下载下来的eclipse是捆绑好了ADT的,所以不用自己安装插件,十分方 ...

  4. JAVA中String.format的用法 格式化字符串,格式化数字,日期时间格式化,

    1.对整数进行格式化:%[index$][标识][最小宽度]转换方式        我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解, ...

  5. 测试 Java 类的非公有成员变量和方法

    引言 对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的 ...

  6. go语言之进阶篇主协程先退出导致子协程没来得及调用

    1.主协程先退出导致子协程没来得及调用 示例: package main import ( "fmt" "time" ) //主协程退出了,其它子协程也要跟着退 ...

  7. Create an Android library

    官方文档 创建 Android 库 [Create an Android library] Android 库在结构上与 Android app module 相同.它可以提供构建应用所需的一切内容, ...

  8. C# MemCached分布式缓存

    using System; using System.Collections.Generic; using System.Text; using Memcached.ClientLibrary; us ...

  9. C++模拟键盘消息

    实现功能:在现有DLL程序中向特定的EXE窗口中发送模拟键盘的消息 使用API根据窗口标题递归查找特定的窗口句柄,之后模拟调用. 注意:keybd_event函数不能在VS下使用,所以用SendInp ...

  10. Java提高篇(转)

    http://www.cnblogs.com/mfrank/category/1118474.html Day1 抽象类 Day2 接口 Day3 抽象类与接口的比较 Day4 Java中的回调 Da ...