w
ログインしたすべてのユーザーを一覧表示します。ログインしたユーザーの作業ディレクトリを取得する方法はありますか?
答え1
現在の作業ディレクトリは、ユーザー属性ではなくプロセス固有の属性です。
$pid
Linuxでは、たとえば/コマンドまたは// glob修飾子を使用してreadlink()
実行して、プロセスの現在の作業ディレクトリIDを取得できます。スーパーユーザーでない限り、これは自分のプロセスでのみ機能します(現在の作業ディレクトリは、プロセスが現在アクセスしている他のファイルと同様に潜在的に機密情報です)。/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
より便利には、次のものを使用できます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
この情報へのアクセスが制限されないため、これは必要ありません(スーパーユーザー権限でコマンドを実行)。