lilalo
annotate README.l3text @ 155:8ee5e59f1bd3
Локальное хранение и анализ данных с помощью SQlite
Очень много изменений, касающихся работы с sqlite
и локального использования результатов записи.
Подробнее:
README.l3text
Очень много изменений, касающихся работы с 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 |