设为首页 收藏本站
查看: 1578|回复: 0

[经验分享] RHCE系列之文件管理----硬链接和软链接

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-6-16 12:58:11 | 显示全部楼层 |阅读模式
     Linux 文件系统最重要的特点之一是它的文件链接。        链接是对文件的引用,这样你可以让文件在文件系统中多处被看到。
        在 Linux 中,链接可以如同原始文件一样来对待。链接可以与普通的文件一样被执行、编辑和访问。对系统中的其它应用程序而言,链接就是它所对应的原始文件。当你通过链接对文件进行编辑时,你编辑的实际上就是原始文件。切记,链接并不是文件的副本。
         在linux系统中,链接可分为两类:一类被称为硬链接(Hard Link),另一类被称为软链接或符号链接(Symbolic Link)。

硬链接
       硬链接(Hard Link)引用的是文件在文件系统中的物理索引(inode节点)。由于不同的文件系统之间各自独立,因此硬链接只能引用同一文件系统中的文件。
       当我们在移动或删除原始文件时,硬链接文件不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。当我们对硬链接文件进行读写的操作的时候,实际操作的是原始文件。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果你删除的文件有相应的硬链接,那么这个文件依然会保留下来,直到所有对它的引用都被删除。


软链接
       软链接(Symbolic Link),又称符号链接,它是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。
       当我们在移动或删除原始文件时,软链接文件会被破坏(失效),但是不会消失。当我们对软链接文件进行读写的操作的时候,实际操作的是原始文件。
       符号链接文件仅包含有一个文本字符串,其被操作系统解释为一条指向另一个文件或者目录的路径。它是一个独立文件,其存在并不依赖于目标文件。如果删除一个符号链接,它指向的目标文件不受影响。


       在linux中,系统的ln命令为我们提供了创建软/硬链接的功能。

1
2
3
4
5
6
7
8
[iyunv@lh rhce]# touch file_name   #创建范例文件file_name
[iyunv@lh rhce]# ln file_name  hard_link_file_name   #创建硬链接,前面跟原始文件名,后面跟硬链接文件的名
[iyunv@lh rhce]# ln -s file_name Symbolic_link_file_name   #创建软链接,前面跟原始文件名,后面跟软链接文件的名
[iyunv@lh rhce]# ls -il   #查看创建信息,i查看inode节点号,l文件信息长格式输出
total 0
286759 -rw-r--r-- 2 root root 0 Jun 15 22:48 file_name
286759 -rw-r--r-- 2 root root 0 Jun 15 22:48 hard_link_file_name
286760 lrwxrwxrwx 1 root root 9 Jun 15 22:49 Symbolic_link_file_name -> file_name



       通过观察file_name的软链接文件和硬链接文件,我们发现原始文件的inode节点号和硬链接的inode节点号一模一样,而软链接则是新的inode节点号。

        下面呢,我为大家总结下硬链接和软链接的区别

1)创建命令ln,默认不带参数创建的是硬链接,带-s参数创建的是软链接
2)硬链接文件与原始文件的 inode 节点号相同,而软链接文件的 inode 节点号与原始文件不同
3)ln命令不能对目录创建硬链接,但可以创建软链接,并且对目录的软链接在生产环境中经常用到。
4)删除软链接文件,对原始文件及硬链接文件无任何影响
5)删除硬链接文件,对原始文件及软链接无任何影响
6)删除软链接文件的原始文件,对硬链接文件无任何影响,但是会导致其软链接失效(红底白字闪烁状)
7)正常情况下,只有同时删除原始文件及其硬链接文件,整个文件才会被真正的删除
8)很多硬件设备中的快照功能,使用的就是类似硬链接的原理
9)软链接可以跨文件系统,硬链接不可以跨文件系统

介绍了,软/硬链接以及它们的区别,下面介绍下各自在生产环境中的使用案例:
1)软链接的生产使用案例
       当我们编译apache、nginx或者php之类的软件时,编译的路径中默认都带着版本号,比如/apps/apache-2.4.6(用来区分版本,因此路径比较长)。但是我们在访问目录时却又希望简便,并且为了方便后期软件的升级以及实现其它扩展功能,此时我们就可以通过为原始目录建立一个软链接,来满足需求。比如:
ln –s /apps/apache2.4.6 /apps/apache
       以上的例子,就是一个简单而又常用的例子。这样子,我们在一些脚本中指定apache路径时,只需要指定软链接文件的地址就可以了,这样子我们下次升级apache软件的时候,就不用一个一个修改众多脚本中的apache路径了。
       再看一个例子,假设我服务器上跑着lnmp的网站架构,并且针对php,我安装了2个版本的,一个是php-5.2.17,一个是php-5.4.24。针对这种情况,我如果想实现快速的php切换,此时我就可以通过软链接的形式来实现。每次,只需要通过修改软链接的指向,就能轻松切换php的版本了。


2)硬链接的生产使用案例

       硬链接用的多的就是在数据的备份这方面,比如硬件存储的快照功能、为备份数据创建多个硬链接放置删除数据等等




以上就是链接相关的知识了,下面补充一个朋友咨询的问题:
如何查看一个文件硬链接的分布,或者说假设一个文件有5个硬链接,我怎么知道这5个硬链接文件到底在文件系统的哪个目录下?
解决方案:
       Linux系统中的find命令,可以帮助我们查找文件的硬链接到底分布在系统中的哪些位置。

1
2
3
4
5
6
7
8
9
[iyunv@lh rhce]# ls -il   #查看file_name文件的inode节点号
total 0
286759 -rw-r--r-- 5 root root 0 Jun 15 22:48 file_name
[iyunv@lh rhce]# find / -inum 286759 2> /dev/null   #通过find提供的-inum选项通过文件的inode节点号去查看同一个inode的文件分布情况
/mnt/hard_link_file_name_1
/root/rhce/file_name
/etc/hard_link_file_name_2
/tmp/hard_link_file_name
/media/hard_link_file_name_3





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-20565-1-1.html 上篇帖子: RH124_s权限_t权限 下篇帖子: RHCE题库-RHCE 文件管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表