find の使い方

条件に合うファイルを探す

書き方

find [場所] [-name パターン] [-type f|d] [-size +100M] [-mtime +7] [-user 名前] [-exec コマンド {} \;]
find / -perm -4000 -type f(SUID のファイル)
find /etc -newer 基準のファイル

名前・種類・サイズ・更新日・所有者・権限で探せます。-perm -4000 は SUID、-2000 は SGID、/6000 はどちらか。-delete や -exec で見つけたものに処理もできます。

よく使うオプション

オプション意味
-name パターン名前で探す('*.log' のように * が使える。-iname は大文字小文字を区別しない)
-type f / d / l普通のファイル・ディレクトリ・シンボリックリンクに絞る
-size +100Mサイズで絞る(+ は以上、- は以下。k・M・G が使える)
-mtime +7更新日で絞る(+7 は 7 日より前、-1 は 1 日以内)
-user 名前持ち主で絞る
-perm -4000権限で絞る(-4000 は SUID が付いたもの)
-maxdepth 数何階層下までたどるか
-exec コマンド {} \;見つけたもの 1 つずつにコマンドを実行する({} が見つけたものに置き換わる)
-delete見つけたものを消す

例

$ find /etc -name '*.conf'/etc/dnf/dnf.conf
/etc/httpd/conf/httpd.conf
/etc/sudo.conf

/etc の下から、名前が .conf で終わるファイルを探します。

$ find /var/log -type f -size +100M

100MB より大きいファイルを探します。ディスクがいっぱいのとき、原因を探すのに使います。

$ find /tmp -type f -mtime +7 -delete

7 日より前に更新された /tmp のファイルを消します。消す前に -delete を外して、何が見つかるかを先に確かめます。

$ sudo find / -perm -4000 -type f

SUID(持ち主の権限で動く印)が付いたファイルを探します。知らないものが無いかを見る、守りの基本です。

$ find . -name '*.sh' -exec chmod +x {} \;

見つけたシェルスクリプトに、1 つずつ実行の権限を付けます。

よくある間違い・注意

  • '*.log' のようなパターンは ' で囲みます。囲まないと、シェルが先に今の場所のファイル名へ置き換えてしまいます。
  • / から探すと、読めない場所で「Permission denied」がたくさん出ます。sudo を付けるか、2>/dev/null で隠します。
  • -exec の最後の \; を忘れると「missing argument to `-exec'」になります。

実際に打って練習する

Linux レベル1 コースの Lv18「場所で探す find」で覚えます(第2章 宝探し(検索とテキスト処理))。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

Lv1〜16 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。

Linux コマンド一覧(LinuC レベル1 の範囲)へ戻る