mkdir Komutu: Linux’ta Dizin Oluşturma ve Gelişmiş Kullanımı

Linux dünyasında her şey dosya ve dizinlerden oluşur. Sistem yöneticisi olarak günde onlarca kez dizin oluşturursunuz ve bu işlemin temel aracı mkdir komutudur. “Make Directory” kelimelerinin kısaltması olan bu komut, ilk bakışta son derece basit görünse de arka planda oldukça güçlü özellikler barındırır. Bu yazıda mkdir komutunu tüm detaylarıyla ele alacağız, gerçek dünya senaryolarıyla pekiştireceğiz.

Temel Kullanım

mkdir komutunun en basit kullanımı tek bir dizin oluşturmaktır:

mkdir yeni_dizin

Bu kadar. Ama işin aslı burada bitmez. Gelin adım adım derinleşelim.

Söz Dizimi

mkdir [SEÇENEKLER] DIZIN_ADI...

Birden fazla dizin adı vererek tek seferde birkaç dizin oluşturabilirsiniz:

mkdir dizin1 dizin2 dizin3

Bu komut üç ayrı dizini aynı anda oluşturur. Basit ama işe yarayan bir özellik.

Önemli Seçenekler ve Parametreler

-p Seçeneği: İç İçe Dizin Yapıları

mkdir‘in en çok kullanılan ve en güçlü seçeneği -p (parents) parametresidir. Bu seçenek sayesinde arada olmayan üst dizinleri otomatik olarak oluşturabilirsiniz.

Örneğin şöyle bir yapı kurmak istiyorsunuz:

/var/www/projeler/eticaret/src/components

Bu yapıdaki hiçbir dizin henüz mevcut değil. Normalde bunu yapmak için altı ayrı mkdir komutu çalıştırmanız gerekir. -p ile tek satırda halledersiniz:

mkdir -p /var/www/projeler/eticaret/src/components

Bir de şu duruma dikkat edin: Eğer oluşturmaya çalıştığınız dizin zaten mevcutsa, -p seçeneği hata vermez. Sessizce geçer. Bu özellikle script yazarken hayat kurtarıcıdır.

# Bu komut iki kez çalıştırılsa da hata vermez
mkdir -p /tmp/test_dizini
mkdir -p /tmp/test_dizini  # Hata yok, sessizce geçer

-m Seçeneği: İzin Ayarları

Dizin oluştururken doğrudan izinleri ayarlamak isterseniz -m (mode) seçeneğini kullanırsınız:

mkdir -m 755 web_dizini
mkdir -m 700 ozel_dizin
mkdir -m 777 paylasilan_dizin

Bu, mkdir sonrasında chmod çalıştırmaya göre daha temiz bir yaklaşımdır. Özellikle otomasyonda tek adımda hem oluşturup hem izin vermek büyük kolaylık sağlar.

-v Seçeneği: Verbose (Ayrıntılı) Çıktı

Script’lerinizde ne olduğunu takip etmek istiyorsanız -v kullanın:

mkdir -v yeni_klasor
# Çıktı: mkdir: created directory 'yeni_klasor'

Bu özellikle -p ile birlikte kullanıldığında hangi dizinlerin oluşturulduğunu görmek için harikadır:

mkdir -pv /opt/uygulama/logs/2024/ocak
# Çıktı:
# mkdir: created directory '/opt/uygulama'
# mkdir: created directory '/opt/uygulama/logs'
# mkdir: created directory '/opt/uygulama/logs/2024'
# mkdir: created directory '/opt/uygulama/logs/2024/ocak'

Gerçek Dünya Senaryoları

Senaryo 1: Web Sunucusu Proje Yapısı Kurma

Yeni bir web projesi için standart bir dizin yapısı oluşturmanız gerekiyor. Bunu tek bir mkdir komutuyla yapabilirsiniz:

mkdir -p /var/www/html/proje/{css,js,images,fonts,uploads,logs}

Burada süslü parantez genişletmesi (brace expansion) kullanıyoruz. Bu bash özelliği sayesinde proje dizini altında altı ayrı alt dizin tek komutla oluşturulur.

Daha karmaşık bir yapı için:

mkdir -p /var/www/html/eticaret/{public/{css,js,images},private/{config,logs,cache},src/{controllers,models,views}}

Bu komut şu yapıyı oluşturur:

eticaret/
├── public/
│   ├── css/
│   ├── js/
│   └── images/
├── private/
│   ├── config/
│   ├── logs/
│   └── cache/
└── src/
    ├── controllers/
    ├── models/
    └── views/

