Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Выпуск #14:


Служба Рассылок Subscribe.Ru
OS Linux для начинающих.  ::  http://linuxbegin.by.ru  ::  Выпуск #14. (3.03.02).  ::  Подписчиков: ~ 7200.
  Сегодня в выпуске:

• Новости - Коротко о самых важных новостях из мира Open source за прошедшую неделю.
Журналируемые файловые системы для Linux (часть 2) - "XFS лучше в одних случаях, ReiserFS - в других, но, в отличие от Ext2, это - журналируемые файловые системы, и вы уже осведомлены об их преимуществах..."
Несколько причин не использовать Linux - Конечно же, Линукс - не идеальная система, и в этой статье перечислены те сферы деятельности, в которых вы просто не сможете использовать Linux.
BASH Programming - Introduction - Все, что вы хотели узнать о создании shell-скриптов.


  Читайте в следующем номере:

• За дружбу между ОСами.
• Делаем быстрый десктоп.
• Оптимизация Linux.
• И многое другое по вашим заказам!


  Links:

Linux на PlayStation - о том, как установить Linux на PlayStation :). English. (Inferno)
SB Live! в Linux - "Про лечение глюков с SB Live! под Линукс (конкретнее - под Mandrake 8.1)". Это - ссылка на thread известного форума MandrakeForum.com. (Inferno)
Cafecomputer Linux FAQ - Еще одна коллекция часто задаваемых вопросов и ответов про Linux. English.
Linux Newbie Guide - Установка и работа в Linux для начинающих. English.
Linux for Beginners - Tutorial'ы для начинающих пользователей Linux. English.


  Новые статьи:

Устанавливаем и настраиваем Slackware Linux 8.0 - Статья для начинающих Linux'оидов о том, как установить и настроить Slackware. "Я ориентировался на практически нулевой уровень подготовки читателя, так что, если вам не интересны отдельные части - не мучайте себя, пропускайте их. %)"
VMware Workstation 3.0 – «песочница» для взрослыx - Кое-что о VMWare 3 и ее возможных использованиях.


  Интересный софт:

• Imici Messenger for Linux 1.1 - Написано, что с помощью этой проги можно соединяться с юзерами AOL, ICQ, Yahoo! и даже MSN :). (199Kb)
SimpleCDR-X - Еще один графический интерфейс для записи CD и Audio-риппинга. "Features include: cd-copying, cd ripping (wav to MP3 and OGG on the fly), Audio CD Mastering, Data CD Mastering, and Multi-session recording."
GnomeMeeting - Программа для проведения видеоконференций. Совместима с другими приложениями, поддерживающими протокол H.323, включая M$ NetMeeting.
Linux Easy Installer - Скрипт на Perl, позволяющий легко и быстро установить Apache + PHP + MySQL + phpMyAdmin.
LBreakout - На сайте LRN.ru эту игру называют "лучшей игрой всех времен и народов" :).

Если вы пользуетесь какой-нибудь интересной программой, и хотите порекомендовать ее всем читателям рассылки (и посетителям сайта) - пишите на xoid26@linuxfreemail.com! А если вы еще и напишете какой-нибудь обзор этой программы, то это будет вдвойне приятно :).


  Реклама:

На сайте рассылки http://linuxbegin.by.ru вы найдете:

• Все предыдущие выпуски
• Часто задаваемые вопросы
• Статьи
• Ссылки
• И многое другое!


  Опрос:
Какая, по вашему мнению, оптимальная частота выхода нашей рассылки?
Раз в 5 дней.
Раз в неделю.
Та, с которой рассылка выходит сейчас (1 раз в 10-12 дней).
Меня устраивает частота, которая есть сейчас. Но хотелось бы, чтобы рассылка выходила регулярнее.
Раз в 2 недели.
Раз в месяц.
Не знаю / Все равно.

(требуется подключение к Инету :).
  Мировые новости:

27.02.02: Вышла Opera 6.0 Beta 1 для Linux. Новые возможности описаны здесь. (LRN)
19.02.02: Появилась новая информация о совмещении KDE и Gnome. "Где-то с год назад обсуждалось совместное использование библиотек, но идея как-то канула в прошлое ... Теперь же, вместе с очередным витком "совмещения", предлагают начать с общих "тем" для Gnome и KDE - может, это окажется чуть проще?" (Linuxnews)

  Новости рассылки:

• Я наконец-то посмотрел культовый фильм всех Linux'оидов " >AntiTrust< "!!!!!

"Это - бинарный бизнес. Ты - или 1, или 0, живой или мертвый...", "Юзерам все равно, кто придумал эту идею и написал код...", "Любой программист, работающий где-нибудь в гараже, может придумать хорошую идею и лишить нас бизнеса..", "Убийство ради кода...".

Это - уникальный фильм, в котором показана вся суть движения Open Source. Хотя там и не упоминаются конкретные имена (например, такие, как "Microsoft" или "Linux", Билл Гейтс там тоже переименован :), но все равно очень многое взято из реально происходящих событий. Именно поэтому этот фильм мало кому известен...

С одной стороны, у фильма happy end - исходники операционной системы монополиста выложены в Инет. "This is the source of operating system Synapse. Take it. Use it. Human knowledge belongs to a world". А с другой стороны - все эти исходники были созданы талантливыми программистами, которых или завербовывали в корпорацию Nurv, или (если эти программеры не давали согласия отдать код, который они написали, в руки монополиста) просто убивали. Так что - делайте выводы сами...

И еще - в создании этого фильма учавствовал сам Linus Torvalds, а так же многие люди, имеющие отношение к Open Source... Так что - если вы хотите больше узнать о Linux и OSS, то лучше, чем этот фильм, вы ничего не найдете! :).

"Milo (главный герой) - Мы собирались сделать эту систему уже давно. Она будет Open Source. То есть - мы предлагаем ее бесплатно для всех, только поддержка будет оплачиваться.
Garry Winston (переименованный Б.Г.) - Подумай о том, что когда вы выложите исходники, кто-то просто возьмет их, и сделает на этом несколько миллиардов $$$. А о тех, кто создал эту технологию, даже и не вспомнят...".

• И еще - я решил провести опрос на тему "Какая, по вашему мнению, оптимальная частота выхода нашей рассылки?". Сейчас рассылка выходит один раз в 10-12 дней. Может быть, лучше было бы, чтобы она выходила чаще (но с меньшим количеством информации), или наоборот - реже, но с большим количеством информации? Решайте сами...

  Журналируемые файловые системы для Linux (часть 2). // Ricardo Galli, 01/2002.

Начало - в выпуске #13.

JFS.

IBM в первый раз представила свою собственную журналируемую файловую систему для Unix в выпуске AIX версии 3.1. Сейчас они предлагают более новую файловую систему для AIX-систем, названную JFS2, которая доступна в AIX версии 5.0 и выше. Open Source вариант JFS сейчас отличается от того, который сейчас распространяется с OS/2 Warp Server'ом.

JFS отличается высокой пропускной способностью и надежностью, удовлетворяющей требованиям серверов. В этой файловой системе используется адресная структура, базированная на расширениях (extent-based), и расположение блоков в кластерах, что позволяет создавать компактные, эффективные и масштабируемые структуры расположения файлов. Расширение - это несколько последовательно идущих блоков, относящихся к файлу, описываемых тремя параметрами - логическое удаление (offset), длина и физические параметры. Структура адресации - это B+Tree с описаниями расширений, расположенными в i-node.

JFS ведет логи, в которых записывается информация об операциях над метаданными. Формат лога устанавливается утилитой создания файловой системы.

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

JFS поддерживает блоки размера 512, 1024, 2048 и 4096 байт. Небольшая величина блока уменьшает фрагментацию, но может увеличивать длину пути, потому что перераспределение блоков может происходить более часто, чем если бы были использованы большие блоки. Поэтому стандартный размер - 4096 байт.

JFS динамически распределяет место для i-nodes, и освобождает место, когда они больше не нужны. Эта файловая система поддерживает две различные организации директорий:

1) Используется для маленьких директорий. Оглавление директории хранится в ее i-node.
2) Для больших директорий. Каждая директория представляется, как B+Tree с ее именем. Это дает возможность быстрого поиска, вставки и удаления директорий.

JFS поддерживает и "разряженные" и "плотные" файлы. У первого типа файлов данные разбросаны по различным местам, и размер файла - это просто номер самого последнего записанного байта. А физическим расположением самих блоков занимается операция записи.

Ext3.

Вообще-то, это Ext2 с файлом журнала. Ext3 - это всего лишь половина настоящей файловой системы, надстройка над Ext2. С одной стороны, она позволяет вести лог операций для более быстрого восстановления. Но эта файловая система унаследовала некоторые ограничения от Ext2 (например, она базируется на блоках и использует полный перебор при поиске файлов и директорий), и поэтому ее нельзя назвать чистой журналируемой файловой системой.

Главные преимущества:

• Ext3 записывает изменения данных и метаданных. Поэтому, в отличии от предыдущих файловых систем, сохраняется и содержимое файлов. Уровень журналирования может контролироваться опцией команды mount.
• Разделы Ext3 не отличаются от Ext2 на уровне файловой структуры, поэтому можно портировать файлы со старой системы на новую, или делать backup на старую систему.

Ext3 резервирует одну из специальных Ext2 i-nodes для хранения логов, но сам журнал может быть на любой i-node в любой файловой системе. Возможно иметь несколько файловых систем Ext3 с совместным журналом.

Работа файла журналирования - записывать состояние системных метаданных во время процесса совершения транзакций. В журнал пишется состояние трех типов данных: метаданные, блоки описания и Header блоки.

Журналируемый блок метаданных всегда записывается полностью, даже если в файловой системе произошло очень маленькое изменение. Это делается относительно быстро, потому что журналируемые операции ввода/вывода могут быть обьединены в большие кластеры и блоки могут быть записаны прямо из кэша с помощью использования структуры buffer_head.

Блоки описания описывают другие блоки метаданных, так что механизм восстановления может копировать метаданные назад в файловую систему. Они записываются перед изменением журнала метаданных.

Header блоки описывают заголовок и окончание журнала, и порядок номеров - для того, чтобы гарантировать упорядоченную запись во время восстановления.

Сравнение быстродействия и выводы:

Различные тесты показали, что XFS и ReiserFS имеют очень хорошее быстродействие по сравнению с многократно тестированной и оптимизированной Ext2. Ext3 работает медленнее, но приближается к Ext2. (Ожидается, что ее быстродействие будет улучшаться). JFS показала самые плохие результаты не только в быстродействии, но и в стабильности.

XFS, ReiserFS и Ext3 доказали, что они - быстрые и надежные файловые системы. XFS имеет более высокое быстродействие в такой важной области, как работа с большими файлами. Сейчас ReiserFS полностью перечитывает дерево при записи каждого 4KB блока, и вставляет по одному указателю одновременно, и поэтому происходит повышение затрат на балансирование дерева.

При операциях с маленькими файлами, обычно между 100 и 10000 байт, ReiserFS показала лучшие результаты в том случае, когда эти файлы еще не находятся в кэше. А при чтении файлов из кэша разница почти незаметна для Ext2, Ext3, ReiserFS и XFS.

Среди всех файловых систем только ReiserFS была включена в ядро Linux, начиная с версии 2.4.1, и SuSE поддерживает ее уже более 2 лет. НExt3 собирается быть стандартной файловой системой для Red Hat, а XFS используется на больших серверах, особенно в Голливуде, потому что там большое влияние имеет SGI. А IBM нужно вложить много усилий в JFS, если они хотят сделать ее распространенной файловой системой, и альтернативой для перехода c AIX и OS/2 на Linux.

Ссылки: Ext3 architecture, Introduction to Linux Journal File Systems, XFS Home Page, JFS Home Page, ReiserFS Home Page, Storage Foundry, OS News.

Тесты: Ext2, Ext3, ReiserFS, XFS and JFS benchmarks, Ext2, ReiserFS and XFS Benchmarks, Pruebas con XFS, ReiserFS, Ext2FS, y FAT32, Namesys benchmarks, Ext2, XFS, ReiserFS and JFS Mongo Benchmarks.

  Несколько причин не использовать Linux. // Robin "Roblimo" Miller, 02/2002

Некоторые люди могут использовать Linux, а некоторые - нет. И от того, что множество фанатов Linux критикуют пользователей Windows или говорят, что Linux - отличная система, ничего не изменится - не все могут работать в Линуксе.

Начнем с десктопных публикаций (Desktop Publishing - сокращенно "DTP"). Это - одно из самых распространенных применений компьютеров. Небольшие компании, школы, церкви, синагоги, общественные центры, спортивные лиги, и вообще - любые компании используют компьютеры для создания писем, отчетов, карточек, конвертов, флаеров, короче говоря - всего того, что можно напечатать. Для многих людей и организаций это - главная причина покупки компьютера. Зайдите в любой магазин, продающий программное обеспечение. DTP-программное обеспечение везде! Начиная от маленьких десятидолларовых утилит, не делающих ничего, кроме поздравительных карточек - до полнофункциональных DTP-программ, на которых можно сделать практически любой документ для печати. Особо можно отметить Microsoft Office template gallery, на который все ссылаются. StarOffice и OpenOffice пока не обеспечивают пользователей таким большим количеством шаблонов. Может быть, они когда-нибудь будут таким же простым инструментом для составления писем и документов, но - не сейчас.

А что касается профессионального уровня публикации и графики - Quark Express и Photoshop в этой области не имеют никаких аналогов. (Gimp - отличный редактор для web-графики, я сам пользуюсь им, и мне он нравится, но в области профессионального редактирования графических изображений и печати он не может конкурировать с этими программами).

И вообще - когда нужно что-нибудь напечатать на бумаге, программы для Linux отстают от основного уровня. Люди, живущие в Интернете, часто забывают, что весь остальной мир до сих пор работает только на бумаге. И похоже на то, что мир будет продолжать использовать бумагу еще много лет. А печать в Linux до сих пор ограничена. Да, вы можете напечатать что-нибудь простое на струйном принтере, и несколько лазерных принтеров имеют нормальную поддержку в Линуксе, но, когда дело доходит до профессиональной печати, Linux до сих пор сильно отстает.

Не будем говорить о сканерах. Их поддержка в Linux постоянно улучшается, но не доходит до того уровня, который есть в Windows или Mac. Многие сканеры до сих пор не поддерживаются, например, дешевые сканеры с параллельным портом.

Проклятие WinModem'ов. Если вы установите Linux на типичный домашний компьютер или laptop, то существует вероятность того, что ваш модем не заработает. Вам придется купить другой модем - не обязательно с надписью "Linux Certified", а хотя бы тот, который работает не только в Windows, но и, например, в Dos. Некоторые из Windows-модемов (WinModem'ов) можно заставить работать в Линуксе, но не все. Если вы решите приобрести кабельный интернет или DSL, то вы узнаете, что почти никто из провайдеров не станет обеспечивать вас программным обеспечением для Linux. Конечно же, с кабелем или DSL в Линуксе работать можно, но для этого сначала нужно немного поработать. В Windows все делается проще. Linux безопаснее для работы в сети, но там вы не сможете играться с Windows-троянами или вирусами. Так что - если вам нравится то незабываемое чувство, когда по вашему компьютеру шарится непонятно кто, ваш лучший выбор - Windows.

Игры. Если для вас компьютер - это игровая станция, а не инструмент для работы, то Linux наложит на вас много ограничений. Есть несколько игр для Linux, но это не сравнить с витринами, полностью заставленными играми для Windows, которые вы можете увидеть в любом магазине.

Другие программы общего назначения. CAD для Linux - примитивный, а 3D-CAD для Linux вообще почти нет. Существуют множество специальных программ для разработки и проектирования всего - от структуры зданий до печатных плат, и большинство из них существуют только под Windows. Программы для работы со звуком и видео в Linux существуют, но их возможности ограничены. Еще под Linux не существует целого класса приложений - обучающих программ. Но это легко исправляется тем, что существует много отличных образовательных web-сайтов, работающих как в Windows, так и в Linux.

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

Нравится ли вам это или нет - существует много вещей, которые нельзя сделать в Linux сегодня. Так что - существует много людей, для которых единственная операционная система, которую они могут использовать - это Windows, или, когда дело касается профессиональных графических работ - Mac. И это не означает, что все эти люди - глупцы и идиоты, над которыми можно смеяться или которых можно осуждать.

Сам я использую Linux, и мне нравится эта OS. Там я могу сделать все, что хочу, но так же я признаю тот факт, что есть несколько вещей, которые я хотел бы сделать на моем компьютере, но не могу осуществить их в Linux. Я хочу всегда быть уверенным, что любое железо, которое я хочу приобрести, будет нормально работать в Linux. (Этой проблемы у пользователей Windows обычно не возникает). Я хочу снова испытать все удовольствия работы с Outlook, включая те незабываемые моменты, когда вы открываете какое-то странное письмо, и после этого приходится долго восстанавливать информацию и решать различные проблемы. Я принимаю эти недостатки как часть моего опыта работы в Linux. Так же из моего опыта работы в Linux я понял, что можно совершенно реально создать полнофункциональную и готовую к работе систему на базе Linux без особых затрат на покупку коммерческого программного обеспечения.

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

И еще, вероятно, некоторые люди не связываются с Linux, потому что их отталкивают все эти "защитники" Linux, такие, как те, кто написал больше всего ругательных комментариев к этой статье. Почему-то каждый раз, когда в Сети упоминается Linux, эти защитники начинают с таким упорством превозносить Linux и ругать всех остальных, что мне кажется, что их наняли создатели коммерческих операционных систем для того, чтобы они ассоциировали Linux с плохими манерами. Если это так, то создатели коммерческих операционных систем сделали правильное вложение своих денег.

  BASH Programming - Introduction. // Автор - Mike G, переводчик - Дмитрий А. Смирнов.

(Комментарий от автора рассылки: Это - слегка урезанный вариант BASH Programming - Introduction HOW-TO).

Зачем нужен этот документ?

• У Вас имеются идеи, связанные с программированием, и существует необходимость в выполнении процесса кодирования каких-нибудь shell-скриптов.
• Ваши идеи, связанные с программированием, недостаточно конкретны и требуют дополнительных указаний.
• Вы желаете взглянуть на какие-нибудь shell-скрипты и комментарии в качестве образца для создания своих собственных.
• Вы мигрируете из DOS/Windows (или уже выполнили это) и хотите создавать файлы пакетной обработки ("batch").

Простейшие скрипты:

• Традиционный скрипт "hello world".

#!/bin/bash
echo Hello World!

Данный скрипт содержит только две строки. Первая сообщает системе о том, какая программа используется для запуска файла. Вторая строка - это единственное действие, выполняемое данным скриптом, печатающее 'Hello world' на терминале. Если Вы получите что-то типа ./hello.sh: Command not found. , то, возможно, первая строка '#!/bin/bash' неправильная; запустите whereis bash или посмотрите finding bash, чтобы выяснить, какой должна быть эта строка.

• Простой скрипт резервного копирования.

#!/bin/bash
tar -cZf /var/my-backup.tgz /home/me/

В данном скрипте вместо печати сообщения на терминале мы создаём tar-архив пользовательского домашнего каталога. Скрипт НЕ предназначен для практического применения. Далее в данном документе будет представлен более эффективный скрипт резервного копирования.

Всё о перенаправлении.

•Теория и быстрый просмотр.

Существуют 3 файловых дескриптора: stdin - cтандартный ввод, stdout - стандартный вывод и stderr - стандартный поток ошибок.

Ваши основные возможности:

• перенаправлять stdout в файл
• перенаправлять stderr в файл
• перенаправлять stdout в stderr
• перенаправлять stderr в stdout
• перенаправлять stderr и stdout в файл
• перенаправлять stderr и stdout в stdout
• перенаправлять stderr и stdout в stderr

Небольшое примечание для более глубокого понимания: с помощью команды less Вы можете просмотреть как stdout, который остаётся в буфере, так и stderr, который печатается на экране. Однако он стирается, когда Вы предпринимаете попытки "просмотреть" буфер.

• Пример: stdout в файл.

Это действие записывает стандартный вывод программы в файл.

ls -l > ls-l.txt

Здесь создаётся файл с именем 'ls-l.txt'. В нём будет содержаться всё то, что Вы бы увидели, если бы просто выполнили команду 'ls -l'.

• Пример: stderr в файл

Это действие записывает стандартный поток ошибок программы в файл.

grep da * 2> grep-errors.txt

Здесь создаётся файл, названный 'grep-errors.txt'. В нём будет содержаться часть вывода команды 'grep da *', относящаяся к стандартному потоку ошибок.

• Пример: stdout в stderr

Это действие записывает стандартный вывод программы в тот же файл, что и стандартный поток ошибок.

grep da * 1>&2

Здесь стандартный вывод команды отправляется в стандартный поток ошибок. Вы можете увидеть это разными способами.

• Пример: stderr в stdout

Это действие записывает стандартный поток ошибок программы туда же, куда и стандартный вывод.

grep * 2>&1

Здесь стандартный поток ошибок команды отправляется на стандартный вывод; если Вы перешлёте результат через конвейер (|) в less, то увидите, что строки, которые обычно пропадают (как записанные в стандартный поток ошибок), в этом случае сохраняются (так как они находятся на стандартном выводе).

• Пример: stderr и stdout в файл

Это действие помещает весь вывод программы в файл. Это является подходящим вариантом для заданий cron: если Вы хотите, чтобы команда выполнялась абсолютно незаметно.

rm -f $(find / -name core) &> /dev/null

Это (предположим, для cron) удаляет любой файл с названием 'core' в любом каталоге. Помните, что Вам следует полностью быть уверенным в том, что выполняет команда, если возникает желание затереть её вывод.

Конвейеры.

Данный раздел объясняет достаточно простым и практичным способом, каким образом следует использовать конвейеры и для чего Вам это может потребоваться.

• Что это такое и зачем Вам это использовать?

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

• Пример: простой конвейер с sed

Это очень простой способ использования конвейеров.

ls -l | sed -e "s/[aeio]/u/g"

Здесь происходит следующее: первоначально выполняется команда ls -l, и её вывод, вместо отображения на экране, отправляется в программу sed, которая, в свою очередь, выводит на экран то, что должна.

• Пример: альтернатива для ls -l *.txt

Возможно, это значительно более сложный способ, чем ls -l *.txt, но он приводится здесь только для того, чтобы проиллюстрировать работу с конвейерами, а не для решения вопроса выбора из этих двух способов листинга.

ls -l | grep "\.txt$"

Здесь вывод программы ls -l отправляется в программу grep, которая, в свою очередь, выводит на экран строки, соответствующие регулярному выражению "\.txt$".

Переменные.

Вы можете использовать переменные таким же образом, что и в любом языке программирования. Типы данных отсутствуют. Переменная в bash может представлять собой число, символ или строку символов.

Вам не следует объявлять переменную. В действительности, присвоение значения на её указатель уже создаёт её.

• Пример: "Hello World!", использующий переменные.

#!/bin/bash
STR="Hello World!"
echo $STR


Вторая строка создаёт переменную, которая называется STR, и присваивает ей строчное значение "Hello World!". Затем ЗНАЧЕНИЕ этой переменной извлекается добавлением в начале знака '$'. Пожалуйста, запомните (постарайтесь), что если Вы не используете знак '$', вывод программы может быть другим. Вероятно, не таким, который Вам требуется.

• Пример: очень простой скрипт резервного копирования (более эффективный)

#!/bin/bash
OF=/var/my-backup-$(date +%Y%m%d).tgz #OF - Output File - выходной файл
tar -cZf $OF /home/me/

Данный скрипт вводит ещё одно понятие. Прежде всего, Вам следует разобраться со второй строкой. Обратите внимание на выражение '$(date +%Y%m%d)'. Если Вы запустите этот скрипт, то заметите, что он выполняет команду внутри скобок, перехватывая её вывод.

Обратите внимание, что в этом скрипте имя выходного файла будет ежедневно изменяться, исходя из формата ключа к команде date (+%Y%m%d). Вы можете поменять это заданием другого формата.

Другие примеры:

echo ls

echo $(ls)

Локальные переменные.

Локальные переменные могут быть созданы при использовании ключевого слова local.

#!/bin/bash
HELLO=Hello
function hello {
local HELLO=World
echo $HELLO
}
echo $HELLO
hello
echo $HELLO

Данного примера должно быть достаточно для отображения способов использования локальных переменных.

Функции.

Аналогично любому другому языку программирования, Вы можете использовать функции для группировки кусков кода более логичным способом, а также для практического применения волшебного искусства рекурсии.

Объявление функции - это только лишь запись function my_func { my_code }.

Вызов функции осуществляется аналогичным образом, что и вызов других программ. Вы просто пишете её имя.

• Пример функций.

#!/bin/bash
function quit {
exit
}
function hello {
echo Hello!
}
hello
quit
echo foo

В строках 2-4 содержится функция 'quit'. В строках 5-7 - функция 'hello'. Если Вам недостаточно понятен процесс, выполняемый данным скриптом, испытайте его!

Следует заметить, что совсем необязательно объявлять функции в каком-то определённом порядке.

Если Вы запустите скрипт, обратите внимание, что сначала вызывается функция 'hello', а затем функция 'quit'. Что касается программы, она никогда не достигает 10-й строки.

• Пример функций с параметрами.

#!/bin/bash
function quit {
exit
}
function e {
echo $1
}
e Hello
e World
quit
echo foo

Данный скрипт практически идентичен предыдущему. Главное отличие - это функция 'e'. Она выводит самый первый получаемый аргумент. Аргументы в функциях обрабатываются таким же образом, что и аргументы, переданные скрипту.

Интерфейсы пользователя.

• Использование select для создания простых меню

#!/bin/bash
OPTIONS="Hello Quit"
select opt in $OPTIONS; do
if [ "$opt" = "Quit" ]; then
echo done
exit
elif [ "$opt" = "Hello" ]; then
echo Hello World
else
clear
echo bad option
fi
done

Если Вы запустите этот скрипт, то увидите, что он является мечтой программиста о меню на текстовой основе. Вероятно, Вы заметите, что это очень похоже на конструкцию 'for', только вместо циклической обработки каждого "слова" в $OPTIONS программа опрашивает пользователя.

• Использование командной строки.

#!/bin/bash
if [ -z "$1" ]; then
echo используйте: $0 каталог
exit
fi
SRCD=$1 #SRCD - SouRCe Directory - исходный каталог
TGTD="/var/backups/" #TGTD - TarGeT Directory - конечный каталог
OF=home-$(date +%Y%m%d).tgz #OF - Output File - выходной файл
tar -cZf $TGTD$OF $SRCD

Вам должно быть понятно, что выполняет этот скрипт. Выражение в первом условном операторе проверяет, получила ли программа аргумент ($1). Если - нет, оно завершает работу программы, предоставляя пользователю небольшое сообщение об ошибке. Оставшаяся на данный момент часть скрипта, очевидно, является понятной.

Разное.

• Чтение пользовательского ввода с помощью read.

В некоторых случаях, возможно, возникнет необходимость попросить пользователя что-нибудь ввести. Существуют различные способы выполнения этого. Одним из способов является следующий:

#!/bin/bash
echo Введите, пожалуйста, Ваше имя
read NAME
echo "Привет, $NAME!"

В качестве варианта Вы можете получать сразу несколько значений с помощью read. Следующий пример поясняет это:

#!/bin/bash
echo "Введите, пожалуйста, Ваше имя и фамилию"
read FN LN #FN - First Name - имя; LN - Last Name - фамилия
echo "Hi! $LN, $FN !"

• Арифметические вычисления.

В командной строке (или оболочке) попробуйте ввести следующее:

echo 1 + 1

Если Вы рассчитываете увидеть '2', то будете разочарованы. Что следует выполнить, если возникает необходимость, чтобы BASH произвёл вычисления над Вашими числами? Решение заключается в следующем:

echo $((1+1))

В результате этого вывод будет более "логичным". Такая запись используется для вычисления арифметических выражений. Вы также можете выполнить это следующим образом:

echo $[1+1]

Если Вам необходимо использовать дроби или более сложную математику, то можно использовать bc для вычисления арифметических выражений.

Когда автор запустил "echo $[3/4]" в командной оболочке, она вернула значение 0. Это связано с тем, что если bash отвечает, он использует только целые значения. Если Вы запустите "echo 3/4|bc -l", оболочка вернёт правильное значение 0.75.

• Поиск bash.

Вы всегда используете #!/bin/bash .. Вы могли бы привести пример, каким образом можно обнаружить, где расположен bash. Предпочтительнее использовать 'locate bash', но locate имеется не на всех машинах. find ./ -name bash' из корневого каталога обычно срабатывает.

Можно проверить следующие расположения:
ls -l /bin/bash
ls -l /sbin/bash
ls -l /usr/local/bin/bash
ls -l /usr/bin/bash
ls -l /usr/sbin/bash
ls -l /usr/local/sbin/bash

(автор не способен сразу придумать какой-либо другой каталог... Он находил bash в большинстве этих мест на различных системах). Вы также можете попробовать 'which bash'.

• Получение возвратного значения программы.

В bash возвратное значение программы сохраняется в специальной переменной $?.

Данный пример иллюстрирует, как перехватить возвратное значение программы; автор предположил, что каталог dada не существует (это также предложил mike).

#!/bin/bash
cd /dada &> /dev/null
echo rv: $?
cd $(pwd) &> /dev/null
echo rv: $?

• Перехват вывода команды.

Этот небольшой скрипт представляет все таблицы из всех баз данных (предполагается, что у Вас установлен MySQL). Кроме того, следует подумать о способах преобразования команды 'mysql' для использования подходящего имени пользователя и пароля.

#!/bin/bash
DBS=mysql -uroot -e"show databases"
for b in $DBS ;
do
mysql -uroot -e"show tables from $b"
done

Полезные команды.

Этот раздел переписал Kees (смотрите раздел "Благодарность").

Некоторые из этих команд практически содержат полноценные командные языки. Здесь объясняются только основы таких команд. Для более подробной информации внимательно просмотрите man-страницы каждой команды.

sed (потоковый редактор)

Sed - это неинтерактивный редактор. Вместо того, чтобы изменять файл движением курсора на экране, следует использовать сценарий инструкций по редактированию для sed, а также имя редактируемого файла. Вы также можете рассматривать sed в качестве фильтра. Посмотрите на некоторые примеры:

$sed 's/to_be_replaced/replaced/g' /tmp/dummy

Sed заменяет строку 'to_be_replaced' строкой 'replaced', читая файл /tmp/dummy . Результат отправляется на стандартный вывод (обычно, на консоль), но Вы также можете добавить '> capture' в вышеуказанную строку, чтобы sed отправлял вывод в файл 'capture'.

$sed 12, 18d /tmp/dummy

Sed отображает все строки, за исключением строк с 12 по 18. Исходный файл этой командой не изменяется.

awk (манипулирование файлами данных, выборка и обработка текста)

Существует большое количество реализаций языка программирования AWK (наиболее распространенными интерпретаторами являются gawk из проекта GNU и "новый awk" mawk.) Принцип достаточно прост: AWK находится в поиске шаблона; для каждого подходящего шаблона выполняется какое-нибудь действие.

Автор повторно создал файл dummy, содержащий следующие строки:

"test123
test
tteesstt"

$awk '/test/ {print}' /tmp/dummy

test123

test

Шаблон, искомый AWK, это 'test', а действие, выполняемое AWK при обнаружении строки в /tmp/dummy с подстрокой 'test', это 'print'.

$awk '/test/ {i=i+1} END {print i}' /tmp/dummy

3

Если Вы находитесь в поиске нескольких шаблонов, замените текст между кавычками на '-f file.awk'. В этом случае, Вы можете записать все шаблоны и действия в файле 'file.awk'.

grep (выводит строки, соответствующие искомому шаблону)

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

$grep "look for this" /var/log/messages -c

12

Строка "look for this" была обнаружена 12 раз в файле /var/log/messages.

[ok, данный пример был фикцией, /var/log/messages был переделан :-)]

wc (считает строки, слова и байты)

В следующем примере можно заметить, что выводится не то, что мы ожидаем. В этом случае, файл dummy содержит следующий текст:

"bash introduction

howto test file"

$wc --words --lines --bytes /tmp/dummy

2 5 34 /tmp/dummy

wc не заботится о порядке параметров. Он всегда выводит их в стандартном порядке: <число строк><число слов><число байтов><имя файла>.

sort (сортирует строки текстового файла)

В этом случае, файл dummy содержит следующий текст:

"b
c
a"

$sort /tmp/dummy

Вывод выглядит следующим образом:

a
b
c

Команды не должны быть такими простыми :-)

bc (вычислительный язык программирования)


bc производит вычисления с командной строки (ввод из файла, но не через перенаправление или конвейер), а также из пользовательского интерфейса. Следующий пример показывает некоторые команды. Обратите внимание, что автор использовал bc с параметром -q, чтобы отказаться от вывода сообщения с приглашением.

$bc -q

1 == 5
0
0.05 == 0.05
1
5 != 5
0
2 ^ 8
256
sqrt(9)
3
while (i != 9) {
i = i + 1;
print i
}
123456789
quit

tput (инициализирует терминал или запрашивает базу данных terminfo)

Небольшая иллюстрация возможностей tput:

$tput cup 10 4

Приглашение командной строки появится в координатах (y10,x4).

$tput reset

Экран очищается и приглашение появляется в (y1,x1). Обратите внимание, что (y0,x0) - это левый верхний угол.

$tput cols

80
Отображает возможное количество символов в направлении по оси x.

Настоятельно рекомендуется быть с этими программами на "ты" (как минимум). Существует огромное количество небольших программ, которые предоставляют Вам возможность заняться настоящей магией в командной строке.

  Читайте в следующем номере:

За дружбу между ОСами - Пользователи все чаще задумываются о том, что система, предустановленная на их ПК, не обязательно является лучшей. Не все сразу переходят на "серьезную" альтернативу вроде Linux или FreeBSD - иногда даже выбор между Windows 9x и Windows 2000/XP не столь очевиден...
Делаем быстрый десктоп - Статья о том, как работать в графической среде Linux на старых компьютерах.
Оптимизация Linux - Советы по повышению быстродействия Linux. "Не стоит наивно полагать, что в конфигурации по умолчанию все прооптимизировано, ибо она настроена так, чтобы работать как на Пентиуме III с кучей прибамбасов, так и на старом 386..."
И многое другое! - Пишите на xoid26@linuxfreemail.com, какую информацию хотели бы вы видеть на страницах нашей рассылки, и, может быть, в следующем выпуске вы найдете именно то, что вам нужно!!

Если вы хотите что-то сказать по поводу информации, предоставленной в этом номере - добро пожаловать на форум проекта.

Если у вас есть любая информация по теме рассылки (статьи, истории, ссылки, etc), то пишите на Xoid26@linuxfreemail.com, и самое интересное будет опубликовано в следующих номерах.

/\ Наверх /\ OS Linux для начинающих: Первые шаги в мир Open source. Выпуск #14. © Xoid26 a.k.a. Slider111, 02/2002. D.zine by Xoid26


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное