如何在不打开系统文件的情况下更改其值?

如何在不打开系统文件的情况下更改其值?

/etc/ssh/sshd_config有没有办法通过终端中的一个命令来改变“PermitRootLogin”的值?

我想在不打开此文件的情况下更改其值,并将“PermitRootLogin”的值从是更改为否。

答案1

完全可以使用 来做到这一点sed,匹配行并改变值:

sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config
  • ^PermitRootLogin匹配以PermitRootLogin
  • s/yes/no将选项的值从“是”更改为“否”

答案2

我想将“PermitRootLogin”的值从是更改为否。

在这种情况下,我会使用 Perl(即,可以处理字段并可以就地编辑的东西; Sed 在第一个方面失败,而 AWK 在第二个方面失败):

sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
% grep ^PermitRootLogin /etc/ssh/sshd_config                                                     
PermitRootLogin without-password
% sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
[sudo] password for user: 
% grep ^PermitRootLogin /etc/ssh/sshd_config                                              
PermitRootLogin no

答案3

您可以使用 sed 更改它们,使用 -i 选项

sed -i -e 's/old/new/g' file

详细信息请参阅 man sed

http://www.grymoire.com/Unix/Sed.html

答案4

open()任何以任何方式处理文件的程序都必须发出read()系统调用,这可以通过 进行验证strace。如果没有这些系统调用,打开文件是不可能的

您的问题似乎是询问是否可以不使用文本编辑器来编辑文件。这是可能的,正如其他人所表明的那样。我在这里的小小贡献如下:

awk '/^PermitRootLogin/{$2="yes"}1' /etc/ssh/sshd_config > /tmp/sshd_config && mv /tmp/sshd_config /etc/ssh/sshd_config

基本上使用 AWK,我们找到适当的行,将字段 2(即“否”替换为“是”),将所有内容输出到 tmp 文件并使用将原始内容替换为 tmp 文件mv

请记住,该配置文件的所有权属于 root,因此您需要sudo访问权限(sudo在之前添加mv

相关内容