我是新手来编写脚本。我已经阅读了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
答案 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
的脚本是修改密码和影子文件的唯一脚本,或者至少修改这些文件的每个脚本都使用相同的机制。
有必要这样做,因为两个用户很可能独立地尝试在没有协调的情况下运行脚本,因此他们可能会在同一时间这样做。