如何建立具有「正常」權限的臨時檔案?

如何建立具有「正常」權限的臨時檔案?

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

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

檔案建立為 u+rw,目錄建立為 u+rwx,減去 umask 限制。

...並且當檔案重命名時,這些權限將被保留。但是,我希望生成的文件具有“正常”權限;也就是說,它應該與touchshell 重定向建立的檔案具有相同的權限。

實現這目標的推薦方法是什麼?是否有(常見的)替代方案mktemp;或者是否有一種簡單可靠的方法可以將檔案權限變更為正常umask權限?

答案1

chmod =rw "$file"建立臨時檔案後即可使用。這GNU 手冊頁說:

字母組合ugoa控制將更改哪些使用者對檔案的存取權限: [...] 如果未給出其中任何一個,則效果就像給出了 (a),但未給出 umask 中設定的位元做作的。

因此,=rw給出透過 umask 減少的讀寫權限,類似於0666作為權限參數傳遞給open(),這就是 egtouch filename或 的echo > filename作用。

那是一個POSIX 功能,所以其他實作也應該支援它。

答案2

使用此連結來取得您想要的權限http://permissions-calculator.org/

手動的

建立一個腳本文件,該文件建立一個新文件,然後更改其權限。

#!/bin/bash

Filename=$1
Perms=$2

#Create a temp file
touch $Filename

#Change the file's permissions (Use your own desired permissions)
chmod $Perms $Filename

使腳本可執行後chmod +x myscript.sh,像這樣執行腳本文件./myscript.sh tempfile 600

使用 Umask(不建議)

umask 600您可以使用例如臨時更改預設檔案權限。

若要永久變更預設檔案權限,請編輯使用者根目錄中的 .bashrc 檔案。

nano ~/.bashrc

添加umask 600到文件底部。當然,請確保符合您所需的權限。確保您也編輯了正確的使用者。

如果這是用於建立腳本,我將使用手動方法而不是依賴 umask。特別是如果您的建置腳本將在不同的系統上使用。

相關內容