获取登录用户的工作目录

获取登录用户的工作目录

w列出所有登录的用户。有什么方法可以获取登录用户的工作目录吗?

答案1

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

$pid在 Linux 上,您可以通过执行readlink()on来获取 id 进程的当前工作目录,例如/proc/$pid/cwd使用readlink/realpath命令或中的:a// glob 限定符。除非您是超级用户,否则这只适用于您自己的进程(当前工作目录(如进程当前访问的其他文件一样)是潜在的敏感信息)。:A:Pzsh

$ 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

更方便地,您可以使用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

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

sudo lsof -au user -d cwd

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

相关内容