Нет, все команды Unix не являются функциями оболочки, но они могут быть переопределены функцией оболочки.
Имена функций оболочки не ограничиваются именами встроенных -или внешних утилит. Точно так же, как у вас может быть несколько внешних утилит с одинаковым именем по разным путям, у вас также может быть функция оболочки или псевдоним с таким же именем.
Если есть функция с именем foo
и внешняя или встроенная -утилита с именем foo
, то будет вызвана функция foo
.
Чтобы оболочка выбрала встроенную -утилиту, используйте
builtin foo
Чтобы не использовать функцию foo
, используйте
command foo
Чтобы гарантировать, что внешняя утилита используется вместо функции оболочки, псевдонима или встроенной -утилиты, используйте полный путь к ней, например.
/bin/echo
Псевдонимы и функции занимают одно и то же пространство имен, поэтому псевдоним и функция не могут иметь одно и то же имя.
Короче:
Команды Unix могут быть
Некоторые «команды» являются не командами, а ключевыми словами, такими как for
и if
и т. д. Они также могут быть переопределены псевдонимами и функциями оболочки для получения дополнительных захватывающих возможностей оболочки (, т.е. не делайте этого ). ].
Установить/изменить пароль root:
sudo passwd root
После этого вы сможете запустить команду su
.
Краткий ответ можно найти на справочной странице sudoers (, введите man sudoers
, чтобы увидеть полную страницу):
Unlike su(1), when sudoers requires authentication, it validates
the invoking user's credentials, not the target user's (or root's)
credentials.
Итак, sudo
запрашивает ваш пароль, а su
запрашивает пароль root.
Длинный ответ
su
означает изменить пользователя , например, запустить оболочку от имени этого пользователя. Вы можете указать, какой пользователь, например su someuser
. Затем вас попросят ввести пароль someuser
. Если вы не укажете пользователя, su
по умолчанию будет пользователем root. Поэтому, когда вы набираете su
, он запрашивает пароль root.
sudo
означает, запустить команду от имени другого пользователя , а sudo -i
означает запустить оболочку входа в систему от имени другого пользователя.Вы можете указать, какой пользователь, но если вы этого не сделаете, по умолчанию он будет root. Вместо ожидания пароля другого пользователя, как это делает su
, sudo
применяет политику безопасности. Политика безопасности по умолчанию — проверять файл /etc/sudoers
. Версия этого файла по умолчанию включает в себя:
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
означает, что если пользователь входит в группу sudo
, он может выполнять любую команду от имени любого пользователя. Если sudo -i
работает для вас, вероятно, это потому, что ваша учетная запись находится в группе sudo. Но прежде чем sudo
выполнит команду, он снова запрашивает ваш пароль, а не пароль пользователя root.