Linux常用命令——链接命令
前面介绍过一个词:软链接
原文件:想生成链接文件的文件
目标文件:新生成的链接文件的名称
软链接:ln -s
硬链接:ln 加文件名
上图原文件:/etc/issue
目标文件:把它放到/tmp目录下,起个名字:issue.soft
硬链接同理
对比软硬链接区别:
对比原文件与软链接文件的文件信息(ls -l):
- 权限首字母l表示文件类型,链接文件——link,不是d和-(目录和文件),硬链接并没有这样的文件标记
- 所有的人都有软链接文件的RWX操作权限
- 软链接文件类似win的快捷方式,好处是方便快捷找到常使用的一些东西,软链接属性只是一个符号指向的链接(因此大小很小,10个字节),这里的issue.sorf写了/tmp/issue/.soft ->、etc/issue这个原文件,所以软链接文件不同于原文件,因此权限很高,如下图:
再观察硬链接文件有什么特征(ls -l /tmp/issue.hard)
发现除了文件位置不一样,其他和原文件都一样,很想cp -p复制哇?那这两个命令的区别是:cp -p可以同步更新原文件和复制的文件,实验验证如下:
使用echo将“www.lampbrother.net”这段话写到issue文件末尾后,再观察原文件就多了一行www.lampbrother,.net,同时硬链接文件也增加了一行相同的变化(软链接同理)。若删除原文件,软链接,硬链接和复制cp三者会出现:
- 软链接:找不到文件
- 硬链接: 硬链接文件依然可以访问,所以硬链接类似拷贝,并可以同步原文件更新,且原文件丢失,硬链接仍然可以访问,这是为什么呢?
我们来看一下三个文件的i节点,步骤如下:
- 创建issue.bak文件的硬软链接:
In issue.bak issue.bak.hard
In issue.bak issue,.bak.sort
我们前面在将Is 命令的时候讲过一个选项:-i,它可以查看一个文件的i节点,我们通过观察i节点对应的项来判断A文件是不是B文件的硬链接。依次观察这三个文件的i节点
ls -i issue.bak.hard issue.bak.sort
编号31416的 i节点同时映射向了原文件issue.bak和硬链接文件issue.bak.hard,但是软链接只有一个i节点31477,分析如下:
- 每一个linux文件都会有一个i节点,包括:每一个进程有一个进程的标识号,每一个用户有一个用户的标识号,(都是一个数字的标识),用内核来进行调用和区分管理。但是这里有一个问题:一个文件有一个i节点,但是 一个i节点不一定只对应一个文件——硬链接就是一个特殊的案例,它的一个i节点映射到了多个文件,所以当用户把一个文件删除,另外一个文件依然会存在。对一个文件进行写操作,在内核的层面进行操作,它实际上针对的是i节点,因为本例中这个i节点同时映射到了两个文件,也因此会出现硬链接文件同步更新的情况(这个是cp 复制命令做不到的)。硬链接不仅可以同步更新,而且它和软链接还有很大不同。
- 但是硬链接文件使用情况不常见,一般用于远程同步更新和实时备份的作用。
- 另外硬链接不能跨分区,以win来讲,相当于C盘的文件不可以硬链接到D盘,现在放在/tmp/issue.bak的文件不能硬链接到/boot中,但是软链接可以。如下所示:
- 最后硬链接不能针对目录使用,但是目录可以直接生成软链接:
以上为硬链接的特征,总结如下: