00 Sistem durum araçları
Yeni bir sisteme bağlandığınızda veya sorun giderirken ilk çalıştırdığınız komutlar bunlardır.
# 1. Ne zaman açıldı, yük nasıl?
uptime
# 2. Hangi kernel, hangi OS?
uname -a
# 3. RAM durumu
free -h
# 4. Disk durumu
df -h
# 5. CPU bilgisi
lscpu
01 free: bellek kullanımı
free toplam, kullanılan, boş ve önbellek belleği gösterir. Linux bellek modeli biraz karmaşıktır — "available" sütunu gerçek boş alanı gösterir.
# İnsan-okunur (en yaygın kullanım)
free -h
total used free shared buff/cache available
Mem: 15Gi 4.2Gi 1.1Gi 234Mi 10Gi 10Gi
Swap: 2.0Gi 0Ki 2.0Gi
# Megabyte bazlı
free -m
# Gigabyte bazlı
free -g
# Her N saniyede yenile
free -h -s 2 # 2 saniyede bir
free -h -s 2 -c 5 # 5 kez tekrar et, dur
# watch ile sürekli izle
watch -n 1 'free -h'
# Sadece belirli satırı al (betik için)
free -m | awk '/^Mem:/ {printf "Kullanılan: %dM / Toplam: %dM\n", $3, $2}'
-s ile birlikte)Linux'ta free sütunu yanıltıcıdır — çekirdek dosya önbelleği için kullandığı belleği boş olarak göstermez. available sütunu gerçekten kullanılabilecek belleği gösterir: boş + geri alınabilecek önbellek. Uygulamalar başlamadan önce bu sütuna bakın.
02 uptime ve yük ortalaması
uptime sistemin ne kadar süredir çalıştığını ve CPU yük ortalamalarını gösterir.
# Çalışma süresi ve yük ortalaması
uptime
14:23:05 up 42 days, 3:15, 2 users, load average: 1.23, 0.87, 0.65
# ^1dk ^5dk ^15dk
# Sadece çalışma süresini göster
uptime -p
up 6 weeks, 10 hours, 15 minutes
# Son boot zamanı
uptime -s
2025-11-28 11:08:03
# Alternatif: who -b de boot zamanını gösterir
who -b
# CPU sayısına göre yük yorumu
nproc # kaç CPU core var?
8
# Yük 8.0 → %100 meşgul, 4.0 → %50 meşgul
# 1dk yük > nproc → sistem aşırı yüklü
Load average (yük ortalaması), son 1/5/15 dakikadaki ortalama çalışmak isteyen (CPU'da veya I/O bekleyen) süreç sayısıdır. CPU sayısıyla karşılaştırın: 8 core'lu sistemde yük 8.0 = %100 dolu, 4.0 = %50. 1dk yük 15dk yükten çok yüksekse ani artış, tersi ise iyileşme.
03 uname: kernel ve sistem bilgisi
uname kernel, işlemci mimarisi, hostname ve OS hakkında bilgi verir. CI/CD betikleri ve OS tespiti için temel araç.
# Tüm bilgiler
uname -a
Linux myserver 6.1.0-25-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.106-3 (2024-08-26) x86_64 GNU/Linux
# Sadece kernel versiyonu
uname -r
6.1.0-25-amd64
# Makine mimarisi
uname -m
x86_64
# İşlemci tipi
uname -p
# OS adı
uname -s
Linux
# OS dağıtım bilgisi (uname'den daha detaylı)
cat /etc/os-release
lsb_release -a # Ubuntu/Debian tabanlı sistemlerde
# Betiklerde platform tespiti
case "$(uname -s)" in
Linux*) echo "Linux" ;;
Darwin*) echo "macOS" ;;
MINGW*) echo "Windows/Git Bash" ;;
*) echo "Bilinmiyor" ;;
esac
# ARM mı x86 mi?
arch=$(uname -m)
if [[ "$arch" == "aarch64" ]]; then
echo "ARM64 sistemi"
fi
04 hostname ve ek sistem bilgisi
Hostname değiştirme, FQDN alma ve dağıtım sürümünü okuma.
# Mevcut hostname
hostname
myserver
# Tam nitelikli alan adı (FQDN)
hostname -f
myserver.example.com
# IP adresini al
hostname -I
192.168.1.10 10.0.0.1
# Hostname geçici olarak değiştir
sudo hostname yeni-sunucu-adi
# Kalıcı değiştir (systemd)
sudo hostnamectl set-hostname yeni-sunucu-adi
hostnamectl # mevcut durum
# OS dağıtım bilgisi
cat /etc/os-release | grep '^PRETTY_NAME'
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
# Çalışan kullanıcılar
who
w # kim oturum açmış ve ne yapıyor
05 date: zaman ve biçimlendirme
date sistem saatini gösterir ve betiklerde zaman damgası üretmek için kullanılır. Biçimlendirme oldukça esnek.
# Mevcut tarih ve saat
date
Fri Jan 10 14:23:05 +03 2026
# ISO 8601 format (log ve dosya adı için ideal)
date +%Y-%m-%d
2026-01-10
date +%Y-%m-%dT%H:%M:%S
2026-01-10T14:23:05
# Dosya adı için güvenli (boşluk yok)
date +%Y%m%d_%H%M%S
20260110_142305
# Unix timestamp (epoch)
date +%s
1736512985
# Epoch'tan tarihe çevir
date -d @1736512985
date -d @1736512985 +%Y-%m-%d
# Nispi tarih (GNU date)
date -d 'yesterday' +%Y-%m-%d
date -d '1 week ago' +%Y-%m-%d
date -d 'next monday' +%Y-%m-%d
date -d '+3 days' +%Y-%m-%d
# UTC zamanı
date -u
date -u +%Y-%m-%dT%H:%M:%SZ # ISO 8601 UTC
# Belirli tarihin gün adı
date -d '2026-01-10' +%A
Saturday
| Format | Anlam | Örnek |
|---|---|---|
%Y | 4 haneli yıl | 2026 |
%m | Ay (01-12) | 01 |
%d | Gün (01-31) | 10 |
%H | Saat (00-23) | 14 |
%M | Dakika (00-59) | 23 |
%S | Saniye (00-59) | 05 |
%s | Unix timestamp | 1736512985 |
%A | Gün adı (tam) | Friday |
%a | Gün adı (kısa) | Fri |
%B | Ay adı (tam) | January |
%Z | Zaman dilimi kısaltması | +03 |
%N | Nanosaniye | 123456789 |
06 lsblk, lscpu, lshw: donanım bilgisi
Disk bölümleri, CPU detayları ve donanım envanteri için özel araçlar.
# Disk ve bölüm listesi
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 49G 0 part /
└─sda2 8:2 0 1G 0 part [SWAP]
# Dosya sistemi türüyle
lsblk -f
# JSON formatı
lsblk -J
# CPU bilgisi
lscpu
lscpu | grep -E 'Model|Thread|Core|Socket|CPU\(s\)'
# Kaç CPU core?
nproc
nproc --all # hyperthreading dahil tüm
# Donanım özeti (root gerekebilir)
sudo lshw -short
# PCI cihazları
lspci
lspci -v # detaylı
# USB cihazları
lsusb
# Bellek detayı (RAM modülleri)
sudo dmidecode --type memory | grep -E 'Size|Speed|Type:'
07 Pratik vakalar
Monitoring, deployment ve sistem tanımlama için tipik kullanımlar.
#!/bin/bash
echo "=== Sistem Raporu: $(date '+%Y-%m-%d %H:%M:%S') ==="
echo
echo "Hostname : $(hostname)"
echo "OS : $(grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '\"')"
echo "Kernel : $(uname -r)"
echo "Uptime : $(uptime -p)"
echo "CPUs : $(nproc)"
echo "Yük : $(uptime | awk -F'load average:' '{print $2}')"
echo
free -h
echo
df -h -x tmpfs -x devtmpfs
# Timestamp bazlı yedek adı
BACKUP="backup-$(date +%Y%m%d-%H%M%S).tar.gz"
tar -czf "$BACKUP" /etc/myapp/
# Haftalık: haftanın günü ile
BACKUP="backup-$(date +%A).tar.gz" # "backup-Monday.tar.gz"
# Yük ortalaması CPU sayısının 2 katını aşıyorsa uyar
CPUS=$(nproc)
LOAD=$(uptime | awk -F'load average: ' '{print $2}' | cut -d, -f1)
THRESHOLD=$(echo "$CPUS * 2" | bc)
if $(echo "$LOAD > $THRESHOLD" | bc -l); then
echo "UYARI: Yüksek yük: $LOAD (eşik: $THRESHOLD)"
fi
# available belleği logla (cron'la çalıştır)
free -m | awk '/^Mem:/ {
printf "%s available=%dM used=%dM\n",
strftime("%Y-%m-%dT%H:%M:%S"), $7, $3
}' >> /var/log/memory.log
Hatırlanacaklar
free -h: bellek durumu —availablesütunu gerçek boş bellekuptime: sistem süresi + 1/5/15dk yük ortalaması- Yük ortalaması / CPU sayısı > 1.0 → aşırı yüklü
uname -a: kernel + mimari + hostnameuname -m: mimari tespiti (x86_64 / aarch64)date +%Y%m%d_%H%M%S: dosya adı için güvenli timestampdate -d 'yesterday' +%Y-%m-%d: nispi tarih ifadeleri (GNU)lsblk -f: disk bölümleri ve dosya sistemi türleri
Devam: df, du — disk kullanımı · süreç ve sistem izleme — ps, top, lsof