我正在尝试查找包含当前用户ID的虚拟文件。我被告知我可以在proc目录中找到它,但不太确定哪个文件。
答案 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
环境变量。其他选项包括getuid
和id -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中找到匹配的变量。