使用从脚本中调用的vim编辑visudo。

我创建了一个自动安装脚本,在chroot下执行时,我想取消轮组行的注释。我可以使用 sed -i "s/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/g" /etc/sudoers 但我读到这不是最好的做法。那么,如何用vim做呢?

命令是 :82 s/# // 我试着用管道、重定向stdin或用vim+”命令文件”,但前者不行,后者可以,但显示是一个只读文件……。

解决方案:

有一种可能是把 sed 命令的输出(不加下面的 -i flag)到这个脚本中,如果安全的话,可以覆盖sudoers文件,而不必尝试非交互式地运行编辑器。

#!/bin/sh

#
# Replaces /etc/sudoers with a new version supplied
# on standard input, but first performs safety checks
# including with "visudo -c"
#

sudoers=/etc/sudoers
tmp_sudoers=$sudoers.tmp  # same tmp file as used by visudo

if [ -e $tmp_sudoers ]
then
    echo "someone is editing sudoers"
    exit 1
fi

# make new version from data on stdin, preserving permissions
# by creating a copy and then overwriting it
cp $sudoers $tmp_sudoers
cat > $tmp_sudoers

# install the new version if it passes checks
succeeded=0
if [ ! -s $tmp_sudoers ]
then
    echo "replacement file is empty"
elif diff -q $sudoers $tmp_sudoers > /dev/null
then
    echo "there were no changes"
elif ! visudo -q -c -f $tmp_sudoers
then
    echo "replacement file is invalid"
else    
    mv $tmp_sudoers $sudoers
    succeeded=1
fi

if [ $succeeded -eq 0 ]
then
    rm $tmp_sudoers
    exit 1
fi

给TA打赏
共{{data.count}}人
人已打赏
未分类

用SearchBar过滤SQLite数据库

2022-11-10 4:57:20

未分类

无法在.net core 3上从WCF生成SOAP客户端。

2022-11-10 4:57:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索