Uzaktaki bir sunucuya SSH ile bağlanıp uzun süren bir iş başlattığınızı düşünün: bir veritabanı taşıması, saatler sürecek bir yedek geri yüklemesi ya da koca bir projenin npm install süreci. İşin ortasında internetiniz bir saniye kesilir, dizüstünüzün kapağını yanlışlıkla kapatırsınız veya SSH bağlantısı zaman aşımına uğrar. Bağlantı koptuğu anda o terminalde çalışan her şey aniden sonlanır ve saatlerce süren işlem, tamamlanmasına dakikalar kala çöpe gider. Bu senaryoyu bir kez yaşayan her sistem yöneticisi, aynı derse iki kez ihtiyaç duymaz.
İşte GNU screen tam olarak bu sorunu çözmek için vardır. screen, sunucu üzerinde SSH oturumunuzdan bağımsız yaşayan kalıcı bir terminal oturumu oluşturur. Bağlantınız kopsa bile içeride başlattığınız işlem hiçbir şey olmamış gibi çalışmaya devam eder; siz daha sonra dilediğiniz cihazdan tekrar bağlanır ve tam bıraktığınız yerden kaldığınız işe devam edersiniz. Bu rehberde screen'i sıfırdan kurup isimli oturumlar açmayı, oturumları ayırıp (detach) yeniden bağlanmayı (reattach), tek oturum içinde birden çok pencereyle çalışmayı ve nihayetinde screen ile modern alternatifi tmux arasında hangisini neden seçmeniz gerektiğini kıdemli bir yöneticinin gözünden anlatacağız.
screen Neden Gereklidir#
Bir Linux sunucusunda çalıştırdığınız her komut, o komutu başlatan terminal oturumuna bağlıdır. SSH bağlantısı kapandığında sistem, o oturuma bağlı süreçlere SIGHUP (hangup) sinyali gönderir ve süreçler varsayılan olarak sonlanır. Kısa komutlarda bu bir sorun değildir çünkü zaten saniyeler içinde biterler. Fakat dakikalar hatta saatler süren işler için bu davranış tam bir kabusa dönüşür.
Bu noktada nohup veya arka plan işleri (&, disown) gibi çözümler akla gelebilir; bunlar da işi kaybolmaktan kurtarır ancak size çalışan sürecin etkileşimli ekranını geri veremez. Çıktıyı canlı izleyemez, interaktif bir kuruluma cevap veremez, çalışan bir programa müdahale edemezsiniz. screen ise sürecin tüm terminalini olduğu gibi saklar; geri döndüğünüzde imleç bile bıraktığınız yerdedir. Arka plan işlerini ayrıntılı ele aldığımız Linux temel komutlar rehberimizle screen'i birlikte düşünmek, sunucu üzerinde ne zaman hangi aracı kullanacağınıza dair sağlam bir sezgi kazandırır.
screen'in çözdüğü tipik ihtiyaçları özetleyelim:
- Kopmaya dayanıklı uzun işler: Yedek geri yükleme, büyük indirmeler, derleme ve migration süreçleri.
- Kaldığın yerden devam: Ofisteki masaüstünde başlattığın oturuma evden telefonla ya da başka bir bilgisayardan bağlanma.
- Tek pencerede çoklu iş: Bir yanda log izlerken diğer yanda düzenleme yapmak.
- Ortak çalışma: Aynı oturumu iki kişinin eş zamanlı görmesi (pair-programming veya destek amaçlı).
screen Kurulumu#
screen, çoğu dağıtımın depolarında hazır bulunur ve tek komutla kurulur. Kullandığınız paket yöneticisine göre aşağıdaki komutlardan birini çalıştırın.
# Ubuntu / Debian
sudo apt update && sudo apt install screen -y
# AlmaLinux / Rocky Linux / RHEL
sudo dnf install screen -y
# Eski CentOS 7 sürümleri
sudo yum install screen -y
Kurulumun başarılı olduğunu ve sürümü doğrulamak için:
screen --version
# Örnek çıktı: Screen version 4.09.00 (GNU) 30-Jan-2022
Herhangi bir yapılandırma yapmadan screen'i doğrudan kullanmaya başlayabilirsiniz. İsterseniz ~/.screenrc dosyasıyla davranışını özelleştirebilirsiniz; buna rehberin sonlarında değineceğiz. Sunucunuza henüz güvenli biçimde bağlanmadıysanız, önce SSH bağlantısı ve güvenliği yazımızdaki adımları tamamlamanızı öneririz, çünkü screen'in tüm gücü uzaktan bağlantı senaryolarında ortaya çıkar.
İsimli Oturum Açmak#
screen'i argümansız çalıştırdığınızda size boş bir kabuk verir ve otomatik bir sayısal kimlik atar. Ancak birden çok oturumla çalışırken bu sayılar kısa sürede birbirine karışır. Bu yüzden en iyi alışkanlık, her oturuma anlamlı bir isim vermektir. Bunu -S bayrağıyla yaparsınız.
# "yedek" adında yeni bir oturum başlat
screen -S yedek
Bu komuttan sonra ekranınız temizlenir ve yeni, taptaze bir kabuğa düşersiniz. Görünüşte sıradan bir terminaldir; farkı, artık bu terminalin SSH bağlantınızdan bağımsız yaşamasıdır. Burada uzun sürecek işinizi başlatabilirsiniz, örneğin bir veritabanı geri yüklemesi:
# screen oturumunun içinde çalıştırıyoruz
mysql -u root -p uygulama_db < /yedek/uygulama_db.sql
İş yürürken bağlantınız kopsa dahi bu geri yükleme kesintisiz devam eder. İsim verme alışkanlığını kurumsallaştırmak için oturumları yaptıkları işe göre adlandırın: deploy, logizle, migration, guncelleme gibi. İleride screen -ls çıktısında bu isimler size bir bakışta hangi oturumda ne olduğunu söyler.
Ayırma (detach) ve Yeniden Bağlanma (reattach)#
screen'in kalbi burada atar. Bir oturumu sonlandırmadan ondan ayrılmaya detach, tekrar bağlanmaya ise reattach denir. Ayrıldığınızda oturum ve içindeki tüm süreçler arka planda çalışmaya devam eder; siz sadece ekranı bırakırsınız.
Oturumdan ayrılmak için klavye kısayolu kullanılır:
Ctrl+a ardından d
Yani önce Ctrl ve a tuşlarına birlikte basıp bırakır, hemen ardından tek başına d (detach) tuşuna basarsınız. Ctrl+a, screen'in tüm komutlarında kullanılan komut ön ekidir; bunu bir kez içselleştirdiğinizde geri kalan her şey kolaylaşır. Ayrıldığınızda terminalde şuna benzer bir satır görürsünüz:
[detached from 12345.yedek]
Artık SSH bağlantınızı güvenle kapatabilir, bilgisayarınızı uyku moduna alabilir, evinize gidebilirsiniz. Daha sonra sunucuya yeniden SSH ile bağlanıp oturumunuza şu komutla dönersiniz:
# İsimle yeniden bağlan
screen -r yedek
# Ya da sayısal kimlikle
screen -r 12345
Ekran, siz hiç ayrılmamışsınız gibi tam bıraktığınız halde karşınıza gelir. Eğer bir oturum başka bir yerde hâlâ "bağlı" görünüyor ve buna rağmen zorla katılmak istiyorsanız (örneğin internet koptu ve screen eski bağlantıyı hâlâ açık sanıyor), -d -r ikilisini birlikte kullanırsınız: bu, eski bağlantıyı zorla ayırıp sizi bağlar.
# Eski (takılı kalmış) bağlantıyı zorla ayırıp bağlan
screen -dr yedek
Bu tek komut, kopan bağlantı sonrası "yeniden bağlanamıyorum" sorununun büyük çoğunluğunu çözer ve her yöneticinin ezberlemesi gereken bir refleks olmalıdır.
Oturumları Listelemek ve Yönetmek#
Zamanla birden çok screen oturumunuz olabilir. Sunucuda o an hangi oturumların yaşadığını görmek için -ls (list) kullanırsınız.
screen -ls
Örnek çıktı şu şekildedir:
There are screens on:
12345.yedek (Detached)
12388.deploy (Attached)
12401.logizle (Detached)
3 Sockets in /run/screen/S-root.
Buradaki durum etiketleri kritik bilgidir: Detached oturum arka planda çalışıyor ve boştadır, ona screen -r ile bağlanabilirsiniz. Attached ise şu an birinin (belki başka bir terminaliniz) o oturuma bağlı olduğunu gösterir. Aşağıdaki tablo en sık kullanacağınız oturum yönetimi komutlarını özetliyor.
| Komut | İşlevi |
|---|---|
screen -S isim | "isim" adında yeni oturum başlatır |
screen -ls | Tüm oturumları ve durumlarını listeler |
screen -r isim | Ayrılmış (detached) oturuma yeniden bağlanır |
screen -dr isim | Başka yerde bağlı oturumu zorla ayırıp bağlanır |
screen -X -S isim quit | Belirtilen oturumu tümüyle sonlandırır |
Ctrl+a d | Mevcut oturumdan ayrılır (detach) |
exit | İçindeki kabuğu kapatarak oturumu bitirir |
Bir oturumu tamamen kapatmak isterseniz, içindeyken kabukta exit yazmanız yeterlidir; bu, o pencereyi ve son pencereyse tüm oturumu sonlandırır. Dışarıdan bir oturumu öldürmek içinse -X ile uzaktan komut gönderirsiniz:
# "logizle" oturumunu dışarıdan sonlandır
screen -X -S logizle quit
Sistemi düzenli tutmak açısından, işi biten oturumları öldürmek iyi bir alışkanlıktır; unutulmuş onlarca Dead ya da boşta oturum, screen -ls çıktısını okunmaz hale getirir. Boşta kalmış ölü soketleri temizlemek için screen -wipe komutunu kullanabilirsiniz.
Bir Oturumda Birden Çok Pencere#
screen'in az bilinen ama son derece güçlü bir yönü, tek bir oturumun içinde birden fazla pencere barındırabilmesidir. Her pencere bağımsız bir kabuktur; birinde derleme yaparken diğerinde log izleyebilir, üçüncüsünde dosya düzenleyebilirsiniz. Hepsi aynı screen oturumu içinde yaşadığı için, ayrılıp geri döndüğünüzde tümü olduğu gibi yerinde durur.
Pencerelerle çalışmanın tümü Ctrl+a ön ekiyle yapılır. En sık kullanacağınız kısayollar şunlardır:
| Kısayol | İşlevi |
|---|---|
Ctrl+a c | Yeni pencere oluşturur (create) |
Ctrl+a n | Sonraki pencereye geçer (next) |
Ctrl+a p | Önceki pencereye geçer (previous) |
Ctrl+a 0-9 | Numarasıyla doğrudan pencereye geçer |
Ctrl+a " | Pencere listesini açar ve seçtirir |
Ctrl+a A | Aktif pencereyi yeniden adlandırır |
Ctrl+a k | Aktif pencereyi kapatır (kill) |
Tipik bir iş akışı şöyle görünür: bir dağıtım (deploy) oturumu açarsınız, ilk pencerede uygulamayı yeniden başlatan komutu çalıştırırsınız, Ctrl+a c ile ikinci bir pencere açıp orada uygulama loglarını canlı izlersiniz, Ctrl+a c ile üçüncü pencerede web sunucusu yapılandırmasını düzenlersiniz. Pencereler arasında Ctrl+a n ve Ctrl+a p ile gezerken tüm işiniz tek bir kalıcı oturumda toplanmış olur.
screen ayrıca ekranı bölerek birden çok pencereyi aynı anda göstermenize de izin verir. Ctrl+a S yatay, Ctrl+a | dikey bölme yapar; bölmeler arasında Ctrl+a Tab ile geçersiniz. Yeni açılan boş bölmeye Ctrl+a c ile bir pencere atamanız gerekir. Bölme özelliği pratik olsa da tmux'un bu konudaki ergonomisi daha olgundur; bir sonraki bölümde tam olarak buna bakacağız.
screen ve tmux Karşılaştırması#
screen uzun yıllardır standart araç olsa da, günümüzde birçok yönetici onun modern halefi sayılan tmux'u tercih ediyor. İkisi de aynı temel işi yapar: kalıcı, ayrılabilir oturumlar. Farklar detaylarda ve ergonomide ortaya çıkar. Aşağıdaki tablo iki aracı yan yana koyuyor.
| Özellik | GNU screen | tmux |
|---|---|---|
| Komut ön eki | Ctrl+a | Ctrl+b (değiştirilebilir) |
| Varsayılan kurulum | Çoğu sunucuda hazır bulunur | Bazı sistemlerde ayrıca kurulur |
| Ekran bölme | Var ama sınırlı | Güçlü ve esnek |
| Durum çubuğu | Basit | Zengin, özelleştirilebilir |
| Yapılandırma dosyası | ~/.screenrc | ~/.tmux.conf |
| Betiklenebilirlik | Kısıtlı | Gelişmiş (tmux komutları) |
| Aktif geliştirme | Yavaş | Aktif |
Peki pratikte hangisini seçmeli? Basit bir kural şöyle işler: eğer amacınız yalnızca uzun bir işi kopmadan çalıştırıp geri dönmekse ve sunucuya bir kez bağlanıp çıkacaksanız, screen neredeyse her sunucuda hazır olduğu için en pürüzsüz seçimdir; hiçbir şey kurmadan hemen kullanırsınız. Karmaşık, çok bölmeli bir çalışma ortamını her gün kullanacaksanız, özel bir durum çubuğu, gelişmiş ekran bölme ve betiklerle otomatikleştirme istiyorsanız tmux'a yatırım yapmaya değer. İkisini de öğrenmek zorunda değilsiniz; birini iyi bilmek yeterlidir. Yine de bir sunucuya bağlandığınızda tmux kurulu değilse screen'in orada olma ihtimalinin yüksek olduğunu bilmek, screen'i öğrenmeyi tek başına değerli kılar.
Günlük İş Akışı ve İpuçları#
screen'i verimli kullanmanın birkaç pratik yolu var. İlki, oturumları işlerine göre adlandırma disiplinini korumaktır; screen -S migration-2026 gibi tarih veya proje içeren isimler ileride kafa karışıklığını önler. İkincisi, bir işi başlatmadan önce screen içinde olduğunuzdan emin olun; screen -ls çıktısındaki (Attached) etiketi ya da terminal başlığı size ipucu verir.
Sık yaşanan bir hata, screen içindeyken tekrar screen çalıştırıp iç içe oturum açmaktır. Böyle bir durumda Ctrl+a ön ekiniz artık dıştaki mi yoksa içteki screen'e mi gidiyor kafanız karışır. İç içe screen kullanmanız gerekiyorsa, iç oturuma komut göndermek için Ctrl+a a (ön eki iletme) kullanın; ama mümkünse iç içe kullanımdan kaçının.
Davranışı kalıcı olarak iyileştirmek için ev dizininize bir ~/.screenrc dosyası koyabilirsiniz. Aşağıdaki örnek, altta sürekli görünen bir durum çubuğu ekler ve kaydırma tamponunu büyütür:
# ~/.screenrc
# Başlangıç mesajını kapat
startup_message off
# Kaydırma geçmişini 10000 satıra çıkar
defscrollback 10000
# Altta pencere listesi ve saat gösteren durum çubuğu
hardstatus alwayslastline
hardstatus string '%{= kG}[ %H ]%{= kw}%-w%{+b yk}[%n %t]%{-}%+w %=%{= kG}%c %Y-%m-%d'
Bir başka faydalı özellik, oturum içindeki tüm çıktının bir dosyaya kaydedilmesidir. Ctrl+a H ile o pencerenin log'unu screenlog.0 dosyasına yazdırabilir, kritik bir işlemin tam kaydını tutabilirsiniz. Uzun süren işlerin çıktısını sonradan incelemek gerektiğinde bu, hata ayıklamayı büyük ölçüde kolaylaştırır. Sunucularınızın 7/24 ayakta ve erişilebilir olması, bu tür uzun işlemleri huzurla yürütmenin ön koşuludur; güçlü ve kararlı bir altyapı için VDS sunucu ve sunucu yönetimi hizmetlerimiz tam da bu güveni sağlamak için tasarlandı.
Sıkça Sorulan Sorular#
screen oturumu sunucu yeniden başlatılınca kalır mı?#
Hayır, screen oturumları sunucunun belleğinde yaşadığı için sunucu yeniden başlatıldığında (reboot) tüm oturumlar ve içindeki süreçler kaybolur. screen yalnızca SSH bağlantısı kopmalarına ve terminal kapanmalarına karşı koruma sağlar; fiziksel ya da yazılımsal bir yeniden başlatmaya karşı değil. Yeniden başlatma sonrası da otomatik ayağa kalkması gereken kalıcı servisler için screen değil, systemd servisleri gibi kalıcı bir çözüm kullanmalısınız.
screen ile nohup arasındaki fark nedir?#
nohup bir komutu SIGHUP sinyalinden koruyarak arka planda çalıştırır ama size etkileşimli bir ekran sunmaz; yalnızca çıktıyı bir dosyaya yönlendirir ve süreci kaybolmaktan kurtarır. screen ise sürecin tüm interaktif terminalini olduğu gibi saklar, böylece geri döndüğünüzde canlı çıktıyı izleyebilir, çalışan programa müdahale edebilir veya interaktif bir kuruluma cevap verebilirsiniz. Kısacası nohup "unut gitsin" işler için, screen ise "geri dönüp kaldığın yerden devam et" işler için idealdir.
Ctrl+a d çalışmıyor, ne yapmalıyım?#
Bu sorunun en yaygın nedeni tuşlara aynı anda basmaktır; oysa doğru yöntem önce Ctrl ve a'ya birlikte basıp bırakmak, ardından tek başına d'ye basmaktır. Bir diğer olası neden, bazı terminal veya kabuk yapılandırmalarının Ctrl+a'yı farklı bir işleve (örneğin satır başına gitmeye) atamış olmasıdır. Yine de takılıp kalırsanız, oturumu başka bir terminalden screen -d isim komutuyla dışarıdan da ayırabilirsiniz.
Aynı screen oturumuna iki kişi aynı anda bağlanabilir mi?#
Evet, screen çok kullanıcılı modu destekler ve aynı oturumu iki kişinin eş zamanlı görmesi mümkündür; bu özellik özellikle uzaktan destek ve birlikte çalışma senaryolarında çok işe yarar. Bunun için oturum sahibinin Ctrl+a :multiuser on ve ardından Ctrl+a :acladd kullanici_adi komutlarıyla erişimi açması, diğer kişinin de screen -x sahip/oturum biçiminde bağlanması gerekir. İki taraf da aynı ekranı canlı görür, biri yazdığında diğeri anında görür.
screen içindeyken fare tekerleğiyle yukarı kaydıramıyorum, çözümü nedir?#
screen normal terminal kaydırmasının önüne geçtiği için doğrudan fareyle geçmişe bakamazsınız; bunun yerine kaydırma moduna geçmeniz gerekir. Ctrl+a [ tuşlarına bastığınızda kopyalama/kaydırma moduna girersiniz ve ok tuşları ile PageUp/PageDown kullanarak geçmiş çıktıda gezebilirsiniz; çıkmak için Esc tuşuna basarsınız. ~/.screenrc dosyasına defscrollback 10000 satırını eklerseniz görebileceğiniz geçmiş tampon miktarını da önemli ölçüde artırabilirsiniz.
Kapanış#
GNU screen, ilk bakışta sadece birkaç kısayoldan ibaret görünse de, uzaktan sunucu yönetiminde tekrar tekrar hayat kurtaran temel araçlardan biridir. screen -S ile isimli oturum açmak, Ctrl+a d ile güvenle ayrılmak, screen -r ile kaldığınız yerden devam etmek ve tek oturumda birden çok pencereyle çalışmak; bu dört alışkanlığı edindiğinizde bir daha asla "bağlantı koptu, işlem yarıda kaldı" derdi yaşamazsınız. tmux'u da denemenizde fayda var, ama screen'in neredeyse her sunucuda hazır bulunması onu vazgeçilmez kılar.
Elbette bu araçların gerçek değeri, üzerinde çalıştıkları altyapı kararlı ve hızlı olduğunda ortaya çıkar. Clou.TR olarak, root erişimli VDS ve sanal sunucu çözümlerimizle terminale tam hâkim olmanızı sağlıyor; dilerseniz sunucu yönetimi hizmetimizle işin teknik yükünü uzman ekibimize bırakabiliyorsunuz. Web projeleriniz için hızlı hosting paketlerimizi, düzenli yedekleme ve SSL çözümlerimizi de aynı çatı altında bulabilirsiniz. Sunucunuza güvenle bağlanıp kesintisiz çalışmaya bugün başlayın.