Ubuntu中的两种link的区别
Ubuntu中有两种link(windows世界中文件的“快捷方式”),一个是hard link(硬链接),另一个是symbolic link(软链接)。
那么,什么是硬链接,什么又是软链接呢?
硬链接(hard link)
简单的说,硬链接会链接到目标文件的内容,即便目标文件在链接之后被改了名字,又或者被删掉了,硬链接以及硬链接的目标内容依然存在且有效。我们来做个实验。
实验过程设计:
1、创建一个文本文件origin;
2、向origin文件中写入内容"lorem ipsum”;
3、建立一个硬链接origin_hard到origin文件;
4、显示origin_hard内容;
5、删除origin文件;
6、再次显示origin_hard内容。
结果判定:
如果在删除origin文件[1]之后origin_hard仍然可以显示“lorem ipsum”,即可判断硬链接是链接到文件内容的链接。
实验过程:
n@ubt:~$ touch origin
n@ubt:~$ echo "lorem ipsum" >> origin
n@ubt:~$ cat origin
lorem ipsum
n@ubt:~$ ln origin origin_hard
n@ubt:~$ ls -l | grep origin
-rw-rw-r-- 2 n n 12 9月 5 23:05 origin
-rw-rw-r-- 2 n n 12 9月 5 23:05 origin_hard
n@ubt:~$ cat origin_hard
lorem ipsum
n@ubt:~$ rm origin
n@ubt:~$ ls -l | grep origin
-rw-rw-r-- 1 n n 12 9月 5 23:05 origin_hard
n@ubt:~$ cat origin_hard
lorem ipsum
n@ubt:~$
结论:
硬链接(hard link)是一种特殊的文件,链接到内容,而非另一个文件的路径或地址(有别于软链接symbolic link)。
让我们再来看看软链接(symbolic link)
软链接(symbolic link)
软链接是指向目标文件所在路径的一种链接,也就是说,如果目标文件(以及文件内容)不存在了,指向这一文件地址的软链接将会指向一个不存在的文件地址,从而产生访问错误。与硬链接一样,我们同样通过一个实验来验证软链接的特性。
实验过程设计:
1、创建一个文本文件origin;
2、向origin文件中写入“lorem ipsum”;
3、建立一个软链接origin_soft,指向origin文件;
4、尝试通过origin_soft显示origin中的文本内容,用以验证软链接创建成功;
5、删除origin文件;
6、尝试再次通过origin_soft显示其内容。
结果判定:
如果在删除origin文件后,通过origin_soft不再可以显示“lorem ipsum”内容,即可说明软链接(symbolic link)仅是指向目标文件地址的链接,而非文件内容。
实验过程:
n@nbt:~$ touch origin
n@nbt:~$ echo "lorem ipsum" >> origin
n@nbt:~$ ln -s origin origin_soft
n@nbt:~$ cat origin_soft
lorem ipsum
n@nbt:~$ rm origin
n@nbt:~$ cat origin_soft
cat: origin_soft: No such file or directory
n@nbt:~$
结论:
软链接(symbolic link)是指向目标文件地址的链接。当目标文件不存在时,软链接也会失去其链接目标。
附录
[1]文件——在Unix/Linux的世界中,文件(file)并非我们在windows操作系统中理解的那样。Unix/Linux的文件是指一个(块)数据,该数据没有文件名,仅有一个ID号(inode)。如果可以理解这个概念,那么再回过头来看硬链接(hard link),你就会发现创建一个硬链接的过程其实是在给同一个数据创建别名(一个新的文件名)。就拿上面我们的实验举例,“lorem ipsum”数据有一个文件名origin,之后我们又给了这个数据另一个文件名origin_hard。通过origin和origin_hard都可以访问到数据“lorem ipsum”,见图-1。
图-1
在硬链接实验环节我们删除的origin文件,确切的说,并非将lorem ipsum数据删掉了,而仅仅是删除了origin文件(指向Lorem ipsum数据的名称文件)。所以,数据并没有被删除,我们通过origin_hard文件依然可以访问到Lorem ipsum数据。然而,软链接并非如此,见图-2。
图-2
图-2中,软链接origin_soft文件指向origin文件。一旦origin文件被删除,则Lorem ipsum数据将丢失所有指向其的有效引用。由于删除origin文件后,origin_soft丢失了引用目标,导致系统无法通过origin_soft访问Lorem ipsum数据。
Ubuntu中的两种link的区别的更多相关文章
- jsp中两种include的区别【转】
引用文章:http://www.ibm.com/developerworks/cn/java/j-jsp04293/ http://www.cnblogs.com/lazycoding/archive ...
- Java中serialVersionUID的解释及两种生成方式的区别(转载)
转载自:http://blog.csdn.net/xuanxiaochuan/article/details/25052057 serialVersionUID作用: 序列化时为了保持版 ...
- eclipse中的两种Jre 及 Jre与Jdk的区别
分类: ——————————区分eclipse中的两种Jre———————- (Eclipse也是一个普通的Java程序,因此必须有一个JRE做为运行环境.如果你的机器上没有安装任何JRE(或者JDK ...
- Java中String类两种实例化的区别(转)
原文:http://blog.csdn.net/wangdajiao/article/details/52087302 一.String类的第一种方式 1.直接赋值 例:String str = &q ...
- 关于JSP页面中的pageEncoding和contentType两种属性的区别
转自:http://blog.csdn.net/dragon4s/article/details/6604624 JSP指令标签中<%@ page contentType="text/ ...
- Java中的两种异常类型及其区别?
Java中的两种异常类型是什么?他们有什么区别? Throwable包含了错误(Error)和异常(Excetion两类) Exception又包含了运行时异常(RuntimeException, 又 ...
- Java中Compareable和Comparator两种比较器的区别
Java中Compareable和Comparator两种比较器的区别 参考原文链接:https://www.cnblogs.com/ldy-blogs/p/8488138.html 1.引言 在ja ...
- PHP中数组合并的两种方法及区别介绍
PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = ...
- 引入外部CSS的两种方式及区别
1.CSS的两种引入方式 通过@import指令引入 @import指令是CSS语言的一部分,使用时把这个指令添加到HTML的一个<style>标签中: 要与外部的CSS文件关联起来,得使 ...
随机推荐
- sencha touch textarea 手机上不显示滚动条,且不能滚动
最近在项目中发现 sencha touch 中的 textarea 在手机上不显示滚动条,也不能滚动. 在浏览器中之所以能显示滚动条滚动,那是浏览器为 textarea 添加的滚动条. 但在手机中是不 ...
- ubuntu系统复制到其他地方或克隆后,如何正确修改IP及MAC地址的解决方案(图文详解)
修改ip地址 永久修改MAC地址 方法一: 1)编辑“/etc/init.d/rc.local”文件(sudo gedit /etc/init.d/rc.local) 2)在此配置文件的最后面加上如( ...
- python 对象/变量&赋值的几点思考
python 对象/变量 对象 Every object has an identity, a type and a value. An object's identity never changes ...
- vue 坑之 vuex requires a Promise polyfill in this browser
android内嵌H5页面不显示出现这个问题,原因有很多 首先,别急,请看下面的推荐方案: 1.找个Android真机测试下(机型版本为4.4以上),真机联调测试 Android 只需要四个步骤: 1 ...
- iOS 模拟器截屏快捷键
iOS 模拟器截屏快捷键: cmd+S
- php操作Excel
php操作Excel 1.new PHPExcel对象$objPHPExcel = new PHPExcel(); 2表的初始化设置$objPHPExcel->getProperties()-& ...
- [转]微信小程序填坑之路之使用localhost在本地测试
本文转自:http://www.wxappclub.com/topic/798
- django常用封装
#encoding:utf-8from django.shortcuts import render_to_responseimport hashlibfrom binascii import b2a ...
- C# javascript 全选按钮
function selectAll(checkbox) { $('input[type=checkbox]').attr('checked', $(checkbox ...
- 基础架构之Redis
项目开发过程中,有些信息的变动频率是很低但又经常访问到,这些信息我们往往放在缓存中,目前在缓存组件中,Redis绝对值得你列入使用计划.更多详细信息可以参考官网 https://redis.io/.这 ...