复制某些文件时文本文件繁忙

复制某些文件时文本文件繁忙

当我想复制一些文件时出现此错误

我的命令:

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中正在使用的文件。

更准确地说,删除此类文件将导致从目录中删除文件名,而只要正在运行的进程使用它们,文件数据就会保留在文件系统中。

相关内容