Во-первых, я предполагаю, что под «действиями, которые пользователь выполняет с терминалом», вы подразумеваете ввод с клавиатуры. Затем это соответствует выводу, который вы также хотите захватить. Это не включает, например, удаление файла, когда пользователь запускает rm
!
. Теперь в вашем вопросе отображается неправильное представление. Терминал обеспечивает только ввод (с клавиатуры) и вывод (на дисплей). Ввод (кроме вещей, которые он сам интерпретирует) затем направляется в программу, часто оболочку, например, zsh
или fish
, в то время как вывод из этой программы направляется на дисплей. Это происходит через три стандартных потока stdin
, stdout
и stderr
. В основном вам нужна программа, которая находится между терминалом и оболочкой. Эта программа собирает данные между терминалом и оболочкой и одновременно записывает эти данные (или, по крайней мере, вывод) в файл. Это, например, то, что делает script
.
Обратите внимание, что ваше требование о записи сеансов SSH также выполнено. В обычном сеансе SSH вышеуказанная цепочка с двумя элементами (терминал, оболочка) расширяется с помощью клиента SSH и удаленно с соответствующим процессом сервера SSH и другой программой (обычно другой оболочкой). Когда вы выполняете echo foo
на удаленном компьютере, оболочка выводит его в процесс сервера SSH, который затем передает его клиенту SSH, локальной оболочке и, наконец, терминалу для отображения. Вход в терминал идет по противоположному пути.