find -ctimeオプションの使い方を完全ガイド!状態変更日でファイルを検索する方法
生徒
「Linuxで、最近作られたファイルや設定を変えたファイルを探すにはどうすればいいですか?」
先生
「それならfindコマンドの-ctimeオプションが便利だよ。」
生徒
「ctimeって何ですか?編集した日時のことですか?」
先生
「少し違うんだ。ctimeは、ファイルの中身だけでなく、パーミッションや所有者などが変更されたときの日時を表すんだよ。詳しく説明していくね!」
1. ctimeとは?アクセス時間・変更時間との違い
ctimeとは、「change time(変更時刻)」の略で、ファイルの状態が変わったときの日時を意味します。
ここでいう「状態」とは、次のような変化を指します。
- ファイルの所有者やグループが変わった
- ファイルのパーミッション(権限)が変更された
- ファイルが削除されて、新しく別のファイルとして作られた
mtime(中身の更新時間)やatime(アクセス時間)とは用途が異なるので、それぞれの違いを理解しておきましょう。
2. 基本の構文と意味を覚えよう
findコマンドに-ctimeオプションを使うと、状態変更からの日数を条件にしてファイルを検索できます。
基本構文は次のとおりです。
find [検索ディレクトリ] -ctime [日数]
日数には、次のような指定ができます。
-n:n日以内に変更されたファイルn:ちょうどn日前に変更されたファイル+n:n日より前に変更されたファイル
3. 最近変更されたファイルを探す(3日以内)
例えば、「ホームディレクトリ内で直近3日以内に状態が変化したファイル」を探したい場合は以下のように実行します。
find ~ -ctime -3
/home/user/.bash_history
/home/user/Documents/config.txt
-3とすると、現在から過去3日以内(72時間以内)に所有者やパーミッションが変わったファイルが表示されます。
4. ちょうど5日前に変更されたファイルを探す
「ぴったり5日前に変更されたファイル」を検索したいときは、次のように指定します。
find ~ -ctime 5
/home/user/backup/settings.conf
このコマンドは、「5日前の24時間のあいだ」に変更されたファイルを探します。
5. 古いファイルを整理したいとき(30日以上前)
「もう使っていない古い設定ファイルや変更されていないファイル」を整理するには、+30のように指定します。
find ~ -ctime +30
/home/user/old_project/README.md
+30は、「30日より前に変更されたファイル」が対象になります。
6. -typeと組み合わせてファイルのみ検索する
findコマンドは、ディレクトリや特殊ファイルも含めて検索するため、通常のファイルだけを探したい場合は-type fを追加しましょう。
find ~ -type f -ctime -7
/home/user/Documents/report.docx
/home/user/Pictures/photo.jpg
7. ルートユーザーで設定ファイルの変更を探す
システム管理者として、重要な設定ファイルに最近変更があったか調べたいときにも-ctimeは役立ちます。
find /etc -type f -ctime -2
/etc/ssh/sshd_config
/etc/hosts
このように、/etcディレクトリ以下で、2日以内に変更された設定ファイルを表示できます。
8. -ctimeと-deleteで古いファイルを削除(慎重に!)
一定期間変更されていない一時ファイルを自動で削除したい場合、-deleteを使うことも可能です。
ただし、誤って重要なファイルを消してしまうリスクがあるため、-printで表示確認してから実行しましょう。
find /tmp -type f -ctime +10 -print -delete
/tmp/temp1.txt
/tmp/log_temp.log
9. mtimeやatimeとの違いをしっかり理解しよう
ctimeはファイルの「状態変更」を基準にしますが、mtimeやatimeは異なる目的で使います。
- ctime:所有者・パーミッションの変更など
- mtime:中身の変更(ファイルの内容を書き換えた)
- atime:ファイルを読み取った(アクセスした)
用途によって正しく使い分けることで、効率よくファイルの管理ができます。
10. statコマンドでctimeを確認する
実際にファイルのctimeを確認するには、statコマンドを使います。
stat test.txt
File: test.txt
Size: 2048 Blocks: 8 IO Block: 4096 regular file
Access: 2025-09-14 10:12:03
Modify: 2025-09-12 08:45:00
Change: 2025-09-15 18:20:30
この中の「Change」がctimeにあたる部分です。
まとめ
findコマンドのctimeオプションは、ファイルの状態変更日を基準に検索できる非常に実用的な機能です。日々の運用において、ファイルの内容変更だけでなく、所有者変更やパーミッション変更といった管理上の重要な変化を把握することは、システム管理やトラブル対応において欠かせません。ctimeはそのような変更履歴を追跡するための重要な指標であり、mtimeやatimeと正しく使い分けることで、より精度の高いファイル管理が実現できます。 特に、Linux環境でのログ管理や設定ファイルの監査では、いつ誰がどのような変更を行ったのかを確認する場面が多くあります。その際にctimeを活用することで、単なる更新日時ではなく、システムに影響を与える変更を見逃さずに確認することが可能になります。例えば、セキュリティ対策として不正な権限変更がないか確認する場合や、運用中の設定変更の影響範囲を調査する場合に役立ちます。 また、古いファイルの整理にもctimeは非常に有効です。一定期間状態変更が行われていないファイルは、不要な可能性が高く、ディスク容量の最適化の観点からも削除対象として検討できます。ただし、削除操作を伴う場合は慎重な確認が必要であり、必ず事前に一覧表示を行い、対象ファイルを確認することが重要です。 さらに、typeオプションと組み合わせることで、通常ファイルのみを対象にした検索が可能となり、検索精度を高めることができます。ディレクトリや特殊ファイルを除外することで、必要な情報だけを効率よく取得できます。 実務では、findコマンドをシェルスクリプトと組み合わせることで、自動化された監視や定期的なクリーンアップ処理を構築することも一般的です。例えば、一定期間変更のない一時ファイルを自動削除する仕組みを作ることで、運用負荷の軽減にもつながります。 このように、ctimeオプションは単なる検索機能ではなく、Linuxにおけるファイル管理やシステム運用の質を高めるための重要な要素です。基本的な使い方を理解し、実際の運用に応じて柔軟に活用することで、より効率的で安全な環境を構築できるようになります。
実践的なサンプルコマンド
find ~/projects -type f -ctime -7
/home/user/projects/app/config.yml
/home/user/projects/app/log.txt
find ~/backup -type f -ctime +60
/home/user/backup/old_data.tar.gz
find /var/log -type f -ctime -1
/var/log/syslog
/var/log/auth.log
運用で役立つポイント整理
- 状態変更を基準にした検索ができるため管理用途に最適
- パーミッション変更や所有者変更の検知に活用できる
- 古いファイルの整理や自動削除に応用できる
- typeオプションと組み合わせることで精度向上
- statコマンドで変更時刻を確認できる
生徒
ctimeって最初は分かりにくかったですが、ファイルの状態が変わったタイミングを見ているんですね。
先生
その通りだよ。内容の変更だけでなく、権限や所有者の変更も含まれるのがポイントだね。
生徒
ログファイルや設定ファイルの管理に使えそうですね。特に変更があったファイルを調べるときに便利そうです。
先生
いい視点だね。運用現場では、どのファイルがいつ変更されたかを把握することが重要だから、ctimeはとても役立つよ。
生徒
古いファイルを削除する用途にも使えるのは意外でした。でも削除は慎重にやらないと危険ですね。
先生
その通り。必ず事前に確認してから削除する習慣をつけよう。特にroot権限での操作は注意が必要だよ。
生徒
mtimeやatimeとの違いも理解できたので、用途に応じて使い分けていきたいです。
先生
それが大切だね。正しく使い分けることで、より効率的にファイル管理ができるようになるよ。