Freebsd (и не только). Screen.

Есть такая утилита - screen.

Полноэкранный и достаточно мощный консольный оконный менеджер. Поддерживает скроллинг, поиск в окне, обладает функцией копирования/вставки между окнами.
Позволяет в одном терминале запускать несколько интерактивных шелл-процессов и переключаться между ними.
Запустив screen, можно покинуть активную ssh сессию. Как для меня, так это очень удобно. На работе запустил, дома посмотрел (хотя дома отдыхать нужно) или наооборот. Кроме того при пропадании питания на рабочей станции не прерывается screen сессия.

Устанавливаем?

# cd /usr/ports/sysutils/screen
# less pkg-descr

Screen is a full-screen window manager that multiplexes a physical terminal
between several processes (typically interactive shells).
Each virtual terminal provides the functions of a DEC VT100 terminal and, in
addition, several control functions from the ANSI X3.64 (ISO 6429) and ISO
2022 standards (e.g. insert/delete line and support for multiple character
sets). There is a scrollback history buffer for each virtual terminal and a
copy-and-paste mechanism that allows moving text regions between windows.

WWW: http://www.gnu.org/software/screen/

#make
#make install
#make clean
#rehash

Приведу hot-key, на мой взгляд, который могут понадобиться чаще всего. В отличие, от мана - клавишу буду называть своим именем, возможно где-нибудь далее и проскочит сочетание клавиши из man'а - не обессудьте.

Ctrl-a c
Ctrl-a Сtrl-c	Создаем новое окно screen'а.
Ctrl-a [0..9,-]	Переключаемся между окнами, или получим пустое окно.
Ctrl-a "		Список окон.
Ctrl-a Ctrl-a	Переключение между двумя окнами - туда-сюда (между активным и предыдущим).
Ctrl-a n|p		next|prev.
Ctrl-a C		Clear screen.
Ctrl-a A		Позволяет ввести title окна.
Ctrl-a d		Отключиться от сеанса screen. (Присоединиться можно командой screen -r).
Ctrl-a k		Кильнуть текущее окно  с подтверждением.
Ctrl-a ?		Задаем вопросы (очень полезно), если не знал, а еще и забыл.
Ctrl-a [		Начать выделение региона для копирования в буфер, появляется курсор, устанавливаем в нужное положение,
			Enter, перемещаем в курсор в конец региона, Enter. 
Ctrl-a ]		Вставить из буфера.

Очень интересны ключи запуска.
Приведу список ключей, которые могут понадобиться, на мой взгляд, чаще всего.

-ls
-list		не запуская screen выдает список отсоединенных screen'ов.
-r [pid.tty.host] подключиться к screen или же к определенной сессии.
-x		присоединиться к неотсоединенному screen - позволяет одновременно работать с разных мест разным людям. 
		Удобно для удаленного обучения (хотя в freeBSD есть watch). 
-R		пытается присоединиться к первому найденному отсоединенному screen. Если не находит - создает новый screen.

screenrc

При запуске screen выполняет команды из "/usr/local/etc/screenrc" и "~/.screenrc". Все это можно переопределить системными переменными, но, лично я, не вижу особого смысла, тем более что у меня только сервер и пользователей раз-два обсчелся.
При запуске с ключом , можно указать другой файл screenrc.

Команды указываются по одной в строке, пустые строки игнорируются.
Разделители между аргументами и ключами - табы или пробелы
'#' - следующий за ним текст - комментарии. (Исключение - помещение его в кавычки.)

Команды могут содержать ссылки на переменные окружения. Синтаксис подобен шеллу - "$VAR" или "${VAR}".

Пример файла конфигурации находится в /usr/local/share/examples/screen/screenrc. (вот тут какая-то ошибка в man'е, насчет файлов примеров, такую мелочь можно простить).

Команды можно ввести в процессе работы программы,путем нажатия 'Ctrl-a :'.

В файле screenrc и в "командном" режиме доступны следующие команды:
acl-команды, определяющие доступ к сессии, привилегии как для пользователей так и для групп;
bind-команды - привязка клавиш;
команды оформления;
команды управления;
...
другие команды.

Читаем man, команд много, все таки первоисточник.

Привожу мой screenrc
###
# Screenrc configuration file
###

# Приветственное сообщение off|on
startup_message off
# визуальный биппер. off|onn
vbell on
# то, что он бипер пишет в строке статуса
vbell_msg "Uh! - Uh! - bzzz "
# Количество строк истории хранить в буфере
defscrollback 2000
# Строка состояния в screen (hardstatus)
hardstatus alwayslastline "%{=b}%{g}Window: %{b}%w %=%{kG}%с %D %Y-%m-%d"
# Расшифровка:
# здесь (я беру параметры в одинарные кавычки):
# '%{=b}' - черный цвет фона строки. 
# '%{g} Window: ' - слово 'Window: ' зеленоe
# '%{b}%w' - список запущенных окон (звездочкой будет указан активное окно)
# '%=' - все, что идет после этого выравнивается по правому краю
# '%{kG}%с' - показывает время, я люблю формат 24-часа, без pm|am (%C%A - 12часовой с PM|AM)
# '%D, %Y-%m-%d' - показывает дату

# --- Привязки специальных клавиш ---
# detach сессию  от текущего терминала F7
bindkey -k k7 detach

# уничтожить текущую сессию F8
bindkey -k k8 kill

# создать новое окно F9
bindkey -k k9 screen

# вернуться к предыдущему окну F11
bindkey -k F1 prev

# перейти к следущему окну F12
bindkey -k F2 next

# Удаляем некоторые ненужные или небезопасные комбинации
bind .
bind ^\
bind \
bind ^h
bind h
на этом - все.

Что почитать?
1. http://nexus.org.ua/weblog/message/351/ 2. http://live.daemony.org/freebsd/screen.html
3. http://www.debian-administration.org/articles/560
4. http://www.opennet.ru/base/sys/screen2.txt.html