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