'sudo -s'명령의 기능은 무엇이며이 예제에서 어떻게 사용됩니까?


8

다음과 같은 의심이 있습니다. 내가 따르는 소프트웨어 설치와 관련된 자습서에서 다음 명령을 실행해야한다고 말합니다 ( ssh 셸에서 수행 하므로이 단계 목록은 exit명령으로 끝납니다 ).

sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit

내 의심은 :

명령 -s후 매개 변수는 정확히 무엇을 sudo합니까?

웹에서 검색하면 다음을 발견했습니다.

‑s [명령] ‑s (쉘) 옵션은 SHELL 환경 변수에 지정된 쉘 (설정된 경우) 또는 비밀번호 데이터베이스에 지정된 쉘을 실행합니다. 명령이 지정되면 쉘의 ‑c 옵션을 통해 실행되도록 쉘로 전달됩니다. 명령을 지정하지 않으면 대화식 쉘이 실행됩니다.

sudo -s쉘의 환경 변수를 사용하여 명령을 실행하는 것 같습니다 .

그러나 이것은 나에게 분명하지 않습니다.이 경우 환경 변수로 실행되는 명령은 무엇입니까? (만 실행 sudo -s되고 실행 되지 않음 sudo -s [command]).

답변:


7

간단한 대답은 루트 쉘을 제공한다는 것입니다. 그것이 여기에 사용되는 것입니다. 거기에 좋은 사이 기술 비교 su, sudo -i, sudo -ssudo suUnix.SE에 방법이 있지만, 여기서는 정말 관련이없는입니다. 코드는 무엇이든 사용할 수 있었고 작동했을 것입니다.

도움말 너깃은 몇 가지를 의미합니다.

  • $SHELL환경 변수 에서 명령을 찾고 있습니다. 당신이 실행 echo $SHELL하면 아마 볼 수 /bin/bash있습니다. 즉, Bash의 루트 인스턴스를 얻게됩니다. 나는 당신이 zsh그것에 있다면 루트 인스턴스를 얻는 것을 의미한다고 확신합니다 zsh.

  • $SHELL비어 있으면 /etc/passwd해당 사용자 에 대해 정의 된 기본 쉘로 돌아갑니다 .

  • 명령을 제공하면 (예 sudo -s whoami:) 실제로 실행 중입니다.sudo /bin/bash -c "whoami"

  • 명령을 전달하지 않으면 -c인수를 전달하지 않으므로 대화식 쉘만 가져옵니다.

"루트"라는 문구를 여러 번 사용했습니다. 하여 기본 sudo 루트로 일을 실행하지만에 대한 모든 것입니다 sudo(당신이 그렇게 할 권한이있는 경우) 다른 사용자와 같은 일을 실행할 수 있습니다 (스와). 나는 sudo -s -u $USER내가 약속 -s한 것처럼 그들에게 뿌리 껍질 을 주지 않는 외침을 흘리는 아이들을 위해 이것을 언급하고 있습니다.


그리고 가장 겸손한 견해로는 사용자가 실수로 추가 명령을 루트로 실행할 수 있다는 점은 말할 것도없이 두 개의 명령에 대해서만 루트가되는 것은 실제로 어리 석습니다. 루트로 무언가를 원하거나 실행 해야하는 경우 다음과 같이 명령을 미리 지정하십시오 sudo.

sudo apt-get update
sudo apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen

나는 당신이 실행할 명령의 버킷로드가있는 경우를 제외하고 루트 쉘을 얻는 것을 제안한 튜토리얼이 의심 스럽습니다 ... 그리고 심지어 스크립팅이 있습니다.


완벽한 설명. 이제는 더 명확합니다. 마지막 의심입니다. 이전의 모든 명령에 sudo를 미리 추가하면 동일한 최종 결과를 얻을 수 있습니까? 사실입니까, 아니면 뭔가 빠졌습니까?
AndreaNobili

@Oli 당신은 "sudo -s"가 "루트"쉘에 슈퍼 사용자가 아닌 "루트"로 로그인하는 Zsh에 대해 100 % 정확합니다.
RCF

@AndreaNobili 그래, 그것은 sudo일반적으로 무엇입니까 ; 루트로 수동 로그인 할 필요없이 루트로 명령 실행
Oli

참고로 귀하의 답변을 아래에 올렸 sudo -s는데, 제 지식이 제한되어 있고 우연히 상황에 따라 일어나는 일로 인해 테이크 아웃이 크게 다릅니다. 아직도 당신은 나의 "겸손한"답변을 읽고 아마도 당신의 1/2 십년 된 답변을 새로 고칠 수 있습니다.
WinEunuuchs2Unix

0

sudo -s일반 사용자처럼 현재 디렉토리에서 명령을 실행합니다. 예를 들면 다음과 같습니다.

rick@alien:~/askubuntu$ suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
Nov 12 22:23:37 to Nov 13 04:24:37 lasting 21,660 seconds
(... SNIP ...)
Dec 02 21:58:49 to Dec 03 04:20:52 lasting 22,923 seconds
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,356 seconds (21 days, 12 hours, 29 minutes, 16 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,015 seconds (7 days, 22 hours, 33 minutes, 35 seconds)

rick@alien:~/askubuntu$ sudo suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -H suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -s suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
(...SNIP...)
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,431 seconds (21 days, 12 hours, 30 minutes, 31 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,090 seconds (7 days, 22 hours, 34 minutes, 50 seconds)

물론 -s명령 앞에 접두어를 사용 하는 ./것이 시간을 절약하는 데 큰 도움이되지 않을 수 있습니다.

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