我有一个嵌入式系统,其中/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
文件的其他进程。
答案 0 :(得分:0)
vipw
命令可以为您提供此功能,您可以使用EDITOR
环境名称自定义编辑器。
有关详细信息,请参阅man vipw
。
答案 1 :(得分:0)
有没有办法对Bourne shell脚本进行编程,使其在执行期间锁定/ etc / passwd文件,以便其他程序当时无法编辑该文件?
这称为强制文件锁定,答案可能是否定的。在安装文件系统时需要mand
选项的Linux中。我猜你在你的环境中是不可能的,但如果它是一个选项(可以这么说),看看你最喜欢的资源,如何从那里开始。
它不是您需要的shell脚本功能。对于一个阻止另一个进程打开文件的进程需要内核支持。 Unix程序传统上使用咨询锁,或以其他方式合作。 vipw (8)就是这样做的一个例子。