ln命令

软链接 & 硬链接

在Linux下,链接文件分为两类:软链接和硬链接。在Linux上文件被分为两部分:用户数据(user data)与元数据(meta data)。用户数据即文件数据块是记录文件真实内容的地方;元数据则记录了关于文件的附加信息,如文件大小、创建时间、所有者等信息。在Linux下系统通过文件元数据中的inode号来唯一标识文件。文件名只是为了方便记忆。硬链接与软链接的引入主要是为了解决文件的共享问题。

硬链接

若一个inode号对应多个文件名时,则称之为硬链接。硬链接具有以下几个特性:

  1. 文件拥有相同的inode号和数据块;
  2. 只能对已存在的文件创建硬链接;
  3. 不能跨越文件系统创建硬链接;
  4. 不能堆目录创建硬链接;
  5. 删除一个硬链接文件不影响其他相同inode号的文件。

软链接

在Linux中,若文件的数据块中存放的内容是另一文件的路径名,则称之为软连接。软链接类似于Windows系统下的快捷方式。软连接有自己的inode号和用户数据块。为此,软链接避免了硬链接的诸多限制,软链接主要具有以下特点:

  1. 软链接有自己的文件属性及权限等;
  2. 可以对不存在的文件或目录创建软链接;
  3. 软链接可以跨越文件系统创建;
  4. 删除软链接时不会影响被指向的文件;
  5. 若原文件被删除时,相关软链接文件被称为死链接(当该路路劲的文件重新创建时,死链接可以恢复正常)。

链接文件的创建

ln命令是Unix/Linux下用于在文件之间创建链接的命令。它有以下四种形式:

ln [OPTION]... [-T] TARGET LINK_NAME          (1st form)
ln [OPTION]... TARGET                         (2nd form)
ln [OPTION]... TARGET... DIRECTORY            (3rd form)
ln [OPTION]... -t DIRECTORY TARGET...         (4th form)

第一种形式创建一个名为LINK_NAME的链接指向TARGET。第二种形式在当前目录创建指向TARGET的链接。第三、四种形式为多个TARGET在指定的DIRECTORY目录创建链接。

ln命令默认创建的是硬链接,通过--symbolic-s选项可以创建软链接。ln命令在建立链接时,新链接的名称不应该存在。当在建立硬链接时,TARGET必须存在。下表给出了部分ln命令选项说明,更多的可以使用man ln查看。

选项 说明
-f, –force 链接时删除已有的目的文件
-i, –interactive 删除已有的目的文件时进行询问
-s, –symbolic 创建软链接文件
-S, –suffix=SUFFIX 重写默认的备份后缀

示例

接下来的示例展示了ln命令的基本用法,以及软链接与硬链接之间的一些细微区别。

user@host:~$ mkdir ln-test && cd ln-test
user@host:~/ln-test$ echo 'hello world' > src-file
user@host:~/ln-test$ cat src-file
hello world
user@host:~/ln-test$ ln src-file hard-src-file
user@host:~/ln-test$ ln -s src-file soft-src-file
user@host:~/ln-test$ echo 'Hello World!' > src-file
user@host:~/ln-test$ cat hard-src-file
Hello World!
user@host:~/ln-test$ cat soft-src-file
Hello World!
user@host:~/ln-test$ rm src-file
user@host:~/ln-test$ cat hard-src-file
Hello World!
user@host:~/ln-test$ cat soft-src-file
cat: soft-src-file: 没有那个文件或目录
user@host:~/ln-test$ ln no-exist-file hard-no-exist-file
ln: failed to access "no-exist-file": 没有那个文件或目录
user@host:~/ln-test$ ln -s no-exist-file soft-no-exist-file
user@host:~/ln-test$ mkdir test
user@host:~/ln-test$ ln test hard-test
ln: "test": 不允许将硬链接指向目录
user@host:~/ln-test$ ln -s test soft-test

首先,建立测试目录并进入测试目录,接着创建名为src-file的文件,内容为hello world。第5、6行分别为该文件建立硬链接hard-src-file和软链接soft-src-file。紧接着,我们修改文件src-fileHello World!,可以看到,无论是硬链接还是软链接,其内容都与src-file一致。在示例的第12行中,我们删除了原文件src-file,再次查看时,通过软链接方式建立的文件无法打开,而采用硬链接创建的文件的内容则没有发生变化。在示例的17、19行展示了对于不存在的文件建立硬链接与软链接的区别,其中,当原文件不存在时,无法为文件创建硬链接,然而,软链接则可以成功创建。示例的最后展示了对目录建立硬链接与软链接的区别,从上可以看出,不能为目录创建硬链接,只能创建软链接。

参考

[1] User Commands
[2] 理解Linux的硬链接与软链接

你可能感兴趣的:(ln命令)