Εμπιστεύεσαι την σύνδεση internet στο σπίτι σου και είσαι συνδεδεμένος στον απομακρυσμένο server σου και τρέχεις μια εντολή η οποία θα ολοκληρωθεί σε 2-3 λεπτά. Τσούπ … διακοπή ρεύματος – internet… Τώρα;

Φυσικά το παραπάνω σενάριο είναι το πρώτο βάπτισμα πυρός ενός junior admin και το έχουμε περάσει όλοι μας.

Οι περισσότεροι πλέον χρησιμοποιούμε κάποιον multiplexer όπως το GNU Screen ή το πιο διαδεδομένο Tmux. Στο παραπάνω «τρομακτικό σενάριο» απλά:

  1. Θα συνδεθείς στον server σου όπως κάνεις πάντα
  2. θα τρέξεις το tmux και έπειτα θα κάνεις ότι δουλειές είναι να κάνεις.
  3. Αν διακοπεί η σύνδεσή σου, κρασάρει το PC σου, κοπεί το ρεύμα στο σπίτι, δεν σε νοιάζει…
  4. Απλά μόλις επανέλθει και συνδεθείς στον server σου τρέχεις ένα tmux attach
  5. και συνεχίζεις σαν να μην έχει γίνει τίποτα.
Advertisements

Με το tmux επίσης το τερματικό σου θα έχει windows (παράθυρα), χωρισμένα σε pane (περιοχές) και κάθε pane θα έχει ένα τερματικό ή ένα πρόγραμμα να τρέχει.

Οι δυνατότητες δεν τελειώνουν εδώ. Κάθε τέτοια συλλογή από Windows και Panes θα είναι ένα session (συνεδρία). Και μπορείς να αποσυνδεθείς από μια συνεδρία αφήνοντας τα προγράμματα να τρέχουν. Έτσι μπορείς πχ να συνδεθείς σε κάποιο απομακρυσμένο υπολογιστή να ξεκινήσεις κάποια προγράμματα να αποσυνδεθείς και την άλλη μέρα να τα βρεις ακριβώς όπως τα άφησες. Επίσης μπορείς να συνδεθείς στην συνεδρία κάποιου άλλου χρήστη και να δουλεύετε κάποιο κείμενο η πρόγραμμα ταυτόχρονα ο καθένας από το σπίτι του η το γραφείου του.

Έχει και άλλα; Έχει μπορείς να κάνεις όλα τα παραπάνω με scripts αυτοματοποιώντας τις διαδικασίες. Το λιγουρεύεστε;

Κάποια από αυτά τα κάνει και το πρόγραμμα screen οι δυνατότητες και η παραμετροποίηση του tmux όμως δεν έχουν ταίρι.

Εγκατάσταση Tmux

Το tmux υπάρχει σε κάθε διανομή, αν και όχι πάντα η τελευταία έκδοση. Τα παρακάτω έχουν δοκιμαστεί στην έκδοση 3.1. Μπορείτε να δείτε την έκδοση που έχετε εγκατεστημένη με την εντολή.

tmux -V

Ωραία… αλλά που πρέπει να το εγκαταστήσεις; Φυσικά σε πρώτη φάση μπορείς να το εγκαταστήσεις στο PC σου και όταν εξοικειωθείς με την χρήση του θα το κάνεις εγκατάσταση και στον server σου και μετά από κάθε SSH θα το τρέχεις (ή θα το ρυθμίσεις να τρεχει αυτόματα μετά απο κάθε SSHσύνδεση)

Prefix του Tmux

Μπορείς να ξεκινήσεις το tmux χωρίς να ορίσεις ένα όνομα για το session σου, αλλά ας ξεκινήσουμε σωστά την χρήση του ονομάζοντας μια. Στο τερματικό θα δώσουμε μια από τις παρακάτω εντολές.

tmux new-session -s talos
ή
tmux new -s talos

Για να βγούμε από το session δίνουμε την εντολή

exit

Κάθε εντολή του tmux ξεκινάει με ένα συνδυασμό πλήκτρων που τον λέμε prefix εξ ορισμού είναι ο συνδυασμός 

