linux:ln用法详解


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.txtoriginal.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.txtsymlink.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

这只会删除符号链接文件本身,不会影响原始文件。

猜你喜欢

转载自blog.csdn.net/qq_36803941/article/details/141934006