我想锁定一个文件,运行一些测试然后解锁该文件。我怎样才能做到这一点。我可以使用命令行、perl 或 shell 脚本。
我想锁定文件的原因是,有时在连接到ftp
我们的 Apache 服务器时,我们在删除文件时会收到错误消息:“无法打开或删除包含正在运行的程序的文件”。我想使用ftp
移动命令而不是删除命令进行测试,看看是否捕获此错误。我想测试锁定文件是否会导致此错误。
答案1
快速:文件锁定通常仅由更高级别的语言支持(据我所知)。
对于 Perl 示例,您可以从这里开始https://stackoverflow.com/questions/34920/how-do-i-lock-a-file-in-perl或任何 Perl 经典之作https://docstore.mik.ua/orelly/perl/cookbook/ch07_12.htm(注意 SSL 证书问题)或类似的问题。
对于 shell 脚本,您必须考虑 JdeBP 的评论:为什么要锁定文件。根据您的答案,您可以考虑一些策略,例如暂时更改文件的写入权限、重命名文件并在将文件名改回之前处理重命名的文件、处理副本并在之后重写原始文件。
答案2
您可以使用集群命令:羊群人档案
我就是从这里了解到的。https://stackoverflow.com/questions/24388009/linux-flock-how-to-just-lock-a-file
这是我的脚本,用于锁定名为 10 秒的文件2.txt
(对链接中的脚本进行了少量修改):
exec 3>2.txt # open a file handle; this part will always succeed
flock -x 3 # lock the file handle; this part will block
sleep 10
exec 3>&-