1. 描述
在 Linux 系统中,ln
命令用于创建硬链接(Hard Link)或符号链接(Symbolic Link,也称为软链接)。链接的作用是创建文件或目录的别名,而不复制文件或目录本身。硬链接和符号链接有不同的功能和使用场景。
2. 语法
ln
命令的基本语法格式如下:
ln [选项] 源文件 目标文件
其中,源文件
是你希望创建链接的文件或目录,目标文件
是你想创建的链接的路径。
完整语法如下:
Usage: ln [OPTION]... [-T] TARGET LINK_NAME
or: ln [OPTION]... TARGET
or: ln [OPTION]... TARGET... DIRECTORY
or: ln [OPTION]... -t DIRECTORY TARGET...
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.
Mandatory arguments to long options are mandatory for short options too.
--backup[=CONTROL] make a backup of each existing destination file
-b like --backup but does not accept an argument
-d, -F, --directory allow the superuser to attempt to hard link
directories (note: will probably fail due to
system restrictions, even for the superuser)
-f, --force remove existing destination files
-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 display this help and exit
--version output version information and exit
2.1 硬链接(Hard Link)
硬链接的特点:
- 硬链接与原文件共享相同的 inode 和数据块。
- 硬链接不能跨越文件系统。
- 删除硬链接或原文件,文件数据依然存在,除非所有链接都被删除。
- 硬链接只能针对文件,不能用于目录。
硬链接是文件在文件系统中的一个指针。它们共享相同的 inode 号,指向文件的实际数据块。因此,硬链接和原始文件实际上是同一个文件,删除其中一个不会影响另一个。
用法:
ln 源文件 目标文件
示例:
ln original.txt hardlink.txt
这将创建一个名为 hardlink.txt
的硬链接,指向 original.txt
。此时 hardlink.txt
和 original.txt
完全等效,删除 original.txt
不会影响 hardlink.txt
。
2.2. 符号链接(Symbolic Link / Soft Link)
符号链接的特点:
- 符号链接与原文件不共享相同的 inode,它只包含原文件的路径。
- 符号链接可以跨文件系统。
- 符号链接可以指向文件或目录。
- 如果删除原文件,符号链接将变为无效。
符号链接是一个特殊类型的文件,它包含指向另一个文件或目录的路径。符号链接与硬链接不同,它们不共享相同的 inode 号,而是存储原文件的路径。
用法:
ln -s 源文件 目标文件
示例:
ln -s original.txt symlink.txt
这将创建一个名为 symlink.txt
的符号链接,指向 original.txt
。如果删除 original.txt
,symlink.txt
将变为一个无效的链接(称为“断链”)。
硬链接与符号链接的区别
特性 | 硬链接 (Hard Link) | 符号链接 (Symbolic Link) |
---|---|---|
Inode 共享 | 是 | 否 |
文件指向 | 直接指向文件的物理数据 | 指向文件的路径 |
文件删除影响 | 删除任一链接不会影响其他链接或文件数据 | 删除目标文件后,符号链接变为无效 |
跨文件系统 | 否 | 是 |
可链接的类型 | 仅限文件 | 文件和目录 |
3. ln
命令的常用选项
-s
:创建符号链接,而非硬链接。-f
:强制创建链接。如果目标文件已存在,ln
会直接覆盖它。-n
:如果目标文件是符号链接,ln -n
会将符号链接作为常规文件处理,而不会尝试跟随它。-v
:显示详细的操作信息。-T
:强制将目标解释为普通文件(如果目标是一个目录,使用此选项将报告错误)。-r
:创建相对路径的符号链接,而不是绝对路径。
4. 例子
(1)创建一个硬链接
ln file1.txt file2.txt
这会创建 file2.txt
,它是 file1.txt
的硬链接。它们指向同一个物理数据,删除其中一个不会影响另一个。
(2)创建一个符号链接
ln -s /path/to/file1.txt /path/to/file2.txt
这会创建 file2.txt
,它是 file1.txt
的符号链接。file2.txt
是指向 file1.txt
的路径引用。
(3)强制覆盖已存在的符号链接
ln -sf newfile.txt link.txt
如果 link.txt
已经存在,这条命令将强制覆盖它,指向新的文件 newfile.txt
。
(4) 创建相对路径的符号链接
ln -sr /path/to/original.txt link.txt
这将创建一个相对路径的符号链接。如果 original.txt
相对于符号链接所在位置的路径关系发生变化,符号链接仍然可以正确指向目标文件。
(5)为目录创建符号链接
ln -s /home/user/mydir /tmp/mydirlink
这会创建一个名为 /tmp/mydirlink
的符号链接,指向 /home/user/mydir
目录。符号链接可以用于目录,而硬链接不能。
(6)查看链接文件信息
使用 ls -l
可以查看文件链接的信息:
ls -l
输出示例:
lrwxrwxrwx 1 user user 11 Aug 14 11:32 symlink.txt -> original.txt
在符号链接的情况下,输出中会显示符号链接指向的目标文件(symlink.txt -> original.txt
)。l
表示这是一个符号链接。
(7) 删除符号链接
删除符号链接只需使用 rm
命令:
rm symlink.txt
这只会删除符号链接文件本身,不会影响原始文件。