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

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

8
задан 4 June 2014 в 20:08

2 ответа

Простой ответ - это, дает Вам корневую оболочку. Это - то, для чего это используется здесь. Существует хорошее техническое сравнение между 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"

  • Если Вы не передаете команду, она не передает a -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

Я был бы сомнителен из любого учебного руководства, которое предложило получить корневую оболочку, кроме случаев, где у Вас действительно есть bucketloads команд для выполнения... И даже затем, там пишет сценарий.

7
ответ дан 4 June 2014 в 20:08

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

0
ответ дан 4 December 2019 в 01:34

Другие вопросы по тегам:

Похожие вопросы: