如何在dash中检查root

时间:2014-08-13 08:03:20

标签: linux bash dash-shell

bash的标准解决方案,请参阅:

https://askubuntu.com/questions/15853/how-can-a-script-check-if-its-being-run-as-root

是:

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 
   exit 1
fi

在dash中不起作用,它正慢慢成为Linux下的标准shell。如何将上述内容移植到破折号?

3 个答案:

答案 0 :(得分:7)

使用id

if [ "$(id -u)" -eq 0 ]; then
    echo "I am root!"
fi

或者

#!/bin/sh
if [ "$(id -u)" -ne 0 ]; then
    echo "This script must be run as root" 
    exit 1
fi

在Linux中,您只需阅读/proc/$$/loginuid,这比依赖二进制文件更有效。

#!/bin/sh
read ID < "/proc/$$/loginuid"
if [ "$ID" -ne 0 ]; then
    echo "This script must be run as root" 
    exit 1
fi

答案 1 :(得分:1)

使用“id -u”命令获取当前有效的用户ID:

#!/bin/dash
MYUID=`id -u`
if [ "$MYUID" -eq 0 ]
then
    echo "You are root"
else
    echo "You are the non-root user with uid $MYUID"
fi

答案 2 :(得分:0)

我通常做的是检查我实际需要的功能,以便脚本也可以为喜欢通过备用特权帐户运行的用户正常工作(* BSD以前为超级用户提供toor csh,当然,正确的思想中没有人会想要这些日子,但无论如何。)

test -w /usr/share/bin ||
{ echo "$0: /usr/share/bin not writable -- aborting" >&2; exit 1 }