テックブログ

ファイルの権限変更 そんな時に便利なfindコマンド

こんにちは、ytakamuraです。
ファイルの権限が不足しているけどどのファイルなのか分からない、
かといって-Rで全て変更するのは怖い、そんなことありませんか。
今回はそんな時に便利なfindコマンドについて書いていきたいと思います。

findコマンドについて

findコマンドはLinux上で使用できる、ファイルやディレクトリを検索できるコマンドです。
使用するオプションにより様々な条件で検索することができます。
名前で検索ができる-name、更新日時の-mtime-mmin、サイズの-sizeなど、
上記は一例ですが便利なオプションが多く揃っています。

今回はそんなfindオプションの内、権限変更時の検索に便利な下記3つのオプションを紹介します。
-perm-user-group

-perm・-user・-groupオプションについて

-perm-user-groupオプションについて、文字列でなんとなく意味は
伝わっているかもしれないですが、それぞれ下記条件での検索ができます。

-perm パーミッションを指定しての検索
-user 所有ユーザーを指定しての検索
-group 所有グループを指定しての検索

実際の使い方については、実例の方で紹介します。

実際に使ってみた

ちょっとファイル数が少ないですが、今回は下記環境でfindコマンドを使ってみます。

[root@ytakamura blog]# ll -R
.:
合計 8
drwxr-xr-x 2 ytakamura ytakamura 4096 11月 20 10:43 2022 dir1
drwxr-xr-x 2 root root 4096 11月 20 10:43 2022 dir2
-r——– 1 ytakamura ytakamura 0 11月 20 10:38 2022 test1
-rw——- 1 ytakamura ytakamura 0 11月 20 10:38 2022 test2
-rw-rw—- 1 ytakamura ytakamura 0 11月 20 10:38 2022 test3
-rwxrwxrwx 1 ytakamura root 0 11月 20 10:38 2022 test4

./dir1:
合計 0
-rw-r–r– 1 root root 0 11月 20 10:39 2022 test5

./dir2:
合計 0
-rw-r–r– 1 test test 0 11月 20 10:39 2022 test6

-perm

-permオプションはパーミッションを指定しての検索ができます。
まずはグループに書き込み権限があるファイルを探してみます。

[root@ytakamura blog]# find ./ -perm -g+w
./test3
./test4

ちゃんとグループに書き込み権限がある2ファイルが出てきましたね。

今度は逆にグループに書き込み権限がないファイルを探してみましょう。
オプションの前に「!」を付けることで検索条件にマッチしないファイルを探せます。

[root@ytakamura blog]# find ./ ! -perm -g+w
./
./test1
./dir2
./dir2/test6
./test2
./dir1
./dir1/test5

ちゃんと1回目の検索で出てきたtest3とtest4以外のファイルとディレクトリが出てきました。

特定の権限が不足しているファイルを探したい時に便利なオプションです。
ちなみに「-perm 644」のような指定方法でも検索できます。

-user・-group

-user-groupはそれぞれ所有ユーザーとグループを指定しての検索ができます。
系統が同じなのでまとめて紹介しちゃいます。

まずは-userでytakamuraが所有しているファイルを探してみます。

[root@ytakamura blog]# find ./ -user ytakamura
./test1
./test3
./test2
./dir1
./test4

ytakamuraが所有しているファイルとディレクトリが出てきました。

-groupも実践といきたいところですが、この先も考えるとコマンド履歴ばかりで
見づらくなってしまうので省略しちゃいます。
使い方自体は-userと全く一緒なので。

-user-groupでも「!」は使用できます。
root所有のファイルやディレクトリは触りたくないなというときは、
! -user root」で検索するとroot所有以外のファイルやディレクトリが出てきます。

組み合わせて使ってみる

紹介したオプションは単体でも便利ですが、組み合わせて使用することもできます。

例えば所有者がytakamuraで、所有者に書き込み権限がないものという条件で検索してみます。

[root@ytakamura blog]# find ./ -user ytakamura -perm -u+w -ls
402604 0 -rw-rw—- 1 ytakamura ytakamura 0 11月 20 10:38 ./test3
402603 0 -rw——- 1 ytakamura ytakamura 0 11月 20 10:38 ./test2
402606 4 drwxr-xr-x 2 ytakamura ytakamura 4096 11月 20 10:43 ./dir1
402605 0 -rwxrwxrwx 1 ytakamura root 0 11月 20 10:38 ./test4

検索結果の権限を見やすくするため、-lsを付けてみました。
結果もちゃんと指定条件のファイルとディレクトリが出てきましたね。

所有者がytakamuraでもrootでもないといった条件でも検索可能です。

[root@ytakamura blog]# find ./ ! -user ytakamura ! -user root -ls
402609 0 -rw-r–r– 1 test test 0 11月 20 10:39 ./dir2/test6

-and-orのオプションが必要な組み合わせもありますが、複数のオプションを組み合わせることで
さらに便利に必要なファイルを探しだすことができます。

おわりに

ファイルの権限を変更する際に-Rで全て変更するのは怖い作業なので、findコマンドで検索し、
必要なファイルだけ権限変更することで安全に作業ができます。
変更するファイルが多い場合は、xargsコマンドを組み合わせることで楽に権限変更できるのですが、
その説明まで書くと長くなってしまうので今回は割愛します。

機会があればxargsコマンドや他のfindコマンドのオプションについても紹介したいと思います。

それではまた。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください