1
ÔÀÉËÎÂÀß ÑÈÑÒÅÌÀ UNIX Èìåíà ôàéëîâ è øàáëîíû Òàê æå, êàê è äðóãèå ÎÑ, UNIX îñóùåñòâëÿåò ðàçäåëåíèå äèñêîâîãî ïðîñòðàí...
18 downloads
274 Views
328KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
1
ÔÀÉËÎÂÀß ÑÈÑÒÅÌÀ UNIX Èìåíà ôàéëîâ è øàáëîíû Òàê æå, êàê è äðóãèå ÎÑ, UNIX îñóùåñòâëÿåò ðàçäåëåíèå äèñêîâîãî ïðîñòðàíñòâà íà èìåíîâàííûå ó÷àñòêè ôàéëû. Èìÿ ôàéëà â UNIX ìîæåò ñîäåðæàòü äî 256 ñèìâîëîâ è âêëþ÷àòü â ñåáÿ àëôàâèòíî-öèôðîâûå è íåêîòîðûå äðóãèå ñèìâîëû, íàïðèìåð, , , . , ~ , _ .  èìåíàõ ôàéëîâ UNIX áîëüøèå è ìàëåíüêèå áóêâû ðàçëè÷àþòñÿ. Èìÿ ôàéëà ìîæåò âêëþ÷àòü â ñåáÿ ðàñøèðåíèå, îáû÷íî èñïîëüçóåìîå äëÿ óêàçàíèÿ íà òèï ôàéëà. Ðàñøèðåíèå îïðåäåëÿåòñÿ êàê ÷àñòü èìåíè, ðàñïîëàãàþùàÿñÿ ïîñëå ïîñëåäíåé òî÷êè. Èñïîëüçîâàíèå ðàñøèðåíèé â UNIX ÿâëÿåòñÿ ìåíåå îáÿçàòåëüíûì è íå òàêèì ìàññîâûì, êàê â DOS. Èñïîëüçóÿ ñïåöèàëüíûå ñèìâîëû, ìîæíî ôîðìèðîâàòü øàáëîíû èìåí ôàéëîâ. Ñèìâîë * â øàáëîíå ñîîòâåòñòâóåò ëþáîé ïîñëåäîâàòåëüíîñòè ñèìâîëîâ, ? ëþáîìó ñèìâîëó. Êâàäðàòíûå ñêîáêè [] ïîçâîëÿþò çàäàâàòü íàáîðû ñèìâîëîâ. Ýòè íàáîðû ìîãóò çàäàâàòüñÿ ÿâíûì ïåðå÷èñëåíèåì ñèìâîëîâ, âõîäÿùèõ â íàáîð, ïðè ýòîì, ìåæäó ïåðå÷èñëÿåìûìè ñèìâîëàìè íå óêàçûâàåòñÿ íèêàêèõ ðàçäåëèòåëåé. Íàïðèìåð, øàáëîíó ch[gmo]?? óäîâëåòâîðÿþò âñå ôàéëû, èìåíà êîòîðûõ ñîñòîÿò èç 5 ñèìâîëîâ, ïåðâûå äâà ñèìâîëà èìåíè ch, òðåòèé îäèí èç ñèìâîëîâ: g, m èëè o. Íàáîðû äîïóñòèìûõ ñèìâîëîâ ìîãóò çàäàâàòüñÿ, òàêæå, ïóòåì óêàçàíèÿ äèàïàçîíà. Äèàïàçîí ñèìâîëîâ îïðåäåëÿåòñÿ óêàçàíèåì êðàéíèõ ñèìâîëîâ, ðàçäåëåííûõ äåôèñîì, íàïðèìåð: [a-m], [2-8]. Âîçìîæíû, òàêæå, êîìáèíàöèè ýòèõ äâóõ ñïîñîáîâ. Íàïðèìåð, øàáëîíó f[1-4i]* óäîâëåòâîðÿþò âñå ôàéëû, èìåíà êîòîðûõ íà÷èíàþòñÿ íà f è â êà÷åñòâå âòîðîãî ñèìâîëà èìåíè ñîäåðæàò öèôðû îò 1 äî 4 èëè áóêâó i.
2
Âñå ôàéëû â UNIX ïðåäñòàâëÿþò ñîáîé íåôîðìàòèðîâàííóþ ïîñëåäîâàòåëüíîñòü áàéòîâ áàéòîâûé ïîòîê. Ñ òî÷êè çðåíèÿ èñïîëüçîâàíèÿ ôàéëû äåëÿòñÿ íà òðè îñíîâíûõ êàòåãîðèè: îáû÷íûå ôàéëû, ôàéëû-êàòàëîãè è ñïåöèàëüíûå ôàéëû. Îáû÷íûå ôàéëû, ïðÿìûì èëè êîñâåííûì îáðàçîì, ñîçäàþòñÿ ïîëüçîâàòåëåì, è ñàì ïîëüçîâàòåëü, à íå ÎÑ îïðåäåëÿåò èõ ñòðóêòóðó. Êàòàëîãè è ôàéëîâîå äåðåâî Êàòàëîã ñîñòîèò èç çàïèñåé, ñîäåðæàùèõ èìÿ ôàéëà è íîìåð ñïåöèàëüíîãî ñèñòåìíîãî áëîêà äàííûõ èíäåêñíîãî äåñêðèïòîðà (i-óçëà, i-node), ñîäåðæàùåãî âñþ èíôîðìàöèþ î ôàéëå. Åñëè çàïèñü î íåêîòîðîì ôàéëå íàõîäèòñÿ â äàííîì êàòàëîãå, òî ãîâîðÿò, ÷òî ôàéë ñîäåðæèòñÿ â äàííîì êàòàëîãå. Ñëåäóåò ó÷åñòü, ÷òî ÎÑ UNIX ïîçâîëÿåò âêëþ÷àòü íåñêîëüêî çàïèñåé îá îäíîì ôàéëå â ðàçëè÷íûå êàòàëîãè, èëè äàæå, â îäèí è òîò æå êàòàëîã. Î òàêèõ çàïèñÿõ ãîâîðÿò êàê î ññûëêàõ íà ôàéë. Òàê æå, êàê è â DOS, áëàãîäàðÿ íàëè÷èþ êàòàëîãîâ, âñå ôàéëû îðãàíèçîâàíû â èåðàðõè÷åñêóþ ñòðóêòóðó ôàéëîâîå äåðåâî. Îñíîâàíèåì ýòîãî äåðåâà ÿâëÿåòñÿ êîðíåâîé êàòàëîã, èìåþùèé èìÿ /.  îòëè÷èå îò DOS, êîðíåâîé êàòàëîã ôàéëîâîé ñèñòåìû UNIX âñåãäà îäèí. Ðàñïîëîæåíèå ôàéëîâ â ôàéëîâîì äåðåâå, â îòëè÷èå îò DOS, íå îïðåäåëÿåòñÿ èõ ðàñïîëîæåíèåì íà òîì èëè èíîì ôèçè÷åñêîì èëè ëîãè÷åñêîì äèñêå. Ôàéëîâûå ñòðóêòóðû, íàõîäÿùèåñÿ íà ðàçëè÷íûõ äèñêàõ, â òîì ÷èñëå, è íà äèñêàõ äðóãèõ êîìïüþòåðîâ, ñ ïîìîùüþ ñïåöèàëüíîé êîìàíäû (mount) ìîíòèðóþòñÿ íà ôàéëîâîå äåðåâî UNIX, ñòàíîâÿñü ÷àñòüþ åäèíîãî ôàéëîâîãî äåðåâà. Âñå îïåðàöèè ñ ôàéëàìè ñ òî÷êè çðåíèÿ ïîëüçîâàòåëÿ âûïîëíÿþòñÿ îäèíàêîâûì îáðàçîì, íåçàâèñèìî îò èõ ôèçè÷åñêîãî ìåñòîðàñïîëîæåíèÿ.
3
Ïîñëåäîâàòåëüíîñòü èìåí êàòàëîãîâ, ðàçäåëåííûõ ñèìâîëîì /, âåäóùàÿ îò íåêîòîðîãî êàòàëîãà, ê êàòàëîãó, â êîòîðîì ðàñïîëàãàåòñÿ äàííûé ôàéë, íàçûâàåòñÿ ìàðøðóòîì ê ýòîìó ôàéëó. Ïîñëåäîâàòåëüíîñòü ìàðøðóò/èìÿ_ôàéëà íàçûâàåòñÿ ïóòåâûì èìåíåì ôàéëà. Åñëè ïóòåâîå èìÿ îòñ÷èòûâàåòñÿ îò êîðíåâîãî êàòàëîãà, îíî íàçûâàåòñÿ àáñîëþòíûì, â ïðîòèâíîì ñëó÷àå îòíîñèòåëüíûì. Íàïðèìåð, /usr/sbin/ inetd àáñîëþòíîå ïóòåâîå èìÿ, rc.d/init.d/nfsfs îòíîñèòåëüíîå ïóòåâîå èìÿ. Îäèí èç êàòàëîãîâ ôàéëîâîé ñèñòåìû ÿâëÿåòñÿ òåêóùèì. Ñïåöèàëüíûå èìåíà . è .. óêàçûâàþò íà òåêóùèé êàòàëîã è íà ðîäèòåëüñêèé êàòàëîã. Ôàéëû ñ ýòèìè èìåíàìè àâòîìàòè÷åñêè îáðàçóþòñÿ ïðè ñîçäàíèè íîâîãî êàòàëîãà. Êàæäûé çàðåãèñòðèðîâàííûé ïîëüçîâàòåëü ïîëó÷àåò â ñâîå ðàñïîðÿæåíèå ïåðñîíàëüíûé ðàáî÷èé êàòàëîã, èìÿ êîòîðîãî ñîâïàäàåò ñ èìåíåì ïîëüçîâàòåëÿ. Ê ýòîìó êàòàëîãó âñåãäà ìîæíî îáðàòèòüñÿ ïî èìåíè ~. Ïðè èíñòàëëÿöèè UNIX, îáû÷íî ñîçäàþòñÿ ñòàíäàðòíûå ñèñòåìíûå êàòàëîãè.
/bin îñíîâíûå êîìàíäû UNIX, íåîáõîäèìûå äëÿ îáåñïå÷åíèÿ ìèíèìàëüíîãî
óðîâíÿ ðàáîòîñïîñîáíîñòè ñèñòåìû.
/dev ñïåöèàëüíûå ôàéëû óñòðîéñòâ. /etc ôàéëû êîíôèãóðàöèè è ôàéëû, âûïîëíÿþùèåñÿ ïðè çàïóñêå. /home ïåðñîíàëüíûå êàòàëîãè ïîëüçîâàòåëåé. /lib áèáëèîòåêè êîìïèëÿòîðà C. /proc îáðàçû âñåõ âûïîëíÿþùèõñÿ ïðîöåññîâ. /sbin êîìàíäû àäìèíèñòðèðîâàíèÿ. /tmp âðåìåííûå ôàéëû. /usr ôàéëû, èñïîëüçóåìûå âñåìè ïîëüçîâàòåëÿìè.
4
/usr/bin èñïîëíÿåìûå ôàéëû. /usr/doc äîêóìåíòàöèÿ UNIX (.AQ, HOWTO è ò.ä.). /usr/include çàãîëîâî÷íûå ôàéëû C. /usr/lib áèáëèîòåêè ÿçûêîâ ïðîãðàììèðîâàíèÿ. /usr/local èíñòàëëèðîâàííîå ïðîãðàììíîå îáåñïå÷åíèå. /usr/man ôàéëû ðóêîâîäñòâà ïî êîìàíäàì UNIX. /var èçìåíÿþùèåñÿ ôàéëû (ïî÷òîâûå ÿùèêè, ïðèíòåðíûå ôàéëû è ò.ä.).
Èíäåêñíûé äåñêðèïòîð Èíäåêñíûé äåñêðèïòîð ïðåäñòàâëÿåò ñîáîé çàïèñü, ñîäåðæàùóþ èíôîðìàöèþ î ôàéëå. Äëÿ êàæäîãî ôàéëà ñîçäàåòñÿ îäèí äåñêðèïòîð è èìåííî ñ íèì ðàáîòàåò ÎÑ ïðè îáðàùåíèè ê ôàéëó. Ñàìè äåñêðèïòîðû ðàñïîëàãàþòñÿ â ñèñòåìíîé îáëàñòè äèñêà, âûäåëÿåìîé ïðè ôîðìèðîâàíèè ôàéëîâîé ñèñòåìû. Èíäåêñíûé äåñêðèïòîð ñîäåðæèò ñëåäóþùèå ïîëÿ: • ÷èñëî ññûëîê íà ôàéë; • òèï ôàéëà; • èäåíòèôèêàòîð âëàäåëüöà ôàéëà è èäåíòèôèêàòîð ãðóïïû; • ïðàâà äîñòóïà ê ôàéëó; • êàëåíäàðíûå ñâåäåíèÿ, õàðàêòåðèçóþùèå ðàáîòó ñ ôàéëîì: âðåìÿ âíåñåíèÿ ïîñëåäíèõ èçìåíåíèé â ôàéë, âðåìÿ ïîñëåäíåãî îáðàùåíèÿ ê ôàéëó, âðåìÿ âíåñåíèÿ ïîñëåäíèõ èçìåíåíèé â èíäåêñ; • òàáëèöà àäðåñîâ íà äèñêå, â êîòîðûõ ðàñïîëàãàåòñÿ èíôîðìàöèÿ ôàéëà; • ðàçìåð ôàéëà; • äðóãèå ïîëÿ, èñïîëüçóåìûå ÿäðîì ñèñòåìû.
5
Íàçíà÷åíèå íåêîòîðûõ èç ýòèõ ïîëåé àíàëîãè÷íî ñîîòâåòñòâóþùèì çàïèñÿì â êàòàëîãå DOS, äðóãèå íå èìåþò òàêèõ àíàëîãîâ. Ðàññìîòðèì èõ áîëåå ïîäðîáíî. Ïðÿìûå è ñèìâîëè÷åñêèå ññûëêè Êîëè÷åñòâî ññûëîê ïðåäñòàâëÿåò ñîáîé ñ÷åò÷èê, óâåëè÷èâàþùèéñÿ íà 1 ïðè ñîçäàíèè íîâîé ññûëêè íà ôàéë è óìåíüøàþùèéñÿ íà 1 ïðè óäàëåíèè ññûëêè. Êîãäà çíà÷åíèå ýòîãî ñ÷åò÷èêà ñòàíåò ðàâíûì íóëþ, èíäåêñíûé äåñêðèïòîð îñâîáîæäàåòñÿ è ñ ýòîãî ìîìåíòà ôàéë ìîæíî ñ÷èòàòü óäàëåííûì. Ññûëêè íà ñóùåñòâóþùèé ôàéë ñîçäàþòñÿ ñ ïîìîùüþ êîìàíäû ln. Íàïðèìåð, êîìàíäà $ ln /bin/gzip ~/arc
ñîçäàåò äëÿ ôàéëà /bin/gzip â äîìàøíåì êàòàëîãå ïîëüçîâàòåëÿ íîâóþ ññûëêó, ïðåäîñòàâëÿÿ âîçìîæíîñòü îáðàùàòüñÿ ê ýòîìó ôàéëó ïî èìåíè arc. Èìåíà /bin/ gzip è ~/arc, ïðè ýòîì, ñîâåðøåííî ðàâíîïðàâíû. Êîìàíäà ln ñ êëþ÷îì s ïîçâîëÿåò ñîçäàâàòü ñèìâîëè÷åñêèå ññûëêè. Ñèìâîëè÷åñêàÿ ññûëêà ýòî îñîáûé òèï ôàéëà, ñîäåðæàùåãî èíôîðìàöèþ î äðóãîì ôàéëå, íà êîòîðûé îíà ññûëàåòñÿ. Âûïîëíåíèå ëþáîé îïåðàöèè íàä ñèìâîëè÷åñêîé ññûëêîé, çà èñêëþ÷åíèåì óäàëåíèÿ, ÎÑ òðàíñôîðìèðóåò â åå âûïîëíåíèå íàä öåëåâûì ôàéëîì.
6
Òèï ôàéëà Èíôîðìàöèîííûå êîìàíäû UNIX, íàïðèìåð, ls, òèï ôàéëà îòìå÷àþò îäíèì èç ñèìâîëîâ: Îáîçíà÷åíèå Òèï ôàéëà Îáû÷íûé ôàéë. d Ôàéë-êàòàëîã. l Ñèìâîëè÷åñêàÿ ññûëêà. c Áàéò-îðèåíòèðîâàííûé ñïåöèàëüíûé ôàéë. b Áëîê-îðèåíòèðîâàííûé ñïåöèàëüíûé ôàéë. Ðàçãðàíè÷åíèå äîñòóïà ê ôàéëàì UNIX, ÿâëÿÿñü ìíîãîïîëüçîâàòåëüñêîé ÎÑ, ñîäåðæèò â ñåáå ñðåäñòâà ðàçãðàíè÷åíèÿ äîñòóïà ê ôàéëàì. Ê òàêèì ñðåäñòâàì, â ÷àñòíîñòè, îòíîñèòñÿ îáÿçàòåëüíàÿ ðåãèñòðàöèÿ êàæäîãî ïîëüçîâàòåëÿ, ðàáîòàþùåãî ñ ñèñòåìîé. ÎÑ õðàíèò èíôîðìàöèþ îáî âñåõ çàðåãèñòðèðîâàííûõ ïîëüçîâàòåëÿõ è èõ èäåíòèôèêàöèîííûõ íîìåðàõ (UID User Identi.ier). Êðîìå òîãî, êàæäûé ïîëüçîâàòåëü ÿâëÿåòñÿ ÷ëåíîì îäíîé èëè íåñêîëüêèõ ãðóïï. Ïðè ñîçäàíèè ôàéëà â èíäåêñíûé äåñêðèïòîð çàíîñèòñÿ èíôîðìàöèÿ î ïîëüçîâàòåëå, ñîçäàâøåì ýòîò ôàéë, à èìåííî, óêàçûâàåòñÿ åãî èäåíòèôèêàöèîííûé íîìåð. Ýòîò ïîëüçîâàòåëü íàçûâàåòñÿ âëàäåëüöåì ôàéëà. Ñ òî÷êè çðåíèÿ ïðàâ äîñòóïà ê ôàéëàì âñå ïîëüçîâàòåëè äåëÿòñÿ íà òðè êàòåãîðèè: âëàäåëåö ôàéëà, ÷ëåíû ãðóïïû, â êîòîðóþ âõîäèò âëàäåëåö, è âñå îñòàëüíûå ïîëüçîâàòåëè. Äëÿ êàæäîé èç ïåðå÷èñëåííûõ êàòåãîðèé ìîæíî óñòàíàâëèâàòü êîìáèíàöèè
7
ñëåäóþùèõ ïðàâ äîñòóïà: ïðàâî íà ÷òåíèå, ïðàâî íà çàïèñü è ïðàâî íà âûïîëíåíèå. Èíòåðïðåòàöèÿ ýòèõ ïðàâ ðàçëè÷àåòñÿ äëÿ îáû÷íûõ ôàéëîâ è ôàéëîâ-êàòàëîãîâ. Ïðèìåíèòåëüíî ê ôàéëàì ýòè ïðàâà îçíà÷àþò ñîîòâåòñòâåííî: âîçìîæíîñòü îáðàùåíèÿ â ëþáîé ôîðìå ê ñîäåðæèìîìó ôàéëà áåç åãî èçìåíåíèÿ; âîçìîæíîñòü èçìåíåíèÿ ñîäåðæèìîãî ôàéëà; âîçìîæíîñòü çàïóñêà ôàéëà. Ïîñëåäíåå óòâåðæäåíèå îçíà÷àåò, ÷òî ïðè íàëè÷èè ó ïîëüçîâàòåëÿ ñîîòâåòñòâóþùåãî ïðàâà, UNIX ïîïûòàåòñÿ îñóùåñòâèòü çàïóñê ôàéëà íåçàâèñèìî îò åãî ñîäåðæèìîãî. Åñëè ñîäåðæèìîå ôàéëà íà ñàìîì äåëå íå ÿâëÿåòñÿ èñïîëíÿåìûì, áóäåò âûäàíî ñîîáùåíèå îá îøèáêå. Ïðèìåíèòåëüíî ê êàòàëîãó ïðàâî íà ÷òåíèå îçíà÷àåò âîçìîæíîñòü îáðàùåíèÿ ê ñîäåðæèìîìó êàòàëîãà áåç åãî èçìåíåíèÿ; ïðàâî íà çàïèñü âîçìîæíîñòü èçìåíåíèÿ ñîäåðæèìîãî êàòàëîãà, íàïðèìåð, âîçìîæíîñòü ñîçäàíèÿ òàì íîâûõ ôàéëîâ èëè èõ óäàëåíèÿ; ïðàâî íà âûïîëíåíèå âîçìîæíîñòü ñäåëàòü êàòàëîã òåêóùèì, ò.å. âîéòè â ýòîò êàòàëîã. Èç òàêîé èíòåðïðåòàöèè ïðàâ, â ÷àñòíîñòè, ñëåäóåò, ÷òî âîçìîæíîñòü èçìåíèòü ñîäåðæèìîå ôàéëà îïðåäåëÿåòñÿ ïðàâîì íà çàïèñü â ýòîò ôàéë, âîçìîæíîñòü æå óäàëåíèÿ ýòîãî ôàéëà ïðàâîì íà çàïèñü â êàòàëîã, ñîäåðæàùåì ýòîò ôàéë. Ïåðå÷èñëåííûå ïðàâà â ñèìâîëè÷åñêîé ôîðìå îáîçíà÷àþòñÿ ñîîòâåòñòâåííî áóêâàìè r, w, x, îòñóòñòâèå ñîîòâåòñòâóþùåãî ïðàâà äåôèñîì. Ñîâîêóïíîñòü ïðàâ äîñòóïà ê ôàéëó èçîáðàæàåòñÿ â âèäå ïîñëåäîâàòåëüíîñòè èç òðåõ ãðóïï ïî òðè ñèìâîëà, õàðàêòåðèçóþùèõ ñîîòâåòñòâåííî ïðàâà âëàäåëüöà, ïðàâà ÷ëåíîâ ãðóïïû è ïðàâà ïðî÷èõ ïîëüçîâàòåëåé. Íàïðèìåð, ïîñëåäîâàòåëüíîñòü rwxrw-r îçíà÷àåò, ÷òî âëàäåëåö ôàéëà îáëàäàåò âñåìè ïðàâàìè, ÷ëåíû ãðóïïû èìåþò ïðàâà íà ÷òåíèå è çàïèñü, íî íå íà âûïîëíåíèå, ïðî÷èå ïîëüçîâàòåëè èìåþò ïðàâî òîëüêî íà ÷òåíèå.
8
Òàáëèöà íîìåðîâ áëîêîâ Êàê èçâåñòíî, â êîìïüþòåðàõ àðõèòåêòóðû IBM PC äèñêîâîå ïðîñòðàíñòâî ðàçáèâàåòñÿ íà ñåêòîðà ðàçìåðîì 0.5 Êá. Äëÿ ïîâûøåíèÿ ýôôåêòèâíîñòè ðàçëè÷íûå ÎÑ îáúåäèíÿþò èõ â áîëåå êðóïíûå åäèíèöû äèñêîâîãî ïðîñòðàíñòâà.  UNIX òàêèå åäèíèöû íàçûâàþòñÿ áëîêàìè. Îáû÷íî ðàçìåð áëîêà ðàâåí 1 Êá. Êàæäûé áëîê èìååò óíèêàëüíûé íîìåð. Äëÿ çàäàíèÿ ðàñïîëîæåíèÿ ôàéëà íà äèñêå â åãî èíäåêñíîì äåñêðèïòîðå ñîäåðæèòñÿ òàáëèöà íîìåðîâ áëîêîâ. Ýòà òàáëèöà ñîñòîèò èç 13 ïîëåé. Ïåðâûå 10 ïîëåé èñïîëüçóþòñÿ äëÿ ïðÿìîé àäðåñàöèè è ñîäåðæàò íîìåðà áëîêîâ, â êîòîðûõ ðàçìåùàþòñÿ ïåðâûå 10 Êá ôàéëà. Åñëè ðàçìåð ôàéëà ïðåâûøàåò ýòó âåëè÷èíó, òî èñïîëüçóåòñÿ 11-îå ïîëå, îñóùåñòâëÿþùåå êîñâåííóþ àäðåñàöèþ. Îíî ñîäåðæèò íîìåð áëîêà, â êîòîðîì íàõîäèòñÿ ñïèñîê èç 256 íîìåðîâ áëîêîâ, ñîäåðæàùèõ ïðîäîëæåíèå ôàéëà. Åñëè ôàéë íå ïîìåùàåòñÿ â 10 + 256 = 266 áëîêàõ, òî èñïîëüçóåòñÿ 12îå ïîëå èíäåêñíîãî äåñêðèïòîðà, îñóùåñòâëÿþùåå äâîéíóþ êîñâåííóþ àäðåñàöèþ. Ýòî ïîëå ñîäåðæèò íîìåð áëîêà, âêëþ÷àþùåãî íîìåðà 256 áëîêîâ, êàæäûé èç êîòîðûõ, â ñâîþ î÷åðåäü, ñîäåðæèò íîìåðà 256 áëîêîâ, â êîòîðûõ ðàçìåùàåòñÿ ôàéë. 13îå ïîëå èíäåêñíîãî äåñêðèïòîðà îñóùåñòâëÿåò, â ñëó÷àå íåîáõîäèìîñòè, ïî àíàëîãè÷íîé ñõåìå òðîéíóþ êîñâåííóþ àäðåñàöèþ. Ñóïåðáëîê Èíôîðìàöèÿ î ñòðóêòóðå ôàéëîâîé ñèñòåìû õðàíèòñÿ â ñïåöèàëüíîì áëîêå ñèñòåìíîé ÷àñòè ðàçäåëà ñóïåðáëîêå. Ñóïåðáëîê ñîäåðæèò ñëåäóþùèå ïîëÿ: ðàçìåð ôàéëîâîé ñèñòåìû; êîëè÷åñòâî ñâîáîäíûõ áëîêîâ â ôàéëîâîé ñèñòåìå; ñïèñîê ñâîáîä-
9
íûõ áëîêîâ, èìåþùèõñÿ â ôàéëîâîé ñèñòåìå; èíäåêñíûé äåñêðèïòîð ñëåäóþùåãî ñâîáîäíîãî áëîêà â ñïèñêå ñâîáîäíûõ áëîêîâ; ðàçìåð ñïèñêà èíäåêñíûõ äåñêðèïòîðîâ; êîëè÷åñòâî ñâîáîäíûõ èíäåêñíûõ äåñêðèïòîðîâ â ôàéëîâîé ñèñòåìå; ñïèñîê ñâîáîäíûõ èíäåêñíûõ äåñêðèïòîðîâ â ôàéëîâîé ñèñòåìå; ñëåäóþùèé ñâîáîäíûé èíäåêñíûé äåñêðèïòîð; çàáëîêèðîâàííûå ïîëÿ äëÿ ñïèñêà ñâîáîäíûõ áëîêîâ è ñâîáîäíûõ èíäåêñíûõ äåñêðèïòîðîâ; ôëàã, ïîêàçûâàþùèé, ÷òî â ñóïåðáëîê áûëè âíåñåíû èçìåíåíèÿ. ßäðî ïåðèîäè÷åñêè ïåðåïèñûâàåò ñóïåðáëîê íà äèñê, åñëè â ñóïåðáëîê áûëè âíåñåíû èçìåíåíèÿ, äëÿ òîãî, ÷òîáû îáåñïå÷èâàëàñü ñîãëàñîâàííîñòü ñ äàííûìè, õðàíÿùèìèñÿ â ôàéëîâîé ñèñòåìå. Ôàéëû óñòðîéñòâ Çàìå÷àòåëüíîé îñîáåííîñòüþ UNIX ÿâëÿåòñÿ âîçìîæíîñòü ðàáîòû ñ âíåøíèìè óñòðîéñòâàìè êàê ñ ôàéëàìè. Ýòî ïîçâîëÿåò óíèôèöèðîâàòü îïåðàöèè ââîäà-âûâîäà. Ïðîãðàììíóþ ïîääåðæêó âíåøíèõ óñòðîéñòâ îñóùåñòâëÿþò ñïåöèàëüíûå ïðîãðàììû äðàéâåðû. Èíòåðôåéñ ñ íèìè îôîðìëåí â UNIX êàê îáðàùåíèå ê ôàéëó, íàçûâàåìîìó ñïåöèàëüíûì ôàéëîì. Ñïåöèàëüíûå ôàéëû íàõîäÿòñÿ â êàòàëîãå /dev. Ðàçëè÷àþò ïîáëî÷íûå è ïîñèìâîëüíûå óñòðîéñòâà. Íà òàêèå æå êàòåãîðèè ðàçäåëÿþòñÿ è ñïåöèàëüíûå ôàéëû. Èíîãäà èñïîëüçóþòñÿ òåðìèíû áëîê-îðèåíòèðîâàííûå è áàéòîðèåíòèðîâàííûå ñïåöèàëüíûå ôàéëû. Ýòè ôàéëû èìåþò ñòàíäàðòíûå èìåíà. Èõ èìåíà îáðàçóþòñÿ ñ ïîìîùüþ ñïåöèàëüíîãî ïðåôèêñà, óêàçûâàþùåãî íà òèï óñòðîéñòâà, è íîìåðà ýòîãî óñòðîéñòâà, ëèáî áóêâåííî-öèôðîâîãî èäåíòèôèêàòîðà, óêàçûâàþùåãî íà õàðàêòåðèñòèêè ýòîãî óñòðîéñòâà.
10
Ïðåôèêñ hd hda hdd hda1, hda2,
, hdd1,
fd0, fd1 sd lp0 lp2 tty ttyS0 ttyS3 tty1 tty12 pty cu ram null
Óñòðîéñòâî Æåñòêèé äèñê ñ IDE-èíòåðôåéñîì. 1-ûé 4-ûé äèñêè. Ññûëêà íà íîìåð äèñêà îáÿçàòåëüíà äàæå ïðè íàëè÷èè îäíîãî äèñêà. Äèñêè íó ìåðóþòñÿ â ïîðÿäêå Prima ryMaster, Prima ry-Slave, Secondary-Master, Secondary- Slave. Ëîãè÷åñêèé äèñê èëè ðà çäåë óêàçàííîãî æåñòêî ãî äèñêà. Íî ìåðà 1 4 çàêð åïëåíû çà ðà çäåëà ìè äèñêà. Åñëè ýòî ïåðâè÷íûé ðà çäåë, òî ïî ýòîìó æå íîìåðó îñóùåñòâëÿåòñÿ è äîñòóï ê ðàñïîëàãàþùåìóñÿ òàì ëîãè÷åñêîìó äèñêó. Íîìåðà 5, 6,
çàêðåïëåíû çà ëîãè÷åñêèìè äèñêà ìè, ðàñïîëîæåííûìè â ðàñøèðåííîì ðàçäåëå. Íàêîïèòåëè íà ãèáêèõ ìà ãíèòíûõ äèñêàõ A è B. Æåñòêèå äèñêè ñî SCSI-èíòåðôåéñî ì. Ïàðàëëåëüíûå ïîðòû LPT1 LPT3. Ïîñèìâîëüíûå óñòðîéñòâà. Ïîñëåäîâàòåëüíûå ïîðòû CO M1 COM4. Âèðòóàëüíûå òåðìèíàëû, ïåðåêëþ÷åíèå ìåæäó êîòîðûìè îñóùåñòâëÿåòñÿ íà æàòèåì êëàâèø Alt-F1 Alt-F12. Ïñåâäîòåðìèíàëû, èñïîëüçóåìûå äëÿ âõîäà ñ ó äàëåííûõ òåðìèíàëîâ, íàïðèìåð, ÷åðåç telnet. Ïîñèìâîëüíûå óñòðîéñòâà, ðàáîòàþùèå ñî çâó êîì, íàïðèìåð, ìîäåì. Âèðòóàëüíûé ýëåêòðîííûé äèñê, ðàñïîëàãàþùèéñÿ â îïåðàòèâíîé ïàìÿòè. Ôèêòèâíîå óñòðîéñòâî.
11
ÊÎÌÀÍÄÍÛÉ ÏÐÎÖÅÑÑÎÐ SHELL Ïîíÿòèå shell Äëÿ îðãàíèçàöèè èíòåðôåéñà ïîëüçîâàòåëÿ â ñîñòàâ UNIX âõîäèò êîìàíäíàÿ îáîëî÷êà, íàçûâàåìàÿ shell. Ýòà îáîëî÷êà âûïîëíÿåò ñëåäóþùèå ôóíêöèè: îðãàíèçóåò èñïîëíåíèå ïðîãðàìì, ïðîâåðÿÿ èõ ñèíòàêñèñ, äîïóñòèìîñòü êëþ÷åé è ò.ä.; îñóùåñòâëÿåò ãåíåðàöèþ èìåí ôàéëîâ; îñóùåñòâëÿåò ïåðåíàçíà÷åíèå ââîäà è âûâîäà; îðãàíèçóåò êîíâåéåðèçàöèþ; îñóùåñòâëÿåò êîíòðîëü ñðåäû îêðóæåíèÿ; ÿâëÿåòñÿ èíòåðïðåòàòîðîì ðàçâèòîãî êîìàíäíîãî ÿçûêà, ïîçâîëÿþùåãî ïîëüçîâàòåëþ ñîçäàâàòü ñëîæíûå ñöåíàðèè âûïîëíåíèÿ ïðîãðàìì. Ñóùåñòâóþò ðàçëè÷íûå âåðñèè shell, ñòàíäàðòíûìè ÿâëÿþòñÿ: Bourne Shell (çàïóñêàåòñÿ êîìàíäîé sh), Bourne Again Shell (bash), C-Shell (csh), Korn Shell (ksh). Ìû ðàññìîòðèì Bourne Again Shell - îáîëî÷êó, îáû÷íî çàãðóæàåìóþ îïåðàöèîííîé ñèñòåìîé ïî óìîë÷àíèþ. Bourne Again Shell ÿâëÿåòñÿ ðàçâèòèåì Bourne Shell, îáîãàùåííîé ëó÷øèìè èäåÿìè èç äðóãèõ shell. Êîìàíäíàÿ ñòðîêà Êîìàíäíàÿ ñòðîêà èìååò ñëåäóþùèé âèä: $ êîìàíäà êëþ÷è àðãóìåíòû
Ñèìâîë $ íàçûâàåòñÿ ïðèãëàøåíèåì shell, åìó ìîãóò ïðåäøåñòâîâàòü äðóãèå ñèìâîëû, îòìå÷àþùèå, íàïðèìåð, èìÿ òåêóùåãî êàòàëîãà èëè èìÿ ñèñòåìû. Shell îáðà-
12
áàòûâàåò êîìàíäû òðåõ òèïîâ. Âî-ïåðâûõ, â êà÷åñòâå èìåíè êîìàíäû ìîæåò áûòü óêàçàíî èìÿ èñïîëíÿåìîãî ôàéëà â îáúåêòíîì êîäå, ïîëó÷åííîãî â ðåçóëüòàòå êîìïèëÿöèè èñõîäíîãî òåêñòà ïðîãðàììû (íàïðèìåð, ïðîãðàììû íà ÿçûêå Ñè). Âî-âòîðûõ, èìåíåì êîìàíäû ìîæåò áûòü èìÿ êîìàíäíîãî ôàéëà, ñîäåðæàùåãî íàáîð èíñòðóêöèé, îáðàáàòûâàåìûõ shell. Òàêèå ôàéëû íàçûâàþòñÿ ñöåíàðèÿìè èëè ñêðèïòàìè. Íàêîíåö, êîìàíäà ìîæåò áûòü âíóòðåííåé êîìàíäîé ÿçûêà shell, èõ êîäû ñîäåðæàòñÿ â ôàéëàõ, çàïóñêàþùèõ shell. Êëþ÷è ñëóæàò äëÿ ìîäèôèêàöèè ðåæèìîâ ðàáîòû êîìàíäû è ïðåäñòàâëÿþò ñîáîé íàáîð îïðåäåëåííûõ ñèìâîëîâ, êîòîðûì ïðåäøåñòâóåò ñèìâîë . Àðãóìåíòû óêàçûâàþò íà îáúåêòû, íàä êîòîðûìè âûïîëíÿþòñÿ îïåðàöèè.  êà÷åñòâå àðãóìåíòîâ îáû÷íî óêàçûâàþòñÿ èìåíà ôàéëîâ.  îäíîé ñòðîêå ìîæåò ñîäåðæàòüñÿ íåñêîëüêî êîìàíä. Îíè îòäåëÿþòñÿ äðóã îò äðóãà ñèìâîëîì ;. Îäíó êîìàíäó ìîæíî ðàçìåñòèòü íà íåñêîëüêèõ ýêðàííûõ ñòðîêàõ. Äëÿ ýòîãî ïåðåä íàæàòèåì íà êëàâèøó [Enter] íóæíî âñòàâèòü ñèìâîë îáðàòíûé ñëýø \. Êîìàíäíûé ïðîöåññîð shell èùåò èìåíà êîìàíä â óêàçàííîì íàáîðå êàòàëîãîâ, êîòîðûé ìîæíî èçìåíèòü ïî æåëàíèþ ïîëüçîâàòåëÿ. Ñïèñîê èìåí ýòèõ êàòàëîãîâ ñîñòàâëÿåò çíà÷åíèå ïåðåìåííîé PATH. Shell ïîçâîëÿåò âûïîëíÿòü ðàçëè÷íûå îïåðàöèè ïî ðåäàêòèðîâàíèþ êîìàíäíîé ñòðîêè. Ýòî îáåñïå÷èâàåòñÿ âîçìîæíîñòüþ ïåðåìåùåíèÿ êóðñîðà ïî êîìàíäíîé ñòðîêå è
13
óäàëåíèåì ñèìâîëîâ ñ ïîìîùüþ êëàâèø [Delete] è [Backspace]. Íàæàòèå íà êëàâèøó [Tab] ïîçâîëÿåò îñóùåñòâèòü çàâåðøåíèå ââîäà íå ïîëíîñòüþ ââåäåííûõ êîìàíä è èìåí ôàéëîâ.  ðåçóëüòàòå èìÿ áóäåò äîïîëíåíî àâòîìàòè÷åñêè. Åñëè îäèíàêîâûé ïðåôèêñ èìåþò íåñêîëüêî èìåí, shell ïîäàñò çâóêîâîé ñèãíàë, ïðåäëàãàÿ ïîëüçîâàòåëþ ââåñòè åùå íåêîòîðîå êîëè÷åñòâî ñèìâîëîâ. Shell çàïîìèíàåò îïðåäåëåííîå êîëè÷åñòâî ïîñëåäíèõ ââîäèìûõ êîìàíä. Íàæàòèå íà êëàâèøó ñòðåëêà ââåðõ ïîçâîëÿåò ââîäèòü ýòè êîìàíäû â êîìàíäíóþ ñòðîêó. Êîìàíäà history ïîçâîëÿåò ïðîñìîòðåòü âñå çàôèêñèðîâàííûå â ïåðå÷íå êîìàíäû âìåñòå ñ èõ ïîðÿäêîâûìè íîìåðàìè. Ëþáóþ êîìàíäó èç ïåðå÷íÿ ìîæíî ïîâòîðèòü, óêàçàâ ñïåöèàëüíóþ êîìàíäó $ !num
ãäå num ïîðÿäêîâûé íîìåð êîìàíäû â ïåðå÷íå. Êîìàíäà alias ïîçâîëÿåò ñîçäàâàòü ïñåâäîíèìû èìåí êîìàíä. Îíà èìååò ôîðìàò $ alias name=command
ãäå name èìÿ äîïîëíèòåëüíîå èìÿ êîìàíäû command. Êîìàíäà alias áåç àðãóìåíòîâ îòîáðàæàåò ñïèñîê âñåõ äåéñòâóþùèõ ïñåâäîíèìîâ è ñîîòâåòñòâóþùèõ èì êîìàíä. Êîìàíäà unalias ïîçâîëÿåò óäàëèòü ïñåâäîíèì, óêàçàííûé â êà÷åñòâå àðãóìåíòà.
14
Ââîä-âûâîä, ïåðåíàïðàâëåíèå è ïðîãðàììíûå êàíàëû Ìíîãèå êîìàíäû UNIX äëÿ îðãàíèçàöèè ââîäà-âûâîäà èñïîëüçóþò ñïåöèàëüíûå ôàéëû
stdin ñòàíäàðòíûé ââîä, stdout ñòàíäàðòíûé âûâîä è stderr ñòàíäàðòíûé ïîòîê îøèáîê. Ôàéë stdin ñâÿçàí ñ êëàâèàòóðîé, ôàéëû stdout è stderr ñ ìîíèòîðîì.
stdout stdin
command stderr
UNIX ïðåäîñòàâëÿåò âîçìîæíîñòü âìåñòî ýòèõ çàäàííûõ ïî óìîë÷àíèþ ôàéëîâ èñïîëüçîâàòü äðóãèå ôàéëû. Ýòà âîçìîæíîñòü ðåàëèçóåòñÿ ïóòåì ïåðåíàïðàâëåíèÿ îïåðàöèé ââîäà-âûâîäà. 1) Ïåðåíàïðàâëåíèå âûâîäà. Äëÿ îðãàíèçàöèè ïåðåíàïðàâëåíèÿ âûâîäà èñïîëüçóþòñÿ êîíñòðóêöèè
$ command > file $ command >> file Åñëè êîìàíäà command îñóùåñòâëÿåò âûâîä äàííûõ â stdout, òî ýòè äàííûå áóäóò ïåðåíàïðàâëåíû â ôàéë file . Ðàçëè÷èå ìåæäó ýòèìè äâóìÿ êîíñòðóêöèÿìè ïðîÿâëÿåòñÿ òîãäà, êîãäà ôàéë file óæå ñóùåñòâóåò.  ïåðâîì ñëó÷àå ñîäåðæèìîå
ýòîãî ôàéëà áóäåò çàìåíåíî, âî âòîðîì äàííûå áóäóò äîáàâëåíû â ôàéë.
15
stdout stdin
command
File
stderr
Ïðèìåðû:
$ ls -l > flist
Ïîëíàÿ èíôîðìàöèÿ î òåêóùåì êàòàëîãå áóäåò çàïèñàíà â ôàéë flist. $ man find > find.txt
Ãëàâà ýëåêòðîííîãî ðóêîâîäñòâà î êîìàíäå find çàïèøåòñÿ â ôàéë find.txt. $ echo -e \nnewline >> example
 ôàéë example áóäåò äîáàâëåíà íîâàÿ ñòðîêà newline. 2) Ïåðåíàïðàâëåíèå ââîäà. Äëÿ îðãàíèçàöèè ïåðåíàïðàâëåíèÿ ââîäà èñïîëüçóåòñÿ êîíñòðóêöèÿ $ command < file
