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文件关联起来,得使 ...
随机推荐
- 028-applicationContext.xml配置文件
版本一 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http: ...
- Unity游戏接入Steam成就
在接入Steam成就,其实有些地方是有坑点的,而且steam官网给的是c++代码的接入教程.如果是老鸟的话,接入还并不是很难. 但是对于新手其实还是比较痛苦的,网上这方面的资料很少.这里我给总结下,u ...
- 垂直居中问题不只有 line-height 可以解决,还有一个哥们叫 margin-top
我们都知道,对于一行文本的垂直居中可以通过设置 height 与 line-height 值相等来实现. 那么对于两个嵌套的div ,或者一个div中的多行文本,怎么让被包含的部分实现垂直居中呢?显然 ...
- Mac OS X安装OpenGL
Mac OS X安装OpenGL 安装最新的cmake brew install cmake brew upgrade cmake 安装glew brew install glew 安装GLTools ...
- CVE-2017-6920 Drupal远程代码执行漏洞学习
1.背景介绍: CVE-2017-6920是Drupal Core的YAML解析器处理不当所导致的一个远程代码执行漏洞,影响8.x的Drupal Core. Drupal介绍:Drupal 是一个由 ...
- plpgsql insert 性能 测试
有时需要执行一些sql脚本,带逻辑控制语句,又不想用高级语言C#.Java之类的,可以直接用plpgsql,类似于Oracle的plsql. do language 'plpgsql' $$ decl ...
- dategrid快速录入一行数据的一波操作
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- cygwin 的安装和配置
Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件(该公司开发的著名工具还有eCos,不过现已被Redhat收购).它对于 ...
- cf1043F. Make It One(dp 容斥原理)
题意 题目链接 给出\(n\)个数,问最少选几个数,使他们的\(gcd = 1\) Sol 好神仙啊qwq. 首先,如果答案存在,那么最多为\(7\)(因为前\(7\)个质数乘起来\(>= 3e ...
- ntp时钟服务器
NTP服务器时钟校准的基本流程: (1):NTP客户端向NTP服务器发出一个时间请求包(UDP包),其中包含了该包离开客户端时的时间戳. (2):当服务器接收到该包时.填入包到达时的时间戳.包离开时的 ...