EUID不同于UID。这两个参数在脚本的什么上下文中使用?
我尝试通过echo "UID is $UID and EUID is $EUID"
获取这些值,但只输出了空格。我的机器运行的是Ubuntu 12.04 LTS。在一些网站上看到,通常用于检查是否为root用户等,但无法得到明确的区别。
EUID不同于UID。这两个参数在脚本的什么上下文中使用?
我尝试通过echo "UID is $UID and EUID is $EUID"
获取这些值,但只输出了空格。我的机器运行的是Ubuntu 12.04 LTS。在一些网站上看到,通常用于检查是否为root用户等,但无法得到明确的区别。
当程序以 set-uid 方式运行时,它们是不同的。有效用户 ID 是您切换到的用户,而原始用户 ID 是初始的用户。
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
echo $UID
要获取当前进程的有效用户ID(EUID),请使用以下命令:echo $EUID
在Bash脚本中,您可以根据需要使用这些变量来进行条件检查或执行不同的操作。 - ikwyl6EUID
和UID
变量仅在bash
和zsh
中可用。 - SebMa
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