硬链接和软链接和inode
Linux链接概念
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为软链接,即符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
【硬连接】:硬连接指通过索引节点号来进行连接。inode是可以对应多个文件名的
在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
在Linux中,多个文件名可以指向同一索引节点。一般这种连接就是硬连接。
硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。
只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
【软连接】:另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息
实战-1: ln命令创建硬链接
语法格式:ln 源文件 目标文件
硬链接的原理就是多个文件名指向同一个inode,因此多个文件名共用一个inode号,达到共享与备份的目的
注意:源文件被删除,不影响链接文件的正常使用
硬链接不能针对目录创建
硬链接不能跨分区进行创建
硬链接的特点: 无法针对目录,跨分区无法实现。因为每个分区都有自己独立的INDOE编号
互动:为什么刚创建的一个目录,链接数就是2?
[root@xuegod63 ~]# mkdir test
[root@xuegod63 ~]# ll -d test/
drwxr-xr-x 2 root root 6 5月 16 15:55 test/
默认新一个空目录,此目录的第二字段就是2(包含两个隐藏目录,因为每一个目录都有一个指向它本身的子目录"." 和指向它上级目录的子目录".."),所以test是一个链接, 隐藏目录. 是第二个链接
[root@xuegod63 ~]# ll -id test/ #两个inode号是一样的
2453723 drwxr-xr-x 2 root root 6 5月 16 15:55 test/
[root@xuegod63 ~]# ll -id test/.
2453723 drwxr-xr-x 2 root root 6 5月 16 15:55 test/.
ln -s 创建软连接
软链接:相当于windows中的快捷方式
语法:ln -s 源文件 软链接的名字
例:
[root@xuegod63 ~]# cp /etc/passwd a.txt
[root@xuegod63 ~]# ln -s a.txt a-link.txt
[root@xuegod63 ~]# ll a-link.txt
lrwxrwxrwx 1 root root 5 5月 16 16:10 a-link.txt -> a.txt
[root@xuegod63 ~]# rm -rf a.txt
[root@xuegod63 ~]# ll a-link.txt
lrwxrwxrwx 1 root root 5 5月 16 16:10 a-link.txt -> a.txt
注:源文件被删除,链接文件失效
例2:能针对目录和跨分区创建软链接
[root@xuegod63 ~]# ln -s /boot/grub grub-link
能跨分区创建(源文件必须写绝对路径)
[root@xuegod63 ~]# cd /boot/
[root@xuegod63 boot]# ln -s ./grub /root/aaa
[root@xuegod63 boot]# ll /root/aaa
lrwxrwxrwx 1 root root 6 5月 16 16:21 /root/aaa -> ./grub #报错了
inode的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
互动:为什么每次修改完服务器配置文件后,都需要重新加载一下配置文件?
因为vim每次修改完后,Inode号都会变。
[root@xuegod63 ~]# cp /etc/passwd passwd
[root@localhost ~]# ls -i passwd
393418 passwd
[root@localhost ~]# vim passwd #添加一些内容
[root@localhost ~]# ll -i passwd
440252 -rw-r--r-- 1 root root 1813 Dec 29 12:04 passwd
这就是为什么每次修改完服务器的配置文件,都要重启服务,重新读一下配置文件。