"Не было бы полноты без печали и томления, поскольку без них нет трезвости и доброты, а мудрость без доброты и знание без трезвости бесполезны." Карлос Кастанеда "Внутренний огонь"1 Работа с log-файлами
В этой статье я попробую собрать большинство из тех трюков, которые заметно упрощают работу системного администратора Linux. Большинство приведённых тут материалов остаётся справедливым для любого Linux. Но в примерах я буду ориентироваться на Slackware Linux версии 8.0. Сразу несколько слов об источниках информации. Основной источник - man pages. И если у вас возникают вопросы по каким-то программам, лучшей ссылкой для поиска информации всегда будут man pages, или how-to документы. Последние версии How-To всегда могут быть найдены на сайте linuxdoc.org. Второстепенные источники будут указанны по ходу изложения материала.
Координаты документа: оригинал этого документа живёт по адресу: http://sle.how-to.ru/articles/tips.html. Для обсуждения документа вы можете обратится к автору dolphin77@mail.od.ua, либо воспользоваться форумом на сайте sle.how-to.ru.
1.1 Выводим syslog на консоль.
Возможно есть более правильный, чем описанный здесь метод. Если вы знаете о таковом, приглашаю вас в соавторы. Я же пользуюсь таким методом. Не знаю, может я изобрёл велосипед, но я придумал такой способ сам, после того как мне надоело печатать tail -f /var/adm/messages >/dev/tty8& после каждой перезагрузки системы (например, когда обновил ядро:).
Постановка задачи: выводить системный log (/var/adm/messages) на консоль tty8. Т.е. по ALT+F8 мы увидим содержимое последних строк из messages файла по мере работы системы..
В файл /etc/inittab добавим такую строку:
log:12345:once:/usr/bin/tail -f /var/adm/messages> /dev/tty8 &
Чуть подробнее. Структура строки такая: идентификатор:runvlevels:действие:команда
идентификатор - набор символов из латиницы и (или) цифер (не более 4-х символов).
runlevels - список runlevels для которых команда активна.
действие - указывает какой тип действия должен быть выполнен. (respawn, wait, once, boot, bootwait, ... см man inittab).
команда - самодостаточно.
Ну вот. Как я и предпологал есть более правильный способ. Настоятельно рекомендую использовать именно его. Итак, вот самый правильный вариант (опубликованный на форуме Данилой Жукоцким):
>Автор: Данила Жукоцкий >Дата: 04-12-01 19:49 >Насчёт перенаправления лога на консоль. >Я использую IMHO более кошерный способ, через syslog. Вот кусок моего, без комментариев. Кому надо - поймёт, остальным >- man syslog ;)))) >*.=info;*.=notice /usr/adm/messages >*.=info;*.=notice /dev/tty8
1.2 Выводим maillog в отдельный файл.
Постановка задачи: выводить почтовый log в отдельный файл /var/adm/maillog
Для этого добавьте такую строку в /etc/syslog.conf:
mail.=info /usr/adm/maillog
И не забудьте создать файл:
touch /var/adm/maillog
1.3 Включаем faillog сервис.
Эту информацию я взял с форума на www.slackware.com. Более конкретно не помню. Если интересно, воспользуйтесь search функцией в форуме Development. Не знаю, баг ли это или нет, но по умолчанию файл /var/adm/faillog отсутствует. Ввиду чего не ведётся log неудачных попыток входа в систему. touch /var/adm/faillog исправит эту ошибку. Вы можете посмотреть информацию о неудачных попытках входа в систему при помощи команды: faillog [-u login-name] [-a] [-t days] [-m max] [-pr]. См. man faillog.
1.4 Некоторые подробности использования tcp wraper.
Постановка задачи: Обрезать доступ ко всем сервисам, запускаемым с помощью tcp wraper домену microsoft.com, сети 137.224.0.0 и хосту 129.125.42.107. При этом так же записывать все поступающие запросы в файл /var/adm/denny.log.
Итак, /etc/hosts.denny:
ALL: 137.224. 129.125.42.107 .microsoft.com: spawn (/usr/bin/echo `date` 'request from '%d@%h `finger -l @%h`>>/var/adm/denny.log)
ALL - указывает, к каким сервисам относится правило. В данном случае ко всем.
список тех, на кого распрстраняется правило.
spawn (shell команда)
Постановка задачи: Далее мы всё-таки разрешим определённым хостам (137.224.129.22 - ftp, а 137.224.129.203 - telnet, ну и bill.microsoft.com - ALL) доступ к машине, но будем записывать информацию о запросах в файл /var/adm/allow.log.
Итак, /etc/hosts.allow:
proftpd: 137.224.129.22: spawn (/usr/bin/echo `date` 'request from '%d@%h `finger -l @%h` >> /var/log/allow.log) in.telnetd: 137.224.129.203: spawn (/usr/bin/echo `date` 'request from '%d@%h `finger -l @%h`>> /var/adm/allow.log) ALL: bill.microsoft.com: spawn (/usr/bin/echo `date` 'request from '%d@%h `finger -l @%h`>> /var/adm/allow.log)
2.1 Проблема с запуском программы
Что делать, если после того, как вы напечатали так необходимую вам команду всё что вы увидели в ответ - вывод об ошибке. О том, что в системе нет необходимой shared library. Но вы не знаете, какой именно библиотеки не хватает.
Постановка задачи: есть программа coolprogram. Но для её корректной работы не хватает какой-то из библиотек. Давайте определим, какой именно:
ldd `which coolprofram'
Если вы ещё не в курсе, то текст заключённый в такие кавычки ` (кнопка слева вверху на клавиатуре) будет рассматриватся как команда bash и заменен при выполнении на вывод команды, указанной в кавычках. Т.е. в данном случае на полный путь к команде coolprogram. А ldd выведет информацию о всех используемых програмой coolprogram библиотеках и выдаст полные пути к каждой из них. И если какая-то из библиотек не найдена в системе, ldd скажет вам об этом.
2.2 Определение принадлежности конкретного файла к какому-то из пакетов
Постановка задачи: есть файл, скажем /usr/lib/lynx/lynx.cfg. Необходимо определить, к какому пакету он относится.
Для каждого установленного пакета существует соответсвующий файл в /var/adm/packages с полным списком файлов, принадлежащим этому пакету (а точнее там указан путь относительный к корневому коталогу. Т.е. без предшевсвующего /). Так же все скрипты выполняемые при установке пакетов находятся в /var/adm/scripts. Для определения принадлежности того самого /usr/lib/lynx/lynx.cfg давайте выполним команду:
grep usr/lib/lynx/lynx.cfg /var/adm/packages/*
lynx:usr/lib/lynx/lynx.cfg
Это в простейшем случае. А что если там просто нет такого файла? Тогда, возможно, файл является симлинком или создан установочным скриптом пакета. В таком случае вам может помочь команда grep имяфайла /var/adm/scripts/*. в некоторых случаях и это не сработает. Тогда попробуйте grep resolv.conf /var/adm/packages/*. И внимательно изучите вывод. В данном случае (resolv.conf) находится в пакете tcpip1. но не в etc, а в etc-incoming. В подобной ситуации загляните в /var/adm/scripts/tcpip1 и попытайтеь разобраться, что к чему.
2.3 mysql
Если вы как и я решили воспользоваться mysql сервером, из пакета ap1/mysql.tgz, имейте ввиду следущее. Выполнять команду mysql_install_db следует от имени пользователя mysql. Иначе потом прийдётся в ручную подправлять права в каталоге /var/lib/mysql. Итак, от имени root: su mysql; и лишь потом mysql_install_db. Затем нам необходимо побеспокоится о том, что mysql автоматически запускается при включении компьютера. Для этого скопируйте /usr/share/mysql.server в /etc/rc.d. И добавьте такие строки в rc.local:
if [ -x /etc/rc.d/mysql.server ]; then echo "Запускаем mysql" . /etc/rc.d/mysql.server start fi
Ну и разумеется, лучше всего запускать сервер от имени пользователя mysql.mysql (который по умолчанию уже существует в Slackware). Для этого найдите строку, запускающую сервер в файле mysql.server, и добавьте в конец строки --user=mysql.
Консоль по сей день является самым быстрым и удобным инструментом не только системных администраторов, но и многих программистов. Так почему-же не сделать этот мощный инструмент ещё и вмеру красивым? Приведённые здесь настройки предложены Данилой Жукоцким на форуме сайта http://sle.how-to.ru
3.1 Настраиваем консоль Если кому не нравится стандартный курсор консоли, попробуйте такую команду:
echo -e "\033[?18;0;64c"
Это красный, не мигающий курсор, с белой тонкой чертой внизу.
А как быть если вам надоел цвет текста белый на чёрном? Очень просто:
setterm -fore green -back black -store
После этого текст станет зелёным, а фон чёрным. Хотя мне больше нравится cyan на чёрном.
Если хотите включить NumLock, можно воспользоваться командой:
setleds -D +num
Если вас раздражает писк, издаваемый консолью когда ей что-то не нравится, попробуйте такую команду:
setterm -blength 0А теперь соберём всё это вместе. Поместите для этого такие строки в /etc/rc.d/rc.local:
for s in `ls /dev/tty[0-9]*`; do echo -e "\033[?18;0;64c" > $s setterm -fore cyan -back black -blength 0 -store > $s setleds -D +num < $s doneЕсли вы пожелаете, можете прописать этот текст сразу в /etc/rc.d/rc.M. Где-то в начале. Тогда некоторые из системных сообщений при загрузке системы так эе станут красивыми.
3.2 Дополнение от Алекандра Власова
Отправитель:"Alexander A. Vlasov"(Nakosy Inc.) Получатель:dolphin77@mail.od.ua Дата:Tue, 9 Apr 2002 13:09:18 +0400В довесок к теме "украсивления" консоли Я использую цветовыделение рутового приглашения - чтоб красный цвет всегда напоминал мне, кто я есть 8) К тому же при работе в окне терминала (rxvt, xterm) полезно в заголовке видеть, где я нахожусь (существенно упрощает поиск нужного окна при десятке открытых rxvt 8) ) Вот мой .bash_profile (он же .bashrc) case $TERM in xterm*) export PS1='\[\033]2;\u@\h:\w\007\033[32m\]\u@\h:\w\$\[\033[0m\] ' ;; *) export PS1='\[\033[32m\]\u@\h:\w\$\[\033[0m\] ' ;; esac eval `dircolors -b` -- with best regards, Alexander A. Vlasov Nakosy Inc. ICQ #102566043 mail zulu@zulu.rusbiz.com Итог
Нет предела совершенству. Удачи вам в изучении Linux. Буду рад, если вы изъявите желание добавить что-либо в этот документ.
Документ впервые опубликован - 3.12.2001.
Дата последнего обновления - 09.04.2002.
copyright by dolphin.