Malabarba Asked: 2010-12-03 03:30:53 +0800 CST2010-12-03 03:30:53 +0800 CST 2010-12-03 03:30:53 +0800 CST 脚本如何检查它是否以 root 身份运行? 772 我正在编写一个简单的 bash 脚本,但我需要它来检查它是否以 root 身份运行。我知道可能有一种非常简单的方法可以做到这一点,但我不知道怎么做。 只是要清楚:编写脚本foo.sh 的简单方法是什么,以便命令输出和命令输出?./foo.sh0sudo ./foo.sh1 scripts bash root 11 个回答 Voted Best Answer aneeshep 2010-12-03T03:44:36+08:002010-12-03T03:44:36+08:00 #!/bin/bash if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" exit 1 fi Lekensteyn 2011-03-14T01:19:40+08:002011-03-14T01:19:40+08:00 root 用户不必命名为“root”。whoami返回带有用户 ID 的第一个用户名0。$USER包含登录用户的名称,可以有用户 ID 0,但名称不同。 检查帐户是否以root身份登录的唯一可靠程序: id -u 我使用-u有效的用户ID,而不是真实的-r用户ID。权限由有效用户 ID确定,而不是真实用户 ID 。 测试 /etc/passwd0包含按给定顺序具有用户 ID 的以下用户名: 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 jfs 2011-03-14T02:26:43+08:002011-03-14T02:26:43+08:00 正如@Lekensteyn 所说,您应该使用有效的用户ID。你不需要id -u在 bash 中调用: #!/bin/bash if [[ $EUID -ne 0 ]]; then echo "You must be root to do this." 1>&2 exit 100 fi @geirha 的评论建议使用算术评估: #!/bin/bash if (( EUID != 0 )); then echo "You must be root to do this." 1>&2 exit 100 fi Nathan Osman 2011-03-13T23:38:20+08:002011-03-13T23:38:20+08:00 您可以使用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。 注意:在某些情况下,另一种方法是简单地检查$USER变量: if [ $USER != 'root' ] Luchostein 2016-10-13T06:14:45+08:002016-10-13T06:14:45+08:00 考虑到效率,您可以先测试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)")) } João Pinto 2010-12-03T03:40:10+08:002010-12-03T03:40:10+08:00 #!/bin/bash [[ $(id -u) != 0 ]] echo $? Delan Azabani 2010-12-03T03:35:15+08:002010-12-03T03:35:15+08:00 #!/bin/bash if [ "$(id -u)" == "0" ] then echo "I am root." else echo "I am not root." fi rubo77 2014-10-17T01:17:17+08:002014-10-17T01:17:17+08:00 这个片段将: 检查不同的会话 建议使用sudo !! 并返回错误 if [ "$(whoami &2>/dev/null)" != "root" ] && [ "$(id -un &2>/dev/null)" != "root" ] 然后 echo "您必须是 root 才能运行此脚本!" 回声“使用'sudo !!'” 1号出口 菲 gertas 2015-10-18T14:00:30+08:002015-10-18T14:00:30+08:00 这个答案只是为了保存一个想法,可能对你们中的一些人有帮助。如果您需要从桌面 GUI 运行并需要 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. alexandre1985 2016-08-14T13:07:19+08:002016-08-14T13:07:19+08:00 使脚本只能由 root 运行的一种简单方法是使用以下行启动脚本: #!/bin/su root
root 用户不必命名为“root”。
whoami
返回带有用户 ID 的第一个用户名0
。$USER
包含登录用户的名称,可以有用户 ID0
,但名称不同。检查帐户是否以root身份登录的唯一可靠程序:
我使用
-u
有效的用户ID,而不是真实的-r
用户ID。权限由有效用户 ID确定,而不是真实用户 ID 。测试
/etc/passwd
0
包含按给定顺序具有用户 ID 的以下用户名:登录为
root2
,给出下一个结果:whoami
:rootx
echo $USER
:(root2
如果程序在空环境中启动,则返回一个空字符串,例如env -i sh -c 'echo $USER'
)id -u
:0
如您所见,其他程序在此检查中失败,仅id -u
通过。更新后的脚本如下所示:
正如@Lekensteyn 所说,您应该使用有效的用户ID。你不需要
id -u
在 bash 中调用:@geirha 的评论建议使用算术评估:
您可以使用
whoami
返回当前用户的命令来完成此操作:You must be root to do this.
如果当前用户不是,则运行上述将打印root
。注意:在某些情况下,另一种方法是简单地检查
$USER
变量:考虑到效率,您可以先测试
EUID
环境变量,如果不存在,则调用标准id
命令:这样,由于OR 快捷方式,您可以避免调用系统命令,优先查询内存中的变量。
代码复用:
这个片段将:
sudo !!
这个答案只是为了保存一个想法,可能对你们中的一些人有帮助。如果您需要从桌面 GUI 运行并需要 root 权限的脚本,请尝试以下方式:
这样你会得到一个很好的对话窗口,询问你 root 用户密码。就像使用命令行 sudo 一样。
可能在您的
gksudo
系统中不可用,然后使用sudo apt-get install gksu
.使脚本只能由 root 运行的一种简单方法是使用以下行启动脚本:
#!/bin/su root