Linuxでファイルの所有者で検索したいときは find コマンドの-userオプションを使う
ファイルやフォルダの所有者で検索したいとき、find コマンドを使います。
findでファイルの所有者で検索するには-userオプションを使う
基本
find ディレクトリ名 -user ユーザ名 で検索できます。
例えば、/var/www/html/eccube ディレクトリ以下で、apache が所有しているファイル、フォルダの一覧を表示するには、
1 |
find /var/www/html/eccube -user apache |
のように使います。下図に使用例の結果を示します。
1 2 3 4 5 6 7 8 9 10 |
[vagrant@localhost eccube]$ find /var/www/html/eccube -user apache /var/www/html/eccube/var/cache/dev/annotations.map /var/www/html/eccube/var/cache/dev/EccubeDevDebugProjectContainer.xml /var/www/html/eccube/var/cache/dev/EccubeDevDebugProjectContainer.xml.meta /var/www/html/eccube/var/cache/dev/EccubeDevDebugProjectContainerDeprecations.log /var/www/html/eccube/var/cache/dev/EccubeDevDebugProjectContainerCompiler.log /var/www/html/eccube/var/cache/dev/ContainerYcx2mhm /var/www/html/eccube/var/cache/dev/ContainerYcx2mhm/getAddCartTypeService.php /var/www/html/eccube/var/cache/dev/ContainerYcx2mhm/removed-ids.php (省略) |
結果をリスト表示したいときは-lsオプション
-lsオプションをつけると、 ls -l のようなリスト表示になります。man find でマニュアル見ると、正確には、 ls -dils フォーマットでの出力です。
下のリストが使用例です。
1 2 3 4 5 6 7 8 9 10 11 12 |
[vagrant@localhost eccube]$ find /var/www/html/eccube -user apache -ls 100942320 12 -rw-rw-rw- 1 apache apache 10835 6月 21 13:34 /var/www/html/eccube/var/cache/dev/annotations.map 100986127 800 -rw-rw-rw- 1 apache apache 816273 6月 21 13:34 /var/www/html/eccube/var/cache/dev/EccubeDevDebugProjectContainer.xml 100942323 152 -rw-rw-rw- 1 apache apache 152902 6月 21 13:34 /var/www/html/eccube/var/cache/dev/EccubeDevDebugProjectContainer.xml.meta 100942325 36 -rw-rw-rw- 1 apache apache 33592 6月 21 13:34 /var/www/html/eccube/var/cache/dev/EccubeDevDebugProjectContainerDeprecations.log 100942326 548 -rw-rw-rw- 1 apache apache 560640 6月 21 13:34 /var/www/html/eccube/var/cache/dev/EccubeDevDebugProjectContainerCompiler.log 403810 52 drwxrwsrwx 2 apache apache 36864 6月 21 11:01 /var/www/html/eccube/var/cache/dev/ContainerYcx2mhm 1206989 4 -rw-rw-rw- 1 apache apache 935 6月 21 11:01 /var/www/html/eccube/var/cache/dev/ContainerYcx2mhm/getAddCartTypeService.php 403811 124 -rw-rw-rw- 1 apache apache 124266 6月 21 11:01 /var/www/html/eccube/var/cache/dev/ContainerYcx2mhm/removed-ids.php 403851 4 -rw-rw-rw- 1 apache apache 2714 6月 21 11:01 /var/www/html/eccube/var/cache/dev/ContainerYcx2mhm/getClassCategoryControllerService.php 403812 4 -rw-rw-rw- 1 apache apache 837 6月 21 11:01 /var/www/html/eccube/var/cache/dev/ContainerYcx2mhm/getComposerInstallCommandService.php (省略) |
所有者でないファイルを表示したいときは、オプションに 条件否定の !
逆に、特定のユーザの所有者でないファイルを表示したいときは、条件を否定する ! を付けます。
例えば、ユーザ apache が所有していないファイルを表示したいとき、
1 |
find /var/www/html/eccube ! -user apache |
のようになります。
下が表示例です。-ls もつけてます。
1 2 3 4 5 6 7 8 9 10 11 12 |
[vagrant@localhost eccube]$ find /var/www/html/eccube ! -user apache -ls 1209432 4 drwxrwsr-x 13 vagrant apache 4096 6月 21 12:09 /var/www/html/eccube 384417 4 -rw-rw-r-- 1 vagrant apache 99 6月 21 10:38 /var/www/html/eccube/.coveralls.yml 384418 4 -rw-rw-r-- 1 vagrant apache 16 6月 21 10:38 /var/www/html/eccube/.dockerignore 384419 4 -rw-rw-r-- 1 vagrant apache 924 6月 21 10:38 /var/www/html/eccube/.editorconfig 384420 4 -rw-rw-r-- 1 vagrant apache 2084 6月 21 10:38 /var/www/html/eccube/.env.dist 384421 4 -rw-rw-r-- 1 vagrant apache 96 6月 21 10:38 /var/www/html/eccube/.env.install 67311495 0 drwxrwsr-x 3 vagrant apache 120 6月 21 10:38 /var/www/html/eccube/.github 67311496 4 -rw-rw-r-- 1 vagrant apache 30 6月 21 10:38 /var/www/html/eccube/.github/.htaccess 67311497 4 -rw-rw-r-- 1 vagrant apache 3090 6月 21 10:38 /var/www/html/eccube/.github/CONTRIBUTING.md 67311498 4 -rw-rw-r-- 1 vagrant apache 232 6月 21 10:38 /var/www/html/eccube/.github/ISSUE_TEMPLATE.md (省略) |
特定のディレクトリを除外したいときは、オプションで除外条件を追加
先ほどの例で、.github ディレクトリを除外したいとします。
この時「.github という名前のディレクトリだったら表示しない、そうじゃなかったら、所有者 xxx のファイル、ディレクトリを表示する」というように、条件に「表示しない」という除外オプションを追加します。
具体的には以下のようにします。
1 |
find /var/www/html/eccube -type d -name .github -prune -o ! -user apache |
ここで、 -type d は、ディレクトリを意味し、 -name .github は、.githubという名前を意味します。そして -prune は、表示・調査を除外するという意味です。ここまでのオプションをまとめると、「.githubという名前のディレクトリは表示・調査を除外する」という意味になります。
そして、-o が OR条件を意味するのですが、単に「または」の意味ではありません。
(※プログラミングの世界では頻繁に)ORは「そうでなければ以下を実施」の意味になります。
その結果、.github ディレクトリ以外では、今まで通り「! -user apache」がチェックされ、ユーザ apache の所有していないファイル・ディレクトリを表示します。
下にこの例の実行結果を示します。
1 2 3 4 5 6 7 8 9 10 11 12 |
[vagrant@localhost eccube]$ find /var/www/html/eccube -type d -name .github -prune -o ! -user apache -ls | head 1209432 4 drwxrwsr-x 13 vagrant apache 4096 6月 21 12:09 /var/www/html/eccube 384417 4 -rw-rw-r-- 1 vagrant apache 99 6月 21 10:38 /var/www/html/eccube/.coveralls.yml 384418 4 -rw-rw-r-- 1 vagrant apache 16 6月 21 10:38 /var/www/html/eccube/.dockerignore 384419 4 -rw-rw-r-- 1 vagrant apache 924 6月 21 10:38 /var/www/html/eccube/.editorconfig 384420 4 -rw-rw-r-- 1 vagrant apache 2084 6月 21 10:38 /var/www/html/eccube/.env.dist 384421 4 -rw-rw-r-- 1 vagrant apache 96 6月 21 10:38 /var/www/html/eccube/.env.install 384422 4 -rw-rw-r-- 1 vagrant apache 1186 6月 21 10:38 /var/www/html/eccube/.gitignore 384423 0 -rw-rw-r-- 1 vagrant apache 0 6月 21 10:38 /var/www/html/eccube/.gitmodules 384424 4 -rw-rw-r-- 1 vagrant apache 2141 6月 21 10:38 /var/www/html/eccube/.htaccess 384425 4 -rw-rw-r-- 1 vagrant apache 845 6月 21 10:38 /var/www/html/eccube/.php_cs.dist (省略) |
先ほどとちがい、.github の内容が表示されていないですね。
まとめ
Linuxでファイルの所有者で検索したいとき、findコマンドを使いましょう。
コメント