Mon, Nov 22, 2010

IRC-meeting. Краткие итоги.


Итак, встреча состоялась. Спасибо всем тем, кто пришел.
Для тех кто пропустил мероприятие выкладываю логи:
Все это дело длилось три с половиной часа, так что как и обещал краткие выводы по пунктам:
  1. Новая Вики
    Новая Вики премодерируемая, поэтому ведется набор в команду "досматривающих", пока статья не досмотрена она не видна неавторизованным пользователям.
    Сейчас в команду добавлены наиболее активные редакторы, также принимаются добровольцы.
    Кроме того будет сформирована страница Команды Вики, на которую все желающие могут добавить себя в качестве ответственных за интересующий их раздел.
  2. Новые проекты сообщества
    Текущих проектов несколько:
    BSR
    Предпринята очередная попытка активизировать работу в русской багзилле.
    Было предложено 2 варианта использования:
    1. Как аггрегатор багов для английской багзиллы. Для этого требуется набрать команду "скаутов", которые будут не просто переводить баги, но и попытаются из воспроизвести, а также будут их в дальнейшем сопровождать в английской багзилле. Этот вариант сложно реализовать ввиду отсутствия людей. Если есть желающие - присоединяйтесь.
    2. Поделить багзиллу на разделы и использовать для отслеживания ошибок в разных сферах проекта: Вики, форуме, зеркалах, чате и пр. В каждом разделе будет свой ответственный. Этот вариант уже реализуется, так как фактически уже есть люди, отвечающие за разные сферы. Созданием разделов и раздачей прав занимается Gankov.
    Колонка в LinuxFormat
    Существует предварительная договоренность с редакцией LinuxFormat, на создание колонки, в которой будут публиковаться мнения участников сообществ на определенные темы. Страница делится на 4 части, в каждой - мнение участника сообщества одного из дистрибутивов на интересующую его тему/новость. Темы друг с другом не пересекаются и могут быть разными. Сейчас проект на стадии согласования с другими сообществами. Кроме того lxf все еще готовы принять материалы про особенности openSUSE (yast, zypper, obs, другие проекты), со слов главреда, не просто готовы, а очень ждут, ибо очень много материалов ubuntu-based. Ответственный за этот проект t0xa.
    ХВОСТ Magazine
    Создается журнал сообщества, полностью открытый. Сейчас уже набран материал на первый номер. Если есть желающие написать статью - обращаться к didencool, сейчас он выполняет все функции в журнале. На странице в Вики скоро будет размещен список вакансий, необходимых для дальнейшего развития.
  3. Цели, курс, организация и руководство
    Эти вопросы я объединю. Цели сообщества неплохо описаны в Вики. Сейчас наиболее выжные - поддержка пользователей и продвижение дистрибутива. Также хотелось бы плотнее сотрудничать с глобальным сообществом и сильнее влиять на направление развития дистрибутива.
    По поводу руководства.
    Сейчас уже есть несколько активных членов сообщества, занимающихся каждый своей частью проекта. Из них было решено сделать что-то вроде совета, по образу глобального проекта. Для согласования работы команд и представления openSUSE вне сообщества было решено выбрать координатора (или, как прозвучало на встрече "прокси-сервера" или "кальмара"). Обязанности и полномочия сейчас определяются. После составления списка обязанностей будут проведены выборы. Должность будет выборной.
  4. Меры предотвращения раскола сообщества.
    Текущие конфликты между разными сообществами были улажены. Сейчас единственной проблемой осталась обособленность каждого из проектов друг от друга. Было решено создать общий канал связи, в роли которого была предложена рассылка. Кроме того сейчас существует возможность публикации новостей на всех ресурсах, где есть члены сообщества: foo, ufo, lfr, o-s.ru. Правда это требует больше времени. Возможно публикование новостей на разных площадках будет включено в обязанности координатора. Сейчас данную функцию пока выполняю я.
  5. Конфликты между участниками сообщества.
    Все конфликты должны разрешаться на ранней стадии. Если не удается решить проблему сразу самостоятельно - о ней сообщается администрации. Это должно предотвратить накопление негатива и громкие скандалы.
  6. Амбасадоры
    Продолжаются поиски людей, желающих заняться амбасадорством и продвигать openSUSE в своем регионе. Были найдены люди в Украине, я решил попробовать в СПб. Очень интересуют регионы, если найдутся желающие - за разъяснениями обращаться к k0da.
  7. Книга
    Переведены руководства по KDE и GNOME их уже можно собирать, но пока возникли технические проблемы. Также немного переведена часть про безопасность, а вообще требуются люди, заинтересованные в переводе документации.

Sun, Nov 21, 2010

Встреча сообщества 21.11.10

Встреча состоялась.

Спасибо всем кто пришел.

Доступен протокол встречи:
Выдержку можно посмотреть здесь

Полный лог здесь

Mon, Nov 15, 2010

IRC-meeting of Russian openSUSE Community

На прошедшей неделе, после получения статуса openSUSE Member, мне пришло в голову организовать очередное IRC-собрание русскоязычного сообщества openSUSE. Пришло время отчитаться по этому поводу.
Итак, по результатам открытого голосования, в котором в этот раз приняло участие 14 человек, что не может не радовать, решено, что встреча пройдет в Воскресенье, 21.11.2010 в 18:00 по московскому времени (GMT+3).
IRC-сервер: irc.opensuse.org
IRC-канал: #opensuse.ru


Предварительный список тем:
  1. Новая Вики
  2. Новые проекты сообщества
  3. Цели сообщества
  4. Разобраться с курсом, руководством и организацией
  5. Меры предотвращения раскола сообщества
  6. Конфликты между участниками сообщества
  7. Амбасадоры
  8. Книга
Если у Вас есть предложения и замечания, высказать их можно в соответствующих темах:

По правилам проведения официальных митингов окончательный список тем должен быть утвержден не позднее, чем за 2 дня до даты проведения. Так что заинтересованным надо быть активнее. :)

Ждем всех заинтересованных в воскресенье...

Sat, Oct 30, 2010

История одного роутера

Я уже писал на страницах этого блога, что недавно преобрёл роутер D-Link DIR-300/NRU. Мне нужна была недорогая, быстронастраиваемая точка доступа, и хотя я был наслышан о проблемах с устройствами D-Link, привлекательный внешний вид, хороший функционал и цена в 1200 р. сделали своё дело.
Технические характеричтики устройства таковы:
Общие характеристики

  • Тип Wi-Fi точка доступа
  • Стандарт беспроводной связи 802.11n
  • Макс. скорость беспроводного соединения 150 Мбит/с

Прием/передача

  • Защита информации WEP, WPA, WPA2
  • Мощность передатчика 17 dBM
  • Радиус действия внутри помещения 100 м
  • Радиус действия вне помещения 400 м

VPN

  • Поддержка VPN pass through

Мониторинг и конфигурирование

  • Web-интерфейс

Опции точки доступа/моста

  • Коммутатор 4xLAN

