给定一个包含以下配置的 sshd_config 文件:
Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem fooftp /usr/lib/openssh/fooftp-server
Subsystem barftp /usr/lib/openssh/barftp-server
如何augtool
a) 如果 snmp 不存在,则添加该条目;如何 b) 如果 snmp 已存在,则更新现有条目augtool
。
我发现可以像这样访问现有条目:
/files/etc/ssh/sshd_config/Subsystem[1]/sftp
/files/etc/ssh/sshd_config/Subsystem[2]/fooftp
/files/etc/ssh/sshd_config/Subsystem[3]/barftp
并且可以像这样添加新条目:
/files/etc/ssh/sshd_config/Subsystem[4]/bazftp
但是上面的 4 是一个神奇的数字,因此没用。
是否augtool
有可以提供帮助的语法?
可能的现有配置示例如下:
augtool> print /files/etc/ssh/sshd_config/Subsystem
/files/etc/ssh/sshd_config/Subsystem[1]
/files/etc/ssh/sshd_config/Subsystem[1]/sftp = "/usr/libexec/openssh/sftp-server"
/files/etc/ssh/sshd_config/Subsystem[2]
/files/etc/ssh/sshd_config/Subsystem[2]/snmp = "/usr/bin/sshtosnmp /var/lib/net-snmp/sshdomainsocket"
https://github.com/hercules-team/augeas/pull/706在 augeas v1.13.0 中添加的内容表明 + 运算符可以提供帮助,但是不清楚如何匹配上面的选项 2。
注意:使用其他工具并不能回答这个问题。
答案1
如果要幂等地创建一个条目(如果该条目不存在)/更新一个条目(如果该条目已存在),请执行以下操作:
augtool> set /files/etc/ssh/sshd_config/Subsystem[foo]/foo 'something new'
augtool> print /files/etc/ssh/sshd_config/Subsystem
/files/etc/ssh/sshd_config/Subsystem[1]
/files/etc/ssh/sshd_config/Subsystem[1]/sftp = "/usr/libexec/openssh/sftp-server"
/files/etc/ssh/sshd_config/Subsystem[2]
/files/etc/ssh/sshd_config/Subsystem[2]/snmp = "/usr/bin/sshtosnmp /var/lib/net-snmp/sshdomainsocket"
/files/etc/ssh/sshd_config/Subsystem[3]
/files/etc/ssh/sshd_config/Subsystem[3]/foo = "something new"
augtool>
该语法Subsystem[foo]
将选择索引为“foo”的条目,如果它不存在则创建它,然后我们使用为这个新节点分配一个值Subsystem[foo]/foo 'something new'
。
如果节点“foo”已经存在,它将被更新。
要撤消已完成的操作,请像这样删除节点:
augtool> rm /files/etc/ssh/sshd_config/Subsystem/foo
来源:https://github.com/hercules-team/augeas/issues/68#issuecomment-1282915936