Linux, sunucu ve geliştirme ortamlarında baskın işletim sistemidir. Bir geliştirici olarak terminal komutlarına hakim olmak, verimliliğinizi ve problem çözme hızınızı dramatik biçimde artırır.
Dosya Sistemi Navigasyonu
// BASH //
# Neredeyim?
pwd # /home/ali/projeler
# Dizin içeriğini listele
ls # Basit liste
ls -la # Gizli dosyalar dahil, detaylı
ls -lh # Okunabilir boyutlar (KB, MB)
ls -lt # Değişiklik zamanına göre sırala
# Dizin değiştir
cd /var/log # Mutlak yol
cd ../.. # İki üst dizine çık
cd ~ # Home dizini
cd - # Önceki dizine dön
# Dizin oluştur
mkdir proje
mkdir -p src/components/ui # İç içe dizinler
# Dosya işlemleri
cp kaynak.txt hedef.txt # Kopyala
cp -r kaynak-klasor/ hedef/ # Klasörü kopyala
mv eski-ad.txt yeni-ad.txt # Taşı/yeniden adlandır
rm dosya.txt # Sil
rm -rf klasor/ # Klasörü zorla sil (DİKKATLİ!)Dosya İçeriği Görüntüleme
// BASH //
# Kısa dosyalar
cat dosya.txt # Tamamını göster
head -20 dosya.txt # İlk 20 satır
tail -20 dosya.txt # Son 20 satır
tail -f /var/log/app.log # Canlı takip (log izleme)
# Uzun dosyalar
less dosya.txt # Sayfalı okuma (q = çık, / = ara)
more dosya.txt # Basit sayfalı okuma
# Dosya bilgisi
file dosya.bin # Dosya türü
wc -l dosya.txt # Satır sayısı
wc -w dosya.txt # Kelime sayısı
du -sh klasor/ # Dizin boyutu
df -h # Disk kullanımıArama ve Filtreleme
// BASH //
# grep — metin arama
grep "hata" /var/log/app.log # Satır ara
grep -i "ERROR" log.txt # Büyük/küçük harf duyarsız
grep -r "TODO" src/ # Klasörde recursive ara
grep -n "import" server.ts # Satır numarası göster
grep -v "DEBUG" log.txt # Eşleşmeyenleri göster
grep -E "^[0-9]+" veri.txt # Regex ile ara
# find — dosya arama
find . -name "*.log" # Uzantıya göre
find . -name "*.ts" -newer package.json # package.json'dan yeni
find /tmp -mtime +7 -delete # 7 günden eski, sil
find . -type d -name "__pycache__" # Sadece dizinler
find . -size +10M # 10MB'dan büyük
# locate — veritabanından hızlı arama
sudo updatedb # Veritabanını güncelle
locate nginx.confPipe ve Yönlendirme
// BASH //
# | (pipe) — bir komutun çıktısını diğerine gönder
cat /var/log/auth.log | grep "Failed" | tail -20
ps aux | grep nginx | grep -v grep
# > — dosyaya yaz (üzerine yaz)
ls -la > dosya-listesi.txt
# >> — dosyaya ekle
echo "Log kaydı $(date)" >> uygulama.log
# 2> — hata çıktısını yönlendir
komut 2> hatalar.txt
komut > cikti.txt 2>&1 # Hem normal hem hata aynı dosyaya
# /dev/null — çıktıyı yok et
komut > /dev/null 2>&1
# tee — hem ekrana hem dosyaya
make build 2>&1 | tee build.log
# xargs — çıktıyı argüman olarak kullan
find . -name "*.log" | xargs rm # Tüm log dosyalarını sil
cat dosyalar.txt | xargs wc -l # Her dosyanın satır sayısıSüreç Yönetimi
// BASH //
# Çalışan süreçler
ps aux # Tüm süreçler
ps aux | grep "node" # Node süreçleri
top # Canlı sistem monitörü
htop # Renkli, interaktif (kurulum gerekli)
# Süreç sonlandır
kill 1234 # PID'e sinyal gönder (varsayılan: SIGTERM)
kill -9 1234 # Zorla öldür (SIGKILL)
pkill -f "node server.js" # İsimle öldür
# Arka plana gönder
npm run dev & # & ile arka plana
nohup npm start & # Terminal kapanınca da çalışsın
disown %1 # Job'ı terminal'dan ayır
# Jobs
jobs # Arka plan işleri
fg %1 # Öne getir
bg %1 # Arka plana gönder
Ctrl+Z # Süreci durdur (SIGSTOP)
Ctrl+C # Süreci sonlandır (SIGINT)İzinler (Permissions)
// BASH //
# İzin yapısı: [türü][sahip][grup][diğer]
# -rwxr-xr-- sahip=rwx, grup=r-x, diğer=r--
ls -la script.sh
# -rwxr-xr-x 1 ali developers 1234 Jun 15 14:30 script.sh
# chmod — izin değiştir
chmod 755 script.sh # Sahip:rwx, Grup:r-x, Diğer:r-x
chmod +x script.sh # Çalıştırma izni ekle
chmod -w config.json # Yazma iznini kaldır
chmod -R 644 public/ # Recursive
# Sayısal izinler
# 4=okuma, 2=yazma, 1=çalıştırma
# 7=rwx, 6=rw-, 5=r-x, 4=r--
# chown — sahiplik değiştir
chown ali:developers dosya.txt
chown -R www-data:www-data /var/www/
# sudo — yönetici yetkisi
sudo apt update && sudo apt upgrade -y
sudo systemctl restart nginxAğ Komutları
// BASH //
# Bağlantı testi
ping google.com
curl -I https://api.example.com # HTTP başlıkları
curl -s https://api.example.com/health | jq # JSON formatla
# Port kontrol
ss -tulnp # Dinleyen portlar
ss -tulnp | grep :3000 # Belirli port
netstat -an | grep LISTEN # (eski yöntem)
# DNS
nslookup google.com
dig google.com
host google.com
# Dosya transfer
scp -r yerel/klasor/ kullanici@sunucu:/uzak/yol/
rsync -avz --progress src/ kullanici@sunucu:/hedef/Shell Scripting Temelleri
// BASH //
#!/bin/bash
# Shebang — hangi interpreter kullanılacağı
set -e # Hata olunca dur
set -u # Tanımsız değişkende hata
# Değişkenler
AD="Ali"
YAS=25
echo "Merhaba, $AD! (${YAS} yaşında)"
# Koşullar
if [ -f /etc/nginx/nginx.conf ]; then
echo "Nginx kurulu"
elif [ -d /usr/local/nginx ]; then
echo "Nginx farklı konumda"
else
echo "Nginx bulunamadı"
fi
# Döngüler
for DOSYA in *.log; do
echo "İşleniyor: $DOSYA"
gzip "$DOSYA"
done
# Fonksiyon
log_yaz() {
local SEVIYE=$1
local MESAJ=$2
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$SEVIYE] $MESAJ" >> /var/log/script.log
}
log_yaz "INFO" "Script başlatıldı"
# Argümanlar
if [ $# -lt 1 ]; then
echo "Kullanım: $0 <ortam>"
exit 1
fi
ORTAM=$1 # İlk argümanSystemd Servis Yönetimi
// BASH //
# Servis durumu
systemctl status nginx
systemctl status postgresql
# Servis yönetimi
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx # Config yeniden yükle (yeniden başlatmadan)
# Otomatik başlatma
sudo systemctl enable nginx # Sistem açılınca başlat
sudo systemctl disable nginx # Sistem açılınca başlatma
# Loglar
journalctl -u nginx # Servis logları
journalctl -u nginx -f # Canlı log takibi
journalctl -u nginx --since "1 hour ago"Sonuç
Linux terminal becerileri bir geliştirici için kritik altyapıdır. Dosya sistemi, süreç yönetimi, ağ komutları ve shell scripting'i kavrayarak sunucu yönetimi, CI/CD otomasyonu ve hata ayıklama süreçlerinizi çok daha verimli hale getirebilirsiniz. Bir sonraki derste SSH ve uzak sunucu yönetimini ele alacağız.