实例讲解Linux系统中硬链接与软链接的创建
导读Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。硬链接与软链接的区别从根本上要从Inode节点说起,下面就以实例讲解Linux系统中硬链接与软链接的创建,来实际看看Linux中两种链接方式的不同。
首先要弄清楚,在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。
链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。
硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。可以用:ln命令来建立硬链接。语法:
- ln [options] existingfile newfile
- ln[options] existingfile-list directory
用法: 第一种:为”existingfile”创建硬链接,文件名为”newfile”。第二种:在”directory”目录中,为 ”existingfile-list”中包含的所有文件创建一个同名的硬链接。常用可选[options] –f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接,例子如下:
- $ ls –il
- 13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
- 13059 -rwx - - - - - - 1 longcheng longcheng 57 8月 5 16:40 file2
- $ ln file2 file2hard
- $ ls –il
- 13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
- 13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2
- 13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard
在创建链接前,file1 显示的链接数目为1
创建链接后(1)file1和file1hard的链接数目都变为2;(2) file1和file1hard在inode号是一样的;(3)file1和file1hard显示的文件大小也是一样。
可见进行了ln命令的操作结果:file1和file1hard是同一个文件的两个名字,它们具 有同样的索引节点号和文件属性,建立文件file1的硬链接,就是为file1的文件索引节点在当前目录上建立一个新指针。
链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。当前目录逻辑结构:(不好意思图没有显示出来)。
还可以在不同目录,但同一文件系统中建立文件的硬链接。设file1、file2在目录/home/longcheng/dir1中,下面的命令,在/home/longcheng中建立file2的硬链接。
- ln file2 /home/longcheng/file2hard
下面的程序,是将dir1目录中所有文件,在目录dir2中建立硬链接
- $mkdir dir2
- $ln /home/longcheng/dir1/* /home/longcheng/dir2
如果使用了 ln –f existingfile newfile,如果newfile已经存在,则无论原来newfile是什么文件,只用当前用户对它有写权限,newfile就成为exisitngfile的硬链接文件。
尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一下不足之处:
(1)不可以在不同文件系统的文件间建立链接
(2)只有超级用户才可以为目录创建硬链接。虽然很多树上说root用户可以创建,但是笔者在学习过程中发现即使是root用户也不能创建,我的系统是Redhat,内核2.4、2.6都试过,在其他系统中不知道是不是可以。
软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
建立软链接,只要在ln后面加上选项 –s,例子如下:
- $ ls -il
- 13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
- 13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2
- 13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard
- $ln –s file1 file1soft
- $ls -il
- 13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
- 13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2
- 13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard
- 13061 lrwxrwxrwx 1 longcheng longcheng 5 8月 5 16:58 file1soft->file1
从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是不同的。
硬链接原文件&链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件&链接文件拥有不同的inode号,表明他们是两个不同的文件。
在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系。
链接数目是不一样的,软链接的链接数目不会增加;文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。
总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:https://www.linuxprobe.com/
实例讲解Linux系统中硬链接与软链接的创建的更多相关文章
- Linux系统中硬链接和软链接(符号链接)的区别
首先是创建链接的命令 ln file link //创建硬链接 ln -s item link //创建软链接 区别 硬链接 硬链接是一开始Unix创造链接的方式,而软连接就更现代一点.创建硬链接的时 ...
- Linux文件系统中硬链接和软链接的区别 (转)
建立硬链接命令:ln src-link dest-link建立软链接:ln -s src-link dest-link 1. 硬链接是别名,软链接是快捷方式 2. 硬链接和源链接指向同一个i节 ...
- 一张图解释Linux文件系统中硬链接和软链接的区别
如图所示,硬链接与原始文件共用一个inode,但inode是不跨文件系统的(Ext3.Ext4),每个文件系统都有自己的inode列表.因此,硬链接是没办法跨文件系统的 而软链接不同,软链接相当于重新 ...
- linux中硬链接与软链接
硬链接记录的是目标的inode,软链接记录的是目标的路径. 软链接就像快捷方式,而软链接就像备份.软链接能够做跨分区的链接,而硬链接因为inode的缘故,仅仅能在本分区中做链接,所以软链接使用很多其它 ...
- Linux下的硬链接与软链接
本文总结自: https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html#fig2 一个文件可以用下图表 ...
- Linux中硬链接和软链接的区别
看了这篇文章之后,豁然开朗.直接放链接,感谢作者的分享. https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/#ico ...
- Linux系统硬链接和软链接介绍
1.链接的概念 在Linux系统中链接分为硬链接和软连接两种,一种为硬链接,另一种为软连接或符号链接(symbolic Link).ln命令就是创建链接文件的,在默认不带参数的情况下,执行ln命令创建 ...
- 二、Linux系统硬链接和软链接详细介绍与实践
链接的概念 在linux系统中,链接可分为两种:一种被称为硬链接(Hard LinK),另一种被称为软链接或符号链接(Symbolic Link).在默认不带参数的情况下,执行ln命令创建的链接是硬链 ...
- 认识Linux系统中的inode,硬链接和软链接
在学习和创建软链接遇到了一点问题,总结一下: 在当前文件夹下面建立了两个临时文件夹tempdir1和tempdir2,然后在tempdir2里面创建了一个hello文件,然后用指令ln -s temp ...
随机推荐
- 自定义延时查询控件---valen
当查询已经成标配 查询是已成为每个应用常用的功能,也正是这样前端后对查询的设计需求也日益增加,本文针对前端(Android端)查询控件做一个例子: 控件设计与逻辑 产品的设计UI图; 要达到如下 1| ...
- 编辑器CocoStudio和CocosBuilder的对比
来源:http://4137613.blog.51cto.com/4127613/1352805 CocosBuilder CocoStudio 控件种类 支持大部分cocos2d-x自带的常用控 ...
- ef6 code first
http://www.cnblogs.com/Bce-/p/3684643.html http://www.cnblogs.com/Gyoung/tag/Entity%20Framework/ htt ...
- 转】MyEclipse使用总结——修改MyEclipse默认的Servlet和jsp代码模板
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/3769058.html 感谢! 一.修改Servlet的默认模板代码 使用MyEclipse创建Servlet时, ...
- rdlc Report Viewer Configuration Error
主要是web.config没有配置 方法参考http://msdn.microsoft.com/zh-cn/library/ms251661.aspx
- POJ1469COURSES(二分图匹配)
裸的二分图匹配 题目poj.org/problem?id=1469 不解释:
- 解决远程连接mysql错误1130
Mysql远程连接Mysql服务器的数据库,错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this ...
- [读书笔记]SQL约束
目的:通过在列级或表级设置约束,确保数据符合某种数据完整性规则 实现:数据库主动地检查维护数据的完整性 手段:约束,数据类型,触发器 --------------------------------- ...
- CloudStack4.2 二级镜像存储测试
//添加二级存储{ "addimagestoreresponse": { "imagestore": { "id": "2dda4 ...
- 【M27】要求或者禁止对象产生于heap之中
1.要求对象只能产生于heap之中,该怎么办? 栈上的对象肯定调用构造方法和析构方法(离开作用域的时候),因此,要求对象只能产生于heap之中,也就是禁止栈上产生对象,解决办法有两种:将所有的构造方法 ...