Linux 硬链接和软链接详细介绍
1、Linux 文件介绍
stat 和 touch 的命令使用(文件元数据的修改和查看)
1.1 文件组成
一个文件通常有两部分组成:
- 元数据(metadata):使用 stat 命令查看
- 数据(data):使用文件查看命令查看,如 cat、tac、less等
1.2 文件 Inode
在 Linux 中,元数据中的 Inode 号(Inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。
可使用以下两种方式进行文件 Inode 。
[root@Tang link]# touch link.txt
# 第一种查看方式
[root@Tang link]# ls -i
101662104 link.txt
# 第二种查看方式
[root@Tang link]# stat link.txt
File: ‘link.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 101662104 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-05-15 14:27:32.015638699 +0800
Modify: 2020-05-15 14:27:32.015638699 +0800
Change: 2020-05-15 14:27:32.015638699 +0800
Birth: -
1.3 改变文件名称,Inode 不改变
[root@Tang link]# ls
link.txt
# 改变文件名称
[root@Tang link]# mv link.txt link-rename.txt
[root@Tang link]# ls
link-rename.txt
# 查看文件 Inode
[root@Tang link]# ls -i
101662104 link-rename.txt
[root@Tang link]# stat link-rename.txt
File: ‘link-rename.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 101662104 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-05-15 14:27:32.015638699 +0800
Modify: 2020-05-15 14:27:32.015638699 +0800
Change: 2020-05-15 14:34:04.751308144 +0800
Birth: -
2、硬链接和软链接
2.1 前提
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。
链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。
2.2 硬链接
2.2.1 硬链接介绍
硬链接是新的目录条目,其引用系统中的现有文件。
文件系统中的每一文件默认具有一个硬链接。
为节省空间,可以不复制文件,而创建引用同一文件的新硬链接。
新硬链接如果在与现有硬链接相同的目录中创建,则需要有不同的文件名,否则需要在不同的目录中。指向同一文件的所有硬链接具有相同的权限、连接数、用户/组所有权、时间戳以及文件内容。指向同一文件内容的硬链接需要在相同的文件系统中。
简单说,硬链接就是一个 inode 号对应多个文件。就是同一个文件使用了多个别名(上图中 hard link 就是 file 的一个别名,他们有共同的 inode)。
2.2.2 硬链接创建
# 创建文件内容
[root@Tang link]# echo "Hello" > link-rename.txt
[root@Tang link]# cat link-rename.txt
Hello
[root@Tang link]# ll
total 4
<