Uzak bir sunucuya SSH ile bağlandın, uzun sürecek bir işlem başlattın ve tam o sırada bağlantın koptu. Saatler süren bir iş mahvoldu, baştan başlamak zorundasın. Bu acı deneyimi yaşayan her sistem yöneticisi er ya da geç tmux ile tanışır. tmux, terminal çoklayıcı dünyasının en güçlü ve esnek aracıdır. Bir kez öğrendiğinde “bunu nasıl bu kadar geç öğrendim” diye düşüneceksin.
tmux Nedir ve Neden Kullanmalısın?
tmux, “terminal multiplexer” yani terminal çoklayıcı anlamına gelir. Tek bir terminal penceresinde birden fazla oturum, pencere ve panel açmana olanak sağlar. Ama asıl gücü şuradan geliyor: oturumların arka planda çalışmaya devam etmesi. SSH bağlantın kopsa bile tmux oturumu sunucuda yaşamaya devam eder, geri bağlandığında kaldığın yerden devam edersin.
Günlük sistem yönetimi senaryolarında tmux şu durumlarda hayat kurtarır:
- Uzun süren veritabanı yedekleme işlemleri
- Büyük dosya transferleri veya rsync operasyonları
- Birden fazla log dosyasını eş zamanlı takip etme
- Farklı sunuculara aynı anda bağlı kalma
- Pair programming veya uzaktan destek senaryoları
- Uzun derleme işlemleri (kernel derleme, büyük projeler)
GNU Screen ile karşılaştırıldığında tmux çok daha modern bir mimariyle geliyor. Pane yönetimi, pencere düzenleme ve scriptlenebilirlik açısından Screen’i çok geride bırakıyor.
Kurulum
Tmux neredeyse tüm Linux dağıtımlarında paket depolarında hazır olarak bulunuyor.
# Debian/Ubuntu
sudo apt update && sudo apt install tmux
# RHEL/CentOS/Rocky Linux
sudo dnf install tmux
# Arch Linux
sudo pacman -S tmux
# macOS (Homebrew)
brew install tmux
# Kurulum sonrası versiyon kontrolü
tmux -V
Versiyon 3.x ve üzeri kullanmanı öneririm. Eski sürümlerde bazı özellikler eksik olabiliyor.
Temel Kavramlar: Session, Window, Pane
tmux’u anlamak için üç temel kavramı kavramak gerekiyor:
Session (Oturum): En üst seviyedeki yapı. Bir sunucuya bağlandığında açtığın tmux oturumu. Birden fazla session aynı anda çalışabilir ve birbirinden bağımsızdır. Oturumdan “detach” olabilirsin, arka planda çalışmaya devam eder.
Window (Pencere): Her session içinde birden fazla pencere açabilirsin. Tarayıcıdaki sekmeler gibi düşün. Her pencere bağımsız bir terminal ortamı sunar.
Pane (Panel): Her pencere içinde ekranı yatay veya dikey olarak bölebilirsin. Aynı anda birden fazla komutu yan yana veya alt alta çalıştırabilirsin.
Bu hiyerarşiyi şöyle düşün: 1 Server > N Session > N Window > N Pane.
İlk Adımlar: Session Yönetimi
# Yeni bir session başlat
tmux
# İsimli session başlat (önerilir!)
tmux new-session -s production
# Kısaltması
tmux new -s development
# Mevcut sessionlara bak
tmux list-sessions
tmux ls
# İsimli session'a bağlan
tmux attach-session -t production
tmux attach -t production
# Son session'a bağlan
tmux attach
# Session'ı öldür
tmux kill-session -t production
# Tüm session'ları öldür
tmux kill-server
Prefix tuşu tmux’un en önemli konseptidir. Tmux’a bir komut göndereceğini belirtmek için önce prefix tuşuna basarsın. Varsayılan prefix Ctrl+b‘dir. Her tmux komutu prefix + tuş kombinasyonuyla çalışır.
Prefix Sonrası Temel Kısayollar
Session yönetimi için prefix (Ctrl+b) ardından:
- d: Mevcut session’dan detach ol (arka planda çalışmaya devam eder)
- s: Tüm session’ları listele ve geçiş yap
- $: Session’ı yeniden adlandır
- :new: Yeni session oluştur
Window yönetimi için prefix ardından:
- c: Yeni window oluştur
- n: Sonraki window’a geç
- p: Önceki window’a geç
- 0-9: Numarasına göre window’a geç
- ,: Window’u yeniden adlandır
- w: Window listesini göster
- &: Mevcut window’u kapat
Pane yönetimi için prefix ardından:
- %: Dikey böl (yan yana iki pane)
- “: Yatay böl (üst-alt iki pane)
- o: Sonraki pane’e geç
- q: Pane numaralarını göster
- x: Mevcut pane’i kapat
- z: Pane’i maximize et / geri al
- {: Pane’i sola taşı
- }: Pane’i sağa taşı
- Yön tuşları: Pane’ler arası geçiş
Gerçek Dünya Senaryosu 1: Sunucu Bakımı
Diyelim ki bir üretim sunucusunda bakım yapıyorsun. Aynı anda log’ları izlemen, servis durumlarını kontrol etmen ve komutlar çalıştırman gerekiyor.
# Bakım session'ı oluştur
tmux new -s server-maintenance
# Ekranı 3 pane'e böl
# Prefix + % ile dikey böl
# Prefix + " ile yatay böl
# Sol üst pane: log takibi
tail -f /var/log/syslog
# Prefix + o ile sağ pane'e geç
# Sağ üst pane: servis izleme
watch -n 2 'systemctl status nginx mysql'
# Sağ pane'i yatay böl (Prefix + ")
# Alt pane: komut çalıştırma
# Bu pane'de bakım komutlarını çalıştır
Bakım ortasında bağlantın kopsa bile tmux attach -t server-maintenance ile kaldığın yerden devam edersin. Tüm pane’ler, çalışan komutlar, her şey seni bekliyor olacak.
Gerçek Dünya Senaryosu 2: Deployment Takibi
Bir uygulama deployment’ı yapıyorsun ve birden fazla süreci takip etmen gerekiyor.
# Deployment session'ı oluştur
tmux new -s deploy
# Window 1: Deployment scripti
# Prefix + c ile yeni window aç
# Window 1 adını değiştir: Prefix + , -> "deploy-script"
./deploy.sh production
# Yeni window aç (Prefix + c)
# Window 2 adını değiştir: "app-logs"
tail -f /var/log/myapp/application.log
# Yeni window aç (Prefix + c)
# Window 3 adını değiştir: "monitoring"
watch -n 3 'ps aux | grep myapp && netstat -tulpn | grep 8080'
# Prefix + w ile window listesine bak ve geçiş yap
Bu sayede deploy scriptini çalıştırırken aynı anda log’ları ve process durumunu anlık takip edebilirsin.
tmux Konfigürasyonu: .tmux.conf
Varsayılan tmux ayarları biraz can sıkıcı olabilir. ~/.tmux.conf dosyasıyla her şeyi özelleştirebilirsin. İşte pratik ve kullanışlı bir konfigürasyon:
# ~/.tmux.conf
# Prefix'i Ctrl+a olarak değiştir (screen kullanıcıları için daha alışkın)
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
# Mouse desteğini etkinleştir
set -g mouse on
# Renk desteği
set -g default-terminal "screen-256color"
# Session numaralandırmasını 1'den başlat
set -g base-index 1
setw -g pane-base-index 1
# Geçmiş buffer boyutunu artır
set -g history-limit 50000
# Pencere numaralarını otomatik düzenle
set -g renumber-windows on
# Status bar özelleştirme
set -g status-position bottom
set -g status-bg colour234
set -g status-fg colour137
set -g status-left '#[fg=colour233,bg=colour241,bold] #S '
set -g status-right '#[fg=colour233,bg=colour241,bold] %d/%m/%Y %H:%M '
set -g status-right-length 50
set -g status-left-length 20
# Pane bölme için daha akılda kalıcı tuşlar
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# Pane'ler arası vim tarzı geçiş
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Konfigürasyonu yeniden yükle
bind r source-file ~/.tmux.conf ; display "Config reloaded!"
# Pane boyutlandırma
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
Konfigürasyonu yüklemek için:
# Mevcut tmux içinden
tmux source-file ~/.tmux.conf
# Veya prefix + r (yukarıdaki konfigürasyonla)
Copy Mode: Çıktıları Kopyalamak
tmux’un en kullanışlı özelliklerinden biri copy mode. Ekranda kayan çıktıları yakalamak, arama yapmak ve kopyalamak için kullanılır.
Prefix + [ ile copy mode’a gir. Ardından:
- Yön tuşları veya HJKL: Gezinme
- /: İleri arama
- ?: Geri arama
- n: Sonraki eşleşme
- Space: Seçim başlat
- Enter: Seçimi kopyala
- Prefix + ]: Yapıştır
- q: Copy mode’dan çık
# Vi tarzı copy mode için .tmux.conf'a ekle
setw -g mode-keys vi
# Vi copy mode tuş bağlamaları
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
bind-key -T copy-mode-vi r send-keys -X rectangle-toggle
tmux Scriptleme: Ortamları Otomatik Kur
Tmux’un gerçek gücü scriptlenebilir olmasından geliyor. Her gün aynı pencere düzenini manuel kurmak yerine bir script yazabilirsin.
#!/bin/bash
# ~/bin/dev-environment.sh
# Geliştirme ortamını otomatik kur
SESSION="development"
# Session zaten varsa bağlan
tmux has-session -t $SESSION 2>/dev/null
if [ $? != 0 ]; then
# Session oluştur
tmux new-session -d -s $SESSION -n "editor"
# Window 1: Editor
tmux send-keys -t $SESSION:1 "cd ~/projects/myapp && vim ." C-m
# Window 2: Server
tmux new-window -t $SESSION:2 -n "server"
tmux send-keys -t $SESSION:2 "cd ~/projects/myapp && npm start" C-m
# Window 3: Git ve komutlar
tmux new-window -t $SESSION:3 -n "git"
tmux send-keys -t $SESSION:3 "cd ~/projects/myapp && git status" C-m
# Window 4: Log takibi (bölünmüş)
tmux new-window -t $SESSION:4 -n "logs"
tmux split-window -h -t $SESSION:4
tmux send-keys -t $SESSION:4.1 "tail -f /var/log/nginx/access.log" C-m
tmux send-keys -t $SESSION:4.2 "tail -f /var/log/myapp/error.log" C-m
# İlk window'dan başla
tmux select-window -t $SESSION:1
fi
# Session'a bağlan
tmux attach-session -t $SESSION
# Script'i çalıştırılabilir yap
chmod +x ~/bin/dev-environment.sh
# Alias ekle
echo "alias dev='~/bin/dev-environment.sh'" >> ~/.bashrc
source ~/.bashrc
# Artık sadece "dev" yaz
dev
Pane Senkronizasyonu: Çoklu Sunucu Yönetimi
Bu özellik gerçekten sihirli. Birden fazla pane’e aynı anda aynı komutu göndermek istediğinde pane senkronizasyonu kullanırsın.
# Birden fazla sunucuya SSH ile bağlan, her biri ayrı pane'de
# Pane 1: ssh user@server1
# Pane 2: ssh user@server2
# Pane 3: ssh user@server3
# Senkronizasyonu etkinleştir
# Prefix + : ardından:
:setw synchronize-panes on
# Artık yazdığın her komut tüm pane'lere gönderilir
sudo apt update && sudo apt upgrade -y
# İş bitince senkronizasyonu kapat
:setw synchronize-panes off
Bu özelliği bir alias ile daha kolay kullanabilirsin:
# .tmux.conf'a ekle
bind e setw synchronize-panes on
bind E setw synchronize-panes off
Cluster update’leri, konfigürasyon dağıtımı veya aynı komutu birden fazla sunucuda çalıştırma senaryolarında inanılmaz zaman kazandırır.
tmux Plugin Manager (TPM) ile Eklenti Yönetimi
tmux’u daha da güçlendirmek için TPM kullanabilirsin:
# TPM'i yükle
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
# .tmux.conf'a ekle
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
# TPM'i başlat (dosyanın sonuna)
run '~/.tmux/plugins/tpm/tpm'
tmux-resurrect eklentisi muhteşem bir özellik sunuyor: sunucu yeniden başlasa bile tmux oturumlarını ve pane içeriklerini kurtarıyor. tmux-continuum ise bu kaydetme işlemini otomatikleştiriyor.
# TPM'i yüklemek için tmux içinden
# Prefix + I
# Eklentileri güncellemek için
# Prefix + U
# tmux-resurrect ile kaydet
# Prefix + Ctrl+s
# tmux-resurrect ile geri yükle
# Prefix + Ctrl+r
Faydalı tmux Komutları ve İpuçları
# Tüm tmux komutlarını listele
tmux list-commands
# Mevcut tuş bağlamalarını göster
tmux list-keys
# Bir session içindeki window'ları listele
tmux list-windows -t production
# Bir window içindeki pane'leri listele
tmux list-panes -t production:1
# Belirli bir pane'e komut gönder (bağlı olmadan)
tmux send-keys -t production:1.2 "sudo systemctl restart nginx" Enter
# Pane'in içeriğini dosyaya kaydet
tmux capture-pane -t production:1.1 -p > /tmp/pane-output.txt
# Session'ı başka kullanıcıyla paylaş (pair programming)
# Aynı socket'i kullanan başka bir tmux bağlantısı aç
tmux -S /tmp/shared new-session -s shared
# Diğer kullanıcı bağlansın
tmux -S /tmp/shared attach
Yaygın Sorunlar ve Çözümleri
Renk sorunları: Terminal’in 256 renk desteklediğinden emin ol.
# .bashrc veya .zshrc'ye ekle
export TERM=xterm-256color
# tmux içinden kontrol
echo $TERM
Escape tuşunda gecikme: Özellikle vim kullanıcıları için can sıkıcı.
# .tmux.conf'a ekle
set -sg escape-time 0
SSH agent yönlendirme sorunları:
# .tmux.conf'a ekle
set -g update-environment "SSH_AUTH_SOCK SSH_AGENT_PID"
Tmux oturumunu başka kullanıcıya devretme: Bazen root olmadan açtığın bir session’a sudo ile giermen gerekebilir.
# Oturumu kaydet ve kullanıcı değiştir
sudo su -
tmux attach -t 0 # Session numarasına göre
.bashrc Entegrasyonu
Terminali her açtığında tmux’u otomatik başlatmak veya mevcut session’a bağlanmak için:
# ~/.bashrc veya ~/.zshrc sonuna ekle
if command -v tmux &> /dev/null && [ -n "$PS1" ] &&
[[ ! "$TERM" =~ screen ]] &&
[[ ! "$TERM" =~ tmux ]] &&
[ -z "$TMUX" ]; then
# "main" adında session yoksa oluştur, varsa bağlan
tmux new-session -A -s main
fi
Bu sayede her SSH bağlantısında otomatik olarak tmux’a girmiş olursun.
Sonuç
tmux, her sistem yöneticisinin araç kutusunda olması gereken bir uygulama. Öğrenme eğrisi ilk başta biraz dik görünebilir, özellikle prefix konsepti ve kısayollar alışması zaman alabilir. Ama bir hafta düzenli kullanımın ardından tmux olmadan nasıl çalıştığını merak eder hale geliyorsun.
En önemli alışkanlık: Her önemli işi tmux session içinde başlatmak. Özellikle uzak sunucularda uzun sürecek işlemler, deployment’lar, yedekleme scriptleri hep tmux altında çalıştırılmalı. Bağlantı kopması korkusu olmadan rahatça çalışabilmek, sistem yönetimi deneyimini kökten değiştiriyor.
Başlangıç için önerdiğim yol haritası: Önce temel session yönetimini öğren, sonra pane bölmeyi kavra, ardından .tmux.conf ile kendi konfigürasyonunu oluştur. Kısayolları ezberlemeye çalışma, pratik yaparak öğren. Ve mutlaka senin çalışma ortamına özel bir başlangıç scripti yaz. Bir kez kurduğunda, her yeni terminali açtığında aynı düzeni saniyeler içinde hazır hale getirirsin.
tmux-resurrect eklentisiyle birleştiğinde artık sunucu reboot’larından bile korkmaz hale geliyorsun. Sistem yönetiminde bu seviyede bir konfor gerçekten paha biçilemez.