Ïîòîê âõîäíûõ ñèìâîëîâ áóäåò ïîñòóïàòü íå èç stdin, à èç óêàçàííîãî ôàéëà. stdout File
stdin
command stderr
16
3) Ïåðåíàïðàâëåíèå ïîòîêà îøèáîê. Äëÿ âûâîäà ñîîáùåíèé îá îøèáêàõ, âîçíèêàþùèõ â ðåçóëüòàòå ðàáîòû êîìàíä, UNIX èñïîëüçóåò ñïåöèàëüíûé ôàéë stderr. Ýòîò ôàéë îòëè÷àåòñÿ îò stdout, õîòÿ, òàêæå êàê è ïîñëåäíèé, ñâÿçàí ñ ìîíèòîðîì. Ïîýòîìó, äàæå ïðè ïåðåíàïðàâëåíèè âûâîäà, ñîîáùåíèÿ îá îøèáêàõ áóäóò ïîñòóïàòü íà ýêðàí. Åñëè ýòè ñîîáùåíèÿ íóæíî ñîõðàíèòü â ôàéëå, íàïðèìåð, ñ öåëüþ èõ ïîñëåäóþùåãî àíàëèçà, íåîáõîäèìî îðãàíèçîâàòü ïåðåíàïðàâëåíèÿ ïîòîêà äàííûõ, ïîñòóïàþùèõ â stderr. Ýòî ðåàëèçóåòñÿ ñ ïîìîùüþ êîíñòðóêöèé $ command 2> file è $ command 2>> file
Òàêîé ñèíòàêñèñ îáúÿñíÿåòñÿ òåì, ÷òî ôàéëû stdin , stdout è stderr èìåþò äåñêðèïòîðû 0, 1, 2. Â ñîîòâåòñòâèè ñ ýòèì, äëÿ ïåðåíàïðàâëåíèÿ ñòàíäàðòíîãî âûâîäà ìîãóò èñïîëüçîâàòüñÿ çíàêè 1>, 1>>. Ïðèìåð. $ ls ~/txtdir f1 >> flist 2>> errlist
Èìåíà ôàéëîâ, íàõîäÿùèõñÿ â ïîäêàòàëîãå txtdir ïåðñîíàëüíîãî êàòàëîãà, áóäóò ïîìåùåíû â ôàéë flist, ñîîáùåíèÿ îá îøèáêàõ, íàïðèìåð îá îòñóòñòâèè òàêîãî êàòàëîãà â ôàéë errlist. Åñëè âîçíèêàåò íåîáõîäèìîñòü, ïîòîêè stdout è stderr íàïðàâèòü â îäèí ôàéë, òî íóæíî ïåðåíàïðàâèòü ñòàíäàðòíûé ïîòîê îøèáîê â ñòàíäàðòíûé âûâîä èëè íàîáîðîò. Äëÿ ýòîãî èñïîëüçóþòñÿ êîíñòðóêöèè ñîîòâåòñòâåííî 2>&1 è 1>&2. Ïðèìåð. $ ls ~/txtdir > dirdata 2>&1
17
stdin
command
stderr
stdout
Äàííûå, âûâîäèìûå êîìàíäîé ls, ïîñòóïàþò â ôàéë dirdata. Ïîñêîëüêó ñîîáùåíèÿ îá îøèáêàõ ïåðåíàïðàâëÿþòñÿ íà ñòàíäàðòíûé âûâîä, òî îíè òàêæå ïîïàäóò â ôàéë dirdata. Äëÿ êîíñòðóêöèè, ïðèâåäåííîé â ýòîì ïðèìåðå, ñóùåñòâóåò áîëåå êîðîòêèé ýêâèâàëåíò: $ ls ~/txtdir >& dirdata
4) Ïðîãðàììíûå êàíàëû. Êîíñòðóêöèÿ, íàçûâàåìàÿ ïðîãðàììíûì êàíàëîì ïîçâîëÿåò ïåðåíàïðàâëÿòü ñòàíäàðòíûé âûâîä îäíîé êîìàíäû íà ñòàíäàðòíûé ââîä äðóãîé. Åå ñèíòàêñèñ: $ command1 | command2
stdin
command1
stdout
stdin
command2
stdout
Ïðèìåðû.
$ ls -l | lpr
Ïîëíàÿ èíôîðìàöèÿ î ñîäåðæèìîì òåêóùåãî êàòàëîãà áóäåò âûâåäåíà íà ïå÷àòü. $ cat myfile | more
Ñîäåðæèìîå ôàéëà myfile ïîäàåòñÿ íà âõîä êîìàíäû more, â ðåçóëüòàòå ÷åãî îíî áóäåò âûâîäèòüñÿ íà ýêðàí ïîñòðàíè÷íî.
18
5) Êàíàëû è ïåðåíàïðàâëåíèå. Èíîãäà âîçíèêàåò íåîáõîäèìîñòü ïåðåíàïðàâèòü ñòàíäàðòíûé âûâîä â ôàéë è îäíîâðåìåííî âîñïðîèçâåñòè ýòó èíôîðìàöèþ íà ýêðàíå. Ýòî ìîæíî ñäåëàòü ñ ïîìîùüþ êîìàíäû tee, êîòîðàÿ êîïèðóåò äàííûå èç ñòàíäàðòíîãî âûâîäà â ôàéë. Ïðè ýòîì, ïåðåíàïðàâëåíèÿ ñòàíäàðòíîãî âûâîäà íå ïðîèñõîäèò, ïîýòîìó äàííûå, ïîìåùàåìûå â ôàéë, áóäóò îòîáðàæàòüñÿ è íà ýêðàíå. stdin
command
stdout
File
Ïðèìåðû.
$ ls -l /bin | tee dirlist
Èíôîðìàöèÿ î êàòàëîãå /bin áóäåò âûâåäåíà íà ýêðàí è ñîõðàíåíà â ôàéëå dirlist. $ man mount | tee infmount | lpr
Ãëàâà ýëåêòðîííîãî ðóêîâîäñòâà î êîìàíäå mount áóäåò ñîõðàíåíà â ôàéëå infmount è ðàñïå÷àòàíà íà ïðèíòåðå.
19
Ñïåöèàëüíûå ñèìâîëû Íåêîòîðûå ñèìâîëû â shell èìåþò ñïåöèàëüíîå çíà÷åíèå. Íàïðèìåð, øàáëîííûå ñèìâîëû *, ?, [], ñèìâîë äîñòóïà ê çíà÷åíèþ ïåðåìåííîé $, ñèìâîëû êîíâåéåðèçàöèè <, >, >>, ñèìâîë ôèëüòðà |, ïðîáåë, èñïîëüçóåìûé êàê ðàçäåëèòåëü. Èíîãäà âîçíèêàåò íåîáõîäèìîñòü îòìåíèòü èõ ñïåöèàëüíîå çíà÷åíèå, íàïðèìåð, åñëè ìû õîòèì èñïîëüçîâàòü îäèí èç ýòèõ ñèìâîëîâ â èìåíè ôàéëà.  ýòîì ñëó÷àå òàêîå èìÿ ñëåäóåò çàêëþ÷èòü â äâîéíûå êàâû÷êè. Áîëåå òî÷íî, äâîéíûå êàâû÷êè îòìåíÿþò äåéñòâèå âñåõ ñïåöèàëüíûõ ñèìâîëîâ, êðîìå $ è !. Íàïðèìåð, â ðåçóëüòàòå âûïîëíåíèÿ êîìàíäû $ cp ./f* /tmp
â êàòàëîã tmp áóäóò ñêîïèðîâàíû âñå ôàéëû èç òåêóùåãî êàòàëîãà, èìåíà êîòîðûõ íà÷èíàþòñÿ ñ ñèìâîëà f. Êîìàíäà $ cp ./f* /tmp
ïðèâåäåò ê êîïèðîâàíèþ ôàéëà ñ èìåíåì f*. Äëÿ îòìåíû äåéñòâèÿ ñïåöèàëüíîãî ñèìâîëà $ ñòðîêó ñèìâîëîâ ñëåäóåò çàêëþ÷èòü â îäèíàðíûå êàâû÷êè. Íàïðèìåð, ðåçóëüòàòîì ðàáîòû êîìàíä $ var=Hello all! $ echo $var $var $var áóäåò ñòðîêà Hello all! Hello all! $var. Îáðàòèòå âíèìàíèå, ÷òî ñòðîêà Hello all! ñîäåðæèò äâà ñïåöèàëüíûõ ñèìâîëà ïðîáåë è !. Åñëè áû ïåðåìåííîé var òðåáîâàëîñü ïðèñâîèòü çíà÷åíèå Hello all!, òî åãî ìîæíî áûëî çàêëþ-
÷èòü è â äâîéíûå êàâû÷êè.
20
Êðîìå òîãî, shell UNIX äàåò èíòåðåñíóþ âîçìîæíîñòü ïîìåñòèòü ðåçóëüòàò âûïîëíåíèÿ êîìàíäà íåïîñðåäñòâåííî â êîìàíäíóþ ñòðîêó. Äëÿ ýòîãî èìÿ âûçûâàåìîé êîìàíäû íóæíî çàêëþ÷èòü â îáðàòíûå êàâû÷êè. Ïðèìåðû. $ res=ls $ echo $res
Ðåçóëüòàòîì áóäåò âûâîä íà ýêðàí ñòðîêè, ñîäåðæàùåé èìåíà ôàéëîâ, íàõîäÿùèõñÿ â òåêóùåì êàòàëîãå. Îáðàòèì âíèìàíèå íà òî, ÷òî â ðåçóëüòàòå âûïîëíåíèÿ ïåðâîé êîìàíäû ñîäåðæèìîå êàòàëîãà íà ýêðàíå íå îòîáðàçèòñÿ. $ var1=String1 $ var2=String2 $ echo $var1 echo $var2 Ðåçóëüòàòîì áóäåò âûâîä ñòðîêè String1 String2. Åñëè æå âìåñòî ïîñëåäíåé
êîìàíäû âûïîëíèòü êîìàíäó
$ echo $var1 echo $var2
òî â ðåçóëüòàòå íà ýêðàíå îòîáðàçèòñÿ ñòðîêà String1 echo String2. Ñïåöèàëüíîå çíà÷åíèå â shell èìååò è îáðàòíûé ñëýø. Ýòîò ñèìâîë, ëèêâèäèðóåò ñïåöèàëüíîå çíà÷åíèå ñëåäóþùåãî íåïîñðåäñòâåííî çà íèì ñèìâîëà. Íàïðèìåð, â ðåçóëüòàòå âûïîëíåíèÿ êîìàíäû $ echo \$var
íà ýêðàíå îòîáðàçèòñÿ ñòðîêà $var, òàê êàê ñèìâîë \ îòìåíÿåò äåéñòâèå ñïåöèàëüíîãî ñèìâîëà $.
21
ÑÖÅÍÀÐÈÈ SHELL Êîìàíäíûé ïðîöåññîð shell ÿâëÿåòñÿ èíòåðïðåòàòîðîì ïðîãðàìì, íàïèñàííûõ íà ñïåöèàëüíîì ÿçûêå ïðîãðàììèðîâàíèÿ. Ýòè ïðîãðàììû íàçûâàþòñÿ ñöåíàðèÿìè shell. Ìíîæåñòâî ñöåíàðèåâ, ñîçäàííûõ ïîëüçîâàòåëåì, ÿâëÿåòñÿ ðàñøèðåíèåì íàáîðà êîìàíä UNIX. Ñöåíàðèè ïîçâîëÿþò ãèáêî íàñòðàèâàòü ÎÑ, ïðèñïîñàáëèâàòü åå äëÿ ðåøåíèÿ êîíêðåòíûõ çàäà÷. Ïåðåìåííûå Shell Êàê è â ëþáîì äðóãîì ÿçûêå ïðîãðàììèðîâàíèÿ, â ñöåíàðèÿõ shell äëÿ õðàíåíèÿ äàííûõ ìîæíî èñïîëüçîâàòü ïåðåìåííûå. Èìåíåì ïåðåìåííîé ìîæåò áûòü ëþáîé èäåíòèôèêàòîð ïîñëåäîâàòåëüíîñòü èç áóêâ è öèôð, íà÷èíàþùàÿñÿ ñ áóêâû. Ïåðåìåííûå shell íå ðàçäåëÿþòñÿ ïî òèïàì è ðàññìàòðèâàþòñÿ êàê ïîñëåäîâàòåëüíîñòè ñèìâîëîâ ñèìâîëüíûå ñòðîêè. Çíà÷åíèå ïåðåìåííîé çàäàåòñÿ îïåðàòîðîì ïðèñâàèâàíèÿ, èìåþùèì ñëåäóþùèé ôîðìàò: var=term.  ðåçóëüòàòå åãî âûïîëíåíèÿ ïåðåìåííîé var áóäåò ïðèñâîåíî çíà÷åíèå âûðàæåíèÿ term, â êà÷åñòâå êîòîðîãî ìîæåò ôèãóðèðîâàòü çíà÷åíèå äðóãîé ïåðåìåííîé èëè ñòðîêà ñèìâîëîâ.  ñëó÷àå åñëè ýòà ñòðîêà ñîäåðæèò ñïåöèàëüíûå ñèìâîëû, åå íóæíî çàêëþ÷èòü â êàâû÷êè . Äëÿ äîñòóïà ê çíà÷åíèþ ïåðåìåííîé ïåðåä åå èìåíåì íóæíî ïîñòàâèòü çíàê $. Íàïðèìåð, â ðåçóëüòàòå âûïîëíåíèÿ êîìàíä $ var=20 $ echo var
íà ýêðàí áóäåò âûâåäåíà ñòðîêà var. Åñëè âòîðóþ êîìàíäó çàìåíèòü íà $ echo $var
áóäåò âûâåäåíà ñòðîêà 20. Åñëè èìÿ ïåðåìåííîé çàêëþ÷èòü â ôèãóðíûå ñêîáêè, òî åå âûâîäèìîå çíà÷åíèå ìîæåò ñîïðîâîæäàòüñÿ ñèìâîëàìè, ñòîÿùèìè ïåðåä çíà÷åíè-
22
åì èëè ïîñëå çíà÷åíèÿ ýòîé ïåðåìåííîé. Ýòà êîíñòðóêöèÿ ïîçâîëÿåò îñóùåñòâëÿòü ïðîöåäóðó êîíêàòåíàöèè. Íàïðèìåð, â ðåçóëüòàòå âûïîëíåíèÿ êîìàíä $ var=bbb $ echo aaa${var}ccc
íà ýêðàí áóäåò âûâåäåíà ñòðîêà aaabbbccc. Ñïèñîê âñåõ èñïîëüçóåìûõ ïåðåìåííûõ ìîæíî ïîëó÷èòü ñ ïîìîùüþ êîìàíäû set. Êîìàíäà unset ñ èìåíåì ïåðåìåííîé â êà÷åñòâå ïàðàìåòðà óíè÷òîæàåò ýòó ïåðåìåííóþ. Ïðè ðåãèñòðàöèè ïîëüçîâàòåëÿ UNIX çàïóñêàåò â êà÷åñòâå ïðîöåññà ïîëüçîâàòåëüñêèé shell. Êîãäà ïîëüçîâàòåëü çàïóñêàåò ñöåíàðèé, ñèñòåìà ïîðîæäàåò â êà÷åñòâå äî÷åðíåãî ïðîöåññà âòîðè÷íûé shell. Êîãäà âûïîëíåíèå ñöåíàðèÿ çàêàí÷èâàåòñÿ, âòîðè÷íûé shell çàâåðøàåò ðàáîòó. Åñëè èç îäíîãî ñöåíàðèÿ îñóùåñòâëÿåòñÿ âûçîâ äðóãîãî ñöåíàðèÿ, òî ýòî ïðèâåäåò ê òîìó, ÷òî âòîðè÷íûé shell áóäåò ïîðîæäàòü åùå îäèí äî÷åðíèé shell. Âñå ïåðåìåííûå, îïðåäåëåííûå â ñöåíàðèè, ïî óìîë÷àíèþ ÿâëÿþòñÿ ëîêàëüíûìè äëÿ íåãî, äîñòóï ê íèì èç äðóãèõ shell íåâîçìîæåí. Äëÿ îáåñïå÷åíèÿ òàêîé âîçìîæíîñòè íåîáõîäèìî îñóùåñòâèòü ýêñïîðò ïåðåìåííîé, ÷òî îñóùåñòâëÿåòñÿ êîìàíäîé export, â êà÷åñòâå àðãóìåíòà êîòîðîé óêàçûâàåòñÿ ñïèñîê ýêñïîðòèðóåìûõ ïåðåìåííûõ. Åñëè â íåêîòîðîì shell îñóùåñòâëÿåòñÿ ýêñïîðò îïðåäåëåííûõ ïåðåìåííûõ, òî ëþáîé ïîðîæäåííûé shell ïîëó÷èò â ñâîå ðàñïîðÿæåíèå êîïèè âñåõ ýêñïîðòèðóåìûõ ïåðåìåííûõ, ê êîòîðûì îí ñìîæåò îáðàùàòüñÿ ïî òåì æå èìåíàì, ÷òî è ðîäèòåëüñêèé shell. Ïðè ðåãèñòðàöèè ïîëüçîâàòåëÿ â ñèñòåìå, äëÿ åãî shell ñîçäàþòñÿ ñïåöèàëüíûå ïåðåìåííûå. Èõ èìåíà áåðóòñÿ èç çàðåçåðâèðîâàííîãî ñïèñêà êëþ÷åâûõ ñëîâ è çàäàþòñÿ ïðîïèñíûìè áóêâàìè. Îíè äåëÿòñÿ íà ñèñòåìíûå è ïåðåîïðåäåëÿåìûå. Ñïèñîê âñåõ ñïåöèàëüíûõ ïåðåìåííûõ ìîæåò áûòü ïîëó÷åí ñ ïîìîùüþ êîìàíäû env.
23
Ñèñòåìíûå ïåðåìåííûå Ñèñòåìíûå ïåðåìåííûå îïðåäåëÿþòñÿ ÎÑ è ìîãóò áûòü èñïîëüçîâàíû ñðàçó ïîñëå ðåãèñòðàöèè. Ýòè ïåðåìåííûå ÿâëÿþòñÿ íåèçìåíÿåìûìè. HOME. Ñîäåðæèò ïóòåâîå èìÿ ïåðñîíàëüíîãî êàòàëîãà ïîëüçîâàòåëÿ. LOGNAME. Ñîäåðæèò ðåãèñòðàöèîííîå èìÿ ïîëüçîâàòåëÿ. Ïåðåîïðåäåëÿåìûå ñïåöèàëüíûå ïåðåìåííûå. SHELL. Ñîäåðæèò ïóòåâîå èìÿ shell, èñïîëüçóåìîé ïîëüçîâàòåëåì. PATH. Ñîäåðæèò ïóòåâûå èìåíà, ðàçäåëåííûå äâîåòî÷èåì. Ïðè óêàçàíèè íåïîëíîãî èìåíè êîìàíäû, åå ïîèñê îñóùåñòâëÿåòñÿ ïî î÷åðåäè âî âñåõ êàòàëîãàõ, ïåðå÷èñëåííûõ â ïåðåìåííîé PATH. Äâîåòî÷èå áåç óêàçàíèÿ èìåíè îçíà÷àåò òåêóùèé êàòàëîã. Äîáàâëåíèå íîâîãî ïóòåâîãî èìåíè new_path ê ñïèñêà èìåí, ñîäåðæàùèõñÿ â ïåðåìåííîé PATH îñóùåñòâëÿåòñÿ êîìàíäîé PATH=$PATH:new_path
PS1 è PS2. Ñîäåðæèò îñíîâíîé è äîïîëíèòåëüíûé ñèìâîëû ïðèãëàøåíèÿ. Äîïîëíèòåëüíûé ñèìâîë èñïîëüçóåòñÿ äëÿ êîìàíä, ðàñïîëàãàþùèõñÿ íà íåñêîëüêèõ ñòðîêàõ. Äëÿ êîíôèãóðèðîâàíèÿ ïðèãëàøåíèÿ ìîæíî èñïîëüçîâàòü ñëåäóþùèå ñïåöèàëüíûå ñèìâîëû: \d òåêóùàÿ äàòà; \s äåéñòâóþùèé â äàííûé ìîìåíò shell; \t âðåìÿ ñóòîê; \u èìÿ ïîëüçîâàòåëÿ; \w òåêóùèé êàòàëîã; \! íîìåð òåêóùåãî ñîáûòèÿ â ïåðå÷íå ðàíåå ââåäåííûõ êîìàíä; \$ èñïîëüçîâàòü ñèìâîë $ â êà÷åñòâå ïðèãëàøåíèÿ äëÿ âñåõ ïîëüçîâàòåëåé, êðîìå root, äëÿ êîòîðîãî âûäàåòñÿ ïðèãëàøåíèå #.
24
MAIL. Ñîäåðæèò ïóòåâîå èìÿ ïî÷òîâîãî ÿùèêà, â êîòîðûé ñèñòåìà ïîìåùàåò ïîñòóïàþùèå íà èìÿ ïîëüçîâàòåëÿ ñîîáùåíèÿ. TERM. Ñîäåðæèò èìÿ òåðìèíàëà, íà êîòîðîì ðàáîòàåò ïîëüçîâàòåëü. LANG. Ñîäåðæèò ïàðàìåòð ëîêàëèçàöèè äëÿ íàöèîíàëüíûõ ÿçûêîâ. Ïîçèöèîííûå ïåðåìåííûå Òàê æå, êàê ýòî äåëàåòñÿ äëÿ êîìàíä UNIX, â ñöåíàðèè shell ìîæíî èñïîëüçîâàòü àðãóìåíòû, óñòàíàâëèâàåìûå ïðè âûçîâå ñöåíàðèÿ. Äëÿ îáåñïå÷åíèÿ âîçìîæíîñòè àíàëèçà èõ çíà÷åíèé è âûïîëíåíèÿ íàä íèìè ðàçëè÷íûõ îïåðàöèé, â ñöåíàðèè shell èñïîëüçóþòñÿ ïîçèöèîííûå àðãóìåíòû, èìåþùèå ôèêñèðîâàííûå èìåíà. Ïîçèöèîííûå àðãóìåíòû: $# êîëè÷åñòâî àðãóìåíòîâ êîìàíäíîé ñòðîêè; $* âñå àðãóìåíòû êîìàíäíîé ñòðîêè; $@ âñå àðãóìåíòû, îòäåëåííûå äðóã îò äðóãà êàâû÷êàìè; $0 èìÿ ôàéëà ñöåíàðèÿ, ïåðâîå ñëîâî êîìàíäíîé ñòðîêè; $1 - $9 ñîîòâåòñòâóþùèé ïî ñ÷åòó àðãóìåíò. Íàïðèìåð, ïðè âûçîâå ñöåíàðèÿ $ testscript arg1 arg2 arg3
çíà÷åíèå ïåðåìåííîé $# áóäåò ðàâíî 3, $* arg1 arg2 arg3 , $@ arg1 arg2 arg3 , $0 testscript, $1 arg1, $2 arg2, $3 arg3, âñå îñòàëüíûå ïåðåìåííûå áóäóò ïóñòûìè ñòðîêàìè.
25
Ââîä è âûâîä äàííûõ â ñöåíàðèÿõ Âûâîä äàííûõ â ñöåíàðèÿõ shell îñóùåñòâëÿåòñÿ êîìàíäîé echo, ââîä êîìàíäîé read.  êà÷åñòâå àðãóìåíòà êîìàíäå read ïåðåäàåòñÿ èìÿ ïåðåìåííîé, çíà÷åíèåì êîòîðîé ñòàíåò ñòðîêà, ïåðåäàííàÿ ñî ñòàíäàðòíîãî ââîäà. Ñèãíàëîì îá îêîí÷àíèè ââîäà ñëóæèò íàæàòèå íà êëàâèøó [Enter]. Ôîðìàò êîìàíäû echo: $ echo string
Êëþ÷è êîìàíäû echo. -n íå ïðîèçâîäèòü ïåðåâîä êóðñîðà íà ñëåäóþùóþ ñòðîêó. -e ïîçâîëÿåò îñîáûì îáðàçîì èíòåðïðåòèðîâàòü íåêîòîðûå ñïåöèàëüíûå ñèìâîëû, ñîäåðæàùèåñÿ â ñòðîêå string. Òàêèìè ñèìâîëàìè ÿâëÿþòñÿ: \a çâóêîâîé ñèãíàë; \n âñòàâêà íîâîé ñòðîêè; \t ñèìâîë òàáóëÿöèè; \c çàïðåò ïåðåõîäà íà ñëåäóþùóþ ñòðîêó. Ïðîâåðêà óñëîâèé â shell Ïðîâåðêà ðàçëè÷íûõ óñëîâèé â shell îñóùåñòâëÿåòñÿ êîìàíäîé test. Ýòà êîìàíäà èñïîëüçóåòñÿ äëÿ ñðàâíåíèÿ çíà÷åíèé âûðàæåíèé è îïðåäåëåíèÿ òèïà ôàéëà. Ýòà êîìàíäà âûäàåò êîä çàâåðøåíèÿ. Çíà÷åíèå êîäà çàâåðøåíèÿ, ðàâíîå 0 èíòåðïðåòèðóåòñÿ êàê TRUE, ëþáîå äðóãîå êàê FALSE. 1) Ñðàâíåíèå öåëûõ îñóùåñòâëÿåòñÿ â ñîîòâåòñòâèè ñ ôîðìàòîì $ test arg1 op arg2
26
 êà÷åñòâå àðãóìåíòîâ arg1 è arg2 ìîãóò âûñòóïàòü ïîëîæèòåëüíûå èëè îòðèöàòåëüíûå öåëûå ÷èñëà, à òàêæå ñïåöèàëüíûå âûðàæåíèÿ âèäà l string, çíà÷åíèåì êîòîðûõ áóäåò äëèíà ñòðîêè string.  êà÷åñòâå op ìîæåò ïðèñóòñòâîâàòü îäíà èç ñëåäóþùèõ îïåðàöèé: -gt áîëüøå; -lt ìåíüøå; -ge áîëüøå èëè ðàâíî; -le ìåíüøå èëè ðàâíî; -eq ðàâíî; -ne íå ðàâíî. Íàïðèìåð: $ $ $ 0 $ 1
