如何在Linux或Unix中创建硬链接

时间:2020-01-09 14:16:10  来源:igfitidea点击:

如何使用命令行在Linux/UNIX/Apple Mac OS X/BSD操作系统中创建硬链接?
如何使用ln命令在Linux或类似Unix的系统上创建硬链接和软链接,包括限制以及如何删除硬链接。

Linux/UNIX都允许文件的数据在同一文件系统中的不同位置具有多个名称。
对于同一数据,具有多个名称的此类文件称为硬链接文件。
硬链接到文件与原始目录条目没有区别。
对文件的任何更改实际上都独立于用于引用文件的名称。
硬链接通常可能不指向目录,并且可能不会跨越文件系统。

如何在Linux或Unix中创建硬链接

要在Linux或类Unix系统上创建硬链接:

  • 在sfile1file和link1file之间创建硬链接,运行:ln sfile1file link1file
  • 要建立符号链接而不是硬链接,请使用:ln -s source link
  • 要在Linux上验证软链接或硬链接,请运行:ls -l source link

让我们看看在Linux/Unix系统上进行硬链接的示例。

ln命令示例,用于在Linux上进行硬链接

ln命令在文件之间建立链接。
默认情况下,ln进行硬链接。

ln命令语法T在Linux中创建硬链接

Unix/Linux硬链接命令的语法如下:

ln {source} {link}
ln /path/to/source /path/to/link
ln target link
ln target directory

其中:

  • source是一个现有文件。
  • " link"是要创建的文件(硬链接)。

要为foo文件创建硬链接,请输入:

echo 'This is a test' > foo
ln foo bar
ls -li bar foo

输出示例:

4063240 -rw-r--r-- 2 root root 15 Oct  1 15:30 bar
4063240 -rw-r--r-- 2 root root 15 Oct  1 15:30 foo

其中:

  • 4063240:Inode。从上面的示例输出中,我们可以看到inode是相同的。我们将-i选项传递给ls命令以显示每个文件的索引号(索引)。
  • 2:文件的硬链接数显示在第三栏中。因此,如果您运行" ln foo hlink2",则计数器将增加为3。

如何在Linux或Unix上删除硬链接?

rm命令删除Linux或Unix上的文件,包括硬链接。
但是,即使删除了源文件,只要存在另一个硬链接,数据仍然可以访问。
要清除数据,必须删除所有硬链接,包括源。

使用rm命令:

$ echo 'I love Linux and Unix' > file.txt
$ cat file.txt
## create hard links ##
$ ln -v file.txt hardlink1
$ ln -v file.txt hardlink2
## list all files with inodes ##
$ ls -li file.txt hardlink?
## remove 1st hardlink ##
$ rm hardlink1
$ ls -li file.txt hardlink?
## remove source file ##
$ rm file.txt
$ ls -li file.txt hardlink?
## but we can still access original file.txt data ##
$ cat hardlink2
## to get rid of file.txt data delete all hard links too ##
$ rm hardlink2
## error error all data gone ##
$ cat file.txt hardlink?
$ ls -li file.txt hardlink?

Linux和Unix上的硬链接限制

硬链接存在一些问题,有时可能使它们不合适。
首先,由于链接与其指向的链接相同,因此很难像递归给出该目录的所有内容之类的命令,而忽略任何链接。
大多数现代操作系统不允许在目录上进行硬链接,以防止无限递归。
硬链接的另一个缺点是它们必须位于同一文件系统中,并且当今大多数大型系统都由多个文件系统组成。

如何在Linux或Unix中创建符号(软)链接

语法如下:

ln -s source link
ln -s /path/to/foo/ /path/to/link
ln -v /path/to/foo/ /path/to/link

在以下示例中,创建到postupload.sh的软链接,如cmspostupload.sh和faqpostupload.sh。

$ ln -sv postupload.sh cmspostupload.sh
$ ln -sv postupload.sh faqpostupload.sh

验证一下:

$ ls -li postupload.sh cmspostupload.sh faqpostupload.sh