ビルドスクリプトで一意に生成された名前で一時ファイルを生成し、ここにいくつかのデータを書き込んでからファイル名を最終名に変更しようとしています。 )原子)。
ただし、mktemp
以下を使用すると、新しいファイルに非常に厳格な権限が付与されます。
ファイルはu + rwとして生成され、ディレクトリはumask制限を引いたu + rwxとして生成されます。
...ファイル名が変更されても、これらの権限は保持されます。しかし、私は結果ファイルが「一般」権限を持つことを望みます。つまり、touch
シェルリダイレクトで作成されたファイルと同じ権限を持つ必要があります。
これを達成するために推奨される方法は何ですか? (共通)代替案はありますか?または、ファイル権限を一般権限mktemp
に変更する簡単で信頼性の高い方法はありますか?umask
答え1
chmod =rw "$file"
一時ファイルが作成されると使用できます。これGNUのマニュアルページ説明する:
モノグラムは、
ugoa
ファイルへのユーザーのアクセス権の変更を制御します。[...]これらのいずれかが提供されていない場合、効果は(a)が提供されていますが、umaskに設定されたビットは提供されません。人工の。
したがって、umaskを介して縮小された読み取りおよび書き込み権限を付与することは、権限引数を渡すのと=rw
似ています。これは、たとえば、または実行する操作です。0666
open()
touch 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に頼るのではなく手動のアプローチを使用します。特に、ビルドスクリプトが他のシステムで使用されている場合。