Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
done
cleanup
Основная содержательная часть скрипта уместилась на трех строчках: текущее состояние сравнивается с предыдущим с помощью diff, вывод которой фильтруется grep и сортируется в обратном порядке (так что сначала пойдут строки с «-», а затем «+». Далее следует задержка на несколько секунд, после чего сравнение повторяется. Имя временного файла выбирается один раз, файлы текущего и предыдущего состояния отличаются расширениями 0 или 1. Перехват прерываний необходим для удаления временных файлов по завершении работы.
В качестве источника данных о подключениях используются сразу два скрипта: count_samba и count_pppd. Возможно, что для учета трафика пользователей, подключенных через удаленный доступ, лучше было бы использовать сам pppd, но скрипт count_pppd – очень неплохой пример того, как просто использовать для получения списка пользователей не только samba, но и любое другое приложение, способное выдать такой список. В данном случае это who, а адреса берутся из /etc/ppp/options.<ttyname>:
#!/bin/sh
who | awk '{if(substr($2,1,4)=="cuaa")printf("%s %s ",$1,$2)}' | while read user ttyname
do
grep ":" /etc/ppp/options.$ttyname | awk -F: '{printf(" %s %s ",user,$2)}' user=$user
done
Предполагается, что в данном случае за каждым портом закреплен свой IP-адрес.
Для хранения временных файлов используется специальный каталог с правами 1777 («sticky» бит). Благодаря этому биту только владелец файла, каталога или суперпользователь может удалить или переименовать такой файл. В качестве дополнительной меры безопасности необходимо позаботиться о том, чтобы никто не смог предугадать имя временного файла. Именно эту задачу выполняет mktemp. Каталог выбирается в соответствии с содержимым переменной TMPDIR. Ключ -q указывает не выводить сообщения об ошибках, в случае неудачи при создании файла произойдет выход из скрипта с кодом завершения 1. Ключ -t задает шаблон, к которому в качестве расширения добавляется случайная последовательность символов.
Способ, которым инициализируется переменная tmpfile, называется подстановкой – переменной присваивается вывод команды, заключенной в обратные кавычки. Код завершения команды mktemp используется в дальнейшем. Последовательность || здесь означает ИЛИ (не путать с регулярными выражениями). То есть если mktemp завершится неудачно, будет запущена вторая команда, в данном случае «exit 1».
Другой часто применяемый способ подстановки – использование конструкции «$()» вместо прямых кавычек. Здесь он используется для инициализации переменной «$bindir».
Код завершения – это число, которое равно нулю, если программа завершается успешно или больше нуля, если неудачно. Число это содержится в переменной «$?».
Явно эта переменная используется в скрипте, когда нужно поменять местами номера 0 и 1. Проверка на эквивалентность (-eq) единице с помощью команды test дает требуемое значение. Кстати, все ключи команды test являются аббревиатурами, что помогает их запомнить.
Код завершения – это именно то, на чем работают в скриптах все управляющие структуры. К примеру, в часто встречающемся [ ] первая скобка – не что иное, как жесткая ссылка на test, а вторая скобка – завершающий параметр этой программы, который работает, когда она вызывается именно как [. Команда [ может быть и встроена в оболочку, но сути дела это не меняет.
Таким образом, конструкцию [ ] или test используют для анализа строк и числовых выражений, а во всех остальных случаях используется непосредственно завершающий код какой-либо программы. Более подробно об использовании test можно прочитать на соответствующей странице руководства.