ここでドキュメントの一時ファイルを生成できませんでした:権限が拒否されました。

ここでドキュメントの一時ファイルを生成できませんでした:権限が拒否されました。

[ノート:このようなQ同じbashエラーメッセージに関連しています。重複としてマークされましたこれは別の質問です。しかし、私はこのエラーの非常に異なる原因を見つけたので、以下の私の質問に答えます。 ]

以前に動作していたbashスクリプト行

while ... do ... done <<< "$foo"

ある日、次のエラーメッセージが表示され始めました。

ここでドキュメントの一時ファイルを生成できませんでした:権限が拒否されました。

答え1

私の場合は、/tmpディレクトリのデフォルト権限を変更しました(誤って0777に変更したようです)。

回避策は、基本/tmp権限(8進数1777(1 =固定ビット、7 = R + W + X))に戻すことです。

したがって、簡単に言えば、sudo chmod -R 1777 /tmpこの問題を解決する必要があります。

答え2

追加しましたumask 777ここでは文字列の前に。 umaskを削除した後、エラーは消えました。だから私たちはここで教訓を得ました。<<<ここにあるドキュメント()に関連付けられた励起文字列()の一時ファイルが生成され<<、このファイルが機能するには適切なumaskを設定する必要があります。

答え3

umaskこの問題に対する私の個人的な経験は、@eliptical-viewのようにバイナリ表現を使用することです。私はそれが次のように書かれていると思いました。

umask 0644 

私が作成したファイルへの読み取りおよび書き込みアクセス権を付与する予定です。何が問題ですか?

に変更したumask

umask 0022

エラーがなくなりました。

実際、バイナリ表現は2の補数として理解されるべきです。

したがってumask、以下のマスクで人が0ファイルの所有者に書き込むと、そのユーザーは自分が作成したファイルへのフルアクセス権を持ちます。この値は、22番目のビットがマスクされることを意味します。つまり、この場合、デフォルトでは、ファイル所有者が作成したファイルに他のユーザーが書き込めないことを意味します。

関連情報