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):
$ apt-get install tree -yTemel kullanım:
$ tree /usrDerinlik sınırlama (-L):
$ tree /usr -L 1Bu komut sadece 1 seviye derinlikte görüntüler. -L 2 ile 2 seviye görüntülenebilir.
Sadece dizinleri göster (-d):
$ tree -d /varGizli dosyaları da göster (-a):
$ tree -a /homeİnsan okunabilir boyutlar (-h):
$ tree -h /tmp| Parametre | Açıklama |
|---|---|
-L N | N seviye derinliğe kadar göster |
-d | Sadece dizinleri göster |
-a | Gizli dosyaları da göster |
-h | Dosya boyutlarını göster |
-f | Tam dosya yollarını göster |
-p | İzinleri göster |
--du | Dizin boyutlarını hesapla |
-I PATTERN | Belirtilen pattern’i hariç tut |
Belirli dosyaları hariç tut:
tree -I 'node_modules|*.log' /project
[!TIP]
treekomutu 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:
$ find /usr -name "share"Wildcard ile arama:
$ find /usr -name "share*"Büyük/küçük harf duyarsız arama (-iname):
$ find /home -iname "*.TXT"Bu komut .txt, .TXT, .Txt gibi tüm varyasyonları bulur.
Türe Göre Arama (-type)
Sadece dosyaları bul:
$ find /usr -type f -name "*.txt"Sadece dizinleri bul:
$ find /usr -type d -name "share*"Sembolik linkleri bul:
$ find /usr -type l| Tür | Açıklama |
|---|---|
f | Normal dosya (file) |
d | Dizin (directory) |
l | Sembolik link |
b | Block device (disk gibi) |
c | Character device (terminal gibi) |
s | Socket |
p | Named pipe |
Kullanıcı ve Gruba Göre Arama
Kullanıcıya göre:
$ find / -user root -iname "*.txt" 2>/dev/nullGruba göre:
$ find /var -group www-data 2>/dev/nullSahipsiz 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):
$ find /var/log -mmin -120Son 7 günde değiştirilen dosyalar (-mtime):
$ find /home -mtime -77 günden eski dosyalar:
$ find /tmp -mtime +7| Parametre | Açıklama |
|---|---|
-mmin -N | Son N dakikada değiştirilen |
-mmin +N | N dakikadan daha önce değiştirilen |
-mtime -N | Son N günde değiştirilen |
-mtime +N | N günden daha önce değiştirilen |
-newer FILE | Belirtilen dosyadan daha yeni |
Boyuta Göre Arama (-size)
100MB’dan büyük dosyalar:
$ find / -type f -size +100M 2>/dev/nullTam 10MB dosyalar:
$ find /var -type f -size 10M1MB’dan küçük dosyalar:
$ find /tmp -type f -size -1MBoş dosyaları bul:
$ find /tmp -type f -empty| Boyut Birimi | Açıklama |
|---|---|
c | Byte |
k | Kilobyte |
M | Megabyte |
G | Gigabyte |
İzinlere Göre Arama (-perm)
Tam izin eşleşmesi:
$ find /usr -perm 755En az belirtilen izinlere sahip (-):
$ find / -perm -4000 2>/dev/nullBu 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):
$ find /var -type f -name "*.log" -size +1MVEYA (-o):
$ find /tmp -name "*.txt" -o -name "*.log"DEĞİL (-not veya !):
$ 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:
$ 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:
$ find /tmp -name "*.txt" | xargs ls -laxargs birden fazla dosyayı tek komutta işler, daha hızlıdır.
[!CAUTION]
find -exec rmkomutunu çalıştırmadan önce mutlaka-execolmadan test edin! Önce hangi dosyaların bulunacağını görün.
Pratik find Örnekleri
Disk alanı yiyen büyük dosyaları bul:
$ find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null | sort -k5h7 günden eski log dosyalarını sil:
find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;
Belirli bir kelimeyi içeren dosyaları bul:
$ find /etc -type f -exec grep -l "password" {} \; 2>/dev/nullTüm boş dizinleri bul:
$ find /tmp -type d -empty[!IMPORTANT]
findLinux 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 | İsim | Dosyada | Dizinde |
|---|---|---|---|
r | Read (Okuma) | Dosya içeriğini oku | Dizin içeriğini listele (ls) |
w | Write (Yazma) | Dosyayı değiştir | Dizinde dosya oluştur/sil |
x | Execute (Çalıştır) | Dosyayı çalıştır | Dizine 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:
$ touch /tmp/test.txt
chown nobody /tmp/test.txt
ls -la /tmp/test.txtSahip ve grubu birlikte değiştir:
$ chown nobody:nogroup /tmp/test.txtSadece grubu değiştir:
$ chown :sys /tmp/test.txtRecursive (alt dizinlerle birlikte):
chown -R www-data:www-data /var/www/html
| Parametre | Açıklama |
|---|---|
-R | Recursive (alt dizinler dahil) |
-v | Verbose (yapılan değişiklikleri göster) |
-c | Sadece değişen dosyaları göster |
--reference=FILE | Başka bir dosyanın sahipliğini kopyala |
chgrp - Dosya Grubunu Değiştir
chgrp (change group) komutu sadece grubu değiştirir.
$ chgrp sys /tmp/test.txt
ls -la /tmp/test.txtRecursive:
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ı | İzin | Binary |
|---|---|---|
| 0 | — | 000 |
| 1 | –x | 001 |
| 2 | -w- | 010 |
| 3 | -wx | 011 |
| 4 | r– | 100 |
| 5 | r-x | 101 |
| 6 | rw- | 110 |
| 7 | rwx | 111 |
Yaygın izin kombinasyonları:
| Değer | İzin | Kullanım |
|---|---|---|
| 755 | rwxr-xr-x | Çalıştırılabilir dosyalar, dizinler |
| 644 | rw-r–r– | Normal dosyalar |
| 600 | rw——- | Gizli dosyalar (SSH key gibi) |
| 700 | rwx—— | Özel dizinler |
| 777 | rwxrwxrwx | Tehlikeli! Herkes her şeyi yapabilir |
Örnek kullanım:
$ chmod 755 /tmp/test.txt
ls -la /tmp/test.txt$ chmod 644 /tmp/test.txt
ls -la /tmp/test.txtSembolik Yöntem
Sembolik yöntem daha okunabilirdir:
| Harf | Anlamı |
|---|---|
u | User (sahip) |
g | Group (grup) |
o | Others (diğerleri) |
a | All (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):
$ chmod -R 755 /tmp/mydirÖzel İzin Bitleri
| Bit | Sayı | İsim | Etkisi |
|---|---|---|---|
| SUID | 4000 | Set User ID | Dosya sahibinin yetkisiyle çalıştır |
| SGID | 2000 | Set Group ID | Grup yetkisiyle çalıştır |
| Sticky | 1000 | Sticky Bit | Dizinde sadece sahip silebilir |
SUID örneği (passwd komutu):
$ ls -la /usr/bin/passwd-rwsr-xr-x - s harfi SUID’i gösterir.
Sticky bit örneği (/tmp dizini):
$ ls -ld /tmpdrwxrwxrwt - t harfi sticky bit’i gösterir.
[!TIP] İzin sorunlarını çözmek için:
ls -laile izinleri kontrol edin,chmodile 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
| Parametre | Açıklama |
|---|---|
if=FILE | Input file (kaynak) |
of=FILE | Output file (hedef) |
bs=SIZE | Block size |
count=N | Sadece N blok kopyala |
status=progress | İlerleme durumunu göster |
conv=sync,noerror | Hata 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
| Parametre | Tam İsim | Açıklama |
|---|---|---|
c | create | Yeni arşiv oluştur |
x | extract | Arşivi aç |
t | list | Arşiv içeriğini listele |
v | verbose | Ayrıntılı çıktı göster |
f | file | Arşiv dosya adı |
z | gzip | gzip ile sıkıştır/aç |
j | bzip2 | bzip2 ile sıkıştır/aç |
J | xz | xz ile sıkıştır/aç |
Arşiv Oluşturma
Sıkıştırmasız arşiv (.tar):
$ tar cvf /tmp/backup.tar /usr/share/docgzip ile sıkıştırılmış arşiv (.tar.gz veya .tgz):
$ tar cvfz /tmp/backup.tar.gz /usr/share/docbzip2 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ç:
$ cd /tmp
tar xvfz backup.tar.gzBelirli bir dizine aç (-C):
$ tar xvfz /tmp/backup.tar.gz -C /opt/restoreArşiv İçeriğini Listeleme
$ tar tvf /tmp/backup.tar.gzBelirli bir dosyayı ara:
$ 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]
tarLinux’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:
$ gzip dosya.txtSonuç: dosya.txt.gz (orijinal silinir)
Orijinali koruyarak sıkıştır:
$ gzip -k dosya.txtSıkıştırmayı aç:
$ gunzip dosya.txt.gzveya:
$ gzip -d dosya.txt.gzbzip2 - 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ırma | Hız | Açma Komutu |
|---|---|---|---|---|
| gzip | .gz | Orta | Hızlı | gunzip veya gzip -d |
| bzip2 | .bz2 | İyi | Orta | bunzip2 veya bzip2 -d |
| xz | .xz | En iyi | Yavaş | 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:
$ zip -r backup.zip /tmp/dosyalarZip arşivini aç:
$ unzip backup.zipBelirli bir dizine aç:
unzip backup.zip -d /hedef/dizin