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 

image

ehigh@ubuntu:~$ sudo ln -s general.conf general_2.conf

image

例如:使用相对路径创建软链接

/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,是因为目录自身有一个指向自己的.,以及父目录中的一个条目指向它(实际上是父目录对子目录的引用)

  • . :表示的是当前目录文件;

  • .. :表示的是当前目录的上一级目录;

posted on 2022-06-11 17:24  背对背依靠  阅读(355)  评论(0编辑  收藏  举报