пятница, 8 августа 2008 г.

CLI, as I use it. part 1.

Не смотря на то что Linux-системы уже давно радуют нас хоть как-то развитыми графическими средами, еще сильно средневековое поверье о том что Linux - это прежде всего командная строка, и все надо делать с помощью командной строки. Как и любое другое поверье, какое-то отношение к реальности это, конечно же, имеет, но все же весьма опосредованное. Во-первых, каждый скажет, что далеко не обязательно все делать используя CLI-средства, многие современные системы можно установить и настроить для работы совсем к ним не прибегая. Во-вторых, неизвестное всегда страшит, в случае консоли боятся ее не стоит, лучше научится худо-бедно пользоваться - никогда не помешает, а может даже и помочь.

Достаточно много всего про shell, и традиционные unix-утилиты написано, но вопросы у людей все-равно продолжают возникать, никуда от этого не денешься. Я не собираюсь перекрывать мировой опыт использования unix с момента зарождения - мой личный достаточно скромен, равно как не хочу писать очередной туториал для новичков. Просто некоторые заметки о том как я этим всем пользуюсь, с некоторыми лирическими отступлениями.

Так или иначе, многим из нас приходится ежедневно работать с текстовой информацией. Часть информации ценна сама по себе - например, если вы продолжаете читать этот пост, то какую-то ценность для вас, информация здесь изложенная представляет. Есть же и такая текстовая информация, которая становится нам интересной после некоторой обработки. Возьмем например святая-святых всех линуксоидов - исходники ядра - очень много текстовых файлов, в которых сам черт ногу сломит. А "много" - это сколько?
diesel@debian:/usr/src/linux-2.6.20$ find -type f|wc -l
23638
Ого, и места же это добро наверное занимает много?


diesel@debian:/usr/src/linux-2.6.20$ du -hs .
283M
Не мало, да. Сколько же труда, пота и крови в это все вложено!

diesel@debian:/usr/src/linux-2.6.20$ grep -irE 'fuck' . |wc -l
51
Ага, программисты не стеснялись выражать своих чувств! Интересно, а что давалось тяжелее всего?

diesel@debian:/usr/src/linux-2.6.20$ grep -irE 'fuck' . |cut -d/ -f2 |sort | uniq -c |sort -n
1 Documentation
1 lib
2 fs
2 sound
4 include
5 net
12 drivers
24 arch
И вот уже какая-то ценность от огромной кучи непонятных файлов, после соответствующей обработки начинает появляться :). Пусть даже в данном конкретном случае ценность весьма относительная, аналогичная конструкция иногда оказывается действительно полезной.

Для себя могу выделить две большие группы задач, которые приходится решать достаточно часто, используя традциционные unix-утилиты: различного рода переформатирование текстовой информации, например, если мы имеем .csv файл, а хотим из этого дела сделать sql-дамп для того чтобы загнать потом этот csv в базу данных; а так же поиск и замена - тут я думаю примеров не надо. Так уже сложилось что для разного рода переформатирований чаще всего используется awk; традиционными инструментами для поиска и замены конечно же являются grep и sed; конечно же есть еще и перловые однострочники, но с одной стороны - это тема для совсем отдельного разговора; с другой - с однострочным perl'ом я знаком достаточно посредственно, поэтому много на эту тему рассказать не могу, perl чаще всего использую для "клинических" случаев, которых не так уже и много.

Пожалуй, на этом месте поставлю финальную точку, дабы не делать пост уж слишком длинным, а в следующих постах посмотрим на каждую из задач более подробно и с примерами.

Комментариев нет: