uname Komutu ile Sistem Bilgisi Ogrenme Teknikleri

Bir Linux sunucusuna baglandiginda ilk yapman gereken sey sistemi tanimaktir. uname komutu bu is icin en temel araclardan biridir ve dogru kullandiginda sana cok fazla bilgi verir. Bu yazida uname komutunu her acisindan ele alacagiz.

Yeni bir sunucuya SSH ile baglandin. Ne yapiyorsun? Cogu deneyimli sysadmin refleks olarak birkac komut girer – bunlarin basinda uname gelir. Kernel versiyonu ne, mimari 32 bit mi 64 bit mi, hangi isletim sistemindeyiz? Bunlari bilmeden sunucuda is yapmak, haritasiz yabanci bir sehirde araba kullanmaya benzer.

Bu yazida uname komutunu derinlemesine inceleyecegiz. Sadece temel kullanimi degil, gercek dunya senaryolarinda nasil kullandiginizi, scriptlere nasil entegre ettiginizi ve baska hangi komutlarla birlikte guclu bir sistem bilgisi tablosu olusturdugunuzu konusacagiz. Hazirsan baslayalim.

uname Nedir ve Neden Onemlidir?

uname, Unix ve Linux sistemlerde sistem bilgilerini goruntuleyen temel bir komuttur. Adi “Unix Name” kelimelerinin kisaltmasindan gelir. POSIX standartlarina dahil oldugu icin neredeyse her Unix/Linux sistemde bulunur – ister Ubuntu, ister CentOS, ister FreeBSD, ister macOS olsun.

Web sunucusu yonetiyorsan bu komut sana ozellikle kritik anlarda yardimci olur. Mesela bir guvenlik acigi cikmis, CVE numarasi var elimde, etkilenen kernel versiyonunu bilmem gerekiyor. Ya da bir yazilimi derleyeceksin, mimariyi dogrulaman lazim. Belki bir destek bileti aciyorsun ve karsi taraf “kernel versiyonunu gonder” diyor. Tum bu durumlarda uname ilk duragin olacak.

Temel Kullanim: Parametreler ve Ciktilari

Ilk once parametrelere bakalim. uname komutunu parametresiz calistirirsan sadece sistem adini gosterir. Ama asil guc parametrelerde sakli:

# Parametresiz kullanim - sadece kernel adini gosterir
uname
# Cikti: Linux

# Tek tek parametre kullanimi
uname -s   # Kernel adi (System)
uname -n   # Network hostname
uname -r   # Kernel release (versiyon)
uname -v   # Kernel version (derleme bilgisi)
uname -m   # Makine mimarisi
uname -p   # Islemci tipi
uname -i   # Donanim platformu
uname -o   # Isletim sistemi

# Hepsini bir arada gormek icin
uname -a

Simdi bu parametrelerin ne anlama geldigini tek tek konusalim. Cogu zaman sadece uname -a kullanilir ama ne gordugunu anlamak cok onemli.

ParametreAciklamaOrnek Cikti
-sKernel adiLinux
-nHostnamewebserver01.example.com
-rKernel release5.15.0-91-generic
-vKernel version (derleme tarihi)#101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023
-mMakine mimarisix86_64
-pIslemci tipix86_64
-iDonanim platformux86_64
-oIsletim sistemiGNU/Linux
-aTum bilgilerTum alanlari birlestirerek gosterir

uname -a Ciktisini Dogru Okumak

Pratik bir ornek uzerinden gidelim. Tipik bir Ubuntu sunucusunda uname -a ciktisi soyle gozukur:

uname -a
# Linux webserver01 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

# Bu ciktiyi parcalayalim:
# Linux             -> Kernel adi (-s)
# webserver01       -> Hostname (-n)
# 5.15.0-91-generic -> Kernel release (-r)
# #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 -> Kernel version (-v)
# x86_64            -> Makine mimarisi (-m)
# x86_64            -> Islemci tipi (-p)
# x86_64            -> Donanim platformu (-i)
# GNU/Linux         -> Isletim sistemi (-o)

