Tmux (Terminal Multiplexer) ile terminal ekranınızda sanal pencereler oluşturarak kabuk oturumlarınızı bu pencerelere dağıtabilir, sisteminizi yönettiğiniz ekranları daha etkin kullanabilirsiniz. Tmux, multitail aracına benzeyen; fakat çok daha fazla özelliği içinde barındıran gelişmiş pencere oturumlarının oluşturulmasını sağlayan bir araçtır. Aşağıda tmux aracı ile oluşturulmuş bir pencere görüntüsü size bir fikir verecektir.
Bir tmux pencere oturumu ekran görüntüsü
Yukarıdaki ekran görüntüsünde bir oturum (session) içerisinde iki adet pencere (window) ve debug adlı pencerenin içinde de üç adet panel (pane) oluşturulduğu gözüküyor. Terminal ekranın bu şekilde pencerelere ve panellere ayrılabilmesi, alanın etkili kullanılmasını sağlar ve çalışma verimliliğini artırır. Aynı zamanda bu düzen, bir oturum içinde yaratıldığından terminale bağlı olmadığınız zamanlarda da arka planda çalışmasına devam eder (panellerde çalışmakta olan programlar da çalışmaya devam eder). Dilediğiniz zaman farklı oturumlar/pencereler ve paneller arasında geçiş yapabilir, terminale bağlı olmadığınız zamanlarda arka plana atabilirsiniz. Ayrıca birden fazla kullanıcı aynı oturumu kullandıklarında aynı ekranlara sahip olabilir. Aşağıdaki şekilde tmux aracının içerdiği bölümlerin mantıksal hiyerarşisi yer almaktadır.
Tmux aracının sağladığı panel düzeninin mantıksal hiyerarşisi
Şimdi tmux aracının nasıl yükleneceğini ve temel kullanımının nasıl gerçekleştirildiğine bakalım. Öncelikle Raspberry Pi’ınızı güncelleyin ve apt aracı ile tmux’ı yükleyin.
1 |
pi@raspberry ~ $ sudo apt install tmux -y |
Tmux oturumu (session) oluşturmak ve yok etmek
Tmux aracı oturumlar aracılığı ile kullanılır. Bir oturum başlattığınızda içerisinde dilediğiniz kadar pencere (pencereler terminal ekranının tamamını kaplar) ve pencereler içerisinde de istediğiniz kadar panel oluşturabilirsiniz. Panelleri satırları veya sütunları bölerek oluşturup, boyutlarını ayarlayabilirsiniz. Öncelikle bir oturum oluşturmak için aşağıdaki komutu verelim:
1 |
pi@raspberry ~ $ tmux new-session -s 'Oturum1' |
Tmux’a yeni oluşturulacak oturumun adı belirtilmez ise kendisi “0” adında bir oturum oluşturur. Bu komuttan sonra yeni bir tmux oturumu başlatılır ve içinde bir komut kabuğu (bash) açılır. Oturumun adı ekranın altındaki satırda görülebilir. Tmux’ın komut konsoluna ulaşmak için kullanılan tuş bileşimi Ctrl+b’dir (bu bileşim tmux.conf aracılığı ile yeniden tanımlanabilir). Tmux’ın oturum, pencere ve panellerini yönetmek için öncelikle komut moduna geçilir. Komut moduna geçmek için Ctrl ve b tuşlarına aynı anda basın ve bırakın. Ekranda komut modunda olduğunuzu gösterir herhangi bir değişiklik olmayacaktır. Bundan sonra basacağınız her tuş tmux’ın için bir işleve karşılık gelen komutlar olacaktır. Örneğin d tuşuna (deattach) bastığınızda tmux oturumu terminalden ayrılacak ve arka plana itilecektir. Mevcut tmux oturumlarını görmek için aşağıdaki gibi list-sessions seçeneğinden faydalanabilirsiniz.
1 2 3 |
pi@raspberry ~ $ tmux list-sessions yeni oturum: 1 windows (created Thu Aug 24 07:15:38 2017) [181x48] |
Bir oturuma yeniden dâhil olmak için attach seçeneği kullanılır. Aşağıdaki komut ile arka planda çalışmakta olan ‘yeni oturum’ adlı oturuma geçiş yapılmaktadır. Attach seçeneği yerine daha kısa olan a veya at kısaltmalarını da kullanabilirsiniz
1 2 3 4 5 |
pi@raspberry ~ $ tmux attach –t 'Oturum1' pi@raspberry ~ $ tmux a –t 'Oturum1' pi@raspberry ~ $ tmux at –t 'Oturum1' |
Bir oturumun içinde iken diğer bir oturuma geçmek için s tuşunu kullanabilirsiniz.
Oturumu ve dolayısı ile içindeki tüm pencere ve panelleri kapatmak için tmux komut moduna geçin ve : tuşuna basarak açılan istemciye şu komutu verin:
1 |
:kill-session |
Aynı işlemi oturum dışından yapmak için oturum adını aşağıdaki gibi belirtebilirsiniz:
1 |
pi@raspberry ~ $ tmux kill-session –t 'Oturum1' |
Tüm tmux oturumlarını dolayısıyla tmux sunucu işlevini sonlandırmak için kill-server seçeneğinden faydalanılabilirsiniz. Bu komutun çalıştırılması oturumlar ve oturumlar içindeki paneller içinde açılmış olan tüm programların da sonlanmasına neden olacaktır. Bu nedenle komutu kullanırken dikkatli olun.
1 |
pi@raspberry ~ $ tmux kill-server |
Eğer tmux kill-server ile sonlandırılırsa yeni oturum açmadan önce start-server ile başlatılmalıdır.
1 |
pi@raspberry ~ $ tmux start-server |
Tmux oturumu içinde pencere oluşturmak
Şimdi oturumlarımız içerisinde farklı terminal düzenlerini muhafaza eden pencerelerin nasıl oluşturulacağına bakalım. Öncelikle Ctrl+b tuş bileşimine basarak komut moduna geçin ve ardından c tuşuna basın (create). Tmux otomatik olarak 0’dan başlayan sıra numaralarını kullanarak yeni bir pencere oluşturacak ve etkinleştirecektir. Aktif pencere adının sağ tarafında * işaretini görürsünüz.
Mevcut pencerenin adını değiştirmek isterseniz komut modunda iken , (virgül) tuşuna basın. Yeni pencere adını girebileceğiniz bir giriş alanı açılacaktır. Buraya pencerenin yeni adını yazın ve Enter tuşuna basın. Pencereler arasında sırasıyla geçiş yapmak için p ve n tuşlarından faydalanabilirsiniz (tabii ki komut moduna geçmek için öncelikle Ctrl+b tuş bileşimine basmalısınız). Ayrıca, ilgili pencereye doğrudan geçmek için pencere numarasını da kullanabilirsiniz. Örneğin tmux’ın komut modunda iken 2 tuşuna basarsanız 2 numaralı pencere aktif olacaktır. Dilerseniz w tuşu ile pencere isim listesinden de seçim yaparak aktif pencerenizi değiştirebilirsiniz.
Tmux penceresi içinde paneller oluşturmak
Aktif pencere içinde çalışan programlarımızın yerleşimini tanımlamak için panelleri kullanırız. Aktif pencere içerisinde bir panel oluşturmak için komut modunda iken % (yüzde işareti) tuşuna basarsanız içinde bulunduğunuz alan (pencere veya panel) yatayda iki eşit panele bölünecek ve her birinde komut satırı (bash) açılacaktır. Benzer bölümlemeyi dikeyde gerçekleştirmek için “ (çift tırnak) tuşunu kullanabilirsiniz.
Örnek bir tmux panel yerleşimi
Yukarıdaki panel yerleşiminde sırasıyla %, ” ve % tuşlarına basılmış pencere önce dikeyde ikiye daha sonra da yatayda ve tekrar dikeyde ikiye bölünmüştür. Birkaç deneme yaparak bu konuda beceri kazanabilirsiniz.
Panellere bölme işini kısa yollar ile yapabileceğiniz gibi tmux’a seçenek vererek de gerçekleştirebilirsiniz. Örneğin içinde bulunduğunuz paneli yatayda iki eşit parçaya (panele) ayırmak için aşağıdaki komutu verebilirsiniz.
1 |
pi@raspberry ~ $ tmux split-window –h –p 50 |
Bu komutta yer alan –h seçeneği panelin dikeyde bölüneceğini belirtir. Paneller arasında gezinmek için komut modunda iken ok tuşlarını basabilirsiniz. Gezintinin her adımında komut moduna tekrar geçmelisiniz. Ayrıca paneller arasında sırayla gezinmek için ; (noktalı virgül) ve o tuşlarını kullanabilirsiniz.
Panellerin sayıları arttıkça doğal olarak boyutları da küçülecektir. Bir diğer özellik de; gerektiğinde panele yakınlaşmak, diğer bir tabirle paneli büyütmektir. Aktif paneli büyültmek için z tuşunu kullanın. Orijinal panel boyutuna geri döndürmek için z tuşuna tekrar basabilirsiniz.
İçinde bulunduğunuz paneli kapatmak için x tuşunu kullanabilirsiniz. İçinde bulunduğunuz paneli yeniden boyutlandırmak için Alt tuşu ile birlikte ok tuşlarını kullanabilirsiniz.
Tmux hakkında bazı ipuçları
Raspberry Pi’ınızın haftalarca veya aylarca hiç kapanmadan çalışabileceğini varsayarsak, oturum adı belirtilmemiş tmux oturumlarınıza bir isim vermek faydalı olacaktır. Tmux oturumu –s seçeneği kullanılarak isimlendirilmez ise 0 dan başlayarak devam eden numaralar otomatik olarak atanır. Bu şekilde numara ile isimlendirilmiş oturumları, yeniden adlandırmak için rename-session seçeneğinden faydalanabilirsiniz.
1 2 3 |
pi@raspberry ~ $ tmux rename-session –t '0' 'Trafik' yeni oturum: 1 windows (created Thu Aug 24 07:15:38 2017) [181x48] |
İçerisinde bulunduğunuz pencereyi sonlandırmak için aşağıdaki gibi kill-window seçeneğinden faydalanabilirsiniz.
1 |
pi@raspberry ~ $ tmux kill-window |
Pencerenin sıra numarasını kullanarak da sonlandırma gerçekleştirebilirsiniz. Burada hatırlamanız gereken konu pencere içerisinde çalışan tüm programların da sonlandırılacak olmasıdır. 2 sıra numaralı pencereyi sonlandırmak için şu komutu kullanabilirsiniz:
1 |
pi@raspberry ~ $ tmux kill-window –t 2 |
Konunun başında da belirttiğim gibi tmux oldukça gelişmiş bir araçtır ve bir sunucu servisi olarak çalışır. Bu sayede farklı kullanıcılar terminallerini aynı oturum içerisinde birleştirerek aynı input’a ve ekran çıktısına sahip olabilir. Bu ortak geliştirilen projeler için kullanışlı bir özelliktir.
Pencereyi ön tanımlı panellere otomatik olarak yaymak için boşluk tuşunu (space bar) kullanabilirsiniz. Boşluk tuşu ile paneller çeşitli yerleşim şekillerine göre yeniden düzenlenecektir.
Mevcut pencere içerisindeki tüm panellere aynı anda yazmak isteyebilirsiniz bunun için komut modunda iken : (ikinokta üst üste) yazın. Tmux’ın komut istemcisi açılacaktır. Buraya aşağıdaki gibi setw synchronize-panes komutu yazın (istemci, tab tuşu ile komut tamamlamayı destekler)
1 |
:setw synchronize-panes |
Artık klavyeden yazdığınız her girdi pencere içindeki tüm panellere yazılacaktır. Bu komut özellikle birden fazla sunucuda aynı komut/komutları çalıştırmak gerektiğinde çok faydalıdır. Bu durumda her panel içinde farklı sunuculara ssh oturumu açmanız yeterlidir. Bu moddan çıkmak için tmux’ın komut istemcisine aynı komutu tekrar yazın.
Tmux’ın kullanımı ile ilgili daha fazla ve en kapsamlı bilgiyi man komutu ile öğrenebilirsiniz:
1 |
pi@raspberry ~ $ man tmux |
tmux içinde iken ekranı kaydırmak için kullanılan page-up ve page-down tuşlarını kullanamadığınızı fark etmiş olabilirsiniz. Bunun için önce Ctrl+b ile komut moduna geçmelisiniz. Bundan sonra ilgili tuşları kullanabilirsiniz. Kaydırma işlemini bitirmek için q tuşuna basarak çıkabilirsiniz.
Tmux kısa yolları
Yeri geldiğince değinilen klavye kısa yollarını ve fazlasını aşağıdaki tabloda derli toplu şekilde bulabilirsiniz.
OTURUMLAR (Session)
Yeni oturum başlatma
$ tmux
$ tmux new
$ tmux new-session
: new
$ tmux new -s oturum_adi
: new -s oturum_adi
Oturumları listeleme$ tmux ls
$ tmux list-sessions
Ctrl+b s
Son oturuma dâhil olma$ tmux a
$ tmux at
$ tmux attach
$ tmux attach-session
Oturum adıyla dâhil olma$ tmux a -t oturum_adi
$ tmux at -t oturum_adi
$ tmux attach -t oturum_adi
$ tmux attach-session -t oturum_adi
Önceki ve sonraki oturuma geçiş yapmaCtrl+b (
Ctrl+b )
Oturumu sonlandırma$ tmux kill-ses -t oturum_adi
$ tmux kill-session -t oturum_adi
Etkin olan hariç tüm oturumları sonlandırma$ tmux kill-session -a
Belirtilen hariç tüm oturumları sonlandırma$ tmux kill-session -a -t oturum_adi
Oturumu adlandırmaCtrl+b $
Oturumdan ayrılmaCtrl+b d
Diğer kullanıcıları oturumdan ayırma: attach -d
PENCERELER (Window)
Pencere oluşturmaCtrl+b c
Pencereyi adlandırmaCtrl+b ,
Pencereyi kapatmaCtrl+b &
Önceki pencereCtrl+b p
Sonraki pencereCtrl+b n
Pencere no ile geçişCtrl+b 0..9
Pencereleri yer değiştirme: swap-window -s 2 -t 1
Pencereyi 1 sola kaydırma: swap-window -t -1
PANEL (Pane)
Son etkin panele geçCtrl+b ;
Paneli dikey bölCtrl+b %
Paneli yatay bölCtrl+b “
Etkin paneli sola taşıCtrl+b {
Etkin paneli sağa taşıCtrl+b }
Etkin paneli değiştirCtrl+b á
Ctrl+b â
Ctrl+b à
Ctrl+b ß
Panel numaralarını gösterCtrl+b q
İlgili panele gitCtrl+b q 0..9
Paneli pencereye yaymaCtrl+b z
Paneli pencereye dönüştürmeCtrl+b !
Panelin yüksekliğini değiştirme
Ctrl+b Ctrl+á
Ctrl+b Ctrl+â
Son girilen komutlarda arama
Ctrl+b r
Panelin genişliğini değiştirme
Ctrl+b Ctrl+à
Ctrl+b Ctrl+ß
Etkin paneli kapatma
Ctrl+b x
Komutu tüm panelleri gönder: setw synchronize-panes
Panel düzenleri arasında geçiş yapCtrl+b boşluk
Panelde saati görüntüle
Ctrl + b t
Tmux’ı kullanışlı hale getirin
Tmux’ın yapılandırma dosyası kullanılarak birçok özelleştirme yapılabilir. Tmux sunucusu başlarken (session değil) kullanıcının home dizininde yer alan .tmux.conf dosyasındaki yapılandırma seçeneklerini yükler. Eğer ev dizininizde bu yapılandırma dosyası yer almıyorsa aşağıdaki gibi oluşturabilirsiniz.
1 2 3 4 5 |
pi@raspberry ~ $ touch ~/.tmux.conf pi@raspberry ~ $ ls -la ~/.tmux.conf -rw-r--r-- 1 pi pi 1042 Apr 29 03:14 /home/pi/.tmux.conf |
tmux.conf dosyasında yapılan değişikliklerin geçerli olmasını sağlamak için iki seçeneğe sahibiz. İlki tmux sunucusunu yeniden başlatmak. Ki bu mevcut oturumların (session) sonlandırılmasını gerektirdiği için tercih edilmeyebilir. Tmux sunucusunu sonlandırmak için tmux kill-server komutu kullanılır. Diğer seçenek ise, Ctrl+b : ile tmux komut moduna geçerek aşağıdaki komutu vermek. Komut mevcut .tmux.conf yapılandırmasının uygulanmasını sağlar.
1 |
:source-file ~/.tmux.conf |
Dilerseniz .tmux.conf’u kullanarak bazı kullanışlı işlevlerin nasıl ayarlanacağına bakalım. Window’lar içinde oluşturduğunuz panellere başlık çubuğu eklemek ilgili panelin tanımlamak için faydalı olabilir. Böylece panellerde hangi komutun çalıştığını ya da panelin ne amaçla kullanıldığı kolaylıkla anlaşılabilir. Bunun için.tmux.conf dosyamıza aşağıdaki seçenekleri ekleyelim.
1 2 3 4 5 |
pi@raspberry ~ $ nano .tmux.conf set -g pane-border-status top set -g pane-border-format '#[fg=colour255,bg=colour19] #(ps -f --no-headers --ppid #{pane_pid} -o args) ' |
Bu seçeneklerden ilki panellerin (pane) durum çubuğunu etkinleştirerek ve çubuğun panelin üstüne yerleşmesini sağlar. Diğer ise panelde görüntülenecek olan bilgiyi ayarlar. Yukarıdaki yapılandırmaya göre panelin başlığında panelin numarası ve panelde çalıştırılan komut görüntülenecektir.
Panelleri ayıran çizgilerin rengini değiştirmek için aşağıdaki ayarları kullanabilirsiniz. Bu ayarlar ile etkin panel kırmızı, diğer paneller mavi çizgiye sahip olacaktır.
1 2 3 |
set -g pane-border-style 'fg=colour19 bg=colour0' set -g pane-active-border-style 'bg=colour0 fg=colour9' |
Aşağıdaki yapılandırma ise pencerenin durum çubuğunun görünüşünü değiştirmektedir. Durum çubuğu okunaklı olması için pencere başlıkları mavi üzerine beyaz yazdırılır ayrıca çubuğun sağına tarih ve saat bilgisi eklenir.
1 2 3 4 5 6 7 8 9 |
set -g status-position bottom set -g status-justify left set -g status-style 'bg=colour19 fg=colour255 dim' set -g status-left '' set -g status-right '#[fg=colour255,bg=colour19] %d/%m #[fg=colour255,bg=colour19:] %H:%M:%S ' |
.tmux.conf dosyasında yapılan değişiklikleri uygulamak için Ctrl+b : ile komut moduna geçin ve aşağıdaki komutu yazarak enter tuşuna basın. Yapılandırma dosyasındaki ayarlar tmux sunucusuna uygulanacaktır.
1 |
: source-file ~/.tmux.conf |
Bir terminal oturumu açtığınızda bash komut satırı yerine otomatik olarak tmux oturumunuzun açılmasını istiyorsanız .bashrc dosyanıza aşağıdaki tanımlamayı yapabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 |
pi@raspberry ~ $ nano ~/.bashrc […] if [ -z "$TMUX" ]; then tmux a || tmux new -s default fi […] |
Yukarıdaki yapılandırma ile terminal 0 isimli tmux oturumunu açacak. Eğer bu isimde bir oturum yoksa yeni bir tmux oturumu açılacak.