Μια εισαγωγή στο tmux

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

Αν το κάνεις αυτό θα έχεις ανοικτά πολλά τερματικά να κάνεις την δουλεία σου. Ένα για να γράφεις κείμενα, ένα για να αλληλεπιδράς με αρχεία, ένα να βλέπεις τις καταγραφές του συστήματος κλπ…

Και επιστέφεις στα ίδια. Θα αφήνεις το χέρι σου απο το πληκτρολόγιο, θα ψάχνεις στην οθόνη μα βρεις το παράθυρο του τερματικού και θα κάνεις ααααργκ :dizzy_face: :dizzy_face: :dizzy_face: κλικ :rmouse: :rmouse:.

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

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

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

Εγκατάσταση

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

 tmux -V

Βασική χρήση

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

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

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

  exit

Κάθε εντολή του tmux ξεκινάει με ένα συνδυασμό πλήκτρων που τον λέμε prefix εξ ορισμού είναι ο συνδυασμός CtrlB. Ας δούμε την ώρα CtrlBt. Υπάρχουν πολλές εντολές. Ας τις δούμε όλες CtrlB?. Απο τώρα και στο εξής ανί για το prefix θα γραφω :tmux:, έτσι τον προηγούμενο συνδυασμός θα τον γράφω σαν :tmux: ?.

Αν κάτι δεν δουλεύει τότε βεβαιωθείτε πως δεν έχεις πατημένο το Caps και το πληκτρολόγιο είναι στα αγγλικά. Για να δεις την ώρα είναι :tmux: t και όχι :tmux: Τ :exclamation:

Βασική ρύθμιση

Το πρώτο πράγμα που αλλάζω είναι το πλήκτρο που θα λειτουργεί σαν 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

μιας και μέχρι να το φέρω στα μέτρα μου θα κάνω αρκετές αλλαγές πρόσθεσα τον συνδυασμό :tmux:r που θα φορτώνει το αρχείο ρυθμίσεων από την αρχή.

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

Συνεδρίες

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

  tmux list-sessions
  tmux ls

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

 tmux new -s work -d

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

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

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

  tmux attach -t talos

και η συνεδρία θα επανέλθει. Ώρα για λίγα μαγικά.

Ανοίγουμε ένα δεύτερο τερματικό και δίνουμε την ίδια εντολή. Μαγεία :unicorn: :rainbow:. Δοκιμάστε να αλλάξετε μέγεθος στα τερματικά και δείτε τι θα συμβεί.

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

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

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

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

   tmux kill-server 

Παράθυρα

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

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

Περιοχές

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

# 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

Αποθηκεύστε τις αλλαγές, φορτώστε τις :tmux: r, και είμαστε έτοιμοι. Ας χωρίσουμε την οθόνη στα 2 οριζόντια και κάθετα :tmux: - και :tmux: \. Τώρα δοκιμάστε να αλλάξετε περιοχή. Έβαλα δυο συνδυασμούς είτε με τα πλήκτρα του vi είτε λιγότερο βολικό με τα βελάκια. Επίσης έβαλα δυο τρόπος να αλλάζεις μέγεθος στις περιοχές. Δοκιμάστε τις. Για παράδειγμα :tmux: < ή :tmux: Left θα μεγαλώσει την περιοχή προς τα αριστερά.

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

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

  tmux select-layout even-vertical

που μπορείτε να δώσετε σε οποιοδήποτε τερματικό :stuck_out_tongue:

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

Για μια εργασία χωρίς ποντίκι

Καλύψαμε αρκετά πράγματα για την χρήση του tmux :tmux: αλλά σίγουρα δεν τα είπαμε όλα. Παρακολουθείστε το σχετικό tag, γιατί έχουμε πολλά ακόμα να πούμε. Μέχρι τότε πείτε μου τις εντυπώσεις σας και πόσο εύκολα παρακολουθήσατε αυτό το πραγματικά μεγάλο άρθρο.

Χρήσιμοι σύνδεσμοι

9 Likes

Βοήθησέ με λίγο γιατί τώρα είμαι στο macbook air και κάτι δεν βλέπω καλά με τα emoji…

βατ ιζ ντις?

Αυτό σημαίνει ότι θα πρέπει να πατήσεις τα πλήκτρα Ctrlb,?. Αλλά επειδή μπορείς να αλλάξεις το prefix και για να μην βαρύνει οπτικά έκανα αυτή την σύμβαση.

Tο Ctrlb έχει κληρονομηθεί απο το screen, αλλά δεν βολεύει και όλοι σχεδόν το αλλάζουν σε κάποιο άλλο συνδυασμό και παρακάτω δείχνω πως. Αν το έχεις αλλάξει σε `, τότε θα γίνει `,?.