Я довольно новый пользователь Linux и заметил, что некоторые команды доступны только суперпользователю - например, shutdown. Я часто путаюсь, когда знаю, что есть команда, пытаюсь ее выполнить, но мне говорят, что ее даже не существует, - но все, что мне нужно, это быть пользователем root, чтобы выполнить ее.

Мой вопрос: почему эти команды не говорят, что у вас недостаточно прав для его запуска, или говорят, что вам нужно быть пользователем root? Есть ли какая-то техническая причина для этого или это просто так?

4 ответа4

6

Причина, по которой они «не существуют», заключается в том, что их местоположение не находится в нашей переменной среды PATH. Вы можете увидеть каталоги в вашем PATH, набрав:

echo $PATH

и вы можете проверить местоположение вашей команды, набрав

whereis shutdown

как правило, вы увидите, что каталог команды, которую вы ищете, отсутствует в вашей переменной PATH. Вы можете добавить каталоги к своему пути, добавив следующие строки в свой скрипт входа в систему (~/.bash_profile).

PATH=$PATH:/my/new/directory
export PATH
4

Ответ, который вы, вероятно, видите, указывает не на то, что команды не существуют, а на то, что они «не найдены»:

telemachus ~ $ ifconfig -a
bash: ifconfig: command not found

Некоторые сообщения об ошибках бесполезны, но это на самом деле относительно полезно. Слова "не найдены" говорят вам, где проблема. Ваша оболочка (в моем случае это Bash, очевидно) ищет команды в $PATH . PATH - это набор значений, разделенных двоеточиями. Каждое значение является каталогом, куда идут исполняемые (двоичные) программы, и оболочка ищет команды в порядке слева направо по этой цепочке каталогов. Вот как можно увидеть, каков ваш PATH:

telemachus ~ $ echo $PATH
/home/telemachus/bin:/usr/local/bin:/usr/bin:/bin:/usr/games

(Обратите внимание, что регистр имеет значение, PATH все верхний Также $ имеет значение.) Поэтому моя оболочка ищет команды в каталоге bin в моей домашней папке, затем в /usr/local/bin , затем в /usr/bin и т.д. Порядок имеет значение, потому что иногда у вас будет две версии одной программы, и вы захотите чтобы убедиться, что вы найдете конкретный в первую очередь. (У меня в каталоге $HOME/bin другая версия Ruby, отличная от общесистемной, и я хочу, чтобы она была найдена первой.)

Чтобы добавить каталог в PATH, вы обычно можете отредактировать профиль вашей оболочки. В зависимости от того, какой дистрибутив Linux вы используете, этот файл будет называться .profile или .bash_profile , и он будет находиться в вашем домашнем каталоге. Файлы, которые начинаются с . (часто называемые точечными файлами) по умолчанию скрыты. Они не будут отображаться в файловом менеджере GUI, и команда ls не увидит их (без помощи). Чтобы увидеть, что присутствует в вашем доме, откройте оболочку (в новой оболочке вы по умолчанию будете находиться в вашем домашнем каталоге) и введите ls -A. Флаг -A указывает команде ls показывать скрытые файлы. Вы должны увидеть либо .profile либо .bash_profile , который затем можете редактировать. Добавьте двоеточие и полный путь к нужному каталогу (полный путь должен начинаться с / чтобы указать его положение в корне диска). Вы не хотите двоеточие после последнего значения. Так что если у вас нормальный PATH, вы можете добавить /sbin следующим образом:

PATH=$PATH:/sbin

Тем не менее, все это говорит о том, что вы все равно не можете получить прямой /sbin/shutdown таким образом:

telemachus ~ $ /sbin/shutdown -h now
shutdown: you must be root to do that!

Дав полный путь к команде, я "нашел" команду, но все равно не смог ее запустить. Некоторые команды, такие как shutdown , требуют специальных привилегий. Чтобы получить разрешение на shutdown от оболочки, вам нужно будет использовать su или sudo зависимости от того, на какой системе вы работаете. Я уже написал роман, так что это история для другого дня.

3

Они хранятся в каталогах /usr/sbin или /sbin которые не включены в переменную PATH пользователя (по умолчанию).

1

Думайте о Linux как о многопользовательской системе, и это будет иметь смысл. Вы не хотите, чтобы машина, на которой вы работаете, была отключена другим пользователем. Если root делает это хорошо, возможно, у него есть веская причина отключить его.

Как пользователь, вы должны иметь возможность делать вещи, которые влияют только на ваше пространство. Если вы запускаете linux как рабочий стол (и говорите, что плохо знакомы с ним), вы, вероятно, используете что-то вроде Ubuntu или чего-то подобного. В этих дистрибутивах вы можете использовать графический интерфейс, чтобы использовать практически все, и система при необходимости попросит вас ввести пароль.

В консоли вы можете получить root-доступ с помощью команды su (если вы знаете пароль root) или sudo su если ваш дистрибутив использует sudo. После этого у вас будут все полномочия и привилегии, необходимые для взлома вашей системы:P

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .