Linux系统硬链接和软链接

简介:

【链接的概念】

   Linux系统中,链接可分为两种:一种为硬链接(Hard Link),另一种为软链接或符号链接(Symbolic Link or soft link)。Ln这个命令就是创建链接文件的命令,默认不带参数的情况下,是代表创建硬链接。

【软链接】

  软链接也称为符号链接(SymbolicLink)。Linux里的软链接文件就类似于Windows系统中的快捷方式。Linux里的软链接文件实际上是一个特殊的文件。在软链接中,软链接文件实际上就是一个文本文件,这个文件中包含有软链接指向另一个源文件位置的信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软链接所指向的源文件实体。

总结:

1、  软链接类似windows里的快捷方式,软链接里面存放的是源文件的路径,并且执行源文件。

2、  删除源文件,软链接文件依然存在,但是无法访问指向的路径内容。

3、  执行命令“ln –s 源文件 软链接文件”,即可完成创建软链接。

4、  软链接和源文件是不同类型的文件,也是不同的文件。Inode号不同

5、  rm –f 软链接文件

 

示例:

使用ln –s创建的是软链接,软链接相当于快捷方式,可以基于文件也可以基于目录

1
2
3
4
5
6
7
8
9
10
11
[root@zabbix zdw] # ln -s/application/apache2.2.31/ /application/apache 创建软链接文件
[root@zabbix zdw] # ll /application/apache   查看软链接文件readlinkapache也可以
lrwxrwxrwx. 1 root root 26 Mar 10 10:27 /application/apache  ->  /application/apache2 .2.31/
[root@zabbix zdw] # touch /application/apache2.2.31/zdw
[root@zabbix zdw] # ll /application/apache/
total 0
-rw-r--r--. 1 root root 0 Mar 10 10:27 zdw
[root@zabbix zdw] # ll /application/
total 8
lrwxrwxrwx. 1 root root   26 Mar 10 10:27 apache -> /application/apache2 .2.31/
drwxr-xr-x. 2 root root 4096 Mar 10 10:27apache2.2.31

wKiom1bhHlqDgu79AANHA2nr84c088.jpg

默认链接有效是浅兰色的,如果链接失效是红色闪的

【硬链接】

硬链接是指通过索引节点(Inode)来进行链接。在Linux(ext2,ext3)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(Inode Index)简称Inode,即在系统中文件的编号。

Linux文件系统中,多个文件名指向同一个索引节点(Inode)是正常且允许的。这种情况的文件就称为硬链接。硬链接的作用之一是允许一个文件拥有多个有效路径(多个入口),这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据(很多硬件存储,如netapp存储中的快照功能就应和了这个原理,增加一个快照就多了一个硬链接)。为什么一个文件建立了硬链接就会防止数据误删呢?

因为文件系统(ext2)的原理是,只要文件的索引节点(Inode Index)还有一个或一个以上的硬链接。只删除了其中一个链接(即仅仅删除了该文件的链接指向)并不影响索引节点本身和其它的链接(即数据文件),只有当文件的最后一个链接被删除后,此时如果有新数据要存储到硬盘上时或者系统通过类似fsck做磁盘检查的时候。被删除文件的数据块及目录的链接才会被释放,空间被数据占用并覆盖。此时,数据就再也无法找回了。也就是说,在linux系统中,删除文件(目录也是文件)的条件是与之相关的所有硬链接文件均被删除。提示:硬链接就相当于文件的另一个入口。

 

总结:

1、  硬链接文件是具有相同inode节点号的不同的文件名。

2、  删除硬链接文件或者删除源文件之一,文件实体并末被删除。

3、  只有删除了源文件及所有对应的硬连接文件,文件实体才会被删除。

4、  当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘会做fsck检查的时候,数据也会被回收。

5、  硬链接文件是文件的又一个入口。

6、  可以通过给文件设置硬链接文件,来防止文件被误删。

7、  能过执行命令“ln 源文件 硬链接文件”,即可完成创建硬链接。

8、  rm –f删除硬链接文件

 

示例:

使用ln创建硬链接。可以看到节点数是相同的

1
2
3
4
5
6
7
8
[root@zabbix zdw] # ln zdw.txt a
[root@zabbix zdw] # ln a b
[root@zabbix zdw] # ls -li
total 16
131074 drwxr-xr-x. 2 root root 4096 Mar 1010:39 123
131076 -rw-r--r--. 3 root root   27 Mar 9 17:40 a
131076 -rw-r--r--. 3 root root   27 Mar 9 17:40 b
131076 -rw-r--r--. 3 root root   27 Mar 9 17:40 zdw.txt

