Dosya Bulma ve Erişim Yönetimi

find komutu, dosya izinleri (chmod, chown) ve arşivleme (tar, gzip)

Kubedo Academy’e hoş geldiniz! Bu laboratuvarda dosya arama, izinler ve arşivleme komutlarını öğreneceksiniz.


Zorluk seviyesi: Başlangıç
Süre: Yaklaşık 30 dakika


1. Dizin Görüntüleme

tree - Dizin Ağacı Görüntüleme

tree komutu dizin yapısını ağaç şeklinde görüntüler. Dosya sistemini görsel olarak anlamak için çok kullanışlıdır.

Kurulum (gerekirse):

Terminal
$ apt-get install tree -y

Temel kullanım:

Terminal
$ tree /usr

Derinlik sınırlama (-L):

Terminal
$ tree /usr -L 1

Bu komut sadece 1 seviye derinlikte görüntüler. -L 2 ile 2 seviye görüntülenebilir.

Sadece dizinleri göster (-d):

Terminal
$ tree -d /var

Gizli dosyaları da göster (-a):

Terminal
$ tree -a /home

İnsan okunabilir boyutlar (-h):

Terminal
$ tree -h /tmp
ParametreAçıklama
-L NN seviye derinliğe kadar göster
-dSadece dizinleri göster
-aGizli dosyaları da göster
-hDosya boyutlarını göster
-fTam dosya yollarını göster
-pİzinleri göster
--duDizin boyutlarını hesapla
-I PATTERNBelirtilen pattern’i hariç tut

Belirli dosyaları hariç tut:

tree -I 'node_modules|*.log' /project

[!TIP] tree komutu projelerin klasör yapısını anlamak, dokümantasyon oluşturmak ve hızlı dizin keşfi için idealdir.


2. find - Dosya Bulma

find komutu Linux’ta en güçlü ve en önemli dosya arama komutudur. İsme, boyuta, zamana, izinlere ve daha birçok kritere göre dosya arayabilir ve bulunan dosyalar üzerinde işlem yapabilir.

Temel Sözdizimi

find [aranacak_dizin] [arama_kriterleri] [yapılacak_işlem]

İsme Göre Arama (-name)

Tam isim eşleşmesi:

Terminal
$ find /usr -name "share"

Wildcard ile arama:

Terminal
$ find /usr -name "share*"

Büyük/küçük harf duyarsız arama (-iname):

Terminal
$ find /home -iname "*.TXT"

Bu komut .txt, .TXT, .Txt gibi tüm varyasyonları bulur.

Türe Göre Arama (-type)

Sadece dosyaları bul:

Terminal
$ find /usr -type f -name "*.txt"

Sadece dizinleri bul:

Terminal
$ find /usr -type d -name "share*"

Sembolik linkleri bul:

Terminal
$ find /usr -type l
TürAçıklama
fNormal dosya (file)
dDizin (directory)
lSembolik link
bBlock device (disk gibi)
cCharacter device (terminal gibi)
sSocket
pNamed pipe

Kullanıcı ve Gruba Göre Arama

Kullanıcıya göre:

Terminal
$ find / -user root -iname "*.txt" 2>/dev/null

Gruba göre:

Terminal
$ find /var -group www-data 2>/dev/null

Sahipsiz dosyaları bul (kullanıcısı silinmiş):

find / -nouser 2>/dev/null
find / -nogroup 2>/dev/null

Zamana Göre Arama

Linux’ta üç zaman damgası vardır:

  • mtime: Değiştirme zamanı (modify time)
  • atime: Erişim zamanı (access time)
  • ctime: Metadata değişim zamanı (change time)

Son 2 saatte değiştirilen dosyalar (-mmin):

Terminal
$ find /var/log -mmin -120

Son 7 günde değiştirilen dosyalar (-mtime):

Terminal
$ find /home -mtime -7

7 günden eski dosyalar:

Terminal
$ find /tmp -mtime +7
ParametreAçıklama
-mmin -NSon N dakikada değiştirilen
-mmin +NN dakikadan daha önce değiştirilen
-mtime -NSon N günde değiştirilen
-mtime +NN günden daha önce değiştirilen
-newer FILEBelirtilen dosyadan daha yeni

Boyuta Göre Arama (-size)