Маршрутизатор

  • Маршрутизатор
  • Межсетевой экран (FireWall)
  • NAT
  • SPI
  • DHCP-сервер
  • Поддержка Dynamic DNS
  • Демилитаризованная зона (DMZ)
  • Статическая маршрутизация

Антенна

  • Количество внешних антенн 1 x 2 dBi
  • Тип внешней антенны съемная

Дополнительно

  • Размеры (ШxВxГ) 113x32x148 мм
  • Вес 246 г

Вся эта красота выглядит вот так:


Поставляется в небольшой коробке, куда кроме роутера входят: адаптер питания, подставка, настенное крепление, пачкорд, диск быстрой установки (естественно работающий только в Windows), инструкция, гарантийный талон и... текст лицензии GPL v2 (на английском), по которой распространяется программное обеспечение D-Link.
Web интерфейс роутера находится по адресу 192.168.0.1. Оформлен он довольно мило (:)), ориентирован на широкий круг пользователей - опции удобно разбиты по группам, все настройки обернуты в пошаговые мастера установки, но есть и режим для экспертов, где все можно настроить в одном окне.
С настройкой я справился довольно быстро, но в первые три дня выяснилась одна особенность - роутер раз в 10-15 минут разрывал p2p-соединения. Сначала я грешил на программы, ибо DC++ клиент я собственноручно компилил из GIT-репозитория, а Ktorrent стоит из Unstable, но опытным путём (подключением компьютера напрямую, в обход роутера) выяснилось, что виноват всё-таки роутер.
На форумах у людей наблюдался целый ворох проблем, наличие которых зависело от типа соединения и версии прошивки. У меня стояла прошивка версии 2.0.2, а соединения пробовал как через шлюз со статическим IP, так и через PPTP-туннель (провайдер предоставляет оба варианта). На официальном FTP-сервере D-Link я нашел версии прошивок 2.0.1 и 2.0.5beta - с первой проблема осталась, а со второй интернет вообще не поднялся.
Тогда я начал перерывать интернет на предмет наличия сторонних прошивок и набрел на сайт DD-WRT.
По информации с сайта "DD-WRT — это сторонняя разработка прошивки (микропрограммы) под лицензией GPL для множества ieee802.11a/b/g/h/n беспроводных маршрутизаторов, реализованных на чипах Broadcom и Atheros."
Там же я узнал, что мой роутер "основан на чипе Ralink RT3050 SoC, и по всем отчетам, включая «Dlink's FCC test report», его PCBA (печатная плата) точно такая же, как в DIR-600."
Внимание! Это относится к модели DIR-300/NRU (аппаратная ревизия B1), к модели DIR-300 (ревизия A1) НЕ применимо!
Установка сторонней прошивки идентична установке/обновлению оригинальной, с той лишь разницей, что образ берется не с FTP-сервера D-Link, а отсюда.
Установка проходит автоматически, в конце нее роутер перезагрузится и браузер сообщит, что страница недоступна - ничего страшного, просто адрес роутера поменялся на 192.168.1.1
По умолчанию прошивки dd-wrt используют логин admin c пустым паролем, настраивается все тоже быстро, правда тут нет таких мастеров как у D-Link да и язык интерфейса английский, но если уж у Вас хватило умения перепрошить девайс, то и с настройкой Вы легко справитесь.
При переходе по адресу 192.168.1.1 после настройки отображается подобный экран со статистикой устройства:


Новая прошивка добавляет ряд новых возможностей: промышленное шифрование Wi-Fi расширенные настройки DNS, блокировка сайтов по маске и расписанию, блокировка p2p трафика, учет трафика, серверы VPN, SSH, Telnet и многое другое. Но главное - стабильность, за месяц постоянного использования не было никаких разрывов и зависаний. Небольшой совет для тех, кто воспользуется этой инструкцией: не стоит забывать, что у машинки не самый мощный процессор, поэтому, нагрузив его кучей сервисов, можно столкнуться с подвисаниями. Кстати, ешё одно преимущество данного устройство - оно абсолютно не шумит и абсолютно не греется, даже после долгой работы под нагрузкой.
В итоге за небольшие деньги я получил стабильный роутер с функционалом старших моделей.

История одного роутера

Я уже писал на страницах этого блога, что недавно преобрёл роутер D-Link DIR-300/NRU. Мне нужна была недорогая, быстронастраиваемая точка доступа, и хотя я был наслышан о проблемах с устройствами D-Link, привлекательный внешний вид, хороший функционал и цена в 1200 р. сделали своё дело.
Технические характеричтики устройства таковы:
Общие характеристики

  • Тип Wi-Fi точка доступа
  • Стандарт беспроводной связи 802.11n
  • Макс. скорость беспроводного соединения 150 Мбит/с

Прием/передача

  • Защита информации WEP, WPA, WPA2
  • Мощность передатчика 17 dBM
  • Радиус действия внутри помещения 100 м
  • Радиус действия вне помещения 400 м

VPN

  • Поддержка VPN pass through

Мониторинг и конфигурирование

  • Web-интерфейс

Опции точки доступа/моста

  • Коммутатор 4xLAN

Маршрутизатор

  • Маршрутизатор
  • Межсетевой экран (FireWall)
  • NAT
  • SPI
  • DHCP-сервер
  • Поддержка Dynamic DNS
  • Демилитаризованная зона (DMZ)
  • Статическая маршрутизация

Антенна

  • Количество внешних антенн 1 x 2 dBi
  • Тип внешней антенны съемная

Дополнительно

  • Размеры (ШxВxГ) 113x32x148 мм
  • Вес 246 г

Вся эта красота выглядит вот так:


Поставляется в небольшой коробке, куда кроме роутера входят: адаптер питания, подставка, настенное крепление, пачкорд, диск быстрой установки (естественно работающий только в Windows), инструкция, гарантийный талон и... текст лицензии GPL v2 (на английском), по которой распространяется программное обеспечение D-Link.
Web интерфейс роутера находится по адресу 192.168.0.1. Оформлен он довольно мило (:)), ориентирован на широкий круг пользователей - опции удобно разбиты по группам, все настройки обернуты в пошаговые мастера установки, но есть и режим для экспертов, где все можно настроить в одном окне.
С настройкой я справился довольно быстро, но в первые три дня выяснилась одна особенность - роутер раз в 10-15 минут разрывал p2p-соединения. Сначала я грешил на программы, ибо DC++ клиент я собственноручно компилил из GIT-репозитория, а Ktorrent стоит из Unstable, но опытным путём (подключением компьютера напрямую, в обход роутера) выяснилось, что виноват всё-таки роутер.
На форумах у людей наблюдался целый ворох проблем, наличие которых зависело от типа соединения и версии прошивки. У меня стояла прошивка версии 2.0.2, а соединения пробовал как через шлюз со статическим IP, так и через PPTP-туннель (провайдер предоставляет оба варианта). На официальном FTP-сервере D-Link я нашел версии прошивок 2.0.1 и 2.0.5beta - с первой проблема осталась, а со второй интернет вообще не поднялся.
Тогда я начал перерывать интернет на предмет наличия сторонних прошивок и набрел на сайт DD-WRT.
По информации с сайта "DD-WRT — это сторонняя разработка прошивки (микропрограммы) под лицензией GPL для множества ieee802.11a/b/g/h/n беспроводных маршрутизаторов, реализованных на чипах Broadcom и Atheros."
Там же я узнал, что мой роутер "основан на чипе Ralink RT3050 SoC, и по всем отчетам, включая «Dlink's FCC test report», его PCBA (печатная плата) точно такая же, как в DIR-600."
Внимание! Это относится к модели DIR-300/NRU (аппаратная ревизия B1), к модели DIR-300 (ревизия A1) НЕ применимо!
Установка сторонней прошивки идентична установке/обновлению оригинальной, с той лишь разницей, что образ берется не с FTP-сервера D-Link, а отсюда.
Установка проходит автоматически, в конце нее роутер перезагрузится и браузер сообщит, что страница недоступна - ничего страшного, просто адрес роутера поменялся на 192.168.1.1
По умолчанию прошивки dd-wrt используют логин admin c пустым паролем, настраивается все тоже быстро, правда тут нет таких мастеров как у D-Link да и язык интерфейса английский, но если уж у Вас хватило умения перепрошить девайс, то и с настройкой Вы легко справитесь.
При переходе по адресу 192.168.1.1 после настройки отображается подобный экран со статистикой устройства:


Новая прошивка добавляет ряд новых возможностей: промышленное шифрование Wi-Fi расширенные настройки DNS, блокировка сайтов по маске и расписанию, блокировка p2p трафика, учет трафика, серверы VPN, SSH, Telnet и многое другое. Но главное - стабильность, за месяц постоянного использования не было никаких разрывов и зависаний. Небольшой совет для тех, кто воспользуется этой инструкцией: не стоит забывать, что у машинки не самый мощный процессор, поэтому, нагрузив его кучей сервисов, можно столкнуться с подвисаниями. Кстати, ешё одно преимущество данного устройство - оно абсолютно не шумит и абсолютно не греется, даже после долгой работы под нагрузкой.
В итоге за небольшие деньги я получил стабильный роутер с функционалом старших моделей.

История одного роутера

Я уже писал на страницах этого блога, что недавно преобрёл роутер D-Link DIR-300/NRU. Мне нужна была недорогая, быстронастраиваемая точка доступа, и хотя я был наслышан о проблемах с устройствами D-Link, привлекательный внешний вид, хороший функционал и цена в 1200 р. сделали своё дело.
Технические характеричтики устройства таковы:
Общие характеристики

  • Тип Wi-Fi точка доступа
  • Стандарт беспроводной связи 802.11n
  • Макс. скорость беспроводного соединения 150 Мбит/с

Прием/передача

  • Защита информации WEP, WPA, WPA2
  • Мощность передатчика 17 dBM
  • Радиус действия внутри помещения 100 м
  • Радиус действия вне помещения 400 м

VPN

  • Поддержка VPN pass through

Мониторинг и конфигурирование

  • Web-интерфейс

Опции точки доступа/моста

  • Коммутатор 4xLAN

Маршрутизатор

  • Маршрутизатор
  • Межсетевой экран (FireWall)
  • NAT
  • SPI
  • DHCP-сервер
  • Поддержка Dynamic DNS
  • Демилитаризованная зона (DMZ)
  • Статическая маршрутизация

Антенна

  • Количество внешних антенн 1 x 2 dBi
  • Тип внешней антенны съемная

Дополнительно

  • Размеры (ШxВxГ) 113x32x148 мм
  • Вес 246 г

Вся эта красота выглядит вот так:


Поставляется в небольшой коробке, куда кроме роутера входят: адаптер питания, подставка, настенное крепление, пачкорд, диск быстрой установки (естественно работающий только в Windows), инструкция, гарантийный талон и... текст лицензии GPL v2 (на английском), по которой распространяется программное обеспечение D-Link.
Web интерфейс роутера находится по адресу 192.168.0.1. Оформлен он довольно мило (:)), ориентирован на широкий круг пользователей - опции удобно разбиты по группам, все настройки обернуты в пошаговые мастера установки, но есть и режим для экспертов, где все можно настроить в одном окне.
С настройкой я справился довольно быстро, но в первые три дня выяснилась одна особенность - роутер раз в 10-15 минут разрывал p2p-соединения. Сначала я грешил на программы, ибо DC++ клиент я собственноручно компилил из GIT-репозитория, а Ktorrent стоит из Unstable, но опытным путём (подключением компьютера напрямую, в обход роутера) выяснилось, что виноват всё-таки роутер.
На форумах у людей наблюдался целый ворох проблем, наличие которых зависело от типа соединения и версии прошивки. У меня стояла прошивка версии 2.0.2, а соединения пробовал как через шлюз со статическим IP, так и через PPTP-туннель (провайдер предоставляет оба варианта). На официальном FTP-сервере D-Link я нашел версии прошивок 2.0.1 и 2.0.5beta - с первой проблема осталась, а со второй интернет вообще не поднялся.
Тогда я начал перерывать интернет на предмет наличия сторонних прошивок и набрел на сайт DD-WRT.
По информации с сайта "DD-WRT — это сторонняя разработка прошивки (микропрограммы) под лицензией GPL для множества ieee802.11a/b/g/h/n беспроводных маршрутизаторов, реализованных на чипах Broadcom и Atheros."
Там же я узнал, что мой роутер "основан на чипе Ralink RT3050 SoC, и по всем отчетам, включая «Dlink's FCC test report», его PCBA (печатная плата) точно такая же, как в DIR-600."
Внимание! Это относится к модели DIR-300/NRU (аппаратная ревизия B1), к модели DIR-300 (ревизия A1) НЕ применимо!
Установка сторонней прошивки идентична установке/обновлению оригинальной, с той лишь разницей, что образ берется не с FTP-сервера D-Link, а отсюда.
Установка проходит автоматически, в конце нее роутер перезагрузится и браузер сообщит, что страница недоступна - ничего страшного, просто адрес роутера поменялся на 192.168.1.1
По умолчанию прошивки dd-wrt используют логин admin c пустым паролем, настраивается все тоже быстро, правда тут нет таких мастеров как у D-Link да и язык интерфейса английский, но если уж у Вас хватило умения перепрошить девайс, то и с настройкой Вы легко справитесь.
При переходе по адресу 192.168.1.1 после настройки отображается подобный экран со статистикой устройства:


Новая прошивка добавляет ряд новых возможностей: промышленное шифрование Wi-Fi расширенные настройки DNS, блокировка сайтов по маске и расписанию, блокировка p2p трафика, учет трафика, серверы VPN, SSH, Telnet и многое другое. Но главное - стабильность, за месяц постоянного использования не было никаких разрывов и зависаний. Небольшой совет для тех, кто воспользуется этой инструкцией: не стоит забывать, что у машинки не самый мощный процессор, поэтому, нагрузив его кучей сервисов, можно столкнуться с подвисаниями. Кстати, ешё одно преимущество данного устройство - оно абсолютно не шумит и абсолютно не греется, даже после долгой работы под нагрузкой.
В итоге за небольшие деньги я получил стабильный роутер с функционалом старших моделей.

