2014-09-12 4 views
0

Я очень новичок в создании сценариев bash. Я прочитал man-страницу для стаи, но все-таки я не совсем понимаю, как это работает. Я был бы признателен, если бы кто-нибудь мог объяснить это мне.Каково использование стаи здесь?

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 

ответ

2

echo string >> file не является атомным. Таким образом, эти два процесса были запущены одновременно

# Process 1 
echo a b c >> some_file 

# Process 2 
echo d e f >> some_file 

это вполне возможно, что содержимое some_file может в конечном итоге с линиями перемешаны. Таким образом, возможен один из возможных результатов:

Очевидно, что это нежелательно в случае структурированных файлов. Таким образом, flock используется для предотвращения одновременного изменения двух процессов.

Он работает только в том случае, если как обрабатывает flock. Таким образом, предполагается, что скрипт, использующий flock, является единственным скриптом, который изменяет файлы паролей и теней, или, по крайней мере, каждый скрипт, который модифицирует эти файлы, использует тот же механизм.

Это необходимо сделать, потому что вполне возможно, что два пользователя самостоятельно попытаются запустить сценарий без согласования, и поэтому они могут сделать это точно в одно и то же время.

Смежные вопросы