Chinaunix

标题: 请问su后如何取得当前的用户名 [打印本页]

作者: wangfeiyue    时间: 2008-08-30 13:03
标题: 请问su后如何取得当前的用户名
如题,普通用户登录,shell中su成root, who am i仍然显式的是普通用户名。如何知道是root登录或得到用户名?

不管shell脚本或程序
作者: cuci    时间: 2008-08-30 13:21
su 时候加 -
作者: wangfeiyue    时间: 2008-08-30 13:37
原帖由 cuci 于 2008-8-30 13:21 发表
su 时候加 -


还不行

[Cary: linux_dgb]$su -
口令:
[root@localhost ~]# who am i
Cary     pts/1        2008-08-30 08:02
[root@localhost ~]#
作者: cuci    时间: 2008-08-30 13:47
whoami and id shows your effective UID name
who am i shows your real UID name
For example:
You login as user user1. So your real UID name is user1.
You then su to user2. So your effective UID name is user2

whoami and id will show you as user2
who am i will show you as user1
作者: wangfeiyue    时间: 2008-08-30 13:52
原帖由 cuci 于 2008-8-30 13:47 发表
whoami and id shows your effective UID name
who am i shows your real UID name
For example:
You login as user user1. So your real UID name is user1.
You then su to user2. So your effective U ...


佩服,没想到竟然是两个不同的命令。
作者: wangfeiyue    时间: 2008-08-30 13:58
发现这个区别太好了,一下子明白了什么是effective,什么是real
作者: cuci    时间: 2008-08-30 13:58
其实,我最好的老师,还是google,呵呵
很多东西都由那而来
作者: kenduest    时间: 2008-08-30 15:35
原帖由 wangfeiyue 於 2008-8-30 13:03 發表
如題,普通用戶登錄,shell中su成root, who am i仍然顯式的是普通用戶名。如何知道是root登錄或得到用戶名?

不管shell腳本或程序


這邊可能有幾個東西要確認清楚。

首先 who am i 與 whoami 是不同的命令與輸出,所以不可以混為一談。

whoami 是顯示 effective user id,而你使用 who am i 是顯示目前該自己用的終端機該使用者資訊。用 su 命令切換當然 terminal 不會變動,所以 who am i 一定還是看到原本登入的帳號資訊。

另外不管是 su 還是 su -,real 與 effective user id 都會切換過去,所以 2 樓回答有誤導的嫌疑。是否多傳入 - 參數,只是表示啟動 shell 是否用 login shell 方式啟動而已。

所以拉回來問題,原作者你只是用 "whoami" 這個指令就可以知道目前切換過去目的的身份就可以了。

--
作者: wangfeiyue    时间: 2008-08-30 17:22
原帖由 kenduest 于 2008-8-30 15:35 发表


這邊可能有幾個東西要確認清楚。

首先 who am i 與 whoami 是不同的命令與輸出,所以不可以混為一談。

whoami 是顯示 effective user id,而你使用 who am i 是顯示目前該自己用的終端機該使用者資訊 ...


其实我也没用su -. 我开始试了带上-仍不行。后来别人看了我的操作列出了whoami,who am i的区别后,我就试的是 su(不带-)和whoami.

至于带-有什么用,我也没多看。你说的也是对的。

[ 本帖最后由 wangfeiyue 于 2008-8-30 17:45 编辑 ]
作者: vermouth    时间: 2008-08-30 17:38
可以用 id 显示当前操作的是……
作者: wangfeiyue    时间: 2008-08-30 17:47
原帖由 vermouth 于 2008-8-30 17:38 发表
可以用 id 显示当前操作的是……

谢谢,试过了,这也是一个方法
作者: MMMIX    时间: 2008-08-30 20:56
原帖由 kenduest 于 2008-8-30 15:35 发表

首先 who am i 與 whoami 是不同的命令與輸出,所以不可以混為一談。

在 Unix/Linux 下,空格用来分隔命令行中的各个单词(除非空格在引号中或者使用 \ 转义),因此 who am i 执行的是 who, am i 是其参数(argument),这和执行 who 时加 -m 选项(option) 是一样的,也即 who am i 和 who -m 效果相同。

而你使用 who am i 是顯示目前該自己用的終端機該使用者資訊。

准确的说是和 stdin  联系的 hostname and user 信息。

另外不管是 su 還是 su -,real 與 effective user id 都會切換過去,

嗯,这个可以通过 id 验证。
所以拉回來問題,原作者你只是用 "whoami" 這個指令就可以知道目前切換過去目的的身份就可以了。

还是用 id 为好,effective userid 和 real userid 不一致也是可能的。
作者: MMMIX    时间: 2008-08-30 20:57
原帖由 wangfeiyue 于 2008-8-30 17:47 发表

谢谢,试过了,这也是一个方法

This is the true way, the only way.
作者: jerrywjl    时间: 2008-08-30 21:34
自己去man吧,无非就是这么多东西。
作者: wangfeiyue    时间: 2008-08-30 23:43
原帖由 jerrywjl 于 2008-8-30 21:34 发表
自己去man吧,无非就是这么多东西。