wKioL1bhHyPSnd8-AAGY-TVfaPw841.jpg

这样源文件删除了,数据不丢

1
2
3
4
5
6
[root@zabbix zdw] # echo 123 >zdw.txt  往文本里插入123
[root@zabbix zdw] # cat zdw.txt
123
[root@zabbix zdw] # rm -f zdw.txt   删除源文件
[root@zabbix zdw] # cat a
123

wKioL1bhH0bxWuDLAADWhD6O2Gg541.jpg

 

二个一起做个文件演示

可以看出,硬链接节点号相同1835012,链接数硬链接是2,软链接是1

1
2
3
4
5
6
7
8
9
10
[root@zabbix zdw] # mkdir /test/zdw -p
[root@zabbix zdw] # cd /test/zdw/
[root@zabbix zdw] # touch zdwfile
[root@zabbix zdw] # ln zdwfilezdw_file_hard_link
[root@zabbix zdw] # ln -s zdwfilezdw_file_soft_link
[root@zabbix zdw] # ls -li
total 0
1835012 -rw-r--r--. 2 root root 0 Mar 1014:25 zdwfile
1835012 -rw-r--r--. 2 root root 0 Mar 1014:25 zdw_file_hard_link
1835013 lrwxrwxrwx. 1 root root 7 Mar 1014:26 zdw_file_soft_link -> zdwfile

wKiom1bhHvezUD_4AAJXEZc6KAM035.jpg

 

下面示例可以看出,目录可以创建软链接,但是不能创建硬链接,对于目录软链接,实际厂景中经常用到。

1
2
3
4
5
6
7
8
9
[root@zabbix zdw] # mkdir zdwdir
[root@zabbix zdw] # ln zdwdirzdw_dir_hard_link
ln : `zdwdir': hard link not allowed fordirectory
#目录不能创建硬链接,硬链接要求分区相同,不同分区就算节点号相同,也不是一个东西
[root@zabbix zdw] # ln -s zdwdirzdw_dir_soft_link
[root@zabbix zdw] # ls -li
total 16
131077 drwxr-xr-x. 2 root root 4096 Mar 1014:38 zdwdir
131078 lrwxrwxrwx. 1 root root    6 Mar 10 14:39 zdw_dir_soft_link ->zdwdir

wKiom1bhHybRzIC1AALfpMCArYo992.jpg

上图中zdwdir节点是2是因为目录

..上一级目录

.当前目录

wKioL1bhH-WxSqE8AAEYIRR-BoA364.jpg

 

由于zdwdir和其自身目录下的点号互为硬链接文件,因此节点号相同,所以zdwdir的链接数是2

wKioL1bhH_fQH9LHAAG07EhYaYA180.jpg

同理..是上一层目录,和zdw节点号相同







      本文转自cix123  51CTO博客,原文链接:http://blog.51cto.com/zhaodongwei/1749593 ,如需转载请自行联系原作者



相关文章
|
3天前
|
Ubuntu Linux 编译器
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
|
3天前
|
Linux Windows
虚拟机添加新硬盘之linux系统篇
虚拟机添加新硬盘之linux系统篇
|
22小时前
|
Linux Perl
Linux系统的文本处理
Linux系统的文本处理
|
1天前
|
IDE Linux 开发工具
Linux 系统上安装
在Linux和Mac上安装Lua 5.3.0只需下载源码,解压,编译和安装。Windows用户可选择SciTE IDE或通过LuaForWindows在Github或Google Code下载安装。创建 HelloWorld.lua,使用`lua HelloWorld.lua`运行显示"Hello World!"。另可参考LuaDist官方推荐方式安装。
|
2天前
|
Linux API
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
|
2天前
|
编解码 Ubuntu Linux
|
2天前
|
Linux
|
2天前
|
Linux
请问如何在Linux系统中删除一个磁盘分区
请问如何在Linux系统中删除一个磁盘分区
|
2天前
|
Linux
Linux系统的磁盘管理
Linux系统的磁盘管理
|
3天前
|
Unix Linux Shell
Linux系统使用超详细(一)
Linux系统是一种开源的、类Unix操作系统内核的实现,它基于Unix的设计原理和思想,并在全球范围内广泛应用。以下是对Linux系统的详细描述: