cron 작업 실행 문제를 해결하기 위한 명령을 stackoverflow에서 보았습니다. https://stackoverflow.com/questions/21926465/issues-running-cron-in-docker-on- Different-hosts 나는 유닉스 명령을 처음 접했기 때문에 이 명령이 정확히 무엇을 하는지 잘 모르겠습니다. 각 부분의 기능을 알려줄 수 있는 전문가가 있나요?
sed --regexp-extended --in-place 's/^session\s+required\s+pam_loginuid.so$/session optional pam_loginuid.so/' /etc/pam.d/crond
답변1
sed
다음과 같이 사용할 수 있는 명령줄 텍스트 편집기입니다 sed -flags command file
. 정규식을 사용하여 찾기 및 바꾸기에 가장 일반적으로 사용됩니다. 나는 그것이 많은 일을 할 수 있다는 것을 알았다https://www.grymoire.com/Unix/Sed.html좋은 초보자 가이드를 만듭니다. ( man
페이지보다 사용자 친화적입니다.)
정규식(regex)은 특정 항목이 아닌 텍스트 패턴을 찾을 수 있는 일종의 복잡한 와일드카드 시스템과 같습니다.
--regexp-extended
더 많은 기능을 갖춘 확장 정규식을 사용하도록 지시합니다.
--in-place
출력을 쉘이나 표준 출력으로 인쇄하는 대신 파일을 변경하도록 지시합니다.
's/foo/bar'
sed에 대한 대체 명령입니다(s는 Alternative를 나타냄). 각 줄에서 첫 번째 'foo'를 찾아 'bar'로 바꿉니다.
^session
: ^
정규식에서 줄의 시작을 나타냅니다.
\s+
: \s
"모든 공백"을 의미합니다. 즉, 정규 표현식의 공백이나 탭 또는 유사한 문자는 +
하나 이상을 의미하므로 하나 이상의 공백/탭/등과 일치합니다. +
정규식을 확장해야 함
...nuid.so$
: $
정규식의 줄 끝을 나타냅니다.
따라서 이것은 유사하지만 더 많은 공백/탭이 있는 파일의 모든 줄을 찾아서 하나의 공백 session optional pam_loginuid.so
으로 바꾸고 파일에서 , 로 바꾸는 것입니다 .session optional pam_loginuid.so
required
optional
/etc/pam.d/crond
이는 &&
"이 명령이 0을 반환하면 다음 명령을 실행하십시오"를 의미하며 bash의 대부분은 충돌하지 않으면 0을 반환합니다. sed는 대체할 항목을 찾지 못하더라도 0을 반환하므로 거의 항상 이런 일이 발생합니다.
마지막 명령은 \
줄바꿈을 무시하게 하므로 뭔가 작동하지 않는 한 다음 줄의 명령도 실행됩니다.
따라서 기본적으로 추가 공백을 변경 required
하고 제거하지만 이것이 일반적으로 수행되는 작업을 optional
파악하는 데 도움이 되기를 바랍니다.sed 's/thing/otherThing/'