var1=5; var2=3 test $var1 -gt $var2 echo $?
test $var1 -lt $var2 echo $?
2) Ñðàâíåíèå ñòðîê îñóùåñòâëÿåòñÿ â ñîîòâåòñòâèè ñ ôîðìàòîì $ test expession
ãäå âûðàæåíèå expession èìååò îäíó èç ñëåäóþùèõ ôîðì: -z str èñòèííî, åñëè ñòðîêà str èìååò íóëåâóþ äëèíó; -n str èñòèííî, åñëè ñòðîêà str èìååò íåíóëåâóþ äëèíó; str1=str2 èñòèííî, åñëè ñòðîêè str1 è str2 ðàâíû; str1!=str2 èñòèííî, åñëè ñòðîêè str1 è str2 íå ðàâíû.
27
 êà÷åñòâå àðãóìåíòà str2 ìîæåò áûòü óêàçàíî ðåãóëÿðíîå âûðàæåíèå.  ýòîì ñëó÷àå áóäåò îñóùåñòâëÿòüñÿ ïðîâåðêà str1 íà ñîîòâåòñòâèå îáðàçöó str2. Ïðèìåðû: $ $ 0 $ 1 $ 0
var1=; var2=abc test -z $var1; echo $? test -z $var2; echo $?
test $var2=a.c; echo $?
 ïåðâîì ñðàâíåíèè ñòðîêà var1 èìååò íóëåâóþ äëèíó, âî âòîðîì ñòðîêà var2 èìååò íåíóëåâóþ äëèíó, â òðåòüåì ñòðîêà var2 ñîîòâåòñòâóåò îáðàçöó a.c. 3) Ïðîâåðêè äëÿ ôàéëîâ îñóùåñòâëÿþòñÿ â ñîîòâåòñòâèè ñ ôîðìàòîì $ test option file
 ýòîì ñëó÷àå äëÿ ôàéëà file ïðîâåðÿåòñÿ óñëîâèå, îïðåäåëÿåìîå îïöèåé option. Ýòà îïöèÿ çàäàåòñÿ ñëåäóþùèìè ñèìâîëàìè: -e ôàéë ñóùåñòâóåò; -f ôàéë ÿâëÿåòñÿ îáû÷íûì; -d << êàòàëîãîì; -c << áàéò-îðèåíòèðîâàííûì óñòðîéñòâîì; -b << áëîê-îðèåíòèðîâàííûì óñòðîéñòâîì; -h << ñèìâîëè÷åñêîé ññûëêîé; -r âîçìîæíî ÷òåíèå ôàéëà; -w âîçìîæíà çàïèñü â ôàéë;
28
-x ôàéë ÿâëÿåòñÿ âûïîëíèìûì; -z ôàéë èìååò íóëåâóþ äëèíó; -s ôàéë íå ïóñòîé.
Èç ýëåìåíòàðíûõ óñëîâèé ìîãóò áûòü ïîñòðîåíû ñîñòàâíûå óñëîâèÿ ñ ïîìîùüþ ëîãè÷åñêèõ îïåðàöèé: -a êîíúþíêöèÿ; -o äèçúþíêöèÿ; ! îòðèöàíèå. Âìåñòî êîíñòðóêöèè test arg ìîæåò áûòü èñïîëüçîâàíà êîíñòðóêöèÿ [ arg ]. Ïðè ýòîì êâàäðàòíûå ñêîáêè äîëæíû áûòü âûäåëåíû ðàçäåëèòåëÿìè. Ïðèìåð: $ var=4 $ [ $var -gt 2 -a $var -lt 6 ] $ echo $? 0
 ïðèâåäåííîì ïðèìåðå ïðîâåðÿåòñÿ óñëîâèå 2 < $var < 6. Óñëîâíûå îïåðàòîðû â shell  shell èìååòñÿ ðÿä ñòðóêòóð, ïîçâîëÿþùèõ âûáèðàòü äëÿ âûïîëíåíèÿ îïðåäåëåííûå êîìàíäû â çàâèñèìîñòè îò âûïîëíåíèÿ íåêîòîðûõ óñëîâèé. Êîìàíäà if-then-else èìååò ñëåäóþùóþ ñòðóêòóðó if command then commands1 else commands2 fi
29
Ýòà êîíñòðóêöèÿ ïîçâîëÿåò îïðåäåëÿòü õîä âûïîëíåíèÿ ñöåíàðèÿ â çàâèñèìîñòè îò ðåçóëüòàòîâ ðàáîòû êîìàíäû command. Åñëè ýòà êîìàíäà ñãåíåðèðîâàëà êîä âîçâðàòà, ðàâíûé íóëþ, ÷òî èíòåðïðåòèðóåòñÿ, êàê TRUE, òî äàëåå áóäåò âûïîëíÿòüñÿ ãðóïïà êîìàíä commands1, â ïðîòèâíîì ñëó÷àå commands2. Îáû÷íî â êà÷åñòâå command âûïîëíÿåòñÿ êîìàíäà test. Âåòâü else â ýòîì îïåðàòîðå ìîæåò áûòü îïóùåíà. Ïðèìåð: #!/bin/bash if [ ! -x ./$1 ] then chmod u+x $1 fi ./$1
 ýòîì ñöåíàðèè ïåðåä çàïóñêîì ôàéëà, èìÿ êîòîðîãî ïåðåäàåòñÿ â êà÷åñòâå ïàðàìåòðà, ïðîâåðÿåòñÿ, ÿâëÿåòñÿ ëè îí èñïîëíÿåìûìè. Åñëè íåò, òî äëÿ âëàäåëüöà óñòàíàâëèâàåòñÿ ïðàâî íà èñïîëíåíèå. Óïðàâëÿþùàÿ ñòðóêòóðà elif ïîçâîëÿåò îñóùåñòâèòü âëîæåíèå îïåðàòîðîâ if-thenelse. Ñëóæåáíîå ñëîâî elif ÿâëÿåòñÿ ñîêðàùåíèåì else if. Äëÿ ïðîâåðêè ñîñòàâíûõ óñëîâèé, â îïåðàòîðå if ìîãóò èñïîëüçîâàòüñÿ ëîãè÷åñêèå îïåðàöèè êîíúþíêöèÿ è äèçúþíêöèÿ, îáîçíà÷àåìûå && è ||. Âûáîð îäíîãî èç íåñêîëüêèõ âîçìîæíûõ âàðèàíòîâ îáåñïå÷èâàåò îïåðàòîð case. Åãî ñòðóêòóðà:
