当前位置: 首页 > news >正文

oracle中软连接命令,深入理解硬链接和软链接 (转)

深入理解硬链接和软链接 (转)[@more@]

深入理解硬链接和软链接

:namespace prefix = o ns = "urn:schemas--com::office" />

和都提供了链接命令ln。顾名思义,ln是将两个名(此说法不大准确)彼此链接起来,使得无论使用哪一个文件名都可访问到同一文件。这是我们用ln命令所要达到的目的,但是从技术上讲,只有软链接是链接两个文件名,硬链接不在此列之中。要透彻理解链接的含义,就必须要分清文件与文件名的区别。而要区分文件与文件名,我们就得知道文件如何管理文件。看似很普通的命令,其技术背景却一点儿也不简单。

文件系统如何管理文件涉及范围太大,不可能也不必要在此全部叙述,但我们只需知道以下技术要点即可。在Linux中,文件的外延很大,我们常识中的“文件”(例如一篇文档等)是文件, 目录、设备等也都是文件。这些文件种类繁多,数量巨大,万一重名怎么办,文件系统是如何区分并管理它们的呢?限制重名?这当然不行!我们来看看Linux是如何做的。原来Linux的文件系统为每一个文件分配了一个我们称为节点(Inode)的数据结构,在这个索引节点内有一个全系统独一无二的索引节点号,文件系统正是靠这个索引节点号来识别一个文件。另外文件系统用来管理文件的所有信息都包含在索引节点之中。

好了,给每个文件分配一个唯一的number,文件系统就知道某个文件究竟是张三的文件还是李四的文件。但是文件的真正使用者——我们人类也要用该number去识别文件吗?呵呵,若此为真,不知是人玩还是电脑玩人罗。因此我们要用我们的方式去区分各个文件,给每一个文件起一好听易记的名字,同一地点(即同一目录)不能有两个名字一样的文件。地点若不同,允许重名。至此,人类有人类识别文件的方法,电脑(文件系统)有电脑的做法,喔喔,问题又来了,二者是要“水火不容”呢,还是“沟通无限”呢?这还用问,当然是后者啦。

OK,既然要“沟通”,“链接”自然而然就提出来了。绕了个大圈,终于得以言归正传,有了上述的背景知识,不管是硬链接还是软链接对于我们来说已是板上鱼肉。所谓硬链接(hard link, 也称链接/editor/Editor.htm#_ftn1" name=_ftnref1>[1])就是一个文件的一个或多个文件名。再说白点,所谓链接无非是把我们人类使用的文件名和电脑(文件系统)使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。一个文件有几个文件名(用ln命令实现多个文件名),我们就说该文件的链接数为几。由定义可知,此链接数可以是1, 这表明该文件只有一个文件名。

需要特别指出的是,在info ln的帮助信息中所说的硬链接与我的理解是有差别的,先看info是如何讲硬链接。“A "hard link" is another name for an existing file; the link and the original are indistinguishable.”(一个“硬链接”是一个现有文件的别名;链接文件与被链接文件是无法区别的。)哇喔,好象乱套了,谁对谁错?谁都没错,二者角度不同。Info是就ln命令而论的“硬链接”,注意了,info中的硬链接也是打了双引号的,我估计此有特殊含义。“链接文件与被链接文件是无法区别的”,没错,因为它们都指向同一个索引节点嘛。现在我与info主要差别在于,我认同而info不认同以下观点:对于一个拥有文件名的文件,在没有用过ln命令的情况下,该文件仍存在硬链接,且链接数为1。理论需要实践来证明,在Linux中用ls –l命令获得该目录下文件的详细信息,格式如下:

-rwxr-xr-x  1    root   1024  Apr 30 17:06  filename

上述格式中黑体加下划线的“1”代表文件名filename的文件的链接数为1。做个实验,在同一目录(不同目录也行)使用ln命令:

ln filename filename2

然后再使用ls –l命令,会得到下面的信息:

-rwxr-xr-x  2  root   root   1024  Apr 30 17:06  filename

-rwxr-xr-x  2  root   root   1024  Apr 30 17:06  filename2

很明显,原来文件名为filename的文件现在拥有了两个文件名,链接数变为2, 除此之外其它一切信息都没变,所以说“链接文件与被链接文件是无法区别的”。下面的事实让我怀疑有没有必要用ln产生新的硬链接:无论使用任一文件名对文件的任何改动,该文件的所有直接或间接链接文件都会随之而改变,最后所有信息都保持一致。

将文件名与索引节点分开,然后采用硬链接的技术使得管理文件变得更方便,更高。例如重命名,进程并不需要打开该文件,只需改动某个目录项的内容即可。还有删除一个文件也是如此,将相应的目录项删除,该文件的链接数减1,如果删除目录项后该文件的链接数为零,这时系统才把真正的文件从上删除。

认识了硬链接究竟是怎么一回事,理解硬链接的两个限制就容易多了。

1、不允许给目录创建硬链接;

2、只有在同一文件系统中的文件之间才能创建链接。

篇幅关系,不再赘述。

为了克服以上限制,引入符号链接(symbolic link,也称软链接)。符号链接实际上是一种特殊的文件类型,这种文件包含了另一个文件的任意一个路径名。这个路径名指向位于任意一个文件系统的任意文件,甚至可以指向一个不存在的文件。系统会自动把对符号链接的大部分操作(如读、写等)变为对源文件的操作,但某些操作(如删除等)就会直接在符号链接上完成。在ln中加选项-s便产生一个文件的符号链接。

在讨论符号链接的之前,链接一般理解为硬链接。

如ln file1 file2; ln file2 file3,我称file3为file1的间接链接文件。

相关文章:

  • 人物散记:吴文虎教授,信息学奥赛和其他
  • oracle 设置动态变量,数据库优化技术之Oracle数据库动态绑定变量
  • C++专家荣耀5月22日下午2点作客51CTO专家聊天室
  • oracle connection reset,Oracle JDBC 连接卡死后 Connection Reset
  • oracle查询应用语句,Oracle查询语句应用经验总结
  • POE技术简介
  • fedora 安装oracle 12c,Fedora下安装Oracle 11g
  • RIP路由协议及工作原理
  • oracle 注册表修改,Oracle 客户端注册表字符集修改-----解决乱码 .
  • 兵经百言
  • Linux服务器负载均衡宝塔,新版负载均衡教程
  • linux的esp8266编译,ubuntu下esp8266 RTOS SDK编译环境搭建
  • 遍历Symbian某目录下的所有文件
  • linux下密码管理工具,Linux使用密码管理工具pass管理密码的方法
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【前端学习】-粗谈选择器
  • CentOS 7 防火墙操作
  • CentOS 7 修改主机名
  •  D - 粉碎叛乱F - 其他起义
  • gcc介绍及安装
  • Java读取Properties文件的六种方法
  • Java小白进阶笔记(3)-初级面向对象
  • Median of Two Sorted Arrays
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Netty源码解析1-Buffer
  • ng6--错误信息小结(持续更新)
  • Odoo domain写法及运用
  • PHP CLI应用的调试原理
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 线上 python http server profile 实践
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • raise 与 raise ... from 的区别
  • ​linux启动进程的方式
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (1)(1.13) SiK无线电高级配置(六)
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (6)STL算法之转换
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (LeetCode) T14. Longest Common Prefix
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (简单) HDU 2612 Find a way,BFS。
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • ... 是什么 ?... 有什么用处?
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net 6.0 处理跨域的方式