lilalo

view 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
line source
3 l3text (или l3) это программа, которая предоставляет интерфейс
4 к информации, записанной LiLaLo, прямо в командной строке.
6 Результаты распознавания записываются с помощью l3-agent
7 в базу данных SQLite, и они становятся сразу же доступными для
8 использования с помощью l3text.
10 l3text — это набор инструментов, для работы с транскриптами сеансов,
11 сгруппированные под одной крышей.
13 Некоторые примеры использования.
15 Показать весь журнал команд в текущем контексте
16 (начиная с текущего положения).
17 $ l3text cat
19 Показать только командные строки или только вывод:
20 $ l3text cat -c
21 $ l3text cat -o
23 Показать последние 10 команд:
24 $ l3text tail
26 Показать последние 20 команд:
27 $ l3text tail -20
29 Следить за текущим сеансом, то есть показывать все команды,
30 выполняющиеся в текущем контексте:
31 $ l3text tail -f
33 По умолчанию показываются только команды и результаты их выполнения.
34 Вывод можно настроить:
35 $ l3 cat -o time,cline,output
37 == Контекст ==
39 Все команды, которые вы набираете, и результаты их выполнения
40 не повисают в воздухе, а дописываются в конец листов,
41 находящихся в определённых местах.
43 Лист, на который попадают команды называется ''контекстом записи''.
45 Вы можете набирать команды в разных окнах,
46 но если они находятся в одном контексте, то они запишутся
47 на один лист, одна под другой.
49 С другой стороны, в одном окне вы можете поменять контекст несколько раз,
50 и команды, набиравшиеся в этих контекстах, попадут на разные листы.
52 По умолчанию контекст равен /default ,
53 но для удобства дальнейшей работы с записями рекомендуется
54 задавать нужный контекст, которому соответствуют выполняемые действия.
56 Сменить текущий контекст записи можно так:
57 l3 context /path/to/new/context
59 Просмотреть контекст записи можно так:
60 l3 context
62 Итак, контекст записи (контекст агента) определяет,
63 куда попадают команды при записи.
65 Мы записывали команды не просто так.
66 Мы хотим поработать с тем, что мы записали.
67 Лист, на котором записаны команды, с которыми мы хотим
68 поработать, определяется ''контекстом чтения''.
70 То есть он определяет, какие именно команды
71 из записанных ранее мы имеем в виду.
73 По умолчанию текущий контекст чтения становится равным
74 текущему контексту записи.
76 Смена текущего контекста чтения:
77 $ l3 cd /path/to/new/context
78 или
79 $ l3 go /path/to/new/context
81 Просмотр доступных контекстов:
82 $ l3 ls
84 Просмотреть имя текущего контекста чтения:
85 $ l3 pwd
87 Символы : и / являются в имени контекста специальными.
89 Символ / формирует иерархию контекстов,
90 а символ : указывает координаты строки в контексте.
92 Перейти на 3 команды назад:
93 $ l3 go :-3
95 Перейти в контекст /adm/lab1, в его самый конец (и находиться
96 всё время в конце, если он растёт, то есть делаются новые записи):
97 $ l3 go /adm/lab1
99 Перейти в контекст /adm/lab1, на первую команду grep:
100 $ l3 go /adm/lab1:/grep/
102 О том, как указывать координаты интересующих нас строк,
103 написано ниже, в разделе «Интервалы».
106 == Команда ==
108 l3 [ОПЦИИ1] [ИНТЕРВАЛ] [filter ВЫРАЖЕНИЕ] [grep РЕГВЫР] [КОМАНДА] [ОПЦИИ2]
110 == Интервалы ==
112 По умолчанию операция выполняется над всеми командами,
113 находящимися в текущем контексте, начиная с текущей точки и до его конца.
115 Можно ограничить команды с помощью интервала:
117 выражение
118 выражение,выражение
120 Примеры:
122 -10,. последние 10 команд
123 .,+3 от текущей команды три вниз
124 /grep/ последняя команда grep
125 o/grep/ последняя команда, содержащая grep в выводе (output)
126 . текущая строка
127 @12:23 команда, выполненная в 12:23 (12:23 текущего часа)
128 @08:12:00 команда, выполненная в 8:12:00 (или ближайшая после этого времени)
129 1 первая команда в контексте
130 $ последняя команда в контексте
131 % весь контекст
134 Интервал указывается перед командой, работу которой он ограничивает:
136 l3 -10,. cat
137 напечатать последние 10 команд
139 равносильно этому:
140 l3 tail -10
142 интервал = строка
143 интервал = строка,строка
144 интервал = %
145 строка = число
146 = -число
147 = +число
148 = @время
149 = /регвыр/
150 = .
151 = $
153 == Фильтрация ==
155 Можно указать дополнительный фильтр,
156 который оставляет команды, которые нас интересуют.
158 Есть два вида фильтров:
159 * по регулярным выражениям
160 * по вычисляемому выражению (синтаксис perl с некоторыми отличиями)
162 grep -v regexp инверсия
163 grep regexp прямой поиск
165 -f полный
166 -o только в выводе
167 -c только в команде (по умолчанию)
169 filter выражение
171 == Команды ==
173 cat
174 tail
175 head
176 history
178 Все эти команды являются сокращением для одной команды.
180 == Зачем всё это нужно ==
182 * использование данных вывода команд при автоматическом продолжении команд
183 * быстрое выделение и копирование команд
184 * поиск команд
185 * привязка ко времени
186 * подключение к журналу
188 === Tab-completion: Данные вывода команд при наборе других команд ===
190 Вы выполнили одну команду,
191 и хотите использовать результаты её исполнения
192 в качестве аргумента другой.
194 Например, вы просканировали wifi-сети:
195 # iwlist scanning
196 В выводе команды присутствовали названия SSID, один из которых мы будем использовать дальше.
197 Было бы классно, если бы дальше, когда мы вводим команду
198 # iwconfig wlan0 essid ____
199 мы могли использовать табуляцию при наборе essid.
201 В качестве списка возможных продолжений
202 должны использоваться сети, которые выдала предыдущая команда.
204 Это становится возможным с использованием l3text
205 (при написании соответствующих расширения для bash_completion).
207 === Быстрое выделение и копирование команд ===
209 Ваш друг помогает вам настроить систему по джабберу.
210 Он присылает вам команды, которые вы творчески перерабатываете
211 и вводите в консоль.
213 Потом, для того чтобы он видел, что получается, вы копируете результаты
214 исполнения ему в джаббер.
216 Например, вы хотите показать результат пяти последних команд:
218 В самом простейшем случае (если вы используете графический-джаббер клиент)
219 l3 tail -5 | xsel
221 Потом идёте в джаббер-клиент и делаете:
222 shift-insert
224 Можно отправить ему код прямо из консоли:
225 l3 tail -5 | sendxmpp igor@chub.in
227 Или даже ещё проще, всё, что вы делаете будет копироваться ему:
228 l3 tail -f | sendxmpp igor@chub.in
230 Или, если вы не хотите, чтобы копировались команды, набранные неверно:
231 l3 filter err!=128 tail -f | sendxmpp igor@chub.in
234 Команды l3 не обязательно вызывать в той сессии, где идёт настройка.
235 Вы можете их вызывать в соседнем терминале, где вообще не идёт запись.
236 Конечно, вы должны будете указать соответствующий контекст.
238 l3 cd /adm/lab1
240 (предполагается, что настройка идёт в /adm/lab1 )
242 === Поиск команд ===
244 Вы выполняете настройку сервера,
245 в ходе которой сделали много инсталляций пакетов.
247 Вы делали их в разных окнах, уже сами не помните в каких,
248 но запись всё время шла.
250 Вы хотите увидеть имена пакетов, которые были установлены.
252 Простейший вариант:
254 l3 grep apt-get
256 Если вы помните, что начали работу по инсталляции после обеда,
257 а всё, что было до этого, к делу не относится:
258 l3 @14:00:00,$ grep apt-get
260 Если вы помните, что было много инсталляций, но в некоторых из них
261 вы неправильно указывали имена пакетов, и вы хотели бы оставить
262 только те из них, которые выполнились успешно:
263 l3 grep err=0 grep apt-get
264 или
265 l3 filter err=0&&/apt-get/
266 или
267 l3 filter err=0 grep apt-get
269 === Привязка ко времени ===
271 Вы рассказываете, как настроить какую-то вещь.
272 Вы хотели бы, чтобы всё, что вы рассказываете,
273 можно было использовать как основу для составления
274 более подробного документа.
276 Вы используете доску (или графический планшет),
277 некоторые вещи делаются не в командной строке,
278 а на экране с графическим интерфейсом,
279 кроме того ваш голос записывается.
281 Вы не можете тратить время на то, чтобы положить скриншоты
282 в нужное место, но вы можете их сделать.
283 Аналогично и со скринкастами. Вы можете записывать то,
284 что вы делаете при подключении к какой-то системе,
285 но вы не можете выполнять никаких других операций
286 по обработке записи. Потому что на это просто нет времени.
288 Ход вашей работы фиксируется, операции запоминаются,
289 скриншоты помечаются временными метками.
290 Аналогично происходит со схемами на доске,
291 которые фотографируются и представляются в виде помеченных
292 временными метками файлов.
294 После того, как сеанс окончен,
295 вы получаете его транскрипт, который можно дальше редактировать.
296 Команды в этом транскрипте сопровождаются специальными якорями,
297 с помощью которых они привязываются к записанному ранее сеансу.
299 В транскрипте вы удаляете лишние команды,
300 добавляете текст и получаете документ,
301 который подробно описывает происходившее,
302 причём при желании вы можете получить недостающую информацию
303 из архива сделанных ранее операций.
305 Туда же, в нужные (соответствующие времени) места,
306 автоматически попадают сделанные скриншоты,
307 скринкасты, фотографии, запись звука.
310 === Подключение к журналу ===
312 Продолжим предыдущий пример.
314 Вы прочитали документацию, составленную по описанной выше методике,
315 и теперь хотите выполнить такую же настройку.
317 В обычном случае вы просто копируете команды в свою командную строку
318 или набираете их заново, с учётом ваших собственных условий.
320 Можно значительно ускорить и упростить этот процесс,
321 а так же уменьшить вероятность ошибки возможной в ходе его выполнения.
323 Вы подключаетесь к сделанной записи:
324 l3 go http://xgu.ru/l3/option-82
326 Все рассмотренные ранее команды становятся доступным.
328 Становится доступным продолжение команд (tab completion)
329 на основе информации, набранной в той работе
330 и даже больше: вы можете добавить команды
331 из контекста в историю текущего командного интерпретатора,
332 как будто вы их сами уже выполняли.
334 Автоматически они не добавляются, чтобы не создавать путаницы.
335 Но вы можете их загрузить:
336 l3 % | l3hist
337 или, если вас интересуют только определённые команды, то с использование интервала,
338 например:
339 l3 @14:00,$ | l3hist
341 Вам тогда не нужно будет их заново набирать.
342 Достаточно прокрутить историю вверх, а потом просто выполнять
343 по одной, нажимая ctrl-o, при этом адаптируя к своим условиям.
345 Чтобы ещё сильнее сократить себе объём работы,
346 можно применить процедуру адаптации, которая позволяет
347 автоматически заменять специфические для процедуры параметры.
349 Для этого вы вызываете:
350 l3 parameterize
351 l3 param (сокращённо)
352 которая открывает текстовый редактор, где указывается два столбика параметров:
353 что заменить и на что заменить.
355 Например, пусть в описанном документе используются адреса:
356 192.168.15.1
357 192.168.15.254
358 example.com
360 Причём составитель этого документа мог указать, что эти параметры являются специфичными,
361 а мог не указывать. Если он указал, то совсем хорошо — тогда вам нужно просто пройтись
362 и добавить справа, на что они должны заменяться в вашем случае.
363 Если же он не указал, то вам нужно придумать список замен по своему вкусу.
365 Вы вводите локализованную версию:
366 192.168.15.1 10.0.35.1
367 192.168.15.254 10.0.35.254
368 example.com xgu.ru
370 Теперь, во всех выводах команды l3 будут исправленные команды
371 и исправленные результаты их выполнения.
372 Автопродолжение (tab completion) в шелле уже будет показывать исправленные аргументы.
373 Историю командного интерпретатора вы тоже можете обновить,
374 и в ней тогда будут изменённые команды.
376 Использовать параметризацию с загрузкой удалённого контекста
377 настолько логично, что вы можете это сделать одной командой:
378 l3 go -p http://xgu.ru/l3/option-82