Вопрос №55159 от пользователя Anna kra_ в уроке «Sudo», курс «Основы командной строки»
Здравствуйте.
Ну не идёт у меня эта тема. Упражнение выполнила, но только с помощью подсказок в обсуждениях. Ответ получился идентичным с ответом учителя, но на мой взгляд это не считается.
На вопросы к уроку ответить не могу.
Не понимаю эту формулировку:
Если стоит задача произвести сразу пачку действий от имени другого пользователя, то для этого можно запустить новую сессию поверх текущей
Что означает «можно запустить новую сессию поверх текущей»?
- Не понимаю, о чём речь в этом кусочке кода:
$ sudo -i
$ id
uid=0(root) gid=0(root) groups=0(root)
Берём себе права суперпользователя и заранее объявляем, что в таком режиме введём несколько команд? Но вводим только одну: id
Потом получаем вывод
uid=0(root) gid=0(root) groups=0(root)
Пробую ввести ту же самую команду, но без -i
$ sudo
$ id
В выводе ничего не изменяется. Потом пишу exit и получаю неожиданный код:
comp:hexlet-hello-world anna$ exit
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
Deleting expired sessions...54 completed.
После этого вообще всё зависает и компьютер вроде как живёт, но у меня нет больше никакого контроля. Долго-долго жму на кнопку, чтобы его выключить. Заново включаю, возвращаюсь обратно и спрашиваю себя: а я сейчас ... кто? Какой пользователь, с какими правами? В терминале обозначено, что я всё тот-же пользователь «anna». А какие у меня права? Как у «anna» или там что-то поменялось и я, не зная того, уже выступаю в роли суперпользователя? Вряд ли, но где и как это можно посмотреть?
Если кашу в голове как-то можно структурировать, то я попыталась это сделать. Так по курсу вопросов вроде бы и не было, но здесь всё очень беспросветно. Чувствую себя не как пользователь «anna», а как Красная Шапочка после того, как её сожрал волк. Всё темно. Но, может, как и в сказке мимо пройдут охотники и смогут помочь?
И что бы мне ещё почитать кроме сказок Шарля Перро, чтобы больше не попадать в такие истории?
Спасибо.
Добрый день! Если вам нужно выполнить несколько действий от имени суперпользователя, то набирать перед каждой командой sudo не удобно. Можно запустить новую командную оболочку от имени суперпользователя внутри текущей (Вспомните урок про командную оболочку) и спокойно выполнять там нужные действия.
Этот фрагмент кода как раз демонстрирует, что идет работа от имени суперпользователя:
$ sudo -i
$ id
uid=0(root) gid=0(root) groups=0(root)
Сначала запускается новая сессия от имени суперпользователя. Затем команда id
выводит информацию о текущем пользователе и мы убеждаемся, что работаем от лица суперпользователя (root). Дальше вы можете выполнять любые команды. Набрав затем команду exit
, вы завершите работу командной облочки, запущенной поверх текущей и вернетесь в текущую, запущенную от вашего имени.
Команда sudo, выполненая без флага -i, не запускает новую оболочку от имени суперпользователя внутри текущей, поэтому в выводе id вы видите свое имя пользователя. Набрав в этом случае exit, вы завершаете работу командной оболочки, запущенной от вашего имени. Попробуйте позапускать эти команды у себя в терминале, только так вы сможете разобраться окончательно. Если нужно что-то уточнить, спрашивайте
Максим Литвинов, большое-большое спасибо!
Вот так, как Вы здесь объяснили, сделало всё простым и понятным. То есть дело не в моей тупости, а в подаче материала, хотя я очень ценю и этот курс и прочие материалы на Хекслете. Просто иногда ступени настолько высокие, что их не преодолеть и не только не поднимаешься, а наоборот, скатываешься чуть ли не в депрессию. А авторы курса не понимают, что это им кажется, что они разложили тему на атомарные кусочки понимания и больше дробить уже некуда.
Это всё лирика, а теперь к делу.
Вы могли бы вот этот кусочек, так как Вы объяснили, перенести в урок? А в конце приписать: Но это можно сформулировать и короче. И там тот текст, который сейчас прописан в уроке. И волки сыты, и овцы целы (в смысле, все Красные Шапочки). Спасибо Вам ещё раз огромное!
Максим Литвинов, вот добавления.
1.
Попробовала после Ваших объяснений ещё раз пройти тест к уроку. Два вопроса теперь показались очень лёгкими. Затруднение вызывает ещё один вопрос, Вы могли бы и здесь помочь с пониманием? Спасибо!
Чей пароль запрашивает sudo при своем запуске?
– Пароль того пользователя, от имени которого запускается команда
– Она не запрашивает пароль
– Пароль текущего пользователя
То есть я знаю, что я при команде sudo ввожу пароль, с которым вошла в систему. Ответ очевиден, но только исходя из практического опыта, а не от понимания происходящего.
Не понимаю, например, почему не требуется пароль суперпользователя – ведь мы же берём себе его права, хоть и временно?
2.
Команда sudo, выполненая без флага -i, не запускает новую оболочку от имени суперпользователя внутри текущей, поэтому в выводе id вы видите свое имя пользователя.
Оболочку не запускает. Но передаёт текущему пользователю права суперпользователя на исполнение одной команды (так ведь?).
То есть заменяет одноразово текущего пользователя на суперпользователя (так или не так?).
Моего имени я в этом случае уже не вижу. В случае как sudo так и sudo -i отображается суперпользователь. Вот вывод команд из моего терминала:
comp:~ anna$ id
uid=501(anna)
comp:~ anna$ sudo id
uid=0(root)
comp:~ anna$ sudo -i id
uid=0(root)
Я как-то неправильно истолковываю Ваши объяснения? :-(
Это сделано специально. Команда sudo как раз предназначена для того, чтобы давать пользователю делать некоторые действия от имени суперпользователя, но при этом не давать пользователю пароль суперпользователя.
Да, команда sudo позволяет выполнить команду от имени суперпользователя:
comp:~ anna$ sudo id uid=0(root)
Здесь вы выполняете команду
id
от имени суперпользователя, поэтому её в выводе вы видите не свое имя, а root
1.
Команда sudo как раз предназначена для того, чтобы давать пользователю делать некоторые действия от имени суперпользователя …
«некоторые действия» – понимаю так, что есть-таки различия между пользователем с sudo и суперпользователем. Правильно?
(Не ставлю пока зелёных кнопок только оттого, что Вы тогда возможно не увидите моих уточнений. А так класс! :-)
2.
Мне эти два утверждения кажутся противоречащими друг другу. Правильным мне кажется вариант 2.2.
2.1.
Команда sudo, выполненая без флага -i, не запускает новую оболочку от имени суперпользователя внутри текущей, поэтому в выводе id вы видите свое имя пользователя.
Нет, не вижу. Вижу и в этом случае суперпользователя.
2.2.
comp:~ anna$ sudo id
uid=0(root)
Здесь вы выполняете команду id от имени суперпользователя, поэтому её в выводе вы видите не свое имя, а root
- Да, есть различия. Можно даже настраивать, какие команды сможет выполнять пользователь с использованием
sudo
. 2.1 В своем первом сообщении вы привели такой код:$ sudo $ id
Здесьsudo
запускается без флага и без команды. Команда id, выполненная следом, запустится от имени текущего пользователя и выведет на экран ваше имя.
2.2 А здесь уже команда id
запускается от имени суперпользователя и выводит root
comp:~ anna$ sudo id
uid=0(root)
Максим Литвинов, увидела ошибку, из-за которой мы друг друга не понимали. Команды, написанные одна за другой в одну строку или те же команды, записанные в разных строках.
Всё, охотники убили волка! Или волк только притворяется? :-)
Если остались еще вопросы, пишите
Столько зелёных кнопок за ответы в одном топике наверное никто ещё не получал :-)
Спасибо, Максим Литвинов!
Используйте Хекслет по максимуму!
- Задавайте вопросы по уроку
- Проверяйте знания в квизах
- Проходите практику прямо в браузере
- Отслеживайте свой прогресс
Зарегистрируйтесь или войдите в свой аккаунт
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.







