如何在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