Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #71, НОЯБРЬ 2004 г.

Консольные этюды

Andrey Matveev

Хакер, номер #071, стр. 071-102-4


Only in stunnel-4.05/doc: stunnel.fr.html

Only in stunnel-4.05/doc: stunnel.fr.pod

Only in stunnel-4.05/tools: script.sh

Вот как раз мануалов на французском нам и не хватало. Далее выясняем, какие файлы были изменены в новой версии:

% diff -r stunnel-4.04 stunnel-4.05 | grep ^diff

diff stunnel-4.04/ChangeLog stunnel-4.05/ChangeLog

diff stunnel-4.04/TODO stunnel-4.05/TODO

diff stunnel-4.04/aclocal.m4 stunnel-4.05/aclocal.m4

diff stunnel-4.04/configure stunnel-4.05/configure

[snip]

Ну и наконец, изучаем сами изменения (знание английского и С/C++ приветствуется):

% diff -Naur stunnel-4.04 stunnel-4.05 | less

Если ты не доверяешь mergemaster'у, таким образом можно производить обновление BSD-системы - в одном терминальном окне просматриваешь, а в другом мержишь изменения.

Элегантная сборка

Тоскливое модемное соединение, желание сэкономить на трафике, медленная работа framebuffer'а (особенно при наличии старой видеокарточки или криво написанного драйвера) - все это может послужить поводом для знакомства с утилитой nohup, которая защищает указанную в качестве аргумента команду от сигнала SIGHUP (разрыв соединения с tty, обычно происходит после нажатия Ctrl+C), при этом перенаправляя все данные, поступающие на стандартный выходной поток, в файл nohup.out. Эта утилита идеально подходит для компиляции больших проектов:

/usr/src# nohup make build &

[1] 10147

sending output to nohup.out

/usr/src#

Вся прелесть заключается в том, что теперь ты в любой момент можешь сделать logout, а фоновое задание все равно будет выполняться, методично журналируя происходящее в файл /usr/src/nohup.out. Для того чтобы в реальном времени отслеживать бэкграундный процесс компиляции, нужно заставить утилиту tail игнорировать признак конца файла:

# tail -f /usr/src/nohup.out

Секьюрный скриптинг

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

% vi ~/bin/mp3player

#!/bin/sh

cat > /tmp/playlist.$$

mpg123 --aggressive --stereo --8bit /tmp/playlist.$$ > /dev/null 2> &1

rm -f /tmp/playlist.$$

Хотя такой способ далеко не безопасен, т.к. схема предсказуема, а значит атакующий может вызвать гонку привилегий и даже провести DoS-атаку. Утилита mktemp призвана восполнить этот недостаток:

% mktemp /tmp/xakep.XXXXXXXXXX

/tmp/xakep.NBGIs19391

Властелин temp-файлов

Раз уж речь зашла о временных файлах, нельзя не рассказать об одном оптимизационном трюке. Помимо стандартного каталога /tmp, в BSD-системах присутствует /var/tmp, который используют для своей работы некоторые программы (pkg_add для распаковки пакаджей, vi для восстановления поврежденных текстовых файлов и т.д.). Почему сделано именно так - никто не берется ответить. Два каталога для временных файлов нам совершенно не нужны:

# rm -rf /var/tmp

Назад на стр. 071-102-3  Содержание  Вперед на стр. 071-102-5