andrewgazelka Asked: 2019-03-30 04:45:31 +0800 CST2019-03-30 04:45:31 +0800 CST 2019-03-30 04:45:31 +0800 CST 获取登录用户的工作目录 772 w列出所有登录的用户。有什么方法可以获取登录用户的工作目录? command-line 1 个回答 Voted Best Answer Stéphane Chazelas 2019-03-30T05:03:38+08:002019-03-30T05:03:38+08:00 当前工作目录是每个进程的属性,而不是用户的属性。 $pid在 Linux 上,您可以通过readlink()on/proc/$pid/cwd例如使用readlink/realpath命令或:a/ :A/ :Pglob 中的限定符来获取 id 进程的当前工作目录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(以超级用户权限运行命令)不是必需的,因为对该信息的访问不受那里限制。
当前工作目录是每个进程的属性,而不是用户的属性。
$pid
在 Linux 上,您可以通过readlink()
on/proc/$pid/cwd
例如使用readlink
/realpath
命令或:a
/:A
/:P
glob 中的限定符来获取 id 进程的当前工作目录zsh
。除非您是超级用户,否则这仅适用于您自己的进程(当前工作目录与进程当前正在访问的其他文件一样是潜在的敏感信息)。更便携,您可以使用
lsof
:然后,您可以将它与
-u user
而不是组合-p pid
以获取以该用户身份运行的所有进程的 cwd:在某些系统上,如 FreeBSD,
sudo
(以超级用户权限运行命令)不是必需的,因为对该信息的访问不受那里限制。