空のディレクトリから始めます。
$ touch aFile
$ ls
aFile
その後、2つのパラメータがあり、ls
そのうちの1つはこのディレクトリにありません。output
私は>>
同時書き込みを避けるためにこれを使用しています。
$ ls aFile not_exist >>output 2>>output
$ cat output
ls: cannot access 'not_exist': No such file or directory
aFile
これはうまくいくようです。このアプローチに危険がありますか?
ベストアンサー1
いいえ、標準ほど安全ではありません>>bar 2>&1
。
書くとき
foo >>bar 2>>bar
bar
開いたファイルを2回使用して、O_APPEND
それぞれ固有の状態(ポインタ、オープンモードなど)を持つ2つの完全に独立したファイルオブジェクト[1]を作成します。
2>&1
これは単にシステムコールを呼び出すのとは非常に異なり、dup(2)
同じファイルオブジェクトのstderrとstdoutを交換可能にエイリアスにします。
今質問があります。
O_APPEND
複数のプロセスが同時にファイルにデータを追加すると、NFSファイルシステムでファイルが破損する可能性があります。これは、NFSがファイルの追加をサポートしていないため、クライアントカーネルがそれをエミュレートする必要があるため、競合状態がないと実行できません。
通常、2つの異なる場所でファイルが同時に記録される確率は非常に低いと仮定できますbar
。foo >>bar 2>&1
しかし、あなたは>>bar 2>>bar
何の理由もなく何十倍も増えました。
[1] POSIX 用語の「ファイル記述を開く」。