Tek satır, saniyeler içinde kurumsal düzeyde bir dizin yapısı. Bu kadar temiz.

Senaryo 2: Log Arşivleme Yapısı

Sistem loglarını yıl/ay/gün bazında düzenlemek istiyorsunuz. Basit bir script ile bu yapıyı otomatik oluşturabilirsiniz:

#!/bin/bash
# Log dizin yapısını oluşturan script

YIL=$(date +%Y)
AY=$(date +%m)
GUN=$(date +%d)
LOG_BASE="/var/log/arsiv"

mkdir -p "$LOG_BASE/$YIL/$AY/$GUN"

if [ $? -eq 0 ]; then
    echo "Log dizini başarıyla oluşturuldu: $LOG_BASE/$YIL/$AY/$GUN"
else
    echo "Hata: Log dizini oluşturulamadı!" >&2
    exit 1
fi

Bu script’i cron’a ekleyerek her gün otomatik çalıştırabilirsiniz:

# crontab -e ile ekleyin
0 0 * * * /opt/scripts/log_dizin_olustur.sh

Senaryo 3: Çoklu Kullanıcı Ev Dizini Kurulumu

Yeni bir sunucuya on kullanıcı ekleyeceksiniz ve her biri için standart bir ev dizini yapısı kurmanız gerekiyor:

#!/bin/bash
# Kullanıcı listesi
KULLANICILAR=("ahmet" "mehmet" "ayse" "fatma" "ali")
EV_DIZINI_BASE="/home"

for kullanici in "${KULLANICILAR[@]}"; do
    # Temel dizin yapısını oluştur
    mkdir -pv "$EV_DIZINI_BASE/$kullanici"/{belgeler,indirmeler,masaustu,muzik,videolar,.config,.local/share}
    
    # Sahipliği ayarla
    chown -R "$kullanici:$kullanici" "$EV_DIZINI_BASE/$kullanici"
    
    # İzinleri ayarla
    chmod 700 "$EV_DIZINI_BASE/$kullanici"
    
    echo "[$kullanici] için ev dizini yapısı hazırlandı."
done

Bu tür toplu işlemlerde mkdir -p olmazsa olmazdır. Hata kontrolü yapmadan güvenle kullanabilirsiniz.

Senaryo 4: Yedekleme Dizin Yapısı

Profesyonel bir yedekleme sistemi kurarken dizin organizasyonu kritik önem taşır:

#!/bin/bash
# Yedekleme sistemi için dizin yapısı

YEDEK_KOKU="/mnt/yedekler"
SUNUCU_ADI=$(hostname)
TARIH=$(date +%Y-%m-%d)

# Temel yapıyı oluştur
mkdir -pm 750 "$YEDEK_KOKU/$SUNUCU_ADI/$TARIH"/{veritabani,dosyalar,konfigurasyon,log}

# Yedekleme scripti için çalışma dizini
mkdir -pm 700 /tmp/yedek_gecici

echo "Yedekleme dizin yapısı hazır:"
echo "  Konum: $YEDEK_KOKU/$SUNUCU_ADI/$TARIH"
ls -la "$YEDEK_KOKU/$SUNUCU_ADI/$TARIH"

Burada -pm şeklinde iki seçeneği birleştirdiğimize dikkat edin. -p ve -m 750 beraber çalışarak hem yapıyı oluşturur hem de izinleri doğru ayarlar.

Umask ile İlişkisi

mkdir komutunun varsayılan olarak hangi izinlerle dizin oluşturduğu umask değerine bağlıdır. Bu önemli bir noktadır.

Linux’ta dizinlerin temel izni 777’dir. Umask bu değerden çıkarılarak gerçek izin hesaplanır:

# Mevcut umask değerini görün
umask
# Genellikle: 022

# 777 - 022 = 755 (rwxr-xr-x)
mkdir test_dizini
ls -ld test_dizini
# drwxr-xr-x 2 kullanici grup 4096 ...

Eğer -m seçeneğini kullanırsanız umask devre dışı kalır ve verdiğiniz izin doğrudan uygulanır:

mkdir -m 700 gizli_dizin
ls -ld gizli_dizin
# drwx------ 2 kullanici grup 4096 ...

Bu farkı anlamak güvenlik açısından son derece önemlidir. Özellikle paylaşımlı sistemlerde hassas verilerin bulunduğu dizinleri oluştururken -m ile izinleri açıkça belirtmek güvenli bir alışkanlıktır.

İleri Düzey Kullanım Örnekleri

Geçici Dizinler ve Güvenlik

Script’lerde geçici dizin oluştururken mktemp ile birlikte kullanmak güvenli bir yaklaşımdır:

# Güvenli geçici dizin oluşturma
GECICI_DIR=$(mktemp -d)
echo "Geçici dizin: $GECICI_DIR"

# İşlemler bittikten sonra temizleme
trap "rm -rf $GECICI_DIR" EXIT

Ama bazen geçici dizin konumunu siz belirlemek istersiniz:

GECICI_DIR="/tmp/script_$$"  # $$ mevcut PID'i verir, benzersizlik sağlar
mkdir -m 700 "$GECICI_DIR"

Dizin Varlık Kontrolü ile Birlikte

Script’lerde sıkça kullanılan bir kalıp:

#!/bin/bash
DIZIN="/opt/uygulama/data"

if [ ! -d "$DIZIN" ]; then
    mkdir -p "$DIZIN"
    echo "Dizin oluşturuldu: $DIZIN"
else
    echo "Dizin zaten mevcut: $DIZIN"
fi

Ancak bu kalıp yerine doğrudan mkdir -p kullanmak çoğu zaman daha temizdir, çünkü -p zaten var olan dizinler için hata vermez. Ama bazen oluşturulup oluşturulmadığını loglamamız gerekebilir, bu durumda if kontrolü mantıklıdır.

Sembolik Bağlantı ile Birlikte Kullanım

Gerçek dünyada sıkça karşılaştığım bir senaryo: Uygulama günlükleri için merkezi bir dizin yapısı kurmak ve sembolik bağlantıyla uygulamaya bağlamak:

# Merkezi log dizini oluştur
mkdir -p /var/log/uygulamalar/webapp/2024

# Uygulamanın beklediği yola sembolik bağlantı ver
ln -s /var/log/uygulamalar/webapp/2024 /opt/webapp/logs

Sık Yapılan Hatalar ve Çözümleri

Hata 1: İzin Reddedildi

mkdir /etc/yeni_dizin
# mkdir: cannot create directory '/etc/yeni_dizin': Permission denied

Çözüm: sudo kullanın ya da dizin oluşturmak için yeterli yetkiye sahip olduğunuzdan emin olun.

Hata 2: Dosya Zaten Var (Dizin Değil)

touch test
mkdir test
# mkdir: cannot create directory 'test': File exists

Çözüm: Aynı adda bir dosya var. -p bile bu durumda hata verir çünkü bir dosyayı dizine çeviremez.

Hata 3: Uzun Yol Bileşeninin Yokluğu

mkdir /var/www/proje/alt_dizin
# mkdir: cannot create directory '/var/www/proje/alt_dizin': No such file or directory

Çözüm: -p seçeneğini kullanın.

Pratik İpuçları

  • Brace expansion ile zaman kazanın: mkdir -p proje/{src,test,docs,build} gibi kullanımlar script’lerinizi hem kısaltır hem okunur kılar.
  • Script’lerde her zaman -p kullanın: Zaten var olan dizinler için hata almamak otomasyon güvenilirliğini artırır.
  • İzinleri baştan belirleyin: Dizin oluşturma ve izin verme işlemini iki adıma ayırmak yerine -m ile tek seferde yapın.
  • -v ile debug edin: Script geliştirme aşamasında -v ekleyerek ne yapıldığını takip edin, production’da kaldırın.
  • Sahiplik ayarını unutmayın: mkdir sonrası sıkça yapılan hata, dizini root ile oluşturup sahipliği değiştirmeyi unutmaktır. Script’lerinize chown eklemeyi ihmal etmeyin.

Sonuç

mkdir komutu, görünürde en basit Linux komutlarından biridir. Ama doğru kullanıldığında sistem yönetimi scriptlerinin vazgeçilmez bir parçasına dönüşür. -p, -m ve -v seçeneklerini öğrenmek, brace expansion ile birleştirmek ve gerçek senaryolarda uygulamak bu komuttan maksimum verimi almanızı sağlar.

Özellikle otomasyon scriptleri yazarken mkdir -p kullanımını alışkanlık haline getirin. Hem hata toleransını artırır hem de kodunuzu daha temiz tutar. Dizin yapısı tasarımına özen gösterin; iyi organize edilmiş bir dizin hiyerarşisi, ilerleyen günlerde yönetim yükünüzü ciddi ölçüde azaltır.

Bir sonraki yazıda rmdir ve rm -r ile dizin silme işlemlerini ele alacağız. Takipte kalın.

Yorum yapın