5.3.0: 基础命令 - 软链接 和 硬链接



软连接与硬链接

1. 硬链接

作用:主要用于安全备份

语法:ln source destination

原理:

普通文件的inode里存取了文件权限、归属、时间等信息及文件资料存取的block号,block里存取的是实际文件的数据。

然而对于目录文件,它的inode也存取了该文件夹的权限、归属、时间等信息及指向的block号,而其block里存取的是一个储存了inode与其对应的文件名称的列表清单。类似于下表:

目录的inode

drwxr-xr-x root root (time) (block号"**1")

该目录对应的block存储内容

inode1 filename1
inode2 filename2
...    ...

于是,硬链接其实就是在上面的清单里增加了一条记录,内容为”源文件的inode号”和”链接文件名称”。

ln /etc/crontab /root/crontab

ls -i /etc/crontab
3330 /etc/crontab

ls -i /root/crontab
3330 /root/crontab

而此时整体的连接逻辑应该是,如下图

做完硬链接之后,实际文件的inode相当于有了两个入口,而这些入口都是写在目录文件的block里边的,这两个入口拥有同样的inode号,只是文件名称不一样,正因为如此,所以硬链接是不额外产生inode号的,只是相当于给源文件做了一层安全保护,防止被误删。

总结:

硬链接不产生新的inode

不能跨分区做硬链接

不能对目录做硬链接

删除了源文件,不影响硬链接


2. 软连接

作用:可以用于不同分区之间”容量共享”和”inode共享”

语法:ln -s source destination

原理:

软链接和硬链接不同,软链接是由系统新分配了一个inode和block,block里存的是源文件的名称等信息。

软连接文件信息

链接文件inode 》block:源文件信息

源文件信息指向了源文件的inode

源文件inode 》block:实际文件资料

基于此原理,所以软连接会产生新的inode,也可以对目录做软连接(硬链接不可以是因为有可能会产生目录回环)

ln -s /etc/crontab /root/crontab

ls -i /etc/crontab
3330 /etc/crontab

ls -i /root/crontab
413570 /root/crontab

注意:

尽量写绝对路径

软连接的大小和连接的文件名称长短有关

删除了源文件,软连接失效


删除目录软连接时的注意事项:tab自动补全引发的惨案

# 为目录123创建软连接123-soft
ll -d 123
drwxr-x-wx. 2 root root 4096 Nov 18 16:07 123
ln -s 123 123-soft

# 删除时,提示该软连接是一个目录
rm 123-soft/
rm: cannot remove '123-soft/': Is a directory

# 增加-r选项,提示不能删除,该文件不是目录
rm -r 123-soft/
rm: descend into directory '123-soft'? y           
rm: remove symbolic link '123-soft'? y
rm: cannot remove '123-soft': Not a directory

# 增加-rf选项后,依然无法删除
rm -rf 123-soft/
ls
123  123-soft

原来习惯在敲文件名称的时候使用tab键补全文件名称,结果123-soft被补全成为了123-soft/, 于是导致了一开始提示是目录,后来又提示非目录的闹剧,看来以后tab键补全目录软连接名称的时候,还真要注意呀,下面使用rm命令轻松删除软连接文件

# 123-soft没有后面的"/"
rm 123-soft
rm: remove symbolic link '123-soft'? y

ls
123