是否可以在 Linux 中锁定一个文件,以便在另一个进程打开该文件进行写入时无法读取该文件?

Mic*_*nez 4 linux filesystems

我们都知道 Linux/Unix 会自动阻止对当前打开的另一个进程写入的文件的尝试。但是,如果另一个进程打开文件进行写入,是否可以阻止/锁定对文件的读取访问?我有两个不同的脚本,两者都在随机时间启动并在一天中运行不同时间:一个脚本覆盖特定文件;另一个脚本覆盖特定文件。另一个从该文件中读取。如果第一个打开了文件,我希望第二个阻塞(等待)或失败。

use*_*517 6

flock(1)实用程序可以做你想做的事

  • 当您想要覆盖文件时,取出文件上的写锁

    flock -x /path/to/lockfile 某个命令文件

  • 让另一个命令检查锁。

    flock -n /path/to/lockfile 另一个命令文件

如果文件被锁定,那么您会得到退出代码 1,否则它就是您的,您可以用它做您想做的事情

文档:

-x, -e, --exclusive 获取独占锁,有时称为写锁。这是默认设置。

-n, --nb, --nonblock 如果无法立即获取锁,则失败(退出代码为 1)而不是等待。

  • 然而,此解决方案并不能阻止 [TOCTOU](https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use) 竞争条件 (3认同)