UNIX のファイルには、一般的に 3つのタイムスタンプがある。

•atime … 最終アクセス時刻 (access time) 
•mtime … 最終変更時刻 (modify time) 
•ctime … 最終ステータス変更時刻 (change time) 

atime
最後にファイルにアクセスした時刻。
より正確には、ファイル内容を readした場合に変更される。
ファイルをオープンしただけでは変更されないし、ファイル内容を writeしても変更されない。
当然ながら、readする権限がなかった場合も変更されない。
通常、誰かも長いこと参照されていない、もう消してしまっていいようなファイルを探すときに使用する。
ただ、ファイル内容を検索しようとして、grepコマンドを使っただけでもアクセス日時は更新されるから使いにくい。

mtime
最後にファイルを変更した時刻のこと。
より正確には、ファイルに write または truncate した場合に変更される。
ファイルの内容の変更についてだけの「最終変更日時」という点でctimeとは異なる。

ctime
最後にファイルを変更した時刻のこと。
より正確には、ファイルに write または truncate した場合、
そして inode データの修正を行った場合に変更される。inode データに含まれるのは、

•ファイル名
•ファイルサイズ
•パーミッション
•リンク数
•オーナー・グループ

など、あらゆる変更についての「最終変更日時」。
つまり、write・rename・truncate・chmod・link・chown などのシステムコールを発行すると
ctime が更新される。
ファイル内容を writeやtruncateで更新した場合、mtime と ctimeの両方が更新される

タイムスタンプの表示

ls -lu # atimeの表示
ls -l  # mtimeの表示
ls -lc # ctimeの表示

または、statコマンドでも表示できる。

  
$ stat test
File: `test'
  Size: 2               Blocks: 8          IO Block: 4096   通常ファイル
Device: fc00h/64512d    Inode: 1704116     Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (54321/  oracle)   Gid: (54321/oinstall)
Access: 2016-09-20 07:41:21.626067524 +0900
Modify: 2016-09-20 07:40:34.578066371 +0900
Change: 2016-09-20 07:41:06.673067157 +0900

■findとの組み合わせ
1週間より古くて2週間前より新しいログを探す

find /logs/ -ctime +7 -and -ctime -15

6か月よりも古いaccessログを探す

find /logs/ -ctime +180 -and -name "*access*"

6か月よりも古いaccessログまたはerrorログを探す

find /logs/ -ctime +180 -and -name "*access*" -or "*error*"

■ディスクの空き容量が不足していたら1か月より古いファイルを削除

#!/bin/bash

free_size =$(df /data/backup | sed -r -e "s/[^ ]+ +[^ ]+ +[^ ]+ +([^ ]+). +/\1/" tail -n 1)

required_size=$((10 * 1000 * 1000))

if [ $free_size -lt $required_size ]
then
  files=$(find /data/backup -ctime +30)
  for file in $files
  do
    rm "$file"
  done
fi