
我有一個使用建立臨時目錄的腳本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
目錄通常會被清除。