博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入解析“硬链接”与“软链接”
阅读量:7186 次
发布时间:2019-06-29

本文共 4053 字,大约阅读时间需要 13 分钟。

简而言之,软链接相当于windows中的快捷方式,硬链接相当于一个灾备系统,数据存放在两处,与复制不同的是两处之间存在同步机制,一处数据的改变会实时同步到另一处,另外,一处数据如果被删除了,不会影响到另一处的数据.下面是详细的介绍:      硬连接指向的是节点(inode),是已存在文件的另一个名字,修改其中一个,与其连接的文件同时被修改;对硬链接文件进行读写和删除操作时候,效果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了原有的内容。这时,系统就“忘记”了它曾经是硬链接文件,而把他当成一个普通文件。硬链接文件有两个限制:1、不允许给目录创建硬链接; 2、只有在同一文件系统中的文件之间才能创建链接。      软连接指向的是路径(path),软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,还可以链接不同文件系统的文件,和win下的快捷方式差不多。 软链接文件甚至可以链接不存在的文件,这就产生一般称之为"断链"的问题(或曰“现象"),链接文件甚至可以循环链接自己,类似于编程语言中的递归。命令格式: ln -s source_path target_path   //软链接文件ln -d existfile newfile   //硬链接文件,如果不加任何参数,默认情况下就是硬链接.示例: $ ln httpd.conf httpd1.conf $ ln -s httpd.conf httpd2.conf第一条为硬链接,第二条为软链接$ ls -li   //查看一个文件或目录的inode,要通过ls 命令的的 -i参数,inode值相同的文件,他们的关系是互为硬链接的关系总用量 80 1077669    -rw-r--r--     2 sam       adm          34890 10月 31 00:57 httpd1.conf 1077668   lrwxrwxrwx     1 sam       adm             10 10月 31 00:58 httpd2.conf ->;httpd.conf 1077669   -rw-r--r--     2 sam       adm          34890 10月 31 00:57 httpd.conf可以看到,使用ls -li,软连接只产生了10字节的快捷而已,硬连接却实实在在的的拷贝。最前面的inode硬链接和源文件是一样的,而软链接不一样.对http1.conf进行编辑,可以发现httpd.conf也发生了一样的变化.现在使用命令:$ rm httpd.conf现在删除链接的源文件,来比较不同之处代码: $ ls -l 总用量 44 -rw-r--r--     1 sam       adm          34890 10月 31 00:57 httpd1.conf lrwxrwxrwx     1 sam       adm             10 10月 31 00:58 httpd2.conf ->; httpd.conf发现,httpd2.conf实际已经不存在了,是断链,而httpd1.conf变也了普通文件.一、硬链接硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。可以用:ln命令来建立硬链接。语法:ln [options] existingfile newfileln[options] existingfile-list directory用法: 第一种:为”existingfile”创建硬链接,文件名为”newfile”。第二种:在”directory”目录中,为 ”existingfile-list”中包含的所有文件创建一个同名的硬链接。常用可选[options] –f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接。下面举一些例子:$ ls –il13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file113059 -rwx - - - - - - 1 longcheng longcheng 57 8月 5 16:40 file2$ ln file2 file2hard$ ls –il13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file113059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file213059 -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的文件索引节点在当前目录上建立一个新指针。如下图,你可以删除其中任何一个,如rm file2 ,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为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 -il13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file113059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file213059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard$ln –s file1 file1soft$ls -il13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file113059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file213059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard13061 lrwxrwxrwx 1 longcheng longcheng 5 8月 5 16:58 file1soft->file1从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是不同的。区别:硬链接原文件&链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件&链接文件拥有不同的inode号,表明他们是两个不同的文件;在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;链接数目是不一样的,软链接的链接数目不会增加;文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,这用强调,因为是等同的嘛,而这里软链接显示的大小与原文件就不同了,file1大小是48B,而file1soft是5B,这里面的5实际上就是“file1”的大小。总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。在不同系统之间建立软链接、对目录建立链接,这里就不举例了,读者可以自己去尝试,我也是在不断实践中学习的。当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

 

转载于:https://www.cnblogs.com/zx-admin/p/4362947.html

你可能感兴趣的文章
Android Studio 代码模版,一键生成 MVP 类
查看>>
Nginx入门(1)服务器的安装和配置
查看>>
Git让你从入门到精通,看这一篇就够了!
查看>>
黑苹果组装指南
查看>>
axios Post请求 .Net Core中的接口以及FromBody特性和FromForm特性的使用
查看>>
大数据BigData之如何配置hive连接mysql,把mysql作为元数据库?
查看>>
拿下阿里、头条、滴滴的offer后谈谈面试经验(上)
查看>>
RecyclerView相关问题记录
查看>>
微信支付
查看>>
LeetCode 399 Evaluate Division Javascript解决方案
查看>>
Delphi编写COM+简介(转)
查看>>
08-27作业
查看>>
centos7下配置mysql
查看>>
java生成RAS证书文件
查看>>
java 处理 mysql 中文乱码问题
查看>>
IOS7设置状态栏字体颜色
查看>>
TOMCAT应用管理员配置
查看>>
软件架构的几大原则
查看>>
负载均衡集群、LVS算法、搭建NAT模式LVS架构
查看>>
生成树的冗余与负载分担技术
查看>>