Видео смотреть бесплатно

Смотреть 365 видео

Официальный сайт openw 24/7/365

Смотреть видео бесплатно

WeLinux.ru

25.07.09 09:56cppmm

консольЗаметки о жизни в консоли.

По заказу рассказываю о маленьких радостях жизни без иксов.

Было время, когда большинство программ, которые я использовал были именно консольные. Это centericq(ныне centerim), mcabber и irssi для общения; orpheus для прослушивания музыки; pine для работы с почтой и ещё целая куча всего(уже не вспомню) для совершенно разных задач.

Сейчас, конечно, я нашёл для себя удобный GUI'шный софт, но многие задачи без консоли сделать всё-таки неудобно. Вот, некоторые из них(при прочтении рекомендую прикидывать, сколько времени и действий займёт каждый из примеров при выполнении их в GUI).

Работа с файлами.
Перемещение, копирование файлов.
Когда я настраивал систему печати с необычным принтером, надо было стянуть много разных фильтров foomatic. В итоге в директории, в которую я всё загружал собралось много архивов tar.gz(около сотни). Надо их всех разархивировать в этой же директории, а сами архивы переместить куда-нибудь, чтобы не мешались.
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, может спокойно работать:
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-файлах сменить одну функцию на другую.
find ./ -name *.php | xargs perl -pi -e 's/oneword/anotherword/g'

Тут я лично менял perl'ом, никто не мешает использовать для этого sed или awk, или ещё что-нибудь.

Поиск и работа с информацией в файлах.
Иногда надо что-то найти в файле. Какую-то запись, или какую-то строку. Я покажу возможности консольных утилит на примере работы с логами.
Возьмём для примера лог икс-сервера. Сделаем так:
1
2
3
4
$ head -n 13 Xorg.0.log | tail -n 3
Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.

Мы прочитали первые 13 строк лога, но на консоль вывели только последние три из низ. Проще говоря, мы увидели 11-ую, 12-ую и 13-ую строки. Но интересно нам другое. В этих строках указываются ключи, которые ставятся перед каждой записью в логе и их пояснение.
Попробуем прочитать все предупреждения(warning), полученные при старте иксов.
1
2
3
$ grep WW Xorg.0.log
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
 

У меня, к сожалению, варнингов нет, потому что я уже таким образом ранее grep'ал и исправил все ошибки. :)
Попробуем тогда информационные сообщения. Если просто grep'нуть по II, выводит очень много. Надо как-то ограничить вывод. Как вариант выведем только интересные(а не общие) сообщения, касающиеся драйвера видеокарты.
1
2
3
4
5
6
$ grep II Xorg.0.log | grep NVIDIA | grep -v NVIDIA\(0\)
(II) Module glx: vendor="NVIDIA Corporation"
(II) NVIDIA GLX Module  173.14.18  Mon Mar  2 12:43:12 PST 2009
(II) Module nvidia: vendor="NVIDIA Corporation"
(II) NVIDIA dlloader X Driver  173.14.18  Mon Mar  2 12:22:46 PST 2009
(II) NVIDIA Unified Driver for all Supported NVIDIA GPUs

Сначала я получил всё, что связано с II, потом из этого вывода всё, что связано с NVIDIA, а потом отсеял неинтересующие меня сообщения с NVIDIA(0).
И вот мне стало интересно, что же подробнее написано в следующих строках после вот этой:(II) NVIDIA GLX Module 173.14.18 Mon Mar 2 12:43:12 PST 2009
1
2
$ cat -n Xorg.0.log | grep  GLX\ Module
    93  (II) NVIDIA GLX Module  173.14.18  Mon Mar  2 12:43:12 PST 2009

Теперь я знаю, что это 93-я строка. А дальше дело техники - читаем первые 103 строчки, но выводим только последние 10 из них. Но с одним ньансом. Эти 10 строк мы не выводим на экран, а сохраняем в отдельный файл, чтобы, к примеру, потом его проанализировать.
$ head -n 103 Xorg.0.log | tail -n 10 > glx.log

Теперь, можно посмотреть этот файл.
1
2
3
4
5
6
7
8
9
10
11
12
$ cat glx.log
(II) Loading extension GLX
(II) LoadModule: "dbe"

(II) Loading /usr/lib/xorg/modules/extensions//libdbe.so
(II) Module dbe: vendor="X.Org Foundation"
        compiled for 1.5.3, module version = 1.0.0
        Module class: X.Org Server Extension
        ABI class: X.Org Server Extension, version 1.1
(II) Loading extension DOUBLE-BUFFER
(II) LoadModule: "record"
 

А можно добавить в него пометку:
$ echo "`date +%d.%m.%y` Интересный кусок лога" >> glx.log

После этого мы получим в конце файла строку "25.07.09 Интересный кусок лога", где вместо 25.07.09 будет сегодняшняя дата.

Ну и напоследок небольшой пример, который вряд ли понадобится обычному пользователю, но очень показателен в плане принципов работы в консоли вообще. Есть такая утилита - tcpdump. Это сниффер траффика. Так вот работа с этой утилитой - это основной принцип консоли, а именно - разговор.
Возьмём запрос:
$ 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.

Удачи!
+16
lwilis25.07.09 18:36# +3
А смысл использовать конструкции grep |head |tail, когда у грепа есть опции -А -В -С?
cppmm26.07.09 11:10# +1
Чтобы показать возможности конвееров в консоли.
hello25.07.09 21:09# +5
>
$cat -n Xorg.0.log | grep  GLX\ Module


лучше заменить на

$grep -n  GLX\ Module Xorg.0.log


>
$head -n 103 Xorg.0.log | tail -n 10 > glx.log


на

grep -B 10 GLX\ Module Xorg.0.log > glx.log


Получается что предыдущая строка и не нужна

>
grep II Xorg.0.log | grep NVIDIA | grep -v NVIDIA\(0\)


хм, вы же вроде сами говорите:

рекомендую учить regexp'ы.


так что лучше заменить на что то вроде этого

grep -E "II.*NVIDIA[^(]" Xorg.0.log


cppmm26.07.09 11:16# +5
Вы совершенно правы.
И, как и на предыдущий коммент, чтобы показать простейшие вещи и принципы работы. Просто не придумал более наглядных примеров. А реально используемые в работе вещи для тех, кто с консолью пока не дружит будут слишком непонятны.
Те же regexp'ы, если человек о них не знает, вводят в ступор в примерах. Поэтому браться за них стоит только после основательного чтения манов. Моя же заметка не является HOWTO'шкой или руководством к действию. Это просто пример того, что в консоли работать удобно. И ваш коммент только подтверждает это.
В любом случае, спасибо за уточнения.

Top блогов (все)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Top пользователей (все)
Топ пользователей Топ блогов
В сети: monolith

Новенькие: toshcka, patrick17, Coronzon, ubuntu, lemonjoe
welinux.ru
Идея сайта exelens; Движок 0byte, разработчик nvbn; Дизайн - Astramak

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн