Статья Не хватает возможностей консоли Linux? Используйте tmux!

Друзья, уверен, что каждый из вас, работая в разных консолях в Linux, хотел бы увеличить производительность и скорость этой самой работы. В своё время я тоже не мог обойтись без кучи запущены окон с терминалами, пробовал разные их виды и варианты. Но в какой-то момент открыл для себя такую прекрасную вещь, как мультиплексор. Несмотря на столь длинное название, суть у программы более чем простая - возможность использования одного окна для работы с несколькими приложениями. И самое главное: можно забыть про мышь, используя только клавиатуру!

Я считаю, что одной из самых популярных программ в этом сегменте является tmux.
Доверившись народной мудрости "лучше один раз увидеть, чем тысячу раз услышать", представляю его вам во всей красе:


Скриншот 2019-05-28 14.10.50.png Скриншот 2019-05-28 14.11.38.png Скриншот 2019-05-28 15.39.54.png Szo7s[1].png Tmux5[1].png tmux-tips[1].png tmux[1].png Скриншот 2019-05-28 15.19.22.png


Вот что нам говорит великая википедия об этой утилите
tmux — свободная консольная утилита-мультиплексор, предоставляющая пользователю доступ к нескольким терминалам в рамках одного экрана. tmux может быть отключен от экрана: в этом случае он продолжит исполняться в фоновом режиме; имеется возможность вновь подключиться к tmux, находящемуся в фоне.
И ведь в самом деле всё так и есть.

Установка
Так как же начать пользоваться этим чудом? Всё просто:
tmux присутствует во всех стандартных репозиториях, поэтому с установкой проблем возникнуть не должно:
Debian/Ubuntu
apt-get install tmux

Centos
yum install tmux

Если уж совсем экзотичная система, добро пожаловать за архивом с исходниками

Настройка
После установки рекомендую всем зайти в настройки и немного их изменить под себя.

Первое, оно же главное: дабы не мешать другим программам, tmux использует сочетание клавиш Ctrl+b для входа в "режим ожидания команды". На мой взгляд, расположение этих двух клавиш на стандартной клавиатуре не очень удобное, поэтому предлагаю изменить его на Ctrl+a в настройках

nano ~/.tmux.conf
#Делаем загрузку своих настроек:
bind r source-file ~/.tmux.conf \; display-message "Config loaded"

#Меняем управляющие клавиши:
set -g prefix C-a
unbind C-b
bind C-a last-window

#Включаем подписи окон
set-option -g set-titles on

#Добавляем принципы редактора vi
setw -g mode-keys vi
unbind p
bind p paste-buffer

#Задаём стандартную цветовую схему
set -g default-terminal 'xterm-256color'

#Изменяем подсветку названия окна
set-option -g set-titles on
set -g status-fg blue

#Увеличиваем историю введённых команд
set -g history-limit 10000

#Включаем опцию подсветки активности окна
setw -g monitor-activity on
#Включаем оповещение активного приложения
set -g visual-activity on

#Выбираем формат и цвет
set-window-option -gg clock-mode-colour cyan
set-window-option -g clock-mode-style 24

#Настраиваем прокрутку
set -g terminal-overrides 'xterm*:smcup@:rmcup@'

#И, наконец, меняем номер первого окна с 0 на 1
set -g base-index 1
setw -g pane-base-index 1

Основные команды
Теперь можно полноценно пользоваться tmux.

Для начала самое простое:
1. Любое окно можно разделить на несколько горизонтальных или вертикальных фреймов, которые так же делятся по вашему усмотрению. (Далее все действия выполняются в АНГЛИЙСКОЙ раскладке) А делается это просто:

Нажимаете управляющую последовательность Ctrl+a и тут же символ двойных кавычек (Э в русской раскладке). Между вводом управляющей последовательности и командой может пройти несколько секунд, не спешите и делайте всё аккуратно.
И вот у нас уже экран поделён на два горизонтальных фрейма.
Скриншот 2019-05-28 14.35.09.png
2. Для вертикального деления активного фрейма мы так же используем комбинацию Ctrl+a % (клавиша 5 с Shift)
Скриншот 2019-05-28 15.00.55.png

