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
|