SEDを使用して構成ファイル行のコメントを外し、Linux構成ファイルのテキストを置き換えます。

SEDを使用して構成ファイル行のコメントを外し、Linux構成ファイルのテキストを置き換えます。

設定ファイルの特定のパラメータを自動化しようとしています/etc/ssh/sshd_config。特に

#PermitRootLogin yes

そして

#LoginGraceTime 2m

読むべき内容:

PermitRootLogin no
LoginGraceTime 60

私はスクリプトの専門家ではありませんのでご了承ください。

スクロールを開始しようとしましたが、sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config奇妙な結果が出ました。ただ私が処理したいファイルが表示されます...

誰かがsedを自分で使うように言うことができますか?

答え1

出力を一時ファイルにリダイレクトし、一時ファイルの名前を元のファイルに変更します。

sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config

または、GNUがある場合は、内部編集オプションをsed使用できます。-i

sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config

答え2

@Bodoの答えと似ていますが、この解決策は元の行を変更せずに修正されたバージョンを元の行の下に追加します。これは、元の行をコメントアウトしたい場合にのみ意味があります。

 sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config

\(...\)ここでは、代替アイテムで置き換えられるキャプチャグループを使用します\1(同じ文字列を再入力するには怠惰すぎるため)。

オプションのsedは-n明示的に印刷された行のみを出力するため、最初のコマンドは変更されてpいない行を印刷し、次の2つのコマンドは変更された行を印刷します。

関連情報