3. Чтобы закрыть активный фрейм (он выделен зелёным цветом), снова вводим управляющую последовательность Ctrl+a и нажимаем x в английской раскладке
Так как мы установили запрос на закрытие окон, то в нижнем поле у нас появляется подтверждающий вопрос. Жмём Y
Скриншот 2019-05-28 14.37.04.png

4. Для перехода по фреймам используем комбинацию Ctrl+а стрелка

5. Чтобы полностью закрыть всё окно со всеми фреймами, есть комбинация Ctrl+a &
Снова появляется запрос на закрытие окна, с которым мы или соглашаемся, или отклоняем.
Скриншот 2019-05-28 15.03.25.png
6. Создание нового окна Ctrl+a с
Новое окно автоматически получает последний номер (или первый пропущенный, если было закрыто какое-то окно в середине списка), по которому к нему можно обратиться. tmux старается сохранять последовательную нумерацию окон.

7. Выбор нужного окна Ctrl+a (номер нужного окна)

8. Для того, чтобы найти нужное окно, можно использовать комбинацию Ctrl+a w
В верхнем окне появляется список с открытыми окнами.
Навигация осуществляется стрелочками.
Чтобы увидеть, какие программы запущенны в окнах? где есть +, жмём стрелку вправо
Чтобы переключиться в нужное окно, выбираем его стрелками и нажимаем Enter
Чтобы выйти из этого режима, нажимаем q

Скриншот 2019-05-28 15.07.45.png

9. Комбинация Сtrl+a z раскроет активный фрейм во весь экран. Это удобно при работе с текстом, например, когда нужно одновременно писать код и видеть его выполнение. Для возвращения в "общее окно" снова нажимаем Сtrl+a z
Скриншот 2019-05-28 17.30.48.png
Скриншот 2019-05-28 17.30.54.png

10. Мало используемая команда Ctrl+a Space перевернёт горизонтальные фреймы в вертикальные, а вертикальные в горизонтальные
Скриншот 2019-05-28 15.21.05.png
11. В tmux не реализована работа с мышкой, поэтому, если нужно прокрутить экран выше, используем комбинацию Ctrl+a PgUp Мы попадаем в режим "перемотки", в правом углу появляется жёлтое окошко с количеством строк в этом фрейме. Навигация осуществляется стрелками вверх и вниз, переход по словам кнопкой w, переход в конец G, в начало g.
Скриншот 2019-05-28 15.29.47.png

Находясь в этом режиме, можно нажать на пробел и начать выделение нужного объёма текста (стрелки и w). После того, как нужный фрагмент текста выбран, нажатием Enter переносим его в буфер обмена. Открываем любой текстовый редактор и вставляем текст комбинацией Ctrl+a p
Скриншот 2019-05-28 15.33.33.png
Скриншот 2019-05-28 15.35.00.png

12. Для того, чтобы изменить размер фрейма по горизонтали или вертикали, нужно нажать Ctrl+A Alt+стрелка Например, для увеличения верхнего блока (за счёт уменьшения нижних), мы тянем его вниз комбинацией Ctrl+A Alt+стрелка вниз (не отпуская Alt, можно несколько раз нажать на стрелку). Потом можем переключиться в средний фрейм комбинацией Ctrl+A стрелка вниз и так же расширить его вниз Ctrl+A Alt+стрелка вниз
Аналогичным способом, используя стрелки вправо и влево, можно менять ширину вертикальных фреймов.
Скриншот 2019-05-28 15.37.23.png
13. Запускаем часы в активном фрейме Ctrl+A t
Скриншот 2019-05-28 15.39.54.png
14. Переименовать окно Ctrl+A , (запятая) И дальше вводим имя.

