制作文件间链接
管理文件间链接
硬/软链接
创建指向同一个文件的多个名称。
创建硬链接
从初始名称到文件系统的数据,每个文件都以一个硬链接开始。当创建指向文件的新硬链接时,也会创建另一个指向同一数据的名称。新硬链接与原始文件名作用相同。一经创建,新硬链接与文件的原始名称便别无二致。
[root@servera ~]# pwd
/root
[root@servera ~]# touch newfile.txt
[root@servera ~]# ls -l newfile.txt
-rw-r--r--. 1 root root 0 Jul 16 04:53 newfile.txt
newfile.txt
链接数为1,绝对地址/root/newfile.txt
使用ln 命令创建一个指向现有文件的新硬链接。至少需要两个参数,即现有文件的路径已经要创建的硬链接的路径。
在/tmp目录中为现有文件newfile.txt创建硬链接
[root@servera ~]# ls -l newfile.txt /tmp/newfile-link2.txt
-rw-r--r--. 2 root root 0 Jul 16 04:53 newfile.txt
-rw-r--r--. 2 root root 0 Jul 16 04:53 /tmp/newfile-link2.txt
如果想知道两个文件是否为彼此的硬链接,使用ls -i 列出文件的索引节点编号。如果文件位于同一系统,且索引编号系统,那么这两个文件就是指向同一数据的硬链接。
[root@servera ~]# ls -il newfile.txt /tmp/newfile-link2.txt
33579695 -rw-r--r--. 2 root root 0 Jul 16 04:53 newfile.txt
33579695 -rw-r--r--. 2 root root 0 Jul 16 04:53 /tmp/newfile-link2.txt
即使原始文件删除,只要存在至少一个硬链接,该文件内容依然可用。只有删除最后的硬链接,才会将数据从存储中删除。
[root@servera ~]# rm -f newfile.txt
[root@servera ~]# ls -l /tmp/newfile-link2.txt
-rw-r--r--. 1 root root 6 Jul 16 05:03 /tmp/newfile-link2.txt
[root@servera ~]# cat /tmp/newfile-link2.txt
Hello
硬链接局限性
- 只用于常规文件,不能使用ln来创建指向目录或特殊文件的硬链接
- 当两个文件都位于同一文件系统时,才能使用硬链接。
列出位于不同文件系统上的目录
[root@servera ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 874504 0 874504 0% /dev
tmpfs 894592 0 894592 0% /dev/shm
tmpfs 894592 8900 885692 1% /run
tmpfs 894592 0 894592 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17811456 1884916 15926540 11% /
/dev/nvme0n1p1 1038336 225396 812940 22% /boot
tmpfs 178916 0 178916 0% /run/user/0
两个不同的Mounted On目录及其子目录的文件位于不同的文件系统上。
创建软链接
ln -s 创建,软链接不是常规文件,而是指向现有文件或目录的特殊文件。
- 可以链接不同文件系统上的两个文件
- 可以指向目录或特殊文件,不限于常规文件
为/tmp/newfile-link2.txt
创建新的软链
[root@servera ~]# ln -s /tmp/newfile-link2.txt /tmp/newfile-symlink.txt
[root@servera ~]# ls -l /tmp/newfile-link2.txt /tmp/newfile-symlink.txt
-rw-r--r--. 1 root root 6 Jul 16 05:03 /tmp/newfile-link2.txt
lrwxrwxrwx. 1 root root 22 Jul 16 05:17 /tmp/newfile-symlink.txt -> /tmp/newfile-link2.txt
[root@servera ~]# cat /tmp/newfile-symlink.txt
Hello
当原始常规文件被删除后,软链接依然指向该文件,但目标消失。指向缺失的文件的软链成为"悬挂的软链接"
[root@servera ~]# rm -rf /tmp/newfile-link2.txt
[root@servera ~]# ls -l /tmp/newfile-symlink.txt
lrwxrwxrwx. 1 root root 22 Jul 16 05:17 /tmp/newfile-symlink.txt -> /tmp/newfile-link2.txt
[root@servera ~]# cat /tmp/newfile-symlink.txt
cat: /tmp/newfile-symlink.txt: No such file or directory
软链可以指向目录。发挥和目录一样的作用。通过cd更改为软链接将是当前的工作目录变成链接目录。一些工具可以跟踪使用软链接到达当前工作目录的事实。例如,cd将使用软链接的名称更新当前工作目录。 -P更新到实际目录名称。
创建指向/etc目录的软链
[root@servera ~]# ln -s /etc /root/configfiles
[root@servera ~]# cd /root/configfiles/
[root@servera configfiles]# cd -P /root/configfiles/
[root@servera etc]# pwd
/etc
[root@servera etc]# cd /root/configfiles/
[root@servera configfiles]# pwd
/root/configfiles