IZONE- http://www.izcity.com/- бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

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

Петр 'Roxton' Семилетов

Когда речь заходит о скриптах в Линуксе, рядовой юзер пожимает плечами — мол, не его это дело, пусть системный администратор в этом разбирается. Зачем еще какие-то скрипты писать, если и так все работает?

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

Ответ прост — скрипты, вернее, 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. Праздник интерфейсов продолжается!

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

Источник: http://www.mycomp.com.ua/

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com