Команда ifconfig или fdisk внезапно возвращает ошибку command not found под root — почти всегда это признак того, что в переменной PATH суперпользователя отсутствуют каталоги /usr/local/sbin, /usr/sbin и /sbin. Именно в этих трёх путях в Unix-подобных системах хранятся системные утилиты администрирования, недоступные обычным пользователям. Проверить ситуацию можно одной командой: echo $PATH от имени root.

Экзаменационные вопросы по Linux (например, из курсов администрирования) часто формулируют это как требование: в PATH суперпользователя обычно должны присутствовать /usr/local/sbin, /usr/sbin и /sbin. За этой формулировкой стоит вполне практическая логика разделения системных и пользовательских программ. Ниже разберём, зачем нужен каждый каталог, как устроена иерархия и что делать, если пути пропали.

Что такое PATH и как она работает

Переменная окружения PATH — это список каталогов, разделённых двоеточиями, которые оболочка просматривает при поиске исполняемого файла. Когда вы вводите команду без полного пути, shell последовательно проверяет каждый каталог из списка и запускает первое найденное совпадение.

Если нужного каталога в списке нет, система честно сообщает command not found, даже когда программа физически установлена. Посмотреть текущее значение можно так:

echo $PATH

Для обычного пользователя типичный набор — /usr/local/bin, /usr/bin, /bin. У root к этому списку добавляются sbin-каталоги, где лежат инструменты администрирования.

💡

PATH — это не свойство программы, а настройка конкретной сессии оболочки: у root и у обычного пользователя на одной машине значения различаются, и это нормально.

Зачем суперпользователю три sbin-каталога

Разделение на три каталога — не случайность, а отражение иерархии файловой системы Filesystem Hierarchy Standard (FHS). Каждый путь имеет своё назначение:

  • 🔧 /sbin — критически важные системные утилиты, необходимые для загрузки, восстановления и базового администрирования: fsck, init, reboot. Они должны быть доступны даже до монтирования /usr.
  • 🗂️ /usr/sbin — программы системного администрирования, не требующиеся на ранней стадии загрузки: демоны, сетевые службы, инструменты управления пакетами.
  • 📦 /usr/local/sbin — административные утилиты, установленные локально администратором вручную или из исходников, в обход пакетного менеджера.

Такое разделение гарантирует, что система сможет загрузиться и восстановиться даже при повреждении части файловой системы, а локально собранные программы не будут перезаписаны обновлением пакетов.

Почему обычным пользователям эти пути не нужны

Утилиты из sbin требуют привилегий root и бесполезны (а иногда и опасны) для непривилегированной учётной записи. Например, fdisk работает с таблицей разделов диска, а iptables — с правилами межсетевого экрана. Обычный пользователь всё равно не сможет выполнить их осмысленно из-за ограничений прав.

Поэтому стандартная практика дистрибутивов — включать /sbin и /usr/sbin в PATH только суперпользователя. Это одновременно и мера безопасности: случайный запуск системной утилиты с неправильными аргументами менее вероятен, если её просто нет в путях поиска.

📊 Встречались ли вы с ошибкой command not found под root из-за неполного PATH?
Да, регулярно
Один-два раза
Нет, не сталкивался
Не знаю, как проверить

Типичные ситуации, когда PATH у root оказывается неполным

Чаще всего проблема возникает не «сама по себе», а после конкретных действий. Распространённый сценарий — переход в root через su без дефиса: в этом случае окружение (включая PATH) наследуется от предыдущего пользователя, и sbin-каталоги теряются.

Сравните два варианта:

su          # сохраняет старое окружение

su - # имитирует полноценный вход root, PATH корректный

Другие причины: ручная правка ~/.bashrc или /etc/profile с ошибкой, скрипты, которые перезаписывают PATH вместо дополнения, а также минимальные окружения в cron-задачах и systemd-юнитах, где PATH ограничен по умолчанию.

⚠️ Внимание: никогда не «чините» PATH, добавляя текущий каталог (.) в список путей root — это классическая уязвимость: вредоносный скрипт в произвольной папке может быть запущен вместо системной команды.

Как проверить и исправить PATH суперпользователя

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

echo $PATH

which fdisk

ls /sbin /usr/sbin /usr/local/sbin

Если нужного каталога нет, добавьте его временно (до конца сессии) или постоянно через конфигурационный файл оболочки:

export PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin

Для постоянного изменения откройте ~/.bashrc или ~/.profile пользователя root и добавьте строку с export. Важно дополнять PATH, а не перезаписывать: конструкция PATH=$PATH:/новый/путь сохраняет существующие каталоги.

☑️ Проверка PATH суперпользователя

Выполнено: 0 / 5
💡

Чтобы быстро узнать, где лежит команда и почему она не находится, используйте type -a имя_команды — она покажет все совпадения в PATH.

Особенности современных дистрибутивов

В ряде современных систем наблюдается тенденция к объединению иерархии: /bin и /sbin становятся символическими ссылками на /usr/bin и /usr/sbin соответственно. Это так называемый UsrMerge. Сами пути при этом продолжают работать — совместимость сохраняется.

Для экзаменационного вопроса или настройки системы это мало что меняет: требование о присутствии /usr/local/sbin, /usr/sbin и /sbin в PATH суперпользователя остаётся корректным, поскольку симлинки обеспечивают доступность каталогов независимо от их физического расположения.

КаталогСодержимоеДля кого
/binБазовые пользовательские утилиты (ls, cp, bash)Все пользователи
/sbinКритичные системные утилиты (fsck, init)root
/usr/binОсновные пользовательские программыВсе пользователи
/usr/sbinДемоны и инструменты администрированияroot
/usr/local/sbinЛокально установленные админ-утилитыroot
⚠️ Внимание: при написании скриптов для cron или systemd не полагайтесь на интерактивный PATH — задавайте переменную явно в начале скрипта или используйте абсолютные пути к командам.
Почему в экзаменах спрашивают именно эти три каталога

Формулировка восходит к классическим учебным программам по Unix/Linux и стандарту FHS. Три sbin-каталога покрывают все уровни системного ПО: загрузочные утилиты, штатные средства администрирования и локально установленные инструменты. Знание этого набора считается базовым признаком понимания устройства системы.

💡

Присутствие /usr/local/sbin, /usr/sbin и /sbin в PATH root — не формальность, а следствие иерархии FHS: так система отделяет административные инструменты от пользовательских программ и обеспечивает восстанавливаемость.

Частые вопросы

Что делать, если команда есть в /sbin, но всё равно не находится?

Проверьте, что вы действительно работаете под root (whoami), что каталог присутствует в echo $PATH, и что файл исполняемый (ls -l /sbin/имя_команды). Если заходили через su — попробуйте su -.

Можно ли добавить sbin-каталоги обычному пользователю?

Технически да, запустить некоторые утилиты в режиме просмотра информации получится. Но полноценная работа большинства из них требует привилегий root, поэтому практического смысла в этом обычно нет.

Чем su отличается от su - в контексте PATH?

Команда su без параметров сохраняет окружение текущего пользователя, включая PATH. Вариант su - (или su -l) запускает login-оболочку, которая загружает профиль root и корректный PATH с sbin-каталогами.

Влияет ли UsrMerge на требование к PATH?

Нет. Даже если /sbin является символической ссылкой на /usr/sbin, путь остаётся валидным, и его присутствие в PATH по-прежнему корректно и необходимо для совместимости.

Как проверить PATH в cron-задаче?

Добавьте в задание вывод echo $PATH в файл или задайте переменную PATH явно в начале crontab. Окружение cron минимально и почти всегда не содержит sbin-каталогов.