说到Linux中的软硬链接,就必须谈一下Linux的文件系统的组成的重要部分iNode和block。

首先是iNode,先用一张图了解一下iNode在Linux文件系统中的地位:

Linux中的文件的文件名、文件属性和文件的数据是分开存储的。在文件系统初始化的时候,硬盘就被分成两个区域iNode区(iNode table)和数据区(block)。文件名存放在目录项(dentry)中,文件的属性存放在iNode中,而文件的内容,即文件的实际数据存放在block中。目录文件是特殊的文件,这是因为目录文件中的数据是一个关联列表,保存文件名(包括目录名)和iNode的映射。这也导致了如果一个用户对一个目录只有r权限,那么他只能读取目录下的文件名和iNode的id,而无法读取这些iNode中存放的文件的属性信息,读取这些信息需要x权限。

通常一个iNode的大小为128B,iNode中的内容如下:

 1.文件的字节数;
 2.文件拥有者的User id;
 3.文件的Group id;
 4.文件的读、写、执行权限(r,w,x);
 5.文件的时间戳,ctime 指iNode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间;
 6.链接数,即有多少文件名指向这个iNode;
 7.文件对应的block的位置
 可以用stat命令,查看某个文件或目录的iNode信息:
 
硬盘中的iNode有限的,用df -i可以查看系统的iNode使用情况:
 
系统访问文件时先查找目录项中文件名和iNode的映射表,然后根据iNode中的文件的block号和文件的大小来访问文件的数据所在的block。
硬链接:
一般情况下,文件名和iNode是“一一对应”的,就如上面的例子中的user_file.txt的链接数为1,说明没有其他的文件名链接到这个iNode。看下面的例子:
myBPR的链接数是2,说明存在硬链接,即还有其他的文件名链接到这个iNode。这时通过其中一个文件名修改文件中的内容会对这两个文件都有影响。但是删除一个文件名,并不会影响另一个文件名的正常访问。
 
软链接:
这种链接中,两个文件(文件A 和 B)的文件名和iNode都不同(硬链接中,两个文件的文件名不同,但是iNode相同),但是其中一个文件(假设是文件A)的block中存放的内容是另一个文件(假设是文件B)的路径(即绝对路径,包括文件名),这种情况下,访问文件A时,系统会自动根据文件A的block中的内容访问文件B的block中存放的内容。此时如果文件B被删除,再访问文件A时,系统会报错,告知用户该文件不存在。这从一定程度上保证了安全性。不同于硬链接,软链接会消耗系统的iNode。
 
硬链接和软链接的主要区别在于:
(1)软链接可以跨文件系统,硬链接不可以。
(2)硬链接不管有多少个,都指向的是同一个iNode,会把iNode链接数增加只要iNode的链接数不是 0,文件就一直存在,不管你删除的是源文件还是链接的文件。只要有一个存在,文件就存在(其实也不分什么 源文件链接文件的,因为他们指向都是同一个 iNode)当你修改源文件或者链接文件任何一个的时候 ,其他的文件都会做同步的修改。软链接不直接使用iNode号作为文件指针,而是使用文件路径名作为指针(软链接跟源文件的iNode不一样)。所以删除链接文件对源文件无影响,但是删除源文件,链接文件就会找不到要指向的文件 。软链接有自己的iNode,并在磁盘上有一小片空间存放路径名.
(3)软链接可以对一个不存在的文件名进行链接。
(4)软链接可以对目录进行链接,而硬链接不可以。
 
