注册 登录
编程论坛 Linux教室

id问题

幸福终点站 发布于 2012-10-28 12:48, 1786 次点击
id -a root 是什么意思啊?
11 回复
#2
madfrogme2012-10-28 13:41
登录linux 系统,你需要一个用户名和密码

他们分别存储在/etc/passwd 和 /etc/shadow文件中

登录程序比较你输入的密码和/etc/shadow 中被加密过的密码

如果相同,则登录成功,这是对linux 内核来说,

你就变成了一个数字而已,而你要获得你的用户信息的话

就可以用 id 命令, root 的id 都是0 , root 的权限是最高的

任何事情都可以做

这里还有一个effective user id 问题, 实效用户id

这是说明当前进程真正是用怎样的访问权限运行这个进程的

比如

$ id  -u
1000

显示你的id 为1000

但如果

$ sudo id -u  (在你输入root 密码之后,会显示 0)
0

这时候的0 说明了, 你是用root权限运行当前程序的
#3
幸福终点站2012-10-28 13:48
我想知道:id root 和id -a root 两条语句的区别是什么
#4
madfrogme2012-10-28 14:01
回复 3楼 幸福终点站
-a     ignore, for compatibility with other versions

貌似输出没有不同

不理解,愿楼主不懈努力, 查明真相,拿来分享

这个问题值得深入探讨
#5
幸福终点站2012-10-28 14:10
嗯,我也查了好多资料,也没有查到有什么不同。
不过很谢谢你!
#6
madfrogme2012-10-28 14:16
不清楚id命令在哪个包里,把包下载看代码里对a选项怎么处理的就不用翻各种资料了,佩服楼主这种geek精神
#7
幸福终点站2012-10-28 14:31
就是在包里查过了,才去查别的资料的。我查到的是Unix和linux里给的id中-a的功能不相同,
#8
madfrogme2012-10-28 14:43
在linux中看info id中的解释根本没有-a选项,

所以man id中-a 写的是ignore,忽略,

因为linux中id命令本身就是打印所有信息all,

这和unix中的id -a 选项的解释all 是一个效果,

所以linux中的id -a选项是无意义的,

只是保持和unix的id命令的一致性,compatibility而已。

你觉得我说的对不对

[ 本帖最后由 madfrogme 于 2012-10-28 16:04 编辑 ]
#9
pangding2012-10-29 10:39
回复 8楼 madfrogme
是这个意思。

有些在其它系统下写的脚本可能会用 id -a 这种写法,如果这个版本的 id 没有这个选项在执行的时候就会报错。为了让老版本的脚本或者其它类 unix 系统下写的脚本在 linux 下也能执行,常用的方法就是看见这个选项假装没看见,但不报错。源码一般就是在分析参数的循环里加个 continue 就行了吧。这种 ignore 的东西,一般不是让人用的。
#10
madfrogme2012-10-29 11:05
以下是引用pangding在2012-10-29 11:39:37的发言:

是这个意思。

有些在其它系统下写的脚本可能会用 id -a 这种写法,如果这个版本的 id 没有这个选项在执行的时候就会报错。为了让老版本的脚本或者其它类 unix 系统下写的脚本在 linux 下也能执行,常用的方法就是看见这个选项假装没看见,但不报错。源码一般就是在分析参数的循环里加个 continue 就行了吧。这种 ignore 的东西,一般不是让人用的。

哈哈,我也是突然间想到的,不过觉得把力气花在这个选项上有点不值得,虽然看id还有其他比如像-z一样选项很难理解,看源码估计会明白一些吧,虽然我不会去钻研这个问题了。
#11
幸福终点站2012-10-30 00:07
我同意你的说法,个人也认为不需要在这方面花费太大的力气,只是别人问我的这个问题,发现回答不上来,所以想弄明白到底有什么区别。
#12
幸福终点站2012-10-30 00:09
回复 8楼 madfrogme
恩,同意你的说法
1