Утилиты

Модули

Готов?

Название модуля

Чтение (ак. ч.)

Подготовка (астр. ч.)

Написание (дни)

уровень

Maintainer

Started

Should be done

End date

{X} 0%

Регулярные выражения в Perl

1

1

1

1

ConstantinYershow, DmitryChistikov, VsevolodKrishchenko

{X} 0%

Утилиты

1

1

1

1

ArtemSerebriyskiy, ОльгаТочилкина, VsevolodKrishchenko

2

2

2

2

(./)

Готово: 0 (0%)

0

0

{X}

Не готово: 2 (100%)

2

2

Необходимые знания

Материалы

Полиси

  • На данный момент для координирования работ используется макрос ExtractModules (тот же, что и в PspoModules). Возможно, впоследствии будет написано нечто более специфичное для данных работ.

  • Над каждым модулем работает один расшифровщик (указывается первым в списке сопровождающих модуль),один переводчик (указывается вторым в списке) и минимум один технический редактор (тот, кто вычитывает, указывается третьим в списке).
  • Разбивка прогресса по процентам:

    0%

    Сырой конспект

    20%

    Дешифрованный конспект

    50%

    Конспект, переведённый на русский язык

    70%

    Вычитанный конспект

    90%

    Иллюстрирование, расстановка ссылок, перенос в модули

    100%

    Результат работ над частью лекций проверен FrBrGeorge

  • Как только Вы считаете, что закончили свою часть работы, просьба установить соответствующее количество процентов
  • Промежуточное количество процентов в промежуточных сохранениях приветствуется

Пожелания к ролям

  • Расшифровка — по возможности полное восстановление структуры и смысла лекции по конспектам и (если есть необходимость) по аудиозаписям. в эту задачу входит расстановка имеющихся иллюстраций (typescript, konsole.log, снимки экрана)

  • Перевод на русский — выравнивание стилистки и корректировка владения русским языком. Просьба не очень самовыражаться (чтобы не создавать стилистического разнобоя)

  • Вычитка — проверка получившегося текста на (1) соответствие действительности (2) доходчивость (в том числе на предмет нехватки иллюстраций)


CategoryPolicy

Лекции

Регулярные выражения в Perl

Что есть

* Символ * . * [...] [^...] * + * * ? + {,} * (). Эти скобки, в тех рег. выр, где используется ссылки, скобки нумеруются по порядку их появления в рег. выр.. При этом, если скобка повторяется, то попадает в регистр только первое совпадение, то есть для рег выр ((ab)+) в первую скобку попадёт ababab..., во вторую --- ab. Кроме того, можно использовать регистры прямо в рег. выр: ([ab])\1. * ^ | $

Про Perl

* Есть look ahead, look behind. Это наборы символов класса ^$|, которые сами не сопоставляются в строке, но всё выраж. считается нормальным, если то, что в look-ahead сопоставилось с тем, что стоит непосредственно за ним. То есть, в перле появляются штуки, осущ. проверки условий. Некоторые движки откажутся внутри look-behind втыкать что-угодно. Это нужно, особенно в случае negative, когда в строке чего-то нет. * В перле есть groupings * В перле есть вещи, которые позволяют управлть разбором

Про это вс лектор расск. не будет, но забыл упомянуть про одну группу модификаторов, которые исп. в Перле. Это модификаторы нежадные. По традиции, правило самый левый самый длинный, точнее, правидо обработки модификаторов, называется greedy. Почему: потому что если ставим звёждочку/плюсик, то это жадный повторитель. В качестве сопостю. подставляется сама длинная из возможных слева подсторок. Например, иногда хочется, чтобы было не от первой до последней, а до первой закрывающей скобки, например. В данном случае можно написать что-то в духе <[^>]*>, но в более сложных случаях это не работает. Для этого сущ. более сложный класс повторителей *? и +? --- выбирается не самая длинная, а самая короткая. Чем это опасно? Пототму что в отличие от классич. рег. выр., далеко не всегда можно интерпретировать, как пойдёт разбор выражения. Например, (ab|zzz0)+? Тем не менее, лектор безоговорочно признаёт право на существование и лукахеда, и модификаторов жадности.

PCRE

В какое-то время создатели ЧП решили пресечь практику, когда каждый автор создаёт свою реализацию регэкспов. С одной стороны, появился gnu regexp, с другой был перл.

Утилиты

Мы давно говорили, что шелл в первую очередь интегратор. Тут есть два замечания:

  • Нет задачи рассмотреть всевозможные команды
  • Любого человека, зан. командной строкой, всегда подстерегает выбор:
    • Искать в документации нужную утилиту
    • Написать собственную программу

Чем хорошо первый вариант: если вам встретилась задача, например, выковырять третью колонку из файла. Вы порылись документации, нашли программу cut. И тогда cut -d\ -f3 file. Задача решена. И, поскольку задача встала один раз, то она возникнет ещё и ещё, и придётся решать подобные задачи. И вам надо запоминать не 2000 команд, а 1. И запомнить потому, что вероятнее всего вам придётся ею пользоваться. Тогда вы запоминаете те программы, которые вам нужно пользоваться.

