web-dev-qa-db-ja.com

一部のファイルをコピーするとテキストファイルがビジーになる

一部のファイルをコピーするときにこのエラーが発生します

私のコマンド:

cp -rf  /sasech/xgedff/pur/liv/v15h30050-DLIV0177521/dmesa/bin/* /applis/rgedff/pur/bin

結果:

cp: /applis/rgedff/pur/bin/../bin/lib/libtiny.a: Text file busy
...

ファイルをコピーするにはどうすればよいですか?

3
Mercer

NFSやSSHトンネルなどの接続を介して、あるハードドライブから別のハードドライブにファイルをコピーしているときに、これが発生するのを見てきました。

何が起こるかは、コピーされるファイルが宛先ディレクトリの一部になることです。つまり、宛先ディレクトリをロックし、新しい情報で更新してからロック解除する必要があります。

次のファイル(あなたの場合はlibtiny.a)の到着が早すぎて、ディレクトリをロックしようとし、「ファイルビジー」エラーで失敗します。これにより、そのファイルやそれ以上のコピーができなくなります。

libtiny.aは静的ライブラリです。コピーに対してロックされる理由はありません。私の知る限り、コンパイラは作業中のファイルをロックしません。実際には、ターゲットディレクトリで何かをコンパイルしている場合にのみ発生します...

これは、すべてのディスクがnormalファイルシステムを使用していることを前提としています。 NTFSを使用した場合、そのシステムではそのようなことが起こらないため、開いている間はファイルを置き換えることができません。

Linuxでは、ファイルを開くと、そのファイルのデータが所定の位置にロックされますが、リンクの解除、名前の変更、ファイルの置き換えを防ぐことはできません。ファイルが削除された場合、そのファイルへのすべてのハンドルが閉じられると、ロックされたデータがハードドライブから解放されます。

つまり、プログラムが実行されるとハードドライブから自分自身を削除し、それでも何も起こらなかったかのように機能し続けるプログラムを作成できます。

1
Alexis Wilke

試す

rm -f /applis/rgedff/pur/bin/lib/libtiny.old
mv /applis/rgedff/pur/bin/lib/libtiny.a  applis/rgedff/pur/bin/lib/libtiny.old

コピーする前に、/applis/rgedff/pur/bin/lib/libtiny.aを使用するプログラムを妨害する可能性があることに注意してください。

libtiny.aは共有ライブラリであり、実行中のアクティブなプログラムがそれを使用しており、Linuxで使用されているファイルを削除することはできません。

より正確には、そのようなファイルを削除するとディレクトリからファイル名が削除されますが、実行中のプロセスがそれらを使用している限り、ファイルデータはファイルシステムに保持されます。

1
Archemar