Linux – Iis it possible to lock a file in Linux so it can’t be read if another process has it open for writing

filesystemslinux

We all know that Linux/Unix will automatically block attempts to write to a file that currently open for writing by another process. But is it possible to block/lock read access to a file if another process has it open for writing? I've got two different scripts, both start at random times and run various times during the day: one script overwrites a particular file; the other one reads from that file. I want the second one to block(wait) or fail if the first one has the file open.

Best Answer

The flock(1) utility may do what you want

  • Take out a write lock on the file when you want to overwrite it

    flock -x /path/to/lockfile somecommand file

  • Have the other command check for the lock.

    flock -n /path/to/lockfile anothercommand file

If the file is locked then you get an exit code of 1 otherwise it's yours and you can do what you want with it