Burada kernel versiyonu olan 5.15.0-91-generic satirini iyi anlamak lazim. Uc bolumden olusuyor: ana versiyon (5), alt versiyon (15), yama seviyesi (0) ve ardinda distroye ozgu ek bilgi. Bu numarayi guvenlik acigi aradigin zaman cok kullaniyor olacaksin.

Ipucu: Kernel versiyonunu CVE veritabanlarinda ararken uname -r ciktisini aynen kullanma. Cogu CVE, upstream kernel versiyonuna gore siniflaydirilir, distro paket numarasina gore degil. Ornegin 5.15.0-91-generic, upstream olarak 5.15 kernel ailesine karsilik gelir.

Gercek Dunya Senaryosu 1: Guvenlik Yamasi Kontrolu

Diyelim ki bir guvenlik acigi haberi okudun. Etkilenen sistemler kernel 5.x serisinin belirli bir versiyonuna kadar olan surumler. Elindeki tum web sunucularini kontrol etmen gerekiyor. Iste bu noktada uname‘i script ile birlestiriyorsun:

#!/bin/bash
# Birden fazla sunucuda kernel versiyonunu kontrol et
# sunucular.txt dosyasinda her satirda bir IP/hostname oldugununu varsayiyoruz

SUNUCU_LISTESI="sunucular.txt"
ETKILENEN_VERSIYON="5.15.0-88"

while IFS= read -r sunucu; do
    echo -n "$sunucu: "
    kernel=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$sunucu" 'uname -r' 2>/dev/null)
    if [ $? -eq 0 ]; then
        echo "Kernel: $kernel"
        # Basit versiyon karsilastirmasi
        if [[ "$kernel" == *"$ETKILENEN_VERSIYON"* ]]; then
            echo "  *** DIKKAT: Bu sunucu etkilenebilir! ***"
        fi
    else
        echo "BAGLANTI HATASI"
    fi
done < "$SUNUCU_LISTESI"

Bu script, listendeki sunuculara baglanip kernel versiyonlarini ceker ve etkilenen versiyonla karsilastirir. Otuz sunucuyu tek tek kontrol etmek yerine bunu calistirip kahveni icer, geri dondugun zaman sonuclar seni bekliyor olur.

Gercek Dunya Senaryosu 2: Mimari Bazli Paket Yukleme

Web sunucularinda bazen 32 bit ve 64 bit sistemler karisik kullanilabilir (evet, hala boyle ortamlar var). Yazdigin deployment scriptinin dogru mimariye gore paket indirmesi gerekiyor. Iste uname -m burada devreye giriyor:

#!/bin/bash
# Mimariye gore dogru binary indir ve yukle

MIMARU=$(uname -m)
APP_VERSION="2.4.1"
BASE_URL="https://releases.example-app.com"

case "$MIMARI" in
    x86_64)
        PACKAGE_URL="${BASE_URL}/app-${APP_VERSION}-linux-amd64.tar.gz"
        echo "64-bit sistem tespit edildi, amd64 paketi indiriliyor..."
        ;;
    aarch64|arm64)
        PACKAGE_URL="${BASE_URL}/app-${APP_VERSION}-linux-arm64.tar.gz"
        echo "ARM64 sistem tespit edildi, arm64 paketi indiriliyor..."
        ;;
    armv7l)
        PACKAGE_URL="${BASE_URL}/app-${APP_VERSION}-linux-armv7.tar.gz"
        echo "ARMv7 sistem tespit edildi, armv7 paketi indiriliyor..."
        ;;
    i686|i386)
        PACKAGE_URL="${BASE_URL}/app-${APP_VERSION}-linux-386.tar.gz"
        echo "32-bit sistem tespit edildi, 386 paketi indiriliyor..."
        ;;
    *)
        echo "Bilinmeyen mimari: $MIMARI"
        exit 1
        ;;
