Download as pdf or txt
Download as pdf or txt
You are on page 1of 194

1

Ñîäåðæàíèå

1 Ëàáîðàòîðíàÿ ðàáîòà 1.

Ñîçäàíèå âèðòóàëüíîé ìàøèíû ñ FreeBSD 5

1.1 Âèðòóàëèçàöèÿ . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Ãèïåðâèçîðû - ýìóëÿòîðû àïïàðàòíîãî îáåñïå÷åíèÿ 5
1.1.2 VirtualBOX . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.3 Ñîçäàíèå âèðòóàëüíîé ìàøèíû . . . . . . . . . . . . 8
1.2 Îáùèå ñâåäåíèÿ î UNIX ñèñòåìàõ . . . . . . . . . . . . . . 9
1.2.1 Ôèëîñîôèÿ UNIX . . . . . . . . . . . . . . . . . . . . 9
1.2.2 Èñòîðèÿ UNIX . . . . . . . . . . . . . . . . . . . . . 10
1.2.3 Èñòîðèÿ BSD-ñèñòåì . . . . . . . . . . . . . . . . . . 11
1.2.4 Îáçîð ñîâðåìåííûõ BSD-ñèñòåì . . . . . . . . . . . 12
1.2.5 Îïèñàíèå è ñïîñîáû ïîëó÷åíèÿ FreeBSD . . . . . . . 13
1.3 Óñòàíîâêà FreeBSD . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.1 Ïîäãîòîâêà ê óñòàíîâêå . . . . . . . . . . . . . . . . 14
1.3.2 sysinstall . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.3 Ïîñëåóñòàíîâî÷íûå íàñòðîéêè . . . . . . . . . . . . 26
1.3.4 Ïðîöåññ çàãðóçêè îïåðàöèîííîé ñèñòåìû . . . . . . 29
1.3.5 Àâòîðèçàöèÿ â ñèñòåìå . . . . . . . . . . . . . . . . . 41
1.4 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó . . . . . . . . . . . . . . . 43
1.5 Ñîäåðæàíèå îò÷åòà . . . . . . . . . . . . . . . . . . . . . . . 43
1.6 Âîïðîñû äëÿ ñàìîêîíòðîëÿ . . . . . . . . . . . . . . . . . . 43

2 Ëàáîðàòîðíàÿ ðàáîòà 2. Çíàêîìñòâî ñ FreeBSD 45

2.1 Êîìàíäíûé èíòåðïðåòàòîð . . . . . . . . . . . . . . . . . . 45


2.1.1 Êàê ðàáîòàåò êîìàíäíûé èíòåðïðåòàòîð . . . . . . . 45
2.1.2 Îáçîð è îïèñàíèå êîìàíäíûõ èíòåðïðåòàòîðîâ . . . 45
2.1.3 Èçìåíåíèå èíòåðïðåòàòîðà ïî óìîë÷àíèþ . . . . . . 48
2.2 Îñíîâíûå êîìàíäû è íàâèãàöèÿ ïî ôàéëîâîé ñèñòåìå . . . 50
2.2.1 man - ñïðàâî÷íàÿ ñèñòåìà . . . . . . . . . . . . . . . 50
2.2.2 Íàâèãàöèÿ ïî ôàéëîâîé ñèñòåìå . . . . . . . . . . . 52
2.2.3 Ñòðóêòóðà ôàéëîâîé ñèñòåìû . . . . . . . . . . . . . 53
2

2.3 Ôàéëû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.3.1 Îïåðàöèè ñ ôàéëàìè è êàòàëîãàìè (ñîçäàíèå, ïðî-
ñìîòð, óäàëåíèå) . . . . . . . . . . . . . . . . . . . . 56
2.3.2 Ïåðåíàïðàâëåíèå, êàíàëû . . . . . . . . . . . . . . . 61
2.3.3 Ññûëêè . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.4 Ñòàíäàðòíûå êîìàíäû è óòèëèòû FreeBSD . . . . . . . . . 65
2.4.1 Ïîëüçîâàòåëüñêèå óòèëèòû . . . . . . . . . . . . . . 65
2.4.2 Óòèëèòû àäìèíèñòðèðîâàíèÿ . . . . . . . . . . . . . 68
2.4.3 alias'û . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2.5 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó . . . . . . . . . . . . . . . 71
2.6 Ñîäåðæàíèå îò÷åòà . . . . . . . . . . . . . . . . . . . . . . . 72
2.7 Âîïðîñû äëÿ ñàìîêîíòðîëÿ . . . . . . . . . . . . . . . . . . 72

3 Ëàáîðàòîðíàÿ ðàáîòà 3. Îáðàáîòêà òåêñòà 73

3.1 Òåêñòîâûå ðåäàêòîðû . . . . . . . . . . . . . . . . . . . . . 73


3.1.1 Îáçîð è ñðàâíåíèå òåêñòîâûõ ðåäàêòîðîâ . . . . . . 73
3.1.2 Òåêñòîâûå ðåäàêòîðû äëÿ äåâî÷åê . . . . . . . . . . 74
3.1.3 Òåêñòîâûå ðåäàêòîðû äëÿ ìàëü÷èêîâ . . . . . . . . . 74
3.1.4 Îñíîâû vi . . . . . . . . . . . . . . . . . . . . . . . . 75
3.1.5 Êîìàíäû :ex . . . . . . . . . . . . . . . . . . . . . . 80
3.2 Îñíîâû íàñòðîéêè ñèñòåìû . . . . . . . . . . . . . . . . . . 82
3.2.1 Êîíôèãóðàöèîííûå ôàéëû . . . . . . . . . . . . . . 82
3.2.2 Íàñòðîéêà bash . . . . . . . . . . . . . . . . . . . . . 86
3.3 Îáðàáîòêà òåêñòà . . . . . . . . . . . . . . . . . . . . . . . . 89
3.3.1 Óòèëèòû ôîðìàòèðîâàíèÿ òåêñòà . . . . . . . . . . . 89
3.3.2 Ïîòîêîâûå ðåäàêòîðû . . . . . . . . . . . . . . . . . 93
3.3.3 ßçûêè îáðàáîòêè âõîäíîãî ïîòîêà . . . . . . . . . . 94
3.3.4 Ñèñòåìà êîìïüþòåðíîé âåðñòêè TeX è ìàêðîïàêåò
LaTeX . . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.4 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó . . . . . . . . . . . . . . . 100
3.5 Ñîäåðæàíèå îò÷åòà . . . . . . . . . . . . . . . . . . . . . . . 101
3.6 Âîïðîñû äëÿ ñàìîêîíòðîëÿ . . . . . . . . . . . . . . . . . . 101
3

4 Ëàáîðàòîðíàÿ ðàáîòà 4. Ïðîãðàììèðîâàíèå âî FreeBSD103

4.1 Ïðîãðàììðîâàíèå íà ÿçûêå êîìàíäíîãî èíòåðïðåòàòîðà . . 103


4.1.1 Íàçíà÷åíèå è âîçìîæíîñòè shell-ïðîãðàììèðîâàíèÿ 103
4.1.2 Êîìàíäû â shell-ñêðèïòå . . . . . . . . . . . . . . . . 105
4.1.3 Ïåðåìåííûå è âçàèìîäåéñòâèå ñ ïîëüçîâàòåëåì . . . 106
4.1.4 Öèêëû, ëîãè÷åñêèå îïåðàòîðû . . . . . . . . . . . . 109
4.1.5 Ôóíêöèè è çàâåðøåíèå ñöåíàðèÿ . . . . . . . . . . . 119
4.2 Ïðîãðàììèðîâàíèå âî FreeBSD . . . . . . . . . . . . . . . . 123
4.2.1 Êîìïèëèðóåìûå ÿçûêè ïðîãðàììèðîâàíèÿ . . . . . 123
4.2.2 ßçûê Ñ . . . . . . . . . . . . . . . . . . . . . . . . . 124
4.2.3 Èíòåðïðåòèðóåìûå ÿçûêè ïðîãðàììèðîâàíèÿ . . . . 126
4.2.4 Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
4.3 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó . . . . . . . . . . . . . . . 146
4.4 Ñîäåðæàíèå îò÷åòà . . . . . . . . . . . . . . . . . . . . . . . 147
4.5 Âîïðîñû äëÿ ñàìîêîíòðîëÿ . . . . . . . . . . . . . . . . . . 147

5 Ëàáîðàòîðíàÿ ðàáîòà 5. Àäìèíèñòðèðîâàíèå FreeBSD 149

5.1 Ïîëüçîâàòåëè, ãðóïïû è ïðàâà äîñòóïà . . . . . . . . . . . 149


5.1.1 Ïðàâà äîñòóïà ê îáúåêòàì . . . . . . . . . . . . . . . 151
5.1.2 Èçìåíåíèå ïðàâ äîñòóïà . . . . . . . . . . . . . . . . 155
5.1.3 Äîáàâëåíèå è óäàëåíèå ó÷åòíûõ çàïèñåé ïîëüçîâàòåëÿ158
5.1.4 Óïðàâëåíèå ãðóïïàìè . . . . . . . . . . . . . . . . . 161
5.2 Óñòàíîâêà ïðèëîæåíèé . . . . . . . . . . . . . . . . . . . . . 162
5.3 Óñòàíîâêà ïðè ïîìîùè sysinstall . . . . . . . . . . . . . . . 164
5.3.1 Óñòàíîâêà èç ïàêàäæåé . . . . . . . . . . . . . . . . 165
5.3.2 Óñòàíîâêà èç ïîðòîâ . . . . . . . . . . . . . . . . . . 166
5.4 Àâòîìàòèçàöèÿ çàäàíèé . . . . . . . . . . . . . . . . . . . . 171
5.4.1 cron . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
5.4.2 at . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
5.5 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó . . . . . . . . . . . . . . . 175
5.6 Ñîäåðæàíèå îò÷åòà . . . . . . . . . . . . . . . . . . . . . . . 176
5.7 Âîïðîñû äëÿ ñàìîêîíòðîëÿ . . . . . . . . . . . . . . . . . . 177
4

6 Ëàáîðàòîðíàÿ ðàáîòà 6. Ðàáîòà â ñåòè 178

6.1 Ñîçäàíèå è íàñòðîéêà ñåòåâûõ èíòåðôåéñîâ . . . . . . . . . 178


6.1.1 Íàñòðîéêà ñåòåâûõ èíòåðôåéñîâ VirtualBox . . . . . 178
6.1.2 Íàñòðîéêà ñåòè â ñèñòåìå FreeBSD . . . . . . . . . . 179
6.2 Íàñòðîéêà ssh . . . . . . . . . . . . . . . . . . . . . . . . . . 185
6.3 Íàñòðîéêà LAMP ñåðâåðà . . . . . . . . . . . . . . . . . . . 187
6.3.1 Web-ñåðâåð Apache . . . . . . . . . . . . . . . . . . . 187
6.3.2 ÑÓÁÄ MySQL . . . . . . . . . . . . . . . . . . . . . 191
6.3.3 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
6.4 Ðàçâåðòûâàíèå Web-ïðèëîæåíèé . . . . . . . . . . . . . . . 193
6.5 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó . . . . . . . . . . . . . . . 193
5

1 Ëàáîðàòîðíàÿ ðàáîòà 1.

Ñîçäàíèå âèðòóàëüíîé ìàøèíû ñ FreeBSD

Öåëüþ ðàáîòû ÿâëÿåòñÿ èçó÷åíèå ñðåäñòâ âèðòóàëèçàöèè, çíàêîì-


ñòâî ñ UNIX ñèñòåìàìè è óñòàíîâêà îïåðàöèîííîé ñèñòåìû FreeBSD.

1.1 Âèðòóàëèçàöèÿ

1.1.1 Ãèïåðâèçîðû - ýìóëÿòîðû àïïàðàòíîãî îáåñïå÷åíèÿ

Ãèïåðâèçîð ýòî ïðîãðàììà, êîòîðàÿ ïîçâîëÿåò âûïîëíÿòü îäíîâðå-


ìåííóþ ðàáîòó íåñêîëüêèõ îïåðàöèîííûõ ñèñòåì íà îäíîì êîìïüþòåðå,
êîòîðûé íàçûâàåòñÿ õîñò-êîìïüþòåð. Ãèïåðâèçîð óïðàâëÿåò ðàçäåëåíè-
åì ðåñóðñîâ ðåàëüíîãî àïïàðàòíîãî îáåñïå÷åíèÿ ìåæäó íèìè, à òàêæå
îáåñïå÷èâàåò èõ âçàèìîäåéñòâèå äðóã ñ äðóãîì è ñ õîñò-êîìïüþòåðîì.
Ýìóëÿöèÿ àïïàðàòíîãî îáåñïå÷åíèÿ îñóùåñòâëÿåòñÿ ñåðâèñîì âèð-
òóàëüíîé ìàøèíû, êîòîðûé ýìóëèðóåò àïïàðàòíóþ ñðåäó. Òàêîé âèðòó-
àëüíûé êîìïüþòåð íàçûâàåòñÿ ãîñòåâûì êîìïüþòåðîì. Îïåðàöèîííàÿ
ñèñòåìà, ðàáîòàþùàÿ íà íåé, íå îáÿçàíà çíàòü, ÷òî âûïîëíÿåòñÿ íå íà ðå-
àëüíîì æåëåçå. Õîòÿ íåêîòîðûå ôóíêöèè (â ÷àñòíîñòè óñòàíîâêà ñèñòåì
àïïàðàòíîé âèðòóàëèçàöèè âíóòðè ãîñòåâîãî êîìïüþòåðà) çàáëîêèðîâà-
íû. Ñâÿçü ìåæäó ãîñòåâûìè ñèñòåìàìè, à òàêæå ãîñòåâîé ñèñòåìû ñ
õîñò-ñèñòåìîé, îáåñïå÷èâàåòñÿ ñ ïîìîùüþ âèðòóàëüíûõ ñåòåâûõ ñîåäèíå-
íèé.  íåêîòîðûõ ñëó÷àÿõ âîçìîæíà áîëåå òåñíàÿ èíòåãðàöèÿ. Íàïðèìåð
ãèïåðâèçîð VmWare â ñëó÷àå íàëè÷èÿ íà õîñò- è ãîñòåâîì êîìïüþòåðå
îïåðàöèîííûõ ñèñòåì ñåìåéñòâà Windows, ïîçâîëÿåò ïåðåìåùàòü ôàéëû
ìåòîäîì Drag-and-Drop.
Ãèïåðâèçîðû áûâàþò íåñêîëüêèõ òèïîâ:

- Àâòîíîìíûé èëè ãèïåðâèçîð ïåðâîãî òèïa èìååò ñâîè âñòðî-


åííûå äðàéâåðû óñòðîéñòâ è íå çàâèñèò îò áàçîâîé ÎÑ è åå íàñòðî-
åê. Òàê êàê àâòîíîìíûé ãèïåðâèçîð ðàáîòàåò íåïîñðåäñòâåííî íà
îáîðóäîâàíèè, òî îí áîëåå ïðîèçâîäèòåëåí. Ïðèìåðû òàêèõ ãèïåð-
âèçîðîâ: VMware ESX, Xen, Microsoft Hyper-V.
6

- Ãèïåðâèçîð íà îñíîâå áàçîâîé îïåðàöèîííîé ñèñòåìû, èëè


ãèïåðâèçîð âòîðîãî òèïà - ýòî êîìïîíåíò, ðàáîòàþùèé â îäíîì
êîëüöå ñ ÿäðîì îñíîâíîé ÎÑ (êîëüöî 0). Ãîñòåâîé êîä ìîæåò âûïîë-
íÿòüñÿ ïðÿìî íà ôèçè÷åñêîì ïðîöåññîðå, íî äîñòóï ê óñòðîéñòâàì
ââîäà-âûâîäà êîìïüþòåðà èç ãîñòåâîé ñèñòåìû îñóùåñòâëÿåòñÿ ÷å-
ðåç îáû÷íûé ïðîöåññ îñíîâíîé ÎÑ (ïðîöåññ óðîâíÿ ïîëüçîâàòå-
ëÿ). Ïðèìåðû òàêèõ ãèïåðâèçîðîâ: Microsoft Virtual PC, VMware
Workstation, Parallels, VirtualBox.

- Ãèáðèäíûé ãèïåðâèçîð cîñòîèò äâóõ ÷àñòåé: èç òîíêîãî ãèïåð-


âèçîðà, êîíòðîëèðóþùåãî ïðîöåññîð è ïàìÿòü, à òàêæå ðàáîòà-
þùåé ïîä åãî óïðàâëåíèåì ñïåöèàëüíîé ñåðâèñíîé ÎÑ â êîëüöå
ïîíèæåííîãî óðîâíÿ. ×åðåç ñåðâèñíóþ ÎÑ ãîñòåâûå ÎÑ ïîëó÷àþò
äîñòóï ê ôèçè÷åñêîìó îáîðóäîâàíèþ.

Êàæäàÿ âèðòóàëüíàÿ ìàøèíà ïðåäñòàåò ïåðåä ïîëüçîâàòåëåì êàê


ïîëíàÿ èëè ÷àñòè÷íàÿ êîïèÿ âñåãî àïïàðàòíîãî â âû÷èñëèòåëüíîé ñè-
ñòåìå, âêëþ÷àÿ ïðîöåññîð, ïðèâèëåãèðîâàííûå è íåïðèâèëåãèðîâàííûå
êîìàíäû, óñòðîéñòâà ââîäà-âûâîäà, ïðåðûâàíèÿ è ò.ä. Ïðè ïîïûòêå îá-
ðàòèòüñÿ ê òàêîìó âèðòóàëüíîìó àïïàðàòíîìó îáåñïå÷åíèþ íà óðîâíå
ïðèâèëåãèðîâàííûõ êîìàíä â äåéñòâèòåëüíîñòè ïðîèñõîäèò ñèñòåìíûé
âûçîâ ðåàëüíîé îïåðàöèîííîé ñèñòåìû, êîòîðàÿ è ïðîèçâîäèò âñå íåîáõî-
äèìûå äåéñòâèÿ. Òàêîé ïîäõîä ïîçâîëÿåò êàæäîìó ïîëüçîâàòåëþ çàãðó-
çèòü íåñêîëüêî òàê íàçûâàåìûõ ãîñòåâûõ îïåðàöèîííûõ ñèñòåì (Guest
OS) íà âèðòóàëüíûõ ìàøèíàõ âíóòðè áàçîâîé, ðåàëüíîé îïåðàöèîííîé
ñèñòåìû, ôóíêöèîíèðóþùåé íà ðåàëüíîì àïïàðàòíîì îáåñïå÷åíèè.
Íåäîñòàòêîì òàêèõ îïåðàöèîííûõ ñèñòåì ÿâëÿåòñÿ ñíèæåíèå ýô-
ôåêòèâíîñòè âèðòóàëüíûõ ìàøèí ïî ñðàâíåíèþ ñ ðåàëüíûì êîìïüþ-
òåðîì, è, êàê ïðàâèëî, îíè î÷åíü ãðîìîçäêè. Ïðåèìóùåñòâî  æå çà-
êëþ÷àåòñÿ â èñïîëüçîâàíèè íà îäíîé âû÷èñëèòåëüíîé ñèñòåìå ïðîãðàìì,
íàïèñàííûõ äëÿ ðàçíûõ îïåðàöèîííûõ ñèñòåì.
Ñðåäñòâà âèðòóàëèçàöèè èìåþò îäíó î÷åíü ïîëåçíóþ ôóíêöèþ.
Ïî æåëàíèè ïîëüçîâàòåëÿ â ëþáîé ìîìåíò âðåìåíè ìîæíî ñäåëàòü òàê
íàçûâàåìûé snapshot èëè ñíèìîê ôàéëîâîé ñèñòåìû. Ïîñëå ýòîãî äåëà-
7

Ðèñ. 1: Âàðèàíò âèðòóàëüíîé ìàøèíû

åòñÿ êîïèÿ òåêóùåé ôàéëîâîé ñèñòåìû è ïî æåëàíèþ (ïîñëå íåóäà÷íîãî


ýêñïåðèìåíòà) ìîæíî âîçâðàòèòüñÿ ê ñîñòîÿíèþ, êîòîðîå áûëî âî âðåìÿ
ñîçäàíèÿ ñíèìêà ôàéëîâîé ñèñòåìû.

1.1.2 VirtualBOX

Ñóùåñòâåò ìíîæåñòâî ðàçëè÷íûõ ãèïåðâèçîðîâ ïðåäíàçíà÷åíûõ äëÿ


âûïîëíåíèÿ ðàçíûõ çàäà÷. Äëÿ íàøèõ öåëåé ìû áóäåì èñïîëüçîâàòü
ðàçðàáîòêó êîìïàíèè Innotek Sun Microsystems Oracle ïîä íàçâàíèåì
VirtualBox. Òàêîé âûáîð îáóñëîâëåí òåì, ÷òî ýòà ïðîãðàììà ðàáîòàåò íà
ðàçëè÷íûõ ïëàòôîðìàõ è ñ ðàçëè÷íûìè ãîñòåâûìè ñèñòåìàìè (â îòëè-
÷èå îò ñðåäñòâ âèðòóàëèçàöèè îò Microsoft), à òàê æå èìååò áåñïëàòíóþ
âåðñèþ áåç êàêèõ ëèáî îãðàíè÷åíèé â ôóíêöèîíàëüíîñòè (â îòëè÷èå îò
ïðîäóêòîâ VmWare).
Èñòîðèÿ VirtualBox íà÷àëàñü ñ ïðîãðàììû QEMU - ñâîáîäíî ðàñ-
ïðîñòðàíÿåìîé ïðîãðàììû ýìóëÿöèè àïïàðàòíîãî îáåñïå÷åíèÿ. Äî ñèõ
ïîð QEMU íàõîäèòñÿ â ðàçðàáîòêå, íî òàê è íå äîøëà äî ïîëíîöåííî-
ãî ðåëèçà. Êîìïàíèÿ Innotek íà îñíîâå èñõîäíûõ êîäîâ QEMU ñîçäàëà
ïðîäóêò VirtualBox, ïåðâàÿ âåðñèÿ êîòîðîãî âûøëà â 2007 ãîäó. Â 2008
8

ãîäó Innotek áûëà ïðèîáðåòåíà êîìïàíèåé Sun Microsystems è VirtualBox


î÷åíü áûñòðî îáðåë ìíîæåñòâî ïîêëîííèêîâ.
VirtualBox ñóùåñòâóåò â äâóõ ðåäàêöèÿõ:

- VirtualBox Open Source Edition (OSE) - èìååò îòêðûòûå èñ-


õîäíûå êîäû ïî ëèöåíçèåé GNU/GPL, íî íåìíîãî îãðàíè÷åíà â
ôóíêöèîíàëüíîñòè.  ÷àñòíîñòè ïëîõàÿ ïîääåðæêà usb, à òàêæå îò-
ñóòñòâèå RDP-ñåðâåðà, êîòîðûé ïîçâîëÿåò óäàëåííî ïîäêëþ÷àòüñÿ
ê âèðòóàëüíîé ìàøèíå.

- VirtualBox binaries - ðàñïðîñòðàíÿåòñÿ ïîä ïðîïðèåòàðíîé ëè-


öåíçèåé PUEL (Personal Use and Evaluation License - áåñïëàòíî
òîëüêî äëÿ äîìàøíåãî ïîëüçîâàíèÿ) â áèíàðíîì âèäå è íå èìååò
íèêàêèõ îãðàíè÷åíèé.

Ñêà÷àòü VirtualBox ìîæíî áåñïëàòíî ñ îôèöèàëüíîãî ñàéòà -


www.virtualbox.org. Â ðàçäåëå Downloads âñåãäà ëåæèò ñàìàÿ ïîñëåäíÿÿ
âåðñèÿ ýòîé ïðîãðàììû.
Óñòàíîâêà VirtualBox íè÷åì íå îòëè÷àåòñÿ îò óñòàíîâêè îáû÷íîé
ïðîãðàììû. Çàïóñòèâ VirtualBox.exe (â âåðñèè äëÿ Windows) çàïóñêàåòñÿ
ìàñòåð, êîòîðûé ïðîâåäåò Âàñ ïî âñåì ïóíêòàì. ×òî êàñàåòñÿ êîìïîíåí-
òîâ, òî ëó÷øå âûáðàòü âñå. Òàê êàê ìíîãî ðåñóðñîâ îíè íå îòíèìàþò,
íî ìîãóò âñåãäà ïðèãîäèòüñÿ. Íå ïóãàéòåñü ñîîáùåíèÿ î òîì, ÷òî áóäóò
îòêëþ÷åíû ñåòåâûå èíòåðôåéñû. Ïîñëå âíåäðåíèÿ â ñåòåâîé äðàéâåð
êîäà (áèáëèîòåê) îò VirtualBox, ñåòü ïîÿâèòñÿ ñíîâà.  ñëó÷àå, åñëè
ïîÿâèòñÿ ñîîáùåíèå, ÷òî ýòî ÏÎ íå òåñòèðîâàëîñü íà ñîâìåñòèìîñòü ñ
Âàøåé ñèñòåìîé  âñå ðàâíî ñîãëàøàéòåñü ñ ïðîäîëæåíèåì óñòàíîâêè.
Óñòàíîâèâ VirtualBox, ìîæíî åãî çàïóñêàòü. Åñëè Âû ïîëüçóåòåñü
UNIX-like îïåðàöèîííîé ñèñòåìîé, òî íå çàáóäüòå, ÷òî äëÿ ðàáîòû ñ Vir-
tualBox Âû äîëæíû áûòü â ãðóïïå vboxusers.

1.1.3 Ñîçäàíèå âèðòóàëüíîé ìàøèíû

Ïåðâîå, ÷òî íåîáõîäèìî ñäåëàòü. ýòî ñîçäàòü âèðòóàëüíóþ ìàøèíó.


Íàæìèòå íà "Ìàøèíà"→ "Ñîçäàòü" è íàæìèòå Next íà ïåðâîé ñòðà-
9

íèöå ìàñòåðà. Íà ñëåäóþùåé ñòðàíèöå æåëàòåëüíî âûáðàòü Îïåðàöè-


îííàÿ ñèñòåìà BSD, âåðñèÿ FreeBSD. Ýòî ïîçâîëèò îïòèìèçèðîâàòü
âèðòóàëüíûå óñòðîéñòâà äëÿ ëó÷øåãî ñî÷åòàíèÿ ñ äðàéâåðàìè ñèñòåìû
FreeBSD.
Äàëüøå âûáåðèòå ðàçìåð îïåðàòèâíîé ïàìÿòè äëÿ âèðòóàëüíîé ìà-
øèíû. Ïîíÿòíî, ÷òî ÷åì áîëüøå  òåì ëó÷øå, íî íå çàáûâàéòå î òîì,
÷òî ýòà ïàìÿòü îòáèðàåòñÿ èç ïàìÿòè Âàøåãî êîìïüþòåðà. Ðåêîìåíäî-
âàíîå ìèíèìàëüíîå çíà÷åíèå äëÿ FreeBSD  64 ìá. Õîòÿ Ôðÿ ñïîñîáíà
ðàáîòàòü è íà 32-õ è íà 16-òè ìá îïåðàòèâíîé ïàìÿòè (ïîñëå õîðîøåé
îáðàáîòêè íàïèëüíèêîì è ïåðåêîìïèëÿöèé, âîçìîæíî äàæå íà 4-õ), ðåêî-
ìåíäóþ Âàì ñòàâèòü 128. Äàëåå Âàì ïðåäëîæèòñÿ ñîçäàòü âèðòóàëüíûé
æåñòêèé äèñê äëÿ ñèñòåìû. Êîòîðûé ìîæåò áûòü êàê äèíàìè÷íûì, òàê
è ñòàòè÷íûì1 . Äëÿ ðàáîòû Âàì õâàòèò 3 ãèãàáàéòà. Ïîñëå ýòîãî íàæìèòå
Ãîòîâî , è âèðòóàëüíàÿ ìàøèíà ñîçäàíà.
 íàñòðîéêàõ âèðòóàëüíîé ìàøèíû åñòü ìíîãî îïöèé. ß ðåêîìåí-
äóþ äëÿ íà÷àëà îòêëþ÷èòü äèñêåòû íà âêëàäêå "Ñèñòåìà", ïîääåðæêó
çâóêà íà âêëàäêå "Àóäèî" è ìîæíî ïðèñòóïàòü ê ðàáîòå. Ïîñëå çàïóñ-
êà âèðòóàëüíîé ìàøèíû ïîÿâèòñÿ ýêðàí BIOS è ñîîáùåíèå î òîì, ÷òî
íåâîçìîæíî çàãðóçèòüñÿ.

1.2 Îáùèå ñâåäåíèÿ î UNIX ñèñòåìàõ

1.2.1 Ôèëîñîôèÿ UNIX

Åñòü ìíîãî ïðè÷èí, ïî÷åìó UNIX ñèñòåìû ñòàëè ìîùíûìè è ïî-


ïóëÿðíûìè. Íî îñíîâíàÿ, ýòî åå ôèëîñîôèÿ. Èçíà÷àëüíî UNIX êàæåòñÿ
ñëîæíîé è çàïóòàííîé, íåïîíÿòíîé ñèñòåìîé, íî íà ñàìîì äåëå UNIX
ïðåäñòàâëÿåò ñîáîé ÿðêèé ïðèìåð ðàçðàáîòêè îïåðàöèîííîé ñèñòåìû ïî
ïðèíöèïó KISS  Keep It Simple, Stupid (äåëàé ïðîùå, äóðà÷îê, õîòÿ
åñòü è áîëåå âåæëèâàÿ ðàñøèôðîâêà  Keep It Short and Simple, äåëàé
êîðî÷å è ïðîùå). Ýòîò ïðèíöèï èìååò àíàëîãèþ ñ ïðèíöèïîì "áðèòâû
Îêêàìà êîòîðûé ãëàñèò, ÷òî íå ñëåäóåò ìíîæèòü ñóùíîñòè áåç íàäîáíî-
1 Ñòàòè÷åñêèé ñðàçó âûäåëÿåò âñå ïðîñòðàíñòâî äëÿ æåñòêîãî äèñêà, à äèíàìè÷åñêèé óâåëè÷èâàåò
åãî ïî ìåðå çàïîëíåíèÿ
10

ñòè.
Êîíñòðóêòèâíî UNIX áàçèðóþòñÿ íà ìíîæåñòâå íåáîëüøèõ ïðî-
ãðàìì, êàæäàÿ èç êîòîðûõ âûïîëíÿåò îäíó çàäà÷ó (îäíà ïðîãðàììà 
îäíà çàäà÷à). Êðîìå òîãî â UNIX çàëîæåíà çàìå÷àòåëüíàÿ èäåÿ: ïðè
íåîáõîäèìîñòè íåñêîëüêî ìàëåíüêèõ, íå ñâÿçàííûõ ìåæäó ñîáîé ïðî-
ãðàììîê ìîæíî îáúåäèíèòü â åäèíîå öåëîå, ðåøàÿ òåì ñàìûì çàäà÷è
ëþáîé ñëîæíîñòè.
Íàïðèìåð â îïåðàöèîííûõ ñèñòåìàõ Windows, äëÿ çàïèñè CD/DVD-
äèñêîâ åñòü ìíîãî ðàçëè÷íûõ ïðèëîæåíèé. Îáðàñòàÿ íîâûìè ôóíêöèÿìè
îíè óâåëè÷èâàþòñÿ â îáúåìå è òðåáîâàòåëüíîñòè ê ðåñóðñàì. Ñ óâåëè-
÷åíèåì ôóíêöèîíàëüíîñòè âîçðàñòàåò è êîëè÷åñòâî îøèáîê. Íàâåðíÿêà
ó Âàñ íà êîìïüþòåðå óñòàíîâëåíû è Nero, è Alcohol, è Daemon Tools,
êîòîðûå ïîçâîëÿþò çàïèñûâàòü îïòè÷åñêèå äèñêè.  UNIX ñèñòåìàõ åñòü
îäíà ñòàðàÿ óòèëèòêà cdrecord, êîòîðàÿ èìååò òîëüêî îäíó ôóíêöèþ
 çàïèñü ISO îáðàçà íà äèñê. Äëÿ ñîçäàíèÿ ISO îáðàçà åñòü óòèëèòà
makeisofs. Ðàçðàáîò÷èêè êàæäîé èç íèõ çàíèìàþòñÿ òîëüêî ôóíêöèÿìè
ñâîåé óòèëèòû, íå âìåøèâàÿñü â ðàçðàáîòêó äðóãèõ óòèëèò è íå îòÿãîùàÿ
ñâîè òåìè ôóíêöèÿìè, êîòîðûå ìîãóò áûòü âûïîëíåíû äðóãèìè óòèëè-
òàìè. Ãðàôè÷åñêèå ïðîãðàììû çàïèñè äèñêîâ èñïîëüçóþò makeisofs è
cdrecord èõ ïðåäîñòàâëÿÿ âñåãî ëèøü ãðàôè÷åñêèé èíòåðôåéñ ê íèì.
Ïîäîáíàÿ ñõåìà ðàçðàáîòêè äðóãèõ êîìïîíåíòîâ ñèñòåìû è äåëàåò
UNIX ñèñòåìû íàäåæíûìè è óñòîé÷èâûìè, õîòÿ âìåñòå ñ òåì îíè êàæóò-
ñÿ áîëåå ñëîæíûìè. Êëþ÷åâûå ýëåìåíòû ôèëîñîôèè UNIX:

- ïðîñòûå êîìàíäû

- êàíàëû ñîåäèíåíèÿ êîìàíä (î íèõ áóäåò ðàññêàçàíî ïîçæå)

- îáùèé ñòèëü èíòåðôåéñà

- ëþáîé îáúåêò  ôàéë

1.2.2 Èñòîðèÿ UNIX

Îïåðàöèîííàÿ ñèñòåìà UNIX ðîäèëàñü ñëó÷àéíî. Bell Laboratories


êîìïàíèè AT&T ïðèêëàäûâàëà íåìàëî óñèëèé äëÿ ðàçðàáîòêè íîâîé
11

îïåðàöèîííîé ñèñòåìû ïîä íàçâàíèåì Multics äëÿ ìàøèí êëàññà ìýéí-


ôðåéìîâ. Êåí Òîìïñîí (Kenneth Thompson), îäèí èç ðàçðàáîò÷èêîâ Ìóëü-
òèêñ, íàïèñàë â 1969-ì ãîäó èãðó "Space Travel"ïîä ðàçðàáàòûâàåìóþ ñè-
ñòåìó, íî åìó íå ïîíðàâèîñü íè ïðîèçâîäèòåëüíîñòü ìýéíôðåéìà íè ñòî-
èìîñòü âðåìåíè åãî èñïîëüçîâàíèÿ. Ñ ïîìîùüþ Äåííèñà Ðèò÷è (Dennis
MacAlistair Ritchie) îí ïåðåïèñàë åå äëÿ ðàáîòû íà ìèíè-êîìïüþòåðå2
PDP-7. Âî âðåìÿ ïåðåïèñûâàíèÿ èãðû ïàðàëåëüíî áûëè íàïèñàíû ôàé-
ëîâàÿ ñèñòåìà, óòèëèòû è ÿäðî òîãî, ÷òî âïîñëåäñòâèè è ñòàëî UNIX.
 1969 Bell Labs âûøëà èç ïðîåêòà Multics è ïðîãðàììèñòû Com-
puting Science Research Center îñòàëèñü áåç âû÷èñëèòåëüíîé ñðåäû. Íî ê
ýòîìó âðåìåíè óæå áûëè ãîòîâû ïåðâûå ðàáî÷èå âåðñèè UNIX, êîòîðàÿ
áûëà íàïèñàíà ïîëíîñòüþ íà àññåìáëåðå äëÿ DEC PDP-7. Ïîòîì åå ïå-
ðåïèñàëè ïîä DEC PDP-11, à â 1973 ãîäó îíà áûëà ïåðåïèñàíà íà ÿçûê
Ñ, êîòîðûé áûë ðàçðàáîòàí Äåíèññîì Ðèò÷è ñïåöèàëüíî äëÿ ýòîé öåëè.
Ýòî ïîçâîëèëî îñâîáîäèòüñÿ îò ïðèâÿçêè ê àðõèòåêòóðå êîìïüþòåðà.
Ñîçäàíèå ÿçûêà Ñ è îïåðàöèîííîé ñèñòåìû UNIX - äâå ñàìûå âàæ-
íûå âåõè â êîìïüþòåðíîé èíäóñòðèè.

1.2.3 Èñòîðèÿ BSD-ñèñòåì

AT&T â ïðèíöèïå íå çàíèìàëàñü êîìïüþòåðíûì áèçíåñîì, ïîýòî-


ìó îíà çà ñîâñåì íåáîëüøóþ ïëàòó ðàçäàâàëà UNIX ñèñòåìû ðàçëè÷-
íûì ïðàâèòåëüñòâåííûì ó÷ðåæäåíèÿì è óíèâåñèòåòàì.  70-õ UNIX
ñèñòåìû ñòîÿëè íà 80% óíèâåðñèòåòñêèõ êîìïüþòåðîâ. Îäíîé èç ïåð-
âûõ îðãàíèçàöèé âïëîòíóþ çàíÿâøèõñÿ ðàáîòîé íàä UNIX, ñòàëà ãðóïïà
èç Êàëèôîðíèéñêîãî óíèâåðñèòåòà Áåðêëè - Computer System Research
Group. Ýòîìó ñïîñîáñòâîâàë è òîò ôàêò, ÷òî â 1975 ãîäó Êåí Òîìï-
ñîí îñòàâèë Bell Labs è ïåðåøåë â îòäåë êîìïüþòåðíûõ èññëåäîâàíèé
â Áåðêëè. Â ðàáîòå íàä ðàñøèðåíèåì ñèñòåìû åìó àêòèâíî ïîìîãàë
ñòóäåíò-âûïóñêíèê Áèëë Äæîé (Bill Joy). Êàëèôîðíèéñêèå ñòóäåíòû
è ïðåïîäàâàòåëè âíåñëè çíà÷èòåëüíûé âêëàä â ñèñòåìó UNIX. Èçìå-
íåííàÿ è ñêîððåêòèðîâàíàÿ â óíèâåðñèòåòå âåðñèÿ áûëà âûïóùåíà ïîä

2 õîòÿ â ðåàëüíîñòè îí ðàçìåðîì ñî øêàô


12

íàçâàíèåì Berkeley Software Distribution, èëè BSD. Íàèáîëåå çíà÷èìûå


èçìåíåíèÿ, ñäåëàííûå â Áåðêëè, - ýòî ðåäàêòîð vi, êîìàíäíûé ïðîöåññîð
Ñ (C shell).
 êîíöå 70-õ ãîäîâ ïðîèçîøëî âàæíîå ñîáûòèå: Ìèíèñòåðñòâî Îáî-
ðîíû ÑØÀ îáúÿâèëî, ÷òî åå ïîäðàçäåëåíèå Advanced Research Project
Agency áóäåò èñïîëüçîâàòü UNIX è ÷òî â êà÷åñòâå áàçîâîé ïðèíÿòà âåð-
ñèÿ ðàçðàáîò÷èêîâ èç Áåðêëè. Áëàãîäàðÿ ýòîìó, UNIX ñòàëà ïðîäâèãàòü-
ñÿ âïåðåä ïî ïóòè ñîâåðøåíñòâîâàíèÿ ñèñòåìû.
 ýòî âðåìÿ Áèëë Äæîé îñòàâèë óíèâåðñèòåòñêèé ãîðîäîê è îñíî-
âàë êîìïàíèþ Sun Microsystems.  êà÷åñòâå îïåðàöèîííîé ñèñòåìû íà
ñåðâåðàõ è ðàáî÷èõ ñòàíöèÿõ ñòàëà èñïîëüçîâàòüñÿ ïðîèçâîäíàÿ îò BSD,
èçâåñòíàÿ êàê SunOS (Solaris).

1.2.4 Îáçîð ñîâðåìåííûõ BSD-ñèñòåì

Áîëüøàÿ ÷àñòü èñõîäíîãî êîäà BSD ñèñòåì áûëà äîñòóïíà áåñïëàò-


íî. Ïîýòîìó êàê òîëüêî ìîùíîñòè è àðõèòåêòóðà x86 ñèñòåì ïîçâîëèëà,
BSD áûëà íà íåå ïîðòèðîâàíà â 1991 ãîäó (386BSD).
 1993 ãîäó ïîñëå òîãî, êàê áûëî ðåøåíî îáðàòèòü áîëüøå âíè-
ìàíèÿ íà UNIX ñèñòåìû íà x86 ïëàòôîðìàõ, íà îñíîâå 386BSD áûëè
ñîçäàíû äâà íîâûõ ïðîåêòà. Èòîãîì ïåðâîãî ñòàëî ïîÿâëåíèå NetBSD,
ãëàâíîå âíèìàíèå â êîòîðîì óäåëÿëîñü äîñòóïíîñòè è óíèâåðñàëüíîñòè
ñèñòåìû. NetBSD â äàííîå âðåìÿ ñïîñîáíà ðàáîòàòü íà àáñîëþòíî ëþáîé
âû÷èñëèòåëüíîé ïëàòôîðìå.
Âòîðîé ïðîåêò ïîðîäèë FreeBSD. Â íåì îñíîâíîå âíèìàíèå áûëî
ñêîíöåíòðèðîâàíî íà òîì, ÷òî áû ñèñòåìà ñòàëà ïðîùå â èñïîëüçîâàíèè.
 1995-ì ãîäó íà îñíîâå NetBSD áûëà ñîçäàíà ëó÷øàÿ èç BSD
ñèñòåì - OpenBSD. Ïðè åå ðàçðàáîòêå, îñíîâíîå âíèìàíèå óäåëÿåòñÿ íà-
äåæíîñòè è áåçîïàñíîñòè. Òàê, äàæå îøèáêà â òåêñòå ñïðàâî÷íîé ñëóæáû
ÿâëÿåòñÿ êðèòè÷åñêîé è èñïðàâëÿåòñÿ íåçàìåäëèòåëüíî. À ëþáîé êîä,
ïðåæäå ÷åì áóäåò âêëþ÷åí â ñèñòåìó, äîëãî èçó÷àåòñÿ îòâåòñòâåííûìè
çà äàííóþ ÷àñòü ñèñòåìû. Ïðîãðàììû â áèíàðíîì âèäå (â òîì ÷èñëå
äðàéâåðà) çàïðåùåíî âêëþ÷àòü â ñîñòàâ OpenBSD.
Çà ïîñëåäíèå ãîäû íà áàçå ýòèõ òðåõ ñèñòåì áûëî ðàçðàáîòàíî
13

ìíîæåñòâî äî÷åðíèõ.  ÷àñòíîñòè äëÿ âûñîêîíàãðóæåííûõ ìíîãîïðîöåñ-


ñîðíûõ ñèñòåì DragonFlyBSD (îñíîâàíà íà FreeBSD), ìàëåíüêàÿ ñèñòåìà
ðàçìåðîì 1.44 Ìá - CloseBSD (îñíîâàíà íà OpenBSD) è äâå ñèñòåìû,
êîòîðûå ïðåäíàçíà÷åíû äëÿ ðàáî÷èõ ñòàíöèé: PC-BSD è DesktopBSD
(îáå îñíîâàíû íà FreeBSD).

1.2.5 Îïèñàíèå è ñïîñîáû ïîëó÷åíèÿ FreeBSD

Ñóùåñòâóåò ìíîæåñòâî ïðè÷èí âûáîðà FreeBSD. Êàê è áîëüøèí-


ñòâî UNIX ñèñòåì îíà áåñïëàòíà è ÷åðåçâû÷àéíî ñòàáèëüíà.  îòëè÷èå îò
äðóãèõ UNIX-ñèñòåì îíà èäåò ïîä ëèöåíçèåé BSD, êîòîðàÿ íàêëàäûâàåò
åùå ìåíüøå îãðàíè÷åíèé3 ÷åì GPL è åé ïîäîáíûå.  îòëè÷èå îò äðó-
ãè UNIX-like ñèñòåì, FreeBSD áîëåå êîíñåðâàòèâíà, ñîîòâåòñòâóåò âñåì
ñòàíäàðòàì POSIX è íå ïðèâåòñòâóåò íîâøåñòâ íå èñïûòàííûõ âðåìåíåì.
Ïîýòîìó åñëè Âàì íóæåí áåñïëàòíûé, íàäåæíûé è ôóíêöèîíàëüíûé
ñåðâåð - FreeBSD ëó÷øèé âûáîð.
Ðàñöâåò FreeBSD áûë âî âðåìÿ áóìà äîòêîìîâ. Òîãäà ýòî áûëà
îñíîâíàÿ îïåðàöèîííàÿ ñèñòåìà äëÿ ñåðâåðîâ. Íî è ñåé÷àñ îíà ÿâëÿåòñÿ
ïîïóëÿðíîé ñåðâåðíîé ñèñòåìîé4 .
Íà FreeBSD ìîæíî ïîäíÿòü ëþáûå ñåðâèñû, îò DNS/ôàéë/Web
ñåðâåðîâ, äî âûñîêîïðîèçâîäèòåëüíûõ êëàñòåðîâ. FreeBSD âû ñâîáîä-
íî ìîæåòå ñêà÷àòü ñ îôèöèàëüíîãî ñàéòà ïðîåêòà. Òàê æå âû ìîæåòå
çàêàçàòü çà íåáîëüøóþ ïëàòó (îáû÷íî ýòî ñòîèìîñòü ÷èñòîãî äèñêà, ñòî-
èìîñòü çàïèñè è ñòîèìîñòü äîñòàâêè) ó îäíîãî èç ðàñïðîñòðàíèòåëåé
ñâîáîäíûõ îïåðàöèîííûõ ñèñòåì, êîòîðûå ñóùåñòâóþò â ëþáîì äîñòà-
òî÷íî áîëüøîì ãîðîäå.
FreeBSD ñóùåñòâóåò â íåñêîëüêèõ âåðñèÿõ: CURRENT, STABLE è
RELEASE.
Ó÷àñòíèêè ïðîåêòà ðàçðàáàòûâàþò âåòêó CURRENT (¾òåêóùàÿ¿
âåðñèÿ) è STABLE (¾ñòàáèëüíàÿ¿, ñòàáèëüíîñòü îçíà÷àåò ãàðàíòèþ íåèç-

3 Ïî÷òè âîîáùå íå íàêëàäûâàåò. Íåîáõîäèìî òîëüêî ñîõðàíèòü èìÿ àâòîðà è òåêñò ëèöåíçèè, à òàê
æå çàïðåùåíî èñïîëüçîâàòü èìÿ àâòîðà â ïðîäâèæåíèè ïðîäóêòà.
4 Òî÷íûõ äàííûõ íå ñóùåñòâóåò, íî ïî íåêîòîðûì îöåíêàì äî 15% ñåðâåðîâ îáñëóæèâàþòñÿ
ñèñòåìîé FreeBSD. Ïî ñòàòèñòèêå Web-ñåðâåðîâ, FreeBSD óñòàíîâëåíà íà 9% Web-ñåðâåðîâ. Ïî
äàííûì 2006-ãî ãîäà FreeBSD áûëà óñòàíîâëåíà íà áîëåå ÷åì 50% ñåðâåðîâ â ñòðàíàõ ÑÍÃ.
14

ìåííîñòè èíòåðôåéñîâ, êàê òî API, ABI è òàê äàëåå). Íîâûé êîä ïîìå-
ùàþò â âåòêó CURRENT, ãäå îí ïîëó÷àåò áîëåå øèðîêîå òåñòèðîâàíèå.
Íîâûå ôóíêöèè, äîáàâëåííûå â CURRENT, ìîãóò îñòàòüñÿ â ñèñòåìå èëè
îò íèõ ìîãóò îòêàçàòüñÿ, åñëè ðåàëèçàöèÿ îêàæåòñÿ íåóäà÷íîé. Èíîãäà
ýòà âåðñèÿ ìîæåò îêàçàòüñÿ â íåïðèãîäíîì äëÿ èñïîëüçîâàíèÿ ñîñòîÿ-
íèè. STABLE-âåðñèÿ ñîäåðæèò òîëüêî òå íîâîââåäåíèÿ, êîòîðûå ïðîøëè
ïðîâåðêó â CURRENT. Òåì íå ìåíåå, ýòà âåðñèÿ òîæå ïðåäíàçíà÷åíà, â
îñíîâíîì, äëÿ ðàçðàáîò÷èêîâ. Íå ðåêîìåíäóåòñÿ îáíîâëÿòü îòâåòñòâåí-
íûå ðàáî÷èå ñåðâåðû äî STABLE, ïðåäâàðèòåëüíî å¼ íå ïðîòåñòèðîâàâ.
Íà îñíîâå STABLE ðåãóëÿðíî ñîçäàþòñÿ òùàòåëüíî ïðîòåñòèðîâàííûå
ðàçðàáîò÷èêàìè, ãðóïïîé release-èíæåíåðîâ è áîëåå øèðîêèì êðóãîì
ïîëüçîâàòåëåé, RELEASE-âåðñèè.
 äàííîì êóðñå ëàáîðàòîðíûõ ðàáîò èñïîëüçóåòñÿ âåðñèÿ 8.0 RELEASE.

1.3 Óñòàíîâêà FreeBSD

1.3.1 Ïîäãîòîâêà ê óñòàíîâêå

Óñòàíîâêà FreeBSD äîñòàòî÷íî ïðîñòîé ïðîöåññ.  äîïîëíåíèå ê


îïèñàíèþ ïðîöåññà óñòàíîâêè, êîòîðûé èäåò äàëåå, âû ìîæåòå ïîñåòèòü
îôèöèàëüíûé ñàéò ïðîåêòà FreeBSD, íà êîòîðîì åñòü ïîëíàÿ äîêóìåí-
òàöèÿ íà ðóññêîì ÿçûêå (â ðàñïå÷àòàíîì âàðèàíòå çàíèìàþùàÿ îêîëî
1400 ñòðàíèö ôîðìàòà À4), â êîòîðîé îïèñàí è ïðîöåññ óñòàíîâêè è âñÿ
èíôîðìàöèÿ, íåîáõîäèìàÿ äëÿ ðàáîòû ñ FreeBSD. Ýòà äîêóìåíòàöèÿ òàê
æå åñòü íà äèñêå Free316.iso.
Ïåðåä óñòàíîâêîé íåîáõîäèìî âñå òùàòåëüíî ñïëàíèðîâàòü, à òàê
æå ïðîâåðèòü íåò ëè íåïîääåðæèâàåìîãî îáîðóäîâàíèÿ. Ïëàíèðîâàíèå
çàéìåò ìåíüøå âðåìåíè, ÷åì ïåðåóñòàíîâêà ñèñòåìû, êîòîðàÿ îáÿçàòåëü-
íî ïîòðåáóåòñÿ, åñëè ÷òî-òî ïîéäåò íå òàê.
Äëÿ íà÷àëà ñëåäóåò ïîäêëþ÷èòü DVD èëè CD ISO-îáðàç ê âèðòó-
àëüíîé ìàøèíå è âêëþ÷èòü åå. Ïîñëå çàãðóçêè BIOS íà÷íåòñÿ çàãðóçêà
ñðåäû ïðåäóñòàíîâêè îïåðàöèîííîé ñèñòåìû. Âíà÷àëå Âû óâèäèòå ýêðàí
ïðèâåòñòâèÿ îïåðàöèîííîé ñèñòåìû, â êîòîðîì ñ ïîìîùüþ öèôðîâûõ
15

êëàâèø Âû ìîæåòå âûáðàòü æåëàåìûé ðåæèì çàãðóçêè, î êîòîðûõ ìû


ïîãîâîðèì ïîçæå. Ñåé÷àñ æå íàæìèòå 1 èëè Enter . Ïîñëå ýòîãî
Âû óâèäèòå ýêðàí Device Probe, íà êîòîðîì îòîáðàæàþòñÿ ðåçóëüòàòû
òåñòèðîâàíèÿ óñòðîéñòâ. Åñëè óñòðîéñòâî íå íàéäåíî, òî åãî íå áóäåò
â ñïèñêå. Ïîääåðæêó äîïîëíèòåëüíûõ óñòðîéñòâ ìîæíî áóäåò äîáàâèòü
ïîçæå, ñîáðàâ ñîáñòâåííîå ÿäðî5 îïåðàöèîííîé ñèñòåìû âìåñòî ÿäðà ïî
óìîë÷àíèþ, êîòîðîå íàçûâàåòñÿ GENERIC.
Ïîñêîëüêó çàãðóçêà ïðîèñõîäèò áûñòðî, òî, ÷òî áû ïîñìîòðåòü ñïè-
ñîê îáíàðóæåííûõ óñòðîéñòâ, ìîæíî íàæàòü Scroll Lock è èñïîëüçóÿ
ñòðåëêè ↑ è ↓ , ïðîìîòàòü ýêðàí íàçàä èëè âïåðåä. Ýòîò ðåæèì ïðî-
ñìîòðà, êîòîðûé íàçûâàåòñÿ ïðîñìîòð áóôåðà ýêðàíà, Âû òàêæå ìîæåòå
èñïîëüçîâàòü è â äàëüíåéøåé ðàáîòå. Äëÿ âûõîäà èç íåãî äîñòàòî÷íî åùå
ðàç íàæàòü Scroll Lock. Ñïèñîê îáíàðóæåíûõ óñòðîéñòâ ìîæíî ïîñìîò-
ðåòü â ëþáîå âðåìÿ, èñïîëüçóÿ êîìàíäó dmesg.
Âî âðåìÿ çàãðóçêè íà ýêðàíå âñå âðåìÿ áóäåò îòîáðàæàòüñÿ âîë-
øåáíàÿ ïàëî÷êà. Ïîêà îíà êðóòèòñÿ, òî âñå â ïîðÿäêå. Åñëè îíà îñòàíî-
âèëàñü, òî çíà÷èò ñèñòåìà çàâèñëà (èëè ÷òî-òî ñ îáîðóäîâàíèåì èëè Âû
ñäåëàëè ÷òî-òî íå òàê).
Ïîñëå çàâåðøåíèÿ òåñòèðîâàíèÿ çàïóñêàåòñÿ ïðîãðàììà sysinstall.

1.3.2 sysinstall

Sysinstall - óòèëèòà ñ ïñåâäîãðàôè÷åñêèì èíòåðôåéñîì äëÿ óñòà-


íîâêè, íàñòðîéêè è èçìåíåíèÿ ïàðàìåòðîâ îïåðàöèîííîé ñèñòåìû. Ïîëü-
çîâàòüñÿ åþ äîñòàòî÷íî ïðîñòî. Äëÿ ýòîãî èñïîëüçóåòñÿ êëàâèàòóðà. Ñïè-
ñîê íåîáõîäèìûõ êëàâèø óïðàâëåíèÿ ïðèâåäåí â òàáëèöå 1.
Êðîìå òîãî áîëüøóþ ÷àñòü îïöèé ìîæíî âûáðàòü ïîñðåäñòâîì âû-
äåëåííûõ áóêâ. Îáû÷íî ýòî ïåðâûå áóêâû â íàçâàíèè îïöèè. Äëÿ ïî-
ëó÷åíèÿ äîïîëíèòåëüíîé èíôîðìàöèè îá èñïîëüçîâàíèè sysinstall âû
ìîæåòå âûáðàòü ïóíêò Usage îñíîâíîãî ìåíþ sysinstall.
Ïðè çàïóñêå sysinstall â ðåæèìå óñòàíîâêè ñèñòåìû îíà âíà÷à-

5 ßäðî - ñïåöèàëüíûé ýëåìåíò ïðîãðàììíîãî îáåñïå÷åíèÿ, óïðàâëÿþùèé âçàèìîäåéñòâèåì äðóãèõ


ïðîãðàììíûõ êîìïîíåíòîâ ñ àïïàðàòíûìè ñðåäñòâàìè êîìïüþòåðà.
16

Òàáëèöà 1: Êëàâèøè óïðàâëåíèÿ

Êëàâèøà Êîìàíäà
Ñòðåëêà ââåðõ Ïåðåõîä ê ïðåäûäóùåé îïöèè ìåíþ
Ñòðåëêà âíèç Ïåðåõîä ê ñëåäóþùåé îïöèè ìåíþ
Ñòðåëêè âëåâî/âïðàâî Ïåðåêëþ÷åíèå ìåæäó âàðèàíòàìè âûáîðà
âíèçó ýêðàíà
Ïðîáåë  ìåíþ, ãäå âîçìîæåí âûáîð ìíîãî÷èñëåííûõ
îïöèé, ïðîáåë ñëóæèò äëÿ âûáîðà òåêóùåé
îïöèè
Êëàâèøà Tab Ðàáîòàåò êàê è êóðñîðíûå êëàâèøè âëåâî/â-
ïðàâî, à òàê æå èñïîëüçóåòñÿ äëÿ ïåðåõîäà
ìåæäó ïîëÿìè, ãäå íåîáõîäèìî ââîäèòü èí-
ôîðìàöèþ

ëå ïîïðîñèò óêàçàòü Âàøó ñòðàíó. Îò ýòîãî âûáîðà çàâèñÿò ðåãèîíàëü-


íûå óñòàíîâêè, ïóòè ïîèñêà çåðêàë6 è ïðî÷èå ïàðàìåòðû ñâÿçàííûå ñ
ôèçè÷åñêèì ðàñïîëîæåíèåì äàííîãî êîìïüþòåðà. Óïðàâëåíèå êóðñîðîì
îñóùåñòâëÿåòñÿ ïðè ïîìîùè êëàâèø ↑ è ↓ . Âûáðàâ ïóíêò #229
Ukraine, íåîáõîäèìî óáåäèòüñÿ â òîì, ÷òî âíèçó âûáðàíà êíîïêà ÎÊ.
Åñëè íåò, òî ñ ïîìîùüþ êëàâèø âïðàâî-âëåâî íåîáõîäèìî ïîäòâåðäèòü
âûáîð. Ïîñëå ýòîãî - íàæàòü Enter .
Ñëåäóþùèì ïóíêòîì íåîáõîäèìî âûáðàòü ðàñêëàäêó êëàâèàòóðû,
à çàòåì Âû ïîïàäàåòå â îñíîâíîå ìåíþ ïðîãðàììû sysinstall. Ìåíþ
sysinstall èìååò ñëåäóþùèå ïóíêòû:

- Usage - èíôîðìàöèÿ ïî èñïîëüçîâàíèþ ìåíþ ýòîé ïðîãðàììû.


Ñòîèò íà÷àòü èìåííî ñ ýòîãî ïóíêòà, ïîñëå îçíàêîìëåíèÿ ñ êîòî-
ðûì ó Âàñ íå âîçíèêíåò âîïðîñîâ ïî íàâèãàöèè è èñïîëüçîâàíèþ
ìåíþ.

- Standart - çàïóñê óñòàíîâêè ñèñòåìû â ñòàíäàðòíîì ðåæèìå (ðå-


æèìå Wizzard'à).  ýòîì ðåæèìå ïîî÷åðåäíî áóäóò çàäàâàòüñÿ íåîá-
õîäèìûå, äëÿ óñòàíîâêè ñèñòåìû, âîïðîñû.
6 Çåðêàëî  òî÷íàÿ êîïèÿ äàííûõ îäíîãî ñåðâåðà íà äðóãîì. Ôàéëû ðàñïîëàãàþò íà íåñêîëüêèõ
çåðêàëàõ äëÿ óñêîðåíèÿ ñêà÷èâàíèÿ è ðàñïðåäåëåíèÿ íàãðóçêè.
17

Ðèñ. 2: Âíåøíèé âèä óòèëèòû sysinstall

- Express - âàðèàíò äëÿ áûñòðîé óñòàíîâêè, êîãäà íåîáõîäèìî êàê


ìîæíî ñêîðåå ïîëó÷èòü ðàáîòàþùóþ ñèñòåìó. Èãíîðèðóþòñÿ ìíî-
ãèå íåâàæíûå (äëÿ ïðîöåäóðû óñòàíîâêè) ïóíêòû, à áîëåå ïîëíàÿ
íàñòðîéêà ïðîèçâîäèòñÿ ïîçæå ñ ïîìîùüþ ñðåäñòâ îïåðàöèîííîé
ñèñòåìû.

- Custom - âñÿ ïðîöåäóðà óñòàíîâêè îñóùåñòâëÿåòñÿ âðó÷íóþ. Ýòîò


ñïîñîá ïîçâîëÿåò ïîëíîñòüþ êîíòðîëèðîâàòü ïðîöåäóðó óñòàíîâêè.

- Congure - ìåíþ íàñòðîéêè îïåðàöèîííîé ñèñòåìû ïîñëå óñòàíîâ-


êè. Ïîçâîëÿåò óñòàíîâèòü äîïîëíèòåëüíîå ïðîãðàììíîå îáåñïå÷å-
íèå, íàñòðîèòü êëàâèàòóðó è ìûøü, óïðàâëÿòü ïîëüçîâàòåëÿìè è
ðåæèìàìè áåçîïàñíîñòè.

- Doc - êðàòêàÿ äîêóìåíòàöèÿ ïî FreeBSD. Â íåé íàõîäÿòñÿ ôàéë


README, óñëîâèÿ ëèöåíçèè, êðàòêîå îïèñàíèå ñèñòåìû, ñâåäåíèÿ
î ïîääåðæèâàåìûõ àïïàðàòíûõ ñðåäñòâàõ è ïðî÷åå.

- Keymap - äëÿ âûáîðà ðàñêëàäêè êëàâèàòóðû, ÷òî ìû ñ Âàìè óæå


ñäåëàëè.
18

Ðèñ. 3: Ðåæèì óñòàíîâêè Custom

- Options - ðàçëè÷íûå íàñòðîéêè óòèëèòû sysinstall.

- Fixit - Âêëþ÷åíèå ðåæèìà âîññòàíîâëåíèÿ îïåðàöèîííîé ñèñòåìû,


êîòîðàÿ áûëà ïî êàêèì-òî ïðè÷èíàì óãðîáëåíà

- Upgrade - îáíîâëåíèå îïåðàöèîííîé ñèñòåìû (íàïð. îò âåðñèè 8.0


äî âåðñèè 8.1)

- Load Cong - çàãðóçêà ôàéëà ñ çàðàíåå óñòàíîâëåííûìè îïöèÿìè


íàñòðîåê. Î÷åíü ïîëåçåí â ñëó÷àå, åñëè Âàì íåîáõîäìî óñòàíîâèòü
ñèñòåìó íà áîëüøîå êîëè÷åñòâî êîìïüþòåðîâ.

- Index - ñïèñîê âñåõ ïóíêòîâ óòèëèòû sysinstall, íå ðàçäåëåííûé


íà ïîäïóíêòû.

Ïîñêîëüêó âû áóäóùèå ñïåöèàëèñòû ïî òåëåêîììóíèêàöèîííûì ñè-


ñòåìàì, òî âàø âûáîð - ïóíêò Custom. Ïåðâîå, ÷òî íåîáõîäèìî ñäåëàòü
ïðè óñòàíîâêå îïåðàöèîííîé ñèñòåìû, ýòî âûäåëèòü åé äèñêîâîå ïðî-
ñòðàíñòâî. Ó÷òèòå, ÷òî ëþáàÿ îøèáêà ñîçäàíèÿ è óäàëåíèÿ ðàçäåëîâ,
ìîæåò ïðèâåñòè ê ïîòåðå âñåõ äàííûõ íà æåñòêîì äèñêå.
19

Ðèñ. 4: Ðàçìåòêà æåñòêîãî äèñêà

Âûáðàâ ïóíêò 3 Partition, Âû ïîïàäàåòå â ìåíþ, â êîòîðîì îòîá-


ðàæàþòñÿ äèñêè, óñòàíîâëåííûå íà Âàøåì êîìïüþòåðå. Ââåðõó óêàçàíû
èìÿ äèñêà, åãî ôèçè÷åñêèå ïàðàìåòðû.  ñðåäíåé ÷àñòè â âèäå òàáëèöû
óêàçàíî òî, êàê îíè èñïîëüçóþòñÿ.  íèæíåé ÷àñòè - ñïðàâêà ïî èñ-
ïîëüçîâàíèþ êëàâèø. Âû òàê æå ìîæåòå íàæàâ F1 , âûçâàòü ñïðàâêó.
Ïîñêîëüêó â äàííîé ðàáîòå ó Âàñ íà äèñêå áóäåò èñïîëüçîâàíà òîëüêî
îäíà îïåðàöèîííàÿ ñèñòåìà, òî íàæàâ À , Âû îòäàäèòå êîìàíäó èñ-
ïîëüçîâàòü âåñü äèñê (Use Entire Disk). Ïîñëå âûõîäà ñ ïîìîùüþ êíîïêè
Q , Âàñ ñïðîñÿò î òîì, êàêèì îáðàçîì ñëåäóåò óñòàíîâèòü çàãðóç÷èê
îïåðàöèîííîé ñèñòåìû.
Çàãðóç÷èê - ýòî îáëàñòü íà æåñòêîì äèñêå (íóëåâîé ñåêòîð)
ñ êîòîðîãî âûïîëíÿåòñÿ íà÷àëüíàÿ çàãðóçêà. Ñåêòîð 0 íàçû-
âàþò ãëàâíîé çàãðóçî÷íîé çàïèñüþ (Master Boot Record, èëè
MBR. Ïðîãðàììà ðàñïîëîæåííàÿ â MBR èìååò äëèíó âñåãî
512 áàéòîâ. Îíà ñîäåðæèò èíôîðìàöèþ î äèñêå è ïîçâîëÿåò
âûâåñòè íà ýêðàí ìåíþ ðàçäåëîâ äàííîãî äèñêà, ñ êîòîðûõ
ìîæíî âûïîëíèòü íà÷àëüíóþ çàãðóçêó.

- Standart - íå óñòàíàâëèâàåò ìåíåäæåð çàãðóçîê è ïðè çàãðóçêå


20

Ðèñ. 5: Óñòàíîâêà çàãðóç÷èêà îïåðàöèîííîé ñèñòåìû

êîìïüþòåðà áóäåò ñðàçó çàïóùåíà ñèñòåìà FreeBSD. Ýòîò ïóíêò


ñëåäóåò âûáèðàòü, åñëè ó Âàñ íà êîìïüþòåðå óñòàíîâëåíà òîëüêî
FreeBSD.

- BootMgr - óñòàíàâëèâàåò ìåíåäæåð çàãðóçîê, â êîòîðîì áóäåò


ìåíþ ñ âûáîðîì îïåðàöèîííîé ñèñòåìû. Ýòîò ïóíêò ñòîèò âûáðàòü
ïðè óñëîâèè èñïîëüçîâàíèÿ íåñêîëüêèõ îïåðàöèîííûõ ñèñòåì íà
êîìïüþòåðå.

- None - íå äåëàåò íèêàêèõ óñòàíîâîê. Ýòîò ïóíêò ñòîèò èñïîëüçî-


âàòü ïðè óñëîâèè, ÷òî íà êîìïüþòåðå óæå áûëà óñòàíîâëåíà FreeBSD
èëè, åñëè Âû èñïîëüçóåòå ñâîé ìåíåäæåð çàãðóçîê.

Ïîñëå ýòîãî íåîáõîäèìî ðàçáèòü èñïîëüçóåìûé ðàçäåë íà ïîäðàç-


äåëû, êîòîðûå âî FreeBSD íàçûâàþòñÿ ñëàéñû. Ýòî î÷åíü òîíêàÿ ïðî-
öåäóðà, êîòîðàÿ òðåáóåò èíäèâèäóàëüíîãî ïîäõîäà ê êàæäîé óñòàíîâêå
îïåðàöèîííîé ñèñòåìû. Äëÿ ðàáîòû FreeBSD íåîáõîäèìî êàê ìèíèìóì
äâà ðàçäåëà: êîðíåâîé (/) è ðàçäåë ïîäêà÷êè (swap). Íî åäèíñòâåííîå
ïðåèìóùåñòâî òàêîãî ðàçìåùåíèÿ çàêëþ÷àåòñÿ â òîì, ÷òî áóäóò îòñóò-
ñòâîâàòü ïðîáëåìû ñ íåõâàòêîé ìåñòà íà îäíîì ðàçäåëå ñ ïåðåèçáûòêîì
21

åãî íà äðóãîì.
Ðàçìåùåíèå ðàçíûõ äàííûõ íà îòäåëüíûõ ñëàéñàõ ïîçâîëÿåò ïî-
ëó÷èòü âûèãðûø â ïðîèçâîäèòåëüíîñòè, íàäåæíîñòè, áåçîïàñíîñòè. Ëþ-
áîé êàòàëîã ìîæåò áûòü ðàñïîëîæåí íà îòäåëüíîì ñëàéñå. Òî÷íî òàê
æå âîçìîæíà óñòàíîâêà âñåé ñèñòåìû â îäèí ñëàéñ. Ãðóïïà ðàçðàáîò-
÷èêîâ FreeBSD äàåò ðåêîìåíäàöèè ðàñïîëàãàòü íà îòäåëüíûõ ñëàéñàõ
êîðíåâîé ðàçäåë (/), ðàçäåë ïîäêà÷êè(swap), ðàçäåë âðåìåííûõ ôàéëîâ
(/tmp), ðàçäåë ïåðåìåííûõ ôàéëîâ (/var) è ðàçäåë ïîëüçîâàòåëüñêèõ
ôàéëîâ(/usr).
Êîðíåâàÿ ôàéëîâàÿ ñèñòåìà ïðåäíàçíà÷åíà äëÿ õðàíåíèÿ îñîáî âàæ-
íûõ ôàéëîâ, òàêèõ êàê çàãðóç÷èê, ÿäðî îïåðàöèîííîé ñèñòåìû, îñíîâ-
íûå ñèñòåìíûå óòèëèòû, ôàéëû íàñòðîåê, ôàéëû óñòðîéñòâ è ïðî÷åå.
FreeBSD ðàçìåùàåò â íåì îêîëî 160 Ìá ôàéëîâ. Äîïîëíèòåëüíîå ìåñòî
ðåêîìåíäóåòñÿ îñòàâèòü äëÿ âðåìåííûõ ôàéëîâ, à òàê æå äëÿ áóäóùèõ
ðàñøèðåíèé ñèñòåìû, êîòîðûì ïîíàäîáèòñÿ ñâîáîäíîå ïðîñòðàíñòâî. Ýòî
îñíîâíîé ðàçäåë â èåðàðõèè ôàéëîâîé ñèñòåìû FreeBSD. Âñå äðóãèå ðàç-
äåëû ìîíòèðóþòñÿ (ïîäêëþ÷àþòñÿ) èìåííî ê íåìó. Ïîñêîëüêó ïðè ñáîÿõ
ýëåêòðîïèòàíèÿ íàäåæíîñòü ôàéëîâîé ñèñòåìû ïîâûøàåòñÿ, åñëè îíà íå
íàõîäèëàñü â ïðîöåññå çàïèñè, òî æåëàòåëüíî, ÷òî áû êîðíåâîé ðàçäåë íå
âêëþ÷àë â ñåáÿ ðàçäåëîâ (/var, /tmp) â êîòîðûå àêòèâíî èäåò çàïèñü ïðè
ðàáîòå ñèñòåìû. Â êîðíåâîì ðàçäåëå äîëæíû õðàíèòüñÿ òîëüêî ñàìûå
âàæíûå ôàéëû, êîòîðûé ðåäêî èçìåíÿþòñÿ.
ÌÎÍÒÈÐÎÂÀÍÈÅ. Ïðè ïîäêëþ÷åíèè ðàçäåëà èëè äèñêà
(ôëåøêè èòï) ê ñèñòåìå, åé íåîáõîäèìî óêàçàòü ïóòü, ïî êî-
òîðîìó ìîæíî íàéòè ïîäêëþ÷åííûé ðàçäåë. Ïóòü ê êîòîðîìó
ìîíòèðóåòñÿ ðàçäåë, íàçûâàåòñÿ òî÷êîé ìîíòèðîâàíèÿ. Íàïðè-
ìåð äëÿ /var, òî÷êîé ìîíòèðîâàíèÿ ÿâëÿåòñÿ /. Êàòàëîã /media
ÿâëÿåòñÿ òî÷êîé ìîíòèðîâàíèÿ äëÿ ñúåìíûõ óñòðîéñòâ. Íà-
ïðèìåð ïîñëå ïîäêëþ÷åíèÿ ôëåøêè â GNU/Linux â êàòàëîãå
/media ïîÿâëÿåòñÿ êàòàëîã disk1 ñ ñîäåðæèìûì Âàøåé ôëåøêè.
Ðàçäåë ïîäêà÷êè ïðåäíàçíà÷åí äëÿ óâåëè÷åíèÿ îáúåìà âèðòóàëü-
íîé ïàìÿòè. Îáû÷íî â çàâèñèìîñòè îò îáúåìà óñòàíîâëåííîé ïàìÿòè è
çàäà÷ ñåðâåðà åãî âûáèðàþò îò 1:1 äî 3:1 ïî îòíîøåíèþ ê îïåðàòèâ-
22

íîé ïàìÿòè. Ìåíüøå 1:1 ñòàâèòü íå ðåêîìåíäóåòñÿ, òàê êàê ïðè êðàõå
ÿäðà îïåðàöèîííîé ñèñòåìû (kernel panic  ïàíèêà ÿäðà) ñîäåðæèìîå
îïåðàòèâíîé ïàìÿòè ñáðàñûâàåòñÿ â ðàçäåë swap, ÷òî ïîçâîëèò âûÿâèòü
îøèáêó, åñëè ïàíèêà ÿäðà ïðîèñõîäèò ÷àñòî. Âîçìîæåí âàðèàíò, ÷òî
ïîñëå òîãî êàê çàêîí÷èòñÿ swap, íèçêîóðîâíåâàÿ çàïèñü äàìïà áóäåò
ïèñàòü â äàëüíåéøèå ñåêòîðû, ïîâðåæäàÿ ôàéëîâóþ ñèñòåìó, êîòîðàÿ
òàì íàõîäèòñÿ. Åñëè âàì ïðèõîäèòñÿ ñòàâèòü îáúåì ðàçäåëà swap áîëåå
÷åì â 3 ðàçà áîëüøå îáúåìà îïåðàòèâíîé ïàìÿòè, òî ñòîèò çàäóìàòüñÿ
íàä òåì, ÷òî áû äîêóïèòü åùå ïàìÿòè.
Êàòàëîã /var ñîäåðæèò ôàéëû, êîòîðûå ïîñòîÿííî ìåíÿþòñÿ: ëîãè
è äðóãèå àäìèíèñòðàòèâíûå ôàéëû. Ìíîãèå èç ýòèõ ôàéëîâ èíòåíñèâ-
íî ÷èòàþòñÿ è çàïèñûâàþòñÿ â ïðîöåññå åæåäíåâíîé ðàáîòû FreeBSD.
Ðàçìåùåíèå èõ íà îòäåëüíîé ôàéëîâîé ñèñòåìå ïîçâîëÿåò FreeBSD îï-
òèìèçèðîâàòü äîñòóï ê ýòèì ôàéëàì áåç çàòðàãèâàíèÿ äðóãèõ êàòàëîãîâ,
íå èìåþùèõ òàêîé æå ìîäåëè äîñòóïà. Òàê æå â ñëó÷àå ïåðåïîëíåíèÿ ôà-
ëîâîé ñèñòåìû (åñëè var íå âûäåëåí â îòäåëüíûé ðàçäåë), íåâîçìîæíîñòü
âåñòè log ôàéë ìîæåò ïðèâåñòè ê êðàõó ñåðâèñà. Â ýòîì æå êàòàëîãå íà-
õîäÿòñÿ áóôåðíûå (spool) êàòàëîãè, èñïîëüçóåìûå äëÿ î÷åðåäåé ïå÷àòè
èëè ýëåêòðîííîé ïî÷òû.
Êàòàëîã âðåìåííûõ ôàéëîâ ïðåäíàçíà÷åí äëÿ õðàíåíèÿ íåíóæíîé
èíôîðìàöèè â ïðöåññå ðàáîòû. Îáû÷íî îí ñàì î÷èùàåòñÿ. Íî ìíîãèå
ïðèëîæåíèÿ íå ìîãóò ðàáîòàòü åñëè íåò ìåñòà äëÿ âðåìåííûõ ôàéëîâ.
Ïîýòîìó æåëàòåëüíî íå âêëþ÷àòü êàòàëîã /tmp â ñîñòàâ äðóãîãî ðàçäåëà,
êîòîðûé ìîæåò îòîáðàòü æèçíåííî íåîáõîäèìîå ìåñòî, à âûäåëèòü äëÿ
íåãî îòäåëüíûé ðàçäåë.
Ïîëüçîâàòåëüñêèé êàòàëîã íåîáõîäèì äëÿ ðàçìåùåíèÿ äàííûõ ïîëü-
çîâàëåëÿ (êàòàëîã /usr/home), óñòàíîâëåííûõ ïðîãðàìì, ôàéëîâ ñïðàâ-
êè, èñõîäíûõ êîäîâ è ïðî÷. Ðàçóìååòñÿ ÷åì îí áîëüøå, òåì ëó÷øå.
Ñ ó÷åòîì âñåõ ëàáîðàòîðíûõ ðàáîò, ìû ñ Âàìè ðàñïðåäåëèì ìåñòî
òàêèì îáðàçîì, êàê óêàçàíî â òàáë. 2.
Äàííàÿ ñõåìà ïðèìåíèìà íå êî âñåì îïåðàöèîííûì ñèñòåìàì UNIX.
Íàïðèìåð â GNU/Linux ðàçäåë home ïðèìîíòèðîâàí íå ê /usr, à ê /. È
ðàñïðåäåëåíèå ïî äàííîé ñõåìå âûäåëèò äëÿ Âàøèõ ëè÷íûõ ôàéëîâ âñåãî
23

Òàáëèöà 2: Ðåêîìåíäóåìûé ðàçìåð ñëàéñîâ

Êîðíåâàÿ ñèñòåìà / 256 Ìá


Ðàçäåë ïîäêà÷êè swap 128 Ìá
Ðàçäåë ñ âðåìåííûìè ôàéëàìè /tmp 128 Ìá
Ðàçäåë ñ ïåðåìåííûìè ôàéëàìè /var 128 Ìá
Ðàçäåë ïîëüçîâàòåëüñêèõ ôàéëîâ /usr âñå îñòàâøååñÿ ìåñòî

Ðèñ. 6: Íàñòðîéêà ñëàéñîâ

íåñêîëüêî äåñÿòêîâ ìåãàáàéò.


Ðàçóìååòñÿ âû ìîæåòå âûäåëèòü ëþáîé ðàçäåë â îòäåëüíóþ ôàé-
ëîâóþ ñèñòåìó. Âñå çàâèñèò îò çàäà÷, êîòîðûå áóäóò âûïîëíÿòüñÿ íà
ñåðâåðå (èëè ðàáî÷åé ñòàíöèè). Î ñòðóêòóðå ôàéëîâîé ñèñòåìû FreeBSD
Âû óçíàåòå â ñëåäóþùèõ ëàáîðàòîðíûõ ðàáîòàõ.
Äëÿ ñîçäàíèÿ ñëàéñîâ, ïåðåéäèòå â ïóíêò 4 Label.  âåðõíåé ÷àñòè
óêàçàí ôèçè÷åñêèé äèñê íà êîòîðîì Âû ñîáèðàåòåñü ñîçäàâàòü ñëàé-
ñû. Ñîçäàéòå íåîáõîäèìûå ðàçäåëû â ñîîòâåòñòâèè ñ ðåêîìåíäàöèÿìè.
Êîðîòêàÿ ñïðàâêà ïî èñïîëüçîâàíèþ êëàâèø íàõîäèòñÿ âíèçó ýêðàíà.
Ïîñëå îêîí÷àíèÿ íàæìèòå Q äëÿ âûõîäà.
24

Ïîñëå ýòîãî ïåðåõîäèì ê ñëåäóþùåìó ïóíêòó, â êîòîðîì ìû âûáå-


ðåì óñòàíàâëèâàåìûå êîìïîíåíòû.
Êîìïîíåíòàìè îïåðàöèîííîé ñèñòåìû ÿâëÿþòñÿ:

- base - îñíîâíûå ïðîãðàììû è áèáëèîòåêè FreeBSD. Íåîáõîäèì äëÿ


íîðìàëüíîé ðàáîòû ñèñòåìû.

- kernels - ÿäðî îïåðàöèîííîé ñèñòåìû. Íåîáõîäèì äëÿ ðàáîòû ñè-


ñòåìû.

- dict - ñëîâàðè äëÿ ïðîâåðêè îðôîãðàôèè è ïîäáîðà ïàðîëåé.

- doc - îôèöèàëüíàÿ äîêóìåíòàöèÿ ïî FreeBSD íà ðàçëè÷íûõ ÿçû-


êàõ, âêëþ÷àÿ ðóññêèé.

- docuser - ðàçëè÷íàÿ ïîëüçîâàòåëüñêàÿ äîêóìåíòàöèÿ.

- games - ñàìûé âàæíûé êîìïîíåíò ëþáîé îïåðàöèîííîé ñèñòåìû.

- info - èíôîðìàöèîííûå ôàéëû GNU.

- man - manual pages, îñíîâíàÿ ñïðàâî÷íàÿ ñèñòåìà äëÿ ïîëüçîâàòå-


ëåé UNIX.

- catman - ñòðàíèöû ñïðàâêè manual pages, ïåðåôîðìàòèðîâàííûå


â îáû÷íûé òåêñò.

- proibs - ñïåöèôè÷åñêèå âåðñèè áèáëèîòåê.

- src - èñõîäíûå êîäû âñåõ êîìïîíåíòîâ ñèñòåìû. Âû ìîæåòå èçìå-


íèòü è ïåðåêîìïèëèðîâàòü ëþáîé èç íèõ.

- ports - êîëëåêöèÿ ïîðòîâ FreeBSD. Îñíîâíîé èç ñïîñîáîâ ïîëó÷å-


íèÿ è èíñòàëëÿöèè ÏÎ íà ñèñòåìó FreeBSD.

- local - ïðî÷èå äîïîëíåíèÿ.

Íà âûáîð ïðåäëàãàåòñÿ íåñêîëüêî âàðèàíòîâ óñòàíîâêè:

- All - âûáèðàåò âñå êîìïîíåíòû äëÿ óñòàíîâêè


25

Ðèñ. 7: Âûáîð êîìïîíåíòîâ îïåðàöèîííîé ñèñòåìû

- Reset - î÷èùàåò ñïèñîê âûáðàííûõ êîìïîíåíòîâ, íà ñëó÷àé, åñëè


Âû çàïóòàëèñü

- Developer - Âûáèðàåò âñå èñõîäíûå êîäû, áèíàðíûå ôàéëû è äî-


êóìåíòàöèþ

- Kern-Developer - âñå áèíàðíûå ôàéëû è äîêóìåíòàöèÿ, íî èñõîä-


íûå êîäû òîëüêî äëÿ ÿäðà

- User - òîëüêî áèíàðíûå ôàéëû è äîêóìåíòàöèÿ

- Minimal - íàèáîëåå ìèíèìàëüíàÿ ðàáîòîñïîñîáíàÿ êîíôèãóðàöèÿ.

- Custom - ðó÷íîé âûáîð êîìïîíåíòîâ.

Åñòåñòâåííî ìû êàê êðóòûå ñïåöèàëèñòû ëåçåì â Custom. Òàì ìû


îòìå÷àåì âñå êîìïîíåíòû ïîìå÷åíûå êàê òðåáóåìûå, à òàê æå ïîìå÷àåì
ñòðàíèöû ñïðàâêè (man) è èñõîäíûå êîäû ÿäðà (src > sys), êîòîðîå ñêîðî
ìû ñ Âàìè áóäåì ïåðåêîìïèëèðîâàòü.
Ñèñòåìó FreeBSD ìîæíî óñòàíîâèòü ñ áîëüøîãî êîëè÷åñòâà íîñè-
òåëåé. Â ïóíêòå 6 Media âìåñòî CD/DVD äèñêà ìîæíî òàêæå âûáðàòü
26

óñòàíîâêó èç èíòåðíåòà (FTP èëè HTTP ñåðâåðà), ïî ñåòè, ñ äèñêåòû èëè


ôëåøêè, à òàê æå ñ ðàçäåëà FAT32, åñëè îí åñòü íà äàííîì êîìïüþòåðå.
Ïîñëå òîãî, êàê âñå íàñòðîéêè è óñòàíîâêè ñäåëàíû, ìû ïîäòâåð-
æäàåì æåëàíèå èìåòü íà êîìïüþòåðå ñàìóþ ëó÷øóþ â ìèðå ñåðâåðíóþ
îïåðàöèîííóþ ñèñòåìó âûáðàâ ïóíêò 7 Commit. Âíèìàòåëüíî ïðî÷è-
òàâ ïðåäóïðåæäåíèå è âñïîìíèâ âñå ëè ìû çàáåêàïèëè, æìåì íà Yes è
îòêèäûâàåìñÿ íà ñïèíêó ñòóëà.
Åñëè Âàì íàäîåëî ñìîòðåòü íà ñèíèé ýêðàí, òî ìîæíî íàæàòü Alt

+ F2 äëÿ ïîäðîáíîãî ïðîñìîòðà ïðîöåññà óñòàíîâêè.

1.3.3 Ïîñëåóñòàíîâî÷íûå íàñòðîéêè

Ïîñëå óñòàíîâêè ñèñòåìû Âàì áóäåò ïðåäëîæåíî âåðíóòüñÿ â ìåíþ


sysinstall äëÿ óñòàíîâêè äîïîëíèòåëüíûõ êîìïîíåíòîâ. ß ðåêîìåíäóþ
Âàì ýòî ñäåëàòü è çàäàòü ïàðîëü ñóïåðïîëüçîâàòåëÿ root.
root - ýòî ãëàâíàÿ ó÷åòíàÿ çàïèñü ñ àáñîëþòíûìè ïîëíîìî÷èÿìè.
Ýòîò ïîëüçîâàòåëü èìååò ïðàâî íà ëþáûå äåéñòâèÿ, âïëîòü äî óíè÷òîæå-
íèÿ ñèñòåìû. Ïîýòîìó ïàðîëü ïîëüçîâàòåëÿ root âëÿåòñÿ ñàìîé âàæíîé
òàéíîé àäìèíèñòðàòîðà. Ó÷òèòå, ÷òî ïðè ââîäå, ïàðîëü íå îòîáðàæàåòñÿ,
òàê æå êàê è íå îòîáðàæàåòñÿ çâåçäî÷êàìè êîëè÷åñòâî ñèìâîëîâ.
Åñëè Âû çàáûëè ïàðîëü ñóïåðïîëüçîâàòåëÿ, òî äëÿ åãî èçìåíå-
íèÿ Âàì íóæíî çàãðóçèòüñÿ â îäíîïîëüçîâàòåëüñêîì ðåæèìå
(âûáðàòü ïóíêò 4 ïðè çàãðóçêå), ïåðåìîíòèðîâàòü êîðíåâîé
ðàçäåë êîìàíäîé mount -u /, ñìîíòèðîâàòü îñòàëüíûå ðàçäåëû
êîìàíäîé mount -a è çàïóñòèòü êîìàíäó ñìåíû ïàðîëÿ äëÿ
ñóïåðïîëüçîâàòåëÿ passwd root.
Ïðîñòîòà òàêîé îïàñíîé äëÿ áåçîïàñíîñòè îïåðàöèè îáúÿñíÿåò-
ñÿ òåì, ÷òî äîñòóï ê êîíñîëè ñåðâåðà èìååò òîëüêî àäìèíèñòðà-
òîð. Åñëè æå ê ñåðâåðó èìåþò äîñòóï ïîñòîðîííèå, òî ñòîèò
çàïðåòèòü âîçìîæíîñòü âõîäà â îäíîïîëüçîâàòåëüñêèé ðåæèì.
Äëÿ âûõîäà èç îäíîïîëüçîâàòåëüñêîãî ðåæèìà, íàáåðèòå exit.
Çàäàâ ïàðîëü â ïóíêòå Root Password è ïîäòâåðäèâ åãî Âàì íåîá-
õîäèìî ñîçäàòü îáû÷íîãî ïîëüçîâàòåëÿ â ïóíêòå User Management äëÿ
âûïîëíåíèÿ äåéñòâèé íå ñâçàííûõ ñ àäìèíèñòðèðîâàíèåì, òàê êàê ðàáîòà
27

ñ ïðàâàìè ñóïåðïîëüçîâàòåëÿ îïàñíà.


 ñâÿçè ñ òåì, ÷òî äëÿ ïîëüçîâàòåëÿ root íåò íèêàêèõ îãðàíè÷åíèé
äëÿ ðàáîòû â ñèñòåìå, òî çàõîäèòü â ñèñòåìó îò èìåíè ñóïåðïîëüçîâàòåëÿ
ñëåäóåò òîëüêî äëÿ âûïîëíåíèÿ êîíêðåòíûõ çàäà÷ àäìèíèñòðèðîâàíèÿ.
Äëÿ ïîâñåäíåâíîé ðàáîòû èñïîëüçóéòå çàïèñü îáû÷íîãî ïîëüçîâàòåëÿ.
 User Management âûáèðàåì ïóíêò ñîçäàíèÿ ïîëüçîâàòåëÿ, â
êîòîðîì ââîäèì ëîãèí, ïàðîëü, ïîäòâåðæäåíèå ïàðîëÿ, ïîëíîå èìÿ, è
â ÷ëåíû ãðóïïû äîáàâëÿåì wheel. Whell - ýòî ãðóïïà, êîòîðàÿ ìîæåò
âûïîëíÿòü êîìàíäû îò èìåíè àäìèíèñòðàòîðà.
LoginID: èìÿ, êîòîðîå ïîëüçîâàòåëü ââîäèò äëÿ ðåãèñòðàöèè â
ñèñòåìå. Îíî äîëæíî ñîñòîÿòü èç àëôàâèòíî-öèôðîâûõ ñèìâîëîâ. Êàæ-
äûé ïîëüçîâàòåëü äîëæåí èìåòü óíèêàëüíîå ïîëüçîâàòåëüñêîå èìÿ. È
ïðèó÷èòå ñåáÿ ïîëüçîâàòüñÿ áóêâàìè íèæíåãî ðåãèñòðà.
UID: èäåíòèôèêàòîð ïîëüçîâàòåëÿ. Ýòî óíèêàëüíîå ÷èñëî, êîòîðîå
ñèñòåìà íàçíà÷àåò ïîëüçîâàòåëþ. Íå íàçíà÷àéòå åãî áåç êðàéíåé íåîáõî-
äèìîñòè. Ïóñòü ñèñòåìà ïîäáåðåò åãî ñàìà.
Group ID: èñõîäíàÿ ãðóïïà, ÷ëåíîì êîòîðîé ñòàíîâèòñÿ ïîëüçîâà-
òåëü. Íå çàïîëíÿéòå åãî, ñèñòåìà ñàìà íàçíà÷èò åìó ãðóïïó.
Password: ïàðîëü, èñïîëüçóåìûé äëÿ ðåãèñòðàöèè â ñèñòåìå:

- ïàðîëü êðàéíå æåëàòåëüíî äîëæåí èìåòü íå ìåíåå 8 ñèìâîëîâ (ïà-


ðîëü äëèíîþ ìåíåå 8 ñèìâîëîâ âîçìîæíî ïîäîáðàòü ìåòîäîì brute-
force íà ëþáîé âû÷èñëèòåëüíîé ñèñòåìå çà ðàçóìíîå âðåìÿ)

- èñïîëüçóéòå êîìáèíàöèþ áóêâ âåðõíåãî è íèæíåãî ðåãèñòðà, æåëà-


òåëüíî åùå äîáàâèòü öèôðû è ñèìâîëû âðîäå $ èëè !

- íè â êîåì ñëó÷àå íå èñïîëüçóéòå ñëîâà, êîòîðûå åñòü â ñëîâàðÿõ,


íå èñïîëüçóéòå èìåíà, êëè÷êè, ãåîãðàôè÷åñêèå íàçâàíèÿ è ïðî÷åå

- íå èñïîëüçóéòå èíôîðìàöèþ, êîòîðàÿ ñâÿçàíà ñ Âàìè. Ïîâåðüòå,


÷òî ïåðâûìè áóäóò ïîäáèðàòüñÿ íîìåð ìàðøðóòêè, íà êîòîðîé Âû
åçäèòå íà ðàáîòó è äåâè÷üÿ ôàìèëèÿ Âàøåé ìàòåðè.
28

Òðóäíî ïðèäóìàòü ÷òî-òî, ÷òî ñëîæíî âçëîìàòü è ëåãêî çàïîì-


íèòü. Îäèí èç ñïîñîáîâ, ýòî îáúåäèíèòü ÷àñòè 3-õ 4-õ ñëîâ,
ñîåäèíÿÿ èõ íåàëôàâèòíûìè ñèìâîëàìè è çàìåùàÿ ïîõîæèå
áóêâû íà ñèìâîëû (î-0: b-6, i-1) ïðèìåíÿÿ ñòèëü leet. Òàê æå
âîçìîæåí íàáîð ñëîâ ðóññêîãî ÿçûêà, èñïîëüçóÿ êëàâèøè ñ
ðóññêèìè áóêâàìè ïðè àíãëèéñêîé ðàñêëàäêå (ïîëó÷èòñÿ ÷òî-òî
âðîäå: JxtymCkj;ysqGfhjkm). Ìîæíî îáúåäèíÿòü âñå ýòè ñïî-
ñîáû. Ýòî òðóäíî ïî íà÷àëó. Òðåíèðóÿñü, Âû íàó÷èòåñü ëåãêî
ñîçäàâàòü è çàïîìèíàòü ñëîæíûå ïàðîëè, êîòîðûå ìîãóò ñòàòü
òðóäíîïîäáèðàåìûìè. Âñåãäà ó÷èòûâàéòå òî, ÷òî ëþáîé âçëîì-
ùèê çíàåò îáî âñåõ ýòèõ ñïîñîáàõ.
Íèêîãäà è íèãäå íå çàïèñûâàéòå ïàðîëè. Íèêîãäà è íèêîìó íå
ðàñêðûâàéòå íè ñâîè ñòàðûå ïàðîëè íè òåì áîëåå äåéñòâóþùèå.
Ñîõðàíÿéòå â òàéíå Âàø àëãîðèòì ñîçäàíèÿ ïàðîëÿ.
Full Name: íåîáÿçàòåëüíàÿ ãðàôà, â êîòîðîé ñîäåðæèòñÿ ïîëíîå
èìÿ ïîëüçîâàòåëÿ. Íî ïîñêîëüêó ýòî çíà÷åíèå èñïîëüçóåòñÿ íåêîòîðûìè
ïðîãðàììàìè (íàïðèìåð ýëåêòðîííîé ïî÷òîé), òî ëó÷øå çàïîëíèòü è åãî.
Member Groups: wheel
Home Directory: ïðè íåîáõîäèìîñòè ìîæíî óêàçàòü ðàñïîëîæå-
íèå äîìàøíåãî êàòàëîãà ïîëüçîâàòåëÿ. Íî ñåé÷àñ ëó÷øå ýòîãî íå äåëàòü.
Login Shell: êîìàíäíûé èíòåðïðåòàòîð, èñïîëüçóåìûé ïîëüçîâà-
òåëåì. Ïîêà ÷òî îñòàâüòå êàê åñòü, íî ñêîðî ìû åãî áóäåì ìåíÿòü.
Çàîäíî ñðàçó óñòàíîâèòå äâà ïðèëîæåíèÿ. Ïåðâîå - êîìàíäíûé èí-
òåðïðåòàòîð bash, êîòîðûé ïðåäîñòàâëÿåò áîëüøå âîçìîæíîñòåé äëÿ
ðàáîòû â ñèñòåìå, ÷åì sh, óñòàíîâëåííûé ïî óìîë÷àíèþ, è ñ êîòîðûì
ìû áóäåì ðàáîòàòü íà ñëåäóþùåé ëàáîðàòîðíîé ðàáîòå. À òàê æå ïðî-
ãðàììó sudo, êîòîðàÿ ïðåäîñòàâëÿåò âîçìîæíîñòü âûïîëíÿòü äåéñòâèÿ,
òðåáóþùèå ïðàâà root, íî ïîçâîëÿþùàÿ ïðè ýòîì íå èñïîëüçîâàòü åãî
ó÷åòíóþ çàïèñü.
Äëÿ óñòàíîâêè ïðîãðàììíîãî îáåñïå÷åíèÿ ÷åðåç sysinstall, âûáå-
ðèòå ïóíêò Packages, â íåì ïîäïóíêò shells (îáîëî÷êè) è ïîñòàâüòå ãà-
ëî÷êó íà ñòðîêå ñ bash. Çàòåì âåðíèòåñü íàçàä, âûáåðèòå ïóíêò security
è íàéäèòå è îòìåòüòå sudo. Ïîñëå òîãî êàê Âû âûáðàëè âñå, ÷òî õîòèòå
29

óñòàíîâèòü, íàæìèòå íà install è äîæäèòåñü êîíöà óñòàíîâêè ïðîãðàìì.


Èñïîëüçîâàíèå sudo âìåñòî su äîëæíî ñòàòü Âàøåé ïðèâû÷êîé. À,
íàïðèìåð, â îïåðàöèîííîé ñèñòåìå ubuntu, ïàðîëü ñóïåðïîëüçîâàòåëÿ
ãåíåðèðóåòñÿ ñëó÷àéíûì îáðàçîì è íèêîìó íå èçâåñòåí. Âñå îïåðàöèè
àäìèíèñòðèðîâàíèÿ äåëàþòñÿ ïðè ïîìîùè sudo.
Òóò Âû åùå ìîæåòå èçìåíèòü è óñòàíîâèòü äðóãèå ïàðàìåòðû.
Íàïðèìåð íàñòðîéêè âðåìåíè, êëàâèàòóðû è ìûøè, ñåòè è áåçîïàñíîñòè.
Ìîæåòå ïîèãðàòüñÿ, íî ïîñòàðàéòåñü íè÷åãî íå èñïîðòèòü.
Ïîñëå îêîí÷àíèÿ âñåõ íàñòðîåê âûéäèòå èç ïðîãðàììû è êîìïüþ-
òåð ïåðåçàãðóçèòñÿ. Ó÷òèòå, ÷òî Âàì íåîáõîäèìî âûòàùèòü äèñê. Ïðè
óñòàíîâêå íà êîìïüþòåð ïîñëå ìîíòèðîâàíèÿ äèñêà ñèñòåìà áëîêèðóåò
ïðèâîä äëÿ òîãî, ÷òî áû åãî íåëüçÿ áûëî èçâëå÷ü íåðàçìîíòèðîâàâ (ðàçó-
ìååòñÿ ïîñëå îïðåäåëåííûõ íàñòðîåê ñèñòåìû îíà áóäåò äåëàòü ýòî àâòî-
ìàòè÷åñêè ïðè íàæàòèè íà êíîïêó èçâëå÷åíèÿ äèñêà). Íî â âèðòóàëüíîé
ìàøèíå âû ñìîæåòå ñäåëàòü ýòî â ëþáîé ìîìåíò. Ïðåäëàãàþ Âàì íå
èçäåâàòüñÿ íàä ñèñòåìîé, à ïîäîæäàòü ïîêà íå íà÷íåòñÿ ïåðåçàãðóçêà. Âî
âðåìÿ ïåðåçàãðóçêè ìîæíî âûòàùèòü äèñê è ìîæíî íà÷èíàòü ðàáîòàòü.
Âîçüìèòå ñåáå çà ïðàâèëî íå îòêëþ÷àòü íèêàêèõ ôàéëîâûõ ñèñòåì, áåç
èõ ïðåäâàðèòåëüíîãî ðàçìîíòèðîâàíèÿ. Ïðåíåáðåæåíèå ýòèì ïðàâèëîì
áóäåò ïðèâîäèòü ê ìíîãî÷èñëåííûì ìåëêèì îøèáêàì, ïîòåðÿì äàííûõ
è êó÷å ïðîáëåì äëÿ Âàñ.

1.3.4 Ïðîöåññ çàãðóçêè îïåðàöèîííîé ñèñòåìû

POST. Ïðè âêëþ÷åíèè êîìïüþòåðà íà íåì àâòîìàòè÷åñêè çàïóñ-


êàåòñÿ òåñò, êîòîðûé íàçûâàåòñÿ POST (Power On Self Test  Ñàìîòåñòè-
ðîâàíèå ïðè âêëþ÷åíèè ïèòàíèÿ). Íà ýòîì ýòàïå BIOS ïðîâåðÿåò ðàáîòó
àïïàðàòíîãî îáåñïå÷åíèÿ êîìïüþòåðà, íàõîäèò îáúåì îïåðàòèâíîé ïà-
ìÿòè è óñòðîéñòâà ÐnÐ, ÷òîáû îïðåäåëèòü, êàêèå ðåñóðñû îíè ìîãóò
èñïîëüçîâàòü.
Íà÷àëüíàÿ çàãðóçêà. Çàòåì BIOS èùåò â ñèñòåìå óñòðîéñòâî, ñ
êîòîðîãî ìîæíî ïðîèçâåñòè íà÷àëüíóþ çàãðóçêó. Êàêèå óñòðîéñòâà áó-
äóò ïðîâåðÿòüñÿ è â êàêîì ïîðÿäêå  çàâèñèò îò íàñòðîåê BIOS. Îáû÷íî
çàãðóçêà âûïîëíÿåòñÿ ñ ïåðâîãî æåñòêîãî äèñêà ñèñòåìû, íî èì ìîæåò
30

Ðèñ. 8: Ìåíþ çàãðóçêè FreeBSD

òàêæå áûòü è äèñêåòà, è CD-äèñê. Âîçìîæíà òàêæå çàãðóçêà îïåðàöèîí-


íîé ñèñòåìû ñ ñåðâåðà ÷åðåç ñåòü. Çàãðóçêà îñóùåñòâëÿåòñÿ ñ ïåðâîãî îá-
íàðóæåííîãî óñòðîéñòâà çàãðóçêè. Êîãäà óñòðîéñòâî, ñ êîòîðîãî ìîæíî
çàãðóçèòüñÿ îáíàðóæåíî, BIOS íà÷èíàåò ïðîöåäóðó íà÷àëüíîé çàãðóçêè.
Íà÷àëüíàÿ çàãðóçêà  ýòî ìíîãîýòàïíûé ïðîöåññ, êîòîðûé íà÷èíàåòñÿ ñ
ýòàïà boot0.
Ýòàï boot0. BIOS ñ÷èòûâàåò ñîäåðæèìîå ñåêòîðà 0 æåñòêîãî äèñ-
êà, ñ êîòîðîãî âûïîëíÿåòñÿ íà÷àëüíàÿ çàãðóçêà. Ñåêòîð 0 íàçûâàþò òàê-
æå ãëàâíîé çàãðóçî÷íîé çàïèñüþ (Master Boot Record, èëè MBR). Ïðî-
ãðàììà, ðàñïîëîæåííàÿ â MBR, èìååò äëèíó âñåãî 512 áàéòîâ. Îíà ñî-
äåðæèò èíôîðìàöèþ î äèñêå, ïîçâîëÿþùóþ âûâåñòè íà ýêðàí ìåíþ
ðàçäåëîâ äàííîãî äèñêà, ñ êîòîðûõ ìîæíî âûïîëíèòü íà÷àëüíóþ çàãðóç-
êó. Ïðèìåð èíôîðìàöèè ïðîãðàììû boot0 íàõîäèòñÿ íà Ðèñ. 8.
Ñ ïîìîùüþ ôóíêöèîíàëüíûõ êëàâèø ìîæíî âûáðàòü ðàçäåë, êî-
òîðûé òðåáóåòñÿ çàãðóçèòü (è, ñëåäîâàòåëüíî, îïåðàöèîííóþ ñèñòåìó).
Ïîñëå ýòîãî boot0 çàãðóæàåò ñîäåðæèìîå çàãðóçî÷íîãî ñåêòîðà âûáðàí-
íîãî ðàçäåëà. Åñëè íà æåñòêîì äèñêå íàõîäèòñÿ òîëüêî îïåðàöèîííàÿ
ñèñòåìà FreeBSD, òî ìåíþ íà ýêðàí íå âûâîäèòñÿ è çàãðóçî÷íûé ñåêòîð
çàãðóæàåòñÿ àâòîìàòè÷åñêè. Ýòî íà÷àëî ñëåäóþùåãî ýòàïà íà÷àëüíîé
çàãðóçêè, êîòîðûé íàçûâàåòñÿ boot1
Ýòàï boot1. Ïðîãðàììà boot1 íàõîäèòñÿ â ïåðâîì ñåêòîðå çàãðó-
æàåìîãî ðàçäåëà. Êàê è ïðîãðàììà boot0, îíà èìååò â äëèíó 512 áàéòîâ.
Åå çàäà÷à  íàéòè è çàãðóçèòü ïðîãðàììó boot2.
Ýòàï boot2. Ïðîãðàììà boot2 ñïîñîáíà çàãðóæàòü ñ æåñòêîãî äèñ-
êà ðåàëüíûå ôàéëû. Îáû÷íî ýòî ïðîãðàììà, êîòîðàÿ íàçûâàåòñÿ çà-
ãðóç÷èê. Ïðîãðàììà-çàãðóç÷èê âûïîëíÿåò ñëåäóþùèé ýòàï íà÷àëüíîé
çàãðóçêè.
Ýòàï boot3. Îáû÷íî ïðîãðàììà-çàãðóç÷èê õðàíèòñÿ â êàòàëîãå
/boot. Îíà ïîçâîëÿåò èçìåíÿòü ðàçëè÷íûå ïàðàìåòðû çàïóñêà îïåðàöè-
31

Ðèñ. 9: Âûâîä ñîîáùåíèé ÿäðà

îííîé ñèñòåìû FreeBSD, â ÷àñòíîñòè, âûáèðàòü ÿäðî, êîòîðîå äîëæíî


áûòü çàãðóæåíî. Çàãðóç÷èê íàõîäèò è çàãðóæàåò ÿäðî îïåðàöèîííîé
ñèñòåìû è ïåðåäàåò åìó óïðàâëåíèå. Íà ýòîì íà÷àëüíàÿ çàãðóçêà çà-
êàí÷èâàåòñÿ.
ßäðî. Ñòàíäàðòíîå ÿäðî îáû÷íî íàõîäèòñÿ â êàòàëîãå /boot/kernel
è çàïóñêàåòñÿ çàãðóç÷èêîì. Îíî óïðàâëÿåò âñåìè îáðàùåíèÿìè ê àï-
ïàðàòíûì ðåñóðñàì ñî ñòîðîíû ïðîãðàìì è ïîëüçîâàòåëåé. Ñîîáùåíèÿ,
âèäèìûå íà ýêðàíå ïðè çàïóñêå FreeBSD, ïðåäñòàâëÿþò ñîáîé ñîîáùåíèÿ
ÿäðà, êîòîðûå èíôîðìèðóþò î òîì, ÷òî ÿäðî íàõîäèò è èíèöèàëèçèðóåò
àïïàðàòíûå ñðåäñòâà êîìïüþòåðà. Áîëüøàÿ ÷àñòü ýòèõ ñîîáùåíèé ïðî-
áåãàåò ïî ýêðàíó ñëèøêîì áûñòðî. Íî ïîñëå ðåãèñòðàöèè è âõîäà â ñèñòå-
ìó ìîæíî âîñïîëüçîâàòüñÿ êîìàíäîé dmesg | more è ïðîñìîòðåòü ýòè
ñîîáùåíèÿ; ïåðåõîä ê ñëåäóþùåé ñòðàíèöå ñîîáùåíèé îñóùåñòâëÿåòñÿ
íàæàòèåì êëàâèøè .  êà÷åñòâå ïðèìåðà ïðèâîäÿòñÿ íåêîòîðûå
ñîîáùåíèÿ ÿäðà ñèñòåìû íà Ðèñ. 9.
Ïåðâûå òðè ñòðîêè â îáúÿñíåíèÿõ íå íóæäàþòñÿ. Ýòî ïðîñòî èí-
ôîðìàöèÿ îá àâòîðñêèõ ïðàâàõ.  ÷åòâåðòîé ñòðîêå äàåòñÿ íàçâàíèå
îïåðàöèîííîé ñèñòåìû è âåðñèÿ ÿäðà. Â íåé òàêæå óêàçûâàåòñÿ äàòà
è âðåìÿ ñáîðêè ÿäðà.
Ïåðâàÿ ÷àñòü ïÿòîé ñòðîêè ñîäåðæèò èìÿ è ëîêàëüíûé ýëåêòðîí-
íûé àäðåñ ïîëüçîâàòåëÿ, ñîáðàâøåãî ÿäðî.  äàííîì ñëó÷àå ÿäðî áûëî
ñîáðàíî ïîëüçîâàòåëåì root è ñäåëàíî ýòî áûëî íà êîìïüþòåðå â óíè-
âåðñèòåòå Áåðêëè. Âòîðàÿ ÷àñòü ïÿòîé ñòðîêè ñîäåðæèò èíôîðìàöèþ î
òîì, ãäå íàõîäèòñÿ êàòàëîã, â êîòîðîì áûëî ñîáðàíî ÿäðî.
Ñòðîêè íà Ðèñ. 10 îïèñûâàþò òèï ïðîöåññîðà è ñîäåðæàò íåêîòî-
ðóþ èíôîðìàöèþ î åãî âîçìîæíîñòÿõ.
Íà Ðèñ. 11 èçîáðàæåíû ñîîáùåíèÿ ÿäðà î êàæäîì îáíàðóæåííîì
óñòðîéñòâå. Íàïðèìåð atkbd0 ýòî êëàâèàòóðà, psm0 - ìûøü, vga0 - âèäåî-
32

Ðèñ. 10: Èíôîðìàöèÿ î ïðîöåññîðå

Ðèñ. 11: Èíôîðìàöèÿ îá îáíàðóæåííûõ óñòðîéñòâàõ


33

Ðèñ. 12: Îøèáêà îáíàðóæåííûõ PnP óñòðîéñòâ

Ðèñ. 13: Îáíàðóæåíèå íàêîïèòåëåé èíôîðìàöèè

êàðòà. Åñëè â ñèñòåìå îáíàðóæåíî íåñêîëüêî óñòðîéñòâ, êîòîðûå óïðàâ-


ëÿþòñÿ îäíèì äðàéâåðîì, òî ó íèõ ìåíÿåòñÿ ïîðÿäêîâûé íîìåð. Íàïðè-
ìåð ñòðîêè ata0 è ata1, êîòîðûå ñîîáùàþò î òîì, ÷òî áûëî îáíàðóæåíî
äâà êîíòðîëëåðà ATA (îäèí äëÿ âèí÷åñòåðà, à äðóãîé äëÿ CD/DVD).
Íåêîòîðûå èç ñîîáùåíèé, êàê íà Ðèñ. 12 âû ìîæåòå óâèäåòü íà
ýêðàíå ñâîåãî êîìïüþòåðà âî âðåìÿ çàïóñêà FreeBSD. Îíè îçíà÷àþò, ÷òî
ÿäðî îáíàðóæèëî â ñèñòåìå íåêîòîðûå óñòðîéñòâà Plug and Play, íî îíè
åìó íåèçâåñòíû, ïîýòîìó îíî íå ìîæåò âûäåëèòü èì ðåñóðñû. Íàëè÷èå
ýòèõ ñîîáùåíèé íå âëèÿåò íà ñòàáèëüíîñòü ñèñòåìû.
Íà Ðèñ. 13 ÿäðî íàøëî íàêîïèòåëè íà æåñòêèõ äèñêàõ è âûäàëî
èíôîðìàöèþ î íàçâàíèè íàêîïèòåëÿ, åãî îáúåìå, ïðîèçâîäèòåëå, ìîäåëè,
ãåîìåòðèè è î òîì, ê êàêîìó êîíòðîëëåðó ïîäêëþ÷åí íàêîïèòåëü. Îíà
òàêæå ñîîáùàåò, êàêîé ðåæèì äîñòóïà èñïîëüçóåò íàêîïèòåëü. Â äàííîì
ñëó÷àå îáà íàêîïèòåëÿ èñïîëüçóþò Ultra DMA 33.
Ñîîáùåíèå íà Ðèñ. 14 îçíà÷àåò, ÷òî ïðîãðàììà ÿäðà ñìîíòèðîâàëà
êîðíåâóþ ôàéëîâóþ ñèñòåìó. Ïîñëå òîãî êàê êîðíåâàÿ ôàéëîâàÿ ñèñòå-
ìà áóäåò ñìîíòèðîâàíà, ÿäðî ïåðåäàåò óïðàâëåíèå ïðîöåññó, êîòîðûé
íàçûâàåòñÿ init. Íà ýòàïå ðàáîòû ïðîöåññà init âûäàþòñÿ ñîîáùåíèÿ

Ðèñ. 14: Ìîíòèðîâàíèå êîðíåâîãî êàòàëîãà


34

ñâåòëî-ñåðîãî öâåòà. Ýòî ïîçâîëÿåò îòëè÷àòü ñîîáùåíèÿ ÿäðà îò äðóãèõ


ñîîáùåíèé. Ñîîáùåíèÿ ÿäðà  ÿðêî-áåëîãî öâåòà; äðóãèå ñîîáùåíèÿ 
ñâåòëî-ñåðîãî.
Ïðîöåññ init. Êîãäà îïåðàöèîííàÿ ñèñòåìà FreeBSD çàêðûâàåòñÿ
íàäëåæàùèì îáðàçîì, îíà ñ öåëüþ ïðîâåðêè òîãî, ÷òî âñå äàííûå çà-
ïèñàíû, âûïîëíÿåò äëÿ êàæäîãî äèñêà ïðîãðàììó sync, äåìîíòèðóåò
ôàéëîâûå ñèñòåìû è óñòàíàâëèâàåò äëÿ ýòèõ ôàéëîâûõ ñèñòåì ôëàæîê
clean (÷èñòî). Åñëè îïåðàöèîííàÿ ñèñòåìà FreeBSD áóäåò çàêðûòà íåêîð-
ðåêòíî, òî ôëàæîê clean óñòàíîâëåí íå áóäåò.
Îäíî èç ïåðâûõ äåéñòâèé, âûïîëíÿåìûõ ïðîöåññîì init,  ýòî ïðî-
âåðêà òîãî, óñòàíîâëåí ëè ôëàæîê clean. Åñëè ôëàæîê óñòàíîâëåí, ïðî-
öåññ init ìîíòèðóåò ôàéëîâóþ ñèñòåìó äëÿ èñïîëüçîâàíèÿ. Åñëè ôëàæîê
íå óñòàíîâëåí, ïðîöåññ init çàïóñêàåò ïðîãðàììó fsck; îíà ïðîâåðÿåò, íå
ïîâðåæäåíà ëè ôàéëîâàÿ ñèñòåìà, è èñïðàâëÿåò âñå îøèáêè, êîòîðûå â
ñîñòîÿíèè èñïðàâèòü. Ïðîãðàììà fsck ïîäîáíà ïðîãðàììå Scandisk èç
îïåðàöèîííîé ñèñòåìû Windows è äàííûé ïðîöåññ íàïîìèíàåò ïðîöåäó-
ðó Your system was not properly shut down (Âàøà ñèñòåìà íå áûëà çàêðûòà
íàäëåæàùèì îáðàçîì) â Windows. Åñëè ïðîãðàììà fsck îáíàðóæèâàåò
îøèáêó, êîòîðóþ íå ìîæåò èñïðàâèòü, îíà ïåðåâîäèò ñèñòåìó â îäíîïîëü-
çîâàòåëüñêèé ðåæèì, ÷òîáû ýòî ìîã ñäåëàòü ñèñòåìíûé àäìèíèñòðàòîð.
Ïðåäïîëîæèì, ÷òî ôëàæîê clean áûë óñòàíîâëåí.  ýòîì ñëó÷àå
ïðîöåññ init ïðèñòóïàåò ê ìîíòèðîâàíèþ âñåõ ïåðå÷èñëåííûõ â ôàéëå
/etc/fstab ôàéëîâûõ ñèñòåì, äëÿ êîòîðûõ óñòàíîâëåí ôëàæîê mount at
boot.
Ïîñëå òîãî, êàê ôàéëîâûå ñèñòåìû áóäóò ñìîíòèðîâàíû, ïðîöåññ
init ñ÷èòûâàåò ñöåíàðèè êîíôèãóðàöèè ñèñòåìû, èëè ñöåíàðèè óïðàâ-
ëåíèÿ âûïîëíåíèåì (run control scripts, rc scripts), êîòîðûå íàõîäÿòñÿ â
êàòàëîãàõ /etc è /etc/defaults. Êðîìå òîãî, init ïðîâåðÿåò êàòàëîã /user-
/local/etc/rc.d íà íàëè÷èå äîïîëíèòåëüíûõ ñöåíàðèåâ, êîòîðûå äîëæíû
çàïóñêàòüñÿ ïðîöåññîì init àâòîìàòè÷åñêè ïðè çàïóñêå îïåðàöèîííîé
ñèñòåìû (íàïðèìåð, ñöåíàðèè çàïóñêà Web-ñåðâåðîâ, ñåðâåðîâ áàç äàí-
íûõ è äð.). Ýòà ÷àñòü ïðîöåññà çàãðóçêè àíàëîãè÷íà îáðàáîòêå ôàéëîâ
cong.sys, autoexec.bat, system.ini è òåõ ÷àñòåé ñèñòåìíîãî ðååñòðà, êîòî-
35

Ðèñ. 15: Ïðèãëàøåíèå ê àóòåíòèôèêàöèè

ðûå ñâÿçàíû ñ ïàðàìåòðàìè çàïóñêà îïåðàöèîííîé ñèñòåìû Windows.


Ïîñëå ñ÷èòûâàíèÿ ñöåíàðèåâ ïðîöåññ init çàïóñêàåò ïðîãðàììó êîí-
ñîëè (è ïðîãðàììû íåñêîëüêèõ âèðòóàëüíûõ òåðìèíàëîâ). Êàê ïðàâèëî,
ýòî ïðîãðàììà getty. Äðóãàÿ ïðîãðàììà, ÷àñòî èñïîëüçóåìàÿ âìåñòî
getty,  ýòî xdm, îíà ñðàçó æå ïîñëå çàãðóçêè ñèñòåìû çàïóñêàåò ãðà-
ôè÷åñêèé ñåàíñ X-Window.  ôàéëå /etc/ttys çàäàåòñÿ, êàêàÿ èìåííî
ïðîãðàììà áóäåò çàïóñêàòüñÿ.
Ïðîãðàììà getty èíèöèàëèçèðóåò òåðìèíàë è óñòàíàâëèâàåò ðàç-
ëè÷íûå ïàðàìåòðû, îòíîñÿùèåñÿ ê òèïó òåðìèíàëà è áåçîïàñíîñòè ñè-
ñòåìû. Íàïîìíèì åùå ðàç, ÷òî ýòè ïàðàìåòðû è èõ çíà÷åíèÿ çàäàþòñÿ
â ôàéëå /etc/ttys. Çàòåì getty çàïóñêàåò ïðîãðàììó âõîäà â ñèñòåìó
 login, êîòîðàÿ ïîäòâåðæäàåò ïðàâèëüíîñòü ðåãèñòðàöèîííîãî èìåíè
ïîëüçîâàòåëÿ è ïàðîëÿ.
Âõîä âî FreeBSD. Êîãäà âñå ïðîöåññû çàïóñêà îïåðàöèîííîé ñè-
ñòåìû çàâåðøàòñÿ, âû óâèäèòå íà ýêðàíå ñëåäóþùóþ èíôîðìàöèþ (Ðèñ.
15).
Åñëè ïðè óñòàíîâêå îïåðàöèîííîé ñèñòåìû âû íå ñêîíôèãóðèðî-
âàëè íèêàêîé ñåòåâîé ñðåäû, òî ïî óìîë÷àíèþ äëÿ âàøåé ñèñòåìû áó-
äåò èñïîëüçîâàòüñÿ èìÿ õîñòà amnesiac. Ââåäèòå ðåãèñòðàöèîííîå èìÿ
îáû÷íîãî ïîëüçîâàòåëÿ, êîòîðîå âû íàçíà÷èëè ñåáå âî âðåìÿ óñòàíîâêè.
Íàæìèòå Enter è ïðè ïîÿâëåíèè ïðèãëàøåíèÿ ââåäèòå ïàðîëü. Îáðàòèòå
âíèìàíèå, ÷òî ïàðîëü íå áóäåò îòîáðàæàòüñÿ íà ýêðàíå.
Ïîñëå òîãî êàê âû ââåäåòå ïàðîëü, ïðîãðàììà âõîäà â ñèñòåìó
ñðàâíèâàåò åãî ñ ïàðîëåì, õðàíèìûì â áàçå äàííûõ. Åñëè ñðàâíåíèå
ïðîéäåò óñïåøíî, âû óâèäèòå íà ýêðàíå ÷òî-íèáóäü âðîäå Ðèñ. 16.
Åñëè ýòî âàø ïåðâûé âõîä â ñèñòåìó â êà÷åñòâå îáû÷íîãî ïîëüçî-
âàòåëÿ, âû, ïî-âèäèìîìó, íå óâèäèòå ïåðâóþ ñòðîêó ñ èíôîðìàöèåé î
ïîñëåäíåì âõîäå â ñèñòåìó (Last login).
36

Ðèñ. 16: Ðåçóëüòàò óñïåøíîé àóòåíòèôèêàöèè

Îáÿçàòåëüíî îáðàùàéòå âíèìàíèå íà èíôîðìàöèþ î ïîñëåäíåì âõî-


äå â ñèñòåìó. Åñëè, íàïðèìåð, äàííàÿ ñòðîêà èíôîðìèðóåò âàñ î òîì,
÷òî âðåìÿ ïîñëåäíåãî ïîäêëþ÷åíèÿ  ýòî Sat Sept 15 14:05:29, à âû â
ýòîò äåíü îòäûõàëè çà ãîðîäîì è íàâåðíÿêà íå ðàáîòàëè, ýòî çíà÷èò, ÷òî
êòî-òî ïîñòîðîííèé õîçÿéíè÷àë â ñèñòåìå, ïîëüçóÿñü âàøèìè ó÷åòíûìè
äàííûìè.  ýòîì ñëó÷àå íåìåäëåííî ìåíÿéòå ïàðîëü (âîñïîëüçóéòåñü êî-
ìàíäîé passwd) è ïîñòàâüòå â èçâåñòíîñòü ñèñòåìíîãî àäìèíèñòðàòîðà
î âçëîìå çàùèòû.
Îñòàëüíàÿ èíôîðìàöèÿ  ýòî èíôîðìàöèåé îá àâòîðñêèõ ïðàâàõ è
î ÿäðå (êîãäà îíî áûëî ñîáðàíî). Ïîñëåäíÿÿ ñòðîêà  ýòî ïðèãëàøåíèå
êîìàíäíîãî èíòåðïðåòàòîðà. Îïåðàöèîííàÿ ñèñòåìà FreeBSD æäåò îò âàñ
ââîäà êîìàíäû.
Ó ïîëüçîâàòåëÿ root ïðèãëàøåíèåì ÿâëÿåòñÿ ñèìâîë #. Ó îáû÷íî-
ãî ïîëüçîâàòåëÿ ïðèãëàøåíèåì, êàê ïðàâèëî, ÿâëÿåòñÿ ëèáî $ (â ñòèëå
êîìàíäíîãî èíòåðïðåòàòîðà/Áîðíà), ëèáî % èëè > (â ñòèëå êîìàíäíîãî
èíòåðïðåòàòîðà Ñ). Êîãäà âû âõîäèòå â ñèñòåìó êàê ïîëüçîâàòåëü root,
ðåøåòî÷êà (#) ïîñòîÿííî íàïîìèíàåò âàì î íåîáõîäèìîñòè áûòü âíèìà-
òåëüíûì ïðè ââîäå ïîòåíöèàëüíî îïàñíûõ êîìàíä
Åñëè âû íåïðàâèëüíî ââåäåòå ðåãèñòðàöèîííîå èìÿ èëè ïàðîëü,
îïåðàöèîííàÿ ñèñòåìà âûäàåò â îòâåò ñëåäóþùåå ñîîáùåíèå:
Login incorrect login:
 ýòîì ñëó÷àå ïîïûòàéòåñü ñíîâà ââåñòè ñâîè ðåãèñòðàöèîííûå
äàííûå.
Åñëè òðè ðàçà ïîäðÿä íåïðàâèëüíî ââåñòè ðåãèñòðàöèîííîå èìÿ èëè
ïàðîëü, òî ñîçäàåòñÿ âïå÷àòëåíèå, ÷òî ñèñòåìà çàâèñëà. Íà ñàìîì äåëå
37

ýòî íå òàê. Ýòà çàäåðæêà  îäíî èç ñðåäñòâ çàùèòû, ïîìîãàþùåå ðåçêî


ñíèçèòü ýôôåêòèâíîñòü ïðîãðàìì ðàçãàäûâàíèÿ ïàðîëåé, ïûòàþùèõñÿ
âçëîìàòü çàùèòó. Ñ êàæäîé ïîñëåäóþùåé íåóäà÷íîé ïîïûòêîé çàäåðæêà
ìîæåò óâåëè÷èâàòüñÿ â îïðåäåëåííîé ïðîãðåññèè. Òàê ÷òî ïîäîæäèòå
íåñêîëüêî ñåêóíä è ïðèãëàøåíèå login: ïîÿâèòñÿ ñíîâà.
Åñëè ê âàøåìó êîìïüþòåðó ìîãóò ïîëó÷èòü äîñòóï äðóãèå ëþäè, à
âû ñîáèðàåòåñü îòëó÷èòüñÿ (ïóñòü äàæå íà íåñêîëüêî ìèíóò), íóæíî âûé-
òè èç ñèñòåìû. Ýòî ïðåäîòâðàùàåò äîñòóï ê íåé äðóãèõ ïîëüçîâàòåëåé
ïîä Âàøèì èìåíåì. ×òî áû âûéòè èç FreeBSD, ââåäèòå exit â êîìàíäíîé
ñòðîêå. Íà ýêðàíå âíîâü ïîÿâèòñÿ ïðèãëàøåíèå íà ââîä ðåãèñòðàöèîííîãî
èìåíè, êîòîðîå Âû âèäåëè ïðè çàãðóçêå FreeBSD. Ïåðåä âûõîäîì íåïëîõî
áûëî áû î÷èñòèòü ýêðàí, ñ ïîìîùüþ êîìàíäû clean.
Ïåðåä âûêëþ÷åíèåì ïèòàíèÿ î÷åíü âàæíî âñåãäà ïðàâèëüíî çàêðû-
âàòü îïåðàöèîííóþ ñèñòåìó FreeBSD (êàê è ëþáóþ äðóãóþ îïåðàöèîí-
íóþ ñèñòåìó UNIX). Åñëè ýòîãî íå ñäåëàòü, ìîæåò ïðîèçîéòè ñåðüåçíîå
ïîâðåæäåíèå ôàéëîâîé ñèñòåìû.
Ïðàâèëüíîå çàêðûòèå ñèñòåìû îñóùåñòâëÿåòñÿ ñ ïîìîùüþ êîìàí-
äû shutdown. Ñèíòàêñèñ êîìàíäû shutdown èìååò ñëåäóþùèé âèä:
shutdown [äåéñòâèå] [êîãäà] [øèðîêîâåùàòåëüíîå ñîîáùå-
íèå]
Ïåðâûé ïàðàìåòð îçíà÷àåò äåéñòâèå, êîòîðîå äîëæíà âûïîëíèòü
êîìàíäà shutdown, âòîðîé óêàçûâàåò âðåìÿ, êîãäà ýòî äåéñòâèå áóäåò
âûïîëíÿòüñÿ, à òðåòèé ïàðàìåòð ïðåäñòàâëÿåò ñîáîé ñîîáùåíèå, êîòî-
ðîå áóäåò ïîñëàíî âñåì ïîëüçîâàòåëÿì, çàðåãèñòðèðîâàííûì â äàííûé
ìîìåíò â ñèñòåìå.  òàáëèöå 3 ïåðå÷èñëåíû âñå ïàðàìåòðû, êîòîðûå ìî-
ãóò èñïîëüçîâàòüñÿ äëÿ îáîçíà÷åíèÿ äåéñòâèÿ, âûïîëíÿåìîãî êîìàíäîé
shutdown.
Âðåìåííûå ïàðàìåòðû êîìàíäû shutdown ìîãóò áûòü çàäàíû íåñêîëü-
êèìè ñïîñîáàìè. Êëþ÷åâîå ñëîâî now îçíà÷àåò, ÷òî äåéñòâèå äîëæíî
áûòü âûïîëíåíî íåìåäëåííî. Âîçìîæåí òàêæå ôîðìàò +n, ãäå n óêà-
çûâàåò ÷åðåç ñêîëüêî ìèíóò áóäåò âûïîëíåíî óêàçàííîå äåéñòâèå (ýòî
äàåò ïîëüçîâàòåëÿì âðåìÿ ñîõðàíèòü ôàéëû è çàêðûòü ïðîãðàììû). Äî-
ïóñòèì è ôîðìàò yymmddhhmm, ïîçâîëÿþùèé çàäàòü òî÷íîå âðåìÿ
38

Òàáëèöà 3: Ïàðàìåòðû êîìàíäû shutdown

Äåéñòâèå ×òî îçíà÷àåò


íå óêàçàíî Îòêëþ÷àåò âñåõ ïîëüçîâàòåëåé è ïåðåâîäèò ñèñòåìó â îä-
íîïîëüçîâàòåëüñêèé ðåæèì.
-h Îñòàíàâëèâàåò ñèñòåìó.
-p Îñòàíàâëèâàåò ñèñòåìó è âûêëþ÷àåò ýëåêòðîïèòàíèå (åñëè
ýòî àïïàðàòíî è ïðîãðàììíî âîçìîæíî).
-r Ïåðåçàãðóæàåò ñèñòåìó.
-k Îòêëþ÷àåò âñåõ ïîëüçîâàòåëåé è çàïðåùàåò äàëüíåéøèå
ðåãèñòðàöèþ è âõîä â ñèñòåìó (çà èñêëþ÷åíèåì root). Îä-
íàêî ñèñòåìà îñòàåòñÿ â ìíîãîïîëüçîâàòåëüñêîì ðåæèìå è
ïîäêëþ÷åííîé ê ñåòè.
-o Çàêðûâàåò ñèñòåìó, íå ïîñûëàÿ ñèãíàë ïðîöåññó init. Ýòî
íå î÷åíü õîðîøî, ïîñêîëüêó â ýòîì ñëó÷àå íå çàïóñêàþòñÿ
ñöåíàðèè, çàêðûâàþùèå îòäåëüíûå ïðîãðàììû.
-n Åñëè ïðè ýòîì çàäàí òàêæå è ïàðàìåòð -î, òî ïåðåä çàêðû-
òèåì êýø ôàéëîâîé ñèñòåìû (äèñêà) íå áóäåò ñáðàñûâàòüñÿ
íà äèñê. Ýòî ìîæåò ïðèâåñòè ê ïîòåðå äàííûõ.

âûïîëíåíèÿ äåéñòâèÿ. Çäåñü óó  ãîä, mm  ìåñÿö, dd  äåíü, hh 


÷àñû (â 24-÷àñîâîì ôîðìàòå) è mm  ìèíóòû. Åñëè ãîä, ìåñÿö è äåíü íå
çàäàíû, òî ýòî îçíà÷àåò, ÷òî äåéñòâèå äîëæíî áûòü âûïîëíåíî ñåãîäíÿ.
Åñëè âû çàäàäèòå âðåìÿ, êîòîðîå óæå ïðîøëî, òî íà ýêðàíå ïîÿâèòñÿ
ñîîáùåíèå, ïðåäóïðåæäàþùåå îá ýòîì.
×àñòü êîìàíäû shutdown, íàçûâàåìàÿ øèðîêîâåùàòåëüíûì ñîîá-
ùåíèåì, ïðåäñòàâëÿåò ñîáîé ïðåäóïðåæäåíèå, êîòîðîå ÷åðåç ðåãóëÿðíûå
èíòåðâàëû âðåìåíè ïîñûëàåòñÿ âñåì ïîäêëþ÷åííûì ê ñèñòåìå ïîëüçî-
âàòåëÿì. Ýòè ñîîáùåíèÿ íà÷èíàþò ïåðåäàâàòüñÿ çà 10 ÷àñîâ äî ïðåä-
ñòîÿùåãî çàêðûòèÿ ñèñòåìû è ñòàíîâÿòñÿ âñå áîëåå ÷àñòûìè ïî ìåðå
ïðèáëèæåíèÿ ìîìåíòà çàêðûòèÿ.
Íèæå äàí ïðèìåð òèïè÷íîé êîìàíäû çàêðûòèÿ ñèñòåìû, â äàííîì
ñëó÷àå ñ 10-ìèíóòíîé çàäåðæêîé.
shutdown -h +10 Hard disk needs to be replaced
 ðåçóëüòàòå êîìàíäà shutdown íà÷íåò âûïîëíÿòüñÿ â ôîíîâîì
39

Ðèñ. 17: Ñîîáùåíèå î òîì, ÷òî ñèñòåìà áóäåò ïåðåçàãðóæåíà

Ðèñ. 18: Ñîîáùåíèå nologin

ðåæèìå. ×åðåç 10 ìèíóò ñèñòåìà îñòàíîâèòñÿ. Êðîìå òîãî, íà âñåõ òåðìè-


íàëàõ ïîëüçîâàòåëåé áóäåò îòîáðàæåíî ñëåäóþùåå øèðîêîâåùàòåëüíîå
ñîîáùåíèå (Ðèñ. 17).
Çà ïÿòü ìèíóò äî ïðåäñòîÿùåãî çàêðûòèÿ ñèñòåìà ñîçäàåò ôàéë
/var/run/nologin. Òàêèì ñïîñîáîì çàïðåùàåòñÿ äàëüíåéøàÿ ðåãèñòðàöèÿ
äëÿ âõîäà â ñèñòåìó, à êîãäà êòî-íèáóäü ïûòàåòñÿ ýòî ñäåëàòü, ó íåãî íà
ýêðàíå îòîáðàæàåòñÿ ñîäåðæèìîå ýòîãî ôàéëà. Â ýòîò ôàéë ïîìåùàåòñÿ
øèðîêîâåùàòåëüíîå ñîîáùåíèå è óêàçûâàåòñÿ âðåìÿ çàêðûòèÿ ñèñòåìû.
Òàê, â äàííîì ñëó÷àå, âñÿêèé, êòî ïîïûòàåòñÿ çàðåãèñòðèðîâàòüñÿ â ñè-
ñòåìóå óâèäèò íà ýêðàíå ñëåäóþùåå ñîîáùåíèå (Ðèñ. 18).
Êîãäà íàñòóïàåò âðåìÿ çàêðûòèÿ, âûïîëíÿþòñÿ ñëåäóþùèå äåé-
ñòâèÿ: â ïðîöåññ init ïîñûëàåòñÿ ñèãíàë TERM, êîòîðûé ïðåêðàùàåò
ñîçäàíèå ëþáûõ íîâûõ ïðîöåññîâ. Ïðîöåññ init ÷èòàåò ñîäåðæèìîå ôàé-
ëà /etc/rc.shutdown è âûïîëíÿåò âñå ñöåíàðèè çàêðûòèÿ äëÿ îòäåëüíûõ
ïðîãðàìì, êîòîðûå òàì ñîäåðæàòñÿ. Âñåì ïðîöåññàì ïîñûëàåòñÿ ñèã-
íàë TERM è äàåòñÿ âðåìÿ íà òî, ÷òîáû ìÿãêî, òî åñòü êîððåêòíî,
çàâåðøèòü ñâîþ ðàáîòó. Âñåì ïðîöåññàì, êîòîðûå â òå÷åíèå ðàçóìíîãî
ïðîìåæóòêà âðåìåíè íå îòâå÷àþò íà ñèãíàë TERM, ïîñûëàåòñÿ ñèãíàë
KILL, êîòîðûé íåëüçÿ ïðîèãíîðèðîâàòü. Îí æåñòêî çàâåðøàåò ïðîöåññ,
ãðóáî ïðåðûâàÿ åãî âûïîëíåíèå. Ñ ïîìîùüþ êîìàíäû sync äàííûå èç
êýøà ñèíõðîíèçèðóþòñÿ ñ íîñèòåëåì èíôîðìàöèè, ôàéëîâûå ñèñòåìû
40

Ðèñ. 19: System halted

äåìîíòèðóþòñÿ è îòìå÷àþòñÿ êàê clean. Ïðîèñõîäèò îñòàíîâ ÿäðà. Êðî-


ìå òîãî, êîìàíäà shutdown ïðîèçâîäèò â ñèñòåìíûé æóðíàë çàïèñü, â
êîòîðîé îòìå÷àåòñÿ âðåìÿ çàêðûòèÿ ñèñòåìû è êòî ýòî ñäåëàë. Îáðàòèòå
âíèìàíèå, ÷òî çàêðûâàòü ñèñòåìó ìîæåò òîëüêî ñóïåðïîëüçîâàòåëü (ëèáî
çàðåãèñòðèðîâàâøèéñÿ êàê root, ëèáî ñòàâøèé èì ñ ïîìîùüþ êîìàíäû
su/sudo).
×òîáû çàêðûòü ñèñòåìó ñåé÷àñ, ââåäèòå su è íàæìèòå Enter . Êîãäà
ïîÿâèòñÿ ñîîòâåòñòâóþùåå ïðèãëàøåíèå, ââåäèòå ïàðîëü ïîëüçîâàòåëÿ
root. Ïðåäïîëàãàÿ, ÷òî â ñèñòåìå íåò äðóãèõ ïîëüçîâàòåëåé, ââîäèì ñëå-
äóþùóþ êîìàíäó:
shutdown −h now

Êîãäà ïðîèçîéäåò çàêðûòèå ñèñòåìû, âû óâèäèòå íà ýêðàíå ñëåäó-


þùåå ñîîáùåíèå (Ðèñ. 19).
È òîëüêî ïîñëå ýòîãî ìîæíî ñïîêîéíî âûêëþ÷àòü ýëåêòðîïèòàíèå
âû÷èñëèòåëüíîé ñèñòåìû.
Äëÿ îñòàíîâà è ïåðåçàãðóçêè ñèñòåìû ìîæíî èñïîëüçîâàòü åùå äâå
êîìàíäû: halt è reboot, ñîîòâåòñòâåííî. Îäíàêî ëó÷øå íå ïðèâûêàòü
ïîëüçîâàòüñÿ ýòèìè êîìàíäàìè. Íè îäíà èç íèõ íå âûïîëíÿåò ñöåíàðèé
41

rc.shutdown, ÷òî ìîæåò ïðèâåñòè ê íåïðàâèëüíîìó çàâåðøåíèþ ðàáîòû


íåêîòîðûõ ïðîãðàìì. Êðîìå òîãî, íè îäíà èç ýòèõ ïðîãðàìì íå ïîçâî-
ëÿåò çàäàâàòü âðåìåííóþ çàäåðæêó è íè îäíà èç íèõ íå ïðåäóïðåæäàåò
ïîëüçîâàòåëåé î ïðåäñòîÿùåì çàêðûòèè ñèñòåìû. Ïîýòîìó äëÿ îñòàíîâà
ñèñòåìû âñåãäà èñïîëüçóéòå êîìàíäó shutdown.
Ïðè íàæàòèè Ctrl + Alt + Del , FreeBSD ïåðåõâàòûâàåò ñèã-
íàë òîé êîìáèíàöèè êëàâèø è âûïîëíÿåò äåéñòâèÿ àíàëîãè÷íûå êîìàí-
äå reboot. Ýòî ìîæåò ñîçäàòü ïðîáëåìû, åñëè îáû÷íûå ïîëüçîâàòåëè
èìåþò äîñóï ê êëàâèàòóðå ñåðâåðà. Ðåêîìåíäóåòñÿ ñêîíôèãóðèðîâàòü
FreeBSD òàêèì îáðàçîì, ÷òî áû íàæàòèå ýòèõ êëàâèø íå ïðèâîäèëî ê
ïåðåçàãðóçêå.

1.3.5 Àâòîðèçàöèÿ â ñèñòåìå

Ïîñëå óñòàíîâêè ñèñòåìû ïðîöåññ çàãðóçêè çàêàí÷èâàåòñÿ íå îêíîì


sysinstall, à ïðèãëàøåíèåì àâòîðèçàöèè. Àâòîðèçèðóéòåñü êàê ïîëüçî-
âàòåëü, êîòîðîãî Âû ñîçäàëè, ââåäÿ ëîãèí è ïàðîëü. Çíàê $ îçíà÷àåò,
÷òî Âû çàëîãèíåíû, êàê îáû÷íûé ïîëüçîâàòåëü. Ïîñìîòðåòü ïîä êåì
Âû çàëîãèíåíû ìîæíî ââåäÿ êîìàíäó whoami (êòî ÿ òàêîé), íà ÷òî
îïåðàöèîííàÿ ñèñòåìà îòâåòèò Âàì êòî Âû òàêîé. ×òîáû ïîëó÷èòü ïðàâà
àäìèíèñòðàòîðà ââåäèòå êîìàíäó su. Ýòà êîìàíäà çàïðàøèâàåò ïàðîëü
ïîëüçîâàòåëÿ root. Ïîñêîëüêó ñîîáùàòü åãî íèêîìó íå ðåêîìåíäóåòñÿ, òî
ñòîèò íàñòðîèòü ïðîãðàììó sudo, êîòîðàÿ ïðåäîñòàâëÿåò äîïîëíèòåëü-
íûå ïîëíîìî÷èÿ äëÿ âûïîëíåíèÿ àäìèíèñòðàòèâíûõ çàäà÷ îáû÷íîìó
ïîëüçîâàòåëþ áåç èñïîëüçîâàíèÿ ïàðîëÿ ñóïåðïîëüçîâàòåëÿ. Íî äëÿ íà-
÷àëà Âàì íåîáõîäèìî çàéòè êàê ñóïåðïîëüçîâàòåëü. Ñïðîñèâ ó ñèñòåìû
whoami îíà ïî÷òåííî ñêàæåò, ÷òî Âû root.
×òî áû ðàáîòàòü ñ ïðîãðàììîé sudo íåîáõîäèìî äîáàâèòü íàøå-
ãî ïîëüçîâàòåëÿ â ñïèñîê òåõ, êòî ìîæåò åå èñïîëüçîâàòü. Äëÿ ýòîãî
íåîáõîäèìî ââåñòè êîìàíäó visudo. Ýòîé êîìàíäîé îòêðûâàåòñÿ ôàéë ñ
íàñòðîéêàìè ïðîãðàììû sudo â ðåäàêòîðå vi.
 ôàéëå íàñòðîåê âû ìîæåòå íàéòè ñòðîêó Uncomment to allow
people in group wheel to run all commands (Ðàñêîìåíòèðóéòå, ÷òî áû ðàç-
ðåøèòü ïîëüçîâàòåëÿì ãðóïïû wheel çàïóñêàòü ëþáûå êîìàíäû). Ñòðîêà
42

Ðèñ. 20: Ôàéë sudoers

ñ÷èòàåòñÿ çàêîìåíòèðîâàíîé (íåàêòèâíîé) åñëè â íà÷àëå ñòðîêè ñòîèò


ñèìâîë #. Âñå ïîñëåäóþùèå ñèìâîëû èãíîðèðóþòñÿ. ×òî áû ïîçâîëèòü
ïîëüçîâàòåëÿì ãðóïïû wheel èñïîëüçîâàòü sudo, íåîáõîäèìî óäàëèòü
ñèìâîë #.
Ïîñêîëüêó vi ìû áóäåì ó÷èòü ïîçæå, òî ñåé÷àñ ïðîñòî âûïîëíèòå
óêàçàíèÿ. Äîâåñòè êóðñîð äî ñòðîêè # %wheel ALL=ALL(ALL) ñ ïî-
ìîùüþ êëàâèøè j èëè ñòðåëêè âíèç è äâàæäû íàæàòü õ . Ïîòîì
íàæìèòå : , w äëÿ ñîõðàíåíèÿ (write) è q äëÿ âûõîäà (quit). Ýòèì
ìû ðàçðåøèëè ïîëüçîâàòåëÿì èç ãðóïïû wheel èñïîëüçîâàòü ïðîãðàììó
sudo.
Ðàçóìååòñÿ ôàéë íàñòðîåê ïðîãðàììû sudo î÷åíü ãèáîê. Ìîæíî
íàñòðîèòü ðàçðåøåíèå íà âûïîëíåíèå îòäåëüíûõ êîìàíä äëÿ ðàçíûõ
ïîëüçîâàòåëåé èëè ãðóïï, èëè íàïðèìåð ðàçðåøèòü èõ âûïîëíåíèå â
îïðåäåëåííîå âðåìÿ. Ñàìîå ãëàâíîå ýòî îòäàâàòü ñåáå îò÷åò â òîì, êàêè-
ìè ïîëíîìî÷èÿìè ñòîèò íàäåëÿòü ïîëüçîâàòåëåé è ê êàêèì ïîñëåäñòâèÿì
ýòî ìîæåò ïðèâåñòè.
Ïîñëå ýòîãî âû ìîæåòå âûïîëíÿòü àäìèíèñòðàòèâíûå çàäà÷è èñ-
ïîëüçóÿ sudo. Âûéäèòå èç ðåæèìà ñóïåðïîëüçîâàòåëÿ ñ ïîìîùüþ êî-
ìàíäû exit èëè êîìáèíàöèè êëàâèø Ctrl + D , çàòåì íàáåðèòå sudo -s
43

(àäìèíñêèå ïðàâà â èíòåðàêòèâíîì ðåæèìå) è ñâîé ïàðîëü (ÍÅ ïàðîëü


ñóïåðïîëüçîâàòåëÿ) è äëÿ ïðîâåðêè ñïðîñèòå ó êîìïüþòåðà êòî Âû åñòü
òàêîé.
Êîìàíäó sudo ìîæíî èñïîëüçîâàòü íå òîëüêî â èíòåðàêòèâíîì
ðåæèìå. Íàïðèìåð, çàëîãèíüòåñü ïîä ñâîèì èìåíåì è íàáåðèòå sudo
shutdown -p now ïîñëå çàïðîñà ïàðîëÿ ñèñòåìà âûêëþ÷èòñÿ.

1.4 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó

1. Óñòàíîâèòü FreeBSD íà âèðòóàëüíóþ ìàøèíó

2. Ñîçäàòü ïîëüçîâàòåëÿ ñî ñâîèì èìåíåì

3. Óñòàíîâèòü îáîëî÷êó êîìàíäíîé ñòðîêè bash è ïðîãðàììó sudo

4. Äîáàâèòü ñâîåãî ïîëüçîâàòåëÿ â ãðóïïó, êîòîðàÿ èìååò ïðàâî èñ-


ïîëüçîâàòü sudo

1.5 Ñîäåðæàíèå îò÷åòà

 îò÷åòå äîëæíà áûòü ïðåäñòàâëåíà ïîñëåäîâàòåëüíîñòü äåéñòâèé


ñîçäàíèÿ âèðòóàëüíîé ìàøèíû è óñòàíîâêè FreeBSD â âèäå ñêðèíøîòîâ,
ñîïðîâîæäåííûõ êîììåíòàðèÿìè. Ïðèâåäèòå îïèñàíèÿ ôóíêöèé Virtual-
Box, à òàêæå îïèñàíèå ðàçëè÷íûõ âàðèàíòîâ óñòàíîâêè FreeBSD ñ èçëî-
æåíèåì ñâîèõ èäåé, â êàêîì ñëó÷àå èõ íóæíî ïðèìåíÿòü.

1.6 Âîïðîñû äëÿ ñàìîêîíòðîëÿ

1. Êàêîâû ïðåèìóùåñòâà èñïîëüçîâàíèÿ âèðòóàëüíûõ âû÷èñëèòåëü-


íûõ ñèñòåì?

2. Êàê ïåðåêëþ÷èüñÿ èç ãîñòåâîé ÎÑ â îñíîâíóþ è îáðàòíî?

3. Êàêèå ðåæèìû îòîáðàæåíèÿ îêíà ãîñòåâîé ÎÑ åñòü â VirtualBox?

4. ×òî òàêîå snapshot?


44

5. ×òî òàêîå UNIX?

6. ×òî òàêîå FreeBSD?

7. ×åì UNIX îòëè÷àåòñÿ îò FreeBSD?

8. Êàêèìè ñïîñîáàìè ìîæíî ïîëó÷èòü FreeBSD?

9. ×òî òàêîå ISO-îáðàç?

10. Êàê ïðîñìîòðåòü ñïèñîê óñòðîéñòâ, îáíàðóæåííûõ ÿäðîì ñèñòåìû?

11. ×òî òàêîå ìîíòèðîâàíèå?

12. Ãäå âî FreeBSD íàõîäèòñÿ äîìàøíèé êàòàëîã ïîëüçîâàòåëÿ?

13. ×òî òàêîå ãðóïïà wheel?

14. Êàêèì ñïîñîáîì îñóùåñòâëÿåòñÿ íàñòðîéêà ïðîãðàìì â UNIX ñè-


ñòåìàõ?
45

2 Ëàáîðàòîðíàÿ ðàáîòà 2. Çíàêîìñòâî ñ

FreeBSD

Öåëüþ ðàáîòû ÿâëÿåòñÿ çíàêîìñòâî ñ ðàáîòîé âî FreeBSD è èçó÷å-


íèå îñíîâíûõ êîìàíä FreeBSD.

2.1 Êîìàíäíûé èíòåðïðåòàòîð

2.1.1 Êàê ðàáîòàåò êîìàíäíûé èíòåðïðåòàòîð

Ôèëîñîôèÿ ðàçðàáîòêè UNIX ñèñòåì çà ïî÷òè 40 ëåò ñäåëàëè êî-


ìàíäíóþ ñòðîêó ñàìûì ìîùíûì ñðåäñòâîì äëÿ óïðàâëåíèÿ îïåðàöè-
îííîé ñèñòåìîé.  îòëè÷èå îò ãðàôè÷åñêîãî èíòåðôåéñà, êîòîðûé çíà-
êîì Âàì ïî îïåðàöèîííûì ñèñòåìàì ñåìåéñòâà Windows, îíà ïîçâîëÿåò
áûñòðåå îòäàâàòü êîìàíäû íà ðàçëè÷íûå äåéñòâèÿ, ïîëíîñòüþ êîíòðî-
ëèðîâàòü ïðîöåññ èõ âûïîëíåíèÿ, à òàê æå îñóùåñòâëÿåò èíòåãðàöèþ
ïðèëîæåíèé â åäèíîå öåëîå, ïðåäîñòàâëÿÿ ñâîåîáðàçíûé èíòåðôåéñ äëÿ
íèõ.
Êîìàíäíûé èíòåðïðåòàòîð ïðåäñòàâëÿåò ñîáîé èíòåðôåéñ ê UNIX.
Ôàêòè÷åñêè ýòî ïðîãðàììíûé óðîâåíü, êîòîðûé ïðåäîñòàâëÿåò ñðåäó
äëÿ ââîäà êîìàíä, îáåñïå÷èâàÿ òåì ñàìûì âçàèìîäåéñòâèå ìåæäó ïîëü-
çîâàòåëåì è ÿäðîì îïåðàöèîííîé ñèñòåìû. Êîìàíäíûé èíòåðïðåòàòîð
ïðåîáðàçóåò ÿçûê ïîíÿòíûé ÷åëîâåêó, â êîìàíäû ïîíÿòíûå ÿäðó.
Ñóùåñòâóåò ìíîæåñòâî êîìàíäíûõ èíòåðïðåòàòîðîâ, ðàññ÷èòàíûõ
íà ðàçëè÷íûå çàäà÷è.

2.1.2 Îáçîð è îïèñàíèå êîìàíäíûõ èíòåðïðåòàòîðîâ

sh (êîìàíäíûé èíòåðïðåòàòîð Bourne)


Ñòàíäàðòíûé èíòåðïðåòàòîð, êîòîðûé ïîëíîñòüþ ñîîòâåòñòâóåò ñòàí-
äàðòó POSIX7 . Âî FreeBSD ýòîò èíòåðïðåòàòîð ÿâëÿåòñÿ èíòåðïðåòàòî-
ðîì ïî óìîë÷àíèþ äëÿ ïîëüçîâàòåëÿ îïåðàöèîííîé ñèñòåìû. Âû óæå ñ

7 Portable Operating System Interface for UNIX - Ïåðåíîñèìûé èíòåðôåéñ îïåðàöèîííûõ ñèñòåì
UNIX - Íàáîð ñòàíäàðòîâ, îïèñûâàþùèõ èíòåðôåéñû ìåæäó îïåðàöèîííîé ñèñòåìîé è ïðè-
êëàäíîé ïðîãðàììîé
46

íèì ðàáîòàëè, êîãäà íà ïðåäûäóùåé ëàáå ââîäèëè êîìàíäû â êîìàíä-


íóþ ñòðîêó. sh íå óäîáåí äëÿ èíòåðàêòèâíîãî èñïîëüçîâàíèÿ, íî èäå-
àëåí äëÿ ïðîãðàììèðîâàíèÿ íà ÿçûêå êîìàíäíîãî èíòåðïðåòàòîðà ( sh-
ïðîãðàììèðîâàíèå ). Ïîñêîëüêó ýòîò èíòåðïðåòàòîð ÿâëÿåòñÿ èñõîäíûì
äëÿ âñåõ îñòàëüíûõ, òî âû ìîæåòå áûòü óâåðåíû, ÷òî Âàøà ïðîãðàììà,
íàïèñàííàÿ íà sh, áóäåò ðàáîòàòü â ëþáîì äðóãîì POSIX-ñîâìåñòèìîì
èíòåðïðåòàòîðå.
csh
Óëó÷øåííàÿ âåðñèÿ sh. Áûë ñîçäàí äëÿ çàìåíû sh ïðè èíòåðàê-
òèâíîì èñïîëüçîâàíèè. Èìååò ìíîæåñòâî äîïîëíåíèé, êàê óïðàâëåíèå
çàäàíèÿìè, èñòîðèÿ êîìàíä, äîáàâëåíû ôàéëû ñöåíàðèåâ âûõîäà èç ñè-
ñòåìû è ò. ï. Òàêæå áûë ïðèçâàí äëÿ ñîçäàíèÿ ñöåíàðèåâ (áóêâó Ñ â
íàçâàíèè îí ïîëó÷èë èç-çà òîãî, ÷òî ñèíòàêñèñ î÷åíü ïîõîæ íà ÿçûê Ñ),
íî ñî âðåìåíåì áûë ïðèçíàí ñàìûì íåóäà÷íûì äëÿ ñîçäàíèÿ ñöåíàðèåâ.
Âî FreeBSD ýòîò èíòåðïðåòàòîð ÿâëÿåòñÿ ñòàíäàðòíûì äëÿ ïîëüçîâàòåëÿ
root. Âû òîæå èì óæå ïîëüçîâàëèñü, êîãäà âûïîëíÿëè êîììàíäû îò
root'a. Â äàííûé ìîìåíò çàìåíåí íà tcsh, à csh ÿâëÿåòñÿ âñåãî ëèøü
ññûëêîé íà tcsh äëÿ îáåñïå÷åíèÿ ñîâìåñòèìîñòè.
bash
Î÷åíü ëåãêèé â èñïîëüçîâàíèè è äîñòàòî÷íî ìîùíûé êîìàíäíûé
èíòåðïðåòàòîð. ßâëÿåòñÿ ñòàíäàðòíûì äëÿ îïåðàöèîííûõ ñèñòåì GNU/
Linux. Ñ íåãî ìû è íà÷íåì èçó÷åíèå êîìàíäíîé ñòðîêè.
zsh
Ñàìûé ìîùíûé êîìàíäíûé èíòåðïðåòàòîð, èç âñåõ, ÷òî áûëè èçîá-
ðåòåíû. Âîçìîæíîñòè ïî àâòîìàòèçàöèè, àâòîäîïîëíåíèþ, ñðåäñòâàì ïî-
èñêà è óãàäûâàíèþ äåéñòâèé ïîëüçîâàòåëÿ ïîçâîëÿþò ïåðåéòè íà íîâûé
óðîâåíü îáùåíèÿ ñ îïåðàöèîííîé ñèñòåìîé. Ýòî â íåêîòîðîé ñòåïåíè è
ÿâëÿåòñÿ åãî ìèíóñîì, ïîñêîëüêó â íàñòðîéêàõ ïî óìîë÷àíèþ îí ñëåã-
êà ïðîèãðûâàåò bash, à äëÿ òîãî, ÷òî áû îí ïðîÿâèë âñþ ñâîþ ìîùü
íåîáõîäèìî äîëãîå èçó÷åíèå åãî ôóíêöèé è ïîñòîÿííàÿ ïîäñòðîéêà ïîä
êîíêðåòíîãî ïîëüçîâàòåëÿ.
ksh/pdksh
Î÷åíü ïîõîæ íà csh, íî åñòü íåñêîëüêî äîïîëíèòåëüíûõ ôóíöèé,
47

êàê íàïðèìåð ðåäàêòèðîâàíèå êîìàíä èç èñòîðèè ñ ïîìîùüþ êîìàíä


òåêñòîâûõ ðåäàêòîðîâ vi è emacs. Òàêæå èìååòñÿ ðàçâèòàÿ ïîääåðæêà
ãîðÿ÷èõ êëàâèø.
Ïîñëå òîãî, êàê âû çàëîãèíèëèñü â ñèñòåìó, Âû ïîïàäàåòå â êîìàíä-
íûé èíòåðïðåòàòîð sh. ×òî áû ðàáîòàòü ñ èíòåðïðåòàòîðîì bash ìîæíî
íàáðàòü êîìàíäó bash è (ðàçóìååòñÿ, åñëè bash óñòàíîâëåí) Âû ñðàçó
óâèäèòå, êàê èçìåíèëîñü ïðèãëàøåíèå êîìàíäíîé ñòðîêè. Â íàñòðîéêàõ
ïî óìîë÷àíèþ bash óêàçûâàåò èìÿ ïîëüçîâàòåëÿ, à òàêæå ïóòü, ïî êî-
òîðîìó íàõîäèòñÿ ïîëüçîâàòåëü. Ýòî ïðèãëàøåíèå íå ñîâñåì óäîáíî, íî
ìû ïîçæå åãî èçìåíèì. Ñðàçó æå ìîæíî ïîñìîòðåòü ñàìóþ ïîïóëÿðíóþ
ôóíêöèþ bash'à, êîòîðîé íåò â sh. Ýòî àâòîäîïîëíåíèå êîìàíä è ïóòåé.
Íàïðèìåð íàáðàâ íåñêîëüêî áóêâ íà÷àëà êîìàíäû, ìîæíî íàæàòü →−−−


è bash äîïîëíèò êîìàíäó èëè (åùå ðàç íàæàòü → −
−−
→− ) ïðåäëîæèò íà
âûáîð âîçìîæíûå âàðèàíòû. Òî÷íî òàê æå äîïîëíÿþòñÿ ïóòè ê ôàéëàì.
Ðåêîìåíäóþ çàïîìíèòü Âàì ýòó îñîáåííîñòü è ïî÷àùå èñïîëüçîâàòü. Ýòî
ïîçâîëèò Âàì áûñòðåå ðàáîòàòü ñ ñèñòåìîé, à òàê æå èçáàâèò îò îøèáîê
ïðè íàáîðå. Ê ñîæàëåíèþ bash íå óìååò äîïîëíÿòü îïöèè êîìàíä. Ýòà
âîçìîæíîñòü ñóùåñòâóåò â zsh.
Ïîñêîëüêó íå î÷åíü óäîáíî êàæäûé ðàç ïðè âõîäå â ñèñòåìó âðó÷-
íóþ çàïóñêàòü bash è íåðàçóìíî ñòàâèòü åãî â ñêðèïò login (àíàëîã
àâòîçàïóñêà â windows  ïðè âõîäå â ñèñòåìó, ïåðâûì äåëîì âûïîëíÿ-
þòñÿ âñå êîìàíäû â ýòîì ôàéëå), òî ìû ñäåëàåì åãî èíòåðïðåòàòîðîì ïî
óìîë÷àíèþ äëÿ íàøåãî ïîëüçîâàòåëÿ.
Ñïèñîê êîìàíäíûõ èíòåðïðåòàòîðîâ õðàíèòñÿ â ôàéëå /etc/shells.
Íàáðàâ êîìàíäó cat /etc/shells âû óâèäèòå ñïèñîê óñòàíîâëåííûõ èí-
òåðïðåòàòîðîâ è ïóòè ê íèì.
 ôàéëå /etc/passwd íàõîäèòñÿ ñïèñîê ïîëüçîâàòåëåé, à òàêæå
óñòàíîâëåííûå äëÿ íèõ êîìàíäíûå èíòåðïðåòàòîðû ïî óìîë÷àíèþ. Íà-
áðàâ êîìàíäó cat /etc/passwd (íå çàáûâàåì ïðî àâòîäîïîëíåíèå) âû
óâèäèòå ýòîò ôàéë íà ýêðàíå. Â ñàìîì âåðõó Âû ìîæåòå óâèäåòü ïîëüçî-
âàòåëÿ root ó êîòîðîãî ñòîèò /bin/ñsh, à â ñàìîì íèçó  ïîëüçîâàòåëÿ
ñî ñâîèì èìåíåì, ó êîòîðîãî ñòîèò /bin/sh. Âû òàê æå ìîæåòå óâèäåòü
êó÷ó äðóãèõ "ïîëüçîâàòåëåé"(ñëóæåáíûõ ó÷åòíûõ çàïèñåé), ó êîòîðûõ
48

Ðèñ. 21: Ôàéë /etc/shells

ñòîèò â êà÷åñòâå îáîëî÷êè nologin. Ýòî îçíà÷àåò, ÷òî îíè íå ìîãóò âîéòè
â ñèñòåìó.

Ðèñ. 22: Ôàéë /etc/passwd

2.1.3 Èçìåíåíèå èíòåðïðåòàòîðà ïî óìîë÷àíèþ

Èçìåíåíèå èíòåïðåòàòîðà ïî óìîë÷àíèþ îñóùåñòâëÿåòñÿ ñ ïîìî-


ùüþ êîìàíäû chsh (change shell  ñìåíèòü îáîëî÷êó). Ïîñëå ââîäà ýòîé
49

êîìàíäû, çàïóñòèòñÿ ëó÷øèé â ìèðå òåêñòîâûé ðåäàêòîð vi â êîòîðîì


îòêðîåòñÿ ôàéë ñ èíôîðìàöèåé î ïîëüçîâàòåëå. Íà âòîðîé ñòðîêå óêà-
çàí ïóòü, ïî êîòîðîìó íàõîäèòñÿ èíòåðïðåòàòîð, êîòîðûé óñòàíîâëåí ïî
óìîë÷àíèþ äëÿ Âàøåãî ïîëüçîâàòåëÿ. Ñîãëàñíî èíôîðìàöèè â ôàéëå
/etc/shells, bash íàõîäèòñÿ ïî àäðåñó /usr/local/bin/bash (ìîæíî äà-
æå ïðîñòî ñïðîñèòü ó ñèñòåìû "Ãäå áàø?"whereis bash).
Ïîñêîëüêó ñ ðåäàêòîðîì vi ìû åùå íå çíàêîìû è íà÷èíàþùèì
ïîëüçîâàòåëåì ñ íèì ðàáîòàòü ñëîæíî, Âàì íóæíî â òî÷íîñòè ïîâòîðèòü
ñëåäóþùèå äåéñòâèÿ (â ñëó÷àå îøèáêè íàæìèòå Esc è íàáåðèòå :

q ! Enter . Ýòî îòìåíèò âñå èçìåíåíèÿ è âûéäåò èç ðåäàêòîðà. Ïîñëå


÷åãî Âû ìîæåòå ïîïðîáîâàòü ñíîâà).
Èñïîëüçóÿ êëàâèøè ñî ñòðåëêàìè èëè êëàâèøè h , j , k , l

ïåðåíåñòè êóðñîð íà ïåðâóþ áóêâó ñëîâà bin, íàæàòü c (change) $

(äî êîíöà ñòðîêè) è íàáðàòü /usr/local/bin/bash. Âíåøíèé âèä ôàéëà


äîëæåí áûòü òàêèì, êàê óêàçàíî íà Ðèñ. 23. Äëÿ âûõîäà èç ðåæèìà
âñòàâêè íàæàòü Esc . Òåïåðü íóæíî ñîõðàíèòü ôàéë íàáðàâ : , w ,
Enter è âûéòè èç ðåäàêòîðà íàáðàâ : , q è ñíîâà íàæàâ Enter .

Ðèñ. 23: chsh

Ó Âàñ çàïðîñÿò ïàðîëü äëÿ ïîäòâåðæäåíèÿ òîãî, ÷òî ýòî èìåííî Âû


èçìåíèëè ñâîè ïàðàìåòðû.  êà÷åñòâå èíòåðïðåòàòîðà ìîæíî èñïîëü-
50

çîâàòü ëþáóþ ïðîãðàììó. Íàïðèìåð çàäàâ â êà÷åñòâå èíòåðïðåòàòîðà


/usr/bin/mail, åäèíñòâåííûì äîñòóïíûì äåéñòâèåì ïîëüçîâàòåëÿ áó-
äåò ÷òåíèå ïî÷òû ñ ïîìîùüþ ïðîãðàììû mail.
 ôàéëå /etc/passwd âû ìîæåòå óâèäåòü, ÷òî Âàø èíòåðïðåòàòîð
èçìåíèëñÿ.
Ïðîâåðüòå òåïåðü êàê èçìåíèëèñü Âàøè íàñòðîéêè. Íàáåðèòå exit
(èëè Ctrl + d ) äëÿ âûõîäà èç çàïóùåííîãî bash è âîçâðàùåíèÿ â sh,
à çàòåì åùå ðàç exit äëÿ òîãî, ÷òî áû ðàçëîãèíèòüñÿ. Ïîñëå ñëåäóþùåé
àóòåíòèôèêàöèè âû ïîïàäåòå ñðàçó â bash.

2.2 Îñíîâíûå êîìàíäû è íàâèãàöèÿ ïî ôàéëîâîé

ñèñòåìå

2.2.1 man - ñïðàâî÷íàÿ ñèñòåìà

Ïåðâàÿ è ñàìàÿ ãëàâíàÿ êîìàíäà ñ êîòîðîé Âàì íåîáõîäèìî ïî-


çíàêîìèòüñÿ, ýòî êîìàíäà man. Âî FreeBSD âêëþ÷åí áîëüøîé íàáîð
ñïðàâî÷íûõ ðóêîâîäñòâ, â êîòîðîì çàäîêóìåíòèðîâàíû âñå êîìàíäû è
èõ âîçìîæíûå îïöèè. Äëÿ äîñòóïà ê ñòðàíèöå ðóêîâîäñòâà èñïîëüçóåòñÿ
êîìàíäà man èìÿ_êîìàíäû . Íàïðèìåð, ÷òî áû ïðî÷åñòü ñïðàâêó î
ñàìîé êîìàíäå man, ââåäèòå man man. ×òî áû óçíàòü êàêèå äåéñòâèÿ
âûïîëíÿåò êîìàíäà, ââåäèòå man -fèìÿ_êîìàíäû . ×òî áû óçíàòü êà-
êàÿ êîìàíäà âûïîëíÿåò îïðåäåëåííûå äåéñòâèÿ, íàáåðèòå man -k êëþ-
÷åâîå_ñëîâî . man -k èùåò â ñïðàâêå âñå, ÷òî ñâÿçàíî ñ êëþ÷åâûì
ñëîâîì, íî íóæíî íàó÷èòüñÿ ïîíèìàòü âûâîä ýòîé êîìàíäû, êîòîðûé
äîâîëüíî çàïóòàííûé.
Ñòðàíèöû ñïðàâêè äåëÿòñÿ íà íåñêîëüêî ðàçäåëîâ.

1. User commands (Ïîëüçîâàòåëüñêèå êîìàíäû)


Èíôîðìàöèÿ î òàêèõ ïîëüçîâàòåëüñêèõ êîìàíäàõ, êàê ls, rm, cp
èëè grep. Ê ýòîìó ðàçäåëó ïðèäåòñÿ îáðàùàòüñÿ íàèáîëåå ÷àñòî
ïðè ðàáîòå âî FreeBSD.

2. System calls (Ñèñòåìíûå âûçîâû)


51

Ñîäåðæèò èíôîðìàöèþ î ðàçëè÷íûõ API FreeBSD. Ýòîò ðàçäåë


ïðåäíàçíà÷åí äëÿ ïðîãðàììèñòîâ íà Ñ

3. Subroutines (Ïðîöåäóðû)
Çäåñü ñîäåðæèòñÿ îïèñàíèå áèáëèîòå÷íûõ ôóíêöèé. Îíè ïðåäíà-
çíà÷åíû äëÿ ïðîãðàììèñòîâ íà Ñ

4. Devices (Óñòðîéñòâà)
Èíôîðìàöèÿ äëÿ ïðîãðàììèñòîâ íà Ñ îá èíòåðôåéñàõ ê äðàéâåðàì
óñòðîéñòâ âî FreeBSD.

5. File formats (Ôîðìàòû ôàéëîâ)


Èíôîðìàöèÿ î ñèíòàêñèñå è ôîðìàòàõ ðàçëè÷íûõ êîíôèãóðàöèîí-
íûõ ôàéëîâ.

6. Games (Èãðû)
Íàèáîëåå âàæíûé ðàçäåë ñïðàâî÷íûõ ðóêîâîäñòâ. Çäåñü ñîäåðæàò-
ñÿ èíñòðóêöèè ê èãðàì è äðóãèì ðàçâëåêàòåëüíûì ñðåäñòâàì FreeBSD.

7. Miscellaneous (Ðàçíîå)
Òî, ÷òî íå ïîäõîäèò äëÿ äðóãèõ ðàçäåëîâ, ðàçìåùàåòñÿ çäåñü.

8. System administration (Ñèñòåìíîå àäìèíèñòðèðîâàíèå)


Ñîäåðæèò èíôîðìàöèþ î êîìàíäàõ, ïðåäíàçíà÷åíûõ äëÿ àäìèíè-
ñòðèðîâàíèÿ ñèñòåìû.

9. Kernel intefaces (Èíòåðôåéñû ÿäðà)


Èíôîðìàöèÿ äëÿ ïðîãðàììèñòîâ íà Ñ îá èíòåðôåéñå ÿäðà.

Èíîãäà íóæíî óêàçûâàòü æåëàíèå ïîëó÷èòü ñïðàâêó èç îïðåäå-


ëåííîãî ðàçäåëà. Íàïðèìåð êîìàíäà crontab (óïðàâëåíèå âûïîëíåíèåì
çàäàíèé ïî ðàñïèñàíèþ) ïðåäñòàâëåíà â ðàçäåëå 1 (êîìàíäà crontab) è
ðàçäåëå 5 (ôîðìàò ôàéëà crontab). ×òî áû ÿâíî óêàçàòü ðàçäåë, íåîá-
õîäèìî íàáðàòü man 5 crontab. Áóäåò âûâåäåíà ñïðàâêà ïî crontab
èìåííî èç 5-ãî ðàçäåëà.
52

Âñå ñòðàíèöû ñïðàâêè ïî êîìàíäàì èìåþò îäèíàêîâóþ ñòðóêòó-


ðó. Î÷åíü ïîëåçûìè ÿâëÿþòñÿ ðàçäåëû SYNOPSIS è DESCRIPTION. Â
ðàçäåëå SYNOPSIS ïîêàçàí ñèíòàêñèñ êîìàíäû. Îáÿçàòåëüíûå îïöèè è
çíà÷åíèÿ óêàçàíû áåç ñêîáîê (íàïðèìåð äëÿ êîìàíäû cp  êîïèðîâà-
íèå, îáÿçàòåëüíî íóæíî óêàçàòü ÷òî è êóäà êîïèðîâàòü), íåîáÿçàòåëüíûå
îïöèè è çíà÷åíèÿ óêàçàíû â êâàäðàòíûõ ñêîáêàõ. Íåêîòîðûå îïöèè íå
ìîãóò áûòü óêàçàíû âìåñòå, ïîýòîìó îíè ðàçäåëåíû ñèìâîëîì ïðÿìîé
÷åðòû. Ïåðåìåííûå çíà÷åíèÿ, îêðàøåíû â ñâåòëûé öâåò. Äëÿ íåêîòîðûõ
ñëîæíûõ êîìàíä, â ðàçäåëå EXAMPLES ïðèâåäåíû ïðèìåðû èõ èñïîëü-
çîâàíèÿ. Â ðàçäåëå FILES íàõîäÿòñÿ àäðåñà ôàéëîâ íàñòðîåê êîìàíäû,
åñëè îíè åñòü.
Ñïðàâî÷íàÿ ñèñòåìà UNIX î÷åíü ïîëåçíàÿ è óäîáíàÿ âåùü. Ïðè
ðàáîòå ñ ñèñòåìîé Âàì ÷àñòî ïðèäåòñÿ ïðèáåãàòü ê åå óñëóãàì. Ïîýòîìó
ïîñòàðàéòåñü ïîðàíüøå ïðèâûêíóòü ê íåé.

2.2.2 Íàâèãàöèÿ ïî ôàéëîâîé ñèñòåìå

Äëÿ âûâîäà ñîäåðæèìîãî êàòàëîãà èñïîëüçóåòñÿ êîìàíäà ls (î íåé


è âñåõ ïîñëåäóþùèõ Âû ìîæåòå óçíàòü ïîäðîáíåå íà ñòðàíèöàõ ñïðàâêè
man). Áåç îïöèé êîìàíäà ïðîñòî âûäàåò ñîäåðæèìîå òåêóùåãî êàòàëîãà.
Åñëè âû çàïóñòèëè åå â ñâîåì äîìàøíåì êàòàëîãå, òî, ñêîðåå âñåãî, âû
íå óâèäåëè íè åäèíîãî ôàéëà. Îäíà èç ïîïóëÿðíûõ îïöèé -a. Ýòà îïöèÿ
çàñòàâëÿåò îòîáðàæàòü ñêðûòûå ôàéëû è ïàïêè. Ñêðûòîé ôàéë èëè
ïàïêà ñòàíîâÿòñÿ, åñëè èõ èìÿ íà÷èíàåòñÿ ñ òî÷êè.
Ïîñêîëüêó â ñïèñêå, êîòîðûé âûäàåò ls íåâîçìîæíî ðàçëè÷èòü òèï
ôàéëà, òî äëÿ ýòîãî ìîæíî èñïîëüçîâàòü îïöèþ -F. Íàïðèìåð ïîñìîò-
ðåâ ñîäåðæèìîå êàòàëîãà /boot ñ ïîìîùüþ êîìàíäû ls -F /boot, ìû
óâèäèì, ÷òî êàòàëîãè ïîìå÷åíû /, èñïîëíÿåìûå ôàéëû *, à ññûëêè -
@. Ñ ïîìîùüþ îïöèè -G ìîæíî ðàññêðàñèòü âûâîä ïî òèïàì ôàéëîâ.
 UNIX ñèñòåìàõ ôàéëû íå ðàçëè÷àþòñÿ ïî ðàñøèðåíèþ. Ðàñøèðåíèå
âñåãî ëèøü âñïîìîãàòåëüíàÿ ôóíêöèÿ äëÿ ðàçëè÷íûõ ïðèëîæåíèé.
Ïîñêîëüêó íå î÷åíü óäîáíî âñå âðåìÿ èñïîëüçîâàòü ïîëíûé ïóòü ê
ôàéëàì, òî âîçìîæåí ïåðåõîä ïî ôàéëîâîé ñèñòåìå ñ ïîìîùüþ êîìàíäû
cd (change directory). Åå ñèíòàêñèñ cd ïóòü_ê_êàòàëîãó . Íàïðèìåð
53

cd / ïåðåâåäåò íàñ â êîðíåâîé êàòàëîã cd /usr/local/bin â êàòàëîã


bin êîòîðûé ðàñïîëîæåí â êàòàëîãå local êîòîðûé íàõîäèòñÿ â êàòàëîãå
/usr. Äëÿ ïåðåõîäà íà óðîâåíü âûøå ìîæíî èñïîëüçîâàòü cd .. . Åñëè Âû
ïîòåðÿëèñü è íå çíàåòå, ãäå íàõîäèòåñü, òî åñòü êîìàíäà pwd, êîòîðàÿ
óêàæåò Âàì Âàøå ìåñòî.

2.2.3 Ñòðóêòóðà ôàéëîâîé ñèñòåìû

×òî áû ïîíèìàòü êàê ðàáîòàåò îïåðàöèîííàÿ ñèñòåìà FreeBSD,


íåîáõîäèìî ÷åòêî ïðåäñòàâëÿòü, êàê îíà óïðàâëÿåò ôàéëàìè. Âàæíî òàê
æå è òî, ÷åì åå ìåòîäû îòëè÷àþòñÿ îò ìåòîäîâ äðóãèõ îïåðàöèîííûõ
ñèñòåì. Äëÿ ïîëüçîâàòåëåé, ðàáîòàâøèõ ñ Windows, ñòðóêòóðà êàòàëîãîâ
ôàéëîâîé ñèñòåìû FreeBSD ïîêàæåòñÿ òàèíñòâåííîé. Êàê è âî ìíîãèõ
äðóãèõ âîïðîñàõ, ñâÿçàííûõ ñ UNIX, êîðíè òðàäèöèîííîé ñõåìû èìåíî-
âàíèÿ êàòàëîãîâ òåðÿþòñÿ â äàëåêîì ïðîøëîì.
54

Êàòàëîã Íàçíà÷åíèå
/ Êîðíåâàÿ ôàéëîâàÿ ñèñòåìà (ôàéëîâàÿ ñè-
ñòåìà root). Ýòî âåðõíèé ðàçäåë â èåðàð-
õèè UNIX. Âñå îñòàëüíûå ðàçäåëû ïîä÷èíåíû
íåìó, äàæå åñëè íàõîäÿòñÿ íà äðóãèõ äèñêàõ
èëè äðóãèõ êîìïüþòåðàõ.
/bin Çäåñü íàõîäÿñÿ èñïîëíÿåìûå ôàéëû, ñêîìïè-
ëèðîâàííûå ñî ñòàòè÷åñêèìè áèáëèîòåêàìè
/boot Çäåñü íàõîäÿòñÿ êîíôèãóðàöèîííûå ôàéëû
çàãðóç÷èêà, ÿäðî îïåðàöèîííîé ñèñòåìû, ìî-
äóëè ê ÿäðó è äðóãèå ôàéëû, íåîáõîäèìûå
äëÿ çàãðóçêè îïåðàöèîííîé ñèñòåìû.
/cdrom Ïóñòîé êàòàëîã, ïðåäíàçíà÷åííûé äëÿ ìîíòè-
ðîâàíèÿ ïðèâîäà îïòè÷åñêèõ äèñêîâ.
/dev Ñïåöèàëüíûé êàòàëîã. Ôàéëû âíóòðè íåãî ÿâ-
ëÿþòñÿ óñòðîéñòâàìè. Òî÷íåå ôàéëàìè ñïå-
öèàëüíûõ òèïîâ, êîòîðûå îáåñïå÷èâàþò ïðî-
ãðàììàì èíòåðôåéñ ê óñòðîéñòâàì, ïîääåð-
æèâàåìûì ÿäðîì.
/etc Çäåñü õðàíÿòñÿ ñèñòåìíûå êîíôèãóðàöèîí-
íûå ôàéëû.
/home Ññûëêà íà êàòàëîã /usr/home ñîçäàííàÿ ïî
ñîîáðàæåíèÿì ñîâìåñòèìîñòè.
/lib Îñíîâíûå áèáëèîòåêè è ìîäóëè ÿäðà
/libexec Îñíîâíûå áèáëèîòåêè è ìîäóëè ÿäðà
/media Ïóñòîé êàòàëîã, ïðåäíàçíà÷åííûé äëÿ ìîíòè-
ðîâàíèÿ ñòàíäàðòíûõ íàêîïèòåëåé èíôîðìà-
öèè.
/mnt Ïóñòîé êàòàëîã, ïðåäíàçíà÷åííûé äëÿ ìîíòè-
ðîâàíèÿ.
/proc Ôàéëîâàÿ ñèñòåìà ïðîöåññîâ (procfs). Îíà
ïðåäñòàâëÿåò ñîáîé èíòåðôåéñ ê òàáëèöå ïðî-
öåññîâ.
/rescue Ðåçåðâíûé êàòàëîã ñ îñíîâíûìè óòèëèòàìè
äëÿ âîññòàíîâëåíèÿ ðàáîòû ñèñòåìû
55

Êàòàëîã Íàçíà÷åíèå
/root Äîìàøíèé êàòàëîã ïîëüçîâàòåëÿ root. Îí
ðàñïîëîæåí çà ïðåäåëàìè êàòàëîãà /usr/home
ïî ñîîáðàæåíÿì áåçîïàñíîñòè è, êðîìå òîãî,
äîñòóïåí ïðè àâàðèéíîé çàãðóçêå.
/sbin Ñèñòåìíûå èñïîëíÿåìûå ôàéëû, ñêîìïèëè-
ðîâàííûå ñî ñòàòè÷åñêèìè áèáëèîòåêàìè.
Îíè îòëè÷àþòñÿ îò ôàéëîâ, êîòîðûå õðàíÿò-
ñÿ â /bin, òåì, ÷òî ñïîñîáíû èçìåíèòü ïîâå-
äåíèå ñèñòåìû, òîãäà êàê ïðîãðàììû èç /bin,
ïðåäñòàâëÿþò ñîáîé ëèøü ïîëüçîâàòåëüñêèå
óòèëèòû.
/sys Ññûëêà íà ôàéëû ñ èñõîäíûì êîäîì ÿäðà.
åñëè îíè áûëè óñòàíîâëåííû.
/tmp Âðåìåííûå ôàéëû. Äàííûé êàòàëîã äîñòóïåí
äëÿ çàïèñè âñåì ïîëüçîâàòåëÿì.
/usr Ñ ýòîãî êàòàëîãà íà÷èíàåòñÿ "îñòàëüíàÿ ñè-
ñòåìà".
/var Êàòàëîã. ïðåäíàçíà÷åííûé äëÿ èçìåíÿþùèõ-
ñÿ ôàéëîâ.
/usr/bin Çäåñü íàõîäèòñÿ äîïîëíèòåëüíîå ÏÎ, ÿâëÿþ-
ùååñÿ ÷àñòüþ ñèñòåìû.
/usr/games Íàèâàæíåéøèé êàòàëîã ñèñòåìû.
/usr/home Çäåñü õðàíÿòñÿ äîìàøíèå êàòàëîãè ïîëüçîâà-
òåëåé
/usr/home/ êàæäûé ïîëüçîâàòåëü ïîëó÷àåò â ñâîå ðàñïî-
èìÿ_ïîëüçîâàòåëÿ ðÿæåíèå êàòàëîã ñî ñâîèì èìåíåì.
/usr/include Çäåñü íàõîäÿòñÿ ðàçëè÷íûå áèáëèîòåêè.
/usr/lib
/usr/libdata
/usr/libexec
/usr/local Çäåñü íàõîäÿòñÿ ïðîãðàììû, êîòîðûå íå ÿâ-
ëÿþòñÿ ÷àñòüþ îïåðàöèîííîé ñèñòåìû.
56

Êàòàëîã Íàçíà÷åíèå
/usr/sbin Çäåñü íàõîäèòñÿ äîïîëíèòåëüíîå ÏÎ, ïðåäíà-
çíà÷åííîå äëÿ àäìèíèñòðàòèâíûõ çàäà÷.
/usr/share Çäåñü íàõîäèòñÿ ðàçíîîáðàçíàÿ äîêóìåíòà-
öèÿ, ñïèñêè, ñïðàâî÷íèêè, ñëîâàðè etc.
/usr/src Çäåñü íàõîäÿòñÿ èñõîäíûå êîäû FreeBSD.
/usr/local/bin Çäåñü íàõîäèòñÿ ïðèêëàäíîå ÏÎ, êîòîðîå íå
ÿâëÿåòñÿ ÷àñòüþ ñèñòåìû è óñòàíàâëèâàåòñÿ
àäìèíèñòðàòîðîì.
/usr/local/etc Çäåñü íàõîäÿòñÿ ôàéëû íàñòðîéêè ê ýòîìó
ÏÎ.
/usr/local/man Çäåñü íàõîäÿòñÿ ôàéëû ñïðàâêè manual pages
(man).
/usr/local/sbin Çäåñü íàõîäèòñÿ óñòàíàâëèâàåìîå ÏÎ, êîòî-
ðîå ìîæåò âëèÿòü íà ñîñòîÿíèå îïåðàöèîííîé
ñèñòåìû.
/usr/local/share Çäåñü íàõîäèòñÿ ðàçíîîáðàçíàÿ äîêóìåíòà-
öèÿ.
/usr/local/www Çäåñü ðàñïîëîãàþòñÿ ôàéëû äëÿ
Web-ñåðâåðà.

2.3 Ôàéëû

2.3.1 Îïåðàöèè ñ ôàéëàìè è êàòàëîãàìè (ñîçäàíèå,

ïðîñìîòð, óäàëåíèå)

Äëÿ ñîçäàíèÿ ôàéëà åñòü èíòåðåñíàÿ êîìàíäà touch (êîñíóòüñÿ).


Åå öåëü èçìåíèòü âðåìÿ ïîñëåäíåãî äîñòóïà ê ñóùåñòâóþùåìó ôàéëó, íî
åñëè ôàéëà íå ñóùåñòâóåò, îíà åãî ñîçäàåò. Äëÿ ñîçäàíèÿ äèðåêòîðèè åñòü
êîìàíäà mkdir. Îíà êñòàòè ìîæåò ñîçäàâàòü ìíîãîóðîâíåâóþ ñòðóê-
òóðó. Íàïðèìåð íàáåðèòå mkdir -p folder1/folder2/folder3 â ñâîåì
äîìàøíåì êàòàëîãå è îíà ñîçäàñò íåñêîëüêî âëîæåííûõ äðóã â äðóãà
êàòàëîãîâ. Äëÿ ñîçäàíèÿ íåñêîëüêèõ ôàéëîâ èëè íåñêîëüêèõ êàòàëîãîâ,
íóæíî íàáðàòü èõ èìåíà ÷åðåç ïðîáåë. Íàïðèìåð: touch le1 le2 le3
57

èëè mkdir folder2 folder3.


Êîïèðîâàíèå ôàéëîâ ïðîèçâîäèòñÿ ñ ïîìîùüþ êîìàíäû cp (copy).
Ìîæíî êîïèðîâàòü ôàéë â íîâûé ôàéë (cp le1 le2) ôàéë â êàòàëîã
(cp le1 folder1), êàòàëîã â íîâûé êàòàëîã (cp folder1 folder2  åñëè
folder2 íå ñóùåñòâóåò) è êàòàëîã â ñóùåñòâóþùèé êàòàëîã (cp folder1
folder2  åñëè folder2 ñóùåñòâóåò).
Ïåðåìåùåíèå è ïåðåèìåíîâàíèå îñóùåñòâëÿåòñÿ ñ ïîìîùüþ êîìàí-
äû mv (move). Åþ ìîæíî ïåðåìåñòèòü ôàéë â êàòàëîã, êàòàëîã â ñóùå-
ñòâóþùèé êàòàëîã, ïåðåèìåíîâàòü ôàéë, êàòàëîã.
Óäàëåíèå ïóñòûõ êàòàëîãîâ  êîìàíäîé rmdir. Äëÿ óäàëåíèÿ ôàé-
ëîâ èñïîëüçóåòñÿ êîìàíäà rm.
Âñå ýòè êîìàíäû èìåþò îáùèå îïöèè. Îïöèÿ -R (ðåêóðñèâíî) çà-
ñòàâëÿåò âûïîëíèòü äåéñòâèå íå òîëüêî íàä êàòàëîãîì, à è íàä âñåì,
÷òî â íåì íàõîäèòñÿ, âêëþ÷àÿ ïîäêàòàëîãè. Íàïðèìåð rm -R folder1
óäàëÿåò êàòàëîã ñî âñåìè ïîäêàòàëîãàìè. Îïöèÿ -i çàïðàøèâàåò ïîä-
òâåðæäåíèå êàæäîãî äåéñòâèÿ. Åå ïîëåçíî èñïîëüçîâàòü, êîãäà Âû íå
óâåðåíû â ñâîèõ äåéñòâèÿõ. -f ôîðñèðóåò äåéñòâèÿ. rm -f áóäåò óäàëÿòü
âñå, ÷òî òîëüêî ìîæíî íå âçèðàÿ íà òî îòêðûò ëè ôàéë, ÿâëÿåòñÿ îí
òîëüêî äëÿ ÷òåíèÿ è èìååòñÿ ëè ê íåìó äîñòóï. Îïöèÿ -P èìååòñÿ ó
êîìàíäû rm è îíà òðèæäû ïåðåçàïèñûâàåò ìåñòî íà äèñêå, ãäå áûë
ôàéë, ñëó÷àéíîé ïîñëåäîâàòåëüíîñòüþ ñèìâîëîâ. -W ïûòàåòñÿ âîññòàíî-
âèòü ôàéë óäàëåííûé êîìàíäîé rm, íî èç-çà ñïåöèôè÷åñêîãî óñòðîéñòâà
ôàéëîâîé ñèñòåìû UNIX ñèñòåì, óäàëåííûé ôàéë, êàê ïðàâèëî, ÿâëÿåò-
ñÿ ïîòåðÿííûì íàâñåãäà. È, íàêîíåö, îïöèÿ -v âûâîäèò èíôîðìàöèþ î
êàæäîì äåéñòâèè íà ýêðàí.
Êàê Âû ìîæåòå çàìåòèòü, âñå êîìàíäû âûïîëíÿþòñÿ ìîë÷à è áûñò-
ðî, íå çàäàâàÿ ëèøíèõ âîïðîñîâ. Ñ÷èòàåòñÿ, ÷òî åñëè ïîëüçîâàòåëü îòäàë
êîìàíäó, òî îí çíàåò, ÷òî äåëàåò. UNIX íå âåäåò ñâîèõ ïîëüçîâàòåëåé
çà ðóêó, äàæå, åñëè ýòî ïðèâåäåò ê ïå÷àëüíûì ïîñëåäñòâèÿì. Åñëè Âû
íå óâåðåíû â ñâîèõ äåéñòâèÿõ, òî èñïîëüçóéòå îïöèþ -i, è â ñëó÷àå
îïàñíîñòè, ñèñòåìà ïîïðîñèò ïîäòâåðæäåíèå íà âûïîëíåíèå. Ìîæíî òàê
æå èñïîëüçîâàòü îïöèþ -v (verbose) äëÿ èíôîðìàòèâíîãî ðåæèìà.
Íå çàáûâàéòå, ÷òî ñòîèò èçáåãàòü êîïèðîâàíèÿ êàòàëîãà â ýòîò æå
58

êàòàëîã. Òàê êàê ýòî ïðèâåäåò ê ðåêóðñèâíîìó êîïèðîâàíèþ è áûñòðî


çàïîëíèò âñå èìåþùååñÿ ïðîñòðàíñòâî íà äèñêå èëè èçðàñõîäóåò ëèìèò
íà êîëè÷åñòâî ôàéëîâ â ôàéëîâîé ñèñòåìå (ò.í. inodes).
Ïðè ðàáîòå ñ áîëüøèì êîëè÷åñòâîì îäíîîáðàçíî íàçâàííûõ ôàéëîâ
è êàòàëîãîâ óäîáíî èñïîëüçîâàòü ìåòàñèìâîëû. Ìåòàñèìâîëû ïîçâîëÿ-
þò àâòîìàòè÷åñêè ïîäñòàâëÿòü èìåíà ôàéëîâ. Äâà îñíîâíûõ îïåðàòîðà
çàìåíû, èñïîëüçóåìûå â êîìàíäíîé ñòðîêå FreeBSD, ïðèâåäåíû â òàáëè-
öå 4:

Òàáëèöà 4: Ñèìâîëû-çàìåñòèòåëè

? Ñîâïàäàåò ñ ëþáûì îäèíî÷íûì ñèìâîëîâ. Íàïðèìåð,


le?.txt ñîâïàäàåò ñ le1.txt, le2.txt è leA.txt. Íå ñîâïà-
äàåò ñ le10.txt è leAB.txt.
* Ñîâïàäàåò ñ ëþáîé ïîñëåäîâàòåëüíîñòüþ ñèìâîëîâ. Íàïðè-
ìåð, f* ñîâïàäàåò ñ èìåíàìè ôàéëîâ f, foo, le, le1.txt,
le10.txt.

Êâàäðàòíûå ñêîáêè ïîçâîëÿþò óêàçàòü äèàïàçîí ñèìâîëîâ äëÿ ïî-


èñêà ñîâïàäåíèÿ. Íàïðèìåð, le[1-3] ñîâïàäàåò ñ le1, le2, le3, íî íå
ñ le4. Ñîâïàäåíèå ìîæíî óêàçàòü íå òîëüêî äëÿ öèôð, íî è äëÿ áóêâ.
Íàïðèìåð le[a-c] ñîâïàäàåò ñ lea, leb, lec.
Ïðè ðàáîòå ñ ñèìâîëàìè âàæíî ïîìíèòü, ÷òî ñîâïàäåíèå îñíîâàíî
íà ASCII-êîäå ñèìâîëà. Íàïðèìåð le[A-b] ñîâïàäàåò íå òîëüêî ñ leA è
leb, íî è ñ leB, leC è äî leZ.
Ïîõîæèé ôîðìàò èñïîëüçóåòñÿ, êîãäà íóæíî óêàçàòü ñîâïàäåíèå ñ
îäíèì èç ñèìâîëîâ èç ñïèñêà. Íàïðèìåð, le[1234]* ñîâïàäàåò ñ èìåíàìè,
êîòîðûå íà÷èíàþòñÿ ñ le1, le2, le3, le4 (äàëåå ìîãóò ñëåäîâàòü ëþáûå
ñèìâîëû).
Ñ ñèìâîëàìè çàìåñòèòåëÿìè ìîæíî èñïîëüçîâàòü ëîãè÷åñêèé îïå-
ðàòîð ÍÅ. Íàïðèìåð, le[!1234]* ñîâïàäàåò ñ èìåíàìè, êîòîðûå ÍÅ íà-
÷èíàþòñÿ ñ le1, le2, le3, le4.
Ìíîãèå ñèìâîëû, êîòîðûå âñòðå÷àþòñÿ â èìåíàõ ôàéëîâ (ïðîáåë, ?,
*, ") íóæíî ýêðàíèðîâàòü ñèìâîëîì îáðàòíîé ÷åðòû. Ëþáîå èìÿ ôàéëà
59

òàê æå ìîæíî âçÿòü â êàâû÷êè.


Äëÿ ïðîñìîòðà ñîäåðæèìîãî ôàéëîâ ñóùåñòâóåò ìíîæåñòâî ïðî-
ãðàìì: cat, less, more, head, tail. Ñêîïèðóéòå êóäà íèáóäü ñåáå ôàéëû
èç /usr/local/share/doc è ñ èõ ïîìîùüþ, à òàê æå ñ ïîìîùüþ ñïðàâêè
man îçíàêîìòåñü ñ èõ ðàáîòîé.
cat ïðåäíàçíà÷åíà äëÿ âûâîäà ñîäåðæèìîãî ôàéëà íà óñòðîéñòâî
âûâîäà. Ïî óìîë÷àíèþ èì ÿâëÿåòñÿ ýêðàí. Åñëè â ñïèñêå ôàéëîâ êîìàí-
äû cat ñîäåðæèòñÿ íåñêîëüêî ôàéëîâ, òî ïðîãðàììà âûâåäåò èõ îäèí
çà äðóãèì. Åñëè ôàéë áîëüøîé, òî èìååò ñìûñë âûâåñòè òîëüêî íà÷àëî
èëè êîíåö ôàéëà êîìàíäàìè head èëè tail, êîòîðûå áåç îïöèé âûâîäÿò
òîëüêî 10 ñòðîê ñ íà÷àëà èëè êîíöà, ñîîòâåòñòâåííî. Äîïîëíèòåëüíûìè
îïöèÿìè ìîæíî óêàçàòü æåëàåìîå êîëè÷åñòâî ñòðîê, äëÿ âûâîäà ýòèìè
êîìàíäàìè.
Èíîãäà íåîáõîäèìî âûâåñòè íå âåñü ôàéë, à îïðåäåëåííûå ñòðîêè
ïî øàáëîíó. Äëÿ ýòîãî ïðèìåíÿåòñÿ ñåìåéñòâî êîìàíä grep (grep, egrep,
fgrep). Äîïóñòèì íóæíî â ôàéëå textle íàéòè âõîæäåíèå ñòðîêè tom.
äëÿ ýòîãî èñïîëüçóåòñÿ grep â ñàìîì ïðîñòîì ôîðìàòå:
grep tom textle
Ýòà êîìàíäà âûâîäèò íà ýêðàí êàæäóþ ñòðîêó ôàéëà textle, ñî-
äåðæàùóþ ïîäñòðîêó tom. Ýòî çíà÷èò, ÷òî êðèòåðèÿì ïîèñêà óäîâëå-
òâîðÿþò ñëîâà tomcat, atom, automatic. ×òî áû íàéòè èìåííî ñëîâî,
íåîáõîäèìî îêðóæèòü åãî ïðîáåëàìè è çàêëþ÷èòü â êàâû÷êè:
grep " tom " textle
Ðàñïðîñòðàíåííûå îïöèè grep:

-i ïîèñê áåç ó÷åòà ðåãèñòðà;

-c íå âûâîäèòü ñòðîêè ñ âõîæäåíèÿìè øàáëîíà, à íàïå÷àòàòü òîëü-


êî êîëè÷åñòâî âõîæäåíèé â ôàéëå;

-n ïîìèìî ñòðîê ñ âõîæäåíèåì, âûâîäèòü è åå íîìåð;

-v îáðàòèòü îïåðàöèþ è âûâîäèòü ñòðîêè, íå âêëþ÷àþùèå øàáëîí.

egrep ïîääåðæèâàåò ðåãóëÿðíûå âûðàæåíèÿ.


60

Óòèëèòû more è less. Ðàíüøå ýòè äâå êîìàíäû áûëè îòäåëüíûìè,


íî òåïåðü more ÿâëÿåòñÿ æåñòêîé ññûëêîé íà less. Íå ñìîòðÿ íà ñâîå
èìÿ, êîìàíäà less (ìåíüøå) ÿâëÿåòñÿ áîëåå ìîùíîé, ÷åì more (áîëüøå).
Ýòè ïðîãðàììû èñïîëüçóþòñÿ äëÿ ïîýêðàííîãî îòîáðàæåíèÿ òåêñòîâûõ
ôàéëîâ.

Òàáëèöà 5: Êîìàíäû óòèëèòû less

/øàáëîí ïîèñê ñòðîêè ïî øàáëîíó


ÏÐÎÁÅË èëè f ïðîêðóòèòü íà îäèí ýêðàí âïåðåä
b íà îäèí ýêðàí íàçàä
ñòðåëêè ââåðõ/âíèç íà ñòðîêó âïåðåä/íàçàä
n g ïåðåéòè íà ñòðîêó n
n % n
ïðîêðóòèòü äî ïðîöåíòîâ (îò 0 äî 100)

 òàáëèöå 5 ïðåäñòàâëåíû äàëåêî íå âñå âîçìîæíûå êîìàíäû. Çà-


ãëÿíóâ â man less, Âû óâèäèòå ìíîãî äðóãèõ.
Î÷åíü ÷àñòî íåîáõîäèìî íå ïîñìîòðåòü ñîäåðæèìîå ôàéëà, à óçíàòü
êîëè÷åñòâî ñòðîê (ïðèìåð  êîëè÷åñòâî çàïðîñîâ â ëîã ôàéëå) äëÿ ýòîãî
åñòü êîìàíäà wc. Áåç ïàðàìåòðîâ, îíà âûâîäèò ÷èñëî ñòðîê, ñëîâ è
ñèìâîëîâ. Äëÿ âûâîäà îäíîãî çíà÷åíèÿ èñïîëüçóéòå îïöèè -l (line) äëÿ
ñòðîê, -w (word) äëÿ ñëîâ è -c (char) äëÿ ñèìâîëîâ.
Äëÿ ïîèñêà èñïîëüçóåòñÿ êîìàíäà nd.
nd . -name "lename*"
Ýòà êîìàíäà ïðîèçâîäèò ïîèñê ôàéëîâ, èìÿ êîòîðûõ íà÷èíàåòñÿ
ñ "lename"â òåêóùåì êàòàëîãå (òî÷êà îáîçíà÷àåò òåêóùèé êàòàëîã, äâå
òî÷êè  ðîäèòåëüñêèé êàòàëîã), âêëþ÷àÿ âñå ïîäêàòàëîãè. Ó÷òèòå, ÷òî
ïîèñê ïî âñåì ïîäêàòàëîãàì, íà÷èíàÿ ñ êîðíåâîãî, áóäåò ïðîèçâîäèòüñÿ
è ïî âñåì ñìîíòèðîâàíûì êàòàëîãàì, â ò.÷. íà äðóãèõ äèñêàõ è ôàéëîâûõ
ñèñòåìàõ, ÷òî ìîæåò çàíÿòü î÷åíü ìíîãî âðåìåíè. Ó êîìàíäû nd åñòü
îïöèè, óêàçûâàþùèå, êàê ãëóáîêî â èåðàðõèè êàòàëîãîâ ïðîèçâîäèòü
ïîèñê, à òàêæå îáðàáàòûâàòü âñå ôàéëîâûå ñèñòåìû, èëè òîëüêî òåêó-
ùóþ. Êîìàíäà nd ïîçâîëÿåò èñêàòü ôàéëû íå òîëüêî ïî èìåíè, íî è
ïî âëàäåëüöó, ãðóïïå, ðàçìåðó, äàòå. Îá ýòèõ è äðóãèõ ñâîéñòâàõ nd
61

ðàññêàçûâàåòñÿ íà ñòðàíèöå ñïðàâêè.


Êðîìå òîãî, ñóùåñòâóåò êîìàíäà locate, êîòîðàÿ íå èùåò ôàéë
íà äèñêå, à ïðîñìàòðèâàåò áàçó äàííûõ, ñîäåðæàùóþ ñïèñîê ôàéëîâ
â ñèñòåìå. Ïîèñê âûïîëíÿåòñÿ âî ìíîãî ðàç áûñòðåå, íî íîâûå ôàéëû
ìîãóò áûòü íå âêëþ÷åíû â ýòó áàçó.  çàâèñèìîñòè îò íàñòðîåê, áàçà
îáíîâëÿåòñÿ åæåäíåâíî èëè åæåíåäåëüíî. Çà ïîäðîáíûìè ñâåäåíèÿìè
îáðàòèòåñü ê man locate.
Äëÿ ïîèñêà êîìàíä è ïðîãðàìì ìîæíî èñïîëüçîâàòü whereis. Îíà
âîçâðàùàåò àäðåñ, ïî êîòîðîìó íàõîäèòñÿ ïðîãðàììà è ñòðàíèöà ñïðàâêè
äëÿ íåå.

2.3.2 Ïåðåíàïðàâëåíèå, êàíàëû

UNIX ñèñòåìà ïîñòðîåíà íà îäíîì èç ïðèíöèïîâ, êàê "Ëþáîé îáú-


åêò ýòî ôàéë". Ò.å. ñîáñòâåííî ôàéë, ïàïêà, óñòðîéñòâî (ìîíèòîð, çâó-
êîâàÿ êàðòà, âèí÷åñòåð), ÿâëÿþòñÿ ôàéëîì. Ýòî ïðåäîñòàâëÿåò î÷åíü
èíòåðåñíóþ âîçìîæíîñòü. Ïåðåíàïðàâëåíèå âûâîäà. Íàïðèìåð, êîãäà Âû
íàáèðàåòå cat le1 > le2, òî ýòî îçíà÷àåò, ÷òî cat âìåñòî âûâîäà íà
ýêðàí íàïðàâèò âûâîä â le2, óäàëèâ ïðåäâàðèòåëüíî åãî ñîäåðæèìîå.
Äëÿ òîãî, ÷òî áû â le2 îñòàëîñü ñîäåðæèìîå, òî âìåñòî ïåðåíàïðàâëåíèÿ
ìîæíî èñïîëüçîâàòü äîïîëíåíèå > >. Ïîñêîëüêó óæå ãîâîðèëîñü, ÷òî
â UNIX ñèñòåìàõ ëþáîé îáúåêò ÿâëÿåòñÿ ôàéëîì, òî âîçìîæíîñòü ïåðå-
íàïðàâëåíèÿ äàåò áîëüøèå âîçìîæíîñòè äëÿ èñïîëüçîâàíèÿ êîìàíäíîé
ñòðîêè. Íàïðèìåð ls > le1 âûâåäåò ñïèñîê ôàéëîâ íå íà ýêðàí, à â
ôàéë le1, sound.wav > /dev/snd çàñòàâèò çâó÷àòü çâóêîâóþ êàðòó è
ìíîãîå äðóãîå.
À âîò ïðèìåð ôóíêöèîíèðîâàíèÿ êàíàëîâ. Â äåøåâûõ mp3 ïëå-
åðàõ îòñóòñòâóåò âîçìîæíîñòü ñîðòèðîâàòü ôàéëû ïî àëôàâèòó. Îíè
âîñïðîèçâîäÿòñÿ â ïîðÿäêå, â êîòîðîì áûëè çàïèñàíû íà ïëååð. Windows
çàïèñûâàåò ôàéëû â àëôàâèòíîì ïîðÿäêå è ïðîáëåìà îòñóòñòâóåò. UNIX
ñèñòåìû æå çàïèñûâàþò èõ â ïîðÿäêå, â êîòîðîì îíè íàõîäÿòñÿ íà âèí÷å-
ñòåðå. Ò.å. ïðè êîìàíäå cp song1.mp3 song2.mp3 song3.mp3 song4.mp3
/media/myplayer ñèñòåìà ïîëó÷àåò àäðåñ íà âèí÷åñòåðå ñàìîãî ïåð-
âîãî çàïèñàííîãî ôàéëà (äîïóñòèì ýòî song2.mp3) ïîòîì ïðîõîäÿ ïî
62

äîðîæêàì âèí÷åñòåðà çàïèñûâàåò ôàéëû êîòîðûå åñòü â ñïèñêå. È åñëè


le4.mp3 áóäåò ñëåäóþùèì, òî ñèñòåìà íà ïëååð çàïèøåò åãî âòîðûì. Â
ðåçóëüòàòå ïëååð áóäåò âîñïðîèçâîäèòü ïåñíè íå â òîì ïîðÿäêå, â êîòîðîì
Âû õîòåëè áû.
Îäíîé êîìàíäîé èñïðàâèòü ýòî íåâîçìîæíî, ïîýòîìó ïðèäåòñÿ èñ-
ïîëüçîâàòü íåñêîëüêî êîìàíä ñâÿçûâàÿ èõ êàíàëàìè (êîíâååðàìè). Äëÿ
íà÷àëà íåîáõîäèìî íàéòè âñå ôàéëû è âûâåñòè èõ íàçâàíèå âìåñòå ñ ïîë-
íûìè ïóòÿìè ê ôàéëàì. Èíà÷å ïåñíè èç ðàçíûõ àëüáîìîâ ñìåøàþòñÿ â
êó÷ó. Äëÿ ýòîãî èñïîëüçóåòñÿ êîìàíäà nd /mymusic/mygroup -type
f -print0. Çàòåì íåîáõîäèìî îòñîðòèðîâàòü àäðåñà ôàéëîâ êîìàíäîé
sort -z. Ïîñëå ýòîãî íóæíî ïåðåäàâàòü ýòîò ñïèñîê ïî î÷åðåäè (xargs)
êîìàíäå êîïèðîâàíèÿ (cp). Ïîëíûé âèä êîìàíäû áóäåò âûãëÿäåòü òàê:
nd /mymusic/mygroup -type f -print0 | sort -z | xargs -0 cp
-v -t /media/myplayer - -parents
Ïóñòü Âàñ íå ïóãàåò òàêàÿ äëèííàÿ êîìàíäà, êàê äëÿ òàêîãî ïðî-
ñòîãî äåéñòâèÿ. Äëÿ ëþáîé êîìàíäû ìîæíî èñïîëüçîâàòü ïîäñòàíîâêó
(alias) è âìåñòî 20-30 ñëîâ, âàì íóæíî áóäåò ââåñòè 2-3 áóêâû.
Ðàçóìååòñÿ ìîæíî ðàñøèðèòü ôóíêöèîíàë ýòîé êîìàíäû, íàïðè-
ìåð ñîõðàíÿÿ ñïèñîê çàïèñàííûõ ïåñåí â ôàéë (èñïîëüçóÿ äîïîëíåíèå),
êîìàíäîé uniq (îäíà èç åå ôóíêöèé - ïîäñ÷åò êîëè÷åñòâà ïîâòîðÿþùèõñÿ
ñòðîê) ìîæíî âûÿñíèòü, êàêèå ïåñíè Âû ñëóøàåòå ÷àùå âñåãî. Ñðàâíèâàÿ
ýòîò ñïèñîê ñî ñïèñêîì íîâûõ ïîïîëíåíèé íà êàêîì íèáóäü ôàéëîîáìåí-
íèêå (èñïîëüçóÿ êîìàíäó wget äëÿ ñîõðàíåíèÿ Web-ñòðàíè÷åê è cmp
äëÿ ñðàâíåíèÿ äâóõ ôàéëîâ), ìîæíî àâòîìàòè÷åñêè çàêà÷èâàòü òå ïåñíè,
êîòîðûõ åùå íåò ó Âàñ â êîëëåêöèè (èñïîëüçóÿ òîò æå wget äëÿ çàêà÷êè
ôàéëîâ). À ïîä êîíåö, èíôîðìàöèþ î ðåçóëüòàòàõ çàêà÷êè ïåðåíàïðà-
âèòü â êîìàíäó mail, êîòîðàÿ ïðåäíàçíà÷åíà äëÿ îòñûëêè ïî÷òû, ÷òî áû
Âû áûëè â êóðñå íîâûõ ïîñòóïëåíèé â Âàøó ìóçûêàëüíóþ êîëëåêöèþ.
UNIX ñèñòåìû îáëàäàþò áåñêîíå÷íûì ïîòåíöèàëîì. Îáúåäèíÿÿ è
èñïîëüçóÿ ñòàíäàðòíûå ñðåäñòâà ìîæíî ðåøèòü ëþáóþ çàäà÷ó. Ïîñòî-
ÿííî ïîìíÿ îá ýòîì è òðåíèðóÿñü â íàïèñàíèè ñëîæíûõ êîìàíä, Âû
ïåðåëîæèòå íà ïëå÷è êîìïüþòåðà âñþ ðóòèííóþ ðàáîòó.
63

2.3.3 Ññûëêè

UNIX ñèñòåìû äàþò âîçìîæíîñòü ñîçäàâàòü ññûëêè íà îïðåäåëåí-


íûå òî÷êè ôàéëîâîé ñèñòåìû. Ññûëêè ïîçâîëÿþò èçáåæàòü ââîäà äëèí-
íûõ ïóòåé. Ñóùåñòâóåò äâà âèäà ññûëîê: æåñòêèå (hard links) è ñèìâî-
ëè÷åñêèå (soft links).
Æåñòêàÿ ññûëêà, ýòî ýëåìåíò ôàéëîâîé ñèñòåìû, óêàçûâàþùèé íà
òîò æå èíäåêñíûé äåñêðèïòîð (ôèçè÷åñêàÿ òî÷êà íà æåñòêîì äèñêå), ÷òî
è äðóãîé ôàéë. Íà ñàìîì äåëå ñóùåñòâóåò òîëüêî îäèí ôèçè÷åñêèé ôàéë.
Íî åìó îòâå÷àþò äâà èëè áîëåå ýëåìåíòà êàòàëîãà, óêàçûâàþùèõ íà îäíè
è òå æå äàííûå íà æåñòêîì äèñêå. Ïîíÿòíî, ÷òî ëþáîé ôàéë èìååò õîòÿ
áû îäíó æåñòêóþ ññûëêó. Æåñòêèå ññûëêè ñîçäàþòñÿ êîìàíäîé ln ïî
óìîë÷àíèþ.
ln /home/user/folder1/folder2/folder3/folder4/le.txt home/
user/le.txt
 ðåçóëüòàòå â äîìàøíåì êàòàëîãå ñîçäàåòñÿ ýëåìåíò ïîä íàçâàíè-
åì le.txt, óêàçûâàþùèé íà òó æå òî÷êó æåñòêîãî äèñêà, ÷òî è /home/
user/folder1/folder2/folder3/folder4/le.txt. Òåïåðü ê ôàéëó ìîæíî
îáðàùàòüñÿ íå èñïîëüçóÿ äëèííîãî ïóòè. ×òî áû ïîñìîòðåòü ñîñòîÿíèå
ññûëêè ìîæíî íàáðàòü ls -l.
- rw - - - - - - - 2 user user 3456 Jan 31 16:54 le.txt
Öèôðà 2 óêàçûâàåò íà òî, ÷òî ýòîò ôàéë èìååò 2 æåñòêèå ññûëêè.
Âñå èçìåíåíèÿ, âíîñèìûå â ôàéë èëè åãî àòðèáóòû, ïîäåéñòâóþò è íà
äðóãîé ôàéë, óêàçûâàþùèé íà òå æå äàííûå íà æåñòêîì äèñêå. Âðåìÿ
ìîäèôèêàöèè è ðàçìåð ôàéëà äëÿ îáåèõ ññûëîê ñîâïàäàþò. Ïðè óäàëå-
íèè ôàéëà /home/user/folder1/folder2/folder3/folder4/le.txt ñ÷åò-
÷èê ññûëîê óìåíüøèòñÿ íà åäèíèöó, îäíàêî ñàì ôàéë íà æåñòêîì äèñêå
îñòàíåòñÿ, ïîñêîëüêó ñóùåñòâóþò åùå ññûëêè íà íåãî. Êàê òîëüêî êîëè-
÷åñòâî ññûëîê ñòàíîâèòñÿ ðàâíûì íóëþ, ôàéë óäàëÿåòñÿ ôèçè÷åñêè.
Æåñòêèå ññûëêè îáëàäàþò ñëåäóþùèìè îãðàíè÷åíèÿìè:

- èõ íåëüçÿ èñïîëüçîâàòü êàê ññûëêè íà êàòàëîãè,

- îíè íå ìîãóò ïåðåñåêàòü ãðàíèöû ôàéëîâûõ ñèñòåì. Ò.å. íåëüçÿ


64

ñîçäàòü æåñòêóþ ññûëêó íà ôàéë /var/log.txt (ñëàéñ /var) â äî-


ìàøíåì êàòàëîãå (ñëàéñ /usr).

Äëÿ îáõîäà ýòèõ îãðàíè÷åíèé ñóùåñòâóþò ñèìâîëè÷åñêèå (ìÿãêèå)


ññûëêè. Ñ ñèìâîëè÷åñêèìè ññûëêàìè (soft links, symbolic links, symlinks)
âû ìîãëè ïîçíàêîìèòüñÿ â Windows, ãäå îíè íàçûâàþòñÿ ÿðëûêàìè. Â
îòëè÷èå îò æåñòêîé, ñèìâîëè÷åñêàÿ ññûëêà ïðåäñòàâëÿåò ñîáîé îòäåëü-
íûé ôàéë, â êîòîðîì ñîäåðæèòñÿ àäðåñ íà äðóãîé ôàéë. Äëÿ ñîçäàíèÿ
ñèìâîëè÷åñêîé ññûëêè èñïîëüçóåòñÿ îïöèÿ -s:
ln -s /home/user/folder1/folder2/folder3/folder4/le.txt /home/
user/le.txt
 ðåçóëüòàòå â äîìàøíåì êàòàëîãå ñîçäàåòñÿ ôàéë, êîòîðûé âñå îá-
ðàùåíèÿ ê íåìó ïåðåíàïðàâëÿåò ê ôàéëó /home/user/folder1/folder2/
folder3/folder4/le.txt. ×òî áû ïîñìîòðåòü ñîñòîÿíèå ññûëêè ìîæíî
íàáðàòü ls -l
lrw - - - - - - - 1 user user 15 Jan 31 16:54 le.txt -> /home/user/
folder1/folder2/folder3/folder4/le.txt
Òî, ÷òî ýòî ñèìâîëè÷åñêàÿ ññûëêà íàì ñîîáùàåò áóêâà l â íà÷àëå
ñòðîêè. Ïîñëå ñèìâîëîâ -> óêàçûâàåòñÿ ìåñòîðàñïîëîæåíèå ôàéëà, íà
êîòîðûé ññûëàåòñÿ ýòà ññûëêà.
Îñíîâíûå îòëè÷èÿ ñèìâîëè÷åñêîé ññûëêè îò æåñòêîé:

- ïðàâà äîñòóïà ê ññûëêå íå îòîáðàæàþò ïðàâ äîñòóïà ê ôàéëó

- ñ÷åò÷èê ññûëêè ðàâåí 1 (åñëè âû íå ñîçäàëè íà íåå æåñòêèõ ññû-


ëîê), ÷òî îçíà÷àåò, ÷òî ññûëêà óêàçûâàåò íà ôàéë, à íå íà îáëàñòü
äàííûõ íà æåñòêîì äèñêå.

- ðàçìåð ññûëêè ðàâåí íå ðàçìåðó ôàéëà, à êîëè÷åñòâó ñèìâîëîâ, èç


êîòîðûõ ñîñòîèò àäðåñ ññûëàþùèéñÿ íà ôàéë

- âðåìÿ ïîñëåäíåé ìîäèôèêàöèè ññûëêè íå ñîâïàäàåò ñî âðåìåíåì


ìîäèôèêàöèè ôàéëà. Îí ãîâîðèò ëèøü î òîì, êîãäà áûëà ìîäèôè-
öèðîâàíà ññûëêà.

Åñëè óäàëèòü ôàéë, íà êîòîðûé ññûëàåòñÿ ìÿãêàÿ ññûëêà, äàííûå


óíè÷òîæàþòñÿ ôèçè÷åñêè è ññûëêà ñòàíîâèòñÿ íåäåéñòâèòåëüíîé.
65

Âñåãäà ðåêîìåíäóåòñÿ äëÿ ññûëîê íà ôàéë â ïðåäåëàõ îäíîé ôàé-


ëîâîé ñèñòåìû ñîçäàâàòü æåñòêèå ññûëêè. Äëÿ ññûëîê íà ôàéë â äðóãîé
ÔÑ èëè íà ïàïêó  èñïîëüçîâàòü ñèìâîëè÷åñêèå ññûëêè.

2.4 Ñòàíäàðòíûå êîìàíäû è óòèëèòû FreeBSD

2.4.1 Ïîëüçîâàòåëüñêèå óòèëèòû

Êàê óæå ãîâîðèëîñü, ñòàíäàðòíàÿ óñòàíîâêà FreeBSD âêëþ÷àåò â


ñåáÿ ìíîæåñòâî ïðîãðàìì è óòèëèò. Îáî âñåõ èõ ðàññêàçàòü â äàííîì
êóðñå ëàáîðàòîðíûõ ðàáîò íåò âîçìîæíîñòè è ñìûñëà. Åñëè Âû íå çíàåòå
êàêîé êîìàíäîé âûïîëíèòü äåéñòâèå, òî ê Âàøèì óñëóãàì ñïðàâêà man,
â âèäå man -k. Òå æå äåéñòâèÿ âûïîëíÿåò è êîìàíäà apropos. Åñëè
Âû, íàïðèìåð, íå çíàåòå êàê óñòàíàâëèâàòü ïðîãðàììíîå îáåñïå÷åíèå íà
FreeBSD, òî íàáåðèòå man -k installing èëè apropos installing. Âàì
âûäàäóò êðàòêîå ðåçþìå î ïðîãðàììå pkg_add, êîòîðàÿ è çàíèìàåòñÿ
óñòàíîâêîé ÏÎ.
Íèæå ïðåäñòàâëåíû íåêîòîðûå êîìàíäû è óòèëèòû, äëÿ îçíàêîì-
ëåíèÿ ñ îáùèìè âîçìîæíîñòÿìè ñèñòåìû.
crypt
Ïðîñòîå ñðåäñòâî äëÿ øèôðîâàíèÿ ôàéëîâ. Íàáåðèòå
crypt ïàðîëü < íåçàøèôðîâàííûé_ôàéë > çàøèôðîâàí-
íûé_ôàéë
äëÿ øèôðîâàíèÿ è
crypt ïàðîëü < çàøèôðîâàííûé_ôàéë > íåçàøèôðîâàí-
íûé_ôàéë
äëÿ ðàñøèôðîâêè.
gzip, gunzip
Ïðîñòåíüêàÿ ïðîãðàììà äëÿ ñæàòèÿ ôàéëîâ. Îíà íå óìååò ðàáî-
òàòü ñ êàòàëîãàìè. Åñëè Âàì íóæíî ìîùíîå ñðåäñòâî àðõèâèðîâàíèÿ. òî
èñïîëüçóéòå tar.
df, du
Ýòè ïðîãðàììû ïîêàçûâàþò îáúåìû çàíèìàåìîé ïàìÿòè íà íàêî-
ïèòåëÿõ èíôîðìàöèè. df -h  èíôîðìàöèÿ î çàíÿòîé ïàìÿòè íà âèí÷å-
66

ñòåðå, à du -hd 1 èìÿ_ïàïêè  îáúåì, êîòîðûé çàíèìàåò êàòàëîã íà


âèí÷åñòåðå.
bg, fg
Ïðåäíàçíà÷åíû äëÿ ïåðåêëþ÷åíèÿ ïðîöåññà â ôîíîâûé ðåæèì è
âîçâðàùåíèÿ åãî èç ôîíîâîãî.
Åñëè Âû, íàïðèìåð, çàïóñòèëè ïîèñê ôàéëà â áîëüøîì êàòàëîãå,
à ïîòîì ðåøèëè, ÷òî Âàì íóæíî âåðíóòüñÿ â êîìàíäíóþ ñòðîêó, òî ñ
ïîìîùüþ êëàâèø Ctrl + z ìîæíî ïîñòàâèòü ïðîöåññ íà ïàóçó, à
ïîòîì, íàáðàâ bg, ïðîäîëæèòü åãî â ôîíîâîì ðåæèìå. Åñëè Âû çàõîòèòå
ñíîâà íàáëþäàòü çà ïðîöåñîì ïîèñêà, òî íàáåðèòå fg è êîìàíäà nd ñíîâà
áóäåò ðàäîâàòü Âàñ ñâîèìè ñîîáùåíèÿìè.
history
Ýòà ïðîãðàììà ïîêàçûâàåò èñòîðèþ ââåäåííûõ Âàìè êîìàíä. Ïî-
ñêîëüêó ñïèñîê äîâîëüíî äëèííûé, òî ìîæíî, íàïðèìåð, âûâåñòè òîëüêî
10 ïîñëåäíèõ êîìàíä ñ íàáðàâ history | tail èëè ïåðåíàïðàâèòü âûâîä
â êîìàíäó less äëÿ áîëåå êîìôîðòíîãî ïðîñìîòðà ñ ïîìîùüþ history |
less.
script
Öåëü ýòîé ïðîãðàììû  êîïèðîâàíèå âñåãî, ÷òî âûâîäèòñÿ íà ýêðàí
â ôàéë. Çàïóñòèâ åå, à ïîñëå îêîí÷àíèÿ ðàáîòû, ïðåðâàâ âûïîëíåíèå
ýòîé ïðîãðàììû ñ ïîìîùüþ Ctrl + d , â óêàçàííîì ôàéëå Âû ìîæåòå
âèäåòü âñå, ÷òî âûâîäèëîñü íà ýêðàí âî âðåìÿ âàøåé ðàáîòû.
date
Íàçâàíèå ãîâîðèò ñàìî çà ñåáÿ  âûâîä òåêóùåé äàòû â ðàçëè÷íûõ
âàðèàíòàõ.
cal
Âûâîä ðàçëè÷íûõ êàëåíäàðåé.
tar
Óíèâåðñàëüíàÿ ïðîãðàììà äëÿ ñîçäàíèÿ àðõèâîâ. Ó íåå ìíîæåñòâî
îïöèé, êîòîðûå ïîçâîëÿþò äåëàòü ëþáûå îïåðàöèè ñ àðõèâèðîâàííûìè
äàííûìè. Äëÿ íîâè÷êà ðàçîáðàòüñÿ â íåé òàê æå òðóäíî, êàê è â òåêñòî-
âîì ðåäàêòîðå vi. Ïîýòîìó âîò êîðîòåíüêàÿ øïàðãàëêà, à îñòàëüíîå Âû
ìîæåòå ïî÷åðïíóòü èç ñïðàâêè man.
67

Ñîçäàíèå àðõèâà
tar czf èìÿ_àðõèâà.tar.gz ìîÿ_âàæíàÿ_ïàïêà
Ïðîñìîòð ñïèñêà ôàéëîâ â àðõèâå
tar tf èìÿ_àðõèâà.tar.gz
Èçâëå÷åíèå ôàéëîâ èç àðõèâà
tar zxf èìÿ_àðõèâà.tar.gz
Êàê âèäèòå, ëåãêî äîãàäàòüñÿ, ÷òî c îçíà÷àåò ñîçäàòü (Create), x 
èçâëå÷ü (eXtract), z  èñïîëüçîâàòü ñæàòèå, à f  îïåðàöèè ïðîâîäèòü
ñ ôàéëîì, âìåñòî ìàãíèòíîé ëåíòû, êîòîðàÿ ïî óìîë÷àíèþ èñïîëüçîâà-
ëàñü 40 ëåò íàçàä âî âðåìåíà ñîçäàíèÿ tar.
nger
Ïîêàçûâàåò ïîëíóþ èíôîðìàöèþ î ïîëüçîâàòåëå (åñëè ïîëüçîâà-
òåëü, êîíå÷íî, åå çàïîëíèë). Ýòî î÷åíü èçâåñòíàÿ ïðîãðàììà. Êîãäà-òî
(ëåò 20-30 íàçàä) èíôîðìàöèÿ, êîòîðóþ îíà äàåò, ìîæíî áûëî ïîëó÷èòü
ñ ëþáîãî ñåðâåðà. Íî òåïåðü, ïî ñîîáðàæåíèÿì áåçîïàñíîñòè, îíà çàáëî-
êèðîâàíà âåçäå.
info
Ñïðàâî÷íàÿ ñëóæáà íàïîäîáèå man, íî ñî ñâîèì ñèíòàêñèñîì.
bc, dc
bc ýòî ïðîñòîé êàëüêóëÿòîð. Çàïóñòèâ åãî ñ îïöèÿìè -lq, ìîæíî
ââîäèòü ïðîèçâîëüíûå ïðèìåðû âèäà (2+2)*2. Íàæàâ Enter ìû ïîëó-
÷èì ðåçóëüòàò. bc î÷åíü ôóíêöèîíàëåí è óìååò ðåøàòü çàäà÷è ëþáîé
ñëîæíîñòè, âû÷èñëÿòü ðàçëè÷íûå ìàòåìàòè÷åñêèå ôóíêöèè. Îí èìååò
ìíîãî íàñòðîåê è â íåãî âñòðåí ñâîé ÿçûê ïðîãðàììèðîâàíèÿ, ñ ïîìîùüþ
êîòîðîãî ìîæíî ôîðìèðîâàòü çàäàíèÿ äëÿ âû÷èñëåíèÿ. dc  ñòåêîâûé
êàëüêóëÿòîð, èñïîëüçóþùèé îáðàòíóþ ïîëüñêóþ çàïèñü. Âàì îí ïîíàäî-
áèòñÿ òîëüêî, åñëè íå õâàòèò ôóíêöèîíàëà bc.
echo
Õîòÿ ñìûñë êîìàíäû ñðàçó íå ïîíÿòåí è êàæåòñÿ àáñóðäíûì, íî
ñêîðî Âû ïîéìåòå, ÷òî îíà î÷åíü ïîëåçíà è âîñòðåáîâàíà. Ýòà êîìàíäà
ïðîñòî âûâîäèò íà ýêðàí ñòðîêó, êîòîðóþ Âû åé ïåðåäàëè. Áëàãîäàðÿ
ýòîìó ìîæíî ïåðåíàïðàâèòü ýòó ñòðîêó íà ââîä äðóãîé ïðîãðàììû. Íà-
ïðèìåð:
68

echo 10+10 | bc
Âåðíåò âàì ÷èñëî 20.
fc
Ïîëåçíàÿ óòèëèòêà. Åñëè âû íàáðàëè êîìàíäó â òðè ñòðîêè ñ äâà-
äöàòüþ ïåðåìåííûìè è òðèäöàòüþ îïöèÿìè, òî íàáðàâ fc Âû ëåãêî ñìî-
æåòå åå ñîõðàíèòü â ôàéë. Ñäåëàâ ôàéë èñïîëíÿåìûì, Âàì áîëüøå íå
ïîòðåáóåòñÿ ñíîâà åå íàáèðàòü, à ñòîèò òîëüêî çàïóñòèòü ôàéë. Êàê
ñäåëàòü ôàéë èñïîëíÿåìûì, ìû óçíàåì â ñëåäóþùèõ ëàáîðàòîðíûõ ðà-
áîòàõ.

2.4.2 Óòèëèòû àäìèíèñòðèðîâàíèÿ

dd Ýòà êîìàíäà ïðåäíàçíà÷åíà äëÿ íèçêîóðîâíåâîãî êîïèðîâàíèÿ.


Ïðåäíàçíà÷åíà äëÿ ñëó÷àåâ, êîãäà cp íå ìîæåò ïîìî÷ü. Íàïðèìåð
dd if=/dev/ad0 of=/media/oppy/bootsect.lnx bs=512 count=1
êîïèðóåò ïåðâûå 512 áàéò ñ âèí÷åñòåðà (ò.å. çàãðóç÷èê ñèñòåìû) íà
äèñêåòó.
ps
Êîìàíäà äëÿ âûâîäà èíôîðìàöèè î çàïóùåííûõ ïðîöåññàõ. Ïðè
çàïóñêå áåç îïöèé ïîêàçûâàåò òîëüêî ïðîöåññû çàïóùåííûå Âàìè. Åñëè
íàáðàòü ps aux òî âûâåäóòñÿ âñå ïðîöåññû, çàïóùåííûå âñåìè ïîëüçî-
âàòåëÿìè, à òàê æå ñ áîëåå ïîäðîáíîé èíôîðìàöèåé, òàêîé êàê çàãðóçêà
ïðîöåññîðà è çàíÿòàÿ ïàìÿòü. Ïðî÷èòàâ man ps Âû íàó÷èòåñü ïîíèìàòü
âûâîä ýòîé ïðîãðàììû è âûáèðàòü ñåáå íóæíûå äàííûå èç åå âûâîäà.
top
Âûïîëíÿåò òå æå ôóíêöèè, ÷òî è ps, íî ÿâëÿåòñÿ èíòåðàêòèâíîé è
ïîçâîëÿåò âûâîäèòü èíôîðìàöèþ î ïðîöåññàõ â ðåàëüíîì âðåìåíè.
nice, renice
Óòèëèòà ïðåäíàçíà÷åíà äëÿ ïîâûøåíèÿ èëè ïîíèæåíèÿ ïðèîðèòåòà
âûïîëíåíèÿ çàäà÷è. Ïðèîðèòåò óêàçûâàåòñÿ â óñëîâíûõ åäèíèöàõ îò -20
(íàèâûñøèé) äî 19 (ñàìûé íèçêèé). Íå çàáûâàéòå, ÷òî ïåðåä ýòîé îïöèåé
íåîáõîäèìî óêàçàòü çíàê ìèíóñ. Ïîýòîìó íà ýêðàíå ïðèîðèòåò äîëæåí
âûãëÿäåòü êàê îò - -20 äî -19. Íàïðèìåð Âàì íóæíî çààðõèâèðîâàòü áàçó
69

äàííûõ íà ñåðâåðå, íî ïðè ýòîì íå äîïóñòèòü íàãðóçêè íà íåãî. Äëÿ ýòîãî


íóæíî ïåðåä êîìàíäîé àðõèâàöèè óêàçàòü ïðèîðèòåò âîò òàê:
nice -10 tar îïöèè_äëÿ_êîìàíäû_àðõèâèðîâàíèÿ &
Çíàê & îçíà÷àåò, ÷òî ïðîöåñ áóäåò çàïóùåí â ôîíîâîì ðåæèìå è
äàñò âàì âîçìîæíîñòü ïðîäîëæèòü ðàáîòó ñ êîìàíäíîé ñòðîêîé. Åñëè
ðàáî÷èé äåíü çàêîí÷èëñÿ è ñåðâåð óæå íå èñïîëüçóåòñÿ òàê àêòèâíî, à
àðõèâàöèÿ åùå ïðîäîëæàåòñÿ, òî ìîæíî íà íî÷ü ïîñòàâèòü óâåëè÷åíèå
ïðèîðèòåòà. Äëÿ ýòîãî ñ ïîìîùüþ êîìàíäû ps íóæíî óçíàòü PID ïðî-
öåññà è óâåëè÷èòü åãî ïðèîðèòåò:
renice - -10 -p pid_ïðîöåññà
Ó÷òèòå, ÷òî ïåðåâîä ïðîöåññà â íàèâûñøèé ïðèîðèòåò ïåðåâîäèò
ýòîò ïðîöåññ ïðàêòè÷åñêè â ðåæèì ðåàëüíîãî âðåìåíè (realtime mode).
Ïîñëå ýòîãî âñå ðåñóðñû âû÷èñëèòåëüíîé ñèñòåìû áóäóò áðîøåíû íà åãî
âûïîëíåíèå è ñèñòåìà îòêàæåòñÿ îòâå÷àòü äàæå íà êîìàíäû ñ êëàâèàòó-
ðû.
Êîìàíäó nice ìîæíî ïðèìåíÿòü íå òîëüêî äëÿ ïðîöåññîâ, íî òàê æå
è äëÿ ãðóïï è îòäåëüíûõ ïîëüçîâàòåëåé.
kill, killall
Óòèëèòû ïîìîãàþùèå óáèòü ïðîöåññ, ïîñëàâ èì ñèãíàë ïðåðûâà-
íèÿ. Ñèãíàëû ïðåðûâàíèÿ ìîãóò áûòü ñëåäóþùèìè:

Òàáëèöà 6: Ñèãíàëû ïðåðûâàíèÿ

Ñèãíàë Èìÿ Çíà÷åíèå


1 HUP Ïðåðûâàíèå è ïåðåçàïóñê
2 INT Ïðåðûâàíèå
3 QUIT Âûõîä
6 ABRT Àâàðèéíîå çàâåðøåíèå
9 KILL Ñèãíàë çàâåðøåíèÿ, êîòîðûé íåëüçÿ èãíîðèðîâàòü
14 ALRM Òðåâîãà
15 TERM Êîððåêòíîå çàâåðøåíèå ïðîöåññà

Åñëè êàêàÿ-òî ïðîãðàììà çàâèñëà, òî, óçíàâ ïðåäâàðèòåëüíî PID,


ìîæíî ñ ïîìîùüþ kill ïîñëàòü åé ñèãíàë çàâåðøåíèÿ TERM:
70

kill -15 33446


Åñëè îíà íå îòâå÷àåò, òî èñïîëüçóéòå ñèãíàë KILL:
kill -9 33446
killall ïîìîãàåò çàâåðøèòü âñå ïðîöåññû çàïóùåííûå îïðåäåëåí-
íîé êîìàíäîé. Íàïðèìåð killall tar îòìåíèò âñå çàïóùåííûå ïðîöåññû
àðõèâàöèè. Ó÷òèòå, ÷òî ñèãíàë 9 KILL î÷åíü ãðóáûé. Åñëè Âû ïðåðâå-
òå àðõèâàöèþ òàêèì ñïîñîáîì, òî íà äèñêå îñòàíóòñÿ êóñêè ôàéëîâ,
â êîòîðûå øëà â ýòî âðåìÿ çàïèñü. Ñòàðàéòåñü çàâåðøàòü ïðîãðàììû
êîððåêòíî ñ ïîìîùüþ ñèãíàëà 3 QUIT èëè 15 TERM.
uname
Ýòà óòèëèòà ïîêàçûâàåò ðàçíîîáðàçíóþ èíôîðìàöèþ î ñèñòåìå. Â
ñïðàâî÷íîé ñëóæáå man, Âàì ðàññêàæóò î òîì, êàê óçíàòü òèï ïðîöåñ-
ñîðà, óñòàíîâëåííóþ îïåðàöèîííóþ ñèñòåìó, àðõèòåêòóðó êîìïüþòåðà è
ìíîãîå äðóãîå, ÷òî çíàåò ýòà óòèëèòêà.
uptime
Âûâîäèò âðåìÿ ðàáîòû ñèñòåìû, è ñðåäíþþ çàãðóæåííîñòü çà ïî-
ñëåäíèå 1, 5 è 15 ìèíóò.
w, who, users
Ýòè êîìàíäû âûâîäÿò ðàçëè÷íóþ èíôîðìàöèþ î ïîëüçîâàòåëÿõ,
êîòîðûå ñåé÷àñ ðàáîòàþò â ñèñòåìå.
ac
Âûâîäèò èíôîðìàöèþ î ïðîäîëæèòåëüíîñòè ðàáîòû ïîëüçîâàòåëåé
â ñèñòåìå. Êàê ïî äíÿì  ac -d èìÿ_ïîëüçîâàòåëÿ òàê è ïî ïîëüçî-
âàòåëÿì âîîáùå  ac -p.
last
last âûâîäèò áîëåå ïîëíóþ èíôîðìàöèþ. Êòî êîãäà ïîäêëþ÷èëñÿ
è ñ êàêîãî òåðìèíàëà, ñêîëüêî âðåìåíè ïðîðàáîòàë è êòî âûêëþ÷àë
ñèñòåìó.

2.4.3 alias'û

Àëèàñû (èëè ïñåâäîíèìû) ýòî ïîäñòàíîâêà âìåñòî îäíîé êîìàíäû


äðóãîé. ×àñòî èõ èñïîëüçóþò äëÿ òîãî, ÷òî áû èçáåæàòü ââîäà áîëüøîãî
÷èñëà îïöèé. Ïîñìîòðåâ èñòîðèþ êîìàíä êîìàíäîé history Âû ìîæåòå
71

çàìåíèòü íàèáîëåå ÷àñòî èñïîëüçóåìûå êîìàíäû èõ ïñåâäîíèìàìè. Íà-


ïðèìåð ââåäÿ
alias ll="ls -lh"
ïî êîìàíäå ll áóäåò âûâîäèòüñÿ ïîëíûé ñïèñîê ôàéëîâ êàê è ïðè
êîìàíäå ls -lh. Ââåäÿ
alias ..="cd .."
Ïåðåìåùàòüñÿ íà óðîâåíü âûøå â ôàéëîâîé ñèñòåìå ìîæíî áóäåò
íàáðàâ äâå òî÷êè. Ïñåâäîíèìû òàê æå ìîæíî èñïîëüçîâàòü äëÿ áåçîïàñ-
íîñòè
alias rm="rm -i"
Òåïåðü ïðè óäàëåíèè ôàéëîâ ó Âàñ âñåãäà áóäóò çàïðàøèâàòü ïîä-
òâåðæäåíèå.
Ïñåâäîíèìû ðàáîòàþò òîëüêî äî êîíöà ñåññèè. ×òî áû ñäåëàòü èõ
ïîñòîÿííî äåéñòâóþùèìè, èõ íóæíî âíåñòè â êîíôèãóðàöèîííûé ôàéë
îáîëî÷êè. Êàê ýòî ñäåëàòü, ìû óçíàåì ïîçæå.

2.5 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó

1. Ñäåëàòü ñâîèì èíòåðïðåòàòîðîì ïî óìîë÷àíèþ  bash.

2. Ñîçäàòü â äîìàøíåì êàòàëîãå ïðîèçâîëüíóþ ìíîãîóðîâíåâóþ ñòðóê-


òóðó ôàéëîâ, êàòàëîãîâ è ññûëîê.

3. Çàïîëíèòü ôàéëû ðàçëè÷íîé èíôîðìàöèåé, èñïîëüçóÿ ïåðåíàïðàâ-


ëåíèå èç êîìàíä è ôàéëîâ.

4. Çààðõèâèðîâàòü Âàøè ñîçäàííûå êàòàëîãè è ôàéëû, çàøèôðîâàòü


àðõèâ, è ïîñëå óäàëåíèÿ Âàøèõ ïàïîê, âîññòàíîâèòü èç àðõèâà

5. Óçíàòü md58 ñóììó äëÿ ñâîåãî àðõèâà äî øèôðîâàíèÿ è ïîñëå.


Îáúÿñíèòü ðåçóëüòàò.

6. Ñêîëüêî ìåñòà çàíèìàåò Âàø äîìàøíèé êàòàëîã?

8 md5  àëãîðèòì õýøèðîâàíèÿ, êîòîðûé ÷àñòî ïðèìåíÿåòñÿ äëÿ ïðîâåðêè öåëîñòíîñòè ôàéëîâ,
òàê êàê èçìåíåíèå (ïîâðåæäåíèå) ôàéëà äàæå íà îäèí áèò èñêàçèò ðåçóëüòàò âû÷èñëåíèÿ md5
ñóììû
72

7. Çàìåíèòü ñîäåðæèìîå ôàéëà motd, ñòðîêîé Hello!.  îò÷åòå ðàñ-


ñêàçàòü, ê ÷åìó ýòî ïðèâåëî.

8. Íàó÷èòüñÿ óáèâàòü çàâèñøèå ïðîöåññû ñ ïîìîùüþ kill è top. Äëÿ


ïîìîùè â ýêñïåðèìåíòå èñïîëüçóéòå ïðîãðàììó sleep.

9. Ñêàæèòå, ê êàêîìó ðåçóëüòàòó ïðèâåäåò êîìàíäà rm -Rf /* ?

10. Åñëè ïîñëå ïðåäûäóùåãî ïóíêòà ñèñòåìà ïåðåñòàëà ðàáîòàòü, îáú-


ÿñíèòå ïî÷åìó.

11. Êàêîãî ÷èñëà ïðàçäíóþò äåíü âîîðóæåííûõ ñèë â Ãîíäóðàñå?

12. Íàéäèòå ðóêîâîäñòâî ïî FreeBSD (Handbook) è ñäåëàéòå æåñòêóþ


ññûëêó íà íåãî â ñâîåì äîìàøíåì êàòàëîãå.

2.6 Ñîäåðæàíèå îò÷åòà

 îò÷åòå äîëæíà áûòü ïðåäñòàâëåíà ïîñëåäîâàòåëüíîñòü äåéñòâèé,


ïåðå÷èñëåííûõ â ðàçäåëå "Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó"â âèäå ñêðèí-
øîòîâ èëè îò÷åòà ñôîðìèðîâàííîãî ïðîãðàììîé script9 ñî ñâîèìè êî-
ìåíòàðèÿìè.

2.7 Âîïðîñû äëÿ ñàìîêîíòðîëÿ

9 Ïðîãðàììà script âåäåò ïðîòîêîë òîëüêî ïîòîêîâîé èíôîðìàöèè, êîòîðàÿ âûâîäèòñÿ íà òåð-
ìèíàë. Èíòåðàêòèâíûå ïðîãðàììû, òàêèå êàê ðåäàêòîð vi èëè óòèëèòà top, íå ìîãóò áûòü
çàïðîòîêîëèðîâàíû.
73

3 Ëàáîðàòîðíàÿ ðàáîòà 3. Îáðàáîòêà

òåêñòà

Öåëüþ ðàáîòû ÿâëÿåòñÿ èçó÷åíèå ñðåäñòâ îáðàáîòêè òåêñòà â îïå-


ðàöèîííîé ñèñòåìå FreeBSD è èçó÷åíèå ôàéëîâ íàñòðîåê îïåðàöèîííîé
ñèñòåìû.

3.1 Òåêñòîâûå ðåäàêòîðû

3.1.1 Îáçîð è ñðàâíåíèå òåêñòîâûõ ðåäàêòîðîâ

Îäíèì èç ñàìûõ ðàñïðîñòðàíåííûõ ïðèëîæåíèé, êîòîðîå íóæíî


âñåì, ÿâëÿåòñÿ òåêñòîâûé ðåäàêòîð.  îòëè÷èå îò òåêñòîâîãî ïðîöåññîðà
(Open Oce Writer, Microsoft Word) îí ðàáîòàåò ñ ïðîñòûì òåêñòîì. Îí
íå ìîæåò çàïîìèíàòü èçìåíåíèÿ â øðèôòàõ, ïîëÿ è äðóãóþ ïîäðîáíóþ
èíôîðìàöèþ, îòíîñÿùóþñÿ ê äîêóìåíòó. Òåêñòîâûé ðåäàêòîð â UNIX
ñèñòåìàõ îáÿçàòåëåí ê èñïîëüçîâàíèþ. Îñíîâíûå íàçíà÷åíèÿ òåêñòîâîãî
ðåäàêòîðà:

- ðåäàêòèðîâàíèå ôàéëîâ êîíôèãóðàöèè ñèñòåìû. Ôàéëû êîíôèãó-


ðàöèè äîëæíû áûòü îáÿçàòåëüíî òåêñòîâûìè ôàéëàìè.

- ñîçäàíèå è ìîäèôèêàöèÿ èñõîäíîãî êîäà ïðîãðàìì è ñöåíàðèåâ.


Âñå ïðîãðàììû ïèøóòñÿ òîëüêî â òåêñòîâûõ ôàéëàõ. Ñþäà æå
îòíîñèòñÿ è ñîçäàíèå è ìîäèôèêàöèÿ Web-ñòðàíèö

- äëÿ áîëåå ñëîæíîãî íàáîðà òåêñòà ñóùåñòâóåò ñèñòåìà TeX è ìàê-


ðîïàêåò LaTeX. Ýòà ñèñòåìà èñïîëüçóåòñÿ äëÿ íàáîðà êíèã è äîêó-
ìåíòîâ. Êðóïíûå íàó÷íûå æóðíàëû ïðèíèìàþò ñòàòüè íàïèñàííûå
òîëüêî â ýòîé ñèñòåìå. Èñõîäíûå ôàéëû äëÿ TeX òàê æå ÿâëÿþòñÿ
òåêñòîâûìè ôàéëàìè. Äàííûé êóðñ ëàáîðàòîðíûõ ðàáîò, íàïðè-
ìåð, áûë íàïèñàí ñ ïîìîùüþ ìàêðîïàêåòà LaTeX

Ðåäàêòîðû â UNIX ñèñòåìàõ ìîæíî ïîäåëèòü íà äâå êàòåãîðèè.


Ðåäàêòîðû ñ ãðàôè÷åñêèì èíòåðôåéñîì (GUI) è êîíñîëüíûå ðåäàêòîðû.
74

Ðåäàêòîðû ñ GUI ìû ðàññìàòðèâàòü íå áóäåì, ïîñêîëüêó âñå äåéñòâèÿ


áóäåì ïðîèçâîäèòü â êîìàíäíîé ñòðîêå.

3.1.2 Òåêñòîâûå ðåäàêòîðû äëÿ äåâî÷åê

Ðåäàêòîð ee (easy editor) ïðèìèòèâíûé, àáñîëþòíî íå ôóíêöèî-


íàëüíûé è î÷åíü ïðîñòîé ðåäàêòîð. Ñ çàäà÷åé íàáðàòü ïàðó ñòðî÷åê
òåêñòà îí êîíå÷íî ñïðàâèòñÿ, íî ïðè ëþáîé ñåðüåçíîé ðàáîòå åãî ïðîñòîòà
íà÷èíàåò ðàçäðàæàòü.
Çàïóñêàåòñÿ ñ ïîìîùüþ êîìàíäû ee èìÿ_ôàéëà . Åñëè íàáðàòü
ee áåç èìåíè, òî ñîçäàåòñÿ íîâûé, ïóñòîé ôàéë. Ðàçáåðåòñÿ ñ ýòèì ðå-
äàêòîðîì äàæå ðåáåíîê. Ââåðõó ýêðàíà âûâåäåíû ïîäñêàçêè ðàçëè÷íûõ,
íåîáõîäèìûõ äëÿ ðàáîòû, êëàèâàòóðíûõ êîìáèíàöèé, ãäå ñèìâîë , îçíà-
÷àåò Ctrl . Âûõîä â ãëàâíîå ìåíþ îñóùåñòâëÿåòñÿ êëàâèøåé Esc .
Íå áóäåì òðàòèòü äîëãîå âðåìÿ íà èçó÷åíèå ýòîãî ðåäàêòîðà. Âû
ìîæåòå èñïîëüçîâàòü åãî òîëüêî â òîì ñëó÷àå, åñëè Âàì íå íóæíà îöåíêà
âûøå 2 ñ ïëþñîì.
nano ÿâëÿåòñÿ àíàëîãîì ee äëÿ îïåðàöèîííûõ ñèñòåì ñåìåéñòâà
GNU/Linux.  ñâÿçè ïðîñòîòîé îí òîæå ïðèâëåê âíèìàíèå ìíîãèõ íà÷è-
íàþùèõ ïîëüçîâàòåëåé UNIX ñèñòåì.

3.1.3 Òåêñòîâûå ðåäàêòîðû äëÿ ìàëü÷èêîâ

vi è emacs  äâà ìîùíåéøèõ òåêñòîâûõ ðåäàêòîðà. Îáà èìåþò


ñâîè ïëþñû è ìèíóñû, à òàêæå ñâîèõ ñòîðîííèêîâ è ïðîòèâíèêîâ. Åñëè
Âû ïëàíèðóåòå çàíèìàòüñÿ UNIX ñèñòåìàìè è ðàáîòàòü â íèõ, òî â ëþáîì
ñëó÷àå Âàì ïðèäåòñÿ âûáèðàòü îäèí èç íèõ.
Ìû áóäåì èçó÷àòü vi, ò.ê. îí âñåãäà ÿâëÿåòñÿ ðåäàêòîðîì ïî óìîë-
÷àíèþ (ýòî Âû óæå ìîãëè çàìåòèòü ïðè èñïîëüçîâàíèè òàêèõ êîìàíä êàê
chsh è visudo), ðåäàêòîðîì, êîòîðûé îáÿçàòåëüíî íàõîäèòñÿ â ëþáîé
îïåðàöèîííîé ñèñòåìå UNIX, à òàê æå åäèíñòâåííûì äîñòóïíûì ðåäàê-
òîðîì â ñëó÷àå ñáîÿ ñèñòåìû. Ïîýòîìó îñíîâû ðàáîòû â ýòîì ðåäàêòîðå
Âàì çíàòü íåîáõîäèìî.
75

3.1.4 Îñíîâû vi

Åñëè îòîéòè îò ìíåíèÿ íîâè÷êîâ î òîì, ÷òî ó vi äâà ðåæèìà: îäèí


â êîòîðîì îí ïèùèò è äðóãîé, â êîòîðîì îí âñå ïîðòèò, òî ó vi åñòü
êîìàíäíûé ðåæèì è ðåæèì ââîäà. Ïðè çàïóñêå vi Âû ñðàçó ïîïàäàåòå â
êîìàíäíûé ðåæèì, â êîòîðîì êàæäàÿ áóêâà îçíà÷àåò îïðåäåëåííóþ êî-
ìàíäó. Òàêîé ñïîñîá óïðàâëåíèå íàìíîãî óñêîðÿåò ðàáîòó ñ òåêñòîì, òàê
êàê äëÿ íàáîðà áîëüøèíñòâà êîìàíä íå íóæíî óáèðàòü ðóêè ñ áàçîâûõ
êëàâèø êëàâèàòóðû. Â ðàñøèðåííîé âåðñèè vi, êîòîðàÿ íàçûâàåòñÿ vim
(VI iMproved) äîáàâëåíû êîìáèíàöèè äîâîëüíî ðåäêî èñïîëüçóåìûõ, íî
âñå òàêè ïîëåçíûõ êîìáèíàöèé ñ êëàâèøàìè Alt è Ctrl .
Ãëàâíàÿ ïðîáëåìà äëÿ íîâè÷êà  âûõîä èç ðåäàêòîðà. Ñðàçó çà-
ïîìíèòå ñëåäóþùèå êëàâèøè è êîìáèíàöèè:

- äëÿ ïåðåõîäà â êîìàíäíûé ðåæèì: êëàâèøà Esc

- : q !  êîìàíäà áåçóñëîâíîãî âûõîäà. Âñå íåñîõðàíåííûå


äàííûå òåðÿþòñÿ

- : w q  ñîõðàíèòü èçìåíåííûå äàííûå è âûéòè èç


ðåäàêòîðà

Äëÿ òîãî, ÷òî áû ïåðåéòè èç êîìàíäíîãî ðåæèìà â ðåæèì ââîäà


òåêñòà, íåîáõîäèìî íàæàòü îäíó èç êëàâèø: a , i èëè o . Ïîñëå
íàæàòèÿ íà a (append  ïðèñîåäèíèòü), ââîäèìûé òåêñò âñòàâëÿåòñÿ
ñðàçó ïîñëå ñèìâîëà êóðñîðà, i (insert  âñòàâèòü) ââîäèìûé òåêñò
âñòàâëÿåòñÿ ïåðåä ñèìâîëîì, íà êîòîðîì íàõîäèòñÿ êóðñîð. o (open
 îòêðûòü) âñòàâëÿåò íîâóþ ñòðîêó íèæå êóðñîðà è ïðåäëàãàåò ââåñòè
òåêñò â íåé. Åñòü åùå êîìàíäà A , êîòîðàÿ íà÷èíàåò âñòàâëÿòü òåêñò
â êîíöå ñòðîêè è O , êîòîðàÿ âñòàâëÿåò ïóñòóþ ñòðîêó íàä êóðñîðîì.
×òî áû âåðíóòüñÿ èç ðåæèìà ââîäà òåêñòà â êîìàíäíûé ðåæèì, íàæìèòå
Esc .
Ïåðåìåùåíèå ïî òåêñòó. Ïîìèìî êóðñîðíûõ êëàâèø, à òàêæå êëà-
âèø Page ↑ , Page ↓ , Home è End , êîòîðûå ìîãóò íå ðàáîòàòü íà íåêî-
òîðûõ òåðìèíàëàõ èëè âîîáùå îòñóòñòâîâàòü íà êëàâèàòóðå, èìåþòñÿ
76

äðóãèå êëàâèøè, ïîçâîëÿþùèå ïåðåìåùàòüñÿ ïî äîêóìåíòó â êîìàíäíîì


ðåæèìå:

h âëåâî íà îäèí ñèìâîë

j âíèç íà îäèí ñèìâîë

k ââåðõ íà îäèí ñèìâîë

l âïðàâî íà îäèí ñèìâîë

w âïåðåä íà îäíî ñëîâî

b íàçàä íà îäíî ñëîâî

e â êîíåö ñëåäóþùåãî ñëîâà

0 â íà÷àëî ñòðîêè

Enter ê ïåðâîìó ñèìâîëó ñëåäóþùåé ñòðîêè, íå ÿâëÿþùèìñÿ ïðî-


áåëîì

$ â êîíåö ñòðîêè

) â íà÷àëî ñëåäóþùåãî ïðåäëîæåíèÿ

( â íà÷àëî ïðåäûäóùåãî ïðåäëîæåíèÿ

} â íà÷àëî ñëåäóþùåãî àáçàöà

{ â êîíåö ïðåäûäóùåãî àáçàöà

G â êîíåö òåêóùåãî äîêóìåíòà

H íà ïåðâóþ ñòðîêó íà ýêðàíå

L íà ïîñëåäíþþ ñòðîêó íà ýêðàíå

Ñ êàæäîé êîìàíäîé èç ýòîé òàáëèöû ìîæíî èñïîëüçîâàòü ÷èñëî:


íàïðèìåð 5 j ïåðåìåùàåò êóðñîð íà 5 ñòðîê âíèç, 7 5 G
77

ïåðåìåùàåò êóðñîð íà 75-þ ñòðîêó ôàéëà, à 5 L  íà 5-þ ñòðîêó


ñíèçó ýêðàíà.
Ïðîêðóòêà ýêðàíà îñóùåñòâëÿåòñÿ ñëåäóþùèìè êëàâèàòóðíûìè êîì-
áèíàöèÿìè:

z Enter ïåðåìåùàåò ñòðîêó, íà êîòîðîé íàõîäèòñÿ êóðñîð, ââåðõ


ýêðàíà

z - ïåðåìåùàåò ñòðîêó, íà êîòîðîé íàõîäèòñÿ êóðñîð, âíèç


ýêðàíà

z . ïåðåìåùàåò ñòðîêó, íà êîòîðîé íàõîäèòñÿ êóðñîð, â öåíòåð


ýêðàíà

Ctrl + u ïðîêðó÷èâàåò òåêñò íà ïîë-ýêðàíà ââåðõ

Ctrl + d ïðîêðó÷èâàåò òåêñò íà ïîë-ýêðàíà âíèç

Ctrl + f ïðîêðó÷èâàåò òåêñò âïåðåä íà öåëûé ýêðàí

Ctrl + b ïðîêðó÷èâàåò òåêñò íàçàä íà öåëûé ýêðàí

Ctrl + e ïðîêðó÷èâàåò òåêñò âíèç íà îäíó ñòðîêó

Ctrl + y ïðîêðó÷èâàåò òåêñò ââåðõ íà îäíó ñòðîêó

 ðåäàêòîðå vi êëàâèøè →−7 è Del íå âûïîëíÿþò òåõ äåéñòâèé,


êîòîðûõ îò íèõ ìîæíî îæäàòü. Äëÿ óäàëåíèÿ òåêñòà è òîìó ïîäîáíîãî
ïðèäåòñÿ ïîëüçîâàòüñÿ äðóãèìè êëàâèøàìè:

D Óäàëÿåò òåêñò îò ïîçèöèè êóðñîðà äî êîíöà ñòðîêè

d w óäàëÿåò ñëîâî

d d óäàëÿåò òåêóùóþ ñòðîêó

n d d óäàëÿåò n ñòðîê (ãäå n  ÷èñëî)


r c  çàìåíÿåò ñèìâîë â ïîçèöèè êóðñîðà, ñèìâîëîì ñ (ñ  ëþáîé
ñèìâîë)
78

R ðåæèì çàìåíû. Ââîäèìûé òåêñò çàìåùàåò òåêóùèé òåêñò

S óäàëÿåò òåêóùóþ ñòðîêó è íà÷èíàåò ââîä òåêñòà íà íîâîé


ïóñòîé ñòðîêå

x óäàëÿåò ñèìâîë â ïîçèöèè êóðñîðà

X óäàëÿåò ñèìâîë ïåðåä êóðñîðîì

~ èçìåíÿåò ðåãèñòð áóêâû â ïîçèöèè êóðñîðà

J îáúåäèíÿåò òåêóùóþ ñòðîêó ñî ñëåäóþùåé

Îïåðàöèè íàä ôàéëàìè è âûõîä èç ðåäàêòîðà

Z Z åñëè ôàéë áûë èçìåíåí, òî ñîõðàíèòü èçìåíåíèÿ è âûéòè


èç ïðîãðàììû

: w q ñîõðàíèòü èçìåíåíèÿ è âûéòè èç ïðîãðàììû

: w ñîõðàíèòü èçìåíåíèÿ

: w ! ñîõðàíèòü èçìåíåíèÿ äàæå åñëè ôàéë ñóùåñòâóåò èëè


çàùèùåí îò çàïèñè

: q âûõîä èç ïðîãðàììû. Åñëè áûëè èçìåíåíèÿ â ôàéëå, òî


âûäàåòñÿ îøèáêà è ïðîãðàììà íå çàêðûâàåòñÿ

: q ! âûéòè èç ïðîãðàììû, îòìåíèâ âñå èçìåíåíèÿ

: e èìÿ_ôàéëà  çàãðóçèòü ôàéë ñ èìåíåì èìÿ_ôàéëà â


ðåäàêòîð

: e ! îòáðîñèòü âñå èçìåíåíèÿ è çàãðóçèòü ñ äèñêà ñòàðûé


âàðèàíò ôàéëà

Ïîèñê è çàìåíà

/ øàáëîí  çäåñü øàáëîí  ôðàãìåíò òåêñòà, êîòîðûé òðåáóåòñÿ


íàéòè
79

/  ïîâòîðÿåò ïîèñê äî ñëåäóþùåãî øàáëîíà

? øàáëîí  ïîèñê øàáëîíà îñóùåñòâëÿåòñÿ â îáðàòíîì íàïðàâ-


ëåíèè

?  ïîâòîðÿåò ïîèñê íàçàä

%  ïåðåìåùàåò êóðñîð íà ñîîòâåòñòâóþùóþ ïàðíóþ ñêîáêó

: øàáëîí1
s / øàáëîí2  çàìåíÿåò â òåêóùåé
/

ñòðîêå ñîâïàäåíèÿ øàáëîíà1 íà øàáëîí2

: %øàáëîí1s / øàáëîí2  çàìåíÿåò â


/

òåêóùåì ôàéëå ñîâïàäåíèÿ øàáëîíà1 íà øàáëîí2

Êîïèðîâàíèå è âñòàâêà

y w êîïèðóåò â áóôåð òåêóùåå ñëîâî

y $ êîïèðóåò îò ïîçèöèè êóðñîðà äî êîíöà òåêóùåé ñòðîêè

y y êîïèðóåò â áóôåð âñþ ñòðîêó

n y y êîïèðóåò â áóôåð n ñòðîê


Êîìàíäû óäàëåíèÿ è êîïèðîâàíèÿ ïîìåùàþò òåêñò â áóôåð. Äëÿ
âñòàâêè òåêñòà èñïîëüçóþòñÿ P (âñòàâëÿåò ïåðåä êóðñîðîì) p (âñòàâ-
ëÿåò ïîñëå êóðñîðà). Òåêñò, âñòàâëåííûé êîìàíäàìè, îñòàåòñÿ â áóôåðå.
Åãî ìîæíî âñòàâèòü åùå ðàç.
vi õðàíèò â áóôåðå òîëüêî ðåçóëüòàò ïîñëåäíåé îïåðàöèè âûðåçà-
íèÿ èëè êîïèðîâàíèÿ. Ïîñëå âûïîëíåíèÿ ñëåäóþùåé, ñîäåðæèìîå áó-
ôåðà áóäåò çàìåíåíî. Çàòî vi ìîæåò ïðåäëîæèòü èìåíîâàííûå áóôåðà.
Íàïðèìåð êîìàíäà "ayy ïîìåñòèò ñòðîêó â áóôåð a. ×òî áû åå âñòàâèòü
íóæíî èñïîëüçîâàòü "ap. Ëåãêî ïîíÿòü, ÷òî â Âàøåì ðàñïîðÿæåíèè 26
èìåíîâàíûõ áóôåðîâ.
Ñ îòìåíîé îïåðàöèé âñå íàìíîãî ñëîæíåå. Êîìàíäà u îòìåíÿåò
ïîñëåäíþþ îïåðàöèþ, íî íàæàòèå åùå ðàç u îòìåíÿåò òàê æå ïî-
ñëåäíþþ, ò.å. ñàìó îïåðàöèþ îòìåíû. Ìîæíî îòìåíèòü îïðåäåëåííîå
80

Ðèñ. 24: Øïàðãàëêà ïî êîìàíäàì vi

êîëè÷åñòâî îïåðàöèé çà ðàç (íàáðàâ ÷èñëî ïåðåä u ), íî ñ îòìåíîé


îïåðàöèé ïî î÷åðåäè ñïðàâëÿåòñÿ òîëüêî vim.

3.1.5 Êîìàíäû :ex

ex ýòî ñòàðûé òåêñòîâûé ðåäàêòîð.  îòëè÷èå îò vi è åìó ïî-


äîáíûõ, îí íå îòêðûâàåò è íå ïîêàçûâàåò òåêñò, à òîëüêî ïðèíèìàåò
êîìàíäû îáðàáîòêè òåêñòà. Êñòàòè vi áûë ñîçäàí íà îñíîâå ex, è â
vi ñîõðàíèëàñü ïîëíàÿ ïîääåðæêà êîìàíä ex. Êîìàíäû ex íà÷èíàþòñÿ
ñ äâîåòî÷èÿ  : . Íàïðèìåð êîìàíäû ñîõðàíåíèÿ ôàéëà è âûõî-
äà èç vi, íà÷èíàþùèåñÿ ñ äâîåòî÷èÿ, òàê æå ÿâëÿþòñÿ êîìàíäàìè ex.
Íà÷èíàþùèå ïîëüçîâàòåëè ìîãóò îáîéòèñü áåç ex, íî ñî âðåìåíåì âû
íà÷íåòå çàìå÷àòü, ÷òî ìíîãèå äåéñòâèÿ ëåã÷å ñîâåðøèòü, íàïèñàâ âñåãî
îäíó êîìàíäó ex, ÷åì èñïîëüçóÿ êîìàíäû vi. Ñïèñîê âîçìîæíîñòåé ex
îãðîìåí (ìíîãèå èç íèõ Âû ìîæåòå íàéòè â ñïðàâêå man), à ñåé÷àñ
ïðåäëàãàþ ïîâåðõíîñòíî îçíàêîìèòüñÿ ñ òåìè, êîòîðûå ïðèãîäÿòñÿ Âàì
81

â äàííîì êóðñå ëàáîðàòîðíûõ ðàáîò.


Ñèíòàêñèñ ex òàêîâ:
:[àäðåñ] êîìàíäà [îïöèè]
Àäðåñ óêàçûâàåò íà òî, ñ êàêèìè îáúåêòàìè íóæíî ñîâåðøèòü äåé-
ñòâèå.

n îáîçíà÷àåò ñòðîêó íîìåð n


. îáîçíà÷àåò òåêóùóþ ñòðîêó

$ îáîçíà÷àåò ïîñëåäíþþ ñòðîêó

n,m n äî ñòðîêè m
îò ñòðîêè

m -n n ñòðîê ïåðåä ñòðîêîé m


m +n n ñòðîê ïîñëå ñòðîêè m
/øàáëîí / äî ñëåäóþùåé ñòðîêè, â êîòîðîé åñòü ñîâïàäåíèå øàá-
ëîíà

?øàáëîí ? äî ïðåäûäóùåé ñòðîêè, â êîòîðîé åñòü ñîâïàäåíèå øàá-


ëîíà

Êîìàíäû:

- delete èëè d  âûðåçàòü ñòðîêè

- x my  âûðåçàòü ñòðîêó x è âñòàâèòü ïîñëå y


- number èëè nu  ïå÷àòàåò ñòðîêè ñ èõ íîìåðàìè. Íàïðèìåð 10
nu 5 íàïå÷àòàåò 5 ñòðîê íà÷èíàÿ ñ äåñÿòîé ñ èõ ïîðÿäêîâûìè
íîìåðàìè. Î÷åíü ïîëåçíà, â ñëó÷àå, åñëè Âàì íóæíî âûïîëíèòü
äåéñòâèÿ ñ îïðåäåëåííûìè ñòðîêàìè, íî Âû íå çíàåòå èõ íîìåðîâ.

- quit èëè q  âûõîä èç ôàéëà

- r lename  âñòàâëÿåò ñîäåðæèìîå ôàéëà lename â òåêóùèé


òåêñòîâûé ôàéë
82

- r! command  âñòàâëÿåò âûâîä âûïîëíåíèÿ êîìàíäû â òåêóùèé


ôàéë. Íàïðèìåð $ r ! date âñòàâèò òåêóùóþ äàòó ïîñëå êóðñîðà

- sh  ïåðåõîä â êîìàíäíóþ ñòðîêó, áåç âûõîäà èç ôàéëà

- write èëè w  ñîõðàíèòü ôàéë

- x ty x è âñòàâèòü ïîñëå y
 êîïèðîâàòü ñòðîêó

- yank n èëè y n  ãäå n ÷èñëî, êîïèðóåò n ñòðîê â áóôåð

- !  âûïîëíèòü êîìàíäó â êîìàíäíîé ñòðîêå. Ïîñëå íàæàòèÿ Enter

ìîæíî âåðíóòüñÿ ê ðåäàêòèðîâàíèþ ôàéëà.

Ñ ïîìîùüþ ex ìîæíî ðåäàêòèðîâàòü òåêñòîâûå ôàéëû ïðÿìî èç


êîìàíäíîé ñòðîêè, íå îòêðûâàÿ èõ â vi. Íàïðèìåð íàáåðèòå â êîìàíäíîé
ñòðîêå ex -c "2,4 m 6"lename . Âàñ ïðîèíôîðìèðóþò î âûïîëíåíèè
è êîãäà ïîÿâèòñÿ ïðèãëàøåíèå â âèäå äâîåòî÷èÿ, òî íàáåðèòå wq. Âû
ìîæåòå óâèäåòü, ÷òî â ôàéëå lename ñòðîêè ñî 2 ïî 4-þ ïåðåìåñòèëèñü
íà ñòðîêó 6.

3.2 Îñíîâû íàñòðîéêè ñèñòåìû

3.2.1 Êîíôèãóðàöèîííûå ôàéëû

Êàê Âû óæå çíàåòå, âñå íàñòðîéêè ñèñòåìû FreeBSD ïðîèçâîäÿòñÿ


ðåäàêòèðîâàíèåì êîíôèãóðàöèîííûõ ôàéëîâ. Èìåííî èç íèõ ïðîãðàììû
áåðóò íåîáõîäèìûå ïàðàìåòðû äëÿ ñâîåé ðàáîòû. Êàòàëîã /etc ñîäåðæèò
îñíîâíûå íàñòðîéêè ñèñòåìû. Ýòè ôàéëû ìîæåò ðåäàêòèðîâàòü òîëüêî
ñóïåðïîëüçîâàòåëü (root). Ôàéëû èç êàòàëîãà /usr/local/etc ïðåäíàçíà-
÷åíû äëÿ íàñòðîéêè óñòàíîâëåííûõ ïðèëîæåíèé (íàïðèìåð èìåííî òàì
íàõîäèòñÿ ôàéë íàñòðîåê ïðîãðàììû sudo).
Ëþáàÿ ïðèêëàäíàÿ ïðîãðàììà ìîæåò áûòü íàñòðîåíà êàæäûì ïîëü-
çîâàòåëåì ïîä ñåáÿ. Äëÿ ýòîãî ñîçäàåòñÿ ôàéë íàñòðîåê â äîìàøíåì
êàòàëîãå. Îí èìååò ïðèîðèòåò íàä íàñòðîéêàìè â /etc è /usr/local/etc.
Ïðîñìîòðåâ ñâîé äîìàøíèé êàòàëîã ñ ïîìîùüþ êîìàíäû ls -a, âû óâè-
äèòå ôàéëû íàñòðîåê bash (.shrc), ïî÷òîâîé ïðîãðàììû mail (.mailrc,
83

.mail_aliases), íàñòðîéêè âõîäà â ñèñòåìó (.login) è äðóãèå, â çàâèñèìî-


ñòè îò óñòàíîâëåííîãî ÏÎ.  ñèñòåìàõ ñ ãðàôè÷åñêèìè îáîëî÷êàìè è
áîëüøèì êîëè÷åñòâîì óñòàíîâëåííîãî ÏÎ, ôàéëû êîíôèãóðàöèè ãðóï-
ïèðóþòñÿ â ïàïêè èç-çà îãðîìíîãî èõ êîëè÷åñòâà. Ïàïêè â ýòîì ñëó÷àå
òàê æå ÿâëÿþòñÿ ñêðûòûìè, èìÿ êîòîðûõ íà÷èíàåòñÿ ñ òî÷êè.
Ïðîñìîòðåâ ñîäåðæèìîå íåêîòîðûõ ôàéëîâ èç ïàïêè /etc, Âû ìî-
æåòå çàìåòèòü, ÷òî îíè õîðîøî ñòðóêòóðèðîâàíû è èìåþò ñòðîãèé ñèí-
òàêñèñ. ×òî áû ïîíÿòü, ÷òî íóæíî óêàçûâàòü â ôàéëå, åñòü ïÿòûé ðàçäåë
ñïðàâêè man. Íàáåðèòå man fstab (ôàéë íàñòðîåê ôàéëîâûõ ñèñòåì)
èëè man rc.conf (ãëàâíûé êîíôèãóðàöèîííûé ôàéë ñèñòåìû) è âàì
âûâåäåòñÿ ñïðàâêà ïî êîíêðåòíîìó ôàéëó. Â âåðõíåì ëåâîì óãëó Âû
ìîæåòå âèäåòü öèôðó 5, ÷òî îçíà÷àåò, ÷òî ñïðàâêà ïîñâÿùåíà èìåííî
êîíôèãóðàöèîííîìó ôàéëó. Îáûêíîâåííî ôàéëû èìåþò õîðîøèå êîìåí-
òàðèè (ñòðîêè íà÷èíàþùèåñÿ ñ #), à èíîãäà ñíàáæåíû ïðèìåðàìè.
Íàñòðîéêà ñèñòåìû ñ ïîìîùüþ êîíôèãóðàöèîííûõ ôàéëîâ, â îò-
ëè÷èå îò ðååñòðà â Windows, èìååò ñâîè ïðåèìóùåñòâà. Äåöåíòðàëè-
çîâàíîñòü õðàíåíèÿ íàñòðîåê, ïîìîãàåò èçáåæàòü êðàõà âñåé ñèñòåìû
èç-çà îøèáêè â íàñòðîéêàõ, ôàéëîâûé ñïîñîá õðàíåíèÿ ïîçâîëÿåò èìåòü
ìíîãî ðàçíîîáðàçíûõ ïðîôèëåé íàñòðîåê, êîòîðûå ìîæíî ïîìåíÿòü â
ëþáîé ìîìåíò. Î÷åíü ïîëåçåíà âîçìîæíîñòü ïåðåíîñà ôàéëîâ íàñòðîåê
íà íîâóþ ñèñòåìó. Êàæäóþ èç ïðîãðàìì ñòîèò íàñòðîèòü ëèøü ðàç, ïîñëå
÷åãî ïåðåíîñÿ ñ ñîáîé íà íîâûé êîìïüþòåð âñå ñâîè êîíôèãóðàöèîííûå
ôàéëû, ìîæíî èçáåæàòü ïîâòîðíîãî äîëãîãî ïðîöåññà íàñòðîéêè ñèñòå-
ìû.
Ïîìèìî òîãî, ÷òî íà man ñòðàíèöå áîëüøèíñòâà êîìàíä â ðàçäåëå
FILES âñåãäà óêàçàíû òå ôàéëû, îò êîòîðûõ çàâèñèò ðàáîòà ïðîãðàììû,
ôàéëû êîíôèãóðàöèè èìåþò ïîíÿòíîå íàçâàíèå. Íèæå ïðèâåäåí ñïèñîê
íàèáîëåå èçâåñòíûõ è èñïîëüçóåìûõ ôàéëîâ èç ïàïêè /etc:

- crontab  ñïèñîê çàäà÷, êîòîðûå íåîáõîäèìî âûïîëíÿòü ðåãóëÿðíî,


ïî ðàñïèñàíèþ.

- defaults  ïàïêà, â êîòîðîé õðàíÿòñÿ íàñòðîéêè ïî óìîë÷àíèþ. Â


÷àñòíîñòè, åñëè ïîñëå òîãî, êàê Âû ïîêîâûðÿëèñü â ôàéëå rc.conf
84

ñèñòåìà îòêàæåòñÿ çàïóñêàòüñÿ, Âû ìîæåòå ñêîïèðîâàòü èç ýòîé


ïàïêè íåèñïîð÷åííûé ôàéë rc.conf, êîòîðûé ïîçâîëèò åé çàïóñòèòü-
ñÿ.

- dhclient.conf  ôàéë íàñòðîåê dhcp êëèåíòà, ò.å. ïðîãðàììû, êîòî-


ðàÿ îòâå÷àåò çà ïîëó÷åíèå è óñòàíîâêó îñíîâíûõ ñåòåâûõ ïàðàìåò-
ðîâ ñ ñåðâåðà.

- disktab  íàñòðîéêè ðàçëè÷íûõ ñìåííûõ íàêîïèòåëåé èíôîðìàöèè

- fstab  ôàéë äëÿ íàñòðîåê ôàéëîâûõ ñèñòåì è ïðàâèë èõ ïîäêëþ-


÷åíèÿ

- ftpusers  ñïèñîê ïîëüçîâàòåëåé, êîòîðûì çàïðåùåíî ïîäêëþ÷àòü-


ñÿ ê ñåðâåðó ïî ïðîòîêîëó ftp.  ÷àñòíîñòè òàì óæå íàõîäÿòñÿ âñå
ñëóæåáíûå "ïîëüçîâàòåëè".

- gettytab  íàñòðîéêè òåðìèíàëîâ. Ýòîò ôàéë, íàïðèìåð, îòâå÷àåò


çà òî, êàê áóäåò ðàáîòàòü êîìàíäíàÿ ñòðîêà, êîòîðàÿ òàê æå ÿâëÿ-
åòñÿ òåðìèíàëîì.

- group  ôàéë, â êîòîðîì íàõîäèòñÿ ñïèñîê ãðóïï è ïîëüçîâàòåëåé


÷ëåíîâ ãðóïï. Íà âåðõíèõ ñòðî÷êàõ âû ìîæåòå íàéòè ãðóïïó wheel
è ñâîåãî ïîëüçîâàòåëÿ, êîòîðûé âêëþ÷åí â ýòó ãðóïïó.

- hosts  ôàéë, êîòîðûé îáÿçàí íàõîäèòüñÿ â êàæäîé ñèñòåìå (äà-


æå windows). Â ýòîì ôàéëå óêàçûâàåòñÿ ñîîòâåòñòâèå ìåæäó IP-
àäðåñîì è èìåíåì ðåñóðñà. Äî ïîÿâëåíèÿ DNS ñåðâåðîâ ýòî áûë
åäèíñòâåííûé ñïîñîá îáðàùàòüñÿ ê êîìïüþòåðàì ïî èìåíàì. Ñåé-
÷àñ òàì íàõîäèòñÿ òîëüêî îäíà çàïèñü, êîòîðàÿ îáîçíà÷àåò, ÷òî âñå
îáðàùåíèÿ ê localhost áóäóò ïåðåíàïðàâëåíû îáðàòíî íà èíòåðôåéñ
ñåòåâîé êàðòî÷êè Âàøåãî êîìïüþòåðà. Íèêòî íå çàïðåùàåò Âàì ñ
ïîìîùüþ ðåäàêòèðîâàíèÿ ýòîãî ôàéëà èçìåíèòü èìÿ, ïî êîòîðîìó
Âû áóäåòå îáðàùàòüñÿ, äëÿ ëþáîãî ñåòåâîãî ðåñóðñà.

- hosts.allow  ïðîñòîé è ãðóáûé, íî èç-çà ýòîãî ìîùíûé ìåæñå-


òåâîé ýêðàí (áðàíäìàóýð, rewall). Â ýòîì ôàéëå âû çàïðåùàåòå
85

èëè ðàçðåøàåòå îïðåäåëåííûå ñåòåâûå ïîäêëþ÷åíèÿ. Äëÿ áîëåå


òîíêîé íàñòðîéêè ìîæíî ñîçäàòü ôàéë hosts.deny. Åñëè æå Âàì
íóæåí óäîáíûé è ãèáêèé rewall, òî îáðàùàéòåñü ê ïðîãðàììå ipfw,
êîòîðàÿ âêëþ÷åíà â ñòàíäàðòíóþ ïîñòàâêó FreeBSD.

- hosts.equiv  ñïèñîê äîâåðåííûõ äîìåíîâ. Âñå óäàëåííûå (remout


ïîäêëþ÷åíèÿ; ê òàêèì îòíîñÿòñÿ ïîäêëþ÷åíèÿ rlogin, rsh, rcp è
ïðî÷èå èìåíóåìûå r-êîìàíäàìè ) ïîäêëþ÷åíèÿ ñ ýòèõ àäðåñîâ, ïðè
ñîâïàäåíèè èìåí ïîëüçîâàòåëÿ, íå ïðîõîäÿò ïðîâåðêó àóòåíòèôè-
êàöèè (íå èäåò çàïðîñ ïàðîëÿ).

- hosts.lpd  íàñòðîéêà òåõ õîñòîâ, êîòîðûì ðàçðåøåí äîñòóï ê î÷å-


ðåäè ïå÷àòè.  îñíîâíîì èñïîëüçóåòñÿ äëÿ äîñòóïà ê ïðèíòåðó,
íî ñàìà î÷åðåäü ïå÷àòè ìîæåò èìåòü ìíîæåñòâî ðàçíîîáðàçíûõ
ïðèìåíåíèé (íàïðèìåð î÷åðåäü çàêà÷êè ôàéëîâ èëè ìóçûêàëüíûé
àâòîìàò)

- inetd.conf  ýòîò ôàéë îòâå÷àåò çà äîñòóïíîñòü ñåòåâûõ ðåñóðñîâ.


 ÷àñòíîñòè äëÿ ðàçðåøåíèÿ ftp èëè ssh äîñòóïà, íåîáõîäèìî ðàç-
ðåøèòü èõ â ýòîì ôàéëå.

- login.access  íàñòðîéêà ïðàâ äîñòóïà ê êîíñîëè äëÿ ïîëüçîâàòåëåé

- login.conf  ðàçëè÷íûå íàñòðîéêè äëÿ ïîëüçîâàòåëåé, êîòîðûå ðà-


áîòàþò â êîíñîëè

- master.passwd  òî æå ñàìîå, ÷òî è ôàéë passwd, òîëüêî â ýòîì åùå


è õðàíÿòñÿ ïàðîëè â çàøèôðîâàíîì âèäå. Ýòîò ôàéë äàæå çàïðå-
ùåí äëÿ ÷òåíèÿ âñåì, êðîìå ñóïåðïîëüçîâàòåëÿ, ò.ê. çíàÿ çàøèôðî-
âàííûé ïàðîëü, ìîæíî ïîäîáðàòü åãî ìåòîäîì ïåðåáîðà (bruteforce),
åñëè ïàðîëü ëåãêèé.

- motd  ôàéë, êîòîðûé Âû âèäèòå êàæäûé ðàç ïðè âõîäå â ñèñòåìó.


Ýòî îáû÷íûé òåêñòîâûé ôàéë, êîòîðûé Âû ìîæåòå èçìåíèòü, êàê
Âàì óãîäíî.

- namedb  ïàïêà ñ íàñòðîéêàìè DNS ñåðâåðà


86

- net- ôàéëû  ðàçëè÷íûå ôàéëû äëÿ íàñòðîéêè ñåòè


- newsyslog.conf  íàñòðîéêè ïðàâèë âåäåíèÿ æóðíàëîâ (ëîãîâ)

- ntp.conf  íàñòðîéêà ñåðâåðîâ ñèíõðîíèçàöèè âðåìåíè

- passwd  ôàéë ñ èíôîðìàöèåé îáî âñåõ ïîëüçîâàòåëÿõ, êîòîðûå


ñóùåñòâóþò â ñèñòåìå

- periodic  êàòàëîã ñ ðàçëè÷íûìè ñöåíàðèÿìè, êîòîðûå âûïîëíÿ-


þòñÿ ïðîãðàììîé cron â îïðåäåëåííûå ïåðèîäû. Âû ìîæåòå êàê
äîáàâëÿòü ñâîè ñöåíàðèè, òàê è äîáàâëÿòü ñâîè ïåðèîäû äëÿ âû-
ïîëíåíèÿ.

- phones  äàííûå î òåëåôîííûõ íîìåðàõ äëÿ dial-up ñîåäèíåíèé

- ppp  ïàïêà ñ ôàéëàìè äëÿ íàñòðîåê ñîåäèíåíèé ïî Point-to-Point


Protocol

- rc  ñåìåéñòâî êîíôèãóðàöèîííûõ ôàéëîâ, êîòîðûå çàíèìàþòñÿ


îñíîâíîé íàñòðîéêîé ñèñòåìû.  ÷àñòíîñòè íàñòðîéêàìè çàïóñêà,
âûêëþ÷åíèÿ, ðàçðåøåíèÿ îïðåäåëåííûõ ñëóæá, çàïóñêîì äåìîíîâ,
áðàíäìàóýðà è ïðî÷åãî.

- termcap è ttys  ðàçëè÷íûå íàñòðîéêè òåðìèíàëîâ

Ìíîãèå èç íèõ ìû áóäåì ðåäàêòèðîâàòü íà ñëåäóþùèõ ðàáîòàõ,


òàê ÷òî ìîæåòå íà÷èíàòü ðàçáèðàòüñÿ ñ ñèíòàêñèñîì ýòèõ ôàéëîâ. Âàì
ïîìîãóò ñïðàâêà man è ñàéò Google, ñ ïîìîùüþ êîòîðîãî ëåãêî íàéòè
ìíîæåñòâî ãîòîâûõ êîíôèãóðàöèé ñèñòåìû äëÿ âñåâîçìîæíûõ ñëó÷àåâ.
Ãëàâíîå íå çàáûâàòü äåëàòü ðåçåðâíûå êîïèè ôàéëîâ íàñòðîåê, íà ñëó÷àé
êîãäà Âû ÷òî-ëèáî èñïîðòèòå.

3.2.2 Íàñòðîéêà bash

Çàãðóçêà ñèñòåìû âñåãäà çàêàí÷èâàåòñÿ çàïóñêîì ïðîãðàììû login,


êîòîðàÿ ñïðàøèâàåò ó Âàñ èìÿ ïîëüçîâàòåëÿ è ïàðîëü. Ïîñëå àóòåíòèôè-
êàöèè îíà ÷èòàåò èç ôàéëà /etc/passwd èìÿ êîìàíäíîãî èíòåðïðåòàòî-
87

ðà è ïåðåäàåò óïðàâëåíèå åìó.  íàøåì ñëó÷àå òàêîâûì ÿâëÿåòñÿ bash.


Ïåðâîå, ÷òî äåëàåò bash, ýòî ÷èòàåò ãëîáàëüíûé ôàéë /etc/prole è
âûïîëíÿåò âñå èíñòðóêöèè â ýòîì ôàéëå. Ïî óìîë÷àíèþ îí ïóñòîé (âåð-
íåå âñå ñòðîêè çàêîìåíòèðîâàíû), íî ñèñòåìûé àäìèíèñòðàòîð ìîæåò
âíåñòè ëþáûå æåëàåìûå èíñòðóêöèè è íàñòðîéêè. Ïîñëå ýòîãî ÷èòàåò-
ñÿ ëîêàëüíûé ôàéë /usr/home/username/.prole, â êîòîðîì êàæäûé
ïîëüçîâàòåëü ìîæåò îïðåäåëèòü ñâîè íàñòðîéêè.
Äîìàøíèé ôàéë prole óæå ïî óìîë÷àíèþ âûïîëíÿåò îïðåäåëåí-
íûå íàñòðîéêè.  ÷àñòíîñòè óñòàíàâëèâàþòñÿ çíà÷åíèÿ ïåðåìåííûõ. Íà-
ïðèìåð ïåðåìåííàÿ PATH, óêàçûâàåò, ãäå íóæíî èñêàòü ïðîãðàììû. Â
ýòîé ñòðîêå äîïîëíèòåëüíî óêàçûâàåòñÿ êàòàëîã $HOME/bin, ÷òî îçíà-
÷àåò, ÷òî ëþáàÿ ïðîãðàììà ðàçìåùåííàÿ â ýòîì êàòàëîãå, ìîæåò áûòü
âûçâàíà áåç óêàçàíèÿ ïîëíîãî ïóòè. Ïåðåìåííàÿ EDITOR óñòàíàâëè-
âàåò çíà÷åíèå ðåäàêòîðà ïî óìîë÷àíèþ. Îáû÷íî ðàçëè÷íûå ïðîãðàììû
áåðóò çíà÷åíèÿ ïåðåìåííûõ ïîëüçîâàòåëÿ äëÿ ñâîåé ðàáîòû. Èçìåíÿÿ èõ,
Âû ñîçäàäèòå äëÿ ñåáÿ óäîáíóþ äëÿ ðàáîòû ñðåäó. Ñïèñîê ïåðåìåííûõ
Âû ìîæåòå íàéòè â man bash, â ðàçäåëå Shell Variables. Ðàçóìååòñÿ Âû
ìîæåòå ñîçäàâàòü ñâîè ïåðåìåííûå, à ïðè ïðîãðàììèðîâàíèè íà ÿçûêå
êîìàíäíîãî èíòåðïðåòàòîðà, Âàì ïðèäåòñÿ èõ ñîçäàâàòü. Ñïèñîê óñòà-
íîâëåííûõ ïåðåìåííûõ âûâîäèòñÿ êîìàíäîé printenv.
Ïîìèìî ïåðåìåííûõ, â ôàéë .prole ìîæíî âïèñàòü ëþáûå êîìàí-
äû. Äîïèñàâ â ýòîò ôàéë ñòðîêó ñî ñëîâîì date, ïðè êàæäîì âõîäå áóäåò
âûâîäèòüñÿ òåêóùàÿ äàòà, à äîïèñàâ mail, ïðè êàæäîì çàïóñêå áóäåò
çàïóñêàòüñÿ ïðîãðàììà äëÿ îáðàáîòêè ïî÷òû, åñëè åñòü íåïðî÷èòàííûå
ñîîáùåíèÿ. Òàê æå ìîæíî âïèñàòü â ýòîò ôàéë âñå alias'û, êîòîðûå
ïîçâîëÿò áûñòðåå ââîäèòü êîìàíäû. Íàïðèìåð, ìîæíî ïðåäîïðåäåëÿòü
îáÿçàòåëüíûå îïöèè äëÿ êîìàíä. Ââåäèòå ñòðîêó alias ls='ls -G' è ïðè
ëþáîì çàïóñêå êîìàíäû ls âûâîä áóäåò ðàñêðàøèâàòüñÿ â öâåòà. Åñëè
Âû ââåäåòå alias rm='rm -i', òî ïðè óäàëåíèè ó Âàñ áóäóò òðåáîâàòü
ïîäòâåðæäåíèÿ.
Îäíîé èç èíòåðåñíûõ îïöèé bash, ÿâëÿåòñÿ âîçìîæíîñòü èçìå-
íåíèÿ ïðèãëàøåíèÿ êîìàíäíîé ñòðîêè. Íåêîòîðûì ïî äóøå ñòàíäàðò-
íîå ïðèãëàøåíèå sh â âèäå çíàêà $, íî èíîãäà íóæíî äîïîëíèòü åãî
88

ðàçëè÷íîé èíôîðìàöèåé. Ïî óìîë÷àíèþ bash äîïîëíÿåò ïðèãëàøåíèå


èìåíåì ïîëüçîâàòåëÿ (îïöèÿ \u), çíàêîì @ è òåêóùèì êàòàëîãîì (îïöèÿ
\w). Ïîìèìî ñòàíäàðòíûõ îïöèé, ìîæíî òàê æå èñïîëüçîâàòü êîìàíäû.
Íàïðèìåð âìåñòî \u, ìîæíî ïîñòàâèòü `whoami`, à âìåñòî \w  `pwd`.
Ïðè ðàáîòå íà ðàçëè÷íûõ ñåðâåðàõ èíîãäà íóæíî ïîñòîÿííî âèäåòü, çà
êàêèì ñåðâåðîì èäåò ðàáîòà.  òàêèõ ñëó÷àÿõ ïîìîæåò îïöèÿ \h (èëè
æå êîìàíäà `hostname`). Äëÿ âûâîäà âðåìåíè èñïîëüçóåòñÿ \t èëè date
+"%H:%M:%S" .
Ïðèãëàøåíèå êîìàíäíîé ñòðîêè ñîäåðæèòñÿ â ïåðåìåííîé PS1.
×òî áû óñòàíîâèòü æåëàåìîå ïðèãëàøåíèå, ñîîòâåòñòâåííî íóæíî ñîõðà-
íèòü åãî â ýòîé ïåðåìåííîé. Ââåäèòå â ôàéë .prole ñëåäóþùóþ ñòðîêó:
PS1="\[ \e[0;32m\]\u @\h \[ \e[1;34m \]\t \n \[\e[1;37m\]\w
\$ \[\e[0;37m\]"
Ýòî èçìåíèò ïðèãëàøåíèå êîìàíäíîé ñòðîêè, ñîãëàñíî ââåäåííûì
äàííûì. Òóò âñòðå÷àåòñÿ íîâàÿ ïîñëåäîâàòåëüíîñòü âèäà \[ \e[x ;y m\],
êîòîðàÿ îòâå÷àåò çà èçìåíåíèå öâåòîâ âûâîäà, ãäå x  ñâîéñòâà öâåòà, à
y  öâåò. Ïîñëåäîâàòåëüíîñòü \$ óêàçûâàåò íà òî, ïðè ðàáîòå îò èìåíè
îáû÷íîãî ïîëüçîâàòåëÿ áóäåò âûâîäèòüñÿ çíàê $, à ïðè ðàáîòå îò èìåíè
ñóïåðïîëüçîâàòåëÿ root  #.
Äàëåêî íå âñå ôàéëû íàñòðîåê ïðèñóòñòâóþò â ñèñòåìå. Ïðè âû-
õîäå èç ñèñòåìû bash ÷èòàåò ôàéë .bash_logout, êîòîðûé òàê êàê è
.prole âûïîëíÿåò ðàçëè÷íûå êîìàíäû. Ñîçäàéòå ôàéë .bash_logout
è ïîìåñòèòå â íåãî ñòðîêó clear. Òåïåðü ïðè êàæäîì âûõîäå èç ñèñòåìû
ýêðàí áóäåò î÷èùàòüñÿ è íèêòî íå óâèäèò ÷åì Âû çàíèìàëèñü. Êñòàòè,
ôàéë .prole âûïîëíÿåòñÿ âñåìè èíòåðïðåòàòîðàìè ïðè âõîäå â ñèñòåìó.
Åñëè Âû õîòèòå, ÷òî áû ïðè ðàáîòå â bash ñóùåñòâîâàëè ñâîè, îòëè÷íûå
îò äðóãèõ èíòåðïðåòàòîðîâ ïàðàìåòðû, òî ñîçäàéòå ôàéë .bash_login
è ïåðåìåñòèòå òóäà âñå òå ñòðîêè èç .prole, êîòîðûå îòíîñòñÿ òîëüêî ê
bash (íàïðèìåð ïðèãëàøåíèå êîìàíäíîé ñòðîêè).
89

3.3 Îáðàáîòêà òåêñòà

3.3.1 Óòèëèòû ôîðìàòèðîâàíèÿ òåêñòà

Îäíîé èç ïåðâîíà÷àëüíûõ öåëåé, êîòîðûå êîìïàíèÿ AT&T ñòàâèëà,


ðàçðàáàòûâàÿ UNIX, áûëà îáðàáîòêà òåêñòîâûõ äàííûõ. FreeBSD âêëþ-
÷àåò ìíîæåñòâî êîìàíä îáðàáîòêè òåêñòà.
cmp
Ýòà êîìàíäà ñðàâíèâàåò äâà ëþáûõ ôàéëà. Èñïîëüçóÿ ðàçëè÷íûå
îïöèè, ìîæíî óâèäåòü íîìåðà îòëè÷àþùèõñÿ áàéò è èõ çíà÷åíèÿ êàê â
äåñÿòè÷íîì (èñïîëüçóåòñÿ äëÿ òåêñòîâûõ äàííûõ), òàê è øåñòíàäöàòè-
ðè÷íîì (èñïîëüçóåòñÿ äëÿ áèíàðíûõ ôàéëîâ) âèäå.
comm
Ñðàâíèâàÿ äâà ôàéëà îíà âûâîäèò òðè ñòîëáöà, â êîòîðûõ âûâî-
äÿòñÿ: óíèêàëüíûå ñòðîêè ïåðâîãî ôàéëà, îáùèå ñòðîêè äâóõ ôàéëîâ,
óíèêàëüíûå ñòðîêè âòîðîãî ôàéëà. Îïöèÿìè ìîæíî óêàçàòü æåëàåìûé
âûâîä.
di, di3, sdi
Î÷åíü ìîùíàÿ óòèëèòà äëÿ ìàíèïóëÿöèè ñ äâóìÿ îòëè÷àþùèìèñÿ
ôàéëàìè. Áåç îïöèé âûâîäèò ñïèñîê ñòðîê, êîòîðûå îòëè÷àþòñÿ ìåæäó
ñîáîé. Âîò íåêîòîðûå îïöèè:

-w  ïðè ñðàâíåíèè èãíîðèðîâàòü ïóñòûå (whitespace  ïðîáåëû,


çíàêè òàáóëÿöèè) ñèìâîëû

-i  èãíîðèðîâàòü ðåãèñòð áóêâ

-y  âûâîäèò îáà ôàéëà â äâà ñòîëáöà, çíàêàìè <, | è > ïîêàçûâàåò


ðàçëè÷íûå ñòðîêè

Ýòà ïðîãðàììà î÷åíü ïîëåçíà, åñëè Âàì íóæíî êîíòðîëèðîâàòü èç-


ìåíåíèÿ ôàéëà. Òàê æå èñïîëüçóåòñÿ äëÿ ñîçäàíèÿ èñïðàâëåíèé (ïàò÷åé)
â ïðîãðàììíûé êîä. Ñ ïîìîùüþ îïöèé -e, -f è -n ïîçâîëÿåò ñîçäàâàòü
ñöåíàðèè äëÿ ïîòîêîâûõ ðåäàêòîðîâ, äëÿ àâòîìàòè÷åñêîé ïðàâêè òåêñòà.
di èìååò âîçìîæíîñòü ñðàâíèâàòü ôàéëû ïî êàòàëîãàì. Òàê æå ñ ïîìî-
90

ùüþ di ìîæíî ñäåëàòü ïðîñòåéøèé ñèíõðîíèçàòîð ôàéëîâ. Íàïðèìåð


ñòðîêà
di <(ls -1 folder1) <(ls -1 folder2)
âûâåäåò âàì ñïèñîê òåõ ôàéëîâ, êîòîðûå îòñóòñòâóþò â îäíîé èëè
äðóãîé ïàïêå. Âûâîäÿ ñ ïîìîùüþ ls -l è îáðåçàÿ ëèøíèå ñòîëáöû, ìîæíî
óñòðîèòü ñèíõðîíèçàöèþ ôàéëîâ ïî âðåìåíè èçìåíåíèÿ. Ó êîìàíäû di
ìíîãî ðàçëè÷íûõ ïðèìåíåíèé.
di3 îòëè÷àåòñÿ îò di òåì, ÷òî îïåðèðóåò íå ñ äâóìÿ, à ñ òðåìÿ
ôàéëàìè
merge
Âêëþ÷àåò âñå èçìåíåíèÿ ìåæäó äâóìÿ ôàéëàìè â òðåòèé.
cat, join, paste
Óæå èçâåñòíàÿ Âàì óòèëèòà cat, òàê æå óìååò ñîåäèíÿòü íåñêîëüêî
ôàéëîâ â îäèí ïî ñòðîêàì. Íàáåðèòå
cat le1 le2 le3 > le4
è â ÷åòâåðòîì ôàéëå áóäåò âñÿ èíôîðìàöèÿ èç òðåõ ïðåäûäóùèõ.
join óìååò ñîåäèíÿòü ïî ñòîëáöàì ïðè óñëîâèè íàëè÷èÿ îäèíàêîâûõ
çíà÷åíèé. Íàïðèìåð ó Âàñ åñòü ôàéë ñ òåëåôîíàìè, ãäå äàííûå çàïèñàíû
â ôîðìàòå èìÿ:òåëåôîí è ôàéë ñ àäðåñàìè, ãäå çàïèñàíû èìÿ:àäðåñ. Ïðè
ââåäåíèè
join -t: phones.txt adreses.txt
êîìàíäà â êà÷åñòâå ðàçäåëèòåëÿ ïðèíèìàåò äâîåòî÷èå, à â êà÷åñòâå
ïîëÿ äëÿ ñðàâíåíèÿ  ïåðâîå, ïîñêîëüêó íå óêàçàíî èíîå. Ïðè ñîâïàäå-
íèè èìåíè èç ïåðâîãî ôàéëà ñ èìåíåì èç âòîðîãî, îñòàëüíûå ïîëÿ áóäóò
äîïèñàíû è âûâåäåíû íà ñòàíäàðòíûé âûâîä (ìîíèòîð).
paste ïðåäíàçíà÷åíà äëÿ ñêëåéêè âñåõ ñòðîê â îäíó, ðàçäåëÿÿ çíà-
÷åíèÿ îïðåäåëåííûì çíàêîì.
uniq
Ïðåäíàçíà÷åíà äëÿ îïåðàöèé ñ îäèíàêîâûìè ñòðîêàìè. Ïî óìîë-
÷àíèþ âûâîäèò âñå ñòðîêè, óáèðàÿ èõ ïîâòîðåíèÿ. Íî èíîãäà åå ìîæíî
èñïîëüçîâàòü äëÿ äðóãèõ öåëåé: ïîäñ÷åò ÷àñòîòû âñòðå÷àåìîñòè ñòðîê,
âûâîä óíèêàëüíûõ ñðîê, ñðàâíåíèå òîëüêî íåñêîëüêèõ ïåðâûõ îïðåäå-
ëåííûõ ñèìâîëîâ ñòðîêè è äðóãîå. Íàïðèìåð
91

sort .bash_history | unic -c | sort | tail


âûâåäåò 10 ñàìûõ íàèáîëåå ââîäèìûõ Âàìè êîìàíä â êîìàíäíóþ
ñòðîêó
colrm
Ýòà óòèëèòà âûðåçàåò îïðåäåëåííûå ñòðîêè èç ôàéëà. Åé íóæíî
óêàçàòü íà÷àëüíûé è êîíå÷íûé ñòîëáåö, êîòîðûå íóæíî âûðåçàòü.
ls -lh | colrm 2 27
óáåðåò âñþ èíôîðìàöèþ î ïðàâàõ ïîëüçîâàòåëÿ íà ôàéë, îñòàâèâ
òîëüêî òèï, ðàçìåð, äàòó ìîäèôèêàöèè è èìÿ.
cut
Çàïèñûâàåò íà âûâîä îïðåäåëåííûå ÷àñòè ñòðîê.
cut -d: -f1,7 /etc/passwd | grep -v nologin
âûâåäåò âñå ñòðîêè èç ôàéëà ïîëüçîâàòåëåé â ôîðìàòå èìÿ:îáîëî÷êà,
èñêëþ÷èâ âñå çàïèñè ñëóæåáíûõ ( nologin ) ïîëüçîâàòåëåé
fmt, fold
fmt âûïîëíÿåò ðàçëè÷íîå ôîðìàòèðîâàíèå ôàéëîâ. Íàïðèìåð óìå-
åò ðàçáèâàòü äëèííûå ñòðîêè íà ñòðîêè îïðåäåëåííîé äëèíû, ïåðåíîñÿ
èõ ïî ñëîâàì, âûäåëÿòü íà÷àëî àáçàöà îòñòóïîì ("êðàñíàÿ ñòðîêà"), âû-
äåëÿòü êîìåíòàðèè èç ïðîãðàìì è ñêðèïòîâ, óâåëè÷èâàòü ðàçðûâ ìåæäó
ïðåäëîæåíèÿìè (äâà ïðîáåëà âìåñòî îäíîãî), äîáàâëÿòü ïðîáåëû äëÿ
âûðàâíèâàíèÿ òåêñòà ïî øèðèíå è äðóãèå ïîäîáíûå ñïîñîáû ìàíèïó-
ëèðîâàíèÿ àáçàöàìè.
fold ïðåäíàçíà÷åíà äëÿ èçìåíåíèÿ øèðèíû ñòðîê.
pr
Î÷åíü ìîùíàÿ óòèëèòà, ïðåäíàçíà÷åííàÿ äëÿ ïîäãîòîâêè òåêñòà ê
ïå÷àòè. Èìååò ìíîæåñòâî îïöèé, êîòîðûå ïîçâîëÿþò ðàçáèâàòü òåêñò íà
ñòðàíèöû è ðàçäåëû (ãëàâû), íóìåðîâàòü ñòðàíèöû, äîáàâëÿòü êîëîíòè-
òóëû, óñòàíàâëèâàòü îòñòóïû, è ìíîãîå äðóãîå. Ïîçâîëÿåò èñïîëüçîâàòü
ÿçûêè ðàçìåòêè äëÿ ôîðìàòèðîâàíèÿ, êàê ñóùåñòâóþùèå (LaTeX, html),
òàê è ïðèäóìàííûå ïîëüçîâàòåëåì.
split, csplit
Ïðåäíàçíà÷åíà äëÿ ðàçáèåíèÿ ôàéëà íà ÷àñòè ôèêñèðîâàíîãî ðàç-
ìåðà
92

split -b 20m bigle


ðàçáèâàåò ôàéë íà ÷àñòè ïî 20 ìåãàáàéò.
rev
Âûâîäèò ôàéë, ïå÷àòàÿ êàæäóþ ñòðîêó â îáðàòíîì ïîðÿäêå.
nl
Ïðåäíàçíà÷åíà äëÿ íóìåðàöèè ñòðîê
tr
Ïðåäíàçíà÷åíà äëÿ çàìåíû ñèìâîëîâ è ñëîâ â ôàéëå. Ïîçâîëÿåò
ìíîãî èíòåðåñíûõ âîçìîæíîñòåé. Íàïðèìåð çàìåíà ïðîáåëîâ ñèìâîëàìè
íîâîé ñòðîêè ðàçáèâàåò òåêñò íà ñïèñîê ñëîâ.
sort
sort ñîðòèðóåò ñòðîêè ïî ASCII êîäó è íå èãíîðèðóåò âåäóùèå
ïóñòûå ñèìâîëû. Îñíîâíûå èñïîëüçóåìûå îïöèè:

-d ïðè ñîðòèðîâêå ó÷èòûâàþòñÿ òîëüêî áóêâû, öèôðû è òèðå

-b èãíîðèðóþòñÿ âåäóùèå ïóñòûå ñèìâîëû

-f îòêëþ÷àåò ðåãèñòð áóêâ

-n ñîðòèðîâêà â ñîîòâåòñòâèè ñ ÷èñëîâûì çíà÷åíèåì ïîëÿ

-t èçìåíÿåò ñèìâîë-ðàçäåëèòåëü ïîëåé (ïî óìîë÷àíèþ èñïîëüçóåò-


ñÿ ïóñòîé ñèìâîë)

-u îòáðàñûâàåò îäèíàêîâûå ñòðîêè

-r ñîðòèðóåò â îáðàòíîì ïîðÿäêå

Åñëè â êîìàíäíîé ñòðîêå íàõîäèòñÿ íåñêîëüêî ôàéëîâ, òî sort


êîíêàòåíèðóåò èõ.
patch
Ýòà êîìàíäà íàêëàäûâàåò èçìåíåíèÿ, êîòîðûå ãåíåðèðóåò êîìàíäà
di íà îïðåäåëåííûé ôàéë.  îñíîâíîì ïðåäíàçíà÷åíà äëÿ âíåñåíèÿ èç-
ìåíåíèé â èñõîäíûé êîä ïðîãðàìì, íî ìîæåò ïðèìåíÿòüñÿ è äëÿ äðóãèõ
öåëåé, ñâÿçàííûõ ñ èçìåíåíèåì ôàéëîâ.
93

3.3.2 Ïîòîêîâûå ðåäàêòîðû

Îòëè÷èå sed îò vi è àíàëîãè÷íûõ ðåäàêòîðîâ â òîì, ÷òî sed ñïå-


öèàëüíî ðàçðàáîòàí äëÿ ÷òåíèÿ êîìàíä â ïàêåòíîì ðåæèìå, ÷òî ïðåäïî-
ëàãàåò èõ ââîä ñ êîìàíäíîé ñòðîêè èëè ñöåíàðèÿ, à íå èíòåðàêòèâíûé
ââîä ñ êëàâèàòóðû. sed ÷àñòî ïðèìåíÿåòñÿ â ñöåíàðèÿõ îáîëî÷êè èëè êàê
÷àñòü êîíâåéåðà äëÿ ôèëüòðàöèè âûâîäà. Ñèíòàêñèñ êîìàíäû òàêîé:
sed [-e 'êîìàíäû '] [-f ôàéë_êîìàíä ] [ðåäàêòèðóåìûé_ôàéë ]
Íàïðèìåð, ÷òî áû óäàëèòü âòîðóþ ñòðîêó â ôàéëå textle, íàáåðèòå
êîìàíäó
sed -e '2d' textle
×òî áû âñòàâèòü ïîñëå ïÿòîé ñòðîêè ôðàçó hello:
sed -e '5a\
hello
' textle
Êîìàíäû äëÿ sed ìîæíî çàïèñàòü â ôàéë (èëè ãåíåðèðîâàòü ñöå-
íàðèåì). Äëÿ ÷òåíèÿ êîìàíä èç ôàéëà íóæíî âìåñòî -e óêàçàòü -f. Ïðè
èñïîëüçîâàíèè sed èç êîìàíäíîé ñòðîêè, ìîæíî îïóñòèòü îïöèþ -e.
sed '2,4d' textle
óäàëèò âòîðóþ, òðåòüþ è ÷åòâåðòóþ ñòðîêè.
Àäðåñà ñòðîê óêàçûâàþòñÿ ÷åðåç çàïÿòóþ. Åñëè ñòðîêà íå óêàçàíà,
òî ïîäðàçóìåâàþòñÿ âñå ñòðîêè. \ (backslash) îçíà÷àåò, ÷òî äàëåå áóäåò
ââîä è ïðè íàæàòèè Enter íå âûïîëíÿåò êîìàíäó, à æäåò äàëüíåéøèõ
óêàçàíèé. Êîìàíäû áûâàþò ñëåäóþùèìè:

d  óäàëèòü ñòðîêó

a  âñòàâèòü ïîñëå ñòðîêè

i  âñòàâèòü ïåðåä ñòðîêîé

p  ÷èòàåò ñòðîêè

c  çàìåíÿåò ñòðîêè

y/øàáëîí1/øàáëîí2  çàìåíÿåò ñîâïàäåíèÿ øàáëîíà1 íà øàá-


ëîí2
94

!  îáðàùàåò âûáðàíûå ñòðîêè (âûðàæåíèå 10,20!d  óäàëèò âñå


ñòðîêè, êðîìå ñ 10-îé ïî 20-þ)

=  âûäàåò íîìåðà ñòðîê

sed òàê æå ïîíèìàåò ðåãóëÿðíûå âûðàæåíèÿ:

  îçíà÷àåò íà÷àëî ñòðîêè

$  îçíà÷àåò êîíåö ñòðîêè

.  ñîîòâåòñòâóåò îäíîìó ñèìâîëó

*  ñîîòâåòñòâóåò íóëþ èëè áîëåå ïîâòîðåíèé ïðåäûäóùåãî ñèì-


âîëà

[]  ñîîòâåòñòâóåò ëþáîìó èç ñèìâîëîâ, çàêëþ÷åííûõ â êâàäðàòíûå


ñêîáêè

3.3.3 ßçûêè îáðàáîòêè âõîäíîãî ïîòîêà

awk  ñàìûé ïîïóëÿðíûé ÿçûê äëÿ îáðàáîòêè ñòðîê è âûâîäà èõ


â íóæíîì ôîðìàòå. Íåñìîòðÿ íà êàæóùóþñÿ ñëîæíîñòü, îí íåçàìåíèì,
íàïðèìåð, ïðè îáðàáîòêå æóðíàëüíûõ ôàéëîâ (log-ôàéëîâ). Âìåñòî òîãî.
÷òî áû ïèñàòü äëèííóþ ïðîãðàììó íà êàêîì ëèáî ÿçûêå ïðîãðàììèðî-
âàíèÿ, äîñòàòî÷íî èñïîëüçîâàòü îäíó ñòðîêó êîìàíäû awk.
Ëþáàÿ êîìàíäà awk èìååò ñëåäóþùèé âèä:
awk '/øàáëîí / {äåéñòâèå }' textle
Øàáëîíû ïîõîæè íà òå, ÷òî Âû óæå âèäåëè â ïðåäûäóùèõ ïðî-
ãðàììàõ:

/ a/  ïîëå íà÷èíàåòñÿ ñ "a"

/a$/  ïîëå êîí÷àåòñÿ "a"

\+  ýêðàíèðóåò îïåðàòîð

[abc]  ëþáîé èç ñèìâîëîâ "a "b"è "c"


95

[a-ð]  ëþáîé ñèìâîë äèàïàçîíà

*  0 èëè áîëüøå âõîæäåíèé ðåãóëÿðíîãî âûðàæåíèÿ

+  1 èëè áîëüøå âõîæäåíèé ðåãóëÿðíîãî âûðàæåíèÿ

?  0 èëè 1 âõîæäåíèå ðåãóëÿðíîãî âûðàæåíèÿ

ab|cd  "ab"èëè "cd"

Îñíîâíîå äåéñòâèå, êîòîðîå èñïîëüçóåòñÿ, ýòî print. Âîò ïðèìåð


èñïîëüçîâàíèÿ:
awk '/nologin/ {print}' /etc/passwd
âûâåäåò âñåõ ïñåâäîïîëüçîâàòåëåé.
awk óìååò èñïîëüçîâàòü ïåðåìåííûå. Âû ìîæåòå îïðåäåëèòü ëþ-
áûå ïåðåìåííûå, êîòîðûå íóæíû äëÿ âûïîëíåíèÿ çàäàíèÿ, íî åñòü íåêî-
òîðûå óæå ïðåäîïðåäåëåííûå:

NR  ñîäåðæèò íîìåð òåêóùåé ñòðîêè

NF  ÷èñëî ïîëåé â òåêóùåé ñòðîêå

RS  ðàçäåëèòåëü ñòðîê íà ââîäå (ïî óìîë÷àíèþ "\0")

FS  ðàçäåëèòåëü ïîëåé íà ââîäå (ïî óìîë÷àíèþ ïðîáåëüíûé ñèì-


âîë  ïðîáåë èëè òàáóëÿöèÿ)

ORS  ðàçäåëèòåëü ñòðîê íà âûâîäå (ïî óìîë÷àíèþ ðàâåí ïåðå-


ìåííîé RS)

OFS  ðàçäåëèòåëü ïîëåé íà âûâîäå (ïî óìîë÷àíèþ ðàâåí FS)

OFMT  ôîðìàò âûâîäà ÷èñåë (ïî óìîë÷àíèþ "%.6g")

FILENAME  èìÿ âõîäíîãî ôàéëà

1, 2, ...  íîìåð ïîëÿ (ñòîëáöà)


96

×òî áû îáðàòèòüñÿ ê ïåðåìåííîé, èñïîëüçóéòå ïåðåä íåé çíàê $.


Äëÿ óêàçàíèÿ ðàçäåëèòåëÿ îòäåëüíûõ ñòîëáöîâ ìîæíî èñïîëüçîâàòü îï-
öèþ -Fc , ãäå c  ëþáîé ñèìâîë. Ïî óìîë÷àíèþ â êà÷åñòâå ðàçäåëèòåëÿ
ñòîëáöîâ èñïîëüçóåòñÿ çíà÷åíèå ïåðåìåííîé FS:
awk -F: '{print($1,$3)}' /etc/passwd
âûâåäåò ïåðâîå è òðåòüå ïîëÿ  ñïèñîê ïîëüçîâàòåëåé è èõ UID'û
(óíèêàëüíûé èäåíòèôèêàòîð), èñïîëüçóÿ â êà÷åñòâå ðàçäåëèòåëÿ ïîëåé
äâîåòî÷èå.
awk -F: '{print(NR, $1)}' /etc/passwd
Ýòà êîìàíäà âûâåäåò ñïèñîê âñåõ ïîëüçîâàòåëåé, ïðîíóìåðîâàâ èõ.
Äëÿ óïðàâëåíèÿ ïåðåìåííûìè ìîãóò èñïîëüçîâàòüñÿ ëþáûå îïåðà-
öèè, êàê è â äðóãèõ ÿçûêàõ ïðîãðàììèðîâàíèÿ: ïðèñâàèâàíèÿ, àðèôìå-
òè÷åñêèå, ñðàâíåíèÿ, ëîãè÷åñêèå.
df | grep ad0 | awk '{print $6 "($3+$4)/1024}'
Êîìàíäà df âûâîäèò äàííûå îá îáúåìå ôàéëîâûõ ñèñòåì. Ñ ïî-
ìîùüþ grep ìû âûâîäèì òîëüêî ðåàëüíûå ôàéëîâûå ñèñòåìû (ò.å. òå,
êîòîðûå íàõîääÿòñÿ íà âèí÷åñòåðå ad0) è ñ ïîìîùüþ awk ìû ñêëàäûâàåì
îáúåì çàíÿòîãî è îáúåì ïóñòîãî ïðîñòðàíñòâà (òðåòüå è ÷åòâåðòîå ïîëÿ),
ïåðåâîäÿ çíà÷åíèå èç êèëîáàéò â ìåãàáàéòû.
awk òàê æå óìååò ïîíèìàòü ëîãè÷åñêèå ñòðóêòóðû îáû÷íûõ ÿçû-
êîâ ïðîãðàììèðîâàíèÿ, òàêèå êàê óñëîâèÿ è öèêëû:
awk -F: '{if($3>1000 && $3<65000) {print($1)}}' /etc/passwd
ýòà êîìàíäà âûâåäåò âñåõ îáû÷ûõ ïîëüçîâàòåëåé. Äëÿ îáû÷íûõ
ïîëüçîâàòåëåé UID íà÷èíàåòñÿ ñ 1001. Åñëè Âû íå äîáàâëÿëè â ñèñòåìó
äðóãèõ ïîëüçîâàòåëåé, òî âûâåäåòñÿ òîëüêî Âàøå èìÿ. Â ñïðàâêå man
Âû íàéäåòå íåêîòîðûå ïîäñêàçêè, êàê èñïîëüçîâàòü awk, íî äëÿ ïîëíîãî
îâëàäåíèÿ ýòèì èíñòðóìåíòîì, íåîáõîäèìî ïðî÷èòàòü õîòÿ áû îäíó êíè-
ãó ïî ÿçûêó ïðîãðàììèðîâàíèÿ awk. Áëàãîäàðÿ ãèáêîñòè è ñêîðîñòè, îí
ñòàë íåçàìåíèìûì èíñòðóìåíòîâ, äëÿ àíàëèçà òåêñòîâûõ äàííûõ.
awk òàê æå óìååò îáðàáàòûâàòü âõîäíûå äàííûå. Èñïîëüçóÿ ýòó
âîçìîæíîñòü, ëåãêî ñîçäàòü, íàïðèìåð, èíòåðôåéñ äëÿ ââîäà äàííûõ â
áàçó èëè â ôàéë.
97

3.3.4 Ñèñòåìà êîìïüþòåðíîé âåðñòêè TeX è ìàêðîïàêåò

LaTeX

TeX ýòî ñèñòåìà êîìïüþòåðíîé âåðñòêè, ïðåäíàçíà÷åííàÿ äëÿ òè-


ïîãðàôèé. Îíà áûëà ñîçäàíà âñåì èçâåñòíûì Äîíàëüäîì Êíóòîì äëÿ
íàïèñàíèÿ ñâîåãî òðåõòîìíèêà "Èñêóññòâî ïðîãðàììèðîâàíèÿ". TeX ïîç-
âîëÿåò îôîðìèòü òåêñò ëþáîé ñëîæíîñòè ó÷èòûâàÿ ïîæåëàíèÿ àâòîðà.
TeX äîêóìåíò âûãëÿäèò êàê ôàéë (èëè íàáîð ôàéëîâ) â êîòîðîì
ïîìèìî òåêñòà âñòàâëåíû ðàçëè÷íûå òåãè, ïîçâîëÿþùèå êîìïüþòåðó ïî-
íÿòü æåëàíèÿ ïîëüçîâàòåëÿ îòíîñèòåëüíî îôîðìëåíèÿ äîêóìåíòà. Òàêîé
ñïîñîá îôîðìëåíèÿ òåêñòà Âû óæå âñòðå÷àëè, åñëè ïèñàëè ñòðàíè÷êè íà
html. Äî 2007 ãîäà òåêñòîâûé ïðîöåññîð Word êîìïàíèè Microsoft èñïîëü-
çîâàë äëÿ õðàíåíèÿ òåêñòîâûõ äîêóìåíòîâ çàêðûòûé áèíàðíûé ôîðìàò,
íî íà÷èíàÿ ñ Word 2007 òåêñòîâûå äîêóìåíòû docx îôîðìëÿþòñÿ ïîõî-
æèì ñïîñîáîì  ñ ïîìîùüþ òåãîâ. Â ýòîì ëåãêî óáåäèòüñÿ, ïåðåèìåíîâàâ
ôàéë ñ ðàñøèðåíèåì docx â zip è îòêðûâ åãî ëþáûì àðõèâàòîðîì.
ßçûê ðàçìåòêè TeX îòëè÷àåòñÿ è îò html è îò docx, íî ëåãîê äëÿ
ïîíèìàíèÿ è ïðåäîñòàâëÿåò âîçìîæíîñòü îïðåäåëÿòü ñâîè òåãè. Òåãè â
TeX îáû÷íî íà÷èíàþòñÿ ñ \(backslash), ïîñëå êîòîðîãî èäåò êîìàíäà,
à çàòåì â ôèãóðíûõ ñêîáêàõ îïöèè êîìàíäû. Íàïðèìåð äëÿ òîãî, ÷òî
áû âûäåëèòü ñëîâî æèðíûì øðèôòîì, ïðèìåíÿåòñÿ òåã \textbf {æèðíûé
òåêñò}.
TeX òàêæå ïîçâîëÿåò ñîçäàâàòü ñòðóêòóðû, êîòîðûå íà÷èíàþòñÿ
òåãîì \begin è çàêàí÷èâàþòñÿ \end.
Äëÿ îáëåã÷åíèÿ èñïîëüçîâàíèÿ ÿçûêà ðàçìåòêè, ñîçäàí ìàêðîïàêåò
LaTeX, â êîòîðîì óæå îïðåäåëåíû ðàçëè÷íûå ñòðóêòóðû. Íàïðèìåð äëÿ
âñòàâêè ðèñóíêà íóæíî íàáðàòü
\begin{gure}
\ðàçëè÷íûå îïöèè
\...
\end{gure}
Ïî æåëàíèþ, â îïöèÿõ Âû óêàçûâàåòå òî÷íîå ìåñòî ðàñïîëîæåíèÿ
ðèñóíêà, åãî ðàçìåðû, ïîäïèñü, ñïîñîá îáòåêàíèÿ òåêñòà, ìåòêó äëÿ àâòî-
98

ìàòè÷åñêîé íóìåðàöèè è ïðî÷èå âñåâîçìîæíûå õàðàêòåðèñòèêè îôîðì-


ëåíèÿ èçîáðàæåíèÿ â òåêñòå. Åäèíñòâåííîé îáÿçàòåëüíîé îïöèåé, ÿâëÿ-
åòñÿ òîëüêî íàçâàíèå ôàéëà, èç êîòîðîãî áåðåòñÿ èçîáðàæåíèå.
Ïîäîáíûì îáðàçîì îïðåäåëåíû è äðóãèå ýëåìåíòû òåêñòà: òàáëèöû,
ôîðìóëû, ñïèñêè. Åñëè ó Âàñ âñå îïöèè, íàïðèìåð, òàáëèö ñîâïàäàþò,
òî Âû ìîæåòå îïðåäåëèòü èõ îäèí ðàç, â ïðåàìáóëå äîêóìåíòà. Â èíîì
ñëó÷àå Âû ìîæåòå ñîçäàòü â ïðåàìáóëå íåñêîëüêî ñòèëåé òàáëèö, ñ óêàçà-
íèåì ðàçëè÷íûõ îïöèé, à â òåêñòå âûçûâàòü îäèí èç ñòèëåé îôîðìëåíèÿ
äëÿ êîíêðåòíîé òàáëèöû.
Çà äîëãèå ãîäû áûëî ñîçäàíî ìíîæåñòâî ðàçëè÷íûõ øàáëîíîâ è
ñòèëåé äëÿ ñèñòåìû TeX. Åäèíñòâåííàÿ ïðîáëåìà ïåðåä ïîëüçîâàòåëåì 
íàó÷èòüñÿ íàõîäèòü ïîäõîäÿùèé øàáëîí. Äëÿ ñòóäåíòîâ ïðîæèâàþùèõ
íà òåððèòîðèè ïîñòñîâåòñêèõ ñòðàí, î÷åíü ïîëåçíûì ÿâëÿåòñÿ øàáëîí
eskdx (äëÿ îôîðìëåíèÿ äîêóìåíòà â ñîîòâåòñòâèè ñ ÅÑÊÄ  Åäèíàÿ
Ñèñòåìà Êîíñòðóêòîðñêîé Äîêóìåíòàöèè).  íåì èçíà÷àëüíî óæå ïðåäó-
ñìîòðåíû øðèôòû, ðàìêè, ñïîñîáû íóìåðàöèè ðèñóíêîâ, àâòîìàòè÷åñêîå
ñîñòàâëåíèå ñïèñêà àááðèâåàòóð è ñïèñêà èñïîëüçîâàííûõ èñòî÷íèêîâ è
ïðî÷èå òðåáîâàíèÿ ê îôîðìëåíèþ ðàáîò. Íàïðèìåð â íåì óæå ïðåäóñìîò-
ðåí òèòóëüíûé ëèñò, â êîòîðûé íåîáõîäèìî òîëüêî âíåñòè òåìó è èìÿ.
Âñå ýòî èçáàâëÿåò ïîëüçîâàòåëÿ îò ïðîáëåì ñ îôîðìëåíèåì è ïîçâîëÿåò
åìó ñîñðåäîòî÷èòüñÿ íà ñîäåðæàíèè.
Áëàãîäàðÿ ñèñòåìå ñòèëåé, äëÿ ïåðåîôîðìëåíèÿ äîêóìåíòà íóæ-
íî âñåãî ëèøü ïîäêëþ÷èòü äðóãîé ñòèëü. Æåëàÿ èçäàòü ñâîþ ðàáîòó,
íàïèñàííóþ â ñîîòâåòñòâèè ñ ÅÑÊÄ, â âèäå êíèãè, ïîäêëþ÷èòå îäèí
èç ìíîæåñòâà øàáëîíîâ äëÿ îôîðìëåíèÿ êíèã. Àòîìàòè÷åñêè èçìåíÿò-
ñÿ øðèôòû, óáåðóòñÿ ðàìêè, èçìåíèòñÿ ôîðìàò ëèñòà è ïåðåäåëàåòñÿ
ñîäåðæàíèå.
Åäèíñòâåííûé è ãëàâíûé ìèíóñ ñèñòåìû TeX, êîòîðûé íå äàåò
åé âûéòè çà ãðàíèöó èñïîëüçîâàíèÿ èçäàòåëÿìè, ó÷åíûìè è ïðîãðàì-
ìèñòàìè, ýòî ñëîæíîñòü îñâîåíèÿ è èñïîëüçîâàíèÿ íà íà÷àëüíîì ýòàïå.
Ïîëüçîâàòåëè ïðèâûêøèå ê ðåäàêòîðàì â ñòèëå WYSIWYG (What You
See Is What You Get  ÷òî âèäèøü, òî è ïîëó÷èøü), òàêèì êàê Word, íå
ìîãóò êîíòðîëèðîâàòü äîêóìåíò â âèäå îáû÷íîãî òåêñòà, à íå èìåþùèå
99

îïûòà ïðîãðàììèðîâàíèÿ, íå ìîãóò ïîíÿòü, ñìûñë èñïîëüçîâàíèÿ òåãîâ.


Êîíå÷íî ñóùåñòâóþò âèçóàëüíûå ðåäàêòîðû äëÿ TeX, íî ïðè èõ èñïîëü-
çîâàíèè ïðîïàäàåò ñìûñë ñèñòåìû  ïîëíûé êîíòðîëü íàä îôîðìëåíèåì
äîêóìåíòà. Êðîìå òîãî, ïîñòîÿííûå èçìåíåíèÿ ïàðàìåòðîâ òåêñòà, äî-
áàâëÿþò ìíîæåñòâî ëèøíèõ òåãîâ, à â òåãè  êó÷ó ëèøíåé èíôîðìàöèè.
Ïîñëå òàêîé ïðàâêè äîêóìåíò ñòàíåò íå÷èòàåìûì, áåç WYSIWYG ðåäàê-
òîðà.
Ðàçâèòèå TeX, ïîçâîëèëî ìíîãèì ïðîäóêòàì ðàçâèâàòüñÿ è èñïîëü-
çîâàòüñÿ ñàìîñòîÿòåëüíî. Òàê âîçìîæíîñòü ðèñîâàíèÿ êîìàíäàìè ïîäà-
ðèëà ìèðó ÿçûê MetaPost, êîòîðûé èñïîëüçóåòñÿ äëÿ ñîçäàíèÿ âåêòîð-
íûõ èçîáðàæåíèé, à ñèñòåìà íàáîðà ôîðìóë, êîòîðóþ ó TeX'à ñ÷èòàþò
íàèëó÷øåé, èñïîëüçóåòñÿ âî ìíîæåñòâå ïðîåêòîâ: îò OpenOce äî Âè-
êèïåäèè.
ßäðîì ñèñòåìû ÿâëÿåòñÿ òàê íàçûâàåìûé plain TeX (ïðîñòîé TeX).
 íåì óæå ìîæíî ñîçäàâàòü ëþáûå äîêóìåíòû, íî ýòî ìîæåò çàíÿòü
ìíîãî âðåìåíè. Íàä íèì íàõîäèòñÿ íàäñòðîéêà LaTeX. Ýòî ñàìûé ïîïó-
ëÿðíûé íàáîð ìàêðîðàñøèðåíèé, â êîòîðîì óæå îïðåäåëåíû âñå êîí-
ñòðóêöèè äëÿ ñîçäàíèÿ ñëîæíûõ äîêóìåíòîâ. Ê LaTeX ïîäêëþ÷àþò-
ñÿ ñòèëè, êîòîðûå îïðåäåëÿþò òî, êàê áóäóò ðàáîòàòü ýòè êîíñòðóêöèè
è, ñëåäîâàòåëüíî, êàê áóäåò âûãëÿäåòü äîêóìåíò. Èç LaTeX è ñòèëåé,
ñîçäàþòñÿ ïàêåòû, êîòîðûå ïðåäîñòàâëÿþò ãîòîâóþ ñðåäó äëÿ âåðñòêè
òåêñòà. Ñàìûé ïîïóëÿðíûé è íàèáîëåå ïîääåðæèâàåìûé  ïàêåò TeX
Live, êîòîðûé ïîðòèðîâàí íà ìíîãèå ñèñòåìû, âêëþ÷àÿ Windows. Íî
ïðè óñòàíîâêå áóäüòå àêêóðàòíû: ïîëíàÿ âåðñèÿ ñî âñåìè ñîçäàíûìè çà
30 ëåò ðàçðàáîòêè ñòèëÿìè è øàáëîíàìè, çàíèìàåò íåñêîëüêî ãèãàáàéò
(Âû óâåðíû, ÷òî Âàì íóæåí øàáëîí äëÿ ðèñîâàíèÿ øàõìàòíîé äîñêè è
øàõìàòíûõ ôèãóð?).
Íàáðàâ òåêñò, ïîäêëþ÷èâ ñòèëè è ðàññòàâèâ òåãè, íåîáõîäèìî ñêîì-
ïèëèðîâàòü ãîòîâûé äîêóìåíò â ôîðìàò dvi. Ïðè êîìïèëÿöèè âñå çàâèñè-
ìûå îò äîêóìåíòà ñòèëè, âñå ðèñóíêè è âñå ÷àñòè, íà êîòîðûå áûë ðàçáèò
TeX äîêóìåíò, ñîáèðàþòñÿ â åäèíûé ôàéë, êîòîðûé ìîæíî ïðîñìàò-
ðèâàòü ëþáîé ñòàíäàðòíîé ïðîãðàììîé ïðîñìîòðà äîêóìåíòîâ â UNIX
ñèñòåìàõ èëè æå ñïåöèàëüíûìè óòèëèòàìè â Windows. Ýòîò ãîòîâûé
100

äîêóìåíò ìîæíî ïå÷àòàòü èëè ïðåîáðàçîâàòü â äðóãîé áîëåå óäîáíûé


ôîðìàò (íàïðèìåð pdf).
Ïðè íàáîðå òåêñòà îïðåäåëÿþùåãî òåãè è ñòðóêòóðû, âîçìîæíû
îøèáêè ñî ñòîðîíû ïîëüçîâàòåëÿ.  ýòîì ñëó÷àå, âî âðåìÿ êîìïèëÿöèè,
ïðîãðàììà âûâåäåò Âàì îïèñàíèå îøèáêè, èìÿ ôàéëà è íîìåð ñòðîêè,
ãäå ýòà îøèáêà íàõîäèòñÿ. Òàê æå âî âðåìÿ êîìïèëÿöèè âûâîäÿòñÿ ñî-
îáùåíèÿ î ðåêîìåíäàöèÿõ ïî ïåðåîôîðìëåíèþ òåêñòà. Íàïðèìåð, åñëè
Âû óêàçàëè ðàçìåñòèòü ðèñóíîê ñðàçó ïîñëå îïðåäåëåííîé ñòðîêè, à
â îñòàâøååñÿ ìåñòî íà ñòðàíèöå îí íå ïîìåùàåòñÿ, òî Âàì âûâåäåòñÿ
ïðåäëîæåíèå ñäåëàòü åãî ïëàâàþùèì.  ýòîì ñëó÷àå îñòàâøååñÿ ìåñòî
áóäåò çàïîëíåíî òåêñòîì, êîòîðûé èäåò ïîñëå ðèñóíêà, à ñàì ðèñóíîê
ðàñïîëîæèòñÿ â íà÷àëå ñëåäóþùåé ñòðàíèöû.
Äàííàÿ ãëàâà áûëà íàïèñàíà òîëüêî äëÿ îçíàêîìëåíèÿ. Âàì íåîá-
õîäèìî èçó÷àòü LaTeX, òîëüêî åñëè Âû ïëàíèðóåòå ñîçäàâàòü ñòàòüè,
äîêóìåíòàöèþ èëè êíèãè. Íî åñëè îò÷åòû ïî âñåì ëàáîðàòîðíûì ðàáîòàì
Âû ïðèíåñåòå â TeX ôîðìàòå, òî ìîæåòå ñìåëî òðåáîâàòü ñåáå ïÿòåðêó.

3.4 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó

1. Èçìåíèòå ïðèãëàøåíèå êîìàíäíîãî èíòåðïðåòàòîðà íà òî, êîòîðîå


óäîáíî äëÿ Âàñ.

2. Äîáàâüòå ïñåâäîíèìû (àëèàñû) äëÿ ïÿòè íàèáîëåå èñïîëüçóåìûõ


Âàìè êîìàíä.

3. Ñîçäàéòå â äîìàøíåì êàòàëîãå ïàïêó backup è ñäåëàéòå òàê, ÷òî


áû ïðè âûõîäå èç ñèñòåìû ýòà ïàïêà àðõèâèðîâàëàñü.

4. Ïðåäñòàâüòå, ÷òî Âû ðàáîòàåòå â áîëüøîì äàòà-öåíòðå êðóïíîé


àìåðèêàíñêîé êîìïàíèè. Èç HR îòäåëà Âû ïîëó÷èëè ñïèñîê íî-
âûõ ñîòðóäíèêîâ äëÿ 4-õ ôèëèàëîâ â ðàçíûõ ãîðîäàõ ÑØÀ (ôàéë
íàõîäèòñÿ íà äèñêå Free316.iso). Âàì íåîáõîäèìî ñîçäàòü èç ýòîãî
ñïèñêà ÷åòûðå master.passwd ôàéëà äëÿ ÷åòûðåõ ñåðâåðîâ, ïî îä-
íîìó íà êàæäûé ãîðîä. Ñòðóêòóðó ôàéëà master.passwd ìîæíî
íàéòè íà man ñòðàíèöàõ. Ëîãèí ñîçäàéòå èç ïåðâîé áóêâû èìåíè
101

è ôàìèëèè. Îáÿçàòåëüíî ïðîâåðüòå, íåò ëè ñîâïàäàþùèõ èìåí.


Äëÿ ïàðîëÿ èñïîëüçóéòå ñëîâà èç ñëîâàðÿ äëèííåå 19 ñèìâîëîâ. Â
ðåàëüíîé æèçíè íèêîãäà íå èñïîëüçóéòå ñëîâà èç ñëîâàðÿ â êà÷å-
ñòâå ïàðîëåé!  êðàéíåì ñëó÷àå èñïîëüçóéòå ïðîãðàììó pwgen,
êîòîðàÿ íå âõîäèò â ñòàíäàðòíóþ ïîñòàâêó FreeBSD. Äëÿ òàêî-
ãî ñëó÷àÿ êàê ó íàñ, ïðåäíàçíà÷åíà ñèñòåìà îäíîðàçîâûõ ïàðîëåé
opiepasswd. Îíà óæå óñòàíîâëåíà âî FreeBSD, íî ñëèøêîì ñëîæ-
íàÿ, êàê äëÿ òðåòüåé ëàáîðàòîðíîé ðàáîòû. Çàìåòüòå, ÷òî ïàðîëè
â master.passwd õðàíÿòñÿ â õýøèðîâàíîì âèäå. Äëÿ õýøèðîâà-
íèÿ èñïîëüçóéòå ïðîãðàììó md5. Íå çàáûâàéòå, ÷òî User ID äëÿ
ïîëüçîâàòåëåé äîëæíû íà÷èíàòüñÿ ñ 1001. Äëÿ îñòàëüíûõ ïîëåé
èñïîëüçóéòå çíà÷åíèÿ ïî óìîë÷àíèþ. Îòäåëüíî ñîçäàéòå ñïèñîê,
â êîòîðîì áóäåò íåõýøèðîâàíûé ïàðîëü è íîìåð òåëåôîíà, äëÿ
àâòîìàòè÷åñêîé îòïðàâêè ïàðîëÿ ñ ïîìîùüþ SMS.

3.5 Ñîäåðæàíèå îò÷åòà

 îò÷åòå äîëæíà áûòü ïðåäñòàâëåíà ïîñëåäîâàòåëüíîñòü äåéñòâèé,


ïåðå÷èñëåííûõ â ðàçäåëå "Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó"â âèäå ñêðèí-
øîòîâ èëè îò÷åòà ñôîðìèðîâàííîãî ïðîãðàììîé script. Îáÿçàòåëüíî ñî-
õðàíèòå âñå òå êîìàíäû, êîòîðûå Âû èñïîëüçîâàëè äëÿ ñîçäàíèÿ master.
passwd ôàéëîâ. Íà ñëåäóþùåé ðàáîòå ìû îáúåäèíèì èõ â åäèíóþ ïðî-
ãðàììó, êîòîðàÿ àâòîìàòè÷åñêè áóäåò äåëàòü ãåíåðàöèþ master.passwd
ôàéëîâ.

3.6 Âîïðîñû äëÿ ñàìîêîíòðîëÿ

1. ×åì îòëè÷àþòñÿ ôàéëû ñîçäàííûå â òåêñòîâûõ ïðîöåññîðàõ îò ôàé-


ëîâ ñîçäàííûõ â òåêñòîâûõ ðåäàêòîðàõ?

2. Êàêèå ðåæèìû ðàáîòû ñóùåñòâóþò â vi?

3. Êàê èçìåíèòü ðåäàêòîð ïî óìîë÷àíèþ äëÿ ïîëüçîâàòåëÿ?


102

4. Ïî÷åìó êîìàíäû ñîõðàíåíèÿ ôàéëà è âûõîäà èç ðåäàêòîðà vi íà-


÷èíàþòñÿ ñ äâîåòî÷èÿ?

5. ×òî â ðåäàêòîðå vi äåëàåò ìîäèôèêàòîð â âèäå ÷èñëà? ×òî ïðî-


èçîéäåò, åñëè íàáðàòü êîìàíäó 1 0 0 o ?

6. ×òî òàêîå øàáëîí? Ïî÷åìó øàáëîíû òàê ÷àñòî èñïîëüçóþòñÿ â


UNIX ñèñòåìàõ?

7. Êàêèì ñïîñîáîì ïðîèñõîäèò íàñòðîéêà UNIX ñèñòåì?

8. Êàêèå ôàéëû âëèÿþò íà ðàáîòó bash?

9. ×åì ôàéë .login îòëè÷àåòñÿ îò ôàéëà .bash_login?

10. Ïî÷åìó èìÿ íåêîòîðûõ ôàéëîâ íà÷èíàåòñÿ ñ òî÷êè?

11. ×òî òàêîå ïñåâäîíèìû êîìàíä è çà÷åì îíè èñïîëüçóþòñÿ?

12. Ïî÷åìó äî ñåãîäíÿøíåãî äíÿ íå ïîòåðÿëè àêòóàëüíîñòè ïîòîêîâûå


ðåäàêòîðû òåêñòà10 ?

13. ßâëÿåòñÿ ëè awk ÿçûêîì ïðîãðàììèðîâàíèÿ?

14. Åñëè äà, òî ïðîãðàììû êàêîé ñëîæíîñòè íà íåì ìîæíî íàïèñàòü?

15. Åñëè íåò, òî êàêèå ôóíêöèè âûïîëíÿåò awk?

10 Ðåäàêòèðîâàòü òåêñò íà êîìïüþòåðå íà÷àëè åùå äî ïîÿâëåíèÿ ìîíèòîðîâ, à âåñü âûâîä ïå÷àòàëñÿ
íà ìàòðè÷íîì ïðèíòåðå. Ðàçóìååòñÿ íà áóìàãå íåâîçìîæíî èñïîëüçîâàòü ðåäàêòîðû ïîäîáíûå
vi, ïîýòîìó â òå äàëåêèå âðåìåíà ïðèõîäèëîñü ïîëüçîâàòüñÿ ïîòîêîâûìè ðåäàêòîðàìè.
103

4 Ëàáîðàòîðíàÿ ðàáîòà 4.

Ïðîãðàììèðîâàíèå âî FreeBSD

Öåëüþ ðàáîòû ÿâëÿåòñÿ èçó÷åíèå èçó÷åíèå âîçìîæíîñòåé ïðîãðàì-


ìèðîâàíèÿ ïîä FreeBSD íà ðàçëè÷íûõ ÿçûêàõ ïðîãðàììèðîâàíèÿ.

4.1 Ïðîãðàììðîâàíèå íà ÿçûêå êîìàíäíîãî

èíòåðïðåòàòîðà

4.1.1 Íàçíà÷åíèå è âîçìîæíîñòè shell-ïðîãðàììèðîâàíèÿ

Âû óæå çíàåòå êàê ðàáîòàòü ñ êîìàíäíîé ñòðîêîé èíòåðïðåòàòîðà


â èíòåðàêòèâíîì ðåæèìå. Ñëåäóåò îòìåòèòü, ÷òî åãî âîçìîæíîñòè ýòèì
íå îãðàíè÷èâàþòñÿ  â èíòåðïðåòàòîð âñòðîåí ìîùíûé ÿçûê ïðîãðàì-
ìèðîâàíèÿ. Ýòîò ÿçûê èñïîëüçóåòñÿ äëÿ ñàìûõ ðàçíûõ çàäà÷: îò àâòîìà-
òèçàöèè ïîâòîðÿþùèõñÿ êîìàíä äî íàïèñàíèÿ ñëîæíûõ èíòåðàêòèâíûõ
ïðîãðàìì îáðàáîòêè äàííûõ, ïîëó÷åíèÿ èíôîðìàöèè èç íåáîëüøèõ áàç
äàííûõ èëè åå ïîïîëíåíèÿ.
Áëàãîäàðÿ ìîäóëüíîé ñòðóêòóðå îïåðàöèîííîé ñèñòåìû FreeBSD
ëþáóþ åå êîìàíäó ìîæíî âûçâàòü èç ïðîãðàììíîãî èíòåðïðåòàòîðà.
Åñëè îäíà êîìàíäà FreeBSD íå ìîæåò âûïîëíèòü íóæíóþ çàäà÷ó, ìîæ-
íî èñïîëüçîâàòü êîíâåéåðû, ñîñòîÿùèå èç öåïî÷åê êîìàíä. Êîíâåéåð
ïîçâîëÿåò íàïðàâèòü âûâîä îäíîé êîìàíäó íà ââîä äðóãîé. FreeBSD
ïîääåðæèâàåò ñîòíè ìîäóëüíûõ êîìàíä, êàæäàÿ èç êîòîðûõ âûïîëíÿ-
åò íåáîëüøóþ ñïåöèàëèçèðîâàííóþ çàäà÷ó. Åñëè íåò êîìàíäû èëè èõ
íàáîðà, êîòîðûå ñïîñîáíû âûïîëíèòü íóæíóþ îïåðàöèþ, òî â Internet
ìîæíî íàéòè ñâîáîäíî ðàñïðîñòðàíÿåìóþ ïðîãðàììó äëÿ ðåøåíèÿ ýòîé
çàäà÷è.
Ïðîãðàììèðîâàíèÿ íà ÿçûêå êîìàíäíîãî èíòåðïðåòàòîðà çà÷àñòóþ
èçáåãàþò èç-çà íàëè÷èÿ Perl è äðóãèõ ÿçûêîâ, ñ÷èòàÿ åãî ïðîñòî âàðèàí-
òîì ÿçûêà ïàêåòíîãî ïðîãðàììèðîâàíèÿ DOS. Êîíå÷íî, â ñâîåé ïðîñòåé-
øåé ôîðìå ñöåíàðèè êîìàíäíîãî èíòåðïðåòàòîðà ïîõîæè íà bat-ôàéëû
DOS, èñïîëüçóåìûå ëèøü äëÿ çàïóñêà îïðåäåëåííûõ êîìàíä, ñîäåðæà-
104

ùèõñÿ â ýòîì ôàéëå. Îäíàêî, ïîòðàòèâ âðåìÿ íà èçó÷åíèå ðàáîòû èí-


òåðïðåòàòîðà, îñîçíàâ, êàê îí îáðàáàòûâàåò êîìàíäû, è êàêèì îáðàçîì
âûâîä îäíîé êîìàíäû îòïðàâèòü íà ââîä äðóãîé, âû ñìîæåòå ïèñàòü
î÷åíü ñåðüåçíûå è ñëîæíûå ïðîãðàììû. Îñîáåííî õîðîøî ýòî áóäåò ïî-
ëó÷àòüñÿ ïîñëå èçó÷åíèÿ ñîòíè ñïåöèàëèçèðîâàííûõ êîìàíä FreeBSD,
ïðåäíàçíà÷åííûõ äëÿ ðåøåíèÿ óçêèõ çàäà÷.
Âîò øåñòü îñíîâíûõ ïðè÷èí, ïî êîòîðûì ñòîèò èçó÷àòü ïðîãðàì-
ìèðîâàíèå íà ÿçûêå êîìàíäíîãî èíòåðïðåòàòîðà â FreeBSD:

- Åãî ëåãêî âûó÷èòü. Åñëè âû ÷àñòî ðàáîòàåòå ñ êîìàíäíîé ñòðîêîé


FreeBSD, âû, íàâåðíÿêà, óæå çíàêîìû ñî ìíîãèìè êîìàíäàìè, èñ-
ïîëüçóåìûìè â ñöåíàðèÿõ.

- Îí ýêîíîìèò âðåìÿ. Äëÿ ðåøåíèÿ íåêîòîðûõ çàäà÷, òðåáóþùèõ


÷àñû èëè äàæå äíè ïðîãðàììèðîâàíèÿ íà Ñ, äîñòàòî÷íî 5-10 ìèíóò
ïðîãðàììèðîâàíèÿ íà ÿçûêå èíòåðïðåòàòîðà.

- Ýòîò ÿçûê ïîçâîëÿåò àâòîìàòèçèðîâàòü óòîìèòåëüíóþ ðàáîòó. Ñêà-


æåì, åñëè òðåáóåòñÿ âíåñòè îäíî è òî æå èçìåíåíèå â 100 ôàéëîâ,
äîñòàòî÷íî âîñïîëüçîâàòüñÿ öèêëîì "for"äëÿ àâòîìàòèçàöèè ýòîãî
ïðîöåññà.

- Îí ïîçâîëÿåò èçó÷èòü íîâûå ïîëåçíûå ìåòîäû ðàáîòû ñ ñèñòåìîé.


Ïðè ïðîãðàììèðîâàíèè âû ñòîëêíåòåñü ñ êîìàíäàìè, î êîòîðûõ
íèêîãäà ðàíüøå íå ñëûøàëè, è óçíàåòå î íîâûõ ñïîñîáàõ ðåøåíèÿ
èçâåñòíûõ çàäà÷. Âû ëó÷øå èçó÷èòå êîìàíäíóþ ñòðîêó FreeBSD è
ïîéìåòå, êàêîé ìîùüþ îíà îáëàäàåò.

- Îí ðàçâèâàåò êðåàòèâíûé ïîòåíöèàë. Âû âñåãäà ñìîæåòå ñîçäàòü


íóæíóþ âàì ïðîãðàììó íà ÿçûêå êîìàíäíîãî èíòåðïðåòàòîðà. Îä-
íèì èç ãëàâíûõ ïðåèìóùåñòâ FreeBSD ÿâëÿåòñÿ ôèëîñîôèÿ "Äåëàé
ïî ñâîåìó". Ñóùåñòâóåò ìíîæåñòâî ñïîñîáîâ äîñòèæåíèÿ öåëè, è íå
îáÿçàòåëüíî îáùåïðèíÿòûé ïðèåì ÿâëÿåòñÿ íàèëó÷øèì.

- Îí îáó÷àåò äóìàòü. Âîçìîæíî, ýòî èäåàëüíûé ÿçûê äëÿ òîãî, ÷òî-


áû íàó÷èòüñÿ ïðîãðàììèðîâàòü, ïîñêîëüêó îí, ðàáîòàÿ ñî çíàêîìû-
105

ìè êîìàíäàìè, ïîçâîëÿåò ñîñðåäîòî÷èòüñÿ íà ëîãèêå ïðîãðàììû.

4.1.2 Êîìàíäû â shell-ñêðèïòå

 ïðîñòåéøåì âèäå ïðîãðàììà íà sh âûãëÿäèò êàê ñïèñîê êîìàíä,


êîòîðûå èíòåðïðåòàòîð ÷èòàåò îäíó çà îäíîé è âûïîëíÿåò. Ðàçóìååòñÿ
òàêîé ïîäõîä ìàëî ÷åì ìîæåò ïîìî÷ü â ðåøåíèè ðóòèííûõ çàäà÷. Â
èíòåðïðåòàòîð sh äîïîëíèòåëüíî âñòðîåíû ðàçëè÷íûå îïåðàòîðû äëÿ
óïðàâëåíèÿ õîäîì ïðîãðàììû.
Äëÿ âûïîëíåíèÿ ïðîãðàììû ìîæíî âûçâàòü íîâûé ïðîöåññ sh è
ïåðåäàòü åìó èìÿ ôàéëà ñ Âàøåé ïðîãðàììîé:
sh myprog
Êðîìå òîãî ñóùåñòâóåò äðóãîé ïîäõîä  áîëåå ïðàâèëüíûé. Íóæíî
ñäåëàòü ôàéë èñïîëíÿåìûì è çàïóñêàòü åãî. ×òî áû ïîñìîòðåòü ÿâëÿ-
åòñÿ ëè ôàéë èñïîëíÿåìûì, íàáåðèòå ls -l. Ïåðâûå äåñÿòü ñèìâîëîâ
óêàçûâàþò íà òèï è ïðàâà äîñòóïà ê ôàéëó. Íàñ èíòåðåñóåò ïîëå. â
êîòîðîì îòîáðàæàåòñÿ ïðàâî íà âûïîëíåíèå (ñèìâîë x ). Åñëè åãî íåò,
òî íàáåðèòå êîìàíäó chmod +x èìÿ_ôàéëà . Òåïåðü ls -l ïîêàæåò,
÷òî ôàéë èñïîëíÿåìûé. Äëÿ çàïóñêà, íàáåðèòå ïîëíûé ïóòü ê ôàéëó,
âêëþ÷àÿ èìÿ ôàéëà. Íàïðèìåð:
/usr/home/userdir/myprojekts/mynewprog
Åñëè ôàéë ÿâëÿåòñÿ èñïîëíÿåìûì, òî ñèñòåìà ÷èòàåò ïåðâûå äâà
áàéòà ïðîãðàììû, â êîòîðûõ óêàçàí òèï ïðîãðàììû. Äëÿ ñêðèïòîâ è
èíòåðïðåòèðóåìûõ ïðîãðàìì ýòè äâà áàéòà ÿâëÿþòñÿ ñèìâîëàìè #!.
Åñëè ñèñòåìà èõ âèäèò, òî îíà ÷èòàåò ïåðâóþ ñòðîêó äî êîíöà è óçíàåò,
êàêîé èíòåðïðåòàòîð ñëåäóåò âûçâàòü äëÿ âûïîëíåíèÿ. Äëÿ ïðîãðàìì
íà sh ïåðâàÿ ñòðîêà âñåãäà äîëæíà âûãëÿäåòü òàê:
#!/bin/sh
Ðàçóìååòñÿ Âû ìîæåòå ïèñàòü è íà bash è íà ëþáîì äðóãîì ÿçû-
êå êîìàíäíîãî èíòåðïðåòàòîðà. Îíè äàæå ïðåäîñòàâëÿþò áîëüøóþ âîç-
ìîæíîñòü äëÿ ïðîãðàììèðîâàíèÿ (îñîáåííî ksh, êîòîðûé ïî âîçìîæíî-
ñòÿì íå óñòóïàåò "íàñòîÿùèì"ÿçûêàì ïðîãðàììèðîâàíèÿ). Íî ïðîáëåìà
â òîì, ÷òî ñòàíäàðò ïðîãðàììèðîâàíèÿ íà sh, ïîääåðæèâàåòñÿ ëþáûì
èíòåðïðåòàòîðîì. Ò.å. ëþáàÿ ïðîãðàììà íàïèñàíàÿ íà sh áóäåò ðàáî-
106

òàòü â ëþáîé UNIX ñèñòåìå. Åñëè Âàì íå õâàòàåò ôóíêöèîíàëà sh,


òî ïðåäïî÷òèòåëüíåé îáðàòèòüñÿ ê äðóãèì èíòåðïðåòèðóåìûì ÿçûêàì
ïðîãðàììèðîâàíèÿ, òàêèì êàê Perl èëè Python.
Äëÿ Perl'à èëè Python'à ïåðâàÿ ñòðîêà ñîîòâåòñòâåííî áóäåò âûãëÿ-
äåòü òàê:
#!/usr/bin/perl
#!/usr/local/bin/python
Ïîñëå îáÿçàòåëüíîé ïåðâîé ñòðîêè èäåò ñàì òåêñò ïðîãðàììû. sh
èãíîðèðóåò ïóñòûå ñòðîêè, òàê ÷òî Âû ìîæåòå èñïîëüçîâàòü èõ äëÿ òîãî,
÷òî áû âûäåëÿòü îòäåëüíûå ñòðóêòóðû ïðîãðàììû. Êîìåíòàðèè, ýòî
ñòðîêè, êîòîðûå íà÷èíàþòñÿ ñ ñèìâîëà #. Ëþáóþ ïðîãðàììó îáû÷íî
çàâåðøàþò êîìàíäîé exit.
Ñâîþ ïðîãðàììó Âû ìîæåòå ïîìåñòèòü â ëþáîé èç ïóòåé äëÿ ïî-
èñêà ïðîãðàìì (/bin, /sbin, /usr/bin, /usr/home/username/bin è
ò.ä.), ÷òî ïîçâîëèò çàïóñêàòü åå íå óêàçûâàÿ ïîëíûé ïóòü ê íåé.
Íà ðèñ. 25 ïðåäñòàâëåí ïðèìåð ïðîãðàììû Hello, World íà ÿçûêå
sh ñ ñîáëþäåíèåì âñåõ ïðàâèë îôîðìëåíèÿ ñêðèïòà:

Ðèñ. 25: Ïðîãðàììà Hello, World

4.1.3 Ïåðåìåííûå è âçàèìîäåéñòâèå ñ ïîëüçîâàòåëåì

Ïðè ïðîãðàììèðîâàíèè íà ÿçûêå êîìàíäíîãî èíòåðïðåòàòîðà èñ-


ïîëüçóþòñÿ äâà òèïà ïåðåìåííûõ: ïåðåìåííûå èíòåðïðåòàòîðà è ïåðå-
ìåííûå ñðåäû. Îñíîâíîå ðàçëè÷èå ñîñòîèò â òîì, ÷òî ïåðåìåííûå ñðåäû
äîñòóïíû äðóãèì ñöåíàðèÿì è ïðîãðàììàì, âûçûâàåìûì èç âàøåãî ñöå-
íàðèÿ, à ïåðåìåííûå ñöåíàðèÿ  òîëüêî åìó ñàìîìó.
 ñöåíàðèÿõ íà sh, íå â ïðèìåð ïðîãðàììàì íà C, ñ ïåðåìåííûìè
ìîæíî îáðàùàòüñÿ äîâîëüíî ñâîáîäíî. Íåò íåîáõîäèìîñòè äåêëàðèðî-
107

âàòü èõ äî èñïîëüçîâàíèÿ. Âñå ïåðåìåííûå â ïðîãðàììàõ êîìàíäíîãî


èíòåðïðåòàòîðà õðàíÿòñÿ êàê ñòðîêè.
 ïðîñòåéøåì ñëó÷àå çíà÷åíèå ïåðåìåííîé ïðèñâàèâàåòñÿ ñëåäóþ-
ùèì îáðàçîì:
myvar=5
Òåïåðü â ïåðåìåííîé myvar õðàíèòñÿ çíà÷åíèå 5. Äëÿ äîñòóïà ê
èíôîðìàöèè â ïåðåìåííîé ïåðåä åå èìåíåì ñëåäóåò óêàçûâàòü ñèìâîë
$. Íàïðèìåð, êîìàíäà echo $myvar âûâîäèò 5 â ïîòîê STDOUT, ò.å.
îáû÷íî íà ýêðàí.
 ïðèñâîåíèè ïåðåìåííûõ âàæíóþ ðîëü èãðàþò ïóñòûå ñèìâîëû.
Âûðàæåíèå myvar=5 ïðèñâàèâàåò 5 ïåðåìåííîé myvar. À âûðàæåíèå
myvar = 5 ïðèâîäèò ê îøèáêå, ïîñêîëüêó èíòåðïðåòàòîð òðàêòóåò myvar
êàê èìÿ êîìàíäû, êîòîðóþ îí ïûòàåòñÿ çàïóñòèòü, à íå êàê èìÿ ïåðå-
ìåííîé.
Çíà÷åíèå îäíîé ïåðåìåííîé ìîæíî ïðèñâîèòü äðóãîé, íàïðèìåð:
myvarB=$myvar
Ýòî âûðàæåíèå ïðèñâàèâàåò ñîäåðæèìîå ïåðåìåííîé myvar ïåðå-
ìåííîé myvarB. Åñëè myvarB óæå ñîäåðæèò êàêîå-ëèáî çíà÷åíèå, îíî
áóäåò çàìåíåíî íîâûì. Êðîìå òîãî, ïåðåìåííîé ìîæíî ïðèñâîèòü âûâîä
êîìàíäû èëè ââîä èç ïîòîêà STDIN (îáû÷íî ýòî êëàâèàòóðà).
Ñîçäàíèå ïåðåìåííîé ñðåäû ïîõîæå íà ñîçäàíèå ïåðåìåííîé èíòåð-
ïðåòàòîðà. Åäèíñòâåííîå ðàçëè÷èå çàêëþ÷àåòñÿ â òîì, ÷òî åå íåîáõîäèìî
ýêñïîðòèðîâàòü. Äëÿ ýòîãî èñïîëüçóåòñÿ îïåðàòîð export. Íàïðèìåð,
âûðàæåíèå:
MYVAR=5 export MYVAR
ñîçäàåò ïåðåìåííóþ èíòåðïðåòàòîðà MYVAR, à çàòåì ýêñïîðòèðó-
åò åå, äåëàÿ ïåðåìåííîé ñðåäû. Îíà áóäåò äîñòóïíà äðóãèì ïðîãðàììàì,
çàïóùåííûì èç äàííîãî êîìàíäíîãî èíòåðïðåòàòîðà.
 èìåíàõ ïåðåìåííûõ ó÷èòûâàåòñÿ ðåãèñòð. Îíè ìîãóò ñîäåðæàòü
áóêâû, öèôðû è ñèìâîë ïîä÷åðêèâàíèÿ. Èìÿ ïåðåìåííîé íå ìîæåò íà-
÷èíàòüñÿ ñ öèôðû. Êðîìå òîãî, íå ñëåäóåò âíà÷àëå èìåíè ïåðåìåííîé
èñïîëüçîâàòü ïîä÷åðê. Æåëàòåëüíî ïðèìåíÿòü îïèñàòåëüíûå èìåíà, ÷òî-
áû êîä ïðîãðàììû áûëî ëåãêî ÷èòàòü. Íàïðèìåð, ïðåäïîëîæèòü, ÷òî
108

ñîäåðæèò ïåðåìåííàÿ avg_rainfal (ñðåäí_îñàäêè), ãîðàçäî ïðîùå, ÷åì


ãàäàòü î íàçíà÷åíèè ïåðåìåííîé ñ èìåíåì xyz123.
Ïî ñîãëàøåíèþ â èìåíàõ ëîêàëüíûõ ïåðåìåííûõ èñïîëüçóþòñÿ ñèì-
âîëû íèæíåãî ðåãèñòðà, à â èìåíàõ ïåðåìåííûõ ñðåäû  âåðõíåãî. Íåêî-
òîðûå ïðîãðàììèñòû ïðåäïî÷èòàþò èñïîëüçîâàòü ñìåøàííûå èìåíà äëÿ
ëîêàëüíûõ ïåðåìåííûõ, ÷òî ïîçâîëÿåò îòëè÷àòü èõ îò äðóãèõ êîìàíä
èíòåðïðåòàòîðà, êîòîðûå, êàê ïðàâèëî, ñîñòîÿò èç ñèìâîëîâ òîëüêî íèæ-
íåãî ðåãèñòðà.
Êðîìå ïðèñâîåíèÿ çíà÷åíèé ïåðåìåííûì è èõ èñïîëüçîâàíèÿ â ñöå-
íàðèè, êîìàíäíûé èíòåðïðåòàòîð ïðåäîñòàâëÿåò âîçìîæíîñòü îáðàáàòû-
âàòü ââîä èç ïîòîêà STDIN. Îáû÷íî ýòîò ââîä íàáèðàåòñÿ ïîëüçîâàòå-
ëåì (èëè ÷èòàåòñÿ èç ôàéëà, åñëè ïðèìåíÿåòñÿ ïåðåíàïðàâëåíèå ïîòî-
êà). Äëÿ ÷òåíèÿ ïîëüçîâàòåëüñêîãî ââîäà ñóùåñòâóåò êîìàíäà read. Íà
ðèñ. 26 ïðèâåäåíà ïðîãðàììà Hello, World, êîòîðàÿ ÷èòàåò ââîä èç ïîòîêà
STDIN, êîòîðûì, êàê ïðàâèëî, ÿâëÿåòñÿ êëàâèàòóðà:

Ðèñ. 26: Ìîäèôèöèðîâàííàÿ ïðîãðàììà Hello, World

 ýòîé ïðîãðàììå ïðèñóòñòâóþò òðè íîâûõ àñïåêòà, ïîäëåæàùèõ


îáñóæäåíèþ:

- Èñïîëüçîâàíà íîâàÿ îïöèÿ êîìàíäû echo. Îïöèÿ -n îòìåíÿåò ïå-


÷àòü ñèìâîëà íîâîé ñòðîêè, êîòîðûé îáû÷íî ñîïðîâîæäàåò ñòðîêó,
âûâîäèìóþ îïåðàòîðîì echo. Â ðåçóëüòàòå êóðñîð îñòàåòñÿ â òîé
æå ñòðîêå, ÷òî è ôðàçà Please enter your name:.

- Êîìàíäà read ÷èòàåò ââîä èç ïîòîêà STDIN, â äàííîì ñëó÷àå 


ñ êëàâèàòóðû. Ïîëüçîâàòåëü ââîäèò ñòðîêó òåêñòà. Ïîñëå íàæàòèÿ
êëàâèøè Enter , read ñîõðàíÿåò åå â ïåðåìåííîé name. Êîìàíäà
109

read ïðåäïîëàãàåò èñïîëüçîâàíèå êàâû÷åê, ïîýòîìó ñòðîêà ñîõðà-


íÿåòñÿ òî÷íî â òîì âèäå, â êàêîì åå ââåë ïîëüçîâàòåëü, ñî âñåìè
ïóñòûìè ñèìâîëàìè.

- Êîìàíäà echo èñïîëüçóåòñÿ äëÿ âûâîäà ñòðîêè Hello, çà êîòîðîé


ñëåäóåò ñîäåðæèìîå ïåðåìåííîé name.

Êîìàíäà read â êà÷åñòâå àðãóìåíòîâ ìîæåò èìåòü íåñêîëüêî ïå-


ðåìåííûõ (ðèñ. 27).  ýòîì ñëó÷àå âñÿêèé ïóñòîé ñèìâîë òðàêòóåòñÿ
êàê ñèìâîë-ðàçäåëèòåëü ìåæäó çíà÷åíèÿìè, ïðèñâàèâàåìûìè ðàçíûì
ïåðåìåííûì.

Ðèñ. 27: Ââîä äàííûõ â ïåðåìåííóþ

Íå èìååò çíà÷åíèÿ, ñêîëüêî ïóñòûõ ñèìâîëîâ ïðèñóòñòâóåò âî ââî-


äå. Ïðè ïðèñâîåíèè çíà÷åíèé íåñêîëüêèì ïåðåìåííûì read èíòåðïðåòè-
ðóåò ëþáîå ÷èñëî ñìåæíûõ ïóñòûõ ñèìâîëîâ êàê îäèí ðàçäåëèòåëü àðãó-
ìåíòîâ. Åñëè ÷èñëî àðãóìåíòîâ, ïðî÷èòàííûõ èç ïîòîêà ââîäà, ìåíüøå,
÷åì ÷èñëî ïåðåìåííûõ â ñïèñêå, îñòàâøèìñÿ ïåðåìåííûì íå ïðèñâàè-
âàåòñÿ íèêàêèõ çíà÷åíèé. Ñ äðóãîé ñòîðîíû, åñëè àðãóìåíòîâ áîëüøå,
÷åì ïåðåìåííûõ, âñå îñòàâøèåñÿ çíà÷åíèÿ ïðèñâàèâàþòñÿ ïîñëåäíåé ïå-
ðåìåííîé.

4.1.4 Öèêëû, ëîãè÷åñêèå îïåðàòîðû

 íåêîòîðûõ ñëó÷àÿõ òðåáóåòñÿ ïîâòîðÿòü äåéñòâèå äî òåõ ïîð,


ïîêà îïðåäåëåííîå âûðàæåíèå íå ñòàíåò èñòèííûì (èëè, íàîáîðîò, ïå-
ðåñòàíåò áûòü èñòèííûì). Çäåñü â èãðó âñòóïàþò îïåðàòîðû öèêëîâ.
110

Êîìàíäíûé èíòåðïðåòàòîð sh ïîääåðæèâàåò òðè âèäà öèêëè÷åñêèõ êîí-


ñòðóêöèé: while, until è for. Ðàññìîòðèì êàæäóþ èç íèõ.
Öèêë while âûïîëíÿåò îïåðàòîðû, çàêëþ÷åííûå â íåì, äî òåõ ïîð,
ïîêà óñëîâèå öèêëà ÿâëÿåòñÿ èñòèííûì. Ìîæíî ðàññóæäàòü è ïî-äðóãîìó:
öèêë while ïîâòîðÿåò ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ äî òåõ ïîð, ïîêà
óñëîâèå öèêëà íå ñòàíåò ëîæíûì. Åñëè óæå ïðè ïåðâîì ïðîõîäå öèê-
ëà óñëîâèå ëîæíî, îïåðàòîðû âíóòðè öèêëà âûïîëíÿòüñÿ íå áóäóò. Íà
ðèñ. 28 öèêë while èñïîëüçóåòñÿ äëÿ âûâîäà íà ýêðàí öåëûõ ÷èñåë îò 1
äî 20.

Ðèñ. 28: Öèêë while

 ýòîé ïðîãðàììå ïðåäñòàâëåíû íåñêîëüêî íîâûõ êîíöåïöèé: Ïå-


ðåìåííîé i ïðèñâàèâàåòñÿ íà÷àëüíîå çíà÷åíèå 1. i ÷àñòî ïðèìåíÿåòñÿ
êàê ñ÷åò÷èê öèêëà (ýòî äàâíî ñëîæèâøàÿñÿ òðàäèöèÿ), ïîýòîìó çäåñü
íåò íåîáõîäèìîñòè èñïîëüçîâàòü îïèñàòåëüíîå èìÿ. Êîìàíäà while ñî-
äåðæèò óñëîâèå, çàêëþ÷åííîå â êâàäðàòíûå ñêîáêè. Íà ñàìîì äåëå, îíè
ïðåäñòàâëÿþò ñîáîé ñîêðàùåííóþ çàïèñü êîìàíäû ïîä íàçâàíèåì test.
Ïîñëåäíÿÿ ÷àñòî èñïîëüçóåòñÿ â ñöåíàðèÿõ êîìàíäíîãî èíòåðïðåòàòîðà.
Ïðîáåë ìåæäó êâàäðàòíûìè ñêîáêàìè è òåñòèðóåìûì óñëîâèåì ÿâëÿåòñÿ
îáÿçàòåëüíûì. Åãî îòñóòñòâèå ïðèâåäåò ê îøèáêå.
Êîìàíäà test èñïîëüçóåò äîñòàòî÷íî ïðîçðà÷íûé ñèíòàêñèñ, áëèç-
êèé ê Ôîðòðàíó: -le â äàííîì ïðèìåðå îáîçíà÷àåò "ìåíüøå èëè ðàâíî".
Òàêèì îáðàçîì, öèêë âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà çíà÷åíèå ïåðåìåííîé
i ìåíüøå èëè ðàâíî 20. Îïåðàòîðû ñðàâíåíèÿ, ïîääåðæèâàåìûå äàííîé
êîìàíäîé, ïðèâåäåíû íèæå:

-eq Èñòèíà, åñëè îïåðàíäû ðàâíû

-ne Èñòèíà, åñëè îïåðàíäû íå ðàâíû


111

-gt Èñòèíà, åñëè ïåðâûé îïåðàíä áîëüøå âòîðîãî

-ge Èñòèíà, åñëè ïåðâûé îïåðàíä áîëüøå èëè ðàâåí âòîðîìó

-lt Èñòèíà, åñëè ïåðâûé îïåðàíä ìåíüøå âòîðîãî

-le Èñòèíà, åñëè ïåðâûé îïåðàíä ìåíüøå èëè ðàâåí âòîðîìó

Öèêë until ïî ñìûñëó ïðîòèâîïîëîæåí öèêëó while. Îí âûïîëíÿåò


ïîñëåäîâàòåëüíîñòü îïåðàöèé äî òåõ ïîð, ïîêà óñëîâèå íå ñòàíåò èñòèí-
íûì.  ýòîì ñëó÷àå öèêë çàâåðøàåòñÿ. Åñëè óñëîâèå èñòèííî óæå ïðè
ïåðâîì çàïóñêå, îïåðàòîðû â òåëå öèêëà íå çàïóñêàþòñÿ.
Öèêëû while è until î÷åíü ïîõîæè. Êàê ïðàâèëî, ëþáîé èç íèõ
ìîæíî èñïîëüçîâàòü â ïðîãðàììå è äîáèâàòüñÿ îäíîãî è òîãî æå ðå-
çóëüòàòà, èçìåíÿÿ óñëîâèå. Íàïðèìåð, ïðåäûäóùóþ ïðîãðàììó ìîæíî
ïåðåïèñàòü, çàìåíèâ öèêë while íà until. Ïðè ýòîì â ñòðîêå 4 ïîòðåáó-
åòñÿ ëèøü äâà èçìåíåíèÿ:
until [ $i -gt 20 ]
Ïðîãðàììà âûïîëíÿåò òó æå ôóíêöèþ. Åäèíñòâåííîå ðàçëè÷èå çà-
êëþ÷àåòñÿ â òîì, ÷òî òåïåðü öèêë âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà çíà÷åíèå
ïåðåìåííîé i íå ñòàíåò áîëüøèì 20, òîãäà êàê öèêë while âûïîëíÿëñÿ äî
òåõ ïîð, ïîêà i áûëî ìåíüøå èëè ðàâíî 20.  îáîèõ ñëó÷àÿõ ïðîãðàììà
äàåò îäèí è òîò æå ðåçóëüòàò.
Öèêëû while è until ïîçâîëÿþò ðàáîòàòü ñ ëîãè÷åñêèìè îïåðàòîðà-
ìè AND/OR. Ëîãè÷åñêîå âûðàæåíèå AND âîçâðàùàåò çíà÷åíèå èñòèíà
ëèøü â òîì ñëó÷àå, êîãäà îáà îïåðàíäà èñòèííû, à âûðàæåíèå OR, êîãäà
ëèøü îäèí èç îïåðàíäîâ èìååò çíà÷åíèå èñòèíà. Íà ðèñ. 29 ïðèâåäåí
ïðèìåð êîäà ñ ëîãè÷åñêèì îïåðàòîðîì AND:
 ýòîì ïðèìåðå îïåðàòîð echo íå çàïóñêàåòñÿ, âåäü õîòÿ $VarA
ðàâíî 1, $VarB íå áîëüøå 7. Ïîñêîëüêó öèêë while â äàííîì ñëó÷àå
òðåáóåò, ÷òîáû îáà óñëîâèÿ áûëè èñòèííûìè, òåñò íå ïðîõîäèò è âîçâðà-
ùàåò çíà÷åíèå 0 (ëîæü).
Íà ðèñ. 30 ïðèâåäåí áëîê êîäà, àíàëîãè÷íûé ïðåäûäóùåìó, çà èñ-
êëþ÷åíèåì òîãî, ÷òî â öèêëå while èñïîëüçóåòñÿ îïåðàòîð OR. Òåïåðü
äîñòàòî÷íî, ÷òîáû ëèøü îäíî âûðàæåíèå áûëî èñòèííûì:
112

Ðèñ. 29: Öèêë while ñ ëîãè÷åñêèìè îïåðàòîðàìè

Ðèñ. 30: Öèêë while ñ ëîãè÷åñêèìè îïåðàòîðàìè

 äàííîì ñëó÷àå äîñòàòî÷íî, ÷òîáû òîëüêî îäíî èç óñëîâèé äà-


âàëî çíà÷åíèå èñòèíà. À ïîñêîëüêó $VarA paâíî 1, ïðîãðàììà áóäåò
âûïîëíÿòü áåñêîíå÷íûé öèêë ñ îïåðàòîðîì echo. (×òîáû ïðåðâàòü öèêë,
íåîáõîäèìî íàæàòü êîìáèíàöèþ êëàâèø Ctrl + C .)
Öèêë for îòëè÷àåòñÿ îò while è until. Âìåñòî ïðîâåðêè èñòèííîñòè
óñëîâèÿ öèêë for âûïîëíÿåò îïåðàòîðû âíóòðè òåëà öèêëà â çàâèñèìîñòè
îò êîëè÷åñòâà àðãóìåíòîâ â ñïèñêå. Öèêë for ñîäåðæèò ïåðåìåííóþ,
êîòîðàÿ ïðè êàæäîé èòåðàöèè ïîëó÷àåò ñëåäóþùèé àðãóìåíò èç ñïèñêà.
Öèêë for ïðîäîëæàåòñÿ äî òåõ ïîð, ïîêà ñïèñîê íå áóäåò èñ÷åðïàí. Ïîñëå
ýòîãî óïðàâëåíèå ïåðåäàåòñÿ ïåðâîìó îïåðàòîðó, ñëåäóþùåìó çà òåëîì
öèêëà. Íà ðèñ.31 ïðèâåäåí ïðèìåð ïðîãðàììû, ãäå öèêë for è êîìàíäà
bc èñïîëüçóþòñÿ äëÿ âûâîäà êâàäðàòíûõ êîðíåé ÷èñåë îò 10 äî 20.
 ýòîì ëèñòèíãå ïðåäñòàâëåíà íîâàÿ êîìàíäà jot. Îíà ïðîèçâîäèò
íàáîð ïîëåçíûõ îïåðàöèé ñ ÷èñëàìè, âêëþ÷àÿ ïå÷àòü ñòðîêè ÷èñåë è
ãåíåðèðîâàíèå ñëó÷àéíûõ çíà÷åíèé.  äàííîì ñëó÷àå ïå÷àòàåò ñòðîêó
èç 10 ÷èñåë, íà÷èíàÿ ñ 10 è çàêàí÷èâàÿ 20 (10 10 20). Îïåðàòîð öèêëà
for ïîñëåäîâàòåëüíî ïðèñâàèâàåò êàæäîå èç çíà÷åíèé ïåðåìåííîé num
113

Ðèñ. 31: Öèêë for

è âûïîëíÿåò îïåðàòîðû â òåëå öèêëà.


Êîìàíäà bc èñïîëüçóåòñÿ äëÿ âû÷èñëåíèÿ êâàäðàòíîãî êîðíÿ èç òå-
êóùåãî çíà÷åíèÿ ïåðåìåííîé $num. Âûðàæåíèå scale=5 óêàçûâàåò bc,
÷òî â âûâîäå ÷èñëà ïîñëå äåñÿòè÷íîé òî÷êè ñëåäóåò ñîõðàíèòü ïÿòü çíà-
÷àùèõ öèôð. Îáðàòèòå âíèìàíèå íà òî÷êó ñ çàïÿòîé ïîñëå âûðàæåíèÿ
scale. Ýòîò çíàê ïðåïèíàíèÿ èñïîëüçóåòñÿ äëÿ ðàçäåëåíèÿ îïåðàòîðîâ,
ñîäåðæàùèõñÿ â îäíîé ñòðîêå. Ôóíêöèÿ sqrt êîìàíäû bc âîçâðàùàåò
êâàäðàòíûé êîðåíü èç çàäàííîãî ÷èñëà. Ïîñêîëüêó èíòåðïðåòàòîð çàìå-
íÿåò ïåðåìåííóþ åå çíà÷åíèåì, bc ïîëó÷àåò ÷èñëî, à íå èìÿ ïåðåìåííîé.
 çàêëþ÷åíèå, âûâîä êîìàíäû ïåðåíàïðàâëÿåòñÿ êîìàíäå bc. Îïöèÿ -l
óêàçûâàåò íà íåîáõîäèìîñòü ïðåäâàðèòåëüíîé çàãðóçêè ìàòåìàòè÷åñêîé
áèáëèîòåêè, ãäå ñîäåðæèòñÿ ôóíêöèÿ sqrt.
Êîìàíäà shift ïîõîæà íà öèêë for. ×òîáû âûïîëíèòü öèêë îäèí
ðàç äëÿ êàæäîãî àðãóìåíòà êîìàíäíîé ñòðîêè, ïåðåäàííîãî ñöåíàðèþ,
ìîæíî âîñïîëüçîâàòüñÿ îïåðàòîðîì while è êîìàíäîé shift.
Êàê îòìå÷àëîñü ðàíåå, àðãóìåíòû êîìàíäíîé ñòðîêè õðàíÿòñÿ â
ïåðåìåííûõ îò $1 äî $9. Êàæäûé çàïóñê êîìàíäû shift ñäâèãàåò ïåðå-
ìåííûå íà îäíó ïîçèöèþ âëåâî. Ýòî çíà÷èò, íàïðèìåð, ÷òî èíôîðìàöèÿ,
ñîõðàíåííàÿ â $1 îòáðàñûâàåòñÿ, à çíà÷åíèå ïåðåìåííîé $2 ïðèñâàèâà-
åòñÿ $1. Ïðèìåð íà ðèñ. 32.
Ïåðåìåííàÿ $# ñîäåðæèò îáùåå ÷èñëî àðãóìåíòîâ êîìàíäíîé ñòðî-
êè. Öèêë while âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà çíà÷åíèå $# íå ñòàíîâèòñÿ
ðàâíûì íóëþ. Åñëè $# ðàâíî íóëþ, ñëåäîâàòåëüíî, âñå àðãóìåíòû èñ-
ïîëüçîâàíû, ïîñëå ÷åãî öèêë çàâåðøàåòñÿ. Îáðàòèòå âíèìàíèå, ÷òî äëÿ
ïå÷àòè ñòðîêîâîãî çíà÷åíèÿ $1 íà ýêðàíå ñèìâîë $ íåîáõîäèìî ýêðàíè-
ðîâàòü ñèìâîëîì îáðàòíîé êîñîé ÷åðòû, ïîñêîëüêó ñàì ïî ñåáå îí èìååò
114

Ðèñ. 32: Èñïîëüçîâàíèå êîìàíäû shift

ñïåöèàëüíîå çíà÷åíèå.
Ïîñëå âûïîëíåíèÿ êîìàíäû shift ïåðåìåííûå ñäâèãàþòñÿ íà îäíó
ïîçèöèþ âëåâî. Çíà÷åíèå $1 îòáðàñûâàåòñÿ (îíî áîëüøå íåäîñòóïíî), $2
ñìåùàåòñÿ â $1, $3 â $2 è ò.ä.
Îäíèì èç ðàñïðîñòðàíåííûõ âàðèàíòîâ ïðèìåíåíèÿ êîìàíäû shift
(è öèêëîâ for) ÿâëÿåòñÿ îáðàáîòêà èìåí ôàéëîâ, çàäàííûõ êàê àðãóìåí-
òû êîìàíäíîé ñòðîêè, è âûïîëíåíèå îïåðàöèé íàä êàæäûì èç íèõ.
 ïðîãðàììèðîâàíèè ñöåíàðèåâ èñïîëüçóþòñÿ îïåðàòîðû true è
false. Èõ åäèíñòâåííûì íàçíà÷åíèåì ÿâëÿåòñÿ âîçâðàùåíèå çíà÷åíèÿ
èñòèíà (0) èëè ëîæü (1), ñîîòâåòñòâåííî. Èíîãäà âîçíèêàåò íåîáõîäè-
ìîñòü ïðîãðàììíî ïðåðâàòü áåñêîíå÷íûé öèêë. Äëÿ ýòîãî èñïîëüçóåòñÿ
îäèí èç äâóõ ñëåäóþùèõ îïåðàòîðîâ: break èëè continue. Îïåðàòîð
break ïðåðûâàåò öèêë íåìåäëåííî, íåçàâèñèìî îò òîãî, âûïîëíåíî ëè
óñëîâèå îêîí÷àíèÿ öèêëà. Îïåðàòîð continue çàñòàâëÿåò öèêë ïåðåéòè ê
íà÷àëó è ïðîâåðèòü óñëîâèå. Îïåðàòîðû öèêëà, ñëåäóþùèå çà continue,
íå âûïîëíÿþòñÿ.
Óñëîâíûå îïåðàòîðû âûïîëíÿþòñÿ â òîì ñëó÷àå, êîãäà îïðåäåëåí-
íîå óñëîâèå (èëè íåñêîëüêî óñëîâèé) èñòèííî. Îíè ìîãóò ïðèíèìàòü îäíó
èç òðåõ îáùèõ ôîðì: if, case è AND/OR.
Îïåðàòîðû if ïðîâåðÿþò ÷èñëîâûå âûðàæåíèÿ. Åñëè óñëîâèå èñ-
òèííî, âûïîëíÿþòñÿ îïåðàòîðû âíóòðè áëîêà if. Åñëè îíî ëîæíî, åñòü
äâå âîçìîæíîñòè:

- Íè÷åãî íå ïðîèñõîäèò. Îïåðàòîðû âíóòðè áëîêà íå çàïóñêàþòñÿ, è


ïðîãðàììà ïðîäîëæàåò âûïîëíÿòüñÿ äàëüøå.
115

- Åñëè â áëîê if âêëþ÷åí îïåðàòîð else, âûðàæåíèÿ èç ïîñëåäíåãî


âûïîëíÿþòñÿ, åñëè óñëîâèå ëîæíî. Äðóãèìè ñëîâàìè, ïîòîê óïðàâ-
ëåíèÿ ïðîãðàììû ñëåäóåò ïðàâèëó: "Ñäåëàòü ýòî, åñëè óñëîâèå èñ-
òèííî, èëè òî, åñëè îíî ëîæíî, íî íå îáà äåéñòâèÿ îäíîâðåìåííî".

Íàïðèìåð, íà ðèñ. 33 îïåðàòîð if èñïîëüçóåòñÿ äëÿ ïðîâåðêè êî-


ëè÷åñòâà àðãóìåíòîâ êîìàíäíîé ñòðîêè, ïåðåäàííûõ ïðîãðàììå. Åñëè
èõ ÷èñëî áîëüøå èëè ðàâíî 1, ïðîãðàììà âûïîëíÿåò îïåðàöèè âíóòðè
áëîêà. Åñëè îíè îòñóòñòâóþò, ïðîãðàììà çàâåðøàåò ðàáîòó, íå âûïîëíÿÿ
íèêàêèõ äåéñòâèé.

Ðèñ. 33: Óñëîâíûé îïåðàòîð if

Îïåðàòîð if ïðîâåðÿåò ÷èñëî àðãóìåíòîâ êîìàíäíîé ñòðîêè, èñ-


ïîëüçóÿ ïåðåìåííóþ $#, â êîòîðîé îíî ñîäåðæèòñÿ. Åñëè îíî áîëüøå
èëè ðàâíî 1, âûïîëíÿþòñÿ îïåðàòîðû, çàêëþ÷åííûå ìåæäó êëþ÷åâûìè
ñëîâàìè then è . (  ýòî if íàîáîðîò. Ýòîò îïåðàòîð îòìå÷àåò êîíåö
áëîêà.) Åñëè íåò, óïðàâëåíèå ïåðåäàåòñÿ îïåðàòîðó, ñëåäóþùåìó çà . Â
äàííîì ñëó÷àå îí èíôîðìèðóåò ïîëüçîâàòåëÿ î âûõîäå èç ïðîãðàììû.
Ïðîãðàììó ìîæíî ñäåëàòü áîëåå äðóæåñòâåííîé ê ïîëüçîâàòåëþ,
äîáàâèâ îïåðàòîð else, ñîîáùàþùèé ïîëüçîâàòåëþ, êàê ñëåäóåò çàïóñ-
êàòü ïðîãðàììó, âìåñòî áåçìîëâíîãî âûõîäà èç íåå(ðèñ. 34).
Åñëè êîëè÷åñòâî àðãóìåíòîâ êîìàíäíîé ñòðîêè ìåíüøå 1, ïðîãðàì-
ìà âûïîëíÿåò âûðàæåíèÿ â îïåðàòîðå else è âûâîäèò ïîëüçîâàòåëþ ñîîá-
ùåíèå (ïåðåìåííàÿ $0 ñîäåðæèò èìÿ çàïóùåííîé ïðîãðàììû). Îáðàòèòå
âíèìàíèå íà ñòðîêó, ãäå ïðîãðàììà ïðåêðàùàåò ðàáîòó ñ êîäîì çàâåð-
øåíèÿ, ðàâíûì 1 (âûïîëíåíèþ ïðîãðàììû ïîìåøàëè îøèáêè).
×àñòü then îïåðàòîðà if ÿâëÿåòñÿ îáÿçàòåëüíîé, à ÷àñòü else  íåò.
Êàê âû âèäåëè â ïðèìåðå, îïåðàòîðû â áëîêå then âûïîëíÿþòñÿ òîãäà,
116

Ðèñ. 34: if/else

êîãäà óñëîâèå èñòèííî. Íî èíîãäà âîçíèêàåò íåîáõîäèìîñòü âûïîëíèòü


äåéñòâèÿ ëèøü òîãäà, êîãäà âûðàæåíèå ëîæíî.  ýòîì ñëó÷àå íóæíî
âîñïîëüçîâàòüñÿ äâîåòî÷èåì (ðèñ. 35).

Ðèñ. 35: Èãíîðèðîâàíèå îïåðàòîðà then

 íåêîòîðûõ ñëó÷àÿõ âîçíèêàåò íåîáõîäèìîñòü ïðîâåðèòü äâà èëè


íåñêîëüêî ðàçíûõ óñëîâèé è ïðåäïðèíÿòü ðàçëè÷íûå äåéñòâèÿ â çàâè-
ñèìîñòè îò ðåçóëüòàòîâ êàæäîãî ýòàïà. Äëÿ ýòèõ öåëåé èñïîëüçóåòñÿ
îïåðàòîð elif. elif ÿâëÿåòñÿ àááðåâèàòóðîé îò else if. Êîãäà èñïîëüçó-
åòñÿ îïåðàòîð elif, ïðîãðàììà âíà÷àëå âûïîëíÿåò îïåðàòîð if. Åñëè åãî
óñëîâèå èñòèííî, âûïîëíÿåòñÿ åãî êîä, à çàòåì óïðàâëåíèå ïåðåäàåòñÿ
ñëåäóþùåìó îïåðàòîðó (ò.å. îïåðàòîðó, ðàñïîëîæåííîìó ïîñëå ). Åñëè
óñëîâèå ëîæíî, ïðîâåðÿåòñÿ óñëîâèå â ïåðâîì îïåðàòîðå elif. Åñëè îíî
èñòèííî, âûïîëíÿþòñÿ îïåðàòîðû èç åãî áëîêà, è ïðîãðàììà ïåðåõîäèò
ê êîíöó áëîêà if. Åñëè îíî ëîæíî, ïðîâåðÿåòñÿ ñëåäóþùèé îïåðàòîð
elif è ò.ä. Ôàêòè÷åñêè, óñëîâèÿ ïðîâåðÿþòñÿ äî òåõ ïîð, ïîêà îäíî èç
íèõ íå äàñò çíà÷åíèå èñòèíà. Åñëè òàêîãî óñëîâèÿ íåò, íè÷åãî íå ïðîèñ-
õîäèòëèáî çàïóñêàþòñÿ îïåðàòîðû, çàêëþ÷åííûå â áëîêå else (åñëè îí
ïðèñóòñòâóåò). Îïåðàòîðû if ïîääåðæèâàþò òàêæå ëîãè÷åñêèå îïåðàòî-
ðû AND (&&) è OR (||).
Åñëè îäíó è òó æå ïåðåìåííóþ íåîáõîäèìî ïðîâåðèòü â ðàçëè÷íûõ
117

óñëîâíûõ îïåðàòîðàõ, ñóùåñòâóåò áîëåå ýôôåêòèâíûé ìåòîä, ÷åì ïðè-


ìåíåíèå íåñêîëüêèõ îïåðàòîðîâ if. Îïåðàòîð case, àðãóìåíòîì êîòîðîãî
ÿâëÿåòñÿ ïåðåìåííàÿ, ñîäåðæèò áëîêè, âûïîëíåíèå êîòîðûõ çàâèñèò îò
çíà÷åíèÿ ïåðåìåííîé (ðèñ. 36).

Ðèñ. 36: Îïåðàòîð case

Êîìàíäà jot èñïîëüçóåòñÿ äëÿ òîãî, ÷òîáû ñãåíåðèðîâàòü ñëó÷àé-


íîå ÷èñëî îò 1 äî 4. Äëÿ áëîêà case ïðèìåíÿåòñÿ ñëåäóþùèé ñèíòàêñèñ:
case variable in, ãäå variable  èìÿ ïåðåìåííîé, çíà÷åíèå êîòîðîé ïðîâå-
ðÿåòñÿ. Ñëåâà îò ñêîáêè íàõîäèòñÿ óñëîâèå, îáðàáàòûâàåìîå îïåðàòîðîì
case. Ïîäîáíî îïåðàòîðó if, îïåðàòîð case îñòàíàâëèâàåòñÿ íà ïåðâîì æå
ñîâïàäåíèè, çàïóñêàåò îïåðàòîðû èç ñîîòâåòñòâóþùåãî áëîêà, à çàòåì ïå-
ðåõîäèò ê îïåðàòîðó esac (ýòî case íàîáîðîò). Êîíåö êàæäîãî óñëîâíîãî
áëîêà îáîçíà÷àåòñÿ äâîéíîé òî÷êîé ñ çàïÿòîé. Îíà ìîæåò íàõîäèòüñÿ â
îòäåëüíîé ñòðîêå èëè æå â ñòðîêå ñ ïîñëåäíèì îïåðàòîðîì áëîêà.
Îïåðàòîð case ïîääåðæèâàåò ñèìâîëû-çàìåñòèòåëè (ðèñ. 37.
 ýòîì ôðàãìåíòå êîäà ïðîâåðÿåòñÿ ðàâåíñòâî ïåðåìåííîé $num
çíà÷åíèþ 1 èëè 2. Åñëè ýòî òàê, òî âûïîëíÿþòñÿ ñîîòâåòñòâóþùèå îïå-
ðàòîðû. Åñëè íåò, ïîñëåäíèì óñëîâèåì ÿâëÿåòñÿ ñðàâíåíèå ñ ñèìâîëîì-
çàìåñòèòåëåì, êîòîðûé ñîâïàäàåò ñ ëþáûì çíà÷åíèåì. Ïîýòîìó åñëè ïå-
ðåìåííàÿ $num íå ðàâíà íè 1, íè 2, èñïîëíÿåòñÿ ïîñëåäíèé ôðàãìåíò
êîäà. Êðîìå òîãî, case ïîääåðæèâàåò è äðóãèå ñèìâîëû-çàìåñòèòåëè,
118

Ðèñ. 37: Èñïîëüçîâàíèå case ñ ñèìâîëàìè çàìåñòèòåëÿìè

âêëþ÷àÿ ? (êîòîðûé ðàáîòàåò òî÷íî òàê æå, êàê è â êîìàíäíîé ñòðîêå èí-
òåðïðåòàòîðà), è ñèìâîë êîíâåéåðà, ïîçâîëÿþùèé ïåðåäàâàòü îïåðàòîðó
case äèàïàçîí îïöèé. Íàïðèìåð, Y | ó ñîâïàäàåò ñ Y èëè ó ïðè ïðîâåðêå
óñëîâèÿ. Íåñêîëüêî ñëåäóþùèõ ïîäðÿä ñèìâîëîâ ñëåäóåò çàêëþ÷àòü â
êâàäðàòíûå ñêîáêè. Òàê, íàïðèìåð, [Yy]|[Yy][Ee][Ss] äàåò ñîâïàäåíèå
ñî ñòðîêîé ó èëè yes, ñîäåðæàùåé ëþáóþ êîìáèíàöèþ ñèìâîëîâ âåðõíåãî
èëè íèæíåãî ðåãèñòðà.
Ëîãè÷åñêèå óñëîâíûå îïåðàòîðû AND/OR â íåêîòîðûõ ñëó÷àÿõ
çàìåíÿþò îïåðàòîðû if. Êîä çàâåðøåíèÿ ïåðâîé êîìàíäû èñïîëüçóåòñÿ
êàê óñëîâèå çàïóñêà âòîðîé. Íàïðèìåð:
tar cvfz backup.tar.gz doouments/* && rm -r documents
Ýòà êîìàíäà îçíà÷àåò ñëåäóþùåå: "Åñëè ïåðâàÿ îïåðàöèÿ ïðîøëà
óñïåøíî, âûïîëíèòü âòîðóþ. Åñëè íåò  âòîðàÿ êîìàíäà íå âûïîëíÿ-
åòñÿ". Äðóãèìè ñëîâàìè: "Íåîáõîäèìî âûïîëíèòü êîìàíäû À è Â. Íî
åñëè êîìàíäà À íåâûïîëíèìà, òî íå ñëåäóåò èñïîëíÿòü è Â". Â äàííîì
ñëó÷àå ïåðâàÿ êîìàíäà àðõèâèðóåò âñå ôàéëû èç êàòàëîãà documents â
ôàéë backup.tar.gz. Åñëè ýòîò ïðîöåññ çàâåðøàåòñÿ óñïåøíî (êîìàíäà tar
âîçâðàùàåò êîä 0), âûïîëíÿåòñÿ êîìàíäà ïîñëå îïåðàòîðà &&, êîòîðàÿ
óäàëÿåò êàòàëîã documents. Åñëè æå ïðîöåññ àðõèâèðîâàíèÿ íå çàâåðøåí
óñïåøíî (êîìàíäà tar âîçâðàùàåò êîä, îòëè÷íûé îò 0), êîìàíäà ïîñëå
&& íå èñïîëíÿåòñÿ (ïîíÿòíî, ÷òî íåò ñìûñëà óäàëÿòü êàòàëîã, åñëè îí
íå áûë êîððåêòíî çààðõèâèðîâàí).
119

Ñèìâîëîì || îáîçíà÷àåòñÿ îïåðàòîð OR. Îí îçíà÷àåò ñëåäóþùåå:


"Åñëè À íåâûïîëíèìî, èñïîëíèòü Â. Íî åñëè À çàâåðøèëîñü óñïåøíî, Â
íå âûïîëíÿòü". Íàïðèìåð:
tar cvfz backup.tar.gz documents/2000/* || echo "Archive
operation failed."
 ýòîì ñëó÷àå, åñëè îïåðàöèÿ àðõèâèðîâàíèÿ çàâåðøàåòñÿ óñïåøíî
(tar âîçâðàùàåò 0), êîìàíäà ïîñëå îïåðàòîðà || íå çàïóñêàåòñÿ. Åñëè
æå íåò (tar âîçâðàùàåò çíà÷åíèå, îòëè÷íîå îò 0), âûïîëíÿåòñÿ êîìàíäà,
óêàçàííàÿ ïîñëå ||,  íà ýêðàí âûâîäèòñÿ ñîîáùåíèå îá îøèáêå.

4.1.5 Ôóíêöèè è çàâåðøåíèå ñöåíàðèÿ

Ôóíêöèè ïðåäñòàâëÿþò ñîáîé ãðóïïû îïåðàòîðîâ, âûçûâàåìûå îä-


íîé êîìàíäîé. Èõ ìîæíî ðàññìàòðèâàòü êàê "ìèíèïðîãðàììû âíóòðè
ïðîãðàìì". Èñïîëüçîâàíèå ôóíêöèé â ñöåíàðèÿõ îáëåã÷àåò ïðîãðàììè-
ðîâàíèå ïî äâóì ïðè÷èíàì. Ïðåæäå âñåãî, åñëè îïðåäåëåííûé íàáîð îïå-
ðàöèé òðåáóåòñÿ âûïîëíèòü â íåñêîëüêèõ ìåñòàõ ïðîãðàììû, äîñòàòî÷íî
âîñïîëüçîâàòüñÿ ëèøü îäíîé êîìàíäîé  èìåíåì ôóíêöèè. Âî-âòîðûõ,
åñëè âû çàõîòèòå èçìåíèòü òî, êàê èñïîëíÿåòñÿ îïåðàöèÿ, äîñòàòî÷íî
áóäåò âíåñòè èçìåíåíèÿ ëèøü â îäíîì ôðàãìåíòå êîäà  â òåëå ôóíêöèè.
Íà ðèñ. 38 ïðèâåäåí ïðèìåð ôóíêöèè, êîòîðàÿ óäàëÿåò âðåìåííûå ôàéëû
ïðè çàâåðøåíèè ðàáîòû ñöåíàðèÿ. Çäåñü æå ïîêàçàíî, êàê âûçûâàåòñÿ ýòà
ôóíêöèÿ.
Ïðè ñîçäàíèè ôóíêöèè çàäàåòñÿ åå èìÿ, çà êîòîðûì ñëåäóþò êðóã-
ëûå ñêîáêè è îòêðûâàþùàÿ ôèãóðíàÿ ñêîáêà. Âñå, ÷òî íàõîäèòñÿ ìåæ-
äó ôèãóðíûìè ñêîáêàìè, ïðåäñòàâëÿåò ñîáîé òåëî ôóíêöèè. Ôóíêöèÿ
âûçûâàåòñÿ òî÷íî òàê, êàê è ëþáàÿ êîìàíäà,  ïî èìåíè. Ïðè ýòîì
âûïîëíÿþòñÿ âñå îïåðàòîðû, çàêëþ÷åííûå â ôèãóðíûå ñêîáêè.
Ìåæäó âûçîâîì ôóíêöèè è âûçîâîì äðóãîé ïðîãðàììû ñóùåñòâóåò
âàæíîå ðàçëè÷èå. Ôóíêöèÿ âûïîëíÿåòñÿ òåêóùèì èíòåðïðåòàòîðîì, à
îòäåëüíàÿ ïðîãðàììà çàïóñêàåòñÿ â äðóãîé êîïèè êîìàíäíîãî èíòåð-
ïðåòàòîðà. Ýòî çíà÷èò, ÷òî ôóíêöèÿì äîñòóïíû è ïåðåìåííûå ñðåäû,
è âíóòðåííèå ïåðåìåííûå âûçûâàþùåé åå ïðîãðàììû. Îòäåëüíîé ïðî-
ãðàììå, èñïîëíÿåìîé äðóãèì èíòåðïðåòàòîðîì, îíè íåäîñòóïíû.
120

Ðèñ. 38: Èñïîëüçîâàíèå ôóíêöèé

Áîëüøèíñòâî ïðîãðàìì â FreeBSD ïî îêîí÷àíèè ðàáîòû âîçâðàùà-


þò êîä çàâåðøåíèÿ. Ïðè óñïåøíîì çàâåðøåíèè ýòî 0. ×èñëî, îòëè÷íîå
îò 0, êàê ïðàâèëî, óêàçûâàåò íà îøèáêó. Ïðîãðàììû âîçâðàùàþò ðàçíûå
êîäû, â çàâèñèìîñòè îò âîçíèêøåé ïðîáëåìû. ×àñòî îá ýòîì ðàññêàçàíî
íà ñîîòâåòñòâóþùèõ ñòðàíèöàõ ñïðàâî÷íûõ ðóêîâîäñòâ.
Êîä çàâåðøåíèÿ ïîñëåäíåé êîìàíäû õðàíèòñÿ â ïåðåìåííîé "$?".
Ââåäèòå ñëåäóþùèå êîìàíäû è ïîïûòàéòåñü ïîíÿòü, ÷òî ñèñòåìà Âàì
ïûòàåòñÿ ñîîáùèòü:
ls
echo $?
ls -2
echo $?
 ïåðâîì ñëó÷àå ïåðåìåííàÿ $? óñòàíîâëåíà çíà÷åíèåì 0. Âî âòî-
ðîì  óêàçàíà íåâåðíàÿ îïöèÿ. Êîìàíäà ls âûäàåò ñîîáùåíèå îá îøèáêå
è óñòàíàâëèâàåò $? çíà÷åíèåì 1.
Êîä çàâåðøåíèÿ èñïîëüçóåòñÿ â ñöåíàðèÿõ äëÿ ïðèíÿòèÿ ðåøåíèé.
Òàêîé ïîäõîä ïðîäåìîíñòðèðîâàí â ïðèìåðå ñ ëîãè÷åñêèìè îïåðàòîðàìè
AND/OR. Â íåì áûëî ïîêàçàíî, êàê óñïåøíîå èëè íåóñïåøíîå âûïîë-
íåíèå îäíîé êîìàíäû ÿâëÿåòñÿ óñëîâèåì çàïóñêà äðóãîé. Ëîãè÷åñêèå
îïåðàòîðû AND/OR, ìîæíî çàìåíèòü îäíèì îïåðàòîðîì if (ðèñ. 39.
 ïîñëåäíåì ñëó÷àå ñêîìáèíèðîâàíû äâà ïðèìåðà èç ïðåäûäóùåãî
121

Ðèñ. 39: Ïåðåäà÷à êîäà çàâåðøåíèÿ îïåðàòîðó if

ðàçäåëà. Îïåðàòîð if ÷èòàåò êîä çàâåðøåíèÿ êîìàíäû tar. Åñëè îí ðàâåí


0, âûïîëíÿþòñÿ îïåðàòîðû èç áëîêà then, ò.å. êàòàëîã óäàëÿåòñÿ. Åñëè
æå îí îòëè÷åí îò 0, èñïîëíÿþòñÿ âûðàæåíèÿ â áëîêå else.
Äðóãîå ïîëåçíîå ïðèìåíåíèå ýòîãî ñâîéñòâà ñâÿçàíî ñ êîìàíäîé
test. Ðàíåå ìû óæå ðàññìàòðèâàëè, êàê êîìàíäà test èñïîëüçóåòñÿ ñ
ìàòåìàòè÷åñêèìè âûðàæåíèÿìè. Êðîìå òîãî, êîìàíäîé test ìîæíî ïîëü-
çîâàòüñÿ äëÿ ïðîâåðêè ñóùåñòâîâàíèÿ ôàéëà (ðèñ. 40.

Ðèñ. 40: Ïåðåäà÷à êîäà çàâåðøåíèÿ êîìàíäû test îïåðàòîðó if

Äàííûé ôðàãìåíò êîäà ïðîâåðÿåò ñóùåñòâîâàíèå ôàéëà "program.conf".


Åñëè ôàéë ñóùåñòâóåò, âîçâðàùàåòñÿ 0 è çàïóñêàåòñÿ áëîê then. Â äàí-
íîì ïðèìåðå ýòîò áëîê íå âûïîëíÿåò íèêàêèõ äåéñòâèé. (Îá ýòîì ãîâîðèò
ñèìâîë äâîåòî÷èÿ. Îñòàëüíàÿ ÷àñòü ñòðîêè  êîììåíòàðèé). Åñëè ôàéëà
íå ñóùåñòâóåò, âûðàæåíèå âîçâðàùàåò 1, ïîñëå ÷åãî èñïîëíÿåòñÿ áëîê
else, ãäå ôàéë ñîçäàåòñÿ ïîñðåäñòâîì êîìàíäû touch.
Êîìàíäà test ïîçâîëÿåò ïðîâåðèòü íå òîëüêî ñóùåñòâîâàíèå ôàéëà,
à è åãî àòðèáóòû. Âñå îïöèè êîìàíäû test è èõ çíà÷åíèå ïðèâåäåíû â
òàáëèöå 7.
Áîëüøèíñòâî ñöåíàðèåâ â íàøèõ ïðèìåðàõ óñòàíàâëèâàþò êîä çà-
âåðøåíèÿ, è òåïåðü Âû çíàåòå, äëÿ ÷åãî îí èñïîëüçóåòñÿ. Êàê Âû âèäåëè,
äëÿ âîçâðàòà çíà÷åíèÿ ïðèìåíÿåòñÿ îïåðàòîð exit. Åñëè êîä çàâåðøå-
íèÿ íå óêàçàí ÿâíî, ïðîãðàììà âîçâðàùàåò êîä ïîñëåäíåé âûïîëíåííîé
êîìàíäû. Îí ñîõðàíÿåòñÿ â ïåðåìåííîé $? òî÷íî òàê æå, êàê ýòî ïðîèñ-
õîäèò äëÿ ëþáîé ïðîãðàììû. Êîä çàâåðøåíèÿ ñöåíàðèÿ ìîãóò èñïîëüçî-
122

Òàáëèöà 7: Ïðîâåðêà àòðèáóòîâ ôàéëà â ñöåíàðèÿõ

Îïöèÿ Äåéñòâèå
-f Ôàéë ñóùåñòâóåò è ýòî îáû÷íûé ôàéë
-d Ôàéë ñóùåñòâóåò è ÿâëÿåòñÿ êàòàëîãîì
-s Ôàéë ñóùåñòâóåò è åãî ðàçìåð áîëüøå íóëÿ
-c Ôàéë ñóùåñòâóåò è ÿâëÿåòñÿ ñïåöèàëüíûì ôàéëîì ñèì-
âîëüíîãî óñòðîéñòâà
-b Ôàéë ñóùåñòâóåò è ÿâëÿåòñÿ ñïåöèàëüíûì ôàéëîì áëî÷íî-
ãî óñòðîéñòâà
-r Ôàéë ñóùåñòâóåò è äîñòóïåí äëÿ ÷òåíèÿ
-w Ôàéë ñóùåñòâóåò è äîñòóïåí äëÿ çàïèñè
-x Ôàéë ñóùåñòâóåò è äîñòóïåí äëÿ âûïîëíåíèÿ

âàòü äðóãèå ïðîãðàììû äëÿ ïðèíÿòèÿ ðåøåíèé. Îñîáåííî ýòî ïîëåçíî â


ñëó÷àå, êîãäà, íàïðèìåð, îäèí ñöåíàðèé âûçûâàåòñÿ èç äðóãîãî.
Êðîìå òîãî, ïîìíèòå, ÷òî Âàøè âîçìîæíîñòè íå îãðàíè÷åíû ëèøü
çíà÷åíèÿìè 0 è 1. Ìîæíî èñïîëüçîâàòü ëþáûå ÷èñëà. Æåëàòåëüíî âîç-
âðàùàòü êîä 0 â ñëó÷àå óñïåøíîãî çàâåðøåíèÿ, à äðóãèå çíà÷åíèÿ ïðè
âîçíèêíîâåíèè îøèáîê. Äëÿ îáðàáîòêè ðàçëè÷íûõ îøèáîê â îäíîé ïðî-
ãðàììå ìîæíî èñïîëüçîâàòü íåñêîëüêî êîäîâ çàâåðøåíèÿ. Ýòî ïîçâîëèò
ïðîãðàììå, âûçûâàþùåé ñöåíàðèé, ïðåäïðèíÿòü ðàçëè÷íûå äåéñòâèÿ.
Íà ðèñ. 41 ïðèìåð êîäà, ãäå èñïîëüçóåòñÿ íåñêîëüêî êîäîâ çàâåðøåíèÿ.

Ðèñ. 41: Íåñêîëüêî êîäîâ çàâåðøåíèÿ

Âíà÷àëå ñöåíàðèé ïðîâåðÿåò âîçìîæíîñòü ÷òåíèÿ ôàéëà program.conf.


123

Ïðè îòðèöàòåëüíîì ðåçóëüòàòå ïðîãðàììà çàâåðøàåò ðàáîòó ñ êîäîì 1.


Ïðè ïîëîæèòåëüíîì  ïåðåõîäèò ê ñëåäóþùåìó îïåðàòîðó if è ïûòàåòñÿ
ñîçäàòü ôàéë /tmp/program.lock. Åñëè ïðîöåññ ñîçäàíèÿ íå çàâåðøàåòñÿ
óñïåøíî, ïðîãðàììà ïðåêðàùàåò ðàáîòó ñ êîäîì 2.  çàêëþ÷åíèå, åñëè
îáå îïåðàöèè áûëè âûïîëíåíû óñïåøíî, ïðîãðàììà âûïîëíÿåò îñíîâíîé
áëîê è âîçâðàùàåò 0. Ýòîò ñöåíàðèé ìîæíî âûçûâàòü èç äðóãîé ïðî-
ãðàììû, ïðîâåðÿþùåé ñòàòóñ âûõîäà.  çàâèñèìîñòè îò åãî çíà÷åíèÿ
ðîäèòåëüñêàÿ ïðîãðàììà ìîæåò ïðåäïðèíèìàòü ðàçëè÷íûå äåéñòâèÿ.

4.2 Ïðîãðàììèðîâàíèå âî FreeBSD

4.2.1 Êîìïèëèðóåìûå ÿçûêè ïðîãðàììèðîâàíèÿ

Êàê Âû çíàåòå, êîìïüþòåð óìååò âûïîëíÿòü ïðîãðàììû òîëüêî â


âèäå ìàøèííîãî êîäà. Ìàøèííûé êîä ýòî ñèñòåìà êîìàíä, êîòîðàÿ âû-
ïîëíÿåòñÿ íåïîñðåäñòâåííî íà ïðîöåññîðå. Ýòîò ìàøèííûé êîä ñîñòîèò
èç íóëåé è åäèíèö, â êîòîðûõ ëåãêî çàïóòàòüñÿ, åñëè ïèñàòü ïðîãðàììó
íåïîñðåäñòâåííî íà ìàøèííîì êîäå. Âîò ïðèìåð ïðîãðàììû Hello, World
äëÿ àðõèòåêòóðû x86 (äëÿ íàãëÿäíîñòè ïåðåâåäåííûé èç äâîè÷íîé â
øåñòíàäöàòèðè÷íóþ ñèñòåìó)
BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9
CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Äëÿ îáëåã÷åíèÿ íàïèñàíèÿ ïðîãðàìì, áûëè ñîçäàíû ÿçûêè ïðî-
ãðàììèðîâàíèÿ è êîìïèëÿòîðû, êîòîðûå ïåðåâîäÿò èñõîäíûé êîä ïðî-
ãðàììû ïîíÿòíûé ÷åëîâåêó, â ìàøèííûé êîä, ïîíÿòíûé êîìïüþòåðó.
Ðàçóìååòñÿ ïðè êîìïèëÿöèè íåèçáåæíû ïîòåðè â ýôôåêòèâíîñòè ðàáîòû
êîäà, êîòîðàÿ êîìïåíñèðóåòñÿ ñêîðîñòüþ ðàçðàáîòêè.
Íåêîòîðûå êîìïèëÿòîðû (íàïðèìåð, Java) ïåðåâîäÿò ïðîãðàììó íå
â ìàøèííûé êîä, à â ïðîãðàììó íà íåêîòîðîì ñïåöèàëüíî ñîçäàííîì
íèçêîóðîâíåâîì ÿçûêå. Òàêîé ÿçûê èíòåðïðåòèðóåòñÿ âèðòóàëüíîé ìà-
øèíîé. Áàéò-êîä íå ÿâëÿåòñÿ ìàøèííûì êîäîì êàêîãî-ëèáî êîìïüþòåðà
è ìîæåò ïîðòèðîâàòüñÿ íà ðàçëè÷íûå êîìïüþòåðíûå àðõèòåêòóðû.
124

4.2.2 ßçûê Ñ

Ðàçóìååòñÿ Âû óæå çíàåòå è óìååòå ïðîãðàììèðîâàòü íà ÿçûêå


Ñ. Íà âñÿêèé ñëó÷àé êðàòêîå íàïîìèíàíèå îñíîâíûõ ìîìåíòîâ. ïîñëå
êîòîðûõ ìû ïåðåéäåì ê òîíêîñòÿì ïðîãðàììèðîâàíèÿ ïîä UNIX.
Ëþáàÿ C-ïðîãðàììà, êàêîâ áû íè áûë åå ðàçìåð, ñîñòîèò èç îäíîé
èëè áîëåå ôóíêöèé, óêàçûâàþùèõ ôàêòè÷åñêèå îïåðàöèè êîìïüþòåðà,
êîòîðûå äîëæíû áûòü âûïîëíåíû. Îáû÷íî âû ìîæåòå äàâàòü ôóíêöèÿì
ëþáûå èìåíà ïî âàøåìó óñìîòðåíèþ, íî main  ýòî îñîáîå èìÿ; âû-
ïîëíåíèå ïðîãðàììû íà÷èíàåòñÿ ñíà÷àëà ñ ýòîé ôóíêöèè. Ýòî îçíà÷àåò,
÷òî êàæäàÿ ïðîãðàììà äîëæíà â êàêîì-òî ìåñòå ñîäåðæàòü ôóíêöèþ ñ
èìåíåì main. Äëÿ âûïîëíåíèÿ îïðåäåëåííûõ äåéñòâèé ôóíêöèÿ main
îáû÷íî îáðàùàåòñÿ ê äðóãèì ôóíêöèÿì, ÷àñòü èç êîòîðûõ íàõîäèòñÿ â
òîé æå ñàìîé ïðîãðàììå, à ÷àñòü  â áèáëèîòåêàõ, ñîäåðæàùèõ ðàíåå
íàïèñàííûå ôóíêöèè.
Ïðîãðàììà Hello, World, íàïèñàíàÿ íà Ñ ïðåäñòàâëåíà íà ðèñ. 42.

Ðèñ. 42: Ïðîãðàììà Hello, World

 ïåðâîé ñòðîêå ïîäêëþ÷àåòñÿ áèáëèîòåêà stdio.h, â êîòîðîé îïè-


ñàíû ôóíêöèè ââîäà-âûâîäà (íàïð. printf). Ñ êîìïèëÿòîðîì îáû÷íî ïî-
ñòàâëÿåòñÿ ìíîæåñòâî áèáëèîòåê. Òàê ÷òî ïðåæäå ÷åì ïèñàòü ñëîæíóþ
ôóíêöèþ, óçíàéòå, ìîæåò îíà óæå ðåàëèçîâàíà.
Äëÿ òîãî, ÷òî áû ïåðåâåñòè èñõîäíûé êîä ïðîãðàììû â ïðîãðàììó
íà ìàøèííîì ÿçûêå, íóæíî èñïîëüçîâàòü êîìïèëÿòîð. Â UNIX ñèñòåìàõ
ïî óìîë÷àíèþ óæå âñòðîåí êîìïèëÿòîð gcc (GNU Compiler Collection).
Íåñìîòðÿ íà òî, ÷òî îí íåìíîãî óñòàðåë è ïîñòîÿííî âåäóòñÿ ïîïûòêè
çàìåíèòü åãî áîëåå ëåãêèì è ýôôåêòèâíûì (â ÷àñòíîñòè è âî FreeBSD),
îí âñå æå ÿâëÿåòñÿ íàèëó÷øèì ðåøåíèåì íà ñåãîäíÿøíèé äåíü. Ýòîò
êîìïèëÿòîð ÿâëÿåòñÿ ñòàíäàðòîì ïðè ðàçðàáîòêå ÏÎ ïîä UNIX è ïðè
ðàçðàáîòêå ñàìîé UNIX. Îí ïîíèìàåò òàêèå ÿçûêè, êàê C, C++, Ada,
125

Fortran, Java. Ñ ïîìîùüþ äîïîëíèòåëüíûõ ìîäóëåé, îí ìîæåò ïîíèìàòü


åùå ñ äåñÿòîê äðóãèõ ÿçûêîâ.
Äëÿ êîìïèëèðîâàíèÿ ïðîãðàììû, çàïóñòèòå gcc ñ åäèíñòâåííîé
îïöèåé  èìåíåì ôàéëà ñ èñõîäíûì êîäîì:
gcc myprog.c
Ðàñøèðåíèå ôàéëà çäåñü èìååò çíà÷åíèå, òàê êàê ïîäñêàçûâàåò
êîìïèëÿòîðó, íà êàêîì ÿçûêå íàïèñàíà ïðîãðàììà. Ðàçóìååòñÿ ìîæíî
ñ ïîìîùüþ îïöèé ïîäñêàçûâàòü êîìïèëÿòîðó, íî ñòîèò ïðèäåðæèâàòüñÿ
ñòàíäàðòà. Ïðîãðàììà íàïèñàíàÿ íà Ñ äîëæíà èìåòü â êà÷åñòâå ðàñøè-
c
ðåíèÿ ñòðî÷íóþ áóêâó . Áîëüøàÿ îçíà÷àåò, ÷òî ïðîãðàììà íàïèñàíà íà
C++.
Ïîñëå êîìïèëÿöèè, â êàòàëîãå ñ èñõîäíûì êîäîì, ïîÿâèòñÿ ôàéë
a.out. Ýòî è åñòü ñêîìïèëèðîâàííàÿ ïðîãðàììà, êîòîðóþ ìîæíî çàïóñ-
êàòü. Äëÿ òîãî, ÷òî áû ïðîãðàììà èçíà÷àëüíî èìåëà îñìûñëåííîå íàçâà-
íèå (è íå çàìåíÿëà ñîáîé ïðåäûäóùóþ), èñïîëüçóéòå îïöèþ -o:
gcc myprog.c -o myprog
Ïåðåìåííûå.
Ñ ïîääåðæèâàåò ïåðåìåííûå íåñêîëüêèõ òèïîâ (îñíîâíûå: char 
ñèìâîë, int  öåëîå ÷èñëî, double  ÷èñëî ñ ïëàâàþùåé òî÷êîé) è
ìàññèâû, êîòîðûå äîëæíû áûòü îáúÿâëåíû â ñàìîì íà÷àëå ôóíêöèè.
Ñðåäè öèêëîâ ñóùåñòâóþò while(), for(;;), à ñðåäè óñëîâèé: if() else
if() else. Íà ðèñ. 43 ïðèâåäåí ïðèìåð ïðîãðàììû, äëÿ òîãî, ÷òî áû Âû
âñïîìíèëè ñèíòàêñèñ ÿçûêà.
Ñèñòåìû UNIX è ÿçûê Ñ  íåðàçëó÷íû. Êàê ðàçðàáîòêà UNIX
ïðèâåëà ê ñîçäàíèþ ÿçûêà Ñ, òàê è ïîÿâëåíèå ÿçûêà Ñ, ïîìîãëî ðàçâèòèþ
UNIX. Ïîäàâëÿþùåå áîëüøèíñòâî ïðîãðàìì â UNIX ñèñòåìàõ, íàïèñíû
íà ÿçûêå Ñ (òîëüêî äëÿ íåêîòîðûõ íèçêîóðîâíåâûõ ôóíêöèé ñèñòåìû è
äðàéâåðîâ èñïîëüçóþò NASM  äèàëåêò àññåìáëåðà äëÿ UNIX ñèñòåì).
Äàæå äëÿ ãðàôè÷åñêîé îáîëî÷êè Gnome íå ñòàëè èñïîëüçîâàòü äîâîëüíî
òàêè íåóäà÷íûé ÿçûê Ñ++.
Íà ðèñ 44 óïðîùåííûé ïðèìåð èçâåñòíîé âàì ïðîãðàììû wc:
Äëÿ îáëåã÷åíèÿ âçàèìîäåéñòâèÿ ñ UNIX, ñóùåñòâóþò áèáëèîòåêè,
â ôóíêöèÿõ êîòîðûõ óæå ðåøåíû ìíîãèå çàäà÷è. Áëàãîäàðÿ ýòîìó óïðî-
126

Ðèñ. 43: Ïðîãðàììà âîçâåäåíèÿ ÷èñëà â ñòåïåíü

ùåííóþ ïðîãðàììó cp, ìîæíî óìåñòèòü â ïîëòîðà äåñÿòêà ñòðîê (ðèñ. 45).
Èíôîðìàöèþ î áèáëèîòåêàõ (êàê ñèñòåìíûõ, òàê è ñòàíäàðòíûõ)
Âû ñìîæåòå íàéòè â ñïðàâêå man, íàáðàâ, íàïðèìåð, man stdio èëè
man syscall.
Ïîñêîëüêó UNIX ñèñòåìû â áîëüøèíñòâå ñâîåì áåñïëàòíû è ïî-
ñòàâëÿþòñÿ âìåñòå ñ èñõîäíûìè êîäàìè, òî Âû ìîæåòå èçìåíèòü ëþáóþ
ïðîãðàììó, åñëè âîçíèêíåò òàêîå òðåáîâàíèå. Òàê æå Âû âïðàâå èñïîëü-
çîâàòü ëþáûå ó÷àñòêè èñõîäíîãî êîäà ïðè ðàçðàáîòêå ñâîåé ïðîãðàììû.
È åñëè ëèöåíçèÿ GPL (îïåðàöèîííûå ñèñòåìû ñåìåéñòâà GNU/Linux)
íàêëàäûâàåò íåêîòîðûå íåçíà÷èòåëüíûå îãðàíè÷åíèÿ íà èñïîëüçîâàíèå
êîäà â êîììåð÷åñêèõ öåëÿõ, òî ëèöåíçèÿ BSD, ïîä êîòîðîé ðàñïðîñòðà-
íÿþòñÿ âñå ñèñòåìû ñåìåéñòâà BSD, äàåò Âàì ïîëíûå ïðàâà íà åãî èñ-
ïîëüçîâàíèå.
Èñõîäíûå êîäû óñòàíîâèòü ìîæíî ñ ïîìîùüþ sysinstall. Ïîñëå
óñòàíîâêè èñõîäíûå êîäû áóäóò äîñòóïíû â ïàïêå /usr/src.

4.2.3 Èíòåðïðåòèðóåìûå ÿçûêè ïðîãðàììèðîâàíèÿ

Èíòåðïðåòèðóåìûå ÿçûêè ïðîãðàììèðîâàíèÿ îòëè÷àþòñÿ îò êîì-


ïèëèðóåìûõ òåì, ÷òî ïðîãðàììà âñåãäà õðàíèòñÿ â âèäå èñõîäíîãî êîäà,
à ïðè âûïîëíåíèè êîìïèëèðóåòñÿ ñòðî÷êà çà ñòðî÷êîé. Ïðåèìóùåñòâî
127

Ðèñ. 44: Óïðîùåííàÿ âåðñèÿ ïðîãðàììû wc

òàêîãî ïîäõîäà  â óäåøåâëåíèè è óñêîðåíèè ïðîöåññà ðàçðàáîòêè ïðî-


ãðàììû. Ëþáîå èçìåíåíèå â êîäå ìîæíî ïðîâåðèòü ìîìåíòàëüíî, íå
çàòðà÷èâàÿ âðåìÿ íà êîìïèëÿöèþ, êîòîðàÿ ïðè ðàçðàáîòêå ñëîæíûõ ïðî-
åêòîâ ìîæåò çàíÿòü íåñêîëüêî ÷àñîâ. Èíòåðïðåòèðóåìûå ÿçûêè ïî÷òè
âñåãäà ÿâëÿþòñÿ ÿçûêàìè âûñîêîãî óðîâíÿ. Íå íóæíî ïîñòîÿííî ñëåäèòü
çà ñîáëþäåíèåì òèïîâ ïåðåìåííûõ, âûäåëåíèÿõ ïàìÿòè äëÿ ïðîãðàì-
ìû è ïðî÷èìè íèçêîóðîâíåâûìè îïåðàöèÿìè, çà êîòîðûìè ïðèõîäèòñÿ
ñëåäèòü, ïðîãðàììèðóÿ íà ÿçûêàõ ñðåäíåãî óðîâíÿ (C). Îäíî èç îñ-
íîâíûõ ïðåèìóùåñòâ èíòåðïðåòèðóåìûõ ÿçûêîâ ïðîãðàììèðîâàíèÿ 
ðàáîòà ïðîãðàììû íà ëþáîé ïëàòôîðìå, ïîä êîòîðóþ íàïèñàí èíòåðïðå-
òàòîð. Íåò íåîáõîäèìîñòè ïåðåïèñûâàòü êàæäóþ ïðîãðàììó, äîñòàòî÷íî
ïåðåïèñàòü èíòåðïðåòàòîð è âñå ïðîãðàììû áóäóò ðàáîòàòü. Íåêîòîðûå
èíòåðïðåòàòîðû (íàïðèìåð Python) ïðè ïåðâîì âûïîëíåíèè ïðîãðàììû
àâòîìàòè÷åñêè êîìïèëèðóþò ôóíêöèè. Ôóíêöèè êàê ïðàâèëî íå èçìå-
íÿþòñÿ âî âðåìÿ ðàçðàáîòêè ïðîãðàììû, äà è êîìïèëÿöèÿ ïðîèñõîäèò
îäíîâðåìåííî ñ âûïîëíåíèåì ýòîé ôóíêöèè.
Ãëàâíûé íåäîñòàòîê òàêîãî ìåòîäà  ýòî ìåäëåííàÿ ðàáîòà ïðî-
ãðàììû. Îòñóòñòâóåò âîçìîæíîñòü îïòèìèçàöèè êîäà, ÷òî ïðèâîäèò ê
128

Ðèñ. 45: Óïðîùåííàÿ âåðñèÿ ïðîãðàììû cp

äîïîëíèòåëüíûì ïîòåðÿì ïðè âûïîëíåíèè ïðîãðàìì. Åùå îäíèì íåäî-


ñòàòêîì ÿâëÿåòñÿ òî, ÷òî äëÿ òàêèõ ïðîãðàìì íåîáõîäèìî íàëè÷èå ñàìîãî
èíòåðïðåòàòîðà.
Âî FreeBSD èíòåðïðåòàòîðû äëÿ Perl è Python íåîáõîäèìî óñòà-
íàâëèâàòü îòäåëüíî. Îíè åñòü íà óñòàíîâî÷íîì äèñêå. Óñòàíîâèòå èõ
÷åðåç óòèëèòó sysinstall è ìû íà÷íåì çíàêîìèòüñÿ ñ äâóìÿ ñàìûìè
ïîïóëÿðíûìè èíòåðïðåòèðóåìûìè ÿçûêàìè ïðîãðàììèðîâàíèÿ.

4.2.4 Perl

Perl ïðåäñòàâëÿåò ñîáîé èíòåðïðåòèðóåìûé ÿçûê ïðîãðàììèðîâà-


íèÿ, ïðåäíàçíà÷åííûé, â ïåðâóþ î÷åðåäü, äëÿ îáðàáîòêè òåêñòà. Åãî
íàçâàíèå îçíà÷àåò "Practical Extraction and Report Language" ïðàê-
òè÷åñêèé ÿçûê èçâëå÷åíèé è îò÷åòîâ. Perl áûë ñîçäàí Ëàððè Óîëëîì
(Larry Wall) â êà÷åñòâå çàìåíû áîëåå îãðàíè÷åííîãî â âîçìîæíîñòÿõ
ÿçûêà awk. Ëàððè íàïèñàë åãî, ÷òîáû ôîðìèðîâàòü îò÷åòû. Îí è ïî ñåé
äåíü ÿâëÿåòñÿ åãî ãëàâíûì àðõèòåêòîðîì è íà äàííûé ìîìåíò ðàáîòàåò
íàä íîâîé âåðñèåé  Perl 6.
Ãîäû ðàçðàáîòêè ñ îòêðûòûì êîäîì è èíêðåìåíòíûå óëó÷øåíèÿ
129

ïðåâðàòèëè Perl â íå÷òî âðîäå áåãåìîòà. Åãî ñèíòàêñèñ åäâà ëè ìîæíî


íàçâàòü ýëåãàíòíûì. Èìåÿ ðÿä ïðåèìóùåñòâ, Perl âñå æå íå ÿâëÿåòñÿ
èäåàëüíîé ìîäåëüþ ðåàëèçàöèè ÿçûêà ïðîãðàììèðîâàíèÿ.
Ñöåíàðèé Perl àíàëîãè÷åí ñöåíàðèÿì êîìàíäíîãî èíòåðïðåòàòîðà.
Ïåðâàÿ ñòðîêà ñîîáùàåò, êàêîé èíòåðïðåòàòîð ñëåäóåò èñïîëüçîâàòü äëÿ
îáðàáîòêè ïîñëåäóþùåãî ñîäåðæèìîãî ôàéëà:
#!/usr/bin/perl
Îñòàâøàÿñÿ ÷àñòü ñöåíàðèÿ (êàê è â ñëó÷àå ïðîãðàììèðîâàíèÿ íà
ÿçûêå êîìàíäíîãî èíòåðïðåòàòîðà) ñîñòîèò èç îïåðàòîðîâ ïðèñâîåíèÿ
çíà÷åíèé ïåðåìåííûì, áëîêîâ óïðàâëåíèÿ ïîòîêîì âûïîëíåíèÿ, öèêëîâ,
ñèñòåìíûõ âûçîâîâ, îïåðàöèé ââîäà-âûâîäà è ò.ä (ðèñ. 46).

Ðèñ. 46:

Îáðàòèòå âíèìàíèå íà ôèãóðíûå ñêîáêè â ñòèëå Ñ, âûäåëÿþùèå


áëîê if âìåñòî ñèíòàêñèñà "if/"è "case/esac". Êàê è â Ñ, êàæäûé îïå-
ðàòîð çàêàí÷èâàåòñÿ òî÷êîé ñ çàïÿòîé (;), ïîçâîëÿÿ ðàçìåùàòü â îäíîé
ñòðîêå ëþáîå ÷èñëî îïåðàòîðîâ. Ïóñòûå ñèìâîëû ìåæäó âûðàæåíèÿìè
è îïåðàòîðàìè ÿâëÿþòñÿ íåîáÿçàòåëüíûìè: "$à = 1"òàê æå êîððåêòíî,
êàê è "$à=1". Ñèíòàêñèñ Perl áëèæå ê Ñ, ÷åì ê ÿçûêó êîìàíäíîãî èí-
òåðïðåòàòîðà. Ôàêòè÷åñêè, Perl ìîæíî ðàññìàòðèâàòü êàê ãèáðèä ýòèõ
äâóõ ÿçûêîâ, óíàñëåäîâàâøèé èõ ëó÷øèå ÷åðòû.
Ñöåíàðèé Perl íåò íåîáõîäèìîñòè êîìïèëèðîâàòü, ÷òî ÷ðåçâû÷àéíî
îáëåã÷àåò îòëàäêó: äîñòàòî÷íî âíåñòè èçìåíåíèÿ â ôàéë è çàïóñòèòü
åãî ñíîâà, åñëè âíîâü âîçíèêíóò îøèáêè  ñíîâà îòðåäàêòèðîâàòü åãî è
ò.ä. Èíòåðïðåòàòîð Perl ïðîèçâîäèò "êîìïèëÿöèþ"íà ýòàïå èñïîëíåíèÿ.
Ïðè ýòîì îí íå ñîõðàíÿåò ñêîìïèëèðîâàííûé êîä. Ïîýòîìó Perl ìåä-
ëåííåå, ÷åì ïîëíîöåííûå ïðîãðàììû íà Ñ, îäíàêî âïîëíå ïðèãîäåí äëÿ
130

ñöåíàðèåâ, íå òðåáóþùèõ î÷åíü áûñòðîãî âûïîëíåíèÿ èëè ñóïåðâûñîêîé


ïðîèçâîäèòåëüíîñòè.
×òîáû çàïóñòèòü ñöåíàðèé Perl, åãî íåîáõîäèìî ïðåäâàðèòåëüíî
ñäåëàòü âûïîëíÿåìûì ïîñðåäñòâîì êîìàíäû chmod:
chmod +x myscript.pl
 ðåçóëüòàòå áóäóò óñòàíîâëåíû ïðàâà äîñòóïà ê ôàéëó, ðàâíûå
0755
-rwxr-xr-x 1 user user 170 Jun 14 2010 myscript.pl*
Äàëåå, ÷òîáû çàïóñòèòü ñöåíàðèé, íåîáõîäèìî óêàçàòü ïðåôèêñ ./
ïîñêîëüêó êàòàëîã "."(ò.å. òåêóùèé), ñêîðåå âñåãî, íå âêëþ÷åí â ïóòè
ïîèñêà ïðîãðàìì:
./myscript.pl
Ïîñêîëüêó ñöåíàðèè íà ÿçûêå Perl ÿâëÿþòñÿ èíòåðïðåòèðóåìûìè,
èõ íåîáÿçàòåëüíî äåëàòü âûïîëíÿåìûìè, ìîæíî äàæå íå âêëþ÷àòü ñòðî-
êó, óêàçûâàþùóþ èíòåðïðåòàòîð. Õîòÿ ýòîò ìåòîä è ïðèìåíÿåòñÿ ðåæå,
íî ïðè æåëàíèè ñöåíàðèé ìîæíî çàïóñòèòü êàê àðãóìåíò ñàìîãî èíòåð-
ïðåòàòîðà perl:
perl myscript.pl
Ïåðåìåííàÿ â ÿçûêå Perl ÿâëÿåòñÿ èëè ñêàëÿðîì, èëè ìàññèâîì.
Äâà ýòèõ âèäà ïåðåìåííûõ ïðåäñòàâëÿþò ñîáîé äâà ðàçëè÷íûõ ñïîñîáà
õðàíåíèÿ äàííûõ. Ýòè äàííûå ìîãóò ïðèíèìàòü ôîðìó ÷èñëà (âûðàæåí-
íîãî îäíèì èç íåñêîëüêèõ ñïîñîáîâ), ñòðîêè òåêñòà èëè äðóãèõ òèïîâ,
íàçûâàåìûõ â Perl "áóêâåííûìè"(literals). Èìÿ ñêàëÿðíîé ïåðåìåííîé
(íàèáîëåå ðàñïðîñòðàíåííûé âèä) âñåãäà íà÷èíàåòñÿ ñî çíàêà äîëëàðà
($).
Çàìå÷àòåëüíîå ñâîéñòâî Perl ñîñòîèò â òîì, ÷òî ñîâåðøåííî íå íóæ-
íî áåñïîêîèòüñÿ î òîì, ê êàêîìó òèïó ïðèíàäëåæèò ÷èñëî (öåëîìó, ñ
ïëàâàþùåé òî÷êîé è ò.ä.). Êðîìå òîãî, ñòðîêó íåò íåîáõîäèìîñòè ðàñ-
ñìàòðèâàòü êàê ìàññèâ ñèìâîëîâ èëè óêàçàòåëü. Perl ñàìîñòîÿòåëüíî
âûïîëíÿåò âñå íåîáõîäèìûå îïåðàöèè. Áîëåå òîãî, íå íóæíî äàæå âû-
ïîëíÿòü ïðåîáðàçîâàíèå ñòðîê â ÷èñëà è íàîáîðîò. Perl ñàì îïðåäåëèò,
÷òî ñòðîêà ñîäåðæèò òîëüêî ÷èñëî è ïîçâîëÿåò ïðèìåíÿòü ê íåé ìàòå-
ìàòè÷åñêèå îïåðàòîðû. Âñå îñòàëüíîå, íà÷èíàÿ ñ ïåðâîãî íåöèôðîâîãî
131

ñèìâîëà, áóäåò îòáðàñûâàòüñÿ, ïîýòîìó, íàïðèìåð, "123blah"òðàêòóåòñÿ


÷èñëîâûìè îïåðàòîðàìè êàê "123".
Äëÿ èçìåíåíèÿ çíà÷åíèé ïåðåìåííûõ èñïîëüçóåòñÿ íàáîð îïåðàòî-
ðîâ: ìàòåìàòè÷åñêèå (+, -, =), îïåðàòîðû óâåëè÷åíèÿ â ñòèëå ÿçûêà Ñ
(++ è - -), ìàòåìàòè÷åñêèå îïåðàòîðû ñ ïðèñâàèâàíèåì (+=, -=, *=),
âîçâåäåíèå â ñòåïåíü (**), îñòàòîê îò äåëåíèÿ (%), îïåðàòîðû ñðàâíåíèÿ
(>, <, =>, =<, == è !=), îïåðàòîð êîíêàòåíàöèè ñòðîê (.), îïåðàòîð
ñòðîêîâîãî ïîâòîðåíèÿ (x). Ôàêòè÷åñêè, â Perl ñóùåñòâóåò ãîðàçäî áîëü-
øå îïåðàòîðîâ, ÷åì âàì ïîòðåáóåòñÿ.  êíèãàõ, ïîñâÿùåííûõ Perl, î íèõ
ðàññêàçàíî áîëåå ïîäðîáíî.
Íà ðèñ. 47 íåñêîëüêî ñòðîê êîäà, äåìîíñòðèðóþùèõ ïðèìåíåíèå
ïåðåìåííûõ, ëèòåðàëîâ (literals) è îïåðàòîðîâ:

Ðèñ. 47:

 ðåçóëüòàòå ýòîò áëîê âûâîäèò çíà÷åíèå "test36". Åñëè âàì ÿñíî,


êàê ýòî çíà÷åíèå ïîëó÷åíî, òî âû èçó÷èëè îñíîâû ÿçûêà Perl.
Ïåðåìåííûå ìîæíî èñïîëüçîâàòü ïî îòäåëüíîñòè èëè â âèäå ìàñ-
ñèâîâ îïðåäåëåííîãî ÷èñëà èçìåðåíèé. Ìû óæå ñòàëêèâàëèñü ñî ñêàëÿð-
íûìè ïåðåìåííûìè $à, $b è $ñ â ïðåäûäóùåì ïðèìåðå. Êàæäàÿ èç íèõ
ñîäåðæèò ÷èñëî èëè ñòðîêó. Èíîãäà âîçíèêàåò íåîáõîäèìîñòü îáðàáàòû-
âàòü ãðóïïû ñâÿçàííûõ ìåæäó ñîáîé äàííûõ. Äëÿ ýòîãî ïðèìåíÿþòñÿ
ìàññèâû:
@array1 = ("blah",5,12.7,$a);
@array2 = ($a, $b, $c);
Ê ìàññèâàì ïðèìåíèìû òå æå ïðàâèëà èìåíîâàíèÿ, ÷òî è ê ñêàëÿ-
at
ðàì, çà èñêëþ÷åíèåì òîãî, ÷òî ìàññèâû îáîçíà÷àþòñÿ ñèìâîëîì " "(@),
à íå çíàêîì äîëëàðà. Êàê âèäíî èç ïðèìåðîâ, íåò íåîáõîäèìîñòè îáúÿâ-
ëÿòü ìàññèâ îïðåäåëåííîé äëèíû èëè ðàçìåùàòü â íåì äàííûå îäíîãî
òèïà. Ìàññèâû ìîãóò ñîäåðæàòü ÷èñëà, ñòðîêè, äðóãèå ìàññèâû è ò.ä.
132

Îáðàòèòüñÿ ê ýëåìåíòó ìàññèâà ïîçâîëÿþò êâàäðàòíûå ñêîáêè. Òðå-


òèé ýëåìåíò ïðåäûäóùåãî ìàññèâà @àããàó1 ÿâëÿåòñÿ ñêàëÿðíûì çíà÷å-
íèåì è àäðåñóåòñÿ êàê $array1[2]. Ïîìíèòå, ÷òî íóìåðàöèÿ ýëåìåíòîâ
íà÷èíàåòñÿ ñ íóëÿ!
Èíîãäà ýëåìåíòû ìàññèâà òàêæå èìåþò ïðåôèêñ @, à íå $. Ýòî
çíà÷èò, ÷òî àäðåñóåòñÿ îïðåäåëåííûé äèàïàçîí ìàññèâà, íàïðèìåð, @àã-
ãàó1[1,2]. Ýòî òàêæå ìàññèâ, ñîñòîÿùèé èç äâóõ ýëåìåíòîâ. Îáîçíà÷åíèå
@àããàó1[2] ïðåäñòàâëÿåò ñîáîé äèàïàçîí èç îäíîãî ýëåìåíòà, ÷òî ñîâïà-
äàåò ñî ñêàëÿðíûì çíà÷åíèåì. Æåëàòåëüíî, ðàçóìååòñÿ, èñïîëüçîâàòü
îáîçíà÷åíèå $array1[2].
Ïîëåçíîé ôóíêöèåé ïðè ðàáîòå ñ ìàññèâàìè ÿâëÿåòñÿ sort(). Îïåðà-
òîð sort(@array1) ðàñïîëàãàåò ýëåìåíòû ìàññèâà â ëåêñèêîãðàôè÷åñêîì
ïîðÿäêå, ðàññìàòðèâàÿ èõ êàê ñòðîêè. Ôîðìàò ýòîé ïðîöåäóðû ïîçâîëÿåò
óêàçàòü ñîáñòâåííûé àëãîðèòì ñîðòèðîâêè, ÷òî çíà÷èòåëüíî ðàñøèðÿåò
âîçìîæíîñòè sort(). Íàïðèìåð, åñëè ñîçäàòü ïðîöåäóðó ÷èñëîâîãî ñðàâ-
íåíèÿ äâóõ àðãóìåíòîâ numerically(), ñîðòèðîâêó âñåãî ìàññèâà ìîæíî
îñóùåñòâèòü êîìàíäîé sort numerically (@array1).
Ìàññèâû îñîáåííî ïîëåçíû ïðè ðàáîòå ñ ðåëÿöèîííûìè äàííûìè.
Ìàññèâ  ýòî åùå è ñïîñîá äîñòóïà ê îòäåëüíûì ñòðîêàì ôàéëà, ïðî÷è-
òàííûì èç ñòàíäàðòíîãî âõîäíîãî ïîòîêà.
Ìàññèâ ìîæíî ñîçäàòü èç ñêàëÿðíîé ñòðîêè ïîñðåäñòâîì ôóíêöèè
split(). Îíà ðàçäåëÿåò ñòðîêó íà îòäåëüíûå ýëåìåíòû, èñïîëüçóÿ çàäàí-
íûé ñèìâîë-ðàçäåëèòåëü.
$mystring = "Test|my name|Interesting data|123";
@mydata = split(/\|/,$mystring);
Îáðàòèòå âíèìàíèå, ÷òî äëÿ óêàçàíèÿ ñèìâîëà-ðàçäåëèòåëÿ èñïîëü-
çóþòñÿ ñèìâîëû êîñîé ÷åðòû, à ñèìâîë êîíâåéåðà (|) ýêðàíèðîâàí ñèì-
âîëîì îáðàòíîé êîñîé ÷åðòû, ÷òîáû îòëè÷èòü åãî îò îïåðàòîðà âûáîðà.
Ìàññèâ @mydata òåïåðü ñîäåðæèò â êà÷åñòâå ýëåìåíòîâ ñòðîêè "Test",
"my name", "Interesting data"è "123".
Ñïåöèàëüíûì òèïîì ìàññèâà ÿâëÿåòñÿ àññîöèàòèâíûé ìàññèâ. Îí
àíàëîãè÷åí àññîöèàòèâíîé òàáëèöå (hash table), â êîòîðîé äàííûå ñîõðà-
íÿþòñÿ êàê ïàðû êëþ÷-çíà÷åíèå. Ïðåôèêñîì àññîöèàòèâíîãî ìàññèâà ÿâ-
133

ëÿåòñÿ çíàê ïðîöåíòà (%), íî êàæäûé ýëåìåíò, åñòåñòâåííî, ïðåäñòàâëÿåò


ñîáîé ñêàëÿð, ïîýòîìó ïðè îáðàùåíèè ê íèì èñïîëüçóåòñÿ ñòàíäàðòíûé
ïðåôèêñ $. Âîò ïðèìåð èíèöèàëèçàöèè àññîöèàòèâíîãî ìàññèâà:
$assocl key1 = "value1";
$assocl key2 = "value2";
Òåïåðü ê ìàññèâó ìîæíî ïðèìåíèòü êàêîé-ëèáî èç îïåðàòîðîâ îá-
ðàáîòêè àññîöèàòèâíûõ ìàññèâîâ:
@myvalues = values(%assoc1);
while (($mykey, $myvalue) = each(%assocl)) { print "$mykey
-> $myvalue\n"; }
Àññîöèàòèâíûå ìàññèâû îñîáåííî ïîëåçíû â òàêèõ ïðèëîæåíèÿõ,
êàê ñåðâåðíîå CGI-ïðîãðàììèðîâàíèå, êîãäà âñå ïåðåìåííûå HTML-ôîðìû
ïåðåñûëàþòñÿ ñåðâåðó è ÷èòàþòñÿ ïðîãðàììîé â àññîöèàòèâíûé ìàññèâ,
êëþ÷àìè â êîòîðîì ñëóæàò èìåíà ïîëåé ôîðìû.
Ïîëíûé íàáîð ñòðóêòóð óïðàâëåíèÿ ïîòîêîì äåëàåò Perl ïîëíî-
ìàñøòàáíîé ïðîãðàììíîé ñðåäîé, îòëè÷àþùåéñÿ îò ïðîñòîãî "ïàêåòíî-
ãî"ÿçûêà ñöåíàðèåâ. Èìåííî ýòè ñòðóêòóðû ïîçâîëÿþò ïðèìåíÿòü èòå-
ðàöèè è ñîçäàâàòü ñëîæíûå âåòâëåíèÿ â ïðîãðàììàõ.
Íàèáîëåå ðàñïðîñòðàíåííîé óïðàâëÿþùåé ñòðóêòóðîé ÿâëÿåòñÿ áëîê
if (ðèñ. 48).

Ðèñ. 48:

Perl ïîääåðæèâàåò ñòàíäàðòíûé öèêë for, ïî÷òè èäåíòè÷íûé îä-


íîèìåííîìó îïåðàòîðó â Ñ. Íàçíà÷åíèå for ñîñòîèò â èòåðàöèè öèêëà
îïðåäåëåííîå ÷èñëî ðàç, à íå ïî ýëåìåíòàì ìàññèâà. Öèêëîì for óïðàâ-
ëÿåò èòåðàöèîííàÿ ïåðåìåííàÿ (êàê ïðàâèëî, íå èñïîëüçóåìàÿ áîëüøå
íèãäå â ñöåíàðèè), çíà÷åíèå êîòîðîé óâåëè÷èâàåòñÿ àâòîìàòè÷åñêè ïðè
êàæäîì ïðîõîäå öèêëà. Àðãóìåíòû îïåðàòîðà, êàê è â ÿçûêå Ñ, ðàçäå-
ëÿþòñÿ òî÷êîé ñ çàïÿòîé: èìÿ ïåðåìåííîé, óñëîâèå âûõîäà èç öèêëà è
134

èíêðåìåíòíàÿ îïåðàöèÿ:

Ðèñ. 49:

Ïðèìåð íà ðèñ. 49 ïå÷àòàåò 100 ñòðîê, ïðîíóìåðîâàííûõ îò 0 äî


99. Ïåðâûé àðãóìåíò óñòàíàâëèâàåò íà÷àëüíîå çíà÷åíèå ïåðåìåííîé $i,
âòîðîé  óñëîâèå âûõîäà èç öèêëà (ò.å. öèêë âûïîëíÿåòñÿ äî òåõ ïîð,
ïîêà ýòî óñëîâèå èñòèííî), à òðåòèé óêàçûâàåò, ÷òî ïðè êàæäîì ïðîõîäå
öèêëà çíà÷åíèå ïåðåìåííîé äîëæíî óâåëè÷èâàòüñÿ íà åäèíèöó.
È íàêîíåö, â Perl ñóùåñòâóåò öèêë while, äåéñòâóþùèé êàê óïðî-
ùåííàÿ âåðñèÿ for áåç èòåðàöèîííîé ïåðåìåííîé. Åãî àðãóìåíòîì ÿâëÿ-
åòñÿ óñëîâíîå âûðàæåíèå, çíà÷åíèå êîòîðîãî îïðåäåëÿåòñÿ ïðè êàæäîì
ïðîõîäå öèêëà. Öèêë âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà óñëîâèå èñòèííî
(ðèñ. 50).

Ðèñ. 50:

Öèêë âûïîëíÿåòñÿ 20 ðàç è îïåðàòîð print âûâîäèò çíà÷åíèå 20.


Äðóãèì âàðèàíòîì öèêëà ïîäîáíîãî âèäà ÿâëÿåòñÿ until, ñìûñë
êîòîðîãî ïðîòèâîïîëîæåí: îí âûïîëíÿåòñÿ, ïîêà óñëîâèå ëîæíî. Öèêë
íà ðèñ. 51 âûïîëíÿåò òî æå ñàìîå äåéñòâèå, ÷òî è ïðèâåäåííûé âûøå.

Ðèñ. 51:

 íåêîòîðûõ ñëó÷àÿõ îêàçûâàåòñÿ óäîáíåå âîñïîëüçîâàòüñÿ èíûì


âàðèàíòîì çàïèñè ýòèõ äâóõ öèêëîâ: do...while èëè do...until. Ïðè òàêîé
135

Ðèñ. 52:

çàïèñè öèêë âûïîëíÿåòñÿ, êàê ìèíèìóì, îäèí ðàç ïîñêîëüêó çíà÷åíèå


óñëîâíîãî îïåðàòîðà îïðåäåëÿåòñÿ â êîíöå, à íå â íà÷àëå öèêëà (ðèñ. 52).
Îáðàòíûå êàâû÷êè (`) ïîçâîëÿþò çàïóñòèòü ëþáóþ êîìàíäó â Perl-
ïðîãðàììå òàê æå, êàê ýòî äåëàåòñÿ â êîìàíäíîé ñòðîêå èëè â ñöåíàðèè
êîìàíäíîãî èíòåðïðåòàòîðà. Äîñòàòî÷íî çàêëþ÷èòü êîìàíäó â îáðàòíûå
êàâû÷êè è Perl âûïîëíèò åå, èñïîëüçóÿ èíòåðïðåòàòîð /bin/sh è îæèäàÿ
îêîí÷àíèÿ ïîðîæäåííîãî ïðîöåññà. Âûâîä òàêîé êîìàíäû ÿâëÿåòñÿ âîç-
âðàùàåìûì çíà÷åíèåì, êîòîðîå ìîæíî ïðèñâîèòü ïåðåìåííîé, íàïðèìåð:
$date = `date`;
Îòìåòüòå, ÷òî âîçâðàùàåìàÿ ñòðîêà, êàê ïðàâèëî, çàâåðøàåòñÿ ñèì-
âîëîì \n, ïîýòîìó äëÿ åãî óäàëåíèÿ èñïîëüçóåòñÿ ôóíêöèÿ chomp() èëè
âûçûâàåìàÿ â ñëåäóþùåì îïåðàòîðå, èëè îêðóæàþùàÿ èñõîäíîå âûðà-
æåíèå, íàïðèìåð:
chomp($date = `date`);
Ïðîãðàììå Perl ìîæíî ïåðåäàòü ëþáîå êîëè÷åñòâî àðãóìåíòîâ êî-
ìàíäíîé ñòðîêè. Îíè ðàçäåëÿþòñÿ ïóñòûì ñèìâîëîì (åñëè îíè íå çàêëþ-
÷åíû â êàâû÷êè) è ðàçìåùàþòñÿ íà ýòàïå èñïîëíåíèÿ â ìàññèâ @ARGV.
Íàïðèìåð:
./myscript.pl test "My String"123
Òàêèì îáðàçîì, @ARGV[0] ñîäåðæèò çíà÷åíèå "test", @ARGV[1] 
"My String"è @ARGV[2]  "123".
Ñöåíàðèé, ïðèâåäåííûé íà ðèñ. 53, äåìîíñòðèðóåò áîëüøèíñòâî èç
îïèñàííûõ âûøå ìåòîäèê, âêëþ÷àÿ è íåêîòîðûå íîâûå.
Îáðàáîòêà òåêñòà
Ðåãóëÿðíîå âûðàæåíèå (èõ ÷àñòî íàçûâàþò regexp  regular expression)
 ýòî ñïîñîá óêàçàíèÿ øàáëîíà äëÿ ïîèñêà â òåêñòîâîì ïîòîêå. Ñ èõ
ïîìîùüþ ìîæíî íå òîëüêî ïðîèçâîäèòü ïðîñòîé ïîèñê â ñòðîêå, íî è
íàêëàäûâàòü òàêèå óñëîâèÿ, êàê ïîèñê â íà÷àëå èëè êîíöå ñòðîêè, ïîèñê
136

Ðèñ. 53:

ãðóïï îïðåäåëåííûõ ñèìâîëîâ, ñòðîê çàäàííîé äëèíû è ò.ä. Ðåãóëÿðíûå


âûðàæåíèÿ ñîñòàâëÿþò âàæíóþ ÷àñòü ìíîãèõ ñðåäñòâ UNIX, âêëþ÷àÿ,
íàïðèìåð, óòèëèòó ïîèñêà è ñðàâíåíèÿ ñ øàáëîíîì  grep, à òàêæå
åå ðàçíîâèäíîñòè. Perl íå òîëüêî ïðåäîñòàâëÿåò òó æå ãèáêîñòü, êîòîðàÿ
ïðèñóùà grep, íî è âêëþ÷àåò åå â ñàìó ñðåäó ïðîãðàììèðîâàíèÿ. Èìåííî
ýòîãî è íå õâàòàåò áîëüøèíñòâó ÿçûêîâ ïðîãðàììèðîâàíèÿ. Íàïðèìåð,
â Ñ ïðèõîäèòñÿ êîïèðîâàòü ñòðîêè â ïàìÿòü, ïðîèçâîäèòü ïîñèìâîëüíîå
ñðàâíåíèå è ò.ä.
Ïðîñòåéøèì øàáëîíîì ðåãóëÿðíîãî âûðàæåíèÿ ÿâëÿåòñÿ ñòðîêà
òåêñòà. Äëÿ ïîèñêà â ñòðîêå èñïîëüçóåòñÿ îïåðàòîð = , à ñàìî ðåãóëÿðíîå
âûðàæåíèå çàêëþ÷àåòñÿ â ñèìâîëû êîñîé ÷åðòû:
if ($string = /abc123/)
Ýòó çàïèñü ìîæíî óïðîñòèòü, åñëè ñòðîêà òåêñòà óæå ïîëó÷åíà,
íàïðèìåð, ñ ïîìîùüþ îïåðàòîðà ÷òåíèÿ ïîòîêà <>, êîòîðûé ïîçâîëÿþò
â öèêëå ïðî÷åñòü ñîäåðæèìîå òåêñòîâîãî ôàéëà, óêàçàííîãî êàê àðãó-
ìåíò êîìàíäíîé ñòðîêè.  ýòîì ñëó÷àå ñòðîêó ñîäåðæèò ïåðåìåííàÿ
$_ (ïåðåìåííàÿ "no óìîë÷àíèþ"), ïîýòîìó ïîèñê ìîæíî ïðîèçâîäèòü
íåÿâíî:
if (/abc123/) ...
Ïåðåéäåì ê áîëåå ñëîæíûì øàáëîíîì. Èçìåíèì ïðåäûäóùèé øàá-
ëîí "abcl23"òàê, ÷òîáû îí ñîîòâåòñòâîâàë òîëüêî êîíñòðóêöèè, íàõîäÿ-
137

ùåéñÿ â íà÷àëå ñòðîêè. Äëÿ ýòîãî èñïîëüçóåòñÿ ñèìâîë : /abc123/.


Ñóùåñòâóåò ñèìâîë è äëÿ ïîèñêà ðåãóëÿðíîãî âûðàæåíèÿ â êîíöå
ñòðîêè  $. Â äðóãîì êîíòåêñòå îí èñïîëüçóåòñÿ êàê ïðåôèêñ èìåíè ïåðå-
ìåíîé. Èñïîëüçóÿ äâà ïðèâåäåííûõ ñèìâîëà, ìîæíî ñîçäàòü øàáëîí, êî-
òîðûé ñîîòâåòñòâóåò ñòðîêå, ñîäåðæàùåé òîëüêî êîíñòðóêöèþ "abcl23"è
íè÷åãî áîëüøå:
if (/abc123$/) ...
 ýòîì çàêëþ÷àþòñÿ îñíîâû ñîçäàíèÿ øàáëîíîâ ðåãóëÿðíûõ âûðà-
æåíèé. Ìîæíî òàêæå óêàçàòü "êëàññ"ñèìâîëîâ, íàïðèìåð [abc], âêëþ÷à-
þùèé òðè áóêâû a, b èëè ñ. Ïîñëå ëþáîãî ñèìâîëà, êëàññà èëè ãðóïïû
ìîæíî èñïîëüçîâàòü êâàíòèôèêàòîðû, óêàçûâàþùèå íà êîëè÷åñòâî èõ
âõîæäåíèé â ïîñëåäîâàòåëüíîñòü. Êðàòêàÿ ñâîäêà âîçìîæíûõ øàáëîíîâ
(äàëåêî íå ïîëíàÿ) ïðåäñòàâëåíà â òàáëèöàõ 8  11.
Ñèíòàêñèñ îïåðàòîðîâ ðåãóëÿðíûõ âûðàæåíèé

Òàáëèöà 8: Òåêñò

[abc123] Ëþáîé èç ñèìâîëîâ "abc123"


[abc123] Íè îäèí èç ñèìâîëîâ "abc123"
[a-g] Âñå ñèìâîëû îò à äî g âêëþ÷èòåëüíî
abc1|abc2 Îïåðàòîð âûáîðà: abc1 èëè abc2
(abcl23) Ãðóïïèðîâêà (äëÿ èñïîëüçîâàíèÿ ñ êâàíòèôèêàòîðàìè,
îïåðàòîðàìè âûáîðà èëè îáðàòíûìè ññûëêàìè)

Òàáëèöà 9: Êâàíòèôèêàòîðû

? 0 èëè 1 âõîæäåíèå ïðåäûäóùåãî òåêñòà


* 0 èëè n âõîæäåíèé ïðåäûäóùåãî òåêñòà (n > 0)
+ 1 èëè n âõîæäåíèé ïðåäûäóùåãî òåêñòà (ï > 1)
*? Çàñòàâëÿåò ïðîèçâîäèòü ïîèñê ñ êâàíòèôèêàòîðîì *, íà÷è-
íàÿ ñ ìèíèìàëüíîãî ñîîòâåòñòâèÿ
m Òî÷íî m âõîæäåíèé ïðåäûäóùåãî òåêñòà
m,n Îò n äî m âõîæäåíèé ïðåäûäóùåãî òåêñòà
m, m èëè áîëåå âõîæäåíèé ïðåäûäóùåãî òåêñòà
138

Òàáëèöà 10: Àíêåðû

 Àíêåð íà÷àëà ñòðîêè


$ Àíêåð êîíöà ñòðîêè
\b Ãðàíèöà ñëîâà
\B Íå ãðàíèöà ñëîâà

Òàáëèöà 11: Escape-êîäû

\X Ýêðàíèðóåò (ò.å. ñ÷èòàåò ëèòåðàëîì, à íå îïåðàòîðîì) ëþ-


áîé ñèìâîë X (íàïðèìåð, ".")
\r Âîçâðàò êàðåòêè
\n Íîâàÿ ñòðîêà
\f Íîâàÿ ñòðàíèöà
\t Òàáóëÿöèÿ
\d Öèôðû (ýêâèâàëåíòíî êëàññó [0-9])
\w Ñèìâîëû, ïðèìåíÿåìûå â ñëîâàõ (ýêâèâàëåíòíî êëàññó [a-
zA-Z0-9_])
\s Ïóñòîé ñèìâîë (ýêâèâàëåíòíî êëàññó [\r\t\n\f])
\D ÍÅ öèôðû
\W ÍÅ ñëîâà
\S ÍÅ ïóñòîé ñèìâîë
\### Ñèìâîë ñ ASCII-êîäîì ### (â âîñüìåðè÷íîì ïðåäñòàâëå-
íèè)
\cX Ñèìâîë Control+X (ãäå X  ëþáîé ñèìâîë)

Êðîìå òîãî, ê øàáëîíó ìîæíî äîáàâèòü ðàçëè÷íûå îïöèè ïîñëå


çàêðûâàþùåãî ñèìâîëà êîñîé ÷åðòû. Îíè âëèÿþò íà ñìûñëîâóþ ÷àñòü
ïîèñêà. Íàïðèìåð, i ïðîèçâîäèò ïîèñê áåç ó÷åòà ðåãèñòðà: /abc/i.
Ðåãóëÿðíûå âûðàæåíèÿ ìîãóò áûòü ñêîëü óãîäíî ñëîæíûìè, îòâå-
÷àÿ ðåøåíèþ ñàìûõ ðàçíûõ çàäà÷ â UNIX-ñðåäå.
Êîíå÷íî æå, êàêîé ñìûñë èìååò ïîèñê áåç âîçìîæíîñòè çàìåíû?
Perl ïîääåðæèâàåò íåñêîëüêî âñòðîåííûõ îïåðàòîðîâ "ïåðåâîäà": îïåðà-
òîð çàìåíû s///, îïåðàòîð "òðàíñëèòåðàöèè"tr/// è ôóíêöèè îáðàáîòêè
ñòðîê, íàïðèìåð, substr().
Äëÿ âûïîëíåíèÿ çàìåí òàêæå èñïîëüçóåòñÿ îïåðàòîð =∼ , íî íà
139

ýòîò ðàç îí ÿâëÿåòñÿ îïåðàòîðîì ïðèñâàèâàíèÿ, à íå ñðàâíåíèÿ. Åãî


àðãóìåíòàìè, ôàêòè÷åñêè, ÿâëÿþòñÿ îïåðàòîð s, ðåãóëÿðíîå âûðàæåíèå,
ñòðîêà-çàìåíèòåëü è äîïîëíèòåëüíûå îïöèè. Âñå îíè ðàçäåëÿþòñÿ ñèì-
âîëîì êîñîé ÷åðòû:
Âîò ïðèìåð, â êîòîðîì óãëîâûå ñêîáêè ïðåîáðàçóþòñÿ â ñîîòâåò-
ñòâóþùèå HTML-ïîñëåäîâàòåëüíîñòè äëÿ îòîáðàæåíèÿ íà ñòðàíèöå:
$myhtml =∼ s/</&lt;/g;
$myhtml =∼ s/>/&gt;/g;
Ïîñëåäíèé ñèìâîë g îòâå÷àåò ãëîáàëüíîé çàìåíå, êîãäà âñå âõîæ-
äåíèÿ çàìåíÿþòñÿ óêàçàííîé ñòðîêîé. Åñëè îí îïóùåí, òî çàìåíÿåòñÿ
òîëüêî ïåðâîå âõîæäåíèå.
Îïåðàòîð çàìåíû îáëàäàåò øèðîêèìè âîçìîæíîñòÿìè, îäíàêî íåóäî-
áåí äëÿ òàêèõ ôóíêöèé, êàê, íàïðèìåð, ïðåîáðàçîâàíèå âñåõ áóêâ ê
îäíîìó ðåãèñòðó. Äëÿ ðåøåíèÿ ïîäîáíûõ çàäà÷ ïðèìåíÿåòñÿ îïåðàòîð
òðàíñëèòåðàöèè tr///.
Îïåðàòîð tr äåéñòâóåò êàê óïðîùåííàÿ è îãðàíè÷åííàÿ âåðñèÿ îïå-
ðàòîðà s. Åãî àðãóìåíòàìè ÿâëÿþòñÿ äâå ãðóïïû ñèìâîëîâ (íå ðåãóëÿð-
íûå âûðàæåíèÿ, à ïðîñòî ãðóïïû ñèìâîëîâ èëè äèàïàçîí). Îïåðàòîð ïðå-
îáðàçóåò ñèìâîëû ïåðâîé èç íèõ â ñèìâîëû âòîðîé. Îáðàòèòå âíèìàíèå,
÷òî ñ êîìàíäîé tr èñïîëüçóåòñÿ îïåðàòîð =, à íå îïåðàòîð ñîîòâåòñòâèÿ
=∼. Íàïðèìåð:
$mystr = "cat and dog";
$mystr = tr/abc/def/;
Òåïåðü ïåðåìåííàÿ $mystr ñîäåðæèò ñòðîêó fdt dnd dog. Òàêîå
ïðåîáðàçîâàíèå ñèìâîëîâ ìîæåò ïðèíèìàòü î÷åíü èíòåðåñíûå ôîðìû,
îñîáåííî, åñëè íîâàÿ ñòðîêà êîðî÷å ñòàðîé.  ýòîì ñëó÷àå îïåðàòîð ïî-
âòîðÿåò áîëåå êîðîòêèé øàáëîí, ÷òîáû ïîëó÷èòü îäèíàêîâîå ÷èñëî ñî-
îòâåòñòâèé. Çà ïîñëåäíèì ñèìâîëîì êîñîé ÷åðòû ìîæíî óêàçàòü îïöèþ
d, êîòîðàÿ "âûðàâíèâàåò"øàáëîíû, óäàëÿÿ ëèøíèå ñèìâîëû èç ïåðâîãî
íàáîðà.
×àùå âñåãî, îïåðàòîð tr ïðèìåíÿåòñÿ äëÿ ïðåîáðàçîâàíèÿ ñòðîêè
ê îïðåäåëåííîìó ðåãèñòðó. Äëÿ ýòîãî â îáåèõ ÷àñòÿõ îïåðàòîðà óêàçû-
âàåòñÿ äèàïàçîí ñèìâîëîâ:
140

$mystr = tr/A-Z/a-z/;
Òàêèì îáðàçîì, âñå ñèìâîëû ñòðîêè $mystr ïðåîáðàçóþòñÿ ê íèæ-
íåìó ðåãèñòðó.
Îäíîé èç ïîëåçíûõ ôóíêöèé îáðàáîòêè òåêñòà ÿâëÿåòñÿ substr().
Î åå èñïîëüçîâàíèè ïîäðîáíî ðàññêàçàíî â ðóêîâîäñòâå ïî ÿçûêó Perl.
Ýòà ôóíêöèÿ âîçâðàùàåò ïîäñòðîêó çàäàííîé äëèíû, íàõîäÿùóþñÿ â
èñõîäíîé ñòðîêå ïî óêàçàííîìó ñìåùåíèþ. Íàïðèìåð:
$mystr = "cat and dog";
$newstr = substr($mystr,0,3);
$newstr ñîäåðæèò ñòðîêó "cat". Åùå áîëåå óäîáíîé ôóíêöèîíàëü-
íîñòè ìîæíî äîáèòüñÿ îò substr() â ñî÷åòàíèè ñ index(). Ïîñëåäíÿÿ
âîçâðàùàåò ñìåùåíèå, ïî êîòîðîìó â èñõîäíîé ñòðîêå íàõîäèòñÿ óêàçàí-
íàÿ ïîäñòðîêà:
$mystr = "cat and dog";
$newstr = substr($mystr,index($mystr,"cat"),index($mystr,"dog"));
Ïåðåìåííîé $mystr ïðèñâàèâàåòñÿ ïîäñòðîêà "cat and "(âêëþ÷àÿ
è çàìûêàþùèé ïðîáåë).
Èñïîëüçîâàíèå ôàéëîâûõ äåñêðèïòîðîâ ( lehandles ) ïîçâîëÿåò îò-
êðûòü ôàéë, ïðî÷åñòü åãî ñîäåðæèìîå â ìàññèâ, âûâåñòè äàííûå â íîâûé
ôàéë è ò.ä. Ìåòîäû ââîäà-âûâîäà ïðèìåíÿþòñÿ äëÿ ââîäà è âûâîäà äàí-
íûõ íå òîëüêî íà êîíñîëü, à è â ôàéëû.
Ïðîñòåéøèì ôàéëîâûì äåñêðèïòîðîì ÿâëÿåòñÿ îïåðàòîð ÷òåíèÿ
ïîòîêà (diamond operator) (õîòÿ ñàì ïî ñåáå îí è íå äåñêðèïòîð). Ýòî
ñïîñîá îáðàùåíèÿ ê âõîäíîìó ôàéëó (èëè íàáîðó ôàéëîâ) èç êîìàíäíîé
ñòðîêè êàê ôàéëîâîìó äåñêðèïòîðó (ïîêà âî âõîäíîì ïîòîêå ïðèñóòñòâó-
þò ñòðîêè). Ýòîò îïåðàòîð ìîæíî ïðèìåíèòü, íàïðèìåð, â öèêëå:
while (<>) print $_;
Ïîñëå ýòîãî íåîáõîäèìî çàïóñòèòü ïðîãðàììó, óêàçàâ â êîìàíäíîé
ñòðîêå íåñêîëüêî àðãóìåíòîâ  èìåí ôàéëîâ:
./myscript.pl lel.txt le2.txt ...
Ïðîãðàììà ïðîñòî âûâåäåò ñîäåðæèìîå âñåõ ôàéëîâ, êàê ýòî äå-
ëàåò êîìàíäà cat. Ýòî î÷åíü óäîáíûé è áûñòðûé ñïîñîá îáðàùåíèÿ ê
ñîäåðæèìîìó ôàéëà. Îäíàêî îí çíà÷èòåëüíî îãðàíè÷åí ïî ñðàâíåíèþ
141

ñ âîçìîæíîñòÿìè íàñòîÿùèõ ôàéëîâûõ äåñêðèïòîðîâ, ê ðàññìîòðåíèþ


êîòîðûõ ìû ñåé÷àñ ïåðåéäåì.
Ïî òðàäèöèè èìÿ ôàéëîâîãî äåñêðèïòîðà ñîñòîèò èç ïðîïèñíûõ
áóêâ. Îí ñîçäàåòñÿ êîìàíäîé open(). Ïîñëå ýòîãî îí ïîçâîëÿåò ÷èòàòü
äàííûå, âûâîäèòü èõ è çàêðûòü äåñêðèïòîð. Âîò ïðèìåð òîãî, êàê ïðî-
÷åñòü ñîäåðæèìîå ôàéëà â ìàññèâ:
open (FH,"/path/to/lel.txt");
@contents = <FH>;
close (FH);
Âîçìîæíû ñèòóàöèè, êîãäà Perl íå ìîæåò îòêðûòü ôàéë, íàïðèìåð,
åñëè îí íå ñóùåñòâóåò, ïðàâà äîñòóïà ê íåìó íå ïîçâîëÿþò ýòîãî èëè ïî
èíûì ïðè÷èíàì. Ïåðåõâàòèòü îøèáêè ïðè îòêðûòèè ôàéëà ïîçâîëÿåò
îïåðàòîð die. Åñëè âûïîëíåíèå âûðàæåíèÿ çàêîí÷èòñÿ íåóäà÷åé è óïðàâ-
ëåíèå ïåðåéäåò ê îïåðàòîðó die, îí âûâåäåò àðãóìåíò (åñëè îí óêàçàí) â
ñòàíäàðòíûé âûõîäíîé ïîòîê è çàâåðøèò ðàáîòó ñöåíàðèÿ. Âîò íàèáîëåå
ðàñïðîñòðàíåííûé ñïîñîá èñïîëüçîâàíèÿ ýòîãî îïåðàòîðà ïðè îòêðûòèè
ôàéëîâ:
open (FH,"/path/to/lel.txt") || die ("Can't open lel.txt!");
@contents = <FH>;
close (FH);
Çàïèñü â ôàéëû ïðåäñòàâëÿåò ñîáîé áîëåå ñëîæíóþ îïåðàöèþ, ïî-
ñêîëüêó ñóùåñòâóåò íåñêîëüêî ñïîñîáîâ âûïîëíèòü åå. Âàæíî ïîìíèòü,
÷òî äàííûå ìîæíî çàïèñàòü â ëþáîé ïîòîê, íà êîòîðûé óêàçûâàåò äå-
ñêðèïòîð â êîìàíäíîé ñòðîêå. Îíè âêëþ÷àþò â ñåáÿ îïåðàòîðû ïåðåíà-
ïðàâëåíèÿ > (ïåðåçàïèñàòü) èëè > > (äîáàâèòü) è îïåðàòîð êîíâåéåðà |,
âûâîäÿùèé äàííûå íà ââîä äðóãîé ïðîãðàììû. Ñöåíàðèé ìîæåò, íàïðè-
ìåð, âûâåñòè òåêñò â ýëåêòðîííîå ñîîáùåíèå (ðèñ. 54).
Ïîìíèòå, ÷òî ñèìâîëû @, èñïîëüçóåìûå â òåêñòîâûõ ñòðîêàõ (àäðå-
ñàõ ýëåêòðîííîé ïî÷òû, íàïðèìåð), íåîáõîäèìî ýêðàíèðîâàòü ñèìâîëîì
îáðàòíîé êîñîé ÷åðòû, ÷òîáû Perl íå ðàññìàòðèâàë èõ êàê èäåíòèôèêàòî-
ðû ìàññèâîâ.  ïðîòèâíîì ñëó÷àå ñöåíàðèé çàâåðøèò ðàáîòó ñ îøèáêîé.
Ôàéëîâûé äåñêðèïòîð ÿâëÿåòñÿ àðãóìåíòîì ôóíêöèè print. Âàæíî
ïîíèìàòü, ÷òî àðãóìåíòîì ïî óìîë÷àíèþ ÿâëÿåòñÿ âñòðîåííûé ôàéëî-
142

Ðèñ. 54:

âûé äåñêðèïòîð <STDOUT> (ñòàíäàðòíûé âûõîäíîé ïîòîê), åñëè íèêà-


êîé äðóãîé íå çàäàí. Ñóùåñòâóåò òàêæå è ôàéëîâûé äåñêðèïòîð <STDIN>.
×òîáû óñòàíîâèòü ôàéëîâûé äåñêðèïòîð ââîäà/ âûâîäà ïî óìîë÷àíèþ,
èñïîëüçóåòñÿ ôóíêöèÿ select():
select (FH);
Òåïåðü íå íóæíî êàæäûé ðàç èñïîëüçîâàòü êîìàíäó print FH. Ïî
îêîí÷àíèè ðàáîòû ñ ïîòîêîì FH íåîáõîäèìî âíîâü îáúÿâèòü STDOUT
ïîòîêîì ïî óìîë÷àíèþ.
Äëÿ ÷òåíèÿ ëèñòèíãà êàòàëîãîâ èñïîëüçóþòñÿ ôóíêöèè opendir() è
readdir(). ×òîáû îòêðûòü êàòàëîã è ïðî÷åñòü åãî ñîäåðæèìîå â ìàññèâ,
ìîæíî âîñïîëüçîâàòüñÿ ñëåäóþùèì ôðàãìåíòîì êîäà:
opendir (DIR,"/path/to/dir");
@les = sort readdir (DIR);
closedir (DIR);
Îâëàäåâ âñåìè èçó÷åííûìè ñðåäñòâàìè, ìîæíî ïðîèçâîäèòü äî-
âîëüíî èíòåðåñíûå îïåðàöèè. Íàïðèìåð, îòêðîåì ôàéë /etc/passwd, ïðî-
÷èòàåì âñå çàïèñè, â êîòîðûõ èäåíòèôèêàòîð ïîëüçîâàòåëÿ áîëüøå 1000,
è âûâåäåì ñîîòâåòñòâóþùèå èìåíà ó÷åòíûõ çàïèñåé è ïîëíûå èìåíà
ïîëüçîâàòåëåé (ðèñ. 55).
Perl èìååò ñîòíè âñòðîåííûõ ôóíêöèé, ÷àñòü èç êîòîðûõ ìû óæå
âèäåëè. Îíè ïðèãîäíû äëÿ ðåøåíèÿ áîëüøèíñòâà îáùèõ çàäà÷ ïðîãðàì-
ìèðîâàíèÿ. Ýòà ôóíêöèîíàëüíîñòü ìîæåò áûòü ðàñøèðåíà ïóòåì ïîä-
êëþ÷åíèÿ äîïîëíèòåëüíûõ ìîäóëåé Perl. Îäíàêî ñî âðåìåíåì, êîãäà âàì
ïîíàäîáÿòñÿ áîëåå ñëîæíûå ïðîãðàììû íà Perl (îñîáåííî òîãäà, êîãäà
ñ ñåðâåðíîé ñòîðîíû èñïîëüçóþòñÿ öåëûå íàáîðû CGI-ñöåíàðèåâ), âû
143

Ðèñ. 55:

ñìîæåòå âîñïîëüçîâàòüñÿ è ñîáñòâåííûìè ôóíêöèÿìè (â Perl îíè íàçû-


âàþòñÿ ïðîöåäóðàìè).
Ôóíêöèè ìîæíî îïðåäåëÿòü â ëþáîì ìåñòå ñöåíàðèÿ. ×òîáû îíè
ðàáîòàëè, èõ äàæå íå îáÿçàòåëüíî "äåêëàðèðîâàòü".
Ïðåäïîëîæèì, ÷òî ôóíêöèè òðåáóåòñÿ ïåðåäàòü íåêîòîðîå ÷èñëî
àðãóìåíòîâ, ñóììó êîòîðûõ îíà íàéäåò. Äëÿ ýòî ïðèìåíÿåòñÿ ñëåäóþùèé
ñèíòàêñèñ (ðèñ. 56).

Ðèñ. 56:

Òîãäà âûçîâ ôóíêöèè áóäåò âûãëÿäåòü òàê (àìïåðñàíò ÿâëÿåòñÿ


ïðåôèêñîì èìåíè ôóíêöèè):
$newsum = &sum(45,14,2134,89);
Ïåðåìåííàÿ @_ óêàçûâàåò íà ñïèñîê àðãóìåíòîâ òàê æå, êàê @ARGV
ïðåäñòàâëÿåò ñîáîé ìàññèâ ïàðàìåòðîâ, ïåðåäàííûõ ïðîãðàììå â êîìàíä-
íîé ñòðîêå. Äëÿ îïðåäåëåíèÿ ôóíêöèè áîëåå òðàäèöèîííîãî âèäà ñ îïðå-
äåëåííûì ÷èñëîì àðãóìåíòîâ-ïåðåìåííûõ (ïîäîáíûé ñèíòàêñèñ èñïîëü-
çóåòñÿ â áîëüøèíñòâå ÿçûêîâ ïðîãðàììèðîâàíèÿ), ìîæíî âîñïîëüçîâàòü-
ñÿ òàêèì îïðåäåëåíèåì (ðèñ.57).
Ôóíêöèè, êàê âñåãäà, çàòðàãèâàþò òåìó ãëîáàëüíîãî è ëîêàëüíîãî
ïðîñòðàíñòâà èìåí. Â Perl íåò ëîêàëüíûõ ôóíêöèé: âñå îíè îïðåäåëåíû
ãëîáàëüíî. Âñå ïåðåìåííûå, îïðåäåëåííûå â ôóíêöèè, ÿâëÿþòñÿ ãëîáàëü-
íûìè, åñëè òîëüêî íå óêàçàíî îáðàòíîå (íàïðèìåð, ñ ïîìîùüþ îïåðàòîðà
144

Ðèñ. 57:

local()). Ìàññèâ @_ ÿâëÿåòñÿ ëîêàëüíûì ïî îïðåäåëåíèþ. Ïðè êàæäîì


âûçîâå ôóíêöèè ñîçäàåòñÿ íîâàÿ êîïèÿ åå àðãóìåíòîâ. Èñïîëüçóÿ ôóíê-
öèþ local(), òî æå ñàìîå ìîæíî ïðîäåëàòü è ñ äðóãèìè ïåðåìåííûìè,
îãðàíè÷èâ îáëàñòü èõ ïðèìåíåíèÿ ïðåäåëàìè ôóíêöèè (ðèñ.58).

Ðèñ. 58:

Àíàëîãè÷íîå äåéñòâèå âûïîëíÿåò è îïåðàòîð my. Íà ñåãîäíÿøíèé


äåíü îí èñïîëüçóåòñÿ øèðå, ÷åì äðóãèå ìåòîäû. Äëÿ óêàçàíèÿ ñïèñêà
ëîêàëüíûõ ïåðåìåííûõ ïðèìåíÿåòñÿ ñëåäóþùèé ñèíòàêñèñ:
my ($mysum, $name, $hash);
Åñëè èíòåðïðåòàòîð Perl çàïóùåí â "ñòðîãîì ðåæèìå"(strict mode),
îí áóäåò âûäàâàòü îøèáêè â ñëó÷àå, åñëè ëîêàëüíûå ïåðåìåííûå íå
îïðåäåëåíû êîððåêòíî âíóòðè êàæäîé ôóíêöèè, è íå ïîçâîëèò âîñïîëü-
çîâàòüñÿ ïåðåìåííûìè, êîòîðûå íå îáúÿâëåíû ñ ïîìîùüþ îïåðàòîðà my.
Êîððåêòíàÿ ðàáîòà ñ ïàìÿòüþ íå ÿâëÿåòñÿ îáÿçàòåëüíîé, ïîñêîëüêó ïðî-
ãðàììû íà Perl, êàê ïðàâèëî, âûïîëíÿþòñÿ íåäîëãî è èíòåðïðåòàòîð
îñóùåñòâëÿåò óïðàâëåíèå ïàìÿòüþ ñàìîñòîÿòåëüíî. Òåì íå ìåíå âàæíî
âûðàáîòàòü õîðîøèé ñòèëü ïðîãðàììèðîâàíèÿ.
Êàæäûé õîðîøèé ÿçûê ïðîãðàììèðîâàíèÿ èìååò àíàëîã ðàçäåëÿ-
åìûõ áèáëèîòåê, è Perl òàêæå íå èñêëþ÷åíèå. Ôàêòè÷åñêè, áèáëèîòåêè
Perl (íàçûâàåìûå ìîäóëÿìè) ïðåäñòàâëÿþò ñîáîé áëîêè íåâûïîëíÿåìîãî
Perl-êîäà ñ ðàñøèðåíèåì .pm (ñîêðàùåíèå îò Perl module  "ìîäóëü
Perl"). .pm ôàéë ñ êîäîì Perl (íàïðèìåð, mylib.pm) ìîæíî ðàçìåñòèòü
â òîì æå êàòàëîãå, ÷òî è ñöåíàðèé, à çàòåì âîñïîëüçîâàòüñÿ îïåðàòîðîì
use (ðàñøèðåíèå .pm ñëåäóåò îïóñòèòü):
145

use mylib;
Âî FreeBSD Perl óñòàíàâëèâàåòñÿ â êàòàëîã /usr/lib/perl5. Îäíàêî
ìîäóëè Perl â íåãî íå óñòàíàâëèâàþòñÿ. Èõ ìîæíî èíñòàëëèðîâàòü ïðè
íåîáõîäèìîñòè, è îíè áóäóò ðàçìåùåíû â êàòàëîãå /usr/local/lib/perl5.
Îí ñîäåðæèò äâà ïîäêàòàëîãà: îäèí èç íèõ ïðåäíàçíà÷åí äëÿ ðóêîâîäñòâ
man (åãî èìåíåì ÿâëÿåòñÿ íîìåð òåêóùåé âåðñèè Perl), à âòîðîé 
íåïîñðåäñòâåííî äëÿ ìîäóëåé (site_perl). Â ýòîì ïîäêàòàëîãå (íà îäèí
óðîâåíü íèæå) íàõîäÿòñÿ ðàçëè÷íûå êàòàëîãè, â êîòîðûõ ñãðóïïèðîâà-
íû óñòàíîâëåííûå ìîäóëè. Êðîìå òîãî, çäåñü æå ïðèñóòñòâóåò êàòàëîã
i386-freebsd, ñîäåðæàùèé ïðåêîìïèëèðîâàííûé êîä íà ÿçûêå Ñ, êîòîðûé
èñïîëüçóåòñÿ íåêîòîðûìè ìîäóëÿìè Perl äëÿ ïîâûøåíèÿ ïðîèçâîäèòåëü-
íîñòè (íàïðèìåð, â ñëîæíûõ ìàòåìàòè÷åñêèõ àëãîðèòìàõ).
Ìîäóëè ñîáðàíû â ãðóïïû è èìåíóþòñÿ ñëåäóþùèì îáðàçîì: ïðå-
ôèêñ, äâîéíîå öâîåòî÷èå (::) è èìÿ ìîäóëÿ. Íàïðèìåð, Net::Telnet ýòî
íàçâàíèå ìîäóëÿ Perl, ñîäåðæàùåãî ñðåäñòâà äëÿ ðàáîòû ñ ïðîòîêîëîì
Telnet, à Net::DNS  ôóíêöèè äëÿ ïîèñêà èìåí ñåðâåðîâ. Äâà ýòèõ ìî-
äóëÿ íàõîäÿòñÿ â êàòàëîãå /usr/local/lib/perl5/site_perl/5.005 â ïîäêàòà-
ëîãå Net â ôàéëàõ Telnet.pm è DNS.pm.
Ýòîò êàòàëîã âêëþ÷åí â ïóòè ïîèñêà Perl. Äëÿ èñïîëüçîâàíèÿ ìî-
äóëÿ â ñöåíàðèè äîñòàòî÷íî âîñïîëüçîâàòüñÿ îïåðàòîðîì use:
use Net::Telnet;
Òåïåðü ëþáîé ôóíêöèåé èç ýòîãî ìîäóëÿ ìîæíî ïîëüçîâàòüñÿ òàê
æå, êàê åñëè áû îíà áûëà îïðåäåëåíà â ñàìîì ñöåíàðèè, òî åñòü óêàçàâ
ïåðåä åå èìåíåì àìïåðñàíò &.
Êàê æå îïðåäåëèòü, êàêèå ôóíêöèè ïðèñóòñòâóþò â ìîäóëå? Äëÿ
ýòîãî ñóùåñòâóåò óòèëèòà perldoc. Îíà ðàáîòàåò ïîäîáíî man, è, åñëè
ìîäóëè óñòàíîâëåíû ïðàâèëüíî (íàïðèìåð, èç íàáîðà ïîðòîâ), îçíàêî-
ìèòüñÿ ñ äîêóìåíòàöèåé ìîæíî, óêàçàâ â êîìàíäíîé ñòðîêå èìÿ ìîäóëÿ.
 äîêóìåíòàöèè òàêîãî òèïà, êàê ïðàâèëî, ñîäåðæèòñÿ ïîëåçíûé è òî÷-
íûé ïðîòîòèï êîäà, êîòîðûé ìîæíî èñïîëüçîâàòü â ñöåíàðèÿõ, à òàêæå
ïîëíûé ñïèñîê ôóíêöèé ìîäóëÿ.
Ñïðàâî÷íûå ìàòåðèàëû îãðîìíîãî îáúåìà óñòàíàâëèâàþòñÿ âìåñòå
ñ Perl èíòåðïðåòàòîðîì. Íàáðàâ man perl âû óâèäèòå ñïèñîê îòäåëüíûõ
146

ñòðàíèö ñïðàâêè, êîòîðûå ìîæíî ïîñìîòðåòü. ×òî áû, íàïðèìåð, óâèäåòü


ñïðàâêó ïî ñèíòàêñèñó, íàáåðèòå man perlsyn.
Äîëãèå ãîäû Perl áûë ñàìûì ïîïóëÿðíûì ÿçûêîì ïðîãðàììèðî-
âàíèÿ äëÿ óòèëèò è Web-ñàéòîâ. Ñåé÷àñ åãî ïîïóëÿðíîñòü ñïàäàåò, íî
áëàãîäàðÿ ìîùè ýòîãî ÿçûêà, îí áûâàåò î÷åíü ïîëåçåí. Ó÷èòûâàéòå, ÷òî
â òàêîì êîëè÷åñòâå ìîäóëåé îáÿçàòåëüíî íàéäåòñÿ òîò, êîòîðûé ðåøàåò
Âàøó çàäà÷ó. Òàê ÷òî ñîçäàâàòü ïðîãðàììû íà Perl âñåãäà ïîëó÷àåòñÿ
áûñòðî, åñëè ïðèâûêíóòü ê åãî óðîäëèâîìó ñèíòàêñèñó.

4.3 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó

1. Ïåðåïèøèòå çàäàíèå èç ïðåäûäóùåé ëàáîðàòîðíîé ðàáîòû, ãäå âû


ñîçäàâàëè master.passwd ôàéëû, â âèäå ñêðèïòà íà sh.

2. Êîìàíäà adduser, êîòîðàÿ ïðåäíàçíà÷åíà äëÿ ñîçäàíèÿ íîâîãî ïîëü-


çîâàòåëÿ, ÿâëÿåòñÿ sh ñêðèïòîì (Âû ìîæåòå ïîñìîòðåòü åãî, íàáðàâ
vi /sbin/adduser). Ñîçäàéòå ñâîþ, óïðîùåííóþ âåðñèþ ïðîãðàì-
ìû (addnewuser) è äîáàâüòå åå â îäèí èç ïóòåé ïîèñêà ïðîãðàìì,
â ñîîòâåòñòâèè ñ ïðàâèëàìè èõ ðàçìåùåíèÿ. Íå çàáûâàéòå, ÷òî äëÿ
ïîëüçîâàòåëÿ òàê æå äîëæåí áûòü ñîçäàí êàòàëîã â ïàïêå home.

3. Îïöèîíàëüíî (äëÿ ëó÷øèõ ñòóäåíòîâ), íàïèøèòå man ñïðàâêó ê


íåé è ñäåëàéòå òàê, ÷òî áû îíà âûçûâàëàñü ïî êîìàíäå man addnewuser.

4. Ñîçäàéòå ñêðèïò íà sh äëÿ óäàëåíèÿ ïîëüçîâàòåëåé.

5. Ñîçäàéòå ñêðèïò äëÿ ïåðåìåùåíèÿ ïîëüçîâàòåëåé ìåæäó ãðóïïàìè.


Ïðîãðàììà äîëæíà ðàáîòàòü â èíòåðàêòèâíîì ðåæèìå è èìåòü
ìåíþ.

6. Â êîìàíäå wc, êîòîðàÿ íàõîäèòñÿ â ñèñòåìå, åñòü îïöèè äëÿ âûâîäà


îòäåëüíî êîëè÷åñòâà ñòðîê, ñëîâ è ñèìâîëîâ. Äîáàâüòå ýòó ôóíê-
öèîíàëüíîñòü â ïðîãðàììó wc, êîòîðàÿ äàíà â âèäå ïðèìåðà.

7. Ïðîãðàììà cp, êîòîðàÿ òàê æå äàíà â âèäå ïðèìåðà, ðàáîòàåò â


îïåðàöèîííûõ ñèñòåìàõ ñåìåéñòâà Linux, íî âî FreeBSD îíà âûâî-
147

äèò îøèáêó î òîì, ÷òî áèáëèîòåêè ñ âûçîâàìè ôóíêöèè error íå


íàéäåíû. Ïîäêëþ÷èòå ïðàâèëüíóþ áèáëèîòåêó èëè ñàìè íàïèøèòå
îáðàáîòêó äëÿ êàæäîé èç îøèáîê.

8. Ïåðåïèøèòå ïðîãðàììó ïî àíàëèçó ôàéëà acme.db íà ÿçûê Perl.


Ñðàâíèòå âûâîä ïðîãðàìì íà sh è íà perl ñ ïîìîùüþ ñîîòâåòñòâó-
þùèõ ïðîãðàìì (wc, di etc). Íå èñïîëüçóéòå â ïðîãðàììå äîñòóï
ê êîìàíäíîé ñòðîêå (÷åðåç îáðàòíûå êàâû÷êè). Âåñü ôóíêöèîíàë
ðåàëèçóéòå ñðåäñòâàìè Perl.

4.4 Ñîäåðæàíèå îò÷åòà

 îò÷åòå äîëæíû áûòü ïðåäñòàâëåí èñõîäíûé êîä Âàøèõ ðàáîòàþ-


ùèõ ïðîãðàìì ñ êîììåíòàðèÿìè.

4.5 Âîïðîñû äëÿ ñàìîêîíòðîëÿ

1. ×òî òàêîå ïðîãðàììèðîâàíèå íà ÿçûêå êîìàíäíîãî èíòåðïðåòàòî-


ðà?

2. ×òî îçíà÷àåò ïåðâàÿ ñòðîêà ñêðèïòà è êàê îíà îáðàáàòûâàåòñÿ


ñèñòåìîé?

3. ×òî òàêîå êîììåíòàðèé è äëÿ ÷åãî åãî ïðèìåíÿþò?

4. ×òî òàêîå ïåðåìåííàÿ ñðåäû è ïåðåìåííàÿ èíòåðïðåòàòîðà?

5. ×òî òàêîå ïåðåìåííàÿ?

6. Äëÿ ÷åãî íóæíû öèêëû?

7. À äëÿ ÷åãî îïåðàòîð ñðàâíåíèÿ?

8. ×òî òàêîå àðãóìåíòû êîìàíäíîé ñòðîêè?

9. ×åì àðãóìåíòû êîìàíäíîé ñòðîêè îòëè÷àþòñÿ îò îïöèé êîìàíä?

10. ×òî òàêîå óñëîâíûé îïåðàòîð?


148

11. Êàê è äëÿ ÷åãî èñïîëüçóþò êîä çàâåðøåíèÿ ïðîãðàììû?

12. Âñåãäà ëè îí ñóùåñòâóåò?

13. Âñåãäà ëè íóæíî èñïîëüçîâàòü åãî â ñâîèõ ïðîãðàììàõ?

14. Åñëè Âû íå óñòàíàâëèâàëè êîä çàâåðøåíèÿ, òî ÷òî ñîäåðæèò ïåðå-


ìåííàÿ $?, ïîñëå âûïîëíåíèÿ Âàøåãî ñöåíàðèÿ?

15. Çà÷åì îòäåëüíûå ÷àñòè ïðîãðàììû âûíîñèòü â ôóíêöèè?

16. ×òî òàêîå êîìïèëèðóåìûé ÿçûê ïðîãðàììèðîâàíèÿ?

17. ×òî òàêîå êîìïèëÿòîð?

18. ×òî òàêîå èíòåðïðåòèðóåìûé ÿçûê ïðîãðàììèðîâàíèÿ?

19. ×òî òàêîå èíòåðïðåòàòîð?

20. ×òî òàêîå ñèíòàêñèñ ÿçûêà ïðîãðàììèðîâàíèÿ?


149

5 Ëàáîðàòîðíàÿ ðàáîòà 5.

Àäìèíèñòðèðîâàíèå FreeBSD

Öåëüþ ðàáîòû ÿâëÿåòñÿ

5.1 Ïîëüçîâàòåëè, ãðóïïû è ïðàâà äîñòóïà

Ìîäåëü ïîëüçîâàòåëåé è ïðàâ äîñòóïà, ïðèìåíÿåìàÿ âî FreeBSD


(è áîëüøèíñòâå ñèñòåì UNIX), ÿâëÿåòñÿ îäíîóðîâíåâîé. Åñòü òîëüêî äâà
òèïà ïîëüçîâàòåëåé: îáû÷íûå è ñóïåðïîëüçîâàòåëü. Ïðàâà äîñòóïà îáû÷-
íûõ ïîëüçîâàòåëåé òàê èëè èíà÷å îãðàíè÷èâàþò èõ äåéñòâèÿ â ñèñòåìå.
Ïîëüçîâàòåëü root  åäèíñòâåííûé, êòî ñâîáîäåí îò êàêèõ áû òî íè
áûëî îãðàíè÷åíèé. Äðóãèå ìîäåëè ïðàâ äîñòóïà (íàïðèìåð â Windows)
âêëþ÷àþò â ñåáÿ áîëåå ñëîæíûå ìîäåëè, ÷òî ïîçâîëÿåò îáåñïå÷èòü îïðå-
äåëåííûå ôóíêöèè ñèñòåìû, òàêèå êàê àóòåíòèôèêàöèÿ è ïðîöåññû ñè-
ñòåìíîãî óðîâíÿ. À ÷åì ïðîùå ìîäåëü, òåì áîëåå èçîùðåííûì äîëæåí
áûòü àäìèíèñòðàòîð. Åìó ïðèäåòñÿ î÷åíü êðåïêî ïîäóìàòü, ÷òîáû íà-
ñòðîèòü, äîïóñòèì, Web-ñåðâåð ñ ïðàâèëüíûìè ïðàâàìè äîñòóïà. Ñëå-
äóåò îòìåòèòü, ÷òî ñèñòåìà ñî ñëîæíîé ñõåìîé ïðàâ äîñòóïà ÿâëÿåòñÿ
ìåíåå çàùèùåííîé, ïîñêîëüêó ñîäåðæèò áîëüøå ýëåìåíòîâ, ïîäâåðæåí-
íûõ ñáîÿì.
Êàæäûé ïîëüçîâàòåëü FreeBSD èìååò îãðàíè÷åííûå ïðàâà äîñòóïà
è ïîñòîÿííîå ìåñòî äëÿ ðàáîòû â ñèñòåìå  íà÷àëüíûé êàòàëîã ( home
directory ). Ïîâûñèòü ñâîé ñòàòóñ â ñèñòåìå äî óðîâíÿ root äàåò âîçìîæ-
íîñòü êîìàíäà su.
×òîáû èìåòü âîçìîæíîñòü çàïóñòèòü êîìàíäó su íåîáõîäèìî ïðè-
íàäëåæàòü ê ýëèòíîé ãðóïïå, íàçûâàåìîé wheel. Õîòÿ FreeBSD èìååò
òîëüêî äâà òèïà ïîëüçîâàòåëåé  îáû÷íûå è root, ãðóïïà wheel âåñü-
ìà ýôôåêòèâíî ñîçäàåò îãðàíè÷åííûé êðóã îñîáî äîâåðåííûõ ëèö: òåõ,
êîìó ïîçâîëåíî ïîëó÷àòü ïðèâèëåãèè root (ñ ïîìîùüþ su). Èñïîëüçóÿ
âîçìîæíîñòè êîìàíäû su, ìîæíî âîçëîæèòü ÷àñòü àäìèíèñòðàòèâíûõ
çàäà÷ íà äðóãèõ ïîëüçîâàòåëåé.
Äëÿ áîëåå òîíêîé íàñòðîéêè ïðåäíàçíà÷åíà êîìàíäà sudo.
150

Ïîëüçîâàòåëåé ñèñòåìû ìîæíî ðàçäåëèòü íà ðåàëüíûõ ëþäåé, ïîä-


êëþ÷àþùèõñÿ ê ñèñòåìå, è ïñåâäîïîëüçîâàòåëåé (òàêèõ êàê bin, operator,
daemon, nobody è äðóãèå). Ïîñëåäíèå íåîáõîäèìû ñèñòåìå äëÿ òîãî,
÷òîáû óïðàâëÿòü ïðîöåññàìè. Âàæíî ïîíèìàòü, ÷òî ïðîöåññû, êàê è
ôàéëû, ïðèíàäëåæàò îïðåäåëåííûì ïîëüçîâàòåëÿì è ïðè âçàèìîäåé-
ñòâèè ñ äðóãèìè ïðîöåññàìè è ôàéëàìè ïîä÷èíÿþòñÿ îãðàíè÷åíèÿì,
íàëîæåííûì íà íèõ ïðàâàìè äîñòóïà.
Ïîëüçîâàòåëè íèêîãäà íå ðàáîòàþò ñ ôàéëàìè íåïîñðåäñòâåííî:
âûïîëíÿåìûå èìè êîìàíäû çàïóñêàþò ïðîöåññû (èìåþùèå óñòàíîâëåí-
íûå äëÿ ïîëüçîâàòåëÿ ïðàâà äîñòóïà), à ïðîöåññû âûïîëíÿþò çàäàííûå
îïåðàöèè íàä ôàéëàìè è âçàèìîäåéñòâóþò ñ äðóãèìè ïðîöåññàìè. Ïðî-
öåññ, âëàäåëüöåì êîòîðîãî ÿâëÿåòñÿ ïåðâûé ïîëüçîâàòåëü (user 1), ìîæåò
ðàáîòàòü òîëüêî ñ ôàéëàìè è ïðîöåññàìè, ïðèíàäëåæàùèìè åìó, íî åñëè
îí ïîïûòàåòñÿ èçìåíèòü ÷òî-ëèáî, ïðèíàäëåæàùåå âòîðîìó ïîëüçîâà-
òåëÿ (user 2), â äîñòóïå áóäåò îòêàçàíî. Ïðè ïðîñòåéøèõ ñèñòåìíûõ
óñòàíîâêàõ ïîëüçîâàòåëü ìîæåò âíîñèòü èçìåíåíèÿ ëèøü â ïðèíàäëå-
æàùèå åìó ôàéëû è ïðîöåññû.
Åñëè user 1  ýòî root, òî åãî ïðîöåññû èìåþò "àáñîëþòíóþ âëàñòü"íàä
ëþáûìè ïðîöåññàìè. Åñëè îäèí èç ïðîöåññîâ ïîëüçîâàòåëÿ root  ýòî
ïðîãðàììà, èçìåíÿþùàÿ îïðåäåëåííûå íàñòðîéêè ñèñòåìû â êîíôèãóðà-
öèîííîì ôàéëå, òî ñèñòåìà ñòàíåò óÿçâèìîé äëÿ àòàê, ïîñêîëüêó õàêåðû
ìîãóò âîñïîëüçîâàòüñÿ îøèáêîé â ýòîé ïðîãðàììå è, ïðîèçâåäÿ çàïðîñ ñ
"íåïðàâèëüíûìè"ïàðàìåòðàìè, íàðóøèòü ðàáîòó ñèñòåìû èëè ïîëó÷èòü
êîíòðîëü íàä íåé. Ïîýòîìó áîëüøèíñòâî ñèñòåìíûõ ïðîöåññîâ çàïóñêà-
åòñÿ ñ ïðàâàìè äîñòóïà ïñåâäîïîëüçîâàòåëåé, à íå ïîëüçîâàòåëÿ root.
Åùå ðàç íàïîìèíàþ, ÷òî íàñòîÿùèå UNIX àäìèíèñòðàòîðû èñïîëüçóþò
ó÷åòíóþ çàïèñü root òîëüêî äëÿ òîãî ÷òî áû ñîçäàòü ñåáå ïîëüçîâàòåëÿ
è óñòàíîâèòü ïðîãðàììó sudo. Ïîñëå ýòîãî ó÷åòíàÿ çàïèñü root âàì íå
ïîíàäîáèòñÿ, åñëè òîëüêî âû íå ðàçðóøèòå ñèñòåìó.
Êàæäûé ïîëüçîâàòåëü ïðèíàäëåæèò ê îïðåäåëåííîé ïåðâè÷íîé ãðóï-
ïå. Çà÷àñòóþ îíà âêëþ÷àåò òîëüêî åãî ñàìîãî è íîñèò åãî èìÿ. Ïðè
íåîáõîäèìîñòè ýòî ìîæíî èçìåíèòü, ñäåëàâ ïåðâè÷íîé äëÿ âñåõ ïîëüçîâà-
òåëåé ãðóïïó users. Íàëè÷èå îòäåëüíîé ãðóïïû äëÿ êàæäîãî ïîëüçîâàòå-
151

ëÿ îáëàäàåò áîëüøåé ãèáêîñòüþ è ïðåäñòàâëÿåò ñîáîé áîëåå çàùèùåííóþ


ìîäåëü. Áîëåå ïîäðîáíóþ èíôîðìàöèþ î "ïåðñîíàëüíûõ"ãðóïïàõ ìîæíî
ïî÷åðïíóòü èç man adduser.
Âñÿêèé ïîëüçîâàòåëü ìîæåò ïðèíàäëåæàòüêëþáîé ãðóïïå â ñèñòå-
ìå, âêëþ÷àÿ ïåðñîíàëüíûå ãðóïïû äðóãèõ ïîëüçîâàòåëåé èëè ãðóïïó
wheel (ãðóïïû äîáàâëÿþòñÿ â ôàéë /etc/group). Åäèíñòâåííûì ïîëü-
çîâàòåëåì, óïðàâëÿþùèì ïðèíàäëåæíîñòüþ ïîëüçîâàòåëåé ê ðàçëè÷íûì
ãðóïïàì ÿâëÿåòñÿ root.
Íàçíà÷åíèå ãðóïïû wheel: ýòî ïåðå÷åíü ïîëüçîâàòåëåé, êîòîðûå
ìîãóò ïîëó÷èòü ïðàâà äîñòóïà root, ïðèìåíèâ êîìàíäó su. Ãðóïïû èìå-
þò è äðóãîå íàçíà÷åíèå. Êàê ïðàâèëî, ãðóïïû íåîáõîäèìû äëÿ òîãî, ÷òî-
áû ïðåäîñòàâèòü íåñêîëüêèì ïîëüçîâàòåëÿì èäåíòè÷íûå ïðàâà äîñòóïà ê
íàáîðó ôàéëîâ èëè ïðîöåññîâ, ñêàæåì, ïîçâîëèòü ãðóïïå ïðîãðàììèñòîâ,
ðàáîòàþùèõ íàä îáùèì ïðîåêòîì, âíîñèòü èçìåíåíèÿ â îáùèå ôàéëû
ñ èñõîäíûì êîäîì. Íåäîïóñòèìî, ÷òîáû íåñêîëüêî ïîëüçîâàòåëåé ðåãè-
ñòðèðîâàëèñü ïîä îäíîé ó÷åòíîé çàïèñüþ èëè èñïîëüçîâàëè îäèí ïàðîëü.
Ãðóïïû æå ïîçâîëÿþò èì ñîâìåñòíî "âëàäåòü"íàáîðîì ôàéëîâ è èìåòü
íåîáõîäèìûå äëÿ ðàáîòû ñ íèì ïðàâà äîñòóïà.

5.1.1 Ïðàâà äîñòóïà ê îáúåêòàì

Äàëåå ñëåäóåò ðàçîáðàòüñÿ ñ ìîäåëüþ âëàäåíèÿ ôàéëàìè. Âñå âà-


ðèàíòû UNIX èìåþò îäèíàêîâóþ ñòðóêòóðó: êàæäûé ôàéë èëè êàòàëîã
ïðèíàäëåæèò è ïîëüçîâàòåëþ, è ãðóïïå. Òåì íå ìåíåå ýòî íå îçíà÷àåò, ÷òî
âñå ïîëüçîâàòåëè èëè ÷ëåíû ãðóïïû èìåþò îäèíàêîâûå ïðàâà äîñòóïà.
Äëÿ ïîëó÷åíèÿ ëèñòèíãà, â êîòîðîì âèäíû ïðàâà äîñòóïà, íåîáõî-
äèìî çàïóñòèòü êîìàíäó ls ñ îïöèÿìè -l (ïîäðîáíûé âûâîä).
Äëÿ êàæäîé ðàçíîâèäíîñòè ïîëüçîâàòåëåé  ïîëüçîâàòåëü (user),
ãðóïïà (group) è äðóãèå (others)  ñóùåñòâóåò íàáîð áèòîâ ïîëíîìî-
÷èé. Ýòè áèòû ïðåäîñòàâëÿþò âîçìîæíîñòü ÷èòàòü ôàéë, ìîäèôèöèðî-
âàòü åãî è âûïîëíÿòü, èíà÷å ãîâîðÿ ïðåäîñòàâëÿþò òðè âèäà äîñòóïà:
÷òåíèå (read), çàïèñü (write) è âûïîëíåíèå (execute). Ñìûñë ýòèõ áèòîâ
äëÿ ôàéëîâ ñëåäóþùèé:
152

Ðèñ. 59: Âûâîä êîìàíäû ls -l

- r  ôàéë ìîæíî ÷èòàòü;

- w  ôàéë ìîæíî ìîäèôèöèðîâàòü, óäàëÿòü è ïåðåèìåíîâûâàòü;

- x  ôàéë ìîæíî âûïîëíÿòü.

Èòàê, ïðàâà äîñòóïà ê ôàéëó îïðåäåëÿåòñÿ çàïèñüþ òèïà - r w x r


w - r - -. Ïåðâûé äåôèñ îçíà÷àåò, ÷òî äàííûé îáúåêò ÿâëÿåòñÿ ôàéëîì,
ñëåäóþùèå òðè ñèìâîëà (r w x) óêàçûâàþò ïðàâà âëàäåëüöà ôàéëà,
ñèìâîëû r w - îïðåäåëÿþò ïðàâà ÷ëåíîâ ãðóïïû, ê êîòîðîé ïðèíàäëåæèò
ïîëüçîâàòåëü, ïîñëåäíèå òðè ñèìâîëà (r - -) îòíîñÿòñÿ ê ïðàâàì âñåõ
îñòàëüíûõ ïîëüçîâàòåëåé. Ïî óìîë÷àíèþ ê ôàéëàì ïðèìåíÿåòñÿ ðåæèì
äîñòóïà r w - r - - r - -.
Íåîáõîäèìî ïîíèìàòü, ÷òî ïîëüçîâàòåëü ìîæåò ÷èòàòü ïðèíàäëå-
æàùèå åìó ôàéëû ëèøü â òîì ñëó÷àå, åñëè ïðàâà äîñòóïà óñòàíîâëåíû
ñîîòâåòñòâóþùèì îáðàçîì (ò.å. ðàçðåøàþò ÷òåíèå âëàäåëüöó ôàéëà). Òî
æå ñàìîå îòíîñèòñÿ è ê ãðóïïå.
Ñóïåðïîëüçîâàòåëü èìååò âîçìîæíîñòü èçìåíèòü ïðàâà âëàäåíèÿ
ëþáûì ôàéëîì èëè êàòàëîãîì â ñèñòåìå. Ýòî îäíî èç òåõ äåéñòâèé,
âûïîëíÿòü êîòîðûå ìîæåò òîëüêî root: îáû÷íûå ïîëüçîâàòåëè íå ìîãóò
ïåðåäàâàòü ñâîè ôàéëû äðóã äðóãó.
Äëÿ èçìåíåíèÿ õîçÿèíà ôàéëà ïðèìåíÿåòñÿ êîìàíäà chown (change
owner  èçìåíèòü âëàäåëüöà):
153

#chown user le1


Îíà èçìåíÿåò èìÿ âëàäåëüöà ôàéëà le1 (íî íå ãðóïïó-âëàäåëüöà)
íà user.
Êîìàíäà chown ïðèìåíèìà è ê êàòàëîãàì:
#chown user /home/frank
Ýòà êîìàíäà, ïðèìåíÿåìàÿ ê êàòàëîãó, âûïîëíÿåòñÿ íàä ýëåìåíòîì
".". Ñ ýòîé ìèíóòû ëèøü user  åäèíñòâåííûé ïîëüçîâàòåëü, èìåþùèé
âîçìîæíîñòü ñîçäàâàòü èëè óäàëÿòü ôàéëû â ýòîì êàòàëîãå, äàæå åñëè
îíè åìó íå ïðèíàäëåæàò. Ñëåäóåò îòìåòèòü, ÷òî ïîëüçîâàòåëü ìîæåò
èçìåíÿòü ôàéëû, êîòîðûìè îí âëàäååò, â êàêèõ áû êàòàëîãàõ îíè íè
íàõîäèëèñü.
Ñóùåñòâóåò ïîõîæàÿ íà chown êîìàíäà  chgrp. Îíà èçìåíÿåò
ïðàâà âëàäåíèÿ ãðóïïû, à íå ïîëüçîâàòåëÿ. Äåéñòâóåò îíà ïîäîáíûì
îáðàçîì:
#chgrp users contents.html
Åñëè ïîñëå ýòîãî ïðàâà âëàäåíèÿ ôàéëîì contents.html âûãëÿäÿò
òàê:
- r w - r w - r - - 1 bob users 2703 Dec 22 2008 contents.html
òî è ïîëüçîâàòåëü, è ãðóïïà èìåþò ïðàâî çàïèñè, â äàííîé ñèòóàöèè
ëþáîé ïîëüçîâàòåëü èç ãðóïïû users ìîæåò çàïèñûâàòü â ôàéë òî÷íî òàê
æå, êàê è bob.
Ïî óìîë÷àíèþ âî FreeBSD äëÿ êàæäîãî ïîëüçîâàòåëÿ ñîçäàåòñÿ
íîâàÿ ãðóïïà: íàïðèìåð, ãðóïïà bob ÿâëÿåòñÿ ïåðâè÷íîé äëÿ ïîëüçîâà-
òåëÿ bob. Âñå ôàéëû ñîçäàþòñÿ ñ ïðàâàìè âëàäåíèÿ: ïîëüçîâàòåëü bob,
ãðóïïà bob. Åñëè äðóãîé ïîëüçîâàòåëü (íàïðèìåð, frank) ïðèíàäëåæèò
ê ãðóïïå bob, îí ìîæåò çàïèñûâàòü â ôàéëû. Ýòî ìåõàíèçì, êîòîðûé
ïðåäîñòàâëÿåò ïîëüçîâàòåëÿì bob è frank îäèíàêîâûå âîçìîæíîñòè äî-
ñòóïà ê ôàéëàì.
chgrp  ýòî ïðîñòî äðóãîé ñïîñîá çàïóñêà êîìàíäû chown; ïðè
æåëàíèè ìîæíî èñïîëüçîâàòü ñëåäóþùèé ñèíòàêñèñ:
#chown bob.users contents.html
Ïîñëå ýòîãî ôàéëîì contents.html âëàäåþò ïîëüçîâàòåëü bob è ãðóï-
ïà users. ×òîáû èçìåíèòü òîëüêî ãðóïïó âëàäåëüöà ïðèìåíÿåòñÿ ôîðìàò:
154

#chown .users contents.html


È chown, è chgrp ïîääåðæèâàþò îïöèþ -R.
Òåïåðü ñòðîêè, çàäàþùèå ïðàâà äîñòóïà ê êàòàëîãàì. Ïðåæäå âñå-
ãî, êàòàëîãè ðàñïîçíàþòñÿ ïî ïåðâîìó áèòó â ñòðîêå  d. Ýòî ïðîñòî
ôëàæîê, íå ñâÿçàííûé ñ ïðàâàìè äîñòóïà.
Ïîëíîìî÷èÿ íà ðàáîòó â êàòàëîãå äåéñòâóþò ïî òîìó æå ïðèíöèïó,
÷òî è ïîëíîìî÷èÿ íà ôàéëû, íî çäåñü åñòü îòëè÷èÿ:

- r  êàòàëîã ìîæíî ÷èòàòü (íàïð., âûïîëíèòü êîìàíäó ls);

- w  êàòàëîã ìîæíî ìîäèôèöèðîâàòü (ñîçäàâàòü èëè óäàëÿòü ôàé-


ëû), óäàëÿòü è ïåðåèìåíîâûâàòü;

- x  â êàòàëîãå ìîæíî âûïîëíÿòü îïåðàöèè íàä ôàéëàìè, â òîì


÷èñëå ïðîèçâîäèòü ïîèñê ôàéëîâ â íåì.

Òàê, íàïðèìåð, çàïèñü d r w x r - x r - x îçíà÷àåò, ÷òî äàííûé


îáúåêò ÿâëÿåòñÿ êàòàëîãîì (d), åãî âëàäåëåö ìîæåò âûïîëíÿòü â ýòîì êà-
òàëîãå ëþáûå äåéñòâèÿ, à åãî ãðóïïà è îñòàëüíûå ìîãóò òîëüêî ÷èòàòü è
âûïîëíÿòü ïîèñê. Îáðàòèòå âíèìàíèå: ÷òîáû ñîäåðæèìîå êàòàëîãà ìîæ-
íî áûëî ïðîñìîòðåòü, ó íåãî äîëæåí áûòü óñòàíîâëåí áèò âûïîëíåíèÿ
 x. Äëÿ êàòàëîãîâ ýòîò áèò èìååò ñìûñë "ïîèñê". Åñëè âûïîëíÿåìûé
ôàéë ÿâëÿåòñÿ ñöåíàðèåì, òî ïîëüçîâàòåëü äëÿ âûïîëíåíèÿ ýòîãî ôàéëà
äîëæåí èìåòü ïðàâî íà ÷òåíèå è âûïîëíåíèå. Äëÿ âûïîëíåíèÿ äâîè÷íîãî
ôàéëà äîñòàòî÷íî èìåòü òîëüêî ðàçðåøåíèå íà âûïîëíåíèå.
Ïðè ïîïûòêå óäàëèòü ôàéë (rm), ïðàâî çàïèñè â êîòîðûé îòñóò-
ñòâóåò, ñèñòåìà âûäàåò ñëåäóþùèé çàïðîñ:
#rm le.txt
override r w - r - - r - - bob/users for 1.uu? ó
Çàìåòüòå, ÷òî ñèñòåìà, õîòü è ñïðàøèâàåò, óäàëèòü ôàéë âñå ðàâíî
íå ïîçâîëèò. Çàïðîñ ïîÿâëÿåòñÿ ïðè âñÿêîé ïîïûòêå óäàëèòü ôàéë, íå
ïðèíàäëåæàùèé ïîëüçîâàòåëþ, ïðè÷åì äàæå ïîëîæèòåëüíûé îòâåò ("ó")
íå ïðèâîäèò ê åãî óäàëåíèþ. Âûâîä ýòîãî çàïðîñà ìîæíî îòêëþ÷èòü ñ
ïîìîùüþ îïöèè rm -f.
155

Òàáëèöà 12: Âîçìîæíîñòè ìàíèïóëèðîâàíèÿ ôàéëàìè ïðè ðàçëè÷íûõ


ïðàâàõ äîñòóïà ê íèì è ñîäåðæàùèì èõ êàòàëîãàì

Äåéñòâèÿ Êàòàëîã íå Êàòàëîã íå Êàòàëîã Êàòàëîã


äîñòóïåí äîñòóïåí äîñòóïåí äîñòóïåí
äëÿ çàïèñè, äëÿ çàïèñè, äëÿ çàïèñè, äëÿ çàïèñè,
ïîëüçîâàòåëü ïîëüçîâàòåëü ïîëüçîâàòåëü ïîëüçîâàòåëü
íå èìååò ïðàâ èìååò ïðàâî íå èìååò ïðàâ èìååò ïðàâî
íà çàïèñü â íà çàïèñü â íà çàïèñü â íà çàïèñü â
ôàéë ôàéë ôàéë ôàéë
Ñîçäàòü ôàéë - - + +
Ïåðåçàïèñàòü ñî- - + - +
äåðæàíèå ôàéëà
Ðåäàêòèðîâàòü - + - +
ñîäåðæàíèå
ôàéëà
Ïåðåèìåíîâàòü - - + +
ôàéë
Óäàëèòü ôàéë - - + +

Âî FreeBSD òîò ôàéë, êîòîðûé ìîæíî óäàëèòü, ìîæíî òàêæå ïåðå-


íåñòè â äðóãîé êàòàëîã ïîñðåäñòâîì êîìàíäû mv (move  ïåðåìåñòèòü).
Ïðè ýòîì ôàéë ñíà÷àëà êîïèðóåòñÿ, à çàòåì óäàëÿåòñÿ. Ôàéë, êîòîðûé
ìîæíî òîëüêî ÷èòàòü, ìîæíî ëèøü ñêîïèðîâàòü.
Äëÿ èçìåíåíèÿ ïðàâ äîñòóïà ê ôàéëàì èëè êàòàëîãàì èñïîëüçóåòñÿ
êîìàíäà chmod (change mode  èçìåíèòü ðåæèì). Êîìàíäó chmod
ìîæíî èñïîëüçîâàòü äâóìÿ ñïîñîáàìè: ñ ÷èñëîâûìè èëè ñèìâîëè÷åñêèìè
àðãóìåíòàìè.

5.1.2 Èçìåíåíèå ïðàâ äîñòóïà

Ñàìûé ïðîñòîé ñïîñîá èçìåíåíèÿ ïðàâ äîñòóïà çàêëþ÷àåòñÿ â óñòà-


íîâêå òðåõçíà÷íîãî âîñüìåðè÷íîãî ÷èñëà, êîòîðîå óíèêàëüíûì îáðàçîì
çàäàåò ïðàâà äîñòóïà äëÿ êàæäîãî òèïà âëàäåëüöà. Êàæäàÿ öèôðà îïðå-
äåëÿåò ðåæèì âëàäåëüöà: ïîëüçîâàòåëÿ, ãðóïïû è âñåõ îñòàëüíûõ. ×èñëî,
çàäàþùåå ðåæèì, ïîëó÷àåòñÿ ïóòåì ñóììèðîâàíèÿ ÷èñåë, îòâå÷àþùèõ
156

áèòàì ïðàâ äîñòóïà. Âîçìîæíûå çíà÷åíèÿ áèòîâ ïðèâåäåíû â òàáë. 13.

Òàáëèöà 13: Áèòû ðåæèìîâ ïðàâ äîñòóïà è èõ çíà÷åíèÿ

Áèò Çíà÷åíèå
0 íåò äîñòóïà
1 äîñòóï íà âûïîëíåíèå (äëÿ êàòàëîãîâ  ïîèñê)
2 äîñòóï íà çàïèñü
4 äîñòóï íà ÷òåíèå

Òàêèì îáðàçîì, ðåæèìó "÷òåíèå è çàïèñü"ñîîòâåòñòâóåò 6, ðåæèìó


"÷òåíèå è âûïîëíåíèå" 5, à ðåæèìó "÷òåíèå, çàïèñü è âûïîëíåíèå"
7.
Êîìáèíàöèÿ öèôð ôîðìèðóåò òðåõçíà÷íîå ÷èñëî, çàäàþùåå ñòàí-
äàðòíûå ïðàâà äîñòóïà ê ôàéëó. Íåñêîëüêî ïðèìåðîâ ïðèâåäåíî â òàáë. ??.

Òàáëèöà 14: Ïðàâà äîñòóïà â ÷èñëåííîé ôîðìå

Ðåæèì Çíà÷åíèå
755 ÷òåíèå/çàïèñü/âûïîëíåíèå äëÿ âëàäåëüöà, ÷òåíèå/âûïîë-
íåíèå äëÿ ãðóïïû è îñòàëüíûõ
644 ÷òåíèå/çàïèñü äëÿ âëàäåëüöà, òîëüêî ÷òåíèå äëÿ ãðóïïû è
îñòàëüíûõ
600 ÷òåíèå/çàïèñü äëÿ âëàäåëüöà, äëÿ ãðóïïû è îñòàëüíûõ
äîñòóïà íåò

Ïðèìåíèòü ïðàâà äîñòóïà ê ôàéëó èëè êàòàëîãó ïîçâîëÿåò êîìàíäà


âèäà:
#chmod 755 testscript.sh
Åñòü åùå ÷åòâåðòàÿ öèôðà, êîòîðàÿ óïðàâëÿåò "äîïîëíèòåëüíû-
ìè"ñâîéñòâàìè: çàäàåò îñîáîå ïîâåäåíèå ôàéëîâ è êàòàëîãîâ ïðè îïðå-
äåëåííûõ îáñòîÿòåëüñòâàõ. Íèæå ïðèâåäåíû çíà÷åíèÿ áèòîâ, ôîðìèðó-
þùèõ ÷åòâåðòóþ öèôðó.

- 0  îáû÷íûå ïðàâà äîñòóïà.


157

- 1  áèò óñòîé÷èâîñòè. Îí óñòàíàâëèâàåòñÿ òîëüêî äëÿ êàòàëîãîâ:


âëàäåëåö èìååò ïðàâî óäàëÿòü èëè ïåðåèìåíîâûâàòü òîëüêî ôàéëû,
êîòîðûìè îí âëàäååò, ïðè÷åì ëèøü ïðè íàëè÷èè ïðàâà íà çàïèñü
â ýòîò êàòàëîã.

- 2  óñòàíîâèòü èäåíòèôèêàòîð ãðóïïû, setgid. Êîãäà òàêîé áèò


óñòàíîâëåí äëÿ âûïîëíÿåìîãî ôàéëà, ïîñëåäíèé âûïîëíÿåòñÿ ñ ïðà-
âàìè ãðóïïû, âëàäåþùåé ôàéëîì, à íå ñ ïðàâàìè ïîëüçîâàòåëÿ,
çàïóñòèâøåãî åãî.

- 4  óñòàíîâèòü èäåíòèôèêàòîð ïîëüçîâàòåëÿ, setuid. Êîãäà òàêîé


áèò óñòàíîâëåí äëÿ âûïîëíÿåìîãî ôàéëà, ïîñëåäíèé âûïîëíÿåòñÿ
ñ ïðàâàìè ïîëüçîâàòåëÿ, âëàäåþùåãî ôàéëîì, à íå ñ ïðàâàìè òî-
ãî, êòî åãî çàïóñòèë. ×åòâåðòàÿ öèôðà ïðèíàäëåæèò íàèáîëüøåìó
ðàçðÿäó (äðóãèìè ñëîâàìè, îíà íàõîäèòñÿ ñëåâà). Â ïðåäûäóùåì
ïðèìåðå ïðàâà äîñòóïà 755 ýêâèâàëåíòíû 0755. Çíà÷åíèå äîïîëíè-
òåëüíîãî áèòà ôîðìèðóåòñÿ èç òåõ æå ñîîáðàæåíèé, ÷òî èçëîæåíû
âûøå, ïîýòîìó, íàïðèìåð, 3755 ñîçäàåò êàòàëîã ñ óñòàíîâëåííûì
áèòîì óñòîé÷èâîñòè è áèòîì setgid â äîïîëíåíèå ê îáû÷íûì ïðàâàì
äîñòóïà 755.

Õîòÿ âîñüìåðè÷íàÿ ñèñòåìà ÿâëÿåòñÿ äîñòàòî÷íî ïðîçðà÷íîé, ñó-


ùåñòâóåò è äðóãîé ñïîñîá, ëåã÷å çàïîìèíàþùèéñÿ. Ýòî ñèìâîëè÷åñêèé
ìåòîä. Âìåñòî óêàçàíèÿ ÷èñëà â àðãóìåíòå êîìàíäû chmod åé çàäàåòñÿ
îò îäíîãî äî òðåõ ôëàæêîâ. Ñòðîêó, ñîäåðæàùóþ èõ, ìîæíî îòôîðìàòè-
ðîâàòü ðàçëè÷íûìè ñïîñîáàìè. Êàæäûé èç àðãóìåíòîâ çàäàåòñÿ ñòðîêîé
ñèìâîëîâ. Ïåðâûå ñèìâîëû çàäàþò, ÷üè ïðàâà ìåíÿþòñÿ: u  âëàäåëåö,
g  ãðóïïà, î  îñòàëüíûå, à  âñå (óñòàíàâëèâàåòñÿ ïî óìîë÷àíèþ,
åñëè ïåðâûé ñèìâîë íå çàäàí). Âòîðîé ñèìâîë  âèä èçìåíåíèÿ (+,-,=),
à òðåòèé  áèòû ïðàâ äîñòóïà.

go+w äîáàâèòü ïðàâî íà çàïèñü äëÿ ãðóïïû è îñòàëüíûõ ïîëüçîâà-


òåëåé

+x äîáàâèòü ïðàâî íà âûïîëíåíèå äëÿ âñåõ


158

o-r óäàëèòü ïðàâî íà ÷òåíèå äëÿ îñòàëüíûõ ïîëüçîâàòåëåé

ugo=rw óñòàíîâèòü âñåì ïðàâà íà ÷òåíèå è çàïèñü

a=rw ñîâïàäàåò ñ ugo=rw

+t äîáàâèòü áèò óñòîé÷èâîñòè (sticky bit)

+s äîáàâèòü áèòû setuid è setgid

#chmod g+w le.txt


Ñèìâîëè÷åñêèé ìåòîä ïðîùå çàïîìèíàåòñÿ è ïîýòîìó óäîáíåå äëÿ
áîëüøèíñòâà îïåðàöèé ñ êîìàíäîé chmod.

5.1.3 Äîáàâëåíèå è óäàëåíèå ó÷åòíûõ çàïèñåé ïîëüçîâàòåëÿ

Äëÿ äîáàâëåíèÿ ó÷åòíûõ çàïèñåé ïîëüçîâàòåëåé â ñèñòåìó ïðèìå-


íÿåòñÿ ñöåíàðèé adduser. Çàïóñòèòü ñöåíàðèé adduser ìîæåò òîëüêî
ïîëüçîâàòåëü root.
Íàæàòèå êëàâèøè Enter ïîñëå êàæäîãî çàïðîñà óñòàíàâëèâàåò çíà-
÷åíèå ïî óìîë÷àíèþ  îíî ïîêàçàíî â êâàäðàòíûõ ñêîáêàõ.  íåêîòîðûõ
ñëó÷àÿõ çíà÷åíèå âûáèðàåòñÿ èç ñïèñêà (ñèìâîëîì-ðàçäåëèòåëåì â íåì
ñëóæèò ïðîáåë), íàïðèìåð, ïðè óñòàíîâêå êîìàíäíîãî èíòåðïðåòàòîðà;
åñëè ñïèñîê âêëþ÷àåò çíà÷åíèå no, òî îíî çàïðåùàåò èëè îòìåíÿåò âñå
îñòàëüíûå âîçìîæíîñòè. Íàïðèìåð, âûáîð îïöèè no äëÿ êîìàíäíîãî
èíòåðïðåòàòîðà ñîçäàåò ïîëüçîâàòåëÿ, êîòîðûé òàêîâîãî íå èìååò, à ýòî
çíà÷èò, ÷òî ïîëüçîâàòåëü íå ìîæåò çàðåãèñòðèðîâàòüñÿ â ñèñòåìå.
Ïðè æåëàíèè ìîæíî ñîçäàòü ôàéë /etc/adduser.message, êîòî-
ðûé áóäåò íàïðàâëÿòüñÿ êàæäîìó íîâîìó ïîëüçîâàòåëþ â åãî ïî÷òîâûé
ÿùèê. Ïîëüçîâàòåëü ñìîæåò ïðî÷åñòü åãî ïðè ïåðâîé ðåãèñòðàöèè â ñè-
ñòåìå ñ ïîìîùüþ ïî÷òîâîé ïðîãðàììû.
Êàæäûé ïîëüçîâàòåëü è ãðóïïà èìååò ÷èñëåííûé ýêâèâàëåíò ñâîå-
ãî èìåíè  èäåíòèôèêàòîð ïîëüçîâàòåëÿ è èäåíòèôèêàòîð ãðóïïû (UID
è GID, ñîîòâåòñòâåííî). Èìåííî ýòîò èäåíòèôèêàòîð óêàçàí â èíôîð-
ìàöèè î âëàäåíèè ôàéëîì èëè êàòàëîãîì. Îí òàêæå èñïîëüçóåòñÿ ïðè
óïðàâëåíèè ïðîöåññàìè. Ïðè óäàëåíèè ó÷åòíîé çàïèñè ïîëüçîâàòåëÿ,
159

ïðàâà âëàäåíèÿ åãî ôàéëàìè ïðîäîëæàþò ïðèíàäëåæàòü îñòàâøåìóñÿ


UID óäàëåííîãî ïîëüçîâàòåëÿ.
Óäìåíèå ïîëüçîâàòåëÿ âûïîëíÿåòñÿ äîñòàòî÷íî ïðîñòî. Äëÿ ýòîãî
ïðèìåíÿåòñÿ êîìàíäà rmuser, àðãóìåíòîì êîòîðîé ñëóæèò èìÿ ïîëüçî-
âàòåëÿ (äëÿ adduser îíî íå òðåáóåòñÿ).
Ôàéëû /etc/passwd è /etc/master.passwd
Âñå îïåðàöèîííûå ñèñòåìû, ïîäîáíûå UNIX, ñîäåðæàò ôàéë /etc/passwd,
íî â çàâèñèìîñòè îò ïëàòôîðìû èõ ðîëü ðàçíàÿ. Â íåêîòîðûõ ñèñòåìàõ
ýòî åäèíñòâåííîå õðàíèëèùå ïîëüçîâàòåëüñêîé èíôîðìàöèè (âêëþ÷àÿ
è ïàðîëè).  ýòîì ñëó÷àå äîáàâëåíèå íîâîé ó÷åòíîé çàïèñè ïîëüçîâà-
òåëÿ îçíà÷àåò äîáàâëåíèå åùå îäíîé ñòðîêè â ýòîò ôàéë ñ ïîìîùüþ
òåêñòîâîãî ðåäàêòîðà. Â ñîâðåìåííûõ îïåðàöèîííûõ ñèñòåìàõ ïðèìåíÿ-
åòñÿ òåíåâîå õðàíåíèå ïàðîëåé: â çàøèôðîâàííîì âèäå îíè õðàíÿòñÿ íå
â /etc/passwd, à â ôàéëå, äîñòóïíîì äëÿ ÷òåíèÿ òîëüêî ïîëüçîâàòå-
ëþ root. Èìÿ ýòîãî ôàéëà çàâèñèò îò ñèñòåìû. Â îäíèõ ñèñòåìàõ ýòî
/etc/shadow, â äðóãèõ  /etc/security/master.passwd. Âî FreeBSD
ýòîò ôàéë íàçûâàåòñÿ /etc/master.passwd.
Îáà ôàéëà passwd ïðåäñòàâëÿþò ñîáîé îáû÷íûå òåêñòîâûå áàçû
äàííûõ, ãäå êàæäîìó ïîëüçîâàòåëþ îòâå÷àåò îäíà ñòðîêà, ïîëÿ â êîòîðîé
ðàçäåëÿþòñÿ äâîåòî÷èåì (:).  êàæäîé ñòðîêå óêàçàíî: èìÿ ïîëüçîâàòå-
ëÿ, åãî èäåíòèôèêàòîð, èäåíòèôèêàòîð ïåðâè÷íîé ãðóïïû, íà÷àëüíûé
êàòàëîã, íà÷àëüíûé êîìàíäíûé èíòåðïðåòàòîð è ïîëíîå èìÿ ïîëüçîâàòå-
ëÿ (êîòîðîå, â ñâîþ î÷åðåäü, ÿâëÿåòñÿ ñïèñêîì ñëåäóþùèõ ïîëåé, ðàçäå-
ëåííûõ çàïÿòîé: "Àäðåñ îôèñà "Ðàáî÷èé òåëåôîí "Äîìàøíèé òåëåôîí"è
ò.ä.).
Ïðàâà äîñòóïà ê ôàéëó /etc/passwd óñòàíîâëåíû êàê 0644, a /etc
/master.passwd  êàê 0600. Òàêàÿ ñõåìà çàùèòû îçíà÷àåò, ÷òî âñå ïîëü-
çîâàòåëè èìåþò äîñòóï ê èíôîðìàöèè, ñîäåðæàùåéñÿ â /etc/passwd, è
òîëüêî root  ê èíôîðìàöèè èç ôàéëà /etc/master.passwd, êîòîðûé
îòëè÷àåòñÿ îò ïåðâîãî òîëüêî òåì, ÷òî âî âòîðîì ïîëå ñîäåðæàòñÿ çà-
øèôðîâàííûå ïàðîëè ïîëüçîâàòåëåé. Âî FreeBSD ïàðîëè øèôðóþòñÿ
ïîñðåäñòâîì àëãîðèòìà MD5.
Îäíàêî èíôîðìàöèÿ îá ó÷åòíûõ çàïèñÿõ ïîëüçîâàòåëåé ìîæåò õðà-
160

íèòñÿ íå òîëüêî â ýòèõ äâóõ ôàéëàõ. Òåêñòîâûå áàçû äàííûõ ïðèåìëåìû


â ñèñòåìå ñ íåáîëüøèì ÷èñëîì ïîëüçîâàòåëåé. Åñëè â ñèñòåìå 25 òûñÿ÷
ïîëüçîâàòåëåé, òîäëÿ ïðîâåðêè èíôîðìàöèè ïðè ðåãèñòðàöèè ïîòðåáóåò-
ñÿ óéìà âðåìåíè. Ïîýòîìó âî FreeBSD èñïîëüçóþòñÿ äâà äîïîëíèòåëüíûõ
ôàéëà /etc/pwd.db è /etc/spwd.db. Îíè ïðåäñòàâëÿþò ñîáîé àññî-
öèàòèâíûå òàáëèöû â ôîðìàòå db, îòâå÷àþùèå ôàéëàì /etc/passwd
è /etc/master.passwd, âêëþ÷àÿ è ïðàâà äîñòóïà. Îíè îáåñïå÷èâàþò
áûñòðûé ìåõàíèçì ïîèñêà â áîëüøèõ áàçàõ äàííûõ è àâòîìàòè÷åñêè
ãåíåðèðóþòñÿ ïðîãðàììîé pwd_mkdb ïðè èçìåíåíèè èíôîðìàöèè îá
ó÷åòíûõ çàïèñÿõ ïîñðåäñòâîì êîìàíä chfn, passwd èëè adduser/rmuser.
Êîìàíäà chfn (change full name  èçìåíèòü ïîëíîå èìÿ) ïðåäñòàâ-
ëÿåò ñîáîé ñðåäñòâî äëÿ èçìåíåíèÿ èíôîðìàöèè î ïîëüçîâàòåëå. chfn çà-
ïóñêàåò òåêñòîâûé ðåäàêòîð, èìÿ êîòîðîãî çàäàíî â ïåðåìåííîé EDITOR
(ïî óìîë÷àíèþ  vi). Îí ïîçâîëÿåò èçìåíèòü ëþáîå èç òåêñòîâûõ ïîëåé,
à ïîñëå ñîõðàíåíèÿ ôàéëà è âûõîäà ïðîãðàììà ïåðåçàïèñûâàåò ôàéë
/etc/master.passwd è àâòîìàòè÷åñêè çàïóñêàåò pwd_mkdb -p äëÿ
îáíîâëåíèÿ îñòàëüíûõ òðåõ ôàéëîâ.
Âàæíî îòìåòèòü, ÷òî ãëàâíûì ôàéëîì áàçû äàííûõ ÿâëÿåòñÿ /etc
/master.passwd. Åñëè íåîáõîäèìî ïåðåñòðîèòü ñïèñîê ïîëüçîâàòåëåé
èëè ïåðåíåñòè åãî ñ äðóãîé FreeBSD-ìàøèíû, ìîæíî ïðîñòî ðàçìåñòèòü
íîâûé ôàéë master.passwd â êàòàëîãå /etc è çàïóñòèòü ñëåäóþùóþ
êîìàíäó:
#pwd_mkdb -p /etc/master.passwd.new
 ýòîì ïðèìåðå ïðåäïîëàãàåòñÿ, ÷òî íîâûé ôàéë ðàçìåùåí â êàòà-
ëîãå /etc ïîä èìåíåì master.passwd.new. Ôàéë /etc/master.passwd
áóäåò çàìåíåí íîâûì, a /etc/pwd.db, /etc/spwd.db è /etc/passwd
ïåðåñòðîåíû çàíîâî. Îïöèÿ -p óêàçûâàåò ïðîãðàììå pwd_mkdb ãåíå-
ðèðîâàòü íîâûé ôàéë /etc/passwd; åñëè îíà îïóùåíà, /etc/passwd
íå ïðåòåðïåâàåò íèêàêèõ èçìåíåíèé. Ðåêîìåíäóåòñÿ âñåãäà èñïîëüçîâàòü
îïöèþ -p, ÷òîáû ôàéëû îñòàâàëèñü ñèíõðîíèçîâàííûìè.
161

5.1.4 Óïðàâëåíèå ãðóïïàìè

Äåéñòâèÿ ñ ãðóïïàìè ïîõîæè íà äåéñòâèÿ ñ ïîëüçîâàòåëÿìè (òåê-


ñòîâûå áàçû äàííûõ ñîäåðæàòñÿ â êàòàëîãå /etc), íî ïîñêîëüêó ãðóïïû
îáû÷íî íå èìåþò ïàðîëåé, ôàéë /etc/group (ýêâèâàëåíò ôàéëà /etc/passwd
äëÿ ãðóïï) íå òðåáóåò äîïîëíèòåëüíûõ ìåð çàùèòû (êðîìå îãðàíè÷åíèÿ
ïðàâ íà çàïèñü îäíèì òîëüêî root).
Íèæå ïðèâåäåí ïðèìåð ñòðîêè èç ôàéëà /etc/group. Îáðàòèòå
âíèìàíèå, ÷òî îíà ñîäåðæèòëèøü ÷åòûðå ïîëÿ: èìÿ ãðóïïû, "ïóñòîå"ïîëå
(â êîòîðîì ïðè íåîáõîäèìîñòè ñîõðàíÿþòñÿ ïàðîëè), èäåíòèôèêàòîð ãðóï-
ïû è ðàçäåëåííûé çàïÿòîé ñïèñîê åå ïîëüçîâàòåëåé.
wheel:*:10:root,bob,frank
 ñèëó îòñóòñòâèÿ ïàðîëåé, ïîëüçîâàòåëüñêîãî äîñòóïà è àññîöèà-
òèâíîé áàçû äàííûõ, äîáàâëåíèå ãðóïïû â ñèñòåìó  äåëî ÷ðåçâû÷àéíî
ïðîñòîå. Äîñòàòî÷íî îòêðûòü ôàéë /etc/group â ëþáîì òåêñòîâîì ðå-
äàêòîðå è ñîçäàòü íîâóþ ñòðîêó â ôîðìàòå, ïðèâåäåííîì âûøå. Âàæíî
ïðèñâîèòü íîâîé ãðóïïå óíèêàëüíûé èäåíòèôèêàòîð.
Íîâûå ãðóïïû äîáàâëÿþòñÿ àâòîìàòè÷åñêè ñöåíàðèåì adduser â
ðåæèìå ñîçäàíèÿ óíèêàëüíûõ ãðóïï äëÿ êàæäîãî ïîëüçîâàòåëÿ. Îáû÷íî
èäåíòèôèêàòîð òàêîé ãðóïïû ñîâïàäàåò ñ èäåíòèôèêàòîðîì ïîëüçîâà-
òåëÿ, íî ýòî íå îáÿçàòåëüíî. Ñêîðåå âñåãî, âàì ïîòðåáóåòñÿ äîáàâëÿòü
òîëüêî ãðóïïû ñèñòåìíîãî íàçíà÷åíèÿ, íàïðèìåð, äëÿ òàêèõ çàäà÷, êàê
çàïóñê Web-ñåðâåðà èëè ðàáîòà ñ áàçîé äàííûõ. Èäåíòèôèêàòîð òàêèõ
ãðóïï îáû÷íî äîëæåí ïðèíèìàòü çíà÷åíèÿ â äèàïàçîíå îò 100 äî 1000.
×èñëà, áîëüøèå 1000, èñïîëüçóþòñÿ äëÿ óíèêàëüíûõ ãðóïï (äëÿ ñîâ-
ïàäåíèÿ ñ èäåíòèôèêàòîðàìè ñîîòâåòñòâóþùèõ ïîëüçîâàòåëåé). ×èñëà,
ìåíüøèå 100, ïðèíàäëåæàò ãðóïïàì, ÿâëÿþùèìñÿ ÷àñòüþ îïåðàöèîííîé
ñèñòåìû.
Äëÿ äîáàâëåíèÿ ïîëüçîâàòåëÿ â ãðóïïó äîñòàòî÷íî äîáàâèòü åãî
èìÿ â ÷åòâåðòîì ïîëå. Åñëè â íåì óæå ñîäåðæàòñÿ êàêèå-ëèáî èìåíà,
èõ íåîáõîäèìî ðàçäåëÿòü çàïÿòîé, êàê ïîêàçàíî ðàíåå. Äëÿ óäàëåíèÿ
ïîëüçîâàòåëÿ èç ãðóïïû íóæíî ïðîñòî óäàëèòü åãî èìÿ.
162

5.2 Óñòàíîâêà ïðèëîæåíèé

Bo FreeBSD ïðîöåññ óñòàíîâêè ïðîãðàììíîãî îáåñïå÷åíèÿ îðãàíè-


çîâàí î÷åíü óäîáíî.  ñèñòåìå èìååòñÿ ñîáñòâåííûé äèñïåò÷åð ïàêåòîâ
(íàáîð óòèëèò pkg_), à òàêæå ïîäñèñòåìà, íàçûâàåìàÿ "ïîðòàìè". Ïî-
ñëåäíÿÿ ïîçâîëÿåò êîìïèëèðîâàòü ïðîãðàììíîå îáåñïå÷åíèå èç èñõîäíûõ
ôàéëîâ.
Ñèñòåìà ïàêåòîâ  ýòî ñïîñîá óïàêîâêè ïðîãðàììíîãî îáåñïå÷å-
íèÿ (âêëþ÷àÿ ôàéëû cong, ðàçäåëÿåìûå áèáëèîòåêè è äîêóìåíòàöèþ),
ïîçâîëÿþùàÿ ñ â äàëüíåéøåì èçâëå÷ü âñå íåîáõîäèìîå íà äðóãîé ìà-
øèíå. Ïðè ýòîì àâòîìàòè÷åñêè ôîðìèðóåòñÿ êîíôèãóðàöèÿ, îáåñïå÷è-
âàþùàÿ ðàáîòó ïðîãðàììíîãî îáåñïå÷åíèÿ íà ýòîé ñèñòåìå. Ðàííèå âåð-
ñèè äèñïåò÷åðîâ ïàêåòîâ âûïîëíÿëè èìåííî òàêèå çàäà÷è. Óïàêîâùèê
FreeBSD, êðîìå òîãî, ïðåäîñòàâëÿþò ìíîæåñòâî äîïîëíèòåëüíûõ ôóíê-
öèé. Îí ïîääåðæèâàåò áàçó äàííûõ, â êîòîðîé óêàçàíî, âåðñèè êàêèõ
ïàêåòîâ óñòàíîâëåíû íà äàííîé ìàøèíå, ïîçâîëÿåò óñòàíîâèòü ôàéë ñ
FTP-ñåðâåðà, îòñëåæèâàåò çàâèñèìîñòè è äîïîëíèòåëüíûå ïàêåòû, êî-
òîðûå íåîáõîäèìî óñòàíîâèòü äëÿ êîððåêòíîãî çàïóñêà äàííîãî ïàêåòà,
îáåñïå÷èâàåò âîçìîæíîñòü îáíîâëåíèÿ èëè äåèíñòàëëÿöèè ïàêåòîâ.
Èåðàðõèÿ êàòàëîãîâ /usr/local ïðåäíàçíà÷åíà äëÿ òåõ ýëåìåíòîâ
ñèñòåìû, êîòîðûå óñòàíàâëèâàåò àäìèíèñòðàòîð, ýòî îòíîñèòñÿ â ïåðâóþ
î÷åðåäü ê ïðîãðàììíîìó îáåñïå÷åíèþ, èíñòàëëèðóåìîìó èç ïîðòîâ è
ïàêåòîâ. Ñòðóêòóðà êàòàëîãîâ âíóòðè /usr/local ïðèâåäåíà íèæå.

- bin - Äâîè÷íûå ôàéëû (ñêîìïèëèðîâàííûå ïðîãðàììû)

- etc - Êîíôèãóðàöèîííûå ôàéëû

- include - Çàãîëîâî÷íûå ôàéëû Ñ, èñïîëüçóåìûå ïðè êîìïèëÿöèè


íîâîãî ïðîãðàììíîãî îáåñïå÷åíèÿ

- info - Âñïîìîãàòåëüíûå äàííûå äëÿ ñîçäàíèÿ äîêóìåíòàöèè

- lib - Ðàçäåëÿåìûå áèáëèîòåêè

- libexec - Âñïîìîãàòåëüíûå äâîè÷íûå ôàéëû, èñïîëüçóåìûå äðóãè-


ìè ïðîãðàììàìè
163

- man - Ñòðàíèöû ñïðàâî÷íûõ ðóêîâîäñòâ óñòàíîâëåííîãî ïðîãðàìì-


íîãî îáåñïå÷åíèÿ

- sbin - Ñèñòåìíûå äâîè÷íûå ôàéëû (ïðîãðàììû, èçìåíÿþùèå ïîâå-


äåíèå ñèñòåìû)

- share - Ìàòåðèàëû, íå çàâèñÿùèå îò ïëàòôîðìû (ôàéëû äàííûõ,


äîêóìåíòàöèÿ è

- var - Ðàáî÷èå ôàéëû äëÿ óñòàíîâëåííîãî ïðîãðàììíîãî îáåñïå÷å-


íèÿ

Äðóãèìè ñëîâàìè, ýòî òà æå ñàìàÿ èåðàðõèÿ, ÷òî è â êàòàëîãå /usr


(çà èñêëþ÷åíèåì êàòàëîãà ñïðàâî÷íûõ ðóêîâîäñòâ, êîòîðûå íàõîäÿòñÿ
â /usr/local/man, à íå â /usr/local/share/man, êàê ìîæíî áûëî áû
îæèäàòü). Ïàêåòíàÿ ñèñòåìà FreeBSD íàïðàâëÿåò âñå èíñòàëëèðóåìîå
ïðîãðàììíîå îáåñïå÷åíèå â êàòàëîã /usr/local çà ïðåäåëû äåðåâà /usr,
ïîääåðæèâàÿ òåì ñàìûì ñòðîãîå ðàçäåëåíèå ìåæäó áàçîâîé è ïîëüçîâà-
òåëüñêîé èíñòàëëÿöèåé.
Ðàçäåëÿåìàÿ áèáëèîòåêà (shared library) ïðåäñòàâëÿåò ñîáîé öåí-
òðàëèçîâàííûé ôàéë, êîòîðûé îáåñïå÷èâàåò âûçîâ ïðåêîìïèëèðîâàí-
íûõ ôóíêöèé. Èñïîëüçóÿ ðàçäåëÿåìóþ áèáëèîòåêó, ïðîãðàììà ïîëó÷àåò
äîñòóï ê îïðåäåëåííûì ôóíêöèÿì, êîòîðûå íå íóæíî êîìïèëèðîâàòü
âìåñòå ñ íåé. Òàêîé ïîäõîä óìåíüøàåò ðàçìåð ôàéëîâ è èçáûòî÷íîñòü
èíôîðìàöèè. Îí íàçûâàåòñÿ äèíàìè÷åñêîé ñáîðêîé (dynamic linking) â
ïðîòèâîïîëîæíîñòü ñòàòè÷åñêîé ñáîðêå (static linking), êîãäà âñå íåîá-
õîäèìûå ôóíêöèè êîìïèëèðóþòñÿ âìåñòå ñ ïðîãðàììîé. Ðàçäåëÿåìûå
áèáëèîòåêè ñóùåñòâóþò ïðàêòè÷åñêè íà âñåõ ïëàòôîðìàõ. Ñõåìà èìåíî-
âàíèÿ èõ, åñòåñòâåííî, ðàçëè÷íà. Òàê, íàïðèìåð, â Windows îíè íàçûâà-
þòñÿ DLL (Dynamic Link Libraries, áèáëèîòåêè äèíàìè÷åñêîé êîìïîíîâ-
êè).
FreeBSD âêëþ÷àåò â èñõîäíóþ èíñòàëëÿöèþ áîëüøîå ÷èñëî ðàçäå-
ëÿåìûõ áèáëèîòåê, äîñòàòî÷íîå äëÿ ïîääåðæêè áàçîâîãî ïðîãðàììíîãî
îáåñïå÷åíèÿ, à òàêæå ðÿäà ïðîãðàìì, êîòîðûå áóäóò èíñòàëëèðîâàíû
164

ïîçäíåå. Íî ýòî âîâñå íå çíà÷èò, ÷òî âàì íèêîãäà íå âñòðåòèòñÿ ïðî-


ãðàììà, êîòîðîé òðåáóåòñÿ áèáëèîòåêà, íå âêëþ÷åííàÿ â ñîñòàâ FreeBSD.
Îñíîâíûå ðàçäåëÿåìûå áèáëèîòåêè íàõîäÿòñÿ â êàòàëîãå /usr/lib, à âñå,
÷òî èíñòàëëèðóåò àäìèíèñòðàòîð, ïîïàäàåò â êàòàëîã /usr/local/lib.
Âñå ïðîãðàììû àâòîìàòè÷åñêè èùóò ðàçäåëÿåìûå áèáëèîòåêè â êàòàëîãå
/usr/lib, à çàòåì â /usr/local/lib. Ïóòè ïîèñêà ìîæíî îòðåäàêòèðîâàòü
â ôàéëå /etc/rc.conf.
Êàæäûé ïàêåò ñîäåðæèò ñïèñîê çàâèñèìîñòåé, âêëþ÷àþùèé è ðàç-
äåëÿåìûå áèáëèîòåêè, è âûïîëíÿåìûå ôàéëû (ïðîãðàììû). Åñëè ôàéë,
óêàçàííûé â çàâèñèìîñòÿõ, íå óñòàíîâëåí, ïàêåòíàÿ ñèñòåìà àâòîìàòè-
÷åñêè îòñëåæèâàåò ýòî è èíñòàëëèðóåò åãî, ïðåæäå ÷åì ïðîäîëæèòü èí-
ñòàëëÿöèþ.
Äëÿ ðàáîòû ñ ïàêåòàìè èñïîëüçóþòñÿ ñëåäóþùèå óòèëèòû: pkg_add,
pkg_delete, pkg_info, pkg_update, pkg_version è pkg_create.
Êàæäàÿ èç íèõ ñîâåðøåííî ïðîçðà÷íî ñîîòâåòñòâóåò ñâîåìó íàçâàíèþ.
Âûøåóêàçàííûå óòèëèòû âçàèìîäåéñòâóåò ñ áàçîé äàííûõ â êàòàëîãå
/var/db/pkg, ê êîòîðîé ìîæíî ëåãêî îáðàòèòüñÿ ñ ïîìîùüþ êîìàíäû
ls. Â ýòîì êàòàëîãå êàæäîìó óñòàíîâëåííîìó ïàêåòó ñîîòâåòñòâóåò êà-
òàëîã, ñîäåðæàùèé èíôîðìàöèþ î ñïèñêå ïàêåòà (ò.å. î ôàéëàõ â íåì) è
î åãî çàâèñèìîñòÿõ, pkg_info èñïîëüçóåò ýòó áàçó äàííûõ äëÿ âûâîäà
êðàòêîãî îïèñàíèÿ êàæäîãî ïàêåòà.

5.3 Óñòàíîâêà ïðè ïîìîùè sysinstall

Âû óæå óñòàíàâëèâàëè ÏÎ íà FreeBSD òàêèì ñïîñîáîì. Â ãëàâíîì


ìåíþ ïðîãðàììû sysinstall âûáåðèòå ïóíêò Congure, à çàòåì Packages.
Åñëè ó âàñ êîìïàêò-äèñê ñ äèñòðèáóòèâîì FreeBSD, â êà÷åñòâå èíñòàëëÿ-
öèîííîãî íîñèòåëÿ âûáåðèòå CD-ROM. Åñëè âû ïîäêëþ÷åíû ê Internet,
âûáåðèòå FTP. Ýòî ñàìûé ïðîñòîé ñïîñîá, íî ïðîãðàììíîå îáåñïå÷åíèå
óñòàíàâëèâàåìîå òàêèì ñïîñîáîì ìîæåò îêàçàòüñÿ óñòàðåâøèì. Íóæ-
íî ëèøü çàìåòèòü, ÷òî ìíîãèå îðãàíèçàöèè âûïóñêàþò ñâîè ñáîðíèêè
ïàêåòîâ, â êîòîðûå ìîãóò âõîäèòü êàê âñå ñóùåñòâóþùèå, òàê è ïðåäíà-
çíà÷åííûå äëÿ îäíîé öåëè.  ñâÿçè ñ òåì, ÷òî ïðàêòè÷åñêè ëþáîé ñåðâåð
165

èìååò äîñòóï ê èíòåðíåòó, òî ëó÷øå èñïîëüçîâàòü ìåòîä ïîðòîâ.

5.3.1 Óñòàíîâêà èç ïàêàäæåé

Èíîãäà ïàêåò òðåáóåò äîïîëíèòåëüíîãî óïðàâëåíèÿ, áîëüøåãî, ÷åì


ìîæåò îáåñïå÷èòü sysinstall. Ïðèìåðû âêëþ÷àþò â ñåáÿ ïàêåòû, èìåþ-
ùèå èíòåðàêòèâíûå ñöåíàðèè ïðåäâàðèòåëüíîé èíñòàëëÿöèè (ïîçâîëÿ-
þò óñòàíàâëèâàòü îïöèè, ñïåöèôè÷íûå äëÿ ïàêåòà). Èìåííî â òàêèõ
ñèòóàöèÿõ ïðèìåíÿåòñÿ óòèëèòà pkg_add. Âàæíî ïîíèìàòü, ÷òî îíà
âûçûâàåòñÿ ïðè èíñòàëëÿöèè êàæäîãî ïàêåòà  èëè íàïðÿìóþ, èëè èç
sysinstall.
Ïðîãðàììà pkg_add ïðåäíàçíà÷åíà äëÿ ðàáîòû ñ óæå çàãðóæåí-
íûìè ôàéëàìè .tgz (èç äèñòðèáóòèâíîãî êàòàëîãà) èëè ñ ôàéëàìè íà
óäàëåííîì ñåðâåðå. Íàïðèìåð, äâå ñëåäóþùèõ ïðîöåäóðû ýêâèâàëåíòíû:
#fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/8.x-
STABLE/packages/www/roxen-1.3.111.tgz
#pkg_add roxen-1.3.111.tgz
è
#pkg_add ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/8.x-
STABLE/packages/www/roxen-1.3.111.tgz
Êîíå÷íî æå, âòîðàÿ ïðîöåäóðà óäîáíåå íå òîëüêî ïîòîìó, ÷òî îíà
ïîçâîëÿåò èçáåæàòü íåñêîëüêèõ øàãîâ â çàãðóçêå è èíñòàëëÿöèè ïàêåòà,
íî è ïîòîìó, ÷òî îíà âûïîëíÿåò âñþ ðàáîòó â êàòàëîãå /usr/tmp è óäàëÿåò
íåíóæíûå ôàéëû ïî îêîí÷àíèè ðàáîòû. Ïðîãðàììà pkg_add îòñëåæè-
âàåò çàâèñèìîñòè òàê æå, êàê åñëè áû îíà èñïîëüçîâàëàñü èç sysinstall.
Åñëè ïîñðåäñòâîì pkg_add äîáàâëÿåòñÿ ïàêåò, èìåþùèé çàâèñèìîñòè,
óòèëèòà àâòîìàòè÷åñêè çàãðóæàåò è èíñòàëëèðóåò âñå òðåáóåìûå ïàêåòû
è ëèøü çàòåì ïðîäîëæàåò ðàáîòó.  ðåçóëüòàòå, ïî îêîí÷àíèè ðàáîòû â
ñèñòåìå áóäåò óñòàíîâëåíà ïîëíîöåííî ôóíêöèîíèðóþùàÿ ïðîãðàììà.
 íåêîòîðûõ ñëó÷àÿõ èíñòàëëÿöèÿ ïàêåòà çàâåðøàåòñÿ èíñòðóêöè-
ÿìè î òîì, êàê îñóùåñòâèòü êîíôèãóðèðîâàíèå. Ýòî îäíî èç ïðåèìó-
ùåñòâ óñòàíîâêè ïàêåòîâ ñðåäñòâàìè êîìàíäíîé ñòðîêè, à íå ñ ïîìîùüþ
èíòåðàêòèâíîé ïðîãðàììû sysinstall. Ñ äðóãîé ñòîðîíû, sysinstall íå
ñîîáùàåò î ðàçìåðàõ ôàéëîâ â ïàêåòàõ, ïîýòîìó ïðè çàãðóçêå ôàéëîâ
166

âû äàæå ïðèáëèçèòåëüíî íå çíàåòå ñêîëüêî âðåìåíè ýòî çàéìåò. Åñëè


äëÿ ïîèñêà ïàêåòà â FTP-êàòàëîãå âû âîñïîëüçîâàëèñü áðàóçåðîì, âû
óâèäèòå åãî ðàçìåð è ñìîæåòå îöåíèòü âðåìÿ çàãðóçêè.
Êðîìå òîãî, óòèëèòà ïîçâîëÿåò óêàçûâàòü íåñêîëüêî ïàêåòîâ, ðà-
áîòàòü â èíôîðìàòèâíîì ðåæèìå, îòêëþ÷àòü âîçìîæíîñòü çàïóñêà ñöå-
íàðèåâ äî è ïîñëå èíñòàëëÿöèè è äàæå íå âíîñèòü ïàêåò â áàçó äàííûõ
óñòàíîâëåííîãî ïðîãðàììíîãî îáåñïå÷åíèÿ. Ýòè è äðóãèå âîçìîæíîñòè
îïèñàíû íà ñòðàíèöå ðóêîâîäñòâà man pkg_add.
Äëÿ ïðîñìîòðà ñïèñêà óñòàíîâëåííûõ ïàêåòîâ èñïîëüçóåòñÿ óòèëè-
òà pkg_info. Ìîæíî ïðîñòî ïðîñìîòðåòü ëèñòèíã êàòàëîãà /var/db/pkg.
Èìåíà êàòàëîãîâ ñîâïàäàþò ñ èìåíàìè ïàêåòîâ. Åñëè âàì èçâåñòíî èìÿ
ïàêåòà, êîòîðûé òðåáóåòñÿ óäàëèòü, ìîæíî âîñïîëüçîâàòüñÿ óòèëèòîé
pkg_delete:
#pkg_delete roxen-1.3.111
Åñëè ïàêåò èìååò çàâèñèìîñòè, pkg_delete ïðîâåðÿåò èõ è íå ïðî-
äîëæàåò ïðîöåññ óäàëåíèÿ, åñëè òîëüêî îí íå çàïóùåí ñ îïöèåé -f, ôîðñè-
ðóþùåé äåèíñòàëëÿöèþ. Êðîìå òîãî, óòèëèòà ïûòàåòñÿ èñïîëíèòü ñöåíà-
ðèè äåèíñòàëëÿöèè è âûïîëíèòü âåå "òðåáóåìûå"îïåðàòîðû. Åñëè óñëî-
âèÿ íå áóäóò ñîáëþäåíû, pkg_delete íå çàâåðøèò ðàáîòó óñïåøíî (åñëè
òîëüêî îíà íå âûïîëíÿåòñÿ ñ îïöèåé -f ). Êàê ïðîãðàììà pkg_add, ýòà
óòèëèòà ïîääåðæèâàåò íàáîð îïöèé, âêëþ÷àÿ èíôîðìàòèâíûé ðåæèì
(-v) è ðåæèì "õîëîñòîé èíñòàëëÿöèè"(-n).
Ïðîãðàììà pkg_update ïîçâîëÿåò îáíîâèòü óñòàíîâëåííûé ïàêåò
íîâîé âåðñèåé .tgz ôàéëà. Óòèëèòà ïðîâåðÿåò âñå çàâèñèìîñòè, ÷òîáû
íîâàÿ âåðñèÿ áûëà óñòàíîâëåíà êîððåêòíî. Íåîáõîäèìî çàãðóçèòü ïàêåò
.tgz è çàïóñòèòü pkg_update:
#pkg_update newpackage.tgz

5.3.2 Óñòàíîâêà èç ïîðòîâ

UNIX-ñïîñîá èíñòàëëÿöèè íîâîãî ïðîãðàììíîãî îáåñïå÷åíèÿ  åãî


êîìïèëÿöèÿ  íå ìåíåå óäîáíûé, ÷åì èñïîëüçîâàíèå ïàêåòîâ. Ïðè ýòîì
àäìèíèñòðàòîð ïîñòóïàåò ñëåäóþùèì îáðàçîì: âíà÷àëå îí íàõîäèò HTTP-
èëè FTP-ñàéò ñ äèñòðèáóòèâîì (ðàíüøå èñïîëüçîâàëèñü òàêèå ñëóæáû,
167

êàê gopher èëè archie), çàãðóæàåò èñõîäíûé êîä, óïàêîâàííûé â ôàéëå


.tar.gz èëè .tgz è ðàñïàêîâûâàåò åãî âî âðåìåííûé êàòàëîã. Çàòåì îí
çíàêîìèòñÿ ñ ðàçëè÷íûìè ôàéëàìè README, ñîäåðæàùèìè ñïåöèàëü-
íûå èíñòðóêöèè è çàïóñêàåò ñöåíàðèé congure, ïðîâåðÿþùèé íàëè÷èå
â ñèñòåìå îïðåäåëåííûõ ôóíêöèîíàëüíûõ âûçîâîâ (ïîñêîëüêó â ìèðå
UNIX îíè ìîãóò áûòü ðàçëè÷íûìè íà ðàçíûõ ïëàòôîðìàõ). Ñëåäóþ-
ùèì øàãîì ÿâëÿåòñÿ êîìïèëÿöèÿ ïðîãðàììíîãî îáåñïå÷åíèÿ ñ ïîìîùüþ
ñïåöèàëüíîé óòèëèòû êîìïèëÿòîðà make, êîòîðàÿ ÷èòàåò ôàéë ñáîðêè è
íåîáõîäèìûå øàãè èç ôàéëà ïîä íàçâàíèåì MakeIe â ãëàâíîì êàòàëîãå
èñõîäíîãî êîäà. Ïîñëå êîððåêòíîé (õî÷åòñÿ íàäåÿòüñÿ) êîìïèëÿöèè, àä-
ìèíèñòðàòîð íàõîäèò ñêîìïèëèðîâàííûé âûïîëíÿåìûé ôàéë è âðó÷íóþ
êîïèðóåò åãî â òî÷êó, ïðåäíàçíà÷åííóþ äëÿ äâîè÷íûõ ôàéëîâ (íàïðè-
ìåð, /usr/locaI/ bin). Èíîãäà â ôàéëå Makele ñóùåñòâóåò öåëü install è
êîìàíäà make install ïðèâîäèò ê êîïèðîâàíèþ ôàéëîâ â ñîîòâåòñòâóþùèå
êàòàëîãè.
Âñÿ ýòà ïðîöåäóðà î÷åíü íåòî÷íà. Èíîãäà îíà ðàáîòàåò, èíîãäà íåò.
Âîçìîæíîñòü óñòàíîâêè ÏÎ çàâèñèò îò êâàëèôèêàöèè àäìèíèñòðàòîðà.
Îäíàêî ïîÿâèëèñü ïîðòû FreeBSD. Îíè ïðåäñòàâëÿþò ñîáîé ñïî-
ñîá êîìïèëÿöèè ïðîãðàììíîãî îáåñïå÷åíèÿ íåïîñðåäñòâåííî èç èñõîäíûõ
ôàéëîâ ñ ïîìîùüþ ñòðîãî ðåãëàìåíòèðîâàííîé, ñòðóêòóðèðîâàííîé è
àâòîìàòèçèðîâàííîé ïðîöåäóðû, ãàðàíòèðóþùåé áåçîïàñíîñòü è öåëîñò-
íîñòü óñòàíàâëèâàåìûõ ïðîãðàìì, èñõîäíûé êîä êîòîðûõ ïîëó÷åí ïðÿìî
ñ ñàéòîâ èõ ðàçðàáîò÷èêîâ. Èç ýòîãî ñëåäîâàëî, ÷òî ìîæíî ïîëüçîâàòü-
ñÿ ïîñëåäíèìè ðàçðàáîòêàìè ïðîãðàììíûõ ïðîäóêòîâ, íå îæèäàÿ ïîêà
ïîÿâÿòñÿ ñêîìïèëèðîâàííûå ïàêåòû (êîòîðûå, êñòàòè, ìîãóò è íå çàïó-
ñòèòüñÿ íà ñèñòåìàõ, íàñòðîåííûõ íåñòàíäàðòíûì îáðàçîì). Ýòîò ïîäõîä
ïîçâîëÿåò óñòàíàâëèâàòü òûñÿ÷è êîìïîíåíòîâ ïðîãðàììíîãî îáåñïå÷å-
íèÿ â ñîîòâåòñòâóþùèå êàòàëîãè ôàéëîâîé ñèñòåìû FreeBSD àâòîìà-
òè÷åñêè. Âñå ýòî äîñòèãàåòñÿ áëàãîäàðÿ øèðîêîé ñåòè ðàçðàáîò÷èêîâ
ïîðòîâ, êîòîðûå ñëåäÿò çà èçìåíåíèÿìè â íèõ è ïîääåðæèâàþò ñöåíàðèè,
îáåñïå÷èâàÿ êîððåêòíîå âûïîëíåíèå ïðîöåäóð ñáîðêè è óñòàíîâêè ïðî-
ãðàìì â FreeBSD. Òàêèì îáðàçîì, "ïîðò" ýòî ïðîñòî íàáîð ñöåíàðèåâ
è èñïðàâëåíèé, ðàñïîëîæåííûé â îïðåäåëåííîé òî÷êå ñèñòåìû FreeBSD
168

è ñîäåðæàùèé ñïåöèàëüíûé Makele, ïîçâîëÿþùèé óñòàíàâëèâàòü ïðî-


ãðàììíîå îáåñïå÷åíèå îäíîé êîìàíäîé: make install. Íèêàêîé çàãðóçêè,
êîíôèãóðèðîâàíèÿ è êîïèðîâàíèÿ  âñå ýòî áóäåò ñäåëàíî àâòîìàòè÷å-
ñêè.
Ñèñòåìà ïîðòîâ FreeBSD îêàçàëîñü íàñòîëüêî óäà÷íîé, ÷òî åå àäàï-
òèðîâàëè è äðóãèå ñèñòåìû, â ÷àñòíîñòè, OpenBSD è NetBSD. Óñïåõ ñâÿ-
çàí ñ óäîâëåòâîðåíèåì ïîòðåáíîñòåé òåõ àäìèíèñòðàòîðîâ ñèñòåì UNIX,
êîòîðûå ïðåäïî÷èòàþò ñàìè êîìïèëèðîâàòü ïðîãðàììíîå îáåñïå÷åíèå
(äîïóñòèì, èç ñîîáðàæåíèé çàùèòû), ïðîñòîòîé îòñëåæèâàíèÿ âåðñèé è
ïîääåðæêè ïàêåòîâ.
Íàáîð ïîðòîâ íàõîäèòñÿ â êàòàëîãå /usr/ports. Êàæäàÿ êàòåãîðèÿ,
êîòîðàÿ ïðèñóòñòâîâàëà â ïðîãðàììå sysinstall, ïðèñóòñòâóåò çäåñü êàê
êàòàëîã.
Âíóòðè êàæäîãî êàòàëîãà ïîðòà ñîäåðæèòñÿ íåñêîëüêî ôàéëîâ íåáîëü-
øîãî ðàçìåðà, ïîëíîñòüþ îïðåäåëÿþùèõ âñå äåéñòâèÿ, íåîáõîäèìûå äëÿ
êîìïèëÿöèè è óñòàíîâêè êîððåêòíî çàãðóæåííîãî àðõèâà ñ èñõîäíûì
êîäîì. Ïîäðîáíîå îïèñàíèå ýòèõ ôàéëîâ ïðèâåäåíî íèæå.
Makele  Ñîäåðæèò îïðåäåëåííûå ïåðåìåííûå, èñïîëüçóåìûå â
ïðîöåññå ñáîðêè, à òàêæå êîíòàêòíóþ èíôîðìàöèþ ëèöà, ïîääåðæèâà-
þùåãî äàííûé ïîðò. README.html Ñîäåðæèò êðàòêîå îïèñàíèå, èëè
êîììåíòàðèé ïîðòà, â ôîðìàòå HTML. distinfo Êîíòðîëüíàÿ ñóììà ïî
àëãîðèòìó MD5, èñïîëüçóåìàÿ äëÿ ïðîâåðêè öåëîñòíîñòè çàãðóæåííîãî
tar-àðõèâà, les/ Èñïðàâëåíèÿ, âíîñèìûå â èñõîäíûé êîä ïîñëå ðàñïàêîâ-
êè,
pkg-comment  Êðàòêîå îïèñàíèå ïîðòà
pkg-descr  "Äëèííîå"îïèñàíèå ïîðòà; îáû÷íî âêëþ÷àåò è URL
ñàéòà ðàçðàáîò÷èêà äèñòðèáóòèâà.
pkg-plist  Ñïèñîê ðàñïàêîâêè, â êîòîðîì ïåðå÷èñëåíû âñå ôàé-
ëû èíñòàëëÿöèè, à òàêæå êëþ÷åâûå ñëîâà, ñîîáùàþùèå ñèñòåìå, êàêèå
äåéñòâèÿ ñëåäóåò ïðîèçâîäèòü ïðè äåèíñòàëëÿöèè ïîðòà.
Ôàéë Makele ñîäåðæèò âàæíåéøèå ýëåìåíòû, íåîáõîäèìûåäëÿ ñáîð-
êè, êîíôèãóðèðîâàíèÿ, óñòàíîâêè è ïîääåðæêè ïîðòà. Íèæå ïðèâåäåí
ïðèìåð ïîäîáíîãî ôàéëà.
169

# Äàòà ñîçäàíèÿ: 23 èþíÿ 2010 ãîäà


# Àâòîð: Vanilla I. Shu <vanilla@mije.com.tw>
# $FreeBSD: ports/audio/amp/Makele,v 1.10 2000/04/08 21:23:11
mharo "Exp $
#
PORTNAME= amp
PORTVERSION= 0.7.6
CATEGORIES= audio
#MASTER_SITES= ftp://ftp.rasip.fer.hr/pub/mpeg/
# ïîõîæå, ñàéò àâòîðà íå îáíîâëÿåòñÿ.
MASTER_SITES= ftp://ftp.clara.net/pub/unix/Audio/
MAINTAINER= vanilla0FreeBSD.org
GNU_CONFIGURE= yes
USE_GMAKE= yes
MAN1= amp.l
do-install:
$INSTALL_PROGRAM $WRKSRC/amp $PREFIX/bin $INSTALL_MAN
$WRKSRC/amp.l $PREFIX/man/manl .include <bsd.port.mk>
Ñïèñîê ïåðåìåííûõ ñîîáùàåò, ãäå áåðåò ñâîå íà÷àëî èñõîäíûé êîä
ïîðòà, êàêàÿ âåðñèÿ (äëÿ Makele) ÿâëÿåòñÿ òåêóùåé è êàê ñâÿçàòüñÿ ñ
ëèöîì, ïîääåðæèâàþùèì ïîðò (maintainer). Ïîñëåäíèé ÿâëÿåòñÿ äîáðî-
âîëüöåì, îáû÷íî íå ñâÿçàííûì ñ ðàçðàáîò÷èêîì ïðîãðàììíîãî îáåñïå-
÷åíèÿ, ÷üåé çàäà÷åé ÿâëÿåòñÿ ïðîâåðêà òîãî, ÷òî ïîðò êîìïèëèðóåòñÿ è
óñòàíàâëèâàåòñÿ êîððåêòíî, à òàêæå, ÷òî ïîñëåäíÿÿ âåðñèÿ ïðîãðàììíî-
ãî ïðîäóêòà äîñòóïíà êàê ïîðò.
Ïðåäïîëîæèì, ÷òî âû ñîáèðàåòåñü óñòàíîâèòü îïðåäåëåííûé ïîðò.
Âñå, ÷òî òðåáóåòñÿ,  ýòî ïåðåéòè â êàòàëîã ïîðòà êîìàíäîé cd è çàïó-
ñòèòü êîìàíäó make. Îíà ñêîìïèëèðóåò ïðîãðàììíîå îáåñïå÷åíèå. Äëÿ
èíñòàëëÿöèè äîñòàòî÷íî ââåñòè make install.
Íà ïåðâûé âçãëÿä, ýòî ïðîñòîé ïðîöåññ, îäíàêî îí ïîäðàçóìåâàåò
áîëüøîå ÷èñëî äåéñòâèé, âûïîëíÿåìûõ çà êóëèñàìè.  äåéñòâèòåëüíî-
ñòè êîìàíäà make çàïóñêàåò ïîñëåäîâàòåëüíîñòü make-öåëåé, êàæäàÿ èç
êîòîðûõ çàâèñèò îò âñåõ ïðåäûäóùèõ:
170

- fetch Çàãðóæàåò èñõîäíûé tar-àðõèâ ñ äèñòðèáóòèâíîãî ñàéòà â


êàòàëîã /usr/ports/distles

- checksum Ïðîâåðÿåò ïîäëèííîñòü àðõèâà ñ ïîìîùüþ MD5 checksum

- extract Ðàñïàêîâûâàåò tar-àðõèâ â ðàáî÷èé ïîäêàòàëîã

- patch Âíîñèò â èñõîäíûé êîä âñå èñïðàâëåíèÿ èç êàòàëîãà les

- congure Çàïóñêàåò ñöåíàðèé êîíôèãóðèðîâàíèÿ, êîòîðûé ïîäãî-


òàâëèâàåò èñõîäíûé êîä ê ñáîðêå

- build Êîìïèëèðóåò ïðîãðàììíûé ïðîäóêò

Ëþáóþ èç ýòèõ öåëåé ìîæíî óêàçàòü ÿâíî.  ýòîì ñëó÷àå áóäóò


ñêîìïèëèðîâàíû âñå öåëè äî íåå, à çàòåì îíà ñàìà.
Òàêèì îáðàçîì, êîìàíäà make extract çàãðóçèò ôàéë ñ èñõîäíûì
êîäîì, ïðîâåðèò åãî êîíòðîëüíóþ ñóììó MD5 checksum è ðàñïàêóåò åãî.
Õîòÿ ñóùåñòâóþò è äðóãèå öåëè, â áîëüøèíñòâå ñëó÷àåâ ïîëüçîâàòüñÿ
èìè íå ïðèäåòñÿ.
Çàâèñèìîñòè â ïîðòàõ îáðàáàòûâàþòñÿ òàê æå àâòîìàòè÷åñêè, êàê
è â ïàêåòàõ. Îíè ÷èòàþòñÿ èç ôàéëà Makele â ôàçå fetch, à çàòåì
çàãðóæàþòñÿ, ñîáèðàþòñÿ è óñòàíàâëèâàþòñÿ. Âñÿêèé ðàç, êîãäà ïðîöåññ
îáíàðóæèâàåò çàâèñèìîñòü (óñòàíîâëåííóþ èëè íåò), îí îòîáðàæàåò ýòî
â ñâîåì âûâîäå.
Ïîñëå èíñòàëëÿöèè ïîðòà çàïèñü î íåì âíîñèòñÿ â áàçó äàííûõ
/var/db/pkg. Òåïåðü îí íè÷åì íå îòëè÷àåòñÿ îò ïàêåòà. Äëÿ ñáîðà èíôîð-
ìàöèè î íåì è ñðàâíåíèÿ âåðñèé ìîæíî ïîëüçîâàòüñÿ óòèëèòàìè pkg_,
êàê åñëè áû ïîðò áûë óñòàíîâëåí ñ ïîìîùüþ sysinstall.
Óäàëåíèå èíñòàëëèðîâàííûõ ïîðòîâ
 ïîðòàõ òàêæå ïîääåðæèâàåòñÿ öåëü deinstall (make deinstall).
Ýòîé öåëüþ ìîæíî âîñïîëüçîâàòüñÿ ëèøüäëÿ òîé âåðñèè ïîðòà, êîòîðàÿ
óêàçàíà â ôàéëå Makele,T.e. ïðîèñõîäèò äåèíñòàëëÿöèÿ â òî÷íîñòè òîãî
ïðîãðàììíîãî ïàêåòà, êîòîðûé áûë óñòàíîâëåí. Åñëè æå ïîðò îáíîâëåí
áîëåå ïîçäíåé âåðñèåé ïàêåòà, êîìàíäà make deinstall íå ñìîæåò óäà-
ëèòü åãî. Ïîòðåáóåòñÿ óòèëèòà pkg_delete.
171

5.4 Àâòîìàòèçàöèÿ çàäàíèé

Àâòîìàòèçàöèÿ çàäàíèé ïîçâîëÿåò ñèñòåìå FreeBSD ðåãóëÿðíî âû-


ïîëíÿòü òàêèå çàäà÷è, êàê ïðîâåðêà çàùèòû, îáíîâëåíèå ñîñòîÿíèÿ ñè-
ñòåìû, î÷èñòêà log-ôàéëîâ è ìíîãîå äðóãîå. Âî FreeBSD (è äðóãèõ UNIX-
ïîäîáíûõ ñèñòåìàõ) ïëàíèðîâùèê ÿâëÿåòñÿ äåìîíîì, êîòîðûé ñïîñîáåí
çàïóñòèòü ëþáóþ ïðîãðàììó êîìàíäíîé ñòðîêè ñîãëàñíî óñòàíîâëåííîãî
ãðàôèêà.

5.4.1 cron

Êàê è âî ìíîãèõ ñèñòåìàõ UNIX, ïëàíèðîâùèê FreeBSD íàçûâàåòñÿ


cron. Êàê è âñÿêèé óâàæàþùèé ñåáÿ äåìîí, cron âûïîëíÿåòñÿ ïîñòîÿííî
è ïðîâåðÿåò ñâîè âõîäíûå ôàéëû (íàçûâàåìûå ôàéëàìè crontab) êàæ-
äóþ ìèíóòó. Òàêèì îáðàçîì îí óñòàíàâëèâàåò, åñòü ëè èçìåíåíèÿ â ýòèõ
ôàéëàõ, è ïðîâåðÿåò, åñòü ëè çàäàíèÿ, êîòîðûå íåîáõîäèìî âûïîëíèòü
â äàííûé ìîìåíò. Ïðîöåññ cron ñàì ïî ñåáå íå òðåáóåò ïåðåçàïóñêà, îí
àâòîìàòè÷åñêè åæåìèíóòíî ïåðå÷èòûâàåò èçìåíåíèÿ.
Ñóùåñòâóåò ãëîáàëüíûé ôàéë crontab (/etc/crontab) è êàòàëîã
(/var/cron/tabs), â êîòîðîì ïîëüçîâàòåëè ìîãóò ñîçäàâàòü ñâîè ñîá-
ñòâåííûå ôàéëû crontab. Êàçàëîñü áû, èçìåíåíèÿ óäîáíåå âíåñè â ôàéë
/etc/crontab. Îäíàêî â äåéñòâèòåëüíîñòè, êàê è â ñëó÷àå ñ êàòàëîãà-
ìè /usr/local/etc/rc.d è /etc/rc.local, ôàéë /etc/crontab ñëåäóåò
îñòàâèòü áåç èçìåíåíèé. Ïðàâèëüíîå ðåøåíèå  ñîçäàòü ëè÷íûé ôàéë
crontab ïîëüçîâàòåëÿ root â êàòàëîãå /var/cron/tabs.
Ðàññìîòðèì ôàéë crontab îòäåëüíîãî ïîëüçîâàòåëÿ:
0 3 1,15 * * cat frank/faq.txt | mail mylist@testsystem.com
 ýòîì ôàéëå ñîäåðæèòñÿ ëèøü îäíî çàäàíèå: ïîñûëêà òåêñòîâîãî
ôàéëà íà àäðåñ ñïèñêà ðàññûëêè. Îíî çàïóñêàåòñÿ â 03:00 â ïåðâûé è
ïÿòíàäöàòûé äåíü êàæäîãî ìåñÿöà. Çàäàíèå óêàçûâàåòñÿ â ïåðâûõ ïÿòè
ïîëÿõ ñòðîêè äàííûõ, ðàçäåëåííûõ ïóñòûìè ñèìâîëàìè. Ïîðÿäîê ïîëåé
è äîïóñòèìûå çíà÷åíèÿ ïðèâåäåíû íèæå.

- minute (ìèíóòû) 0-59


172

- hour(÷àñû) 0-23

- day of month (÷èñëî ìåñÿöà) 1-31

- month (ìåñÿö) 1-12

- day of week (äåíü íåäåëè) 0-7

Êàæäîå ïîëå ìîæåò ñîäåðæàòü íåñêîëüêî çíà÷åíèé, ðàçäåëåííûõ


çàïÿòûìè, èëè èõ äèàïàçîí â ôîðìàòå, íàïðèìåð, "110". Ñèìâîë çâåç-
äî÷êè (*) óêàçûâàåò íà âñå âîçìîæíûå èíòåðâàëû âðåìåíè. Ìåñÿö è
äåíü íåäåëè (÷åòâåðòîå è ïÿòîå ïîëÿ) ìîò áûòü çàäàíû ïîñðåäñòâîì
ñèìâîëè÷åñêèõ èìåí (òðåõáóêâåííûõ àááðåâèàòóð). Èìåíà ìîãóò áûòü
ïåðå÷èñëåíû â ñïèñêå, ðàçäåëåííîì çàïÿòîé, íî íå â ôîðìàòå äèàïàçîíà
çíà÷åíèé.  ïÿòîì ïîëå (äåíü íåäåëè) çíà÷åíèÿ 0 è 7 îòâå÷àþò âîñêðå-
ñåíüþ.
Åñëè êîìàíäó íåîáõîäèìî çàïóñêàòü êàæäûå n ìèíóò èëè n ÷àñîâ,
â ôàéëå ìîæíî óêàçàòü "ïîøàãîâîå"çíà÷åíèå (íàïðèìåð, "*/n").  ïîëå
ìèíóò */5 áóäåò îáîçíà÷àòü "êàæäûå ïÿòü ìèíóò ò.å. áóäåò ýêâèâàëåí-
òîì çàïèñè Î,5,10,15,20,25,30,35,40,45,50,55. Î ôîðìàòèðîâàíèè êîìàíä
çàïóñêà çàäàíèé ðàññêàçàíî íà ñòðàíèöå ðóêîâîäñòâà man (5) crontab.
Äëÿ ÷àñòî èñïîëüçóåìûõ Ãðàôèêîâ çàïóñêà â ïåðâûõ ïÿòè ïîëÿõ
ìîæíî ïðèìåíÿòü ñîêðàùåííóþ çàïèñü:
@reboot Çàïóñòèòü îäèí ðàç, ïðè çàïóñêå ñèñòåìû @yearly 0 0 1 1
* @annually Ñîâïàäàåò ñ @yearly @monthly 0 0 1 * * @weekly 0 0 * * 0
@daily 0 0 * * * @midnight Ñîâïàäàåò ñ @daily @hourly 0 * * * *
Ïîëå command ìîæåò áûòü ñêîëü óãîäíî ñëîæíûì: â íåì ìîæíî
âíåñòè âñå, ÷òî ìîæíî óêàçàòü â êîìàíäíîé ñòðîêå.  òîì ÷èñëå ìîæíî
âîñïîëüçîâàòüñÿ òî÷êîé ñ çàïÿòîé (;), ðàçäåëÿþùåé íåñêîëüêî êîìàíä,
êîòîðûå áóäóò èñïîëíåíû ïîñëåäîâàòåëüíî êàê ÷àñòè îäíîãî àâòîìàòè-
çèðîâàííîãî çàäàíèÿ.
Åñëè êîìàíäà, âûïîëíÿåìàÿ cron, ñîïðîâîæäàåòñÿ âûâîäîì èí-
ôîðìàöèè, âåñü âûâîä ñîáèðàåòñÿ â ñîîáùåíèå, ïåðåñûëàåìîå çàòåì âëà-
äåëüöó ôàéëà crontab (èëè çàäàíèÿ, åñëè èñïîëüçóåòñÿ ãëîáàëüíûé ôàéë
/etc/crontab).
173

Îáëàäàÿ ïîëíîìî÷èÿìè root, íåñëîæíî ðåäàêòèðîâàòü ôàéë /etc/crontab,


äîáàâëÿÿ â íåãî ëþáûå çàäàíèÿ. Îäíàêî ýòîãî ñëåäóåò èçáåãàòü. Ïîýòî-
ìó ìû ðàññìîòðèì, êàê ñîçäàâàòü ôàéëû crontab îòäåëüíûõ ïîëüçîâà-
òåëåé. Ïîñêîëüêó ôàéë crontab ðàçìåùàåòñÿ â öåíòðàëüíîì êàòàëîãå
(/var/cron/tabs) ñ ïðàâàìè äîñòóïà 0600, ìåõàíèçì çàùèòû ïîçâîëÿåò
ïîëüçîâàòåëÿì ñîçäàâàòü ñâîè ôàéëû, íèêàê íå âëèÿÿ íà ÷óæèå. Ýòîò
ìåõàíèçì ðåàëèçóåò ïðîãðàììà crontab:
#crontab -å
Åñëè âû, êàê root, õîòèòå îòðåäàêòèðîâàòü ôàéë crontab ïîëüçî-
âàòåëÿ frank, ïðèìåíÿåòñÿ ñèíòàêñèñ:
#crontab -å -u frank
crontab âûçûâàåò ðåäàêòîð, çàäàííûé ïåðåìåííîé ñðåäû VISUAL
(èëè EDITOR, åñëè ïðåäûäóùàÿ íå óñòàíîâëåíà). Ñîäåðæèìîå ôàéëà
(çà èñêëþ÷åíèåì òðåõ ïåðâûõ ñòðîê ñ êîììåíòàðèÿìè) îòîáðàæàåòñÿ
â ðåäàêòîðå, ïîçâîëÿþùåì âíåñòè èçìåíåíèÿ, ñîõðàíèòü ôàéë è âûéòè
èç íåãî. Âðåìåííûé ôàéë ýòàïà ðåäàêòèðîâàíèÿ, êîïèðóåòñÿ â êàòàëîã
/var/cron/tabs, ïðè ýòîì ê íåìó äîáàâëÿåòñÿ çàãîëîâîê. Ôàéë crontab
áóäåò àêòèâíûì óæå ÷åðåç ìèíóòó, êîãäà äåìîí cron ïåðå÷èòàåò åãî.

5.4.2 at

Äåìîí cron èäåàëüíî ïîäõîäèò äëÿ ïåðèîäè÷åñêîãî âûïîëíåíèÿ


çàäàíèé. Íî êàê áûòü ñ çàäàíèåì, êîòîðîå íóæíî çàïóñòèòü ëèøü îäèí
ðàç (íàïðèìåð, ïåðåíåñòè ÷òî-ëèáî íà áîëåå ïîçäíåå âðåìÿ)? Òàêóþ çà-
äà÷ó ìîæíî ðåøèòü è ñ ïîìîùüþ cron, äîáàâèâ â ôàéë crontab çàïèñü
crontab -u, óäàëÿþùóþ åãî. Ñóùåñòâóåò è áîëåå óäîáíûé ñïîñîá 
ïðîãðàììà at.
Ôàêòè÷åñêè, at  ýòî íàáîð êîìàíä: at (çàïóñê çàäàíèé), atq (îòîá-
ðàæåíèå î÷åðåäè çàäàíèé) è atrm (óäàëåíèå çàäàíèé èç î÷åðåäè). Ñó-
ùåñòâóåò òàêæå êîìàíäà batch, ïîäîáíàÿ at, êîòîðàÿ çàïóñêàåòñÿ òîãäà,
êîãäà çàãðóæåííîñòü ñèñòåìû ìåíüøå îïðåäåëåííîãî çíà÷åíèÿ (ïî óìîë-
÷àíèþ  1.5).
Êîãäà êîìàíäà at èñïîëüçóåòñÿ äëÿ ñîçäàíèÿ çàäàíèé, îíà ÷èòàåò
êîìàíäû ïîñòðî÷íî, êàê ñöåíàðèé â ñòèëå /bin/sh. Ýòè êîìàíäû ìîæíî
174

óêàçàòü èëè â êîìàíäíîé ñòðîêå (ñòàíäàðòíûé ââîä) èëè â ôàéëå. Â


ëþáîì ñëó÷àå çà èìåíåì êîìàíäû ñëåäóåò ñòðîêà ñ óêàçàíèåì âðåìåíè.
Îíà èìååò èíòóèòèâíî ïîíÿòíûé âèä:
at 10pm Çàïóñêàåòñÿ â 10:00 âå÷åðà òåêóùåãî èëè (åñëè óæå áîëü-
øå 22:00 ) ñëåäóþùåãî äíÿ
at 8:00am May 15 Çàïóñêàåòñÿ â 8:00 óòðà 15 ìàÿ
at midnight Jan 1 2012 Çàïóñêàåòñÿ íà ïåðâîé ñåêóíäå 2012 ãîäà
at teatime tomorrow Çàïóñêàåòñÿ â 16:00 ñëåäóþùåãî äíÿ
Çà ïîäðîáíûì îáñóæäåíèåì îïöèé ôîðìàòèðîâàíèÿ êîìàíäû at
ñëåäóåò îáðàòèòüñÿ ê ñòðàíèöå ðóêîâîäñòâà man at. Ïîñëå ââîäà òàêîé
ñòðîêè è íàæàòèÿ Enter ïðîãðàììà ïåðåõîäèò â èíòåðàêòèâíûé ðåæèì,
îæèäàÿ ïîñòðî÷íîãî ââîäà êîìàíä.  êîíöå êàæäîé ñòðîêè, êàê îáû÷-
íî, ñëåäóåò íàæèìàòü Enter . Ïî îêîí÷àíèè ââîäà äëÿ âûõîäà ñëåäóåò
íàæàòü Ctrl + D . Ïîñëå ýòîãî çàäàíèå áóäåò ðàçìåùåíî â î÷åðåäè.
Ìîæíî ïðîñòî óêàçàòü âõîäíîé ôàéë:
#at -f my commands noon + 5 days
Êîìàíäà at ÷èòàåò êîìàíäû èç ôàéëà mycommands è, èñïîëü-
çóÿ èíòåðïðåòàòîð /bin/sh, çàïóñêàåò èõ â ïîëäåíü ÷åðåç ïÿòü äíåé îò
òåêóùåãî ìîìåíòà.
Ïðîñìîòðåòü ñîñòîÿíèå î÷åðåäè çàäàíèé ïîçâîëÿåò êîìàíäà atq:
#atq
Date Owner Queue Job#
23:00:00 03/28/01 root ñ 2
Îòìåíèòü âûïîëíåíèå çàäàíèÿ ìîæíî ñ ïîìîùüþ êîìàíäû atrm:
#atrm 2
Çà âûïîëíåíèå çàäàíèé at îòâå÷àåò êîìàíäà atrun, êîòîðàÿ çà-
ïóñêàåòñÿ êàæäûå ïÿòü ìèíóò (â ñòàíäàðòíîé èíñòàëëÿöèè FreeBSD) è
÷èòàåò î÷åðåäü çàäàíèé âñåõ ïîëüçîâàòåëåé. Îíà âûïîëíÿåò òå çàäàíèÿ,
âðåìÿ êîòîðûõ óæå ïðèøëî. Èçìåíèòü èíòåðâàë çàïóñêà êîìàíäû atrun
ìîæíî â ôàéëå /etc/crontab, îäíàêî íåîáõîäèìîñòè â ýòîì, âèäèìî, íåò.
Çàïóñê çàäàíèé ïî ãðàôèêó ÿâëÿåòñÿ ñòîëü ìîùíûì ñðåäñòâîì,
÷òî àäìèíèñòðàòîð äîëæåí îãðàíè÷èòü âîçìîæíîñòè ïîëüçîâàòåëåé â
äîñòóïå ê êîìàíäàì cron è at. Ïðåäïîëîæèì, íàïðèìåð, ÷òî îäèí èç
175

ïîëüçîâàòåëåé çàïóñêàåò ðîáîò IRC eggdrop, è âñÿêèé ðàç, êîãäà âû ïðå-


ðûâàåòå ýòîò ïðîöåññ, îí ïåðåçàïóñêàåòñÿ, ïîñêîëüêó ïîëüçîâàòåëü íà-
ñòðîèë çàïóñê ýòîãî çàäàíèÿ â ôàéëå crontab, åñëè îíî íå âûïîëíÿåòñÿ.
Ïîëüçîâàòåëü íå îòâå÷àåò íà ïî÷òîâûå ñîîáùåíèÿ. ×òî æå äåëàòü? Âû
ìîæåòå èëè çàïðåòèòü ó÷åòíóþ çàïèñü ïîëüçîâàòåëÿ (ýòî, îäíàêî, âàð-
âàðñêèé ìåòîä) èëè îãðàíè÷èòü åãî äîñòóï ê êîìàíäàì cron è at. Èìåííî
äëÿ ýòîãî è ïðåäíàçíà÷åíû ôàéëû deny è allow.
 íîðìàëüíîì ñîñòîÿíèè ôàéëîâ /var/cron/allow è /var/cron/deny
íå ñóùåñòâóåò: êàæäûé ïîëüçîâàòåëü èìååò âîçìîæíîñòü ñîçäàâàòü ôàé-
ëû crontab. Ôàéë /var/cron/allow (êîãäà îí ñóùåñòâóåò â ñèñòåìå)
ñîäåðæèò ñïèñîê (îáû÷íûé òåêñòîâûé ôàéë, ãäå èìåíà ïîëüçîâàòåëåé
çàäàíû ïî îäíîìó â ñòðîêå) ïîëüçîâàòåëåé, êîòîðûì ðàçðåøåíî ñîçäà-
âàòü ôàéëû crontab. Ìîæíî ïîñòóïèòü è ïî-äðóãîìó: âíåñòè â ôàéë
/var/cron/deny òåõ ïîëüçîâàòåëåé, êîòîðûì çàïðåùåíî ñîçäàâàòü ôàé-
ëû crontab. Åñëè â ñèñòåìå ïðèñóòñòâóþò îáà ôàéëà, ïðåèìóùåñòâî
èìååò /var/cron/allow.
Ôàéëû /var/at/at.allow è /var/at/at.deny ðàáîòàþò àíàëîãè÷íî. Îá-
ðàòèòå âíèìàíèå íà íåñêîëüêî èíîé ôîðìàò èìåí.

5.5 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó

1. Ïîòðåíèðóéòåñü è ïîñòàðàéòåñü ïîíÿòü, êàê ðàáîòàþò ïðàâà äîñòó-


ïà ê ôàéëàì.

2. Ïðåäñòàâüòå, ÷òî Âû ðàáîòàåòå â ñîôòâåðíîé êîìïàíèè è äëÿ ñòàð-


òà íîâîãî ïðîåêòà, Âàì ïîðó÷åíî ñîçäàòü ñòðóêòóðó ðàáî÷èõ êàòà-
ëîãîâ ðàçðàáàòûâàåìîãî ïðîäóêòà, à òàê æå ñîçäàòü ïîëüçîâàòåëåé,
êîòîðûå áóäóò ó÷àñòâîâàòü â ðàçðàáîòêå (ðàçðàáîò÷èêè, ðàçðàáîò-
÷èêè ÁÄ, òåñòåðû, ðóêîâîäèòåëè ïðîåêòà, çàêàç÷èê è ò.ä., íå çà-
áûòü ïðî áóõãàëòåðèþ!). Ñîçäàâ ïîëíóþ ñòðóêòóðó êàòàëîãîâ è
âñåõ íåîáõîäèìûõ (ïî Âàøåìó ìíåíèþ) ïîëüçîâàòåëåé, ðàçãðàíè÷ü-
òå ïðàâà äîñòóïà ê ýòèì ôàéëàì èñïîëüçóÿ îáúåäèíåíèÿ â ãðóïïû.
Ïîñòàðàéòåñü, ÷òî áû íè îäèí èç ïîëüçîâàòåëåé íå èìåë äîñòóïà
ê òîé èíôîðìàöèè, ê êîòîðîé åìó íå ïîëîæåíî èìåòü. Íàïðèìåð,
176

íèêòî èç áóõãàëòåðèè íå èìååò ïðàâà ñìîòðåòü íà èñõîäíûé êîä


ðàçðàáàòûâàåìîãî ïðîäóêòà, íî îíè îáÿçàíû èìåòü ïðàâî íà ÷òåíèå
ãðàôèêà âûïîëíåíèÿ ïðîåêòà, êîòîðûé â ñâîþ î÷åðåäü èìååò ïðàâî
ðåäàêòèðîâàòü òîëüêî ðóêîâîäèòåëü ïðîåêòà. Çàêàç÷èê íå èìååò
ïðàâà âèäåòü òåñòèðóåìûå âåòêè ðàçðàáàòûâàåìîãî ïðîäóêòà, íî
îáÿçàí èìåòü äîñòóï íà âûïîëíåíèå pre-release âåðñèé. È ò.ä.

3. Óñòàíîâèòå íà Âàøó ñèñòåìó ïðîãðàììó Midnight Commander, êî-


òîðàÿ íàõîäèòñÿ â âèäå ïàêåòà íà Free316.iso. Äëÿ óñòàíîâêè ïî-
íàäîáÿòñÿ äîïîëíèòåëüíûå ïàêåòû, êîòîðûå íàõîäÿòñÿ íà òîì æå
äèñêå â ïàïêå libs.

4. Åñëè åñòü äîñòóï ê Èíòåðíåòó è VirtualBox ñ ïîìîùüþ NAT ïðåäî-


ñòàâëÿåò äîñòóï ê èíòåðíåòó äëÿ âèðòóàëüíîé ìàøèíû ñ FreeBSD,
òî óñòàíîâèòå èç ïîðòîâ êîíñîëüíûé Web-áðàóçåð lynx. Åñëè æå
íåò, òî óñòàíîâèòå åãî èç èñõîäíîãî êîäà, êîòîðûé íàõîäèòñÿ íà
äèñêå Free316.iso. Äëÿ óñòàíîâêè èç èñõîäíîãî êîäà, Âàì íóæíî
ïðîäåëàòü âñå òå øàãè, êîòîðûå âûïîëíÿþòñÿ ïðè ñáîðêå èç ïîðòîâ,
â ÷àñòíîñòè - make è make install.

5. Ñîçäàéòå çàäàíèÿ äëÿ cron, êîòîðûå áû ðåãóëÿðíî äåëàëè backup'û


òåõ ôàéëîâ, êîòîðûå èñïîëüçóþòñÿ âî âòîðîì çàäàíèè ýòîé ëàáî-
ðàòîðíîé ðàáîòû.

6. Ñ ïîìîùüþ at çàäàéòå âûâîä ïîçäðàâëåíèÿ íà ñâîé äåíü ðîæäåíèÿ.


Äëÿ ïðèìåðà, äàòó óêàæèòå íåñêîëüêèìè ðàçíûìè ñïîñîáàìè.

5.6 Ñîäåðæàíèå îò÷åòà

Äëÿ îò÷åòà ïî âòîðîìó çàäàíèþ, ïðåäîñòàâüòå ôàéëû /etc/passwd


è /etc/group, à òàê æå âûâîä âñåõ ïàïîê ñîçäàííîãî êàòàëîãà ñ îòîáðà-
æåíèåì ïðàâ äîñòóïà (äëÿ òåõ êòî íå äîãàäàëñÿ  ïîïðîáóéòå ls -lR).
Ïðîäåìîíñòðèðóéòå ðàáîòó Midnight Commander (çàïóñêàåòñÿ êîìàíäîé
mc) è áðàóçåðà lynx. Åñëè Âû óñòàíîâèëè lynx èç èñõîäíûõ êîäîâ, òî
îáúÿñíèòå, ÷òî âûâîäèëîñü íà ýêðàí, ïîñëå êàæäîãî èç Âàøèõ äåéñòâèé.
177

Ïîêàæèòå ñîäåðæèìîå crontab ôàéëîâ òåõ ïîëüçîâàòåëåé, äëÿ êîòîðûõ


âû ñäåëàëè èçìåíåíèÿ. ×òî ïîêàçûâàåò êîìàíäà atq?
Âñÿ ýòà èíôîðìàöèÿ äîëæíà áûòü ïðåäîñòàâëåíà â ðàñïå÷àòàííîì
âèäå è ñíàáæåíà êîììåíòàðèÿìè.

5.7 Âîïðîñû äëÿ ñàìîêîíòðîëÿ


178

6 Ëàáîðàòîðíàÿ ðàáîòà 6. Ðàáîòà â ñåòè

6.1 Ñîçäàíèå è íàñòðîéêà ñåòåâûõ èíòåðôåéñîâ

6.1.1 Íàñòðîéêà ñåòåâûõ èíòåðôåéñîâ VirtualBox

Ïðåæäå ÷åì íàñòðàèâàòü ñåòü â âèðòóàëüíîé ìàøèíå FreeBSD, íåîá-


õîäèìî ñîçäàòü âèðòóàëüíûé ñåòåâîé àäàïòåð. Ýòî îñîáûé äðàéâåð, êî-
òîðûé ýìóëèðóåò äîïîëíèòåëüíóþ ñåòåâóþ êàðòó, ðàçäåëÿÿ ðåñóðñû ñ
ðåàëüíîé ñåòåâîé êàðòîé.
Ïðè óñòàíîâêå VirtualBox ïî óìîë÷àíèþ ñîçäàåòñÿ âèðòóàëüíûé
àäàïòåð õîñòà. Åñëè æå åãî ïî êàêèì-òî ïðè÷èíàì íåò, òî Âû ñìîæå-
òå ñîçäàòü åãî â îäíîì èç ìåíþ íàñòðîåê ïðîãðàììû VirtualBox. Ïðè
ñîçäàíèè ìîæíî îñòàâèòü çíà÷åíèÿ ïî óìîë÷àíèþ.
Äëÿ âèðòóàëüíîé ìàøèíû ñ FreeBSD, íåîáõîäèìî óêàçàòü, ÷òî èìåí-
íî ýòîò àäàïòåð áóäåò èñïîëüçîâàòüñÿ äëÿ ñâÿçè ñ õîñò-êîìïüþòåðîì.
Ýòî äåëàåòñÿ â ìåíþ ñâîéñòâà -> ñåòü, ãäå â êà÷åñòâå òèïà ïîäêëþ-
÷åíèÿ íåîáõîäèìî âûáðàòü Âèðòóàëüíûé àäàïòåð õîñòà.  êà÷åñòâå
óñòðîéñòâà âûáåðèòå òî, êîòîðîå áûëî ñîçäàíî â íàñòðîéêàõ VirtualBox.
Âñå îñòàëüíûå íàñòðîéêè, ìîæåòå îñòàâèòü ïî óìîë÷àíèþ.  êà÷åñòâå
ïðèìåðîâ áóäóò èñïîëüçîâàòüñÿ èìåííî çíà÷åíèÿ ïî óìîë÷àíèþ:

IP-àäðåñ õîñòà: 192.168.56.1

IP-àäðåñ ãîñòåâîé ìàøèíû: 192.168.56.2

Ðàçóìååòñÿ Âû ìîæåòå èñïîëüçîâàòü ëþáûå óäîáíûå äëÿ Âàñ çíà÷å-


íèÿ.  ÷àñòíîñòè äëÿ òîãî, ÷òî áû Âàøà âèðòóàëüíàÿ ìàøèíà ñ FreeBSD
ïîÿâèëàñü â ñåòè 316, òî åé íåîáõîäèìî óñòàíîâèòü IP-àäðåñ èç ñîîòâåò-
ñòâóþùåé çîíû.
Ñðåäè íàñòðîåê âèðòóàëüíîãî àäàïòåðà õîñòà, ìîæíî íàéòè òàêóþ
ôóíêöèþ, êàê âèðòóàëüíûé DHCP ñåðâåð. Åñëè Âû óïðàâëÿåòå ñîòíÿìè
âèðòóàëüíûõ ìàøèí, òî ýòà ôóíêöèÿ íåçàìåíèìà.
179

6.1.2 Íàñòðîéêà ñåòè â ñèñòåìå FreeBSD

Êîìàíäà ifcong (ñîêð. îò Interface Congurator)  ìíîãîöåëåâîå


ñðåäñòâî äëÿ èçìåíåíèÿ ñåòåâûõ íàñòðîåê íà ëåòó (áåç ïåðåçàãðóçêè).
Ãëàâíîå ïðèìåíåíèå äàííîé êîìàíäû çàêëþ÷àåòñÿ â ïðèâÿçêå IP-àäðåñà
ê ñåòåâîé êàðòå (èíòåðôåéñó), íî, êàê è ìíîãèå äðóãèå êîìàíä UNIX, ýòà
óòèëèòà èìååò ãîðàçäî áîëåå øèðîêóþ ñôåðó ïðèìåíåíèÿ.
Ïðåæäå âñåãî, ifcong ïîìîæåò ñîáðàòü èíôîðìàöèþ î òåêóùåì
ñîñòîÿíèè ñåòåâûõ èíòåðôåéñîâ. Òàê, êîìàíäà ifcong -à ïîçâîëÿåò îïðå-
äåëèòü ñïèñîê âñåõ èíòåðôåéñîâ, ïðèñóòñòâóþùèõ â ñèñòåìå, à òàêæå èõ
äîñòóïíîñòü â äàííûé ìîìåíò.
Ïî÷òè âñå êîíôèãóðàöèîííûå èçìåíåíèÿ ïðèâåäóò ê òîìó, ÷òî ñè-
ñòåìà çàêðîåò âñå ñåòåâûå ñîåäèíåíèÿ. Âðÿä ëè ñòîèò äåëàòü ïîäîáíûå
íàñòðîéêè óäàëåííî, èñïîëüçóÿ telnet èëè ssh; ñåòåâóþ êàðòó íóæíî íà-
ñòðàèâàòü ñ êîíñîëè òîãî êîìïüþòåðà, íà êîòîðîì ýòà êàðòà óñòàíîâëåíà.
Äëÿ èçìåíåíèÿ IP-àäðåñà, ñâÿçàííîãî ñ ñåòåâîé êàðòîé, íóæíî âû-
ïîëíèòü ñëåäóþùóþ êîìàíäó:
#ifcong em0 192.168.56.2
ãäå 192.168.56.2  íîâûé àäðåñ, a em0  èíòåðôåéñ, êîòîðîìó îí
íàçíà÷àåòñÿ.
Òàêîå çàäàíèå IP-àäðåñà, ò.å. áåç óêàçàíèÿ ñåòåâîé ìàñêè, ïðèâîäèò
ê òîìó, ÷òî çíà÷åíèå ñåòåâîé ìàñêè è øèðîêîâåùàòåëüíîãî àäðåñà ñèñòå-
ìà âûñòàâèò ïî óìîë÷àíèþ, ïðè÷åì ñäåëàåò ýòî êàê äëÿ ñåòè êëàññà Ñ,
â ÷åì ìîæíî óáåäèòüñÿ, ïðîâåðèâ íîâûå íàñòðîéêè èíòåðôåéñà em0.
Åñëè íåîáõîäèìî âûéòè çà ðàìêè êëàññîâîé àäðåñàöèè, òî ìîæíî
óêàçàòü íå òîëüêî ñàì àäðåñ, íî è åãî ñåòåâóþ ìàñêó. Â êîìàíäå ifcong
ýòî äîñòèãàåòñÿ ñ ïîìîùüþ êëþ÷åâîãî ñëîâà netmask, ïðè÷åì çíà÷åíèå
ñåòåâîé ìàñêè ìîæíî çàäàâàòü â îáû÷íîé ôîðìå, â øåñòíàäöàòèðè÷-
íîé íîòàöèè èëè â âèäå ñèìâîëè÷åñêîãî èìåíè, îïðåäåëåííîãî â ôàéëå
/etc/networks:
#ifcong em0 192.168.56.2 netmask 255.255.255.0
#ifcong em0 192.168.56.2 netmask 0x00
#ifcong em0 192.168.56.2 netmask your-netmask
180

 êîìàíäå ìîæíî óêàçûâàòü òàêæå è çíà÷åíèå øèðîêîâåùàòåëü-


íîãî àäðåñà, õîòÿ ýòî íå ÿâëÿåòñÿ íåîáõîäèìûì. Øèðîêîâåùàòåëüíûé
àäðåñ âû÷èñëÿåòñÿ àâòîìàòè÷åñêè ïî çàäàííûì çíà÷åíèÿì IP-àäðåñà è
ñåòåâîé ìàñêè. Ïðè óêàçàíèè øèðîêîâåùàòåëüíîãî àäðåñà îáÿçàòåëüíî
óêàçûâàéòå îäíîâðåìåííî è ìàñêó:
#ifcong em0 192.168.56.2 netmask 255.255.255.0 broadcast
192.168.56.255
Îïðåäåëèòü øëþç â ifcong íåëüçÿ, ïîñêîëüêó ýòîò àäðåñ íå ïðè-
âÿçàí ê êàêîìó-ëèáî êîíêðåòíîìó ñåòåâîìó èíòåðôåéñó. Îäíàêî òàáëè-
öà ìàðøðóòèçàöèè FreeBSD, ïîçâîëÿþùàÿ ñèñòåìå âûïîëíÿòü ôóíêöèè
ïîëíîöåííîãî àïïàðàòíîãî ìàðøðóòèçàòîðà, ñîäåðæèò çàïèñü ìàðøðóòà
ïî óìîë÷àíèþ ( default route ). Ïî ýòîìó ìàðøðóòó óõîäÿò âñå ïàêåòû, àä-
ðåñîâàííûå âî âíåøíèé ìèð. Èìåííî óñòàíîâêà ìàðøðóòà ïî óìîë÷àíèþ
è ÿâëÿåòñÿ íàñòðîéêîé øëþçà.
Îñâîåíèå êîìàíäû route  î÷åíü òðóäíàÿ çàäà÷à, íå ìåíåå âàæíàÿ,
÷åì èçó÷åíèå ifcong. Îäíàêî äëÿ íà÷àëà äîñòàòî÷íî ðàññìîòðåòü ëèøü
äâà êëþ÷åâûõ ñëîâà ýòîé êîìàíäû  add è delete.
Ïîêà íàñòðîéêè âûïîëíÿþòñÿ èç òîé æå ëîêàëüíîé ñåòè, ê êîòîðîé
ïðèíàäëåæèò è íàñòðàèâàåìûé õîñò ïîä óïðàâëåíèåì FreeBSD, ìîæíî
áåçáîÿçíåííî ìåíÿòü âñå ìàðøðóòû  âêëþ÷àÿ è ìàðøðóò ïî óìîë-
÷àíèþ. Ïîòåðè ñåòåâîãî ñîåäèíåíèÿ (ââèäó èçìåíåíèé íàñòðîåê ýòîãî
ñàìîãî ñîåäèíåíèÿ) íå áóäåò. Íî åñëè ïîïûòàòüñÿ ñäåëàòü ýòî ïðè ïîìîùè
óäàëåííîé telnet- èëè ssh-ñåññèè, òî âïîëíå âåðîÿòíà âíåçàïíàÿ ïîòåðÿ
ñåòåâîãî ñîåäèíåíèÿ. Ýòî àíàëîãè÷íî òîìó, ÷òî ïðîèñõîäèò ïðè ðàáîòå ñ
ifcong.
 ëþáîì ñëó÷àå, ïðåæäå ÷åì ïðèñòóïàòü ê íàñòðîéêå, íóæíî ïðî-
âåðèòü ðåçóëüòàò ðàáîòû êîìàíäû netstat -rn. Ýòà êîìàíäà îòîáðàçèò
ìàðøðóò ïî óìîë÷àíèþ â òåêóùèõ íàñòðîéêàõ. Ìîæåò ñëó÷èòüñÿ, ÷òî
àäðåñ øëþçà óæå íàñòðîåí, íî äåëî â òîì, ÷òî êîìàíäà route íå êîíòðî-
ëèðóåò êîððåêòíîñòü íàñòðîåê. Ïîýòîìó ìîæíî çàäàòü òàêîé ìàðøðóò
ïî óìîë÷àíèþ, êîòîðûé â ïðèíöèïå íåäîñòèæèì èç äàííîé ïîäñåòè. Íå
ãîâîðÿ óæ îá óñòàíîâêå ïî óìîë÷àíèþ ôèêòèâíîãî ìàðøðóòà. Ïðîöåññ
óñòàíîâêè ìàðøðóòà ïî óìîë÷àíèþ ñîñòîèò èç äâóõ îáÿçàòåëüíûõ øà-
181

ãîâ: óäàëåíèÿ çàïèñè î ñóùåñòâóþùåì ìàðøðóòå è äîáàâëåíèÿ çàïèñè î


íîâîì, çàâåäîìî âåðíîì.
#route delete default
#route add default 192.168.0.1
Óñòàíîâêà èìåíè êîìïüþòåðà ( hostname )  çàäà÷à ïðîñòàÿ. Îíà
ðåøàåòñÿ ñ ïîìîùüþ êîìàíäû hostname ñ îäíèì-åäèíñòâåííûì ïàðà-
ìåòðîì  ïîëíûì äîìåííûì èìåíåì êîìïüþòåðà:
#hostname mysuperserver.com
Òà æå êîìàíäà ïîçâîëÿåò óçíàòü òåêóùåå èìÿ êîìïüþòåðà, ïðè÷åì
êàê â ïîëíîé (ñ äîìåííîé ÷àñòüþ), òàê è â êðàòêîé (òîëüêî èìÿ õîñòà)
ôîðìå:
#hostname
#hostname -s
×òî áû íå íàñòðàèâàòü âñå ýòè ïàðàìåòðû ïîñëå êàæäîé ïåðåçà-
ãðóçêè, íóæíî íàñòðîèòü èõ ïóòåì ðåäàêòèðîâàíèÿ êîíôèãóðàöèîííîãî
ôàéëà /etc/rc.conf. Îäíà èç âîçìîæíîñòåé  óêàçàòü âñå êîìàíäû íà-
ñòðîéêè, êàê îíè ââîäÿòñÿ â êîìàíäíóþ ñòðîêó, íî ïðàâèëüíûé ñïîñîá
 èñïîëüçîâàíèå ïåðåìåííûõ (ðèñ. 60).

Ðèñ. 60: /etc/rc.conf

Ïîðÿäîê çàïèñåé /etc/rc.conf íå èìååò çíà÷åíèÿ, ïîñêîëüêó ñöå-


íàðèé çàãðóçêè ñ÷èòûâàåò âñå ýòè ïàðàìåòðû îäíîâðåìåííî, êàæäûé
ïàðàìåòð  â ñîîòâåòñòâóþùóþ ïåðåìåííóþ îêðóæåíèÿ. ×òî áû èçìå-
íèòü íàñòðîéêè ñåòè, ìîæíî âíåñòè íàñòðîéêè â /etc/rc.conf è âûçâàòü
ñöåíàðèé /etc/netstart, êîòîðûé ñ÷èòûâàåò è ïðèìåíÿåò âñå ïàðàìåòðû
íàñòðîéêè ñåòè, êîòîðûå íàõîäÿòñÿ â ôàéëå /etc/rc.conf.
Ñèñòåìó äîìåííûõ èìåí ìû ñåé÷àñ íå íàñòðàèâàåì, òàê êàê ýòî
âñïîìîãàòåëüíîå ñðåäñòâî ïðèêëàäíîãî óðîâíÿ îò êîòîðîãî íèêàê íå çà-
âèñèò ðàáîòîñïîñîáíîñòü ñåòè.
He ñóùåñòâóåò ïðè÷èíû, èç-çà êîòîðîé íåëüçÿ íàçíà÷èòü îäíîé ñå-
òåâîé êàðòå ñðàçó íåñêîëüêî IP-àäðåñîâ. Ïðè äîñòàâêå ïàêåòà ñèñòåìà
182

èùåò õîñò ïî åãî IP-àäðåñó, çàïðàøèâàÿ àïïàðàòíûé àäðåñ ñåòåâîé êàð-


òû, ê êîòîðîé ïðèâÿçàí èñêîìûé IP-àäðåñ. À âîò íàçíà÷èòü îäèí IP-àäðåñ
ñðàçó íåñêîëüêèì èíòåðôåéñàì íåëüçÿ. Îäíà ñåòåâàÿ êàðòà ìîæåò îòêëè-
êàòüñÿ íà íåñêîëüêî IP-àäðåñîâ, íî îäèí è òîò æå IP-àäðåñ íå ìîæåò áûòü
ïðèñâîåí íåñêîëüêèì ÌÀÑ-àäðåñàì, èíà÷å â ñåòè âîçíèêíóò îøèáêè è
êîëëèçèè.
Ñïîñîá, ïîçâîëÿþùèé çàêðåïëÿòü íåñêîëüêî IP-àäðåñîâ çà îäíèì
àïïàðàòíûì àäðåñîì (ò.å. çà îäíîé ñåòåâîé êàðòîé) ïîëó÷èë íàçâàíèå
IP-àëèàñèíã (IP-aliasing). Âî FreeBSD äëÿ ýòîé öåëè ñëóæèò êîìàíäà
ifcong ñ êëþ÷åâûì ñëîâîì alias, ïðè÷åì ýòî ñëîâî äîëæíî áûòü ñàìûì
ïîñëåäíèì ïàðàìåòðîì:
#ifcong em0 10.30.8.234 netmask 255.255.255.0 alias
Äëÿ òîãî ÷òîáû çàíåñòè ïñåâäîíèìû â ôàéë /etc/rc.conf íåîáõî-
äèìî èñïîëüçîâàòü çàïèñü âèäà ifcong_xxx_alias, êîòîðàÿ ñèíòàêñè-
÷åñêè ðàáîòàåò ïîäîáíî çàïèñè ifcong_xxx. Íà ðèñ. 60 ïðèìåð òîãî,
êàê ìîãóò âûãëÿäåòü çàïèñè î ïñåâäîíèìàõ â ôàéëå /etc/rc.conf :

Ðèñ. 61: Íàñòðîéêà alias'îâ

Äëÿ óäîáñòâà ïîëüçîâàòåëåé íåîáõîäèìî ïðåîáðàçîâûâàòü èìåíà


õîñòîâ â ñîîòâåòñòâóþùèå èì IP-àäðåñà. Çà ðåøåíèå ýòîãî âîïðîñà îòâå-
÷àåò ñëóæáà DNS, íî îíà ïîêà íå íàñòðîåíà. Äëÿ êîìïüþòåðîâ ëîêàëüíîé
ñåòè ýòó çàäà÷ó ìîæíî ðåøèòü ïðè ïîìîùè ôàéëà /etc/hosts.
Ôàéë /etc/hosts ñîäåðæèò çàïèñè, â êàæäîé èç êîòîðûõ óêàçàíû:
IP-àäðåñ, îôèöèàëüíîå èìÿ õîñòà è äðóãèå èìåíà-ïñåâäîíèìû, ðàçäå-
ëåííûå ïðîáåëîì èëè çíàêîì òàáóëÿöèåé. Ïðè÷åì â ìîìåíò ðàçðåøåíèÿ
èìåí, ñèñòåìà, ïðåæäå ÷åì ôîðìèðîâàòü DNS-çàïðîñ, â ïåðâóþ î÷åðåäü
êîíñóëüòèðóåòñÿ èìåííî ñ çàïèñÿìè â ýòîì ôàéëå, äðóãèìè ñëîâàìè,
äàííûé ôàéë ÿâëÿåòñÿ â îäíî è òîæå âðåìÿ êàê ðåçåðâíîé êîïèåé ñåðâåðà
èìåí, òàê è ïåðåêðûâàþùåé åãî èíôîðìàöèåé î èìåíàõ â òåõ ñëó÷àÿõ,
êîãäà ñåðâåð èìåí ëèøåí êîððåêòíûõ ñâåäåíèé. Íó à èìåíà-ïñåâäîíèìû
èñïîëüçóþòñÿ êàê ñîêðàùåííûå èìåíà äëÿ îáîçíà÷åíèÿ õîñòîâ ñåòè.
183

Âîò ïðèìåð íåñêîëüêèõ çàïèñåé â /etc/hosts:


64.41.131.132 ns ns.somewhere.com lion.somewhere.com
64.41.131.133 www2 www2.somewhere.com
64.41.132.165 www3 www3.somewhere.com
114.235.123.11 fred www.foobar.com
Ïðè óñòàíîâëåíèè ñåòåâîãî ñåàíñà ñâÿçè ñ äðóãèì êîìïüþòåðîì åãî
ìîæíî âûçûâàòü ëèáî ïî èìåíè, ëèáî ïî ïñåâäîíèìó, à íå ïî åãî IP-
àäðåñó.
Ñäåëàâ âñå íåîáõîäèìûå ñåòåâûå íàñòðîéêè, íåîáõîäèìî óáåäèòüñÿ,
÷òî ñåòü ñ íàñòðàèâàåìîãî êîìïüþòåðà âèäíà è äîñòóïíà. Ñäåëàòü ýòî
ìîæíî ñ ïîìîùüþ ïðîãðàììû ping, îñíîâàííîé íà ïðîòîêîëå IÑÌÐ.
Îíà ïîñûëàåò çàïðîñ íà óäàëåííûé õîñò. Ïîëó÷èâ îòâåò èëè íå äîæäàâ-
øèñü åãî, ping âûäàåò ñòàòèñòèêó îáìåíà ïàêåòàìè ìåæäó õîñòàìè: âðå-
ìÿ ïóòè â îáà êîíöà, ïðîöåíò ïîòåðü è ò.ï.
Èñïîëüçîâàòü ïðîãðàììó ping î÷åíü ïðîñòî.  êà÷åñòâå ïàðàìåòðà
ìîæíî óêàçûâàòü êàê àäðåñ óäàëåííîãî êîìïüþòåðà, òàê è åãî èìÿ (èëè
ïñåâäîíèì). Îñòàíîâèòü åå ðàáîòó ìîæíî, íàæàâ Ctrl + C (ðèñ. 62).

Ðèñ. 62: Ðàáîòà êîìàíäû ping ïðè êîððåêòíî íàñòðîåííîé ñåòè

Åñëè îòâåò íà çàïðîñ íå ïðèøåë â òå÷åíèå îïðåäåëåííîãî âðåìåíè


(òàéì-àóòà), òî óäàëåííûé êîìïüþòåð ñ÷èòàåòñÿ íåäîñòèæèìûì è ïðî-
ãðàììà ping âûäàåò îò÷åò î ñòîïðîöåíòíîé ïîòåðå ïàêåòîâ. Ýòî ìîæåò
îçíà÷àòü è íåâåðíûå íàñòðîéêè õîñòà, è îáðûâ êàáåëÿ, è íåïðàâèëüíóþ
ðàáîòó DNS (åñëè èìåë ìåñòî çàïðîñ ïî èìåíè), è òî, ÷òî óäàëåííûé
êîìïüþòåð âûêëþ÷åí (ðèñ. 63).
Ñóùåñòâóåò åùå íåñêîëüêî ðàíåå íå óïîìèíàâøèõñÿ ôàéëîâ êîí-
ôèãóðàöèè, êîòîðûå äîñòîéíû êðàòêîãî îïèñàíèÿ. Êñòàòè, áîëüøèíñòâî
184

Ðèñ. 63: Ñîîáùåíèå îá îòñóòñòâèè îòâåòà íà çàïðîñ

ôàéëîâ êîíôèãóðàöèè ñíàáæåíû ðóêîâîäñòâàìè ïî èõ çàïîëíåíèþ è íà-


ñòðîéêå. ×òîáû îòêðûòü òàêîå ðóêîâîäñòâî ïðîñòî, âûïîëíèòå êîìàíäó
man lename , ê ïðèìåðó man inetd.conf.
/etc/networks: Ôàéë ñîäåðæèò ñèìâîëè÷åñêèå èìåíà ïîäñåòåé, êî-
òîðûå èñïîëüçóþòñÿ, ê ïðèìåðó, â òàáëèöå ìàðøðóòèçàöèè.
/etc/hosts.allow: Ýòî ñïèñîê ïðàâèë áåçîïàñíîñòè, îãîâàðèâàþ-
ùèé, ñ êàêèìè ñåðâèñàìè êàêèõ õîñòîâ ðàçðåøåí ñåòåâîé îáìåí äëÿ äàí-
íîãî êîìïüþòåðà. Ìîæíî òàêæå óêàçàòü, êàêèå äåéñòâèÿ ñëåäóåò ïðåä-
ïðèíÿòü â òîì ñëó÷àå, åñëè îáíàðóæåíà ïîïûòêà óñòàíîâëåíèÿ çàïðå-
ùåííîãî ñîåäèíåíèå.
/etc/inetd.conf : Äåìîí inetd, èëè ñóïåðñåðâåð, îòâå÷àåò çà ïðî-
ñëóøèâàíèå ñåòåâûõ ïîðòîâ è çàïóñê ñîîòâåòñòâóþùåãî êîíêðåòíîìó ïîð-
òó äåìîíà, åñëè îáíàðóæåíà ïîïûòêà óñòàíîâèòü ñîåäèíåíèå ñ äàííûì
ïîðòîì. Âñå ðàçðåøåííûå ê çàïóñêó äåìîíû äîëæíû áûòü óêàçàíû â
/etc/inetd.conf (ïðîñëóøèâàþòñÿ òîëüêî ïîðòû, óêàçàííûå â ýòîì ôàé-
ëå), à ñàìè ñîåäèíåíèÿ äîëæíû óäîâëåòâîðÿòü óñòàíîâëåííûì ïðàâèëàì
áåçîïàñíîñòè äëÿ äàííîãî ïîðòà.
/etc/services: Áàçà äàííûõ, óïîðÿäî÷åííàÿ ïî òèïàì ñóùåñòâó-
þùèõ (íî íå îáÿçàòåëüíî àêòèâíûõ) IP-ñåðâèñîâ, ñ ïðèâÿçêîé êàæäîãî
ñåðâèñà ê êîíêðåòíîìó ïîðòó. Çäåñü õðàíèòñÿ ïîëåçíàÿ ñïðàâî÷íàÿ èí-
ôîðìàöèÿ ïî ñåðâèñàì è ïîðòàì, êàê äëÿ ïðîãðàìì, ðàáîòàþùèõ ñ ñåòüþ,
òàê è äëÿ ñèñòåìíîãî àäìèíèñòðàòîðà ñåòè.
/etc/protocols: Ñîäåðæèò ñâåäåíèÿ î ðàçëè÷íûõ ñåòåâûõ ïðîòî-
êîëàõ. Èíòåðåñåí â êà÷åñòâå ýòàëîííîé èíôîðìàöèè îá IP-ïðîòîêîëàõ.
/etc/rðñ: Ñîäåðæèò ñâåäåíèÿ ïî òàêèì ñåðâèñàì, êàê NFS è NIS,
èõ ïîðòàì, à òàêæå èíôîðìàöèþ î ðàçëè÷íûõ ïðîãðàììàõ, îòâå÷àþùèõ
185

çà ôîðìèðîâàíèÿ îò÷åòîâ ïî ñîñòîÿíèþ ÷àñòåé ñèñòåìû.

6.2 Íàñòðîéêà ssh

Ïåðåäà÷à òåðìèíàëüíîé èíôîðìàöèè, îáû÷íî âûïîëíÿåìàÿ ïðèëî-


æåíèÿìè Telnet èëè rlogin, âåðîÿòíî, íàèáîëåå ðèñêîâàííûé òèï ïå-
ðåäà÷è èíôîðìàöèè â ÿâíîì âèäå, íî è ñàìûé ïðîñòîé äëÿ çàùèòû.
 ñîñòàâ ÎÑ FreeBSD âõîäèò ïîëíûé ïàêåò SSH (Secure Shell  çàùè-
ùåííûé êîìàíäíûé èíòåðïðåòàòîð), ðàçðàáîòàííûé äëÿ çàìåíû ñëóæá
Telnet è rlogin, è ïîçâîëÿþùèé ïîëüçîâàòåëÿì óñòàíîâèòü ïîëíîñòüþ
çàøèôðîâàííûé êàíàë îáìåíà èíôîðìàöèåé ñ ñåðâåðîì, çàùèùàþùèé
ïàðîëè ðåãèñòðàöèè è îïåðàöèè êîìàíäíîé ñòðîêè îò ïîïûòîê ïåðåõâàòà.
Ðå÷ü èäåò î ïàêåòå OpenSSH, ïåðâîíà÷àëüíî ðàçðàáîòàííîì äëÿ ÎÑ
OpenBSD, à òåïåðü âõîäÿùåì â ñîñòàâ ÎÑ FreeBSD.
Ñëóæáà SSH ðàáîòàåò íà ïîðòó 22 êàê îòäåëüíûé äåìîí, ïîðîæ-
äàþùèé íîâûå ïðîöåññû sshd (àíàëîãè÷íî ñåðâåðó Apache) äëÿ íîâûõ
ïîäêëþ÷åíèé. ×òîáû âêëþ÷èòü ïîääåðæêó ñåðâåðà SSH, äîáàâüòå ñëåäó-
þùóþ ñòðîêó â ôàéë /etc/rc.conf (åñëè åå òàì åùå íåò) è ïåðåçàãðóçèòå
ñèñòåìó:
sshd_enable="YES"
Êëèåíò SSH çàìåíÿåò ïðîãðàììó Telnet. Íóæíî ïðîñòî èñïîëüçî-
âàòü êîìàíäó ssh âìåñòî telnet â êîìàíäíîé ñòðîêå:
#ssh mysuperserver.com
Ïðîãðàììà ssh ñàìà çàïðîñèò ïàðîëü, ïðåäïîëàãàÿ, ÷òî èìÿ ïîëü-
çîâàòåëÿ óäàëåííîé ìàøèíû ñîâïàäàåò ñ èìåíåì ëîêàëüíîãî. Äðóãîå èìÿ
ïîëüçîâàòåëÿ ìîæíî çàäàòü íåñêîëüêèìè ñïîñîáàìè:
#ssh mysuperserver.com -1 user
#ssh user@mysuperserver.com
Ïðîãðàììà ssh óñòàíàâëèâàåò øèôðóåìîå ïîäêëþ÷åíèå è ïåðåäàåò
ðåãèñòðàöèîííóþ èíôîðìàöèþ íà ñåðâåð áåçîïàñíûì îáðàçîì. Ñ ýòîãî
ìîìåíòà îíà ðàáîòàåò êàê îáû÷íàÿ ðåàëèçàöèÿ Telnet,  ñ òî÷êè çðåíèÿ
ïîëüçîâàòåëÿ íåò íèêàêîé ðàçíèöû. Èìåííî òàê ïîëüçîâàòåëü îïåðàöèîí-
íûõ ñèñòåì FreeBSD, Linux, UNIX èëè Mac OS X äîëæåí ïîäêëþ÷àòüñÿ
186

ê âàøåé ñèñòåìå.
Äëÿ ïîëüçîâàòåëåé Windows, ñóùåñòâóåò òàêîå ðåøåíèå, êàê ïðî-
ãðàììà putty. Îíà ïîçâîëÿåò ïîäêëþ÷èòüñÿ ñ ìàøèíû ïîä óïðàâëåíèåì
Windows ê ñåðâåðàì ñ ðàáîòàþùèì ssh-ñåðâåðîì. Íà äèñêå Free316.iso,
Âû íàéäåòå ýòó ïðîãðàììó.
SSH ñåðâåð òàê æå çàìåíÿåò ïðîòîêîë RCP (remote cp, remote
copy ) íà SCP (secure copy ), êîòîðûé ïðåäñòàâëÿåò ñàìûé ïðîñòîé îáìåí
ôàéëàìè ìåæäó ñèñòåìàìè ïîäêëþ÷åííûìè ïî ñåòè.  ëþáîé UNIX
ñèñòåìå ñóùåñòâóåò ïðîãðàììà scp, êîòîðàÿ ïîçâîëÿåò êîïèðîâàòü ôàéë
íà óäàëåííûé êîìïüþòåð:
$scp le1 user@host.com
Çàïðàøèâàåò ïàðîëü, êîòîðûé èìååò ïîëüçîâàòåëü ñ èìåíåì user
íà êîìïüþòåðå host.com è êîïèðóåò le1 èç òåêóùåé äèðåêòîðèè â
äîìàøíþþ äèðåêòîðèþ ïîëüçîâàòåëÿ user êîìïüþòåðà host.com.
$scp user@host.com:/directory1/le1 le1
Çàïðàøèâàåò ïàðîëü, êîòîðûé èìååò ïîëüçîâàòåëü ñ èìåíåì user íà
êîìïüþòåðå host.com è êîïèðóåò le1 èç êàòàëîãà directory1 êîìïüþ-
òåðà host.com. Ðàçóìååòñÿ êàê è ëþáàÿ äðóãàÿ ïðîãðàììà FreeBSD, scp
èìååò îãðîìíîå êîëè÷åñòâî îïöèé. Íàïðèìåð íå âñåãäà åñòü âîçìîæíîñòü
îáðàòèòüñÿ ïî èìåíè êîìïüþòåðà èëè sshd ìîæåò ðàáîòàòü íà äðóãîì
ïîðòó.
$scp -p 5022 -r /home/user/mysite user@92.68.56.2:/var/www/
Áîëåå óäîáíûé ñïîñîá êîïèðîâàíèÿ ôàéëîâ, ïðåäîñòàâëÿåò ôàéëî-
âûé ìåíåäæåð Midnight Commander. Îí ïîçâîëÿåò ñîçäàòü shell ñîåäèíå-
íèå è óïðàâëÿòü ôàéëàìè íà óäàëåííîì êîìïüþòåðå. Äëÿ ïîëüçîâàòåëåé
Windows åñòü êîíñîëüíàÿ ïðîãðàììà pscp  àíàëîã scp êîìàíäû â UNIX
è áîëåå ïðèâû÷íûé ãðàôè÷åñêèé ôàéëîâûé ìåíåäæåð WinSCP. Âñå ýòè
ïðîãðàììû Âû íàéäåòå íà äèñêå.
187

6.3 Íàñòðîéêà LAMP ñåðâåðà

6.3.1 Web-ñåðâåð Apache

HyperText Transfer Protocol (HTTP, ïðîòîêîë ïåðåäà÷è ãè-


ïåðòåêñòà)  îñíîâà World Wide Web. Ðàçðàáîòàííûé â 1993 ãîäó äëÿ
ïîääåðæêè îáìåíà èíôîðìàöèåé â öåíòðå CERN (Øâåéöàðèÿ), îí ïðåä-
ñòàâëÿåò ñîáîé ïðîñòåéøèé ïðîòîêîë, íå òðåáóþùèé àóòåíòèôèêàöèè
è âêëþ÷àþùèé ëèøü íåñêîëüêî êîìàíä ñ êëèåíòñêîé ñòîðîíû. Ïåðâî-
íà÷àëüíî îí áûë îïòèìèçèðîâàí äëÿ ïåðåñûëêè íåáîëüøèõ òåêñòîâûõ
ôàéëîâ. HTTP îáåñïå÷èâàåò ðàñïðîñòðàíåíèå ñâÿçàííûõ ìåæäó ñîáîé
èíôîðìàöèîííûõ ñòðàíèö, ÿçûê ôîðìàòèðîâàíèÿ êîòîðûõ (ïîíÿòíûé
HTTP-áðàóçåðàì) áûë ðàçðàáîòàí îòíîñèòåëüíî íåäàâíî. Îí íàçûâàåòñÿ
HyperText Markup Language (HTML, ÿçûê ðàçìåòêè ãèïåðòåêñòà).
 îòëè÷èå îò SMTP, FTP è äðóãèõ ïîïóëÿðíûõ ïðîòîêîëîâ, HTTP
íå ïîääåðæèâàåò "ñåàíñû". Êîãäà êëèåíò ñîåäèíÿåòñÿ ñ ñåðâåðîì, HTTP
ïðîèçâîäèò íåñêîëüêî îïåðàöèé, à ïîòîì çàêðûâàåò ñîåäèíåíèå. HTTP
ïðè ñîåäèíåíèè ïîçâîëÿåò âûïîëíèòü òîëüêî îäèí çàïðîñ. Ñòðóêòóðà
çàïðîñà â ïðîòîêîëå ÍÒÒÐ/1.0 ÷ðåçâû÷àéíî ïðîñòà. Ýìóëèðîâàòü îïå-
ðàöèþ HTTP ìîæíî, ïîäêëþ÷èâøèñü ê ïîðòó 80 íà HTTP-ñåðâåðå è
âûïîëíèâ çàïðîñ GET. Èìååòñÿ ìíîæåñòâî âàðèàíòîâ îòâåòà, êîòîðûå
ìîæåò âîçâðàòèòü ñåðâåð. Îíè ÿâëÿþòñÿ òðåõçíà÷íûìè êîäàìè è ñãðóï-
ïèðîâàíû ïî çíà÷åíèþ ïåðâîé öèôðû.

- 2õõ  Óñïåøíîå âûïîëíåíèå

- 200 OK Ñòàíäàðòíûé êîä óñïåøíîãî âûïîëíåíèÿ

- 201 Created (Ñîçäàíî)

- 202 Accepted (Ïðèíÿòî)

- 203 Partial Information (×àñòè÷íàÿ èíôîðìàöèÿ)

- 204 No Content (Íåò ñîäåðæèìîãî)

- Çõõ  Ïåðåíàïðàâëåíèå
188

- 300 Multiple Choices Çàïðîñû MultiViews èëè CheckSpelling íàøëè


íåñêîëüêî ñîîòâåòñòâèé

- 301 Moved Permanently Ïîñëåäíèé ñèìâîë êîñîé ÷åðòû îïóùåí

- 302 Moved Temporarily Íàéäåíî ïåðåíàïðàâëåíèå

- 304 Not Modied Ìîæíî èñïîëüçîâàòü êåøèðîâàííóþ êîïèþ

- 4õõ  Îøèáêà êëèåíòà

- 400 Bad Request (Ïëîõîé çàïðîñ)

- 401 Unauthorized Äëÿ ïðîäîëæåíèÿ íåîáõîäèìà àóòåíòèôèêàöèÿ

- 403 Forbidden Ïðàâà äîñòóïà èëè êîíôèãóðàöèÿ ñåðâåðà çàïðåùà-


þò äîñòóï

- 404 Not Found Ôàéëà íå ñóùåñòâóåò

- 5õõ  Îøèáêà ñåðâåðà

- 500 Internal Server Error Îøèáêà CGI-ïðîãðàììû

- 501 Not Implemented (He ðåàëèçîâàíî)

- 502 Bad Gateway (Ïëîõîé øëþç)

- 503 Service Unavailable Ðåñóðñû, íåîáõîäèìûå äëÿ îáðàáîòêè çà-


ïðîñà, íåäîñòóïíû

Êîãäà êëèåíò çàïðàøèâàåò ôàéë, óæå èìåþùèéñÿ â êýøå (íàïðè-


ìåð, èçîáðàæåíèå GIF èëè HTML-ñòðàíèöó), îí âûïîëíÿåò çàïðîñ GET,
â ïîëå If-Modied-Since êîòîðîãî óñòàíîâëåíà äàòà ïîñëåäíåé çàãðóçêè
èçîáðàæåíèÿ. Ýòî ïîçâîëÿåò ñåðâåðó ïðîâåðèòü, èçìåíèëñÿ ëè ôàéë ñ
ýòîãî ìîìåíòà. Åñëè äà, ñåðâåð ïåðåñûëàåò ôàéë (ñ êîäîì óñïåøíîãî
âûïîëíåíèÿ 200), åñëè íåò, îí âîçâðàùàåò êîä 304 (Not Modied), ñîîá-
ùàþùèé áðàóçåðó, ÷òî ìîæíî èñïîëüçîâàòü êåøèðîâàííûé ôàéë.
189

Íàçâàíèå ñåðâåðà Apache, êàê ïðèíÿòî ñ÷èòàòü, ïðîèñõîäèò îò


"A Patchy Server"(Ñåðâåð èñïðàâëåíèé), ïîñêîëüêó îí "âûðîñ"èç íàáî-
ðà èñïðàâëåíèé, êîòîðûìè äîïîëíÿëñÿ ñòàíäàðòíûé, íî â íà÷àëå 1995
ãîäà èìåþùèé âåñüìà îãðàíè÷åííûå âîçìîæíîñòè NCSA httpd-ñåðâåð.
Apache  ÿðêèé ïðèìåð ñàìîãî øèðîêî ïîðòèðóåìîãî íà ñåãîäíÿ ïðî-
ãðàììíîãî îáåñïå÷åíèÿ. Îí ðàáîòàåò íà ïëàòôîðìàõ ïîä óïðàâëåíèåì
ñàìûõ ðàçíûõ îïåðàöèîííûõ ñèñòåì  îò AIX äî Windows, îò BeOS
äî Mac OS X, è, êîíå÷íî æå, FreeBSD. Ýòîò ñåðâåð ïðåäñòàâëÿåò ñî-
áîé íå ïðîñòî îäíó èç íàèáîëåå ïîëíûõ ðåàëèçàöèé HTTP-ñåðâåðà, íî
è ðàññìàòðèâàåòñÿ ìíîãèìè êàê ïðèáëèæåíèå ê èäåàëó ïðîãðàììíîãî
îáåñïå÷åíèÿ ñ îòêðûòûì êîäîì.
Apache óñòàíàâëèâàåòñÿ èç ïîðòîâ èëè ïàêåòîâ. Íà ñåãîäíÿøíèé
äåíü èñïîëüçóþòñÿ Apache âåðñèé 1.3, 2.0 è 2.2. 2.2  ñàìàÿ ïîñëåäíÿÿ
âåðñèÿ, íî ïðîäîëæàåòñÿ ðàçðàáîòêà è áîëåå ñòàðûõ âåðñèé äëÿ ñîâìå-
ñòèìîñòè ñ ðàíåå ðàçðàáîòàííûìè ïðîäóêòàìè. Äîñòîèíñòâîì ñåðâåðà
Apache äëÿ ïîëüçîâàòåëåé FreeBSD ÿâëÿåòñÿ òî, ÷òî ìíîãèå åãî êîì-
ïîíåíòû áûëè ðàçðàáîòàíû èìåííî â ñðåäå FreeBSD, èç ýòîãî òàêæå
ñëåäóåò, ÷òî Apache õîðîøî ñî÷åòàåòñÿ ñ ôàéëîâîé ñòðóêòóðîé FreeBSD.
Äèñòðèáóòèâ ñ èñõîäíûì êîäîì Apache ìîæíî íàéòè íà ìíîãèõ
çåðêàëüíûõ ñåðâåðàõ ïî âñåìó ìèðó, åñëè íàáîð ïîðòîâ íå ïîçâîëÿåò
îáíîâèòü åãî ñ öåíòðàëüíîãî ñåðâåðà. Èñõîäíûé êîä Apache òàê æå íàõî-
äèòñÿ íà äèñêå Free316.iso (ôàéë httpd-2.2.16.tar.gz). Ïåðåïèøèòå åãî
â ñâîþ äîìàøíþþ ïàïêó è ðàñïàêóéòå.
Ðàçóìååòñÿ ïðè êîìïèëÿöèè Web-ñåðâåðà èç èñõîäíîãî êîäà, ó Âàñ
ìíîãî âîçìîæíîñòåé ïî èçìåíåíèþ êîìïîíåíòîâ è ôóíêöèîíàëüíîñòè
ñåðâåðà. Ñåé÷àñ, ñðåäè îïöèé, íàì íóæíà âîçìîæíîñòü ïîäêëþ÷åíèÿ
so ìîäóëåé. Ýòî ñàìûé ïðîñòîé ñïîñîá ðàñøèðåíèÿ ôóíêöèîíàëüíîñòè
Web-ñåðâåðà.  ÷àñòíîñòè, ïîääåðæêó ÿçûêà php ìû áóäåì ïîäêëþ÷àòü
èìåííî â âèäå so ìîäóëÿ. Äëÿ âêëþ÷åíèÿ ýòîé âîçìîæíîñòè, ïåðåä êîì-
ïèëÿöèåé, ñöåíàðèé cong íåîáõîäèìî çàïóñòèòü ñî ñëåäóþùåé îïöèåé:
./congure - -enable-module=so
ïîñëå ýòîãî ìîæíî çàïóñêàòü make è make install.
 çàâèñèìîñòè îò ñïîñîáà èíñòàëëÿöèè Apache è ìíîãèõ äðóãèõ
190

àñïåêòîâ, êîðíåâîé êàòàëîã ñåðâåðà ìîæåò ðàçìåùàòüñÿ â ëþáîì ìåñòå.


 ñëó÷àå èíñòàëëÿöèè íà Âàøèõ âèðòóàëüíûõ ìàøèíàõ (åñëè Âû íå âíî-
ñèëè â ñèñòåìó ñåðüåçíûõ èçìåíåíèé) äîëæåí ðàñïîëàãàòüñÿ â êàòàëîãå
/usr/local/apache2.  ñëó÷àå èíñòàëÿöèè èç ïîðòîâ èëè ïàêàäæåé, âñå
êîìïîíåíòû Apache óñòàíàâëèâàþòñÿ â òî÷íîì ñîîòâåòñòâèè ñ èäåîëî-
ãèåé FreeBSD.  íàøåì ñëó÷àå åñòü íåáîëüøèå îòëè÷èÿ: â êàòàëîãå bin
íàõîäÿòñÿ èñïîëíÿåìûå ôàéëû äëÿ óïðàâëåíèÿ ñåðåðîì, â ïàïêå conf
 ôàéëû íàñòðîéêè ñåðâåðà. Ñàìè Web-ñòðàíè÷êè, íàõîäÿòñÿ â ïàïêå
htdocs.
httpd.conf ýòî ãëàâíûé ôàéë êîíôèãóðàöèè Apache. Äëÿ íà÷àëà
Âàì íåîáõîäèìî ðàñêîìåíòèðîâàòü îïöèþ ServerName. Óêàçàâ èìÿ,
êîòîðîå èìååò ñåðâåð (äëÿ íàñ  áåçðàçëè÷íî êàêîå) è óêàçàâ ïîðò (åñëè
Web-ñåðâåð îäèí, òî ëó÷øå èñïîëüçîâàòü 80) ìû ìîæåì çàïóñêàòü ñåðâåð
êîìàíäîé
/usr/local/apache2/bin/apachectl start
èëè, åñëè îí óæå çàïóùåí, ïåðåçàïóñòèòü êîìàíäîé
/usr/local/apache2/bin/apachectl restart
Èçó÷àÿ ýòîò ôàéë Âû íàéäåòå ìíîãî èíòåðåñíûõ âîçìîæíîñòåé
(âàì ïîìîãóò man ñòðàíèöû, åñëè Âû óñòàíàâëèâàëè ñåðâåð èç ïîð-
òîâ èëè ïàêàäæåé èëè ïàïêà manual, åñëè Âû êîìïèëèðîâàëè åãî èç
èñõîäíîãî êîäà). Íàïðèìåð îïöèÿ DocumentRoot óêàçûâàåò, ãäå áóäóò
õðàíèòüñÿ Web-ñòðàíè÷êè. Âû ìîæåòå óêàçàòü ëþáîå ìåñòî, â ò.÷., îò-
äåëüíûé âèí÷åñòåð èëè ïàïêó íàõîäÿùóþñÿ íà äðóãîì êîìïüþòåðå è
ïîäêëþ÷åííóþ â âèäå NFS-ðåñóðñà.
Ñðåäè îïöèé httpd.conf, æåëïòåëüíî òàê æå ê èìåíè ôàéëà ïî
óìîë÷àíèþ (êîòîðûé îïðåäåëÿåòñÿ ïåðåìåííîé DirectoryIndex  index.html)
äîáàâèòü ñòðîêó ñ èìåíåì index.php, ÷òî ïîçâîëèò çàïóñêàòü ñöåíàðèè
íà ÿçûêå php áåç óêàçàíèÿ ïîëíîãî èìåíè ôàéëà.
Äëÿ òîãî, ÷òî áû Apache çàïóñêàëñÿ êàæäûé ðàç ïðè çàãðóçêå
êîìïüþòåðà, âíåñèòå â ôàéë /etc/rc.conf ñòðîêó
apache22_enable="YES"
Äëÿ ïðîâåðêè ðàáîòîñïîñîáíîñòè ñåðâåðà, ââåäèòå â ñòðîêó áðàóçå-
ðà IP àäðåñ âèðòóàëüíîé ìàøèíû.
191

6.3.2 ÑÓÁÄ MySQL

Áàçû äàííûõ  ýòî îñíîâíîå õðàíèëèùå èíôîðìàöèè â èíòåðíåò.


Íè îäèí, àêòèâíî èñïîëüçóþùèéñÿ ðåñóðñ, íå îáõîäèòñÿ áåç áàç äàííûõ
è ñèñòåìû óïðàâëåíèÿ áàçàìè äàííûõ.
Äëÿ íåáîëüøèõ è ñðåäíèõ ïðîåêòîâ åñòü îòëè÷íàÿ ñâîáîäíàÿ ÑÓÁÄ
 MySQL, ðàçðàáîòêà êîòîðîé â äàííûé ìîìåíò ïðèíàäëåæèò êîìïàíèè
Oracle. Êàê è ëþáîé äðóãîé ïðîäóêò ïîä ëèöåíçèåé GPL, âû ìîæåòå
ñîâåðøåííî ñâîáîäíî èñïîëüçîâàòü åå äëÿ ëþáûõ öåëåé. Ïîñêîëüêó ëèäåð
ÑÓÁÄ-ñòðîåíèÿ Oracle ñóæàåò îáëàñòü ðàñïðîñòðàíåíèÿ ñâîåé ÑÓÁÄ (íà
UNIX ñèñòåìàõ îòäàåòñÿ ïðåäïî÷òåíèå ñîáñòâåííîé ÎÑ  Solaris), òî äëÿ
áîëüøèõ ïðîåêòîâ ñóùåñòâóåò î÷åíü ìîùíàÿ ÑÓÁÄ  PostgreSQL. Îíà
âî ìíîãîì ñõîæà è ñîâìåñòèìà ñ Oracle, à òàê æå ïðàêòè÷åñêè íå èìååò
îãðàíè÷åíèé, èëè èìååò, íî òàêèå îãðîìíûå, ÷òî èõ ìîæíî èãíîðèðîâàòü
(íàïð. ðàçìåð çàïèñè îãðàíè÷åí îáúåìîì â 1,6 Òá).
Ïîñêîëüêó êîìïèëÿöèÿ òàêîãî áîëüøîãî ïðîäóêòà, êàê MySQL çàé-
ìåò ìíîãî âðåìåíè, òî ëó÷øèé äëÿ íàñ ñïîñîá  óñòàíîâèòü åãî èç ïàêåòà,
êîòîðûé íàõîäèòñÿ íà äèñêå. Äëÿ êîððåêòíîé óñòàíîâêè, ïîìåñòèòå òàê
æå ïàêåò ñ MySQL êëèåíòîì, êîòîðûé íåîáõîäèì äëÿ óïðàâëåíèÿ ñåðâå-
ðîì.
Äëÿ òîãî. ÷òî áû çàïóñòèòü MySQL ñåðâåð, à òàê æå äëÿ òîãî, ÷òî
áû îí ñòàðòîâàë àâòîìàòè÷åñêè ïðè çàãðóçêå ñèñòåìû, ïîìåñòèòå ñòðîêó
mysql_enable="YES"
â ôàéë /etc/rc.conf. Çàïóñê ïðîèçâîäèòñÿ êîìàíäîé
/usr/local/etc/rc.d/mysql-server start
MySQL èñïîëüçóåò ñâîè ó÷åòíûå çàïèñè, äëÿ óïðàâëåíèÿ áàçàìè
äàííûõ. Ïðåæäå ÷åì íà÷àòü èñïîëüçîâàíèå MySQL, Âàì íóæíî èçìåíèòü
ïàðîëü ó÷åòíîé çàïèñè ãëàâíîãî àäìèíèñòðàòîðà ÑÓÁÄ, êîòîðàÿ èìååò
(êàê íè ñòðàííî) èìÿ root.
/usr/local/bin/mysqladmin -u root password 'HasY6HV51Bdf'
Ðàáîòà ñ áàçàìè äàííûõ è ÿçûê çàïðîñîâ SQL, âûõîäèò çà ðàìêè
äàííîãî êóðñà. Èõ Âû áóäåòå èçó÷àòü ïîçæå.
192

6.3.3 PHP

Ñòàòè÷åñêèå Web-ñòðàíèöû íå ìîãóò óäîâëåòâîðèòü òðåáîâàíèÿ ïîëü-


çîâàòåëåé ê óäîáñòâó, à àäìèíèñòðàòîðîâ ê ïîääåðæêå èñïîëüçîâàíèÿ
Web-ðåñóðñîâ. À ñ ïîÿâëåíèåì Web 2.0, òðåáîâàíèå ê èíòåðàêòèâíîñòè
ðåñóðñà ñòàëî îñíîâíûì. Äëÿ ñîçäàíèÿ äèíàìè÷åñêèõ ñàéòîâ èñïîëüçó-
þòñÿ â îñíîâíîì ñêðèïòîâûå ÿçûêè ïðîãðàììèðîâàíèÿ, êîòîðûå ïîä-
êëþ÷àþòñÿ ê Web-ñåðâåðó â âèäå ìîäóëåé. Ñóùåñòâóåò è äðóãîé ñïî-
ñîá  CGI ïðîãðàììèðîâàíèå.  ýòîì ñëó÷àå èíòåðàêòèâíîñòü ìîæåò
áûòü âíåñåíà ëþáûì ÿçûêîì ïðîãðàììèðîâàíèÿ, êîòîðûé èìååò ôóíê-
öèè ââîäà-âûâîäà.
Ïåðâûì ñðåäè ñêðèïòîâûõ ÿçûêîâ, ïîïóëÿðíîñòü çàâîåâàë Perl. Îí
è ñåé÷àñ ñ÷èòàåòñÿ îäíèì èç ëó÷øèõ ÿçûêîâ äëÿ Web-ïðîãðàììèðîâàíèÿ,
â îñíîâíîì èç-çà ñâîåé íåîãðàíè÷åííîé ìîùíîñòè. Ìèíóñ êàê âñåãäà
îäèí  ñèíòàêñèñ. Ñàìûì ïîïóëÿðíûì íà ñåãîäíÿøíèé äåíü, ÿâëÿåòñÿ
php. Íå âçèðàÿ íà ìíîãî÷èñëåííûå ìèíóñû, îí ñòàë î÷åíü ïîïóëÿðíûì.
çà ñ÷åò ñâîåé ïðîñòîòû è íèçêîãî ïîðîãà âõîæäåíèÿ (ò.å. ëþáîé ÷åëî-
âåê ñïîñîáåí ïðîãðàììèðîâàòü íà php). Íà php ðàçðàáîòàíî òàê ìíîãî
ïðîäóêòîâ, ÷òî äëÿ ñîçäàíèÿ Web-ðåñóðñà, íóæíî òîëüêî óìåòü ðàçâåð-
òûâàòü ãîòîâûé øàáëîí èëè êîìïîíîâàòü ôóíêöèè. Python è Ruby ýòî
äâà ÿçûêà, êîòîðûå óæå ïðèøëè íà ñìåíó php è perl è óæå ïðèîáðåëè
ìíîãèõ ïîêëîííèêîâ (ïîìèìî ïðî÷åãî, Google èñïîëüçóåò Python äëÿ
ñâîèõ ñåðâèñîâ).
Äëÿ òåõ ñàéòîâ, êîòîðûå ìû áóäåì ðàçâåðòûâàòü, Âàì íåîáõîäèì
php. Èñõîäíûå êîäû Âû íàéäåòå íà äèñêå. Íå çàáûâàéòå, ÷òî php íàì
íóæåí â âèäå so ìîäóëÿ, ïîäêëþ÷åííîãî ê Apache. Äëÿ ýòîãî ïåðåä êîì-
ïèëÿöèåé ñêîíôèãóðèðóéòå åãî ñî ñëåäóþùèìè îïöèÿìè:
./congure - -with-mysql - -with-apxs2=/usr/local/apache2/bin/apxs
Òàê æå óêàçûâàåì, ÷òî íåîáõîäèìî óñòàíîâèòü ïîëíóþ ïîääåðæêó
MySQL.
Äëÿ ïðîâåðêè òîãî, ðàáîòàåò ëè php, ñîçäàéòå ôàéë index.php ñ
îäíîé ñòðîêîé:
<?php phpinfo() ?>
193

6.4 Ðàçâåðòûâàíèå Web-ïðèëîæåíèé

Çà ìíîãèå ãîäû áûëî ñîçäàíî îãðîìíîå êîëè÷åñòâî øàáëîíîâ èëè


îòäåëüíûõ ìîäóëåé äëÿ ñîçäàíèÿ Web-ðåñóðñîâ. Ñåãîäíÿ óæå íå íóæíî
áîëüøîãî óìà, ÷òî áû çàñòàâèòü ðàáîòàòü Web-ìàãàçèí èëè ôîðóì. Ïî-
ìèìî ñðîêîâ ðàçâåðòûâàíèÿ, ñàìîñòîÿòåëüíîå ïðîãðàììèðîâàíèå èìååò
åùå îäèí íåäîñòàòîê: ïðè îòñóòñòâèè îïûòà, ñàéò ìîæåò áûòü íåáåç-
îïàñíûì ñ òî÷êè çðåíèÿ çàùèòû èíôîðìàöèè. Ãðóáûå îøèáêè ìîãóò
ïîçâîëèòü ïîëó÷èòü äîñòóï íå òîëüêî ê áàçå äàííûõ, íî è ê ñàìîìó
ñåðâåðó.
Äëÿ ðàçâåðòûâàíèÿ ðåñóðñà, åãî âñåãî ëèøü íåîáõîäèìî ðàñïàêî-
âàòü â ñîîòâåòñòâóþùóþ ïàïêó Web-ñåðâåðà. Ïîäêëþ÷èâøèñü ê ñåðâåðó
ñ ïîìîùüþ áðàóçåðà, ìîæíî îñóùåñòâèòü íàñòðîéêó è èíèöèàëèçàöèþ
ðåñóðñà. Òàê æå áóäóò ïîêàçàíû íåäîñòàþùèå êîìïîíåíòû èëè íåîáõî-
äèìûå íàñòðîéêè.
Îäíèì èç ïîëåçíûõ ïðèëîæåíèé, ÿâëÿåòñÿ phpMyAdmin, êîòîðàÿ
ïîçâîëÿåò ñ ïîìîùüþ áðàóçåðà óïðàâëÿòü MySQL ñåðâåðîì.  êà÷åñòâå
ôîðóìà, î÷åíü ïîïóëÿðåí phpBB, à â êà÷åñòâå ïðîñòîãî ìàãàçèíà  opencart.
Íà ïîñëåäîê Âàì ïðåäëàãàåòñÿ óñòàíîâèòü è íàñòðîèòü wiki ðåñóðñ è
î÷åíü ìîùíóþ CMS ïîä íàçâàíèåì WordPress.
Ïðè óñòàíîâêå âíèìàòåëüíî ñëåäèòå è ðåàãèðóéòå íà âñå âàæíûå
ïðåäóïðåæäåíèÿ. Ìíîãèå ïðîáëåìû, êîòîðûå ìîãóò âîçíèêíóòü ïðè óñòà-
íîâêå, äàâíî èçâåñòíû è ðåøåíû. Î òîì êàê ýòî ñäåëàíî  çíàåò Google.
Äëÿ êàæäîãî èç ïðîåêòîâ òðåáóåòñÿ áàçà äàííûõ.
Íå çàáûâàéòå åå ñîçäàâàòü, èñïîëüçóÿ phpMyAdmin.

6.5 Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó

- Íàñòðîéòå ñåòü ìåæäó õîñò-ñèñòåìîé è âèðòóàëüíîé ìàøèíîé

-  êà÷åñòâå àëèàñà, äîáàâüòå ñåòåâûå íàñòðîéêè, êîòîðûå ïîäîéäóò


äëÿ ëàáîðàòîðèè 316

- Íàñòðîéòå ssh ñåðâåð è âñå äàëüíåéøèå íàñòðîéêè FreeBSD, ïðîèç-


âîäèòå ñ ïîìîùüþ ïðîãðàììû Putty
194

- Ïðîâåðüòå ðàáîòó WinSCP

- Óñòàíîâèòå è íàñòðîéòå Web ñåðâåð, ÑÓÁÄ è èíòåðïðåòàòîð ÿçûêà


php

- Óñòàíîâèòå è íàñòðîéòå ñëåäóþùèå ïðèëîæåíèÿ: phpMyAdmin (Web-


èíòåðôåéñ ê MySQL), MediaWiki (Wiki-ðåñóðñ), OpenCart (Web-
ìàãàçèí), phpBB (ôîðóì), WordPress (CMS-ñèñòåìà)

- Ðàáîòà ñ÷èòàåòñÿ çàñ÷èòàííîé, åñëè ïðåïîäàâàòåëü ñìîæåò ïîäêëþ-


÷èòüñÿ è èñïîëüçîâàòü âñå ýòè ðåñóðñû êàê ïîëüçîâàòåëü.

You might also like