
나는 다음과 같은 의심을 가지고 있습니다. 내가 따르고 있는 소프트웨어 설치와 관련된 튜토리얼에서는 다음 명령을 실행해야 한다고 말합니다.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]
).
답변1
간단한 대답은 루트 쉘을 제공한다는 것입니다. 여기서는 그런 용도로 사용됩니다. 좋은 게 있어요Unix.SE 의 , su
및 메소드 간의 기술적 비교sudo -i
sudo -s
sudo su
하지만 그건 여기서는 전혀 관련이 없습니다. 코드는 무엇이든 사용할 수 있었고 작동했을 것입니다.
도움말 너겟은 다음과 같은 몇 가지 의미를 갖습니다.
환경 변수 에서 명령을 찾고 있습니다
$SHELL
. 달리면echo $SHELL
아마 보일 겁니다/bin/bash
. 이는 Bash의 루트 인스턴스를 얻게 된다는 의미입니다. 나는 당신이 그 안에 있었다면zsh
당신이 의 루트 인스턴스를 얻는다는 것을 의미한다고 확신합니다zsh
.비어 있으면 해당 사용자에 대해
$SHELL
정의된 기본 셸로 대체됩니다 ./etc/passwd
명령(예: )을 제공하면
sudo -s whoami
실제로 실행됩니다.sudo /bin/bash -c "whoami"
명령을 전달하지 않으면
-c
인수를 전달하지 않으므로 대화형 셸만 얻게 됩니다.
나는 "루트"라는 표현을 여러 번 사용했습니다. 에 의해기본 sudo
루트로 작업을 실행하는 것이 전부이지만 sudo
(그리고 su는) 다른 사용자로 작업을 실행할 수 있습니다(권한이 있는 경우). 나는 위에서 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
실행해야 할 명령이 버킷 로드인 경우를 제외하고는 루트 셸을 가져오라고 제안하는 튜토리얼이 있는지 의심스럽습니다. 심지어 스크립팅도 있습니다.
답변2
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
명령 앞에 다음을 붙이는 대신 사용하는 것은 ./
시간을 크게 절약하지 못할 수도 있습니다.