没办法,当时碰到了想在脚本中判断运行他的用户是不是root的问题,不知道有个id命令,又试了个不合适的who am i这个命令。能man的只有su了,而su的man也看不到什么相关参数。在发此帖前也用“取得当前用户名 linux”也在baidu.com搜过了。


这些看起来简单的问题对新手来说不知道man谁就变得很难了,当然大部时候分能直接从baidu,google上找到答案。而发在cu上也可以增加cu的人气。

[ 本帖最后由 wangfeiyue 于 2008-8-30 23:45 编辑 ]
作者: kenduest    时间: 2008-08-30 23:54
原帖由 wangfeiyue 於 2008-8-30 23:43 發表
沒辦法,當時碰到了想在腳本中判斷運行他的用戶是不是root的問題,不知道有個id命令,又試了個不合適的who am i這個命令。能man的只有su了,而su的man也看不到什麼相關參數。在發此帖前也用「取得當前用戶名 ...


為何很困難呢 ??

若你只是要判斷目前登入帳號身份是否有 root 身份,shell script 不就類似是這樣判斷 ?


  1. if [ "$(whoami)" == "root" ]; then
  2.    echo "You are root"
  3. else
  4.    echo "You are not root"
复制代码


whoami 預設是輸出顯示 effective user id,所以只要是 root 那就表示具備有特權。

若是要使用 id 判斷的話也可以,預設還是輸出 effective id 資訊,所以也是可以判斷。 若你認為 EUID 要為 0 更保險,那就這樣用:


  1. if [ "$(id -u)" -eq "0" ]; then
  2.    echo "You are root"
  3. else
  4.    echo "You are not root"
复制代码


若你是 c/c++ coding 的項目,那請使用 geteuid() 取得 return code,為 0 就表示 effective user id 數值為 0。

所以問題繞回來其實不需跑這樣遠。

--
作者: wangfeiyue    时间: 2008-08-31 02:15
原帖由 kenduest 于 2008-8-30 23:54 发表


為何很困難呢 ??

若你只是要判斷目前登入帳號身份是否有 root 身份,shell script 不就類似是這樣判斷 ?


if [ "$(whoami)" == "root" ]; then
   echo "You are root"
else
   echo "You are no ...


我觉得不管是谁,在回帖的时候都应该先把别人的帖子仔细读读,看看别人说的是什么意思,那是对别人的尊重。
你技术方面回答的很对,但是我不能肯定在引用我的帖子时是否明白了我在说什么。

别人说man上都有呢,建议自己man一下。然后我给那个人说我当时的情况是不知道有id, whoami.这两个命令。又因为看到who am i不理su,觉得奇怪。也完全没想到还有一个whoami. 所以我没有一个man的目标。


"為何很困難呢 ??

若你只是要判..."

版主你分析问题的前提是我像你一样什么whoami, id命令都知道了。知道关键命令(即使没用过)我写脚本也不会有什么困难的。


我知道大家时间都很宝贵,特别是版主,但是既然咱们参与讨论,就应该能耐着性子读完别人的帖子再补充自己的观点。


以前经历过一次面试(张扬路那里的永凯软件),在给面试官讲解自己学生时代编的一个程序怎么怎么样的时候,那个面试官直接打断我的话说“你那算什么...,我们这的都是...".当时的感觉除了面试会失败外,也感觉到那个老总不容易沟通。看到你的这句话“為何很困難呢”,想起了那次面试。所以此时如果话说的严重了,真对的是一种现象,而不是你个人。

[ 本帖最后由 wangfeiyue 于 2008-8-31 02:36 编辑 ]
作者: wangfeiyue    时间: 2008-08-31 02:20
不过从kenduest版主恢复问题的格式看,技术上还是很认真的。
作者: kenduest    时间: 2008-08-31 02:23
我想您可能誤解我的意思

前面回文內已經不少文章告知可以用 id 與 whoami 了,這已經是提供一個答案與方向,也有談到 "who am i" 這個與 "whoami" 是不同的命令使用。而後續您回文內還是說有點問題,所以才再次貼了一篇直接使用 id 與 whoami 這類例子給你參考,希望能夠透過這些現成的代碼告訴您判斷不複雜。

文章內如有冒犯請多見諒。

--

[ 本帖最后由 kenduest 于 2008-8-31 02:28 编辑 ]
作者: wangfeiyue    时间: 2008-08-31 02:38
标题: 回复 #19 kenduest 的帖子
哈哈,版主还在,我也是个人情绪。
作者: wangfeiyue    时间: 2008-08-31 02:53
原帖由 kenduest 于 2008-8-31 02:23 发表
我想您可能誤解我的意思

前面回文內已經不少文章告知可以用 id 與 whoami 了,這已經是提供一個答案與方向,也有談到 "who am i" 這個與 "whoami" 是不同的命令使用。而後續您回文內還是說有點問題,所以 ...



当然,在看到大家回复后肯定没问题了。

如果你真心帮别人回答了问题,而得到别人的回复竟然是对你的不满。我也有过这样的感觉。真心说一句我能够进步离不开你们的帮助。
作者: lzs45    时间: 2008-08-31 14:05
不错,看了大家的讨论对id whoami who这三个命令又有了更深的认识
作者: jeff1115    时间: 2008-09-01 09:46
标题: 回复 #1 wangfeiyue 的帖子
你id一下就可以了撒




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2