← Bash tools
TEKNİK REHBER BASH TOOLS DOSYA YÖNETİMİ 2026

mkdir, touch, ln, tree
oluşturma, damgalama, bağlantı

Dosya sistemi yapısını şekillendiren araçlar. mkdir ile dizin hiyerarşisi kur, touch ile dosya oluştur veya zaman damgası güncelle, ln ile hard ve sembolik link oluştur, tree ile görselleştir.

00 Dört aracın rolü

Dosya sistemi yapısı kurmak, sıfırdan dosya oluşturmak, birden fazla yoldan aynı içeriğe erişmek için dört küçük araç.

mkdir
Dizin ve hiyerarşi oluştur — -p ile iç içe geçmiş yollar bir komutla
touch
Boş dosya oluştur veya var olan dosyanın zaman damgasını güncelle
ln
Hard link — aynı inode, iki isim. Silinmez, dosya sisteminden bağımsız
ln -s
Sembolik link — bir yola işaret eden kısayol. Farklı dosya sistemleri arası çalışır

01 mkdir: dizin oluşturma

mkdir tek veya iç içe dizin oluşturur. -p en önemli bayrağı — var olan ara dizinleri hata vermeden geçer.

bash
# Tek dizin
mkdir yeni_dizin

# İç içe hiyerarşi (ara dizinler yoksa oluştur)
mkdir -p proje/src/components/ui

# Birden fazla dizin
mkdir a b c
mkdir -p {src,tests,docs,scripts}

# Belirli izinle oluştur
mkdir -m 700 gizli_dizin
mkdir -m 755 web_root

# Betikler için: hata vermeden oluştur (zaten varsa tamam)
mkdir -p /tmp/myapp/{logs,cache,tmp}

# Proje iskeleti kurma (brace expansion)
mkdir -p myproject/{src/{main,test},docs,scripts,.github/workflows}

# Oluşturulacak dizini göster (-v)
mkdir -pv a/b/c
mkdir: created directory 'a'
mkdir: created directory 'a/b'
mkdir: created directory 'a/b/c'
-p
Parent — ara dizinleri gerekirse oluştur; var olan dizin için hata verme
-m MODE
İzinleri belirt (oktal): -m 755, -m 700
-v
Verbose — oluşturulan her dizini yazdır
BRACE EXPANSION

Bash'in brace expansion özelliği ile tek komutla karmaşık hiyerarşi kurulabilir: mkdir -p proje/{src,tests,docs} üç dizin oluşturur. İç içe: mkdir -p {a,b}/{x,y} dört dizin oluşturur: a/x a/y b/x b/y

02 touch: dosya oluşturma ve zaman damgası

touch'ın asıl amacı zaman damgası güncellemek — dosya oluşturma ikincil bir yan etki. Ama pratikte çoğunlukla boş dosya oluşturmak için kullanılır.

bash
# Boş dosya oluştur (yoksa) veya timestamp güncelle (varsa)
touch yeni_dosya.txt

# Birden fazla dosya
touch a.txt b.txt c.txt
touch {01..10}.txt         # 01.txt - 10.txt

# Sadece atime güncelle
touch -a dosya.txt

# Sadece mtime güncelle
touch -m dosya.txt

# Belirli bir zaman damgası ayarla
touch -t 202601101200 dosya.txt   # YYYYMMDDHHMM
touch -t 202601101200.30 dosya.txt # saniye de ekle
touch -d '2026-01-10 12:00:00' dosya.txt
touch -d 'yesterday' dosya.txt      # nispi zaman
touch -d '1 hour ago' dosya.txt

# Başka dosyanın zaman damgasını kopyala
touch -r referans.txt hedef.txt

# Dosya yoksa oluşturma (sadece var olanları güncelle)
touch -c dosya.txt          # no-create
-a
Sadece erişim zamanını (atime) güncelle
-m
Sadece değişiklik zamanını (mtime) güncelle
-t STAMP
Belirli zaman: [[CC]YY]MMDDhhmm[.ss]
-d STRING
İnsan-okunur zaman ifadesi: 'yesterday', '2026-01-10'
-r FILE
Başka dosyanın zaman damgasını kopyala
-c
Dosya yoksa oluşturma

03 ln: hard link

Hard link aynı inode'u iki farklı isimle gösterir. Orijinal silinse bile diğer link erişilebilir — inode'u referans eden en az bir yol olduğu sürece veri korunur.

bash
# Hard link oluştur
ln kaynak.txt ikinci_ad.txt

# İkisi de aynı inode'u gösterir
ls -li kaynak.txt ikinci_ad.txt
1573252 -rw-r--r-- 2 user group 2847 Jan 8 dosya.txt
1573252 -rw-r--r-- 2 user group 2847 Jan 8 ikinci_ad.txt
                   ^-- link sayısı: 2

# Birini silmek diğerine etkilemez
rm kaynak.txt
cat ikinci_ad.txt     # hala erişilebilir

# Hard link dizinlere yapılamaz (döngü riski)
# Hard link aynı dosya sistemi içinde çalışır

# Inode eşleşiyor mu? (aynı dosya mı?)
stat -c '%i %n' kaynak.txt ikinci_ad.txt
HARD LINK vs SEMBOLIK LINK

Hard link: aynı inode, aynı veri. Orijinal silinse veri kaybolmaz. Sadece aynı dosya sistemi, dizinlere yapılamaz.

Sembolik link: başka bir yola işaret eden kısayol. Orijinal silinirse link "kırık" olur. Farklı dosya sistemleri arası çalışır, dizinlere yapılabilir.

04 ln -s: sembolik link

