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명령은 수정되지 않은 행을 인쇄하고 다음 두 명령은 수정된 행을 인쇄합니다.

관련 정보