15. Выйти из текущей сессии tmux Ctrl+A d

16. Присоединиться к текущей последней сессии tmux attach или tmux attach-session
Запустить новую сессию tmux или tmux new или tmux new-session
Показать список запущенных сессий tmux ls или tmux list-sessions

Подключиться к нужной сессии /usr/bin/tmux new-session attach <имя сессии>

Так как я обычно подключаюсь к машинам по ssh, то для автоматического запуска tmux сразу после соединения, я добавил в файл ~/.bashrc строки
if [[ -z $TMUX && -n $SSH_TTY ]]; then
me=$(whoami)
real_tmux=$(command -v tmux)

if [ -z $real_tmux ]; then
echo "No tmux installed."
fi

export TERM="xterm-256color"

if $real_tmux has-session -t $me 2>/dev/null; then
$real_tmux attach-session -t $me
else
if [[ -n $SSH_TTY ]]; then
(tmux new-session -d -s $me && tmux attach-session -t $me)
fi
fi
fi

tmux_run() {
me=$(whoami)
real_tmux=$(which tmux)
args_num="$#"

export TERM="xterm-256color"

if [ "$#" -gt 0 ]; then
$real_tmux "$*"
else
if [[ ! -z $TMUX ]]; then
$real_tmux
else
if $real_tmux has-session -t $me 2>/dev/null; then
$real_tmux attach-session -t $me
else
$real_tmux new -s $USER
$real_tmux attach-session -t $me
fi
fi
fi
}
alias tmux="tmux_run"

Можно было бы сказать, что на этом всё, но поверьте, что это только лишь начало. Возможностей этого мультиплексора великое множество, в помощь вам

1. man tmux

2. Tmux wiki

3. Отдельная благодарность пользователю Глюк за информацию о классном автоинсталляторе настроек tmux'a tmux-config

30138
4.

5 tmux-themepack by Jim Myhrberg

6.

7. Oh My Tmux! by Gregory Pakosz


Ну и Google, Yandex и YouTube вам в помощь!
Всех благ!
 

Глюк

Red Team
03.01.2018
1 185
1 879
BIT
177
хорошая удобная штукенция.... я тмуксом пользовался когда у меня на буке консольный арч стоял... если ещё фреймбуфер прикрутить, то можно фотки и видео в консоле смотреть... )
консоль рулит... !
 
V

Valkiria

А как tmux в сравнении с tilix ?
У меня tilix установлен ))
Но я по-прежнему пользуюсь эмулятором терминала.
На нетбуке с небольшой диагональю экрана мультиплексор непривычен ))
 

f22

Codeby Academy
Gold Team
05.05.2019
1 931
226
BIT
1 721
А как tmux в сравнении с tilix ?
Думаю, что это очень похожие инструменты,
но главное отличие tmux - возможность работать без визуальной рабочей среды.
Я подключаюсь ко всем устройствам по SSH, где очевидно её нет, так что tmux выручает.
 
  • Нравится
Реакции: Valkiria

Глюк

Red Team
03.01.2018
1 185
1 879
BIT
177
кому трудновато настраивать тмукс, есть хорошее решение. Tmux Configuration. практически готовое WM для консольного линукса... )
 
  • Нравится
Реакции: ghost и f22

f22

Codeby Academy
Gold Team
05.05.2019
1 931
226
BIT
1 721
  • Нравится
Реакции: Глюк

Глюк

Red Team
03.01.2018
1 185
1 879
BIT
177
На нетбуке с небольшой диагональю экрана мультиплексор непривычен ))
согласен, для нетбука разделение консоли даже на две части уже слишком. но есть одно но... в консоле выделять текст для копирования и других действий клавишами, возможно только в мультиплексоре. есть конечно вариант с gpm. но в консольной системе, без иксов, как то не очень вписывается мышка. да и намучился я с gpm в консольном арче. поэтому в нетбуке с консольной системой мультиплексор идеальный вариант.... а скорость слабенького нетбука поднимается в консоле до космических скоростей... )))
 
  • Нравится
