Сохранить все вывод терминала в файл

Поскольку данные экспорта шифруются, Вы не должны шифровать трафик. Вам, вероятно, не нужен к authentify он ни один (если будет человек в середине, то Ваш пароль будет заботиться об аутентификации, как будто Вы не представлены с устройство, где ключ может быть дешифрован с Вашим паролем, это просто перестанет работать).

Простое решение и это работают по Интернету для экспорта блочного устройства, использует nbd (сетевое блочное устройство). Выполните nbd-сервер на экспортируемом и nbd-клиенте, где Вы хотите использовать его. устройства nbd могут также быть разделены (modprobe nbd max_part=16).

nbd по одному соединению TCP, таким образом, можно также инкапсулировать его в ssh или openssl (использующий socat), или SOCKS или Прокси HTTP...

64
05.05.2015, 21:51
4 ответа

Вы можете использовать скрипт . Он в основном сохраняет все напечатанные на терминале в том, что Script сеанс .

Из Человеческого скрипта :

script makes a typescript of everything printed on your terminal. 
It is useful for students who need a hardcopy record of an 
interactive session as proof of an assignment, as the typescript file 
can be printed out later with lpr(1).

Вы можете запустить сеанс Script , просто набрав скрипта в терминале, все последующие команды и их выходы будут Все будет сохранено в файле с именем Teamscript в текущем каталоге. Вы также можете сохранить результат к другому файлу, просто запустив скрипт , как:

script output.txt

к выходу из системы экрана (прекратить сохранение содержимого), просто введите Выход .

Вот пример:

$ script output.txt
Script started, file is output.txt

$ ls
output.txt  testfile.txt  foo.txt

$ exit
exit
Script done, file is output.txt

Теперь, если я прочитал файл:

$ cat output.txt

Script started on Mon 20 Apr 2015 08:00:14 AM BDT
$ ls
output.txt  testfile.txt  foo.txt
$ exit
exit

Script done on Mon 20 Apr 2015 08:00:21 AM BDT

Script также имеет много вариантов E.g. Бег тихо -q ( - тишина ) без отображения / сохранения сообщений программы, он также может запускать определенную команду -C ( - команда ), а не сеанс, у него также есть много других вариантов. Проверьте Человек-скрипт , чтобы получить больше идей.

77
27.01.2020, 19:32

Я тоже столкнулся с этой проблемой и после некоторых поисков пришел к такому решению:

Добавьте в .bash_aliases следующее:

# Execute "script" command just once
smart_script(){
    # if there's no SCRIPT_LOG_FILE exported yet
    if [ -z "$SCRIPT_LOG_FILE" ]; then
        # make folder paths
        logdirparent=~/Terminal_typescripts
        logdirraw=raw/$(date +%F)
        logdir=$logdirparent/$logdirraw
        logfile=$logdir/$(date +%F_%T).$$.rawlog

        # if no folder exist - make one
        if [ ! -d $logdir ]; then
            mkdir -p $logdir
        fi

        export SCRIPT_LOG_FILE=$logfile
        export SCRIPT_LOG_PARENT_FOLDER=$logdirparent

        # quiet output if no args are passed
        if [ ! -z "$1" ]; then
            script -f $logfile
        else
            script -f -q $logfile
        fi

        exit
    fi
}

# Start logging into new file
alias startnewlog='unset SCRIPT_LOG_FILE && smart_script -v'

# Manually saves current log file: $ savelog logname
savelog(){
    # make folder path
    manualdir=$SCRIPT_LOG_PARENT_FOLDER/manual
    # if no folder exists - make one
    if [ ! -d $manualdir ]; then
        mkdir -p $manualdir
    fi
    # make log name
    logname=${SCRIPT_LOG_FILE##*/}
    logname=${logname%.*}
    # add user logname if passed as argument
    if [ ! -z $1 ]; then
        logname=$logname'_'$1
    fi
    # make filepaths
    txtfile=$manualdir/$logname'.txt'
    rawfile=$manualdir/$logname'.rawlog'
    # make .rawlog readable and save it to .txt file
    cat $SCRIPT_LOG_FILE | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > $txtfile
    # copy corresponding .rawfile
    cp $SCRIPT_LOG_FILE $rawfile
    printf 'Saved logs:\n    '$txtfile'\n    '$rawfile'\n'
}

И в конец вашего .bashrc файла добавьте следующее:

smart_script

После того, как вы это сделаете, команда "script" будет выполняться один раз в каждом сеансе терминала, записывая все в '~/Terminal_typescripts/raw'. Если вы хотите, вы можете сохранить журнал текущей сессии постфактум (в конце сессии), набрав 'savelog' или 'savelog logname' - это скопирует текущий необработанный журнал в '~/Terminal_typescripts/manual', а также создаст читаемый .txt журнал в этой папке. (Если вы забудете это сделать, необработанные файлы журнала все равно будут находиться в своей папке, вам просто придется их найти). Также вы можете начать запись в новый лог-файл, набрав 'startnewlog'.

Будет много ненужных лог-файлов, но вы можете время от времени очищать старые, так что это не большая проблема.

(Based on https://answers.launchpad.net/ubuntu/+source/gnome-terminal/+question/7131 , https://askubuntu.com/a/493326/473790 )

13
27.01.2020, 19:32

В следующих шагах запустите xrdb ~/.Xressourcesпосле изменения файла ресурсов X -, затем откройте новый терминал, чтобы проверить изменения.

XTerm

Мышь:Удерживать CtrlЛевая -мышь -щелчок . «Основные параметры» появляется меню. Выберите «Печатать -Все немедленно» и отпустите. Файл XTerm[date]с содержимое терминала было создано в вашем домашнем каталоге.

Сочетание клавиш:Чтобы привязать действие к CtrlShifty , добавить в свой ~/.Xresourcesфайл:

XTerm*vt100.Translations: #override\
    Ctrl Shift <Key> y: print-immediate()

Установка пути:printFileImmediateустанавливает префикс файла дампа. Полезно указать путь к файлу дампа. Например, сбросить /home/user/dumps/xt[date]файлы,

XTerm*printFileImmediate: /home/user/dumps/xt

Урксвт

Сочетание клавиш:Включить в~/.Xresources:

URxvt.print-pipe: cat > $HOME/scrollback

Привязывается к Ctrl+Печать или Shift+Печать .

Прочие клеммы

Не все из них могут это сделать; проверьте их справочную страницу или параметры меню.

Помимо script, не зависящим от терминала -решением является использование мультиплексора.

В Tmux,это вопрос запуска его внутренней команды

capture-pane -S - ; save-buffer scrollback-file

Это в .tmux.confпривязывает его к Ctrl+bCtrl+s:

bind C-s capture-pane -S - \; save-buffer $HOME/scrollback
0
05.08.2020, 10:54

nhi отлично решит вашу проблему. Этот инструмент автоматически собирает всю потенциально полезную информацию о каждой выполненной команде (, а также о ее выводе ).

С помощью nhiвы можете легко получить любой сеанс оболочки (или выходные данные терминала )полностью или только часть сеанса оболочки, используя расширенный механизм запросов, предоставляемый nhi.

Вы можете думать о nhiкак о значительно улучшенном history.

Примечание:

Я создатель этого инструмента. Если у вас есть вопросы, пожалуйста, не стесняйтесь спрашивать.

-1
20.11.2021, 14:55

Теги

Похожие вопросы