如何在不開啟系統檔案的情況下更改它們的值?

如何在不開啟系統檔案的情況下更改它們的值?

/etc/ssh/sshd_config有沒有辦法透過終端機中的一個指令來改變「PermitRootLogin」的值?

我想更改此文件的值而不打開它,並將“PermitRootLogin”的值從 yes 更改為 no。

答案1

完全可以使用sed、匹配行並更改值來做到這一點:

sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config
  • ^PermitRootLogin匹配以以下開頭的行PermitRootLogin
  • s/yes/no將選項的值從“是”變更為“否”

答案2

我想將“PermitRootLogin”的值從 yes 更改為 no。

在這種情況下,我將使用 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 文件並使用mv.

請記住,該設定檔的所有權屬於 root ,因此您需要sudo存取權限(sudo在先前新增mv

相關內容