w
列出所有登录的用户。有什么方法可以获取登录用户的工作目录吗?
答案1
当前工作目录是每个进程的属性,而不是用户的属性。
$pid
在 Linux 上,您可以通过执行readlink()
on来获取 id 进程的当前工作目录,例如/proc/$pid/cwd
使用readlink
/realpath
命令或中的:a
// glob 限定符。除非您是超级用户,否则这只适用于您自己的进程(当前工作目录(如进程当前访问的其他文件一样)是潜在的敏感信息)。: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
更方便地,您可以使用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
不需要(以超级用户权限运行命令),因为对该信息的访问不受限制。