EUID和UID的区别是什么?

33

EUID不同于UID。这两个参数在脚本的什么上下文中使用?

我尝试通过echo "UID is $UID and EUID is $EUID"获取这些值,但只输出了空格。我的机器运行的是Ubuntu 12.04 LTS。在一些网站上看到,通常用于检查是否为root用户等,但无法得到明确的区别。


这是一个链接,可以了解如何更改uid和gid。
usermod -u <NEWUID> <LOGIN> groupmod -g <NEWGID> <GROUP> find / -user <OLDUID> -exec chown -h <NEWUID> {} \; find / -group <OLDGID> -exec chgrp -h <NEWGID> {} \; usermod -g <NEWGID> <LOGIN>
- Arun Chettoor
2个回答

48

当程序以 set-uid 方式运行时,它们是不同的。有效用户 ID 是您切换到的用户,而原始用户 ID 是初始的用户。


那么为什么我的当前 shell 没有显示任何整数。您能否再详细解释一下! - Arun Chettoor
我不知道。在我的OS X上运行bash 3.2.48和Debian上运行的bash 4.1.5中,它可以工作。 - Barmar
当我在脚本中运行时,它不起作用,但是当我直接在 shell 中编写时,它可以工作! - Arun Chettoor
两种方式对我都有效。 - Barmar
好的。也许我应该找一个运行Ubuntu 12.04 LTS的人来检查它! - Arun Chettoor

19

UID 是执行程序的用户ID。

EUID (有效用户ID) 是正在执行进程的用户ID。通常情况下,两者相等,除非使用SetUID程序来增加权限等级。一个常见的使 UID 和 EUID 不同的情况是执行 sudo 命令。

EUID 和 UID 只在 bash 中有效,在 dash(在基于 Debian 的发行版如 Ubuntu 中,sh 通常是指向 dash 的符号链接)中无效。

如果您交互式运行脚本,则可能没有将 bash 配置为默认 shell,请在尝试之前运行 bash

如果您从控制台运行:

bash script.sh

如果您是使用脚本路径来运行它(例如 ./script.sh),请确保脚本的第一行是:

#!/bin/bash

而不是:

#!/bin/sh

如果需要一种更通用的方法 - 可以在任何 shell 上使用- 请查看:https://askubuntu.com/questions/15853/how-can-a-script-check-if-its-being-run-as-root

在那篇文章中提到了 id 命令,其中:

id -u    # is the EUID
id -u -r # is the UID

5
只在bash中有效的是哪一个?EUID还是UID?你说得不够清楚。 - Matt
6
要点:翻译英文问题的主题为“EUID和UID之间的区别”并给出如何获取uid或euid或何时在bash中使用的答案。不要添加解释或其他内容。回答:要获取当前用户的UID,请使用以下命令:echo $UID要获取当前进程的有效用户ID(EUID),请使用以下命令:echo $EUID在Bash脚本中,您可以根据需要使用这些变量来进行条件检查或执行不同的操作。 - ikwyl6
@Matt 我想编辑Fernando的答案,但是“建议编辑队列已满”。 EUIDUID变量仅在bashzsh中可用。 - SebMa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接