여기서 "sudo -v &&" 및 "sh /dev/stdin"의 목적은 무엇입니까?

여기서 "sudo -v &&" 및 "sh /dev/stdin"의 목적은 무엇입니까?

~에서https://calibre-ebook.com/download_linux

sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin

sudo -v &&위에서 말한 내용을 고려하면 man sudo여기서 목적은 무엇입니까?

 -v, --validate

사용자의 캐시된 자격 증명을 업데이트하고 필요한 경우 사용자를 인증합니다. sudoers 플러그인의 경우 기본적으로 sudo 시간 초과가 15분 더 연장되지만 명령은 실행되지 않습니다. 모든 보안 정책이 캐시된 자격 증명을 지원하는 것은 아닙니다.

목적은 무엇입니까 sh /dev/stdin? (우분투 18.04에서는 sh대시입니다)

감사해요.

답변1

여기에 목적이 무엇입니까 sudo -v &&?

나는 이것이 사용자의 놀라움을 최소화한다고 믿습니다. 두 가지 상황을 고려하십시오.

  1. 스도는아니요명령에 비밀번호를 요구하도록 구성합니다(NOPASSWD 태그).

비교적:

  1. 스도비밀번호를 요구하도록 명령 구성

첫 번째 경우에는 sudo에 대한 두 호출 모두 프롬프트 없이 성공합니다. 문제가 해결되었습니다!

두 번째 경우에는 다시 두 가지 가능성이 있습니다. 사용자가 최근에 sudo 인증을 받았거나 아직 인증되지 않았습니다.

  • 최근에 인증한 경우 sudo -v캐시된 자격 증명의 타임스탬프를 업데이트하면 됩니다.
  • 사용자가아니요최근 sudo로 인증되면 비밀번호를 묻는 메시지가 표시되고 인증 정보가 캐시됩니다.

sudo -v프로세스가 성공 하면 sudo sh /dev/stdin캐시된 자격 증명을 사용하여 중단 없이 두 번째 호출이 실행되어야 합니다.

sudo -v초기 명령 없이 대안을 고려하십시오 (여기서 sudo는 여전히 비밀번호를 묻는 메시지를 표시하도록 구성되어 있습니다). 이 경우 wget출력이 stdout 또는 stderr에 기록되었을 수 있으며 이로 인해 사용자는 출력을 보지 못하고 왜 아무 일도 일어나지 않았는지 궁금해할 수 있습니다.

목적은 무엇입니까 sh /dev/stdin?

이것은 표준 입력에 대한 링크인 특수 파일이기 sh때문에 하나의 인수로 호출됩니다 .command_file

이름 대시 - 명령 해석기(셸)

요약

 dash ...
      [command_file [argument ...]]

결과적으로 sh는 command_file을 읽고 그 안에 있는 명령을 예상하고 실행합니다. 이 특수 표준 입력 "파일"은 출력으로 파이프되므로 wget최종 결과는 URL 내용을 루트 수준 셸로 보내는 것입니다.

Calibre 프로젝트가 특별히 이 구문을 선택한 이유를 모르겠습니다. 대안은 다음과 같습니다:

  • ... | sudo sh
  • ... | sudo sh -

관련 정보