実行中のスクリプトによって書き込まれているファイルを開くことは安全ですか?


20

ファイルに書き込むシェルスクリプトを実行しています。
このスクリプトの完了には時間がかかる場合があります。スクリプト全体が完了するのを待つのではなく、部分的な出力を監視したいと思います。

スクリプトによって書き込まれているファイルを開く(ダブルクリックする)のは安全ですか?


4
それ。また、事前に知っていれば、スクリプト出力をteeでパイプすることもできます。
ヘネス

1
半関連はteeコマンドです:出力をいくつかのファイルとターミナルに同時に転送できます:man7.org/linux/man-pages/man1/tee.1.html
Cheiron

回答:


42

ファイルを読むことは安全ですが、あなたが言及したダブルクリックはおそらく変更を加えて保存するオプションを提供するエディターでファイルを開くでしょう。ミスクリックが発生するため、ファイルを変更することさえできないコマンドをお勧めします。

これらはターミナルで動作する例です。彼らはファイルを読むだけです:

cat file
less file
less +F file
tail -n 5 file
tail -f file

4
多くのよりスマートなファイルエディターは、ファイルが変更されたことを警告し、リロードするかどうかを尋ねますが、ダムエディターはそうしない場合があります。
user1306322

5
@ user1306322それでも安全であるとは限りません。ファイルが書き込み用に開かれているからといって、常に書き込みが行われているわけではありません。エディターの実行中に何も書かれていなければ、気付かないでしょう。また、エディターは新しいファイルを作成して先頭に名前を変更することがあるため(名前の変更はアトミックであるため)、書き込まれているファイルは削除されます。その時点以降に書き込まれる出力は、削除されたファイルに送られます。
カスペルド

13

あなたがそれに書いていない限り、それは大丈夫なはずです。

ただし、使用することをお勧めします

tail -f log_file

別の端末で。

このコマンドは、ファイルによって「フォロー」log_fileされ、スクリプトによって更新されるとすぐに、新しく追加されたコンテンツを書き込みます。


1

Kamil Maciorowskiの回答にコメントを追加するのに十分な担当者がいません。

いくつかのファイルについてtail -F fileは、以下がローテーションを通じて継続されるようにする必要があります。たとえば、syslogを監視します。


-1

スクリプト(または基盤となるフレームワークの実装)が作業中にファイルハンドルを繰り返し開いたり閉じたりする場合、次の理由で、その後の書き込みモードでの共有違反エラーが発生する可能性があります。
。1)スクリプトが書き込みを要求する場合があります排他モード(同時読み取りアクセスを除く)でアクセスするため、ファイルエディター/ビューアープログラムがファイルの読み取りのみを行っている場合でも、書き込みスクリプトでエラーが発生する可能性があります。
2)さらに、一部のファイルエディター/ビューアーは、ファイルを開いている間、ファイルをロックします。

結論として、ファイルの表示に使用しているプログラムに依存する可能性のある問題があります。また、ファイルに書き込むスクリプトの実装(または基礎となるフレームワーク)から生じる可能性のある問題があります。


1
私の経験から、これはLinuxでは非常にまれです(注:私はホームユーザーです)。私はこの問題がWindowsにも存在することを知っていますが、質問にはlinuxというタグが付いています。Linuxでこのように機能する「エディター/ビューアー」は何ですか?Linuxのどのフレーバーでロックが必須ですか?
カミルマシオロウスキ

@KamilMaciorowski残念ながら、特定の警告リストはありません。ロックはどこでも必須ではありません(Windowsでもそうではありません)。そのような問題は可能だと言っているだけで、ミッションクリティカルな状況でこのアプローチを不注意に使用しないでください。これが適用されるか、重要であるかを決定するのはOPの責任です。上記の質問の単なる存在は、そのような現象がOPのために既に起こったという可能性を高めます。何も起こらないと主張する回答は、あまり新しい情報も提供しません。
ローランドピフラカス

1
@RolandPihlakasこの回答の著者経験したこと間違いありませんが、Windowsでのみです。そのため、LinuxのようなPOSIX準拠のシステムとは無関係です。このシステムでは、tail -fまたはを介して出力を監視しますless +F
Chromatix

@Chromatix私は本当にについて困惑している建設あなたの推論の一部とは、Windowsのためのあなたの個人的な憎悪のほか、ここで提供されている提案や新しい情報の種類を見ることができない...あなたは私のコメントでポイントを答えなかったすべてで。なぜ私が経験したことを気にしますか?個人的にならないでください。
ローランドピフラカス

@RolandPihlakas答えは、ファイルを読み取り専用で開くことは実際にはそうではないが、Linuxでは危険であるという非常に確固たる印象を与えるためです。実際、「ファイルの終わり」が「レコードの終わり」または「行の終わり」を意味すると想定しない限り、追加されるファイルを読むことは常に安全です。失敗する唯一のケースは、書き込みアプリケーションが「必須ロック」を保持している場合で、これは非常に少数のアプリケーションが保持し(標準POSIXロックは「助言ロック」)、明確なエラーが発生します。不安定な行動よりも。
Chromatix
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.