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


11

[注:この同様のQは、同じbashエラーメッセージに関係しています。この他のQの重複としてマークされていますます。しかし、このエラーの非常に異なる原因を見つけたので、以下の自分のQに回答します。]

この以前は機能していたbashスクリプト行

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

ある日、このエラーメッセージが生成され始めました。

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


私の場合、存在しないという組み合わせでIMAima_policy=appraise_tcbカーネルパラメータ)が有効になりました。しかし、これは本当に一般的なケースではありません:)。/tmptmpfs
pevik

回答:


10

umask 777here文字列の前に追加しました。umaskを削除した後、エラーはなくなりました。教訓:ヒア文字列(<<<)用に作成された一時ファイルがあり、これはヒアドキュメント(<<)に関連しており、これらが機能するには適切なumaskセットが必要です。



また、ksh93やtcshではなく、zshとmkshにも影響します。ダッシュ、rc、es、yashのいずれでもありませんが、一時ファイルの代わりにパイプを使用しているためです。
ステファンChazelas

ksh93とtcshの場合は、読み取り+書き込みモードでファイルを1度だけ開き、データを書き込んでから最初にシークするため、機能します。
ステファンChazelas

6

私の場合、/tmpディレクトリのデフォルトのアクセス許可を変更しました(誤って0777に変更したと思います)。

解決策は/tmp、それをデフォルトの許可に戻すことでした。これは、8進数の1777(1 =スティッキービット、7 = R + W + X)です。

つまり、一言で言えばsudo chmod -R 1777 /tmp問題を解決する必要があります。


それが実際に問題を引き起こす場所がわかります。はい、スティッキビットは/ tmpにとって重要です。
楕円図

2
-Rフラグはおそらく必要ありません。以下の全員のファイルを変更して、全員/tmpが読み取り/書き込み実行可能にする理由はありません。これらのファイルの一部は、ユーザーのセキュリティに敏感です。
keithpjolley

1

この問題に関する私の個人的な経験は、umask@ eliptical-viewと同様に、バイナリ表記でした。私はそれを書いているはずです:

umask 0644 

私が作成したファイルへの読み取りおよび書き込みアクセス権を私に与えます、何が問題なのですか

私が変更された後umaskであることを

umask 0022

エラーは消えた。

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

したがって、umask以下ののマスク0で、ファイルの所有者に書き込みを行うと、このユーザーは自分が作成したファイルに完全にアクセスできます。この値2は、2番目のビットがマスクされていることを意味します。この場合、デフォルトでは、他のユーザーはファイル所有者が作成したファイルへの書き込みを許可されません。


1
編集と修正をありがとう、@ PauloTomé。確かに、で8進数表記を使用するのは通常(そして明快)umaskです。Posixファイルのアクセス権には、所有者、グループの1つ、およびその他すべての人が正確に3ビット含まれているためです。
ヒルトンフェルナンデス

どういたしまして。;)
パウロトメ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.