在本文中,您将学习如何使用硬链接和符号链接(也称为软链接)使多个文件名引用同一文件,在Linux系统中,创建指向同一文件的多个名称的两种常见方法是:创建到文件的硬链接和创建到文件的软链接(符号链接)。
使用硬链接
Linux中的每个文件都以单个硬链接开头,通过创建指向文件的新硬链接,您可以创建另一个指向相同数据的名称。
新的硬链接的行为与原始文件名完全相同,很难说出新的硬链接和文件的原始名称之间的区别,您可以使用ln命令来创建硬链接,另一个指向现有文件的名称:
$ echo "Hello World from Hard Link" >/tmp/hello1.txt
$ ln /tmp/hello1.txt /tmp/hello2.txt
注:/tmp/hello1.txt是现有文件的路径,/tmp/hello2.txt是您要创建的硬链接。
使用ls -i选项可列出文件的inode编号,如果索引节点号相同,则文件是指向相同数据的硬链接:
$ ls -li /tmp/hello1.txt /tmp/hello2.txt
2591191 -rw-------. 2 jkmutai jkmutai 27 Feb 5 08:16 /tmp/hello1.txt
2591191 -rw-------. 2 jkmutai jkmutai 27 Feb 5 08:16 /tmp/hello2.txt
--- Let's add third file and recheck ---
$ ln /tmp/hello1.txt /tmp/hello3.txt
$ ls -li /tmp/hello1.txt /tmp/hello2.txt /tmp/hello3.txt
2591191 -rw-------. 3 jkmutai jkmutai 27 Feb 5 08:16 /tmp/hello1.txt
2591191 -rw-------. 3 jkmutai jkmutai 27 Feb 5 08:16 /tmp/hello2.txt
2591191 -rw-------. 3 jkmutai jkmutai 27 Feb 5 08:16 /tmp/hello3.txt
引用同一文件的所有硬链接都具有相同的内容:链接数、访问权限、用户和组的所有权、时标、文件内容。
与软链接比较:
$ ls -li /tmp/file1.txt /tmp/file2.txt /tmp/file3.txt
2442008 -rw-------. 1 jkmutai jkmutai 17 Feb 4 22:37 /tmp/file1.txt
2442949 lrwxrwxrwx. 1 jkmutai jkmutai 14 Feb 4 22:38 /tmp/file2.txt -> /tmp/file1.txt
2601927 lrwxrwxrwx. 1 jkmutai jkmutai 14 Feb 5 08:24 /tmp/file3.txt -> /tmp/file1.txt
使用软链接(符号链接)
软链接是一种特殊类型的文件,它指向现有文件或目录,它可用于链接不同文件系统上的两个文件,软链接也可以指向特殊文件。
ln -s命令用于创建软链接,让我们看一个例子。
在以下示例中,ln -s命令用于为现有文件/tmp/file1.txt创建一个新的软链接,该文件将命名为/tmp/file2.txt:
$ echo "Hello from file1" > /tmp/file1.txt
$ ln -s /tmp/file1.txt /tmp/file2.txt
通过列出文件进行确认:
$ ls -l /tmp/file1.txt /tmp/file2.txt
-rw-------. 1 jkmutai jkmutai 17 Feb 4 22:37 /tmp/file1.txt
lrwxrwxrwx. 1 jkmutai jkmutai 14 Feb 4 22:38 /tmp/file2.txt -> /tmp/file1.txt
您可以看到/tmp/file2.txt的长列表的第一个字符是l而不是-,这表明该文件是软链接,而不是常规文件。(A d表示该文件是目录。)
检查符号链接文件的内容:
$ cat /tmp/file2.txt
Hello from file1
对于目录,请使用:
ln -s /dir /dir2
如果删除原始常规文件,则该软链接仍将指向丢失的文件,即“dangling soft link”。
硬链接和软链接之间的主要区别
1、硬链接将名称指向存储设备上的数据。
2、软链接将一个名称指向另一个名称,该名称指向存储设备上的数据。
相关主题