TGViewer
🐧 Linux Junior. Программирование под Linux. 🐧 Linux Junior. Программирование под Linux. @juniorlinux · 3.08K subscribers
Post #520 2.18K
🔥 Чем отличается su от sudo

Обе команды связаны с повышением прав, но делают это по-разному.

📌 Основная идея

su — substitute user ➡️ «заменить пользователя»
sudo — substitute user and do ➡️ «выполнить как другой пользователь»

⚙️ Как работает su

su переключает вас на другого пользователя внутри текущей сессии. Для этого нужно знать пароль целевой учётки, а не своей.
user@dev:/$ su john
Пароль: ****
john@dev:/$ whoami
john


Вы стали Джоном и работаете от его имени.
su без дефиса, как в этом примере, просто меняет пользователя, но оставляет окружение старого. О su - мы еще поговорим.

⚙️ Как работает sudo

sudo запускает одну команду от имени другого пользователя (по умолчанию — root). При этом спрашивается ваш пароль, а не пароль того, под кем выполняется команда.
user@dev:/$ sudo -u john whoami
john


Чтобы это работало, у пользователя user должны быть разрешения в /etc/sudoers:
user ALL=(ALL:ALL) ALL


Редактируется через visudo:
sudo visudo


Проверить конфигурацию можно так:
sudo visudo -c


💡 visudo защищает от ошибок: если синтаксис неправильный, файл не сохранится.

⚙️ su с дефисом

Иногда можно заметить команду su - john.
Зачем дефис?

Он очищает окружение и запускает оболочку, как будто вы вошли в систему под новым пользователем.

Посмотрим на примере:
ssh user@pc
export a="test"
su john
echo $a
# test


Переменная $a сохранилась.
А теперь с дефисом:
su - john
echo $a
# ничего не выводит


Переменные исчезли — новая, "чистая" среда.

📎 Коротко:

su — просто смена пользователя, старое окружение остаётся;
su - — полная имитация входа в систему под новым пользователем.

⚙️ Аналоги у sudo

sudo тоже может запустить shell с разным уровнем "чистоты" окружения:

sudo -s   # shell с правами root, окружение текущее
sudo -i # shell как при входе под root (загружается /root/.profile и т.п.)


Если в /root/.profile прописать переменную, то она появится только при sudo -i.

✔️ sudo -i ≈ sudo su -
Но писать sudo su - — дурной тон: запускается лишний процесс, команда громоздкая и вообще не нужная.
  • 👍 11
  • ❤ 3
More from @juniorlinux
  1. Sep 28, 2026⚙️ Как устроена автоматизация задач через cron в Linux Если вам нужно регулярное выполнени…
  2. Sep 22, 2026По умолчанию rsync только добавляет и обновляет файлы, но не трогает то, что было удалено…
  3. Sep 22, 2026❓ Как удалить на приемнике файлы, которых больше нет в источнике, при синхронизации через…
  4. Sep 16, 2026Post #589
  5. Sep 10, 2026Как распаковать .tar.gz, .tar.bz2, .tar.xz и .tar.zst в Linux Для работы с архивами в Linu…
  6. Sep 4, 2026Посмотреть очередь задач, созданных через at, можно командой atq (или at -l). Она выведет…
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 →