一部のファイルをコピーしようとすると、このエラーが発生します。
私のコマンド:
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
...
私のファイルをどのようにコピーしますか?
答え1
NFSやSSHトンネリングなどの接続を介してあるハードドライブから別のハードドライブにファイルをコピーすると、この問題が発生しました。
コピーされるファイルはターゲットディレクトリの一部になります。これは、ターゲットディレクトリをロックし、新しい情報で更新してロックを解除する必要があることを意味します。
次のファイル(あなたの場合libtiny.a
)が早すぎる場合は、ディレクトリをロックしようとし、「ファイル使用中」エラーが原因で失敗します。これにより、ファイルや他のすべてのアイテムがコピーされるのを防ぎます。
静的ライブラリなので、libtiny.a
コピーでロックする理由はありません。私が知っている限り、コンパイラは作業中のファイルをロックせず、実際にターゲットディレクトリから何かをコンパイルする場合にのみ発生します。
今、すべてのディスクノーマルファイルシステムNTFSを使用している場合、ファイルが開いている間はシステムがそれを許可しないため、ファイルを置き換えることはできません。
Linux でファイルを開くと、ファイル内のデータはロックされますが、リンクの解除、名前の変更、または置き換えは防止されません。ファイルが削除されると、ファイルへのすべてのハンドルが閉じられた後、ロックされたデータはハードドライブから解放されます。
これは、実行中にハードドライブから自分自身を削除しますが、何も起こらなかったかのように実行され続けるプログラムを作成できることを意味します。
答え2
努力する
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で使用されているファイルは削除できません。
より正確には、これらのファイルを削除するとファイル名がディレクトリから削除されますが、ファイルデータは実行中のプロセスでそのファイルを使用している限りファイルシステムに残ります。