gpt4 book ai didi

linux - 在 shell 脚本中编辑 sudo 文件

转载 作者:太空狗 更新时间:2023-10-29 12:19:40 24 4
gpt4 key购买 nike

我想通过删除 # 或在其中的特定行添加 # 来编辑 Solaris 中的 sudoers 文件,那么我该如何为此编写脚本?下面给出了我的 sudoer 示例文件:

# The following line allows su without options/arguments and sux to user root
Cmnd_Alias SU_ROOT = /usr/bin/su "",\
/usr/local/bin/sux - root

# Defaults specification
Defaults:%saptb !authenticate

# User privilege specification
%saptb ALL=(root)SU_SAP
#Uncomment this line when SAP requires root access
%saptb ALL=(root)SU_ROOT
##### END SAP-TB specific ######
#
#
#Tivoli ITM Tools Team Sudo Right
#
%cgtools ALL=(root) NOPASSWD: /opt/IBM/ITM/bin/*

在上面的 sudoers 文件中,我想在 %saptb ALL=(root)SU_ROOT 的唯一行之前添加 #

最佳答案

使用 sed 进行替换:

# Comment out the line %saptb ALL=(root)SU_ROOT
sudo sed -Ei 's/^(%saptb.*SU_ROOT.*)/#\1/' /etc/sudoers

解释:

-E 使用扩展的regex

-i 就地编辑文件。

s/         # Substitution
^ # Match the start of the line
( # Capture the following
%saptb # Followed by %saptb
.* # Followed by anything
SU_ROOT # Followed by SU_ROOT
.* # Followed by anything
) # Close capture
/ # Replace with
# # A hash
\1 # Followed by the captured line

取消注释行的原理是一样的:

  1. 匹配行首
  2. 后跟一个#
  3. 捕获行的其余部分
  4. 用捕获的部分行替换整行(丢弃 #)。

所以:

# Uncomment the line %saptb ALL=(root)SU_ROOT
sudo sed -Ei 's/^#(%saptb.*SU_ROOT.*)/\1/' /etc/sudoers

您可以使用以下脚本通过运行 sudo ./toggle.sh 来注释/取消注释

#!/bin/bash

# Is the line already commented out
grep -q '#%saptb ALL=(root)SU_ROOT' /etc/sudoers

if [ $? -eq 0 ]; then
# Uncomment the line %saptb ALL=(root)SU_ROOT
sed -Ei 's/^#(%saptb.*SU_ROOT.*)/\1/' /etc/sudoers
else
# Comment out the line %saptb ALL=(root)SU_ROOT
sed -Ei 's/^(%saptb.*SU_ROOT.*)/#\1/' /etc/sudoers
fi

关于linux - 在 shell 脚本中编辑 sudo 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13626798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com