Tmp

/tmp 是否保證存在?

  • April 30, 2017

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

FHS要求/tmp存在,POSIX也是如此,因此您可以依賴它的存在(至少在兼容的系統上;但實際上它幾乎可以保證存在於類 Unix 系統上)。但您不應該:系統管理員或使用者可能更喜歡臨時文件的其他位置。有關更多詳細資訊,請參閱在多個平台上查找正確的 tmp 目錄。

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

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

在 shell 腳本中,您可以將"${TMPDIR:-/tmp}"其用作臨時文件位置:這將擴展為TMPDIR是否已設置¹的值,/tmp否則擴展為。或者您可以TMPDIR使用命令有條件地設置以防它未設置

: "${TMPDIR:=/tmp}"

然後在"$TMPDIR".

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

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

引用自:https://unix.stackexchange.com/questions/362100