Unix Proc Directory

时间:2008-09-18 03:28:52

标签: linux unix procfs

我正在尝试查找包含当前用户ID的虚拟文件。我被告知我可以在proc目录中找到它,但不太确定哪个文件。

7 个答案:

答案 0 :(得分:8)

您实际上需要/proc/self/status,它会为您提供有关当前执行过程的信息。

以下是一个例子:

$ cat /proc/self/status
Name:   cat
State:  R (running)
Tgid:   17618
Pid:    17618
PPid:   3083
TracerPid:      0
Uid:    500 500 500 500
Gid:    500 500 500 500
FDSize: 32
Groups: 10 488 500 
VmPeak:     4792 kB
VmSize:     4792 kB
VmLck:         0 kB
VmHWM:       432 kB
VmRSS:       432 kB
VmData:      156 kB
VmStk:        84 kB
VmExe:        32 kB
VmLib:      1532 kB
VmPTE:        24 kB
Threads:    1
SigQ:   0/32268
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
Cpus_allowed:   00000003
Mems_allowed:   1
voluntary_ctxt_switches:    0
nonvoluntary_ctxt_switches: 3

您可能想查看Uid和Gid行上的第一个数字。您可以通过查看/etc/passwd查找哪些uid号码映射到哪个用户名,或调用相关函数将uid映射到您正在使用的任何语言的用户名。

理想情况下,您只需致电系统调用getuid()查找此信息,通过查看/proc/来实现这一点就会适得其反。

答案 1 :(得分:6)

为什么不使用“id -u”?

答案 2 :(得分:3)

我不确定在/proc中是否可以找到。您可以尝试使用getuid()函数或$USER环境变量。

答案 3 :(得分:3)

据我所知,/proc特定于Linux,一般不在UNIX中。如果您真的只想要当前的UID,请使用getuid()geteuid()功能。

如果您知道自己将使用Linux,则可以在/proc/self/*下浏览层次结构,它包含有关当前进程的各种信息。请记住/proc是“神奇的”,它是内核服务的虚拟文件系统,内容是在您请求时动态生成的。因此,它可以返回特定于当前流程的信息。

例如,尝试以下命令:cat /proc/self/status

答案 4 :(得分:2)

最有可能的是,您要么检查$USER环境变量。其他选项包括getuidid -u,但搜索/proc肯定不是最好的操作方法。

答案 5 :(得分:1)

/proc/process_id/status(至少在Linux上),你会发现这样的一行:

Uid:      1000    1000    1000    1000

这会告诉您该进程正在其帐户下的用户的uid。

但是,要查找当前进程的进程ID,您需要进行系统调用,然后您也可以调用getuid直接获取uid。

编辑:啊,/proc/self/status ...每天都在学习新东西!

答案 6 :(得分:0)

您正在寻找的东西可能在环境变量中。检查环境变量时,需要注意所使用的shell。 bash使用“UID”,而tcsh使用“uid”和*nix案例事项。我还发现tcsh设置了“gid”,但我无法在bash中找到匹配的变量。