Linux’u ilk öğrenmeye başladığımda, ev dizinimde neden bu kadar az dosya göründüğünü anlayamıyordum. ls komutunu çalıştırıyor, birkaç klasör görüyor ve “tamam, bu kadar mı?” diye düşünüyordum. Ta ki birileri bana ls -a yazmamı söyleyene kadar. O an ekranda beliren onlarca dosya ve dizin… Hem şaşırtıcıydı hem de biraz ürkütücü. İşte o gün Linux’taki gizli dosya sistemini anlamaya başladım.
Noktalı Dosyalar Nedir?
Linux’ta bir dosya veya dizinin adı nokta (.) ile başlıyorsa, bu dosya gizli sayılır. Bu “gizlilik” Windows’taki gibi özel bir özellik bayrağı değildir. Tamamen isimlendirme kuralına dayalı, son derece basit bir mekanizmadır. ls komutu varsayılan olarak nokta ile başlayan dosyaları göstermez, bu kadar.
Bu yaklaşımın güzel tarafı şu: Karmaşık bir izin sistemi veya gizlilik bayrağı olmadan, sadece dosya adının başına bir nokta koyarak ev dizinini dağıtmadan uygulama yapılandırmalarını saklayabilirsiniz. .bashrc, .vimrc, .ssh gibi dosyalar tam da bu yüzden gizli tutulur. Kullanıcı ev dizinine baktığında yalnızca kendi oluşturduğu dosyaları görür, sistem ve uygulama yapılandırmaları arka planda sessizce bekler.
Önemli bir not: Bu dosyalar güvenlik amacıyla gizli değildir. Uygun izinlere sahip herkes bu dosyalara erişebilir. Gizliliğin amacı sadece görsel düzeni sağlamaktır.
Gizli Dosyaları Görmek
ls Komutuyla Temel Kullanım
En temel yöntem -a parametresidir:
ls -a
Bu komut şuna benzer bir çıktı verir:
. .. .bash_history .bash_logout .bashrc .cache .config .local .profile .ssh Documents Downloads
Burada . mevcut dizini, .. ise üst dizini temsil eder. Bunlar her zaman görünür.
Daha okunabilir bir çıktı için -la kombinasyonunu kullanıyorum:
ls -la
Bu komut dosyaların boyutlarını, izinlerini ve son değiştirilme tarihlerini de gösterir. Günlük işlerde benim en çok başvurduğum kombinasyon budur.
Sadece gizli dosyaları görmek istiyorsanız, normal dosyaları filtreleyebilirsiniz:
ls -d .*
Bu komut yalnızca nokta ile başlayan dosya ve dizinleri listeler.
find Komutuyla Gizli Dosyaları Aramak
Sistem genelinde veya belirli bir dizin altında gizli dosyaları aramak istediğinizde find komutu çok işe yarar:
find /home/kullanici -name ".*" -type f
Bu komut belirtilen kullanıcının ev dizini altındaki tüm gizli dosyaları listeler. -type f parametresi sadece dosyaları getirir, dizinleri dahil etmez.
Gizli dizinleri bulmak için:
find /home/kullanici -name ".*" -type d
Sistemdeki tüm kullanıcıların gizli yapılandırma dosyalarını taramak gerektiğinde (örneğin güvenlik denetimi yaparken) şunu kullanabilirsiniz:
find /home -name ".*" -type f -ls 2>/dev/null
2>/dev/null kısmı erişim hatalarını bastırır, çıktıyı temiz tutar.
Gizli Dosya Oluşturmak ve Yönetmek
Gizli Dosya Oluşturmak
Bir dosyayı gizli yapmak için tek yapmanız gereken adını nokta ile başlatmak:
touch .gizli_dosya
# veya
echo "bu bir gizli nottur" > .notlarim
Gizli dizin oluşturmak da aynı prensiple çalışır:
mkdir .gizli_dizin
Gizli Dosyaları Taşımak ve Kopyalamak
Burada sysadmin’lerin sık düştüğü bir tuzak var. cp veya rsync kullanırken gizli dosyaların atlanması sorunu:
# Bu komut gizli dosyaları KOPYALAMAZ
cp -r /kaynak/dizin/* /hedef/dizin/
# Bu komut gizli dosyaları da kopyalar
cp -r /kaynak/dizin/. /hedef/dizin/
Fark ince ama kritik: * glob ifadesi gizli dosyaları kapsamaz. Nokta kullandığınızda ise mevcut dizinin tüm içeriği, gizli dosyalar dahil, kopyalanır.
rsync ile yedekleme yaparken de aynı şey geçerli. Gizli dosyaların yedeklenmesini garantilemek için:
rsync -avz /home/kullanici/ /yedek/kullanici/
Burada kaynak dizinin sonundaki / karakteri önemlidir. Bu şekilde gizli dosyalar dahil tüm içerik hedef dizine kopyalanır.
Gerçek Dünya Senaryoları
Senaryo 1: Yeni Bir Sunucuda Yapılandırma Kontrolü
Yeni bir Linux sunucuyu teslim aldığınızda veya bir kullanıcının hesabını incelemeniz gerektiğinde, gizli dosyalar size çok şey anlatır:
# Kullanıcının shell geçmişini kontrol et
cat /home/kullanici/.bash_history
# SSH yetkili anahtarlarını gör
cat /home/kullanici/.ssh/authorized_keys
# Kullanıcının özel environment ayarlarını incele
cat /home/kullanici/.bashrc
cat /home/kullanici/.profile
Bir güvenlik olayı sonrasında .bash_history dosyasını incelemek, saldırganın hangi komutları çalıştırdığını anlamamıza yardımcı olur. Tabii ki akıllı bir saldırgan bu dosyayı temizler ama acemi saldırganlar genellikle bunu yapmaz.
Senaryo 2: Dotfile Yönetimi ve Taşınabilir Yapılandırma
Birden fazla sunucuda aynı yapılandırmaları kullanmak istiyorsanız, dotfile yönetimi ciddi bir konu haline gelir. Ben genellikle şu yaklaşımı kullanıyorum:
# Yapılandırma dosyalarını git deposunda tut
mkdir ~/dotfiles
cd ~/dotfiles
git init
# Mevcut yapılandırmaları buraya taşı
mv ~/.bashrc ~/dotfiles/bashrc
mv ~/.vimrc ~/dotfiles/vimrc
# Sembolik linkler oluştur
ln -s ~/dotfiles/bashrc ~/.bashrc
ln -s ~/dotfiles/vimrc ~/.vimrc
# Değişiklikleri commit et
git add .
git commit -m "ilk dotfile commit"
Bu yöntemle yeni bir sunucuya geçtiğinizde sadece git deposunu klonlayıp sembolik linkleri oluşturmanız yeterli. Tüm yapılandırmalarınız hazır.
Senaryo 3: SSH Yapılandırması ve Güvenlik
.ssh dizini özellikle kritik bir gizli dizindir. İzinleri yanlış ayarlandığında SSH bağlantıları başarısız olur:
# SSH dizini ve dosyaları için doğru izinler
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/config
# Mevcut izinleri kontrol et
ls -la ~/.ssh/
Eğer SSH anahtarlarıyla bağlanmakta sorun yaşıyorsanız, ilk bakılacak yer bu izinlerdir. SSH daemon güvenlik açısından çok katıdır; izinler geniş ayarlanmışsa anahtarı kullanmayı reddeder.
Senaryo 4: Uygulama Yapılandırma Dosyalarını Bulmak
Bir uygulamanın yapılandırma dosyasının nerede olduğunu bilmiyorsanız:
# Belirli bir uygulamanın gizli yapılandırma dosyalarını bul
find ~ -name ".git*" -type f 2>/dev/null
# Tüm gizli yapılandırma dizinlerini listele
ls -la ~/.config/
# Son 7 günde değiştirilen gizli dosyaları bul
find ~ -name ".*" -type f -mtime -7 2>/dev/null
Bu komut özellikle bir uygulama beklenmedik davranışlar sergilediğinde, son değişen yapılandırma dosyasını bulmak için çok kullanışlıdır.
Önemli Sistem Gizli Dosyaları
Bir Linux sisteminde karşılaşacağınız önemli gizli dosya ve dizinleri bilmek, troubleshooting süreçlerini hızlandırır.
Ev Dizinindeki Kritik Dosyalar
- .bashrc: Bash shell başladığında çalışan yapılandırma dosyası. Alias’lar, fonksiyonlar ve ortam değişkenleri burada tanımlanır.
- .bash_profile veya .profile: Login shell başladığında çalışır. PATH gibi kritik ortam değişkenleri genellikle burada ayarlanır.
- .bash_history: Çalıştırılan komutların geçmişi. Varsayılan olarak 1000 komut saklar.
- .bash_logout: Shell kapandığında çalışan komutlar.
- .vimrc: Vim editörünün yapılandırma dosyası.
- .gitconfig: Git için kullanıcı adı, email ve tercihler.
- .ssh/: SSH anahtarları ve yapılandırması.
- .config/: XDG uyumlu uygulama yapılandırmaları.
- .local/: Kullanıcıya özel uygulama verileri ve binary dosyalar.
- .cache/: Uygulama önbellek dosyaları.
Shell Yapılandırma Dosyalarını Düzenlemek
# .bashrc'ye yeni bir alias ekle
echo "alias ll='ls -la'" >> ~/.bashrc
# PATH değişkenine dizin ekle
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
# Değişiklikleri hemen aktif et
source ~/.bashrc
# veya
. ~/.bashrc
source veya . komutu dosyayı çalıştırır ve değişiklikler mevcut terminal oturumunda hemen geçerli olur. Yoksa yeni bir terminal açmanız gerekir.
Gizli Dosyalarla Çalışırken Dikkat Edilecekler
Silme İşlemlerinde Tehlike
En sık karşılaştığım sorunlardan biri, gizli dosyaların yanlışlıkla silinmesi veya silinmemesidir. rm -rf * komutu gizli dosyaları silmez. Bu bazen istenen davranış olmayabilir:
# Bu komut gizli dosyaları SİLMEZ
rm -rf *
# Bu komut mevcut dizindeki her şeyi siler (gizli dahil)
rm -rf .[!.]* ..?*
# Daha güvenli yöntem: önce ne silineceğini gör
ls -la
rm -rf .istemediğim_dosya
Bir dizini tamamen temizlemek istediğinizde gizli dosyaların geride kalması beklenmedik sorunlara yol açabilir. Özellikle uygulama deploy süreçlerinde buna dikkat edin.
Yedekleme Scriptlerinde Gizli Dosyalar
Pek çok yedekleme scripti gizli dosyaları unutur. Bir müşterinin sunucusunda şöyle bir yedekleme scripti bulmuştum:
# YANLIS: Gizli dosyaları yedeklemiyor
tar -czf yedek.tar.gz /home/kullanici/*
# DOGRU: Gizli dosyalar dahil tam yedek
tar -czf yedek.tar.gz /home/kullanici/
# İçeriği doğrula
tar -tzf yedek.tar.gz | grep "^./."
tar komutu dizin adının sonuna / koyduğunuzda dizinin tüm içeriğini gizli dosyalar dahil arşivler. * kullandığınızda ise gizli dosyalar dışarıda kalır.
Disk Kullanımını Analiz Ederken
Disk dolduğunda gizli dizinler büyük yer kaplayabilir. .cache dizini özellikle şişmeye meyillidir:
# Ev dizinindeki gizli dizinlerin boyutlarını gör
du -sh ~/.* 2>/dev/null | sort -h
# Cache dizininin boyutunu kontrol et
du -sh ~/.cache
# En büyük gizli dizinleri bul
du -sh ~/.* 2>/dev/null | sort -rh | head -10
Bir kullanıcının “disk doldu” şikayetiyle geldiğinde, .cache dizininin birkaç gigabayt olduğunu gördüm. ~/.cache/chromium veya ~/.cache/pip gibi dizinler kontrolsüz büyüyebilir.
Sistem Genelinde Gizli Dosyalar
Ev dizinlerinin dışında sistem genelinde de önemli gizli dosyalar bulunur. Bunların çoğu kök dizin altındaki yapılandırma dosyalarıdır:
# /etc altındaki bazı gizli dosyalar (pek yoktur ama kontrol etmekte fayda var)
find /etc -name ".*" -type f 2>/dev/null
# Kök kullanıcının gizli dosyaları
sudo ls -la /root/
# Servis hesaplarının gizli dosyaları
sudo ls -la /var/www/
sudo ls -la /home/www-data/ 2>/dev/null
Özellikle servis hesaplarının (www-data, nginx, postgres gibi) ev dizinlerindeki gizli dosyalar gözden kaçabilir. Bu hesapların .bashrc veya .profile dosyaları bazen hatalı yapılandırılmış ortam değişkenleri içerebilir.
.gitignore ile Gizli Dosyaları Yönetmek
Geliştirme ortamlarında çalışıyorsanız, gizli dosyaların git’e yanlışlıkla eklenmesi ciddi bir güvenlik sorunudur. API anahtarları, şifreler ve private SSH anahtarları genellikle gizli dosyalarda saklanır:
# .gitignore'a gizli dosyaları ekle
echo ".*" >> .gitignore
# Belirli gizli dosyaları hariç tut ama .gitconfig gibi paylaşılabilecekleri dahil et
echo "!.gitconfig" >> .gitignore
echo "!.bashrc" >> .gitignore
# Zaten takip edilen gizli dosyaları önbelleğten kaldır
git rm -r --cached .env
git rm -r --cached .secret
Bu konuda dikkatli olun. Git deposuna bir kez hassas bilgi gönderildiğinde, geçmişten temizlemek zahmetli bir süreçtir.
Pratik Araçlar ve Kısayollar
Günlük işlerde gizli dosyaları yönetmeyi kolaylaştıran bazı alias tanımlamaları:
# .bashrc'e eklenebilecek faydalı alias'lar
alias la='ls -la'
alias l.='ls -d .* --color=auto'
alias gizlibul='find . -name ".*" -type f 2>/dev/null'
# Sadece gizli dosyaları listele (. ve .. hariç)
alias gizli='ls -la | grep "^."'
Bu alias’ları .bashrc dosyasına ekledikten sonra source ~/.bashrc ile aktif edin. Artık la yazdığınızda gizli dosyalar dahil tam listeyi görürsünüz.
Sonuç
Linux’taki noktalı dosya sistemi, görünürde basit bir isimlendirme kuralı gibi görünse de pratikte sysadmin işinin ayrılmaz bir parçasıdır. Yapılandırma dosyalarını düzenlemekten güvenlik denetimlerine, yedekleme scriptlerinden disk analizi çalışmalarına kadar pek çok senaryoda bu dosyaların davranışını bilmek fark yaratır.
En sık karşılaşılan tuzakları özetlemek gerekirse: cp ve rm komutlarının gizli dosyaları dahil etmediğini, yedekleme scriptlerinde özellikle dikkat edilmesi gerektiğini ve .cache gibi dizinlerin sessiz sedasız büyüyebileceğini unutmayın. SSH dizininin izinleri de küçük ama kritik bir detaydır; yanlış izin ayarı saatlerce kafa karışıklığına neden olabilir.
Bir sunucuyu devraldığınızda ya da bir sorunu debug ederken her zaman ls -la ile başlayın. Görünmeyen dosyalar çoğu zaman cevapları içerir.