GNU Screen Kullanarak Konsol Oturumlarını Bağlama ve Ayırma
GNU Screen, tek bir terminal bağlantısından birden fazla bağımsız kabuk oturumu oluşturmanıza, yönetmenize ve kalıcı olarak devam ettirmenize olanak tanıyan bir terminal çoklayıcısıdır. Bir Screen oturumunu ayırdığınızda, içinde çalışan her işlem arka planda çalışmaya devam eder — siz oturumu açıkça yeniden bağlamadığınız veya sonlandırmadığınız sürece SSH bağlantı kesintilerinden, ağ düşmelerinden ve terminal kapanmalarından etkilenmez.
Bu özellik, SSH aracılığıyla uzak sunucuları yöneten sistem yöneticileri için vazgeçilmezdir. İster büyük bir kod tabanı derliyor, ister veritabanı geçişi çalıştırıyor, ister günlükleri izliyor, ister saatler süren bir yedekleme işi yürütüyor olun, Screen istemci bağlantınıza ne olursa olsun çalışmanın devam etmesini sağlar.
GNU Screen Modern Altyapıda Neden Hâlâ Önemlidir
`tmux` gibi araçlar popülerlik kazanmış olsa da GNU Screen, kurumsal Linux ortamlarında, gömülü sistemlerde ve eski altyapılarda yaygın olmaya devam etmektedir. Çoğu sunucu dağıtımında varsayılan veya varsayıla yakın bir paket olarak gelir, hemen kullanılabilmesi için sıfır yapılandırma gerektirir ve oturum kalıcılığı modeli son derece sağlamdır. Çalışma süresi ve kesintisiz görev yürütmenin kritik olduğu bir VPS veya dedicated sunucu üzerinde Screen, güvenilir kalıcı bir oturuma ulaşmanın çoğu zaman en hızlı yoludur.
Temel operasyonel avantajlar:
- Bağlantı kesintilerinde oturum kalıcılığı — işlemler SSH zaman aşımlarından ve ağ kesintilerinden etkilenmez
- Çok pencereli çoğullama — tek bir SSH bağlantısı üzerinden paralel görevler çalıştırın
- Düşük kaynak tüketimi — GUI tabanlı alternatiflere kıyasla ihmal edilebilir CPU ve bellek kullanımı
- Betiklenebilir oturum yönetimi — kabuk betikleri aracılığıyla oturum oluşturma ve komut enjeksiyonunu otomatikleştirin
- Geniş uyumluluk — neredeyse her POSIX uyumlu sistemde mevcuttur
GNU Screen ve tmux: Doğru Çoklayıcıyı Seçmek
Her iki araç da aynı temel sorunu çözer; ancak mimari, yapılandırma derinliği ve betikleme ergonomisi açısından anlamlı farklılıklar taşır.
| Özellik | GNU Screen | tmux |
|---|
| — | — | — |
|---|
| Varsayılan kullanılabilirlik | Çoğu dağıtımda önceden yüklü | Açık kurulum gerektirir |
|---|
| Yapılandırma dosyası | `.screenrc` | `.tmux.conf` |
|---|
| Bölme (pane) ayırma | Dikey ve yatay (sınırlı) | Düzenli tam bölme ayırma |
|---|
| Betikleme / otomasyon | `screen -X` komut enjeksiyonu | `tmux send-keys`, zengin API |
|---|
| Durum çubuğu özelleştirme | Temel | Yüksek düzeyde özelleştirilebilir |
|---|
| Kopyalama modu | Vi benzeri, daha az sezgisel | Vi ve Emacs modları, pano entegrasyonu |
|---|
| Oturum paylaşımı | `-x` bayrağı ile desteklenir | Yerel olarak desteklenir |
|---|
| Öğrenme eğrisi | Sığ | Orta |
|---|
| İdeal kullanım senaryosu | Hızlı kalıcı oturumlar, eski sistemler | Karmaşık çok bölmeli iş akışları |
|---|
Uzak bir sunucuda basit oturum kalıcılığı için — en yaygın sistem yöneticisi kullanım senaryosu — Screen’in sadeliği bir kısıtlama değil, bir özelliktir.
GNU Screen Kurulumu
Devam etmeden önce Screen’in zaten mevcut olup olmadığını doğrulayın:
“`bash
screen –version
“`
Kurulu değilse, dağıtımınıza uygun paket yöneticisini kullanın.
Debian / Ubuntu:
“`bash
sudo apt-get update && sudo apt-get install screen
“`
CentOS / RHEL 7 ve öncesi:
“`bash
sudo yum install screen
“`
CentOS Stream / RHEL 8+ / Fedora:
“`bash
sudo dnf install screen
“`
Arch Linux:
“`bash
sudo pacman -S screen
“`
macOS (Homebrew aracılığıyla):
“`bash
brew install screen
“`
Doğrulama:
“`bash
screen –version
Output example: Screen version 4.09.00 (GNU) 30-Jan-22
“`
Screen Oturumu Başlatma
Temel Oturum Başlatma
“`bash
screen
“`
Bu sizi standart bir kabuk istemiyle yeni bir Screen oturumuna bırakır. Oturuma otomatik olarak sayısal PID tabanlı bir tanımlayıcı atanır.
Adlandırılmış Oturumlar (Kesinlikle Önerilir)
Üretim ortamlarında oturumlarınızı her zaman adlandırın. Adlandırılmış oturumlar, birden fazla eşzamanlı iş çalışırken tanımlanması ve yeniden bağlanılması çok daha kolaydır:
“`bash
screen -S session_name
“`
Pratik örnekler:
“`bash
screen -S db_migration
screen -S log_monitor
screen -S build_job
“`
Adlandırma, birden fazla yöneticinin aynı anda çalışabileceği bir dedicated sunucu üzerinde birden fazla iş yükünü yönetirken özellikle değerlidir.
Komutla Oturum Başlatma
Screen’i başlatıp içinde hemen bir komut çalıştırabilirsiniz:
“`bash
screen -S backup_job bash -c 'rsync -avz /data/ /backup/ && echo "Done"'
“`
Komut tamamlandıktan sonra bile oturum devam eder; böylece yeniden bağlanarak çıktıyı inceleyebilirsiniz.
Screen Oturumundan Ayrılma
Ayrılma, Screen’i değerli kılan temel iş akışıdır. İçindeki her şeyi çalışır durumda bırakırken oturumun görünümünü askıya alır.
Klavye kısayolu:
“`
Ctrl + A, then D
“`
- `Ctrl + A` — Screen komut öneki (tüm Screen komutları bununla başlar)
- `D` — ayır
Ayrıldıktan sonra terminaliniz orijinal kabuk istemine döner. Screen oturumu ve içindeki tüm işlemler arka planda çalışmaya devam eder. Bir onay mesajı göreceksiniz:
“`
[detached from 12345.db_migration]
“`
Kritik tuzak: Ayrılmayı (`Ctrl+A, D`) bir pencereyi kapatmakla (`Ctrl+A, K` mevcut pencereyi sonlandırır) karıştırmayın. Tüm pencereleri kapatmak oturumu tamamen sonlandırır.
Aktif Screen Oturumlarını Listeleme
“`bash
screen -ls
“`
Örnek çıktı:
“`
There are screens on:
18423.db_migration (Detached)
18891.log_monitor (Attached)
19204.build_job (Detached)
3 Sockets in /var/run/screen/S-root.
“`
Durum göstergeleri anlamlıdır:
- Detached — şu anda bağlı terminal yok; oturum arka planda çalışıyor
- Attached — bir terminal bu oturuma etkin olarak bağlı
- Dead — oturum işlemi sona erdi ancak soket dosyası temizlenmedi (ölü oturumları kaldırmak için `screen -wipe` kullanın)
Screen Oturumuna Yeniden Bağlanma
Oturum Adıyla Yeniden Bağlanma
“`bash
screen -r db_migration
“`
Oturum PID’siyle Yeniden Bağlanma
“`bash
screen -r 18423
“`
Yalnızca Bir Oturum Mevcutken Yeniden Bağlanma
“`bash
screen -r
“`
Yalnızca bir ayrılmış oturum mevcutsa Screen otomatik olarak yeniden bağlanır.
Zaten Bağlı Bir Oturuma Zorla Yeniden Bağlanma
Bu, pek çok yöneticiyi hazırlıksız yakalayan bir senaryodur. SSH bağlantınız düzgün şekilde kesilmediyse, önceki terminal temiz bir şekilde ayrılmadığından oturum hâlâ Attached olarak görünebilir. Standart bir `screen -r` denemesi şu hatayla başarısız olur:
“`
There is a screen on: 18891.log_monitor (Attached)
There is no screen to be resumed.
“`
Çözüm, eski terminali zorla ayırmak ve hemen yeniden bağlanmaktır:
“`bash
screen -d -r log_monitor
“`
- `-d` — oturumu şu anda tutan terminalden uzaktan ayır
- `-r` — mevcut terminale yeniden bağlan
Açık oturum kimliğiyle alternatif:
“`bash
screen -d -r 18891
“`
Bu, en operasyonel açıdan önemli Screen komutlarından biridir ve bir VPS‘ten beklenmedik bağlantı kesintilerinin ardından sıkça ihtiyaç duyulur.
Oturum İçinde Çok Pencereli Yönetim
Screen’in en güçlü özelliklerinden biri, tek bir oturum içinde birden fazla bağımsız pencere (sanal terminal) çalıştırabilmektir. Her pencere kendi kabuğunu, işlem ağacını ve geri kaydırma tamponunu korur.
Yeni Pencere Oluşturma
“`
Ctrl + A, then C
“`
Pencereler Arasında Gezinme
| Eylem | Kısayol |
|---|
| — | — |
|---|
| Sonraki pencere | `Ctrl + A, N` |
|---|
| Önceki pencere | `Ctrl + A, P` |
|---|
| Numaraya göre pencereye git | `Ctrl + A, [0-9]` |
|---|
| Etkileşimli pencere listesi | `Ctrl + A, "` |
|---|
| Son aktif pencere | `Ctrl + A, Ctrl + A` |
|---|
Pencere Adlandırma
“`
Ctrl + A, then A
“`
Mevcut pencere için bir ad girmeniz istenecektir. Adlandırılmış pencereler, pencere listesinde ve durum çubuğunda görünür; bu da beş veya daha fazla paralel görev çalıştırırken gezinmeyi önemli ölçüde kolaylaştırır.
Pencere Kapatma
Kabukta `exit` yazın veya `Ctrl + D` tuşuna basın. Bir oturumdaki son pencere kapatıldığında Screen oturumunun kendisi de sonlanır.
Kabuğu kapatmadan mevcut pencereyi zorla sonlandırmak için:
“`
Ctrl + A, then K
“`
Ekranı Bölme (Bölgeler)
GNU Screen, tmux kadar esnek olmasa da yan yana izleme için işlevsel olan temel terminal bölmeyi destekler.
Yatay bölme (üst/alt):
“`
Ctrl + A, then S
“`
Dikey bölme (sol/sağ):
“`
Ctrl + A, then |
“`
Odağı bir sonraki bölgeye taşı:
“`
Ctrl + A, then Tab
“`
Mevcut bölgeyi kaldır (pencereyi kapatmadan):
“`
Ctrl + A, then X
“`
Mevcut bölge dışındaki tüm bölgeleri kaldır:
“`
Ctrl + A, then Q
“`
Bölme işleminin ardından her bölge başlangıçta boştur. `Tab` ile bir bölgeye gidin, ardından `Ctrl + A, N` veya `Ctrl + A, "` kullanarak içinde bir pencere açın.
Birden Fazla Kullanıcı Arasında Screen Oturumu Paylaşma
Screen, ortak hata ayıklama veya ikili yönetim için kullanışlı olan çok kullanıcılı oturum paylaşımını destekler. Bu, Screen’in setuid izinleriyle kurulmasını gerektirir.
Bir oturum içinde çok kullanıcılı modu etkinleştir:
“`
Ctrl + A, then :multiuser on
“`
Başka bir kullanıcıya erişim ver:
“`
Ctrl + A, then :acladd username
“`
Diğer kullanıcı daha sonra oturumunuza bağlanabilir:
“`bash
screen -x your_username/session_name
“`
Güvenlik notu: Çok kullanıcılı Screen oturumları dikkatli erişim denetimi gerektirir. `acladd` izinlerini yalnızca güvenilir hesaplara verin. Paylaşımlı barındırma ortamlarında bu özellik genellikle kısıtlanmıştır.
Ayrılmış Bir Oturuma Komut Gönderme
Screen’in takdir görmeyen özelliklerinden biri, yeniden bağlanmadan çalışan bir oturuma komut enjekte edebilme yeteneğidir:
“`bash
screen -S db_migration -X stuff "tail -f /var/log/app.logn"
“`
`-X stuff` komutu, tuş vuruşlarını yazılmış gibi oturuma gönderir. `n` ise Enter tuşuna basmayı simüle eder. Bu, çalışan bir Screen oturumuyla etkileşim kurması gereken otomasyon betikleri için son derece kullanışlıdır.
Screen’i .screenrc ile Yapılandırma
Ana dizininizdeki `.screenrc` dosyası Screen’in varsayılan davranışını kontrol eder. Minimal ama pratik bir yapılandırma:
“`bash
~/.screenrc
Disable the startup message
startup_message off
Set scrollback buffer to 10,000 lines
defscrollback 10000
Enable UTF-8
defutf8 on
Show a status bar at the bottom
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'
Set default shell
shell -$SHELL
“`
`defscrollback 10000` ayarı özellikle önemlidir — varsayılan geri kaydırma tamponu yalnızca 100 satırdır ve bu, uzun süre çalışan işlemleri izlemek için yetersizdir.
Eksiksiz Screen Komut Referansı
| Komut / Kısayol | İşlev |
|---|
| — | — |
|---|
| `screen` | Yeni adsız oturum başlat |
|---|
| `screen -S name` | Adlandırılmış oturum başlat |
|---|
| `screen -ls` | Tüm oturumları listele |
|---|
| `screen -r name` | Ayrılmış bir oturuma yeniden bağlan |
|---|
| `screen -d -r name` | Zorla ayır ve yeniden bağlan |
|---|
| `screen -x name` | Zaten bağlı bir oturuma bağlan (paylaşımlı görünüm) |
|---|
| `screen -wipe` | Ölü oturum soketlerini kaldır |
|---|
| `Ctrl + A, D` | Mevcut oturumdan ayrıl |
|---|
| `Ctrl + A, C` | Yeni pencere oluştur |
|---|
| `Ctrl + A, N` | Sonraki pencere |
|---|
| `Ctrl + A, P` | Önceki pencere |
|---|
| `Ctrl + A, "` | Etkileşimli pencere listesi |
|---|
| `Ctrl + A, A` | Mevcut pencereyi yeniden adlandır |
|---|
| `Ctrl + A, K` | Mevcut pencereyi sonlandır |
|---|
| `Ctrl + A, S` | Yatay böl |
|---|
| `Ctrl + A, | ` | Dikey böl |
|---|
| `Ctrl + A, Tab` | Sonraki bölgeye geç |
|---|
| `Ctrl + A, Q` | Mevcut bölge dışındaki tüm bölgeleri kaldır |
|---|
| `Ctrl + A, [` | Kopyalama/geri kaydırma moduna gir |
|---|
| `Ctrl + A, ?` | Tüm tuş bağlamalarını göster |
|---|
| `Ctrl + A, :quit` | Tüm oturumu sonlandır |
|---|
Screen Oturum Çıktısını Günlükleme
Screen, bir pencerede yazdırılan her şeyi bir dosyaya kaydedebilir — uzun süre çalışan işleri denetlemek için son derece değerlidir:
Mevcut pencere için günlüklemeyi aç/kapat:
“`
Ctrl + A, then H
“`
Bu, mevcut dizinde `screenlog.N` adlı bir dosya oluşturur (N pencere numarasıdır). Ayrıca bir oturum başlatırken komut satırından günlüklemeyi etkinleştirebilirsiniz:
“`bash
screen -L -S monitored_job
“`
Ya da `.screenrc` içinde özel bir günlük dosyası belirtebilirsiniz:
“`bash
logfile /var/log/screen/session_%t_%Y%m%d.log
“`
Uzak Sunucularda Pratik Kullanım Senaryoları
Uzun süren veritabanı geçişleri: Bir geçişi adlandırılmış bir Screen oturumu içinde başlatın, ayrılın ve periyodik olarak yeniden bağlanarak ilerlemeyi izleyin. SSH bağlantısı kesilirse geçiş kesintisiz devam eder.
Sürekli günlük izleme: Bir Screen penceresinde `tail -f` veya `multitail` çalıştırın. Mevcut durumu kontrol etmek istediğinizde ayrılın ve yeniden bağlanın.
Derleme işleri: Büyük C++ veya çekirdek derlemeleri saatler alabilir. Screen, dizüstü bilgisayarınız bağlantı kaybetse bile derlemenin tamamlanmasını sağlar.
Arka plana alınamayan etkileşimli işlemler: Bazı araçlar — veritabanı CLI’ları, etkileşimli Python oturumları, metin tabanlı yükleyiciler — `&` ile arka plana gönderilemez. Screen bunları temiz bir şekilde kalıcı bir oturuma sarar.
Çok yöneticili koordinasyon: `screen -x` kullanılarak iki yönetici aynı oturumu eş zamanlı olarak gözlemleyebilir; bu, bir dedicated sunucu üzerinde olay müdahalesi sırasında kullanışlıdır.
Web altyapısını kalıcı oturumlarla birlikte yönetiyorsanız, Screen’i iyi yapılandırılmış bir cPanel’li VPS ile eşleştirmek size hem grafiksel bir yönetim arayüzü hem de tam terminal çoğullama özelliği sağlar. SSL yenilemelerini ve sertifika dağıtımlarını komut satırı aracılığıyla yöneten ekipler için SSL Sertifikaları ile Screen tabanlı otomasyon betiklerinin birleşimi süreci tamamen otomatik hale getirebilir.
Yaygın Tuzaklar ve Bunlardan Kaçınma Yolları
Sahipsiz oturumların birikmesi: Yöneticiler işler tamamlandıktan sonra oturumları sonlandırmayı sık sık unutur. `screen -ls` komutunu düzenli olarak çalıştırın ve ölü soketleri temizlemek için `screen -wipe` kullanın. Boştaki oturumları `screen -S session_name -X quit` ile sonlandırın.
Geri kaydırma tamponu çok küçük: Varsayılan 100 satırlık tampon, çıktı geçmişini hızla kaybetmenize neden olur. `.screenrc` içinde her zaman `defscrollback 10000` veya daha yüksek bir değer ayarlayın.
İç içe Screen oturumları: Bir Screen oturumu içinden SSH ile bağlanıp uzak ana bilgisayarda başka bir Screen oturumu başlatırsanız, `Ctrl + A` komutları dış oturum tarafından yakalanır. İç oturuma gerçek bir `Ctrl + A` göndermek için `Ctrl + A, A` kullanın ya da farklılaştırmak için `Ctrl + A, :sessionname` tercih edin.
Bağlantı kesintisinin ardından Attached kalan oturum: Düşen bir SSH bağlantısı, oturumu Attached durumda bırakabilir. Beklenmedik bir bağlantı kesintisinin ardından yeniden bağlanırken düz `screen -r` yerine her zaman `screen -d -r` kullanın.
Yerel ayar ve kodlama sorunları: Bozuk karakterler görüyorsanız terminalinizin ve Screen’in her ikisinin de UTF-8 kullandığından emin olun. `.screenrc` dosyasına `defutf8 on` ekleyin ve `LANG` ortam değişkeninizin UTF-8 yerel ayarına (örn. `en_US.UTF-8`) ayarlandığını doğrulayın.
Karar Matrisi: Screen Ne Zaman Kullanılır
| Senaryo | Screen Kullanılsın mı? | Notlar |
|---|
| — | — | — |
|---|
| Uzun süren uzak işlem | Evet | Temel kullanım senaryosu |
|---|
| Hızlı tek seferlik SSH komutu | Hayır | Ek yük haklı değil |
|---|
| Çok bölmeli terminal iş akışı | Belki | Karmaşık düzenler için tmux’u değerlendirin |
|---|
| Paylaşımlı hata ayıklama oturumu | Evet | Paylaşımlı görünüm için `-x` kullanın |
|---|
| Etkileşimsiz otomatik betik | Hayır | `nohup` veya `systemd` servisi kullanın |
|---|
| Daemon’laştırılamayan etkileşimli işlem | Evet | Screen idealdir |
|---|
| Kalıcı izleme panosu | Evet | Adlandırılmış pencereler ve günlüklemeyle eşleştirin |
|---|
Teknik Temel Çıkarımlar Kontrol Listesi
- Oturumları her zaman `screen -S descriptive_name` ile adlandırın — adsız oturumlar ölçekte yönetilemez hale gelir
- Çıktıyı kaybetmeden önce `.screenrc` içinde `defscrollback 10000` ayarlayın
- Hem Attached hem de Detached durumlarını düşünmeden yönetmek için varsayılan yeniden bağlanma komutunuz olarak `screen -d -r` kullanın
- Daha sonra denetlemeniz gerekebilecek herhangi bir iş için `screen -L` ile oturum günlüklemeyi etkinleştirin
- Ölü oturum soketlerini kaldırmak ve `screen -ls` çıktısını okunabilir tutmak için `screen -wipe` komutunu periyodik olarak çalıştırın
- Yeniden bağlanmadan etkileşimi otomatikleştirmek için `screen -X stuff` ile ayrılmış oturumlara komut enjekte edin
- Çok yöneticili ortamlarda, paylaşımlı root erişimine güvenmek yerine `multiuser on` ve açık ACL’lerle `.screenrc` yapılandırın
- `.screenrc` yapılandırmanızı kritik altyapıya dağıtmadan önce üretim dışı bir sistemde test edin
Sıkça Sorulan Sorular
Sunucu yeniden başlatılırsa Screen oturumuna ne olur?
Tüm Screen oturumları yeniden başlatmada kaybolur. Screen oturumları bellekte çalışan işlemlerdir — sistem yeniden başlatmalarından sağ çıkamazlar. Gerçek anlamda kalıcı servisler için `systemd` birim dosyalarını veya init betiklerini kullanın. Screen, yeniden başlatmalar arasında değil, bağlantı kesintileri arasında etkileşimli oturum kalıcılığı içindir.
Paylaşımlı barındırma hesabında Screen kullanabilir miyim?
Standart paylaşımlı web barındırma ortamları genellikle SSH erişimini kısıtlar ve Screen kurulu veya erişilebilir olmayabilir. Screen, tam kabuk erişimine ve root ya da sudo ayrıcalıklarına sahip olduğunuz VPS veya dedicated sunucu ortamlarında en etkili şekilde çalışır.
`screen -r` ile `screen -x` arasındaki fark nedir?
`screen -r`, size özel erişim sağlayarak ayrılmış bir oturuma yeniden bağlanır. `screen -x` ise zaten bağlı olan bir oturuma bağlanır; birden fazla terminalin aynı oturumu eş zamanlı olarak gördüğü paylaşımlı bir görünüm oluşturur — ortak sorun giderme için kullanışlıdır.
Önceki çıktıyı görmek için Screen oturumunda nasıl yukarı kaydırabilirim?
`Ctrl + A, [` ile kopyalama/geri kaydırma moduna girin. Gezinmek için ok tuşlarını veya Page Up/Page Down tuşlarını kullanın. Kopyalama modundan çıkmak için `Escape` veya `Q` tuşuna basın. `.screenrc` içinde `defscrollback` ayarlayarak geri kaydırma tamponunuzun yeterince büyük olduğundan emin olun.
GNU Screen hâlâ aktif olarak bakımı yapılıyor mu?
Evet. GNU Screen, GNU Projesi kapsamında aktif olarak bakımı yapılmaktadır. Sürüm 4.9.x 2022’de yayımlandı. tmux’un aldığı hızlı özellik geliştirmelerini almasa da güvenlik yamaları ve hata düzeltmeleri almaya devam etmekte; bu da onu uzun süre çalışan sunucu altyapısında üretim kullanımı için güvenilir kılmaktadır.
