Редактирование квот при помощи модуля Quota



Редактирование квот при помощи модуля Quota

Когда-то очень давно предыдущий метод (или, если быть честным, предыдущий «хак») был единственным способом автоматизировать изменения квот, если, конечно, вас не радовала перспектива редактирования системных вызовов из библиотеки С, чтобы встроить их в интерпретатор Perl. Теперь, когда механизм расширений Perl существенно упростил встраивание библиотечных вызовов в Perl, создание модуля Quota для Perl стало только делом времени. Благодаря Тому Зорнеру (Tom Zoerner) и другим процесс установки квот средствами Perl теперь намного проще, если этот модуль поддерживает вашу версию Unix. Если нет, предыдущий метод все равно будет работать нормально.

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

use Getopt::Std; use Quota:; '

getopt("u:f:s:h:");

die "USAGE: $0 -u uid -f <filesystem> -s <softquota> -h <hard quota>\n" if (!$opt_u || !$opt_f || ISopt^s || !$opt_h);

$dev = Quota::getcarg($opt_f) or die "Невозможно преобразовать путь

$0ptc;f:$!\n";

($curblock,$soft,Shard,Sbtimeout,Scurinode,$isoft,Sihard,$itimeout)=

Quota::query($dev,$uid) or die "Невозможно запросить квоту для

$uid:$!\n";

Quota::setqlim($dev,$opt_u,$opt_s,$opt_h,$isoft,$ihard,1) or die " Невозможно установить квоту:$!\n";

После анализа аргументов остаются три простых шага: во-первых, мы используем Quota: :getcarg() для получения идентификатора устройства, который передается другим подпрограммам. Затем мы передаем этот идентификатор и идентификатор пользователя функции qjc-ta: :query(), чтобы получить текущие параметры квот. Нам нужны эти настройки, чтобы не нарушить ограничения, которые мы не будем изменять (например, число файлов). Наконец, мы устанавливаем квоту. Вот и все, всего лишь три строчки кода на Perl.

Помните, что девиз Perl TMTOWTDI означает «существует более одного способа сделать это», но это вовсе не значит «несколько одинаково хороших способов».



Содержание раздела