Linux 软硬链接
文件的存放
在Linux系统中,一般文件的存储是分为三部分存放。首先文件的属性信息是存放在一个叫作inode的区域中,文件真正的数据部分存放在一个叫作block区域,最后文件名是存放在目录块中,目录块是存储在数据区域中的一种特殊的数据块,它存储了一组目录项,每个目录项存放一个文件的文件名和Inode编号。
元数据:描述的是文件的属性信息
文件的属性包含以下内容:
-
inode节点号 (唯一标识文件系统中的每一个inode)
-
文件类型
-
文件权限
-
文件大小
-
文件所有者、所属组
-
UID、GID
-
三个时间戳
-
链接数
创建文件的过程
1.系统分配空闲的节点编号
2.系统在存放元数据信息的空间添加上对应的该文件的元数据信息
3.在存放数据的空间分配指定大小的空间给该文件存放数据
删除文件过程
核心点就是:断开目录项中的inode节点号和文件名的映射关系。这意味着在目录中不再有该文件的引用。
软硬链接
软硬链接属于文件属性的一部分,通过软硬链接可以为文件创建多个引用,而不需要复制实际内容。
硬链接:
硬链接是为一个文件的内容提供了另一个路径和文件名;
硬链接特点:
-
不能跨文件系统创建硬链接,例如:ext4中的文件不能硬链接到xfs中。
-
不能为目录创建硬链接(除了.和..),.代表的是当前目录,..代表的是上级目录。
软链接:
软链接可以理解为Windows系统中的快捷方式
软链接的特点:
-
支持跨分区、跨文件系统
-
可以给目录文件创建软链接
-
创建一个软链接到一个目录下,没有指定软连接的名字,那么软连接的名字和源文件名一致
-
创建软链接时,如果源文件使用相对路径,则这个路径应该相对于软链接文件的相对路径,而不是相对于自己本身
Linux中创建链接文件:
# 创建硬链接
sudo ln file_name new_file_name
# 创建软链接
sudo ln -s file_name new_file_name
例如:
ehigh@ubuntu:~$ sudo ln general.conf general_1.conf
ehigh@ubuntu:~$ sudo ln -s general.conf general_2.conf
例如:使用相对路径创建软链接
/home/user/
│
├── docs/
│ └── file.txt
│
└── links/
想在links/目录中为file.txt创建一个软链接
# 错误
ln -s docs/file.txt links/link_to_file
这个命令会在 links/创建一个名为link_to_file的软链接,软连接指向docs/file.txt。因为使用的是相对路径,所以
链接中存储的相对路径docs/file.txt是相对于软链接自身的位置,即links/docs/file.txt,这显然是不对的。
所以如果要使用相对路径创建软链接,正确的是:
ln -s ../docs/file.txt links/link_to_file
这样,软链接指向的就是 ../docs/file.txt,即/home/user/下的/docs/file.txt,这样就没错了。
推荐创建软链接的时候,源文件直接使用绝对路径,这样就不会存在这种问题了。
说明:
当创建一个文件后,硬链接数默认为2,是因为目录自身有一个指向自己的.,以及父目录中的一个条目指向它(实际上是父目录对子目录的引用)
-
. :表示的是当前目录文件;
-
.. :表示的是当前目录的上一级目录;