Wed, Oct 13, 2010

Зелёный робот в "зелёном" дистрибутиве

Не так давно я стал счастливым обладателем коммуникатора LG gt540 с операционной системой Android на борту. Версия моего андрофона - 2.1, официальное обновление до 2.1 стало доступно буквально вчера (изначально телефон был с андроидом 1.6). Здесь же хочу рассказать, какие перемены принес в мою IT жизнь этот коммуникатор. Это мой первый опыт использования коммуникаторов, но уже после пары недель я понял, что телефон достаточно прожорлив по части трафика, и чтобы не разориться, оплачивая счета от Мегафона, нужно срочно организовать дома Wi-Fi точку доступа. Так у меня появился роутер D-Link DIR-300/NRU и мне пришлось полностью перенастроить сеть в своём oS 11.3. Так как роутер имеет встроенный фаервол необходимость в фаерволе oS отпала. Было даже немного жаль удалять имеющиеся правила :) В итоге количество моих Linux-устройств увеличилось до 3-х единиц (я почти уверен, что в роутере тоже стоит Linux, ну а про Android и говорить нечего - всё становится ясно, стоит лишь поставить файловый менеджер...).

Андроид, как детище Гугла очень тяготеет к облакам - вся синхронизация (контакты, календарь, почта и пр.) происходит через гуглоаккаунт. LG выпустила собственную утилиту для всего этого, но, естественно, только под Windows. Мне же хотелось прозрачной синхронизации с моим десктопом и КДЕ на нём. Вот тут-то я впервые серьёзно взглянул на Akonadi. Где-то читал, что под Akonadi написаны модули для синхронизации со службами Гугла. Беглый осмотр репозиториев закончился следующим: имеющийся в фактори пакет требовал KDE < 4.5, а найденный в Webpin пакет следующей версии - уже KDE > 4.5.2. Поразмышляв, решил рискнуть и перевел всю систему на unstable ветку.

Установилось все без проблем, и за первые 10 минут ничего не вылетело :) Я приступил к изучению новых Кед. Самое большое изменение претерпел KDE-PIM: все приложения из него были переписаны под Akonadi и теперь, даже POP и IMAP аккаунты в Kmail настраиваются как источники Akonadi. Работает это все не без шероховатостей, но в целом стабильно, кроме того обновления пакетов выходят раз в 1 - 2 дня. Модули, ради которых я и затевал весь этот переход, установились без проблем, и через пару минут я добился желаемого результата - полного переноса адресной книги телефона на компьютер, а календаря - на телефон.
Кроме PIM заметно изменилась система нотификации - все стало выглядеть аккуратней и удобней. Самые новые события чуть больше, чем остальные в родстере, навигация по родстеру стала удобнее - он больше не выезжает из панели почти до верхнего края экрана, также стала плавнее анимация.

Не обошлось и без ложки дёгтя - все таки это разрабатываемая ветвь - наличествовали глюки с Lancelot-ом, Solid-ом и Kmix при старте системы упорно глушил звук (режим mute) - отправил соответствующие баг-репорты, на все 3 уже ответили, и работа по исправлению уже идёт...

Ну и напоследок некоторые фишки Android 2.1, обнаруженные мной менее чем за сутки пользования, которых не было в 1.6: в меню синхронизации можно настроить несколько аккаунтов (раньше только один гуглоакк), причем как несколько аккаунтов Гугла, так и аккаунты Твиттера, Фейсбука и MS Exchange(!), кроме того теперь стало возможным установить официальное приложения Skype, его аккаунт также добавляется к аккаунтам синхронизации и все данные поступают в единую адресную книгу, таким образом с любым контактом можно связаться по любому доступному в данный момент протоколу, что очень удобно. Про зввонки на Skype через Wi-Fi я уже и не говорю - намного удобней, чем через компьютер и гарнитуру, разве что веб-камеры нет.

Зелёный робот в "зелёном" дистрибутиве

Не так давно я стал счастливым обладателем коммуникатора LG gt540 с операционной системой Android на борту. Версия моего андрофона - 2.1, официальное обновление до 2.1 стало доступно буквально вчера (изначально телефон был с андроидом 1.6). Здесь же хочу рассказать, какие перемены принес в мою IT жизнь этот коммуникатор. Это мой первый опыт использования коммуникаторов, но уже после пары недель я понял, что телефон достаточно прожорлив по части трафика, и чтобы не разориться, оплачивая счета от Мегафона, нужно срочно организовать дома Wi-Fi точку доступа. Так у меня появился роутер D-Link DIR-300/NRU и мне пришлось полностью перенастроить сеть в своём oS 11.3. Так как роутер имеет встроенный фаервол необходимость в фаерволе oS отпала. Было даже немного жаль удалять имеющиеся правила :) В итоге количество моих Linux-устройств увеличилось до 3-х единиц (я почти уверен, что в роутере тоже стоит Linux, ну а про Android и говорить нечего - всё становится ясно, стоит лишь поставить файловый менеджер...).

Андроид, как детище Гугла очень тяготеет к облакам - вся синхронизация (контакты, календарь, почта и пр.) происходит через гуглоаккаунт. LG выпустила собственную утилиту для всего этого, но, естественно, только под Windows. Мне же хотелось прозрачной синхронизации с моим десктопом и КДЕ на нём. Вот тут-то я впервые серьёзно взглянул на Akonadi. Где-то читал, что под Akonadi написаны модули для синхронизации со службами Гугла. Беглый осмотр репозиториев закончился следующим: имеющийся в фактори пакет требовал KDE < 4.5, а найденный в Webpin пакет следующей версии - уже KDE > 4.5.2. Поразмышляв, решил рискнуть и перевел всю систему на unstable ветку.

Установилось все без проблем, и за первые 10 минут ничего не вылетело :) Я приступил к изучению новых Кед. Самое большое изменение претерпел KDE-PIM: все приложения из него были переписаны под Akonadi и теперь, даже POP и IMAP аккаунты в Kmail настраиваются как источники Akonadi. Работает это все не без шероховатостей, но в целом стабильно, кроме того обновления пакетов выходят раз в 1 - 2 дня. Модули, ради которых я и затевал весь этот переход, установились без проблем, и через пару минут я добился желаемого результата - полного переноса адресной книги телефона на компьютер, а календаря - на телефон.
Кроме PIM заметно изменилась система нотификации - все стало выглядеть аккуратней и удобней. Самые новые события чуть больше, чем остальные в родстере, навигация по родстеру стала удобнее - он больше не выезжает из панели почти до верхнего края экрана, также стала плавнее анимация.

Не обошлось и без ложки дёгтя - все таки это разрабатываемая ветвь - наличествовали глюки с Lancelot-ом, Solid-ом и Kmix при старте системы упорно глушил звук (режим mute) - отправил соответствующие баг-репорты, на все 3 уже ответили, и работа по исправлению уже идёт...

Ну и напоследок некоторые фишки Android 2.1, обнаруженные мной менее чем за сутки пользования, которых не было в 1.6: в меню синхронизации можно настроить несколько аккаунтов (раньше только один гуглоакк), причем как несколько аккаунтов Гугла, так и аккаунты Твиттера, Фейсбука и MS Exchange(!), кроме того теперь стало возможным установить официальное приложения Skype, его аккаунт также добавляется к аккаунтам синхронизации и все данные поступают в единую адресную книгу, таким образом с любым контактом можно связаться по любому доступному в данный момент протоколу, что очень удобно. Про зввонки на Skype через Wi-Fi я уже и не говорю - намного удобней, чем через компьютер и гарнитуру, разве что веб-камеры нет.

Mon, Oct 11, 2010

Краткое введение в программирование на Bash - часть I


Данное введение в программирование на bash прельстило меня своей краткостью и содержательностью. В то же время я изменил некоторые примеры, потому что они делали слегка не то, что ожидается новичками. Начинающим текст будет полезен как отправная точка для начала написания скриптов. Опытным - как справочник. Удачного чтения!
Выражаю также благодарность Владимиру Черному (начальнику отдела образовательных проектов ALT Linux) за внесенные в текст правки.


Тема программирования на bash из разряда тех, которые могут быть рассмотрены и в пару, и в сотни страниц. Гарольд Родригес (Harold Rodriguez) объясняет эту тему в приведенном ниже руководстве из двух частей. Его прекрасный и яркий стиль позволил ему охватить все существенные черты программирования на bash буквально на нескольких страницах.
Если вы никогда не программировали на bash ранее - сейчас самое время начать. Даже если у вас мало знаний о том, что такое bash, вы вполне можете посмотреть на множество интересных скриптов, разбираемых Гарольдом.
Введение
Подобно остальным оболочкам, доступным в Linux, Bourne Again shell (bash) является не только, собственно, командной оболочкой, но и языком для написания сценариев (скриптов) (слова «сценарий» и «скрипт» обычно являются синонимами - прим. перев.). Скрипты позволяют в полной мере использовать возможности оболочки и автоматизировать множество задач, которые иначе потребуют для своего выполнения ввода множества команд. Многие программы, работающие внутри вашего компьютера с Linux - это скрипты. Если вы захотите узнать, как они работают, или изменить их, важно понимать их синтаксис и семантику. Кроме того, понимая язык bash, вы сможете писать свои собственные программы, чтобы выполнять разные задачи теми способами, которые выберете сами.

Так все-таки программирование (programming) или написание скриптов (scripting)?
Новичков в программировании, как правило, озадачивает разница между, собственно, программированием и языками скриптов. Программы, написанные на каких-то языках программирования, обычно гораздо более мощные по возможностям и работают намного быстрее, чем программы, написанные на языках сценариев. Примеры языков программирования - C, C ++ и Java. Создание программы на каком-либо языке программирования обычно начинается с написания исходного кода (текстовый файл, содержащий инструкции о том, как будет работать окончательная программа), затем его необходимо скомпилировать (собрать) в исполняемый файл. Этот исполняемый файл не так легко переносить между различными операционными системами. Например, если вы напишете на программу на C для Linux, вы не сможете запустить ее в Windows. Чтобы сделать это, вам придется перекомпилировать исходный код под Windows. Написание скрипта также начинается с написания исходного кода, который не компилируется в исполняемый файл. Вместо этого интерпретатор оболочки последовательно читает инструкции в файле исходного кода и выполняет их. К сожалению, поскольку интерпретатор должен читать каждую инструкцию, скорость исполнения скрипта обычно медленнее (намного медленнее - прим. перев.), чем у скомпилированной программы. Основным преимуществом скриптов является то, что вы можете легко переносить исходный файл в любую операционную систему и просто запускать их (естественно при наличии интерпретатора для этой операционной системы - прим. перев.).
Bash - это язык сценариев. Он отлично подходит для написания небольших программ, но если вы планируете делать какие-то мощные приложения, выбор для этого какого-либо языка программирования предпочтительнее для вас. Другие примеры скриптовых языков Perl, Lisp, и Tcl.

Что нужно знать для написания своих скриптов?
Для этого необходимо знание основных команд Linux. Например, вы должны знать, как копировать, перемещать и создавать новые файлы. Обязательно умение использовать какой-либо текстовый редактор. Существуют три основных текстовых редактора в Linux: vi, emacs и pico (автор еще забыл nano, который лучше всего подходит начинающим, если не учитывать еще и mcedit. - Прим. перев.). Если вы не знакомы с vi или emacs, используйте pico или другой простой в использовании текстовый редактор.

Внимание!!!
Не следует учиться программировать на bash из-под пользователя root! В противном случае - может случиться все что угодно! Я не буду нести никакой ответственности, если вы случайно допустите ошибку и испортите вашу систему. Вы предупреждены! Используйте учетную запись обычного пользователя без каких-либо привилегий. Вы можете даже создать нового пользователя только для обучения написанию сценариев. Таким образом, худшее, что произойдет в данном случае — это исчезновение данных в каталоге этого пользователя.

Ваша первая программа на Bash
Нашей первой программой будет классическая «Hello World». Конечно, если уже вы программировали раньше, вы должно быть устали от таких примеров. Однако это - традиция и кто я такой, чтобы менять ее? Программа «Hello World» просто выводит слова «Hello World» на экран. Запустите текстовый редактор и наберите в нем следующее:

#!/bin/bash
echo "Hello World"

Первая строка сообщает Linux использовать интерпретатор bash для запуска этого скрипта. В этом случае, bash находится в каталоге /bin. Если у вас bash находится где-то еще, сделайте соответствующие изменения в данной строке. Явное указание интерпретатора очень важно, удостоверьтесь еще раз, что указали его, поскольку данная строка говорит Linux какой именно интерпретатор нужно использовать для выполнения инструкций в скрипте. Следующее, что нужно сделать, это сохранить скрипт. Назовем его hello.sh. После этого вам нужно сделать скрипт исполняемым:

$ chmod u+x hello.sh

Если вы не понимаете, что делает эта команда, прочтите справочную страницу команды chmod:

$ man chmod

Как только это будет сделано, вы сможете запустить программу, просто набрав ее название:

$ ./hello.sh
Hello World

Получилось! Это ваша первая программа! И хотя она скучная и не делает ничего полезного, она показывает как именно все работает. Просто запомните эту простую последовательность действий: напишите код, сохраните файл, сделайте его исполняемым с помощью chmod и запустите.

