Это команда safecat, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
safecat - безопасно записывать данные в файл
СИНТАКСИС
безопасная кошка темпдир конечный каталог
ВВЕДЕНИЕ
безопасная кошка это программа, которая реализует Maildir алгоритм для
копия STDIN безопасно в файл в указанном каталоге. С участием безопасная кошка, пользователю предлагается
две гарантии. Во-первых, если безопасная кошка возвращает статус успешного выхода, тогда все данные
гарантированно будет сохранен в целевом каталоге. Во-вторых, если файл существует в
каталог назначения, помещенный туда безопасная кошка, то файл гарантированно будет
полная.
При сохранении данных с безопасная кошка, пользователь указывает каталог назначения, но не файл
имя. Имя файла выбирается безопасная кошка чтобы гарантировать отсутствие конфликтов имен файлов,
даже если многие безопасная кошка процессы и другие программы, реализующие Maildir алгоритм
запись в каталог одновременно. Если требуются определенные имена файлов, тогда
пользователь должен переименовать файл после безопасная кошка завершает. Как правило, при буферизации данных с
безопасная кошка, один отдельный процесс должен обрабатывать именование, сбор и удаление этих
файлы. Примерами такого процесса являются демоны, задания cron и программы чтения почты.
НАДЕЖНОСТЬ ВОПРОСЫ
Машина может выйти из строя во время записи данных на диск. Для многих программ, в том числе
многие агенты доставки почты, это означает, что данные будут автоматически усечены. С использованием
Профессора Бернштейна Maildir алгоритм, каждый файл гарантированно будет полным или несуществующим.
Многие люди или программы могут записывать данные в общий каталог «спула». Системы вроде м-м-
почта хранить файлы в каталоге с числовыми именами. Неосторожная запись в файлы может
приводит к конфликту, при котором одна запись завершается успешно, а другая кажется успешной, но
терпит неудачу. Общие стратегии решения этой проблемы включают создание файлов блокировки или других
синхронизирующие механизмы, но такие механизмы подвержены отказу. Любой, у кого есть
удаленный $ HOME / .netscape / lock для запуска netscape может подтвердить это. В Maildir
Алгоритм невосприимчив к этой проблеме, потому что он вообще не использует блокировок.
МАЙЛДИР ALGORITHM / АЛГОРИТМ
Как описано в Maildir(5) безопасная кошка применяет Maildir алгоритм, записывая данные в шесть
шаги. Во-первых, это stat () s два каталога темпдир и конечный каталог, и выходит, если оба
каталоги существуют и доступны для записи. Во-вторых, это stat () s имя tempdir /время.pid.хост,
в котором время - количество секунд с начала 1970 г. по Гринвичу, ПИД-регулятор это программа
идентификатор процесса и кашель это имя хоста. В-третьих, если стат () вернул что-нибудь кроме
ENOENT, программа засыпает две секунды, обновляется время, и пробует стат () опять же
ограниченное количество раз. В-четвертых, программа создает tempdir /время.pid.хост. В-пятых,
программа NFS-пишет сообщение в файл. В-шестых, программа ссылка на сайт()файл в
destdir /время.pid.хост. В этот момент данные были успешно записаны.
Помимо вышесказанного, безопасная кошка запускает 24-часовой таймер перед созданием tempdir /время.pid.хост и
прерывает запись по истечении таймера. При ошибке, тайм-ауте или нормальном завершении безопасная кошка
пытается разорвать связь () tempdir /время.pid.хост.
ВЫХОД статус
Статус выхода 0 (успех) означает, что все данные были безопасно сохранены на диске. А
ненулевой статус выхода следует рассматривать как отказ, хотя
шанс, что безопасная кошка записала данные успешно, но так не думала.
Еще раз обратите внимание, что если файл появляется в целевом каталоге, то он гарантированно
быть полным.
If безопасная кошка завершается успешно, затем он напечатает имя вновь созданного файла
(без его пути) на стандартный вывод.
ПРЕДЛОЖЕННЫЙ ПРИМЕНЕНИЕ
Захватывающее использование для безопасная кошка изобилуют, очевидно, но слово может быть, чтобы указать, что
они есть.
Если вы используете Linux и используете qmail вместо sendmail, вам следует подумать о преобразовании вашего
входящие в Maildir за его превосходную надежность. Если ваш домашний каталог смонтирован по NFS,
qmail заставляет вас использовать Maildir.
Если вы пишете приложения CGI для сбора данных через World Wide Web, вы можете найти
безопасная кошка полезный. Веб-приложения страдают от двух основных проблем. Их производительность
страдает от любых перебоев или узких мест в Интернете; они не могут позволить себе представить
собственные проблемы с производительностью. Кроме того, веб-приложения НИКОГДА не должны покидать
сервер и база данных в несовместимом состоянии. Однако это вполне вероятно, если сценарии CGI
напрямую заморозить некоторую базу данных - особенно если база данных перегружена или работает медленно. Какие
происходит когда пользователям становится скучно и они нажимают «Стоп» или «Назад»? Может быть, активность базы данных
завершает. Возможно, сценарий CGI убит, и база данных останется в несогласованном состоянии.
Рассмотрим следующую стратегию. Сделайте так, чтобы ваш CGI-скрипт выгружал свой запрос в спул
каталог с использованием безопасная кошка. Немедленно верните квитанцию в браузер. Теперь браузер
имеет полную гарантию того, что их представление получено, а предполагаемая производительность
вашего веб-приложения оптимально.
Тем временем демон диспетчера очереди печати замечает новый запрос, перехватывает его и обновляет
база данных. Браузеры могут быть проинформированы о том, что их запрос будет выполнен через X минут.
Результат - оптимальная производительность, несмотря на капризный интернет. Кроме того, пользователи могут
быть предложенной почти на 100% надежность.
ПРИМЕРЫ
Чтобы убедить sendmail использовать Maildir для доставки сообщения добавьте следующую строку в свой
.forward файл:
| БЕЗОПАСНОСТЬ ГЛАВНАЯ / Maildir / tmp ГЛАВНАЯ / Maildir / новое || выход 75 #ИМЯ ПОЛЬЗОВАТЕЛЯ
в котором БЕЗОПАСНОСТЬ это полный путь безопасная кошка программа, Главная это полный путь к
ваш домашний каталог и USERNAME это ваше имя для входа. Внесение этого изменения, скорее всего, окупится
выключенный; во многих университетских городках и компаниях домашние каталоги пользователей монтируются с помощью NFS. С использованием Maildir в
доставка в папку входящих помогает гарантировать, что ваша почта не будет потеряна из-за некоторых NFS
ошибка. Конечно, если вы системный администратор, вам следует подумать о переходе на
почта.
Чтобы запустить программу и безопасно перехватить ее вывод в какой-либо каталог, вы можете использовать оболочку
скрипт вроде следующего.
#!/ bin / bash
MYPROGRAM = cat # Программа, которую вы хотите запустить
TEMPDIR =/ Tmp # Имя временного каталога
DESTDIR = $ HOME / work / data # Каталог для хранения информации
try () {$ * 2> / dev / null || эхо NO 1> & 2}
установите `(попробуйте $ MYPROGRAM | попробуйте safecat $ TEMPDIR $ DESTDIR) 2> & 1`
тест "$?" = "0" || выход -1
тест "$ 1" = "НЕТ" && {rm -f $ DESTDIR / $ 2; выход -1; }
Этот сценарий иллюстрирует подводные камни написания безопасных программ с помощью оболочки. В
сценарий предполагает, что ваша программа может генерировать какие-то выходные данные, но затем не может быть завершена.
Нет возможности для безопасная кошка чтобы узнать, успешно ли завершилась ваша программа,
из-за семантики оболочки. В результате safecat может создать файл в
каталог данных, который является "полным", но бесполезным. Сценарий оболочки удаляет файл в
тот случай.
В целом, самый безопасный способ использования безопасная кошка находится в программе C, которая вызывает
Safecat с вилка () и execve (). Родительский процесс может просто убийство() безопасная кошка
обработайте, если возникнут какие-либо проблемы, и при желании можете попробовать еще раз. Идти ли к этому
Проблема зависит от того, насколько серьезно вы относитесь к защите своих данных. Так или иначе, безопасная кошка
не будет слабым звеном в вашем потоке данных.
Используйте safecat в Интернете с помощью сервисов onworks.net