Хитрости и полезности, упрощающие работу.

			    		"Не было бы полноты без печали 
				     и томления, поскольку без них нет 
				     трезвости и доброты, а мудрость 
				     без доброты и знание без трезвости 
				     бесполезны."  
						       Карлос Кастанеда 
						     "Внутренний огонь"
1  Работа с log-файлами
1.1   Выводим syslog на консоль
1.2   Выводим maillog в отдельный файл
1.3   Включаем faillog сервис
1.4   Некоторые подробности использования tcp wraper
2  Прочее
2.1   Проблема с запуском программы
2.2   Определение принадлежности конкретного файла к какому-то из пакетов
2.3   mysql
3  Работаем красиво
3.1   Настраиваем консоль
3.2   Дополнение от Александра Власова
   Итог

В этой статье я попробую собрать большинство из тех трюков, которые заметно упрощают работу системного администратора 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   Работа с log-файлами.

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  Прочее

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.

3  Работаем красиво.

Консоль по сей день является самым быстрым и удобным инструментом не только системных администраторов, но и многих программистов. Так почему-же не сделать этот мощный инструмент ещё и вмеру красивым? Приведённые здесь настройки предложены Данилой Жукоцким на форуме сайта 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.