2.6 ln 命令

ln 命令的作用是为文件或文件夹创建链接,所谓的链接你可以理解成为关联此文件(或文件夹)的另一个文件。你通过另一个文件也可以直接操作当前文件。例如:Windows 操作系统下的快捷方式就相当于 Linux 下的链接文件。

Linux 下的连接文件分为两种:硬链接符号链接

硬链接

硬链接与源文件共享相同的数据块(用来存储文件内容)和索引节点(用来存储文件长度等信息)。

硬链接相当于源文件的多个名称,你可以理解成一个文件的别名。在文件系统中,删除任何一个硬链接(包括源文件本身),只要还有一个硬链接存在,文件的数据就不会被真正的删除。

特点:

创建硬链接的命令格式

ln 源文件 目标文件

示例

weimingze@mzstudio:~$ ls -l *.py
-rw-rw-r-- 1 weimingze weimingze   23 May 22 11:57 hello.py

可见 hello.py 文件的硬连接数是 1(第二列), 文件大小是 23字节(第五列)。下面为 hello.py 创建一个硬链接 a.py

weimingze@mzstudio:~$ ln hello.py a.py
weimingze@mzstudio:~$ ls -l *.py
-rw-rw-r-- 2 weimingze weimingze 23 May 22 11:57 a.py
-rw-rw-r-- 2 weimingze weimingze 23 May 22 11:57 hello.py

建立硬链接后的 a.pyhello.py 这两个文件的硬链接数都变为 2、且文件的大小和创建时间等信息都完全一致,可见这两个文件是同一个文件,只是 hello.py 又多了一个名称叫 a.py

现在我们尝试删除 hello.py。在将 a.py 改名为 hello.py ,则 hello.py 和之前的 hello.py 其实是同一个文件且文件依旧可用。如:

weimingze@mzstudio:~$ rm hello.py
weimingze@mzstudio:~$ mv a.py hello.py
weimingze@mzstudio:~$ ls -l *.py
-rw-rw-r-- 1 weimingze weimingze 23 May 22 11:57 hello.py
weimingze@mzstudio:~$ python3 hello.py
hello world!

注意: hello.py 文件的硬链接数又回到了 1。

符号链接

符号链接文件是关联源文件的另一个文件。它相当于 Windows 操作系统下源文件的一个快捷方式。

符号链接文件是一个独立的文件,他拥有自己的数据块和索引节点。只是符号链接文件的数据块中存放的是源文件的路径,通过符号链接文件内容中的这个路径可以找到源文件的位置。

特点:

创建符号链接的命令格式

创建符号链接文件需要加上 -s 选项,格式如下:

ln -s 源文件 目标文件

示例

weimingze@mzstudio:~$ ls -l hello.py
-rw-rw-r-- 1 weimingze weimingze 23 May 22 11:57 hello.py
weimingze@mzstudio:~$ ln -s hello.py b.py
weimingze@mzstudio:~$ ls -l *.py
lrwxrwxrwx 1 weimingze weimingze  8 Nov  1 22:14 b.py -> hello.py
-rw-rw-r-- 1 weimingze weimingze 23 May 22 11:57 hello.py
weimingze@mzstudio:~$ python3 b.py
hello world!
weimingze@mzstudio:~$ python3 hello.py
hello world!

上述示例我们 ln -s hello.py b.pyhello.py 创建了一个符号链接文件 b.py。使用 ls -l 命令查看 b.py 文件时,第一列的第一个字母为 l,则说明 b.py 是符号链接文件。 文件名 b.py -> hello.py表示 b.py 指向 hello.py。其文件的大小 8 字节是文件路径名 hello.py 的长度。

当我们用 python3 运行两个文件时,执行结果也完全一样。

练习:

  1. 在用户主文件夹下创建一个链接文件 mypasswd 关联到 /etc/passwd
  2. 使用 ls -l 查看 ~/mypasswd 的信息。