我正在尝试查找包含当前用户标识的虚拟文件。 有人告诉我可以在proc目录下find它,但不太清楚哪个文件。
你实际上需要/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/
来反过来就可以了。
为什么不使用“ id -u
”?
据我所知, /proc
是特定于Linux的,一般不在UNIX中。 如果你真的只想要当前的UID,使用getuid()
或geteuid()
函数。
如果您知道您只会在Linux上运行,您可以浏览/proc/self/*
下的层次结构,它包含有关当前进程的各种信息。 请记住/proc
是“神奇的”,它是内核提供的虚拟文件系统,内容是在请求它的地方动态生成的。 因此它可以返回当前进程特有的信息。
例如,试试这个命令: cat /proc/self/status
我不确定可以在/proc
找到。 您可以尝试使用getuid()
函数或$USER
环境变量。
最有可能的是,你要么检查$USER
环境变量。 其他选项包括getuid
和id -u
,但搜索/proc
当然不是最好的操作方法。
在/proc/ process_id /status
(至少在Linux上)你会找到这样一行:
Uid:1000 1000 1000 1000
这告诉你在谁的帐户进程正在运行的用户的uid。
但是,要找出当前进程的进程ID,您需要一个系统调用,然后您可以直接调用getuid
来获取uid。
编辑:啊, /proc/self/status
…每天都在学新东西!
你正在寻找的东西可能是环境变量。 当你检查环境变量时,你需要小心你正在使用的shell。 bash使用“UID”,而tcsh使用“uid”和*nix
情况。 我也发现tcsh设置“gid”,但我无法在bash中找到匹配的变量。