시스템 파일을 열지 않고 값을 변경하는 방법은 무엇입니까?

시스템 파일을 열지 않고 값을 변경하는 방법은 무엇입니까?

/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옵션 값을 "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를 사용하면 적절한 줄을 찾고 "no"인 필드 2를 "yes"로 바꾸고 모든 것을 tmp 파일로 출력하고 를 사용하여 원본을 tmp 파일로 바꿉니다 mv.

해당 구성 파일의 소유권은 root 에 속하므로 액세스 권한이 필요합니다 sudo( sudo전에 추가 mv).

관련 정보