Команды, команды и команды
Что именно делает ваша первая программа? Она печатает на экран слова «Hello World». Каким образом она это делает? Она использует команды. В нашей программе мы написали только одну команду - echo «Hello World». Что именно тут команда? echo. Эта программа принимает один аргумент и печатает его на экран.
Аргументом является все, что следует после ввода названия программы. В нашем случае «Hello World» это и есть аргумент, переданный команде echo. При вводе команды ls /home/, аргументом команды ls является /home. Ну и что это все означает? А означает это то, что если у вас есть программа, которая принимает какой-то аргумент и выводит что-то на экран, вы можете использовать ее вместо echo. Предположим, что у нас есть программа под названием foo. Эта программа будет принимать один аргумент (строку из слов) и печатать их на экран. Тогда мы можем переписать нашу программу вот так:

#!/bin/bash
foo
"Hello World"

Сохраните ее, сделайте исполняемой и перезапустите ее (примечание для новичков - этот пример работать не будет. - Прим. перев.):

$ ./hello
Hello World

Точно такой же результат. Использовался ли тут какой-то уникальный код? Нет. Написали ли мы какую-то программу? Нет, если только вы не являетесь автором программы echo. Все, что вы сделали - просто встроили программу echo в наш скрипт и снабдили ее аргументом. Примером альтернативы использования команды echo в реальном программировании является команда printf, которая имеет больше возможностей, если вы знакомы с программированием на C. Ну и на самом деле, точно такой же результат можно было бы получить и без написания скрипта:

$ echo "Hello World”
Hello World

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

Другие полезные программы
Сейчас мы напишем программу, которая переместит все файлы в каталог, удалит его вместе с содержимым, а затем создаст это каталог заново. Это может быть сделано с помощью следующих команд (В примере, приведенном в оригинале автор показывает, что не зря рекомендовал делать приведенные упражнения под специально созданным пользователем. Результатом выполнения данной последовательности команд будет чистый каталог, в котором вы работаете. Скорее всего это будет ваша домашняя директория. Поэтому, если вы НЕ хотите удаления всех файлов в ней - НЕ выполняйте команды из оригинала статьи. А лучше последуйте совету автора и создайте отдельного пользователя специально для тренировки написания скриптов. Этот пример я немного расширил и теперь он не такой опасный. Прим. перев.):

$ touch file1
$ mkdir trash
$ mv
file1 trash
$ rm -rf trash
$ mkdir trash

Вместо того, чтобы вводить это все в интерактивном режиме, напишем скрипт, выполняющий эти команды:

#!/bin/bash
touch file1
mkdir trash
mv
file1 trash
rm -rf trash
mkdir trash
echo “
Файл удален!

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

Комментарии
Комментарии помогают сделать ваш код более читабельным. Они не влияют на то, что выводит программа. Они написаны специально для того, чтобы вы их прочли. Все комментарии в Bash начинаются с хэш-символа #, за исключением первой строки (#!/bin/bash), имеющей специальное назначение. Первая строка - не комментарий. Возьмем для примера следующий код:

#!/bin/bash
# Эта программа считает от 1 до 10:
for i in 1 2 3 4 5 6 7 8 9 10; do
echo $i
done

Даже если вы пока не понимаете скрипты на Bash, вы сразу же поймете, что делает приведенный выше пример, благодаря комментарию. Комментирование кода - хорошая практика. Со временем вы поймете, что, если вам нужно будет поддерживать ваши скрипты, то при наличии комментированного кода - делать это станет легче.

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

#!/bin/bash
x=12
echo ”
Значение переменной x - $x”

Здесь мы присвоили переменной x значение 12. Строка echo “Значение переменной х - $x” напечатает текущее значение x. При определении переменной не допускается наличие каких-то пробелов между именем переменной и оператором присваивания: "=". Синтаксис следующий:
имя_переменной=ее_значение.
Обращение к переменным выполняется с помощью префикса "$" перед именем переменной. Именно таким образом мы получаем доступ к значению переменной х с помощью команды echo $x.
Есть два типа переменных - локальные и переменные окружения. Переменные окружения устанавливаются системой и имеют специальной назначение. Обычно их значение может быть выведено с помощью команды echo. Например, если ввести:

$ echo $SHELL
/bin/bash

Вы получили имя оболочки, запущенной в данный момент. Переменные среды задаются в файле /etc/profile и в ~/.bash_profile. Команда echo может применяться для проверки текущего значения переменной.

Примечание: задание переменных среды подробно описано в этой статье - "Как задавать переменные среды" . В статье также описаны некоторые особенности оболочки Bash.

Если вы все еще возникают проблемы с пониманием того зачем нужно использовать переменные, приведем пример:

#!/bin/bash
echo "Значение х - 12".
echo "У меня есть 12 карандашей".
echo "Он сказал мне, что значение х равно 12".
echo "Мне 12 лет."
echo "Как получилось, что значение х равно 12?
"

Хорошо, теперь предположим, что вы решите поменять значение х на 8 вместо 12. Что для этого нужно сделать? Вы должны изменить все строки кода, в которых говорится, что х равно 12. Но погодите... Есть другие строки кода, где упоминается это число, поэтому простую автозамену использовать не получится. Теперь приведем аналогичный пример, только с использованием переменных:

#!/bin/bash
x=12 #
задаем переменной х значение 12
echo "
Значение х = $х"
echo "У меня есть 12 карандашей"
echo "Он сказал мне, что значение х
равно $х"
echo "Мне 12 лет"
echo "Как получилось, что значение х равно $x?"

Здесь мы видим, что $x выводит текущее значение переменной х равное 12. Поэтому теперь, если вы хотите задать новое значение х равное 8, то все что вам нужно сделать, это изменить одну строчку с х=12 на х=8, и в выводе все строки с упоминанием x также изменяться. Поэтому вам не нужно руками модифицировать остальные строки. Как вы увидите позже, переменные имеют и другие способы применения.

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

#!/bin/bash
cp /etc/foo .
echo ”
Готово

Это небольшой скрипт, назовем его bar.sh, копирует файл с именем /etc/foo в текущий каталог и выводит «Готово» на экране. Эта программа будет работать при одном условии - файл /etc/foo должен существовать. В противном случае вот что произойдет:
$./bar.sh
cp: /etc/foo: No such file or directory
Готово


Таким образом, как вы видите, есть проблема. Не у каждого, кто будет запускать вашу программу, будет файл /etc/foo. Наверное, было бы лучше, если б ваша программа сначала проверяла наличие данного файла, а затем при положительном ответе - выполняла бы копирование, в противном случае - просто бы завершала работу. В псевдо-коде это выглядит так:

если /etc/foo существует, то
скопировать /etc/
foo в текущую директорию
напечатать "Готово" на экране
в противном случае,
напечатать на экране "Этот файл не существует"
выход

Можно ли это сделать в Bash? Конечно! Набор управляющих операторов Bash включает в себя: if, while, until, for и case. Каждый из этих операторов является парным, то есть начинается он одним тегом и заканчивается другим. Например, если условный оператор if начинается с if и заканчивается fi. Управляющие операторы - это не отдельные программы в системе, они встроены в bash.

if … else … elif … fi
Это один из наиболее распространенных операторов. Он позволяет программе принимать решения следующим образом - «если условие верно - делаем одно, если нет - делаем что-то другое». Чтобы эффективно его использовать, сначала нужно научиться пользоваться командой test. Эта программа выполняет проверку условия (например, существует ли файл, есть ли необходимые права доступа). Вот переписанный вариант bar.sh :

