2

У меня есть следующие сомнения. В учебном пособии по установке программного обеспечения, которое я следую, говорится, что я должен выполнить следующие команды (я делаю это в оболочке ssh , поэтому этот список шагов заканчивается командой выхода ):

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 [команда]).

Можете ли вы объяснить мне точно, что он делает?

Tnx

3 ответа3

3

При цитировании страницы man опция -s запускает оболочку, указанную в переменной среды SHELL. Так что если

echo $SHELL
/bin/bash

установлен, sudo -s будет эквивалентно выполнению

sudo -Eu root  /bin/bash

то есть выполнение shell /bin /bash от имени пользователя root с сохранением переменных среды.

1

Без опции это в основном эквивалентно sudo -s $SHELL . Где $ SHELL - это обычно путь к вашей текущей оболочке. В Linux это, как правило, /bin/bash , но также может быть одной из многих других оболочек.

1

sudo -s запустит оболочку set (с помощью переменной среды SHELL ) с повышенными привилегиями.

Часто это может быть похоже на запуск sudo bash , давая вам оболочку, в которой вы можете выступать в роли root.

Если вы также предоставите команду после sudo -s команда будет выполняться в этой привилегированной оболочке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .