TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #186 15.7K
Тебе частенько приходится пользоваться всякими su, sudo и т.п. Ввод этих команд зашит на подкорке в башке. Забил команду, получил результат. Но опять же особо никто не задумывается чем, отличается su от sudo + там же еще всякие непонятные ключи и дефисы. Поехали разбираться.

su = «substitute user» — заменить пользователя
sudo = «substitute user and do» - подменить пользователя и выполнить

Уже видно разницу. Различия такие: su требует пароль целевой учетной записи, на кого переключаемся. А sudo требует пароль текущего пользователя и запускает от его имени команды, которым требуются права супербога.

Например, мы сидим под пользователем user и хотим стать Иваном, делаем так:

user@dev:/$ su ivan


Будет запрошен пароль, нужно ввести пароль именно от учетной записи ivan, а не от user.

А вот пример с sudo:

user@dev:/$ sudo -u ivan whoami


А здесь нужно ввести пароль от учетной записи user, а не от Ивана или рута. Но для этого случая сперва необходимо добавить пермишены для пользователя user в файл /etc/sudoers.

user ALL=(ALL:ALL) ALL


Редактировать этот файл можно по средствам команды visudo. А свалидировать конфиг можно командой visudo -c. Редактирование этого файла через visodu хорошо тем, что если ты накосячишь, то при сохранении, оно скажет — лось ты дырявый, тут ошибочка!

Вообще предпочтительнее использовать sudo, но если ты не криворукий можно и под su нормально работать. Ты сейчас меня конечно же осудишь, но я предпочитаю работать исключительно под root, за 20 лет пока не факапил. Ну не люблю я всякие эти судо-мудо-рыба-конь и ущемление своих серверных прав.

Окей. А для чего нужен этот странный дефис после su?

А чтобы очищать переменные и пользоваться чистой оболочкой при переключении на другого пользователя. Ща покажу на котиках.

Авторизуемся под пользователем user и экспортируем переменную:

ssh user@dev
export a="test"


Теперь у пользователя user есть переменная «a» которая = test.

Переключаемся на пользователя ivan и смотрим переменную «a»

su ivan
echo $a


Опа! Вывелась строчка test. То есть получается все что ты задал под user, перекочевало в оболочку ivan. Нормально! А теперь давай добавим дефис:

su - ivan
echo $a


И пустота! Переменная $a больше не выводится. Чистая оболочка! Кстати с этим дефисом часто косячат и потом долго не могут понять в чем причина. Переменные вроде были заданы, а потом куда-то пропали. Все потому, что азов не знаем и бездумно суём этот дефис где нужно и не нужно.

Теперь ты знаешь азы и будешь с умом к этим судо-мудо подходить. По крайней мере у тебя добавится дополнительный кейс для дебага.

su (с дефисом) = сначала переключается пользователь, а затем запускается shell, зачищаются все переменные.

su (без дефиса) = переключает пользователя, оставляя переменные окружения старого пользователя.

У sudo есть подобные ключи -s -i

user@dev:/$ sudo -s


Запустится оболочка с правами root

user@dev:/$ sudo -i


Запустится оболочка, но уже с чтением файлов root/.profile/.bashrc и т.п. Можешь попробовать добавить экспорт переменной в .profile, сделать sudo -s/-i и увидишь что с ключом -i переменная выведется на экран.

По сути sudo -i = команде sudo su -. Но обычно за sudo su - в приличных местах выгоняют ссаными тряпками. Это плохая практика! Так как это порождает дополнительный процесс и больше гемора с набором самой команды.

Фуф… пардон за простыню, но мне нужно было тебе это рассказать. Изучай и ставь лайк. Хороших выходных. Увидимся!

upd: если я что-то упустил, докидывайте в комментарии, всем будет полезно.

tags: #linux
—
💩 @bashdays
  • 👍 366
More from @bashdays
  1. Sep 25, 2026ИИ-агент может быть у каждого: создать персонального помощника можно без настройки серверо…
  2. Sep 25, 2026🚀 Zabbix 8.0 на подходе. Запланируйте обучение команды уже сейчас В ближайшее время ожида…
  3. Sep 24, 2026Post #1565
  4. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  5. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  6. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →