Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Автоматическое логирование терминала Ubuntu 14  (Прочитано 2910 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн knigolaz

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Здравствуйте!

Возникла такая необходимость: все действия в терминале автоматически записывать в отдельный файл и хранить как лог. Чтобы было понятнее, такая функция есть, например, в Putty. Очень нужно, чтобы при открытии терминала создавался и писался файл текущей сессии с датой и временем в заранее подготовленную папку. Подскажите, кто знает возможно ли такое.

Оффлайн it0r

  • Забанен
  • Старожил
  • *
  • Сообщений: 2264
    • Просмотр профиля
...все действия в терминале автоматически записывать в отдельный файл и хранить как лог...с датой и временем в заранее подготовленную папку...
и так все пишется... чего еще надо то? http://www.shellhacks.com/ru/7-Sovetov-Nastroyka-Istorii-Komand-v-Bash
там и время, там и история... history в терминале...
ТУТ - это дерево. А ЗДЕСЬ - это МЕСТО.... Так что ТУТ - это не ЗДЕСЬ.

Оффлайн knigolaz

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
там и время, там и история... history в терминале...

Про данную опцию я уже читал и её упоминали много раз в других ветках. Она совершенно не подходит: там только список вводимых команд, а необходим лог, это разные вещи. Лог содержит кроме самих команд результаты их выводов, именно эта информация самая главная.

Оффлайн knigolaz

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Итак, как я понял, спасение утопающих — дело рук самих утопающих. Поэтому нашел решение удовлетворяющее моим потребностям. Думаю, что, может быть, мое решение покажется кому-нибудь интересным, поэтому выложу его тут.

Как показала практика, «history» не подходит для ведения логов, так как отображает информацию только о самих выполненных командах, но не показывает результаты их выполнения, а именно они (результаты) бывают очень нужны.

На одном из форумов для записи скриптов была предложена команда «script». Данная программа ведет логи с результатом выполнения команд и может сохранять их в указанное место. В общем, это и есть готовое решение, минусом является отсутствие автоматизации, так как при каждом обращении к терминалу приходится сначала вводить команду «script» и указывать имя выходного файла, чтобы не затереть предыдущий лог.

Для автоматизации процесса я предлагаю следующее решение.

1. Установить программу xbindkeys.

 sudo apt-get install xbindkeys

2. В папке /home/ «ваша_учетка»/  создать файл .xbindkeysrc

3. Открыть файл .xbindkeysrc и внести в него следующие сроки:

# Запуск терминала с логированием
"gnome-terminal -e 'script -f / «ваш_путь_сохранения» /log_'$(date +'%F_%T')'.txt'"
  control+alt+t

где,

gnome-terminal — эмулятор терминала

-e — ключ на выполнения комнды

script — программа ведения логов с терминала

-f — ключ для ведения записи непосредственно после выполнения команды. Если его не ввести, то, по-умолчанию, лог будет записываться только после завершения сеанса терминал.

log_'$(date +'%F_%T')'.txt — имя файла

$( ) —  механизм подстановки выходных данных одной команды при вызове другой. Именно такой способ указан в книге Скотта Граннемана «Linux. Карманный справлочник»

date +'%F_%T — получение данных о текущей дате и времени

control+alt+t — комбинация клавиш для вызова терминала с заданными параметрами, можно    указать любую другую комбинацию клавиш, просто я привык к этой. Если комбинация будет другая, то пункт №4 выполнять не нужно.

4. После сохранения файла с вышеуказанными строками. Нужно зайти в «Параметры системы», там выбрать «Клавиатура» Зайти во вкладку «Комбинации клавиш», найти пункт «Ярлыки» и выбрать параметр «Открыть терминал» и сбросить значение данного параметра клавишей «Backspace».

5. Перезагрузиться, чтобы начали работать настройки xbindkeys (возможно есть другой способ, но я не нашел ничего кроме перезагрузки, хотя это как-то по «Оконному»)
 
После выполнения данных действий, при вызове терминала комбинацией Control+Alt+T, в указанной папке будет создаваться лог-файл вида: log_2015-07-04_11:06:30.txt.

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

Оффлайн DuhLesa

  • Любитель
  • *
  • Сообщений: 79
  • Созданный быть полезным другим.
    • Просмотр профиля
    • Северная чернь
Уважаемый knigolaz, спасибо за то что делитесь опытом!

    Только у меня вопрос… :idiot2: Зачем ставить xbindkeys???

    Почему просто не повесить вашу замечательную команду: "gnome-terminal -e 'script -f / «ваш_путь_сохранения» /log_'$(date +'%F_%T')'.txt'" на "горячие клавиши" штатными средствами? Не могу уверенно сказать как это сделать в Ubuntu(но похоже Вы "что-то такое" описываете в пункте 4? :coolsmiley:), но в xUbuntu это легко сделать через Настройки->Клавиатура->Комбинации клавиш. Просто добавить Новую комбинацию клавиш!

    Если Вам действительно нужно записывать все-все-все-и-всегда мне кажется стоит внести Вашу строку в ~/.bashrc? Тогда все сеансы bash должны логироваться… наверно. :) Только вот при открытии паралельно 2-5 терминальных сеансов что будет происходить - я даже не знаю… :) Проверите - расскажете(интеесно же! ;)).

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Я вот тоже не совсем понял зачем xbindkeys...  :idiot2: Привязка к горячим клавишам, есть в любом приличном ДЕ из коробки.
Кроме того есть alias-ы, а также строку запуска можно указать в .desktop файле (который вызывается в меню).

По решению я бы предложил два импрувмента:
1. Логи не в текущем каталоге создавать, а в отдельном (где собираются все логи) - так проще их отслеживать (те же старые вычищать). Однако тут стоит предпринять дополнительные мероприятия для того что бы сохранить текущий путь  в первой строке лога (в терминале первой нужно автоматически выполнить cwd).
2. В имя файла стоит добавить логин пользователя и номер процесса (номер не обязательно, но в купе с датой и временем это даст абсолютно уникальное имя, а просто дата и время - не уникально).
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн knigolaz

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Вот тут https://forum.ubuntu.ru/index.php?topic=31329.0 ответ на вопрос почему именно xbindkeys. У меня Ubuntu 14.04 с Unity. Долго искал штатные возможности по настройки горячих клавиш, но не нашел. На форуме именно такое решение.

Пользователь решил продолжить мысль [time]05 Июль 2015, 17:24:46[/time]:
Логи не в текущем каталоге создавать, а в отдельном

Их можно создавать где угодно. Я их создаю в отдельном каталоге. Под понятием "ваш_каталог" я имел ввиду именно любой выбранный вами.

Пользователь решил продолжить мысль 05 Июля 2015, 16:30:04:
В имя файла стоит добавить логин пользователя и номер процесса (номер не обязательно, но в купе с датой и временем это даст абсолютно уникальное имя, а просто дата и время - не уникально).

Дата и время выводятся до секунд. Не могу представить ситуацию, чтобы попасть с вызовом терминала в туже секнду, что и предыдущего. Конечно же, можно зажать клавиши и тогда терминалы будут появлятся практически мгновенно, но это если специально делать, а в реальной работе это крайне сомнительно. Хотя если узнаю как добавить в имя лога номер процесса, то сделаю, чтобы исключить даже такую верятность неуникальности имени.
 
« Последнее редактирование: 05 Июля 2015, 16:30:04 от knigolaz »

 

Страница сгенерирована за 0.08 секунд. Запросов: 25.