在Bourne shell脚本

时间:2017-02-09 15:28:04

标签: sh

我有一个嵌入式系统,其中/etc/passwd文件中的用户管理通常使用Bourne shell脚本自动完成。但是,有时可能会/etc/passwd用户或root实用程序使用文本编辑器编辑passwd文件。有没有办法对Bourne shell脚本进行编程,使其在执行期间锁定/etc/passwd文件,以便其他程序当时无法编辑该文件?此外,此脚本应检测其他进程是否未打开/etc/passwd文件。我可以使用Wooledge wiki中的以下解决方案:

# locking example -- CORRECT
 # Bourne
 lockdir=/tmp/myscript.lock
 if mkdir "$lockdir"
 then    # directory did not exist, but was created successfully
     echo >&2 "successfully acquired lock: $lockdir"
     # continue script
 else
     echo >&2 "cannot acquire lock, giving up on $lockdir"
     exit 0
 fi

但是,这只能确保此脚本的两个实例不会同时运行。我还有一个可用的BusyBox lock,其行为与flock类似,但据我所知,我无法保护编辑/etc/passwd文件的其他进程。

2 个答案:

答案 0 :(得分:0)

vipw命令可以为您提供此功能,您可以使用EDITOR环境名称自定义编辑器。

有关详细信息,请参阅man vipw

答案 1 :(得分:0)

  

有没有办法对Bourne shell脚本进行编程,使其在执行期间锁定/ etc / passwd文件,以便其他程序当时无法编辑该文件?

这称为强制文件锁定,答案可能是否定的。在安装文件系统时需要mand选项的Linux中。我猜你在你的环境中是不可能的,但如果它是一个选项(可以这么说),看看你最喜欢的资源,如何从那里开始。

它不是您需要的shell脚本功能。对于一个阻止另一个进程打开文件的进程需要内核支持。 Unix程序传统上使用咨询锁,或以其他方式合作。 vipw (8)就是这样做的一个例子。