30
case str in pattern1) commands1 ;; pattern2) commands2 ;; ... patternN) commandsN ;; *) default_commands ;; esac
Âûáîð îñóùåñòâëÿåòñÿ ïóòåì ñðàâíåíèÿ ñòðîêè str ñ îáðàçöàìè pattern1 , ..., patternN. Åñëè îáíàðóæèâàåòñÿ ñîâïàäåíèå, òî âûïîëíÿåòñÿ ñîîòâåòñòâóþùàÿ ãðóïïà êîìàíä. Åñëè ñîâïàäåíèé íè ñ îäíèì èç îáðàçöîâ íåò, òî âûïîëíÿåòñÿ ãðóïïà êîìàíä default_commands.
31
Ïðèìåð:
#!/bin/bash echo s. Îòîáðàçèòü ðàçìåð ôàéëà. echo i. Îòîáðàçèòü èíäåêñíûå äåñêðèïòîðû. echo l. Îòîáðàçèòü ïîëíóþ èíôîðìàöèþ î ôàéëàõ. echo c. Âûâåñòè ñïèñîê âñåõ Ñ-ôàéëîâ. echo -n Ñäåëàéòå âûáîð: read choice case $choice in s) ls -s ;; i) ls -i ;; l) ls -l ;; c) ls *.c ;; *) echo Íåâåðíàÿ îïöèÿ esac
32
Îðãàíèçàöèÿ öèêëîâ â shell Öèêëû while è until. Îïåðàòîð while èìååò ñëåäóþùóþ ñòðóêòóðó: while command do commands done
Íà êàæäîì øàãå öèêëà âûïîëíÿåòñÿ êîìàíäà command. Äî òåõ ïîð, ïîêà åå êîä âîçâðàòà ðàâåí 0, áóäåò âûïîëíÿòüñÿ ãðóïïà êîìàíä commands, íàçûâàåìàÿ òåëîì öèêëà.  ïðîòèâíîì ñëó÷àå, óïðàâëåíèå áóäåò ïåðåäàíî êîìàíäå, ðàñïîëàãàþùåéñÿ çà öèêëîì. Îïåðàòîð until èìååò àíàëîãè÷íóþ ñòðóêòóðó.  îòëè÷èå îò îïåðàòîðà while, íóëåâîå çíà÷åíèå êîäà âîçâðàòà, ñãåíåðèðîâàííîå êîìàíäîé command ÿâëÿåòñÿ óñëîâèåì âûõîäà èç öèêëà. Ïðèìåð: #!/bin/bash i=1 while [ $i -le 10 ] do echo $i let i=i+1 done
Íà ýêðàí áóäóò âûâåäåíû ÷èñëà îò 1 äî 10.
33
Öèêëû for è for-in. Ñòðóêòóðà öèêëà for-in: for var in list do commands done Ïåðåìåííîé var ïîî÷åðåäíî ïðèñâàèâàþòñÿ çíà÷åíèÿ èç ñïèñêà list è íà êàæäîì øàãå öèêëà âûïîëíÿþòñÿ êîìàíäû commands. Ñïèñîê ïðåäñòàâëÿåò ñîáîé íàáîð ñòðîê,
âîçìîæíî ñîäåðæàùèõ øàáëîííûå ñèìâîëû, ðàçäåëåííûõ ïðîáåëàìè.
Öèêë for, â îòëè÷èå îò for-in, íå ñîäåðæèò ñïèñêà çíà÷åíèé. Ïåðåìåííîé var ïîñëåäîâàòåëüíî ïðèñâàèâàþòñÿ àðãóìåíòû, óêàçûâàåìûå ïðè âûçîâå ñöåíàðèÿ. Ïðèìåð: #!/bin/bash for backfile in *.c do cp $backfile sourceback/${backfile}.bak echo $backfile backup done
Äëÿ âñåõ ôàéëîâ èç òåêóùåãî êàòàëîãà ñ ðàñøèðåíèåì c îñóùåñòâëÿåòñÿ ðåçåðâíîå êîïèðîâàíèå â êàòàëîã sourceback. Ôàéëû ïîëó÷àþò ðàñøèðåíèå bak. Íà ýêðàí âûäàåòñÿ ñîîáùåíèå, ñîäåðæàùåå èìÿ ôàéëà.
34
Àðèôìåòè÷åñêèå îïåðàöèè shell Õîòÿ âñå ïåðåìåííûå êîìàíäíîãî ïðîöåññîðà ïðåäñòàâëÿþò ñîáîé ñèìâîëüíûå ñòðîêè, shell ïîçâîëÿåò âûïîëíÿòü íàä íèìè íåêîòîðûå àðèôìåòè÷åñêèå îïåðàöèè. Ýòî îñóùåñòâëÿåòñÿ ñ ïîìîùüþ êîìàíäû expr, èìåþùèé ñëåäóþùèé ôîðìàò: $ expr expression
Âûðàæåíèå expression ïðåäñòàâëÿåò ñîáîé íàáîð ïåðåìåííûõ èëè êîíñòàíò, ñîåäèíåííûõ çíàêàìè îïåðàöèé. Êîìàíäà âû÷èñëÿåò çíà÷åíèå ýòîãî âûðàæåíèå è íàïðàâëÿåò ðåçóëüòàò íà ñòàíäàðòíûé âûâîä.  êà÷åñòâå îïåðàöèé ìîãóò èñïîëüçîâàòüñÿ ñëåäóþùèå: * óìíîæåíèå; >= áîëüøå èëè ðàâíî; / äåëåíèå; <= ìåíüøå èëè ðàâíî; + ñëîæåíèå; = = ðàâíî; - âû÷èòàíèå; != íå ðàâíî; % îñòàòîê îò äåëåíèÿ; & êîíúþíêöèÿ; > áîëüøå; | äèçúþíêöèÿ; < ìåíüøå; ! îòðèöàíèå Èìåíà ïåðåìåííûõ è êîíñòàíòû äîëæíû îòäåëÿòüñÿ îò çíàêîâ îïåðàöèé ïðîáåëàìè. Îïåðàöèÿ óìíîæåíèÿ äîëæíà ýêðàíèðîâàòüñÿ ñèìâîëîì \. Åñëè ìåæäó îïåðàíäàìè âêëþ÷àþòñÿ ïðîáåëû, âûðàæåíèå ñëåäóåò çàêëþ÷èòü â äâîéíûå êàâû÷êè.
35
ÏÐÎÖÅÑÑÛ Â UNIX Ïîíÿòèå ïðîöåññà Ïðîãðàììà ýòî íàáîð èíñòðóêöèé ïðîöåññîðà, íàõîäÿùèéñÿ íà âíåøíåì çàïîìèíàþùåì óñòðîéñòâå â âèäå ôàéëà. Ïåðåä âûïîëíåíèåì ïðîãðàììû ÎÑ ïðîèçâîäèò âûäåëåíèå ïàìÿòè, íåîáõîäèìîé äëÿ ðàçìåùåíèÿ ýòèõ èíñòðóêöèé. Êðîìå òîãî, ïðîèñõîäèò âûäåëåíèå ïàìÿòè, íåîáõîäèìîé äëÿ õðàíåíèÿ äàííûõ, êîòîðûìè îïåðèðóåò âûïîëíÿþùàÿñÿ ïðîãðàììà. Ïðîãðàììà, îáû÷íî, íå ÿâëÿåòñÿ àáñîëþòíûì îáðàçîì ìàøèííûõ êîìàíä, ïðåäíàçíà÷åííûõ äëÿ âûïîëíåíèÿ, ïîýòîìó ÎÑ ïåðåä çàïóñêîì ïðîèçâîäèò åå ïðåäâàðèòåëüíóþ íàñòðîéêó. Ìíîãîçàäà÷íûå ÎÑ äëÿ óïðàâëåíèÿ âûïîëíÿþùèìèñÿ ïðîãðàììàìè ñîçäàþò ñïåöèàëüíûå ñòðóêòóðû, â êîòîðûõ õðàíèòñÿ èíôîðìàöèÿ îá ýòèõ ïðîãðàììàõ. Òàêèì îáðàçîì, ïðîãðàììà, íàõîäÿùàÿñÿ â ñòàäèè âûïîëíåíèÿ, ïðåäñòàâëÿåò ñîáîé ëîãè÷åñêè âûäåëåííûé îáúåêò, íàçûâàåìûé ïðîöåññîì. Ïðîöåññ ñîñòîèò èç àäðåñíîãî ïðîñòðàíñòâà è íàáîðà ñòðóêòóð äàííûõ, ñîäåðæàùèõñÿ âíóòðè ÿäðà ÎÑ. Àäðåñíîå ïðîñòðàíñòâî ïðåäñòàâëÿåò ñîáîé ñîâîêóïíîñòü ñòðàíèö ïàìÿòè, êîòîðîå ÿäðî âûäåëèëî äëÿ âûïîëíåíèÿ ïðîöåññà. Àäðåñíîå ïðîñòðàíñòâî ñîäåðæèò ñåãìåíò äëÿ êîäà ïðîãðàììû è ñåãìåíò, â êîòîðîì ðàçìåùàþòñÿ äàííûå, èñïîëüçóåìûå ïðîãðàììîé. Áîëåå òî÷íî, äëÿ õðàíåíèÿ äàííûõ ðàçíûõ òèïîâ âûäåëÿþòñÿ äâå îáëàñòè ïàìÿòè ñåãìåíò äàííûõ è ñåãìåíò ñòåêà. Äëÿ óïðàâëåíèÿ ïðîöåññàìè â ñîñòàâ ÎÑ âêëþ÷àåòñÿ ñïåöèàëüíûé êîìïîíåíò äèñïåò÷åð ïðîöåññîâ.  ñòðóêòóðàõ äàííûõ ÿäðà UNIX õðàíèòñÿ èíôîðìàöèÿ î êàæäîì ïðîöåññå. Ê íàèáîëåå âàæíûì ñâåäåíèÿì îòíîñÿòñÿ:
36
• èäåíòèôèêàòîð ïðîöåññà (PID); • èäåíòèôèêàòîð ðîäèòåëüñêîãî ïðîöåññà (PPID); • èäåíòèôèêàòîð ïîëüçîâàòåëÿ, çàïóñòèâøåãî ïðîöåññ; • òåêóùåå ñîñòîÿíèå ïðîöåññà; • ïðèîðèòåò ïðîöåññà; • ñîäåðæèìîå ðåãèñòðîâ íà ìîìåíò ïðèîñòàíîâêè ïðîöåññà; • èíôîðìàöèÿ î ðåñóðñàõ, èñïîëüçóåìûõ ïðîöåññîì; • ñòàòèñòè÷åñêèå ñâåäåíèÿ î âûïîëíåíèè ïðîöåññà. Ýòè ñèñòåìíûå äàííûå ñîñðåäîòî÷åíû â äâóõ îáëàñòÿõ òàáëèöå ïðîöåññîâ è òàáëèöå ïîëüçîâàòåëÿ. Êàæäîìó íîâîìó ïðîöåññó ïðèñâàèâàåòñÿ óíèêàëüíûé èäåíòèôèêàöèîííûé íîìåð (Process Identi.ier PID). Èäåíòèôèêàöèîííûå íîìåðà ïðèñâàèâàþòñÿ ïðîöåññàì â ïîðÿäêå âîçðàñòàíèÿ, íà÷èíàÿ ñ íóëÿ.  UNIX ëþáîé ïðîöåññ ïîðîæäàåòñÿ êàêèì-ëèáî äðóãèì ïðîöåññîì, áëàãîäàðÿ ÷åìó îíè îáðàçóþò èåðàðõè÷åñêóþ ñòðóêòóðó äåðåâî. Ïðîöåññ P1 ñîçäàåò íîâûé ïðîöåññ P2 ïîñðåäñòâîì ñèñòåìíîãî âûçîâà fork. Çàïóñê ïðîöåññà P2 îñóùåñòâëÿåòñÿ ñèñòåìíûì âûçîâîì exec. Ïðîöåññ P1 íàçûâàåòñÿ ðîäèòåëüñêèì, P2 äî÷åðíèì.  âåðøèíå äåðåâà ïðîöåññîâ UNIX íàõîäèòñÿ ïðîöåññ init. Ýòîò ïðîöåññ ïîðîæäàåòñÿ îñîáûì îáðàçîì è äàëåå ïîñòîÿííî ïðèñóòñòâóåò â ñèñòåìå. Ïðîöåññ init ÿâëÿåòñÿ, òàêèì îáðàçîì, ïðàðîäèòåëåì âñåõ äðóãèõ ïðîöåññîâ. Ïðîöåññ init âñåãäà èìååò PID, ðàâíûé 1. Äëÿ òîãî, ÷òîáû ïîñëå çàâåðøåíèÿ ðàáîòû ïðîöåññà îáåñïå÷èòü âîçâðàò óïðàâëåíèÿ ïîðîäèâøåìó åãî ïðîöåññó, êàæäûé ïðîöåññ ñîäåðæèò èäåíòèôèêàöèîííûé íîìåð ðîäèòåëüñêîãî ïðîöåññà (Parent Process Identi.ier PPID).
37
Ïðîöåññû, êàê ïðàâèëî, îñóùåñòâëÿþò îáðàùåíèå ê ôàéëàì. Ñ öåëüþ îáåñïå÷åíèÿ ìåõàíèçìà çàùèòû ôàéëîâ, âñÿêèé ðàç îñóùåñòâëÿåòñÿ ïðîâåðêà ïðàâ ïðîöåññà íà äîñòóï ê ýòèì ôàéëàì. Åñòåñòâåííîé ÿâëÿåòñÿ ñèòóàöèÿ, êîãäà ïðàâà ïðîöåññà íà äîñòóï ê ôàéëó îïðåäåëÿåòñÿ ïðàâàìè ïîëüçîâàòåëÿ, çàïóñòèâøåãî ýòîò ïðîöåññ. Ïîýòîìó ñèñòåìíûå äàííûå ïðîöåññà ñîäåðæàò UID òàêîãî ïîëüçîâàòåëÿ. Ìíîãîçàäà÷íûå ÎÑ ðåàëèçóþò ìåõàíèçì ìíîãîçàäà÷íîñòè ïóòåì ïîñëåäîâàòåëüíîãî ïðåäîñòàâëåíèÿ ðåñóðñîâ ïðîöåññîðà ðàçëè÷íûì ïðîöåññàì. Êîððåêòíîå âîçîáíîâëåíèå âûïîëíåíèÿ ïðîöåññà âîçìîæíî, â ýòîì ñëó÷àå, òîëüêî ïðè ñîõðàíåíèè ñîäåðæèìîãî ðåãèñòðîâ ïðîöåññîðà â ìîìåíò îñòàíîâêè ïðîöåññà. Èíòåðàêòèâíûå è ôîíîâûå ïðîöåññû Ñ òî÷êè çðåíèÿ âîçìîæíîñòè äîñòóïà ê òåðìèíàëó ïðîöåññû äåëÿòñÿ íà èíòåðàêòèâíûå (ñèíõðîííûå) è ôîíîâûå (àñèíõðîííûå). Èíòåðàêòèâíûå ïðîöåññû èìåþò òàêîé äîñòóï. Áîëüøóþ ÷àñòü âðåìåíè îíè ïðîâîäÿò â îæèäàíèè ïîëüçîâàòåëüñêîãî ââîäà. Òàêèå ïðèëîæåíèÿ äîëæíû îáåñïå÷èâàòü áûñòðóþ ðåàêöèþ íà äåéñòâèÿ ïîëüçîâàòåëÿ. Ôîíîâûå ïðèëîæåíèÿ íå èìåþò äîñòóïà ê òåðìèíàëó.  ñëó÷àå ïîïûòêè èõ îáðàùåíèÿ ê òåðìèíàëó ÎÑ ïðèîñòàíàâëèâàåò èõ ðàáîòó. Êîìàíäà, çàïóùåííàÿ ïîëüçîâàòåëåì â ôîíîâîì ðåæèìå, êëàññèôèöèðóåòñÿ êàê çàäàíèå. Êàæäîå çàäàíèå ïîëó÷àåò îïðåäåëåííûé íîìåð. Äëÿ âûïîëíåíèÿ êîìàíäû â ôîíîâîì ðåæèìå íåîáõîäèìî â åå êîíöå ïîñòàâèòü çíàê &. Ïðè ýòîì ñèñòåìà ñîîáùàåò íîìåð çàäàíèå è PID çàïóùåííîãî ïðîöåññà. Ñïèñîê âñåõ ôîíîâûõ çàäàíèé ïîëüçî-
38
âàòåëÿ ìîæíî ïîëó÷èòü, âûïîëíèâ êîìàíäó jobs. Ïîñëå âûïîëíåíèÿ êàæäîé êîìàíäû UNIX ñîîáùàåò îáî âñåõ çàâåðøåííûõ ôîíîâûõ çàäàíèÿõ. Âûïîëíåíèå êîìàíäû $ notify %n
äàåò óêàçàíèå ÎÑ îñóùåñòâèòü íåìåäëåííîå óâåäîìëåíèå ïîëüçîâàòåëÿ î çàâåðøåíèè ôîíîâîãî çàäàíèÿ ñ íîìåðîì n. Ïåðåâîä ïðîöåññà èç ôîíîâîãî ðåæèìà â èíòåðàêòèâíûé îñóùåñòâëÿåòñÿ êîìàíäîé fg, èìåþùåé ñëåäóþùèé ôîðìàò: $ fg %n
ãäå n íîìåð çàäàíèÿ. Íàáîð êîìáèíàöèè êëàâèø [Ctrl-Z] ïîçâîëÿåò ïðèîñòàíîâèòü âûïîëíåíèå èíòåðàêòèâíîãî ïðîöåññà. Åãî ïðîäîëæåíèå â èíòåðàêòèâíîì ðåæèìå îñóùåñòâëÿåòñÿ êîìàíäîé fg áåç ïàðàìåòðîâ, â ôîíîâîì êîìàíäîé bg. Âàæíûì ïðèìåðîì ôîíîâûõ ïðîöåññîâ ÿâëÿþòñÿ ïðîöåñû-äåìîíû. Äåìîíîì íàçûâàåòñÿ ôîíîâûé ïðîöåññ, âûïîëíÿþùèé ñèñòåìíóþ çàäà÷ó. Íàïðèìåð, ftpd äåìîí, îáðàáàòûâàþùèé çàïðîñû íà ïåðåñûëêó ôàéëîâ ìåæäó ðàçëè÷íûìè ìàøèíàìè, named äåìîí, ïðåîáðàçóþùèé èìåíà ìàøèí â ñåòåâûå àäðåñà, telnetd äåìîí, ïîçâîëÿþùèé ðàáîòàòü çà óäàëåííûìè òåðìèíàëàìè. Äåìîíû ÿâëÿþòñÿ ïðîãðàììàìè, à íå ÷àñòÿìè ÿäðà ñèñòåìû. Îáû÷íî îíè àâòîìàòè÷åñêè çàïóñêàþòñÿ âî âðåìÿ íà÷àëüíîé çàãðóçêè è ïðîäîëæàþò ðàáîòàòü âñå âðåìÿ, ïîêà ñèñòåìà âêëþ÷åíà.
39
Æèçíåííûé öèêë è ñîñòîÿíèÿ ïðîöåññà Äëÿ ñîçäàíèÿ íîâîãî ïðîöåññà ñóùåñòâóþùèé ïðîöåññ êîïèðóåò ñàìîãî ñåáÿ ïîñðåäñòâîì âûçîâà ñèñòåìíîé ôóíêöèè fork. Âûçîâ fork ñîçäàåò êîïèþ èñõîäíîãî ïðîöåññà, èäåíòè÷íóþ ðîäèòåëþ, íî èìåþùóþ ðÿä îòëè÷èé, íàïðèìåð, ó íîâîãî ïðîöåññà ñâîé PID, PPID íîâîãî ïðîöåññà ðàâåí PID ðîäèòåëÿ. Ïîñëå âûïîëíåíèÿ fork íîâàÿ ïðîãðàììà çàïóñêàåòñÿ ñ ïîìîùüþ îäíîãî èç ñèñòåìíûõ âûçîâîâ ñåìåéñòâà exec. Òàêîé âûçîâ èçìåíÿåò ïðîãðàììíûé êîä ïðîöåññà-ðîäèòåëÿ íà ïðîãðàììíûé êîä äî÷åðíåãî ïðîöåññà, óñòàíàâëèâàåò ñåãìåíòû äàííûõ è ñòåêà è ïåðåäàåò óïðàâëåíèå êîäó ïðîãðàììû äî÷åðíåãî ïðîöåññà.  ïðîöåññå âûïîëíåíèÿ ïðîöåññ ìîæåò íàõîäèòüñÿ â îäíîì èç ñëåäóþùèõ ñîñòîÿíèé, ïåðåõîäÿ èç îäíîãî ñîñòîÿíèÿ â äðóãîå: • âûïîëíåíèå â ðåæèìå çàäà÷è; • âûïîëíåíèå â ðåæèìå ÿäðà; • îæèäàíèå (ãîòîâíîñòü ê çàïóñêó, runnable); • îñòàíîâëåííûé (ñîñòîÿíèå ñíà, asleep); • çîìáè. Âîçìîæíûå ïåðåõîäû ìåæäó ñîñòîÿíèÿìè îòðàæåíû íà ñõåìå. Êîãäà ïðîöåññ íàõîäèòñÿ â ðåæèìå çàäà÷è, ïðîöåññîð âûïîëíÿåò èíñòðóêöèè äàííîãî ïðîöåññà.  ýòîì ñîñòîÿíèè ïðîöåññ íå èìååò äîñòóïà ê ðåñóðñàì ñèñòåìû. Äîñòóï ê ðåñóðñàì ìîæåò áûòü îñóùåñòâëåí òîëüêî ïóòåì âûçîâà ñïåöèàëüíûõ ôóíêöèé, êîäû êîòîðûõ ÿâëÿþòñÿ ÷àñòüþ ÿäðà ñèñòåìû. Ýòè ôóíêöèè íàçûâàþòñÿ ñèñòåìíûìè âû-
40
fo rk(
Âûïîëíåíèå â ðåæèìå çàäà÷è
)
ñèñòåìíûé âûçîâ
Ñîçäàí
ex ec () Îæèäàíèå
Âûïîëíå- exit() íèå â ðåæèìå sle ÿäðà ep () wakeup()
Ñîí
Çîìáè
wait()
çîâàìè. Ñèñòåìíûå âûçîâû îáðàçóþò èíòåðôåéñ ïðèêëàäíûõ ïðîãðàìì UNIX. Îíè îïðåäåëÿþò îãðàíè÷åííûé íàáîð òî÷åê âõîäà â ÿäðî ñèñòåìû, îáðàùåíèå ê êîòîðûì ïîçâîëÿåò ïðîöåññó âûïîëíÿòü ïðèâèëåãèðîâàííûå èíñòðóêöèè ÿäðà.  ýòîì ñëó÷àå ïðîöåññ âûïîëíÿåòñÿ â ðåæèìå ÿäðà.  ýòîì ñîñòîÿíèè ïðîöåññîð âûïîëíÿåò èíñòðóêöèè ÿäðà, âûçîâ êîòîðûõ îñóùåñòâèë äàííûé ïðîöåññ.
Åñëè ïðîöåññ ïðè âûïîëíåíèè â ðåæèìå ÿäðà ïîïûòàëñÿ îñóùåñòâèòü äîñòóï ê çàíÿòîìó ðåñóðñó, òî îí ïåðåâîäèòñÿ ÎÑ â ñîñòîÿíèå ñíà.  ýòîì ñîñòîÿíèè îí íàõîäèòñÿ äî îñâîáîæäåíèÿ òðåáóåìîãî ðåñóðñà. Ïîñëå ýòîãî ïðîöåññ ïåðåõîäèò â ñîñòîÿíèå ãîòîâíîñòè ê âûïîëíåíèþ, â êîòîðîì îí íàõîäèòñÿ äî ïðåäîñòàâëåíèÿ åìó ðåñóðñîâ ïðîöåññîðà. Âûïîëíåíèå ïðîöåññà çàâåðøàåòñÿ, êîãäà îí îñóùåñòâëÿåò ñèñòåìíûé âûçîâ exit. Ïðè ýòîì, ãåíåðèðóåòñÿ öåëîå ÷èñëî - êîä çàâåðøåíèÿ ïðîöåññà. Îáû÷íî íóëåâîå çíà-
41
÷åíèå êîäà ñâèäåòåëüñòâóåò î íîðìàëüíîì çàâåðøåíèè ïðîöåññà. Ôóíêöèÿ exit îñâîáîæäàåò àäðåñíîå ïðîñòðàíñòâî ïðîöåññà, çàêðûâàåò âñå ôàéëû, îòêðûòûå ïðîöåññîì, íî íå î÷èùàåò çàïèñü î ïðîöåññå â òàáëèöå ïðîöåññîâ. Òàêîå ñîñòîÿíèå ïðîöåññà íàçûâàåòñÿ çîìáè. Ðîäèòåëüñêèé ïðîöåññ ñ ïîìîùüþ ñèñòåìíîãî âûçîâà wait ìîæåò ïîëó÷èòü êîä âîçâðàòà è ñòàòèñòèêó âûïîëíåíèÿ çàâåðøåííîãî ïðîöåññà. Òîëüêî ïîñëå ýòîãî â òàáëèöå ïðîöåññîâ î÷èùàåòñÿ çàïèñü î äàííîì ïðîöåññå. Åñëè ðîäèòåëüñêèé ïðîöåññ óìèðàåò ïåðâûì, òî äëÿ åãî ðàáîòàþùèõ äî÷åðíèõ ïðîöåññîâ â êà÷åñòâå ðîäèòåëüñêîãî UNIX íàçíà÷àåò ïðîöåññ init, êîòîðûé è îñóùåñòâëÿåò âûçîâ wait.  ñëó÷àå åñëè ðîäèòåëüñêèé ïðîöåññ çàêàí÷èâàåò ñâîå âûïîëíåíèå ïîñëå ïîòîìêà, íî íå ïðîèçâîäèò âûçîâà wait, ïîòîìîê áóäåò íàõîäèòüñÿ â ñîñòîÿíèè çîìáè äî çàâåðøåíèÿ ðàáîòû ñèñòåìû, çàíèìàÿ ðåñóðñ â âèäå çàïèñè â òàáëèöå ïðîöåññîâ. Ïðèìåð.
#include #include <sys/wait.h> main() { int status; if(fork() == 0) execl(/usr/bin/test, test, (char *) 0); wait(&status); }
 êà÷åñòâå äî÷åðíåãî ïîðîæäàåòñÿ ïðîöåññ, ïðîãðàììíûé êîä êîòîðîãî ñîäåðæèòñÿ â ôàéëå /usr/bin/test.