Sembolik link bir yol adını başka bir yol adına yönlendirir. Yazılımın çoklu sürüm yönetimi ve paylaşılan config için temel araç.

bash
# Sembolik link oluştur (kaynak → hedef)
ln -s /gerçek/yol.txt kısayol.txt

# Dizine sembolik link
ln -s /var/www/html/v2 /var/www/html/current

# Var olan linki değiştir (force)
ln -sf /gerçek/yol_v2.txt kısayol.txt

# Link hedefini göster
readlink kısayol.txt
readlink -f kısayol.txt    # tüm sembolleri çöz (mutlak yol)

# Link mi kontrol et
ls -la /etc/localtime
lrwxrwxrwx 1 root root 33 Jan  5 /etc/localtime -> /usr/share/zoneinfo/Europe/Istanbul

# Kırık linkleri bul
find . -type l ! -e         # sembolik link ama hedef yok

# Dotfiles yönetimi örneği (home dizin config'leri)
ln -s ~/dotfiles/.bashrc ~/.bashrc
ln -s ~/dotfiles/.vimrc ~/.vimrc

# Uygulama sürüm değiştirme
ln -sf /opt/myapp-2.1 /opt/myapp/current
# ls -la /opt/myapp/current → /opt/myapp-2.1
-s
Sembolik link oluştur (yoksa hard link)
-f
Force — var olan hedefin üzerine yaz
-n
Hedef dizin ise ona gitmeyip onu değiştir (-sf ile birlikte)
-v
Verbose — oluşturulan linki yazdır
GÖRELİ vs MUTLAK YOL

Sembolik linklerde göreli yol linkin konumuna göre yorumlanır, mevcut dizine göre değil. ln -s ../lib/shared.so /usr/local/lib/shared.so oluşturduğunuzda, link /usr/local/lib/../lib/shared.so = /usr/local/lib/lib/shared.so'ya işaret eder — muhtemelen yanlış. Belirsizlik için mutlak yol kullanın.

05 tree: dizin görselleştirme

tree dizin hiyerarşisini ağaç yapısında gösterir. Proje yapısını belgelemek ve anlamak için idealdir.

bash
# Temel ağaç görünümü
tree
.
├── Makefile
├── README.md
├── src/
│   ├── main.go
│   └── utils/
│       └── helper.go
└── tests/
    └── main_test.go

3 directories, 5 files

# Derinlik sınırla
tree -L 2                  # sadece 2 seviye göster

# Gizli dosyaları dahil et
tree -a

# Sadece dizinleri göster
tree -d

# Dosya boyutlarını göster
tree -sh                   # insan-okunur boyutlar

# Belirli pattern'leri hariç tut
tree -I 'node_modules|*.pyc|__pycache__'

# Renkli çıktı
tree -C

# JSON formatı (programatik kullanım)
tree -J

# tree yoksa find ile benzer çıktı
find . | sed 's|[^/]*/|- |g;s|/| |g'

# Dosya sayısını, boyutu göster
tree -sh --du              # dizin toplam boyutları
-L N
Maksimum derinlik N (varsayılan: tüm hiyerarşi)
-a
Gizli dosyaları dahil et
-d
Sadece dizinleri göster
-I PATTERN
Pattern'e uyan dosyaları hariç tut (| ile birden fazla)
-s
Dosya boyutlarını göster
-h
İnsan-okunur boyutlar
-C
Renkli çıktı
-J
JSON formatında çıktı
--du
Dizin boyutlarını özyinelemeli hesapla

06 Pratik vakalar

Dizin kurulumu, dotfiles yönetimi ve proje iskeleti.

bash — Go proje iskeleti
PROJECT="myservice"
mkdir -p $PROJECT/{cmd/server,internal/{api,db,models},pkg,deployments,docs}
touch $PROJECT/{go.mod,Makefile,README.md,.gitignore}
touch $PROJECT/cmd/server/main.go
tree $PROJECT -L 3
bash — Sembolik link ile sürüm geçişi
# Yeni sürümü hazırla, link ile geçiş yap
tar -xzf myapp-2.1.tar.gz -C /opt/
ln -sfn /opt/myapp-2.1 /opt/myapp/current
# systemd veya uygulama /opt/myapp/current'ı kullanır

# Rollback: tek komut
ln -sfn /opt/myapp-2.0 /opt/myapp/current
bash — Kırık sembolik linkleri temizle
# Kırık linkleri bul
find /usr/local/bin -type l ! -e

# Bul ve sil
find /usr/local/bin -type l ! -e -delete
bash — Tarihli yedek dizin oluştur
BACKUP="/backup/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP"
cp -a /etc/myapp/ "$BACKUP/"

# "latest" linkini güncelle
ln -sfn "$BACKUP" /backup/latest
echo "Yedek: $BACKUP"
readlink /backup/latest

Hatırlanacaklar

  • mkdir -p a/b/c: ara dizinleri de oluştur — betiklerde her zaman -p
  • Brace expansion: mkdir -p {src,tests,docs} tek komutta çoklu dizin
  • touch -d 'yesterday' dosya: nispi zaman ifadesi ile zaman damgası
  • touch -r referans hedef: başka dosyanın zaman damgasını kopyala
  • Hard link: aynı inode, orijinal silinse veri yaşar; aynı FS, dizin yok
  • ln -sf yeni_hedef link: var olan sembolik linki güncelle
  • ln -sfn: hedef dizinse onu değiştir, içine girme
  • Sembolik link için mutlak yol tercih edin — göreli yol kafa karıştırabilir
  • tree -I 'node_modules|*.pyc' -L 3: proje yapısını temiz göster

Devam: ls, cp, mv, rm — temel dosya işlemleri · df, du — disk kullanımı