Вы когда-нибудь попадали в такую ситуацию? Вы подключились к удаленному серверу по SSH, запустили долгое обновление системы или скачивание огромного файла, и вдруг... мигнул интернет. Соединение разорвалось. Вы подключаетесь снова и видите, что ваш процесс "умер", файл недокачан, а обновление прервалось на середине. Обидно? Очень.
Знакомьтесь, Screen - утилита, которая решает эту проблему навсегда.
Что такое Screen?
Простыми словами, GNU Screen - это "оболочка внутри оболочки". Представьте, что обычное SSH-соединение - это телефонный разговор. Если связь оборвалась - разговор окончен. Screen - это голосовая почта. Вы можете позвонить, начать говорить, повесить трубку, а запись будет идти дальше. Когда вы перезвоните, вы сможете продолжить с того же места.
С технической точки зрения это терминальный мультиплексор. Он позволяет:
Сохранять сессии: Программы продолжают работать на сервере, даже если вы выключили свой компьютер.
Многооконность: В одном окне SSH можно создать 10 виртуальных терминалов.
Установка
В большинстве дистрибутивов (Ubuntu, Debian, CentOS) он уже установлен по умолчанию. Если нет - установка занимает секунду:
Давайте рассмотрим самую частую задачу: нужно запустить долгий процесс и уйти пить кофе, не боясь разрыва связи.
1. Запуск Screen
Просто введите в консоли:
screen
Ваш терминал мигнет, появится приветственное сообщение (нажмите Space/Enter). Внешне ничего не изменится - вы увидите ту же командную строку. Но теперь вы находитесь внутри защищенной капсулы.
2. Запуск задачи
Запустите что угодно. Например, скачивание файла или htop.
htop
3. Магия «Отключения» (Detach)
Теперь самое интересное. Мы хотим отключиться от сервера, но оставить htop работать. Нажмите сочетание клавиш: 👉 Ctrl + A, затем отпустите их и нажмите D.
(D означает Detach — отсоединить).
Экран исчезнет, и вы увидите сообщение [detached from 12345.pts-0.server]. Поздравляю! Ваш htop всё еще работает там, в фоне, хотя вы его не видите. Вы можете смело закрывать SSH-клиент и выключать компьютер.
4. Возвращение (Reattach)
Прошло 2 часа. Вы снова зашли на сервер. Чтобы вернуться в свою капсулу, введите:
screen -r
(r означает Reattach — присоединить).
Бум! Вы снова видите свой htop ровно в том состоянии, в каком оставили.
Продвинутый уровень: Именованные сессии
Если вы запустите команду screen много раз, у вас будет куча безымянных сессий, и вы запутаетесь, где у вас обновление базы, а где логи. Лучше давать им имена.
screen -S update_system
# (S — заглавная, от Session)
screen -S download_logs
Посмотреть список всех сессий:
screen -ls
Вывод будет таким:3450.update_system (Detached)4501.download_logs (Detached) Подключиться к конкретной сессии:
screen -r update_system
Режим "Многорукий Шива": Вкладки
Screen умеет создавать несколько окон внутри одной сессии. Это как вкладки в браузере, только в консоли.
Внутри запущенного screen все команды начинаются с "волшебной комбинации" Ctrl + A. Нажимаете её, а потом нужную букву.
Комбинация
Действие
Ctrl+A, затем c
Create. Создать новое окно (вкладку).
Ctrl+A, затем n
Next. Переключиться на следующее окно.
Ctrl+A, затем p
Previous. Переключиться на предыдущее окно.
Ctrl+A, затем "
Показать список всех окон и выбрать нужное.
Ctrl+A, затем k
Kill. Уничтожить (закрыть) текущее окно.
Шпаргалка (Cheat Sheet)
Сохраните этот список, он покроет 99% ваших задач.
В командной строке:
screen — запустить новую сессию.
screen -S имя — запустить сессию с именем.
screen -ls — список запущенных сессий.
screen -r — вернуться в последнюю сессию.
screen -r имя — вернуться в конкретную сессию.
Внутри Screen (сначала жмем Ctrl+A):
d — свернуться (вытий, оставив работать).
c — новое окно.
0...9 — переключиться на окно по номеру.
Esc — войти в режим прокрутки (Copy mode), чтобы листать историю вверх стрелками.
Как правильно выйти?
Если вы закончили работу и сессия вам больше не нужна:
Напишите команду exit (или нажмите Ctrl+D) внутри окна screen.
Если это было последнее окно, вы увидите надпись [screen is terminating]. Это значит, что капсула уничтожена.
Screen или Tmux?
Вы наверняка слышали про tmux. Это более современный аналог screen.
Tmux красивее, умеет делить экран пополам вертикально и горизонтально, у него понятнее статусная строка.
Screen — это старая гвардия.
Почему стоит знать именно Screen? Потому что screen есть везде. Даже на старом сервере в подвале НИИ или внутри роутера. Tmux нужно устанавливать, а Screen уже ждет вас.
Использование screen — это правило хорошего тона для любого системного администратора. Возьмите за правило: "Запускаешь что-то дольше 5 минут — запускай это в screen". Это спасет ваши нервы при первом же обрыве связи.
Интересный факт: Screen старше Linux
Это взрывает мозг многим новичкам.
GNU Screen появился в 1987 году.
Первая версия ядра Linux появилась в 1991 году.
То есть screen уже существовал и работал на старых Unix-системах еще до того, как Линус Торвальдс написал первую строчку кода Linux.
Саму утилиту screen написали Оливер Лауманн (Oliver Laumann) и Карстен Борманн (Carsten Bormann) в Берлинском техническом университете в 1987 году. Изначально это была независимая программа. Но позже она была передана Фонду свободного программного обеспечения (FSF) и стала официальной частью пакета программ GNU.