find -permオプションの使い方を完全解説!初心者でもできるパーミッション検索
生徒
「Linuxで、特定のアクセス権(パーミッション)を持ったファイルだけを探すことってできますか?」
先生
「できるよ!そのときはfindコマンドの-permオプションを使うと便利だよ。」
生徒
「パーミッションって何ですか?なんだか難しそうです…」
先生
「大丈夫、順番にゆっくり説明していくから、安心してね!」
1. パーミッションとは?
Linuxのパーミッション(権限)とは、「そのファイルを誰が読めるか」「誰が書き込めるか」「実行できるか」を決めるルールのことです。人間でいえば、鍵付きの引き出しみたいなものです。
パーミッションは、「所有者」「グループ」「その他のユーザー」の3つに分かれていて、それぞれに「読み取り(r)」「書き込み(w)」「実行(x)」の権限を設定できます。
2. find -permオプションとは?
findコマンドの-permオプションは、「パーミッション(アクセス権)」を条件にしてファイルやディレクトリを検索するためのオプションです。
例えば、「すべてのユーザーに実行権限があるファイル」を探したいときに使います。
3. パーミッションの表記方法
パーミッションは、数値(8進数)で指定するのが一般的です。
r(読み取り)→ 4w(書き込み)→ 2x(実行)→ 1
それぞれを足し合わせて、所有者・グループ・その他に順番で並べます。
例:755は「所有者が読み書き実行、他は読みと実行」
4. -permオプションの使い方(基本)
たとえば、パーミッションが777(全員が読み書き実行できる)ファイルを探したいときは、次のように書きます。
find /path/to/dir -perm 0777
/path/to/dir/public.sh
/path/to/dir/tmp_file
先頭の0は8進数であることを示しています。
5. 一部のパーミッションだけを検索するには?
すべての権限が一致しないとマッチしないのが-perm 0777の特徴です。
「一部だけ該当すればOK」という柔軟な検索をしたい場合は、-を先頭に付けます。
例:実行権限(x)を持っていればよい場合
find /path/to/dir -perm -001
/path/to/dir/run.sh
このように、1桁だけの指定も可能です。もちろん、3桁すべて指定して柔軟に検索することもできます。
例:誰かが実行できるファイルを探す
find /path/to/dir -perm -111
/path/to/dir/start.sh
/path/to/dir/test_exec
6. パーミッションが完全一致するファイルだけを探す(=)
=を付けると、「完全に一致するパーミッションだけ」を対象にします。
例:パーミッションが600のファイルだけを探す
find /home/user -perm =600
/home/user/secret.txt
これは「所有者だけが読み書きでき、他の人は何もできない」ファイルです。
7. 特殊パーミッションの検索(setuid・setgid・sticky)
setuid(4000)、setgid(2000)、stickyビット(1000)も検索できます。
- setuid:実行時に所有者の権限で動作
- setgid:実行時にグループの権限で動作
- sticky:他人のファイル削除防止(/tmpなど)
例:setuidが付いたファイルを検索
find / -perm -4000
/usr/bin/passwd
8. 他のオプションと組み合わせた例
-permは他の条件と組み合わせることで、さらに便利に使えます。
例:サイズが1MB以上かつ実行可能なファイルを検索
find /usr/local/bin -size +1M -perm -111
/usr/local/bin/large_script
例:7日以内に更新された、読み書き可能なファイル
find /var/tmp -mtime -7 -perm -600
/var/tmp/edit.txt
9. パーミッションの確認方法
ファイルやディレクトリの現在のパーミッションを調べるには、ls -lコマンドを使います。
ls -l script.sh
-rwxr-xr-- 1 user1 devgroup 2048 Sep 16 09:00 script.sh
このように、最初の-rwxr-xr--の部分がパーミッションです。
数値に直すと754になります。