find -groupオプションの使い方を解説!初心者でもできる所有グループによるファイル検索
生徒
「Linuxで、特定のグループが所有しているファイルだけを探す方法ってありますか?」
先生
「あるよ!findコマンドの-groupオプションを使えば、所有グループを指定して検索できるんだ。」
生徒
「えっ、所有グループって何ですか?」
先生
「いい質問だね!それじゃあ、まずは『所有グループ』とは何か、そしてfind -groupの基本的な使い方を、順番に説明していくね。」
1. 所有グループとは?
Linux(リナックス)の世界では、すべてのファイルやフォルダ(ディレクトリ)に「誰が持ち主か」という情報が記録されています。これをパーミッション(権限)管理と呼びます。この持ち主には、大きく分けて所有ユーザーと所有グループの2種類が存在します。
イメージで理解しよう!
例えば、学校の「図書室の本」を想像してみてください。
- 所有ユーザー:その本を現在借りている「あなた」個人
- 所有グループ:あなたが所属している「1年A組」というクラス全体
このように設定することで、「1年A組の人なら誰でも読んでOK(読み取り権限)」や「1年A組の係の人だけが書き込んでOK(書き込み権限)」といった、チーム単位での管理が可能になります。
実際に、自分の環境でファイルの詳細を確認してみましょう。ls -lというコマンドを使うと、現在のディレクトリにあるファイルが、どのグループに属しているかを表示できます。
ls -l
-rw-r--r-- 1 taro baseball 1024 Feb 3 12:00 members.txt
上記の実行結果を見てください。taroが所有ユーザー(個人)で、その隣にあるbaseballが所有グループです。この「members.txt」というファイルは、野球部のメンバー全員で共有されている、ということがわかりますね。
ビジネスの現場では、「エンジニア部門」「営業部門」「人事部門」といった組織ごとにグループを作成し、機密情報が他部署から見えないように制御するのが一般的です。この記事で学ぶ-groupオプションは、まさにこの「組織やチーム」で管理されているファイルを見つけ出すために欠かせない機能なのです。
2. find -groupオプションの基本
findコマンドは、膨大なファイルの中から目的のものを瞬時に探し出せる強力なツールです。その中でも-groupオプションは、特定の所有グループに紐付いたファイルを検索する際に使用します。
基本となる書き方は非常にシンプルです。検索を始めたい場所(ディレクトリ)を指定し、その後に-group グループ名と続けるだけです。まずは、もっとも基本的な検索の例を見てみましょう。
実践的な具体例:開発チームのファイルを探す
たとえば、システム開発チームのメンバーで共有している「developers」グループが所有するファイルを探したい場合は、次のように入力します。プログラミング未経験の方でも、検索キーワードを指定する感覚で実行できます。
find /home/project -group developers
/home/project/main.py
/home/project/database.conf
/home/project/assets/logo.png
このコマンドを実行すると、/home/projectというフォルダの中(その下の階層も含む)をすべてチェックし、所有グループがdevelopersに設定されているファイルだけがリストアップされます。
もし、カレントディレクトリ(現在自分が作業している場所)から検索したい場合は、パスの部分に「.(ドット)」を使って、次のように実行することも可能です。
find . -group developers
./script.sh
./README.md
このように、-groupオプションを活用することで、特定のプロジェクトや部署ごとに管理されているファイルを一括で見つけ出せるようになります。複数のユーザーでサーバーを利用している環境では、非常に効率的な検索手法です。
3. グループ名がわからないときは?
「そもそも、どんなグループがあるのかわからない…」というときは、/etc/groupというファイルを見てみましょう。ここには、Linuxに登録されているすべてのグループ名が一覧で記載されています。
cat /etc/group
root:x:0:
daemon:x:1:
developers:x:1001:user1,user2
sales:x:1002:user3,user4
このように、グループ名(例:developers、sales)が表示されます。
4. 自分が所属するグループを確認するには?
自分がどのグループに所属しているかを調べたい場合は、groupsコマンドを使ってみましょう。
groups
user1 wheel developers
この例では、user1というユーザーはwheelとdevelopersという2つのグループに所属していることがわかります。
5. ファイルの所有グループを確認するには?
特定のファイルがどのグループに属しているかを確認したいときは、ls -lコマンドを使いましょう。
ls -l sample.txt
-rw-rw-r-- 1 user1 developers 2048 Sep 16 10:00 sample.txt
developersと表示されている部分が「所有グループ」です。
6. グループID(GID)で検索する方法
-groupオプションでは、グループ名だけでなくGID(Group ID)を指定することも可能です。GIDは、グループごとに割り当てられた数字です。
find /path/to/search -group 1002
/path/to/search/sales_report.csv
このようにGIDを直接指定しても、グループ名と同じように検索できます。
7. よくある組み合わせ例
findコマンドでは、-groupオプションと他の条件を組み合わせることで、より細かい検索ができます。
- 特定のグループでかつファイルサイズが大きいものを探す:
find /var/log -group admin -size +5M
/var/log/admin/error.log
- 所有グループが
staffで、更新日が7日以内のファイル:
find /home/shared -group staff -mtime -7
/home/shared/projectA/plan.txt
8. 所有グループの変更(補足)
検索ではありませんが、chgrpコマンドを使えば、ファイルの所有グループを変更できます。
chgrp sales report.csv
このコマンドで、report.csvの所有グループをsalesに変更できます。
ただし、グループを変更するには、適切な権限(多くの場合はrootユーザー)または対象グループへの所属が必要です。