Я пишу простой скрипт bash, но мне нужно его проверить, выполняется ли он как root или нет. Я знаю, что, возможно, есть очень простой способ сделать это, но я понятия не имею, как это сделать.
Просто чтобы быть ясным: что такое простой способ написать скрипт foo.sh, так что команда ./foo.sh выходы 0, а команда sudo ./foo.sh выдает 1?
Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID
, а затем, если она не существует, вызовите стандартную команду id
:
if (($ {EUID: -0} || "$ (id -u)")); затем эхо Вы не root. else echo Hello, root. fi
Таким образом, из-за OR shortcut вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.
Повторное использование кода:
функция amIRoot () {! (($ {EUID: -0} || "$ (id -u)"))}
Вы можете выполнить это, используя команду whoami
, которая возвращает текущего пользователя:
#! / bin / bash, если [`whoami`! = ' root '] then echo «Вы должны быть root, чтобы сделать это». exit fi ...
Выполнение вышеуказанного будет напечатано Для этого вы должны быть root.
, если текущий пользователь не является root
.
Примечание: альтернативой в некоторых случаях является просто проверить переменную $ USER
:
, если [$ USER! = 'root']
Этот фрагмент будет:
sudo !!
, если ["$ (whoami & 2> / dev / null)"! = "root"] && ["$ (id -un & 2> / dev / null)"! = "root"] then echo "Вы должны быть root для запуска этого скрипта!" echo "use 'sudo !!'" exit 1 fi
Вы можете выполнить это, используя команду whoami
, которая возвращает текущего пользователя:
#! / bin / bash, если [`whoami`! = ' root '] then echo «Вы должны быть root, чтобы сделать это». exit fi ...
Выполнение вышеуказанного будет напечатано Для этого вы должны быть root.
, если текущий пользователь не является root
.
Примечание: альтернативой в некоторых случаях является просто проверить переменную $ USER
:
, если [$ USER! = 'root']
Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID
, а затем, если она не существует, вызовите стандартную команду id
:
if (($ {EUID: -0} || "$ (id -u)")); затем эхо Вы не root. else echo Hello, root. fi
Таким образом, из-за OR shortcut вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.
Повторное использование кода:
функция amIRoot () {! (($ {EUID: -0} || "$ (id -u)"))}
Пользователь 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
Этот ответ - просто сохранить идею, которая может быть полезна для некоторых из вас. Если вам нужен скрипт, который запускается из графического интерфейса рабочего стола и требует прав 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]
#! / bin / bash uid = `id -u` if [" $ uid "==" 0 "] then echo 1 else echo 0 fi
Один простой способ заставить скрипт запускать только root: запустить скрипт с помощью строки: #! / bin / su root
Этот фрагмент будет:
sudo !!
, если ["$ (whoami & 2> / dev / null)"! = "root"] && ["$ (id -un & 2> / dev / null)"! = "root"] then echo "Вы должны быть root для запуска этого скрипта!" echo "use 'sudo !!'" exit 1 fi
Вы можете выполнить это, используя команду whoami
, которая возвращает текущего пользователя:
#! / bin / bash, если [`whoami`! = ' root '] then echo «Вы должны быть root, чтобы сделать это». exit fi ...
Выполнение вышеуказанного будет напечатано Для этого вы должны быть root.
, если текущий пользователь не является root
.
Примечание: альтернативой в некоторых случаях является просто проверить переменную $ USER
:
, если [$ USER! = 'root']
Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID
, а затем, если она не существует, вызовите стандартную команду id
:
if (($ {EUID: -0} || "$ (id -u)")); затем эхо Вы не root. else echo Hello, root. fi
Таким образом, из-за OR shortcut вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.
Повторное использование кода:
функция amIRoot () {! (($ {EUID: -0} || "$ (id -u)"))}
Пользователь 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
Этот ответ - просто сохранить идею, которая может быть полезна для некоторых из вас. Если вам нужен скрипт, который запускается из графического интерфейса рабочего стола и требует прав 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]
#! / bin / bash uid = `id -u` if [" $ uid "==" 0 "] then echo 1 else echo 0 fi
Один простой способ заставить скрипт запускать только root: запустить скрипт с помощью строки: #! / bin / su root
Этот фрагмент будет:
sudo !!
, если ["$ (whoami & 2> / dev / null)"! = "root"] && ["$ (id -un & 2> / dev / null)"! = "root"] then echo "Вы должны быть root для запуска этого скрипта!" echo "use 'sudo !!'" exit 1 fi
Вы можете выполнить это, используя команду whoami
, которая возвращает текущего пользователя:
#! / bin / bash, если [`whoami`! = ' root '] then echo «Вы должны быть root, чтобы сделать это». exit fi ...
Выполнение вышеуказанного будет напечатано Для этого вы должны быть root.
, если текущий пользователь не является root
.
Примечание: альтернативой в некоторых случаях является просто проверить переменную $ USER
:
, если [$ USER! = 'root']
Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID
, а затем, если она не существует, вызовите стандартную команду id
:
if (($ {EUID: -0} || "$ (id -u)")); затем эхо Вы не root. else echo Hello, root. fi
Таким образом, из-за OR shortcut вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.
Повторное использование кода:
функция amIRoot () {! (($ {EUID: -0} || "$ (id -u)"))}
Пользователь 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
Этот ответ - просто сохранить идею, которая может быть полезна для некоторых из вас. Если вам нужен скрипт, который запускается из графического интерфейса рабочего стола и требует прав 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]
#! / bin / bash uid = `id -u` if [" $ uid "==" 0 "] then echo 1 else echo 0 fi
Один простой способ заставить скрипт запускать только root: запустить скрипт с помощью строки: #! / bin / su root
Этот фрагмент будет:
sudo !!
, если ["$ (whoami & 2> / dev / null)"! = "root"] && ["$ (id -un & 2> / dev / null)"! = "root"] then echo "Вы должны быть root для запуска этого скрипта!" echo "use 'sudo !!'" exit 1 fi
Вы можете выполнить это, используя команду whoami
, которая возвращает текущего пользователя:
#! / bin / bash, если [`whoami`! = ' root '] then echo «Вы должны быть root, чтобы сделать это». exit fi ...
Выполнение вышеуказанного будет напечатано Для этого вы должны быть root.
, если текущий пользователь не является root
.
Примечание: альтернативой в некоторых случаях является просто проверить переменную $ USER
:
, если [$ USER! = 'root']
Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID
, а затем, если она не существует, вызовите стандартную команду id
:
if (($ {EUID: -0} || "$ (id -u)")); затем эхо Вы не root. else echo Hello, root. fi
Таким образом, из-за OR shortcut вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.
Повторное использование кода:
функция amIRoot () {! (($ {EUID: -0} || "$ (id -u)"))}
Пользователь 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