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ç.
-p ile iç içe geçmiş yollar bir komutla01 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.
# 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'
-m 755, -m 700Bash'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.
# 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
[[CC]YY]MMDDhhmm[.ss]'yesterday', '2026-01-10'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.
# 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: 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ç.
# 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
-sf ile birlikte)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.
# 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ı
| ile birden fazla)06 Pratik vakalar
Dizin kurulumu, dotfiles yönetimi ve 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
# 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
# Kırık linkleri bul
find /usr/local/bin -type l ! -e
# Bul ve sil
find /usr/local/bin -type l ! -e -delete
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üncelleln -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ı