这里的羊群用途是什么?

时间:2014-09-12 17:33:56

标签: bash flock

我是新手来编写脚本。我已经阅读了flock的手册页,但我仍然不清楚它是如何工作的。如果有人能为我解释,我会很感激。

if [ "$passfile" != "/etc/passwd" ]; then
  ( 
    flock -e 200
    echo "$theUsername:$thePasswd:$theUserIdd:$theGroupid:$theComment:$theHomeDirectory:$theBashDirectory">>$passFile
  ) 200>$passFile

  ( 
    flock -e 200
    echo "$theUsername:$thePasswd:0:0:0:0">>$shadowFile
  ) 200>$shadowFile

1 个答案:

答案 0 :(得分:2)

echo string >> file不是原子的。所以这两个过程同时运行

# Process 1
echo a b c >> some_file

# Process 2
echo d e f >> some_file

很有可能some_file的内容可能会以混合的线条结束。所以以下是一个可能的结果:

a b d e f
c

显然,在结构化文件的情况下,这是不可取的。因此flock用于防止两个进程同时修改文件。

仅当两个进程都使用flock时才有效。因此,假设使用flock的脚本是修改密码和影子文件的唯一脚本,或者至少修改这些文件的每个脚本都使用相同的机制。

有必要这样做,因为两个用户很可能独立地尝试在没有协调的情况下运行脚本,因此他们可能会在同一时间这样做。