「一般」権限で一時ファイルを作成する方法は?

「一般」権限で一時ファイルを作成する方法は?

ビルドスクリプトで一意に生成された名前で一時ファイルを生成し、ここにいくつかのデータを書き込んでからファイル名を最終名に変更しようとしています。 )原子)。

ただし、mktemp以下を使用すると、新しいファイルに非常に厳格な権限が付与されます。

ファイルはu + rwとして生成され、ディレクトリはumask制限を引いたu + rwxとして生成されます。

...ファイル名が変更されても、これらの権限は保持されます。しかし、私は結果ファイルが「一般」権限を持つことを望みます。つまり、touchシェルリダイレクトで作成されたファイルと同じ権限を持つ必要があります。

これを達成するために推奨される方法は何ですか? (共通)代替案はありますか?または、ファイル権限を一般権限mktempに変更する簡単で信頼性の高い方法はありますか?umask

答え1

chmod =rw "$file"一時ファイルが作成されると使用できます。これGNUのマニュアルページ説明する:

モノグラムは、ugoaファイルへのユーザーのアクセス権の変更を制御します。[...]これらのいずれかが提供されていない場合、効果は(a)が提供されていますが、umaskに設定されたビットは提供されません。人工の。

したがって、umaskを介して縮小された読み取りおよび書き込み権限を付与することは、権限引数を渡すのと=rw似ています。これは、たとえば、または実行する操作です。0666open()touch filenameecho > 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に頼るのではなく手動のアプローチを使用します。特に、ビルドスクリプトが他のシステムで使用されている場合。

関連情報