ログインしたユーザーの作業ディレクトリを取得します。

ログインしたユーザーの作業ディレクトリを取得します。

wログインしたすべてのユーザーを一覧表示します。ログインしたユーザーの作業ディレクトリを取得する方法はありますか?

答え1

現在の作業ディレクトリは、ユーザー属性ではなくプロセス固有の属性です。

$pidLinuxでは、たとえば/コマンドまたは// glob修飾子を使用してreadlink()実行して、プロセスの現在の作業ディレクトリIDを取得できます。スーパーユーザーでない限り、これは自分のプロセスでのみ機能します(現在の作業ディレクトリは、プロセスが現在アクセスしている他のファイルと同様に潜在的に機密情報です)。/proc/$pid/cwdreadlinkrealpath:a: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この情報へのアクセスが制限されないため、これは必要ありません(スーパーユーザー権限でコマンドを実行)。

関連情報