Unix Proc目录

我正在尝试查找包含当前用户标识的虚拟文件。 有人告诉我可以在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环境变量。 其他选项包括getuidid -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中找到匹配的变量。