获取登录用户的工作目录

and*_*lka 0 command-line

w列出所有登录的用户。有没有办法获取登录用户的工作目录?

Sté*_*las 8

当前工作目录是每个进程的属性,而不是用户的属性。

在Linux上,你可以得到的id进程的当前工作目录$pid做一个readlink()/proc/$pid/cwd使用,例如readlink/realpath命令或:a/ :A/:P在水珠预选赛zsh。除非您是超级用户,否则这仅适用于您自己的进程(当前工作目录与进程当前正在访问的其他文件一样是潜在的敏感信息)。

$ ps
  PID TTY          TIME CMD
 9467 pts/1    00:00:00 zsh
14074 pts/1    00:00:00 ps
$ readlink /proc/9467/cwd
/usr/local
$ printf '%s\n' /proc/9467/cwd(:P)
/usr/local
Run Code Online (Sandbox Code Playgroud)

更便携,您可以使用lsof

$ lsof -ap 9467 -d cwd
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
zsh     9467 chazelas  cwd    DIR  253,0     4096 786604 /usr/local
Run Code Online (Sandbox Code Playgroud)

然后,您可以将它与-u user而不是结合-p pid以获取以该用户身份运行的所有进程的 cwd:

sudo lsof -au user -d cwd
Run Code Online (Sandbox Code Playgroud)

在某些系统上,例如 FreeBSD,sudo不需要(以超级用户权限运行命令),因为在那里访问该信息不受限制。