Tmp
/tmp 是否保證存在?
/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
如果您正確處理錯誤則很好)。¹並且非空——如果變數為空,那麼它無論如何都不能使用,並且如果它們應該包含文件名,則以相同的方式處理空或未設置的變數通常是一個好主意。