Shell

如何創建具有“正常”權限的臨時文件?

  • May 25, 2021

在建構腳本中,我想創建一個具有唯一生成名稱的臨時文件,然後向其中寫入一些數據,然後將該文件重命名為其最終名稱(此過程的原因是我希望重命名發生(主要是)原子)。

但如果我使用mktemp,新文件將具有非常嚴格的權限:

文件創建 u+rw,目錄 u+rwx,減去 umask 限制。

…並且這些權限將在文件重命名時保留。但是,我希望生成的文件具有“正常”權限;也就是說,它應該與touch由 shell 重定向或由 shell 重定向創建的文件具有相同的權限。

實現這一目標的推薦方法是什麼?是否有(常見的)替代mktemp; 還是有一種簡單可靠的方法可以在umask之後將文件權限更改為正常權限?

您可以chmod =rw "$file"在創建臨時文件後使用。GNU 手冊頁說:

字母組合ugoa控制將更改哪些使用者對文件的訪問權限:

$$ … $$如果這些都沒有給出,效果就像給出 (a) 一樣,但在 umask 中設置的位不受影響。

因此,=rw提供由 umask 減少的讀寫權限,類似於將0666權限參數傳遞給open(),這就是 egtouch filenameecho > filename會做的事情。

這是一個POSIX 特性,所以其他實現也應該支持它。

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