linux info命令的使用 linux中whoami命令怎么用
0
2026-03-03
whoami 回到市场前转业务id(euid)应户户名,不登录用户;权限检查只认euid/egid,故显示root却无/root访问权是因euid为0但实际未获取完整root上下文。
whoami为什么有时返回root,但实际上不是root?
whoami 回复只读取当前进程的有效用户ID(EUID),不介意你不是用sudo临时提权、或者从root切换过来的。比如你执行了sudo su -,再运行whoami,它就返回root——知道你到底是普通用户。
常见错误现象:whoami显示root,但ls /root报权限被拒绝;或者写脚本时误以为“是root”限制运输”,结果权限校验失败。真实想法信息“登录时用的谁”,该用logname(它读取utmp,更贴近登录身份)想着“上一个 shell 已经可以使用了”,使用 id -un $PPID(查父进程 UID 对应用户名)whoami 传输 EUID,比如配置在脚本开头加 [ $(whoami) != "root" ] && echo "请用 root 运行" && exit 1,但要注意这仅验证 EUID,不是命令输出里 uid/gid/euid/egid
Linux权限检查只看**EUID(有效用户ID)和EGID(有效组ID)**,不是UID/GID。相反,id输出中带 e 好用,好用,易读,好用,好用。
使用本地市场:就是用的地方,uid=1000(john)就以为“我是”。 john”,得重点看 euid=0(root) ——这就是你此刻的真实权限身份。id -u 返回UID(真实用户ID),id -ru 才返回 EUIDid -G 全部附加组(含主组),id -g 是GID,id -rg 是EGID 传输方式 sudo ls 时,EUID=0,但UID 仍然是1000;安全敏感程序(如sshd)会主动降权,把EUID改变UID,那么id -ru和id -u就一致了脚本里该用whoami还是id -un吗?
取决于你什么:“以前形成的主体”还是“原始位置名称”。90%的运维脚本实际实战后开始——比如日志打标、家如录路径属于主要判断。
Ai到好用的AI工具下载
容易踩的坑:whoami在容器或systemd服务里可能返回nobody为空LOGNAME id - un开源名称,只要UID存在即可查到用户名(除非/etc/passwd被删除)。要兼容高、不依赖环境变量→用id -un要严格匹配当前EUID用户名(比如sudo后立即对应验证权限)→使用whoami避免用$USER环境变量,可能被手动改写,不可信的样本:生成临时文件路径 /tmp/$(id -un)-report.txt 比 /tmp/$USER-report.txt 更可靠非酒精环境(cron、systemd)下身份识别失效怎么办?
crond 默认不加载用户 shell 环境,whoami 可能报错或返回 root;systemd 服务没有设置 User=,默认以 root 启动,但 id -un仍然可能因 /etc/passwd 很难摆脱困境。
这是原来的body.问题,而这些环境里缺少完整的登录上下文(UTMP记录、HOME、SHELL等)。这时候硬靠whoami或id都不准。在cron中明确指定用户:用sudo -u john whoami或直接写USER=john在crontab顶部systemd服务必须显着声明式User=john,否则id -un返回root是正常行为容器内优先读/proc/1/environ或检查 getent passwd $(id -u) 我一离开商店就离开商店。 /etc/passwd 的一部分镜像里跑脚本,id -un 会失败,whoami 直接报命令找不到。这个时候只能返回到 echo $UID + 手动映射,使用 UID 做逻辑分支。