Операционная система, позволяющая задействовать все возможности компьютера, резко отличается от специализированного программного обеспечения огромным числом так называемых "вариантов использования" (use cases) и обширнейшими возможностями тонкой настройки для решения задач конкретного пользователя наилучшим способом. Достаточно сравнить какую-нибудь игровую приставку (например, PlayStation2) под управлением собственной операционной системы и ее же под управлением Linux. Вычислительная и мультимедийная мощность такого компьютера весьма высока (известно, что именно компьютерные игры определяют сейчас ресурсопотребление персонального компьютера). Однако способы управления одной и другой системами настолько различны, что неподготовленный человек просто теряется при виде возможностей Linux: на какие кнопки нажимать? А кнопок-то и нет...
Можно попытаться описать операционную систему как большой и сложный универсальный инструмент для решения любых задач. Предполагается, что пользователь, прочтя документацию, в которой описывается, как работает система и как применять ее в различных ситуациях, сможет решать и свои задачи. Правда, для этого ему придется прочесть большую часть документации по системе (в том числе и технической) и перепрограммировать некоторые части системы сообразно своим нуждам. На такой подвиг способны немногие, времени это займет немало, да и вероятность ошибки (которая тем выше, чем сложнее средства управления системой) при таком подходе недопустимо велика. Сами утилиты или службы Linux, каждую из которых можно "окинуть взором" и понять, что она умеет и чего в ней не хватает, разрабатываются именно теми из пользователей, у которых хватает времени, знаний и навыков на такое полное освоение (см. лекции 17 и 18). Вывод: пользователь – не разработчик, ему все-таки важнее быстро и качественно решить задачу, чем долго совершенствовать инструмент решения.
Можно пойти обратным путем: попытаться предусмотреть все основные способы использования операционной системы на всех основных пользовательских задачах, и на каждый такой способ создать (запрограммировать) отдельную часть, управляемую "кнопкой" или утилитой. Эту часть обычно называют "решением" (solution), и в документации пишут, что должно быть "на входе" системы, и что получается "на выходе" после применения решения. Если пользователь не умеет сам поставить задачу, или делает это в неопределенной форме ("хочу, чтобы был текст", "хочу, чтобы играла музыка"), этот способ работает превосходно: та же игровая приставка – это отличное решение крайне неопределенной задачи "хочу без толку потратить время". Однако стоит пользователю захотеть чего-то конкретного, начинаются трудности. Трудности могут быстро стать непреодолимыми, как только для этого "конкретного" не окажется готового решения: внутренняя структура систем, ориентированных на "решения", столь сложна и столь плохо документирована, что сделать что-либо вручную, скорее всего, не удастся. Вывод: пользователь, понимающий суть собственных задач, – не "клиент", он должен иметь возможность быстро и качественно решать задачи самостоятельно, а не выбирать из готовых "решений" то, которое нанесет меньше вреда.
Что же нужно идеальному – достаточно подготовленному, чтобы действовать самостоятельно, и достаточно занятому, чтобы не переделывать систему – пользователю? По-видимому, механизм, с помощью которого можно сформулировать и придать операционной системе все требуемые свойства, имея возможность описывать решение задачи, по крайней мере, на том же уровне конкретности, на котором было поставлено ее условие. Большая часть других, не нужных для решения собственных задач пользователя, свойств должны быть "стандартными" и не требовать его вмешательства.
Так возникает идея разделить систему на два подмножества:
Все, чего может коснуться рука человека, из
Таким образом система полностью описывается в виде набора необходимых
компонентов
Как проще всего создать
Зачастую для того, чтобы собрать более или менее отвечающий
требованиям пользователя
Вот пример поведения обычного шамана-настройщика (пакет wvdial, заведующий модемным подключением к Internet):
[root@localhost root]# wvdialconf
Usage: wvdialconf
(create/update a wvdial.conf file automatically)
[root@localhost root]# wvdialconf .wvdialrc
Scanning your serial ports for a modem.
Port Scan<*1>: Scanning ttyS4 first, /dev/modem is a link to it.
. . .
ttyS4<*1>: Modem Identifier: ATI -- Xircom CardBus 10/100+Modem 56 (Revision 2.40)
. . .
ttyS4<*1>: ATQ0 V1 E1 S0=0 C1 D2 +FCLASS=0 -- OK
ircomm0<*1>: ATQ0 V1 E1 -- failed at 9600 and 19200 baud.
. . .
ircomm9<*1>: ATQ0 V1 E1 -- failed at 9600 and 19200 baud.
Port Scan<*1>: LT0
. . .
ttyS0<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up.
. . .
ttyS1<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up.
Port Scan<*1>: S2 S3 S5 S6 S7 S8 S10
. . .
Port Scan<*1>: USB11 USB12 USB13 USB14 USB15
Found a modem on /dev/ttyS4, using link /dev/modem in config.
Modem configuration written to .wvdialrc.
ttyS4: Speed 115200; init "ATQ0 V1 E1 S0=0 C1 D2 +FCLASS=0"
Ни о каких наводящих вопросах даже речи не зашло! Программа проверила
более полусотни устройств, не модемы ли они, но нашла всего одно – /dev/ttyS4. Его настройки определились автоматически (и хорошо,
потому что Мефодий не знает, что такое " ATQ0 V1 E1 S0=0 C1
D2 +FCLASS=0 "). wvdialrc создает именно .wvdialrc, так что программа wvdial начнет
работать с модемом, нуждаясь только в пользовательских настройках
(
Яркий пример того, как элементы find /etc -type f 2> /dev/null | xargs
-n1 file | cut -d: -f2 | sort | uniq -c задействует шесть утилит
системы: командную оболочку, find, xargs, cut, sort и uniq, причем
четыре из них запускаются с измененным /etc .
Задание
Однако сам подход к хранению
Одним словом, если есть
methody@localhost:~ $ cat .vimrc so $VIMRUNTIME/vimrc_example.vim " Some mappings map :wall!^M map! ^O:wall!^M " Tune up set shiftwidth=2 tabstop=8 history=200 viminfo='50 set showmode showmatch showcmd ruler modeline set autoindent ignorecase smartcase set nohlsearch noincsearch set dir=/var/tmp set wildmode=list:longest,full set wildmenu " Colouring syntax on colorscheme desert
Вот как выглядит ^O " и " ^M " – это именно соответствующие управляющие символы
(вставленные в текстовый файл с помощью " ^V ", см. лекцию 9). Такой
Как уже было замечено, набор переменных .i18n для настройки языковых
особенностей клавиатуры, языка вывода сообщений и т. п.
methody@localhost:~ $ cat .i18n LANG=ru_RU.KOI8-R LANGUAGE=ru_RU.KOI8-R SYSFONTACM=koi8-r SYSFONT=UniCyr_8x16 DICTIONARY=russian MPAGE="-CKOI8-R" export DICTIONARY MPAGE
Однако хранить настройки специфической программы (не нужные всем
остальным) в имя_переменной=значение ), а самих переменных становится слишком
много, поэтому при просмотре трудно выделить, какая из них к какой
группе настроек относится. Если пытаться упаковать все настройки в
значение одной переменной, это значение окажется трудночитаемым, и
все преимущество текстового формата сойдет на нет. Например,
стандартный ls (точнее, только ее
цветовых предпочтений) – /etc/DIR_COLORS (его можно подменить личным
файлом ~/.dir_colors ) занимает около ста строк вместе с
комментариями. Команда ls использует не этот файл, а создаваемую
утилитой dircolors переменную LS_COLORS, значение которой –
600-символьная строка без всяких комментариев.
Если .d ": файл разделяется
на несколько независимых друг от друга файлов так, что редактировать
приходится только один из файлов, а программа во время самонастройки
считывает все.
Другой способ опирается на то, что изменения, которые пользователь
вносит в /etc/fstab при появлении или удалении
съемного дискового носителя (например, лазерного диска), считывает
данные из /etc/updfstab.conf. Сам этот файл
состоит из единственной строки: include /etc/updfstab.conf.default,
что приводит к чтению файла с настройками по умолчанию, где задан
способ работы со многими съемными устройствами системы. Если
администратору нужно как-то изменить поведение updfstab в отношении
определенного устройства, он копирует соответствующую группу настроек
из updfstab.conf.default в updfstab.conf после строчки include... и
исправляет их. То, что эти группы настроек читаются дважды, не играет
особой роли: чтение коротких файлов выполняется быстро.
Наконец, третий способ сделать .d ", где группе
соответствует отдельный файл, однако нередки ситуации, когда
разбивать на файлы неудобно (например, если группы не полностью
независимы, поэтому может понадобиться редактировать их сразу
несколько). wvdial, например,
секционируется по адресату (провайдеру) плюс отдельная секция "по
умолчанию". Сами секции отделяются друг от друга заголовками,
заключенными в квадратные скобки:
root@localhost:~> cat .wvdialrc
[Dialer Defaults]
Modem = /dev/modem
Baud = 115200
Init1 = ATZ
Init2 = ATQ0 L0 M4 V1 E1 S0=0 C1 D2 +FCLASS=0
Auto DNS = on
Modem Type = Analog Modem
[Dialer hotspace]
Phone = 0123456
Username = fireman
Password = Fire!Fire!
TOnline = true
[Dialer warlock]
Phone = 0246813
Username = cop-120
Password = gimmethegun
Force Address=10.0.0.120
Утилита wvdial обладает высокоразвитым искусственным интеллектом: она
самостоятельно догадывается, какой именно тип , и только после этого запустить на сервере уже запущен, а
настройки "Username" и "Password" означают идентификационную
информацию протокола . Обо всем этом и о
многом другом wvdial способна догадаться,так же как wvdialconf умел
определять, какое же из устройств является модемом.
Однако на любой искусственный интеллект найдется непостижимая ему
жизненная ситуация. На одном из серверов (секция "Dialer hotspace") тоже стоит программа с зачатками искусственного интеллекта, которая тоже пытается определить, каким способом хочет идентифицироваться
позвонивший. Оттого эти два кудесника, созвонившись, все ждут, пока
кто-нибудь не проявит себя... Помогает настройка TOnline, которая
заставляет wvdial немедленно задействовать протокол ppp, на что
сервер, подумавши "ах, ppp!", с облегчением запускает . Остается
вопрос: почему эта полезная настройка никак не отражена в
документации (ее нашел в исходных текстах программы Гуревич)? Не
потому ли, что пара wvdialconf-wvdial не по-Linux-овски стремится все
делать за пользователя, а стало быть, пользовательская документация
для разработчиков этой программы – не главное?
/etc/man.conf, управляющий работой команды man, оформлен в самодокументированном стиле:
methody@localhost:~ $ cat /etc/man.conf
. . .
# NOCACHE keeps man from creating cache pages ("cat pages")
# (generally one enables/disable cat page creation by
# creating/deleting the directory they would live in – man
# never does mkdir)
#
# NOCACHE
# The command "man -a xyzzy" will show all man pages for xyzzy.
# When CMP is defined man will try to avoid showing the same
# text twice. (But compressed pages compare unequal.)
#
CMP /usr/bin/cmp -s
. . .
Мефодий, может быть, и не понял бы сразу, зачем команде man использовать утилиту cmp, однако в поясняющем комментарии написано: когда нужно показать несколько руководств разом, они предварительно сравниваются, и показываются только несовпадающие.
Если пойти еще дальше, то можно создать несколько различных файлов с
примерами настроек, чтобы пользователь мог взять один из них и
довести до нужного ему состояния. Именно такую – демонстрационную –
настройку Мефодий и включил в качестве настройки по умолчанию в свой .vimrc (в первой строке). Кстати, на самом деле /usr/share/ – эдакая "схема .d/.d ", где файлы colorscheme desert из .vimrc приводит к чтению /usr/share/.
irssi ) или содержать в себе дополнительные
средства lynx не просто хорошо документирован, но и размечен теми
же средствами, какие используются в самом броузере для представления
HTML).
Как правило,
В /etc хранятся настройки системных служб, в том числе настройки по
умолчанию, настройки по умолчанию пользовательских утилит, modules.conf ). Там же располагаются и
/etc, так это разнообразных примеров настройки той или иной
службы. Считается, что пример – это часть документации, и их следует
помещать, например, в /usr/share/doc/название_службы/examples.
Файлы, имеющие отношение к процессу /boot ; это стоит иметь в виду, так как /boot/ – тоже часть /var/lib.
Смысл термина "песочница" вот в чем. В Linux есть замечательный chroot() и использующая его утилита chroot, формат
командной строки которой chroot каталог команда. Эта утилита
запускает команду, изменив каталог корневым. Соответственно, все подкаталоги каталога
представляются команде каталогами первого уровня вложенности, и т. д.
Если необходимо во что бы то ни стало ограничить область действия
некоторой утилиты (например, по причине ее небезопасности), можно
запускать ее с помощью chroot. Тогда, даже имея права
суперпользователя, эта утилита получит доступ только к каталогу и его
подкаталогам, а /etc и прочие важные части системы окажутся в
неприкосновенности. Сам каталог как раз и играет роль "песочницы", в
которую утилиту "пустили поиграть", позволяя вытворять что угодно.
Часто бывает, что в "песочнице" есть и свой каталог etc, содержащий
необходимые для запуска утилиты (или системной службы) настройки. Вот
этот-то etc из "песочницы" также входит в список каталогов, хранящих
В /etc могут находиться не только файлы, но и подкаталоги (особенно в
стиле " .d ") и целые поддеревья каталогов. Например, в некоторых
дистрибутивах Linux используется подкаталог /etc/sysconfig. Этот
каталог создается и заполняется файлами при установке системы или при
запуске специального "конфигуратора" – программы-кудесника, задающей
наводящие вопросы. Некоторые /etc/sysconfig, там должны
оказаться настройки, относящиеся не к самим службам или утилитам, а к
способу их запуска при загрузке, а также языковые и сетевые
настройки, тип мыши и т. д.
Несколько /etc/passwd, хранящий учетные данные
пользователей, и /etc/group, определяющий членство пользователей в
группах (во всех, кроме группы по умолчанию):
methody@localhost:~ $ cat /etc/passwd root:x:0:0:System Administrator:/root:/bin/bash bin:x:1:1:bin:/:/dev/null daemon:x:2:2:daemon:/:/dev/null adm:x:3:4:adm:/var/adm:/dev/null lp:x:4:7:lp:/var/spool/lpd:/dev/null . . . nobody:x:99:99:Nobody:/var/nobody:/dev/null shogun:x:400:400:Лев Гуревич:/home/shogun:/bin/zsh methody:x:503:503:Мефодий Кашин:/home/methody:/bin/bash methody@localhost:~ $ cat /etc/group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon,shogun wheel:x:10:root,shogun . . . proc:x:19:root,shogun shogun:x:400: methody:x:503:
Оба файла состоят из строк, поля которых разделяются двоеточиями. В
файле passwd – семь полей. Первое из них определяет login:". Второе
поле в ранних версиях UNIX использовалось для хранения
Авторы UNIX предполагали, что, раз пароль из /etc/passwd
перенесли в "теневой" файл учетных записей – /etc/shadow. На месте x "; если там стоит что-то другое,
Третье и четвертое поля passwd – passwd, содержимое которого ни на что не влияет.
Наконец, шестое и седьмое поля содержат /bin/sh, а если его содержимое не встречается в файле /etc/shells, содержащем допустимые командные интерпретаторы,
неизбежны трудности при
Строки файла /etc/group состоят из четырех полей, причем второе – /etc/passwd, хотя никто не мешает
продублировать /etc/group ). Таким образом,
определение членства пользователя в группах зависит не от его UID, а
от
Упомянутый выше файл /etc/shadow, доступ к которому имеет только
суперпользователь, также состоит из полей, разделяемых двоеточиями.
Помимо -L ",
lock, и " -U ", unlock) утилита usermod, изменяющая учетную запись. С
помощью этой утилиты можно отредактировать и все остальные поля как passwd, так и shadow.
Добавить и удалить пользователя или группу можно с помощью утилит useradd, userdel, groupadd и groupdel соответственно. Не стоит
пользоваться текстовым редактором, так как он не гарантирует passwd и shadow. Даже если
необходимо отредактировать /etc/passwd или /etc/group (например, для
добавления пользователя в группу или удаления его оттуда), стоит
запускать не просто редактор, а vipw или vigr (именно их поведение,
позволяющее соблюсти visudo, описанная
ранее):
[root@localhost root]# useradd -g users -G proc,cdrom -c "Incognito" incognito [root@localhost root]# id incognito uid=504(incognito) gid=100(users) groups=100(users),19(proc),22(cdrom) [root@localhost root]# userdel -r incognito [root@localhost root]# id incognito id: incognito: No such user
Здесь был добавлен пользователь incognito, proc и cdrom, полное имя – "Incognito". Стоит
заметить, что пароль для этой учетной записи установлен не был (чтобы
создать пароль, стоило запустить команду passwd incognito ), и, даже
если бы пользователя тут же не удалили ( userdel -r удаляет также и incognito было бы все равно невозможно.
Подсистемой учетных записей пользуется подсистема login и заканчивая доступом к файлам по протоколу, скажем, FTP. Для
этого недостаточно просто написать "библиотеку
В большинстве дистрибутивов .d ", и настройки каждой
службы, которая использует
[root@localhost root]# ls /etc/pam.d chpasswd groupdel other system-auth userdel chpasswd-newusers groupmod passwd system-auth-use_first_pass usermod crond login sshd user-group-mod groupadd newusers su useradd
В auth –
собственно account – определение, все ли хорошо с учетной
записью пользователя, password – изменение пароля в учетной записи, и session – дополнительные действия непосредственно перед или
непосредственно после того, как пользователь получит доступ к
затребованной услуге. Эти значения принимает первое поле любого файла
настройки из , а в третьем поле записывается модуль, который
проверяет какой-нибудь из аспектов required означает, что в случае неуспеха модуля проверка пройдена не
будет). Четвертое и последующие поля отведены под параметры модуля:
[root@localhost root]# cat /etc/pam.d/login auth include system-auth auth required pam_nologin.so account include system-auth password include system-auth session include system-auth session optional pam_console.so [root@localhost root]# cat /etc/pam.d/system-auth auth required pam_tcb.so shadow count=8 nullok account required pam_tcb.so shadow password required pam_tcb.so use_authtok shadow count=8 write_to=tcb session required pam_tcb.so
Такие настройки login обнаружил Мефодий на своем компьютере. Во всех
четырех случаях используется system-auth (к нему
обращаются и другие службы), с некоторыми дополнениями. Так, во время pam_nologin.so дополнительно проверяет, не запрещено ли
пользователям регистрироваться вообще (как это бывает за несколько
минут до перезагрузки системы), а перед входом в систему и после
выхода из нее pam_console.so выполняет описанную в лекции 6 "передачу
прав на владение устройствами" (и, соответственно, лишение
пользователя этих прав).
Каталог /etc/ – замечательный пример того, как system-auth показывают, что в этом дистрибутиве используется не
просто "теневой" файл паролей, а схема /etc/shadow задействованы файлы вида /etc/,
причем права доступа к ним устроены таким образом, чтобы при
выполнении команды passwd можно было обойтись без подмены
пользовательского
Проста и остроумна в Linux подсистема ведения syslogd, управляемый /etc/syslog.conf и
" .d "-каталогом /etc/syslog.d. Если какой-нибудь демон или служба
желают сообщить системе о том, что наступило событие, которое стоит
запомнить, у нее есть два пути. Во-первых, можно просто добавлять
очередную запись в файл, который сам этот демон и открыл; этот файл
будет журналом его сообщений. Во-вторых, можно воспользоваться syslog(), который переадресует текстовое сообщение
специальному демону – syslogd – а уж тот разберется, что с этим
сообщением делать: записать в файл, вывести на 12-ю консоль или
забыть о нем. Второй путь ( централизованная syslogd просто не
справится.
Все события, о которых сообщается syslogd, подразделяются
горизонтально – по типу службы (facility), с которой это событие
произошло, и вертикально – по степени его важности (priority). Типов
событий насчитывается около двадцати (среди них auth, daemon, kern, mail и т. п., а также восемь неименованных, от local0 до local7 ).
Степеней важности всего восемь, по возрастанию: debug, info, notice, warning, err, crit, alert и emerg. Таким образом, каждое событие
определяется парой значений, например, mail.err означает для syslogd
событие, связанное с почтой, притом важности, не меньшей err. Из
таких пар (с возможной заменой типа или важности на "*", что означает
"любые", или none, что означает "никакие") составляется /etc/syslog.conf:
[root@localhost root]# cat /etc/syslog.conf *.notice;mail.err;authpriv.err /var/log/messages authpriv.*;auth.* /var/log/security.log *.emerg * *.* /dev/tty12 mail.info /var/log/maillog
В первом поле строки указываются ; ", а во втором – хранилище сообщений (файл, /var/log/messages попадают все сообщения важности не
меньшей, чем notice, за исключением сообщений типа mail и authpriv,
которые попадают туда, только если имеют важность не ниже err.
Сообщения типа authpriv и auth любой важности попадают в файл /var/log/security.log, а типа mail и важности не ниже info – в файл /var/log/maillog. Сообщения типа emerg (наивысшей важности) выводятся
на все
Во многих системах используется основательно доработанный syslogd,
позволяющий фильтровать сообщения не только по типу/важности, но и,
например, по отправителю, задавать точные (а не "не меньшие")
значения priority и т. п., однако такие доработки нужны для того,
чтобы либо вести практически нефильтрованную
Стоит заметить, что каталог /etc/syslog.d в новых версиях syslogd
предназначен для хранения не профильных .d ", а syslog().
Другой пример типичной для Linux службы, управляемой или список всех
доступных на чтение файлов системы, locatedb (поискать по этому
списку можно командой locate ); нужно собирать статистику по работе
системы, анализировать цельность системы (этим занимаются службы
OSec, TripWire или AIDE) и производить множество других регулярных
действий. Всем этим и занимается демон cron.
cron называется /etc/crontab.
[root@localhost root]# cat /etc/crontab #minute (0-59), #| hour (0-23), #| | day of the month (1-31), #| | | month of the year (1-12), #| | | | day of the week (0-6 with 0=Sunday). #| | | | | user #| | | | | | commands 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
Первые пять полей этого файла определяют время запуска команды:
минуту, час, число месяца, месяц и день недели. Символ "*" означает,
что соответствующая часть даты не учитывается. Шестое поле – имя
пользователя, от лица которого запускается команда, указанная в
остальных полях строки. Так, в примере команда run-parts
/etc/cron.weekly будет запускаться в 4 часа 22 минуты каждое
воскресенье (нулевой день) любого числа любого месяца. Как видно из
примера, обычно /etc/crontab невелик: чаще всего он состоит из
почасового, подневного, понедельного и помесячного запуска
специального сценария (в примере – run-parts ). Этот сценарий
реализует упрощенную схему " .d ", он попросту запускает
отсортированные в 000anacron " – такое имя обеспечит, чтобы этот сценарий был выполнен самым первым./etc/cron.daily ):
[root@localhost root]# ls /etc/cron.daily 000anacron logrotate makewhatis osec stmpclean updatedb
Вот что происходит каждый день на машине Мефодия: запуск anacron и
"прокручивание" , проверка цельности системы с помощью osec,
прореживание старых и неиспользуемых файлов в /tmp (утилита stmpclean ) и, наконец, обновление базы updatedb.
Пользователям системы можно разрешить иметь собственные расписания,
также обрабатываемые демоном cron. Эти расписания имеют тот же
синтаксис, что и crontab, только шестое поле ("user") в них
отсутствует. Редактировать пользовательские таблицы рекомендуется с
помощью команды crontab -e (чтобы не подсунуть демону синтаксически
неверный файл). Сами таблицы могут храниться, в зависимости от версии
и настроек cron, в /var/spool/cron/crontabs, /var/spool/cron, /var/cron/tabs или еще где-нибудь.
Служба anacron появилась в Linux-системах в то время, когда их начали
активно использовать на персональных рабочих станциях. Такие станции,
в отличие от серверов, не обязаны работать круглосуточно. Скорее
всего, на ночь, на праздники и на время отпуска их выключают. Это
значит, что все настройки cron надо менять в соответствии с графиком
включений/выключений (иначе cron.daily никогда не выполнится в четыре
часа ночи) – или запускать отдельную службу, которая будет выполнять некоторые задачи не по расписанию, а потому что их давно уже пора cron с намеком на анахронизм, то есть
несвоевременность выполнения заданий.anacron называется /etc/anacrontab.
Еще изучая работу syslog, Мефодий не расставался с мыслью, что файл,
в котором записывается /var, она в конце
концов заполнится журналами под завязку – если как-то их не
укорачивать. К сожалению, в Linux укоротить файл от начала, отрезав
самые старые записи, нельзя, как нельзя и добавлять новые записи в
начало файла. Эти операции легко реализовать с помощью копирования
нужной области в новый файл и последующего переименования, но,
во-первых, соблюсти
Поэтому в Linux принят другой, существенно менее ресурсоемкий
алгоритм, позволяющий избежать переполнения /var: так называемое
"прокручивание"
Как правило, имя "первого старого" журнала получается путем добавления к имени журнала суффикса ".1", второго – ".2" и т. д.:
[root@localhost root]# ls -l /var/log/syslog/messages* -rw-r----- 1 root adm 292654 Dec 15 14:01 /var/log/syslog/messages -rw-r----- 1 root adm 34452 Dec 13 01:09 /var/log/syslog/messages.1.bz2 -rw-r----- 1 root adm 35892 Dec 6 09:38 /var/log/syslog/messages.2.bz2 -rw-r----- 1 root adm 60806 Nov 28 10:59 /var/log/syslog/messages.3.bz2 -rw-r----- 1 root adm 61063 Nov 21 10:47 /var/log/syslog/messages.4.bz2 -rw-r----- 1 root adm 60079 Nov 14 21:18 /var/log/syslog/messages.5.bz2
Прокручиванием logrotate,
которая тоже управляется и /etc/logrotate.conf, и " .d "-каталогом /etc/logrotate.d/. Согласно
настройкам, старые файлы можно сжимать упаковщиками bzip2 (как в
примере) или gzip, можно задавать им определенные права доступа,
можно посылать syslogd занимается его пополнением) и т.
п.
Немало /etc. В Linux принято
предоставлять пользователю возможность задавать ls. Если пользователю нужно работать не со своими файлами, а именно с
настройками, он всегда может применить ключ " -a " или " -A ":
methody@localhost:~ $ ls bin cat.info cat.stderr Documents examples grep.info textfile tmp methody@localhost:~ $ ls -AF .alias .bashrc .emacs .inputrc~ textfile .Xauthority .bash_history bin/ examples/ .lpoptions tmp/ .xsession.d/ .bash_logout cat.info grep.info .pinerc .viminfo .bash_profile cat.stderr .i18n .pyhistory .vimrc .bash_profile~ Documents/ .inputrc .pythonstartup .vimrc~ methody@localhost:~ $ rm .*~
Многие утилиты создают ls -A
становится все больше. Файл .lpoptions задает параметры подсистемы
печати, .pinerc – это настройки почтового клиента pine, .viminfo –
файл .Xauthority и каталог .xsession.d управляют запуском .aliases и .i18n просто "втягиваются" стартовым
командным сценарием bash, потому что упомянуты в нем явно; строго
говоря, они могли бы называться и по-другому. Все
Файл .pythonstartup (настройки интерпретатора языка программирования
Python) выполняется потому, что имя этого файла задано в переменной PYTHONSTARTUP. Мефодию пришлось дописать строку PYTHONSTARTUP="/home/methody/.pythonstartup"; export PYTHONSTARTUP в ~/.bash_profile и "C-i": complete в ~/.inputrc, чтобы достраивание
заработало и в этом интерпретаторе. Еще один файл, .pyhistory,
используется в самом .pythonstartup:
methody@localhost:~ $ cat .pythonstartup
import atexit, os, readline, rlcompleter
historyPath = os.path.expanduser("~/.pyhistory")
def save_history(historyPath=historyPath):
import readline
readline.write_history_file(historyPath)
if os.path.exists(historyPath):
readline.read_history_file(historyPath)
atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath
Подавляющее большинство
Операционная система, позволяющая задействовать все возможности компьютера, резко отличается от специализированного программного обеспечения огромным числом так называемых "вариантов использования" (use cases) и обширнейшими возможностями тонкой настройки для решения задач конкретного пользователя наилучшим способом. Достаточно сравнить какую-нибудь игровую приставку (например, PlayStation2) под управлением собственной операционной системы и ее же под управлением Linux. Вычислительная и мультимедийная мощность такого компьютера весьма высока (известно, что именно компьютерные игры определяют сейчас ресурсопотребление персонального компьютера). Однако способы управления одной и другой системами настолько различны, что неподготовленный человек просто теряется при виде возможностей Linux: на какие кнопки нажимать? А кнопок-то и нет...
Можно попытаться описать операционную систему как большой и сложный универсальный инструмент для решения любых задач. Предполагается, что пользователь, прочтя документацию, в которой описывается, как работает система и как применять ее в различных ситуациях, сможет решать и свои задачи. Правда, для этого ему придется прочесть большую часть документации по системе (в том числе и технической) и перепрограммировать некоторые части системы сообразно своим нуждам. На такой подвиг способны немногие, времени это займет немало, да и вероятность ошибки (которая тем выше, чем сложнее средства управления системой) при таком подходе недопустимо велика. Сами утилиты или службы Linux, каждую из которых можно "окинуть взором" и понять, что она умеет и чего в ней не хватает, разрабатываются именно теми из пользователей, у которых хватает времени, знаний и навыков на такое полное освоение (см. лекции 17 и 18). Вывод: пользователь – не разработчик, ему все-таки важнее быстро и качественно решить задачу, чем долго совершенствовать инструмент решения.
Можно пойти обратным путем: попытаться предусмотреть все основные способы использования операционной системы на всех основных пользовательских задачах, и на каждый такой способ создать (запрограммировать) отдельную часть, управляемую "кнопкой" или утилитой. Эту часть обычно называют "решением" (solution), и в документации пишут, что должно быть "на входе" системы, и что получается "на выходе" после применения решения. Если пользователь не умеет сам поставить задачу, или делает это в неопределенной форме ("хочу, чтобы был текст", "хочу, чтобы играла музыка"), этот способ работает превосходно: та же игровая приставка – это отличное решение крайне неопределенной задачи "хочу без толку потратить время". Однако стоит пользователю захотеть чего-то конкретного, начинаются трудности. Трудности могут быстро стать непреодолимыми, как только для этого "конкретного" не окажется готового решения: внутренняя структура систем, ориентированных на "решения", столь сложна и столь плохо документирована, что сделать что-либо вручную, скорее всего, не удастся. Вывод: пользователь, понимающий суть собственных задач, – не "клиент", он должен иметь возможность быстро и качественно решать задачи самостоятельно, а не выбирать из готовых "решений" то, которое нанесет меньше вреда.
Что же нужно идеальному – достаточно подготовленному, чтобы действовать самостоятельно, и достаточно занятому, чтобы не переделывать систему – пользователю? По-видимому, механизм, с помощью которого можно сформулировать и придать операционной системе все требуемые свойства, имея возможность описывать решение задачи, по крайней мере, на том же уровне конкретности, на котором было поставлено ее условие. Большая часть других, не нужных для решения собственных задач пользователя, свойств должны быть "стандартными" и не требовать его вмешательства.
Так возникает идея разделить систему на два подмножества:
Все, чего может коснуться рука человека, из
Таким образом система полностью описывается в виде набора необходимых
компонентов
Как проще всего создать
Зачастую для того, чтобы собрать более или менее отвечающий
требованиям пользователя
Вот пример поведения обычного шамана-настройщика (пакет wvdial, заведующий модемным подключением к Internet):
[root@localhost root]# wvdialconf
Usage: wvdialconf
(create/update a wvdial.conf file automatically)
[root@localhost root]# wvdialconf .wvdialrc
Scanning your serial ports for a modem.
Port Scan<*1>: Scanning ttyS4 first, /dev/modem is a link to it.
. . .
ttyS4<*1>: Modem Identifier: ATI -- Xircom CardBus 10/100+Modem 56 (Revision 2.40)
. . .
ttyS4<*1>: ATQ0 V1 E1 S0=0 C1 D2 +FCLASS=0 -- OK
ircomm0<*1>: ATQ0 V1 E1 -- failed at 9600 and 19200 baud.
. . .
ircomm9<*1>: ATQ0 V1 E1 -- failed at 9600 and 19200 baud.
Port Scan<*1>: LT0
. . .
ttyS0<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up.
. . .
ttyS1<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up.
Port Scan<*1>: S2 S3 S5 S6 S7 S8 S10
. . .
Port Scan<*1>: USB11 USB12 USB13 USB14 USB15
Found a modem on /dev/ttyS4, using link /dev/modem in config.
Modem configuration written to .wvdialrc.
ttyS4: Speed 115200; init "ATQ0 V1 E1 S0=0 C1 D2 +FCLASS=0"
Ни о каких наводящих вопросах даже речи не зашло! Программа проверила
более полусотни устройств, не модемы ли они, но нашла всего одно – /dev/ttyS4. Его настройки определились автоматически (и хорошо,
потому что Мефодий не знает, что такое " ATQ0 V1 E1 S0=0 C1
D2 +FCLASS=0 "). wvdialrc создает именно .wvdialrc, так что программа wvdial начнет
работать с модемом, нуждаясь только в пользовательских настройках
(
Яркий пример того, как элементы find /etc -type f 2> /dev/null | xargs
-n1 file | cut -d: -f2 | sort | uniq -c задействует шесть утилит
системы: командную оболочку, find, xargs, cut, sort и uniq, причем
четыре из них запускаются с измененным /etc .
Задание
Однако сам подход к хранению
Одним словом, если есть
methody@localhost:~ $ cat .vimrc so $VIMRUNTIME/vimrc_example.vim " Some mappings map :wall!^M map! ^O:wall!^M " Tune up set shiftwidth=2 tabstop=8 history=200 viminfo='50 set showmode showmatch showcmd ruler modeline set autoindent ignorecase smartcase set nohlsearch noincsearch set dir=/var/tmp set wildmode=list:longest,full set wildmenu " Colouring syntax on colorscheme desert
Вот как выглядит ^O " и " ^M " – это именно соответствующие управляющие символы
(вставленные в текстовый файл с помощью " ^V ", см. лекцию 9). Такой
Как уже было замечено, набор переменных .i18n для настройки языковых
особенностей клавиатуры, языка вывода сообщений и т. п.
methody@localhost:~ $ cat .i18n LANG=ru_RU.KOI8-R LANGUAGE=ru_RU.KOI8-R SYSFONTACM=koi8-r SYSFONT=UniCyr_8x16 DICTIONARY=russian MPAGE="-CKOI8-R" export DICTIONARY MPAGE
Однако хранить настройки специфической программы (не нужные всем
остальным) в имя_переменной=значение ), а самих переменных становится слишком
много, поэтому при просмотре трудно выделить, какая из них к какой
группе настроек относится. Если пытаться упаковать все настройки в
значение одной переменной, это значение окажется трудночитаемым, и
все преимущество текстового формата сойдет на нет. Например,
стандартный ls (точнее, только ее
цветовых предпочтений) – /etc/DIR_COLORS (его можно подменить личным
файлом ~/.dir_colors ) занимает около ста строк вместе с
комментариями. Команда ls использует не этот файл, а создаваемую
утилитой dircolors переменную LS_COLORS, значение которой –
600-символьная строка без всяких комментариев.
Если .d ": файл разделяется
на несколько независимых друг от друга файлов так, что редактировать
приходится только один из файлов, а программа во время самонастройки
считывает все.
Другой способ опирается на то, что изменения, которые пользователь
вносит в /etc/fstab при появлении или удалении
съемного дискового носителя (например, лазерного диска), считывает
данные из /etc/updfstab.conf. Сам этот файл
состоит из единственной строки: include /etc/updfstab.conf.default,
что приводит к чтению файла с настройками по умолчанию, где задан
способ работы со многими съемными устройствами системы. Если
администратору нужно как-то изменить поведение updfstab в отношении
определенного устройства, он копирует соответствующую группу настроек
из updfstab.conf.default в updfstab.conf после строчки include... и
исправляет их. То, что эти группы настроек читаются дважды, не играет
особой роли: чтение коротких файлов выполняется быстро.
Наконец, третий способ сделать .d ", где группе
соответствует отдельный файл, однако нередки ситуации, когда
разбивать на файлы неудобно (например, если группы не полностью
независимы, поэтому может понадобиться редактировать их сразу
несколько). wvdial, например,
секционируется по адресату (провайдеру) плюс отдельная секция "по
умолчанию". Сами секции отделяются друг от друга заголовками,
заключенными в квадратные скобки:
root@localhost:~> cat .wvdialrc
[Dialer Defaults]
Modem = /dev/modem
Baud = 115200
Init1 = ATZ
Init2 = ATQ0 L0 M4 V1 E1 S0=0 C1 D2 +FCLASS=0
Auto DNS = on
Modem Type = Analog Modem
[Dialer hotspace]
Phone = 0123456
Username = fireman
Password = Fire!Fire!
TOnline = true
[Dialer warlock]
Phone = 0246813
Username = cop-120
Password = gimmethegun
Force Address=10.0.0.120
Утилита wvdial обладает высокоразвитым искусственным интеллектом: она
самостоятельно догадывается, какой именно тип , и только после этого запустить на сервере уже запущен, а
настройки "Username" и "Password" означают идентификационную
информацию протокола . Обо всем этом и о
многом другом wvdial способна догадаться,так же как wvdialconf умел
определять, какое же из устройств является модемом.
Однако на любой искусственный интеллект найдется непостижимая ему
жизненная ситуация. На одном из серверов (секция "Dialer hotspace") тоже стоит программа с зачатками искусственного интеллекта, которая тоже пытается определить, каким способом хочет идентифицироваться
позвонивший. Оттого эти два кудесника, созвонившись, все ждут, пока
кто-нибудь не проявит себя... Помогает настройка TOnline, которая
заставляет wvdial немедленно задействовать протокол ppp, на что
сервер, подумавши "ах, ppp!", с облегчением запускает . Остается
вопрос: почему эта полезная настройка никак не отражена в
документации (ее нашел в исходных текстах программы Гуревич)? Не
потому ли, что пара wvdialconf-wvdial не по-Linux-овски стремится все
делать за пользователя, а стало быть, пользовательская документация
для разработчиков этой программы – не главное?
/etc/man.conf, управляющий работой команды man, оформлен в самодокументированном стиле:
methody@localhost:~ $ cat /etc/man.conf
. . .
# NOCACHE keeps man from creating cache pages ("cat pages")
# (generally one enables/disable cat page creation by
# creating/deleting the directory they would live in – man
# never does mkdir)
#
# NOCACHE
# The command "man -a xyzzy" will show all man pages for xyzzy.
# When CMP is defined man will try to avoid showing the same
# text twice. (But compressed pages compare unequal.)
#
CMP /usr/bin/cmp -s
. . .
Мефодий, может быть, и не понял бы сразу, зачем команде man использовать утилиту cmp, однако в поясняющем комментарии написано: когда нужно показать несколько руководств разом, они предварительно сравниваются, и показываются только несовпадающие.
Если пойти еще дальше, то можно создать несколько различных файлов с
примерами настроек, чтобы пользователь мог взять один из них и
довести до нужного ему состояния. Именно такую – демонстрационную –
настройку Мефодий и включил в качестве настройки по умолчанию в свой .vimrc (в первой строке). Кстати, на самом деле /usr/share/ – эдакая "схема .d/.d ", где файлы colorscheme desert из .vimrc приводит к чтению /usr/share/.
irssi ) или содержать в себе дополнительные
средства lynx не просто хорошо документирован, но и размечен теми
же средствами, какие используются в самом броузере для представления
HTML).
Как правило,
В /etc хранятся настройки системных служб, в том числе настройки по
умолчанию, настройки по умолчанию пользовательских утилит, modules.conf ). Там же располагаются и
/etc, так это разнообразных примеров настройки той или иной
службы. Считается, что пример – это часть документации, и их следует
помещать, например, в /usr/share/doc/название_службы/examples.
Файлы, имеющие отношение к процессу /boot ; это стоит иметь в виду, так как /boot/ – тоже часть /var/lib.
Смысл термина "песочница" вот в чем. В Linux есть замечательный chroot() и использующая его утилита chroot, формат
командной строки которой chroot каталог команда. Эта утилита
запускает команду, изменив каталог корневым. Соответственно, все подкаталоги каталога
представляются команде каталогами первого уровня вложенности, и т. д.
Если необходимо во что бы то ни стало ограничить область действия
некоторой утилиты (например, по причине ее небезопасности), можно
запускать ее с помощью chroot. Тогда, даже имея права
суперпользователя, эта утилита получит доступ только к каталогу и его
подкаталогам, а /etc и прочие важные части системы окажутся в
неприкосновенности. Сам каталог как раз и играет роль "песочницы", в
которую утилиту "пустили поиграть", позволяя вытворять что угодно.
Часто бывает, что в "песочнице" есть и свой каталог etc, содержащий
необходимые для запуска утилиты (или системной службы) настройки. Вот
этот-то etc из "песочницы" также входит в список каталогов, хранящих
В /etc могут находиться не только файлы, но и подкаталоги (особенно в
стиле " .d ") и целые поддеревья каталогов. Например, в некоторых
дистрибутивах Linux используется подкаталог /etc/sysconfig. Этот
каталог создается и заполняется файлами при установке системы или при
запуске специального "конфигуратора" – программы-кудесника, задающей
наводящие вопросы. Некоторые /etc/sysconfig, там должны
оказаться настройки, относящиеся не к самим службам или утилитам, а к
способу их запуска при загрузке, а также языковые и сетевые
настройки, тип мыши и т. д.
Несколько /etc/passwd, хранящий учетные данные
пользователей, и /etc/group, определяющий членство пользователей в
группах (во всех, кроме группы по умолчанию):
methody@localhost:~ $ cat /etc/passwd root:x:0:0:System Administrator:/root:/bin/bash bin:x:1:1:bin:/:/dev/null daemon:x:2:2:daemon:/:/dev/null adm:x:3:4:adm:/var/adm:/dev/null lp:x:4:7:lp:/var/spool/lpd:/dev/null . . . nobody:x:99:99:Nobody:/var/nobody:/dev/null shogun:x:400:400:Лев Гуревич:/home/shogun:/bin/zsh methody:x:503:503:Мефодий Кашин:/home/methody:/bin/bash methody@localhost:~ $ cat /etc/group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon,shogun wheel:x:10:root,shogun . . . proc:x:19:root,shogun shogun:x:400: methody:x:503:
Оба файла состоят из строк, поля которых разделяются двоеточиями. В
файле passwd – семь полей. Первое из них определяет login:". Второе
поле в ранних версиях UNIX использовалось для хранения
Авторы UNIX предполагали, что, раз пароль из /etc/passwd
перенесли в "теневой" файл учетных записей – /etc/shadow. На месте x "; если там стоит что-то другое,
Третье и четвертое поля passwd – passwd, содержимое которого ни на что не влияет.
Наконец, шестое и седьмое поля содержат /bin/sh, а если его содержимое не встречается в файле /etc/shells, содержащем допустимые командные интерпретаторы,
неизбежны трудности при
Строки файла /etc/group состоят из четырех полей, причем второе – /etc/passwd, хотя никто не мешает
продублировать /etc/group ). Таким образом,
определение членства пользователя в группах зависит не от его UID, а
от
Упомянутый выше файл /etc/shadow, доступ к которому имеет только
суперпользователь, также состоит из полей, разделяемых двоеточиями.
Помимо -L ",
lock, и " -U ", unlock) утилита usermod, изменяющая учетную запись. С
помощью этой утилиты можно отредактировать и все остальные поля как passwd, так и shadow.
Добавить и удалить пользователя или группу можно с помощью утилит useradd, userdel, groupadd и groupdel соответственно. Не стоит
пользоваться текстовым редактором, так как он не гарантирует passwd и shadow. Даже если
необходимо отредактировать /etc/passwd или /etc/group (например, для
добавления пользователя в группу или удаления его оттуда), стоит
запускать не просто редактор, а vipw или vigr (именно их поведение,
позволяющее соблюсти visudo, описанная
ранее):
[root@localhost root]# useradd -g users -G proc,cdrom -c "Incognito" incognito [root@localhost root]# id incognito uid=504(incognito) gid=100(users) groups=100(users),19(proc),22(cdrom) [root@localhost root]# userdel -r incognito [root@localhost root]# id incognito id: incognito: No such user
Здесь был добавлен пользователь incognito, proc и cdrom, полное имя – "Incognito". Стоит
заметить, что пароль для этой учетной записи установлен не был (чтобы
создать пароль, стоило запустить команду passwd incognito ), и, даже
если бы пользователя тут же не удалили ( userdel -r удаляет также и incognito было бы все равно невозможно.
Подсистемой учетных записей пользуется подсистема login и заканчивая доступом к файлам по протоколу, скажем, FTP. Для
этого недостаточно просто написать "библиотеку
В большинстве дистрибутивов .d ", и настройки каждой
службы, которая использует
[root@localhost root]# ls /etc/pam.d chpasswd groupdel other system-auth userdel chpasswd-newusers groupmod passwd system-auth-use_first_pass usermod crond login sshd user-group-mod groupadd newusers su useradd
В auth –
собственно account – определение, все ли хорошо с учетной
записью пользователя, password – изменение пароля в учетной записи, и session – дополнительные действия непосредственно перед или
непосредственно после того, как пользователь получит доступ к
затребованной услуге. Эти значения принимает первое поле любого файла
настройки из , а в третьем поле записывается модуль, который
проверяет какой-нибудь из аспектов required означает, что в случае неуспеха модуля проверка пройдена не
будет). Четвертое и последующие поля отведены под параметры модуля:
[root@localhost root]# cat /etc/pam.d/login auth include system-auth auth required pam_nologin.so account include system-auth password include system-auth session include system-auth session optional pam_console.so [root@localhost root]# cat /etc/pam.d/system-auth auth required pam_tcb.so shadow count=8 nullok account required pam_tcb.so shadow password required pam_tcb.so use_authtok shadow count=8 write_to=tcb session required pam_tcb.so
Такие настройки login обнаружил Мефодий на своем компьютере. Во всех
четырех случаях используется system-auth (к нему
обращаются и другие службы), с некоторыми дополнениями. Так, во время pam_nologin.so дополнительно проверяет, не запрещено ли
пользователям регистрироваться вообще (как это бывает за несколько
минут до перезагрузки системы), а перед входом в систему и после
выхода из нее pam_console.so выполняет описанную в лекции 6 "передачу
прав на владение устройствами" (и, соответственно, лишение
пользователя этих прав).
Каталог /etc/ – замечательный пример того, как system-auth показывают, что в этом дистрибутиве используется не
просто "теневой" файл паролей, а схема /etc/shadow задействованы файлы вида /etc/,
причем права доступа к ним устроены таким образом, чтобы при
выполнении команды passwd можно было обойтись без подмены
пользовательского
Проста и остроумна в Linux подсистема ведения syslogd, управляемый /etc/syslog.conf и
" .d "-каталогом /etc/syslog.d. Если какой-нибудь демон или служба
желают сообщить системе о том, что наступило событие, которое стоит
запомнить, у нее есть два пути. Во-первых, можно просто добавлять
очередную запись в файл, который сам этот демон и открыл; этот файл
будет журналом его сообщений. Во-вторых, можно воспользоваться syslog(), который переадресует текстовое сообщение
специальному демону – syslogd – а уж тот разберется, что с этим
сообщением делать: записать в файл, вывести на 12-ю консоль или
забыть о нем. Второй путь ( централизованная syslogd просто не
справится.
Все события, о которых сообщается syslogd, подразделяются
горизонтально – по типу службы (facility), с которой это событие
произошло, и вертикально – по степени его важности (priority). Типов
событий насчитывается около двадцати (среди них auth, daemon, kern, mail и т. п., а также восемь неименованных, от local0 до local7 ).
Степеней важности всего восемь, по возрастанию: debug, info, notice, warning, err, crit, alert и emerg. Таким образом, каждое событие
определяется парой значений, например, mail.err означает для syslogd
событие, связанное с почтой, притом важности, не меньшей err. Из
таких пар (с возможной заменой типа или важности на "*", что означает
"любые", или none, что означает "никакие") составляется /etc/syslog.conf:
[root@localhost root]# cat /etc/syslog.conf *.notice;mail.err;authpriv.err /var/log/messages authpriv.*;auth.* /var/log/security.log *.emerg * *.* /dev/tty12 mail.info /var/log/maillog
В первом поле строки указываются ; ", а во втором – хранилище сообщений (файл, /var/log/messages попадают все сообщения важности не
меньшей, чем notice, за исключением сообщений типа mail и authpriv,
которые попадают туда, только если имеют важность не ниже err.
Сообщения типа authpriv и auth любой важности попадают в файл /var/log/security.log, а типа mail и важности не ниже info – в файл /var/log/maillog. Сообщения типа emerg (наивысшей важности) выводятся
на все
Во многих системах используется основательно доработанный syslogd,
позволяющий фильтровать сообщения не только по типу/важности, но и,
например, по отправителю, задавать точные (а не "не меньшие")
значения priority и т. п., однако такие доработки нужны для того,
чтобы либо вести практически нефильтрованную
Стоит заметить, что каталог /etc/syslog.d в новых версиях syslogd
предназначен для хранения не профильных .d ", а syslog().
Другой пример типичной для Linux службы, управляемой или список всех
доступных на чтение файлов системы, locatedb (поискать по этому
списку можно командой locate ); нужно собирать статистику по работе
системы, анализировать цельность системы (этим занимаются службы
OSec, TripWire или AIDE) и производить множество других регулярных
действий. Всем этим и занимается демон cron.
cron называется /etc/crontab.
[root@localhost root]# cat /etc/crontab #minute (0-59), #| hour (0-23), #| | day of the month (1-31), #| | | month of the year (1-12), #| | | | day of the week (0-6 with 0=Sunday). #| | | | | user #| | | | | | commands 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
Первые пять полей этого файла определяют время запуска команды:
минуту, час, число месяца, месяц и день недели. Символ "*" означает,
что соответствующая часть даты не учитывается. Шестое поле – имя
пользователя, от лица которого запускается команда, указанная в
остальных полях строки. Так, в примере команда run-parts
/etc/cron.weekly будет запускаться в 4 часа 22 минуты каждое
воскресенье (нулевой день) любого числа любого месяца. Как видно из
примера, обычно /etc/crontab невелик: чаще всего он состоит из
почасового, подневного, понедельного и помесячного запуска
специального сценария (в примере – run-parts ). Этот сценарий
реализует упрощенную схему " .d ", он попросту запускает
отсортированные в 000anacron " – такое имя обеспечит, чтобы этот сценарий был выполнен самым первым./etc/cron.daily ):
[root@localhost root]# ls /etc/cron.daily 000anacron logrotate makewhatis osec stmpclean updatedb
Вот что происходит каждый день на машине Мефодия: запуск anacron и
"прокручивание" , проверка цельности системы с помощью osec,
прореживание старых и неиспользуемых файлов в /tmp (утилита stmpclean ) и, наконец, обновление базы updatedb.
Пользователям системы можно разрешить иметь собственные расписания,
также обрабатываемые демоном cron. Эти расписания имеют тот же
синтаксис, что и crontab, только шестое поле ("user") в них
отсутствует. Редактировать пользовательские таблицы рекомендуется с
помощью команды crontab -e (чтобы не подсунуть демону синтаксически
неверный файл). Сами таблицы могут храниться, в зависимости от версии
и настроек cron, в /var/spool/cron/crontabs, /var/spool/cron, /var/cron/tabs или еще где-нибудь.
Служба anacron появилась в Linux-системах в то время, когда их начали
активно использовать на персональных рабочих станциях. Такие станции,
в отличие от серверов, не обязаны работать круглосуточно. Скорее
всего, на ночь, на праздники и на время отпуска их выключают. Это
значит, что все настройки cron надо менять в соответствии с графиком
включений/выключений (иначе cron.daily никогда не выполнится в четыре
часа ночи) – или запускать отдельную службу, которая будет выполнять некоторые задачи не по расписанию, а потому что их давно уже пора cron с намеком на анахронизм, то есть
несвоевременность выполнения заданий.anacron называется /etc/anacrontab.
Еще изучая работу syslog, Мефодий не расставался с мыслью, что файл,
в котором записывается /var, она в конце
концов заполнится журналами под завязку – если как-то их не
укорачивать. К сожалению, в Linux укоротить файл от начала, отрезав
самые старые записи, нельзя, как нельзя и добавлять новые записи в
начало файла. Эти операции легко реализовать с помощью копирования
нужной области в новый файл и последующего переименования, но,
во-первых, соблюсти
Поэтому в Linux принят другой, существенно менее ресурсоемкий
алгоритм, позволяющий избежать переполнения /var: так называемое
"прокручивание"
Как правило, имя "первого старого" журнала получается путем добавления к имени журнала суффикса ".1", второго – ".2" и т. д.:
[root@localhost root]# ls -l /var/log/syslog/messages* -rw-r----- 1 root adm 292654 Dec 15 14:01 /var/log/syslog/messages -rw-r----- 1 root adm 34452 Dec 13 01:09 /var/log/syslog/messages.1.bz2 -rw-r----- 1 root adm 35892 Dec 6 09:38 /var/log/syslog/messages.2.bz2 -rw-r----- 1 root adm 60806 Nov 28 10:59 /var/log/syslog/messages.3.bz2 -rw-r----- 1 root adm 61063 Nov 21 10:47 /var/log/syslog/messages.4.bz2 -rw-r----- 1 root adm 60079 Nov 14 21:18 /var/log/syslog/messages.5.bz2
Прокручиванием logrotate,
которая тоже управляется и /etc/logrotate.conf, и " .d "-каталогом /etc/logrotate.d/. Согласно
настройкам, старые файлы можно сжимать упаковщиками bzip2 (как в
примере) или gzip, можно задавать им определенные права доступа,
можно посылать syslogd занимается его пополнением) и т.
п.
Немало /etc. В Linux принято
предоставлять пользователю возможность задавать ls. Если пользователю нужно работать не со своими файлами, а именно с
настройками, он всегда может применить ключ " -a " или " -A ":
methody@localhost:~ $ ls bin cat.info cat.stderr Documents examples grep.info textfile tmp methody@localhost:~ $ ls -AF .alias .bashrc .emacs .inputrc~ textfile .Xauthority .bash_history bin/ examples/ .lpoptions tmp/ .xsession.d/ .bash_logout cat.info grep.info .pinerc .viminfo .bash_profile cat.stderr .i18n .pyhistory .vimrc .bash_profile~ Documents/ .inputrc .pythonstartup .vimrc~ methody@localhost:~ $ rm .*~
Многие утилиты создают ls -A
становится все больше. Файл .lpoptions задает параметры подсистемы
печати, .pinerc – это настройки почтового клиента pine, .viminfo –
файл .Xauthority и каталог .xsession.d управляют запуском .aliases и .i18n просто "втягиваются" стартовым
командным сценарием bash, потому что упомянуты в нем явно; строго
говоря, они могли бы называться и по-другому. Все
Файл .pythonstartup (настройки интерпретатора языка программирования
Python) выполняется потому, что имя этого файла задано в переменной PYTHONSTARTUP. Мефодию пришлось дописать строку PYTHONSTARTUP="/home/methody/.pythonstartup"; export PYTHONSTARTUP в ~/.bash_profile и "C-i": complete в ~/.inputrc, чтобы достраивание
заработало и в этом интерпретаторе. Еще один файл, .pyhistory,
используется в самом .pythonstartup:
methody@localhost:~ $ cat .pythonstartup
import atexit, os, readline, rlcompleter
historyPath = os.path.expanduser("~/.pyhistory")
def save_history(historyPath=historyPath):
import readline
readline.write_history_file(historyPath)
if os.path.exists(historyPath):
readline.read_history_file(historyPath)
atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath
Подавляющее большинство
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.