私は現在プライベートプロジェクトを進めていますが、次のようにechoコマンドを使用して簡単にログを作成したいと思います。
私の質問は、echoコマンドが同時に同じファイルにアクセスする場合、スワップファイルが生成されますか?それとも、状況を順番に維持するためにechoコマンド内にキューがありますか?
例:
$ cat a.txt
aa
bb
cc
$ echo "apple" >> a.txt
aa
bb
cc
apple
答え1
echo
コマンドではなくリダイレクト。>
コマンドの出力をファイルとして使用またはリダイレクトする場合>>
、シェルファイルを開き、プロセスに中間一時ファイルなしで直接書き込みます。したがって、2つのプロセスが同時に同じファイルに書き込もうとすると、あるプロセスが別のプロセスが書き込んだテキストを上書きするなど、予期しない結果が生じる可能性があります。
考えられる解決策の1つは、特定のflock
時間に1つのプロセスのみがファイルにアクセスできるようにすることです。そして他のプロセスがそこに書き込もうとすると、コマンドはflock
ファイルのロックが解除されるのを待ちます。たとえば、
flock a.txt echo "apple" >> a.txt