Perl для системного администрирования


Работа с дисковыми квотами - часть 5


else {

&EdOuota(); }

Рассмотрим код, вызываемый при первом запуске и используемый для анализа аргументов и вызова edquota через канал:

sub ParseArgsf

use Getopt: :Std;

# для обработки параметров

# Устанавливаем переменную $opt_u равной идентификатору и пользователя,

$opt_f - равной имени файловой системы,

$opt_s - в значение для мягкого ограничения и

$opt_h -К в значение для жесткого ограничения getopt("u:f:s:h:");

двоеточие говорит о том, что у этого

# ключа есть аргумент die "ИСПОЛЬЗОВАНИЕ:

$0 -u uid -f <fsystem> -s <softq> -h <nardq>\n"

if (<$opt_u || !$opt_f || !$opt_s || !$opt_n); }

sub CallEdquotaf

$ENV{"EDITOR"} = Sautoedq;

записываем в

# переменную окружения EDITOR путь к нашему сценарию

operKEPROCFSS. "|$edquota $opt_u") or die

"Невозможно запустить edquota :$! \r,":

посылаем измененные строки во вторую копию сценария

print EPROCESS "$opt_f|$opt^s|$opt_.h\n";

close(EPROCESS); }

Вот вторая часть выполняемого действия:

sub EdOuota {

Stfile = $ARGV[0];

получаем имя временного файла edquota

open(TEMPFILE, Stfile) or die "Невозможно открыть временный файл

# открываем файл-черновик, можно было бы и использовать и

new_tmpfile() open(NEWTEMP, ">$tfile.$$") or die "

Невозможно открыть временный файл-черновик Stfile.$$:$!\";

# получаем строку ввода из первого вызова и отсекаем символ \

chomp($change = <STDIN>);

my($fs,$soft,Shard) = split(/\|/,$change);

разбираем ответ

считываем из временного файла строку. Если она содержит

информацию о файловой системе, которую мы хотим

изменить, изменяем эти значения. Записываем строку

(вероятно, измененную) в черновик, while (<TEMPFILE>){

перезаписываем временный файл измененным черновиком,

так что изменения передаются edquota rename("Stfile.$$",Stfile)

or die "Невозможно переименовать

$tfile.$$ в $t*ile:$!\n":

}

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




Начало  Назад  Вперед