「通常の」権限を持つ一時ファイルを作成するにはどうすればよいですか?

「通常の」権限を持つ一時ファイルを作成するにはどうすればよいですか?

ビルド スクリプトでは、一意に生成された名前を持つ一時ファイルを作成し、そのファイルにいくつかのデータを書き込んでから、そのファイルの名前を最終的な名前に変更します (この手順の理由は、名前の変更を (ほとんど) アトミックに行うためです)。

しかし、 を使用するとmktemp、新しいファイルには非常に制限された権限が設定されます。

ファイルは u+rw で作成され、ディレクトリは u+rwx で作成されます (umask 制限なし)。

... これらの権限は、ファイルの名前が変更されても保持されます。ただし、結果のファイルに「通常の」権限を持たせたいと考えています。つまり、touchシェル リダイレクトによって作成されたファイルと同じ権限を持たせる必要があります。

これを実現するための推奨される方法は何ですか? ; の (一般的な) 代替手段はありますか?または、後でmktempファイルのアクセス許可を通常のアクセス許可に変更する簡単で信頼性の高い方法はありますか?umask

答え1

chmod =rw "$file"一時ファイルを作成した後に使用できます。GNU マニュアルページ言う:

文字の組み合わせによってugoa、ファイルへのどのユーザーのアクセスが変更されるかを制御します。[...] これらのいずれも指定されていない場合は、(a) が指定された場合と同じ効果が得られますが、umask に設定されているビットは影響を受けません。

したがって、 は、に権限引数として=rw渡すのと同様に、umask によって減らされた読み取り/書き込み権限を付与します。これは、たとえば やが行うことです。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 に頼るのではなく、手動の方法を使用します。特に、ビルド スクリプトがさまざまなシステムで使用される場合はそうです。

関連情報