значение по умолчанию для переменной shell

Иногда нужно выставить значение по умолчанию для переменной, которую может указать/не указать пользователь в качестве аргумента при запуске. Для этого можно использовать вот такую конструкцию:

VALUE=''
VALUE_DEFAULT='default'

if [ -z $VALUE ]; then
  VALUE="$VALUE_DEFAULT"
fi

echo $VALUE

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

VALUE='1'
VALUE_DEFAULT='default'

[ -z $VALUE ] && VALUE="$VALUE_DEFAULT"

echo $VALUE

Получилось, но теперь понять конструкцию чуть сложнее. Пробуем сделать еще более короткий вариант:

VALUE=''
VALUE_DEFAULT='default'

VALUE=${VALUE:-$VALUE_DEFAULT}

echo $VALUE

Самый короткий вариант, но понятный только тем, кто внимательно прочитал man sh.

Tags: , ,

Среда, Ноябрь 3rd, 2010 Советы Нет комментариев

CentOS/RedHat svnserve quick howto

Периодически сталкиваюсь с задачей настройки svn server причем в самом простом его варианте и каждый раз забываю, что и как. Так что сделаю себе короткую заметку по настройке SVN на CentOS:

› Прочитать

Tags: , ,

Пятница, Сентябрь 24th, 2010 Советы Нет комментариев

mysql_secure_installation cвоими руками во FreeBSD

В большинстве пакетов mysql-server под Linux входи хороший скрипт mysql_secure_installation, которого очень не хватает в порте mysql во FreeBSD. Сделаем все своими руками!
› Прочитать

Tags: , ,

Вторник, Июнь 29th, 2010 Советы Нет комментариев

Как узнать версию CentOS

Для меня, старого FreeBSD-ка, было несколько неожиданно, что команда uname мне не помогла определить версию системы…

% uname -a
Linux servername.ru 2.6.18-164.15.1.el5.028stab068.9 #1 SMP Tue Mar 30 18:07:38 MSD 2010 x86_64 x86_64 x86_64 GNU/Linux
%

Т.е. конечно про ядро мне все тут рассказали, но вот какая версия CentOS? Загадка…
Попробовал иначе:

% cat /proc/version
Linux version 2.6.18-164.15.1.el5.028stab068.9 (root@rhel5-build-x64) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Tue Mar 30 18:07:38 MSD 2010
%

Уже лучше, теперь я знаю, что уши CentOS торчат из указанной версии RedHat… Хм, все равно не то!
Вот он, правильный вариант!

% cat /etc/redhat-release
CentOS release 5.4 (Final)
%

Так же есть утилита lsb_release:

% lsb_release -a
LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description:    CentOS release 5.4 (Final)
Release:        5.4
Codename:       Final
%

Tags:

Пятница, Июнь 25th, 2010 Советы Нет комментариев

Вывод сообщения в stderr из shell скрипта

Очень полезная вещь – перенаправление потоков вывода. С ее помощью в shell скриптах можно сделать многое, в том числе и вывод сообщений в stderr. Пример простого скрипта ниже:

#/bin/sh

DEBUG=0

print_debug()
{
  if [ "x$DEBUG" != "x0" ]; then
    echo $* >&2
  fi
}

print_debug hello world

Переменная DEBUG, если не равно 0, указывает, что нужно выводить сообщения в функции print_debug. Обычное echo выводи строку со всеми аргументами функции (переменная $*) в stdout, которые перенаправляется в stderr ( >&2 ).

Tags: ,

Вторник, Июнь 1st, 2010 Советы Нет комментариев

FreeBSD-SA-10:04.jail FreeBSD-SA-10:05.opie FreeBSD-SA-10:06.nfsclient

Все три уязвимости достаточно опасны. Особо нужно отметить OPIE уязвимость, она существует прямо из коробки, а две других уязвимости требуют некоторых нестандартных изменений системы, таких как vfs.usermount или изменения флагов запуска jail. Далеко не все сервера им будут подвержены, и для них есть workaround. Однозначно готовимся к патчам системы!

› Прочитать

Четверг, Май 27th, 2010 BugTrack Нет комментариев

Пишем свой плагин nagios

Плагины – это одна из самых сильных сторон системы мониторинга nagios. Для мониторинга базовых служб и параметров системы в комплекте установки уже есть большой набор плагинов. Если нужного плагина среди базовых нет, то можно поискать на сайтах exchange.nagios.org и monitoringexchange.org. Или написать свой плагин.
› Прочитать

Tags:

Понедельник, Май 10th, 2010 Статьи Нет комментариев

Запись сообщений в syslog из shell скрипта

Логи в скриптах можно вести несколькими способами, один из самых простых – записывать новые сообщения в какой-то файл. Но мне такой подход кажется неправильным. В системе уже есть специальный инструмент для ведения логов syslog. Вот его и стоит использовать!
Для добавления сообщений в syslog есть утилита logger. В принципе может писать сообщения и в отдельный файл. Напишу небольшую функцию, которую можно будет добавлять в любой скрипт для ведения логов.

add_log_message ()
{
 local logger='/usr/bin/logger'
 local tag='My Script'
 local port=514
 local host=localhost
 local facility='user'
 local level='notice'
 local message=$1
  if [ -z $message ]; then
        return 1
  else
    $logger -t "$tag" -p ${facility}.${level} -P $port -h $host "$message"
    if [ "x$?" != "x0" ]; then
        return 2
    fi
  fi
}

add_log_message 'Hello world'

Опция -t задает TAG, фактически TAG можно использовать для идентификации источника сообщения. Так же logger умеет отправлять сообщения syslog-у на другом сервер, т.е. легко можно организовать сбор всех типов логов на один сервер.

logger -P 514 -h logger.domain.ru 'Hello World'

По умолчанию logger пишет все сообщения в facility user с приоритетом notice, но это можно поменять используя ключ -p:

logger -p cron.warning 'Hello world'

Tags: , ,

Среда, Апрель 28th, 2010 Советы Нет комментариев

Быстрый способ создать большой файл при помощи dd

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

dd if=/dev/zero of=/data/bigfile count=1024 bs=1024k

Получим файл размером в 1GB, причем dd честно 1024 раза запишет нули блоками по 1МБ. С 1Гб можно и потерпеть, но как быть с 10ГБ или 100ГБ? Ждать долго, да и диски жалко. Есть более быстрый и простой способ – опция seek. Смысл ее в том, что запись dd начнет только после нахождения определенного номера блока с начала вывода из if. Если я правильно понимаю физику процесса, то происходит это так: dd создает файл, ждет пока пройдет N блоков, указанных в seek, после чего начинает записывать блоки, указанные в count. Получается “пустой” файл большого размера.

dd if=/dev/zero of=/data/bigfile count=1 bs=1024k seek=`expr 1024 * 10`

Мгновенно получаем файл, размером в 10ГБ!

Tags:

Вторник, Апрель 20th, 2010 Новости Нет комментариев

Правильный и красивый способ добавлять модули ядра в автозагрузку в CentOS 5.X

Наткнулся на блог с красивым и правильным методом добавления модулей в автозагрузку centos 5.x.
› Прочитать

Tags: ,

Вторник, Апрель 20th, 2010 Статьи Нет комментариев
Tinkerbell Personal Checks |Garden Planters | Jewellery For Women | Best Dog Foods | Budget Wedding Gowns | Shop For Jewellery | Vintage Jewellery| Diamante Jewellery | Car Finance Credit | DoorStep Loans