HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

findコマンドで特定のユーザ/グループのファイル/ディレクトリを探す

ある時、特定のユーザ/グループのファイル/ディレクトリをchownしたい要件が出てきた。 開発環境で、最初は「apache/apache」で動かしていたhttpd、だんだんとめんどくさくなって、httpdのUser/Groupを変えたいけど、ファイルの所有者が‥という感じ。

まぁ探す手段はあるんだろうと思いながら、findコマンドのヘルプを見てみる。

$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
$ find --version
find (GNU findutils) 4.5.11
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
有効になっている機能: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
$ find --help
使用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

デフォルトのパスはカレントディレクトリです。デフォルトの評価式 (expression) は -print です。評価式は演算子、オプション、テストおよびアクションで構成さ
れます。

演算子 (優先順位は降順です。特に指定がない場合は -and が暗黙的に使用されます):
( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2
EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2

positional options (always true): -daystart -follow -regextype

normal options (always true, specified before other expressions):
-depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
--version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race

テスト (N は +N、-N または Nで指定します): -amin N -anewer FILE -atime N -cmin N
-cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
-ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
-links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
-nouser -nogroup -path PATTERN -perm [-/]MODE -regex PATTERN
-readable -writable -executable
-wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
-used N -user NAME -xtype [bcdpfls]
-context CONTEXT


アクション: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print
-fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
-exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
-execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;

バグを発見した場合は findutils バグ報告ページ http://savannah.gnu.org/ を
使用して報告 (および修正の進捗を追跡) してください。Web を利用できない場合
は <bug-findutils@gnu.org> に E-mail を送ってください。

覚えていた定型的なものを使っていただけなんだなと改めて思う。

今回は、テスト「-user NAME」と「-group NAME」を使えばよさげ。

例えば以下のような感じになるだろう。

# find / -user apache -group apache -exec chown hhelibex.hhelibex {} \; -o -user apache -exec chown hhelibex {} \; -o -gro
up apache -exec chown .hhelibex {} \;

ユーザ/グループが両方ともapacheであるケースを忘れてはいけないことに注意。