サーバー監査やユーザー棚卸しの現場で頻繁に出てくる依頼です。
この記事では、所有者(ユーザ)名でファイルを検索してディレクトリパスを表示する方法を、find -user の基本から、グループ検索(-group)、UID直接指定(-uid)、ホームディレクトリ外のユーザー資産を洗い出す実務手順まで解説します。
RHEL 9 / Rocky Linux 9 / Ubuntu 24.04 LTS で動作確認済みです。
この記事のポイント
・find -user ユーザ名 で所有者を指定してファイル検索できる
・システム全体(/)を検索する時はroot権限が必要
・退職者・削除済みUIDの残存ファイルは -nouser で洗い出す
・所有者とグループを同時に絞り込むなら -user と -group を組み合わせる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
所有者名(ユーザ名)でファイルを検索する基本:find -user の使い方
所有者名(ユーザ名)をキーにして特定のファイルを検索することができます。基本コマンドは find に -user オプションを付けて、検索したいユーザ名を指定するだけです。
システム全体を検索する場合は、権限不足でパーミッションエラーになるので、実行する際はroot権限が必要になります。
[pakira@Tiger ~]$ su - パスワード: [root@Tiger ~]# find / -user pakira /var/spool/mail/pakira /proc/1570 /proc/1570/task /proc/1570/task/1570 /proc/1570/task/1570/attr /proc/1570/net /proc/1570/attr /proc/1571 /home/pakira /home/pakira/.bashrc /home/pakira/.bash_profile /home/pakira/test_file.txt /home/pakira/test_file2.txt /home/pakira/.viminfo /home/pakira/test_file1.txt /home/pakira/.bash_history /home/pakira/.bash_logout
/home/pakira/ 配下だけでなく、/var/spool/mail/pakira(メールスプール)、/proc/ 配下のプロセス情報(実行中のpakiraプロセス)まで洗い出せます。
find -user 実行時の権限エラーを抑制する:2>/dev/null の使い方
一般ユーザーで find / -user を実行すると、読み取り権限のないディレクトリに対して「Permission denied」というエラーが大量に出力されます。本来の検索結果が見えにくくなるため、エラーだけ捨てる書き方を覚えておくと実務で便利です。
# Permission denied を捨てて結果のみ表示 $ find / -user pakira 2>/dev/null # 結果はファイル、エラーは別ファイルに保存 $ find / -user pakira >result.txt 2>error.txt
所有者だけでなくグループでも検索する:find -group の使い方
所有者ではなく、グループでファイルを検索したい場面もあります。共有ディレクトリでチーム全員の書き込み権限を確認したい時などです。
# グループ developers が所有するファイルを検索 # find /var/share -group developers # 所有者とグループ両方を指定(AND条件) # find / -user pakira -group developers 2>/dev/null
OR条件で「ユーザ pakira または ユーザ taro」を検索したい場合は -o(オア)演算子を使います。
# 所有者が pakira または taro のファイルを検索 # find / \( -user pakira -o -user taro \) 2>/dev/null
UIDで直接検索する:find -uid の使い方
ユーザ名ではなく、UID(数値)で検索することもできます。/etc/passwd からユーザが削除された後、残ったファイルを洗い出す時にUID指定が役に立ちます。
# UID 1001 が所有するファイルを検索 # find / -uid 1001 2>/dev/null # UID範囲で検索(一般ユーザー領域 1000以上) # find / -uid +999 2>/dev/null
逆に -uid -1000 とすると「UIDが1000未満」、つまりシステムユーザーの所有ファイルが対象です。
退職者・削除済みユーザーの残存ファイルを洗い出す:-nouser / -nogroup
ユーザを削除(userdel)した後、ホームディレクトリの削除を忘れて、UIDだけが残ったファイルがシステム内に散らばっていることがあります。セキュリティ監査や容量整理で必ず確認すべき項目です。
このようなファイルは -nouser オプションで一発で洗い出せます。
# /etc/passwd に存在しないUIDの所有ファイルを検索 # find / -nouser 2>/dev/null # /etc/group に存在しないGIDの所有ファイルを検索 # find / -nogroup 2>/dev/null # 両方を同時に検索 # find / \( -nouser -o -nogroup \) 2>/dev/null
# 結果を保存してから削除判断 # find / -nouser 2>/dev/null >/tmp/nouser_files_$(date +%Y%m%d).txt # wc -l /tmp/nouser_files_*.txt
find -user の検索結果からディレクトリパスだけ取り出す:dirname と sort -u の組み合わせ
find -user の結果はファイルとディレクトリが混在するため、「ユーザがどのディレクトリ配下にファイルを置いているか」というディレクトリパス一覧だけが欲しい場面では、dirname と sort -u を組み合わせます。# ユーザ pakira の所有ファイルが存在するディレクトリ一覧 # find / -user pakira -type f 2>/dev/null | xargs -I{} dirname {} | sort -u # -type d でディレクトリのみに絞る # find / -user pakira -type d 2>/dev/null
ファイルを「どこに置いているか」だけを知りたい時は -type f + dirname の組み合わせが扱いやすく、ディレクトリ自体の構造を知りたい時は -type d を使い分けます。
「find: '/path': Permission denied」が所有者検索で出た時の対処
一般ユーザーで find / を実行すると、root権限が必要なディレクトリ(/root、/var/spool/cron など)に対して以下のようなエラーが出ます。$ find / -user pakira find: '/root': Permission denied find: '/var/spool/cron': Permission denied (...大量のエラーが続く...)
・sudo を付けて実行:root権限で実行すれば全ディレクトリを読めます。
・2>/dev/null で抑制:エラーを捨てて結果だけ見ます。
・検索範囲を限定:/home や /var など、読める範囲だけに絞ります。
# sudo で全範囲を検索 $ sudo find / -user pakira # /home 配下のみに限定 $ find /home -user pakira
本記事のまとめ
所有者名(ユーザ名)でファイルを検索する find -user は、ユーザ棚卸し・退職者対応・セキュリティ監査で頻繁に使うコマンドです。ユーザ名指定だけでなく、UID指定、グループ指定、削除済みユーザーの残存ファイル検索まで覚えておくと現場で役立ちます。
| やりたいこと | コマンド |
|---|---|
| ユーザ名で所有ファイルを検索 | find / -user ユーザ名 |
| UIDで所有ファイルを検索 | find / -uid UID番号 |
| グループ名で所有ファイルを検索 | find / -group グループ名 |
| 所有者とグループ両方で絞り込み | find / -user ユーザ名 -group グループ名 |
| 削除済みUIDの残存ファイルを検索 | find / -nouser |
| 権限エラーを抑制して実行 | find / -user ユーザ名 2>/dev/null |
| ファイル所在のディレクトリ一覧を取得 | find / -user ユーザ名 -type f | xargs -I{} dirname {} | sort -u |
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:renameコマンドでファイル名を一括変更する方法|正規表現・連番・拡張子変更の実践例
- 前のページへ:ddコマンドでディスクコピー・バックアップする方法|ISOイメージ作成やディスク消去も
- この記事の属するカテゴリ:ファイル・ディレクトリ管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます