CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

Наш пингвинарий

(c)Петр 'Roxton' СЕМИЛЕТОВ

(Продолжение, начало см. в МК № 49, 51—52, 1, 4—5, 10—11, 14 (168, 170—172, 175—176, 181—182, 185))
Когда речь заходит о скриптах в Линуксе, рядовой юзер пожимает плечами — мол, не его это дело, пусть системный администратор в этом разбирается. Зачем еще какие-то скрипты писать, если и так все работает?

Скрипты — невидимая сила

Ответ прост — скрипты, вернее, shell scripts — одна из главных фишек Линукса. С помощью скриптов можно автоматизировать выполнение чего угодно и когда угодно. Вы наверняка знаете, что при запуске системы выполняется множество различных скриптов — одни настраивают параметры сессии, другие загружают всевозможные сервисы или модули (звуковой драйвер, например). О мощности скриптового языка Shell свидетельствует уже одно то, что написанные на нем скрипты сами конфигурируют систему оптимальным образом, используя сложные проверки, вызывая в зависимости от условий те или иные программы. Но помимо таких сложных скриптов можно писать и более «приземленные», для того чтобы сделать повседневную работу в Линуксе удобнее.

Чтобы рассказ о том, как писать скрипты, был более нагляден, мы разработаем с вами простой, но полезный скрипт. Задача — реализовать такую фишку, чтоб если пользователь захотел посмотреть фильм с CD, ему достаточно было положить диск на выдвижную каретку сидюка. Все остальное должен сделать скрипт. Неслабо, да?

Приступим. Нам понадобится текстовый редактор для редактирования скрипта — благо последний является обычным текстовый файлом, — плейер MPlayer для воспроизведения видео (об этой программе уже рассказывалось в №№ 4 и 5 «Моего компьютера» за этот год) и стандартная утилита eject для управления приводом CD-ROM. Сначала приведу текст нашего чудесного скрипта:

Вот и все. Теперь подробнее. Каждый скрипт должен начинаться со строки #!/bin/sh — без пробелов между лексемами, в точности так, как здесь. Это правило. Далее, команда eject, запущенная с параметром -t, закрывает каретку сидюка. Ежели при открытой каретке просто выполнить eject без этого параметра, то каретка будет сначала закрыта, а потом снова выдвинется. Если у вас два CD-ROM'а, вы можете указать конкретно, какой будете использовать, а сделать это можно, изменив строку примерно вот так:

Короче говоря, подставьте в параметре название устройства. Здесь и далее я предполагаю, что используется первый CD-ROM. Теперь перейдем к следующим строкам. Мы видим цикл FOR:

Что происходит? В первой строке мы перебираем последовательно все файлы на CD, имеющие расширение AVI, и с каждой итерацией цикла присваиваем переменной i имя очередного найденного файла. Поскольку диски, как правило, содержат всего один AVI-файл, мы можем предположить, что это и будет фильм, который хотим посмотреть. Синтаксис нашего цикла в общих чертах таков:

То, что находится между do и done, выполняется до тех пор, пока выполняется и условие. В данном случае, пока скрипт не переберет все AVI-файлы на диске, он не успокоится :-). И для каждого найденного файла мы запускаем в скрипте плейер, передав ему в качестве параметра имя файла. Где мы возьмем имя, спросите вы? А переменная i у нас на что? Команда:

дает следующий результат: MPlayer запускается с графическим интерфейсом, выводит графику через SDL, в полноэкранном режиме, с кодеком DivX4, с программным масштабированием при включенной бикубической интерполяции (-sws 2). И теперь — обратите внимание — мы передаем плейеру имя файла: $i.

Что происходит затем? После того как вы посмотрели фильм и закрыли плейер, скрипт выходит из цикла. Вызывается команда eject, на сей раз выдвигающая каретку сидюка. Скрипт мы написали, но что с ним делать дальше? Сохранить в файле. По традиции, скрипты имеют расширение *.sh — например, playvideo.sh. Но просто так скрипт не запустится. Нужно установить для его файла атрибут executable (выполняемый). Как всегда в Линуксе, есть несколько способов сделать это. Консольный таков:

А в каком-нибудь файловом менеджере достаточно открыть свойства файла и установить там галочку на опции Exec — в Konqueror или Gnome Midnight Commander она доступна на страничке Permissions. Теперь вы можете использовать скрипт, как если бы это был исполняемый файл — запускать его, сделать иконку на рабочем столе, короче говоря, что угодно. Хорошо бы хранить скрипты в отдельной директории, и в директории /bin создавать символические ссылки на эти скрипты.

Я еще не рассказывал о символических ссылках (symbolic links)? Еще нет? Итак, рассказываю, что это такое. Сразу напрашивается аналогия с «ярлыками» в Windows, но это будет чересчур упрощенно. В Линуксе есть два вида ссылок —символические и жесткие. Система позволяет иметь для одного файла два и более названий. Такие названия именуются жесткими ссылками, хард-линками. Пример:

Был файл quake3. Теперь у него два имени: quake3 и q3. Удалив q3, вы удалите quake3, потому что это один и тот же файл. Символические ссылки, они же «симлинки» — это просто ссылки на файлы или директории, то есть более соответствуют «ярлыкам» Windows:

