lilalo

annotate README.l3text @ 155:8ee5e59f1bd3

Локальное хранение и анализ данных с помощью SQlite

Очень много изменений, касающихся работы с sqlite
и локального использования результатов записи.
Подробнее:
README.l3text
author Igor Chubin <igor@chub.in>
date Tue Mar 16 20:05:30 2010 +0200 (2010-03-16)
parents
children
rev   line source
igor@155 1
igor@155 2
igor@155 3 l3text (или l3) это программа, которая предоставляет интерфейс
igor@155 4 к информации, записанной LiLaLo, прямо в командной строке.
igor@155 5
igor@155 6 Результаты распознавания записываются с помощью l3-agent
igor@155 7 в базу данных SQLite, и они становятся сразу же доступными для
igor@155 8 использования с помощью l3text.
igor@155 9
igor@155 10 l3text — это набор инструментов, для работы с транскриптами сеансов,
igor@155 11 сгруппированные под одной крышей.
igor@155 12
igor@155 13 Некоторые примеры использования.
igor@155 14
igor@155 15 Показать весь журнал команд в текущем контексте
igor@155 16 (начиная с текущего положения).
igor@155 17 $ l3text cat
igor@155 18
igor@155 19 Показать только командные строки или только вывод:
igor@155 20 $ l3text cat -c
igor@155 21 $ l3text cat -o
igor@155 22
igor@155 23 Показать последние 10 команд:
igor@155 24 $ l3text tail
igor@155 25
igor@155 26 Показать последние 20 команд:
igor@155 27 $ l3text tail -20
igor@155 28
igor@155 29 Следить за текущим сеансом, то есть показывать все команды,
igor@155 30 выполняющиеся в текущем контексте:
igor@155 31 $ l3text tail -f
igor@155 32
igor@155 33 По умолчанию показываются только команды и результаты их выполнения.
igor@155 34 Вывод можно настроить:
igor@155 35 $ l3 cat -o time,cline,output
igor@155 36
igor@155 37 == Контекст ==
igor@155 38
igor@155 39 Все команды, которые вы набираете, и результаты их выполнения
igor@155 40 не повисают в воздухе, а дописываются в конец листов,
igor@155 41 находящихся в определённых местах.
igor@155 42
igor@155 43 Лист, на который попадают команды называется ''контекстом записи''.
igor@155 44
igor@155 45 Вы можете набирать команды в разных окнах,
igor@155 46 но если они находятся в одном контексте, то они запишутся
igor@155 47 на один лист, одна под другой.
igor@155 48
igor@155 49 С другой стороны, в одном окне вы можете поменять контекст несколько раз,
igor@155 50 и команды, набиравшиеся в этих контекстах, попадут на разные листы.
igor@155 51
igor@155 52 По умолчанию контекст равен /default ,
igor@155 53 но для удобства дальнейшей работы с записями рекомендуется
igor@155 54 задавать нужный контекст, которому соответствуют выполняемые действия.
igor@155 55
igor@155 56 Сменить текущий контекст записи можно так:
igor@155 57 l3 context /path/to/new/context
igor@155 58
igor@155 59 Просмотреть контекст записи можно так:
igor@155 60 l3 context
igor@155 61
igor@155 62 Итак, контекст записи (контекст агента) определяет,
igor@155 63 куда попадают команды при записи.
igor@155 64
igor@155 65 Мы записывали команды не просто так.
igor@155 66 Мы хотим поработать с тем, что мы записали.
igor@155 67 Лист, на котором записаны команды, с которыми мы хотим
igor@155 68 поработать, определяется ''контекстом чтения''.
igor@155 69
igor@155 70 То есть он определяет, какие именно команды
igor@155 71 из записанных ранее мы имеем в виду.
igor@155 72
igor@155 73 По умолчанию текущий контекст чтения становится равным
igor@155 74 текущему контексту записи.
igor@155 75
igor@155 76 Смена текущего контекста чтения:
igor@155 77 $ l3 cd /path/to/new/context
igor@155 78 или
igor@155 79 $ l3 go /path/to/new/context
igor@155 80
igor@155 81 Просмотр доступных контекстов:
igor@155 82 $ l3 ls
igor@155 83
igor@155 84 Просмотреть имя текущего контекста чтения:
igor@155 85 $ l3 pwd
igor@155 86
igor@155 87 Символы : и / являются в имени контекста специальными.
igor@155 88
igor@155 89 Символ / формирует иерархию контекстов,
igor@155 90 а символ : указывает координаты строки в контексте.
igor@155 91
igor@155 92 Перейти на 3 команды назад:
igor@155 93 $ l3 go :-3
igor@155 94
igor@155 95 Перейти в контекст /adm/lab1, в его самый конец (и находиться
igor@155 96 всё время в конце, если он растёт, то есть делаются новые записи):
igor@155 97 $ l3 go /adm/lab1
igor@155 98
igor@155 99 Перейти в контекст /adm/lab1, на первую команду grep:
igor@155 100 $ l3 go /adm/lab1:/grep/
igor@155 101
igor@155 102 О том, как указывать координаты интересующих нас строк,
igor@155 103 написано ниже, в разделе «Интервалы».
igor@155 104
igor@155 105
igor@155 106 == Команда ==
igor@155 107
igor@155 108 l3 [ОПЦИИ1] [ИНТЕРВАЛ] [filter ВЫРАЖЕНИЕ] [grep РЕГВЫР] [КОМАНДА] [ОПЦИИ2]
igor@155 109
igor@155 110 == Интервалы ==
igor@155 111
igor@155 112 По умолчанию операция выполняется над всеми командами,
igor@155 113 находящимися в текущем контексте, начиная с текущей точки и до его конца.
igor@155 114
igor@155 115 Можно ограничить команды с помощью интервала:
igor@155 116
igor@155 117 выражение
igor@155 118 выражение,выражение
igor@155 119
igor@155 120 Примеры:
igor@155 121
igor@155 122 -10,. последние 10 команд
igor@155 123 .,+3 от текущей команды три вниз
igor@155 124 /grep/ последняя команда grep
igor@155 125 o/grep/ последняя команда, содержащая grep в выводе (output)
igor@155 126 . текущая строка
igor@155 127 @12:23 команда, выполненная в 12:23 (12:23 текущего часа)
igor@155 128 @08:12:00 команда, выполненная в 8:12:00 (или ближайшая после этого времени)
igor@155 129 1 первая команда в контексте
igor@155 130 $ последняя команда в контексте
igor@155 131 % весь контекст
igor@155 132
igor@155 133
igor@155 134 Интервал указывается перед командой, работу которой он ограничивает:
igor@155 135
igor@155 136 l3 -10,. cat
igor@155 137 напечатать последние 10 команд
igor@155 138
igor@155 139 равносильно этому:
igor@155 140 l3 tail -10
igor@155 141
igor@155 142 интервал = строка
igor@155 143 интервал = строка,строка
igor@155 144 интервал = %
igor@155 145 строка = число
igor@155 146 = -число
igor@155 147 = +число
igor@155 148 = @время
igor@155 149 = /регвыр/
igor@155 150 = .
igor@155 151 = $
igor@155 152
igor@155 153 == Фильтрация ==
igor@155 154
igor@155 155 Можно указать дополнительный фильтр,
igor@155 156 который оставляет команды, которые нас интересуют.
igor@155 157
igor@155 158 Есть два вида фильтров:
igor@155 159 * по регулярным выражениям
igor@155 160 * по вычисляемому выражению (синтаксис perl с некоторыми отличиями)
igor@155 161
igor@155 162 grep -v regexp инверсия
igor@155 163 grep regexp прямой поиск
igor@155 164
igor@155 165 -f полный
igor@155 166 -o только в выводе
igor@155 167 -c только в команде (по умолчанию)
igor@155 168
igor@155 169 filter выражение
igor@155 170
igor@155 171 == Команды ==
igor@155 172
igor@155 173 cat
igor@155 174 tail
igor@155 175 head
igor@155 176 history
igor@155 177
igor@155 178 Все эти команды являются сокращением для одной команды.
igor@155 179
igor@155 180 == Зачем всё это нужно ==
igor@155 181
igor@155 182 * использование данных вывода команд при автоматическом продолжении команд
igor@155 183 * быстрое выделение и копирование команд
igor@155 184 * поиск команд
igor@155 185 * привязка ко времени
igor@155 186 * подключение к журналу
igor@155 187
igor@155 188 === Tab-completion: Данные вывода команд при наборе других команд ===
igor@155 189
igor@155 190 Вы выполнили одну команду,
igor@155 191 и хотите использовать результаты её исполнения
igor@155 192 в качестве аргумента другой.
igor@155 193
igor@155 194 Например, вы просканировали wifi-сети:
igor@155 195 # iwlist scanning
igor@155 196 В выводе команды присутствовали названия SSID, один из которых мы будем использовать дальше.
igor@155 197 Было бы классно, если бы дальше, когда мы вводим команду
igor@155 198 # iwconfig wlan0 essid ____
igor@155 199 мы могли использовать табуляцию при наборе essid.
igor@155 200
igor@155 201 В качестве списка возможных продолжений
igor@155 202 должны использоваться сети, которые выдала предыдущая команда.
igor@155 203
igor@155 204 Это становится возможным с использованием l3text
igor@155 205 (при написании соответствующих расширения для bash_completion).
igor@155 206
igor@155 207 === Быстрое выделение и копирование команд ===
igor@155 208
igor@155 209 Ваш друг помогает вам настроить систему по джабберу.
igor@155 210 Он присылает вам команды, которые вы творчески перерабатываете
igor@155 211 и вводите в консоль.
igor@155 212
igor@155 213 Потом, для того чтобы он видел, что получается, вы копируете результаты
igor@155 214 исполнения ему в джаббер.
igor@155 215
igor@155 216 Например, вы хотите показать результат пяти последних команд:
igor@155 217
igor@155 218 В самом простейшем случае (если вы используете графический-джаббер клиент)
igor@155 219 l3 tail -5 | xsel
igor@155 220
igor@155 221 Потом идёте в джаббер-клиент и делаете:
igor@155 222 shift-insert
igor@155 223
igor@155 224 Можно отправить ему код прямо из консоли:
igor@155 225 l3 tail -5 | sendxmpp igor@chub.in
igor@155 226
igor@155 227 Или даже ещё проще, всё, что вы делаете будет копироваться ему:
igor@155 228 l3 tail -f | sendxmpp igor@chub.in
igor@155 229
igor@155 230 Или, если вы не хотите, чтобы копировались команды, набранные неверно:
igor@155 231 l3 filter err!=128 tail -f | sendxmpp igor@chub.in
igor@155 232
igor@155 233
igor@155 234 Команды l3 не обязательно вызывать в той сессии, где идёт настройка.
igor@155 235 Вы можете их вызывать в соседнем терминале, где вообще не идёт запись.
igor@155 236 Конечно, вы должны будете указать соответствующий контекст.
igor@155 237
igor@155 238 l3 cd /adm/lab1
igor@155 239
igor@155 240 (предполагается, что настройка идёт в /adm/lab1 )
igor@155 241
igor@155 242 === Поиск команд ===
igor@155 243
igor@155 244 Вы выполняете настройку сервера,
igor@155 245 в ходе которой сделали много инсталляций пакетов.
igor@155 246
igor@155 247 Вы делали их в разных окнах, уже сами не помните в каких,
igor@155 248 но запись всё время шла.
igor@155 249
igor@155 250 Вы хотите увидеть имена пакетов, которые были установлены.
igor@155 251
igor@155 252 Простейший вариант:
igor@155 253
igor@155 254 l3 grep apt-get
igor@155 255
igor@155 256 Если вы помните, что начали работу по инсталляции после обеда,
igor@155 257 а всё, что было до этого, к делу не относится:
igor@155 258 l3 @14:00:00,$ grep apt-get
igor@155 259
igor@155 260 Если вы помните, что было много инсталляций, но в некоторых из них
igor@155 261 вы неправильно указывали имена пакетов, и вы хотели бы оставить
igor@155 262 только те из них, которые выполнились успешно:
igor@155 263 l3 grep err=0 grep apt-get
igor@155 264 или
igor@155 265 l3 filter err=0&&/apt-get/
igor@155 266 или
igor@155 267 l3 filter err=0 grep apt-get
igor@155 268
igor@155 269 === Привязка ко времени ===
igor@155 270
igor@155 271 Вы рассказываете, как настроить какую-то вещь.
igor@155 272 Вы хотели бы, чтобы всё, что вы рассказываете,
igor@155 273 можно было использовать как основу для составления
igor@155 274 более подробного документа.
igor@155 275
igor@155 276 Вы используете доску (или графический планшет),
igor@155 277 некоторые вещи делаются не в командной строке,
igor@155 278 а на экране с графическим интерфейсом,
igor@155 279 кроме того ваш голос записывается.
igor@155 280
igor@155 281 Вы не можете тратить время на то, чтобы положить скриншоты
igor@155 282 в нужное место, но вы можете их сделать.
igor@155 283 Аналогично и со скринкастами. Вы можете записывать то,
igor@155 284 что вы делаете при подключении к какой-то системе,
igor@155 285 но вы не можете выполнять никаких других операций
igor@155 286 по обработке записи. Потому что на это просто нет времени.
igor@155 287
igor@155 288 Ход вашей работы фиксируется, операции запоминаются,
igor@155 289 скриншоты помечаются временными метками.
igor@155 290 Аналогично происходит со схемами на доске,
igor@155 291 которые фотографируются и представляются в виде помеченных
igor@155 292 временными метками файлов.
igor@155 293
igor@155 294 После того, как сеанс окончен,
igor@155 295 вы получаете его транскрипт, который можно дальше редактировать.
igor@155 296 Команды в этом транскрипте сопровождаются специальными якорями,
igor@155 297 с помощью которых они привязываются к записанному ранее сеансу.
igor@155 298
igor@155 299 В транскрипте вы удаляете лишние команды,
igor@155 300 добавляете текст и получаете документ,
igor@155 301 который подробно описывает происходившее,
igor@155 302 причём при желании вы можете получить недостающую информацию
igor@155 303 из архива сделанных ранее операций.
igor@155 304
igor@155 305 Туда же, в нужные (соответствующие времени) места,
igor@155 306 автоматически попадают сделанные скриншоты,
igor@155 307 скринкасты, фотографии, запись звука.
igor@155 308
igor@155 309
igor@155 310 === Подключение к журналу ===
igor@155 311
igor@155 312 Продолжим предыдущий пример.
igor@155 313
igor@155 314 Вы прочитали документацию, составленную по описанной выше методике,
igor@155 315 и теперь хотите выполнить такую же настройку.
igor@155 316
igor@155 317 В обычном случае вы просто копируете команды в свою командную строку
igor@155 318 или набираете их заново, с учётом ваших собственных условий.
igor@155 319
igor@155 320 Можно значительно ускорить и упростить этот процесс,
igor@155 321 а так же уменьшить вероятность ошибки возможной в ходе его выполнения.
igor@155 322
igor@155 323 Вы подключаетесь к сделанной записи:
igor@155 324 l3 go http://xgu.ru/l3/option-82
igor@155 325
igor@155 326 Все рассмотренные ранее команды становятся доступным.
igor@155 327
igor@155 328 Становится доступным продолжение команд (tab completion)
igor@155 329 на основе информации, набранной в той работе
igor@155 330 и даже больше: вы можете добавить команды
igor@155 331 из контекста в историю текущего командного интерпретатора,
igor@155 332 как будто вы их сами уже выполняли.
igor@155 333
igor@155 334 Автоматически они не добавляются, чтобы не создавать путаницы.
igor@155 335 Но вы можете их загрузить:
igor@155 336 l3 % | l3hist
igor@155 337 или, если вас интересуют только определённые команды, то с использование интервала,
igor@155 338 например:
igor@155 339 l3 @14:00,$ | l3hist
igor@155 340
igor@155 341 Вам тогда не нужно будет их заново набирать.
igor@155 342 Достаточно прокрутить историю вверх, а потом просто выполнять
igor@155 343 по одной, нажимая ctrl-o, при этом адаптируя к своим условиям.
igor@155 344
igor@155 345 Чтобы ещё сильнее сократить себе объём работы,
igor@155 346 можно применить процедуру адаптации, которая позволяет
igor@155 347 автоматически заменять специфические для процедуры параметры.
igor@155 348
igor@155 349 Для этого вы вызываете:
igor@155 350 l3 parameterize
igor@155 351 l3 param (сокращённо)
igor@155 352 которая открывает текстовый редактор, где указывается два столбика параметров:
igor@155 353 что заменить и на что заменить.
igor@155 354
igor@155 355 Например, пусть в описанном документе используются адреса:
igor@155 356 192.168.15.1
igor@155 357 192.168.15.254
igor@155 358 example.com
igor@155 359
igor@155 360 Причём составитель этого документа мог указать, что эти параметры являются специфичными,
igor@155 361 а мог не указывать. Если он указал, то совсем хорошо — тогда вам нужно просто пройтись
igor@155 362 и добавить справа, на что они должны заменяться в вашем случае.
igor@155 363 Если же он не указал, то вам нужно придумать список замен по своему вкусу.
igor@155 364
igor@155 365 Вы вводите локализованную версию:
igor@155 366 192.168.15.1 10.0.35.1
igor@155 367 192.168.15.254 10.0.35.254
igor@155 368 example.com xgu.ru
igor@155 369
igor@155 370 Теперь, во всех выводах команды l3 будут исправленные команды
igor@155 371 и исправленные результаты их выполнения.
igor@155 372 Автопродолжение (tab completion) в шелле уже будет показывать исправленные аргументы.
igor@155 373 Историю командного интерпретатора вы тоже можете обновить,
igor@155 374 и в ней тогда будут изменённые команды.
igor@155 375
igor@155 376 Использовать параметризацию с загрузкой удалённого контекста
igor@155 377 настолько логично, что вы можете это сделать одной командой:
igor@155 378 l3 go -p http://xgu.ru/l3/option-82
igor@155 379
igor@155 380