5

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

4

7 回答 7

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 行上的第一个数字。您可以通过查看来查找哪些 uid 数字映射到了哪个用户名/etc/passwd,或者调用相关函数以将 uid 映射到您使用的任何语言的用户名。

理想情况下,您只需调用系统调用getuid()来查找此信息,通过查看来做会/proc/适得其反。

于 2008-09-18T03:41:03.047 回答
5

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

于 2008-09-18T03:32:52.410 回答
3

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

于 2008-09-18T03:32:28.403 回答
3

据我所知,/proc它是特定于 Linux 的,而不是一般的 UNIX。如果您真的只想要当前的 UID,请使用getuid()orgeteuid()函数。

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

例如,试试这个命令:cat /proc/self/status

于 2008-09-18T03:38:20.573 回答
1

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

于 2008-09-18T03:36:06.927 回答
1

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

用户ID:1000 1000 1000 1000

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

但是,要找出当前进程的进程id,你需要一个系统调用,然后你也可以getuid直接调用来获取uid。

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

于 2008-09-18T03:40:06.137 回答
0

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

于 2008-09-18T14:40:39.950 回答