Второй вариант --- берёте любимй язык программирования, делаете на нём велосипед. И может иногда оказаться, что программа окажется короче и лучше, например, то же на авк: awk '{ print $3 }' file.

По определённым присчинам летор предпочитает первое. Но, понятно, что поиск не до посинения, чем более специфична и редка задача, тем больше смысла писать программу.

Команды

  • sed. То же на седе: sed -r '([\S]+[\s]+){2}([\s]+)/\2/'

Родового порядка замечания: такие сборники утилит, которые полезны, они собраны в пакеты, которые оканчиваются обычно на *utils или *tools. Есть coreutils, без каоторых тяжело. Помимо них, есть textutils, buildutils... Есть специфичные сборки.

Теперь немножко списковых структур:

  • Разбор имени файла
    • basename, dirname --- первый отделяет имя файла, второй --- имя каталога
    • realpath --- реальное имя
    • readlnk --- выдаёт содержимое симлинка

Мы сейчас возвр. к идеализированной картине, когда все объекты представлены в виде файлов, и для упр. системой дост. иметь утилиты, которые работают с двумя видами сущностей. Именно по этой причине, большая чать того, о чём мы разг., входит либо в coreutils, либо fileutils, textutils, findutils

  • Работа с файлами
    • cat, cut, head, tail --- вывод файла, разрезание, начало, конец
  • Работа с текстами
    • join, paste --- paste --- сливает два файла построчно
  • Работа с файлами
    • dd --- почему исп. со всем. По умолч. работает как cat, только надо руками сказать, откуда писать и куда: dd if=... of=... . Кроме того, можно сказать, начиная с какого блока копировать, сколько и как, можно указать размер блока.
    • split, csplit --- split пилит файл на части равной длины. Можно распилить как на заданное кол. частей, так и заданного размера. csplit разбивает файл по спецсимволам.
  • программы, которые файл слегка преобразуют
    • sort --- сортирует файл по строкам в лекс. порядке.
      • Для сортировки по цифиркам есть ключ -n
      • Сорт учитывает локаль
      • sort работает с полями, и можно указать ключевое
      • Сортировка нестабильная, бля исправления --- -s нужен для испю в скриптах: if cmp -s f1 f2; then ... fi
      • diff --- имеет древнюю ист. традицию. Это первый инстр. для сборщика пакетов, поскольку он берёт две разные версии одного файл, и сравнивает их. Причём народ реком. исп. diff -u. Кроме того, есть ключ -e, которые генерирует посл. команд ed, которая преобр. первы во второй. Также вывод диффа можно скормить patch, которая с исп. диффа делает из старого файла новый. Кроме того, если указаны строки до и после изм., то можно патч применять не толдько к исх. файлу.:

    patch a1 a2 > p patch a3 < p

Идея в том, что обычно файл приложится. И если файл не приложится, то это значит, что надо посмотреть на файл. Осн. идея следующ:

  • Изм. надо сохр. в виде патча
  • Если наложится на новую версию, то хорошо
  • Если не наложился, то значит, что надо смотреть

В альте есть пакет patchutils, в котом есть инструменты для редактирования патчей, сравнения патчей.

  • uniq (у сорта есть -u, которые делает тоже самое) --- выводит только разные строки в отсорт. файле.
  • tac --- выводит файл в обратном порядке
  • tr --- подмена символов
  • wc --- считает байты, слова, строки
  • hexdump, od --- примерно одно и то же, но один в coreutils. Выдают хексдамп.
  • strings --- вытравляет строки из бинарников (binutils)
  • expr --- программа, которая когда-то вычисл. ариф. выр., но зато она замечательно работает с рег. выр.: expr строка:(регвыр)
  • Программы, которые что-то делают с ФС
    • Сравнение файлов, выделение того, что в них отлич.
      • cmp --- просто сравнивает файлы, если одникаовые --- одинаковые, если разные --- говорит, с какого различ. Есть ключ -q,
  • find. Работает с ФС, выводит текст. По умолчанию покажет список из всех объектов ФС относительно текущей директории. У find дикое кол-во разного рода ключей. У него дост. специфич. формат: первый парметр --- каталог, а дальше идут предикаты find . -type d -name '*a*'. -exec --- позволяет исп. команду для каждого файла или для всех
  • xargs --- одна из немногих программ, которые нач. на x и при этом никакого отн. к иксам не имеет. Позволят обработать прогр. большой список параметров.
  • locate --- ищет имя файла по базе, которую надо регулярно обновлять updatedb
  • which, whereis --- поиск исп. файла по названия в PATH, man...
  • seq, jot --- программы для генерации последовательностей

Оставшиеся 1983 программы лектор опускает.

  • Терминал
    • Мы знаемЮ что можно запустить программу в фоне, она будет делать вывод в файл, и если админ не извращался, то можно разлогиниться и уйти домой ... нам не хватает вечноживого терминала. Такая штука есть, она называется screen, в bsd-системах есть ещё window. Это средство сделать из одного терминала несколько, их можно отсоединить от того устр, в котором оно было.


CategoryLectures CategoryCmc CategoryUneex

LecturesCMC/LinuxShell2008/11 (последним исправлял пользователь eSyr 2008-07-25 00:48:06)