硬连接
通过inode产生新文件名,inode是记录文件属性的,一个文件一个inode。
硬连接的关键就是:多个文件指向同一个inode
符号连接/软连接
- 类似于windows下的快捷方式(.lnk文件)
- 软连接是通过连接文件打开目标文件
- 可以跨文件系统
- 删除目标文件,则连接文件无法打开
创建连接文件
连接命令说明
ln --help
用法:ln [选项]... [-T] 目标 链接名 (第一种格式)
或:ln [选项]... 目标 (第二种格式)
或:ln [选项]... 目标... 目录 (第三种格式)
或:ln [选项]... -t 目录 目标... (第四种格式)
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
By default, each destination (name of new link) should not already exist.
When creating hard links, each TARGET must exist. Symbolic links
can hold arbitrary text; if later resolved, a relative link is
interpreted in relation to its parent directory.
必选参数对长短选项同时适用。
--backup[=CONTROL] 为每个已存在的目标文件创建备份文件
-b 类似--backup,但不接受任何参数
-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)
-f, --force 强行删除任何已存在的目标文件
-i, --interactive prompt whether to remove destinations
-L, --logical dereference TARGETs that are symbolic links
-n, --no-dereference treat LINK_NAME as a normal file if
it is a symbolic link to a directory
-P, --physical make hard links directly to symbolic links
-r, --relative create symbolic links relative to link location
-s, --symbolic make symbolic links instead of hard links
-S, --suffix=SUFFIX override the usual backup suffix
-t, --target-directory=DIRECTORY specify the DIRECTORY in which to create
the links
-T, --no-target-directory treat LINK_NAME as a normal file always
-v, --verbose print name of each linked file
--help 显示此帮助信息并退出
--version 显示版本信息并退出
其中需要重点关注的两个是-s(创建软连接,默认创建硬连接)和-f(强制创建连接文件,会删除掉目标文件)
创建硬连接
vi hello.c
gcc -o hello hello.c
ln hello hello1
ln hello hello2 #创建硬连接
ll -i hello* # -i 表示输出inode
可以看到硬连接生成的文件对应的是相同的inode
- 删除硬连接的目标文件后,之前创建的硬连接文件依然可以使用,类似文件复制的亚子,
- 修改inode相同的文件(硬连接创建的文件)中的任何一个,其他的文件也会发生相同改变,可以给文件创建硬连接,防止文件被删除。
ln hello.c hello1.c
ln hello.c hello2.c
ll -i
vi hello.c # add printf("make some changes");
vi hello1.c
- 硬连接不可以跨文件系统
- 硬连接不可以连接到目录上
创建软连接
ln -s hello hello2
- 软连接需要使用绝对路径,这样不会使得连接文件拷贝到其他地方(直接使用cp命令,不加-d)时,连接文件就变成和目标文件相同的文件
注意这个地方hello2是的颜色,表明hello2是一个连接文件。
同时inode号发生改变 - 使用cp -d来保持连接文件和目标文件的link关系时,此时连接文件被拷贝到其他地方,在当下目录中找不到目标文件,在创建软连接时使用绝对路径可以解决该问题。
现在hello2变红,说明无法访问到目标文件
ln -s /home/python/Linux/hello hello1
参考正点原子Linux教程:https://www.yuanzige.com/course/detail/50089