宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「あの退職者が作ったファイル、どこに残っているか調べてほしい」
サーバー監査やユーザー棚卸しの現場で頻繁に出てくる依頼です。

この記事では、所有者(ユーザ)名でファイルを検索してディレクトリパスを表示する方法を、find -user の基本から、グループ検索(-group)、UID直接指定(-uid)、ホームディレクトリ外のユーザー資産を洗い出す実務手順まで解説します。
RHEL 9 / Rocky Linux 9 / Ubuntu 24.04 LTS で動作確認済みです。

この記事のポイント

・find -user ユーザ名 で所有者を指定してファイル検索できる
・システム全体(/)を検索する時はroot権限が必要
・退職者・削除済みUIDの残存ファイルは -nouser で洗い出す
・所有者とグループを同時に絞り込むなら -user と -group を組み合わせる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

所有者名(ユーザ名)でファイルを検索する基本: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

ユーザ pakira が所有するファイルとディレクトリのパスが、すべて表示されました。
/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

ただし2>/dev/null で完全に捨てるのは、本当に権限不足以外のエラー(壊れたシンボリックリンク等)も見えなくなるため、調査用途では一度は普通に実行してエラー内容を確認しておくのがおすすめです。

所有者だけでなくグループでも検索する:find -group の使い方

所有者ではなく、グループでファイルを検索したい場面もあります。
共有ディレクトリでチーム全員の書き込み権限を確認したい時などです。

# グループ developers が所有するファイルを検索 # find /var/share -group developers # 所有者とグループ両方を指定(AND条件) # find / -user pakira -group developers 2>/dev/null

-user と -group を並べると暗黙のAND条件になり、両方を満たすファイルだけが対象になります。
OR条件で「ユーザ pakira または ユーザ taro」を検索したい場合は -o(オア)演算子を使います。

# 所有者が pakira または taro のファイルを検索 # find / \( -user pakira -o -user taro \) 2>/dev/null

\( \) でグループ化するのを忘れると、-o の評価範囲がずれて意図しない結果になるので注意してください。

UIDで直接検索する:find -uid の使い方

ユーザ名ではなく、UID(数値)で検索することもできます。
/etc/passwd からユーザが削除された後、残ったファイルを洗い出す時にUID指定が役に立ちます。

# UID 1001 が所有するファイルを検索 # find / -uid 1001 2>/dev/null # UID範囲で検索(一般ユーザー領域 1000以上) # find / -uid +999 2>/dev/null

-uid +999 は「UIDが999より大きい」という意味で、結果として一般ユーザー(UID 1000以上)の所有ファイルが対象になります。
逆に -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 の結果と -nouser の結果を比較し、退職前後でファイル数が一致しているかを確認します。

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 はファイルのみ、-type d はディレクトリのみに結果を絞るオプションです。
ファイルを「どこに置いているか」だけを知りたい時は -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 (...大量のエラーが続く...)

対処法は3つあります。

sudo を付けて実行:root権限で実行すれば全ディレクトリを読めます。
2>/dev/null で抑制:エラーを捨てて結果だけ見ます。
検索範囲を限定:/home や /var など、読める範囲だけに絞ります。

# sudo で全範囲を検索 $ sudo find / -user pakira # /home 配下のみに限定 $ find /home -user pakira

監査用途であれば sudo find / -user ユーザ名 が標準的な実行方法です。

本記事のまとめ

所有者名(ユーザ名)でファイルを検索する 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

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。