/tmp 文件的链接会被删除吗?

/tmp 文件的链接会被删除吗?

我有一个使用创建临时目录的脚本mktemp -d

在临时目录中生成的文件夹是脚本的输出,该脚本将被复制到计算机的其他部分。

我正在考虑使用ln相同的文件夹,而不是将内容复制到其他地方。我想知道如果/tmp目录中的文件夹版本被操作系统清理了,它是否仍然存在?

答案1

这取决于您的临时目录所在的位置。也就是说,您是否创建了自己的临时目录,或者您使用的是系统的(/tmp)?

在您的场景中,您希望在清理临时目录后保留文件/文件夹。

如果它位于系统/tmp目录中,那么它很可能会被系统清理(它是特定于发行版的,但大多数都有cron工作或类似的工作)。

此外,一些发行版/tmp使用以下方式创建目录tmpfs,这意味着内容保存在 RAM/Swap 中,并且在重新启动后无法保存。

仅当您创建难的关联。但是,硬链接只能在单个安装的文件系统中创建。您无法在 到安装在 上的tmpfs /tmp(例如)文件系统之间创建硬链接。ext4/mystuff

您可以创建一个柔软的链接到安装位置/mystuff上的某个位置,但是当临时文件被删除时,链接将指向“nowehere”;这稍微击败了物体!tmpfs/tmp

如果您的发行版将其/tmp文件存储在与您计划存储文件的位置相同的物理磁盘上 ( /mystuff),则只要在系统清理之前创建链接,硬链接就可以工作/tmp

答案2

我举了一个例子来让事情变得更清楚。

在特定目录中,我创建了 2 个文件。

cat sourcefile
This is the sourcefile. 
##This is to create a hard link. 

ln sourcefile destfile

##List the files available. 
ls
destfile  sourcefile

cat destfile
This is the sourcefile. 

现在假设你使用硬链接像上面引用目录中的文件一样/tmp,让我们​​看看如果删除源文件会发生什么。

rm sourcefile
rm: remove regular file `sourcefile'? y
ls
destfile
cat destfile
This is the sourcefile

在上述情况下,destfile仍然可以访问。

现在,让我们看看如果使用软链接会发生什么。

cat sourcefile
This is the sourcefile for softlink example. 
ln -s sourcefile destfile
ls -l
total 4
lrwxrwxrwx 1 root root 10 Jun 26 13:40 destfile -> sourcefile
-rw-r--r-- 1 root root 46 Jun 26 13:40 sourcefile

现在,根据您的情况,让我们删除源文件,看看会发生什么。

rm sourcefile
rm: remove regular file `sourcefile'? y
ls
destfile
cat destfile
cat: destfile: No such file or directory

所以如果你使用软链接,数据可能不存在。

编辑

我用mktemp创建了一个临时文件并创建了一个硬链接/tmp目录到我的工作目录之一。

我重新启动了机器以检查重新启动后内容是否也可用。如果我使用硬链接,重启后内容也可用。检查此项的原因是在重新启动时/tmp目录通常会被清除。

相关内容