Реакции: Valkiria
V

Valkiria

Каким образом должны выглядеть настройки iptables , чтобы завернуть весь интернет трафик консольного kali linux через tor ?
 

f22

Codeby Academy
Gold Team
05.05.2019
1 931
226
BIT
1 721
Каким образом должны выглядеть настройки iptables , чтобы завернуть весь интернет трафик консольного kali linux через tor ?
Попробуй так
Код:
sudo iptables -A INPUT -i eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -j ACCEPT
sudo iptables -t nat -A PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 5353
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040
sudo iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -j MASQUE RADE
 
  • Нравится
Реакции: Литиум

Demi

Mod. Ethical Hacking
16.02.2017
124
131
BIT
0
Надо будет попробовать, но я по старинке использую screen, особенно если есть промежуточный сервер для соединения с другими, то все сессии остаются активными даже после обрыва связи с основным сервером
 

f22

Codeby Academy
Gold Team
05.05.2019
1 931
226
BIT
1 721
Надо будет попробовать, но я по старинке использую screen, особенно если есть промежуточный сервер для соединения с другими, то все сессии остаются активными даже после обрыва связи с основным сервером
Обязательно попробуй! Я тоже начинал со screen'a, но вот уже лет 7, как пользуюсь толькоtmux'ом
 

Iskus

Green Team
13.11.2017
287
468
BIT
0
А вот Ctrl+A не стоит трогать, лучше по умолчанию использовать горячие клавиши, вообще Ctrl+A это выделить всё, и думаю многие этим сочетанием пользуется, кто вообще пользуется горячими клавишами, у 99% забери мышь... И все, на этом их общение с их любимым другом закончилось, они даже не догадаются клавишу Tab понажимать, ну пара продвинутых может Ctrl+Alt+Delete знает, но меня убило 2 Senior PHP Developers(по их мнению), такие матёрые убунтоводы, что не знают о существовании рабочих столов в большинстве оболочек linux, и очень долго они не могли понять, как это у меня все приложения так открыты, да ещё и кубиком разворачиваются)))) я за 10 лет в it уже перестал удивляться, но чем дальше... Глобальное потепление... Тотальное отупение...
P. S. Что-то меня не туда понесло, а вообще можете попробовать еще Byobu, есть встроенная команда screen (она тоже Ctrl+A использует), xpra, neercs, mtm, abduco+dvtm, но tmux безусловно самый популярный из мультиков.
 
Последнее редактирование:
  • Нравится
Реакции: Глюк

f22

Codeby Academy
Gold Team
05.05.2019
1 931
226
BIT
1 721
Ctrl+A это выделить всё, и думаю многие этим сочетанием пользуется
Конечно пользуются, но только когда речь идёт о текстовых данных ))
В некоторых консолях это сочетание применимо для перемещения курсора в начало строки,
но есть альтернатива HOME на клавиатуре, так что можно переходить безболезненно.

А вообще такие сочетания клавиш в Linux - великая вещь, очень жаль, что подавляющее большинство даже не догадывается об их возможностях.
 
V

Valkiria

А вообще такие сочетания клавиш в Linux - великая вещь, очень жаль, что подавляющее большинство даже не догадывается об их возможностях.
Ну почему "не догадывается" ? :)
Консольный линукс - это конечно заслуживает смых положительных эмоций и в кино круто смотрится ))
Но это так не практично.
Это абсолютно не практично.
Во первых, заняты обе руки.
Во-вторых, нужно постоянно что-то помнить. А напрягать мозг только ради посторонних положительных эмоций вовсе не хочется ))
В третьих, консоль очень неуютна, как бы не старались сделать её уютнее линуксоиды.
Консоль пригодна только для решения узкого круга задач.

То ли дело в Windows. На крайний случай, XwindowSystem.
Берёшь мышку в одну руку, вторая при этом свободна ))
Тыркай себе на кнопки - результат тот-же, что в консоли. Порою даже лучше.
 

