Press enter to see results or esc to cancel.

Zaman Damgası ve Find Komutu

Linux üstünde Access time, modify time ve change time olarak adlandırılan 3 adet zaman damgası vardır. Bu zaman damgalarının açıklamaları aşağıda verilmiştir.

atime = access time > cat, vim, more, less veya diğer araçlarla okuma veya görüntüleme

mtime = modify time > vim vb. araçlarla içeriğin düzenlenmesi veya içeriğim değiştirilmesi

ctime = change time > metada değişimi, yanı dosya hakları, adı veya lokasyonu (chown, chmod, chgrp)

Bir dosyanın zaman damgasını görmek için stat komutu kullanılır.

Eski zaman damgasına sahip bir dosya oluşturalım ve ardından stat komutunu çalıştıralım.

touch -d "5 April 2018" test.txt

stat test.txt

cat,grep,more,less gibi komutlarla test.txt dosyasını görüntüleyelim.

Şekilde de görüldüğü üzere more ile dosyayı okuduğumuzda içerik ve metadata değişmediği için sadece Access satırı değişti.

Eğer içeriğini değiştirirsek Modify zaman damgası da değişecektir.

Şekilde de dikkat ederseniz Change time da değişti. Dosya değişikliği olduğu için datablock değişiyor ve değiştiği içinde Change time değişiyor.

Dosyanın haklarını değiştirirsek bu sefer sadece Change time değişecektir.

Access time, Modify time ve Change time kavramlarını öğrendiğimize göre artık find ile kullanılan -atime, -mtime, -ctime örneklerine geçebiliriz.

# Find

find komutu ile -atime (access time), -mtime (modify time), -ctime (change time) parametlerini kullanabiliriz. 3 adet parametreyle beraber kullanılan ve + parametreleri öncesi ve sonrası diye anlamlandırılır.

-10 > 10 dan küçük

+10 > 10 dan büyük

Örnek vermek gerekirse:

-mtime -2 = 2 günden daha eski olmayan dosyalar (0,1)

-mtime +2 = 2 günden daha eski dosyalar (3,4,5,6...)
-amin, -mmin, -cmin = dakika cinsinden arama yapar.

-atime, -mtime, -ctime = gün cinsinden arama yapar.

### -amin ve -atime örnekleri

touch -d "20 mins ago" test.txt

stat test.txt

find . -amin -30 # 0-29 dakika içinde erişilmiş dosyaları bulur.

find . -amin +10 # 10 dakikadan daha eski erişilmiş olan dosyaları bulur.

find . -amin +10 -amin -90 # 10 dakikadan daha sonra ama 90 dakikadan daha önce erişilmiş dosyaları bulur.

find . -atime -30 # 0-29 gün içinde erişilmiş dosyaları bulur.

find . -atime +10 # 10 günden daha eski erişilmiş olan dosyaları bulur.

find . -atime +10 -amin -90 # 10 günden daha sonra ama 90 günden daha önce erişilmiş dosyaları bulur.

Aşağıdaki şekilde görüldüğü üzere 5 dakika öncesine ait bir dosya oluşturulup, find . -amin -6 komutuyla 6 dakikadan geç olmayacak şekilde erişilmiş dosyaları bulmuştur.

Hatırlatma: Eğer diskinizi noatime ile mount ettiyseniz hiçbir zaman Access time değişmeyecektir. 🙂 Kısaca -atime parametresi birşey ifade etmeyecektir.

### -mmin ve -mtime örnekleri

find . -mmin -10 # 0 ile 9 dakika arasında değiştirilmiş dosyaları bulur.

find . -mmin +5 -mmin -10 # 5 dakikadan daha sonra ama 10 dakikadan daha önce değiştirilmiş dosyaları bulur.

find / -iname "*.pdf" -mmin +60 # 60 dakikadan daha eski değiştirilmiş pdf dosyalarını bulur.

find /var -mtime +10 -mtime -20 # 10 günden sonra 20 günden önce değiştirilmiş dosyaları bulur.

find /var -mtime +365 # 365 günden eski değiştirilmiş dosyaları bulur.

### -cmin ve -ctime örnekleri

find /home/ -ctime +100 # metadatası 100 günden eski olan dosyaları listeler.

find . -cmin -5 # metadatası 5 dakika içinde değiştirilmiş dosyaları bulur.

Aşağıdaki örnekte chown ile dosya sahiplik hakkı değiştirilip find . -cmin -5 komutu ile 5 dakika içinde metadatası değiştirilmiş dosyayı bulduk.

**Diğer find örnekleri:**

#Dosya ve dizin ismi 5 karakterden oluşan dosyaları listeler. Her bir soru işareti bir karakteri temsil eder.

find . -iname "?????"

#Bulunmuş olduğunuz dizinde test.txt dosyasını arar.

find . -iname "test.txt"

#Tüm sistemde test.txt dosyasını arar.

find / -iname "test.txt"

#/var/log altında sonu log olarak biten tüm dosyaları arar.

find /var/log -iname "*.log"

#/var/log dizini altında boyutu 100Mb olan dosyaları listeler.

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

#/var/log dizini altında boyutu 100Mb üstü olan dosyaları listeler.

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

#/var/log dizini altında boyutu 100Mb üstü ama 1Gb altı dosyaları listeler.

find /var/log -type f -size +100M -size 1G

#/home/ dizini altında içeriği boş olan dosyaları listeler.

find /home -type f -empty

#/home/ dizin altında içeriği boş olan dizinleri listeler.

find /home -type d -empty

#/home dizini altında sonu mp3 ile biten dosyaları siler.

find /home -iname "*.mp3" -delete

#/opt dizini altında 24 saat içinde değiştirilmiş dosyaları listeler.

find /opt -type f -mtime 1

#/opt dizini altında son 7 gun içinde değiştirilmiş dosyaları listeler.

find /opt -type f -mtime -7

#/opt dizini altında 50 günden fazla 100 günden önce değiştirilmiş dosyaları listeler.

find /opt -type -f -mtime +50 -mtime -100

#/opt dizin altında son 1 saat içinde değiştirilmiş dosyaları listeler.

find /opt -type f -mmin -60

#/var/log dizini altında 365 ‘den eski olan dosyaları /yedek/log dizinine taşı

find /var/log/ -mtime +365 -exec mv {} /yedek/log/ \;

#/var/yedek altında uzantısı sql ile biten dosyaları bulup gzip ile sıkıştırır.

find /var/yedek/ -iname "*.sql" -exec gzip -9 {} \;

#/home dizini altında kullanıcısı murat olan dosyaları listeler.

find /home -user murat

#Bulunmuş olduğunuz dizinde izinleri 777 olmayan dosyaları detaylı listeler. ! yerine -not da kullanılabilir.

find . ! -perm 777 -exec ls -alh {} \;

#/home dizininde tipi dosya olan, sahipliği murat kullanıcısına ait olup grubu root olmayan, dosya izinleri 777 olan ve 10 gün içinde değiştirilmiş olan dosyaları /root dizinine kopyalar.

find /home -type f -user murat ! -group root -perm 777 -mtime -10 -print -exec cp {} /root/ \;

#Bulunmuş olduğunuz dizinde dosya uzantısı mp3 ve pdf olmayan dosyaları bulur.

find . ! \( -name "*.mp3" -o -name "*.pdf" \)

#/home dizini altında uzantısı txt olan dosyaların hepsini bul ve arşivle

find /home/ -iname "*.txt" -exec tar -zcvf txt.tar {} +

Şimdilik bu kadar. 

Sevgiyle.