esac

wget -q "$PACKAGE_URL" -O /tmp/app.tar.gz
tar -xzf /tmp/app.tar.gz -C /opt/
echo "Kurulum tamamlandi."

Bu tarz scriptler ozellikle Ansible playbook yazmadan once prototip cikarmak icin cok isiniza yarar. Mimariye gore dallandirma yaparak hem tek scriptle tum ortamlari yonetebilirsin hem de hata riskini minimize edersin.

uname’in Sinirlamalari ve Tamamlayici Komutlar

uname guclu bir arac ama tek basina tam resmi vermez. Mesela hangi Linux dagitimini kullandigini soylemez. Ubuntu mu, CentOS mu, Debian mi? Bunu anlamak icin baska kaynaklara bakman gerekiyor:

# Distro bilgisi icin - modern sistemlerde calisir
cat /etc/os-release

# Eski sistemlerde
cat /etc/issue

# lsb_release komutu (varsa)
lsb_release -a

# Tum sistem bilgisini toplu gormek icin
echo "=== KERNEL ==="
uname -a
echo ""
echo "=== DISTRO ==="
cat /etc/os-release 2>/dev/null || cat /etc/issue 2>/dev/null
echo ""
echo "=== CPU MIMARISI ==="
uname -m
echo ""
echo "=== HOSTNAME ==="
hostname -f 2>/dev/null || uname -n

Web sunucusu yonetiminde bu bilgilerin hepsini bir arada gormek cok isine yarar. Ozellikle bir destek sureci baslayinca veya yeni bir ekip uyesi sunucuya el atacaksa bu bilgileri bir README dosyasina veya wiki’ye not etmek iyi bir aliskanlik.

hostnamectl ile Gelismis Sistem Bilgisi

Systemd kullanan modern sistemlerde hostnamectl komutu daha zengin cikti verir. uname ile birlikte kullaninca cok kapsamli bir sistem profili cikartabilirsin:

# hostnamectl cok daha detayli bilgi verir
hostnamectl

# Tipik cikti:
#  Static hostname: webserver01
#        Icon name: computer-server
#          Chassis: server
#       Machine ID: a1b2c3d4e5f6...
#          Boot ID: x9y8z7w6...
# Operating System: Ubuntu 22.04.3 LTS
#           Kernel: Linux 5.15.0-91-generic
#     Architecture: x86-64

# Sadece mimari almak icin
hostnamectl | grep Architecture

# Sadece OS bilgisi
hostnamectl | grep "Operating System"

# uname ile karsilastirmali rapor
echo "uname ciktisi:"
uname -a
echo ""
echo "hostnamectl ciktisi:"
hostnamectl

Web Sunucusu Ortamlarinda Pratik Kullanim Senaryolari

Web sunucusu yonetirken uname‘e en cok ihtiyac duydugun durumlar sunlar:

  • Nginx veya Apache’nin belirli bir versiyonu kernel ozelligi gerektiriyorsa uyumlulugu kontrol etmek
  • Let’s Encrypt/Certbot kurulumu oncesinde sistem gereksinimlerini dogrulamak
  • Docker veya container teknolojisi kurmadan once kernel versiyonunu kontrol etmek
  • eBPF tabanli monitoring araclari icin kernel gereksinimine bakmak
  • SSL/TLS ayarlari icin kernel crypto subsystem versiyonunu anlamak
  • Load balancer veya firewall kurulumu oncesinde netfilter/nftables destegini kontrol etmek

Bunlarin cogu icin sadece uname -r ciktisina bakman yeterli. Ama bazi durumlarda daha derin bir kontrol gerekebilir. Mesela Docker icin minimum kernel gereksinimini kontrol eden basit bir script:

#!/bin/bash
# Docker kurulumu icin kernel gereksinimleri kontrolu

KERNEL_VERSION=$(uname -r)
ARCH=$(uname -m)

