А.В. Столяров - Введение в операционные системы (1152218), страница 17
Текст из файла (страница 17)
Âñÿ ïðî÷àÿ èíôîðìàöèÿî ôàéëå, âêëþ÷àÿ åãî ðàçìåð, ðàñïîëîæåíèå íà äèñêå, äàòû ñîçäàíèÿ, ìîäèôèêàöèè è ïîñëåäíåãî îáðàùåíèÿ, äàííûå î âëàäåëüöå ôàéëà è î ïðàâàõäîñòóïà ê íåìó ñâÿçûâàþòñÿ íå ñ èìåíåì ôàéëà (êàê ýòî äåëàåòñÿ âî ìíîãèõäðóãèõ îïåðàöèîííûõ ñèñòåìàõ), à ñ âûøåóïîìÿíóòûì íîìåðîì.Õðàíèìàÿ íà âíåøíåì çàïîìèíàþùåì óñòðîéñòâå (äèñêå) ñòðóêòóðà äàííûõ, ñîäåðæàùàÿ âñþ èíôîðìàöèþ î ôàéëå, èñêëþ÷àÿåãî èìÿ, íàçûâàåòñÿ èíäåêñíûì äåñêðèïòîðîì (àíãë. index node, èëèi-node).
Èíäåêñíûå äåñêðèïòîðû èìåþò íîìåðà, óíèêàëüíûå â ðàìêàõ ôàé-ëîâîé ñèñòåìû äàííîãî äèñêà. Èìåííî íîìåð ôàéëîâîãî äåñêðèïòîðà è õðàíèòñÿ â êàòàëîãå âìåñòå ñ èìåíåì ôàéëà.Îòìåòèì, ÷òî èìÿ ôàéëà â ÎÑ Unix ìîæåò áûòü äîñòàòî÷íî äëèííûì(îáû÷íî îãðàíè÷åíèå ñîñòàâëÿåò 255 ñèìâîëîâ) è ñîäåðæàòü, âîîáùå ãîâîðÿ,ëþáûå ñèìâîëû êðîìå íóëåâîãî è ñèìâîëà-ðàçäåëèòåëÿ. Òàê, èìÿ ôàéëà èçïÿòíàäöàòè òî÷åê ÿâëÿåòñÿ ñ òî÷êè çðåíèÿ Unix âïîëíå äîïóñòèìûì. Òåì íåìåíåå, íàñòîÿòåëüíî íå ðåêîìåíäóåòñÿ èñïîëüçîâàíèå â èìåíàõ ôàéëîâ òàêèõñèìâîëîâ, êàê ïðîáåë, çâåçäî÷êà, âîñêëèöàòåëüíûé è âîïðîñèòåëüíûé çíàêè,õîòÿ ýòî è âîçìîæíî.
Òàêæå ðåêîìåíäóåòñÿ âîçäåðæàòüñÿ îò èñïîëüçîâàíèÿ âèìåíàõ ôàéëîâ ñïåöñèìâîëîâ (òàêèå êàê ïåðåâîä ñòðîêè, òàáóëÿöèÿ, çâîíîê,backspace è ïð.) è ñèìâîëîâ ñ êîäîì, ïðåâûøàþùèì 127 (òàêèõ, êàê ðóññêèåáóêâû). Íàêîíåö, èìÿ ôàéëà êðàéíå íå ðåêîìåíäóåòñÿ íà÷èíàòü ñ ñèìâîëà- (ìèíóñ). Íåñîáëþäåíèå ýòèõ ðåêîìåíäàöèé ïðèâîäèò ê âîçíèêíîâåíèþïðîáëåì â ðàáîòå. Ïðîáëåìû òàêîãî ðîäà âñåãäà ìîãóò áûòü ïðåîäîëåíû, îäíàêî ïðåîäîëèìîñòü òðóäíîñòåé íå ÿâëÿåòñÿ ïîâîäîì äëÿ èõ ñîçäàíèÿ.7312.2.3Æåñòêèå ññûëêè ÎÑ Unix äîïóñêàåòñÿ, ÷òîáû äâà èëè áîëåå èìåí ôàéëîâ, ðàñïîëîæåííûõêàê â ðàçíûõ êàòàëîãàõ, òàê è â îäíîì, ññûëàëèñü íà îäèí è òîò æå íîìåðèíäåêñíîãî äåñêðèïòîðà.ßñíî, ÷òî ñîçäàåòñÿ ôàéë ïîä îäíèì îïðåäåëåííûì èìåíåì.
Äîïîëíèòåëüíûå èìåíà ôàéë ìîæåò ïîëó÷èòü ïîçæå ñ ïîìîùüþ ñèñòåìíîãî âûçîâàint link(const char *oldpath, const char *newpath);ãäå oldpath − ñóùåñòâóþùåå èìÿ ôàéëà, newpath − íîâîå èìÿ. Òàêèå èìåíà íàçûâàþòñÿ æåñòêèìè ññûëêàìè (àíãë. hardlinks ). Îòëè÷èòü æåñòêóþññûëêó îò îðèãèíàëüíîãî èìåíè ôàéëà íåâîçìîæíî: ýòè èìåíà ñîâåðøåííîðàâíîïðàâíû.ßñíî, ÷òî æåñòêàÿ ññûëêà ìîæåò áûòü óñòàíîâëåíà òîëüêî â ðàìêàõ îäíîãî äèñêà; äåéñòâèòåëüíî, íóìåðàöèÿ èíäåêñíûõ äåñêðèïòîðîâ ó êàæäîãîäèñêà ñâîÿ, òàê ÷òî ñîñëàòüñÿ íà èíäåêñíûé äåñêðèïòîð äðóãîãî äèñêà íåïðåäñòàâëÿåòñÿ âîçìîæíûì. èíäåêñíîì äåñêðèïòîðå ñîäåðæèòñÿ, êðîìå âñåãî ïðî÷åãî, ñ÷åò÷èê êîëè÷åñòâà ññûëîê íà äàííûé äåñêðèïòîð.
Ïðè ñîçäàíèè ôàéëà ýòîò ñ÷åò÷èêóñòàíàâëèâàåòñÿ â åäèíèöó, ïðè ñîçäàíèè íîâîé æåñòêîé ññûëêè − óâåëè÷èâàåòñÿ íà åäèíèöó.Ôóíêöèÿ, ïðåäíàçíà÷åííàÿ äëÿ óäàëåíèÿ ôàéëà, íàçûâàåòñÿ unlink(),÷òî èíîãäà âûçûâàåò óäèâëåíèå ó ïðîãðàììèñòîâ, ïëîõî çíàêîìûõ ñ ÎÑ Unix. ÎÑ Unix ýòà ôóíêöèÿ ÿâëÿåòñÿ ñèñòåìíûì âûçîâîì, óäàëÿþùèì ññûëêóíà ôàéë, ÷òî è îáúÿñíÿåò ïðè÷èíû òàêîãî íàçâàíèÿ. Ïðè âûïîëíåíèè âûçîâàunlink() èìÿ óäàëÿåòñÿ èç êàòàëîãà, à ñ÷åò÷èê ññûëîê â ñîîòâåòñòâóþùåìèíäåêñíîì äåñêðèïòîðå óìåíüøàåòñÿ. Ñàì ôàéë óäàëÿåòñÿ òîëüêî â ñëó÷àå,åñëè óäàëåííàÿ ññûëêà áûëà ïîñëåäíåé (ñ÷åò÷èê îáðàòèëñÿ â íóëü), è ïðèýòîì ôàéë íå áûë íè îäíèì èç ïðîöåññîâ îòêðûò íà çàïèñü èëè ÷òåíèå.
Åñëèñ÷åò÷èê îáðàòèëñÿ â íóëü, íî ôàéë êåì-òî îòêðûò, óäàëåí îí áóäåò òîëüêîïîñëå çàêðûòèÿ.×òîáû ñîçäàòü æåñòêóþ ññûëêó ñðåäñòâàìè êîìàíäíîé ñòðîêè, ìîæíî âîñïîëüçîâàòüñÿ êîìàíäîé ln. Îíà ïîõîæà íà êîìàíäó cp, íî îñóùåñòâëÿåò íåêîïèðîâàíèå ôàéëà, à ñîçäàíèå äëÿ íåãî íîâîãî èìåíè.Ñîçäàíèå æåñòêèõ ññûëîê íà êàòàëîãè ñèñòåìà çàïðåùàåò. Äåëîâ òîì, ÷òî ñîçäàíèå æåñòêèõ ññûëîê íà êàòàëîãè ìîæåò ïðèâåñòè ê âîçíèêíîâåíèþ îðèåíòèðîâàííûõ öèêëîâ â äåðåâå êàòàëîãîâ: íàïðèìåð, ê òàêîìóöèêëó ïðèâåëî áû âûïîëíåíèå êîìàíä$ mkdir a; cd a; mkdir b; cd b; ln ../../a ./c74 ýòîé ñèòóàöèè ïîïûòêà ðåêóðñèâíî ïðîéòè êàòàëîã a, íàïðèìåð, ñ öåëüþïîäñ÷åòà êîëè÷åñòâà ôàéëîâ â íåì çàêîí÷èëàñü áû çàöèêëèâàíèåì. Êðîìåòîãî, îêàçàëîñü áû, ÷òî êàòàëîã a íåâîçìîæíî óäàëèòü, âåäü îí âñåãäà ÷òî-òîñîäåðæèò (êîñâåííî îí ñîäåðæèò ñàì ñåáÿ).Ïî ýòîé ïðè÷èíå æåñòêèå ññûëêè íà êàòàëîãè çàïðåùåíû íà óðîâíå ÿäðàîïåðàöèîííîé ñèñòåìû, ïðè÷åì íèêàêèå ïðàâà äîñòóïà íå ïîçâîëÿþò ýòîòçàïðåò îáîéòè.12.2.4Òèïû ôàéëîâ.
Ñèìâîëè÷åñêèå ññûëêèÊàòàëîãè â ôàéëîâîé ñèñòåìå ÎÑ Unix ÿâëÿþòñÿ íå áîëåå ÷åì ôàéëàìèñïåöèàëüíîãî òèïà. Âîîáùå ãîâîðÿ, èíôîðìàöèþ, ñîäåðæàùóþñÿ â êàòàëîãå(èìåíà è íîìåðà èíäåêñíûõ äåñêðèïòîðîâ), íåîáõîäèìî ãäå-òî õðàíèòü. Ïîýòîìó âñå, ÷åì íà íèçêîì óðîâíå îòëè÷àåòñÿ êàòàëîã îò îáû÷íîãî ôàéëà − ýòîçíà÷åíèå ïðèçíàêà òèïà â èíäåêñíîì äåñêðèïòîðå.  îñòàëüíîì õðàíåíèå íàäèñêå êàòàëîãà îðãàíèçîâàíî òî÷íî òàê æå, êàê è õðàíåíèå îáû÷íîãî ôàéëà.Êðîìå îáû÷íûõ ôàéëîâ è êàòàëîãîâ, îïåðàöèîííûå ñèñòåìû îáû÷íî ïîääåðæèâàþò è äðóãèå ñïåöèàëüíûå òèïû ôàéëîâ.
Òàê, â ôàéëîâûõ ñèñòåìàõñåìåéñòâà FAT (MSDOS, Windows è íåêîòîðûå äðóãèå ÎÑ) ïðèìåðîì òàêîãîñïåöèàëüíîãî òèïà ôàéëà ìîæåò áûòü ìåòêà òîìà (volume label). ÎÑ Unix ïîääåðæèâàåòñÿ ñðàâíèòåëüíî áîëüøîå êîëè÷åñòâî ðàçíîâèäíîñòåé ôàéëîâ ñïåöèàëüíîãî òèïà: ôàéëû áàéò-îðèåíòèðîâàííûõ è áëîêîðèåíòèðîâàííûõ óñòðîéñòâ, èìåíà ñîêåòîâ, èìåíîâàííûå êàíàëû (FIFO) è,íàêîíåö, ñèìâîëè÷åñêèå ññûëêè.  ýòîì ïàðàãðàôå ìû ðàññìîòðèì ñèìâîëè÷åñêèå ññûëêè; ê îñòàëüíûì òèïàì ôàéëîâ ìû âåðíåìñÿ ïîçæå.Ñèìâîëè÷åñêàÿ ññûëêà (àíãë. symbolic link ) ïðåäñòàâëÿåò ñîáîé ôàéë ñïåöèàëüíîãî òèïà, ñîäåðæàùèé èìÿ äðóãîãî ôàéëà.
Îïåðàöèÿ îòêðûòèÿ ñèìâîëè÷åñêîé ññûëêè íà ÷òåíèå èëè çàïèñü ïðèâîäèò íà ñàìîì äåëå ê îòêðûòèþôàéëà, íà êîòîðûé îíà ññûëàåòñÿ, à íå åå ñàìîé. îòëè÷èå îò æåñòêîé ññûëêè, ñèìâîëè÷åñêàÿ ññûëêà ëåãêî îòëè÷èìà îòîñíîâíîãî èìåíè ôàéëà. Ñèìâîëè÷åñêàÿ ññûëêà èìååò ñâîé ñîáñòâåííûé íîìåð èíäåêñíîãî äåñêðèïòîðà è èìååò ñâîé òèï. Ñîçäàíèå è óäàëåíèå ñèìâîëè÷åñêîé ññûëêè íèêàê íå çàòðàãèâàåò íè ôàéë, íà êîòîðûé îíà ññûëàåòñÿ, íèåãî èíäåêñíûé äåñêðèïòîð. Áîëåå òîãî, ôàéë, íà êîòîðûé óêàçûâàåò ññûëêà,ìîæåò âîîáùå íå ñóùåñòâîâàòü â ìîìåíò åå ñîçäàíèÿ, èëè ìîæåò áûòü óäàëåíïîçäíåå.Ñèìâîëè÷åñêèå ññûëêè ñîçäàþòñÿ âûçîâîìint symlink(const char *oldpath, const char *newpath);î÷åíü ïîõîæèì íà óæå ðàññìàòðèâàâøèéñÿ âûçîâ link().
Óäàëåíèå ñèìâîëè÷åñêîé ññûëêè ïðîèñõîäèò óæå ðàññìîòðåííûì âûçîâîì unlink().75Äëÿ ñîçäàíèÿ ñèìâîëè÷åñêîé ññûëêè ñðåäñòâàìè êîìàíäíîé ñòðîêè ñëåäóåò èñïîëüçîâàòü óæå ðàññìàòðèâàâøóþñÿ êîìàíäó ln ñ ôëàãîì -s:$ ln -s /path/to/old/name new_name12.2.5Ïðàâà äîñòóïà ê ôàéëàìÏðàâà äîñòóïà ê ôàéëó (àíãë. access permissions ) îïðåäåëÿþò, êòî èç ïîëüçîâàòåëåé (òî÷íåå, ïðîöåññîâ) êàêèå îïåðàöèè ìîæåò ñ äàííûì ôàéëîì ïðîèçâåñòè.Ïðàâà õðàíÿòñÿ â èíäåêñíîì äåñêðèïòîðå â âèäå 12-áèòíîãî ñëîâà.
Ìëàäøèå 9 áèò ýòîãî ñëîâà îáúåäèíåíû â òðè ãðóïïû ïî òðè áèòà; êàæäàÿ ãðóïïàçàäàåò ïðàâà äîñòóïà äëÿ âëàäåëüöà ôàéëà, äëÿ ãðóïïû âëàäåëüöà è äëÿâñåõ îñòàëüíûõ ïîëüçîâàòåëåé. Òðè áèòà â êàæäîé ãðóïïå îòâå÷àþò çà ïðàâî÷òåíèÿ ôàéëà, ïðàâî çàïèñè â ôàéë è ïðàâî èñïîëíåíèÿ ôàéëà.×òîáû óçíàòü ïðàâà äîñòóïà ê òîìó èëè èíîìó ôàéëó, ìîæíî âîñïîëüçîâàòüñÿ êîìàíäîé ls -l, íàïðèìåð:$ ls -l /bin/cat-rwxr-xr-x 1 root root14232 Feb 4 2003 /bin/catÐàñïîëîæåííàÿ â íà÷àëå ñòðîêè ãðóïïà ñèìâîëîâ -rwxr-xr-x ïîêàçûâàåò òèïôàéëà (ïåðâûé ñèìâîë − ìèíóñ îçíà÷àåò, ÷òî ìû èìååì äåëî ñ îáûêíîâåííûì ôàéëîì, áóêâà d îçíà÷àëà áû êàòàëîã è ò.ï.) è ïðàâà äîñòóïà, ñîîòâåòñòâåííî, äëÿ âëàäåëüöà (â äàííîì ñëó÷àå rwx, ò.å. ÷òåíèå, çàïèñü è èñïîëíåíèå), ãðóïïû è âñåõ îñòàëüíûõ (â äàííîì ñëó÷àå r-x, ò.å.
ïðàâà íà çàïèñüîòñóòñòâóþò). Òàêèì îáðàçîì, ôàéë /bin/cat äîñòóïåí ëþáîìó ïîëüçîâàòåëþíà ÷òåíèå è èñïîëíåíèå, íî ìîäèôèöèðîâàòü åãî ìîæåò òîëüêî ïîëüçîâàòåëüroot (ò.å. àäìèíèñòðàòîð).Ïîñêîëüêó ãðóïïà èç òðåõ áèò ñîîòâåòñòâóåò ðîâíî îäíîé öèôðå âîñüìåðè÷íîé ñèñòåìû ñ÷èñëåíèÿ, îáùåïðèíÿòîé ÿâëÿåòñÿ ïðàêòèêà çàïèñè ñëîâàïðàâ äîñòóïà ê ôàéëó â âèäå âîñüìåðè÷íîãî ÷èñëà, îáû÷íî òðåõçíà÷íîãî.Ïðè ýòîì ìëàäøèé ðàçðÿä (ïîñëåäíÿÿ öèôðà) ñîîòâåòñòâóåò ïðàâàì äëÿ âñåõïîëüçîâàòåëåé, ñðåäíÿÿ − ïðàâàì äëÿ ãðóïïû è ñòàðøàÿ (îáû÷íî îíà èäåòñàìîé ïåðâîé) öèôðà îáîçíà÷àåò ïðàâà äëÿ âëàäåëüöà. Ïðàâà íà èñïîëíåíèåñîîòâåòñòâóþò 1, ïðàâà íà çàïèñü − 2, ïðàâà íà ÷òåíèå − 4; ñîîòâåòñòâóþùèåçíà÷åíèÿ ñóììèðóþòñÿ, ò.å., íàïðèìåð, ïðàâà íà ÷òåíèå è çàïèñü îáîçíà÷àþòñÿ öèôðîé 6 (4 + 2), à ïðàâà íà ÷òåíèå è èñïîëíåíèå − öèôðîé 5 (4 + 1).Òàêèì îáðàçîì, ïðàâà äîñòóïà ê ôàéëó /bin/cat èç íàøåãî ïðèìåðà ìîæíî çàêîäèðîâàòü âîñüìåðè÷íûì ÷èñëîì 07553 .3 Îáðàòèòåâíèìàíèå, ÷òî ÷èñëî çàïèñàíî ñ íóëåì âïåðåäè; ñîãëàñíî ïðàâèëàì ÿçûêà C ýòî îçíà÷àåò,÷òî ÷èñëî çàïèñàíî â âîñüìåðè÷íîé ñèñòåìå76Äëÿ êàòàëîãîâ èíòåðïðåòàöèÿ áèòîâ ïðàâ äîñòóïà íåñêîëüêî îòëè÷àåòñÿ.Ïðàâà íà ÷òåíèå êàòàëîãà äàþò âîçìîæíîñòü ïðîñìîòðåòü åãî ñîäåðæèìîå.Ïðàâà íà çàïèñü ïîçâîëÿþò ìîäèôèöèðîâàòü êàòàëîã, ò.å.
ñîçäàâàòü è óíè÷òîæàòü â íåì ôàéëû (ïðè÷åì óäàëèòü ìîæíî è ÷óæîé ôàéë, à òàêæå òàêîé,íà êîòîðûé ïðàâ äîñòóïà íåò, ò.ê. äîñòàòî÷íî èìåòü ïðàâà äîñòóïà íà çàïèñüâ ñàì êàòàëîã). ×òî êàñàåòñÿ áèòà ïðàâ íà èñïîëíåíèå, äëÿ êàòàëîãà ýòîòáèò îçíà÷àåò âîçìîæíîñòü êàêèì-ëèáî îáðàçîì èñïîëüçîâàòü ñîäåðæèìîå êàòàëîãà, â òîì ÷èñëå, íàïðèìåð, îòêðûâàòü ôàéëû, íàõîäÿùèåñÿ â êàòàëîãå.Òàêèì îáðàçîì, åñëè íà êàòàëîã óñòàíîâëåíû ïðàâà ÷òåíèÿ, íî íåò ïðàâ èñïîëíåíèÿ, ìû ìîæåì åãî ïðîñìîòðåòü, íî âîñïîëüçîâàòüñÿ óâèäåííûì íàì íåóäàñòñÿ. Íàïðîòèâ, åñëè åñòü ïðàâà èñïîëíåíèÿ, íî íåò ïðàâ ÷òåíèÿ, ìû ìîæåì îòêðûòü ôàéë èç ýòîãî êàòàëîãà òîëüêî â òîì ñëó÷àå, åñëè òî÷íî çíàåìèìÿ ôàéëà. Óçíàòü èìÿ ìû íèêàê íå ìîæåì, ò.ê. âîçìîæíîñòè ïðîñìîòðåòüêàòàëîã ó íàñ íåò.Îñòàâøèåñÿ òðè (ñòàðøèõ) ðàçðÿäà ñëîâà ïðàâ äîñòóïà íàçûâàþòñÿSetGid Bit(02000) èSticky Bit(01000).Åñëè äëÿ èñïîëíÿåìîãî ôàéëà óñòàíîâèòüèìåòü ïðàâà ñâîåãî âëàäåëüöà (÷àùå âñåãîSetUid Bit,SetUid Bit(04000),ýòîò ôàéë áóäåò ïðè èñïîëíåíèè− ïîëüçîâàòåëÿ root) âíå çàâèñèìîñòè îò òîãî, êòîSetGid Bit ðàáîòàåò ïîõîæèì îáðàçîì,èç ïîëüçîâàòåëåé ñîîòâåòñòâóþùèé ôàéë çàïóñòèë.óñòàíàâëèâàÿ ýôôåêòèâíóþ ãðóïïó ïîëüçîâàòåëÿ (â îòëè÷èå îò ýôôåêòèâíîãî èäåíòèôèêàòîðàïîëüçîâàòåëÿ).