Журнал LinuxFormat - перейти на главную

LXF154:По рецептам доктора Брауна

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Категория: Постоянные рубрики left {{Врезка|Ширина=25%|Заголовок…»)
 
Строка 59: Строка 59:
  
 
Мон­ти­ро­вания для за­пи­сей, при­ве­ден­ных на рис. 1, вы­пол­ня­ют­ся ав­то­ма­ти­че­­ски, обыч­но команд­ной mount -a в за­гру­зоч­ном скрип­те.
 
Мон­ти­ро­вания для за­пи­сей, при­ве­ден­ных на рис. 1, вы­пол­ня­ют­ся ав­то­ма­ти­че­­ски, обыч­но команд­ной mount -a в за­гру­зоч­ном скрип­те.
 
  
 
Стро­ки на рис. 2 слу­жат дру­гой це­ли. Здесь оп­ция noauto оз­на­ча­ет, что запись бу­дет про­иг­но­ри­ро­ва­на ко­ман­дой mount -a (и мон­ти­ро­вание во вре­мя за­груз­ки про­из­во­дить­ся не бу­дет). Вме­сто это­го стро­ка свя­зы­ва­ет имя уст­рой­ст­ва с точ­кой мон­ти­ро­вания, по­это­му его мож­но смон­ти­ро­вать про­стой ко­ман­дой:
 
Стро­ки на рис. 2 слу­жат дру­гой це­ли. Здесь оп­ция noauto оз­на­ча­ет, что запись бу­дет про­иг­но­ри­ро­ва­на ко­ман­дой mount -a (и мон­ти­ро­вание во вре­мя за­груз­ки про­из­во­дить­ся не бу­дет). Вме­сто это­го стро­ка свя­зы­ва­ет имя уст­рой­ст­ва с точ­кой мон­ти­ро­вания, по­это­му его мож­но смон­ти­ро­вать про­стой ко­ман­дой:
Строка 83: Строка 82:
 
''Те­перь на­стал че­ред зна­ком­ст­ва с фай­лом nsswitch.conf – ука­за­те­лем  
 
''Те­перь на­стал че­ред зна­ком­ст­ва с фай­лом nsswitch.conf – ука­за­те­лем  
 
на ис­точники ин­фор­ма­ции.''
 
на ис­точники ин­фор­ма­ции.''
{{Врезка|left|Заголовок=Рис.3.|Содержание=  
+
 
 +
[[Файл:LXF54.braun3.png|right|500px]]
 +
В стан­дарт­ной биб­лио­те­ке C в Linux есть се­мей­ст­во функ­ций, на­зы­вае­мых «раз­ре­ши­те­ля­ми»: они раз­ре­ша­ют за­про­сы. Так, функ­ция getpwuid() на­хо­дит учет­ную запись поль­зо­ва­те­ля по его чи­сло­во­му иден­ти­фи­ка­то­ру, а функ­ция gethostbyname() на­хо­дит ком­пь­ю­тер по имени, воз­вра­щая (сре­ди про­че­го) его IP-ад­рес. А, скажем, функ­ция getservbyname() ищет сер­вис по имени, воз­вра­щая но­мер его пор­та и про­то­кол.
 +
{{Врезка|left|Заголовок=|Содержание=  
 
  Ти­пич­ная за­пись в fstab для съем­ных уст­ройств ти­па CD или DVD, ко­то­рая по­зво­ля­ет их мон­ти­ро­вать обыч­ным поль­зо­ва­те­лям.
 
  Ти­пич­ная за­пись в fstab для съем­ных уст­ройств ти­па CD или DVD, ко­то­рая по­зво­ля­ет их мон­ти­ро­вать обыч­ным поль­зо­ва­те­лям.
 
В фай­ле /etc/nsswitch.conf ука­зы­ва­ют­ся доступ­ные ис­точ­ни­ки ин­фор­ма­ции для по­ис­ка имен хос­тов и поль­зо­ва­те­лей, а также дру­гих сведений.|Ширина=20%}}
 
В фай­ле /etc/nsswitch.conf ука­зы­ва­ют­ся доступ­ные ис­точ­ни­ки ин­фор­ма­ции для по­ис­ка имен хос­тов и поль­зо­ва­те­лей, а также дру­гих сведений.|Ширина=20%}}
[[Файл:LXF54.braun3.png|right|500px]]
 
В стан­дарт­ной биб­лио­те­ке C в Linux есть се­мей­ст­во функ­ций, на­зы­вае­мых «раз­ре­ши­те­ля­ми»: они раз­ре­ша­ют за­про­сы. Так, функ­ция getpwuid() на­хо­дит учет­ную запись поль­зо­ва­те­ля по его чи­сло­во­му иден­ти­фи­ка­то­ру, а функ­ция gethostbyname() на­хо­дит ком­пь­ю­тер по имени, воз­вра­щая (сре­ди про­че­го) его IP-ад­рес. А, скажем, функ­ция getservbyname() ищет сер­вис по имени, воз­вра­щая но­мер его пор­та и про­то­кол.
 
 
 
Эти функ­ции су­ще­ст­ву­ют с давних пор – они бы­ли в UNIX еще до то­го, как про­блеск Linux мельк­нул в гла­зах Ли­ну­са Тор­вальд­са. В те да­ле­кие вре­ме­на ин­фор­ма­ция раз­ме­ща­лась в локаль­ных фай­лах, та­ких как /etc/passwd, /etc/hosts и /etc/services – и боль­ше ниче­го не бы­ло. Поз­же поя­ви­лись дру­гие ис­точники ин­фор­ма­ции. На­при­мер, в Sun Microsystems при­ду­ма­ли NIS, и у нас поя­вил­ся DNS для раз­ре­шения имен хостов. Sun так­же до­ба­ви­ла несколь­ко при­мо­чек, что­бы «раз­ре­ши­те­ли» ис­ка­ли ин­фор­ма­цию бо­лее чем в од­ном мес­те. Как буд­то при­по­ми­наю, что стро­ки в /etc/passwd, на­чи­нав­шие­ся с «+», ве­ле­ли «раз­ре­ши­те­лю» так­же пой­ти и за­гля­нуть в NIS.
 
Эти функ­ции су­ще­ст­ву­ют с давних пор – они бы­ли в UNIX еще до то­го, как про­блеск Linux мельк­нул в гла­зах Ли­ну­са Тор­вальд­са. В те да­ле­кие вре­ме­на ин­фор­ма­ция раз­ме­ща­лась в локаль­ных фай­лах, та­ких как /etc/passwd, /etc/hosts и /etc/services – и боль­ше ниче­го не бы­ло. Поз­же поя­ви­лись дру­гие ис­точники ин­фор­ма­ции. На­при­мер, в Sun Microsystems при­ду­ма­ли NIS, и у нас поя­вил­ся DNS для раз­ре­шения имен хостов. Sun так­же до­ба­ви­ла несколь­ко при­мо­чек, что­бы «раз­ре­ши­те­ли» ис­ка­ли ин­фор­ма­цию бо­лее чем в од­ном мес­те. Как буд­то при­по­ми­наю, что стро­ки в /etc/passwd, на­чи­нав­шие­ся с «+», ве­ле­ли «раз­ре­ши­те­лю» так­же пой­ти и за­гля­нуть в NIS.
 
+
{{Врезка|left|Заголовок=Вкратце|Содержание=  
Со­вре­мен­ные «раз­ре­ши­те­ли» ис­поль­зу­ют бо­лее эле­гант­ный и на­ра­щи­вае­мый ме­ханизм на­прав­ления к оп­ре­де­лен­но­му ис­точнику ин­фор­ма­ции – так на­зы­вае­мый файл пе­ре­клю­чения сер­ви­сов имен (Name Service Switch) /etc/nsswitch.conf. Фор­мат это­го фай­ла по­ка­зан на ри­сун­ке ввер­ху. Он доста­точ­но прост, хо­тя содержит од­но неоче­вид­ное обо­зна­чение – [NOTFOUND=return], ко­то­рое пред­став­ля­ет со­бой при­мер дей­ст­вия. Оно пре­достав­ля­ет бо­лее тон­кий кон­троль над ло­ги­кой про­цес­са по­ис­ка, свя­зы­вая ста­тус за­про­са (один из спи­ска SUCCESS, NOTFOUND, UNAVAIL или TRYAGAIN) с дей­ст­ви­ем (return или continue). Об­ра­ти­те внимание, что ста­тус NOTFOUND оз­на­ча­ет, что сер­вис был успеш­но оп­ро­шен, но со­об­щил, что у него нет дан­ных в от­вет на по­лу­чен­ный за­прос, а не то, что не уда­лось най­ти сам сер­вис.
+
{{Врезка|left|Заголовок=Вкратце|Содержание=  
+
 
«За ку­ли­са­ми» всю труд­ную ра­бо­ту вы­пол­ня­ют биб­лио­те­ки (их име­на ука­за­ны на­про­тив ис­точ­ни­ков дан­ных в nsswitch.conf).
 
«За ку­ли­са­ми» всю труд­ную ра­бо­ту вы­пол­ня­ют биб­лио­те­ки (их име­на ука­за­ны на­про­тив ис­точ­ни­ков дан­ных в nsswitch.conf).
 
|Ширина=20%}}
 
|Ширина=20%}}
 +
Со­вре­мен­ные «раз­ре­ши­те­ли» ис­поль­зу­ют бо­лее эле­гант­ный и на­ра­щи­вае­мый ме­ханизм на­прав­ления к оп­ре­де­лен­но­му ис­точнику ин­фор­ма­ции – так на­зы­вае­мый файл пе­ре­клю­чения сер­ви­сов имен (Name Service Switch) /etc/nsswitch.conf. Фор­мат это­го фай­ла по­ка­зан на ри­сун­ке ввер­ху. Он доста­точ­но прост, хо­тя содержит од­но неоче­вид­ное обо­зна­чение – [NOTFOUND=return], ко­то­рое пред­став­ля­ет со­бой при­мер дей­ст­вия. Оно пре­достав­ля­ет бо­лее тон­кий кон­троль над ло­ги­кой про­цес­са по­ис­ка, свя­зы­вая ста­тус за­про­са (один из спи­ска SUCCESS, NOTFOUND, UNAVAIL или TRYAGAIN) с дей­ст­ви­ем (return или continue). Об­ра­ти­те внимание, что ста­тус NOTFOUND оз­на­ча­ет, что сер­вис был успеш­но оп­ро­шен, но со­об­щил, что у него нет дан­ных в от­вет на по­лу­чен­ный за­прос, а не то, что не уда­лось най­ти сам сер­вис.
 +
[[Файл:LXF54.braun4.png|left|300px]]
 
На­ра­щи­вае­мость ме­ханиз­ма по­ис­ка оз­на­ча­ет, что мож­но до­бав­лять но­вые ис­точники ин­фор­ма­ции. Это ра­бо­та­ет бла­го­да­ря то­му, что в nsswitch.conf за­да­ет­ся про­стое со­от­вет­ст­вие ме­ж­ду име­на­ми сер­ви­сов и биб­лио­те­ка­ми, их реа­ли­зую­щи­ми. На­при­мер, встре­тив mdns4 в за­пи­си hosts в nsswitch.conf, раз­ре­ши­тель имени хоста вы­полнит за­прос с ис­поль­зо­ванием раз­де­ляе­мой биб­лио­те­ки /lib/libnss_mdns4.so. Ин­тер­фейс для досту­па к этим биб­лио­те­кам стан­дарт­ный, по­это­му раз­ра­бот­чик мо­жет до­ба­вить соб­ст­вен­ный сер­вис.  
 
На­ра­щи­вае­мость ме­ханиз­ма по­ис­ка оз­на­ча­ет, что мож­но до­бав­лять но­вые ис­точники ин­фор­ма­ции. Это ра­бо­та­ет бла­го­да­ря то­му, что в nsswitch.conf за­да­ет­ся про­стое со­от­вет­ст­вие ме­ж­ду име­на­ми сер­ви­сов и биб­лио­те­ка­ми, их реа­ли­зую­щи­ми. На­при­мер, встре­тив mdns4 в за­пи­си hosts в nsswitch.conf, раз­ре­ши­тель имени хоста вы­полнит за­прос с ис­поль­зо­ванием раз­де­ляе­мой биб­лио­те­ки /lib/libnss_mdns4.so. Ин­тер­фейс для досту­па к этим биб­лио­те­кам стан­дарт­ный, по­это­му раз­ра­бот­чик мо­жет до­ба­вить соб­ст­вен­ный сер­вис.  
[[Файл:LXF54.braun4.png|left|300px]]
+
 
 
При до­бав­лении биб­лио­те­ки libnss_xyz он до­бав­ля­ет ис­точник ин­фор­ма­ции xyz. Функ­ции раз­ре­ши­те­ля верхнего уров­ня (и вы­зы­ваю­щие их про­грам­мы) вы­зо­вут его ав­то­ма­ти­че­­ски, ес­ли xyz есть в фай­ле nsswitch.conf. В неко­то­рых ди­ст­ри­бу­ти­вах Linux есть гра­фи­че­­ские ути­ли­ты для ре­дак­ти­ро­вания nsswitch.conf. Ути­ли­та systemconfig-authentication в Fedora по­зво­ля­ет за­дать ис­точник ин­фор­ма­ции об учет­ной за­пи­си поль­зо­ва­те­ля. В Ubuntu для тех же це­лей мож­но восполь­зо­вать­ся скрип­том authclientconfig, хо­тя его основ­ное на­зна­чение – об­лег­чение об­нов­ления nsswitch.conf со сто­ро­ны уста­но­воч­ных скрип­тов па­ке­тов. Пол­ная до­ку­мен­та­ция по nsswitch.conf име­ет­ся на http://www.gnu.org/s/hello/manual/libc/Name-Service-Switch.html.
 
При до­бав­лении биб­лио­те­ки libnss_xyz он до­бав­ля­ет ис­точник ин­фор­ма­ции xyz. Функ­ции раз­ре­ши­те­ля верхнего уров­ня (и вы­зы­ваю­щие их про­грам­мы) вы­зо­вут его ав­то­ма­ти­че­­ски, ес­ли xyz есть в фай­ле nsswitch.conf. В неко­то­рых ди­ст­ри­бу­ти­вах Linux есть гра­фи­че­­ские ути­ли­ты для ре­дак­ти­ро­вания nsswitch.conf. Ути­ли­та systemconfig-authentication в Fedora по­зво­ля­ет за­дать ис­точник ин­фор­ма­ции об учет­ной за­пи­си поль­зо­ва­те­ля. В Ubuntu для тех же це­лей мож­но восполь­зо­вать­ся скрип­том authclientconfig, хо­тя его основ­ное на­зна­чение – об­лег­чение об­нов­ления nsswitch.conf со сто­ро­ны уста­но­воч­ных скрип­тов па­ке­тов. Пол­ная до­ку­мен­та­ция по nsswitch.conf име­ет­ся на http://www.gnu.org/s/hello/manual/libc/Name-Service-Switch.html.

Версия 11:22, 16 июня 2018

LXF00.tut1.chris2 fmt.png
Д-р Крис Браун: Доктор обучает, пишет и консультирует по Linux. Ученая степень по физике элементарных частиц ему в этом совсем не помогает.

Содержание

По рецептам доктора Брауна

Как небо и земля

Труд­но пред­ста­вить две книги о сис­тем­ном ад­минист­ри­ро­вании, бо­лее раз­ные по сти­ли­сти­ке и со­дер­жа­нию, чем эти...

В этом ме­ся­це я хо­чу рас­ска­зать вам о па­ре книг. Обе они – по сис­тем­но­му ад­минист­ри­ро­ванию, при­мер­но в той же сте­пени, в ко­то­рой Мо­царт и Джи­ми Хен­д­рикс оба му­зы­кан­ты: по­то­му что на этом сход­ст­во и за­кан­чи­ва­ет­ся.

Пер­вая, Red Hat Certified Technician & Engineer [Сер­ти­фи­ци­ро­ван­ный спе­циа­лист и ин­женер Red Hat] Асг­ха­ра Гхо­ри [Asghar Ghori] – во мно­гом книга из се­рии «как это сде­лать», и по­свя­ще­на Red Hat Linux. Вто­рая, The Practice of System and Network Administration [Прак­ти­ка сис­тем­но­го и сете­во­го ад­минист­ри­ро­вания] Ли­мон­чел­ли, Хо­га­на и Ча­лу­па [Limoncelli, Hogan & Chalup] – ско­рее книга из се­рии «по­че­му», не свя­за­нная ни с ка­кой кон­крет­ной ОС, не го­во­ря уж о ди­ст­ри­бу­ти­ве Linux.

Ес­ли вы хо­ти­те уз­нать, ка­кая ко­ман­да рас­ши­рит ло­ги­че­­ский раз­де­л, чи­тай­те Гхо­ри. Ес­ли вы хо­ти­те уз­нать, по­че­му сто­ит за­ранее и ре­гу­ляр­но вы­де­лить вре­мя для техоб­слу­жи­вания, чи­тай­те Ли­мон­чел­ли (это­му у него отведе­на це­лая гла­ва).

Книга Гхо­ри пред­на­зна­че­на для по­мо­щи в сда­че эк­за­ме­нов RH202 и RH302, но не при­вя­за­на на­мерт­во к за­даниям эк­за­ме­нов – это удоб­ное спра­воч­ное ру­ко­во­дство для ад­минист­ра­то­ров RHEL 5. В на­чале опи­сы­ва­ют­ся те­мы «конеч­но­го поль­зо­ва­те­ля» (основ­ные ко­ман­ды, фай­лы, ка­та­ло­ги, пра­ва досту­па, ре­дак­ти­ро­вание тек­ста и обо­лоч­ки).

За­тем по­сле раз­оча­ро­вы­ваю­щей гла­вы о на­пи­сании скрип­тов обо­лоч­ки Гхо­ри пе­ре­хо­дит к те­мам, ин­те­рес­ным сис­тем­но­му ад­минист­ра­то­ру – уста­нов­ке, управ­лению па­ке­та­ми, раз­де­лам, менед­же­ру ло­ги­че­­ских то­мов, RAID, swap, за­пуску сис­те­мы, яд­ру, ре­зерв­но­му ко­пи­ро­ванию и ши­ро­ко­му на­бо­ру се­те­вых сер­ви­сов. Да­на мас­са при­ме­ров за­пуска команд, таб­ли­цы па­ра­мет­ров команд и фай­лов на­строй­ки – хо­тя я за­cек пару оши­бок.

Книга Ли­мон­чел­ли на­пи­са­на на ином уровне. Ее це­ле­вая ау­ди­то­рия – сисад­мины средних и круп­ных ор­ганиза­ций, и о команд­ной стро­ке речь здесь не идет. Не­ко­то­рые раз­де­лы по­свя­ще­ны уст­рой­ст­вам (на­при­мер, 60-странич­ная гла­ва о про­ек­ти­ро­вании да­та­-цен­тра), а неко­то­рые – сер­ви­сам (гла­вы о пе­ча­ти, элек­трон­ной поч­те, хранили­щах, ре­зерв­ном ко­пи­ро­вании и web-сер­ве­рах).

Но боль­шая часть книги скорее ори­ен­ти­ро­ва­на на лю­дей (гла­вы об эти­ке, от­но­шениях с кли­ен­та­ми и о том, как раз­вер­нуть служ­бу техпод­держ­ки). В книге мно­же­ст­во ре­аль­ных при­ме­ров, анек­до­тов и бое­вых ис­то­рий, мно­гие из ко­то­рых вы­зо­вут кри­вую улыб­ку «Это про ме­ня!» на устах са­мо­го бес­чув­ст­вен­но­го сис­тем­но­го ад­минист­ра­то­ра.


Etcetera в ил­лю­ст­ра­ци­ях – часть 2

LXF54.braun1.png

Ме­сяц за ме­ся­цем изу­чай­те фай­лы в /etc по на­ше­му удоб­но­му ру­ко­во­дству. По­зна­ко­мим­ся с fstab.

Файл /etc/fstab (со­кра­щение от “filesystem table” – таб­ли­ца фай­ло­вой сис­те­мы) оп­ре­де­ля­ет, как вся фай­ло­вая сис­те­ма Linux фор­ми­ру­ет­ся из раз­лич­ных ис­точников (дис­ко­вые раз­де­лы, ло­ги­че­­ские уровни, экс­пор­ти­руе­мые ка­та­ло­ги NFS и т. д.), об­ра­зуя еди­ную ие­рар­хию. В нем за­да­ют­ся фай­ло­вые сис­те­мы (с техниче­­ской точ­ки зрения, блоч­ные уст­рой­ст­ва) и их точ­ки мон­ти­ро­вания в де­ре­ве ка­та­ло­гов Linux. Этот файл при­ме­ня­ет­ся мно­го лет. Его син­так­сис доста­точ­но прост, но ес­ли вы не уве­ре­ны в

Три при­ме­ра строк из это­го фай­ла на пер­вом ри­сун­ке ил­лю­ст­ри­ру­ют три спо­со­ба оп­ре­де­ления мон­ти­руе­мой фай­ло­вой сис­те­мы. Тра­ди­ци­он­ное имя уст­рой­ст­ва, та­кое как /dev/sda6 – са­мый ста­рый и са­мый про­стой спо­соб, но он мо­жет при­вес­ти к про­бле­мам при до­бав­лении но­вых дис­ков, так как из­ме­нят­ся име­на уст­ройств. Бо­лее на­деж­ный ва­ри­ант – ис­поль­зо­вать тек­сто­вую мет­ку, за­пи­сы­вае­мую в раз­дел при соз­дании фай­ло­вой сис­те­мы. Обыч­но текст мет­ки со­от­вет­ст­ву­ет планируе­мой точ­ке мон­ти­ро­вания. В по­ряд­ке аль­тер­на­ти­вы, здесь мож­но ука­зать UUID. В средней стро­ке на ри­сун­ке по­ка­за­на запись для мон­ти­ро­вания NFS с фай­ло­во­го сер­ве­ра foo. Доступ к этим фай­лам осу­ще­ст­в­ля­ет­ся по про­то­ко­лу NFS – это не счи­та­ет­ся блоч­ным уст­рой­ст­вом, и мы не за­пуска­ем fsck для этой час­ти фай­ло­вой сис­те­мы: де­лать это нуж­но на сер­ве­ре.

Мон­ти­ро­вания для за­пи­сей, при­ве­ден­ных на рис. 1, вы­пол­ня­ют­ся ав­то­ма­ти­че­­ски, обыч­но команд­ной mount -a в за­гру­зоч­ном скрип­те.

Стро­ки на рис. 2 слу­жат дру­гой це­ли. Здесь оп­ция noauto оз­на­ча­ет, что запись бу­дет про­иг­но­ри­ро­ва­на ко­ман­дой mount -a (и мон­ти­ро­вание во вре­мя за­груз­ки про­из­во­дить­ся не бу­дет). Вме­сто это­го стро­ка свя­зы­ва­ет имя уст­рой­ст­ва с точ­кой мон­ти­ро­вания, по­это­му его мож­но смон­ти­ро­вать про­стой ко­ман­дой:

$ mount /dev/sdc

вме­сто

$ mount /dev/sdc /media/cdrom

Оп­ция user оз­на­ча­ет, что мон­ти­ро­вать уст­рой­ст­во мо­гут обыч­ные поль­зо­ва­те­ли. По умол­чанию мон­ти­ро­вать и раз­мон­ти­ро­вать уст­рой­ст­ва мо­жет толь­ко суперпользователь-root.

В фай­ле fstab вы так­же уви­ди­те за­пи­си, ко­то­рым со­от­вет­ст­ву­ют не фи­зи­че­­ские фай­ло­вые сис­те­мы, а псев­до­фай­ло­вые сис­те­мы, ко­то­рые яв­ля­ют­ся лишь пло­дом во­об­ра­жения яд­ра. Они пред­став­ля­ют струк­ту­ры дан­ных яд­ра в ви­де фай­лов. В них вхо­дят фай­ло­вая сис­те­ма proc (обыч­но мон­ти­ру­ет­ся в /proc) и фай­ло­вая сис­те­ма sysfs (мон­ти­ру­ет­ся в /sys).

LXF54.braun2.png


Etcetera в ил­лю­ст­ра­ци­ях – часть 3

Те­перь на­стал че­ред зна­ком­ст­ва с фай­лом nsswitch.conf – ука­за­те­лем на ис­точники ин­фор­ма­ции.

LXF54.braun3.png

В стан­дарт­ной биб­лио­те­ке C в Linux есть се­мей­ст­во функ­ций, на­зы­вае­мых «раз­ре­ши­те­ля­ми»: они раз­ре­ша­ют за­про­сы. Так, функ­ция getpwuid() на­хо­дит учет­ную запись поль­зо­ва­те­ля по его чи­сло­во­му иден­ти­фи­ка­то­ру, а функ­ция gethostbyname() на­хо­дит ком­пь­ю­тер по имени, воз­вра­щая (сре­ди про­че­го) его IP-ад­рес. А, скажем, функ­ция getservbyname() ищет сер­вис по имени, воз­вра­щая но­мер его пор­та и про­то­кол.

Эти функ­ции су­ще­ст­ву­ют с давних пор – они бы­ли в UNIX еще до то­го, как про­блеск Linux мельк­нул в гла­зах Ли­ну­са Тор­вальд­са. В те да­ле­кие вре­ме­на ин­фор­ма­ция раз­ме­ща­лась в локаль­ных фай­лах, та­ких как /etc/passwd, /etc/hosts и /etc/services – и боль­ше ниче­го не бы­ло. Поз­же поя­ви­лись дру­гие ис­точники ин­фор­ма­ции. На­при­мер, в Sun Microsystems при­ду­ма­ли NIS, и у нас поя­вил­ся DNS для раз­ре­шения имен хостов. Sun так­же до­ба­ви­ла несколь­ко при­мо­чек, что­бы «раз­ре­ши­те­ли» ис­ка­ли ин­фор­ма­цию бо­лее чем в од­ном мес­те. Как буд­то при­по­ми­наю, что стро­ки в /etc/passwd, на­чи­нав­шие­ся с «+», ве­ле­ли «раз­ре­ши­те­лю» так­же пой­ти и за­гля­нуть в NIS.

Со­вре­мен­ные «раз­ре­ши­те­ли» ис­поль­зу­ют бо­лее эле­гант­ный и на­ра­щи­вае­мый ме­ханизм на­прав­ления к оп­ре­де­лен­но­му ис­точнику ин­фор­ма­ции – так на­зы­вае­мый файл пе­ре­клю­чения сер­ви­сов имен (Name Service Switch) /etc/nsswitch.conf. Фор­мат это­го фай­ла по­ка­зан на ри­сун­ке ввер­ху. Он доста­точ­но прост, хо­тя содержит од­но неоче­вид­ное обо­зна­чение – [NOTFOUND=return], ко­то­рое пред­став­ля­ет со­бой при­мер дей­ст­вия. Оно пре­достав­ля­ет бо­лее тон­кий кон­троль над ло­ги­кой про­цес­са по­ис­ка, свя­зы­вая ста­тус за­про­са (один из спи­ска SUCCESS, NOTFOUND, UNAVAIL или TRYAGAIN) с дей­ст­ви­ем (return или continue). Об­ра­ти­те внимание, что ста­тус NOTFOUND оз­на­ча­ет, что сер­вис был успеш­но оп­ро­шен, но со­об­щил, что у него нет дан­ных в от­вет на по­лу­чен­ный за­прос, а не то, что не уда­лось най­ти сам сер­вис.

LXF54.braun4.png

На­ра­щи­вае­мость ме­ханиз­ма по­ис­ка оз­на­ча­ет, что мож­но до­бав­лять но­вые ис­точники ин­фор­ма­ции. Это ра­бо­та­ет бла­го­да­ря то­му, что в nsswitch.conf за­да­ет­ся про­стое со­от­вет­ст­вие ме­ж­ду име­на­ми сер­ви­сов и биб­лио­те­ка­ми, их реа­ли­зую­щи­ми. На­при­мер, встре­тив mdns4 в за­пи­си hosts в nsswitch.conf, раз­ре­ши­тель имени хоста вы­полнит за­прос с ис­поль­зо­ванием раз­де­ляе­мой биб­лио­те­ки /lib/libnss_mdns4.so. Ин­тер­фейс для досту­па к этим биб­лио­те­кам стан­дарт­ный, по­это­му раз­ра­бот­чик мо­жет до­ба­вить соб­ст­вен­ный сер­вис.

При до­бав­лении биб­лио­те­ки libnss_xyz он до­бав­ля­ет ис­точник ин­фор­ма­ции xyz. Функ­ции раз­ре­ши­те­ля верхнего уров­ня (и вы­зы­ваю­щие их про­грам­мы) вы­зо­вут его ав­то­ма­ти­че­­ски, ес­ли xyz есть в фай­ле nsswitch.conf. В неко­то­рых ди­ст­ри­бу­ти­вах Linux есть гра­фи­че­­ские ути­ли­ты для ре­дак­ти­ро­вания nsswitch.conf. Ути­ли­та systemconfig-authentication в Fedora по­зво­ля­ет за­дать ис­точник ин­фор­ма­ции об учет­ной за­пи­си поль­зо­ва­те­ля. В Ubuntu для тех же це­лей мож­но восполь­зо­вать­ся скрип­том authclientconfig, хо­тя его основ­ное на­зна­чение – об­лег­чение об­нов­ления nsswitch.conf со сто­ро­ны уста­но­воч­ных скрип­тов па­ке­тов. Пол­ная до­ку­мен­та­ция по nsswitch.conf име­ет­ся на http://www.gnu.org/s/hello/manual/libc/Name-Service-Switch.html.

Персональные инструменты
купить
подписаться
Яндекс.Метрика