Я пишу простой скрипт bash, но мне нужно его проверить, выполняется ли он как root или нет. Я знаю, что, возможно, есть очень простой способ сделать это, но я понятия не имею, как это сделать.
Просто чтобы быть ясным: что такое простой способ написать скрипт foo.sh, так что команда ./foo.sh выходы 0, а команда sudo ./foo.sh выдает 1?
#! / bin / bash, если [[$ EUID -ne 0]]; затем echo «Этот скрипт должен быть запущен как root» exit 1 fi
#! / bin / bash, если [[$ EUID -ne 0]]; затем echo «Этот скрипт должен быть запущен как root» exit 1 fi
#! / bin / bash, если [[$ EUID -ne 0]]; затем echo «Этот скрипт должен быть запущен как root» exit 1 fi
#! / bin / bash, если [[$ EUID -ne 0]]; затем echo «Этот скрипт должен быть запущен как root» exit 1 fi
#! / bin / bash, если [[$ EUID -ne 0]]; затем echo «Этот скрипт должен быть запущен как root» exit 1 fi
#! / bin / bash, если [[$ EUID -ne 0]]; затем echo «Этот скрипт должен быть запущен как root» exit 1 fi
$ UID
и $ EUID
- это базисы. У простых оболочек, совместимых с POSIX, нет этих переменных, и вам нужно использовать id (1) .
– David Foerster
16 October 2014 в 14:28
, если ((EUID)); затем
, см. комментарий @ geirha
– jfs
18 October 2014 в 00:38
sudo
. Если вы запустите sudo sh -c 'echo $ EUID'
, вы увидите ожидаемые результаты.
– M. Dudley
19 November 2015 в 22:09
$ EUID
- это башизм (как упоминалось выше @DavidFoerster), а ваш / bin / sh
скорее всего, является ссылкой на / bin / dash
, а не / bin / bash
. sudo bash -c 'echo $ EUID'
даст ожидаемый результат.
– Adrian Günter
10 May 2017 в 00:40
Один простой способ заставить скрипт запускать только root: запустить скрипт с помощью строки: #!/bin/su root
Этот ответ заключается только в том, чтобы сохранить идею, которая может быть полезна для некоторых из вас. Если вам нужен сценарий, который запускается из графического интерфейса рабочего стола и требует прав root, попробуйте следующим образом:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
gksudo -w $0 $@
exit
fi
#here go superuser commands, e.g. (switch intel cpu into powersave mode):
echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo
cpupower frequency-set -g powersave
Таким образом вы получите приятное диалоговое окно с запросом пароля пользователя root. Как и в командной строке sudo.
Возможно, gksudo недоступен в вашей системе, а затем установите его с помощью sudo apt-get install gksu.
Пользователь root не должен называться «root». whoami возвращает первое имя пользователя с идентификатором пользователя 0. $USER содержит имя зарегистрированного пользователя, который может иметь идентификатор пользователя 0, но имеет другое имя.
Единственная надежная программа для проверки, зарегистрирована ли учетная запись как root, или not:
id -u
Я использую -u для эффективного идентификатора пользователя, а не -r для реального идентификатора пользователя.
/etc/passwd содержат следующие имена пользователей с идентификатором пользователя 0 в указанном порядке:
rootx
root2
Записан как root2, дает следующие результаты:
whoami: rootx echo $USER: root2 (это возвращает пустую строку, если программа была запущен в пустой среде, например env -i sh -c 'echo $USER') id -u: 0 Как вы можете видеть, другие программы не выполнили эту проверку, прошло только id -u.Обновленный скрипт будет выглядеть так:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi
Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID, а затем, если она не существует, вызовите стандартную команду id:
if ((${EUID:-0} || "$(id -u)")); then
echo You are not root.
else
echo Hello, root.
fi
Таким образом , из-за ярлыка OR, вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.
Повторное использование кода:
function amIRoot() {
! ((${EUID:-0} || "$(id -u)"))
}
Вы можете выполнить это, используя команду whoami, которая возвращает текущего пользователя:
#!/bin/bash
if [ `whoami` != 'root' ]
then
echo "You must be root to do this."
exit
fi
...
Запуск выше будет печатать You must be root to do this., если текущий пользователь не root. [ ! d1]
Примечание: альтернативой в некоторых случаях является просто проверка переменной $USER:
if [ $USER != 'root' ]
Этот фрагмент будет:
Проверять разные сеансы, предлагая использовать sudo !! и возвращать ошибку if [ "$(whoami &2>/dev/null)" != "root" ] && [ "$(id -un &2>/dev/null)" != "root" ] then echo "You must be root to run this script!" echo "use 'sudo !!'" exit 1 fiОдин простой способ заставить скрипт запускать только root: запустить скрипт с помощью строки: #!/bin/su root
Этот ответ заключается только в том, чтобы сохранить идею, которая может быть полезна для некоторых из вас. Если вам нужен сценарий, который запускается из графического интерфейса рабочего стола и требует прав root, попробуйте следующим образом:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
gksudo -w $0 $@
exit
fi
#here go superuser commands, e.g. (switch intel cpu into powersave mode):
echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo
cpupower frequency-set -g powersave
Таким образом вы получите приятное диалоговое окно с запросом пароля пользователя root. Как и в командной строке sudo.
Возможно, gksudo недоступен в вашей системе, а затем установите его с помощью sudo apt-get install gksu.
Пользователь root не должен называться «root». whoami возвращает первое имя пользователя с идентификатором пользователя 0. $USER содержит имя зарегистрированного пользователя, который может иметь идентификатор пользователя 0, но имеет другое имя.
Единственная надежная программа для проверки, зарегистрирована ли учетная запись как root, или not:
id -u
Я использую -u для эффективного идентификатора пользователя, а не -r для реального идентификатора пользователя.
/etc/passwd содержат следующие имена пользователей с идентификатором пользователя 0 в указанном порядке:
rootx
root2
Записан как root2, дает следующие результаты:
whoami: rootx echo $USER: root2 (это возвращает пустую строку, если программа была запущен в пустой среде, например env -i sh -c 'echo $USER') id -u: 0 Как вы можете видеть, другие программы не выполнили эту проверку, прошло только id -u.Обновленный скрипт будет выглядеть так:
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "I am not root!"
exit 1
fi
Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID, а затем, если она не существует, вызовите стандартную команду id:
if ((${EUID:-0} || "$(id -u)")); then
echo You are not root.
else
echo Hello, root.
fi
Таким образом , из-за ярлыка OR, вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.
Повторное использование кода:
function amIRoot() {
! ((${EUID:-0} || "$(id -u)"))
}
Вы можете выполнить это, используя команду whoami, которая возвращает текущего пользователя:
#!/bin/bash
if [ `whoami` != 'root' ]
then
echo "You must be root to do this."
exit
fi
...
Запуск выше будет печатать You must be root to do this., если текущий пользователь не root. [ ! d1]
Примечание: альтернативой в некоторых случаях является просто проверка переменной $USER:
if [ $USER != 'root' ]
Этот фрагмент будет:
Проверять разные сеансы, предлагая использовать sudo !! и возвращать ошибку if [ "$(whoami &2>/dev/null)" != "root" ] && [ "$(id -un &2>/dev/null)" != "root" ] then echo "You must be root to run this script!" echo "use 'sudo !!'" exit 1 fiЭтот фрагмент будет:
sudo !!
, если ["$ (whoami & 2> / dev / null)"! = "root"] && ["$ (id -un & 2> / dev / null)"! = "root"] then echo "Вы должны быть root для запуска этого скрипта!" echo "use 'sudo !!'" exit 1 fi
Один простой способ заставить скрипт запускать только root: запустить скрипт с помощью строки: #! / bin / su root
#! / bin / bash uid = `id -u`, если [" $ uid "==" 0 "], тогда echo 1 else echo 0 fi
Этот ответ - просто сохранить идею, которая может быть полезна для некоторых из вас. Если вам нужен скрипт, который запускается из графического интерфейса рабочего стола и требует прав root, попробуйте этот способ:
#! / Bin / bash if! [$ (id -u) = 0]; затем gksudo -w $ 0 $ @ exit fi #here идут команды суперпользователя, например. (переключить процессор Intel в режим энергосбережения): echo 1 & gt; / sys / devices / system / cpu / intel_pstate / no_turbo cpupower frequency-set -g powersave
Таким образом вы получите красивое диалоговое окно с запросом пароля пользователя root.
gksudo
может быть недоступен в вашей системе, а затем установить его с помощью sudo apt-get install gksu
. [ ! d5]
Пользователь root не должен называться «root». whoami
возвращает первое имя пользователя с идентификатором пользователя 0
. $ USER
содержит имя зарегистрированного пользователя, который может иметь идентификатор пользователя 0
, но имеет другое имя.
Единственная надежная программа для проверьте, зарегистрирована ли учетная запись как root, или нет:
id -u
Я использую -u
для эффективный идентификатор пользователя, а не -r
для идентификатора пользователя real . Разрешения определены эффективным [ пользователем , а не real .
/ etc / passwd
содержит следующие имена пользователей с идентификатором пользователя 0
в данном порядке:
rootx root2
Записан как root2
, дает следующие результаты:
whoami
: rootx
echo $ USER
: root2
(это возвращает пустую строку, если программа была запущена в пустой среде, например env -i sh -c 'echo $ USER'
) id -u
: 0
Как вы можете видеть, другие программы не смогли выполнить эту проверку, только id -u
. Обновленный скрипт будет выглядеть так:
#! / bin / bash if! [$ (id -u) = 0]; затем эхо «Я не корень!» выход 1 fi