Scripting

作為開發人員,我應該為我的中間文件寫入哪個文件夾?

  • July 22, 2018

我開始為我的項目編寫一些 bash 腳本,它們需要編寫一些中間文件或變數。

我想知道當有人執行我的腳本時我可以確定可以訪問哪些文件夾?使用它是一種常見的做法/tmp/嗎?還是我應該使用其他東西?

在尋找這些東西時,我發現Filesystem Hierarchy Standard 文件非常寶貴。

有幾個選擇,

  • /tmp - ‘非永久’ 臨時文件
  • /var/tmp - ‘永久’ 臨時文件
  • /var/cache -“應用程序”瞬態數據文件

這實際上取決於您儲存的數據類型。

如果您需要編寫一些僅在腳本或應用程序執行期間持續存在的臨時文件,請使用TMPDIR環境變數指示的目錄,或者如果未定義該變數,則使用/tmp.

/tmp在某些系統上在啟動時被清除(有時它甚至在 RAM 中,例如預設情況下在 Solaris 和某些 Linux 安裝上),因此它不能用於必須在電源故障或重新啟動後倖存的文件。/var/tmp可用於必須在重新啟動後仍然存在的文件,但係統管理員可能會不時對其進行清理。如果您的應用程序需要永久保存文件,請將它們寫入使用者主目錄中的某個位置(在~/.programmingnoobsappor中~/.cache/programmingnoobsapp)或在/var/lib/programmingnoobsappor下/var/cache/programmingnoobsapp

請注意,/tmp它在所有使用者之間共享,因此在此處創建文件時需要採取預防措施。您需要選擇一個尚不存在的文件名,並且您需要注意不要出現競爭條件,即另一個程序在您之前創建具有不同權限的文件,這可能是一個安全漏洞(如果另一個程序以不同的使用者身份執行,然後它可以訪問和修改您的程序的數據)。使用該命令在或mktemp中創建文件。預設情況下,在 中創建文件,或者如果未設置,這通常是正確的位置。如果您需要使用多個臨時文件,或者即使您需要一個臨時文件,我建議您為所有臨時文件創建一個目錄/tmp``/var/tmp``mktemp``$TMPDIR``/tmp``TMPDIR``mktemp -d並在腳本末尾刪除它。

#!/bin/sh
tmp_root=
trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP
tmp_root=$(mktemp -d)
tmpfile1=$tmp_root/file1
tmpfile2=$tmp_root/file2
…

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