Я просто задаюсь вопросом, почему там столько файлов журнала в типичной системе Linux?
Различные файлы журнала содержат другую информацию (хотя обычно существует некоторое дублирование). У них часто есть различные характеристики: различные политики вращения и хранения, различные полномочия, и т.д. Демон системного журнала заботится о записи их; Вы видите его настройки в
/etc/syslog.conf
или/etc/syslog-ng.conf
.Не был бы это быть лучшей идеей иметь одну системную функцию API для входа
Этот - хорошая идея. Давайте назовем это системным журналом. Его задание состоит в том, чтобы отправить записи в журнале демону системного журнала.
и одна объединенная таблица для сохранения всех записей в журнале из всех приложений?
Теперь это - целая куча проблем. Вы, кажется, принимаете присутствие механизма базы данных, вероятно, реляционная база данных, вероятно, один можно запросить в SQL. Но Unix является более старым, чем SQL, и существуют очень серьезные основания, почему он не принял SQL как стандартный компонент. Под Unix база данных является файловой системой. Это не реляционная база данных, это - простое. Его записи не являются строками, но простыми файлами, предпочтительно текст, предпочтительно с простым форматом. Например, файлы журнала являются текстовыми файлами, с одной записью на строку, содержа дату, название машины, инициирующую программу и текст элемента. Используя реляционную базу данных имел бы много оборотных сторон:
- Что Вы делаете, если база данных не работает? (Файловая система является фундаментальным компонентом (и я упомянул, что это намного более просто, чем реляционная база данных?); демон системного журнала является простым компонентом, который делает одно задание (типичная функция в дизайне Unix) и так, как ожидают, сделает это хорошо и надежно.)
- Как Вы регистрируете операции базы данных? (Хорошо, через саму базу данных — после того, как все журналы содержат записи от ядра и от демона системного журнала — но снова намного более сложная база данных делает это более трудным и менее надежным).
- Как Вы получаете доступ к записям в журнале? Сравните простоту
cat
,grep
,less
против SQL-запросов. И полномочия файла против, ну, в общем, я не знаю, как Вы обработали бы это в типичной реляционной базе данных.- Установки мультисервера не хранят свои журналы локально, они используют удаленную функцию журнала, это было встроено в демона системного журнала с тех пор в значительной степени рассвет Unix. Это легко реализовать с архитектурой входа Unix; Вы не можете выполнить дублируемую базу данных по тому бюджету сложности.
if [ ! $COMMENT ]
Я думаю, что Вы означали проверять ли $COMMENT
непусто, но это не то, что делает эта команда. Неупомянутая подстановка переменных подвергается поколению имени файла (globbing) и разделению слова. Здесь, Вы вводите несколько слов в свой комментарий (sun mars venus
) так [
команда видит ! sun mars venus
(4 аргумента), который не является допустимым синтаксисом. Всегда помещайте двойные кавычки вокруг подстановок переменных:
if [ ! "$COMMENT" ]
В данном случае это тестирует ли $COMMENT
непусто. Это - ярлык, потому что существует только два слова оболочки в скобках. В общем случае способ протестировать, непуста ли строка, состоит в том, чтобы использовать -n
оператор, и -z
оператор тестирует, пуста ли строка.
if [ -z "$COMMENT" ]
В ksh/bash/zsh можно использовать [[ … ]]
создайте вместо [ … ]
команда. Одиночные скобки являются обычной командой, связанной обычными синтаксическими правилами оболочки, тогда как двойные скобки являются специальным синтаксисом оболочки с его собственными правилами. В двойных скобках нет никакого разделения слова, таким образом, можно записать
if [[ -z $COMMENT ]]
Двойные кавычки не причинили бы боль все же.
То же идет для if [ ! $1 ]
который должен быть if [ -z "$1" ]
или if [[ -z $1 ]]
.
Существует дополнительная причуда, которую Вы экспортируете COMMENT
переменная к среде, когда комментарий передается как аргумент функции, но не при чтении его с read
встроенный. Если Вы не должны передавать COMMENT
к внешней программе отбросьте слово export
.
Bash интерпретирует[
как test
команда (который требует пробелов вокруг аргумента). Посмотрите Wiki Greg на тестах и условных выражениях...
[
в заключенной в кавычки строке, поэтому как она может быть интерпретирована как test
команда?
– enzotib
12.09.2011, 22:04
test
- иначе слова разделяются, и удар видит больше чем один аргумент в пользу test
См.: mywiki.wooledge.org/Quotes
– jasonwryan
13.09.2011, 07:16