echo "Sistem Bilgisi:"
echo "  Kernel: $KERNEL_VERSION"
echo "  Mimari: $ARCH"
echo ""

# Kernel versiyonunu parcalara ayir
MAJOR=$(echo "$KERNEL_VERSION" | cut -d. -f1)
MINOR=$(echo "$KERNEL_VERSION" | cut -d. -f2)

echo "Kernel Ana Versiyon: $MAJOR"
echo "Kernel Alt Versiyon: $MINOR"
echo ""

# Docker icin minimum kernel 3.10
if [ "$MAJOR" -gt 3 ] || ([ "$MAJOR" -eq 3 ] && [ "$MINOR" -ge 10 ]); then
    echo "GECTI: Kernel versiyonu Docker icin yeterli (min. 3.10)"
else
    echo "BASARISIZ: Kernel versiyonu cok eski! Docker icin en az 3.10 gerekli."
    exit 1
fi

# Mimari kontrolu
if [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "aarch64" ]; then
    echo "GECTI: Desteklenen mimari tespit edildi."
else
    echo "UYARI: Bu mimari ($ARCH) icin Docker destegi sinirli olabilir."
fi

echo ""
echo "Kontrol tamamlandi."

Uyari: Kernel versiyonu tek basina yeterli degildir. Docker gibi araclarin cgroup versiyonu, namespace destegi ve baska kernel modulleri gibi gereksinimleri de vardir. Yukaridaki script temel bir on kontrol icin kullanilabilir, resmi kurulum dokumantasyonunu her zaman takip et.

Monitoring ve Loglama Icin uname Kullanimi

Sistem izleme scriptleri yazarken log kayitlarina sistem bilgisini eklemek cok iyi bir aliskanlik. Logdaki bir hataya bakarken hangi kernel ve mimari oldugunu bilmek zaman kazandirir. Ozellikle farkli versiyonlarda farkli davranislar gosteren problemlerde bu bilgi altin degerinde:

#!/bin/bash
# Sistem bilgisini log dosyasina yaz
# Bu scripti cron ile gunluk calistirabilisin

LOG_DIR="/var/log/sysinfo"
LOG_FILE="${LOG_DIR}/system_snapshot_$(date +%Y%m%d).log"

mkdir -p "$LOG_DIR"

{
    echo "======================================"
    echo "Sistem Anlık Goruntu - $(date '+%Y-%m-%d %H:%M:%S')"
    echo "======================================"
    echo ""
    echo "[KERNEL BILGISI]"
    echo "Tam uname -a ciktisi: $(uname -a)"
    echo "Kernel adi: $(uname -s)"
    echo "Kernel versiyonu: $(uname -r)"
    echo "Kernel derleme: $(uname -v)"
    echo "Mimari: $(uname -m)"
    echo "Hostname: $(uname -n)"
    echo ""
    echo "[OS BILGISI]"
    if [ -f /etc/os-release ]; then
        grep -E '^(NAME|VERSION|ID)=' /etc/os-release
    fi
    echo ""
    echo "[SISTEM KAYNAKLARI]"
    echo "CPU cekirdek sayisi: $(nproc)"
    echo "Toplam RAM: $(free -h | awk '/^Mem:/ {print $2}')"
    echo "Disk kullanimi:"
    df -h / | tail -1
    echo ""
    echo "======================================"
} >> "$LOG_FILE"

echo "Sistem bilgisi kaydedildi: $LOG_FILE"

Bu scripti /etc/cron.daily/ altina koyarsan her gun otomatik olarak calisir ve sistemin gecmisini kayit altina alirsin. Kernel guncellemenin ardinda hangi versiyona gectinizi, ne zaman gectinizi bu loglardan takip edebilirsin.

macOS ve Diger Unix Sistemlerinde uname