#!/bin/bash
if test -f /etc/foo
then
# Файл существует, копируем его и печатаем сообщение на экране
cp /etc/foo .
echo "Готово".
else # Файл не существует, поэтому мы печатаем сообщение
# и завершаем работу
echo "Этот файл не существует."
exit
fi

Обратите внимание на отступы строки после then и else. Они не являются обязательными, но зато делают чтение кода гораздо более простым в том смысле, что делают логику программы более наглядной. Теперь запустите программу. Если у вас есть файл /etc/foo - он будет скопирован, в противном случае будет напечатано сообщение об ошибке. Команда test проверяет существование файла. Ключ -f проверяет, является ли аргумент обычным файлом. Ниже приведен список опций test (Не стоит пытаться запомнить их все, т.к. это все равно нереально. Его всегда можно посмотреть в руководстве команды test - man test. Прим. перев.):

Ключи команды test:
-d проверяет наличие файла и то, что он является каталогом
-e проверяет существование файла
-f проверяет наличие файла и то, что это обычный файл
-g проверяет наличие у файла SGID-бита
-r проверяет наличие файла и то, что он доступен на чтение
-s проверяет наличие файла и то, что его размер больше нуля
-u проверяет наличие у файла SUID-бита
-w проверяет наличие файла и то, что он доступен на запись
-x проверяет наличие файла и наличие у него прав на запуск

Оператор else используется, когда вы хотите, чтобы ваша программа еще что-то делала, если первое условие не выполняется. Существует также оператор elif, который может использоваться вместо еще одного if. elif означает "else if". Он используется, когда первое условие не выполняется, и вы хотите проверить еще одно условие.

Если вам не нравится приведенная форма записи if и test, есть сокращенный вариант.
Например, код:

if test -f /etc/foo
then

Можно записать вот так:
if [ -f /etc/foo ]; then

Квадратные скобки - это еще один вариант записи test. Если у вас есть опыт в программировании на C, этот синтаксис для вас может быть более удобным. Обратите внимание на наличие пробелов до и после каждой из скобок (Наличие пробелов объясняется просто: открывающая квадратная скобка - это команда оболочки. В этом можно легко убедиться набрав в консоли команду which [ . А раз это отдельная команда, то ее нужно отделить пробелами от остальных опций. - Прим. перев.). Точка с запятой: ";" говорит оболочке о завершении одного оператора и начале следующего. Все, что находится после этого символа будет работать так, как будто он находится на отдельной строке. Это делает код более удобным для чтения и, естественно, что такая запись необязательна. Если вы предпочитаете другой вариант записи - then можно сразу поместить в другой строке.
Если вы используете переменные - их нужно помещать в кавычки. Например:

if [ "$name" -eq 5 ]; then

оператор -eq будет объяснен далее в этой статье.

while … do … done
Оператор while используется для организации циклов. Он работает так «пока (while) условие истинно, делать что-то». Рассмотрим это на примере:

#!/bin/bash
while true; do
echo "Нажмите CTRL-C для выхода."
done

true - это тоже программа. Единственное, что она тут делает - это запускает тело цикла снова и снова. Использование true считается медленным, потому что ваш скрипт должен запускать ее раз за разом. Можно использовать альтернативный вариант:

#!/bin/bash
while :; do
echo "Нажмите CTRL-C для выхода."
done

Это позволяет добиться точно такого же эффекта, но быстрее, потому что «:» - это встроенная функция bash. Единственное отличие состоит в принесении в жертву читабельности кода. Используйте из приведенных вариантов тот, который вам нравится больше. Ниже приведен гораздо более полезный вариант использования переменных:

#!/bin/bash
x=0;
while [ "$x" -le 10 ]; do
echo "Текущее значение х: $ х"
# Увеличиваем значение х:
x=$(expr $x + 1)
sleep 1
done

Здесь мы используем для проверки состояния переменной x запись с квадратными скобками. Опция -le означает «меньше или равно (less or equal)». Говоря обычным языком приведенный код говорит: «пока (while) х меньше или равен 10, выводить на экран текущее значение х, после чего добавлять к текущему значению х единицу». Оператор sleep 1 приостанавливает выполнение программы на одну секунду.

Ниже приведен список возможных операций сравнения целых чисел (полный список приведен в man test. Прим. перев.):

x -eq y x = y (equal)
x -ne y x не равен y (not equal)
x -gt y x больше, либо равен y (greater than)
x -lt y x меньше, либо равен y (lesser than)

Операторы сравнения строк:
x = y строка x идентична y
x != y строка х не совпадает y
-n x выражение истинно, если строка х ненулевой длины
-z x выражение истинно, если строка х имеет нулевую длину

Скрипт, приведенный выше, нетрудно понять, за исключением, может быть, только этой строки:

x=$(expr $x + 1)

Комментарий приведенный выше он говорит нам, что он увеличивает х на 1. Но что означает запись $ (...)? Это переменная? Нет. На самом деле это способ сказать оболочке, что вы хотите запустить команду expr $x + 1, и присвоить результат ее выполнения - х. Любая команда, заключенная в $ (...) будет выполняться:

#!/bin/bash
me=$(whoami)
echo "Привет! Меня зовут $me"

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

#!/bin/bash
echo "Привет! Меня зовут $(whoami)"

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

until … do … done
Оператор until применяет способом аналогичным приведенному выше while. Разница лишь в том, что условие работает наоборот. Цикл while выполняет до тех пор пока условие истинно. Цикл until - до тех пор пока условие не станет истинным. Например:

#!/bin/bash
x=0
until [ "$x" -ge 10 ]; do
echo "Текущее значение х равно $ х"
x=$(expr $x + 1)
sleep 1
done

Эта часть кода выглядит знакомой. Попробуйте ее набрать и посмотреть, что он делает. Приведенный цикл будет работать, пока x не станет больше или равен 10. Когда величина x достигнет значения 10, цикл остановится. Таким образом, последнее значение напечатанное значение х будет 9.

for … in … do … done
Цикл for используется, когда вам надо перебрать несколько значений переменной. Например, вы можете написать небольшую программу, которая печатает 10 точек:

#!/bin/bash
echo -n "Проверка системы на наличие ошибок"
for dots in 1 2 3 4 5 6 7 8 9 10; do
echo -n "."
done
echo "Ошибок не обнаружено"

Опция -n команды echo предотвращает автоматический перевод строки. Попробуйте один раз вариант с -n и вариант без этой опции, чтобы понять, что я имею в виду. Переменная dots последовательно принимает значения от 1 до 10 и одновременно скрипт печатает на экране точку.
Приведенный дальше пример показывает, что я имею в виду под выражением «переменная последовательно принимает несколько значений»:

#!/bin/bash
for x in paper pencil pen; do
echo "значение переменной х равно $х"
sleep 1
done

При запуске программы, вы видите, что х сначала имеет значение «pencil», а затем она принимает значение «pen». Когда у переменной заканчивается список возможных значений, цикл завершается.
Ниже приведен гораздо более полезный пример. Этот скрипт добавляет расширение .html для всех файлов в текущей директории (Этот скрипт реально так поступает и вам возможно это не нужно. Поэтому все-таки создайте отдельного пользователя, если вы еще до сих пор этого не сделали, и экспериментируйте под ним. - Прим. перев.):

#!/bin/bash
for file in *; do
echo "Добавляем расширение .html для файла $file ..."
mv $file $file.html
sleep 1
done

Символ * имеет специальное значение, которое в данном случае означает "все в текущем каталоге", т.е. - все файлы в каталоге. Переменная file последовательно принимает значения, соответствующие именам файлов в текущем каталоге. Затем используется программа mv для переименования файла в файл с расширением .html:

case … in … esac
Оператор case очень похож на if. Он отлично подходит для тех случаев, когда нужно проверить несколько условий, и вы не хотите для этого использовать несколько вложенных операторов if. Поясним на примере:

#!/bin/bash
x=5 # инициализируем х значением 5
# проверяем значение х:
case $x in
0) echo "значение х равно 0"
;;
5) echo "значение х равно 5"
;;
9) echo "значение х равно 9"
;;
*) echo "значение неизвестно"
;;
esac

