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. 手游项目Crash的上报

    基于cocos2d-x开发的手游,免不了会遇到崩溃.闪退,在非debug状态下定位问题异常的艰难,像我们项目是在cocos2dx的基础上封装了一层,然后又与lua进行互调.因为接受C++/移动端开发比 ...

  2. Android 代码实现应用强制装到手机内存

    在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置. android:inst ...

  3. 监听Listview的滚动状态,是否滚动到了顶部或底部

    /** * @author:Jack Tony * @description : 监听listview的滑动状态,如果到了顶部就刷新数据 * @date :2015年2月9日 */ private c ...

  4. [Web 前端] CSS篇之2. 清除浮动,什么时候需要清除浮动,清除浮动都有哪些方法

    cp: https://blog.csdn.net/zengyonglan/article/details/53304487 2. 清除浮动,什么时候需要清除浮动,清除浮动都有哪些方法 ? 一.什么时 ...

  5. C# winform DevExpress上传图片到数据库【转】

    实现功能如下图: 注明:此文使用的是DevExpress控件,winform 原生控件也是一样使用方法. 1.点击选择图片按钮,功能为通过对话框选择要上传的文件,并将该文件在下面的PictureEdi ...

  6. MSSQL 数据库语句原来是区分大小写的啊

    一直以来我们都认为数据库语句是不区分大小写,其实这是错误的认识,之所以不区分是因为数据库语言不区分大小写.这里我们以mssql2005中自带的AdventureWorksDW数据库为例. 执行以下语句 ...

  7. Binary Tree Level Order Traversal II leetcode java

    题目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from ...

  8. ORM数据库框架 SQLite 常用数据库框架比较 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. .Net程序员玩转Android开发--ListView单击事件

    public class ListViewClickActivity extends Activity {         private ListView lv;        SimpleAdap ...

  10. Jquery 让contains不区分大小写

    默认的Jquery contains方法是区分大小写的,以下方法可以使contains不区分大小写(在匹配时将要匹配的元素内容全部转换成小写再进行匹配) // NEW selector jQuery. ...