我有一个使用创建临时目录的脚本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
目录通常会被清除。