/tmp 保證存在嗎?

/tmp 保證存在嗎?

/tmp在寫入其中的文件之前是否需要檢查和建立?假設沒有人逃跑,sudo rm -rf /tmp因為這種情況非常罕見

答案1

FHS現有的任務授權/tmp,以及POSIX所以你可以信賴它的存在(至少在相容的系統上;但實際上它幾乎可以保證存在於類別 Unix 系統上)。但您不應該這樣做:系統管理員或使用者可能更喜歡使用其他位置來存放臨時文件。看在多個平台上尋找正確的 tmp 目錄更多細節。

答案2

在實踐中,/tmp幾乎肯定存在。但是,即使它存在,也不意味著您應該將臨時文件放在那裡。

標準約定是使用TMPDIR環境變數。如果存在,則它指向臨時檔案的目錄。如果不存在,則將臨時檔案放入/tmp.

在 shell 腳本中,您可以將其用作臨時檔案位置:如果已設置,則"${TMPDIR:-/tmp}"擴展為值,否則擴展為值。或者您可以使用以下命令有條件地設定以防未設定TMPDIR/tmpTMPDIR

: "${TMPDIR:=/tmp}"

然後在裡面建立臨時檔案"$TMPDIR"

請注意,任何應用程式都可以在/tmp或下方建立文件$TMPDIR。此外,該目錄可能在使用者之間共享,因此在建立文件時需要注意權限。許多系統(Linux、*BSD)都有一個指令mktemp它在正確的目錄中安全地建立檔案。通常,使用它mktemp來建立臨時檔案和目錄是一個好主意,尤其是從 shell 腳本中,由於符號連結攻擊的可能性,不可能在共用目錄中安全地建立檔案(mkdir如果正確處理錯誤就可以)。

非空 - 如果變數為空,那麼它無論如何都不能使用,並且如果它們應該包含檔案名,則以相同的方式處理空或未設定的變數通常是一個好主意。

答案3

儘管它很可能存在,但您應該檢查另一個原因:它不能保證一定存在大的。在許多系統上,/tmp由 RAM 而不是磁碟支持,並且可能僅限於幾 GB。 (在 Fedora 系統上,預設情況下它是 RAM 的一半。)因此,您不僅應該檢查是否存在,還應該檢查是否有空間放置您打算放置的任何內容。

如果您有較大的東西,請使用/var/tmp/.

相關內容