cppmm 25.07.2009 09:56
Жизнь в консоли — Заметки о жизни в консоли.
По заказу рассказываю о маленьких радостях жизни без иксов.Было время, когда большинство программ, которые я использовал были именно консольные. Это centericq(ныне centerim), mcabber и irssi для общения; orpheus для прослушивания музыки; pine для работы с почтой и ещё целая куча всего(уже не вспомню) для совершенно разных задач.
Сейчас, конечно, я нашёл для себя удобный GUI'шный софт, но многие задачи без консоли сделать всё-таки неудобно. Вот, некоторые из них(при прочтении рекомендую прикидывать, сколько времени и действий займёт каждый из примеров при выполнении их в GUI).
Работа с файлами.
Перемещение, копирование файлов.
Когда я настраивал систему печати с необычным принтером, надо было стянуть много разных фильтров foomatic. В итоге в директории, в которую я всё загружал собралось много архивов tar.gz(около сотни). Надо их всех разархивировать в этой же директории, а сами архивы переместить куда-нибудь, чтобы не мешались.
1 |
find ./ -type f -exec tar -xzvf '{}' \; && rm -f ./*.tar.gz && tar -xjvf /backups/foomatic_filters.tar.bz2 ./
|
Командой find я нашёл вс файлы в этой директории и отдал их на рстерзание архиватору, после чего кдалил все архивы, а всё, что получилось сжал в один большой архив и положил его в /backups/
Вообще, для работы с большим количеством файлов рекомендую учить regexp'ы. С их помощью можно творить чудеса.
Копирование и права доступа.
На одном из моих компьютеров заведено две учётные записи. Для меня и для жены. Но есть файлы, доступ к которым нужен нам обоим. Та же музыка. И вот, появилось у меня несколько сотен песен какой-нибудь группы, и надо этим всем поделиться. Моя музыка лежит в /home/cppmm/music/%groupname%
В домашней директории жены я создаю симлинк на нужную директорию, а на саму директорию и все файлы в ней ставлю права, с которыми любой пользователь, состоящий в группе users, может спокойно работать:
1 |
ln -s /home/cppmm/music/%groupname%/ /home/username/%groupname% && chown -Rv cppmm:users /home/cppmm/music/%groupname% && chmod -R ug+rw /home/cppmm/music/%groupname%
|
Изменение файлов.
Был такой случай. Надо было в движке сайта во всех php-файлах сменить одну функцию на другую.
1 |
|
Тут я лично менял perl'ом, никто не мешает использовать для этого sed или awk, или ещё что-нибудь.
Поиск и работа с информацией в файлах.
Иногда надо что-то найти в файле. Какую-то запись, или какую-то строку. Я покажу возможности консольных утилит на примере работы с логами.
Возьмём для примера лог икс-сервера. Сделаем так:
Мы прочитали первые 13 строк лога, но на консоль вывели только последние три из низ. Проще говоря, мы увидели 11-ую, 12-ую и 13-ую строки. Но интересно нам другое. В этих строках указываются ключи, которые ставятся перед каждой записью в логе и их пояснение.
Попробуем прочитать все предупреждения(warning), полученные при старте иксов.
1 |
|
У меня, к сожалению, варнингов нет, потому что я уже таким образом ранее grep'ал и исправил все ошибки. :)
Попробуем тогда информационные сообщения. Если просто grep'нуть по II, выводит очень много. Надо как-то ограничить вывод. Как вариант выведем только интересные(а не общие) сообщения, касающиеся драйвера видеокарты.
Сначала я получил всё, что связано с II, потом из этого вывода всё, что связано с NVIDIA, а потом отсеял неинтересующие меня сообщения с NVIDIA(0).
И вот мне стало интересно, что же подробнее написано в следующих строках после вот этой:(II) NVIDIA GLX Module 173.14.18 Mon Mar 2 12:43:12 PST 2009
1 |
$ cat -n Xorg.0.log | grep GLX\ Module
|
Теперь я знаю, что это 93-я строка. А дальше дело техники - читаем первые 103 строчки, но выводим только последние 10 из них. Но с одним ньансом. Эти 10 строк мы не выводим на экран, а сохраняем в отдельный файл, чтобы, к примеру, потом его проанализировать.
1 |
|
Теперь, можно посмотреть этот файл.
А можно добавить в него пометку:
1 |
|
После этого мы получим в конце файла строку "25.07.09 Интересный кусок лога", где вместо 25.07.09 будет сегодняшняя дата.
Ну и напоследок небольшой пример, который вряд ли понадобится обычному пользователю, но очень показателен в плане принципов работы в консоли вообще. Есть такая утилита - tcpdump. Это сниффер траффика. Так вот работа с этой утилитой - это основной принцип консоли, а именно - разговор.
Возьмём запрос:
1 |
$ tcpdump -ntpi eth0 host 192.168.1.1 or host 192.168.1.2 and not tcp port 22 and not tcp port 80 and not icmp
|
Этой командой я сказал показать все пакеты проходящие на интерфейсе eth0 для адресов 192.168.1.1 или 192.168.1.2, кроме 22-го и 80-го портов и пингов.
Как видите, по сути я просто напечатал предложение на английском языке. В этом и есть вся консоль - это разговор с компьютером. Я ему ставлю условия, говорю, что делать, а он мне отвечает.
Конечно, в такой статье всех радостей консоли не описать. Тысячи их. :)
И, конечно, для работы с ней надо знать язык консоли. Надо уметь с ней разговаривать. Для этого придётся потратить немного времени на чтение манов и изучение различных хитростей и особенностей. Но не забывайте, что время, потраченное на такое обучение в будущем сэкономит сотни часов по сравнению с мышковозюканьем и кнопочкотыканьем.
В этом описании я показал только несколько приёмов. Но намеренно обошёл стороной одну неотъемлемую часть работы в консоли - написание скриптов. По сути своей shell-скрипты - это те же самые команды, только записанные в файл(с некоторыми особенностями). Освоив работу в консоли и создание самых простеньких скриптов, времени тратится ещё меньше. Пример я уже выкладывал тут. Полчаса потраченные на написание скрипта окупаются слихвой при работе с ним.
И главное - не пугаться этих команд и больших конструкций. Всё это всего лишь небольшие утилитки, работающие в связке. И даже зачастую не приходится писать их вручную и запоминать сотни параметров. Всегда есть bash-completion и подсказки вида %commandname% --help.
Удачи!

+ 5 -
А смысл использовать конструкции grep |head |tail, когда у грепа есть опции -А -В -С?