Yirmi yıldır bu sistemlerin içinde, konsolun başında, o siyah ekrana bakarak sorun çözüp bir şeyler inşa ediyorum. Bu süreçte yüzlerce komut kullandım, bazıları sadece görevini yaptı geçti, bazıları ise benim için adeta birer kurtarıcı oldu. “En Sevdiğim Linux Komutları” dediğimde aklıma gelenler, sadece basit araçlar değil, aynı zamanda geçmişteki zorlu anların, uykusuz gecelerin ve sonunda gelen zaferlerin sembolleri.
Bu yazıda, sadece bir komut listesi sunmak yerine, bu konsol kahramanlarının benim için ne anlama geldiğini ve onları neden bu kadar çok sevdiğimi anlatacağım. Her biriyle ilgili mutlaka bir anım, bir kurtarma operasyonum var. Benim için favori bir komut, en çok kullandığım değil, en çok kriz anında yanımda olan ve bana “işte bu!” dedirten komuttur.
Metin İşlemedeki Sihirbazlarım: awk ve sed
Bir üretim ERP’sinde çalışırken, bazen öyle log dosyalarıyla karşılaşırsınız ki, terabaytlarca verinin içinden iğne aramak gibi bir şeydir. Hatta daha da beteri, belirli bir formatta gelen ama içinde tutarsızlıklar olan veri setlerini işlemek zorunda kalırsınız. İşte tam da bu anlarda awk ve sed benim için birer sihirbaza dönüşür.
Bir keresinde, bir tedarik zinciri entegrasyonu sırasında gelen binlerce satırlık CSV dosyasında belirli bir ürün kodunun formatı sürekli yanlış geliyordu. Gelen sistemden düzeltmek mümkün değildi, manuel yapmak ise günler sürerdi. sed ile saniyeler içinde o dosyadaki tüm yanlış formatları doğruya çevirip, awk ile sadece istediğim alanları çekip yeni bir çıktı oluşturduğumu hatırlıyorum. O an, bu iki komutun bana kazandırdığı zaman ve efor paha biçilemezdi.
# Bir dosyada belirli bir desenin tüm geçişlerini değiştirmek
sed -i 's/YANLIS_KOD_FORMATI/DOGRU_KOD_FORMATI/g' input.csv
# Bir CSV dosyasından sadece 1. ve 3. sütunları çekmek
awk -F',' '{print $1 "," $3}' input.csv > output.csv
Bu komutlar, sadece metin işlemekten öte, veri manipülasyonu ve otomasyonun temel taşlarıdır benim için. Karmaşık veri setlerini saniyeler içinde anlamlı bilgilere dönüştürmek, problem çözme sürecimi inanılmaz hızlandırıyor.
Görünmeyeni Ortaya Çıkarmak: strace ve lsof
Bir sistem yöneticisi olarak en sevmediğim şey “çalışmıyor” demek. Çünkü her şeyin bir sebebi vardır ve bu sebebi bulmak benim işim. İşte bu noktada strace ve lsof gibi komutlar devreye giriyor. Bir uygulamanın neden başlamadığını, neden belirli bir dosyayı açamadığını veya neden bir network bağlantısı kuramadığını anlamanın en hızlı yolu, sistem çağrılarını izlemektir.
Bir keresinde, Java tabanlı bir uygulama beklenmedik bir şekilde “Permission Denied” hatası veriyordu. Dosya izinlerini, kullanıcı haklarını defalarca kontrol etmeme rağmen sorunu bulamıyordum. En sonunda strace ile uygulamayı çalıştırdım ve gördüm ki, uygulama aslında log dosyasını yazmak istediği dizine değil, başka bir yere yazmaya çalışıyordu ve o dizinde gerçekten de yazma izni yoktu. strace, dosya katmanında saatlerce sürecek bir baş ağrısını kısa sürede çözen araç oldu. lsof ise, bir portun neden meşgul olduğunu veya bir dosyanın hangi uygulama tarafından açık tutulduğunu anlamak için vazgeçilmez bir dostumdur.
# Bir uygulamanın sistem çağrılarını izlemek
strace -f -o output.log /path/to/my_application
# Bir portu veya dosyayı kullanan süreçleri görmek
lsof -i :8080
lsof /var/log/syslog
Bu komutlar, bana sistemin iç işleyişine bir röntgen çekme imkanı sunar. Görünmeyen katmanlardaki problemleri net bir şekilde ortaya çıkarır ve çözüme giden yolu aydınlatır.
Sistem Davranışını Anlamak: journalctl ve systemd-analyze
Modern Linux sistemlerinde systemd hayatımızın vazgeçilmez bir parçası. Servislerin durumunu, boot sürecini ve sistemdeki olayları anlamak için journalctl ve systemd-analyze olmadan bir adım bile atamıyorum. Özellikle journald rate limit’lerini ayarlarken veya belirli bir servisin neden sürekli yeniden başladığını anlamaya çalışırken bu komutlar kritik önem taşıyor.
Bir servis hiçbir hata vermeden, sessizce kapanıyorsa cevap çoğu zaman loglardadır: journalctl ile servisin loglarını detaylıca incelediğinizde, çoğu kez bir OOM-killed mesajıyla karşılaşırsınız — yani servis bellek yetersizliğinden sonlandırılmıştır. systemd-analyze kullanarak boot sürecindeki gecikmeleri analiz etmek veya cgroup limitlerini kontrol etmek de rutin işlerim arasında. Bu sayede, performans sorunlarının kökenine inmek çok daha kolaylaşıyor.
# Belirli bir servisin loglarını takip etmek
journalctl -u my_service.service -f
# En yavaş açılan systemd birimlerini listelemek
systemd-analyze blame
Bu iki komut, sistemdeki “neden böyle oldu?” sorularına cevap bulmamı sağlayan, güçlü diagnostik araçlardır. Sistemimin nabzını tutmamı ve potansiyel sorunları erkenden tespit etmemi sağlarlar.
Ağ Katmanındaki Gözüm Kulağım: tcpdump ve ss
Ağ sorunları, bazen en inatçı problemlerden biri olabilir. Paketlerin kaybolduğu, bağlantıların anlamsızca kesildiği veya performansın beklentinin altında kaldığı durumlarda tcpdump ve ss benim için vazgeçilmezdir. Örneğin birden çok ISP’nin kullanıldığı bir çıkışta DSCP marking doğru yapılmadığında ses paketlerinin bozulması gibi senaryolarda, tcpdump ile anlık paket akışını izleyerek hangi paketlerin yanlış işaretlendiğini ve nerede düştüğünü tespit edebilirsiniz.
ss (socket statistics) ise, netstat’ın modern ve daha güçlü bir alternatifi olarak, aktif bağlantıları, dinlenen portları ve ağ istatistiklerini hızlıca görmemi sağlar. Bir sunucuda beklenmedik bağlantı yoğunluğu olduğunda veya bir uygulama bağlantı havuzunu doğru yönetemediğinde, ss bana anında görsel bir teşhis sunar.
# Belirli bir interface'ten geçen HTTP trafiğini izlemek
sudo tcpdump -i eth0 'port 80 and host 192.168.1.1'
# Tüm TCP bağlantılarını ve durumlarını görmek
ss -tuna
Bu komutlar, ağ trafiğinin derinliklerine inmemi ve soyut görünen ağ problemlerini somut verilere dönüştürmemi sağlar. Görünmeyen ağ katmanında adeta birer dedektif gibi çalışmama yardımcı olurlar.
Üretkenliğimin Sırrı: tmux ve htop
Son olarak, belki de en basit ama günlük iş akışımı en çok kolaylaştıran iki komut: tmux ve htop. tmux, birden fazla terminal oturumunu tek bir pencerede yönetmeme, hatta oturumlarımı kapatıp sonra tekrar açtığımda kaldığım yerden devam etmeme olanak tanıyor. Bir sunucuda uzun süreli bir işlem başlattığımda, SSH bağlantım kesilse bile işlemin çalışmaya devam ettiğini bilmek büyük bir rahatlık.
htop ise, klasik top komutunun çok daha kullanıcı dostu ve görsel bir alternatifi. Sunucudaki kaynak kullanımını, süreçleri ve bellek durumunu anlık olarak izlemek için sürekli elim altında. Özellikle bir uygulamanın CPU veya bellek tüketiminde anormal bir artış gördüğümde, htop bana ilk ipucunu veren araç oluyor.
# Yeni bir tmux oturumu başlatmak
tmux new -s my_session
# htop ile sistem kaynaklarını izlemek
htop
Bu komutlar, doğrudan bir problemi çözmekten ziyade, benim problem çözme ve sistem yönetimi sürecimi daha verimli hale getiren, konfor alanımı genişleten araçlardır.
Sonuç: Komutlar Sadece Başlangıç
Benim için “En Sevdiğim Linux Komutları” listesi, sadece teknik bir tercih değil, aynı zamanda yılların birikiminin, sayısız olayın ve sürekli öğrenme sürecinin bir yansımasıdır. Her bir komut, bana bir şeyler öğretmiş, bir sorunu çözdürmüş veya işimi kolaylaştırmıştır. Konsoldaki bu sessiz kahramanlar, bana sadece birer araç değil, aynı zamanda birer problem çözme felsefesi sunuyor.
Peki ya senin favori Linux komutların neler? Hangi komutlar seni en zor anlarda kurtardı veya iş akışını baştan aşağı değiştirdi? Yorumlarda benimle paylaşmanı çok isterim.