Sadece Linux degil, macOS da dahil hemen her Unix sisteminde uname calisir. Gelistirme ortaminda Mac kullanip production’da Linux calistiriyorsan bunu bilmen faydali. Aralarindaki farklara dikkat et:

  • macOS’ta uname -s ciktisi “Darwin” olarak gelir
  • macOS’ta uname -r Darwin kernel versiyonunu verir, macOS surumunu degil
  • FreeBSD’de uname -s ciktisi “FreeBSD” olarak gelir
  • Cross-platform script yazarken uname -s ile OS kontrolu yapmak iyi bir pratik

Eger hem Linux hem macOS’ta calisacak bir script yaziyorsan, bunu su sekilde handle edebilirsin:

#!/bin/bash
# Cross-platform sistem bilgisi - Linux ve macOS destekli

OS_TYPE=$(uname -s)

case "$OS_TYPE" in
    Linux)
        echo "Linux sistem tespit edildi."
        echo "Kernel: $(uname -r)"
        echo "Mimari: $(uname -m)"
        if [ -f /etc/os-release ]; then
            DISTRO=$(grep '^NAME=' /etc/os-release | cut -d= -f2 | tr -d '"')
            echo "Dagitim: $DISTRO"
        fi
        PAKET_YONETICISI="apt-get veya yum"
        ;;
    Darwin)
        echo "macOS (Darwin) tespit edildi."
        echo "Darwin kernel: $(uname -r)"
        echo "macOS surumu: $(sw_vers -productVersion 2>/dev/null || echo 'bilinmiyor')"
        echo "Mimari: $(uname -m)"
        PAKET_YONETICISI="brew"
        ;;
    FreeBSD)
        echo "FreeBSD tespit edildi."
        echo "Versiyon: $(uname -r)"
        PAKET_YONETICISI="pkg"
        ;;
    *)
        echo "Bilinmeyen sistem: $OS_TYPE"
        PAKET_YONETICISI="bilinmiyor"
        ;;
esac

echo "Onerilecek paket yoneticisi: $PAKET_YONETICISI"

Sonraki Adimlar

uname komutuna hakim olduktan sonra sistem bilgisi toplama konusunda kendini daha da gelistirebilecegin bir yol haritasi sunuyorum:

  • procfs’i ogrenin: /proc/version, /proc/cpuinfo, /proc/meminfo gibi dosyalar uname’den cok daha derin sistem bilgisi verir. Bunlari okumak icin ek bir komuta gerek yok, sadece cat yeterli.
  • dmidecode komutuna bakin: Donanim bilgisi (BIOS versiyonu, RAM slotlari, anakart modeli) icin dmidecode vazgecilmezdir. Root yetkisi gerektirir.
  • lscpu ve lsblk ogrenin: CPU detaylari icin lscpu, disk yapisi icin lsblk harika tamamlayicilardır. uname ile birlikte kullandiginda tam bir donanim profili cikarabilirsin.
  • Ansible facts mekanizmasina bakin: Birden fazla sunucu yonetiyorsan Ansible’in otomatik olarak toplayan ansible_facts modulu seni cok ugrastirici manuel islerden kurtarir.
  • Monitoring sistemine entegre et: Prometheus, Grafana veya benzeri araclara uname bilgilerini label olarak ekleyebilirsin. Boylece metriklerine bakarken hangi kernel versiyonunda oldugunu aninda gorursun.
  • Kernel changelog takibi: uname -r ile ogrendigin versiyon numarasini kernel.org veya distronun changelog sayfasiyla eslestirerek sisteme ne zaman hangi degisikliklerin geldigi hakkinda bilgi sahibi olabilirsin.

uname komutu tek basina kucuk ve sade gorunebilir, ama dogru kullanildiginda sistem yonetiminin temel taslarindan biridir. Guvenlik kontrollerinde, deployment scriptlerinde, troubleshooting sureclerinde ve otomasyonda surekli isinize yarayacak. Scriptlerine entegre et, loglarina ekle ve her yeni sunucuya baglandiginda ilk reflekslerinden biri haline getir.