Консольные этюды 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 |