Вопрос или проблема
Бывший пользователь Ubuntu, переходящий на Debian
Когда я ввожу команду, которая требует sudo
в Debian, но забываю добавить sudo
в начале, я получаю совершенно не полезное, даже неверное сообщение об ошибке command not found
Например
Забыл ввести sudo
$ dmidecode
bash: dmidecode: command not found
Ввел sudo
$ sudo dmidecode
# dmidecode 3.4
Получение данных SMBIOS из sysfs.
SMBIOS 2.7 присутствует.
68 структур, занимающих 2743 байта.
Таблица по адресу 0x000EB9E0.
В Ubuntu я получал более полезное сообщение об ошибке вроде “вы должны быть root, чтобы использовать эту команду” или что-то подобное.
Есть ли способ получить более информативное сообщение об ошибке в Debian?
В ответ на комментарии
Указание полного пути к команде дает более полезное сообщение об ошибке:
$ /usr/sbin/dmidecode
# dmidecode 3.4
/sys/firmware/dmi/tables/smbios_entry_point: Permission denied
Сканирование /dev/mem на наличие точки входа.
/dev/mem: Permission denied
Так что это, вероятно, проблема с путём.
Как отметил steeldriver в комментариях, необходимо установить command-not-found
:
sudo apt install command-not-found
sudo apt update # Чтобы обновить базу данных command-not-found
И использовать оболочку, которая настроена для его использования, такую как bash. Вам нужно будет открыть новую оболочку, после чего вы должны увидеть что-то вроде этого:
muru@ded66325485b:~$ dmidecode
Команда 'dmidecode' доступна в следующих местах
* /sbin/dmidecode
* /usr/sbin/dmidecode
Команда не может быть найдена, потому что '/sbin:/usr/sbin' не включены в переменную среды PATH.
Скорее всего, это вызвано отсутствием административных привилегий для вашей учетной записи.
dmidecode: command not found
Это из контейнера с debian:12
.
Я заметил, что в openSUSE Leap 15.5 /usr/sbin
не был в PATH
для непривилегированного пользователя (при тестировании образа в режиме “живой”).
Согласно /usr/sbin не в $PATH на Debian 11 bullseye. Это правильно?, это также верно для Debian.
То есть добавление /usr/sbin
в ваш PATH
для учетной записи пользователя — это одно из решений.
Команда расположена по адресу /usr/sbin/dmidecode
.
Ваша учетная запись пользователя не настроена на проверку наличия dmidecode
в каталоге /usr/sbin
.
Добавьте /usr/sbin
в вашу переменную пути.
Выполните следующую команду
export PATH=/usr/sbin:$PATH
Чтобы сделать изменение постоянным, добавьте команду в файл .bashrc
(если вы используете bash)
Ответ или решение
Чтобы получить более информативные сообщения об ошибках в Debian 12, когда вы забываете использовать sudo
, необходимо выполнить несколько шагов. Эти действия помогут вам более точно диагностировать проблему и избежать путаницы с сообщением command not found
.
1. Установка и настройка command-not-found
Первый шаг — убедиться, что пакет command-not-found
установлен. Этот пакет поможет вам получать более полезные сообщения об ошибках, когда вы пытаетесь запустить команды, которые требуют административных прав. Для этого выполните следующие команды:
sudo apt update
sudo apt install command-not-found
После установки обновите базу данных command-not-found
:
sudo update-command-not-found
Перезапустите терминал или новую сессию оболочки, чтобы изменения вступили в силу.
2. Настройка переменной окружения PATH
По умолчанию некоторые системные команды, такие как dmidecode
, находятся в директории /usr/sbin
, которая может не быть в вашем $PATH
, когда вы работаете под учетной записью обычного пользователя. Для решения этой проблемы можно добавить эту директорию в переменную окружения PATH
.
Чтобы временно изменить значение PATH
в вашей текущей сессии, выполните следующую команду:
export PATH=/usr/sbin:$PATH
3. Сделать изменения постоянными
Если вы хотите, чтобы изменения $PATH
сохранялись при перезапуске терминала, добавьте вышеуказанную команду в файл ~/.bashrc
. Для этого откройте файл с помощью текстового редактора (например, nano
):
nano ~/.bashrc
Добавьте следующую строку в конце файла:
export PATH=/usr/sbin:$PATH
Сохраните изменения и закройте редактор. Чтобы изменения вступили в силу, выполните команду:
source ~/.bashrc
4. Проверка работы
Теперь, когда вы попытаетесь выполнить команду, такую как dmidecode
, без sudo
, вы должны увидеть более информативное сообщение об ошибке, которое сообщит вам о том, что команда доступна, но требует административных привилегий.
Например, если вы выполните:
dmidecode
Вы получите сообщение, подобное этому:
Command 'dmidecode' is available in the following places
* /sbin/dmidecode
* /usr/sbin/dmidecode
The command could not be located because '/sbin:/usr/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
Это позволит вам лучше понять, что именно произошло и что необходимо сделать для успешного выполнения команды.
Следуя этим шагам, вы сможете улучшить обработку ошибок и получить более понятные сообщения в Debian 12, подобно тем, которые вы видели в Ubuntu.