42
Ìåæïðîöåññíûå êîììóíèêàöèè: ñèãíàëû Ñèãíàë ýòî äàííîå, ïåðåäàâàåìîå ïðîöåññó. Ïðîöåññ ìîæåò íàçíà÷èòü îïðåäåëåííîìó ñèãíàëó ïðîãðàììó îáðàáîòêè, â ýòîì ñëó÷àå, ïðè ïîëó÷åíèè äàííîãî ñèãíàëà áóäåò âûçâàíà íàçíà÷åííàÿ åìó ôóíêöèÿ.  ïðîòèâíîì ñëó÷àå, ÿäðî âûïîëíèò îò èìåíè ïðîöåññà äåéñòâèå, íàçíà÷åííîå ïî óìîë÷àíèþ. Ñèãíàëû äåëÿòñÿ íà ñèíõðîííûå êîãäà èñòî÷íèêîì ñèãíàëà ÿâëÿåòñÿ ñàì ïðîöåññ; è àñèíõðîííûå, èõ èñòî÷íèêîì ÿâëÿåòñÿ ïîëüçîâàòåëü, íàõîäÿùèéñÿ çà òåðìèíàëîì, èëè ÿäðî ÎÑ. Ïîëüçîâàòåëü ìîæåò ïîñëàòü ïðîöåññó ñèãíàë ñ ïîìîùüþ êîìàíäû kill. Åå ôîðìàò: $ kill [-signal] pid
Ñèãíàë signal ïîñûëàåòñÿ ïðîöåññó ñ èäåíòèôèêàòîðîì pid.  êà÷åñòâå àðãóìåíòà signal ìîæåò ôèãóðèðîâàòü ÷èñëî, èäåíòèôèöèðóþùåå ñèãíàë èëè åãî ñèìâîëè÷åñêîå îáîçíà÷åíèå. Ïðèâåäåì èäåíòèôèêàòîðû íàèáîëåå ðàñïðîñòðàíåííûõ ñèãíàëîâ è çàäàííûå äëÿ íèõ ðåàêöèè ïî óìîë÷àíèþ. STOP ïðèîñòàíàâëèâàåò âûïîëíåíèå ïðîöåññà. CONT ïðîäîëæåíèå âûïîëíåíèÿ îñòàíîâëåííîãî ïðîöåññà. TERM ïðîãðàììíîå çàâåðøåíèå ïðîöåññà, ïîñûëàåòñÿ ïî óìîë÷àíèþ. KILL óíè÷òîæåíèå ïðîöåññà ÎÑ.  îòëè÷èå îò TERM, íå ìîæåò áûòü áëîêèðîâàí. HUP ñèãíàë îòáîÿ. Ìíîãèå ïðîöåññû ïðè åãî ïîëó÷åíèè ïåðå÷èòûâàþò êîíôèãóðàöèîííûå ôàéëû.
43
Êîíòðîëü çà ñîñòîÿíèåì ïðîöåññîâ
44
Óïðàâëåíèå ïðîöåññàìè Óïðàâëåíèå ïðîöåññàìè â UNIX îñíîâàíî íà ïîíÿòèè ïðèîðèòåòà. Ïðèîðèòåò ïðîöåññà ýòî ÷èñëîâàÿ âåëè÷èíà, õàðàêòåðèçóþùàÿ ïîòðåáíîñòü ïðîöåññà â ðåñóðñàõ ïðîöåññîðà. Êàæäûé ïðîöåññ èìååò äâà àòðèáóòà ïðèîðèòåòà: áàçîâûé ïðèîðèòåò è òåêóùèé. Áàçîâûé ïðèîðèòåò (nice number) çàäàåòñÿ ñèñòåìîé èëè ïîëüçîâàòåëåì ïðè çàïóñêå ïðîöåññà è õàðàêòåðèçóåò íà÷àëüíûå ïîòðåáíîñòè ïðîöåññà â âû÷èñëèòåëüíûõ ðåñóðñàõ. Òåêóùèé ïðèîðèòåò äèíàìè÷åñêè èçìåíÿåòñÿ ïî èñòå÷åíèè êâàíòà âðåìåíè â çàâèñèìîñòè îò áàçîâîãî ïðèîðèòåòà, ñòåïåíè èñïîëüçîâàíèÿ ðåñóðñîâ, âðåìåíè îæèäàíèÿ è òåêóùåãî ñîñòîÿíèÿ. Âñÿêèé ðàç äèñïåò÷åð âûáèðàåò ïðîöåññ ñ íàèâûñøèì òåêóùèì ïðèîðèòåòîì è îòäàåò åìó ðåñóðñû ïðîöåññîðà. Òåêóùèé ïðèîðèòåò âàðüèðóåòñÿ â äèàïàçîíå îò 0 äî 127 (â ðàçíûõ ðåàëèçàöèÿõ UNIX ýòè âåëè÷èíû ìîãóò ðàçëè÷àòüñÿ). Ïðîöåññû, âûïîëíÿþùèåñÿ â ðåæèìå çàäà÷è, ìîãóò èìåòü ïðèîðèòåòû â äèàïàçîíå 0 65, â ðåæèìå ÿäðà 66 95. Ïðèîðèòåòû â äèàïàçîíå 96 127 çàðåçåðâèðîâàíû äëÿ ïðîöåññîâ ðåàëüíîãî âðåìåíè. Èçìåíåíèå ïðèîðèòåòà îñóùåñòâëÿåòñÿ ïî-ðàçíîìó äëÿ ïðîöåññîâ, íàõîäÿùèõñÿ â ðàçíûõ ñîñòîÿíèÿõ. Ïðîöåññ, âûïîëíÿþùèéñÿ â ðåæèìå ÿäðà, íå ìîæåò áûòü ïðåðâàí ñèñòåìîé. Îí ìîæåò îñâîáîäèòü ïðîöåññîð, ïåðåéäÿ â ðåæèì çàäà÷è, èëè â ðåæèì ñíà, êîãäà òðåáóåìûé ðåñóðñ íåäîñòóïåí. Ïðîöåññó, íàõîäÿùåìóñÿ â ñîñòîÿíèè îæèäàíèÿ ðåñóðñà, ÎÑ ïðèñâàèâàåò çíà÷åíèå ïðèîðèòåòà ñíà, âûáèðàåìîå èç äèàïàçîíà ñèñòåìíûõ ïðèîðèòåòîâ. Êîãäà ïðîöåññ ïå-
45
ðåõîäèò â ñîñòîÿíèå ãîòîâíîñòè, ñèñòåìà óñòàíàâëèâàåò çíà÷åíèå òåêóùåãî ïðèîðèòåòà ðàâíûì ïðèîðèòåòó ñíà. Ïîñêîëüêó ýòî çíà÷åíèå âûøå ïðèîðèòåòà ëþáîãî ïðîöåññà, âûïîëíÿþùåãîñÿ â ðåæèìå çàäà÷è, ïðîáóäèâøèéñÿ îòî ñíà ïðîöåññ áûñòðî ïîëó÷àåò â ñâîå ðàñïîðÿæåíèå âû÷èñëèòåëüíûå ðåñóðñû. Ïðè ïåðåõîäå ïðîöåññà èç ðåæèìà ÿäðà â ðåæèì çàäà÷è ñèñòåìà âîññòàíàâëèâàåò åãî ïðèîðèòåò, ñîõðàíåííûé ïåðåä âûïîëíåíèÿ ñèñòåìíîãî âûçîâà. Äëÿ âñåõ ïðîöåññîâ, âûïîëíÿþùèõñÿ â ðåæèìå çàäà÷è, ñèñòåìà ïî èñòå÷åíèè êàæäîãî êâàíòà âðåìåíè ïðîèçâîäèò ïåðåñ÷åò èõ òåêóùèõ ïðèîðèòåòîâ. Òåêóùèé ïðèîðèòåò p_cur ïðîöåññà çàâèñèò îò åãî áàçîâîãî ïðèîðèòåòà p_nice è ñòåïåíè èñïîëüçîâàíèÿ âû÷èñëèòåëüíûõ ðåñóðñîâ p_cpu è âû÷èñëÿåòñÿ ïî ôîðìóëå p_cur = k *p_nice k *p_cpu, 1 2 ãäå k è k íåêîòîðûå êîýôôèöèåíòû ïðîïîðöèîíàëüíîñòè. Âåëè÷èíà p_nice çäåñü 1 2 ïîñòîÿííà, à p_cpu ìåíÿåòñÿ ñî âðåìåíåì. Ðàçíûå ðåàëèçàöèè UNIX îïåðèðóþò ðàçëè÷íûìè ïðàâèëàìè ïåðåñ÷åòà ýòîé âåëè÷èíû. Íàïðèìåð, â System V Release 3 (SVR3) ýòà âåëè÷èíà ïî èñòå÷åíèè êàæäîãî êâàíòà âðåìåíè, â òå÷åíèå êîòîðîãî ïðîöåññ íå èñïîëüçîâàë âû÷èñëèòåëüíûå ðåñóðñû, ìåíÿåòñÿ ïî ôîðìóëå p_cpu = p_cpu/2. Ïîñëå èõ èñïîëüçîâàíèÿ, ýòîé âåëè÷èíå ïðèñâàèâàåòñÿ íåêîòîðîå ôèêñèðîâàííîå çíà÷åíèå p_cpu . Òàêèì îáðàçîì, ïî èñòå÷åíèè n êâàíòîâ âðåìåíè ñòåïåíü èñïîëüçîâà0 íèÿ âû÷èñëèòåëüíûõ ðåñóðñîâ îïðåäåëÿåòñÿ ôîðìóëîé p_cpu = p_cpu /2n.  ðå0 çóëüòàòå, òåêóùèå ïðèîðèòåòû ïðîöåññîâ, íàõîäÿùèõñÿ â ðåæèìå çàäà÷è è íå èñïîëüçóþùèõ ðåñóðñû ïðîöåññîðà, ðàñòóò. Ïîñëå ïåðåäà÷è ïðîöåññó óïðàâëåíèÿ, åãî òåêóùèé ïðèîðèòåò ïàäàåò. Òàêàÿ ñõåìà îáåñïå÷èâàåò âîçìîæíîñòü ïîïåðåìåííîãî âû-
46
ïîëíåíèÿ âñåõ çàïóùåííûõ ïðîöåññîâ. Îíà, òàêæå, îáåñïå÷èâàåò áûñòðóþ ïåðåäà÷ó óïðàâëåíèÿ èíòåðàêòèâíûì ïðîöåññàì, ïîñêîëüêó îíè áîëüøóþ ÷àñòü âðåìåíè ïðîâîäÿò â îæèäàíèè ââîäà äàííûõ è, ñëåäîâàòåëüíî, ìåíüøå èñïîëüçóþò âû÷èñëèòåëüíûå ðåñóðñû. Íåäîñòàòîê ðàññìîòðåííîé ñõåìû ïðîÿâëÿåòñÿ ïðè óâåëè÷åíèè ÷èñëà çàïóùåííûõ ïðîöåññîâ.  ýòîì ñëó÷àå âðåìÿ îæèäàíèÿ ðåñóðñîâ ïðîöåññîðà äëÿ âñåõ ïðîöåññîâ âåëèêî. Ïîñêîëüêó ïîñëåäîâàòåëüíîñòü p_cpu /2n ïðè óâåëè÷åíèè n áûñòðî ñõîäèòñÿ 0 ê íóëþ, òî òåêóùèé ïðèîðèòåò ïðîöåññà â ïåðâóþ î÷åðåäü áóäåò îïðåäåëÿòüñÿ âåëè÷èíîé åãî áàçîâîãî ïðèîðèòåòà.  ðåçóëüòàòå, ïðîöåññû ñ íèçêèì áàçîâûì ïðèîðèòåòîì ïðàêòè÷åñêè íå áóäóò ïîëó÷àòü â ñâîå ðàñïîðÿæåíèå ðåñóðñû ïðîöåññîðà.  UNIX 4.3BSD äëÿ ïåðåñ÷åòà ñòåïåíè èñïîëüçîâàíèÿ âû÷èñëèòåëüíûõ ðåñóðñîâ ïðèìåíÿåòñÿ ôîðìóëà p_cpu = p_cpu*(2*m/2*m + 1), ãäå m ñðåäíåå ÷èñëî ïðîöåññîâ, íàõîäèâøèõñÿ íà î÷åðåäè â òå÷åíèè ïîñëåäíåé ñåêóíäû.  ýòîì ñëó÷àå, óâåëè÷åíèå òåêóùåãî ïðèîðèòåòà ïðîèñõîäèò ìåäëåííåå, ÷òî óñòðàíÿåò íåäîñòàòîê ðàññìîòðåííîãî ðàíåå àëãîðèòìà. Ïîëüçîâàòåëü èìååò âîçìîæíîñòü ñ ïîìîùüþ êîìàíäû nice çàïóñòèòü ïðîöåññ ñ óêàçàííûì ïðèîðèòåòîì. Êîìàíäà renice ïîçâîëÿåò èçìåíèòü ïðèîðèòåò âûïîëíÿþùåãîñÿ ïðîöåññà.
47
ÀÐÕÈÂÈÐÎÂÀÍÈÅ È ÑÆÀÒÈÅ ÔÀÉËΠ UNIX Ïðîãðàììà àðõèâàöèè tar Ïðîãðàììà tar ïðåäíàçíà÷åíà äëÿ àðõèâèðîâàíèÿ ôàéëîâ. Ïîä àðõèâèðîâàíèåì ïîíèìàåòñÿ ïîìåùåíèå ñîäåðæèìîãî íåñêîëüêèõ ôàéëîâ â îäèí ôàéë òàê íàçûâàåìûé ôàéë-àðõèâ. Ýòî óïðîùàåò õðàíåíèå, ïåðåäà÷ó ôàéëîâ. Èçíà÷àëüíî ïðîãðàììà tar ïðåäíàçíà÷àëàñü äëÿ ñîçäàíèÿ àðõèâîâ íà ëåíòå, åå íàçâàíèå ñîêðàùåíèå îò tape archive àðõèâ íà ëåíòå. Îíà ïîçâîëÿåò ñîçäàâàòü àðõèâû, òàêæå, íà äèñêåòàõ, â ôàéëàõ íà äèñêå. Ôîðìàò êîìàíäû: $ tar options archive [files]
Ïðè óêàçàíèè â êà÷åñòâå èìåíè àðõèâà ñèìâîëà çàïèñü äàííûõ îñóùåñòâëÿåòñÿ íà ñòàíäàðòíûé âûâîä, ÷òî ïîçâîëÿåò âêëþ÷àòü êîìàíäó tar â êîíâåéåðû. Ñòðîêà îïöèé options äîëæíà ñîäåðæàòü îäèí èç ñëåäóþùèõ îáÿçàòåëüíûõ êëþ÷åâûõ ñèìâîëîâ, îïðåäåëÿþùèõ äåéñòâèÿ àðõèâàòîðà: c ñîçäàíèå àðõèâà, äàííûå çàïèñûâàþòñÿ â íà÷àëî àðõèâà archive; r çàìåíà, âñå ôàéëû files áóäóò çàïèñàíû â àðõèâ, ñòàðûå êîïèè ôàéëîâ áóäóò çàìåùåíû íîâûìè; u îáíîâëåíèå (update), ôàéëû, óêàçàííûå â êà÷åñòâå àðãóìåíòîâ, áóäóò äîáàâëåíû â àðõèâ, åñëè îíè òàì íå ïðèñóòñòâóþò èëè ÿâëÿþòñÿ áîëåå íîâûìè, ÷åì ñóùåñòâóþùèå; x èçâëå÷åíèå óêàçàííûõ ôàéëîâ èç àðõèâà; t âûäà÷à èíôîðìàöèè î ñîäåðæèìîì àðõèâà.
48
Äëÿ óêàçàíèÿ ìåñòà íàõîæäåíèÿ àðõèâà óêàçûâàþòñÿ îïöèè: f àðõèâ ïîìåùàåòñÿ â ôàéë èëè íà óñòðîéñòâî. b << íà ëåíòó, âñëåä çà îïöèåé óêàçûâàåòñÿ ðàçìåð áëîêà.  ñèëó èñòîðè÷åñêèõ ïðè÷èí, ïðîãðàììà tar ïî óìîë÷àíèþ ïîìåùàåò àðõèâ íà ëåíòó, ïîýòîìó, ïðè ðàáîòå ñ àðõèâàìè íà äèñêå îáÿçàòåëüíî íóæíî óêàçûâàòü êëþ÷ f. Êðîìå ïåðå÷èñëåííûõ, ìîãóò áûòü èñïîëüçîâàíû ñëåäóþùèå îïöèè. v ðàñøèðåííûé âûâîä, êîìàíäà âûâîäèò ñïèñîê îáðàáàòûâàåìûõ ôàéëîâ. M ñîçäàíèå ìíîãîòîìíîãî àðõèâà. Ïðè àðõèâèðîâàíèè ôàéëîâ íà äèñêåòó â ñëó÷àå åå çàïîëíåíèÿ ïðîãðàììà ïðåäëîæèò âñòàâèòü íîâóþ äèñêåòó. Ïðè ðàçàðõèâèðîâàíèè ìíîãîòîìíîãî àðõèâà òàêæå ñëåäóåò óêàçàòü ýòó îïöèþ. P ðàáîòà ñ ïîëíûìè èìåíàìè ôàéëîâ. Ïî óìîë÷àíèþ, ïðè çàïîìèíàíèè èìåíè ôàéëà, ïîìåùàåìîãî â àðõèâ, íà÷àëüíûé ñèìâîë / îòáðàñûâàåòñÿ. T flist âçÿòü èìåíà îáðàáàòûâàåìûõ ôàéëîâ èç ôàéëà flist. W ïðîâåðêà öåëîñòíîñòè àðõèâà ïîñëå çàïèñè â íåãî. z ôàéë ïðåäâàðèòåëüíî îáðàáàòûâàåòñÿ ïðîãðàììîé ñæàòèÿ gzip. Ïðèìåðû:
$ tar cfvW arc/samp.tar /bin
Àðõèâèðóåò êàòàëîã /bin â ñîçäàâàåìûé äëÿ ýòîãî ôàéë samp.tar, ðàñïîëàãàþùèéñÿ â ïîäêàòàëîãå arc òåêóùåãî êàòàëîãà ñ âûâîäîì íà ýêðàí ñïèñêà àðõèâèðóåìûõ ôàéëîâ è ïðîâåðêîé èõ öåëîñòíîñòè. $ tar cfz arc/samp.tar /usr/doc
Àðõèâèðóåò êàòàëîã /usr/doc â ôàéë samp.tar, ïðåäâàðèòåëüíî ñæèìàÿ êàæäûé ôàéë.
49
$ tar tf samp.tar
Ïðîñìîòð ñîäåðæèìîãî àðõèâà samp.tar. $ tar xfv samp.tar
Èçâëå÷åíèå èç àðõèâà samp.tar âñåõ ôàéëîâ ñ âûâîäîì íà ýêðàí èõ ñïèñêà. Ïðîãðàììà ñæàòèÿ gzip Ïðîãðàììû ñæàòèÿ, èñïîëüçóÿ ñïåöèàëüíûå àëãîðèòìû êîäèðîâàíèÿ äàííûõ, ïîçâîëÿþò çàïèñûâàòü ñîäåðæèìîå ôàéëîâ â áîëåå êîìïàêòíîì âèäå. Îäíèì èç ñàìûõ ïîïóëÿðíûõ àëãîðèòìîâ ñæàòèÿ ÿâëÿåòñÿ ìåòîä, ïîëó÷èâøèé íàçâàíèå zip.  ñîñòàâ UNIX âõîäèò ñâîáîäíî ðàñïðîñòðàíÿåìàÿ ïðîãðàììà (GNU), èñïîëüçóþùàÿ ýòîò àëãîðèòì. Åå èìÿ gzip. Ôîðìàò êîìàíäû: $ gzip options [files]
Ïðè ñæàòèè óêàçûâàþòñÿ èìåíà îáðàáàòûâàåìûõ ôàéëîâ. Ïî óìîë÷àíèþ ýòè ôàéëû áóäóò çàìåùåíû èõ óïàêîâàííûìè âàðèàíòàìè, èìåíà êîòîðûõ ïîëó÷àò ðàñøèðåíèå gz. Ïðè ýòîì èñõîäíûå ôàéëû áóäóò óäàëåíû. Ñîîòâåòñòâåííî, ïîñëå ðàñïàêîâêè áóäåò óäàëåí ñæàòûé ôàéë. Åñëè ïðè ñæàòèè ñïèñîê ôàéëîâ îòñóòñòâóåò èëè óêàçûâàåòñÿ ñèìâîë -, òî îñóùåñòâëÿåòñÿ ñæàòèå ñòàíäàðòíîãî ââîäà ñ íàïðàâëåíèåì íà ñòàíäàðòíûé âûâîä. Âìåñòå ñ ïåðåíàïðàâëåíèåì âûâîäà ýòî ïîçâîëÿåò çàäàâàòü äëÿ ñæàòûõ ôàéëîâ ïðîèçâîëüíûå èìåíà è ìåñòî ðàñïîëîæåíèÿ. Êëþ÷è: -d îñóùåñòâëÿåò ðàñïàêîâêó àðõèâà. Ýòà ïðîöåäóðà ìîæåò áûòü âûïîëíåíà, òàêæå, âûçîâîì êîìàíäû gunzip.
50
-l ïðîñìîòð ñîäåðæèìîãî àðõèâà. -t ïðîâåðêà öåëîñòíîñòè àðõèâà. -c çàïèñü íà ñòàíäàðòíûé âûâîä, ñæèìàåìûé ôàéë íå óíè÷òîæàåòñÿ. -f ôîðñèðîâàííàÿ êîìïðåññèÿ èëè äåêîìïðåññèÿ, ïîçâîëÿþùàÿ ïåðåçàïèñûâàòü
ñóùåñòâóþùèå ôàéëû, ÷èòàòü äàííûå ñ òåðìèíàëà èëè çàïèñûâàòü â òåðìèíàë.
-r ðåêóðñèâíàÿ óïàêîâêà ôàéëîâ â êàòàëîãå. -v âûâîä íà ýêðàí îò÷åòà î ðàáîòå. -n - çàäàíèå ñòåïåíè ñæàòèÿ, êîòîðàÿ îïðåäåëÿåòñÿ ÷èñëîì n, çíà÷åíèå êîòîðîãî çàê-
ëþ÷åíî â ïðîìåæóòêå îò 1 (íàèìåíüøàÿ ñòåïåíü ñæàòèÿ) äî 9 (ñàìîå ñèëüíîå ñæàòèå). Ñòåïåíü ñæàòèÿ ïî óìîë÷àíèþ 6. Ïðèìåðû. $ gzip -9 mydoc
Óïàêîâêà ôàéëà mydoc ñ èñïîëüçîâàíèåì àëãîðèòìà, äàþùåãî íàèâûñøóþ ñòåïåíü ñæàòèÿ. $ gzip -cf dial > dial.gz
Óïàêîâêà â dial.gz ôàéëà dial áåç åãî óäàëåíèÿ.
$ tar cf - READ.ME | gzip -f > pack.tar.gz
Àðõèâèðîâàíèå ôàéëà READ.ME ñ ïîñëåäóþùèì ñæàòèåì â ôàéë pack.tar.gz.
51
ÒÅÊÑÒÎÂÛÉ ÐÅÄÀÊÒÎÐ VI Ðåäàêòîð vi ÿâëÿåòñÿ ìîùíûì òåêñòîâûì ðåäàêòîðîì, ïðèñóòñòâóþùèì â ëþáîé UNIX-ïîäîáíîé ÎÑ è ïîääåðæèâàþùèì áîëüøîå ÷èñëî ðàçëè÷íûõ òåðìèíàëîâ. Çà ýòó óíèâåðñàëüíîñòü ïðèõîäèòñÿ ðàñïëà÷èâàòüñÿ îãðàíè÷åííîñòüþ ÷èñëà èñïîëüçóåìûõ êëàâèø. Ðàáîòà ñ ðåäàêòîðîì vi ìîæåò îñóùåñòâëÿòüñÿ â îäíîì èç òðåõ ðåæèìîâ: ðåæèìå ââîäà òåêñòà, êîìàíäíîì ðåæèìå, ðåæèìå êîìàíäíîé ñòðîêè.  ðåæèìå ââîäà òåêñòà ñèìâîëû, íàáèðàåìûå íà êëàâèàòóðå, îòîáðàæàþòñÿ íà ýêðàíå òåðìèíàëà. Èç ôóíêöèé ðåäàêòèðîâàíèÿ äîñòóïíà òîëüêî âîçìîæíîñòü ïîñëåäîâàòåëüíîãî óäàëåíèÿ ïîñëåäíèõ ââåäåííûõ ñèìâîëîâ, êîòîðàÿ ðåàëèçóåòñÿ íàæàòèåì íà êëàâèøó [Ctrl-h].  êîìàíäíîì ðåæèìå âûïîëíÿþòñÿ ðàçëè÷íûå îïåðàöèè ðåäàêòèðîâàíèÿ. Ïðè ýòîì, íàáèðàåìûå êîìàíäû íà ýêðàíå íå îòîáðàæàþòñÿ.  ðåæèìå êîìàíäíîé ñòðîêè ìîæíî âûïîëíÿòü áîëåå øèðîêèé, íåæåëè â êîìàíäíîì ðåæèìå, íàáîð îïåðàöèé. Ïðè ýòîì, íàáèðàåìûå êîìàíäû îòîáðàæàþòñÿ â íèæíåé ÷àñòè ýêðàíà. Ñðàçó ïîñëå çàïóñêà vi íàõîäèòñÿ â êîìàíäíîì ðåæèìå. Ïåðåêëþ÷åíèå ìåæäó ðàçëè÷íûìè ðåæèìàìè îñóùåñòâëÿåòñÿ ïî ñëåäóþùåé ñõåìå. Êîìàíäíûé ðåæèì → ðåæèì ââîäà (êëàâèøè [a], [i], [o]). Êîìàíäíûé ðåæèì → ðåæèì êîìàíäíîé ñòðîêè (êëàâèøà [:]). Ðåæèì ââîäà → êîìàíäíûé ðåæèì (êëàâèøà [Esc]). Ðåæèì êîìàíäíîé ñòðîêè → êîìàíäíûé ðåæèì ([Return] èëè [Esc] ïîñëå ââîäà êîìàíäû).
52
Åñëè ïðè ïåðåõîäå èç êîìàíäíîãî ðåæèìà â ðåæèì ââîäà áûëà íàæàòà êëàâèøà [a], òî ââîäèìûé òåêñò áóäåò äîáàâëÿòüñÿ ïîñëå êóðñîðà, åñëè áûëà íàæàòà êëàâèøà [i] òåêñò áóäåò äîáàâëÿòüñÿ ïîñëå êóðñîðà. Ïðè íàæàòèè íà êëàâèøó [o] áóäåò ñîçäàíà íîâàÿ ñòðîêà, è òåêñò áóäåò âñòàâëÿòüñÿ â ýòó ñòðîêó. Íóæíî çàïîìíèòü â ïåðâóþ î÷åðåäü: 1. Vi ñàìûé ëó÷øèé òåêñòîâûéðåäàêòîð. Íî ê íåìó íóæíî ïðèâûêíóòü. 2. Ðåäàêòèðîâàíèå ìîæåò âûïîëíÿòüñÿ òîëüêî â êîìàíäíîì ðåæèìå. Ïåðåõîä â êîìàíäíûé ðåæèì êëàâèøà [Esc]. 3. Ïîñëå çàâåðøåíèÿ îïåðàöèé ðåäàêòèðîâàíèÿ íóæíî âîéòè â ðåæèì ââîäà òåêñòà íàæàòèåì íà îäíó èç êëàâèø [a], [i], [o]. 3. Ïåðåìåùåíèå êóðñîðà îñóùåñòâëÿåòñÿ â êîìàíäíîì ðåæèìå. Íàçíà÷åíèÿ êëàâèø: h← j? k↑ l→ 4. Óäàëåíèå ñèìâîëà â ïîçèöèè êóðñîðà êëàâèøà [x] â êîìàíäíîì ðåæèìå. 5. Êóðñîð â íà÷àëî ñòðîêè êëàâèøà [0] (íóëü), â êîíåö ñòðîêè êëàâèøà [$]. 6. Ñëèÿíèå ñòðîê êóðñîð â êîíåö ñòðîêè è êëàâèøà [J]. 7. Îòìåíà îïåðàöèè êëàâèøà [u]. 8. Íà íåêîòîðûõ òåðìèíàëàõ ìîãóò ðàáîòàòü ïðèâû÷íûå êëàâèøè ïåðåìåùåíèÿ è ðåäàêòèðîâàíèÿ. Ñ÷èòàéòå, ÷òî Âàì ïîâåçëî.
53
Êîìàíäû ïåðåìåùåíèÿ êóðñîðà Ïåðå÷èñëåííûå íèæå êîìàíäû ââîäÿòñÿ â êîìàíäíîì ðåæèìå. Âñå ïåðå÷èñëåííûå êîìàíäû, à òàêæå, ìíîãèå äðóãèå, ìîãóò áûòü ââåäåíû â áîëåå îáùåì ôîðìàòå: [ñ÷åò÷èê]êîìàíäà
ãäå â êà÷åñòâå ñ÷åò÷èêà äîëæíî áûòü óêàçàíî öåëîå ÷èñëî.  ýòîì ñëó÷àå êîìàíäà âûïîëíèòñÿ óêàçàííîå ÷èñëî ðàç. Íàïðèìåð, êîìàíäà 6j ïðèâåäåò ê ïåðåìåùåíèþ êóðñîðà íà 6 ñòðîê âíèç. Êîìàíäà l h j k + w b ( ) 0 $ { } H L
Ïåðåìåùåíèå Âïðàâî, íî íå äàëåå êîíöà ñòðîêè. Âëåâî, íî íå äàëåå íà÷àëà ñòðîêè. Âíèç, îñòàâëÿÿ êóðñîð â òîì æå ñòîëáöå. Ââåðõ, îñòàâëÿÿ êóðñîð â òîì æå ñòîëáöå. Âíèç, ê íà÷àëó ñëåäóþùåé ñòðîêè. Âïåðåä, ê íà÷àëó ñëåäóþùåãî ñëîâà. Íàçàä, ê íà÷àëó ñëåäóþùåãî ñëîâà. Ê íà÷àëó òåêóùåãî ïðåäëîæåíèÿ. Ê íà÷àëó ñëåäóþùåãî ïðåäëîæåíèÿ.  ïåðâóþ ïîçèöèþ òåêóùåé ñòðîêè. Ê ïîñëåäíåìó ñèìâîëó òåêóùåé ñòðîêè. Íà ïàðàãðàô íàçàä (ïàðàãðàô áëîê òåêñòà, îòäåëåííûé ïóñòîé ñòðîêîé). Íà ïàðàãðàô âïåðåä.  ïåðâóþ ñòðîêó ýêðàíà.  ïîñëåäíþþ ñòðîêó ýêðàíà.
54
[num]G [n]Ctrl-u [n]Ctrl-d [n]Ctrl-b [n]Ctrl-f
Ïåðåõîä íà ñòðîêó ñ íîìåðîì num. Åñëè íîìåð ñòðîêè íå óêàçàí íà ïîñëåäíþþ ñòðîêó äîêóìåíòà. Ïåðåõîä íà n ñòðîê ââåðõ. Åñëè ñ÷åò÷èê íå óêàçàí, íà ïîëýêðà íà ââåðõ. Ïåðåõîä íà n ñòðîê âíèç. Åñëè ñ÷åò÷èê íå óêàçàí, íà ïîëýêðàíà âíèç. Ïðîêðó÷èâàåò ýêðàííóþ ñòðàíèöó ââåðõ, îñòàâëÿÿ èç ïðåäûäóùåé ñòðàíèöû äâå ñòðîêè. Ïðîêðó÷èâàåò ýêðàííóþ ñòðàíèöó âíèç, îñòàâëÿÿ èç ïðåäûäóùåé ñòðàíèöû äâå ñòðîêè.
Íà íåêîòîðûõ òåðìèíàëàõ äëÿ ïåðåìåùåíèÿ êóðñîðà ìîæíî èñïîëüçîâàòü ïðèâû÷íûå êëàâèøè [Left], [Right], [Up], [Down], [Page Up], [Page Down], [Home], [End]. Êîìàíäû óäàëåíèÿ ôðàãìåíòîâ òåêñòà Êîìàíäà [n]x
[n]X dd
D
d<ïåðåìåù_êóðñîðà>
Äåéñòâèå Óäàëÿåò çàäàííîå ÷èñëî ñèìâîëîâ â ïðÿìîì íàïðàâëåíèè, íà÷èíàÿ ñ ïîçèöèè êóðñîðà. Óäàëÿåò çàäàííîå ÷èñëî ñèìâîëîâ â îáðàòíîì íàïðàâëå íèè, íà÷èíàÿ ñ ñèìâîëà ïåðåä êóðñîðîì. Óäàëÿåò òåêóùóþ ñòðîêó. Óäàëÿåò òåêñò îò êóðñîðà äî êîíöà òåêóùåé ñòðîêè. Óäàëÿåò òåêñò îò êóðñîðà äî òî÷êè, îïðåäåëÿåìîé àðãó ìåíòîì <ïåðåìåù_êóðñîðà>. Íàïðèìåð, d2w óäàëåíèå ñèìâîëîâ îò êóðñîðà äî êîíöà ñëåäóþùåãî ñëîâà.
55
Êîìàíäû ðåäàêòèðîâàíèÿ Êîìàíäà
[n]r<ñèìâîë> [n]R<òåêñò>[Esc]
[n]cc<òåêñò> s<òåêñò>
J
u
Äåéñòâèå Çàìåíÿåò ñèìâîë â ïîçèöèè êóðñîðà óêàçàííûì ñèìâî ëîì. Ðåäàêòîð, ïðè ýòîì, îñòàåòñÿ â êîìàíäíîì ðåæèìå. Çàìåíÿåò ñèìâîëû, íà÷èíàÿ ñ ïîçèöèè êóðñîðà ââîäèìûì òåêñòîì. Ïðè ââîäå òåêñòà ðåäàêòîð íàõîäèòñÿ â ñîñòîÿíèè replace. Ïîñëå íàæàòèÿ êëàâèøè [Esc] vi âîçâðàùàåòñÿ â êîìàíäíûé ðåæèì. Çàìåíÿåò òåêóùóþ ñòðîêó óêàçàííûì òåêñòîì. Ðåäàêòîð íàõîäèòñÿ â ðåæèìå ââîäà òåêñòà. Ïîäñòàâëÿåò âìåñòî òåêóùåãî ñèìâîëà çàäàííûé òåêñò. Ñëèÿíèå òåêóùåé ñòðîêè ñî ñëåäóþùåé. Îòìåíà ïîñëåäíåé ââåäåííîé êîìàíäû. Áóôåðû
Ðåäàêòîð vi ìîæåò èñïîëüçîâàòü äëÿ âðåìåííîãî õðàíåíèÿ 26 èìåíîâàííûõ áóôåðà, èìåþùèõ èìåíà a, b, ..., z, 9 áóôåðîâ óäàëåíèÿ, èìåþùèõ èìåíà 1, ..., 9 è íåèìåíîâàííûé áóôåð, èñïîëüçóåìûé ïî óìîë÷àíèþ. Ïîìåùåíèå ôðàãìåíòà òåêñòà â áóôåð îñóùåñòâëÿåòñÿ êîìàíäîé [<èìÿ_áóôåðà>]y<ïåðåìåù_êóðñîðà> Åñëè èìÿ áóôåðà óêàçûâàåòñÿ â íèæíåì ðåãèñòðå ïðåäûäóùåå ñîäåðæèìîå áóôåðà óäàëÿåòñÿ, åñëè â âåðõíåì áëîê òåêñòà äîáàâëÿåòñÿ â êîíåö áóôåðà. Ïî óìîë÷àíèþ
56
èñïîëüçóåòñÿ íåèìåíîâàííûé áóôåð. Îáúåì ñîõðàíÿåìîãî òåêñòà îïðåäåëÿåòñÿ àðãóìåíòîì <ïåðåìåù_êóðñîðà>. Íàïðèìåð, êîìàíäà ay2w ïîìåùàåò â áóôåð c èìåíåì a 2 ñëîâà, íà÷èíàÿ ñ òåêóùåãî. Êîìàíäà
[<èìÿ_áóôåðà>]y[n]y
ïîìåùàåò â óêàçàííûé áóôåð n ñòðîê, íà÷èíàÿ ñ òåêóùåé. Ïðè êàæäîì óäàëåíèè òåêñòà îí àâòîìàòè÷åñêè ïîìåùàåòñÿ â íåèìåíîâàííûé áóôåð, à òàêæå çàãðóæàåòñÿ â ñòåê áóôåðîâ óäàëåíèÿ 1 9. Ýòî äàåò âîçìîæíîñòü îáðàùàòüñÿ ê ïîñëåäíèì 9 óäàëåííûì ôðàãìåíòàì. Êîìàíäà
[<èìÿ_áóôåðà>]p
ïîçâîëÿåò îñóùåñòâèòü âñòàâêó â òåêóùóþ ïîçèöèþ ñîäåðæèìîãî óêàçàííîãî áóôåðà. Êîìàíäû ïîèñêà Âõîä â ðåæèì ïîèñêà îñóùåñòâëÿåòñÿ íàæàòèåì íà îäíó èç êëàâèø: [/] èëè [?].  ïåðâîì ñëó÷àå ïîèñê áóäåò îñóùåñòâëÿòüñÿ â ïðÿìîì íàïðàâëåíèè, íà÷èíàÿ îò ïîçèöèè êóðñîðà, âî âòîðîì â îáðàòíîì. Âñëåä çà ýòèì â íèæíåé ñòðîêå ýêðàíà ââîäèòñÿ ðåãóëÿðíîå âûðàæåíèå, êîòîðîå çàäàåò îáðàçåö äëÿ ïîèñêà. Íàæàòèå íà êëàâèøó [/] ïîçâîëÿåò ïîâòîðèòü ïîèñê.
57
Ðåæèì êîìàíäíîé ñòðîêè Êîìàíäà q! w w file r file
e file !command set nu set nonu
Äåéñòâèå Âûõîä èç ðåäàêòîðà áåç ñîõðàíåíèÿ èçìåíåíèé. Ñîõðàíåíèå ñäåëàííûõ èçìåíåíèé. Ñîõðàíåíèå ñäåëàííûõ èçìåíåíèé â ôàéëå file. Äîáàâèòü ñîäåðæèìîå óêàçàííîãî ôàéëà ê ðåäàêòèðóåìîìó ñðàçó çà òåêóùåé ñòðîêîé. Ïåðåõîä ê ðåäàêòèðîâàíèþ óêàçàííîãî ôàéëà. Âûïîëíåíèå êîìàíäû UNIX áåç âûõîäà èç ðåäàêòîðà. Âêëþ÷èòü íóìåðàöèþ ñòðîê. Âûêëþ÷èòü íóìåðàöèþ ñòðîê. ÏÎÒÎÊÎÂÛÉ ÐÅÄÀÊÒÎÐ SED
Sed (Stream Editor) ÿâëÿåòñÿ òåêñòîâûì ðåäàêòîðîì, âûïîëíÿþùèì îïåðàöèè ðåäàêòèðîâàíèÿ â êîìàíäíîì ðåæèìå. Èñïîëüçîâàíèå ýòîãî ðåäàêòîðà äàåò áîëüøîé ýôôåêò òîãäà, êîãäà íåîáõîäèìî âûïîëíÿòü îäíîòèïíûå ïðåîáðàçîâàíèÿ ôàéëà èëè ãðóïïû ôàéëîâ, íàïðèìåð, óäàëåíèå îïðåäåëåííûõ ñòðîê, çàìåíó îäíèõ ñëîâ íà äðóãèå, âûâîä îïðåäåëåííûõ ïîëåé ñòðîê. Âûçîâ ðåäàêòîðà sed îñóùåñòâëÿåòñÿ â ñîîòâåòñòâèè ñ ôîðìàòîì $ sed command [files]
Ðåäàêòîð sed âûïîëíÿåò ïðåîáðàçîâàíèÿ íàä ôàéëàìè èç ñïèñêà files, îïðåäåëÿåìûå êîìàíäîé command, è íàïðàâëÿåò ðåçóëüòàò íà ñòàíäàðòíûé âûâîä. Èñõîäíûå
58
ôàéëû, ïðè ýòîì, íå èçìåíÿþòñÿ. Óêàçàíèå êëþ÷à -n ïîäàâëÿåò âûâîä âñåõ ñòðîê çà èñêëþ÷åíèåì òåõ, êîòîðûå óêàçàíû êîìàíäîé p. Åñëè ñïèñîê files îïóùåí, sed îáðàáàòûâàåò äàííûå, ïîñòóïàþùèå ñî ñòàíäàðòíîãî ââîäà. Ðåäàêòîð sed äîïóñêàåò ïîñëåäîâàòåëüíîå âûïîëíåíèå íåñêîëüêèõ êîìàíä.  ýòîì ñëó÷àå åãî âûçîâ äîëæåí îñóùåñòâëÿòüñÿ â ôîðìå $ sed e command1 ? e commandN [files]
Ìíîãèå êîìàíäû sed äîïóñêàþò óêàçàíèå àäðåñîâ îáðàáàòûâàåìûõ ñòðîê èëè äèàïàçîíîâ àäðåñîâ. Ïðîñòåéøåé ôîðìîé çàäàíèÿ àäðåñà ñòðîêè ÿâëÿåòñÿ óêàçàíèå åå ïîðÿäêîâîãî íîìåðà. Ïîìèìî ýòîãî, ñïåöèàëüíûé ñèìâîë $ óêàçûâàåò íà ïîñëåäíþþ ñòðîêó. Àäðåñ ñòðîêè ìîæåò áûòü, òàêæå, çàäàí â ôîðìå /expr/, ãäå expr ðåãóëÿðíîå âûðàæåíèå. Òàêîé àäðåñ îïðåäåëÿåò ïåðâóþ ñòðîêó, ñîäåðæàùóþ óêàçàííîå ðåãóëÿðíîå âûðàæåíèå. Äèàïàçîí àäðåñîâ çàäàåòñÿ â ôîðìå: addr1,addr2 ãäå addr1 è addr2 îïðåäåëÿþò àäðåñà ñîîòâåòñòâåííî íà÷àëüíîé è êîíå÷íîé ñòðîê äèàïàçîíà. Íàïðèìåð, çàïèñü 2,5 îïðåäåëÿåò äèàïàçîí ñòðîê ñ òðåòüåé ïî ïÿòóþ, çàïèñü 2,$ ñòðîêè ñî âòîðîé è äî êîíöà äîêóìåíòà, çàïèñü /^Free/,/files/ äèàïàçîí ñòðîê, çàêëþ÷åííûõ ìåæäó ïåðâîé ñòðîêîé, ñîäåðæàùåé ïîñëåäîâàòåëüíîñòü ñèìâîëîâ Free â íà÷àëå è ïåðâîé ñòðîêîé, ñîäåðæàùåé ïîñëåäîâàòåëüíîñòü files. Åñëè ïðè çàäàíèè äèàïàçîíà ïåðâûé àäðåñ îïóùåí, òî ñ÷èòàåòñÿ, ÷òî ýòî àäðåñ ïåðâîé ñòðîêè, åñëè îïóùåí âòîðîé àäðåñ, òî ýòî àäðåñ ïîñëåäíåé ñòðîêè. Åñëè íå óêàçûâàåòñÿ âåñü äèàïàçîí, òî ïîäðàçóìåâàåòñÿ äèàïàçîí ñòðîê îò ïåðâîé äî ïîñëåäíåé.
59
Êîìàíäû ðåäàêòîðà sed 1. Êîìàíäà ïîäñòàíîâêè. Åå ôîðìàò:
[addr1[,addr2]]s/expression/substitute/[flags]
Ýòà êîìàíäà îáðàáàòûâàåò ñòðîêè èç çàäàííîãî äèàïàçîíà, çàìåíÿÿ â êàæäîé ñòðîêå ïåðâîå âõîæäåíèå ïîñëåäîâàòåëüíîñòè, ñîîòâåòñòâóþùåé ðåãóëÿðíîìó âûðàæåíèþ expression , íà ïîñëåäîâàòåëüíîñòü substitute .  ðåãóëÿðíîì âûðàæåíèè expression ìîæíî âûäåëÿòü ïîäâûðàæåíèÿ, çàêëþ÷àÿ îïðåäåëåííûå íàáîðû ñèìâîëîâ â ñêîáêè \( è \). Ñòðîêà ïîäñòàíîâîê substitute ìîæåò ñîäåðæàòü ñëåäóþùèå ñïåöèàëüíûå ñèìâîëû, îïðåäåëåííûì îáðàçîì èíòåðïðåòèðóåìûå ðåäàêòîðîì: & çàìåíÿåòñÿ íà ñòðîêó, óêàçàííóþ â ðåãóëÿðíîì âûðàæåíèè expression; \n çàìåíÿåòñÿ íà nîå ïîäâûðàæåíèå ðåãóëÿðíîãî âûðàæåíèÿ expression. Ïîëå ôëàãîâ flags èñïîëüçóåòñÿ äëÿ ìîäèôèêàöèè ðåæèìà ðàáîòû êîìàíäû. Âîçìîæíûå ôëàãè è èõ äåéñòâèÿ: n çàìåíÿòüñÿ äîëæíî n-îå âõîæäåíèå âûðàæåíèÿ expression; g îñóùåñòâëÿåò ãëîáàëüíóþ çàìåíó âñåõ âõîæäåíèé âûðàæåíèÿ expression â êàæäîé ñòðîêå èç óêàçàííîãî äèàïàçîíà; p âûâîäèò èçìåíåííûå ñòðîêè; w file çàïèñü èçìåíåííûõ ñòðîê â ôàéë file. Ïðèìåðû. $ sed /10,40/s/[Pp]etrov/Ivan D. Petrov/g oldfile > newfile
Ìåíÿåò â ñòðîêàõ ñ 10 ïî 40 ôàéëà oldfile âñå ñëîâà Petrov è petrov íà Ivan D. Petrov ñ çàïèñüþ ðåçóëüòàòà â ôàéë newfile.
60
sed -n s/[^ ]* [ ]*\([^ ]*\).*/\1/p testfile
Îñóùåñòâëÿåòñÿ âûâîä âòîðîãî ñëîâà êàæäîé ñòðîêè ôàéëà testfile, åñëè ïî ñëîâîì ïîíèìàòü ïîñëåäîâàòåëüíîñòü ëþáûõ íåïðîáåëüíûõ ñèìâîëîâ. Çàìåíÿåìîå ðåãóëÿðíîå âûðàæåíèå èìååò âèä: ñëîâî ([^ ]* ïðîèçâîëüíîå ÷èñëî íåïðîáåëüíûõ ñèìâîëîâ) ïî êðàéíåé ìåðå îäèí ïðîáåë ( [^ ]*) ñëîâî, âûäåëåííîå â ïîäâûðàæåíèå ëþáàÿ ïîñëåäîâàòåëüíîñòü ñèìâîëîâ. Òàêèì îáðàçîì, áóäåò ïðîèçâîäèòüñÿ çàìåíà ëþáîé ñòðîêè, ñîäåðæàùåé, ïî êðàéíåé ìåðå, äâà ñëîâà. Âûðàæåíèå ïîäñòàíîâêè èìååò âèä \1. Ýòî îçíà÷àåò, ÷òî ëþáàÿ óêàçàííàÿ ñòðîêà áóäåò çàìåíåíà ïåðâûì ïîäâûðàæåíèåì, à òàêîâûì ÿâëÿåòñÿ âòîðîå ñëîâî. sed -n s/[^ ]* [ ]*\([^ ]*\) [ ]*\([^ ]*\).*/\2\1/p testfile
Âûâîäèò ñíà÷àëà òðåòüå, çàòåì âòîðîå ñëîâî êàæäîé ñòðîêè. 2. Êîìàíäà óäàëåíèÿ. Åå ôîðìàò:
[addr1[,addr2]]d
Êîìàíäà îñóùåñòâëÿåò óäàëåíèå âñåõ ñòðîê èç óêàçàííîãî äèàïàçîíà. 3. Êîìàíäà äîáàâëåíèÿ. Åå ôîðìàò: [addr]a\ text
Êîìàíäà îñóùåñòâëÿåò äîáàâëåíèå òåêñòà text ïîñëå óêàçàííîé ñòðîêè. Åñëè äîáàâëÿåìûé òåêñò ñîäåðæèò íåñêîëüêî ñòðîê, íåîáõîäèìî â êîíöå êàæäîé ñòðîêè óêàçûâàòü ñèìâîë \, îáåñïå÷èâàþùèé ðàñïîëîæåíèå êîìàíäû íà íåñêîëüêèõ ýêðàííûõ
61
ñòðîêàõ. Íàïðèìåð, $ > > >
sed 3a\ Insert string 1\ Insert string 2\ Insert string 3 fsamples
4. Âñòàâêà òåêñòà. [addr]i\ text
Êîìàíäà îñóùåñòâëÿåò äîáàâëåíèå òåêñòà text ïåðåä óêàçàííîé ñòðîêîé. 5. Êîìàíäà çàìåíû.
[addr1[,addr2]]c\ text
Êîìàíäà îñóùåñòâëÿåò çàìåíó ñòðîêè èëè ãðóïïû ñòðîê òåêñòîì text. 6. Âñòàâêà ôàéëà.
[addr]r file
Îñóùåñòâëÿåò äîáàâëåíèå ñîäåðæèìîãî ôàéëà file ïîñëå óêàçàííîé ñòðîêè. 7. Ïå÷àòü ñòðîê.
[addr1[,addr2]]p
Îñóùåñòâëÿåò âûâîä íà stdout ñòðîê èç óêàçàííîãî äèàïàçîíà. Ýòó êîìàíäó èìååò ñìûñë èñïîëüçîâàòü âìåñòå ñ êëþ÷îì -n, êîòîðûé ïîäàâëÿåò âûâîä âñåõ îñòàëüíûõ ñòðîê.
62
8. Çàïèñü â ôàéë.
[addr1[,addr2]]w file
Îñóùåñòâëÿåò çàïèñü óêàçàííûõ ñòðîê â ôàéë file. 9. Ïîäñòàíîâêà îäèíî÷íûõ ñèìâîëîâ.
[addr1[,addr2]]y/string1/string2/
Êàæäûé ñèìâîë èç óêàçàííîãî äèàïàçîíà ñòðîê, ïðèñóòñòâóþùèé â ñòðîêå string1 â ïîçèöèè n, çàìåíÿåòñÿ ñèìâîëîì, íàõîäÿùèìñÿ â ñòðîêå string2 â ïîçèöèè n. Íàïðèìåð, êîìàíäà $ sed y/abc/ABC/ myfile
çàìåíÿåò âî âñåì ôàéëå myfile ñèìâîëû a, b, c ñîîòâåòñòâåííî íà A, B, C.
63
ÊÎÌÀÍÄÛ UNIX Èíôîðìàöèîííûå êîìàíäû who
Ïîêàçûâàåò ñïèñîê ïîëüçîâàòåëåé, ðàáîòàþùèõ ñ ñèñòåìîé. finger
Îòîáðàæàåò èíôîðìàöèþ î êàæäîì çàðåãèñòðèðîâàííîì ïîëüçîâàòåëå. whoami
Ïîêàçûâàåò èìÿ ïîëüçîâàòåëÿ. tty
Ïîêàçûâàåò èìÿ òåðìèíàëà. uname
Ïîêàçûâàåò èìÿ ñèñòåìû. date
Îòîáðàæàåò ñèñòåìíóþ äàòó è âðåìÿ. df
Ñîîáùàåò èíôîðìàöèþ î ðàçìåðå ñâîáîäíîé è çàíÿòîé ÷àñòè ôàéëîâîé ñèñòåìû. Êëþ÷è: -i ñîîáùàåò î êîëè÷åñòâå ñâîáîäíûõ è çàíÿòûõ èíäåêñíûõ äåñêðèïòîðàõ.
64
Êîìàíäû óïðàâëåíèÿ êàòàëîãàìè pwd
Îòîáðàæàåò èìÿ òåêóùåãî êàòàëîãà. cd [dir]
Îñóùåñòâëÿåò ñìåíó òåêóùåãî êàòàëîãà. Åñëè ïàðàìåòð íå óêàçàí, â êà÷åñòâå òåêóùåãî óñòàíàâëèâàåòñÿ ïåðñîíàëüíûé êàòàëîã ïîëüçîâàòåëÿ. mkdir dir
Ñîçäàåò êàòàëîã ñ óêàçàííûì èìåíåì. rmdir dir
Óäàëÿåò êàòàëîã dir, åñëè îí ïóñò. du dir
Âûâîäèò èíôîðìàöèþ î ñóììàðíîì ðàçìåðå âñåõ ôàéëîâ â êàòàëîãå dir. Êëþ÷è: -a âûâîäèò èíôîðìàöèþ äëÿ êàæäîãî ôàéëà; -b îòîáðàæàåò ðàçìåð â áàéòàõ; -l âûâîäèò èíôîðìàöèþ äëÿ êàæäîé ññûëêè; -s âûâîäèò òîëüêî ñóììàðíóþ èíôîðìàöèþ.
65
Êîìàíäû óïðàâëåíèÿ ôàéëàìè ls [files]
Îòîáðàæàåò èíôîðìàöèþ î ôàéëàõ èç ñïèñêà files.  ñëó÷àå óêàçàíèÿ èìåíè êàòàëîãà, îòîáðàæàåòñÿ èíôîðìàöèÿ î ôàéëàõ, íàõîäÿùèõñÿ â ýòîì êàòàëîãå. Ïî óìîë÷àíèþ âûâîäèòñÿ èíôîðìàöèÿ î òåêóùåì êàòàëîãå. Êëþ÷è: -a îòîáðàæàåò âñå ôàéëû, â òîì ÷èñëå, íà÷èíàþùèåñÿ ñ .; -i óêàçûâàåò èíäåêñíûé äåñêðèïòîð êàæäîãî ôàéëà; -l ïîìèìî èìåíè ôàéëà îòîáðàæàåòñÿ òèï ôàéëà, ïðàâà äîñòóïà, ÷èñëî ññûëîê, èìÿ âëàäåëüöà è èìÿ ãðóïïû, ðàçìåð â áàéòàõ è äàòó ìîäèôèêàöèè; -t ñîðòèðîâêà ïî âðåìåíè ìîäèôèêàöèè (êëþ÷è c è u ìåíÿþò äåéñòâèå ýòîãî êëþ÷à); -c èñïîëüçîâàíèå âðåìåíè èçìåíåíèÿ ïðè ñîðòèðîâêå (ñ êëþ÷îì -t) èëè îòîáðàæåíèè (ñ êëþ÷îì -l); -u èñïîëüçîâàíèå âðåìåíè äîñòóïà ïðè ñîðòèðîâêå (ñ êëþ÷îì -t) èëè îòîáðàæåíèè (ñ êëþ÷îì -l); -r ñîðòèðóåò ñîäåðæèìîå êàòàëîãà â îáðàòíîì ïîðÿäêå; -k åñëè óñòàíîâëåí ðåæèì îòîáðàæåíèÿ ðàçìåðà, òî îí óêàçûâàåòñÿ â êèëîáàéòàõ; -s óêàçûâàåò ðàçìåð ôàéëà â áëîêàõ; -R îñóùåñòâëÿåò ðåêóðñèâíîå îòîáðàæåíèå âñåõ ïîäêàòàëîãîâ óêàçàííîãî êàòàëîãà; -1 (åäèíèöà) âûâîä äàííûõ â îäèí ñòîëáåö, ïî îäíîìó ôàéëó â êàæäîé ñòðîêå; color îòîáðàæàåò ôàéëû ðàçíîãî òèïà ðàçíûìè öâåòàìè (ðàáîòàåò íå äëÿ âñåõ âåðñèé UNIX).
66
file files
Îïðåäåëÿåò òèïû ôàéëîâ files. cp source [source2 ...] dest Êîìàíäà cp êîïèðóåò ôàéë source â öåëåâîé ôàéë dest. Åñëè öåëåâîé ôàéë dest ÿâëÿåòñÿ êàòàëîãîì, òî ôàéëû source, source2, ... êîïèðóþòñÿ â íåãî ïîä ñâîèìè
èìåíàìè. Òîëüêî â ýòîì ñëó÷àå ìîæíî óêàçûâàòü íåñêîëüêî èñõîäíûõ ôàéëîâ. Êëþ÷è: -R îñóùåñòâëÿåò ðåêóðñèâíîå êîïèðîâàíèå êàòàëîãà source. mv source [source2 ...] dest
Îñóùåñòâëÿåò ïåðåìåùåíèå/ïåðåèìåíîâàíèå ôàéëà source (ôàéëîâ source, source2, ...). ln file1 file2
Ñîçäàåò äëÿ ôàéëà file1 íîâóþ ññûëêó ñ èìåíåì file2. Êëþ÷è: -s ñîçäàåò ñèìâîëè÷åñêóþ ññûëêó. rm file
Óäàëÿåò óêàçàííûé ôàéë. Êëþ÷è: -r â ñëó÷àå óêàçàíèÿ èìåíè ôàéëà-êàòàëîãà îñóùåñòâëÿåò åãî ðåêóðñèâíîå óäàëåíèå; -f îñóùåñòâëÿåò óäàëåíèå ôàéëîâ áåç ïîäòâåðæäåíèÿ ñî ñòîðîíû ïîëüçîâàòåëÿ; -i òðåáóåò ïîäòâåðæäåíèÿ ñî ñòîðîíû ïîëüçîâàòåëÿ ïåðåä óäàëåíèåì êàæäîãî ôàéëà.
67
chmod mode file ...
Èçìåíåíèå ïðàâ äîñòóïà ê ôàéëó. Íîâûå ïðàâà äîñòóïà çàäàþòñÿ â ñòðîêå mode â âèäå [who]sign[permission]. Ïåðâîå ïîëå ýòîé ñòðîêè, îáîçíà÷åííîå êàê who, ìîæåò ñîäåðæàòü îäèí èëè íåñêîëüêî ñëåäóþùèõ ñèìâîëîâ: a óñòàíîâêà ïðàâ äîñòóïà äëÿ âñåõ ïîëüçîâàòåëåé (äåéñòâóåò ïî óìîë÷àíèþ); u << äëÿ âëàäåëüöà; g << äëÿ ÷ëåíîâ ãðóïïû; o << äëÿ ïðî÷èõ ïîëüçîâàòåëåé. Ïîëå sign ñîäåðæèò îäèí èç ñëåäóþùèõ ñèìâîëîâ: + óêàçàííûå ïðàâà äîáàâëÿþòñÿ; - << îòìåíÿþòñÿ; = óñòàíîâêà ïåðå÷èñëåííûõ ïðàâ è îòìåíà âñåõ ïðî÷èõ. Ïîëå permission ñîäåðæèò êîìáèíàöèþ ñëåäóþùèõ ñèìâîëîâ: x ïðàâî íà âûïîëíåíèå; r íà ÷òåíèå; w íà çàïèñü. Êëþ÷è: -R ðåêóðñèâíîå îïðåäåëåíèå ïðàâ äëÿ êàòàëîãà. Íàïðèìåð, êîìàíäà $ chmod o+r-wx mydata
ðàçðåøàåò äëÿ ïðî÷èõ ïîëüçîâàòåëåé ÷òåíèå èç ôàéëà mydata è îòìåíÿåò ïðàâà íà çàïèñü è âûïîëíåíèå ýòîãî ôàéëà.
68
find path expression
Îñóùåñòâëÿåò ïîèñê â ôàéëîâîì äåðåâå, íà÷èíàÿ îò êàòàëîãà path ôàéëîâ ïî ëîãè÷åñêîìó âûðàæåíèþ expression. Ýòî âûðàæåíèå ñòðîèòñÿ èç àòîìàðíûõ âûðàæåíèé ïî ñëåäóþùåìó ïðàâèëó. Åñëè íåñêîëüêî àòîìàðíûõ âûðàæåíèé îòäåëÿþòñÿ ïðîáåëàìè, òî ñ÷èòàåòñÿ, ÷òî îíè ñâÿçàíû îïåðàöèåé êîíúþíêöèÿ. Äèçúþíêöèÿ îáîçíà÷àåòñÿ êàê -o, îòðèöàíèå êàê !.  ñëó÷àå çàäàíèÿ ñëîæíîãî êðèòåðèÿ ïîèñêà, ïðè ôîðìèðîâàíèè âûðàæåíèÿ ìîæíî èñïîëüçîâàòü ñêîáêè, êîòîðûå çàïèñûâàþòñÿ êàê ïîñëåäîâàòåëüíîñòü èç ñèìâîëîâ: ïðîáåë, ñëýø \, ñêîáêà, ïðîáåë.  êà÷åñòâå àòîìàðíûõ âûðàæåíèé ìîãóò âûñòóïàòü ñëåäóþùèå êîíñòðóêöèè: -name file èñòèííî, åñëè èìÿ òåêóùåãî ôàéëà ñîâïàäàåò ñ øàáëîíîì file; -type x èñòèííî, åñëè òèï òåêóùåãî ôàéëà ñîâïàäàåò ñ îáðàçöîì x, â êà÷åñòâå êîòîðîãî ìîæåò ïðèñóòñòâîâàòü îäèí èç ñèìâîëîâ b, c, d, f, p, l, îïðåäåëÿþùèõ òèï èñêîìîãî ôàéëà; -user uname èñòèííî, åñëè âëàäåëüöåì ôàéëà ÿâëÿåòñÿ ïîëüçîâàòåëü ñ èìåíåì uname; -group gname àíàëîãè÷íî äëÿ ãðóïïû; -size n[c] èñòèííî, åñëè ðàçìåð òåêóùåãî ôàéëà ðàâåí n áëîêàì èëè n áàéòàì, åñëè óêàçàí ñèìâîë c. -atime n èñòèííî, åñëè áûë äîñòóï ê ôàéëó â ïîñëåäíèå n äíåé; -mtime n èñòèííî, åñëè áûëà ìîäèôèêàöèÿ ôàéëà â ïîñëåäíèå n äíåé. -newer file èñòèííî, åñëè òåêóùèé ôàéë áûë ìîäèôèöèðîâàí ïîçäíåå ôàéëà file. Íàïðèìåð, êîìàíäà $ find ~/doc -name f* \( -atime +7 -o -mtime +7 \)
69
èùåò â ïîäêàòàëîãå doc ïåðñîíàëüíîãî êàòàëîãà ïîëüçîâàòåëÿ âñå ôàéëû ñ èìåíàìè, íà÷èíàþùèìèñÿ íà f, ê êîòîðûì îñóùåñòâëÿëñÿ äîñòóï èëè êîòîðûå áûëè ìîäèôèöèðîâàíû â òå÷åíèå ïîñëåäíåé íåäåëè. Òàê êàê êîìàíäíàÿ ñòðîêà âíà÷àëå îáðàáàòûâàåòñÿ èíòåðïðåòàòîðîì shell, à çàòåì êîìàíäîé find, øàáëîí f* ñëåäóåò çàêëþ÷èòü â êàâû÷êè. Ýòî îòìåíèò ñïåöèàëüíîå äåéñòâèå ñèìâîëà * äëÿ shell, íî íå äëÿ êîìàíäû find. Êîìàíäû ïðîñìîòðà òåêñòîâûõ ôàéëîâ cat [files]
Ñ÷èòûâàåò ñîäåðæèìîå óêàçàííûõ ôàéëîâ è âûâîäèò åãî íà ñòàíäàðòíûé âûâîä. Åñëè ñïèñîê ôàéëîâ ïóñò, òî îñóùåñòâëÿåòñÿ ââîä äàííûõ ñî ñòàíäàðòíîãî ââîäà. Îáû÷íî èñïîëüçóåòñÿ äëÿ ïðîñìîòðà ñîäåðæèìîãî ôàéëîâ. Ïîçâîëÿåò, òàêæå, îñóùåñòâëÿòü êàòåíàöèþ (îáúåäèíåíèå) ôàéëîâ, íàïðèìåð, $ cat file1 file2 > file3
more [files]
Îòîáðàæàåò ôàéëû â ïîñòðàíè÷íîì ðåæèìå. Ïðè íàæàòèè íà êëàâèøó [Space] ïðîèñõîäèò îáíîâëåíèå âñåé ýêðàííîé ñòðàíèöû, [Enter] îäíîé íèæíåé ñòðîêè, [q] çàâåðøåíèå ðàáîòû êîìàíäû. man name
Ïðîñìîòð ñòðàíèö ýëåêòðîííîãî ðóêîâîäñòâà.
70
Êîìàíäû îáðàáîòêè òåêñòîâûõ ôàéëîâ grep pattern files Êîìàíäà grep îñóùåñòâëÿåò ïîèñê â ôàéëàõ èç ñïèñêà files ñòðîêè ñèìâîëîâ, ñîâïàäàþùèõ ñ îáðàçöîì pattern. Åñëè ñïèñîê files îïóùåí, òî ïîèñê îñóùåñòâëÿåòñÿ â ñòàíäàðòíîì ââîäå. Ýòî ïîçâîëÿåò âêëþ÷àòü êîìàíäó grep â êîíâåéåðû. Îáðà-
çåö äëÿ ïîèñêà ïðåäñòàâëÿåò ñîáîé ðåãóëÿðíîå âûðàæåíèå. Ðåãóëÿðíîå âûðàæåíèå ýòî ñòðîêà ñèìâîëîâ, ñîäåðæàùàÿ íåêîòîðûå ñïåöèàëüíûå ñèìâîëû, çàäàþùèå îáðàçåö èëè ìåñòî äëÿ ïîèñêà. Òàêèìè ñïåöèàëüíûìè ñèìâîëàìè ÿâëÿþòñÿ: ^ äåëàåò íà÷àëî ñòðîêè ÷àñòüþ èñêîìîãî îáðàçöà; $ äåëàåò êîíåö ñòðîêè ÷àñòüþ èñêîìîãî îáðàçöà; . çàìåíÿåò îäèí ïðîèçâîëüíûé ñèìâîë; * îáîçíà÷àåò íåñêîëüêî (íîëü è áîëåå) ñëåäóþùèõ äðóã çà äðóãîì ñèìâîëîâ, óêàçàííûõ ïåðåä *; [] îáîçíà÷àåò äèàïàçîí äîïóñòèìûõ ñèìâîëîâ, óêàçàííûé âíóòðè ñêîáîê. Åñëè çíàê ^ ïðèñóòñòâóåò â íà÷àëå êâàäðàòíûõ ñêîáîê [], òî ñëåäóþùèé çà íèì ñïèñîê çàäàåò ñèìâîëû, èñêëþ÷àåìûå èç ïîèñêà. Êëþ÷è. -a ïðîïóñêàòü áèíàðíûå ôàéëû. -i èãíîðèðóåò ðåãèñòð àëôàâèòíûõ ñèìâîëîâ. -l âûâîäèò òîëüêî èìåíà ôàéëîâ, ñîäåðæàùèõ çàäàííûé îáðàçåö. -n âûâîäèò íîìåðà ñòðîê è ñàìè ñòðîêè, ñîäåðæàùèå îáðàçåö. -v âûâîäèò ñòðîêè, íå ñîäåðæàùèå äàííûé îáðàçåö. -w âûâîäèò ñòðîêè, ñîäåðæàùèå çàäàííûé îáðàçåö â êà÷åñòâå îòäåëüíîãî ñëîâà.
71
Çàìåòèì, ÷òî ñïåöèàëüíûå ñèìâîëû â ðåãóëÿðíîì âûðàæåíèè èñïîëüçóþòñÿ íå ñîâñåì òàê, êàê â øàáëîííîì âûðàæåíèè. Âîçâðàùàåìîå çíà÷åíèå: 0 óêàçàííûé îáðàçåö íàéäåí; 1 îáðàçåö íå íàéäåí; 2 ïðè çàïèñè êîìàíäû äîïóùåíà ñèíòàêñè÷åñêàÿ îøèáêà. Ïðèìåðû: $ grep Please *
Ïîèñê âî âñåõ ôàéëàõ òåêóùåãî êàòàëîãà ñòðîê, â êîòîðûõ ñîäåðæèòñÿ ïîñëåäîâàòåëüíîñòü ñèìâîëîâ Please. $ grep ^Please *.txt
Ïîèñê âî âñåõ ôàéëàõ ñ ðàñøèðåíèåì txt òåêóùåãî êàòàëîãà ñòðîê, íà÷èíàþùèõñÿ ñ ïîñëåäîâàòåëüíîñòè Please. $ grep boxe[d-s] README*
Ïîèñê âî âñåõ ôàéëàõ òåêóùåãî êàòàëîãà, èìåíà êîòîðûõ íà÷èíàþòñÿ íà README, ïîñëåäîâàòåëüíîñòåé, ñîäåðæàùèõ ñî÷åòàíèÿ boxe è ïÿòûé ñèìâîë èç äèàïàçîíà d-s. $ grep ^F.*list *
Ïîèñê âî âñåõ ôàéëàõ òåêóùåãî êàòàëîãà ñòðîê, íà÷èíàþùèõñÿ íà F è ñîäåðæàùèõ ïîñëåäîâàòåëüíîñòü ñèìâîëîâ list. Îòìåòèì, ÷òî ñèìâîëû .*, ïðèñóòñòâóþùèå â ðåãóëÿðíîì âûðàæåíèè çàäàþò ïðîèçâîëüíóþ ïîñëåäîâàòåëüíîñòü ëþáûõ ñèìâîëîâ. $ ls -l | grep ^d
Âûâîäèò ñïèñîê ïîäêàòàëîãîâ òåêóùåãî êàòàëîãà.
$ ls lR /usr 2> /dev/null | grep ^[^l]
72
Âûâîäèò ðåêóðñèâíûé ñïèñîê âñåõ ôàéëîâ êàòàëîãà /usr, íå ÿâëÿþùèõñÿ ñèìâîëè÷åñêèìè ññûëêàìè ñ ïîäàâëåíèåì âñåõ äèàãíîñòè÷åñêèõ ñîîáùåíèé. Îáðàòèì âíèìàíèå íà òî, ÷òî â ðåãóëÿðíîì âûðàæåíèè ^[^l] ïåðâûé ñèìâîë ^ ÿâëÿåòñÿ óêàçàíèåì íà íà÷àëî ñòðîêè, âòîðîé óêàçûâàåò íà èñêëþ÷àåìûå ñèìâîëû. wc [file]
 çàâèñèìîñòè îò çíà÷åíèÿ êëþ÷à, ïîäñ÷èòûâàåò êîëè÷åñòâî ñëîâ, ñòðîê, ñèìâîëîâ â ôàéëå file. Åñëè èìÿ ôàéëà íå óêàçàíî, ïîäñ÷èòûâàåò ýòè ÷èñëîâûå äàííûå äëÿ ñòàíäàðòíîãî ââîäà. Êëþ÷è. -c ïîäñ÷åò ñèìâîëîâ. -l ïîäñ÷åò ñòðîê. -w ïîäñ÷åò ñëîâ. cmp file1 file2
