Как убрать завершение команд из логов PuTTY

Если вы активно используете PuTTY для подключения к Linux-серверам, то наверняка сталкивались с тем, что логи сессии превращаются в кашу из символов табуляции. Особенно раздражает, когда автоматическое завершение команд (то самое нажатие Tab) добавляет в файл кучу непонятных escape-последовательностей. Хочется открыть журнал и быстро найти нужную команду, а вместо этого – сплошные ^[[ и лишние пробелы.

Проблема в том, что PuTTY воспринимает весь вывод с сервера как единый поток текста – будь то результат команды, подсказка bash или те самые символы табуляции. Он не умеет разделять «важные» и «вспомогательные» данные (это, кстати, особенность работы SSH-клиента, а не сервера). Но есть пара обходных путей, которые сделают логи чище.

Настраиваем командную строку

Самый действенный способ – изменить приглашение командной строки (переменная PS1 в bash). Если между выполнением команд в логе будут чёткие разделители, вы сможете быстро ориентироваться даже при наличии лишних символов.

Допустим, ваш текущий PS1 выглядит так:

[u@h W]$

Превратите его в многострочный формат с пустыми строками-разделителями:

PS1='n────────────────────n[u@h W]$ '

Как это сделать постоянно:

1. Откройте файл ~/.bashrc через nano или vim.

2. Добавьте строку:

export PS1='n────────────────────n[u@h W]$ '

3. Выполните source ~/.bashrc, чтобы применить изменения.

Теперь в логах между командами будут горизонтальные линии (или пустые строки, если использовать nn). Да, символы табуляции никуда не денутся, но вы хотя бы увидите, где заканчивается одна команда и начинается другая.

Кстати, вместо линий можно использовать временные метки – например, добавить D{%H:%M:%S} в PS1. Это особенно полезно для аудита.

Фильтрация логов

Если менять PS1 не хочется, попробуйте постобработку логов. Например, удаляйте все escape-последовательности с помощью sed или ansifilter.

Пример команды для очистки файла session.log:

cat session.log | sed -r 's/x1B[[0-9;]*[a-zA-Z]//g' > cleaned.log

Или установите утилиту ansifilter (есть в репозиториях большинства дистрибутивов):

sudo apt install ansifilter && ansifilter -H session.log > cleaned.html

Ещё один вариант – перенаправлять логи через script, сохраняя только ввод пользователя:

script -f logfile.txt

…но тут есть нюанс: script записывает всё, включая управляющие символы, так что придётся комбинировать методы.

Важно: не надейтесь на встроенные опции PuTTY вроде «Exclude terminal/prompt» – они не влияют на обработку Tab. Как показала практика, даже в версии 0.83 ничего не поменялось.

К сожалению, универсального решения нет. Если очень хочется автоматизировать фильтрацию, напишите простой скрипт на Python или Perl, который будет удалять строки с определёнными ANSI-кодами. Например, табуляция в bash часто сопровождается последовательностью x1b[?2004h – её можно вырезать регулярным выражением.

Если увидите советы про «настройте завершение команд без вывода в терминал» – не верьте. Такие опции есть в zsh или fish, но не в классическом bash. Остаётся либо мириться с лишними символами, либо активно использовать историю команд через history вместо анализа логов.

Добавить комментарий

Все поля обязательны к заполнению. Ваш адрес email не будет виден никому.

Новое
Интересное