Sunucu Yönetimi & Linux

    APT ile Paket Yönetimi Rehberi (Ubuntu ve Debian)

    Ubuntu ve Debian sunucularda apt komutuyla paket kurma, güncelleme, depo yönetimi ve bağımlılık hatalarını çözme rehberi.

    11 dk okuma Güncellendi: 10 Temmuz 2026

    Ubuntu ve Debian tabanlı bir sunucu yönetiyorsanız, gününüzün büyük bölümünü tek bir araçla geçirirsiniz: APT. "Advanced Package Tool"un kısaltması olan bu araç, sistemdeki yazılımların kurulmasından, güncellenmesinden ve kaldırılmasından sorumludur. Bir web sunucusuna Nginx kurmak, PHP sürümünü yükseltmek, güvenlik yamalarını uygulamak ya da bağımlılık zincirini onarmak; hepsi APT üzerinden yürür. Doğru kullanıldığında dakikalar içinde temiz bir kurulum yaparsınız, yanlış kullanıldığında ise "broken dependency" veya "dpkg was interrupted" gibi hatalarla saatlerce boğuşabilirsiniz.

    Bu rehberde APT'yi kıdemli bir sistem yöneticisinin günlük iş akışıyla ele alacağız. Temel söz diziminden başlayıp update ile upgrade arasındaki kritik farka, paket kurma ve tamamen temizleme yöntemlerine, depo (repository) yönetimine ve en çok can sıkan üç soruna, yani kilitli dpkg, bozuk bağımlılıklar ve GPG anahtar hatalarına kadar her adımı gerçek komut örnekleriyle göstereceğiz. Amaç, komutu ezberlemeniz değil; sistemin arka planda ne yaptığını anlayıp güvenle müdahale edebilmenizdir. Komut satırına yeniyseniz, önce Linux temel komutlar rehberimize göz atmanız temeli sağlamlaştırır.

    APT Nedir ve Temel Söz Dizimi#

    APT, Debian paket veritabanını (dpkg) yöneten üst düzey bir arayüzdür. dpkg tek tek .deb dosyalarını kurar ama bağımlılıkları çözmez; APT ise hangi paketin hangi kütüphaneye ihtiyaç duyduğunu depolardan hesaplayıp otomatik indirir. Modern sistemlerde iki komut ailesi görürsünüz: eski apt-get / apt-cache çifti ve daha yeni, daha okunabilir apt komutu. Betiklerde (script) hâlâ apt-get tercih edilir çünkü çıktısı sabittir; interaktif kullanımda ise apt daha rahattır.

    Neredeyse tüm APT komutları sistem genelinde değişiklik yaptığı için sudo yetkisi ister. Temel söz dizimi şu kalıba oturur:

    sudo apt <alt-komut> [seçenekler] [paket-adı]
    

    Sık kullanacağınız alt komutları bir tabloda toplayalım:

    KomutGörevi
    apt updateDepo paket listesini yeniler (yazılım kurmaz)
    apt upgradeKurulu paketleri en son sürüme yükseltir
    apt install <paket>Yeni paket kurar
    apt remove <paket>Paketi kaldırır, ayar dosyalarını bırakır
    apt purge <paket>Paketi ve ayar dosyalarını tamamen siler
    apt autoremoveArtık gereksiz bağımlılıkları temizler
    apt search <kelime>Paket adı ve açıklamalarında arama yapar
    apt show <paket>Paketin sürüm, boyut ve bağımlılık bilgisini gösterir

    Bu sekiz komutu iyi öğrendiğinizde, sunucu yönetiminin paket tarafının yüzde doksanını halletmiş olursunuz. Geriye kalan kısım ise depolar ve hata çözümüdür.

    apt update ile apt upgrade Arasındaki Fark#

    Yeni başlayanların en sık karıştırdığı konu budur ve karışıklık ciddi sonuçlar doğurabilir. apt update hiçbir yazılımı kurmaz veya yükseltmez. Yaptığı tek şey, /etc/apt/sources.list dosyasında ve /etc/apt/sources.list.d/ dizininde tanımlı depolara bağlanıp "hangi paketin en güncel sürümü nedir" bilgisini yerel önbelleğe indirmektir. Yani bir katalog tazeleme işlemidir.

    apt upgrade ise bu güncel kataloğa bakarak sistemde kurulu olan paketlerin yeni sürümlerini indirir ve kurar. Bu yüzden ikisi her zaman bu sırayla, arka arkaya çalıştırılır:

    sudo apt update
    sudo apt upgrade
    

    Önce kataloğu güncellemezseniz, upgrade eski bilgiye bakar ve "sisteminiz güncel" diyerek yeni yamaları atlayabilir. Bir üçüncü seçenek olan apt full-upgrade (eski adıyla dist-upgrade), yükseltme sırasında gerekirse bazı paketleri kaldırmaya da izin verir. Çekirdek (kernel) yükseltmeleri veya büyük sürüm geçişlerinde bu davranış gerekir ama üretim sunucusunda dikkatli kullanılmalıdır, çünkü beklemediğiniz bir paketi kaldırabilir.

    İki komutu tek satırda birleştirmek yaygın bir pratiktir:

    sudo apt update && sudo apt upgrade -y
    

    Buradaki && operatörü, update başarılı olursa upgrade çalıştırır; -y bayrağı ise onay sorularını otomatik "evet" ile geçer. Üretim ortamında -y bayrağını körlemesine kullanmak yerine, en azından ilk seferde yükseltilecek paket listesini gözden geçirmenizi öneririm. Özellikle veritabanı veya web sunucusu paketlerinin yükseltilmesi, servisin yeniden başlatılmasını gerektirebilir.

    Paket Kurma, Kaldırma ve Temizleme#

    Bir paketi kurmak en temel işlemdir. Örneğin Nginx web sunucusunu kuralım:

    sudo apt install nginx
    

    Birden fazla paketi tek komutta kurabilirsiniz. Bir PHP çalıştırma ortamı için tipik bir kurulum şöyledir:

    sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring
    

    Belirli bir sürümü sabitlemek isterseniz paket=sürüm biçimini kullanırsınız. Bu, üretim ortamında beklenmedik yükseltmelerden kaçınmak için değerlidir:

    sudo apt install nginx=1.24.0-1ubuntu1
    

    Kaldırma tarafında iki komut arasındaki fark önemlidir. apt remove paketi siler ama /etc/ altındaki yapılandırma dosyalarını bırakır. Aynı paketi ileride tekrar kurarsanız ayarlarınız yerinde durur. apt purge ise paketi ve ona ait tüm sistem ayar dosyalarını temizler; tamamen sıfırdan başlamak istediğinizde bunu kullanın.

    sudo apt remove nginx       # yapilandirma dosyalari kalir
    sudo apt purge nginx        # her sey temizlenir
    

    Zamanla sistemde, artık hiçbir paketin ihtiyaç duymadığı bağımlılıklar birikir. Örneğin bir uygulamayı kaldırdığınızda, onun için kurulmuş kütüphaneler öksüz kalabilir. Bunları temizlemek için:

    sudo apt autoremove
    

    Bir de indirilen .deb paket arşivlerinin önbelleği vardır. Disk alanı sıkışıksa sudo apt clean ile bu önbelleği tamamen, sudo apt autoclean ile ise yalnızca güncelliğini yitirmiş arşivleri silebilirsiniz. Küçük disk kotalı bir VDS sunucuda bu komutlar zaman zaman epeyce yer açar.

    apt-cache ve apt search ile Paket Arama#

    Kurmak istediğiniz paketin tam adını her zaman bilemezsiniz. Depolarda arama yapmak için apt search ideal başlangıçtır. Diyelim ki bir görüntü işleme aracına ihtiyacınız var:

    apt search image magick
    

    Çıktı, eşleşen paket adlarını ve kısa açıklamalarını listeler. Bir paketi kurmadan önce ayrıntılarına, yani sürümüne, boyutuna ve bağımlılıklarına bakmak isterseniz:

    apt show nginx
    

    Daha derin sorgular için apt-cache kullanışlıdır. Örneğin bir paketin hangi başka paketlere bağımlı olduğunu görmek için:

    apt-cache depends nginx
    

    Tersine, hangi paketlerin bu pakete bağımlı olduğunu, yani onu kaldırırsanız neyin etkileneceğini öğrenmek için:

    apt-cache rdepends nginx
    

    Bir paketin kurulu olup olmadığını ve sürümünü hızlıca kontrol etmenin pratik bir yolu da apt list komutudur:

    apt list --installed | grep php
    

    Bu tür sorgular, özellikle bir sorunu teşhis ederken ya da güvenlik denetimi yaparken paha biçilmezdir. Sunucunuzda hangi yazılımların yüklü olduğunu bilmek, sunucu güvenliği temellerinin de ilk adımıdır; çünkü kurmadığınız yazılım, saldırı yüzeyinizde yer kaplamaz.

    Depo (Repository) Yönetimi#

    APT, yazılımları "depo" (repository) adı verilen sunuculardan indirir. Sistemin hangi depoları kullanacağı iki yerde tanımlıdır: ana /etc/apt/sources.list dosyası ve üçüncü taraf depoların eklendiği /etc/apt/sources.list.d/ dizini. Modern Ubuntu sürümleri (24.04 ve sonrası) deb822 biçimini kullanır ve varsayılan depoları /etc/apt/sources.list.d/ubuntu.sources içinde tutar.

    Klasik sources.list satırı şu yapıdadır:

    deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
    

    Buradaki alanlar sırasıyla; paket türü (deb ikili paketler, deb-src kaynak kodu), depo adresi, dağıtım kod adı (jammy, noble, bookworm gibi) ve bileşenlerdir. main resmi ve özgür yazılımları, universe topluluk destekli paketleri, restricted ve multiverse ise farklı lisans kategorilerini içerir.

    Üçüncü taraf bir yazılımın kendi deposunu eklemenin en temiz yolu, PPA'lar için add-apt-repository komutudur:

    sudo add-apt-repository ppa:ondrej/php
    sudo apt update
    sudo apt install php8.3-fpm
    

    Bu örnek, Ubuntu'nun varsayılan deposunda olmayan güncel bir PHP sürümünü kurmanızı sağlar. Depo eklemenin ardından mutlaka apt update çalıştırmanız gerekir; aksi halde APT yeni deponun paketlerinden habersiz kalır. Bir depoyu kaldırmak için aynı komutu --remove bayrağıyla kullanırsınız:

    sudo add-apt-repository --remove ppa:ondrej/php
    

    Docker gibi bazı yazılımlar ise PPA yerine kendi deb deposunu manuel eklemenizi ister. Bu durumda depo adresini bir .list dosyasına yazar ve deponun GPG anahtarını sisteme tanıtırsınız. Anahtar konusu tam da bir sonraki başlığın konusu, çünkü en sık hata orada çıkar.

    GPG Anahtar Hatalarını Çözme#

    APT, indirdiği paketlerin gerçekten o depoya ait olduğunu ve yolda değiştirilmediğini GPG imzalarıyla doğrular. Bu, güvenlik açısından hayati bir mekanizmadır. Ancak bir deponun anahtarı sistemde tanımlı değilse şu klasik hatayı görürsünüz:

    W: GPG error: https://download.docker.com/linux/ubuntu The following signatures
       couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
    

    Eski yöntem apt-key add komutuydu ama artık kullanımdan kaldırıldı çünkü tüm anahtarları tek bir güven havuzunda tutmak risklidir. Doğru yöntem, her deponun anahtarını /etc/apt/keyrings/ dizinine ayrı bir dosya olarak indirip, depo tanımında hangi anahtarın kullanılacağını signed-by ile belirtmektir. Docker örneğiyle tam akış şöyledir:

    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
      sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    

    Ardından depo satırında bu anahtarı işaret edersiniz:

    deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu noble stable
    

    Bu satırı /etc/apt/sources.list.d/docker.list dosyasına yazıp sudo apt update çalıştırdığınızda GPG hatası kaybolur. Anahtarı doğrudan indirirken her zaman HTTPS bağlantısı ve deponun resmi adresini kullanın; güvenilmeyen kaynaktan alınan bir anahtar, güvenlik doğrulamasının tüm anlamını ortadan kaldırır. Anahtar yönetimi karmaşık gelebilir ama mantığı basittir: her depo kendi kimliğini kendi anahtarıyla kanıtlar.

    Kilitli dpkg ve Bozuk Bağımlılık Hatalarını Çözme#

    Sistem yöneticiliğinde er ya da geç iki hatayla karşılaşırsınız. Birincisi kilit (lock) hatasıdır. Arka planda unattended-upgrades çalışırken ya da bir önceki apt işlemi yarıda kesildiğinde şu mesajı görürsünüz:

    E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
    E: Unable to acquire the dpkg frontend lock
    

    İlk yapmanız gereken sabırlı olmaktır; genelde arka plandaki otomatik güncelleme birkaç dakika içinde biter. Hangi sürecin kilidi tuttuğunu görmek için:

    sudo lsof /var/lib/dpkg/lock-frontend
    

    Süreç gerçekten donmuşsa ve işiniz uzun süredir bekliyorsa, kilit dosyalarını temizleyip dpkg'yi onarabilirsiniz. Bunu yalnızca hiçbir apt süreci çalışmadığından emin olduktan sonra yapın:

    sudo rm /var/lib/apt/lists/lock
    sudo rm /var/lib/dpkg/lock
    sudo rm /var/lib/dpkg/lock-frontend
    sudo dpkg --configure -a
    

    Son satırdaki dpkg --configure -a, yarıda kalmış paket kurulumlarını tamamlar ve "dpkg was interrupted" uyarısını giderir.

    İkinci büyük sorun bozuk bağımlılıklardır (broken dependencies). Genellikle uyumsuz bir depo eklediğinizde ya da bir kurulum yarıda kaldığında ortaya çıkar. APT size bir paketi kuramayacağını, çünkü başka bir paketin gereken sürümünün bulunmadığını söyler. İlk deneyeceğiniz komut şudur:

    sudo apt --fix-broken install
    

    Bu komut, eksik bağımlılıkları bulup kurmaya, kırık zinciri onarmaya çalışır. Çoğu durumda sorunu tek başına çözer. Yardımcı olmazsa, önce paket listesini tazeleyip yükseltmeyi yeniden deneyin:

    sudo apt update
    sudo apt upgrade
    sudo dpkg --configure -a
    

    İnatçı durumlarda, çakışmaya sebep olan paketi belirleyip kaldırmak gerekebilir. Sorunlu paketi zorla temizleyip ardından autoremove çalıştırmak çoğu düğümü çözer:

    sudo apt purge sorunlu-paket
    sudo apt autoremove
    sudo apt --fix-broken install
    

    Bir uyarı: internette bulacağınız dpkg --force-all gibi "her şeyi zorla" komutlarından mümkün olduğunca kaçının. Bunlar bağımlılık kontrolünü tamamen atlar ve sistemi anlık kurtarmış gibi görünse de daha büyük bir kaosa yol açabilir. Kritik bir üretim sunucusunda müdahale öncesi mutlaka yedek almalısınız; düzenli yedekleme altyapısı tam da bu anlarda hayat kurtarır.

    Güvenli Güncelleme ve İyi Alışkanlıklar#

    APT'yi güvenle kullanmanın birkaç altın kuralı vardır. İlki, yükseltme yapmadan önce ne olacağını görmektir. apt upgrade komutunu doğrudan çalıştırmadan, hangi paketlerin tutulacağını ve nelerin değişeceğini bir simülasyonla inceleyebilirsiniz:

    sudo apt-get upgrade --dry-run
    

    İkincisi, kritik güvenlik yamalarını otomatikleştirmektir. unattended-upgrades paketi, güvenlik güncellemelerini siz uğraşmadan uygular:

    sudo apt install unattended-upgrades
    sudo dpkg-reconfigure --priority=low unattended-upgrades
    

    Üçüncüsü, bir çekirdek (kernel) yükseltmesinin ardından sistemi yeniden başlatmayı unutmamaktır; yeni çekirdek ancak reboot sonrası devreye girer. cat /var/run/reboot-required çıktısı varsa, sunucunun yeniden başlatılması gerekir.

    Aşağıdaki tablo, farklı senaryolarda hangi yaklaşımı seçmeniz gerektiğini özetler:

    SenaryoÖnerilen komutNot
    Rutin güvenlik yamalarıapt update && apt upgradeHaftalık düzenle
    Sürüm sabitlemeapt install paket=sürümÜretimde tercih et
    Büyük sürüm geçişiapt full-upgradeÖnce yedek al
    Disk temizliğiapt autoremove && apt cleanÖksüz paketleri temizler
    Otomatik güvenlikunattended-upgradesSunucu için ideal

    Bu alışkanlıkları oturttuğunuzda, paket yönetimi bir baş ağrısı olmaktan çıkıp öngörülebilir bir rutine dönüşür. Kendi altyapısını yönetmek istemeyen ekipler için ise Clou.TR'nin yönetimli sunucu hizmetleri tüm bu güncelleme ve bakım yükünü devralır.

    Sıkça Sorulan Sorular#

    apt ile apt-get arasındaki fark nedir?#

    İkisi de aynı paket sistemini yönetir ancak apt daha yeni, insan dostu bir arayüzdür; ilerleme çubuğu, renkli çıktı ve daha okunabilir mesajlar sunar. apt-get ise daha eski ve kararlı çıktı biçimine sahip olduğu için otomasyon betiklerinde tercih edilir. Günlük terminal kullanımında apt, kabuk betiklerinde ise apt-get kullanmanız en sağlıklı yaklaşımdır.

    apt upgrade komutu neden bazı paketleri tutuyor (kept back)?#

    Yükseltme sırasında "The following packages have been kept back" mesajı görürseniz, o paketlerin yeni sürümü mevcut sistemde başka bir paketin kaldırılmasını gerektiriyor demektir. Standart apt upgrade güvenlik gereği hiçbir paketi kaldırmaz, bu yüzden bu tür yükseltmeleri atlar. Tutulan paketleri yükseltmek için sudo apt full-upgrade komutunu kullanabilirsiniz, ancak öncesinde hangi paketlerin kaldırılacağını gözden geçirmeniz önerilir.

    Sunucumu apt ile güncellemek güvenli mi, hizmetim kesilir mi?#

    Güvenlik yamaları çoğunlukla sorunsuz uygulanır, fakat web sunucusu, veritabanı veya PHP gibi çalışan servisler yükseltildiğinde ilgili servis kısa süreliğine yeniden başlatılabilir. Bu nedenle kritik güncellemeleri düşük trafikli saatlerde yapmak ve öncesinde yedek almak iyi bir pratiktir. Çekirdek güncellemeleri ise ancak sunucu yeniden başlatıldığında etkinleşir; bu yüzden reboot planınızı buna göre ayarlayın.

    apt update her yazılımı güncelliyor mu?#

    Hayır, bu yaygın bir yanlış anlamadır. apt update yalnızca depo paket listesini, yani hangi paketin en güncel sürümünün olduğu bilgisini yeniler; hiçbir yazılımı kurmaz veya yükseltmez. Yazılımları gerçekten güncellemek için ardından apt upgrade komutunu çalıştırmanız gerekir. İkisini her zaman bu sırayla birlikte kullanın.

    Bir PPA veya depo eklediğimde sistemim bozulur mu?#

    Güvenilir ve dağıtım sürümünüzle uyumlu bir depo eklemek genellikle güvenlidir. Risk, yanlış dağıtım kod adına ait ya da bakımı yapılmayan bir depo eklediğinizde ortaya çıkar; bu, bağımlılık çakışmalarına yol açabilir. Bir depoyu ekledikten sonra sorun yaşarsanız, add-apt-repository --remove ile kaldırıp apt update çalıştırarak temiz bir duruma dönebilirsiniz. Üretim sunucularında yeni depoları önce bir test ortamında denemek en sağlıklısıdır.

    Kapanış#

    APT, ilk bakışta birkaç komuttan ibaret gibi görünse de aslında Ubuntu ve Debian sunucu yönetiminin bel kemiğidir. update ile upgrade arasındaki farkı içselleştirdiğinizde, install ve purge arasında bilinçli seçim yaptığınızda, depoları ve GPG anahtarlarını doğru yönettiğinizde; kilit ve bozuk bağımlılık hataları birer kriz olmaktan çıkıp rutin bakımın parçasına dönüşür. Her komuttan önce ne olacağını öngörmek ve müdahale öncesi yedek almak, sizi geceleri uyandıran sürprizlerden korur.

    Bu bilgileri gerçek bir altyapıda uygulamaya geçmek isterseniz, Clou.TR olarak size uygun zemini sunuyoruz. Tam kök (root) erişimiyle özgürce paket yönetebileceğiniz sanal sunucu ve VDS çözümlerimizi inceleyebilir, güncelleme ve bakım yükünü bize bırakmak isterseniz sunucu yönetimi hizmetimizden faydalanabilirsiniz. Daha kapsamlı ihtiyaçlarınız için tüm sunucu ürünlerimize göz atın; ekibimiz, ister paylaşımlı hosting ister özel bir sunucu olsun, en uygun yapıyı kurmanıza yardımcı olmaktan memnuniyet duyar.

    APTUbuntuDebian

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.