Linuxでファイルやディレクトリなどを検索するとき使う便利なコマンドをご存知でしょうか?
サーバー内のファイルやディレクトリを簡単に検索するための「find」コマンドがあります。
「find」コマンドは、ファイルやディレクトリ検索以外にもタイムスタンプやファイルサイズ、所有者などの条件でも検索することができます。
こちらでは、Linuxサーバーからファイルやディレクトリなどを索するときに使う「find」コマンドをご紹介します。
ファイルやディレクトリを検索するfindコマンド
「find」コマンドは、ファイルやディレクトリを調べることができます。
ファイルやディレクトリを検索するときに使う「find」コマンドをご紹介します。
オプションを使うことで作業効率がアップするので覚えておいて損はないです。。
■findコマンドのオプション例
-name:ファイルの名前が指定一致しているファイルを検索する
-type f:ファイルタイプを指定して検索
-type d:ディレクトリを指定して検索
-path:ファイルのパスが指定一致しているファイルを検索
-mtime:指定した日数以前に更新されたファイルを検索
-atime:指定した日数以前にアクセスされたファイルを検索
-a:複数条件を組み合わせて検索
findコマンドでファイルを検索する
サーバー内からファイルを検索する場合は、こちらの「find ファイル名[アクション]」コマンドを使います。
$ find /var/log/access_log
www.test.org 6.29.70.291 - - [02/Jan/2021:12:49:45 +0900] "GET /web-vitals/ HTTP/1.1" 200 17773 "-" "Mozilla/5.0"
findコマンドで指定したディレクトリやファイルを検索
ディレクトリから特定の文字を検索する場合は、こちらの「find 検索文字列1 ディレクトリ」コマンドを使います。
「*(アスタリスク)」を使うことで「/var/log/」直下にあるファイルから文字検索を行うことができます。
例1 ディレクトリとファイルを表示
$ find /var/log/
/var/log/
/var/log/20210112_accesslog
/var/log/20210113_accesslog
例2 ディレクトリだけを表示「オプション:-type d」
$ find /var/log/ -type d
/var/log/
例3 指定ディレクトリのファイルだけを表示「オプション:-type f」
$ find /var/log/ -type f
/var/log/20210112_accesslog
/var/log/20210113_accesslog
複数のディレクトリからファイルを検索
指定した複数のディレクトリからファイルを検索する場合、「find ディレクトリ1 ディレクトリ2 -type f -print」コマンを使います。
例えば、2つのディレクトリ内のファイルを表示します。
3つ以上のディレクトリを検索したい場合は、「find ディレクトリ1 ディレクトリ2 ディレクトリ3・・・ -type f -print」のように追記することでできます。
$ find /var/log /home/log -type f -print
/var/log/20210110_accesslog
/var/log/20210111_accesslog
/var/log/20210112_accesslog
/home/log/20210110_accesslog
/home/log/20210111_accesslog
/home/log/20210112_accesslog
指定した拡張子を検索
findコマンドでは、指定した拡張子だけのファイルを検索することも可能です。
例えば、現在のディレクトリ内のphpファイルを検索「オプション:-name」
$ find ./ -name "*.php" -type f
/var/log/20210110_accesslog.php
/var/log/20210111_accesslog.php
/var/log/20210112_accesslog.php
更新されたファイルを検索
findコマンドのオプションに「-mtime 日数」を指定することで任意の日に更新されたファイルを調べることができます。
ファイルをアップロードする際に、更新したファイルだけをチェックするときに使うことがあります。
例1 今日更新されたファイルを検索「オプション:-mtime 0」
$ find ./ -mtime 0
/var/log/20210112_accesslog
例2 1日前 (24時間前~現在) に修正されたファイルを検索「オプション:-mtime 1」
$ find ./ -mtime 1
/var/log/20210111_accesslog
findコマンドでよくある質問
WEBサイトを運用している場合、更新したファイルのチェックや所有者に問題がないかチェックすることがあります。
使い方を覚えていれば、ファイルのアップ漏れなどを防ぐこともできます。
findコマンドでよくある質問をご紹介します。
10分以内に更新したファイルを調べたい
〇分以内に更新したファイルを確認する方法はこちらです。
findコマンドに「オプション:mmin -分」を指定することで〇分以内に更新されたファイルをチェックすることができます。
$ find /var/www/ -mmin -10
/var/www/index.php
/var/www/sitemap.php
ファイルを更新した所有者をチェックしたい
ファイルを更新した所有者を確認する方法はこちらです。
findコマンドに「オプション:user ユーザー」を指定することで所有者をチェックすることができます。
$ find /home/ -user testuser
/home/aaa.php
/home/bbb.php
findコマンドで検索したファイルに対して削除することができますか?
「find」コマンドは、検索したファイルに対して指定した処理を実行することができます。
例えば、findコマンドで検索したファイルに対して削除する処理を行うことができます。
例 find /var/log -name "*.txt" -exec rm {} \;
→/var/log/ 直下にあるテキストファイルが削除できます。
$ find /var/log -name "*.txt" -exec rm {} \;