Здесь q3 — уже просто ссылка на файл quake3. Если вы удалите q3, то quake3 не пострадает. Если вы копируете q3, то копируется именно файл-симлинк q3, а не файл-оригинал quake3. Симлинки полезны для создания коротких именований каких-нибудь файлов с неудобоваримыми названиями или длинными путями, а также для ссылок на важные для системы директории, например /usr/X11 — симлинк для /usr/X11R6, в чем нетрудно убедиться, выполнив команду file X11 в директории /usr. То, что объект является симлинком, визуально отображается по-разному. Например, в терминале после имени симлинка следует «собака»: X11@. А в Konqueror'е наоборот, имя такого файла предваряется тильдой: ~X11. Кстати, в этом файловом менеджере создание симлинков упрощено до безобразия — когда вы перетягиваете куда-то файл или директорию, то у вас спрашивают, что с ней сделать, — копировать, переместить, или Link here — сделать ссылку. Подобные средства есть и в других файл-менеджерах.

Теперь напишем второй полезный скрипт. Висеть в Инете, находясь в сессии как Root, так же безопасно, как посадить добровольца в ящик и распиливать его бензопилой — при том, что вы не фокусник. Обычно авторы многочисленных книг, FAQ'ов и электронных пособий рекомендуют входить в систему под другим именем, и только после этого выходить на просторы Сети. Но подумайте: это ведь надо выходить из иксов в логин, заново логиниться... Нет? Вооружась теми же книжками, мы можем запустить из рутовой иксовой сессии терминальчик, и набрать в нем команду:

Здесь мы залогинились как пользователь Пупкин, и от его имени хотим отправиться в Сеть. То бишь, полезно иметь такого виртуального юзера, ограничить ему доступ к разным важным вещам, короче, сделать типичного Инет-серфингиста с минимумом привилегий — пускай он умеет запускать браузер, аську, пользоваться мылом и скачивать файлы. И дальше своей домашней директории чтобы нос не показывал. Итак, заходим как Пупкин — в этом нам помогает команда su. Видите, даже пароль не нужно вводить, потому что вы root, главная фигура в пантеоне богов системы... Итак, произошло чудесное превращение root'а в Пупкина. Теперь виртуальный Пупкин намеревается запустить браузер и набирает в командной строке:

А терминал ему в ответ: «Не выйдет, уважаемый Пупкин! Нет у тебя привилегий под текущими X-Server'ом исковые проги запускать!» Кошмар... Что делать? Выход есть, и чтобы лишний раз не топать по клаве пальцами, вводя рутинные команды, опять напишем скрипт.

Смысл состоит в следующем: командной xhost + localhost мы говорим системе, что к текущему х-серверу может обращаться любой юзер с текущей машины, и затем мы изменяем имя юзера на Pupkin. Запускать скрипт нужно из терминала. Когда скрипт будет выполнен, вы окажетесь в сеансе Пупкина и сможете от его имени выполнять в текущей сессии иксов исковые же программы — например, вызвать почтовый клиент командой kmail, или запустить браузер на ваш выбор: galeon, mozilla, konqueror, dillo... Dillo? Вы еще не слышали о Dillo??? Это новый супер-пупер браузер. Вот, держите козырный адресок —dillo.sourceforge.net, и прямая ссылка на файл: http://prdownloads.sourceforge.net/dillo/dillo-0.6.4.tar.gz, весит всего лишь 284 кило! Между тем, это настоящий сетевой скороход. Он быстрее Оперы и Галеона! Компилируется без проблем, стандартным способом:

Это альфа-версия, но абсолютно стабильная. К сожалению, браузер не поддерживает ни фреймов, ни JavaScript'ов, а также не позволяет изменять кодировку. Но вы присмотритесь к нему внимательнее и запомните на будущее — у Dillo большие перспективы, потому что он обгоняет ту же Оперу раза в два. Нехило!

Теперь вернемся к нашему скрипту. Понятное дело, что удобно будет создать для него симлинк, например в директории /bin, назвав его, скажем, mynetwork, либо, для краткости, и вовсе mw. Теперь можете в любой момент запустить терминал, выполнить в нем mw и в дальнейшем без проблем работать с иксовыми приложениями в качестве другого юзера.

Мы написали два очень полезных скрипта. Полагаю, остальные вы напишете сами, ориентируясь на свои нужды — помните, все, что вы хотите автоматизировать, можно сделать при помощи скриптов.

Подробные инструкции по shell-программированию читайте, во-первых, в электронной книге Rute, которая входит в комплект многих дистрибутивов Линукса, а также доступна в Сети по адресу rute.sourceforge.net — она там во всех популярных форматах, от HTML до PDF. Во-вторых, поглядите в документацию к оболочке-интерпретатору bash — делается это командой man bash. Кроме того, в Сети вы можете найти много уже готовых скриптов для разных целей — это и манипуляции с MP3-файлами, и резервное копирование, и многое другое. В заключение — еще один скриптик, всего в две строки:

Здесь я иллюстрирую возможность передачи параметров в скрипт. Как видите, строка запуска плейера довольно замысловата, и набирать ее каждый раз лень, а история команд bash'а, где эта строка могла сохраниться, все же имеет свой лимит вместительности. Короче говоря, оформляем строку запуска как скрипт, а параметр передаем в переменной $1. Делаем на скрипт симлинк, нечто вроде myvideo, и можем смотреть фильм командой myvideo myfilm.avi — вот как все просто!

А в следующей части «Пингвинария» мы вернемся к рассказу о графических оболочках. На очереди менее тяжеловесные, чем Гном и KDE, но отнюдь не худшие XFCE, AfterStep, BlackBox. Праздник интерфейсов продолжается!

(Продолжение следует)

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov