Что делает команда «sudo -s» и как она используется в этом примере?

Что делает команда «sudo -s» и как она используется в этом примере?

У меня есть следующие сомнения. В руководстве по установке программного обеспечения, которому я следую, говорится, что мне нужно выполнить следующие команды (я делаю это всшshell, поэтому этот список шагов заканчивается командой 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) запускает оболочку, указанную переменной окружения SHELL, если она установлена, или оболочку, указанную в базе данных паролей. Если указана команда, она передается оболочке для выполнения через параметр ‑c оболочки. Если команда не указана, выполняется интерактивная оболочка

Мне кажется, что нужно sudo -sвыполнить команду, используя переменную окружения оболочки.

Но вот это мне не понятно: в этом случае какая команда выполняется с переменной окружения? (она только выполняется, sudo -sа не sudo -s [command]).

решение1

Простой ответ - это дает вам root shell. Вот для чего он здесь используется. Есть хорошийтехническое сравнение методов su, sudo -i, sudo -sи sudo suв Unix.SEно это действительно не имеет значения здесь. Код мог бы использовать любой и работал бы.

Этот справочный самородок означает несколько вещей:

  • Он ищет команду в $SHELLпеременной окружения. Если вы запустите, echo $SHELLто, вероятно, увидите /bin/bash. Это означает, что вы получите корневой экземпляр Bash. Я уверен, что если бы вы были в zshнем, это означало бы, что вы получите корневой экземпляр zsh.

  • Если $SHELLпусто, то возвращается к оболочке по умолчанию, определенной /etc/passwdдля этого пользователя.

  • Если вы введете команду (например sudo -s whoami, ), она фактически выполнится:sudo /bin/bash -c "whoami"

  • Если вы не передадите команду, -cаргумент не будет передан, и вы просто получите интерактивную оболочку.

Я использовал фразу «корень» несколько раз.по умолчанию sudoвсе о запуске вещей как root, но sudo(и su) может запускать вещи как другие пользователи (если у вас есть разрешение на это). Я говорю это только для педантов, которые будут кричать, что это sudo -s -u $USERне дает им root shell, как я обещал -sвыше.


И в моемскромнейшиймнений, это действительно глупо становиться root для всего двух команд, не говоря уже о том, что это может привести к тому, что пользователь случайно запустит дальнейшие команды как root. Если вы хотите или вам нужно запустить что-то как root, просто добавьте к команде sudo:

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

Я бы с подозрением отнесся к любому руководству, предлагающему получить root-оболочку, за исключением случаев, когда вам действительно нужно запустить кучу команд... И даже в этом случае приходится писать скрипты.

решение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вместо префикса команды ./может не дать большой экономии времени.

Связанный контент