Глюк

Red Team
03.01.2018
1 185
1 879
BIT
177
результат тот-же, что в консоли.
позволю себе не согласиться с вашим утверждением. во первых скорость работы на несколько порядков выше. во вторых не нужно ничего запоминать и мозг напрягать что бы вспомнить... пару вечеров работы и руки сами нажимают нужные сочетания... я вообще не мог понять как vim работает. однажды сел, на одном мониторе открыл вим а на другом инструкцию. через пару часов всё встало на свои места и теперь удобнее комбайна и не нужно... )
что касается
Консольный линукс - это конечно заслуживает смых положительных эмоций и в кино круто смотрится ))
Но это так не практично.
не практично для чего? для фоточки посмотреть и фильму любимую, то да. хотя и тут есть варианты... консоль, как вы заметили, для решения определённого круга задач. но универсальное враг лучшего. если для программирования консоль идеальна, до гуи для программирования полное, извините, го...но.... )) поэтому для программинга, хакинга, и т.д и т.п., консоль наиболее практична... )
 
  • Нравится
Реакции: f22

f22

Codeby Academy
Gold Team
05.05.2019
1 931
226
BIT
1 721
Берёшь мышку в одну руку, вторая при этом свободна ))
Тыркай себе на кнопки - результат тот-же, что в консоли. Порою даже лучше.
так в том и вопрос: какой результат нужен?
Программирование и пентест в большинстве своём - это работа с текстовыми данными,
а именно под них консоль *nix систем затачивается уже почти пол века.

И никакого сравнения с Windows(gui) интерфейсом быть попросту не может.
Банальные примеры:
1. Поиск любой информации в текстовом файле
Windows: нужно открыть этот файл какой-то программой, нажать Ctrl+f или найти в меню Поиск, ввести данные и по очереди эти данные получать.
консоль: cat file.txt | grep что-там-нужно-найти И всё... Мало того, что это наглядно, что ввод этих команд занимает куда меньше времени, так ещё ты получаешь все вхождения искомой фразы в нужном файле.

1.1. А если нужно найти какой-то текст в нескольких файлах?
В Windows - это просто ужас начинается. Нужно открыть каждый файл и искать...
В консоли - cat *.txt | grep что-там-нужно-найти

2. Создание файла
Windows - правой кнопкой мыши - создать, ввести имя, нажать Enter
Консоль - touch file.txt Всё!) Если нужно сразу начать в этом файле работать nano file.txt

Я соглашусь, что эти команды нужно знать, запоминать,
что нужно какое-то время практиковаться, тренироваться и
пример Глюка это наглядно показывает,
но результат таких тренировок превосходит все ожидания.

Опять же встроенные средства помощи Linux могут на первых парах дать
минимальные сведения. А уж в интернете найти ответ на любой вопрос вообще не составит труда.
Вопрос, как обычно это бывает, только в желании...

В моём представлении именно обучение работе с ПК имеет
принципиально важное значение: в современном мире никто не идёт учиться на филфак,
не зная правил русского языка, грамматики и пунктуации. Это даже невозможно представить!
А в мире компьютеров, такое сплошь и рядом...
 
Последнее редактирование:
  • Нравится
Реакции: Valkiria и Глюк
В

Варяг

Аналогично все есть в screen, кроме... и я не увидел в статье.

В tmux есть возможность поиска в самом выводе? Консоль не всегда с удобного ПК-терминала запускается, это актуальный вопрос.
 

f22

Codeby Academy
Gold Team
05.05.2019
1 931
226
BIT
1 721
Аналогично все есть в screen, кроме... и я не увидел в статье.
К чему это? Разве статья называется сравнение tmux и screen?
Сравнения мультиплексоров в этой статье не было.


В tmux есть возможность поиска в самом выводе?
Да есть: "Ctrl+a [ /"
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!