Ñðàâíèâàåò óêàçàííûå ôàéëû è âûâîäèò ñïèñîê ðàçëè÷èé. Åñëè âìåñòî file1 óêàçàí ñèìâîë , èñïîëüçóåòñÿ ñòàíäàðòíûé ââîä. Êëþ÷è. -l âûâîäèò íîìåðà íåñîâïàäàþùèõ áàéòîâ è èõ êîäû. -s âîçâðàùàåò òîëüêî êîä çàâåðøåíèÿ: 0 åñëè ôàéëû ñîâïàäàþò, 1 â ïðîòèâíîì ñëó÷àå.
73
comm file1 file2
Ñðàâíèâàåò ïîñòðî÷íî óêàçàííûå ôàéëû è âûâîäèò ñïèñîê ðàçëè÷èé â òðè êîëîíêè: â ïåðâîé ñòðîêè, ñîäåðæàùèåñÿ òîëüêî â ôàéëå file1, âî âòîðîé òîëüêî â ôàéëå file2, â òðåòüåé îáùèå äëÿ îáîèõ ôàéëîâ. Êëþ÷è. -1, -2, -3 ïîäàâëåíèå âûâîäà ñîîòâåòñòâóþùåé êîëîíêè. cut c|flist [files]
Âûäåëÿåò èç êàæäîé ñòðîêè óêàçàííûõ ôàéëîâ çàäàííûå ïîëÿ è çàïèñûâàåò èõ íà ñòàíäàðòíûé âûâîä. Ïîëÿ çàäàþòñÿ àðãóìåíòîì list è ìîãóò áûòü ôèêñèðîâàííîé äëèíû (ïðè óêàçàíèè êëþ÷à c) èëè ïåðåìåííîé äëèíû (êëþ÷ f).  ñëó÷àå çàäàíèÿ ïîëåé ôèêñèðîâàííîé äëèíû ñïèñîê îïðåäåëÿåò ïîçèöèè ïîëåé, êîòîðûå çàäàþòñÿ â âèäå èõ íîìåðîâ èëè äèàïàçîíîâ íîìåðîâ. Íàïðèìåð, êîìàíäà $ cut c5,20-28 test
âûäåëÿåò èç êàæäîé ñòðîêè ôàéëà test ñèìâîëû, íàõîäÿùèåñÿ â ïîçèöèè 5 è ñèìâîëû, íàõîäÿùèåñÿ â ïîçèöèÿõ ñ 20-îé ïî 28-þ. Ïðè âûäåëåíèè ïîëåé ïåðåìåííîé äëèíû ñ÷èòàåòñÿ, ÷òî ñòðîêà ðàçäåëåíà íà ïîëÿ ðàçäåëèòåëÿìè. Ïî óìîë÷àíèþ òàêèì ðàçäåëèòåëåì ÿâëÿåòñÿ çíàê òàáóëÿöèè. Àðãóìåíò list ñîäåðæèò íîìåðà âûäåëÿåìûõ ïîëåé. Êëþ÷ d string ïîçâîëÿåò çàäàòü â ñòðîêå string ñïèñîê ðàçäåëèòåëåé ïîëåé. Íàïðèìåð, êîìàíäà $ cut f2 d test
âûäåëÿåò â ôàéëå test âòîðîå ñëîâî êàæäîé ñòðîêè, ïîñêîëüêó â êà÷åñòâå ðàçäåëèòåëÿ óêàçàí ïðîáåë.
74
tr [string1] [string2]]
Êîìàíäà tr êîïèðóåò ñòàíäàðòíûé ââîä íà ñòàíäàðòíûé âûâîä ñ çàìåíîé ëèáî óäàëåíèåì âûáðàííûõ ñèìâîëîâ. Ñèìâîë, íå âñòðå÷àþùèéñÿ â ñòðîêå string1, ïåðåäàåòñÿ íà ñòàíäàðòíûé âûâîä áåç èçìåíåíèé. Åñëè âî âõîäíîì ïîòîêå âñòðåòèòñÿ ñèìâîë, çàäàííûé â íåêîòîðîé ïîçèöèè string1, òî îí ïðåîáðàçîâûâàåòñÿ â ñèìâîë, ñòîÿùèé â òîé æå ïîçèöèè â ñòðîêå string2. Êëþ÷è. -c ñòðîêà string1 ïðåîáðàçîâûâàåòñÿ â ñòðîêó, óïîðÿäî÷åííóþ ïî âîçðàñòàíèþ êîäîâ; -d âñå âõîäíûå ñèìâîëû, ïðèíàäëåæàùèå ñòðîêå string1, áóäóò óäàëåíû; -s ïîñëåäîâàòåëüíîñòè îäèíàêîâûõ âõîäíûõ ñèìâîëîâ, ïðèíàäëåæàùèõ ñòðîêå string1, ñæèìàþòñÿ äî îäíîãî. ×òîáû ïîìåùàòü â ñòðîêè îòðåçêè àëôàâèòà è ïîâòîðÿþùèåñÿ ñèìâîëû, ìîæíî èñïîëüçîâàòü ñëåäóþùèå ñîêðàùåíèÿ: [c1c2] îáîçíà÷àåò öåïî÷êó ñèìâîëîâ, êîäû êîòîðûõ çàêëþ÷åíû â ïðîìåæóòêå îò êîäà ñèìâîëà c1 äî c2; [c*n] îáîçíà÷àåò ñèìâîë c, ïîâòîðåííûé n ðàç. Óïðàâëÿþùèé ñèìâîë \ ìîæíî èñïîëüçîâàòü, êàê è â shell, ÷òîáû îòìåíèòü òðàêòîâêó ñèìâîëà â ñòðîêå êàê ñïåöèàëüíîãî. Êðîìå òîãî, ñèìâîë \, çà êîòîðûì èäóò îäíà, äâå èëè òðè âîñüìåðè÷íûå öèôðû, îáîçíà÷àåò ñèìâîë, êîä ASCII êîòîðîãî âûðàæàåòñÿ ýòèìè öèôðàìè.
75
Ëàáîðàòîðíàÿ ðàáîòà ¹1. Çíàêîìñòâî ñ ÎÑ UNIX. Îáîëî÷êà Midnight Commander. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Îñóùåñòâèòå âõîä â ñèñòåìó. Ïðîñìîòðèòå ñïèñîê ïîëüçîâàòåëåé, ðàáîòàþùèõ â ñèñòåìå. Îñóùåñòâèòå âõîä â ñèñòåìó íà âòîðîì âèðòóàëüíîì òåðìèíàëå è âûõîä. Çàïóñòèòå îáîëî÷êó Midnight Commander. Ñäåëàéòå òåêóùèìè êàòàëîãè /sbin, /etc, /bin, äîìàøíèé êàòàëîã. Îïðåäåëèòå òèïû ôàéëîâ /usr/lib, /usr/include/float.h, /usr/share/info/gcc.info.gz, /bin/ls. Îñóùåñòâèòå çàïóñê ôàéëîâ /bin/date, /bin/hostname. Ñîçäàéòå â äîìàøíåì êàòàëîãå ïîäêàòàëîã lab. Óñòàíîâèâ íóæíûé ðåæèì îòîáðàæåíèÿ, îïðåäåëèòå âëàäåëüöà ýòîãî êàòàëîãà. Îïðåäåëèòå âëàäåëüöà ôàéëà /usr/share/doc/FAQ/FAQ10.html. Ñêîïèðóéòå ôàéë /usr/share/doc/FAQ/FAQ10.html â ñâîé äîìàøíèé êàòàëîã. Îïðåäåëèòå âëàäåëüöà ôàéëà ~/lab/FAQ10.html. Êàêîé èç ôàéëîâ /usr/share/doc/FAQ/FAQ10.html, ~/lab/FAQ10.html âû ñìîæåòå óäàëèòü? Ïðîâåðüòå îòâåò, ïîïûòàâøèñü îñóùåñòâèòü óäàëåíèå ýòèõ ôàéëîâ. Ñêîïèðóéòå â êàòàëîã ~/lab ôàéëû /usr/share/info/bcc.info.gz, /usr/share/misc/termcap, êàòàëîã /usr/include/net. Îñóùåñòâëÿÿ âûäåëåíèå ïî øàáëîíó, óäàëèòå âñå ôàéëû èç êàòàëîãà ~/lab, óäàëèòå êàòàëîã ~/lab. Êàêîé ôàéë â êàòàëîãå /bin èìååò ñàìûé áîëüøîé ðàçìåð, ñàìûé ìàëåíüêèé?
76
16. Êàêîé ôàéë èç êàòàëîãà /etc áûë ìîäèôèöèðîâàí ïîñëåäíèì? 17. Ê êàêîìó ôàéëó èç íàõîäÿùèõñÿ â êàòàëîãå /usr/bin áûë îñóùåñòâëåí ïîñëåäíèé äîñòóï? 18. Îïðåäåëèòå ñóììàðíûé ðàçìåð ôàéëîâ, íàõîäÿùèõñÿ â êàòàëîãå /usr/bin, èìåíà êîòîðûõ íà÷èíàþòñÿ íà n è çàêàí÷èâàþòñÿ ñèìâîëîì e. 19. Ñêîëüêî ôàéëîâ, èìåíà êîòîðûõ ñîñòîÿò èç òðåõ ñèìâîëîâ, ñîäåðæèòñÿ â êàòàëîãå /bin ? 20. Ñêîëüêî ôàéëîâ â êàòàëîãå /usr/bin èìåþò èìåíà, íà÷èíàþùèåñÿ íà g, è ñ îäåðæàùèå âòîðîé ñèìâîë èç äèàïàçîíà e, ... ,r.
77
Ëàáîðàòîðíàÿ ðàáîòà ¹2. Êîìàíäû óïðàâëåíèÿ êàòàëîãàìè. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Îïðåäåëèòå ïîëíîå èìÿ òåêóùåãî êàòàëîãà. Ïåðåéäèòå â êàòàëîã /bin. Ïåðåéäèòå â êàòàëîãè /usr, /usr/bin. Óáåäèòåñü, ÷òî Âû îêàçàëèñü â íóæíîì êàòàëîãå. Ïåðåéäèòå â êàòàëîã /usr/sbin, óêàçàâ îòíîñèòåëüíîå èìÿ ýòîãî êàòàëîãà. Ïåðåéäèòå â ñâîé ïåðñîíàëüíûé êàòàëîã. Ïðîñìîòðèòå ñîäåðæèìîå ñâîåãî êàòàëîãà. Ñäåëàéòå ýòî, âêëþ÷èâ ðåæèì îòîáðàæåíèÿ âñåõ ôàéëîâ. Íå âûõîäÿ èç ñâîåãî êàòàëîãà, ïðîñìîòðèòå ñîäåðæèìîå êàòàëîãà /bin. Ïðîñìîòðèòå ñîäåðæèìîå ýòîãî êàòàëîãà, âûâîäÿ ïîëíóþ èíôîðìàöèþ î íåì.  ñëó÷àå, åñëè ýòà èíôîðìàöèÿ íå ïîìåùàåòñÿ â îäíó ýêðàííóþ ñòðàíèöó, èñïîëüçóéòå ôèëüòð more. Âûâåäèòå ïîëíóþ èíôîðìàöèþ î ñîäåðæèìîì êàòàëîãà /etc, îñóùåñòâëÿÿ ñîðòèðîâêó ïî âðåìåíè äîñòóïà ê ôàéëàì. Îïðåäåëèòå, êàêîé ôàéë â êàòàëîãå /etc áûë ìîäèôèöèðîâàí ïîñëåäíèì. Âûâåäèòå ïîëíóþ èíôîðìàöèþ î êàòàëîãå /usr/bin, îñóùåñòâëÿÿ ñîðòèðîâêó ïî ðàçìåðó ôàéëîâ. Îïðåäåëèòå íîìåð èíäåêñíîãî äåñêðèïòîðà, ñîîòâåòñòâóþùåãî ôàéëó /bin/cat. Îïðåäåëèòå ïðàâà äîñòóïà ê êàòàëîãó /usr/sbin äëÿ ðàçíûõ êàòåãîðèé ïîëüçîâàòåëåé. Ìîæåòå ëè Âû óäàëèòü ôàéë /etc/profile? Èìååòå ëè Âû ïðàâî íà ÷òåíèå ôàé-
78
ëà /etc/passwd? 15. Íàõîäÿñü â êàòàëîãå /usr/local ñîçäàéòå â ñâîåì äîìàøíåì êàòàëîãå ïîäêàòàëîã ñ èìåíåì dir, óêàçûâàÿ âîçìîæíî áîëåå êîðîòêîå ïîëíîå èìÿ ñîçäàâàåìîãî êàòàëîãà. 16. Íàõîäÿñü â ñâîåì êàòàëîãå, ñîçäàéòå òàì ïîäêàòàëîã ñ èìåíåì dir2. 17. Óäàëèòå èç ñâîåãî êàòàëîãà ïîäêàòàëîãè dir1, dir2.
79
Ëàáîðàòîðíàÿ ðàáîòà ¹3. Êîìàíäû óïðàâëåíèÿ ôàéëàìè. 1. 2. 3. 4. 5. 6. 7. 8. 9.
Îïðåäåëèòå òèïû ôàéëîâ /usr/lib/compat, /bin/csh, /usr/lib/libc.a, /usr/lib/libcrypt.a, /etc/disktab, /etc/rc, /usr/share/info/dc.info.gz, /dev/ttyp1, /dev/fd0. Ïðîñìîòðèòå ñîäåðæèìîå ôàéëîâ /etc/rc.local, /etc/host.conf. Èñïîëüçóéòå äëÿ ïðîñìîòðà áîëüøèõ ôàéëîâ ôèëüòð more. Ñêîïèðóéòå â êàòàëîã ~/lab ôàéëû /usr/share/info/ptx.info.gz, /usr/lib/libdialog.so.3.0. Ñêîïèðóéòå â êàòàëîã ~/lab âñå ôàéëû èç êàòàëîãà /usr/share/info, èìåþùèå ðàñøèðåíèå gz, èìåíà êîòîðûõ íà÷èíàþòñÿ íà r. Ñêîïèðóéòå â êàòàëîã ~/lab êàòàëîã /usr/libdata âìåñòå ñî âñåì ñîäåðæèìûì. Óäàëèòå ôàéë ~/lab/libdialog.so.3.0. Óäàëèòå âñå ôàéëû èç êàòàëîãà ~/lab, èìåþùèå ðàñøèðåíèå gz. Îïðåäåëèòå ñóììàðíûé ðàçìåð êàòàëîãà ~/lab/libdata. Óäàëèòå êàòàëîã ~/lab/libdata.
80
Ëàáîðàòîðíàÿ ðàáîòà ¹4. Êîìàíäû óïðàâëåíèÿ ôàéëàìè. 1. 2.
Ñîçäàéòå â ñâîåì äîìàøíåì êàòàëîãå ïîäêàòàëîã lab2. Ñêîïèðóéòå â ýòîò êàòàëîã âñå ôàéëû èç êàòàëîãà /usr/share/info, èìåíà êîòîðûõ ñîäåðæàò â êà÷åñòâå ÷åòâåðòîãî ñèìâîë . è èìåþò ðàñøèðåíèå gz. 3. Î÷èñòèòå ñîäåðæèìîå êàòàëîãà ~/lab. 4. Ïåðåìåñòèòå â êàòàëîã ~/lab ôàéë ~/lab2/gmp.info.gz. 5. Ñîçäàéòå ôàéë ~/lab/inf, óñòàíîâèâ â êà÷åñòâå åãî ñîäåðæèìîãî ñâîþ ôàìèëèþ. Ñîçäàíèå ôàéëà ìîæíî îñóùåñòâèòü, âûïîëíèâ ïåðåíàïðàâëåíèå âûâîäà cat > èìÿ_ôàéëà. Çàâåðøåíèå êîìàíäû cat îñóùåñòâëÿåòñÿ íàæàòèåì êëàâèø [Ctrl+d]. 6. Ñîçäàéòå äëÿ ôàéëà ~/lab/inf ññûëêó â êàòàëîãå ~/lab, óñòàíîâèâ äëÿ íåå èìÿ inf2. 7. Îïðåäåëèòå íîìåðà èíäåêñíûõ äåñêðèïòîðîâ ôàéëîâ ~/lab2/gmp.info.gz, ~/lab/inf, ~/lab/inf2, êîëè÷åñòâî ññûëîê íà ýòè ôàéëû. Ñêîëüêî ôàéëîâ íàõîäèòñÿ â êàòàëîãå ~/lab? 8. Èñïîëüçóÿ âñòðîåííûé ðåäàêòîð îáîëî÷êè Midnight Commander, îòðåäàêòèðóéòå ñîäåðæèìîå ôàéëà ~/lab/inf2, äîáàâèâ òóäà èäåíòèôèêàòîð ñâîåé ñòóäåí÷åñêîé ãðóïïû. Èçìåíèëîñü ëè ñîäåðæèìîå ôàéëà ~/lab/inf? Èçìåíèòñÿ ëè ñîäåðæèìîå ôàéëà ~/lab/inf2, ïðè èçìåíåíèè ôàéëà ~/lab/inf? 9. Ñîçäàéòå äëÿ ôàéëà ~/lab/inf â êàòàëîãå ~/lab ñèìâîëè÷åñêóþ ññûëêó, óñòàíîâèâ äëÿ íåå èìÿ inf3. 10. Èñïîëüçóÿ øàáëîíû èìåí ôàéëîâ, îïðåäåëèòå, âûïîëíèâ îäíó êîìàíäó, òèïû ôàéëîâ inf, inf2 è inf3.
81
11. Îïðåäåëèòå íîìåðà èíäåêñíûõ äåñêðèïòîðîâ, ðàçìåðû ôàéëîâ, íàõîäÿùèõñÿ â êàòàëîãå ~/lab, ÷èñëî ññûëîê íà ýòè ôàéëû. 12. Ñ ïîìîùüþ êîìàíäû du ïðîñìîòðèòå èíôîðìàöèþ î ðàçìåðàõ êàòàëîãà ~/lab è íàõîäÿùèõñÿ òàì ôàéëîâ. Ïðîàíàëèçèðóéòå ïîëó÷åííóþ èíôîðìàöèþ: ðàçìåðû êàêèõ ôàéëîâ îòîáðàçèëèñü; êàê îíè ñîîòíîñÿòñÿ ñ ðàçìåðàìè, ïîëó÷åííûìè â ïðåäûäóùåì ïóíêòå; êàê ñîîòíîñèòñÿ ðàçìåð êàòàëîãà ~/lab ñ ñóììàðíûì ðàçìåðîì íàõîäÿùèõñÿ òàì ôàéëîâ? 13. Èñïîëüçóÿ âñòðîåííûé ðåäàêòîð îáîëî÷êè Midnight Commander, âûïîëíèòå ðåäàêòèðîâàíèå ôàéëà ~/lab/inf3, äîáàâèâ òóäà òåêóùóþ äàòó. Ñîäåðæèìîå êàêèõ ôàéëîâ èçìåíèëîñü? Êàê ýòî ïðîâåðèòü? 14. Èñïîëüçóÿ øàáëîíû èìåí ôàéëîâ, óäàëèòå èç êàòàëîãà ~/lab ôàéëû inf2 è inf3. Îïðåäåëèòå ÷èñëî ññûëîê íà ôàéë ~/lab/inf . 15. Î÷èñòèòå êàòàëîã ~/lab, óäàëèòå êàòàëîã ~/lab2.
82
Ëàáîðàòîðíàÿ ðàáîòà ¹5. Êîìàíäà ïîèñêà ôàéëîâ .ind. 1. 2. 3.
4. 5. 6. 7.
Ïðîâåðèòü, ñóùåñòâóåò ëè â ôàéëîâîé ñèñòåìå êîìïüþòåðà appmath ôàéë ñ èìåíåì fstab? Ñóùåñòâóåò ëè â êàòàëîãå /usr èëè â åãî ïîäêàòàëîãàõ ôàéë daily? Îñóùåñòâèòü ïîèñê â êàòàëîãå /usr/bin ôàéëîâ, èìåíà êîòîðûõ íà÷èíàþòñÿ íà ba. Îñóùåñòâèòü ïîèñê â êàòàëîãå /usr ôàéëîâ, èìåíà êîòîðûõ íà÷èíàþòñÿ íà bi. Îñóùåñòâèòü ïîèñê ñ âûâîäîì îò÷åòà â ôàéë bi_find1, ðàñïîëîæåííûé â ðàáî÷åì êàòàëîãå. Îðãàíèçîâàòü ïîèñê ñ âûâîäîì îò÷åòà â ôàéë bi_find2 è âûâîäîì ñîîáùåíèé îá îøèáêàõ â ôàéë bi_err. Îñóùåñòâèòü ïîèñê ñ ïåðåíàïðàâëåíèåì âñåé âûâîäèìîé èíôîðìàöèè â ôàéë bi_find3. Îñóùåñòâèòü ïîèñê â êàòàëîãå /usr êàòàëîãîâ, èìåíà êîòîðûõ íà÷èíàþòñÿ íà bi. Îïðåäåëèòü, ê êàêèì ôàéëàì èç êàòàëîãà /usr è åãî ïîäêàòàëîãîâ îñóùåñòâëÿëñÿ äîñòóï çà ïîñëåäíèå äâà äíÿ. Îñóùåñòâèòü ïîèñê â êàòàëîãå home âñåõ ôàéëîâ, èìåíà êîòîðûõ íà÷èíàþòñÿ íà bi, âëàäåëüöåì êîòîðûõ ÿâëÿåòåñü Âû. Îñóùåñòâèòü ïîèñê â êàòàëîãå etc è â åãî ïîäêàòàëîãàõ âñåõ ôàéëîâ, â èìåíè êîòîðûõ ïåðâûé èëè âòîðîé ñèìâîë a.
83
Ëàáîðàòîðíàÿ ðàáîòà ¹6. Ïîèñê ïî îáðàçöó, ïåðåíàïðàâëåíèå è êîíâåéåðèçàöèÿ. 1. Ïðîâåðèòü, ñîäåðæèòñÿ ëè â ôàéëàõ vip è fonts, íàõîäÿùèõñÿ â êàòàëîãå /usr/local/info ñëîâîñî÷åòàíèå In this chapter? 2. Îñóùåñòâèòü ïîèñê â êàòàëîãå /etc ôàéëîâ, ñîäåðæàùèõ ñëîâî List. 3. Âûïîëíèòü ïîèñê ñ ïîäàâëåíèåì âûâîäà äèàãíîñòè÷åñêîé èíôîðìàöèè î íåâîçìîæíîñòè äîñòóïà ê ôàéëó. 4. Âûâåñòè êîëè÷åñòâî ôàéëîâ êàòàëîãà /etc èç ÷èñëà òåõ, ê êîòîðûì Âû èìååòå äîñòóï, ñîäåðæàùèõ ñëîâî List. Óêàçàíèå: èñïîëüçóéòå êîìàíäó wc. 5. Ñîõðàíèòå â ôàéëå ~/flist ñïèñîê èìåí ôàéëîâ èç êàòàëîãà /usr/local/info, ñîäåðæàùèõ ñëîâî .ree, áåç âûâîäà ñòðîê, ñîäåðæàùèõ ýòî ñëîâî. 6. Âûïîëíèòå ïîèñê ôàéëîâ êàòàëîãà /usr/local/info, ñîäåðæàùèõ ñëîâî .ree â íà÷àëå ñòðîêè, ñ äîáàâëåíèåì èìåí íàéäåííûõ ôàéëîâ â êîíåö ôàéëà ~/flist. 7. Âûïîëíèòå ïîèñê ôàéëîâ â êàòàëîãå /usr/local/info, ñîäåðæàùèõ ñòðîêè, íà÷èíàþùèåñÿ íà and è âêëþ÷àþùèå íàáîð ñèìâîëîâ mail. 8. Âûâåñòè ñïèñîê ôàéëîâ êàòàëîãà /usr/local è åãî ïîäêàòàëîãîâ, èìåíà êîòîðûõ ñîäåðæàò ïîñëåäîâàòåëüíîñòü ñèìâîëîâ emacs. 9. Âûâåñòè êîëè÷åñòâî òàêèõ ôàéëîâ. 10. Âûâåñòè ñïèñîê ôàéëîâ, óäîâëåòâîðÿþùèõ óñëîâèþ ï.8, ÿâëÿþùèõñÿ îáû÷íûìè ôàéëàìè. Âûâåñòè êîëè÷åñòâî òàêèõ ôàéëîâ.
84
Ëàáîðàòîðíàÿ ðàáîòà ¹7. Óòèëèòû àðõèâèðîâàíèÿ è ñæàòèÿ. 1. 2. 3. 4.
Ïîìåñòèòå êàòàëîã /usr/include/arpa â àðõèâ ~/arpa.tar. Ïðîñìîòðèòå ñîäåðæèìîå àðõèâà ~/arpa.tar. Î÷èñòèòå êàòàëîã ~/lab. Ïåðåìåñòèòå àðõèâ ~/arpa.tar. â êàòàëîã ~/lab. Ðàçàðõèâèðóéòå ôàéë . ~/lab/arpa.tar. Ïðîñìîòðèòå ñòðóêòóðó ôàéëîâ, èçâëå÷åííûõ èç àðõèâà. 5. Äîáàâüòå â àðõèâ ~/lab/arpa.tar êàòàëîã /usr/include/nfs. Ïðîñìîòðèòå ñîäåðæèìîå ýòîãî àðõèâà. 6. Ñîæìèòå ôàéë ~/lab/arpa.tar. Ïðîñìîòðèòå ñîäåðæèìîå êàòàëîãà ~/lab. 7. Ïðîñìîòðèòå ñîäåðæèìîå ôàéëà arpa.tar.gz. 8. Ðàñïàêóéòå ôàéë arpa.tar.gz. Ïðîñìîòðèòå ñîäåðæèìîå êàòàëîãà ~/lab. 9. Ñîæìèòå âñå ôàéëû, íàõîäÿùèåñÿ â êàòàëîãå ~/lab/usr/include/arpa. Ïðîñìîòðèòå ñîäåðæèìîå ýòîãî êàòàëîãà. 10. Î÷èñòèòå êàòàëîã ~/lab. 11. Ñîæìèòå ôàéë /usr/include/net/if.h áåç åãî óäàëåíèÿ, ïîìåñòèâ óïàêîâàííûé ôàéë â êàòàëîã ~/lab è äàâ åìó èìÿ if.gz. 12. Ïðîäåëàéòå ýòó ïðîöåäóðó, óñòàíîâèâ íàèâûñøóþ è íàèìåíüøóþ ñòåïåíè ñæàòèÿ, äàâ óïàêîâàííûì ôàéëàì ñîîòâåòñòâåííî èìåíà if9.gz è if1.gz. Ñðàâíèòå ñòåïåíè ñæàòèÿ ôàéëîâ if.gz, if9.gz è if1.gz. 13. Îðãàíèçóÿ êîíâåéåð, çààðõèâèðóéòå âñå ôàéëû èç êàòàëîãà /usr/include/nfs, èìåíà êîòîðûõ íà÷èíàþòñÿ íà n, ñ ïîñëåäóþùèì ñæàòèåì àðõèâà. Óñòàíîâèòå äëÿ óïàêîâàííîãî ôàéëà èìÿ arc.tar.gz, ïîìåñòèâ åãî â êàòàëîã ~/lab.
85
Ëàáîðàòîðíàÿ ðàáîòà ¹8. Òåêñòîâûé ðåäàêòîð vi. Íàáðàòü â ðåäàêòîðå vi ñîäåðæèìîå àáçàöåâ 2, 3, 5 è ñîäåðæèìîå òàáëèöû êîìàíä ïåðåìåùåíèÿ êóðñîðà èç ãëàâû Òåêñòîâûé ðåäàêòîð vi. Ïîñëå ââîäà êàæäîãî àáçàöà îñóùåñòâëÿòü âûõîä èç ðåäàêòîðà ñ ñîõðàíåíèåì òåêñòà â ôàéëå ~/lab/vitext. Íàáðàòü â êîíöå ôàéëà ñîäåðæèìîå àáçàöà 4. Èñïîëüçóÿ áóôåð îáìåíà, ïåðåìåñòèòü åãî, âñòàâèâ ïîñëå àáçàöà 3.
86
Ëàáîðàòîðíàÿ ðàáîòà ¹9 Êîìàíäíûå ôàéëû: àðãóìåíòû, ââîä-âûâîä, îáðàáîòêà òåêñòîâûõ ñòðîê. Óêàçàíèå: âñå ñöåíàðèè íåîáõîäèìî íàáèðàòü è ðåäàêòèðîâàòü ñ ïîìîùüþ ðåäàêòîðà vi. Ðàáîòó êàæäîãî ñöåíàðèÿ íåîáõîäèìî ïðîâåðèòü ïóòåì åãî âûïîëíåíèÿ. 1. Ñîñòàâèòü ñöåíàðèé, âûâîäÿùèé íà ýêðàí âòîðîé àðãóìåíò, ââåäåííûé ïðè âûçîâå ýòîãî ñöåíàðèÿ. 2. Îñóùåñòâèòü âûâîä â ôîðìå: Âñåãî àðãóìåíòîâ:
Âòîðîé àðãóìåíò:
3. Ñîñòàâèòü ñöåíàðèé, âûâîäÿùèé íà ýêðàí ñòðîêó, ââåäåííóþ ïîëüçîâàòåëåì. Äèàëîã äîëæåí îñóùåñòâëÿòüñÿ â ñëåäóþùåé ôîðìå: Ââåäèòå ñòðîêó: ââåäåííàÿ ñòðîêà Áûëà ââåäåíà ñòðîêà: ââåäåííàÿ ñòðîêà
Îáåñïå÷üòå âñòàâêó ïðîáåëà ïîñëå äâîåòî÷èÿ â ïåðâîé ñòðîêå. 4. Ñîñòàâèòü ñöåíàðèè, ñîîáùàþùèå èíôîðìàöèþ îá èìåíè ïîëüçîâàòåëÿ â ôîðìå: Âàøå èìÿ: ðåãåñòðàöèîííîå_èìÿ
a) èñïîëüçóÿ íóæíóþ ñèñòåìíóþ ïåðåìåííóþ; b) íå èñïîëüçóþ íèêàêèå ïåðåìåííûå. 5. Ñîñòàâèòü ñöåíàðèé, îñóùåñòâëÿþùèé ïåðåèìåíîâàíèå ôàéëà, èìÿ êîòîðîãî óêàçàíî â êà÷åñòâå àðãóìåíòà. Íîâîå èìÿ äîëæíî ïîëó÷àòüñÿ äîáàâëåíèåì ê ñòàðîìó ðàñøèðåíèÿ bak. Ïîñëå ïåðåèìåíîâàíèÿ âûâåñòè ñîîáùåíèå â âèäå: Ôàéë ñòàðîå_èìÿ ïåðåèìåíîâàí â íîâîå_èìÿ.
87
6. Ñòðîêè òåêñòîâîãî ôàéëà ~/tst1 ñîñòîÿò èç ïîëåé, ðàçäåëåííûõ ïðîáåëîì. Ñîñòàâèòü ñöåíàðèé, âûâîäÿùèé íà ýêðàí ñîäåðæèìîå òðåòüåãî ñòîëáöà. 7. Ñîñòàâèòü ñöåíàðèé, âûâîäÿùèé íà ýêðàí ñîäåðæèìîå òðåòüåãî ïîëÿ ñòðîêè, ââåäåííîé ñ êëàâèàòóðû. Ïîëÿ ñòðîêè ðàçäåëÿþòñÿ ïðîáåëîì. Äèàëîã äîëæåí îñóùåñòâëÿòüñÿ â ñëåäóþùåé ôîðìå: Ââåäèòå ñòðîêó: ââåäåííàÿ ñòðîêà Òðåòüå ïîëå ñòðîêè: òðåòüå ïîëå âåäåííîé ñòðîêè
8. Ñîñòàâèòü ñöåíàðèé, îáåñïå÷èâàþùèé ââîä ñòðîêè ñ êëàâèàòóðû è âûâîä ïîëåé ýòîé ñòðîêè â ïîðÿäêå: 2, 4, 1, 3. Ïîëÿ ñòðîêè ðàçäåëÿþòñÿ ïðîáåëîì. 9. Ñîñòàâèòü ñöåíàðèé, îñóùåñòâëÿþùèé ïðèâåäåíèå âñåõ ñèìâîëîâ, ñîñòàâëÿþùèõ âòîðîé àðãóìåíò, ê âåðõíåìó ðåãèñòðó, è âûâîä âñåõ àðãóìåíòîâ ïîñëå ïðîâåäåííîãî ïðåîáðàçîâàíèÿ. 10. Ñîñòàâèòü ñöåíàðèé, îñóùåñòâëÿþùèé äëÿ êàòàëîãà, óêàçàííîãî â êà÷åñòâå àðãóìåíòà ñöåíàðèÿ, âûâîä äàííûõ î åãî ñîäåðæèìîì â ñëåäóþùåé ôîðìå: ïðàâà_äîñòóïà èìÿ_âëàäåëüöà èìÿ_ãðóïïû èìÿ_ôàéëà
11*. Ñîñòàâèòü ñöåíàðèé, îñóùåñòâëÿþùèé âûâîä èíôîðìàöèè î êàòàëîãå â ôîðìå: Èìÿ ôàéëà: file
Ðàçìåð â áëîêàõ: n