/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目錄通常會被清除。

相關內容