Одним из самых мощных и удобных инструментов для пользователей Linux, особенно современных дистрибутивов, таких как Ubuntu, является команда systemctl. Эта утилита командной строки обычно используется для взаимодействия с systemd, системой и менеджером служб.
С помощью команды вы можете управлять системными службами, просматривать их состояние, запускать или останавливать их, а также включать и отключать их при запуске системы. Довольно удобно, правда? Но если команда systemctl не найдена или не распознана, вы столкнетесь с проблемой: «sudo:systemctl: команда не найдена» ошибка.
Итак, давайте поговорим о том, что означает ошибка «systemctl: команда не найдена», о различных причинах, по которым вы сталкиваетесь с этой ошибкой, и о том, как ее исправить.
Что означает systemctl: команда не найдена?
Проще говоря, ошибка «systemctl: команда не найдена» означает, что утилита командной строки systemctl недоступна или недоступна в текущей среде. Это может быть связано с множеством причин, все из которых связаны либо с тем, что среда является несистемной средой, либо с тем, что в системе не установлен пакет systemd.
По сути, пакет systemd не установлен, или ваш дистрибутив или версия Linux не использует systemd; скорее, он использует старые системы управления сервисами, такие как init.d. Другая возможность заключается в том, что переменная среды PATH не включает каталог, в котором находится systemctl, а это означает, что ваша оболочка не может его найти.
Теперь, когда у вас есть представление о том, что может быть не так с вашей системой, что приводит к ошибке «systemctl: команда не найдена», давайте посмотрим, как вы можете проверить, в чем заключается ваша проблема и как ее исправить.
Исправление systemctl: ошибка «Команда не найдена»
На следующих шагах мы проверим, установлен ли в вашей системе systemd и использует ли systemctl, а также проверим путь к systemctl. После того как мы проверим проблему, мы предпримем необходимые шаги для ее исправления.
1. Проверка того, использует ли ваша система systemd
Поскольку Ubuntu systemctl можно использовать только в том случае, если у вас установлен пакет systemd, мы сначала проверим, должна ли ваша система использовать systemd, выполнив следующую команду:
ps -p 1 -o comm=
Или вы можете проверить версию systemd с помощью следующей команды:
systemd --version
Если вывод — systemd, то systemd — это ваша система инициализации, и в ней должна быть установлена Ubuntu systemctl. Однако если на выходе выводится init или другой менеджер процессов, это означает, что ваша система использует альтернативную систему инициализации, и systemctl не будет работать, пока вы не перейдете на systemd.
Если вы видите более старые системы инициализации, такие как Upstart или SysVinit, и хотите переключиться на systemd для использования systemctl, выполните следующие действия:
1. Установите systemctl, установив systemd с помощью следующей команды:
sudo apt install systemd-sysv
2. Перезагрузите систему, выполнив следующую команду:
sudo reboot
3. Убедитесь, что ваша система теперь использует systemd:
ps -p 1 -o comm=
Теперь вывод должен быть systemd.
2. Проверка правильности установки systemd
В обычных обстоятельствах, когда systemd установлен и работает как ваша система инициализации, команда systemctl должна работать правильно. Если это не так, это означает, что пакет systemd либо отсутствует, либо установлен неправильно.
Обратите внимание: если вы используете минимальную версию Ubuntu, например контейнер Docker или облачный экземпляр, systemd может не быть установлен по умолчанию. Чтобы установить systemctl через установку systemd, выполните следующие команды:
sudo apt update sudo apt install systemd
После установки проверьте, доступна ли команда systemctl.
3. Проверка PATH systemctl
Одна из распространенных проблем с ошибкой systemctl not Found заключается в том, что systemctl может быть установлен, но его нет в PATH вашей системы. Чтобы проверить, существуют ли двоичные файлы systemd в типичных каталогах, где они расположены, например /bin, /usr/bin или /usr/local/bin, вы можете использовать следующую команду:
which systemctl
Если systemctl найден в любом из ваших каталогов, перечисленных в PATH, вы должны получить такой вывод:
/usr/bin/systemctl
Если systemctl не найден ни в одном из каталогов PATH, команда that ничего не вернет.
Однако systemctl может по-прежнему не работать, даже если он находится в ваших каталогах. Это связано с тем, что systemctl может находиться в каталоге, который не включен в PATH. В этой ситуации вам необходимо проверить, является ли каталог, в котором находится systemctl, частью вашей системы, используя следующую команду:
echo $PATH
Вывод должен быть примерно таким:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Теперь все, что вам нужно сделать, это проверить, включен ли каталог, в котором находится systemctl (который вы получили с помощью команды Which), в каталоги, перечисленные в выводе команды echo $PATH.
Если каталог systemctl не включен в выходные данные echo $PATH, вам придется добавить его в переменную PATH. Для этого вам нужно будет выполнить следующую команду:
Для Пользователи оболочки Bash, откройте файл ~/.bashrc в текстовом редакторе:
nano ~/.bashrc
Добавьте следующую строку в конец файла:
export PATH=$PATH:/usr/bin
/usr/bin — это типичный каталог, в котором в этом примере находится systemctl.
Теперь сохраните и закройте файл, нажав CTRL + X, затем Y для подтверждения и Enter для сохранения.
Для Пользователи Zsh, Откройте файл ~/.zshrc в текстовом редакторе:
nano ~/.zshrc
Добавьте следующую строку в конец файла:
export PATH=$PATH:/usr/bin
/usr/bin — это типичный каталог, в котором в этом примере находится systemctl.
Теперь сохраните и закройте файл, нажав CTRL + X, затем Y для подтверждения и Enter для сохранения.
Выполнив описанные выше шаги, используйте команду echo $PATH, чтобы проверить, добавлен ли каталог вашего systemctl в ваш PATH. Теперь вы сможете запустить systemctl, не столкнувшись с ошибкой «systemctl: команда не найдена».
4. Переустановка systemd
Если предыдущие исправления не работают, и вы по-прежнему сталкиваетесь с ошибкой «команда не найдена», полная переустановка systemd может решить проблему. Для этого выполните следующие команды:
sudo apt purge systemd sudo apt install systemd
Затем перезагрузите систему с помощью этой команды:
sudo reboot
Проверьте, работает ли systemctl.
5. Проверка правильности настройки systemd
Иногда проблема может быть такой же простой, как неправильно настроенная установка systemd, что приводит к ошибке «systemctl: команда не найдена». Все, что вам нужно сделать, чтобы решить эту проблему, — это запустить следующую команду, и все готово:
sudo dpkg-reconfigure systemd
6. Устаревшая подсистема Windows для Linux (WSL)
Если вы используете Ubuntu под WSL (подсистема Windows для Linux) вы должны знать, что более старые версии WSL, такие как WSL 1, изначально не поддерживают systemctl, поэтому независимо от того, какое из предыдущих исправлений вы используете, вы не сможете запустить systemctl.
Если вы хотите воспользоваться преимуществами функций systemctl, вам придется перейти на WSL 2, которая лучше поддерживает systemd. Если вы не уверены, используете ли вы WSL, вы можете проверить это с помощью следующей команды:
uname -a
Если в выводе упоминается WSL, то именно поэтому вы видите ошибку «systemctl: команда не найдена».
7. Использование службы sudo в качестве альтернативы systemctl
Если вы столкнулись с ошибкой «systemctl: команда не найдена», поскольку ваша система не использует systemd, вы можете использовать команду sudo service для управления службами. Эта команда работает со старыми системами инициализации, такими как SysVinit или Upstart. Это полезно для систем Ubuntu, которые используют сценарии инициализации вместо systemd.
Например, чтобы запустить службу, вы должны запустить:
sudo service <service_name> start
Заключительные мысли
systemd и его утилита командной строки systemctl заменили большинство других старых систем инициализации, таких как SysVinit и Upstart. Хотя systemd, возможно, не всем подходит для системы инициализации из-за его монолитной конструкции и философии, отличной от Unix, systemd по-прежнему считается распространенным выбором. Итак, надеемся, что вы смогли устранить ошибку «команда systemctl недоступна», поскольку невозможность использования утилиты командной строки systemd серьезно ограничивает ее возможности.
Часто задаваемые вопросы
Что такое systemctl и что означает systemctl: команда не найдена?
systemctl — это инструмент командной строки, используемый для управления службами в системах Linux, работающих под управлением systemd, таких как Ubuntu. Ошибка «systemctl: команда не найдена» возникает, когда инструмент недоступен или недоступен, обычно потому, что система не использует systemd или пакет systemd не установлен.
Доступен ли systemctl во всех версиях Ubuntu?
Нет, systemctl доступен не во всех версиях Ubuntu. systemctl является частью системы инициализации systemd, которая используется по умолчанию в большинстве современных версий Ubuntu (начиная с 15.04). Более старые версии или некоторые минимальные установки могут вместо этого использовать альтернативные системы инициализации, такие как SysVinit или Upstart.