11/19/2008

Управленеи квотами

Немного информации:

1. Что такое квотирование?

Квотирование позволяет ограничить два аспекта использования диска: количество файлов, которыми владеет пользователь или группа пользователей; и количество блоков диска, которые может использовать пользователь или группа пользователей. Квотирование определяется, как для каждого пользователя, так и для каждой файловой системы. Если у вас несколько разделов, то квоты нужно определить для каждого раздела, в котором пользователь намеревается создавать файлы.

2. Программное обеспечение

В зависимости от дистрибутива, у вас может быть, а может и не быть установлено программное обеспечение для поддержки квотирования. В этом случае, вы можете загрузить исходные тексты отсюда:
ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz

3. Установка

Пересоберите ядро с поддержкой квот. А дальше все написано в мануалах.

А теперь главное:

Как быстро определить закончилась квота у пользователя или нет? правильно, командой quota или repquota! А как увеличить квоту? правильно, командой setquota! а как все это делать быстро? а вот это мы сейчас и рассмотрим


#!/bin/sh
echo "Программа проверки пользовательских квот"
echo "Введите имя пользователя"
read USR # прочитали имя пользователя
MAIL=$USR@local # написали почтовый адрес
TEXT="Обратите внимание на содержимое вашей папки" # текст письма
RESULT=`repquota -u -a |grep $USR` # смотрим какой размер квоты у пользователя
USED=`echo $RESULT | tr -s ' ' ':' | cut -d : -f 3` # смотрим сколько место у пользователя затрачено
QUOTA=`echo $RESULT | tr -s ' ' ':' | cut -d : -f 5` # вообще вся его квота
MINQUOTA=$((QUOTA*90/100)) # минимальный размер квоты = 90% от квоты
NQUOTA=$((QUOTA*110/100)) # новый размер квоты = старая +10%

if [ $USED -ge $MINQUOTA ]; # если затрачено 90% и более, то
then setquota -u $USR -a 0 $NQUOTA 0 0; # устанавливаем размер квоты в 110%
echo "Изменен размер квоты" | mail -v -r "root@local" -s $TEXT -S smtp=192.168.11.15 $MAIL # от правляем письмо с уведомлением
echo "Установлена квота размером: " $NQUOTA;
exit;
else # если использовано менее 90% то все ок!
echo "Использовано: " $USED;
echo "Всего: " $QUOTA;
exit;
fi

11/18/2008

Задачки на собеседованиях

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

11/16/2008

Читайте маны, господа.

Читая документацию к программе Google Earth наткнулся на очень интересную вещь. Оказывается, в этой программе есть АвиаСимулятор. Запускается он с помощью комбинации клавиш, Ctrl+Alt+a.
С помощью имитатора полета можно прилететь в любую точку на земном шаре.
В качестве устройства ввода поддерживается Мышка, клавиатура и джойстик.

11/12/2008

Украшаем Bash

Вдруг если кому то надоело стандартное приглашение bash, то можно его несколько приукрасить. Итак, читаем документацию по баш (кстати это очень удобно делать с помощью emacs'a), и открываем для себя переменную PS1, значение этой переменной, интерпретируется как основное приглашение командной строки.
Цвета символов терминала обозначаются с помощью следующих числовых кодов:
#Black 0;30 Dark Gray 1;30
#Blue 0;34 Light Blue 1;34
#Green 0;32 Light Green 1;32
#Cyan 0;36 Light Cyan 1;36
#Red 0;31 Light Red 1;31
#Purple 0;35 Light Purple 1;35
#Brown 0;33 Yellow 1;33
#Light Gray 0;37 White 1;37

На самом же деле в терминале они задаются с помощью хитрых escape -последовательностей. Для простоты можно обозначить цвета с помощью переменных:
RED="\[\033[0;31m\]"
YELLOW="\[\033[1;33m\]"
L_BLUE="\[\033[0;36m\]"
EMPTY="\[\033[0m\]"

Теперь настраиваем приглашение:

export PS1="$RED[$YELLOW\A$RED] $L_BLUE\u@\h:\w >$EMPTY "

По порядку слева на право:
export PS1 - экспортируем переменную, PS1, равную вот такой длинной строке.
$RED[ - устанавливаем цвет в красный, и печатаем открывающую скобку
$YELLOW\A - устанавливаем цвет в желтый, и выводим текущее время в HH:MM формате. Более полный список последовательностей можно посмотреть в секции PROMPTING в документации по bash.
$RED] устанавливаем цвет в красный, и печатаем закрывающую скобку
$L_BLUE\u@\h - устанавливаем цвет в голубой что ли ), и выводим имя пользователя@имя_хоста.
:\w>$EMPTY - затем выводим полный путь к текущему каталогу и символ ">", после которого сообщаем bash'у, что все остальные символы ни каким цветом раскрашивать не надо.
Вот собственно и все.
Более подробную информацию можно почерпнуть из манула.
А выглядит это примерно так:

Базовые настройки Emacs

При каждом запуске Emacs, в отдельном буфере (про буферы я расскажу позже), постоянно выскакивает надоедливая заставка.
Ее можно отключить, добавив в конфигурационный файл строчку:
(setq inhibit-startup-message t)

При наборе ошибочной команды, или при возникновении ошибочной ситуации Emacs постоянно (надоедливо) пищит. Его можно попросить визуально сообщать о возникновении ошибки:
(setq visible-bell t)

На моей системе (Gentoo Gnu/Linux), Emacs использует не очень красивый шрифт, следующая строчка будет радовать глаз пользователя, при условии что описанный шрифт установлен в вашей системе:
(set-default-font "Bitstream Vera Sans Mono-11")

Меня также очень напрягает писать код на белом фоне. Чтобы изменить цвет фона запишем:
(set-background-color "wheat3")

Для того, чтобы Emacs подсвечивал выделенные текст, между двумя метками (по умолчанию он этого не делает), необходимо ему сказать:
(setq transient-mark-mode 1)

Так же целесообразно было бы изменить и цвет выделения:
(set-face-background 'region "gray85")

Для себя, выставил размер запускаемого окна шириной в 81 символ и высотой в 50 символов:
(setq default-frame-alist (append (list
'(width . 80) ; Width set to 81 characters
'(height . 50)) ; Height set to 60 lines
default-frame-alist))

Также весьма удобно, чтобы Emcas показывал, в какой позиции в текущее время находится курсор:
(column-number-mode 1) ;; отображает номер столбца символа
(line-number-mode 1) ;; отображает номер строки

При отображении основного окна редактора, у меня не отображаются полоски прокрутки, строка меню, тулбар, и прочие ненужные элементы управление,
поэтому весьма удобно чтобы в заголовке отображался полный путь редактирования к файлу:
(setq frame-title-format "emacs - %f")

Несколько слов об Emacs

В своей повседневной работе для редактирования любых текстов, я использую среду Gnu/Emacs. (Произносится как Имакс)
Установка:
Я использую Emacs из cvs, потому что в нем по умолчанию используется Unicode, есть человеческая поддержка русского языка и нормально работает антиалиасинг для шрифтов.
Выгружаем Emacs из репозитория:
cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs co emacs

далее

make bootstrap
./configure --with-x-toolkit --with-xft
make
make install
И после некоторого ожидания, запускаем emacs.

Перед началом использования я настоятельно рекомендую прочитать Emacs User Guide, т.к. там даны все ответы на вопросы, возникающие на первых порах использования редактора.

Настраивать среду можно или с помощью конфигурационного файла, который можно найти по адресу $HOME/.emacs, или же с помощью встроенного конфигуратора,
запустить который можно выбрав в меню Options->Customize Emacs.
Лично мне кажется что проще редактор настраивать через конфигурационный файл.
В нем содежатся инструкции, написанные на языке Lisp. Пугаться не стоит, так как все очень понятно и наглядно.

Для упрощения конфигурирования редактора, настройки можно вынести в отдельный файл. Например для настройки режима редактирования C++ настройик можно вынести в файл cpp_mode_conf.el,
затем просто подключить его в основном конфиге
написав:
(load /path/to/el_file/cpp_mode_conf.el)

Комментарии в конфиг файле начинаются с символов ;;
;; bla bla

Бытует мнение, что для работы в среде Emacs необходимо иметь навыки игры на пиано, чтобы уметь одной рукой нажимать сразу несколько клавиш.
Это не так. Вам достаточно иметь три руки =).