ln(英文全拼:link files)是Linux中非常重要的一个命令,用创建一个硬链接或者一个符号链接(也叫软链接)。它的功能是为某一个文件或目录在另外一个位置建立一个同步的链接。当我们需要在多个目录下都能显示某个文件时,命令ln就派上用场了。
通过本文,将详细的记录ln命令的格式、用法、参数及示例等等。写此文章的目的是在总结自己所学,给自己一个交代的前提下,方便各位志同道合的同路人。
1. 命令格式
ln [参数][源文件或目录][目标文件或目录]
2. 命令参数
- –backup[=CONTROL] 备份已存在的目标文件
- -b 类似 --backup ,但不接受参数
- -d 允许超级用户制作目录的硬链接
- -f 强制执行
- -i 交互模式,文件存在则提示用户是否覆盖
- -n 把符号链接视为一般目录
- -s 软链接(符号链接)
- -v 显示详细的处理过程
3. 命令功能
在使用 ln 命令时,即可以创建一个硬链接,也可以创建一个符号链接(软链接),当使用参数-s
修饰时,创建的是一个符号链接,若不使用该参数,则创建的是一个硬链接。
3.1 硬链接
硬链接是指将一个文件名链接到一个 inode 上,使得多个文件名指向同一个文件内容。创建硬链接时,目标文件必须是同一个文件系统中的一个已经存在的文件。当删除原始文件时,硬链接不会受到影响,因为它们都指向同一个 inode,只有当所有链接都被删除时,文件的内容才会被真正删除。
- 硬链接以文件副本的形式存在,但不占用实际空间;
- 硬链接不允许给目录创建硬链接;
- 硬链接只有在同一个文件系统中才能创建;
3.2 符号链接(软链接)
符号链接是指将一个文件名链接到另一个文件名上,实际上是在文件系统中创建了一个新的文件,该文件包含了指向原始文件的指针。符号链接可以跨越文件系统边界,并且可以指向任何类型的文件(包括目录)。当删除原始文件时,符号链接会失效,但并不会影响到链接指向的文件。
- 软链接以路径的形式存在,类似于Windows操作系统中的快捷方式;
- 软链接可以跨文件系统 ,硬链接不可以;
- 软链接可以对一个不存在的文件名进行链接;
- 软链接可以对目录进行链接,但硬链接不可以;
4. 链接示例
4.1 硬链接示例
上图是建立硬链接文件的测试过程,详细介绍如下:
- 通过
touch
命令创建一个名为 test.c 的空文件; - 通过
ln
命令(ln test.c test11.c
)创建test.c的硬链接文件 test11.c; - 通过
ls -li test*
查看 test.c 与 test11.c两个文件的信息,可以确认通过硬链接创建的链接文件与源文件具有相同的节点(inode)658257; - 在文件test.c中随机添加部分内容,保存后,查看test11.c,可以看出test11.c中也添加了相应的内容,两者的内容是完全一样的(
修改源文件,硬链接文件也会同步修改
); - 在文件test11.c中随机添加部分内容,保存后,查看test.c,可以看出test.c中也添加了相应的内容,两者的内容是完全一样的(
修改硬链接文件,源文件也会同步修改
); - 删除文件源test.c,查看链接文件test11.c,确认链接文件test11.c并未因为删除了源文件而消失或者失效。
4.2 符号链接示例
上图是建立符号链接的测试过程,详细介绍如下:
- 通过
touch
命令创建一个名为 test.c 的空文件; - 通过
ln
命令(ln -s test.c test22.c
)创建test.c的硬链接文件 test22.c; - 通过
ls -li test*
查看 test.c 与 test22.c两个文件的信息,发现源文件与符号链接文件的inode并不一样,这与硬链接文件是不一样的; - 在文件test.c中随机添加部分内容,保存后,查看test22.c,可以看出test22.c中也添加了相应的内容,两者的内容是完全一样的(
修改源文件,硬链接文件也会同步修改
); - 在文件test22.c中随机添加部分内容,保存后,查看test.c,可以看出test.c中也添加了相应的内容,两者的内容是完全一样的(
修改硬链接文件,源文件也会同步修改
); - 删除文件源test.c,查看链接文件test22.c,已经无法打开,说明删除了源文件后符号文件也就失效了(如上图所示,符号文件有效是蓝色字体,无效时则变成了红色字体),虽然符号链接文件无效了,但它依然存在的,inode节点也未发生变化。
4.3 目录的链接示例
上图是建立符号链接的测试过程,详细介绍如下:
- 如上图,首先在test_ln文件夹下创建3个文件,分别未tmp1.c 、tmp2.c、tmp3.c;
- 通过命令
ln test_ln test_ln123
试图创建一个目录的硬链接,但提示失败,这里印证了大部分文件系统都不支持为目录创建硬链接
; - 通过命令
ln -s test_ln test_ln123
为tst_ln文件夹创建链接符号 test_ln123 成功; - 通过命令
ls -li test_ln*
,可以看出test_ln123是指向test_ln的符号链接,但是两者的内容inode好都是完全一样,它们依然是符号链接; - 删除源文件tmp1.c,符号链接中的tmp1.c也同步消失了;
5. 总结
重要的事情说3遍:
最最常用的命令为:ln -s [源文件] [链接符号]
, ln -s [目录] [目录链接符号]
最最常用的命令为:ln -s [源文件] [链接符号]
, ln -s [目录] [目录链接符号]
最最常用的命令为:ln -s [源文件] [链接符号]
, ln -s [目录] [目录链接符号]