システムファイルを開かずにその値を変更するにはどうすればいいですか?

システムファイルを開かずにその値を変更するにはどうすればいいですか?

/etc/ssh/sshd_configターミナルで 1 つのコマンドを使用して「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 は最初の 1 つで失敗し、AWK は 2 番目の 1 つで失敗します)。

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 (「no」) を「yes」に置き換え、すべてを tmp ファイルに出力し、を使用して元の行を tmp ファイルに置き換えますmv

その設定ファイルの所有権はルートに属しているので、sudoアクセス権が必要になります(sudo前に追加してくださいmv

関連情報