PS:有博主拿Windows中的快捷方式来比喻软硬链接中的一种,我觉得这是误人子弟……我就是这么被误导的,直到我看了好几篇博文并结合Linux私房菜,花了整整两个小时,才算弄清楚了软硬链接的概念。

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

  1. linux基础文件管理软硬链接

    一.文件系统的基本结构 1.文件和目录被组成一个单根倒置树目录结构 2.文件系统从根目录下开始,用“/”表示 3.根文件系统(rootfs):root filesystem文件名区分大小写 4.以 . ...

  2. linux中的硬链接和软链接是什么

    Linux 文件系统最重要的特点之一是它的文件链接.链接是对文件的引用,这样您可以让文件在文件系统中多处被看到.不过,在 Linux 中,链接可以如同原始文件一样来对待.链接可以与普通的文件一样被执行 ...

  3. Linux中的硬链接和软连接

    1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...

  4. 『学了就忘』Linux基础命令 — 22、Linux中的硬链接和软链接

    目录 1.文件和目录的基本存储 2.In命令介绍 (1)我们来看看ln命令的基本信息 (2)ln命令的基本格式 3.创建硬链接 (1)如何创建硬链接 (2)硬链接特征 (3)硬连接原理 4.创建软链接 ...

  5. Linux中的硬链接和软链接

    软链接和硬链接 命令ln ln是创建链接的命令: 创建硬链接:ln file link 创建软链接:ln -s file link 硬链接 硬链接(hard link)是Unix系统最早的创建链接的方 ...

  6. 关于Linux中文件,链接的一些思考

    在Unix系统中,操作系统为磁盘上的文本与图像,鼠标键盘操作,网络交互等IO操作设计了一组通用API. 使他们被处理的时候可统一用字节流的方式.所以说,除了进程之外,其他的一切均可看做文件. Linu ...

  7. Linux中的共享链接库shared libraries

    可执行文件的静态链接和动态链接静态链接会将需要的库函数在编译时一并包含, 所以体积会比较大. 使用ldd命令查看可执行文件链接的库 $ ldd /sbin/ldconfig not a dynamic ...

  8. 6.Linux文件属性及软硬链接

    1.文件属性 使用ll -h 查看的详细信息,每一列都是干什么的 第一列第一个字符 表示文件类型---> rw-r--r-- 文件权限 1 这个文件被链接次数 root 文件的拥有者(用户) r ...

  9. Linux中的硬链接和软链接的概念、区别及用法

    概念: 硬链接(hard link): A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指 ...

随机推荐

  1. 【BZOJ】1006: [HNOI2008]神奇的国度

    http://www.lydsy.com/JudgeOnline/problem.php?id=1006 题意:在一个弦图中找最少染色数.(n<=10000, m<=1000000) #i ...

  2. 【noiOJ】p7940

    01:查找最接近的元素 总时间限制:  1000ms 内存限制:  65536kB 描述 在一个非降序列中,查找与给定值最接近的元素. 输入 第一行包含一个整数n,为非降序列长度.1 <= n ...

  3. JAVA_用Java来获取访问者真实的IP地址

    在jsp里,获取客户端的ip地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  4. tomcat配置环境变量

    先把jdk配置好,这里不在赘述. 一.配置Tomcat环境变量 1,新建变量名:CATALINA_BASE,变量值:C:\tomcat2,新建变量名:CATALINA_HOME,变 量值:C:\tom ...

  5. Equivalent Strings

    Equivalent Strings 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/E 题意: 给出 ...

  6. MetaHandler.js:移动端适配各种屏幕

    MetaHandler.js !function () { var opt = function() { var ua = navigator.userAgent, android = ua.matc ...

  7. 【android】新手容易遇到的[error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.]Theme出错的问题

    一.概述 近期刚接手了一个项目,开发工具为eclipse,由于版本较低,且考虑到如果转android studio项目的话,会其他人的维护带来困难,所以想着还是维护项目原来的开发环境吧. 但是导入项目 ...

  8. Hadoop.2.x_高级应用_二次排序及MapReduce端join

    一.对于二次排序案例部分理解 1. 分析需求(首先对第一个字段排序,然后在对第二个字段排序) 杂乱的原始数据 排序完成的数据 a,1 a,1 b,1 a,2 a,2 [排序] a,100 b,6 == ...

  9. HTML静态网页 Window.document对象

    一.找到元素: docunment.getElementById("id"):根据id找,最多找一个:    var a =docunment.getElementById(&qu ...

  10. 汇编基础知识之二debug的使用

    DEBUG的使用 (要在win32位习题下进行,win7 64位需要安装DosBox和debug这2个软件): 1:win64位下debug的使用教程: 下载debug.exe,这里我把debug放在 ...