100MB’dan büyük dosyalar:

Terminal
$ find / -type f -size +100M 2>/dev/null

Tam 10MB dosyalar:

Terminal
$ find /var -type f -size 10M

1MB’dan küçük dosyalar:

Terminal
$ find /tmp -type f -size -1M

Boş dosyaları bul:

Terminal
$ find /tmp -type f -empty
Boyut BirimiAçıklama
cByte
kKilobyte
MMegabyte
GGigabyte

İzinlere Göre Arama (-perm)

Tam izin eşleşmesi:

Terminal
$ find /usr -perm 755

En az belirtilen izinlere sahip (-):

Terminal
$ find / -perm -4000 2>/dev/null

Bu komut SUID bit’i set edilmiş dosyaları bulur (güvenlik denetimi için önemli).

Dünya tarafından yazılabilir dosyalar:

find / -perm -o+w -type f 2>/dev/null

Mantıksal Operatörler

VE (varsayılan):

Terminal
$ find /var -type f -name "*.log" -size +1M

VEYA (-o):

Terminal
$ find /tmp -name "*.txt" -o -name "*.log"

DEĞİL (-not veya !):

Terminal
$ find /var -type f -not -name "*.log"

find + exec (Bulunan Dosyalarda İşlem Yapma)

-exec parametresi bulunan her dosya için bir komut çalıştırır. {} dosya yolunu temsil eder, \; komutu sonlandırır.

Bulunan dosyaları listele:

Terminal
$ find /tmp -name "*.txt" -exec ls -la {} \;

Bulunan dosyaları sil:

find /tmp -type f -name "*.tmp" -exec rm -f {} \;

Birden fazla komutu + ile zincirleme:

find /var/log -name "*.log" -exec gzip {} \;

xargs ile daha hızlı işlem:

Terminal
$ find /tmp -name "*.txt" | xargs ls -la

xargs birden fazla dosyayı tek komutta işler, daha hızlıdır.

[!CAUTION] find -exec rm komutunu çalıştırmadan önce mutlaka -exec olmadan test edin! Önce hangi dosyaların bulunacağını görün.

Pratik find Örnekleri

Disk alanı yiyen büyük dosyaları bul:

Terminal
$ find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null | sort -k5h

7 günden eski log dosyalarını sil:

find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;

Belirli bir kelimeyi içeren dosyaları bul:

Terminal
$ find /etc -type f -exec grep -l "password" {} \; 2>/dev/null

Tüm boş dizinleri bul:

Terminal
$ find /tmp -type d -empty

[!IMPORTANT] find Linux sistem yönetiminde en kritik komutlardan biridir. Disk temizleme, güvenlik denetimi, yedekleme scriptleri gibi birçok işte kullanılır. Bu komutu çok iyi öğrenin!


3. Dosya İzinleri (Permissions)

Linux’ta her dosya ve dizinin üç tür izni ve üç tür sahibi vardır. Bu sistem güvenliğin temelini oluşturur.

İzin Yapısı

ls -l çıktısında izinler şu şekilde görünür:

-rwxrwxrwx  1 user group  1234 Jan  1 12:00 dosya.txt
│└┬┘└┬┘└┬┘
│ │  │  └─ Others (Diğerleri) - Sistemdeki herkes
│ │  └──── Group (Grup) - Dosyanın grubu
│ └─────── Owner (Sahip) - Dosyanın sahibi
└────────── Tür: - dosya, d dizin, l link

İzin Türleri

KarakterİsimDosyadaDizinde
rRead (Okuma)Dosya içeriğini okuDizin içeriğini listele (ls)
wWrite (Yazma)Dosyayı değiştirDizinde dosya oluştur/sil
xExecute (Çalıştır)Dosyayı çalıştırDizine gir (cd)

chown - Dosya Sahipliğini Değiştir

chown (change owner) komutu dosyanın sahibini ve/veya grubunu değiştirir.

Sadece sahibi değiştir:

Terminal
$ touch /tmp/test.txt
chown nobody /tmp/test.txt
ls -la /tmp/test.txt

Sahip ve grubu birlikte değiştir:

Terminal
$ chown nobody:nogroup /tmp/test.txt

Sadece grubu değiştir:

Terminal
$ chown :sys /tmp/test.txt

Recursive (alt dizinlerle birlikte):