Ctrl+B

Εναλλακτικά θα το βλέπετε συχνά να αναφέρεται ως C-b (όπως θα κάνω και εδώ). Ας δούμε π.χ. την ώρα Ctrl+B+t (C-b +t). Για να σταματήσετε το ρολόι πατήστε το πλήκρο q.

Υπάρχουν πολλές εντολές. Ας τις δούμε όλες τις διαθέσιμες εντολές του tmux

Ctrl+B+?

Υπάρχουν πολλές εντολές

Σημείωση: Ξέρω ότι κοιτάς το δικό σου Tmux και βλέπεις και την παραπάνω εικόνα με το δικό μου Tmux και λες… «τι κάνω λάθος ;». Μην ανησυχείς… λιγουρέψου το και θα σου πως στο τέλος.

Αν κάτι δεν δουλεύει τότε βεβαιωθείτε πως δεν έχετε πατημένο το CapsLock και το πληκτρολόγιο είναι στα αγγλικά. Για να δεις π.χ. την ώρα είναι C-b+ t και όχι C-b+ Τ

Ρυθμίσεις και διαμόρφωση του Tmux

Το πρώτο πράγμα που αλλάζω είναι το πλήκτρο που θα λειτουργεί σαν prefix, προσωπικά χρησιμοποιώ το ` για να πατάω μόνο ένα κουμπί.
Το αρχείο ρυθμίσεων είναι το αρχείο ~/.tmux.conf όπου θα προσθέσω τις πρώτες μου ρυθμίσεις.

# Set prefix key
set-option -g prefix `
unbind-key C-b
bind-key ` send-prefix

# Reload ~/.tmux.conf
bind r source-file ~/.tmux.conf

# Start numbering from 1
set -g base-index 1
setw -g pane-base-index 1

μιας και μέχρι να το φέρω στα μέτρα μου θα κάνω αρκετές αλλαγές προσθεσα τον συνδυασμό C-b+ r που θα φορτώνει (reload) το αρχείο ρυθμίσεων από την αρχή.

Μια άλλη αλλαγή που έκανα είναι να ξεκινάει η αρίθμηση από το 1 γιατί είμαστε άνθρωποι.

Advertisements

Tmux Sessions – Συνεδρίες

Ας δώσουμε μερικές εντολές στο τερματικό όπως μια ls για να δείχνει κάτι. Τώρα θα αποσυνδεθούμε από την συνεδρία με  C-b+ d (detach). Η εντολή

tmux list-sessions
ή
tmux ls

θα δείξει τις διαθέσιμες συνεδρίες. Ας φτιάξουμε άλλη μια αποσυνδεδεμένη συνεδρία

tmux new -s work -d

και η εντολή tmux ls θα δείχνει κάτι σαν το παρακάτω

talos: 1 windows (created 00:15:11 2020) [161x23]
work: 1 windows (created 00:25:53 2020) [80x24]

Ώρα να συνδεθούμε σε μια συνεδρία. Θα δώσουμε την εντολή

tmux attach -t talos

και η συνεδρία θα επανέλθει μαζί με ότι τρέχαμε.

Ώρα για λίγα μαγικά. Ανοίγουμε ένα δεύτερο τερματικό και δίνουμε την ίδια εντολή tmux attach -t talos. Μαγεία. Δοκιμάστε να αλλάξετε μέγεθος στα τερματικά και δείτε τι θα συμβεί.

Έστω τώρα ότι έχετε ένα δεύτερο υπολογιστή στον οποίο μπορείτε να συνδεθείτε με ssh και να έχετε πρόσβαση σε αυτή την συνεδρία. Έτσι πχ δυο προγραμματιστές μπορούν να κάνουν pair programming. Για αυτό πολλά μπορούν να λεχθούν, αλλά ας το αφήσουμε για την ώρα.

Αλλά βλέπω μια στενοχώρια. Τόσα session θα μείνουν για πάντα; Μπορούμε να τα σταματήσουμε

tmux kill-session -t talos
tmux kill-session -t work
tmux ls

Ένας γρηγορότερος τρόπος

tmux kill-server

Tmux Windows – Παράθυρα

Τα παράθυρα είναι σαν τα tabs του τερματικού. Παρακάτω είναι οι βασικές εντολές.

ΣυνδυασμόςΕντολή
C-b+ cΔημιουργία (create) παράθυρου
C-b+ nΕπόμενο (next) παράθυρο
C-b+ dΠροηγούμενο (previous) παράθυρο
C-b+ wΕπιλογή παράθυρου
C-b+ nΕπιλογή με αριθμό, n=1…9
C-b+ &Κλείσιμο παραθύρου

Tmux Panes – Περιοχές

Πρώτα μερικές ρυθμίσεις που θα προστεθούν στο αρχείο. Μου αρέσουν αυτές, γιατί τις βρίσκω ποιο λογικές. Αλλά μπορείτε να χρησιμοποιήσετε τις αρχικές ρυθμίσεις ή να τις προσαρμόσετε στις ανάγκες σας.

# splitting panes with | and -​
bind-key - split-window -v
bind-key \ split-window -h

# Resize
bind-key -r < resize-pane -L 5
bind-key -r > resize-pane -R 5
bind-key -r + resize-pane -U 5
bind-key -r _ resize-pane -D 5

# Resize with arrows
bind-key -r C-Left  resize-pane -L 5
bind-key -r C-Right resize-pane -R 5
bind-key -r C-Up    resize-pane -U 5
bind-key -r C-down  resize-pane -D 5

# Layout
bind-key = select-layout even-vertical
bind-key | select-layout even-horizontal

# vim style
bind-key -r h select-pane -L
bind-key -r j select-pane -D
bind-key -r k select-pane -U
bind-key -r l select-pane -R

# arrow style
bind-key Up select-pane -U
bind-key Down select-pane  -D
bind-key Left select-pane -L
bind-key Right select-pane -R

Αποθηκεύστε τις αλλαγές, φορτώστε τις C-b+ r, και είμαστε έτοιμοι. Ας χωρίσουμε την οθόνη στα 2 οριζόντια και κάθετα C-b+ - και C-b+ \. Τώρα δοκιμάστε να αλλάξετε περιοχή.

Advertisements

Έβαλα δυο συνδυασμούς είτε με τα πλήκτρα του vi (h,j,k,l) είτε λιγότερο βολικό με τα βελάκια. Επίσης έβαλα δυο τρόπος να αλλάζεις μέγεθος στις περιοχές. Δοκιμάστε τις. Για παράδειγμα C-b+ < ή C-b+ Left θα μεγαλώσει την περιοχή προς τα αριστερά.

ΣυνδυασμόςΕντολή
C-b+ -Κάθετος χωρισμός
C-b+ \Οριζόντιος χωρισμός
C-b+ =οριζόντια τακτοποίηση
C-b+ |Κάθετη τακτοποίηση
C-b+ zΜεγιστοποίηση / επαναφορά
C-b+ oΑλλαγή περιοχής
C-b+ qΑρίθμισε περιοχές
C-b+ SpaceΑλλαγή διαμόρφωσης

Τέλος αυτά μπορούν να γίνουν και από την γραμμή εντολών

tmux select-layout even-vertical

που μπορείτε να δώσετε σε οποιοδήποτε τερματικό. Τις εντολές μπορείτε να τις δώσετε και στην γραμμή εντολών του tmux που είναι προσβάσιμη με C-b+ :.

Tmux Plugin Manager

Για το Tmux έχει φτιαχτεί και ένας Plugin Manager για να μπορούν να επεκτείνουν τις δυνατότητές του όπως παράδειγμα ένα plugin επαναφοράς της συνεδρίας μας με όλα τα παράθυρα, τα tabs κλπ.

Εγκατάσταση του TPM

Για να το εγκαταστήσετε τρέχετε:

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Επειτα στο τέλος του αρχείου ρυθμίσεων του ~/.tmux.conf προσθέστε την παρακάτω γραμμή:

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'git@github.com:user/plugin'
# set -g @plugin 'git@bitbucket.com:user/plugin'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

Φορτώστε ξανά το περιβάλλον Tmux, ώστε το TPM να φορτωθεί:

tmux source ~/.tmux.conf

Προσθήκη Plugins στο Tmux

  1. Προσθέστε το νέο plugin που βρήκατε στο ~/.tmux.conf με την διαρρύθμιση set -g @plugin '...' (ή όπως το συστήνει η τεκμηρίωση του plugin)
  2. Πατήστε C-b + I ( κεφαλαίο i, όπως λέμε Install) για να κατεβάσει το plugin.

Αυτό ήταν ! Το plugin κατέβηκε στον φάκελο ~/.tmux/plugins/ και ενεργοποιήθηκε.

Απεγκατάσταση Plugins του Tmux

  1. Αφαιρέστε (ή βάλτε # στην αρχή) την γραμμή του plugin από την λίστα.
  2. Press Πατήστε C-b + alt + u (μικρά u όπως λέμε uninstall) για να αφαιρεθεί το plugin.

Όλα τα plugins είναι στο ~/.tmux/plugins/ οπότε εναλλακτικά μπορείτε να τα βρείτε εκεί και να τα διαγράψετε.

Βασικές εντολές του TPM

C+b + I

  • Εγκαθιστά νέa plugins από το GitHub ή οποιοδήποτε άλλο αποθετήριο git
  • Ενημερώνει για τις αλλαγές ρυθμίσεων του Tmux

C+b + U

  • Αναβάθμιση των plugin(s)

C+b + alt + u

  • Απεγκατάσταση των plugins που έχουν αφαιρεθεί (ή έχουν #) στην λίστα με τα plugins.

Μπορείτε να ρίξετε μια ματιά στην λίστα των διαθέσιμων Tmux Plugins

Advertisements

Αποθήκευση διαρρύθμισης των tabs – panes και συνεδριών

Ήρθε η ώρα να βάλουμε το πρώτο μας χρήσιμο Tmux plugin που ονομάζεται Tmux Resurrect. Γιατί να το κάνουμε αυτό;

Το Tmux είναι υπέροχο, εκτός εάν πρέπει να κάνετε επανεκκίνηση του υπολογιστή η τον Server. Χάνετε όλα τα τρέχοντα προγράμματα, διατάξεις παραθύρου κ.λπ. Το tmux-resurrect αποθηκεύει όλες τις λεπτομέρειες από το περιβάλλον tmux σας, ώστε να μπορεί να αποκατασταθεί πλήρως μετά την επανεκκίνηση του συστήματος σαν να μην σταματήσατε ποτέ το tmux.

Ανοίξτε το ~/.tmux.conf σας και προσθέστε στην λίστα των plugin σας:

set -g @plugin 'tmux-plugins/tmux-resurrect'

Αφού κλείσετε και αποθηκεύσετε, πατήστε C-b + I για λήψη και ενεργοποίηση του plugin. Τώρα θα πρέπει να μπορείτε να χρησιμοποιήσετε την προσθήκη.

Αφού διαμορφώσετε όπως θέλετε το Tmux σας, πατήστε:

  • C-b + Ctrl-s : Για αποθήκευση
  • C-b + Ctrl-r – Για επαναφορά

Για αυτόματη και συνεχόμενη αποθήκευση των συνεδριών και διαρρυθμίσεων σας δείτε το plugin tmux-continuum

Ασφαλής από διακοπές σύνδεσης εργασία… χωρίς ποντίκι

Καλύψαμε αρκετά πράγματα για την χρήση του tmux αλλά σίγουρα δεν τα είπαμε όλα. Μπορείτε να ρίξετε μια ματιά στις παραπομπές για περαιτέρω μελέτη.

Φυσικά πριν κλείσω, όποιος ενδιαφέρεται να έχει το Tmux με την κάτω μπάρα, όπως την είδε στην εικόνα πιο πάνω, μπορεί να δοκιμάσει το κορυφαίο oh-my-tmux και να το διαμορφώσει όπως θέλει, ή να χρησιμοποιήσει το έτοιμα διαμορφωμένο που είδαμε στον οδηγό Dotfiles σε Git Bare για εύκολη μεταφορά ρυθμίσεων.

Παραπομπές: