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.py 和 hello.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.py 为 hello.py 创建了一个符号链接文件 b.py。使用 ls -l 命令查看 b.py 文件时,第一列的第一个字母为 l,则说明 b.py 是符号链接文件。 文件名 b.py -> hello.py表示 b.py 指向 hello.py。其文件的大小 8 字节是文件路径名 hello.py 的长度。
当我们用 python3 运行两个文件时,执行结果也完全一样。
练习:
- 在用户主文件夹下创建一个链接文件
mypasswd关联到/etc/passwd。 - 使用
ls -l查看~/mypasswd的信息。