chown -R www-data:www-data /var/www/html
ParametreAçıklama
-RRecursive (alt dizinler dahil)
-vVerbose (yapılan değişiklikleri göster)
-cSadece değişen dosyaları göster
--reference=FILEBaşka bir dosyanın sahipliğini kopyala

chgrp - Dosya Grubunu Değiştir

chgrp (change group) komutu sadece grubu değiştirir.

Terminal
$ chgrp sys /tmp/test.txt
ls -la /tmp/test.txt

Recursive:

chgrp -R developers /project

chmod - Dosya İzinlerini Değiştir

chmod (change mode) komutu dosya izinlerini değiştirir. İki yöntem vardır: sayısal ve sembolik.

Sayısal Yöntem (Octal)

Her izin bir sayıya karşılık gelir:

SayıİzinBinary
0000
1–x001
2-w-010
3-wx011
4r–100
5r-x101
6rw-110
7rwx111

Yaygın izin kombinasyonları:

DeğerİzinKullanım
755rwxr-xr-xÇalıştırılabilir dosyalar, dizinler
644rw-r–r–Normal dosyalar
600rw——-Gizli dosyalar (SSH key gibi)
700rwx——Özel dizinler
777rwxrwxrwxTehlikeli! Herkes her şeyi yapabilir

Örnek kullanım:

Terminal
$ chmod 755 /tmp/test.txt
ls -la /tmp/test.txt
Terminal
$ chmod 644 /tmp/test.txt
ls -la /tmp/test.txt

Sembolik Yöntem

Sembolik yöntem daha okunabilirdir:

HarfAnlamı
uUser (sahip)
gGroup (grup)
oOthers (diğerleri)
aAll (hepsi)
Operatörİşlem
+İzin ekle
-İzin kaldır
=İzni tam olarak ayarla

Örnekler:

chmod u+x dosya.sh        # Sahibine çalıştırma ekle
chmod g-w dosya.txt       # Gruptan yazma kaldır
chmod o=r dosya.txt       # Diğerlerine sadece okuma
chmod a+r dosya.txt       # Herkese okuma ekle
chmod ug+rw dosya.txt     # Sahip ve gruba okuma-yazma ekle
chmod go-rwx gizli.txt    # Grup ve diğerlerinden tüm izinleri kaldır

Recursive (alt dizinlerle birlikte):

Terminal
$ chmod -R 755 /tmp/mydir

Özel İzin Bitleri

BitSayıİsimEtkisi
SUID4000Set User IDDosya sahibinin yetkisiyle çalıştır
SGID2000Set Group IDGrup yetkisiyle çalıştır
Sticky1000Sticky BitDizinde sadece sahip silebilir

SUID örneği (passwd komutu):

Terminal
$ ls -la /usr/bin/passwd

-rwsr-xr-x - s harfi SUID’i gösterir.

Sticky bit örneği (/tmp dizini):

Terminal
$ ls -ld /tmp

drwxrwxrwt - t harfi sticky bit’i gösterir.

[!TIP] İzin sorunlarını çözmek için: ls -la ile izinleri kontrol edin, chmod ile düzeltin.


4. Arşivleme ve Sıkıştırma Komutları

Linux’ta dosyaları arşivlemek (birleştirmek) ve sıkıştırmak (boyutu küçültmek) için çeşitli araçlar vardır.

dd - Veri Kopyalama ve Dönüştürme

dd (data duplicator) komutu blok düzeyinde veri kopyalar. Disk yedeği, ISO oluşturma ve disk silme için kullanılır.

[!CAUTION] dd çok güçlü ve tehlikeli bir komuttur. Yanlış parametre diskinizi silebilir! Dikkatli kullanın.

Disk yedeği oluşturma:

dd if=/dev/sda1 of=/backup/sda1.img bs=4M status=progress
  • if: Input file (kaynak)
  • of: Output file (hedef)
  • bs: Block size (performans için)
  • status=progress: İlerleme göster

Disk imajını sıkıştırarak yedekle:

dd if=/dev/sda1 bs=4M | gzip > /backup/sda1.img.gz

Disk silme (dikkat!):

dd if=/dev/zero of=/dev/sdX bs=4M status=progress

USB’ye ISO yazma:

dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress
ParametreAçıklama
if=FILEInput file (kaynak)
of=FILEOutput file (hedef)
bs=SIZEBlock size
count=NSadece N blok kopyala
status=progressİlerleme durumunu göster
conv=sync,noerrorHata toleransı

tar - Arşivleme (Tape Archive)

tar komutu birden fazla dosyayı tek bir arşiv dosyasında birleştirir. Linux’ta en çok kullanılan arşivleme aracıdır.

Temel Parametreler

ParametreTam İsimAçıklama
ccreateYeni arşiv oluştur
xextractArşivi aç
tlistArşiv içeriğini listele
vverboseAyrıntılı çıktı göster
ffileArşiv dosya adı
zgzipgzip ile sıkıştır/aç
jbzip2bzip2 ile sıkıştır/aç
Jxzxz ile sıkıştır/aç

Arşiv Oluşturma

Sıkıştırmasız arşiv (.tar):

Terminal
$ tar cvf /tmp/backup.tar /usr/share/doc

gzip ile sıkıştırılmış arşiv (.tar.gz veya .tgz):

Terminal
$ tar cvfz /tmp/backup.tar.gz /usr/share/doc

bzip2 ile sıkıştırılmış arşiv (.tar.bz2):

tar cvfj /tmp/backup.tar.bz2 /usr/share/doc

xz ile sıkıştırılmış arşiv (.tar.xz):

tar cvfJ /tmp/backup.tar.xz /usr/share/doc

Arşiv Açma

Mevcut dizine aç:

Terminal
$ cd /tmp
tar xvfz backup.tar.gz

Belirli bir dizine aç (-C):

Terminal
$ tar xvfz /tmp/backup.tar.gz -C /opt/restore

Arşiv İçeriğini Listeleme

Terminal
$ tar tvf /tmp/backup.tar.gz

Belirli bir dosyayı ara:

Terminal
$ tar tvf /tmp/backup.tar.gz | grep "README"

Arşivden Tek Dosya Çıkarma

tar xvfz backup.tar.gz usr/share/doc/README.txt

Arşive Dosya Ekleme

tar rvf backup.tar yeni_dosya.txt

[!NOTE] Sıkıştırılmış arşivlere (tar.gz, tar.bz2) dosya eklenemez.

[!IMPORTANT] tar Linux’ta en çok kullanılan arşivleme aracıdır. Yedekleme, dağıtım ve dosya transferi için vazgeçilmezdir!


gzip, bzip2, xz - Sıkıştırma Araçları

Bu araçlar tek dosyayı sıkıştırır (tar ile birleştirilmeden).

gzip - En Yaygın Sıkıştırma

Dosyayı sıkıştır:

Terminal
$ gzip dosya.txt

Sonuç: dosya.txt.gz (orijinal silinir)

Orijinali koruyarak sıkıştır:

Terminal
$ gzip -k dosya.txt

Sıkıştırmayı aç:

Terminal
$ gunzip dosya.txt.gz

veya:

Terminal
$ gzip -d dosya.txt.gz

bzip2 - Daha İyi Sıkıştırma

bzip2 gzip’ten daha iyi sıkıştırır ama daha yavaştır.

bzip2 dosya.txt       # Sıkıştır
bunzip2 dosya.txt.bz2 # Aç

xz - En İyi Sıkıştırma

xz en iyi sıkıştırma oranını sağlar ama en yavaştır.

xz dosya.txt      # Sıkıştır
unxz dosya.txt.xz # Aç

Sıkıştırma Araçları Karşılaştırması

AraçUzantıSıkıştırmaHızAçma Komutu
gzip.gzOrtaHızlıgunzip veya gzip -d
bzip2.bz2İyiOrtabunzip2 veya bzip2 -d
xz.xzEn iyiYavaşunxz veya xz -d

zip/unzip - Windows Uyumlu Arşivleme

Windows sistemlerle dosya paylaşımı için zip formatı kullanılır.

Zip arşivi oluştur:

Terminal
$ zip -r backup.zip /tmp/dosyalar

Zip arşivini aç:

Terminal
$ unzip backup.zip

Belirli bir dizine aç:

unzip backup.zip -d /hedef/dizin

Konu Tekrarı - Kısa Sınav


Sonraki Adım

Donanımlar ve Disk Yönetimi →