Оператор case проверяет переменную х на равенство трем значениям. В приведенном примере, он сначала проверит, равен ли х нулю 0, затем равен ли он 5, затем равен ли он 9. И, если все проверки завершились неудачно, скрипт выведет сообщение, что значение x определить не получилось. Помните, что «*» означает «все», и в этом случае, «любое другое значение, помимо указанных явно». Если х имеет любое другое значение, отличное от 0, 5 или 9, то это значение попадает во категорию «*». При использовании сase каждое условие должно заканчиваться двумя точками с запятой.
Зачем нужно использовать case, когда вы можно использовать if? Ниже приведен пример эквивалентного скрипта, написанного с использованием if. Решение о том, что быстрее написать и легче прочесть, предлагается принять самостоятельно ;) :

#!/bin/bash
x=5 # инициализируем х значением 5
if [ "$x" -eq 0 ]; then
echo "Значение х равно 0"
elif [ "$x" -eq 5 ]; then
echo "значение х равно 5"
elif [ "$x" -eq 9 ]; then
echo "значение х равно 9"
else
echo "Значение х определить не удалось"
fi

Использование кавычек
Кавычки играют важную роль в написании скриптов оболочки. Существует три типа кавычек. Это двойные кавычки: ", одинарные ' (апостроф) и обратные ` (находятся слева от клавиши 1. Прим. перев.). Имеет ли каждый из приведенных видов какое-то особое значение? Да.

Примечание: Статья Wildcards, Quotes, Back Quotes, Apostrophes in shell commands ( * ? [] ” ' ') прекрасно описывает использование специальных символов. Пожалуйста, ознакомьтесь с ней в случае, если вы не знакомы с использованием этих специальных символов в скриптах оболочки. Ниже приведено краткое объяснение использования некоторых из них.

Двойные кавычки используются главным образом для объединения нескольких слов в строку и сохранения в ней пробелов. Например, "Эта строка содержит пробелы". Строка, заключенная в двойные кавычки рассматривается как единое целое. Например:
$ mkdir hello world
$ ls -F
hello/ world/

Здесь мы создали две директории. Команда mkdir принимает два слова hello и world, как два отдельных аргумента, и поэтому создает два каталога. Теперь посмотрим, а что произойдет, если написать код таким образом:
$ mkdir “hello world”
$ ls -F
hello/ hello world/ world/

Команда создала каталог с именем из двух слов. Кавычки объединили два слова в один аргумент.
(Главным образом, дело в том, что bash воспринимает пробел как разделитель всего, что только можно - опций, аргументов, отдельных команд. Внутри двойных кавычек пробел теряет свое специальное значение. - Прим. перев.).

Одинарные кавычки в основном используются для работы с переменными. Если переменная находится в двойных кавычках, то к ней можно обратиться через $имя_переменной.Если переменная находится в одинарных кавычках - это не возможно. Чтобы пояснить это приведем пример:

#!/bin/bash
x=5 # задаем х равным 5
# используем двойные кавычки
echo "Используем двойные кавычки, значение х равно $х"
# используем одинарные кавычки
echo 'Используем одинарные кавычки, значение х равно $х'

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

$ mkdir 'hello world'
$ ls -F
hello world/

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

x=$(expr $x + 1)

Как вы уже знаете, результатом работы этой команды будет то, что выражение $х + 1 присваивается переменной x. Того же результата можно достичь и с использованием обратных кавычек:

x='expr $x + 1′

Какой тип кавычек лучше использовать? Тот, что вам больше нравится. Изучая скрипты вы найдете, что обратные кавычки используются чаще, чем запись $(...) . Тем не менее, я считаю, $ (...) легче читать, особенно если у вас код наподобие этого:
#!/bin/bash
echo “I am 'whoami'”

(На мой взгляд, лучше использовать именно запись типа $(...), потому что запись в обратных кавычках и одинарных можно легко перепутать при наборе кода и при его чтении. - Прим. перев.)

Это только начало. Вы узнаете еще много чего интересного в заключительной части этой статьи (надеюсь со временем, как только текст появится, осилить и его перевод. - Прим. перев.). А пока вы ее ждете - удачного вам написания скриптов...

Оригинал статьи
 Статья также опубликована здесь.

Wed, Sep 22, 2010

Поскреби Ubuntu, получишь Debian...


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

Итак, берем Ubuntu Alternate CD, вставляем в диск и перезагружаемся. На всякий случай, я все свои эксперименты проводил в виртуалке в Virtualbox. В установщике выбираем режим экспертной установки и ставим только базовую систему. Можно еще в диалоге создания учетных записей разрешить учетную запись root. Меня в Ubuntu больше всего раздражает заблокированная учетка root и неправильно настроенная sudo. После перезагрузки входим в систему и ставим пакет gnome-desktop-environment. Те, кто использует Debian, наверняка знает, что этим метапакетом ставится GNOME.

Затем пускаем службу GDM и получаем вот такую картинку:



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


А чтобы все программы, требующие административных привелегий в GNOME, спрашивали пароль root, а не пользовательский, делаем следующее. Запускаем в терминале gksu-properties и устанавливаем целых две настройки вот так:


Первый раскрывающийся список указывает какую программу запускать при требовании административных привелегий: su или sudo и, соответственно, от этого будет зависеть какой именно из паролей будет запрашиваться. Второй список включает или выключает принудительный захват фокуса окном, требующим привелегий.

Ну а тем, кто хочет восстановить статус-кво, нужно поставить пакет ubuntu-artwork. Получится в итоге вот такое:


Заметьте, что теперь кнопки переехали в левую часть заголовка...
Дальше с этой системой можно делать все, что угодно :) - доустановить нужные пакеты, оформление... Так что мы, практически, получаем почти Debian с более новыми пакетами.