첫 번째 명령에서 && 및 sudo를 사용할 때 두 번째 명령도 sudo로 실행됩니까?


64

명령을 실행하면

sudo some-command && some-other-command

두 번째 명령도 권한으로 실행 sudo됩니까?

답변:


110

TL; DR : 아니요


첫 번째 명령은

sudo some-command

두 번째 명령은

some-other-command

이 명령 sudo은 다음 명령을 사용하여 상승 된 권한으로 실행합니다. 은 &&, 그러나, 명령에 속하지 않는 첫 번째 명령을 실행하기 전에, 쉘에 의해 해석된다. bash에게 먼저 첫 번째 명령을 실행하고 성공하면 두 번째 명령을 실행하도록 지시합니다.

따라서에 sudo대해 알지 못합니다 && some-other command. 높은 프로세스가 종료되면 bash는 반환 값을 가져 와서 다른 명령을 실행합니다.이 명령은 다시 첫 번째 명령을 알지 못합니다.

이것은 쉽게 설명 될 수 있습니다 :

$ sudo whoami && whoami
root
username

원하는 것에 도달하기 위해 높은 bash를 시작하고 두 명령을 모두 실행할 수 있습니다.

$ sudo bash -c 'whoami && whoami'
root
root

이제 위에서 설명한 전체 프로세스가 상승 된 프로세스, 즉이 명령으로 시작된 bash 세션이 완료된 후 두 명령이 모두 루트로 실행됩니다. 그래도 두 whoami사람은 서로의 존재를 모릅니다.

이것은 어떤 목적에도 적합하지 않지만이 데모에서는 더 쉬운 방법은 간단하게 수행하는 것입니다

sudo some-command && sudo some-other-command

29
whoami예를 들어 +1입니다 .
Carl H


이 데모는 정말 멋지다! 다음에 다른 사람들에게 sudo를 가르치려고 할 때 그것을 생각해야합니다!
조각화 필요

20

아니요.이를 수행하는 몇 가지 예는 다음과 같습니다.

sudo some-command && sudo some-other-command 
sudo sh -c "some-command && some-other-command"

또는 중첩 명령을 원할 경우 다음을 수행 할 수도 있습니다.

sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
    some-command2
    some-other-command2
EOF2
EOF
  • 두 번째는 다른 쉘을 사용합니다.
  • 두 번째 버전에서 '또는 "를 사용할 때는 해당 명령의 명령 또는 매개 변수 (예 : \'또는 \")에서이 또는이 명령을 이스케이프해야합니다.

세 번째 방법은 작동하지 않습니다 : $ sudo -s -- whoami && whoami제공root username
BartekChom

@BartekChom 죄송 합니다만 해당 인용구를 놓쳤습니다
Rinzwind

sudo -s -- "whoami && whoami"command와 같은 명령을 찾을 수없는 것으로 보입니다 "whoami && whoami". 이 구성을 &&와 함께 사용하는 방법? 나는 sudo -s cd ..반대로 오류가 없다는 것을 알았 습니다 sudo cd ...
BartekChom 2016 년

나는 오늘 새로운 것을 배웠다 : sudo bash <<"EOF"! 감사! :-)
Fabby 2016 년

4

아니요, sudo를 두 번 쓰거나 다음과 같은 작업을 수행해야합니다.

sudo bash -c 'foo && bar'

2

&&오른쪽 (두 번째) 명령은 lest sided (첫 번째) 명령이 성공한 경우에만 실행됩니다 (예 : 종료 코드 $?가) 0.

두 명령은 서로 다르며 자체 환경에서 실행되므로 두 번째 명령은 sudo권한을 가지고 실행되지 않습니다 .

이것은 당신을 명확하게 할 것입니다 :

$ sudo whoami && whoami 
root
foobar

1

아니요, 다음은 매우 일반적으로 거시적이었습니다.

sudo reboot && exit

거의 모든 사람이 적어도 한 번은 이것을 했어야합니다.

sudo apt-get update && sudo apt-get upgrade

따라서 훌륭한 "미키 마우스"인터뷰 질문입니다.

이것은 쉽게 테스트되어 통계 패딩 연습 문제가 의심 될 수 있습니다.


0

명령 행에서

$ command one && command two

일반적인 의도는 첫 번째 명령이 성공한 경우에만 && 뒤에 나오는 명령을 실행하는 것입니다.

다른 명령도 sudo로 실행됩니까?

절대적으로 아니오, 이것은 두 개의 연속 명령을 작성하는 것과 같으며, &&는 명령에 추가 권한을 부여하지 않습니다. 그것은 단지 seperator 입니다.

그것을 증명하기 위해 우리는 예를 들어 보자.

touch fileA fileB 

fileA와 fileB라는 두 파일을 만들었습니다. 이제 명령을 실행하겠습니다

sudo chown test:test fileA && chown test:test fileB

이 파일의 사용자 및 그룹 소유자를 사용자 및 그룹 이름 테스트로 변경하고 있습니다. 이제 첫 번째 명령은 다른 명령은 어떻습니까?

출력은 다음과 같습니다.

chown: changing ownership of `fileB': Operation not permitted

따라서 명령이 필요하기 때문에 실행되지 않았으며 sudo&&는 두 번째를 대체하지 않는다는 결론을 내릴 수 있습니다.sudo

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.