BASH:检查用户是否是root用户

如何检查一个用户是否是root或不是BASH脚本?

我知道我可以使用

[[ $UID -eq 0 ]] || echo "Not root" 

要么

 [[ $EUID -eq 0 ]] || echo "Not root" 

但是如果脚本是通过fakeroot调用的,UID和EUID都是0(当然,因为fakeroot伪造了root权限)。

但有没有办法来检查用户是否是root用户? 没有试图做一些事情,只有root可以做(即在/中创build一个文件)?

谢谢,

法比安

Fakeroot设置包含libfakeroot路径的自定义LD_LIBRARY_PATH 。 例如:

 /usr/lib/x86_64-linux-gnu/libfakeroot:/usr/lib64/libfakeroot:/usr/lib32/libfakeroot 

您可以使用它来检测应用程序是否在通过路径迭代的fakeroot中运行,并查找libfakeroot

示例代码:

 IS_FAKEROOT=false for path in ${LD_LIBRARY_PATH//:/ }; do if [[ "$path" == *libfakeroot ]]; then IS_FAKEROOT=true break fi done echo "$IS_FAKEROOT" 

在这里,下面的脚本会发现用户是否是root用户。

 #!/bin/bash touch /checkroot 2>/dev/null uid=`stat -c "%u" /checkroot 2>/dev/null` if [ "$uid" = "0" ] then echo "Root user" else echo "Not a root user" fi rm /checkroot 2>/dev/null 

在上面的例子中,我将尝试在根目录下创建一个文件,如果我不是root用户,并且没有权限,那么会出现错误,我将该错误重定向到/ dev / null。

如果用户有权限,该文件将被创建。 然后使用stat来获取该文件的用户标识,并将其存储到变量uid中。

在if条件中使用该变量,我将检查。

如果临时文件将被创建,rm命令将删除该文件。

但是请确保该文件不存在于根目录中。