Linux 或 Unix 中的硬链接和符号(软)链接是什么?
I节点每次只与一个目录条目相关联。但是,使用硬链接,可以将多个目录条目与单个 inode 相关联。Linux 或 Unix 上的每个文件都带有一个包含有关该文件的元数据的 inode。要创建硬链接,请使用 ln 命令,如下所示:
上述命令分别创建指向 my-awesome-long-file.txt 和 /etc/resolv.conf 的链接,即 /home/vivek/file 和 /tmp/test。
ls /path/to/source /path/to/link
ln old_dir new_link_dir
ls [options] /path/to/source /path/to/link
## create a hard link ##
ln /home/vivek/my-awesome-long-file.txt /home/vivek/file
## create a symbolic link ##
ln -s /etc/resolv.conf /tmp/test
ls -l /tmp/test /home/vivek/file
Linux/Unix 中的符号链接或软链接是什么?
符号链接指的是:
表示另一个文件的抽象位置的符号路径。它类似于 Microsoft Windows 操作系统中的快捷方式。
Linux 或 Unix 中的硬链接是什么?
硬链接指的是:
物理数据的特定位置。它本质上是分配给文件的标签或名称。
Linux 或 UNIX 中的硬链接与软链接
- 硬链接不能链接目录。
- 不能跨越文件系统边界。
软链接或符号链接与硬链接类似。它允许将多个文件名与单个文件关联。但是,符号链接允许:
- 在目录之间创建链接。
- 可以跨越文件系统边界。
当链接源被移动或删除时,这些链接的行为会有所不同。
- 符号链接未更新。
- 硬链接始终指向源,即使被移动或删除。
如何在 Linux 中创建符号链接?
您可以使用 ln 命令创建符号链接:
上述命令将创建到 /etc/hosts 的符号链接作为 /tmp/file。
ln -s source_file my_link
ln -s /path/to/file1.txt /path/to/file2.txt
ls -s /etc/hosts /tmp/file
ls -ali /tmp/file /etc/hosts
符号链接的创建和删除
让我们使用mkdir 命令创建一个名为 foo 的目录 使用
cp 命令
复制 /etc/resolv.conf 文件,输入:
查看 inode 编号,输入:
示例输出:$ mkdir foo
$ cd foo
$ cp /etc/resolv.conf .
$ ls -ali
total 152 1048600 drwxr-xr-x 2 vivek vivek 4096 2008-12-09 20:19 . 1015809 drwxrwxrwt 220 root root 143360 2008-12-09 20:19 .. 1048601 -rwxr-xr-x 1 vivek vivek 129 2008-12-09 20:19 resolv.conf
现在创建到 resolv.conf 的软链接,输入:
示例输出:
$ ln -s resolv.conf alink.conf
$ ls -ali
total 152 1048600 drwxr-xr-x 2 vivek vivek 4096 2008-12-09 20:24 . 1015809 drwxrwxrwt 220 root root 143360 2008-12-09 20:19 .. 1048602 lrwxrwxrwx 1 vivek vivek 11 2008-12-09 20:24 alink.conf -> resolv.conf 1048601 -rwxr-xr-x 1 vivek vivek 129 2008-12-09 20:19 resolv.conf
目录的引用计数没有改变(总共 152)。我们的符号(软)链接存储在与文本文件不同的 inode 中(1048602)。resolv.conf 中存储的信息可通过 alink.conf 文件访问。如果我们删除文本文件 resolv.conf,alink.conf 将成为断开的链接,我们的数据将丢失:
如果 alink.conf 是硬链接,我们的数据仍然可以通过 alink.conf 访问。此外,如果您删除软链接本身,数据仍会存在。阅读 ln 的手册页以获取更多信息。
$ rm resolv.conf
$ ls -ali
结论
要在 Linux 和 Unix 中创建符号链接,请在 shell 提示符下输入:
要在 Linux 和 Unix 中创建硬链接,请在 shell 提示符下输入:
ln -s source new_soft_link
ls -ali source new_soft_link
ln source new_hard_link
ls -ali source new_hard_link