Operacˇnı syste´my - RNDr. Šárka Vavrečková, Ph.D.

Transkript

Operacˇnı syste´my - RNDr. Šárka Vavrečková, Ph.D.
Šárka Vavrečková
Operačnı́ systémy
cvičenı́
Část I: Windows
Slezská univerzita v Opavě
Filozoficko-přı́rodovědecká fakulta
Ústav informatiky
Opava, poslednı́ aktualizace 27. března 2012
Anotace: Tento dokument je určen pro studenty druhého ročnı́ku IVT na Ústavu informatiky Slezské univerzity v Opavě. Obsahuje látku probı́ranou ve cvičenı́ch předmětu
Operačnı́ systémy v části semestru věnované Windows.
Probı́raná látka navazuje na předmět Praktikum z operačnı́ch systémů. Předpokládá se znalost základnı́ orientace na Přı́kazovém řádku, v registru a běžných nástrojı́ch s grafickým
rozhranı́m.
Operačnı́ systémy cvičenı́
Část I: Windows
RNDr. Šárka Vavrečková, Ph.D.
Dostupné na: http://fpf.slu.cz/˜vav10ui/opsys.html
Ústav informatiky
Filozoficko-přı́rodovědecká fakulta
Slezská univerzita v Opavě
Bezručovo nám. 13, 746 01 Opava
Sázeno v systému LATEX
Tato inovace předmětu Operačnı́ systémy je spolufinancována Evropským sociálnı́m fondem a
Státnı́m rozpočtem ČR, projekt č. CZ.1.07/2.3.00/0 9.0197, „Posı́lenı́ konkurenceschopnosti výzkumu a vývoje informačnı́ch technologiı́ v Moravskoslezském kraji“.
Předmluva
Co najdeme v těchto skriptech
Tato skripta jsou určena pro studenty informatických oborů na Ústavu informatiky Slezské univerzity v Opavě. Ve cvičenı́ch předmětu Operačnı́ systémy se v prvnı́ části semestru probı́rajı́ operačnı́
systémy z rodiny Windows a v druhé části semestru unixové systémy se zaměřenı́m na Linux, tato
skripta se využı́vajı́ právě v prvnı́ části semestru.
Navazujeme na obdobná skripta z předmětu Praktikum z operačnı́ch systémů, tedy předpokládajı́ se již základnı́ znalosti práce ve Windows, v přı́stupových oprávněnı́ch a základ práce
s Přı́kazovým řádkem.
Na to, že jde o látku pouze pro část semestru, se skripta mohou zdát značně rozsáhlá. Důvodem
je zařazenı́ mnoha ukázkových (řešených) přı́kladů a motivačnı́ch (neřešených) úkolů, které majı́
pomoci při pochopenı́ a osvojenı́ si učiva. U některých přı́kazů jsou uvedeny také jejich obvyklé
výstupy, také z důvodu často nedostatečných přı́stupových oprávněnı́ studentů v učebnách.
Některé oblasti jsou také „navı́c“ (jsou označeny ikonami fialové barvy), ty nejsou probı́rány a ani
se neobjevı́ na testech – jejich úkolem je motivovat k dalšı́mu samostatnému studiu nebo pomáhat
v budoucnu při zı́skávánı́ dalšı́ch informacı́ dle potřeby v zaměstnánı́.
Značenı́
Ve skriptech se použı́vajı́ následujı́cı́ barevné ikony:
• Nové pojmy, názvy souborů, obecné postupy, značenı́ v přı́kazech, použı́vané symboly, apod.
jsou značeny modrým symbolem v poznámce na okraj, který vidı́me také zde vpravo.
P
• Konkrétnı́ postupy a nástroje (přı́kazy, programy, soubory, skripty), způsoby řešenı́ různých
situacı́, do kterých se může administrátor dostat, syntaxe přı́kazů atd. jsou značeny také
modrou ikonou.
$
• Zelená je ikona vyznačujı́cı́ sekce, které jsou opakovánı́m učiva z přednášek, jiné části těchto
skript nebo z předchozı́ho semestru (předmětu Praktikum z operačnı́ch systémů).
O
iii
iv
• Zvlášt’je také vyznačen text, který je obvykle výstupem probı́raných přı́kazů (včetně těch, jejichž
spuštěnı́ vyžaduje vyššı́ přı́stupová oprávněnı́) nebo může jı́t o obsah některých souborů. Barva
ikony je oranžová.
• Některé části textu jsou označeny fialovou ikonou, což znamená, že jde o nepovinné úseky, které
nejsou probı́rány (většinou; studenti si je mohou podle zájmu vyžádat nebo sami prostudovat).
Jejich účelem je dobrovolné rozšı́řenı́ znalostı́ studentů o pokročilá témata, na která obvykle
při výuce nezbývá moc času.
• Fialová ikona se objevuje také u některých neřešených úkolů. Tyto úkoly nejsou povinné a studenti se jimi mohou zabývat podle svých zájmů (jsou obvykle náročnějšı́ než jiné úkoly).
• Žlutou ikonou jsou označeny odkazy, na kterých lze zı́skat dalšı́ informace o tématu. Může jı́t
o způsoby zı́skánı́ nápovědy, nejčastěji však u této ikony najdeme odkazy na internet.
• Červená je ikona pro upozorněnı́ a poznámky.
Opticky jsou odlišeny také řešené přı́klady a neřešené úlohy. Přı́klady jsou čı́slovány, čı́sla sloužı́
k jednoduchému odkazovánı́ na tyto přı́klady.
M
R
L
Přı́klad 0.1
Takto vypadá prostředı́ s přı́kladem. Čı́slo přı́kladu je 0.1.
Úkoly
Otázky a úkoly, náměty na vyzkoušenı́, které se doporučuje při procvičovánı́ učiva provádět, jsou
uzavřeny v tomto prostředı́. Pokud je v prostředı́ vı́ce úkolů, jsou čı́slovány.
Jak probı́hajı́ testy
Na zápočtových testech z předmětů týkajı́cı́ch se operačnı́ch systémů lze použı́vat počı́tač, a to
nápovědu a nástroje běžně dostupné ve standardnı́ instalaci daného operačnı́ho systému, ale bez
přı́stupu na Internet. Nejsou dovoleny dokumenty vlastnı́ ani cizı́ výroby, které nejsou součástı́
standardnı́ instalace, nelze použı́vat internetový prohlı́žeč ani jiný způsob přı́stupu na externı́ zdroje
informacı́.
Na stránkách předmětu je k dispozici orientačnı́ seznam otázek a úkolů, které se mohou objevit
na testu, ovšem v testu se mohou objevit mı́rné odlišnosti (napřı́klad v názvech zpracovávaných
souborů či adresářů, jiné přepı́nače přı́kazů, apod.).
Tato skripta plně pokrývajı́ odpovědi na otázky, které se mohou objevit v zápočtovém testu č. 1
(Windows) v předmětu Operačnı́ systémy.
C
Obsah
1
2
Úvod do správy na Přı́kazovém řádku
1.1 Prostředı́ Přı́kazového řádku . . . . . . . .
1.2 Adresáře, soubory a pamět’ová zařı́zenı́
1.2.1 Vytvořenı́ nového souboru . . .
1.2.2 Prohledávánı́ souborů . . . . . .
1.2.3 Virtuálnı́ disky . . . . . . . . . .
1.2.4 Synchronizace a zálohovánı́ . . .
1.2.5 Údržba pamět’ových zařı́zenı́ . .
1.2.6 Dalšı́ přı́kazy . . . . . . . . . . .
1.3 Proměnné . . . . . . . . . . . . . . . . .
1.4 Dávkové soubory . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Pokročilejšı́ úlohy na Přı́kazovém řádku
2.1 Správa sı́tě . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Základnı́ přı́kazy pro správu sı́tě . . . . . . . . .
2.1.2 Přı́kaz NET . . . . . . . . . . . . . . . . . . . . . .
2.1.3 Přı́kaz NET – uživatelé a skupiny . . . . . . . . .
2.1.4 Přı́kaz NET – sdı́lenı́ prostředků a správa domén
2.1.5 Přı́kaz NET – práce se službami a dalšı́ úlohy . .
2.1.6 NetShell . . . . . . . . . . . . . . . . . . . . . . .
2.2 Složené přı́kazy . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Propojenı́ přı́kazů a podmı́něné vyhodnocovánı́
2.2.2 Podmı́něný přı́kaz . . . . . . . . . . . . . . . . .
2.2.3 Cyklus přes množinu . . . . . . . . . . . . . . .
2.2.4 Cyklus přes interval . . . . . . . . . . . . . . . .
2.3 Hromadné zpracovánı́ dat . . . . . . . . . . . . . . . . .
2.4 Odlišnosti v nástrojı́ch Přı́kazového řádku . . . . . . . .
2.5 PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . .
v
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
4
4
5
7
8
10
12
14
16
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
20
20
20
26
26
30
35
38
45
45
48
50
53
53
58
59
vi
2.6
3
4
2.5.1 Jak na PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
2.5.2 Pár typických úloh v PowerShellu . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Skripty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Řı́zenı́ přı́stupu
3.1 Základnı́ pojmy . . . . . . . . . . . . . . . . .
3.2 Objektový model ve Windows řady NT . . .
3.2.1 Objekty . . . . . . . . . . . . . . . . . .
3.2.2 GDI objekty a stanice oken . . . . . .
3.2.3 Model COM . . . . . . . . . . . . . . .
3.2.4 .NET . . . . . . . . . . . . . . . . . . .
3.3 Řı́zenı́ přı́stupu a správa uživatelů . . . . . .
3.3.1 Uživatelské profily a uživatelské účty
3.3.2 Přı́stupová oprávněnı́ . . . . . . . . .
3.3.3 Navyšovánı́ přı́stupových oprávněnı́
3.4 Jmenné a adresářové služby . . . . . . . . . .
3.4.1 Úvod do DNS . . . . . . . . . . . . . .
3.4.2 Active Directory . . . . . . . . . . . .
3.5 Zásady a šablony . . . . . . . . . . . . . . . .
3.5.1 Systémové zásady . . . . . . . . . . .
3.5.2 Zásady skupiny . . . . . . . . . . . . .
3.5.3 Šablony pro správu . . . . . . . . . . .
3.5.4 Šablony zabezpečenı́ . . . . . . . . . .
Služby a procesy
4.1 Správa služeb . . . . . . . . . . . . . . . . .
4.1.1 Jak služby fungujı́ . . . . . . . . . .
4.1.2 Sdı́lené procesy služeb, Service Host
4.1.3 Program sc.exe . . . . . . . . . . .
4.2 WBEM . . . . . . . . . . . . . . . . . . . . .
4.2.1 Princip a implementace WBEM . . .
4.2.2 WMI . . . . . . . . . . . . . . . . . .
4.2.3 Program wmic . . . . . . . . . . . .
4.3 Správa procesů . . . . . . . . . . . . . . . .
4.3.1 Procesy ve Windows NT . . . . . . .
4.3.2 Úlohy a procesy . . . . . . . . . . . .
4.3.3 Vztahy mezi procesy . . . . . . . . .
4.3.4 Priority procesů . . . . . . . . . . . .
4.3.5 Plánovánı́ . . . . . . . . . . . . . . .
4.4 Komunikace mezi procesy . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
68
68
71
71
77
78
82
83
83
86
90
91
91
92
94
94
95
96
97
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
99
99
99
101
103
106
106
107
109
113
113
115
120
122
123
127
vii
4.5
4.6
5
6
4.4.1 Schránka . . . . . . . . . . . . . .
4.4.2 DDE . . . . . . . . . . . . . . . .
4.4.3 OLE . . . . . . . . . . . . . . . .
4.4.4 Zprávy . . . . . . . . . . . . . . .
4.4.5 Volánı́ procedur . . . . . . . . . .
Programové rozhranı́ . . . . . . . . . . .
4.5.1 Dynamicky linkované knihovny
4.5.2 Lokálnı́ verze knihoven . . . . .
4.5.3 Win API . . . . . . . . . . . . . .
4.5.4 Běh aplikacı́ . . . . . . . . . . . .
Kompatibilita verzı́ Windows . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Zařı́zenı́ a paměti
5.1 Správa zařı́zenı́ . . . . . . . . . . . . . . . . . . . .
5.1.1 Ovladače zařı́zenı́ . . . . . . . . . . . . . . .
5.1.2 Instalace ovladačů . . . . . . . . . . . . . .
5.1.3 Modely ovladačů . . . . . . . . . . . . . . .
5.2 Pamět’ová zařı́zenı́ . . . . . . . . . . . . . . . . . .
5.2.1 Diskové kvóty . . . . . . . . . . . . . . . . .
5.2.2 Kontrola stavu disků . . . . . . . . . . . . .
5.2.3 Program diskpart . . . . . . . . . . . . .
5.2.4 Program fsutil . . . . . . . . . . . . . . .
5.2.5 Streamy v NTFS . . . . . . . . . . . . . . . .
5.3 Správa paměti . . . . . . . . . . . . . . . . . . . . .
5.3.1 Adresovánı́ . . . . . . . . . . . . . . . . . .
5.3.2 Stránkovánı́ . . . . . . . . . . . . . . . . . .
5.3.3 Struktura paměti . . . . . . . . . . . . . . .
5.3.4 Správa paměti ve Windows od verze Vista
Nasazenı́ systému
6.1 Konfigurace systému a aplikacı́ . . . . . . . . . . .
6.1.1 Konfiguračnı́ soubory pro staršı́ programy
6.1.2 INI soubory . . . . . . . . . . . . . . . . . .
6.1.3 INF soubory . . . . . . . . . . . . . . . . . .
6.1.4 Registr . . . . . . . . . . . . . . . . . . . . .
6.2 Start systému . . . . . . . . . . . . . . . . . . . . .
6.2.1 Windows s DOS jádrem . . . . . . . . . . .
6.2.2 Windows 2000 a XP . . . . . . . . . . . . .
6.2.3 Windows Vista a novějšı́ . . . . . . . . . . .
6.3 Instalace Windows . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
127
128
129
130
131
132
132
135
136
137
140
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
143
143
143
145
145
146
146
148
150
152
157
159
159
161
162
164
.
.
.
.
.
.
.
.
.
.
165
165
165
166
167
169
172
172
173
176
177
viii
6.4
6.5
6.6
6.3.1 Instalace Windows do verze XP . . . . . . . . . . . . . .
6.3.2 Nástroje k bezobslužné instalaci Visty a novějšı́ch verzı́
6.3.3 Instalace Visty a novějšı́ch verzı́ . . . . . . . . . . . . .
6.3.4 Služba pro nasazenı́ systému Windows (WDS) . . . . .
Aktualizace systému . . . . . . . . . . . . . . . . . . . . . . . .
Chyby při běhu aplikacı́ a systému . . . . . . . . . . . . . . . .
Správa softwaru . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.6.1 Instalace aplikacı́ . . . . . . . . . . . . . . . . . . . . . .
6.6.2 Instalačnı́ soubory aplikacı́ . . . . . . . . . . . . . . . .
6.6.3 IntelliMirror . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
177
179
183
187
187
189
192
192
193
195
Přı́lohy
197
A Laděnı́ programů a jádra Windows
A.1 Princip laděnı́ . . . . . . . . . . . . . . . . . . . . . . . . .
A.2 Dr. Watson . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3 WinDbg . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.1 Instalace a nastavenı́ programu . . . . . . . . . . .
A.3.2 Práce se souborem výpisu při zhroucenı́ Windows
A.3.3 Práce ve WinDbg bez načtenı́ DBG souboru . . . .
A.3.4 Funkce napojenı́ se na proces . . . . . . . . . . . .
198
198
198
199
199
200
201
206
Literatura
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
209
Kapitola
1
Úvod do správy na Přı́kazovém řádku
V této kapitole prohloubı́me naše znalosti o použı́vánı́ Přı́kazového řádku. Navážeme na to, co jsme se naučili
v minulém semestru, a probereme základnı́ přı́kazy, které můžeme využı́t při správě systému, podı́váme se na
dávkové soubory.
1.1
Prostředı́ Přı́kazového řádku
Navazujeme na učivo z předchozı́ho semestru. Kdo měl problémy se základy Přı́kazového řádku,
ten si urychleně zopakuje přı́slušnou kapitolu ze skript předmětu Praktikum z operačnı́ch systémů
(http://fpf.slu.cz/~vav10ui/obsahy/pos/skripta/pos win.pdf).
Vı́me, že Přı́kazový řádek lze spustit přı́kazem cmd.exe nebo přes nabı́dku Start. Přı́kazy, které lze
spustit v Přı́kazovém řádku, můžeme rozdělit do dvou skupin:
E
P
• vnitřnı́ přı́kazy – jsou implementovány přı́mo v souboru cmd.exe, většinou se jedná o základnı́
a jednoduché přı́kazy jako napřı́klad kopı́rovánı́ souborů nebo procházenı́ mezi adresáři (složkami),
• vnějšı́ přı́kazy – jedná se o spustitelné soubory (s přı́ponou COM, EXE, MSC, apod.), tuto skupinu
přı́kazů můžeme libovolně rozšiřovat instalacı́ nových programů.
Je obvykle jedno, jestli přı́kaz napı́šeme malými nebo velkými pı́smeny (až na výjimky). V tomto
dokumentu jsou při prvnı́m použitı́ většinou použita velká pı́smena.
Jen málokdo si pamatuje název a přesnou syntaxi jednotlivých přı́kazů, už proto, že verzi od
verze těchto přı́kazů neustále přibývá. Proto bychom měli zvládnout vyhledánı́ nápovědy k přı́kazu.
To lze několika způsoby:
• program help, lze použı́t také ve tvaru help | more (výpis nápovědy po stránkách, výpis
přerušı́me klávesou q ),
• nápověda k určitému přı́kazu ve formátu přı́kaz /? nebo help přı́kaz,
• systém nápovědy Windows přes tlačı́tko Start, vhodná klı́čová slova se lišı́ v různých verzı́ch
Windows (většinou lze použı́t klı́čové slovo přı́kazy nebo přı́kazový řádek ).
1
O
PROSTŘEDÍ Přı́kazového řádku
1.1
2
Program help (at’už s parametrem nebo bez něj) funguje pouze pro staršı́ přı́kazy. U většiny přı́kazů
(předevšı́m těch pro práci se sı́tı́) proto volı́me spı́še zobrazenı́ nápovědy použitı́m parametru /?.
Nezapomeňte, že před každým parametrem musı́ být mezera, ale uvnitř parametru mezera
nesmı́ být (ani za lomı́tkem), pokud nenı́ uzavřen do uvozovek.
Práci s Přı́kazovým řádkem může zjednodušit program doskey (ve Windows od verze 2000 je automaticky spuštěn). Nabı́zı́ kromě jiného možnost použı́vat historii přı́kazů:
•
↑
, ↓ : zobrazı́me (přı́p. i upravı́me) předchozı́/následujı́cı́ přı́kaz z historie,
•
←
, → : posun o znak doleva/doprava v zadávaném přı́kazu,
•
F7
•
Alt+F7
O
zobrazı́ celou historii přı́kazů, šipkami je možné si vybrat ze seznamu,
smaže historii přı́kazů.
Přı́kazový řádek je možné spouštět i s parametry, tak lze určovat jeho vlastnosti nebo stanovit
přı́kazy, které se provedou hned po spuštěnı́ přı́kazového řádku, viz tabulku 1.1. Pokud je použito
Přı́klad
cmd /k přı́kaz
cmd /k CD ”C:\program files”
cmd /k C:\nastav.bat
cmd /c přı́kaz
cmd /t:xy
P
Význam
hned po spuštěnı́ přı́kazového řádku se provede
zadaný přı́kaz
pracovnı́m adresářem se stane adresář uvedený
v přı́kazu CD
pokud existuje tento dávkový soubor, pak se provede hned po startu Přı́kazového řádku
totéž jako /k, ale po provedenı́ přı́kazu bude Přı́kazový řádek ukončen
nastavı́ barvy pozadı́ (x) a textu (y) obrazovky,
x a y jsou hexadecimálnı́ čı́slice, barvy lze měnit
také přı́kazem color, proto možnosti barevných
kombinacı́ lze zı́skat přı́kazem color /?
Tabulka 1.1: Parametry přı́kazového řádku
vı́ce přepı́načů, pak /k a /c musı́ být poslednı́.
Přepı́nače můžeme použı́vat při spuštěnı́ Přı́kazového řádku z menu Start ï Spustit nebo využı́t
možnosti Windows při definovánı́ zástupců (do přı́kazové řádky zástupce napı́šeme celý přı́kaz
včetně parametrů).
Úkoly
1. Vzpomeňte si na aplikaci Process Explorer od firmy Sysinternals, se kterou jsme se seznámili
v předchozı́m semestru. Pokud ho nemáte k dispozici, stáhněte z internetu.
Spust’te Process Explorer, potom spust’te Přı́kazový řádek a obě okna umı́stěte tak, aby byla
obě zároveň viditelná. V Process Exploreru najděte ve stromové struktuře záznam Přı́kazového
řádku (cmd.exe). V Přı́kazovém řádku spust’te postupně následujı́cı́ přı́kazy a sledujte v okně
Process Exploreru, co se stane s řádkem cmd.exe:
C
1.2
ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ
3
• netsh
program netsh budeme probı́rat později, jde o prostředı́ s rozsáhlými možnostmi konfigurace předevšı́m sı́t’ových nastavenı́; práci v prostředı́ ukončı́me přı́kazem exit,
• copy con d:\pokusny.txt
opět budeme probı́rat později, přı́kaz copy sloužı́ ke kopı́rovánı́ souborů, ale varianta
s prvnı́m parametrem con a druhým parametrem názvem souboru pracuje takto:
– vytvořı́ soubor s daným názvem (zde na disku D:),
– text, který od této chvı́le budeme psát na klávesnici, se objevı́ na obrazovce (tj. zařı́zenı́
con – console) a pak se z obrazovky bude kopı́rovat do vytvořeného souboru, každý
stisk klávesy Enter bude interpretován jako konec řádku,
– až nás přestane bavit psanı́, stiskneme klávesu F6
zkratku Ctrl+Z ) a interaktivnı́ režim bude ukončen.
a
Enter
(nebo klávesovou
Obě možnosti srovnejte. Poznáte podle zobrazovaných informacı́ v Process Exploreru, který
z těchto přı́kazů je vnitřnı́ a který vnějšı́?
2. Vytvořte na pracovnı́ ploše zástupce s přı́kazem cmd /t:1e /k Z: (po spuštěnı́ poklepánı́m
se stane pracovnı́m diskem Z:, barvy jsou nastaveny na modré pozadı́, žluté pı́smo).
Barvu textu a pozadı́ upravte podle svého vkusu (vkusu!), pokud nemáte přı́stup na disk Z:,
použijte jiné umı́stěnı́.
3. Vzpomeňte si (nebo najděte v nápovědě), jakým způsobem lze přı́kaz dir spustit rekurzı́vně
– tedy zobrazit veškerý obsah uvnitř zadaného či pracovnı́ho adresáře včetně obsahu podadresářů, jejich podadresářů, atd., s potlačenı́m nadbytečných informacı́ (třeba záhlavı́ a zápatı́).
Vyzkoušejte na kořenový adresář disku C:, a zároveň vyzkoušejte klávesovou zkratku pro zastavenı́ činnosti pracujı́cı́ho programu – Ctrl+C – tuto zkratku si pamatujte, je velmi užitečná).
4. Vypište všechny soubory s přı́ponou .MSC nacházejı́cı́ se na disku C: (tj. rekurzı́vně). Některý
z těchto souborů spust’te (Pamatujete si, o jaké soubory se jedná?).
5. Proved’te totéž co v předchozı́m úkolu, ale pro soubory s přı́ponou .CPL, výstup přesměrujte
do souboru panely.txt (umı́stěte do adresáře, ve kterém máte právo zápisu).
6. Vypište obsah adresáře neexistujici (přı́padně jiného neexistujı́cı́ho adresáře), výstup přesměrujte do souboru prazdny.txt, chybový výstup směrujte tamtéž (přičemž název souboru
uvedete v celém přı́kazu pouze jednou).
7. Proved’te totéž co v předchozı́m přı́kazu (využijte klávesu pro přesun v historii přı́kazů), ale
chybový výstup přesměrujte tak, aby se nikam nezobrazil ani neuložil.
8. Výstup přı́kazu time /t směrujte tak, aby se uložil na konec souboru cas.txt (tj. přidávejte
na jeho konec k původnı́mu obsahu, který zůstane zachován). Přı́kaz včetně směrovánı́ spust’te
několikrát za sebou (využijte historii přı́kazů), pak zkontrolujte soubor s výslednými časovými
údaji.
O
1.2
ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ
1.2
4
Adresáře, soubory a pamět’ová zařı́zenı́
1.2.1
Vytvořenı́ nového souboru
Nový soubor můžeme vytvořit několika způsoby. Předně se může jednat o výstup některého programu, což můžeme zajistit i ručně – přesměrovánı́m výstupu některého přı́kazu do souboru.
Existuje však také způsob, jak vytvořit nový soubor s „originálnı́m“ obsahem.
Přı́klad 1.1
V pracovnı́m adresáři vytvořı́me nový soubor s názvem soubor.txt:
COPY CON soubor.txt
Enter
... (nějaký obsah souboru)
...
Ctrl+Z nebo F6 , pak Enter
$
Klávesová kombinace Ctrl+Z nebo F6 vytvořı́ textový znak znamenajı́cı́ konec souboru.
Podobný postup můžeme využı́t, pokud chceme k existujı́cı́mu souboru připojit dašı́ řádky:
COPY soubor.txt+CON soubor.txt
Enter
... (řádky, které chceme připojit)
...
Ctrl+Z nebo F6 , pak Enter
Výsledek můžeme samozřejmě uložit i do jiného souboru než původnı́ho. Nové řádky se přidajı́ na
konec souboru. Kdybychom obrátili pořadı́ operandů kolem symbolu „+“, přidaly by se nové řádky
na začátek souboru.
Úkoly
1. V adresáři, kde máte právo zápisu, vytvořte pomocı́ COPY CON textový soubor. Pak ho přejmenujte pomocı́ REN, setřid’te a výsledek třı́děnı́ uložte do jiného souboru, ten vypište pomocı́
TYPE.
2. Vytvořte v pracovnı́m adresáři soubor pokus1.txt, napište do něj jakýkoliv text (několik
řádků) a uložte. Potom ho zkopı́rujte do téhož adresáře na soubor s názvem pokus2.txt,
otevřete, na některém řádku pozměňte jeden znak (tak aby se délka souboru nezměnila)
a uložte.
Dále porovnejte oba soubory postupně pomocı́ přı́kazů FC a COMP a porovnejte jejich výstupy.
U přı́kazu COMP vyzkoušejte také uvedené přepı́nače.
3. Na začátek souboru pokus1.txt, který jste vytvořili v předchozı́m úkolu, přidejte řádek jakéhokoliv textu, a podobně také na jeho konec – použijte metodu přı́kazu copy con uvedenou
výše v druhé části přı́kladu 1.1.
C
1.2
ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ
1.2.2
5
Prohledávánı́ souborů
Zopakujeme si dva z nejdůležitějšı́ch přı́kazů pro zpracovánı́ textu – přı́kazy pro vyhledávánı́. Vı́me,
že ve Windows existujı́ dva – jednoduššı́ FIND a pokročilejšı́ FINDSTR. Použı́váme je nejen tehdy, když
potřebujeme v existujı́cı́m textovém souboru najı́t řetězec odpovı́dajı́cı́ zadanému klı́čovému slovu
nebo regulárnı́mu výrazu, ale předevšı́m (a nejčastěji) tehdy, když chceme zpracovat a profiltrovat
výstup některého jiného přı́kazu. Typické použitı́ je tedy ve formě filtru zřetězeně v „rouře“.
Syntaxi přı́kazu findstr známe, přı́padně si ji můžeme najı́t v nápovědě findstr /?
Pro základnı́ orientaci: prvky, které lze použı́t v regulárnı́m výrazu, jsou v tabulce 1.2.
Prvek
Význam
.
*
ˆ
$
[znaky]
[ˆznaky]
[x-y]
\<text
text\>
Libovolný znak
Nula nebo vı́ce výskytů předcházejı́cı́ho znaku nebo třı́dy
Začátek řádku (znak „střı́ška“)
Konec řádku
Jakýkoli (jeden) znak z množiny v závorkách
Jakýkoli znak mimo prvky množiny
Jakýkoli znak v rozsahu daném dvěma znaky (jeden znak)
Začátek slova
Konec slova
Tabulka 1.2: Regulárnı́ výrazy v přı́kazu findstr
Přı́klad 1.2
V předchozı́m semestru jsme se již s vyhledávánı́m trochu seznámili, ted’ si pro připomenutı́ dáme
pár přı́kladů.
V adresáři windows\system32 (což je právě náš pracovnı́ adresář) a přı́padně jeho podadresářı́ch
se nacházı́ hodně programů, které lze spustit na přı́kazovém řádku. Chceme najı́t přı́kazy souvisejı́cı́
s diskem, zřejmě budou mı́t v názvu podřetězec „disk“, přı́pona může být libovolná:
dir /S /B | findstr ”disk”
V pracovnı́m adresáři si vytvořı́me testovacı́ soubor pokus.txt:
P:\> copy con pokus.txt
slovo prvnı́ řádek znakový soubor
druhý znak slovo
třetı́ řádek znak, čárka
čtvrtý řádek přı́znak slovo
Stiskneme postupně klávesy F6 a Enter . Dále budeme vyhledávat v tomto souboru:
findstr ”prvnı́ řádek” pokus.txt
očekávali bychom, že bude nalezen a vypsán pouze prvnı́ řádek souboru, ale ve skutečnosti
se vypı́šou všechny řádky – mezeru ve výrazu totiž tento přı́kaz chápe jako operátor OR, tedy
jsou vypsány řádky obsahujı́cı́ jeden nebo druhý řetězec (nepomůže ani escape sekvence –
opačné lomı́tko před mezerou)
O
1.2
ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ
6
findstr /c:”prvnı́ řádek” pokus.txt
vypı́še se opravdu jen prvnı́ řádek, řetězec mezi uvozovkami je brán jako celek (pozor, je
omezen význam metaznaků)
findstr ”znak” pokus.txt
vyhledá všechny výskyty řetězce znak v zadaném souboru, tedy vypı́še všechny řádky (nacházı́ se na všech)
findstr ”znak\>” pokus.txt
najde slova končı́cı́ řetězcem znak, tj. taková, za nimiž je některý oddělovač (mezera, čárka,
tečka, střednı́k apod.), předpona je „dovolena“ – vypı́še druhý, třetı́ a čtvrtý řádek
findstr ”\<znak\>” pokus.txt
vyhledá všechny výskyty slova znak obklopené některými oddělovači, v našem přı́padě vypı́še
pouze druhý a třetı́ řádek (na ostatnı́ch řádcı́ch má toto slovo ještě předponu nebo přı́ponu)
findstr ”znak[o,]” pokus.txt
vypı́šou se řádky obsahujı́cı́ některý z řetězců „znako“ nebo „znak,“, tedy prvnı́ a třetı́
findstr ”znak[ˆo,]” pokus.txt
výsledek je opačný vzhledem k předchozı́mu, vypı́šou se řádky obsahujı́cı́ řetězec znak, za
kterým nenásleduje pı́smeno o ani čárka (tj. druhý a čtvrtý řádek)
findstr ”ˆdru” pokus.txt
hledáme řádek začı́najı́cı́ řetězcem dru, to je druhý řádek (všimněte si duality významu metaznaku „ˆ“)
findstr ”soubor$” pokus.txt
vypı́še se řádek, který končı́ řetězcem soubor
findstr /c:”\<znak\>” pokus.txt
chyba, takto je výraz brán jako literál a hledá se řetězec \<znak\>, nikoliv řetězec znak obklopený oddělovači (tj. nevypı́še se nic, takový řetězec v souboru nemáme)
findstr ”\<znak\> slovo” pokus.txt
vypı́šou se všechny řádky, na každém je bud’ samostatný řetězec znak nebo řetězec slovo
findstr /c:”znak slovo” pokus.txt
zı́skáme druhý a třetı́ řádek, tam jsou tyto řetězce přı́mo za sebou (i když prvnı́ nenı́ samostatné
slovo obklopené oddělovači)
findstr /c:”znak slovo” pokus.txt | findstr ”\<znak\>”
takto jsme určili řetězec, ve kterém je znak samostatné slovo a je následován řetězcem slovo
– krkolomné, ale funguje to
findstr ”\<znak\>” *.txt
projde všechny soubory s přı́ponou TXT nacházejı́cı́ se v pracovnı́m adresáři a hledá tam zadaný
řetězec, vždy napı́še název souboru a pak nalezený řádek, v našem přı́padě (předpokládejme,
že se řetězec nacházı́ ještě v dalšı́m souboru)
pokus.txt:druhý znak slovo
pokus.txt:třetı́ řádek znak, čárka
pokus2.txt:což je typický znak těchto typů programů
M
1.2
ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ
7
findstr /N ”\<znak\>” *.txt
přidá se čı́slo řádku, výstup:
pokus.txt:2:druhý znak slovo
pokus.txt:3:třetı́ řádek znak, čárka
pokus2.txt:51:což je typický znak těchto typů programů
M
findstr /M ”\<znak\>” *.txt
nevypı́šou se řádky s nalezeným řetězcem, ale pouze soubory, ve kterých se hledaný řetězec
nacházı́, výstup může vypadat napřı́klad takto:
pokus.txt
pokus2.txt
M
findstr /S /M /I ”\<znak\>” *.txt
parametr /S způsobı́ rekurzivnı́ chovánı́ programu – prohledávajı́ se všechny soubory vyhovujı́cı́ masce *.txt, a to rekurzı́vně v celém podstromě podadresářů pracovnı́ho adresáře,
vypisujı́ se opět pouze názvy souborů (protože jsme použili parametr /M), navı́c se porovnává
bez rozlišovánı́ malých a velkých pı́smen (parametr /I)
findstr /V ”slovo” pokus.txt
vypı́sou se řádky, na kterých se nenacházı́ řetězec slovo, tedy pouze třetı́ řádek
Úkoly
1. Vyzkoušejte si přı́kazy z přı́kladu 1.2.
C
2. Zjistěte, zda v souboru C:\Windows\WindowsUpdate.log je řádek začı́najı́cı́ řetězcem obsahujı́cı́m záznam ve tvaru „rok–měsı́c–den“ pro současné datum (napřı́klad 2010–01–25).
3. Pro přemýšlivé: jak by vypadal přı́kaz, který by dokázal totéž, co v předchozı́m úkolu, provést
souhrnně přes všechny LOG soubory rekurzı́vně v pracovnı́m adresáři?
1.2.3
Virtuálnı́ disky
Pokud je cesta do adresáře přı́liš dlouhá, můžeme si ji jednoduše zkrátit – podobně jako oddı́lu na
disku lze pı́smeno přidělit také adresáři.
Přı́kaz SUBST vytvořı́ virtuálnı́ disk s označenı́m X: směrovaný na zadaný adresář, označenı́
disku volı́me tak, aby nekolidovalo s existujı́cı́mi disky v systému.
Použı́váme napřı́klad tehdy, když chceme tentýž adresář (s dlouhou specifikacı́) použı́vat často,
ale nechce se nám jeho celý název vypisovat. Použitelné také ve Windows, disk s tı́mto označenı́m
se objevı́ ve všech běžných správcı́ch souborů.
Přı́klad 1.3
Následujı́cı́ dva přı́kazy můžeme použı́t přı́mo za sebou (žádný disk s přiřazeným pı́smenem G: do
této chvı́le ještě neexistoval).
$
1.2
ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ
subst G: Z:\adr1\adr2\adr3
8
vytvořı́ virtuálnı́ disk s pı́smenem G:, který ukazuje na zadaný
adresář
copy soubor.xxx G:
do adresáře kopı́rujeme soubor, můžeme použı́vat jakkoliv běžným způ-
sobem
subst G: /d
zrušı́ přiřazenı́ virtuálnı́ho disku, uvolnı́ pı́smeno, které jsme pro něj použili (zde X)
Úkoly
1. Zjistěte, které pı́smeno pro jednotky je ještě volné (zvolte některé spı́še několik pı́smen před
koncem abecedy). To lze napřı́klad v některém souborovém manažerovi či Průzkumnı́kovi,
v úvahu obvykle připadajı́ pı́smena W, T, Y nebo podobná.
C
Toto pı́smeno přiřad’te virtuálnı́mu disku, který vytvořı́te jako přı́stupovou jednotku pro adresář C:\Windows\system32.
2. Přiřazenı́ pı́smene virtuálnı́mu disku vytvořené v předchozı́m úkolu využijte při kopı́rovánı́
souboru charmap.exe, který je v uvedeném adresáři (a tedy i na virtuálnı́m disku), na disk D:.
3. Zrušte přiřazenı́ pı́smene virtuálnı́ho disku, které jste vytvořili v předchozı́ch úkolech, a soubor, který jste nakopı́rovali na disk D:, smažte.
1.2.4
Synchronizace a zálohovánı́
Poměrně častým úkonem při práci s daty je synchronizace a zálohovánı́ dat. Jde o to, abychom
s minimálnı́m úsilı́m zajistili zjištěnı́ rozdı́lů mezi původnı́m a novým umı́stěnı́m a abychom měli
na vı́ce mı́stech aktuálnı́ synchronizovaná data.
XCOPY
kopı́ruje nejen soubory, ale zvládne i celé adresářové struktury. Má také dalšı́ funkce, dı́ky
kterým ho lze použı́t pro pokročilejšı́ zálohovánı́
rekurzı́vně (parametr /s) zkopı́ruje celý adresář z prvnı́ho parametru na disk G: (to může být třeba USB flash disk), pokud je některý podadresář ve
struktuře prázdný, nezkopı́ruje ho
xcopy d:\dopisy g:\ /s /e
totéž, ale navı́c kopı́ruje i prázdné adresáře (empty)
xcopy d:\dopisy g:\ /s /m
kopı́ruje pouze soubory s nastaveným atributem archivovat,
tento atribut po kopı́rovánı́ na zdroji vždy odstranı́ (je pak nastaven při následovné změně
souboru) – při opakovaném použı́vánı́ přı́kazu zálohujeme pouze ty soubory, které se od
poslednı́ho zálohovánı́ změnily
xcopy d:\dopisy g:\ /s /d
porovnává datum poslednı́ změny každého souboru ve
zdrojovém a cı́lovém adresáři (také rekurzı́vně v podadresářı́ch) a kopı́ruje jen ty soubory,
které byly změněny od poslednı́ho zálohovánı́
xcopy d:\dopisy g:\ /s
$
1.2
ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ
9
budou kopı́rovány pouze soubory, které byly
změněny po zadaném datu (25. 12. 2010, formát je měsı́c–den–rok), a to rekurzı́vně i v podadresářı́ch
xcopy d:\dopisy g:\ /s /L > seznam.txt
parametr /L znamená, že ve skutečnosti se
nebude kopı́rovat, jen bude vypsán seznam souborů, které by byly kopı́rovány (zde je
přesměrován do souboru)
xcopy d:\dopisy g:\ /s /h /k kopı́ruje také skryté a systémové soubory (parametr /h)
a navı́c zachová atributy (napřı́klad jen pro čtenı́, systémový, apod., parametr /k)
xcopy d:\dopisy g:\ /s /u
provede pouze aktualizaci (update), kopı́ruje ze zdroje jen
ty soubory, které v cı́li již existujı́
xcopy d:\dopisy \\pocitac\evidence /s /z
parametr určený pro kopı́rovánı́ v sı́ti,
pokud dojde k přerušenı́ kopı́rovánı́, dokáže po obnovenı́ spojenı́ navázat a pokračovat
v kopı́rovánı́ (také ukazuje procento průběhu kopı́rovánı́)
xcopy d:\dopisy g:\ /s /d:12-25-10
ROBOCOPY zdroj cı́l určenı́_souborů parametry
„robustnı́“ kopı́rovánı́ – tento nástroj najdeme až od verze Vista (ale přı́kaz xcopy odstraněn
nebyl, existujı́ simultánně), je navržen prakticky přı́mo za účelem zálohovánı́ a rozsáhlých
přesunů datových struktur
jednoduše zálohuje všechny soubory z prvnı́ho umı́stěnı́ do druhého umı́stěnı́ (bez podadresářů), určenı́ souborů je výchozı́ (*.*, tedy
všechny)
robocopy D:\mojedata \\server\D$\zaloha
podobně, zálohujeme na server, jehož adresu jsme zadali ve formě UNC, všimněte si, jakým způsobem jsme zadali adresář na
disku D: na serveru (vzpomı́náte na skrývánı́ názvů sdı́lených položek?)
robocopy D:\mojedata G:\zaloha *.xlsx
pouze excelovské soubory (se zadanou přı́ponou)
robocopy D:\mojedata G:\zaloha /e /np
prvnı́ parametr určuje, že se má kopı́rovat
i obsah podadresářů, včetně prázdných, druhý parametr způsobı́, že se během kopı́rovánı́
nezobrazuje průběh, což šetřı́ čas
robocopy D:\mojedata G:\zaloha /s /np /mir
prvnı́ parametr znamená, že budou
kopı́rovány i podadresáře, ale narozdı́l od /e se přı́padný prázdný adresář ze zdroje
v cı́li neobjevı́, druhý parametr již známe, třetı́ určuje, že se má provést zrcadlenı́ (mirroring) – celá struktura ze zdroje se zohlednı́ v cı́li (berou se v úvahu změny, souborů beze
změn si přı́kaz nebude všı́mat), a pokud byl od poslednı́ zálohy některý prvek ve zdroji
smazán, bude smazán i v cı́li (pozor, to může být za určitých okolnostı́ nebezpečené)
robocopy D:\mojedata G:\zaloha /s /np /mir /log:zaloha.log
totéž jako předchozı́, navı́c je proces zálohovánı́ logován do zadaného souboru (taktéž – výstup přı́kazu
nebude vypisován na obrazovku, ale pouze do log souboru)
robocopy D:\mojedata G:\test /s /create
jakási polovičnı́ simulace kopı́rovánı́ – v cı́lovém adresáři pouze vytvořı́ adresářovou strukturu stejnou jako je ve zdroji, soubory
v cı́li sice vytvořı́, ale s nulovou délkou (tj. vpodstatě zkopı́ruje pouze obsah adresářů,
obsah souborů nikoliv)
robocopy D:\mojedata G:\zaloha
$
1.2
ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ
10
Veškeré možnosti robocopy zde nebudeme probı́rat – je možné napřı́klad pracovat s atributy
souborů a adresářů (včetně atributu archivace), vylučovat určité soubory a adresáře z kopı́rovánı́, filtrovat podle data změny souborů a pracovat s časovými razı́tky, odložit kopı́rovánı́ na
restart systému (aby bylo možné kopı́rovat i ty soubory, které jsou obvykle uzamknuté systémem), přesouvat mı́sto kopı́rovánı́, optimalizovat kopı́rovánı́ po sı́ti pro nižšı́ propustnost,
atd.
Dalšı́ informace:
•
•
•
•
http://social.technet.microsoft.com/wiki/contents/articles/robocopy-and-a-few-examples.aspx
http://www.sevenforums.com/tutorials/187346-robocopy-create-backup-script.html
http://ss64.com/nt/robocopy.html
http://www.xxcopy.com/xxcopy30.htm
Úkoly
1. Zjistěte v nápovědě přı́kazu robocopy, jak lze zálohovat celý oddı́l disku C: na server tak, aby
se zálohovánı́ netýkalo souboru pagefile.sys ani adresáře ”System Volume Information”,
aby se zálohovala–zrcadlila celá adresářová struktura a logovalo se do souboru vysledek.log.
Poznámka: v reálu by vyloučených souborů a adresářů bylo samozřejmě vı́ce.
C
2. Sestavte přı́kaz, kterým zálohujete složku Dokumenty ze svého profilu (celou včetně obsahu –
rekurzı́vně) na disk F: (to může být třeba USB flash disk), a to tak, že jsou zálohovány pouze
soubory s nastaveným atributem pro archivaci (během zálohovánı́ tento atribut odstraňujte).
Použijte jeden z výše uvedených přı́kazů.
3. Sestavte přı́kaz, kterým zálohujete celou složku se všemi profily (rekurzı́vně) se stejným chovánı́m k atributu pro archivaci jako v předchozı́m úkolu, ale cı́lem bude adresář nazvaný
podle názvu tohoto počı́tače na serveru \\fileserver, a to tak, aby přı́kaz dokázal v přı́padě
poruchy sı́tě po obnovenı́ spojenı́ navázat na předchozı́ zálohovánı́.
R
4. Pro přı́kaz robocopy existuje grafické uživatelské rozhranı́ (GUI) přı́mo od Microsoftu. Pokuste
se o tomto GUI zjistit vı́ce.
1.2.5
Údržba pamět’ových zařı́zenı́
Při údržbě pamět’ových zařı́zenı́ jako celku můžeme využı́t tyto přı́kazy:
(pouze Windows s DOS jádrem)
definuje pracovnı́ oblasti disku (partitions, logické disky), po jeho použitı́ je nutné logické
disky zformátovat
FDISK
Poznámka: Ve Windows s NT jádrem použı́váme grafickou konzolu Správa disků (diskmgmt.msc)
lokálně nebo ke správě vzdáleného počı́tače, kterou však nelze ovládat programově (ve skriptu).
$
E
1.2
ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ
11
FORMAT X:
zformátuje zadaný disk X: (připravı́ k použitı́, vytvořı́ souborový systém, tedy umožnı́ na
disk ukládat soubory), obsah disku samozřejmě vymaže. Pracuje se souborovým systémem
FAT (po zadánı́ určitých parametrů také FAT32). Výchozı́ nastavenı́ (chovánı́) tohoto přı́kazu
je odlišné v systémech s DOS a NT jádrem.
$
(pouze Windows s DOS jádrem, ale může nedokumentovaně fungovat i na
některých NT verzı́ch) vytvořı́ systémový disk (nahraje nezbytnou část operačnı́ho systému)
format X: /U
(Windows s DOS jádrem; v NT je tato volba výchozı́) hluboké formátovánı́;
u běžného formátovánı́ je pouze přepsána FAT (tabulka obsazenı́ disku), tedy soubory
je možné ještě obnovit, u hlubokého formátovánı́ je celý disk přepsán symboly s ASCII
kódem #0
format X: /Q
(Windows s NT jádrem, v DOS je výchozı́) rychlé formátovánı́, nemažou se
data
format X: /FS:souborový_systém
(Windows s NT jádrem) formátuje na zadaný souborový systém, můžeme použı́t FAT, FAT32 nebo NTFS
format X: /S
MOUNTVOL
pracuje s přı́pojnými body diskových oddı́lů (je to obdobná funkce jako přı́pojné body v unixových systémech). Účelem je připojovat diskové oddı́ly (ale také výměnná zařı́zenı́) bez nutnosti
přiřazovánı́ pı́smen.
$
Můžeme vytvořit nebo zrušit přı́pojný bod, a nebo jen zobrazit diskové oddı́ly, které lze
připojit.
vypı́še krátkou nápovědu a seznam diskových oddı́lů, které jsou k dispozici (at’
už připojené nebo nepřipojené), u připojených vidı́me také přidělené pı́smeno jednotky
nebo adresář bodu připojenı́
mountvol c:\disky\prvni /L
zjistı́me, co konkrétně je v zadaném adresáři připojeno
(pokud se jedná o bod připojenı́)
mountvol c: /L
zjistı́me, kterému oddı́lu je zadané pı́smeno jednotky přiřazeno (je to
vpodstatě varianta předchozı́ho přı́kazu)
mountvol c:\disky\prvni \\označenı́svazku
připojı́me svazek (jeho označenı́ zjistı́me
předchozı́mi vypisovacı́mi přı́kazy) do adresáře prvni (tento adresář musı́ už existovat),
v tomto adresáři pak najdeme v adresářové struktuře obsah připojeného svazku
mountvol c:\disky\prvni /D
zrušı́me přı́pojný bod (odpojı́me)
mountvol
Diskové oddı́ly, které lze připojit, jsou označeny takto:
\\?\Volume{označenı́ GUID}\
kde označenı́ GUID (Global Unique Identifier) je jednoznačné určenı́ zařı́zenı́ nebo jeho části (zde
oddı́lu na disku), napřı́klad
\\?\Volume{865f1ff0-a863-11d9-9f02-806d6172696f}\
Pozor, mountvol pracuje na nižšı́ úrovni (na úrovni jádra) než přı́kaz subst pro virtuálnı́ disky.
Důsledkem je, že potřebujeme vyššı́ přı́stupová oprávněnı́, označenı́ disků nenı́ zrovna intuitivnı́
a také mountvol nevidı́ virtuálnı́ disky vytvořené přı́kazem subst.
E
1.2
ADRESÁŘE, SOUBORY A PAMĚŤOVÁ ZAŘÍZENÍ
12
Úkoly
1. Zjistěte, které oddı́ly disku jsou připojeny a pod jakými pı́smeny. Existujı́ nějaké nepřipojené
oddı́ly?
C
2. Vyberte si jakýkoliv oddı́l z výpisu předchozı́ho přı́kladu a zjistěte, kde v registru se jeho GUID
nacházı́.
1.2.6
Dalšı́ přı́kazy
START
Abychom spustili nějaký program v Přı́kazovém řádku, stačı́ napsat jeho jméno (přı́p. s cestou
k tomuto programu) a potvrdit klávesou Enter . Tento přı́kaz však při spouštěnı́ programu
rozšiřuje naše možnosti předevšı́m tak, že umožňuje spuštěnı́ programu řı́dit pomocı́ parametrů. Napřı́klad program notepad.exe je Windows aplikace Poznámkový blok. V Přı́kazovém
řádku tuto aplikaci můžeme spustit několika způsoby:
spustı́ Poznámkový blok, jakobychom použili grafické prostředı́, Přı́kazový
řádek nečeká na ukončenı́ aplikace a hned zobrazı́ prompt
START notepad.exe
provede totéž
START /wait notepad.exe
spustı́ aplikaci a počká na jejı́ ukončenı́, teprve pak zobrazı́
prompt a očekává přı́kazy
START /min notepad.exe
aplikace se spustı́ minimalizovaná (přepı́nač může mı́t v někt.
Windows tvar /m)
START /max notepad.exe
aplikace se spustı́ maximalizovaná
START /low notepad.exe
aplikace se spustı́ s nı́zkou prioritou (vysoká priorita se určuje
parametrem /high)
START notepad.exe soub.txt
spustı́ aplikaci a předá jı́ zbytek řádku jako parametry
START soub.txt
spustı́ aplikaci ve Windows asociovanou s přı́ponou TXT (obvykle Poznámkový blok) a jako parametr jı́ předá soubor soub.txt
START /i cmd
spustı́ nové okno Přı́kazového řádku (cmd.exe) jako by bylo spuštěno přı́mo
z Windows (nové okno apod.)
START explorer.exe /e,d:\clanky
spustı́ Průzkumnı́ka Windows se zadanými parametry – parametr /e patřı́ již programu explorer.exe, ne start, způsobı́, že hned po
startu je zadaný adresář (nebo disk, zde d:\clanky) aktivnı́
$
notepad.exe
ASSOC, FTYPE
přı́kazy pro definovánı́ asociacı́ přı́pon souborů a programů. Prvnı́ přı́kaz sloužı́ k přiřazenı́
typu souboru dané přı́poně, druhý pak k přiřazenı́ aplikace danému typu souboru. Syntaxe:
ASSOC přı́pona=typ
FTYPE typ=aplikace
Napřı́klad:
assoc
vypı́še seznam asociacı́ přı́pon a typů souborů
1.3
PROMĚNNÉ
13
ftype
vypı́še seznam přiřazenı́ typů souborů a aplikacı́
assoc .htm=textfile
souborům s přı́ponou HTM je přiřazen typ „textfile“, to znamená,
že soubor s touto přı́ponou se po poklepánı́ otevře v programu určeném pro tento typ
(obvykle Poznámkový blok)
assoc .html=htmlsoubor
pro soubory s přı́ponou HTML jsme vytvořili nový souborový
typ
assoc .abc=
odstranili jsme asociaci definovanou pro přı́ponu ABC
ftype htmlsoubor=pspad.exe %1
souborovému typu vytvořenému v předchozı́m přı́kazu jsme přiřadili aplikaci PSPad, má se vždy spustit s jednı́m parametrem, kterým je
název otevı́raného souboru (tj. když v grafickém rozhranı́ poklepeme na soubor s danou
přı́ponou, otevře se v této aplikaci)
ftype htmlsoubor=
odstranili jsme nadefinovaný souborový typ
EXPAND
rozbalenı́ souborů s přı́ponou CAB (jde o archivy podobně jako napřı́klad ZIP)
expand zdroj.cab d:\cı́l
rozbalı́ zadaný soubor do adresáře, který je druhým parame-
trem přı́kazu
rozbalı́ soubory s názvem zadaným maskou do adresáře, který je druhým parametrem
expand zal*.cab f:\rozbalene
Zajı́mavý seznam přı́kazů s vysvětlenı́m je napřı́klad na http://commandwindows.com/.
Úkoly
1. Spust’te některou menšı́ aplikaci s grafickým rozhranı́m (notepad.exe, calc.exe, apod.) s
nižšı́ a potom naopak vyššı́ prioritou, a to s minimalizovaným oknem. Výsledek zkontrolujte
ve Správci úloh nebo Process Exploreru.
C
2. V nápovědě přı́kazu start zjistěte, jaké dalšı́ přepı́nače lze použı́t pro nastavenı́ priority
spouštěné aplikace.
3. Vyzkoušejte všechny uvedené přı́klady spouštěnı́ aplikacı́ a souborů s asociovanou přı́ponou.
4. Asociujte přı́ponu .XXX s typem „txtfile“. Pak vytvořte v pracovnı́m adresáři nový soubor
s touto přı́ponou (vzpomeňte si na copy con) a z Přı́kazového řádku tento soubor otevřete
(pak zase uzavřete).
5. Asociaci vytvořenou v předchozı́m úkolu zkontrolujte v registru (najděte klı́č s názvem .xxx).
6. Vytvořte nový souborový typ textovysoubor a přiřad’te mu kteroukoliv aplikaci, která umı́ zobrazit textové soubory (nezapomeňte na parametr za názvem aplikace). Pak s tı́mto souborovým
typem asociujte přı́ponu .XXX a výsledek opět zkontrolujte v registru.
7. Uklid’te po sobě – soubor s přı́ponou XXX, který jste vytvořili v předchozı́ch úkolech, smažte.
Potom odstraňte také vytvořenou asociaci a souborový typ.
R
1.3
PROMĚNNÉ
1.3
14
Proměnné
Z předchozı́ho semestru již vı́me, že na Přı́kazovém řádku lze použı́vat proměnné, které obvykle
chápeme jako řetězcové. Vı́me také, že existujı́
• systémové proměnné – definované v systému, společné pro všechny uživatele, v registru je
najdeme v klı́či
O
HKLM/System/CurrentControlSet/Control/Session Manager/Environment
• uživatelské proměnné – totéž, ale definované uživatelem a platné jen pro něj, v registru je najdeme
v klı́čı́ch
HKCU/Environment
HKCU/Volatile Environment
• dynamické proměnné – jejich obsah je při každém volánı́ generován dynamicky (nejsou nikde
fyzicky uloženy), nelze do nich ukládat ani vytvářet vlastnı́ nové, jsou to např. TIME, RANDOM,
ERRORLEVEL a dalšı́, nejsou uloženy v registru.
Proces má své vlastnı́ prostředı́, ve kterém běžı́ a kde
má uloženo vše, co potřebuje a k čemu má přı́stup.
Odtud máme název proměnné prostředı́ – jsou to prostě
proměnné, které má proces namapovány ve svém prostředı́. Jde bud’ o proměnné, které si proces importoval
ze systémových či od uživatele, ale také o proměnné,
které si proces vytvořil pro svou vlastnı́ potřebu. Dynamické proměnné nejsou mapovány do prostředı́ procesu, pouze systémové a uživatelské.
V Přı́kazovém řádku pracujeme s proměnnými
(kromě dynamických) pomocı́ přı́kazu set, který
sloužı́ k výpisu seznamu proměnných (přı́padně lze
vypsat jen některé proměnné – zadáme řetězec, který
se má vyskytovat v jejich názvu), a dále k vytvářenı́
nových proměnných či změně jejich obsahu.
Dále využı́váme přı́kaz echo, který vypisuje jakékoliv řetězce včetně proměnných. Pro výpis dynamických proměnných nelze použı́t přı́kaz set, proto na- Obrázek 1.1: Proměnné prostředı́ procesu
přı́klad pı́šeme echo %random%, pokud chceme vypsat Thunderbird v Process Exploreru
náhodné čı́slo. Obecně platı́, že pokud chceme hodnotu
dynamické proměnné, musı́me ji uzavřı́t do znaků „%“, napřı́klad v parametru přı́kazu echo.
Přı́klad 1.4
Několik ukázek pro připomenutı́:
set
vypı́še seznam definovaných proměnných (kromě dynamických) i s jejich obsahy
set computername
o název počı́tače)
vypı́še obsah proměnné computername (z názvu proměnné je zřejmé, že jde
P
1.3
PROMĚNNÉ
15
vytvořı́ novou proměnnou s názvem mojeprom a iniciuje ji řetězcem abc,
pokud již existuje, tak pouze změnı́ jejı́ hodnotu
set mojeprom = abc
vypı́še zadaný řetězec, mı́sto názvu proměnné dosadı́ hodnotu zadané proměnné (obklopenı́ symboly % určuje řetězec k interpretaci, vyhodnocenı́)
echo Název počı́tače: %computername%
do proměnné můžeme uložit i momentálnı́ obsah
jiné proměnné, také v kombinaci s čı́mkoliv dalšı́m
set prom=Právě přihlášen: %username%
set pomocna = %random%
do proměnné pomocna jsme načetli náhodné čı́slo (všimněte si, že
proměnná random, která je dynamická, je sice na řádku se „zakázaným“ přı́kazem set, ale
tı́mto přı́kazem vlastně nenı́ vypisována, přı́kaz pouze využı́vá jejı́ předem zı́skanou hodnotu)
dir %WINDIR%
%systemdrive%
přesun do adresáře s instalacı́ Windows
přesun na systémový disk
cd %USERPROFILE%
přesun do vlastnı́ho profilu
SET PATH=%PATH%;X:\MUJ_PROG
přidáváme dalšı́ cestu do proměnné PATH
Počı́táme. U přı́kazu set lze použı́t parametr /a. Následujı́cı́ řetězec pak bude považován za
matematický výraz. Můžeme použı́vat běžné aritmetické operátory a také některé bitové operace,
seznam najdeme ve výpisu set /?.
Pokud chceme uvnitř výrazu (za přiřazovacı́m operátorem) použı́t proměnnou, umı́stı́me výraz
do uvozovek (potom všechny pı́smenné řetězce vpravo od přiřazovacı́ho operátoru budou považovány za čı́selné proměnné a nahrazeny svou hodnotou).
Přı́klad 1.5
Ukážeme si několik přı́kladů:
set pom=2
vytvořı́me novou proměnnou a inicializujeme ji na 2
set /a pom=2*(4-3+2)
na pravé straně přiřazovacı́ho přı́kazu je výraz, proto musı́me použı́t
parametr /a, dı́ky kterému se s výrazem nezacházı́ jako s řetězcem, ale před přiřazenı́m se
vypočte
set /a ”abc=30-pom”
na pravé straně máme proměnnou, proto celý řetězec umı́stı́me do uvo-
zovek
set /a ”abc=30 % pom”
set /a pom+=2
set /a 152*4
použili jsme operátor pro zbytek po celočı́selném dělenı́ (modulo)
dalšı́ z forem přiřazenı́ (k proměnné se přičte čı́slo 2)
vypı́še výsledek výpočtu (608), použijeme pro rychlé výpočty
dynamické proměnné musı́me uzavřı́t mezi symboly procenta (ostatnı́
proměnné můžeme, ale nemusı́me), jinak je za ně dosazeno čı́slo 0; v tomto přı́kazu jsme určili
spodnı́ hranici pro generovaná náhodná čı́sla
set /a ”%random%+50”
set /a 0x2af7
převede zadané hexadecimálnı́ čı́slo na desı́tkové (zde 10999)
$
1.4
DÁVKOVÉ SOUBORY
16
Úkoly
1. Vyzkoušejte si přı́kazy z přı́kladu 1.5 (vytvořené proměnné budou existovat jen do vypnutı́ či
restartu počı́tače, takže jich můžete vytvořit kolik chcete).
C
2. V nápovědě přı́kazu set najděte seznam podporovaných operátorů (je třeba použı́t nápovědu
v textovém režimu set /?).
3. V přı́kladu 1.5 je uveden přı́kaz, kterým lze stanovit spodnı́ hranici pro generovánı́ náhodných
čı́sel proměnnou %random%. Zamyslete se nad tı́m, jak lze generovaná čı́sla omezit shora.
Nápověda: můžete použı́t zbytek po celočı́selném dělenı́, neztrat’te se v symbolech procent.
1.4
R
Dávkové soubory
Dávkové soubory jsou soubory s přı́ponou BAT (z anglického batch file). V dávkovém souboru
můžeme vytvořit tzv. dávku přı́kazů, tedy posloupnost přı́kazů, která se má provést. Jde o textové
soubory, které můžeme editovat napřı́klad pomocı́ programu EDIT či notepad (nebo jakéhokoliv
jiného programu pracujı́cı́ho s ASCII soubory), ale přitom to jsou spustitelné soubory jako třeba EXE
(ve skutečnosti jsou interně spouštěny jako parametr přı́kazu cmd). Lze je spustit z Přı́kazové řádky
nebo přı́mo ve Windows poklepánı́m jako kterékoliv jiné spustitelné soubory.
Dávkový soubor může mı́t také parametry (při spuštěnı́ se pı́šou za název BAT souboru, oddělujı́
se mezerou), uvnitř souboru se k nim dostaneme přes proměnné %0, %1, . . . , %9, kde %0 je samotný
název dávkového souboru, %1 je prvnı́ parametr, atd. Pokud nebyl parametr zadán, je v přı́slušné
proměnné prázdný řetězec.
P
P
Přı́kazy pı́šeme každý na nový řádek. Kromě dřı́ve uvedených přı́kazů použı́váme:
REM
komentář (remark); všechno od tohoto přı́kazu do konce řádku je považováno za komentář
(v některých konfiguračnı́ch souborech se mı́sto přı́kazu rem použı́vá střednı́k)
$
tento přı́kaz už trochu známe, sloužı́ k řı́zenı́ výpisu hlášenı́ na obrazovku:
$
ECHO
ECHO text
vypı́še na obrazovku text (nenı́ třeba ho ohraničit uvozovkami)
ECHO.
zařádkuje na obrazovce (vypı́še prázdný řádek)
ECHO ON
zapne výpis výstupů přı́kazů na obrazovku (implicitnı́ nastavenı́), napřı́klad pokud v následujı́cı́ posloupnosti přı́kazů je přı́kaz COPY . . . , na obrazovku se vypı́še řádek
s tı́mto přı́kazem a dále vše, co samotný přı́kaz posı́lá na výstup,
ECHO OFF
vypne výpis výstupů přı́kazů na obrazovku
ECHO Název tohoto souboru je %0, prvnı́ parametr je %1
vypı́še název a prvnı́ parametr dávkového souboru, ve kterém je tento přı́kaz
@přı́kaz
vypne výpis na obrazovku u toho přı́kazu, jehož řádek tı́mto znakem začı́ná obvyklé použitı́
přı́kazu @ECHO OFF (přı́kaz sice vypı́ná výstup na obrazovku, ale až od následujı́cı́ho řádku,
$
1.4
DÁVKOVÉ SOUBORY
17
proto na tento řádek musı́me použı́t znak @, aby se nezobrazil), tı́mto řádkem začı́ná většina
dávkových souborů
CALL soubor.bat
spuštěnı́ jiného dávkového souboru; programy EXE a COM lze spustit zadánı́m jejich jména, ale
kdybychom totéž provedli s BAT souborem, tak po jeho provedenı́ by původnı́ dávkový soubor
(ve kterém byl tento BAT soubor volán) byl násilně ukončen, proto je nutné použı́t přı́kaz CALL
$
PAUSE
pozastavı́ prováděnı́ dávkového souboru, použı́váme, když chceme, aby si uživatel přečetl text
vypsaný na obrazovce (vykonávánı́ dalšı́ch přı́kazů pokračuje po stisknutı́ kterékoliv klávesy)
$
GOTO :návěštı́
přı́kaz skoku (narozdı́l od vyššı́ch programovacı́ch jazyků je v dávkových souborech nezbytný), lze odskočit na kterýkoliv řádek souboru, který označı́me návěštı́m
REM ukázka odskoku na řádek s návěštı́m :konec
:zacatek
...
goto :zacatek
...
:konec
$
M
Návěštı́ musı́ vždy začı́nat dvojtečkou (a neobsahuje mezery, ani za tou dvojtečkou), v přı́kazu
goto je mezera před celým návěštı́m (tj. před dvojtečkou).
SET /p proměnná=výzva
vypı́še na obrazovku výzvu, počká až uživatel něco napı́še a stiskne Enter , pak to, co uživatel
zadal, uložı́ do proměnné:
$
SET /p soub=Zadejte soubor, se kterým budeme dále pracovat:
SHIFT
posun obsahu parametrů souboru – to, co bylo uloženo v %1, se přesune do %0, obsah %2
se přesune do %1 atd., do %9 se mı́sto původnı́ho obsahu načte následujı́cı́ parametr, použı́vá se, pokud má dávkový soubor vı́ce než 9 parametrů (dostaneme se tak i k desátému
a následujı́cı́m).
SETLOCAL, ENDLOCAL
při použitı́ v dávkovém souboru jsou všechny proměnné vytvořené mezi těmito dvěma přı́kazy
pouze lokálnı́ (přesněji lokálnı́ jsou všechny změny souvisejı́cı́ s přı́kazovým prostředı́m,
obvykle jde o proměnné), platı́ jen v tomto bloku, a po ukončenı́ interpretace tohoto dávkového
souboru (nebo uvedenı́ přı́kazu endlocal) přestanou existovat.
Přı́klad 1.6
Ukážeme si použitı́ přı́kazů setlocal a endlocal.
@echo off
...
setlocal
$
1.4
DÁVKOVÉ SOUBORY
18
set path=%ProgramFiles%\mujprogram;%path%
set mojeprom=”Moje proměnná”
set /p retezec=Zadejte řetězec, který má být později vypsán:
rem (ted’ uživatel něco napsal a stiskl Enter)
echo Zadali jste: %retezec%
...
rem použı́váme vlastnı́ nastavenı́ proměnné path a proměnnou mojeprom
...
endlocal
rem ted’ už má proměnná path původnı́ hodnotu (bez našeho přı́davku)
rem
a proměnné mojeprom a retezec neexistujı́
Přı́kazy setlocal a endlocal majı́ také parametry, napřı́klad lze vypnout či znovu zapnout tzv.
rozšı́řenı́ přı́kazů.1 Podrobnosti o rozšı́řenı́ přı́kazů můžeme zjistit napřı́klad v nápovědě přı́kazu cmd.
Nejen binárnı́ spustitelné soubory, ale také dávkové soubory mohou do dynamické proměnné
errorlevel uložit svůj ukončovacı́ kód. Provádı́ se to přı́kazem
E
EXIT /B čı́slo
Napřı́klad když chceme v dávkovém souboru ukončit jeho běh, můžeme na daný řádek umı́stit
přı́kaz
$
exit /B 0
(to znamená, že jde o regulérnı́ ukončenı́, k žádné chybě nedošlo). Pokud se rozhodneme pomocı́
proměnné errorlevel rozlišit různé typy chyb, tak napřı́klad při problému s přı́stupem k souboru
vypı́šeme hlášenı́ a provedeme exit /B 1, při nesprávně ukončeném kopı́rovánı́ exit /B 2, atd.
podle vlastnı́ho rozhodnutı́.
Na stránce http://fpf.slu.cz/~vav10ui/obsahy/os/skripty.html najdete krátké ukázky dávkových
souborů. Dále je zajı́mavá stránka s vysvětlenı́m parametrů dávkových souborů
http://www.robvanderwoude.com/parameters.php.
Úkoly
1. Vytvořte dávkový soubor, který na disku, kde máte právo zápisu, vytvořı́ adresář a do něho
zkopı́ruje všechny soubory s přı́ponou TXT z adresáře C:\.
2. Vytvořte dávkový soubor, ve kterém
• zajistěte, aby nadbytečné výstupy přı́kazů nebyly vypisovány,
• prompt nastavte na název právě přihlášeného uživatele (použijte přı́slušnou proměnnou),
• vypište právě přihlášeného uživatele (dopište ještě nějaký vysvětlujı́cı́ řetězec) – pokud si
nemůžete vzpomenout, jak se jmenuje proměnná obsahujı́cı́ název přihlášeného uživatele,
1
Rozšı́řenı́ přı́kazů ovlivňuje poměrně mnoho přı́kazů (napřı́klad for, assoc, cd, md, prompt, set, atd.). Obvykle
rozšiřuje množstvı́ parametrů těchto přı́kazů nebo obohacuje jejich chovánı́. Standardně jsou rozšı́řenı́ přı́kazů zapnuta,
což lze ovlivnit bud’ ručnı́m zadánı́m přı́slušného přepı́nače v přı́kazu cmd při spuštěnı́ Přı́kazového řádku, a nebo
změnou proměnné comspec.
C
1.4
DÁVKOVÉ SOUBORY
19
využijte faktu, že přı́kaz set vypisuje seznam všech proměnných obsahujı́cı́ch zadaný
řetězec (tedy stačı́ zadat set user a zjistı́me názvy všech proměnných, které majı́ co dělat
s uživateli),
• požádejte o zadánı́ řetězce s cestou k některému adresáři (pomocı́ proměnné),
• předpokládejte, že uživatel zadal platnou (skutečnou, správnou) cestu k některému adresáři a tento údaj využijte:
– nejdřı́v vypište hlášenı́ o tom, že bude následovat strom s adresářovou strukturou
v zadaném adresáři,
– pak vypište stromovou strukturu v zadaném adresáři (použijte obsah proměnné,
kterou jste vytvořili při načtenı́ řetězce od uživatele).
3. Zjistěte, jak lze spustit Přı́kazový řádek bez funkce rozšı́řenı́ přı́kazů. Zjistěte (třeba v nápovědě), jak se zapnutı́ či vypnutı́ rozšı́řenı́ přı́kazů projevı́ na funkcı́ch přı́kazu start.
R
Kapitola
2
Pokročilejšı́ úlohy na Přı́kazovém řádku
Pokračujeme v úlohách na Přı́kazovém řádku. Zaměřı́me se na správu počı́tače a zejména na správu sı́tě včetně
vytvářenı́ skriptů, nahlédneme také do PowerShellu.
2.1
Správa sı́tě
Upozorněnı́: podrobnějšı́ informace k následujı́cı́m přı́kazům a samozřejmě dalšı́ přı́kazy a přı́klady
najdeme ve skriptech (v jejich přı́lohách) do předmětu Počı́tačové sı́tě a decentralizované systémy –
jsou na mých stránkách.
2.1.1
Základnı́ přı́kazy pro správu sı́tě
Důležité informace, které můžeme potřebovat i jako parametry některých následujı́cı́ch přı́kazů,
najdeme v souborech obsažených v adresáři ...\system32\drivers\etc (jsou to textové soubory,
třebaže nemajı́ přı́ponu):
•
•
•
•
networks obsahuje doménové a IP adresy lokálnı́ch sı́tı́,
hosts je soubor urychlujı́cı́ mapovánı́ IP adres na známé doménové adresy,
services obsahuje informace o známých sı́t’ových službách,
protocol totéž o známých sı́t’ových protokolech.
Tyto soubory vznikly z důvodu užitné kompatibility sı́t’ového rozhranı́ se stroji s jinými operačnı́mi
systémy. Soubory hosts a networks můžeme využı́t pro urychlenı́ překladu názvů, který je za
normálnı́ch okolnostı́ prováděn DNS serverem. Jestliže u některé často použı́vané adresy známe
dvojici název–IP adresa a vı́me, že IP adresa je staticky přidělena (tudı́ž se nemůže změnit), můžeme
tuto dvojici zaznamenat do souboru hosts (pokud jde o adresu konkrétnı́ho uzlu v sı́ti) a nebo
networks (pokud jde o adresu sı́tě či podsı́tě) a pak o překlad nemusı́ být zdlouhavě žádán DNS
server.
20
P
2.1
SPRÁVA SÍTĚ
21
Dostat se k těmto souborům může být trochu problém, pokud pracujeme v 64bitových Windows
a jsme v 32bitovém procesu (což je většina souborových manažerů třetı́ch stran). V 64bitovém systému je totiž adresář System32 také 64bitový (navzdory svému názvu) a při přı́stupu z 32bitového
procesu docházı́ k přesměrovánı́. Rozhodně bychom se do adresáře etc nedostali postupným procházenı́m adresářovou strukturou, pouze přı́mým zapsánı́m celé cesty k tomu souboru, se kterým
chceme pracovat (napřı́klad C:\windows\system32\drivers\etc\hosts), a nebo pracı́ v 64bitovém procesu.
L
Typické úlohy, se kterými se při práci se sı́těmi běžně setkáváme, obvykle sestávajı́ z práce s MAC
a IP adresami, zjišt’ovánı́ dostupnosti uzlů sı́tě, monitorovánı́ a dalšı́ch. Zde si ukážeme jen několik
nejtypičtějšı́ch úloh, s dalšı́mi se setkáme v předmětu Počı́tačová sı́t’ a internet. Na obrázku 2.1 je
naznačen vztah mezi jednotlivými vrstvami sı́t’ové komunikace, umı́stěnı́ typických protokolů do
jednotlivých vrstev a adresace, která se na daných vrstvách použı́vá.
Relačnı́ model ISO/OSI
L7
Relačnı́ model TCP/IP
POP3, IMAP
Aplikačnı́ vrstva
SMTP
L6
Prezentačnı́ vrstva
HTTP, HTTPS
DHCP
DNS
Relačnı́ vrstva
L4
Transportnı́ vrstva
Transportnı́ vrstva
L3
Sı́t’ová vrstva
Sı́t’ová vrstva
L2
Linková vrstva
Fyzická vrstva
atd.
Aplikačnı́ vrstva
L5
L1
FTP, SFTP
MAC
ICMP, IGMP
IP adresy
IPv4, IPv6
LLC (IEEE 802.2)
LLC
porty
TCP, UDP
Vrstva sı́t’ového
rozhranı́
MAC adresy
Ethernet, Wi-fi, . . .
Obrázek 2.1: Modely ISO/OSI, TCP/IP, protokoly a adresy
Dále projdeme několik užitečných přı́kazů pro práci se sı́těmi.
IPCONFIG
zobrazı́ konfiguraci protokolu TCP/IP a umožňuje také jeho (omezenou) konfiguraci
zjištěnı́ všech potřebných informacı́ o sı́t’ových kartách včetně IP adresy,
brány, masky podsı́tě a MAC adresy
ipconfig /release název_karty
uvolněnı́ IP adresy přidělené zadané sı́t’ové kartě (když
neuvedeme název karty, jsou uvolněny IP adresy všech karet)
ipconfig /renew název_karty
obnovenı́ přidělenı́ IP adresy pro zadanou sı́t’ovou kartu
(když nenı́ název karty uveden, provede se pro všechny karty)
ipconfig /all
$
2.1
SPRÁVA SÍTĚ
22
zobrazı́ záznamy adres přidělených v systému DNS (informace
k přı́slušným DNS jménům včetně hodnoty TTL1 ), a to jak ve směru doménové jméno →
IP adresa, tak i ve směru opačném (reverznı́ adresy, ty jsou v záhlavı́ označeny řetězcem
„in-addr.arpa“); vždy jsou zobrazeny alespoň dva záznamy (localhost a jeho reverznı́
adresa)
ipconfig /displaydns
Přı́klad 2.1
Chceme zjistit údaje o své sı́t’ové kartě – svou IP adresu, fyzickou (MAC) adresu, masku podsı́tě,
adresu svého DNS serveru a dalšı́:
ipconfig /all
Zjistı́me, že je nějaký problém – máme zřejmě špatně přiřazenu IP adresu (napřı́klad stejnou jako
jiný počı́tač v sı́ti, to se občas může stát), proto IP adresu uvolnı́me a pak znovu kartu aktivujeme
(znovu požádáme o IP adresu) – předpokládejme, že IP adresu dostáváme přes DHCP, potom si
znovu ověřı́me, jakou máme adresu:
ipconfig /release
ipconfig /renew
ipconfig /all
PING
ověřuje průchodnost připojenı́ k zadanému počı́tači v sı́ti, odesı́lá k tomuto počı́tači pakety
a podle zaslaných odpovědı́ určuje, zda je počı́tač dostupný a jaká je odezva připojenı́ (pokud
má vzdálený počı́tač firewall nakonfigurovaný tak, aby požadavky ping byly ignorovány,
může se počı́tač jevit jako nedostupný)
zjistı́, zda je zadaný server dostupný (je dostupný prakticky vždy,
tedy pokud se zobrazı́ hláška, že tomu tak nenı́, zřejmě nejsme připojeni k sı́ti nebo je
někde na cestě porucha)
ping -n 2 www.google.com
tento parametr omezı́ (nebo u většı́ho čı́sla navýšı́) počet
odesı́laných testovacı́ch paketů, zde na 2; výchozı́ hodnota je 4 pakety
ping -t www.google.com
počet odesı́laných paketů nenı́ stanoven, posı́lajı́ se opakovaně
až do přerušenı́ klávesovou zkratkou Ctrl+C
ping www.google.com
Přı́klad 2.2
Jako parametr přı́kazu ping lze použı́t i čı́selnou IP adresu. Dokonce to může být i adresa loopback,
což je vlastně zpětná smyčka, dı́ky této adrese může počı́tač komunikovat i sám se sebou (resp.
procesy na témže počı́tači mezi sebou) přes sı́t’ové protokoly. Adresa loopback je 127.0.0.1, tedy
můžeme otestovat:
ping 127.0.0.1
1
TTL (Time to Live) je čı́tač uložený v hlavičce IP datagramu, který se při průchodu kteréhokoliv směrovače na cestě
snižuje (nejméně) o 1. Hlavnı́m účelem je omezenı́ počtu „bloudı́cı́ch“ datagramů. Pokud hodnota TTL vypršı́ (klesne
na 0), směrovač, který vypršenı́ zjistı́, už dál datagram neposı́lá, ale odešle zdroji datagramu informaci o překročenı́
povoleného TTL.
$
2.1
SPRÁVA SÍTĚ
23
Tento přı́kaz je užitečný napřı́klad tehdy, když chceme zjistit, zda je naše sı́t’ová karta funkčnı́. Pokud
by přı́kaz hlásil nedostupnost, máme problém se sı́t’ovou kartou.
Jestliže máme správně přidělenu IP adresu, ale spojenı́ v některých sı́t’ových aplikacı́ch přesto
nefunguje (typicky v internetovém prohlı́žeči), může být problém v nesprávné adrese DNS serveru
(to je server, který překládá doménové – slovnı́ – adresy na čı́selné IP adresy a přı́padně zpět).
Ověřı́me si přı́kazem, ve kterém použijeme čı́selnou adresu, napřı́klad
ping 8.8.8.8
(to je adresa veřejného DNS serveru Googlu; použijeme ji, protože je dobře zapamatovatelná a obvykle bez problémů funguje). Pokud přı́kaz nehlásı́ chyby, pak je určitě problém právě v DNS
serveru. Můžeme si nastavit jiný DNS server (jde o i přes „okna“), třeba zrovna tento (jen upozorňuji, že je celkem vytı́žený, má horšı́ propustnost).
ROUTE
pracuje se směrovacı́mi tabulkami (routing tables); tam je předevšı́m uvedena výchozı́ brána
(tj. když nenı́ stanoveno jinak v pravidlech směrovacı́ tabulky, je paket směrován právě na tuto
bránu) a taky směrovacı́ pravidla („pakety s cı́lem xxx ved’ na bránu yyy“).
$
route print
vypı́še směrovacı́ tabulky (lze zadat také upřesňujı́cı́ parametry)
route add h IP adresa cı́le i MASK h maska podsı́tě i h brána i METRIC 1
přidá do směrovacı́ tabulky záznam se zadanou IP adresou, maskou podsı́tě, bránou
a metrikou (zde je metrika 1), také je možné zadat rozhranı́ (to je IP adresa sı́t’ové karty
v tomto počı́tači), lomené závorky samozřejmě nepı́šeme, jsou zde jen pro usnadněnı́
orientace
route delete h IP adresa i
odstranı́ ze směrovacı́ tabulky záznam pro zadanou IP adresu
Přı́klad 2.3
Směrovacı́ tabulka určuje, kam má být který odchozı́ paket směrován. Na desktopu (Windows XP)
může směrovacı́ tabulka vypadat třeba takto:
C:\> route print
============================================================================
Seznam rozhranı́
0x1 ........................... MS TCP Loopback interface
0x2 ...00 0f fe 36 52 3a ...... Broadcom NetXtreme Gigabit Ethernet - Packet
Scheduler Miniport
============================================================================
============================================================================
Aktivnı́ směrovánı́:
Cı́l v sı́ti
Sı́t’ová maska
Brána
Rozhranı́ Metrika
0.0.0.0
0.0.0.0
193.84.195.1
193.84.195.63
10
127.0.0.0
255.0.0.0
127.0.0.1
127.0.0.1
1
193.84.195.0 255.255.255.128
193.84.195.63
193.84.195.63
10
193.84.195.63 255.255.255.255
127.0.0.1
127.0.0.1
10
193.84.195.255 255.255.255.255
193.84.195.63
193.84.195.63
10
224.0.0.0
240.0.0.0
193.84.195.63
193.84.195.63
10
M
2.1
SPRÁVA SÍTĚ
24
255.255.255.255 255.255.255.255
193.84.195.63
193.84.195.63
1
Výchozı́ brána:
193.84.195.1
============================================================================
Trvalé trasy:
Žádné
Počı́tač má v tuto chvı́li přidělenu IP adresu 193.84.195.63. Podı́vejte se, kde v tabulce se tato adresa
nacházı́. Všimněte si, že pakety adresované sobě samému jsou směrovány na loopback (127.0.0.1).
Brána pro mı́stnı́ segment lokálnı́ sı́tě je 193.84.195.1. Tuto adresu najdeme předevšı́m v údaji Výchozı́
brána.
TRACERT
určuje trasu k zadaným počı́tačům včetně jejı́ délky pomocı́ protokolu ICMP:
$
• v paketu ICMP využı́vá hodnotu TTL, podle přı́padné reakce směrovačů odhadne délku
trasy,
• nejdřı́v vyšle paket s TTL=1, při předčasném vypršenı́ TTL je vyslán paket s TTL=2, pak
TTL=3, atd., dokud neobdržı́ kladnou odezvu.
Parametrem -h můžeme omezit počet směrovánı́, aby při nemožnosti dosaženı́ cı́le přı́kaz
nepracoval zbytečně dlouho.
zobrazı́ cestu k danému serveru včetně časových údajů (nejkratšı́, průměrná a nejdelšı́ doba)
tracert -h 5 www.google.com
zajı́má nás pouze prvnı́ch 5 skoků přes směrovače na
cestě
tracert www.google.com
PATHPING
vypı́še cestu k zadané adrese a vypočı́tá statistiky souvisejı́cı́ s jednotlivými úseky cesty (vpodstatě náročnost úseků cesty). Jde o kombinaci funkcı́ přı́kazů ping a tracert – je nejen určena
trasa přes směrovače k danému cı́li, ale ke každému směrovači jsou posı́lány pakety podobně
jako u přı́kazu ping. Takto lze zjistit spolehlivost cest k jednotlivým směrovačům (počet
ztracených paketů, dobu odezvy apod.) a tı́m napřı́klad odhadnout, kde na cestě docházı́
k problémům s doručovánı́m paketů.
$
zjistı́ stav cesty k zadanému serveru, vypı́še podrobnou statistiku cesty (generovánı́ statistiky může trvat i několik minut)
pathping www.google.com
Výstup můžeme upřesnit zadánı́m parametrů, také lze stanovit jiný výchozı́ počı́tač. Přı́kaz je
užitečný napřı́klad tehdy, když cesta k některému cı́li vykazuje hodně špatnou propustnost,
a my potřebujeme zjistit, na kterém úseku je problém.
NETSTAT
tento program zobrazuje statistiku protokolů TCP/IP
vypı́še základnı́ statistiku (nevšı́má si aplikacı́, které pouze naslouchajı́, vypisuje
pouze TCP spojenı́)
netstat -a
vypı́še celou statistiku
netstat
$
2.1
SPRÁVA SÍTĚ
netstat
netstat
netstat
netstat
25
-a -o
vypı́še celou statistiku, přidá sloupec s PID přı́slušného procesu
-ao
totéž (přepı́nače můžeme sdružovat do jediného řetězce)
-ano
navı́c mı́sto doménových vypisuje IP adresy
-ab > seznam.log
vypı́še všechny procesy (názvy i PID), které právě komuni-
kujı́ se sı́tı́ (jakkoliv), výsledek uložı́ do zadaného souboru (opět jsme přepı́nače shrnuli
k jedné pomlčce)
netstat -e
základnı́ statistika pro Ethernet (počet odeslaných a přijatých paketů, počet
chyb apod. – týká se protokolů rodiny TCP/IP)
netstat -es
podrobná statistika všech protokolů z rodiny TCP/IP
netstat 2
vypisuje svůj výstup opakovaně každé dvě sekundy (můžeme zadat jakýkoliv
interval), činnost přı́kazu lze ukončit jen klávesovou zkratkou Ctrl+C
ARP
Arp je protokol převádějı́cı́ IP adresy na fyzické (MAC) adresy, tento přı́kaz tedy souvisı́
s překladem adres. Fyzická adresa je v sı́ti zjišt’ována odesı́lánı́m tzv. Arp paketů s dotazy.
Aby nebylo nutné opakovaně posı́lat tyto pakety, udržuje každé sı́t’ové zařı́zenı́ (tj. také zvlášt’
každá sı́t’ová karta) mezipamět’, do které ukládá dosud zjištěné dvojice IP a fyzických adres
(ARP tabulky). ARP tabulku je možné prohlı́žet a přidávat i mazat záznamy.
$
zobrazı́ ARP tabulku, také vidı́me, které záznamy jsou dynamické (automaticky
vytvořené z komunikace) a které statické (ručně vložené)
arp -s 123.123.123.123 00-12-34-56-78-9A
přidá do ARP tabulky statický záznam
se vztahem zadané IP adresy a MAC (fyzické) adresy, MAC adresa se zadává v hexadecimálnı́ch čı́slech s pomlčkami
arp -d 123.123.123.123
odstranı́ z ARP tabulky záznam pro zadanou IP adresu
arp -d *
odstranı́ z ARP tabulky všechny záznamy
arp -a
Lze také přidat parametr s určenı́m IP adresy sı́t’ové karty, pro kterou daná ARP tabulka platı́
(každá karta má svou tabulku), což má smysl pouze v přı́padě, kdy je v provozu vı́ce než jedna
sı́t’ová karta.
Přı́klad 2.4
Na desktopu s jedinou sı́t’ovou kartou je dost pravděpodobné, že ARP tabulka (tedy tabulka sousedů)
bude vypadat takto:
C:\> arp -a
Rozhranı́: 193.84.195.63 --- 0x2
internetová adresa
fyzická adresa
193.84.195.1
00-0d-66-2c-7a-00
typ
dynamická
Je to z toho důvodu, že v současných ethernetových sı́tı́ch mı́vajı́ tyto uzly jediného souseda –
přepı́nač nebo směrovač, ke kterému jsou připojeny (a to je také jim přiřazená brána, přes kterou
kumunikujı́ se světem, všimněte si adresy).
M
2.1
SPRÁVA SÍTĚ
26
Úkoly
1. Prohlédněte si obsah souborů networks, hosts, services a protocols v adresáři
...\system32\drivers\etc (pozor, pokud pracujete na 64bitovém systému).
C
2. Zjistěte svou IP a MAC adresu, a také masku podsı́tě.
3. Zobrazte seznam informacı́ o DNS názvech (včetně přı́slušné IP adresy, evidovaných hodnot
TTL atd.).
4. Vyberte si jakýkoliv server na sı́ti (třeba svůj mail server nebo server, který použı́váte při
vyhledávánı́) a zjistěte jeho dostupnost, při testu použijte pouze dva pakety.
5. Vypište směrovacı́ tabulky na vašem počı́tači. Všimněte si, jakou metriku má zařı́zenı́ s IP
adresou začı́najı́cı́ čı́sly 127.0.0.
6. Porovnejte výpisy přı́kazů tracert a pathping pro tentýž server.
7. K serveru použitému v úkolu 4 zjistěte trasu (adresy) včetně určenı́ časové náročnosti trasy
k jednotlivým uzlům (směrovačům) na cestě.
8. Zjistěte, které procesy (všechny) právě pracujı́ se sı́tı́. Zjistěte, jak přidánı́m přı́slušného filtru
vypsat pouze ty procesy, které naslouchajı́ na některém portu.
9. Zjistěte, kolik je odeslaných a přijatých unicast paketů, kolik jiných než unicast a zda nejsou
hlášeny některé poškozené pakety (chyby) – souhrnně přes TCP/IP (Ethernet). Dále se zaměřte
na vypsané statistiky pro jednotlivé protokoly a ověřte, zda nejsou hlášeny některé chyby nebo
neúspěšné operace.
10. Projděte si nápovědu přı́kazu netstat (v Přı́kazovém řádku) a zjistěte, kterým přepı́načem
lze omezit výpis z předchozı́ho úkolu pouze na protokol TCP.
11. Zobrazte ARP tabulku sı́t’ové karty na vašem počı́tači.
2.1.2
Přı́kaz NET
Přı́kaz NET je komplexnı́ nástroj pro práci předevšı́m se sı́tı́, ale taky je určen pro některé úkoly
souvisejı́cı́ se správou počı́tače a uživatelů (Windows řady NT).
Jeho prvnı́ parametr obvykle určuje oblast, které se budou dalšı́ parametry týkat, můžeme ho
chápat jako vnořený přı́kaz. Zde si uvedeme některé z nich podle přı́padného vztahu k nástrojům
s grafickým rozhranı́m.
Je poměrně dobře zdokumentován v nápovědě i v grafickém režimu (v rejstřı́ku zadáme net).
K jednotlivým variantám přı́kazu zı́skáme krátkou nápovědu v textovém režimu (napřı́klad net
user /? (stručný popis syntaxe), podrobnějšı́ nápovědu najdeme v grafickém režimu, když do
vyhledávacı́ho okna napı́šeme net user .
2.1.3
Přı́kaz NET – uživatelé a skupiny
Pro správu uživatelů a skupin sloužı́ podpřı́kazy user, localgroup, group a accounts přı́kazu
net.
2.1
SPRÁVA SÍTĚ
27
NET USER
(podobně ve Správě počı́tače, položka Mı́stnı́ uživatelé a skupiny ï Uživatelé) práce s uživateli
(vypsánı́ informacı́ u uživateli, změna hesla, nový uživatel, deaktivace uživatele, možnost
stanovit dobu, kdy se uživatel může přihlašovat, . . . ).
$
net user
vypı́še seznam uživatelů (v několika sloupcı́ch)
net user novak
vypı́še podrobné informace o uživateli novak, včetně skupin, do kterých
net
net
net
net
net
patřı́, údajů o hesle (jestli smı́ uživatel měnit heslo, kdy bylo nastaveno, kdy vypršı́,
apod.), kdy se uživatel naposledy přihlásil, zda je účet aktivnı́, atd.
user novak heslo
nastavı́me uživateli novak zadané heslo
user novak *
jako předchozı́, ale na heslo jsme dotázáni, při jeho zadávánı́ se nezobrazujı́ znaky
user administrator heslo
nastavı́ heslo administrátora na zadaný řetězec; tı́mto způsobem zcela zaktivnı́me účet administrátora i ve variantách Home (také pro funkce, kdy
je vyžadováno zadánı́ hesla administrátora – pokud nenı́ definováno, k těmto funkcı́m se
nedostaneme); přı́padně můžeme mı́sto hesla do přı́kazu napsat hvězdičku
user novak /active:no
zneaktivnı́me účet uživatele (zaktivněnı́ se provádı́ parametrem /active:yes)
user novak /passwordchg:no
od této chvı́le zadaný uživatel nemá možnost změnit
své heslo (toto nastavenı́ je typické napřı́klad pro účet host)
net user novak heslo /add /fullname:”Jan Novák”
vytvořı́ nového uživatele se zadaným přihlašovacı́m jménem, heslem a zobrazovaným
jménem
net user novak * /add /fullname:”Jan Novák”
totéž, ale na heslo jsme interaktivně dotázáni, při zadávánı́ se nezobrazujı́ znaky
zadáme se skriptem, který se má provést při
přihlášenı́ uživatele (cesta ke skriptu nesmı́ být absolutnı́, musı́ být relativnı́ vzhledem
k adresáři . . . \System32\Repl\Import\Scripts, ale může obsahovat také přechody do
nadřı́zeného adresáře ..)
net user novak /delete
odstranı́ uživatele
net user novak /times:Po-Pá,6-16
umožnı́ danému uživateli být přihlášen pouze v zadaných dnech a hodinách (zde v pracovnı́ch dnech mezi 6. a 16. hodinou, dalšı́ možnosti
najdeme v nápovědě).
net user novak /scriptpath:souborskriptu
Lze také použı́t parametr /domain, pak pracujeme s účtem na primárnı́m řadiči domény (když
tento parametr nezadáme, pracujeme s lokálnı́m účtem).
Přı́kaz net user se dá využı́t také pro automatizaci přidávánı́ nových uživatelů (údaje předem
uložı́me do souboru a pak je v cyklu načı́táme – naučı́me se to později v sekci 2.3 o hromadném
zpracovánı́ dat na straně 53).
NET LOCALGROUP
(podobně ve Správě počı́tače, položka Mı́stnı́ uživatelé a skupiny ï Skupiny) práce se skupinami
(nová skupina, uživatelé ve skupině, . . . ). S tı́mto přı́kazem pracujeme podobně jako s předchozı́m.
net localgroup
vypı́še seznam uživatelských skupin
$
2.1
SPRÁVA SÍTĚ
28
vypı́še informaci o skupině Power Users (název skupiny
obsahuje mezeru, proto musı́ být uzavřen do uvozovek) – pouze komentář a seznam členů
skupiny
localgroup uctarna /add
vytvořı́ novou skupinu se zadaným názvem (na lokálnı́m
počı́tači)
localgroup uctarna novak koutova /add
do skupiny uctarna přidá (předem vytvořené) uživatele novak a koutova
localgroup uctarna marketing\zlatnik /add
do skupiny uctarna bude přidán
uživatel zlatnik z domény marketing
localgroup uctarna novak /delete
odstranı́me uživatele ze skupiny
localgroup uctarna /delete
zrušı́me skupinu
net localgroup ”power users”
net
net
net
net
net
Opět použı́váme parametr /domain, pokud chceme pracovat se skupinami na úrovni domény.
Ke skutečné práci se skupinami na úrovni domény pak použı́váme přı́kaz net group (tento
přı́kaz však lze použı́t pouze na serveru, který je doménovým řadičem).
$
NET ACCOUNTS
(podobně v Mı́stnı́ch zásadách zabezpečenı́, položka Zásady účtů) správa uživatelských účtů na
obecné úrovni (stanovı́me požadavky na vlastnosti účtů, např. minimálnı́ délka hesla, nutnost
změnit heslo po určité době, můžeme zde zajistit, aby při změně hesla uživatel jako nové heslo
zvolil to, co už někdy dřı́ve jako heslo použı́val – určujeme, kolik změn hesla v minulosti má
být tako sledováno, . . . )
$
net accounts
vypı́še momentálně nadefinované vlastnosti uživatelských účtů
net accounts /minpwlen:8
nastavı́ minimálnı́ požadovanou délku hesla uživatele na
net
net
net
net
8 znaků (v mnoha parametrech se vyskytuje zkratka „pw“, to znamená, že se vztahujı́
k nastavenı́ hesla – pasword)
accounts /maxpwage:120
heslo platı́ vždy nejvýše 120 dnů, po této době si uživatel
musı́ zvolit nové heslo
accounts /maxpwage:unlimited
uživatel nenı́ nucen pravidelně měnit své heslo,
jeho časová platnost nenı́ prakticky omezena
accounts /uniquepw:4
uživatel smı́ zvolit heslo, které už měl někdy v minulosti, ale
až po nejméně 4 změnách hesla
accounts /maxpwage:30 /uniquepw:6
heslo platı́ vždy maximálně 30 dnů, uživatel
(při této poměrně restriktivnı́ době) smı́ zvolit i takové heslo, které už měl, ale až po
nejméně 6 změnách hesla
Přı́klad 2.5
Zobrazı́me seznam uživatelů (Windows 7 Pro na desktopu), zobrazilo se jich 6:
C:\> net user
Uživatelské účty pro \\DOMACIPC
-------------------------------------------------------------------------Administrator
Druhyuzivatel Guest
Prvniuzivatel
Tretiuzivatel User
Přı́kaz byl úspěšně dokončen.
M
2.1
SPRÁVA SÍTĚ
29
Vytvořı́me novou skupinu a ověřı́me si, zda je v seznamu skupin, jsou podle abecedy:
C:\> net localgroup tiskpovolen /add
C:\> net localgroup
Aliasy pro \\DOMACIPC
-------------------------------------------------------------------------*Administrators
*Backup Operators
*Cryptographic Operators
*Distributed COM Users
*Event Log Readers
*Guests
*HomeUsers
*IIS_IUSRS
*Network Configuration Operators
*Performance Log Users
*Performance Monitor Users
*Power Users
*Remote Desktop Users
*Replicator
*tiskpovolen
*Users
Prı́kaz byl úspešne dokoncen.
M
Do nové skupiny zařadı́me dva uživatele (můžeme najednou, v jediném přı́kazu) a pak vypı́šeme
seznam členů skupiny:
C:\> net localgroup tiskpovolen prvniuzivatel druhyuzivatel /add
C:\> net localgroup tiskpovolen
Název aliasu
Komentár
tiskpovolen
M
Clenové
------------------------------------------------------------------------druhyuzivatel
prvniuzivatel
Prı́kaz byl úspešne dokoncen.
Tak ted’ jsme si to rozmysleli, novou skupinu odstranı́me:
C:\> net localgroup tiskpovolen /delete
Úkoly
1. Vypište seznam uživatelů, kteřı́ se mohou na počı́tači přihlásit. Najděte v seznamu své přihlašovacı́ jméno a vypište informace o sobě (s využitı́m svého přihlašovacı́ho jména).
2. Sestavte přı́kaz, kterým přidáte nového uživatele se zadánı́m jména, hesla, vypisovaného
jména a parametru, který zajistı́, že po uživateli nebude heslo vyžadováno (tento parametr
najdete v nápovědě).
3. Vypište seznam skupin, které jsou vytvořeny na vašem počı́tači.
C
2.1
SPRÁVA SÍTĚ
30
4. Pokud máte přı́slušná přı́stupová oprávněnı́, vytvořte nového uživatele s názvem TestovaciUzivatel, dále novou skupinu s názvem PokusnaSkupina a nového uživatele do nı́ zařad’te. Potom
tohoto uživatele ze skupiny odstraňte a skupinu zrušte.
5. Zjistěte, jaké zásady jsou nastaveny pro uživatelské účty na vašem počı́tači. Předevšı́m zkontrolujte, jaká musı́ být minimálnı́ délka hesla uživatele.
2.1.4
Přı́kaz NET – sdı́lenı́ prostředků a správa domén
Každý by měl mı́t přehled o tom, co je na jeho počı́tači nasdı́leno „ven“ a je tedy dostupné z jiného
počı́tače, podobně by měl vědět, jak zjistit, co je dostupné na jiných počı́tačı́ch a jak se k tomu dostat.
Opět se podı́váme na několik podpřı́kazů přı́kazu net.
NET SHARE
(podobně ve Správě počı́tače, položka Sdı́lené složky ï Sdı́lené položky) práce se sdı́lenými prostředky (obvykle adresáři/složkami nebo tiskárnami) na našem počı́tači (nasdı́let prostředek,
ukončit sdı́lenı́, bez dalšı́ch parametrů zobrazı́ seznam nasdı́lených prostředků), umožňuje
také omezit sdı́lenı́ jen na určitý počet uživatelů
$
zobrazı́ seznam všech prostředků (složek, tiskáren apod.), které jsou na tomto
počı́tači nasdı́leny (jsou přı́stupné z jiného počı́tače na sı́ti). V seznamu jsou také položky
neviditelné v nástroji Mı́sta v sı́ti (končı́ symbolem $).
net share fakturydod=d:\faktury /remark:”Faktury dodavatelů”
vytvořı́ nové sdı́’
lenı́ – adresář d:\faktury bude na sı́ti přı́stupný, a to bud přes nástroje s grafickým rozhranı́m nebo přes UNC adresu \\pocitac\fakturydod (předpokládáme, že pracujeme
na počı́tači pocitac), je také připojen komentář prostředku
net share fakturydod /delete
odstranı́ sdı́lený prostředek, ten přestane být přı́stupný
ze sı́tě
net share
NET FILE
(podobně ve Správě počı́tače, položka Sdı́lené složky ï Otevřené soubory) práce se sdı́lenými
otevřenými soubory (soubory, které náš počı́tač nabı́zı́ ke sdı́lenı́ a zrovna s nimi někdo pracuje).
$
vypı́še seznam otevřených sdı́lených souborů s informacı́ (uživatel na sı́ti, který
soubor použı́vá, cesta k souboru, apod.), taky zde zjistı́me ID (identifikačnı́ čı́slo) nasdı́leného souboru
net file 2
vypı́še informace o využı́vánı́ nasdı́leného souboru, jehož ID je 2 (to jsme zjistili
z předchozı́ho výpisu)
net file 2 /close
uzavřeme soubor (se zadaným ID), který někdo otevřel ze sı́tě, tı́m
také soubor odblokujeme (soubor použı́vaný ze sı́tě je uzamčen, blokován proti změnám)
net file
NET SESSION
(podobně ve Správě počı́tače, položka Sdı́lené složky ï Relace) práce s vnějšı́mi připojenı́mi
na náš počı́tač (session neboli relace je navázané připojenı́ mezi našı́m počı́tačem a jiným
počı́tačem v sı́ti)
$
2.1
SPRÁVA SÍTĚ
31
vypı́še seznam počı́tačů, ze kterých jsou navázány relace na náš počı́tač
(včetně dalšı́ch informacı́ – uživatele, jeho operačnı́ systém, počet prostředků, se kterými
na našem počı́tači pracuje a dobu nečinnosti)
net session \\pocitac
podrobnějšı́ informace o relaci navázané ze zadaného počı́tače
net session \\pocitac /delete
ukončenı́ relace (pokud nezadáme název počı́tače, ukončı́
se všechny navázané relace)
net session
NET VIEW
zobrazı́ seznam sdı́lených prostředků na určeném počı́tači v doméně
net
net
net
net
net
net
view
view
view
view
view
view
$
zobrazı́ seznam počı́tačů v doméně
\\pocitac
vypı́še seznam sdı́lených prostředků, které nabı́zı́ daný počı́tač
/domain
vypı́še seznam domén v sı́ti
/domain:ucetni
vypı́še seznam počı́tačů, které jsou v zadané doméně
/network:NW
vypı́še seznam serverů v sı́ti Novell Netware
/network:NW \\pocitac
v sı́ti Novell Netware vypı́še prostředky dostupné na
zadaném počı́tači
NET USE
práce se sdı́lenými prostředky na ostatnı́ch počı́tačı́ch v sı́ti
zobrazı́ existujı́cı́ sı́t’ová připojenı́ (cesta na sı́ti, ale pokud je prostředek namapován
jako logická jednotka s pı́smenem, pak i označenı́ jednotky)
use W: \\pocitac\fakturydod
přiřadı́me pı́smeno W zadanému prostředku ze sı́tě,
od této chvı́le můžeme k tomuto prostředku přistupovat přes W:
use W: \\pocitac\fakturydod /user:uživatel
podobně, ale na cı́lovém počı́tači
budeme k jednotce přistupovat jako zadaný uživatel (vyžaduje zadánı́ hesla), pokud je
cı́lový počı́tač v jiné doméně, musı́me zadat i tuto doménu
use W: \\pocitac\fakturydod /delete
odstranı́me vazbu
use W: /delete
totéž (název prostředku nemusı́me zadávat)
use /persistent:a
momentálně platná připojenı́ budou uložena a zůstanou platná
i po restartu (přı́p. vypnutı́ a dalšı́ch startech) počı́tače
$
net use
net
net
net
net
net
NET COMPUTER
přidá nebo odstranı́ počı́tač z domény
net computer \\pocitac /add
net computer \\pocitac /del
přidá zadaný počı́tač do domény
odstranı́ zadaný počı́tač z domény
Přı́klad 2.6
Předpokládejme, že máme v lokálnı́ sı́ti dva počı́tače – desktop a notebook. Zjistı́me, co je z desktopu
viditelné v lokálnı́ sı́ti:
C:\> net share
Název
sdı́lené
položky
Prostredek
Poznámka
--------------------------------------------------------------------------------------ADMIN$
C:\Windows
Vzdálený správce
C$
C:\
Výchozı́ sdı́lená položka
M
2.1
SPRÁVA SÍTĚ
print$
C:\Windows\system32\spool\drivers
IPC$
themes
P:\zaloha\themes
Users
C:\Users
zaloha
P:\zaloha
EPSON BX620FWD Series
USB001
Zarazeno
EPSON BX620FWD Series(FAX) USB001
Zarazeno
Prı́kaz byl úspešne dokoncen.
32
Ovladace tiskárny
Vzdálený IPC
EPSON BX620FWD Series
EPSON BX620FWD Series (FAX)
U notebooku to bude podobné, jen v seznamu nebude tiskárna, fax ani položka print$, protože
k notebooku nenı́ připojena tiskárna. Ted’ se podı́váme, co je ve skutečnosti vidět z jiného počı́tače.
To můžeme provést dvěma způsoby. Pokud chceme zůstat u téhož počı́tače a jen se na sebe podı́vat
„zvenčı́“, stačı́ použı́t přı́kaz
net view 127.0.0.1
(nebo dosadı́me svou konkrétnı́ IP adresu). To sice funguje, ale bohužel i tehdy, když samotná sı́t’
nenı́ zcela vpořádku a může to vytvořit falešný pocit jistoty, že je vše funkčnı́. Jinou možnostı́ je
sednout si k jinému počı́tači v sı́ti a provést následujı́cı́ postup (začátek je relevantnı́ jen tehdy, pokud
je předem nutné zfunkčnit sdı́lenı́ v lokálnı́ sı́ti).
Povolı́me služby souvisejı́cı́ s lokálnı́ sı́tı́ (předevšı́m Prohledávánı́ počı́tačů, může být třeba
povolit ještě několik dalšı́ch). Počı́tače v lokálnı́ sı́ti by měly být ve stejné pracovnı́ skupině (ověřı́me)
a dále může být problém ve vynucenı́ přı́stupu s heslem (bud’ správně nastavı́me heslo na počı́tačı́ch
nebo tuto možnost vypneme, napřı́klad ve Windows 7 v Centru sı́t’ových připojenı́ a sdı́lenı́ ï Změnit
pokročilé nastavenı́ sdı́lenı́, ve Vistě přı́mo v dotyčném Centru, v XP tato možnost nenı́). Od verze
Vista můžeme povolit přı́stup konkrétnı́m uživatelům a nebo uživateli everyone, který je definován
společně pro celou sı́t’.
Seznam viditelných počı́tačů v lokálnı́ sı́ti bude stejný na obou počı́tačı́ch, pořadı́ je podle abecedy.
C:\> net view
Název serveru
Poznámka
-------------------------------------------------------------------------\\DOMACIPC
\\NOTEBOOK
Prı́kaz byl úspešne dokoncen.
M
Podı́váme se, co konkrétně je viditelné na desktopu (sedı́me u notebooku). Počı́tač můžeme určit
bud’ jeho lokálnı́m názvem (tı́m, který je ve výpisu výše) a nebo jeho IP adresou. Ukážeme si přı́stup
pomocı́ IP adresy (předpokládejme, že jsou použı́vány soukromé IP adresy třı́dy „A“, desktop má
10.0.0.1, notebook 10.0.0.2):
C:\> net view \\10.0.0.1
Sdı́lené prostředky na \\10.0.0.1
Název sdı́lené položky
Typ
Použito jako Komentář
-------------------------------------------------------------------------EPSON BX620FWD Series
Tisk
EPSON BX620FWD Series
EPSON BX620FWD Series (FAX) Tisk
EPSON BX620FWD Series (FAX)
themes
Disk
M
2.1
SPRÁVA SÍTĚ
33
Users
Disk
zaloha
Disk
Přı́kaz byl úspěšně dokončen.
V seznamu je tiskárna, fax a pak tři sdı́lené složky. Všimněte si, že položky z net share začı́najı́cı́
symbolem $ zde nejsou. Můžeme to provést také naopak (na desktopu si vypsat seznam položek
z notebooku):
C:\> net view notebook
Sdı́lené prostredky na notebook
Název sdı́lené položky Typ
Použito jako Komentár
-------------------------------------------------------------------------Public
Disk
Users
Disk
zaloha
Disk
Prı́kaz byl úspešne dokoncen.
M
Zůstaneme na desktopu. Pokud máme přı́slušná přı́stupová oprávněnı́, lze nasdı́lené položky z jiného počı́tače volně využı́vat. Napřı́klad si můžeme vypsat obsah adresáře nasdı́leného na jiném
počı́tači a otevřı́t některý ze souborů ve sdı́leném adresáři:
C:\> dir \\notebook\zaloha
Svazek v jednotce \\notebook\zaloha je DATA.
Sériové cı́slo svazku je 5A37-8E6F.
Výpis adresáre \\notebook\zaloha
18.10.2010
18.10.2010
19.04.2002
18.10.2010
19.04.2000
11.06.2000
M
08:39
<DIR>
.
08:39
<DIR>
..
11:32
378 945 disk6.zip
08:39
<DIR>
nejnovejsi
09:38
8 512 ukazka1.pas
16:59
58 122 ukazka2.pas
Souboru:
2,
Bajtu:
274 065
Adresáru:
3,
Volných bajtu: 9 649 033 216
C:\> notepad \\notebook\zaloha\ukazka1.pas
Pozor, stejným způsobem se dajı́ využı́vat prostředky, které ve výpisu net view nejsou vidět (končı́
symbolem $):
dir \\notebook\ADMIN$
Na notebooku si zkontrolujeme, které položky a soubory využı́vá někdo z jiného počı́tače:
C:\> net file
ID
Cesta
Uživatelské jméno
Počet
uzamčenı́
-------------------------------------------------------------------------57
D:\_pocitac\zaloha\
Guest
0
59
D:\_pocitac\zaloha\ukazka1.pas
Guest
0
Přı́kaz byl úspěšně dokončen.
M
2.1
SPRÁVA SÍTĚ
34
Vidı́me, že někdo přistupoval ke sdı́lenému adresáři a pak také k jednomu souboru. Žádná položka
nenı́ uzamčena (což je normálnı́, protože žádný z použitých přı́kazů uzamčenı́ nepožaduje). V přı́padě, že soubor otevřeme v programu, který soubory uzamyká (napřı́klad ve Wordu), můžeme
zkusit přı́kaz net session a zjistit, ze kterých počı́tačů v sı́ti jsou využı́vány prostředky našeho
počı́tače.
C:\> net session
Počı́tač
Uživatel
Typ klienta
Otevřenı́
Doba nečinnosti
-------------------------------------------------------------------------\\10.0.0.1
Guest
2
00:03:27
Přı́kaz byl úspěšně dokončen.
M
Zjistı́me si údaje pro dotyčný počı́tač, o kterém ted’ vı́me, že využı́vá prostředky našeho počı́tače:
C:\> net session \\10.0.0.1
Uživatelské jméno
Počı́tač
Přihlášenı́ hosta
Typ klienta
Doba relace
Doba nečinnosti
Guest
10.0.0.1
Ne
M
00:04:40
00:03:36
Název sdı́lené položky
Typ
Počet otevřenı́
----------------------------------------------------------------------zaloha
Disk
2
Přı́kaz byl úspěšně dokončen.
Uživatel z cizı́ho počı́tače zřejmě dvakrát přistupoval k nasdı́lenému adresáři, soubor už žádný
otevřený nemá. Všimněte si, že se na náš počı́tač vlastně ani nepřihlašoval, pracuje pod uživatelským
účtem Guest (host). Kdybychom měli zakázán účet hosta, uživatel by takto naše prostředky nemohl
využı́vat.
Úkoly
1. Zobrazte seznam všech prostředků, které jsou z vašeho počı́tače přı́stupny v sı́ti (které máte
nasdı́leny).
2. Na disku, kde máte právo zápisu (předpokládejme D:, může to být i hlouběji v adresářové
struktuře) vytvořte adresář s názvem Pokusný adresář (do něj umı́stěte nějaké nepřı́liš důležité soubory a adresáře). Potom tento adresář zpřı́stupněte na sı́ti pod názvem pokusny.
Zkontrolujte, zda je opravdu dostupný (název svého počı́tače zřejmě znáte, pokud ne, zjistěte
ho). Nakonec zrušte sdı́lenı́ a adresář odstraňte z disku. Rušenı́ můžete odložit na dobu po
provedenı́ následujı́cı́ch úkolů v této posloupnosti.
3. Zjistěte, zda na některém počı́tači v sı́ti nejsou nějaké sdı́lené prostředky (týká se i vašeho
počı́tače). Dále si vyberte některý počı́tač a zobrazte seznam prostředků, které na sı́ti nabı́zı́.
Pokud je některým z těchto prostředků adresář, připojte si ho jako disk pod nějakým vhodným volným pı́smenem a pak si obsah tohoto adresáře prohlédněte v některém souborovém
C
2.1
SPRÁVA SÍTĚ
35
manažerovi (přı́padně Průzkumnı́kovi) s využitı́m takto vytvořeného přı́stupu k sı́t’ovému
disku. Potom připojenı́ zrušte (můžete odložit na dobu po provedenı́ poslednı́ho úkolu v této
posloupnosti).
4. Zjistěte, jestli z některého počı́tače na sı́ti vede relace do vašeho počı́tače (zda někdo zvenčı́
použı́vá prostředky vašeho počı́tače). O zjištěné relaci zjistěte podrobnějšı́ informace (z předchozı́ho výpisu znáte název počı́tače, ze kterého relace vede).
2.1.5
Přı́kaz NET – práce se službami a dalšı́ úlohy
Přı́kaz net má speciálnı́ podpřı́kazy pro práci se službami server a workstation, ale také dalšı́ podpřı́kazy pro práci se službami obecně (předevšı́m spuštěnı́ a zastavenı́ služby z přı́kazového řádku).
NET CONFIG
umožňuje konfigurovat službu Server nebo Workstation (podle dalšı́ho parametru, ta druhá se
v české variantě systému může jmenovat Pracovnı́ stanice)
$
zobrazı́ momentálnı́ konfiguraci služby Workstation (napřı́klad
název počı́tače, doména, a také parametry pro posı́lánı́ dat na sı́t’)
config workstation /charcount:32
zajistı́, aby při shromažd’ovánı́ dat posı́laných
na sı́t’systém vyčkal, dokud data nejsou v uvedeném množstvı́ (zde 32 B)
config server
zobrazı́ momentálnı́ konfiguraci služby Server (narozdı́l od Workstation
se většinou týkajı́ relacı́ přihlášených uživatelů – kolik uživatelů maximálně může být
přihlášeno, kolik souborů může být otevřeno v rámci jedné relace, zda je server skrytý,
apod.)
config server /autodisconnect:10 /hidden:yes
nečinná relace je po 10 minutách nečinnosti ukončena, a také zajišt’ujeme, že nás server „nenı́ vidět“ v seznamu počı́tačů v sı́ti (ale dá se k němu dostat, podle přı́stupových oprávněnı́ uživatelů, když vı́me,
jak se jmenuje)
config server /srvcomment:”Počı́tač v garáži” /hidden:no nastavı́me řetězec,
který se zobrazuje vedle identifikace serveru (napřı́klad také při použitı́ přı́kazu net
view), chceme, aby byl počı́tač běžně viditelný v sı́ti (ovšem to je výchozı́ hodnota, obvykle nenı́ nutné ji měnit)
net config workstation
net
net
net
net
Přı́klad 2.7
Ukážeme si, jak vypadá výpis přı́kazu net config server na desktopu (předpokládejme, že služba
Server je spuštěna, jinak by nebylo možné konfiguraci vypsat).
C:\> net config server
Název serveru
Komentář serveru
\\PC152
PC152
Verze softwaru
Windows 2002
M
2.1
SPRÁVA SÍTĚ
36
Server je aktivnı́ na
NetbiosSmb (000000000000)
NetBT_Tcpip_63B62817-1908-4393-8042-0978A1AC9706 (000ffe5ea237)
Skrytý server
Maximum přihlášených uživatelů
Maximum otevřených souborů na relaci
Trvánı́ nečinné relace (minuty)
Přı́kaz byl úspěšně dokončen.
Ne
10
16384
15
Z výpisu je zřejmé, jak se počı́tač jmenuje, jaký je na něm operačnı́ systém (Windows 2002 znamená
Windows XP), základnı́ údaje o protokolech pro provoz mı́stnı́ sı́tě (NetBIOS, NetBT), u NetBT
vidı́me v lomené závorce ID sı́t’ové karty a v závorce MAC adresu (je bez oddělovačů, ty si musı́me
domyslet). Dále zjistı́me, že server je v sı́ti viditelný, maximálně 10 uživatelů na něm může být
najednou přihlášeno (tj. je schopen vést max. 10 relacı́) a existuje také limit na množstvı́ otevřených
souborů na jednu relaci. Po 15 minutách je neaktivnı́ relace automaticky ukončena.
Tyto hodnoty jsou typické pro desktopovou instalaci a vpodstatě nám nic nebránı́ je změnit.
Na skutečném serveru by stanovené limity byly značně kontraproduktivnı́, serverové varianty
Windows je majı́ stanoveny značně odlišně.
NET STATISTICS
vypı́še veškeré protokolované informace (tj. z protokolů) služby Server nebo Workstation (dalšı́
parametr je workstation nebo server) o počtu přijatých nebo odeslaných dat, navázaná připojenı́, spuštěné relace, úspěšné a neúspěšné operace, chybná zadánı́ hesla, různé typy chyb, atd.
$
vypı́še se statistika služby workstation (kolik dat bylo přeneseno, chyby přenosu, počet navázánı́ spojenı́, relacı́, atd.)
net statistic workstation
NET START
$
spustı́ zadanou službu
net start
zobrazı́ seznam všech služeb, které jsou právě spuštěné
net start ”terminálová služba”
spustı́ službu Terminálová služba (jejı́ spuštěnı́ musı́ být
nastaveno na „Ručně“ nebo „Automaticky“; kdyby byl typ spouštěnı́ služby nastaven na
„Zakázáno“, spuštěnı́ selže)
net start ”indexing service”
spustı́ službu Indexing Service – pokud název obsahuje
mezery, musı́ být uzavřen do uvozovek
net start cisvc
provede totéž (každá služba má kromě „lidského“ dlouhého názvu
v češtině nebo angličtině také krátký univerzálnı́ název bez mezer a diakritiky, tedy
se nemusı́me obtěžovat s uvozovkami)
NET STOP
$
zastavı́ zadanou službu
net stop ”indexing service”
zastavı́ službu Indexing Service
2.1
SPRÁVA SÍTĚ
37
provede totéž (zastavı́ službu Indexing Service), zadali jsme zkrácený název služby, který je stejný ve všech jazykových variantách Windows
net stop cisvc
Úkoly
1. Zjistěte momentálnı́ konfiguraci služeb Workstation a Server.
C
2. Vypište statistiky souvisejı́cı́ se službami Workstation a Server. Zjistěte, zda někdo nezadal
chybné heslo.
3. Vypište seznam spuštěných služeb. Dále si (napřı́klad v nástroji services.msc) vyberte některou službu, která nenı́ spuštěná, ale zároveň jejı́ spuštěnı́ nenı́ zakázáno, a pomocı́ přı́slušného
přı́kazu ji spust’te (nezapomeňte – krátký název). Potom ji ukončete.
Ostatnı́:
NET PRINT
řı́zenı́ tisku po sı́ti – můžeme prohlı́žet a ovládat tiskové úlohy
$
vypı́še tiskové úlohy probı́hajı́cı́ na tiskárně HPLaserJet
na zadaném počı́tači (název tiskárny je vlastně názvem sdı́leného prostředku, který můžeme zjistit napřı́klad přı́kazem net view)
net print \\pocitac 2
vypı́še informace o tiskové úloze č. 2, která probı́há na zadaném
počı́tači (čı́slo úlohy zjistı́me z výpisu předchozı́ho přı́kazu)
net print \\pocitac 2 /delete
odstranı́me zadanou tiskovou úlohu (přı́p. lze pomocı́
jiných parametrů úlohu pouze pozastavit a pak kdykoliv obnovit)
net print \\pocitac\hplaserjet
NET HELPMSG
poskytuje nápovědu k chybovým zprávám Windows (parametrem je čı́slo zprávy)
$
pokud se nám při spouštěnı́ některé služby objevila hláška s čı́slem
chyby 2182, použijeme tento přı́kaz, který nám zobrazı́ podrobnějšı́ komentář, v tomto
přı́padě informace, že jsme se pokusili spustit službu, která je již spuštěna
net helpmsg 2182
Některé zprávy jsou poněkud kurióznı́ – při neúspěšném pokusu o spuštěnı́ jedné ze služeb
můžete být odkázáni na chybu čı́slo 3534, ale po zobrazenı́ přı́slušné informace zjistı́te, že to
znamená „Služba neoznámila chybu.“
NET SEND
pokud je spuštěna služba Messenger, lze zası́lat zprávy jiným uživatelům v sı́ti (při testech je
použı́vánı́ tohoto přı́kazu zakázáno)
NET TIME
synchronizace hodin počı́tače s hodinami jiného počı́tače nebo domény, nebo můžeme zobrazit
aktuálnı́ čas na jiném počı́tači
net time \\CasovyServer
synchronizujeme systémové hodiny s hodinami zadaného ča-
sového serveru
synchronizujeme čas s doménou (také můžeme zadat konkrétnı́ doménu, pokud je jich vı́ce)
net time /domain
2.1
SPRÁVA SÍTĚ
38
zobrazı́ název serveru NTP (Network Time Protocol), který je použı́ván (také lze jiným parametrem určit jeden nebo vı́ce NTP serverů, podle kterých
budou hodiny synchronizovány)
net time /querysntp
Úkoly
1. Prověřte, zda na některém počı́tači v sı́ti nenı́ nasdı́lena tiskárna (využijte přı́kazy, které jste
použı́vali v předchozı́ch úkolech). Některou si vyberte a vypište jejı́ tiskové úlohy. Pokud
nějaké existujı́ (tj. něco je v jejı́ tiskové frontě), zjistěte bližšı́ informace o některé tiskové úloze
(čı́slo úlohy zjistı́te v předchozı́m výpisu tiskových úloh tiskárny).
C
2. Zjistěte, k čemu sloužı́ přı́kazy net pause a net continue. Najděte (třeba v nápovědě)
informaci o tom, co se stane, když prvnı́ z uvedených přı́kazů použijete na službu Server.
3. Zjistěte, co znamená chybová zpráva
• č. 3515 (vypı́še se při použitı́ přı́kazu net group na lokálnı́m počı́tači),
• č. 1058 (vypı́še se při pokusu o spuštěnı́ některých služeb),
• č. 3912 a 3913 (vypı́šou se při nesprávných způsobech zı́skánı́ informacı́ o synchronizaci
hodin).
4. Pokud jste připojeni k sı́ti, pokuste se zjistit, zda jsou systémové hodiny na vašem počı́tači
synchronizovány s některým serverem (může jı́t o server v doméně nebo na internetu, může
nebo nemusı́ to být server s protokolem NTP).
2.1.6
R
NetShell
Přı́kazem NETSH spustı́me textovou konzolovou aplikaci NetShell (Network Services Shell). Tato konzola sloužı́ ke konfiguraci některých částı́ systému většinou souvisejı́cı́ch se sı́tı́. Pracujeme s moduly
(také helper, obvykle dynamické knihovny) a kontexty (sada úloh – přı́kazů pro jednotlivé moduly,
každý kontext může odpovı́dat jednomu modulu, některé kontexty mohou mı́t dalšı́ podkontexty).
Takže se vlastně jedná o jakési společné pracovnı́ a programové prostředı́ pro běh kontextů uložených v dynamicky linkovaných knihovnách, na momentálnı́m vybavenı́ systému těmito knihovnami
záležı́, které kontexty budeme mı́t k dispozici.
To, se kterými kontexty můžeme pracovat, tedy závisı́ na verzi, vybavenosti a nastavenı́ operačnı́ho systému. Velký rozdı́l je zejména mezi Windows XP a Windows 7. Obvykle jsou kromě jiných
dostupné tyto kontexty:
• interface – konfigurace protokolů rodiny TCP/IP (tj. sı́t’ového rozhranı́), má podkontext ip
a přı́padně také ipv6 (pro IP verze 6)
• routing – funkce souvisejı́cı́ se směrovánı́m, konfigurace směrovacı́ch serverů, má tyto podkontexty:
– ip – konfigurace protokolů IP, obsahuje kontexty autodhcp, dnsproxy, igmp, nat, ospf,
relay, rip, routerdiscovery (opět podle názvu poznáme jejich funkci)
– ipx – konfigurace IPX, obsahuje kontexty netbios, rip, sap
P
2.1
SPRÁVA SÍTĚ
39
• ras – konfigurace RAS (Remote Access Server, server vzdáleného přı́stupu), má tyto podkontexty:
– ip, ipx, netbeui, appletalk
– aaaa – práce s databázı́ AAAA (zkratka z Authentication, Authorization, Accounting,
Auditing – prokázánı́ identity, autorizace, práce s účty, audit), která se použı́vá napřı́klad
při autentifikaci na sı́ti
• dhcp – použı́vá se na DHCP serveru ke konfiguraci DHCP (je v serverových variantách Windows), lze napřı́klad přidat nový DHCP server do seznamu autorizovaných serverů
• http (konfigurace protokolu HTTP a HTTPS), ipsec (pracujeme se zásadami a statistikami
protokolu IPSec), atd. pro dalšı́ protokoly
• firewall – od Windows XP výše, konfigurace vestavěného firewallu
• advfirewall – od Visty výše, konfigurace rozšı́řených možnostı́ firewallu
• lan, wlan (wireless), mbn (mobile) – konfigurace ethernetové, bezdrátové a mobilnı́ sı́tě
• přı́padně dalšı́, tento nástroj lze snadno rozšiřovat
Do vybraného kontextu se přepneme zadánı́m jeho názvu (pohybujeme se ve „stromové struktuře“),
do nadřı́zeného kontextu se dostaneme zadánı́m .. (dvě tečky, o úroveň výše).
Pracuje se zde v textovém režimu, použı́váme pouze přı́kazy specifické pro NetShell. Každý
kontext má svou sadu přı́kazů, část je stejná ve všech kontextech, napřı́klad (mnohé přı́kazy se
někdy použı́vajı́ s dalšı́mi parametry)
•
•
•
•
•
•
•
•
help zobrazı́ všechny použitelné přı́kazy, je možné také použı́t symbol ?
exit odchod z netsh, také je možné použı́t přı́kaz bye
show zobrazı́ informace o kontextu
set nastavenı́ konfigurace pro daný kontext
add přidá položku konfigurace do seznamu (skriptu)
delete odstranı́ položku konfigurace
dump zobrazı́ konfiguračnı́ skript, přesměrovánı́m ho můžeme uložit do souboru
exec spustı́ soubor skriptu (obvykle jde o načtenı́ konfigurace, kterou jsme předchozı́m přı́ka-
zem někdy v minulosti uložili do souboru)
Přı́klad 2.8
Přı́kazem netsh spustı́me prostředı́ NetShellu; zobrazı́ se typický prompt
netsh>
(při změně kontextu je promptem momentálnı́ kontext) a dále zadáváme tyto přı́kazy:
routing ?
zobrazı́me nápovědu ke kontextu routing
přesuneme se do kontextu routing, prompt se změnı́ na routing> a můžeme zadávat
přı́kazy patřı́cı́ do vybraného kontextu
routing
show
zobrazı́ se informace o tom, co v tomto kontextu můžeme zjistit
zobrazı́ se seznam základnı́ch přı́kazů typických jen pro tento kontext s informacı́
pro tyto přı́kazy (jakých DLL knihoven se týkajı́ a jejich GUID), přı́kazy jsou ip a ipx
show helper
2.1
SPRÁVA SÍTĚ
40
ip
přesuneme se do kontextu ip uvnitř kontextu routing
show
zobrazı́ se informace o tom, co v tomto kontextu můžeme zjistit (protože jsme v kontextu
routing a v jeho podkontextu ip, jedná se většinou o různé směrovacı́ informace týkajı́cı́ se
protokolu IP)
v předchozı́m výpisu jsme zjistili, že můžeme použı́t tento přı́kaz –
vypı́šeme seznam adres ve směrovacı́ tabulce (ke každé položce IP adresa, brána, MAC adresa,
metrika apod.)
show rtmdestinations
..
přesuneme se o úroveň výše (opustı́me kontext ip, jsme v kontextu routing)
..
přesuneme se o úroveň výše (opustı́me kontext routing)
interface
přesuneme se do kontextu interface
ip
přesuneme se do kontextu ip uvnitř kontextu interface (oba poslednı́ přı́kazy můžeme sjednotit
v jediném přı́kazu, a to interface ip)
show
zobrazı́ se informace o tom, co v tomto kontextu můžeme zjistit (všimněte si, že možnosti
jsou jiné než v kontextu ip uvnitř routing, ted’ jde o informace týkajı́cı́ se rozhranı́ protokolu IP)
show config
show tcpconn
zobrazı́me základnı́ konfiguraci rozhranı́ protokolu IP
zobrazı́ se tabulka existujı́cı́ch připojenı́ přes protokol TCP (TCP connections)2
zobrazı́ se konfigurace rozhranı́ protokolu IP
dump
zobrazı́me nápovědu k přı́kazu, který sloužı́ k obnově konfigurace ze zálohy (načtenı́
skriptu s kontextem)
exec ?
exit
ukončı́me práci v interaktivnı́m rozhranı́ NetShellu
Kterýkoliv z výše uvedených přı́kazů můžeme zadat i mimo prostředı́ NetShellu, napřı́klad:
netsh -c interface show config
zobrazı́ konfiguraci rozhranı́ IP bez nutnosti přechodu do prostředı́ NetShellu (přepı́nač -c sloužı́
k zadánı́ kontextu). Dalšı́ přı́kaz
netsh -c ras aaaa show authserver
zobrazı́ RADIUS server, který se použı́vá k ověřovánı́ identity (pokud ovšem takový server použı́váme, autentizaci lze provádět různými způsoby).
To byla krátká ukázka základnı́ho ovládánı́ NetShellu. V následujı́cı́ch přı́kladech se zaměřı́me na
konkrétnı́ úlohy.
Přı́klad 2.9
Kterýkoliv kontext (jako celek) můžeme zálohovat (záloha se však provádı́ zvenčı́, abychom mohli
přesměrovávat výstup):
netsh -c interface ip dump > kontextinterip.dat
2
Všimněte si, že se v záhlavı́ výpisu (také u některých jiných přı́kazů) objevuje řetězec „MIB-II“. Jedná se o objektovou
databázi, ve které jsou uloženy informace o uzlech v sı́ti. S touto databázı́ pracuje protokol SNMP (pokud použı́váme
správu sı́tě přes TCP/IP) a pokud umı́me k MIB II přistupovat (a máme přı́stupová oprávněnı́), můžeme zı́skat hodně
zajı́mavých informacı́ o sı́ti.
2.1
SPRÁVA SÍTĚ
41
Výsledek je uložen do textového souboru a umı́stěn do pracovnı́ho adresáře, pokud nezadáme cestu.
Tento textový soubor můžeme bud’ pouze zálohovat, nebo exportovat a načı́st na jiném počı́tači,
a nebo pozměnit a načı́st se změnami.
Výsledkem předchozı́ho přı́kazu je textový soubor, který má přibližně tento obsah (na počı́tači
s jednou sı́t’ovou kartou, jejı́ž MAC adresu vidı́me – pozměněnou, IP adresa je přiřazována přes
DHCP):
# ---------------------------------# Konfigurace rozhranı́ protokolu IP
# ---------------------------------pushd interface ip
# Konfigurace protokolu IP rozhranı́ pro ”418DA6F5-8B14-4F21-B6AD-43452BF31CA7”
set address name = ”418DA6F5-8B14-4F21-B6AD-43452BF31CA7” source = dhcp
set dns name = ”418DA6F5-8B14-4F21-B6AD-43452BF31CA7” source = dhcp
set wins name = ”418DA6F5-8B14-4F21-B6AD-43452BF31CA7” source = dhcp
popd
# Konec konfigurace protokolu IP rozhranı́
Přı́kazy pushd a popd sloužı́ k uloženı́ původnı́ho kontextu, načtenı́ nového a opětovném návratu
k původnı́mu kontextu.
Ze zálohy můžeme kontext kdykoliv obnovit (načı́st), a to i zvenčı́:
netsh -c interface ip exec kontextinterip.dat
Protože je přechod do určitého kontextu součástı́ skriptu, lze skript načı́st (spustit) také jinak –
pomocı́ parametru -f:
netsh -f kontextinterip.dat
Přı́klad 2.10
Kdykoliv můžeme zı́skat nápovědu, a to i k syntaxi jednotlivých přı́kazů. Napřı́klad pokud jsme
v kontextu ip uvnitř kontextu interface, lze se zeptat:
show ?
show dns ?
Zjistı́me, že dotaz na nastavenı́ DNS serveru můžeme formulovat jednoduše tako:
show dns
Zjistili jsme, jaké DNS servery jsou nastaveny (může jich být i vı́ce, pokud jde o statické adresy).
Zjistı́me, co lze nastavovat – přı́kaz set sloužı́ k nastavovánı́ existujı́cı́ch vlastnostı́.
set ?
Vybereme si nastavenı́ prostředı́ DNS, ale protože neznáme syntaxi, zeptáme se:
set dns ?
Vypı́še se krátký popis včetně ukázkových přı́kladů. Ted’ už by nám mělo být všechno jasné. Pokud
chceme nastavit statickou adresu DNS serveru, použijeme přı́kaz
set dns ”Připojenı́ mı́stnı́ sı́tě” static 190.52.192.10
(doplnı́me řetězec označenı́ svého rozhranı́ a skutečnou IP adresu DNS serveru).
M
2.1
SPRÁVA SÍTĚ
42
NetShell je součástı́ Windows od verze 2000 (na serverech i desktopech) a různé verze se lišı́ vybavenı́m moduly. Napřı́klad od verze XP přibývá modul (helper) s kontextem firewall.
Přı́klad 2.11
Prohlédneme si konfiguraci firewallu ve Windows XP (pokud máte novějšı́ verzi, přesuňte se k přı́kladu 2.12).
netsh
spustı́me NetShell
firewall
přesun do kontextu firewall, všechny následujı́cı́ přı́kazy provádı́me v tomto kontextu
nejdřı́v si ověřı́me, co vše lze zobrazit
show
show config
show state
zobrazı́me konfiguraci firewallu (je celkem obsáhlá)
zobrazı́ se momentálnı́ stav firewallu, může vypadat takto:
Stav brány firewall:
------------------------------------------------------------------Profil
= Standardnı́
Provoznı́ režim
= Povolit
Režim výjimek
= Povolit
Režim odezvy na vı́cesměrové nebo všesměrové vysı́lánı́ = Povolit
Režim upozorněnı́
= Povolit
Verze zásad skupiny
= Brána Windows Firewall
Režim vzdálené správy
= Zakázat
Porty, které jsou aktuálně otevřeny na všech sı́t’ových rozhranı́ch:
Port
Protokol Verze
Program
------------------------------------------------------------------Na všech sı́t’ových rozhranı́ch nejsou aktuálně otevřeny žádné porty.
zobrazı́ se provoznı́ (operačnı́) režim (porovnejte, co se rozumı́ stavem z předchozı́ho přı́kazu a provoznı́m režimem z tohoto přı́kazu)
show opmode
tı́mto přı́kazem zjistı́me, co vše lze nastavovat přı́kazem set (tj. daná vlastnost už je
definována, ale my ji můžeme změnit)
set ?
set opmode enable
nastavı́me provoznı́ mód na dostupný
show allowedprogram
zobrazı́ aplikace, které majı́ povoleno přistupovat ven do sı́tě
add allowedprogram ?
zajı́má nás, jak lze do seznamu přidat dalšı́ aplikaci
show portopening
zjistı́me porty s nastavenou výjimkou (otevřené)
delete portopening ?
ze seznamu zjistı́me, že je v něm port, který by tam neměl být, tedy nás
zajı́má, jak ho uzavřı́t
show service
exit
vypı́šou se služby přistupujı́cı́ na sı́t’
skončı́me
Od verze Vista tento kontext sice existuje, ale doporučuje se použı́t kontext advfirewall firewall.
M
2.1
SPRÁVA SÍTĚ
43
Přı́klad 2.12
Od verze Vista se s firewallem zacházı́ trochu jinak. Předně se už nerozlišujı́ povolené/zakázané
aplikace, protokoly a porty, ale vše jsou pravidla (rules). Tedy zobrazujeme pravidla, přidáváme
pravidla, odstraňujeme je.
advfirewall firewall
přesuneme se do kontextu advfirewall a hned v tomtéž přı́kazu do jeho
podkontextu firewall
show
ověřı́me, co vše lze zobrazit, zjistı́me, že použitelné je show rule
show rule ?
požádáme o podrobnosti
pokusı́me si nechat vypsat všechna nastavená pravidla, ale seznam je přı́liš
dlouhý, pravidla vypadajı́ nějak takto:
show rule name=all
Název pravidla:
Windows Live Messenger (UPnP-In)
---------------------------------------------------------------------Povoleno:
Ano
Směr:
In
Profily:
Doména,Privátnı́,Veřejná
Seskupenı́:
Windows Live Messenger
LocalIP:
Any
Vzdálená IP adresa:
LocalSubnet
Protokol:
TCP
Mı́stnı́ port:
2869
Vzdálený port:
Any
Funkce Edge traversal:
No
Akce:
Allow
Podobně vypadajı́ i dalšı́ pravidla. Pravidlo je povoleno, směr je „In“, tedy se jedná pravidlo pro
přı́chozı́ provoz (pro odchozı́ by bylo „Out“), jsou stanoveny sı́t’ové profily, pro které pravidlo
platı́, pravidla jsou seskupována (group) pro snazšı́ správu, dále jsou určeny adresy, protokol,
port. Pokud nám nestačı́ konec výpisu (záležı́ na velikosti vyrovnávacı́ paměti Přı́kazového
řádku, kolik údajů bude viditelných), pak musı́me přı́kaz spustit mimo prostředı́ NetShellu
a výstup směrovat do souboru:
netsh advfirewall firewall show rule name=all > d:\vystupfirewall.txt
(ale pak je třeba použı́t editor, který zvládá znakovou sadu Latin2, napřı́klad PSPad (je třeba
nastavit v menu Zobrazit ï Zobrazenı́ znaků MSDOS)
Bohužel musı́me zadat bud’ „all“ nebo konkrétnı́ název pravidla, dále lze filtrovat – omezovat
výpis (ale moc možnostı́ nemáme)
zkonkrétnili jsme dotaz, chceme všechna pravidla, která jsou dynamicky vytvořená, pro přı́chozı́ provoz a veřejnou sı́t’
show rule name=all type=dynamic dir=in profile=public
add rule name=”povolit udp 5000” dir=out protocol=udp localport=5000
action=allow povolili jsme odchozı́ komunikaci na UDP portu 5000
add rule name=”šifrovat 80” protocol=TCP dir=in localport=80
security=authdynenc action=allow takto jsme si vynutili šifrovánı́ přı́chozı́ komuni-
kace na TCP portu 80 (o jaký port se asi tak jedná?)
M
2.1
SPRÁVA SÍTĚ
44
Přı́klad 2.13
Pro notebook, který přenášı́me mezi umı́stěnı́mi se statickou a dynamickou IP adresou, si můžeme
vytvořit dva zástupce nebo dávkové soubory (to se budeme učit později – textové spustitelné
soubory s přı́kazy, které se majı́ provést při spuštěnı́ takového souboru).
Nejdřı́v si v nápovědě ověřı́me formát přı́kazu:
netsh -c interface ip set ?
netsh -c interface ip set address ?
Ted’ už vı́me, které parametry a v jakém pořadı́ máme zadat, tedy vytvořı́me zástupce nebo
dávkové soubory (podle potřeby) s následujı́cı́mi přı́kazy. Prvnı́ z nich je určen ke spuštěnı́ na
umı́stěnı́ se statickou adresou:
netsh -c interface ip set address name=”Připojenı́ mı́stni sı́tě”
source=static addr=123.456.0.5 mask=255.255.0.0 gateway=123.456.0.1
gwmetric=1
Celý přı́kaz by měl být na jednom řádku. Takto nastavı́me statickou IP adresu, masku podsı́tě, bránu,
doplnı́me vlastnı́ skutečné údaje.
Dalšı́ je pro umı́stěnı́, na kterém použı́váme dynamickou adresu zı́skanou od DHCP serveru:
netsh interface ip set address name=”Připojenı́ mı́stni sı́tě” source=dhcp
Nastavı́me dynamickou IP adresu, která bude zı́skávána z DHCP.
Vytvořı́me dva zástupce na pracovnı́ ploše – jednoho pro statickou adresu a druhého pro dynamickou adresu, do přı́kazového řádku zástupců napı́šeme výše uvedené přı́kazy a oba zástupce
vhodně pojmenujeme. Pak stačı́ jen poklepat na jednoho ze zástupců.
Prostředı́ NetShell je svými možnostmi přizpůsobeno práci v sı́ti. Počı́tá se přirozeně i s tı́m, že
přı́kaz (prostředı́) budeme chtı́t využı́t ke vzdálené správě počı́tačů. Přesun na jiný počı́tač můžeme
provést bud’ při spouštěnı́ přı́kazu netsh přepı́načem -r, a nebo přı́mo v interaktivnı́m prostředı́
přı́kazem set:
netsh -r počı́tač
umožnı́ pracovat v interaktivnı́m prostředı́ vzdáleně na jiném počı́tači
tento přepı́nač můžeme použı́t v neinteraktivnı́ formě přı́kazu, když
chceme provést některou jednorázovou akci na jiném počı́tači (přidáme jakýkoliv přı́kaz platný
v NetShellu)
netsh -r počı́tač přı́kaz
set machine počı́tač
použité v interaktivnı́m režimu v prostředı́ NetShellu sloužı́ k „přesou-
vánı́ “ mezi počı́tači
set machine
pokud nezadáme cı́lový počı́tač, přesuneme se na náš, lokálnı́, počı́tač
Úkoly
1. Spust’te prostředı́ NetShell a vyzkoušejte z přı́kladu 2.8 vše, co půjde (na co máte přı́stupová
oprávněnı́). Ke každému přı́kazu, který vyzkoušı́te, zobrazte nápovědu, abyste měli přehled
o možnostech přı́kazu.
2. Vypište seznam cı́lů ve směrovacı́ tabulce vašeho počı́tače.
3. Vypište tabulku existujı́cı́ch spojenı́ přes protokol TCP.
C
2.2
SLOŽENÉ PŘÍKAZY
45
4. Zjistěte, zda se pro autentifikaci použı́vá nějaký RADIUS server (pokud ano, zjistěte, který).
5. Přesuňte se do kteréhokoliv kontextu (raději hlouběji ve struktuře kontextů) a vypište jeho
konfiguraci. Potom opust’te prostředı́ NetShell a proved’te totéž, výstup přesměrujte do souboru vypisnetsh.dmp (umı́stěte tam, kde máte právo zápisu). Tento soubor si pak prohlédněte
v některém textovém editoru.
6. Pokud pracujete na počı́tači s Windows XP nebo vyššı́mi, vypište konfiguraci firewallu. Zjistěte,
které aplikace majı́ povoleno pracovat se sı́tı́, které služby naslouchajı́ na portech a které porty
jsou otevřené.
Můžete vyzkoušet výpis čehokoliv, co pro tento kontext lze vypsat. U otevřených portů a povolených aplikacı́ se tytéž informace pokuste zjistit i v grafickém prostředı́.
7. Podle přı́kladu 2.13 zobrazte nápovědu pro přı́pad, že chcete interaktivně za běhu systému
nastavit způsob zı́skánı́ IP adresy a dalšı́ch potřebných parametrů. Zkontrolujte, které parametry jsou povinné a které se nemusejı́ nebo za určitých okolnostı́ nemohou zadávat. Pokuste
se tento přı́kaz sestavit podle nastavenı́ vašeho počı́tače.
8. Sestavte dvojici přı́kazů, která bude určovat parametry DNS serveru taktéž podle umı́stěnı́
počı́tače, podobně jako tomu bylo v přı́kladu 2.13 (jedná se o stejný kontext, jen nenastavujete
adresu, ale dns – použijte nápovědu).
2.2
2.2.1
R
R
Složené přı́kazy
Propojenı́ přı́kazů a podmı́něné vyhodnocovánı́
Pokud chceme na jeden řádek umı́stit vı́ce přı́kazů, musı́me je spojit znakem &. Jednou z možnostı́
použitı́ tohoto zřetězenı́ přı́kazů je v Zástupcı́ch, také se použı́vá ve složených přı́kazech (seznámı́me
se s nimi v následujı́cı́ podsekci).
$
Přı́klad 2.14
REM vyčistı́me obrazovku, vypı́šeme hlášku, prázdný řádek,
REM
pak obsah pracovnı́ho adresáře:
CLS & ECHO Výpis pracovnı́ho adresáře: & ECHO. & DIR
Dalšı́ způsob propojenı́ přı́kazů už známe – rouru:
Přı́klad 2.15
REM chceme zjistit údaje týkajı́cı́ se hesla uživatele novak:
net user novak | find /i ”heslo”
(vypı́šou se údaje o tom, kdy bylo heslo naposledy změněno, kdy vypršı́, zda uživatel smı́ měnit
heslo, apod.)
O
2.2
SLOŽENÉ PŘÍKAZY
46
Přı́klad 2.16
Vytřı́dı́me soubory a adresáře podle atributů. Přı́kaz vypisuje postupně všechny tři skupiny souborů
a adresářů.
ECHO Skryté: & DIR /a:h & ECHO Systémové: & DIR /a:s & ECHO Pro čtenı́: & DIR /a:r
Z unixových systémů byla do Windows řady NT převzata možnost využitı́ výše uvedených symbolů
pro podmı́něné vyhodnocovánı́. Pokud symboly & a | zdvojı́me, budou se chovat trochu jinak.
• dvojsymbol && znamená konjunkci:
– pokud předchozı́ přı́kaz skončil s úspěchem (true), bude vyhodnocen i následujı́cı́ přı́kaz,
– pokud předchozı́ přı́kaz skončil s neúspěchem (false), nebude následujı́cı́ přı́kaz vyhodnocován (protože false v konjunkci s čı́mkoliv znamená vždy false v celém výrazu),
• dvojsymbol || znamená disjunkci (mezi znaky nesmı́ být mezera):
– pokud předchozı́ přı́kaz skončil s úspěchem (true), dalšı́ přı́kaz již nebude vyhodnocován
(protože jedno true v disjunkci znamená true v celém výrazu),
– pokud předchozı́ přı́kaz skončil s neúspěchem (false), bude vyhodnocen i dalšı́ přı́kaz.
Oba operátory můžeme také kombinovat. Typické použitı́ je vypisovánı́ hlášenı́ při správném nebo
nesprávném provedenı́ prvnı́ho přı́kazu v pořadı́.
Přı́klad 2.17
Chceme vypsat hlášenı́ při chybě:
net start fax || ECHO Službu Fax Service se nepodařilo spustit.
Chceme vypsat hlášenı́ při bezchybném provedenı́ přı́kazu:
net start fax && ECHO Služba Fax Service byla spuštěna.
Chceme obojı́:
ECHO Spouštı́m službu Fax Service:
net start fax && ECHO Služba spuštěna. || ECHO Službu nelze spustit.
Přı́klad 2.18
Upravı́me přı́kaz z přı́kladu 2.16. Protože ted’ už přı́kaz bude velmi dlouhý a nevejde se na celý
řádek, použijeme jeden z mála způsobů, jak složený přı́kaz rozdělit do vı́ce řádků, závorky (mezi
závorkami může být symbol konce řádku):
ECHO Skryté: & dir /b /a:h 2>nul && (
ECHO Systémové: & dir /b /a:s 2>nul ) && (
ECHO Pro čtenı́: & dir /b /a:r 2>nul )
Pokud jsou v pracovnı́m adresáři všechny tři typy vypisovaných souborů (předevšı́m prvnı́ dva
– skryté a systémové), vypı́šou se všechny tři typy (bez záhlavı́ a zápatı́, pouze seznam souborů
a adresářů). Chybový výstup nenı́ vypisován.
P
2.2
SLOŽENÉ PŘÍKAZY
47
Jestliže však v pracovnı́m adresáři nejsou žádné skryté nebo systémové soubory, přı́kaz nebude dokončen. Můžeme vyzkoušet napřı́klad v kořenovém adresáři systémového disku (tam jsou
všechny tři typy) a v adresáři pro dokumenty uživatele (tam nejsou žádné skryté ani systémové).
Bohužel se vypı́še prvnı́ řetězec „Skryté:“, tomu se přı́padně dá předejı́t použitı́m přı́kazů, které se
naučı́me na následujı́cı́ch stránkách.
Přı́klad 2.19
Porovnáme tyto dva přı́kazy:
net user neexistujici | ECHO Neexistujı́cı́ uživatel
net user neexistujici || ECHO Neexistujı́cı́ uživatel
Prvnı́ přı́kaz je samozřejmě nesmyslný, hláška se vypı́še i při úspěšném vypsánı́ údajů o uživateli,
kdežto druhý přı́kaz vypı́še hlášku pouze při chybě (uživatel neexistuje). Zajı́mavé je však to,
v jakém pořadı́ se vypisujı́ výstupy přı́kazů. V prvnı́m přı́padě se nejdřı́v objevı́ výstup ECHO a pak
až chybové hlášenı́ NET, v druhém přı́padě právě naopak. Je to z toho důvodu, že v prvnı́m přı́padě
se chybový kód vytvářı́ pro řádek jako celek.
Pokud chceme tuto chybovou hlášku použı́t jako výchozı́, můžeme přı́kaz poupravit:
net user neexistujici 2>nul || ECHO Neexistujı́cı́ uživatel
Přı́klad 2.20
Chceme ukončit dávkový soubor při výskytu chyby a zároveň do proměnné errorlevel uložit
čı́slo, ze kterého by bylo možné poznat, jaká chyba nastala.
@echo off
...
dir /b 2>nul || exit /B 1
copy *.txt || exit /B 2
Pokud došlo k chybě u přı́kazu dir, v proměnné errorlevel bude hodnota 1, jestliže chyba nastala
v dalšı́m přı́kazu, bude v errorlevel hodnota 2, atd. Když nedojde k žádné chybě, hodnota
errorlevel bude obsahovat 0.
Pokud budeme chtı́t i něco vypsat (nebo provést jiný přı́kaz), můžeme přı́kazy zřetězit:
dir /b 2>nul || echo Nastala chyba & exit /B 1
Úkoly
1. Přı́kaz dir je jednı́m z přı́kazů použı́vajı́cı́ch proměnnou errorlevel pro uloženı́ typu chyby.
Sestavte přı́kaz, který v přı́padě chyby vypı́še hodnotu proměnné errorlevel (použijte podmı́něné propojenı́ přı́kazů, výpis proměnné errorlevel proved’te pomocı́ echo).
2. Sestavte přı́kaz, který bud’ vypı́še všechny skryté soubory a podadresáře v pracovnı́m adresáři,
a nebo (když tam žádné nejsou) hlášenı́, že v zadaném adresáři žádné skryté soubory nejsou.
Můžete využı́t postup z přı́kladu 2.18.
C
2.2
SLOŽENÉ PŘÍKAZY
48
3. Přı́kaz z předchozı́ho úkolu obohat’te – v přı́padě, že ve výpisu skrytých souborů a podadresářů
bude alespoň jedna položka (tj. skončı́ úspěchem, bez chyby), pro porovnánı́ spust’te výpis
obsahu pracovnı́ho adresáře bez dalšı́ch parametrů.
4. Zjistěte, jaká hodnota se objevı́ v proměnné errorlevel, když se pokusı́te vypsat sdı́lené
prostředky na (jiném) počı́tači v sı́ti, který neexistuje (pro název počı́tače použijte sice správnou
syntaxi, ale nesmyslný název počı́tače, třeba \\ABC).
2.2.2
Podmı́něný přı́kaz
Přı́kaz IF použı́váme v dávkových souborech k větvenı́ programu. Existuje ve vı́ce variantách:
IF EXIST
testujeme, zda existuje soubor
IF EXIST soubor přı́kaz
pokud existuje uvedený soubor, provede zadaný přı́kaz
IF EXIST dopis.txt TYPE dopis.txt | MORE
pokud existuje dopis.txt, bude vypsán,
$
a to po stránkách
IF NOT EXIST dopis.txt ECHO soubor dopis.txt neexistuje
pokud zadaný soubor
neexistuje, vypı́še se chybové hlášenı́
IF EXIST dopis.txt (TYPE dopis.txt) ELSE ECHO soubor neexistuje
pokud existuje soubor dopis.txt, bude vypsán, jinak se vypı́še chybové hlášenı́; všimněte si, že přı́kaz před else je uzavřen do závorek, protože obsahuje mezeru (jinak by
else bylo považováno za parametr přı́kazu z prvnı́ větve, nebylo by nalezeno)
IF DEFINED
zjistı́, jestli je definovaná zadaná proměnná
IF DEFINED userprofile CD /D %userprofile%
pokud je definována proměnná userprofile, přesuneme se pomocı́ nı́ do uživatelského profilu (parametr /D změnı́ nejen
pracovnı́ adresář, ale i pracovnı́ disk, viz nápovědu přı́kazu CD)
IF DEFINED date ECHO %date%
pokud je definována proměnná date, vypı́še jejı́ hodnotu (přı́kaz if defined je jediným přı́kazem, který dokáže pracovat s dynamickými
$
proměnnými i bez jejich obklopenı́ symboly %)
přı́kaz přesunu do adresáře uloženého v proměnné bude proveden jen tehdy, pokud proměnná existuje
IF NOT DEFINED cesta set cesta=%cd%
pokud nenı́ definována proměnná cesta, vytvořı́me ji a inicializujeme na cestu k pracovnı́mu adresáři
IF DEFINED vlastni_cesta CD %vlastni_cesta%
IF ERRORLEVEL
testuje, zda se proměnná errorlevel rovná danému čı́slu; do proměnné errorlevel ukládajı́ programy čı́slo určujı́cı́ způsob jejich ukončenı́ (0 znamená OK, vyššı́ čı́slo některý druh
ukončenı́ s chybou), tento přı́kaz se často kombinuje s přı́kazem skoku a při testovánı́ různých
hodnot naskládáme vı́c přı́kazů if errorlevel pod sebou
pokud je v errorlevel uložena hodnota většı́ nebo rovna
zadanému čı́slu, provede se přı́kaz a zároveň se proměnná vynuluje
IF ERRORLEVEL čı́slo přı́kaz
$
2.2
SLOŽENÉ PŘÍKAZY
49
pokud poslednı́ spuštěný program vrátil hodnotu 2 nebo
vyššı́, vyhodnotı́ podmı́nku jako true (provede odskok na dané návěštı́ a vynuluje proměnnou errorlevel), jinak false (odskok neprovede a pokračuje následujı́cı́m přı́kazem)
IF ERRORLEVEL 1 GOTO :NAV1
podobně – pokud naposledy spuštěný program skončil
s hodnotou 1 nebo vyššı́, provede odskok a vynuluje errorlevel, jinak přı́kaz nic neprovede a pokračujeme dále
IF ERRORLEVEL 1 exit /B 1
předáme chybový kód o úroveň výše (dávkový soubor, ve
kterém pracujeme, bude ukončen s chybovým kódem 1)
IF ERRORLEVEL 2 GOTO :NAV2
IF op1 OPERÁTOR op2
porovná řetězce nebo čı́sla (řetězce by měly být v uvozovkách) podle zadaného operátoru.
Možné operátory jsou v tabulce 2.1 (pokud jsou oba operandy čı́sla, je s nimi také vnitřně
zacházeno jako s čı́sly)
Operátor
Význam
Operátor
Význam
==
rovná se (pro řetězce)
rovná se (pro čı́sla)
nerovná se
LSS
menšı́ než
menšı́ nebo rovno
většı́ než
většı́ nebo rovno
EQU
NEQ
LEQ
GTR
GEQ
Tabulka 2.1: Operátory pro přı́kaz IF
pokud prvnı́ parametr dávkového souboru obsahujı́cı́ho
tento přı́kaz je prázdný řetězec (tj. nebyl zadán, v tomto přı́padě nebyl zadán žádný
parametr kromě samotného názvu souboru), pak vytvořı́me nový adresář
IF ”%1” == ”” (MD novy_adr) ELSE MD %1
podobně jako předchozı́, ale pokud soubor
neexistuje, provede se větev else
IF NOT ”%prom%”==”%1” ECHO nerovná se
pro porovnávánı́ řetězců použı́váme jen zdvojené rovnı́tko, jestliže chceme testovat „nerovná se“, použijeme klı́čové slovo not
IF %prom% GEQ 0 (ECHO nezáporné) ELSE ECHO záporné
zjistı́, jestli je hodnota proměnné většı́ nebo rovna nule
IF ”%1” == ”” MD novy_adr
Nesmı́me zapomenout, že pokud je v proměnné errorlevel čı́slo většı́ nebo rovno uvedenému
čı́slu (testovánı́ dopadne s hodnotou true), proměnná se vynuluje, proto tyto řádky nesmı́me vyměnit,
testovánı́ začı́ná od nejvyššı́ho čı́sla, které nás zajı́má.
Přı́klad 2.21
Chceme v dávkovém souboru se souborem provést postupně několik operacı́, ale jen pokud existuje.
IF EXIST ab.txt (
ECHO Soubor ab.txt: & TYPE ab.txt & DEL ab.txt & GOTO :hotovo )
ECHO Soubor ab.txt neexistuje
:hotovo
Pokud zadaný soubor existuje, vypı́še se o tom hláška, soubor je vypsán a následně smazán, pokud
neexistuje, pouze se o tom vypı́še hláška na obrazovku)
$
2.2
SLOŽENÉ PŘÍKAZY
50
Přı́klad 2.22
Následujı́cı́ úseky kódu z dávkového souboru provedou totéž – načtou od uživatele vstup, a pokud je
to prázdný řetězec, vypı́šou hodnotu proměnné errorlevel. Mimo dávkový soubor bude fungovat
alespoň prvnı́ možnost.
1. set /p vypis=”Zadej řetězec: ” || ECHO Errorlevel = %errorlevel%
2. set /p vypis=”Zadej řetězec: ”
if errorlevel 1 ECHO Errorlevel = %errorlevel%
3. set /p vypis=”Zadej řetězec: ”
if %vypis%==”” ECHO Errorlevel = %errorlevel%
Úkoly
1. Vyzkoušejte výše uvedené přı́klady (pokud to jde). Vytvořte si dvě vlastnı́ proměnné, uložte
do nich různá čı́sla a vyzkoušejte také porovnávánı́ čı́selných proměnných.
C
2. Na stránce http://ss64.com/nt/robocopy-exit.html si všimněte využitı́ testovánı́ chybových kódů
(proměnná errorlevel u přı́kazu robocopy. Jsou zde uvedeny přı́mo úseky z dávkových
souborů využı́vajı́cı́ch k zálohovánı́ přı́kaz robocopy.
3. Vytvořte dávkový soubor, který bude zkoušet sčı́tánı́. Proměnná random vracı́ hodnotu v rozmezı́ 0–32 767, což je poměrně hodně, tedy v přı́kazech generujı́cı́ch operandy upravte maximálnı́ hodnotu napřı́klad pomocı́ operace dělenı́ (aby sčı́tánı́ bylo proveditelné rychle zpaměti).
R
Cyklus implementujte pomocı́ přı́kazu goto (zeptejte se, zda chce uživatel pokračovat, když
ne, proved’te skok na konec souboru). V cyklu do proměnných vygenerujte dvě náhodná čı́sla
z vhodného intervalu, vypište „prvnı́ čı́slo + druhé čı́slo=“ a očekávejte výsledek. Ten pak
otestujte a vypište hodnocenı́.
2.2.3
Cyklus přes množinu
V Přı́kazovém řádku a v dávkovém souboru můžeme použı́t přı́kaz FOR s množinami řetězců.
Zadáváme vždy proměnnou, přes kterou probı́há cyklus, množinu, ze které jsou brány řetězce (lze
použı́t i zástupné znaky) a přı́kaz, který se má opakovaně provést. Do proměnné jsou postupně
dosazovány všechny prvky množiny.
Před proměnnou pı́šeme
• jeden symbol procenta %, pokud přı́kaz zadáváme přı́mo na Přı́kazovém řádku,
• dva symboly procenta %%, pokud přı́kaz pı́šeme do dávkového souboru (aby nedošlo k záměně s jinými vnitřnı́mi proměnnými, které předcházı́ jeden symbol %),
• dalšı́ symbol procenta % přidáváme ve vnořeném cyklu (tj. pokud máme v dávkovém souboru
cyklus for vnořený v jiném cyklu for, vnitřnı́ proměnná vnitřnı́ho cyklu for bude mı́t tři
symboly procenta, atd.).
P
2.2
SLOŽENÉ PŘÍKAZY
51
smažeme všechny soubory s přı́ponou BAT, COM
a EXE v pracovnı́m adresáři (použito přı́mo na Přı́kazovém řádku)
FOR %C IN (*.BAT *.COM *.EXE) DO DEL %C
FOR %%C IN (*.BAT *.COM *.EXE) DO DEL %%C
totéž (použito v dávkovém souboru)
postupně vypisuje názvy
všech souborů s přı́ponou TXT v pracovnı́m adresáři a v podadresáři Kopie od každého vytvořı́
kopii. Můžeme pracovat samozřejmě také s adresáři, nejen se soubory (použito v dávkovém
souboru)
FOR %%a IN (*.TXT) DO ECHO %%a & COPY ”%%a” ”Kopie\%%a”
Přı́klad 2.23
Množina nemusı́ nutně obsahovat jen názvy souborů. Pokud uvádı́me jmenovitě vı́ce položek,
oddělı́me je čárkou nebo jen mezerou. Sestavı́me přı́kaz, který postupně vypı́še čı́sla od 1 do 4:
for %i in (1 2 3 4) do @echo %i
Poznámka: U přı́kazu for bychom si měli dávat pozor předevšı́m na to, že pokud přı́kaz v těle
ovlivňuje množinu, nad kterou celý přı́kaz pracuje, může se stát, že výpočet půjde do nekonečna.
Kromě znalosti důležité klávesové zkratky Ctrl+C bychom proto měli vždy dbát o to, aby v takovém
přı́padě byl výstup vnořeného přı́kazu směrován jinam (třeba do podadresáře).
E
Přı́klad 2.24
Porovnáme funkčnost těchto dvou přı́kazů:
for %i in (*.doc *.txt) do copy %i Zaloha_%i
for %i in (*.doc *.txt) do copy %i Zaloha\%i
Prvnı́ přı́kaz je chybný, způsobı́ zacyklenı́. Je sice užitečné, že všechny soubory se zadanými přı́ponami budou zálohovány, ale protože jsou vytvořené zálohy uloženy v témže adresáři, začnou
se postupně vytvářet i zálohy záloh, atd., napřı́klad pro soubor soub.txt vzniknou postupně tyto
soubory:
Zaloha_soub.txt
Zaloha_Zaloha_soub.txt
Zaloha_Zaloha_Zaloha_soub.txt
atd.
Oproti tomu druhý uvedený přı́kaz funguje dobře, protože vytvářı́ nové soubory v podadresáři.
Přı́klad 2.25
Budeme počı́tat zkopı́rované soubory, následujı́cı́ kód je v dávkovém souboru:
@echo off
set pocet=0
echo Kopı́rujeme všechny soubory s přı́ponou ini:
M
2.2
SLOŽENÉ PŘÍKAZY
52
set /p adresar=”Zadejte cı́lový adresář s celou cestou: ”
if not exist ”%adresar%” goto :neexistujeadr
for %%i in (*.ini) do (
xcopy /s /q %%i ”%adresar%”
set /a pocet+=1
)
goto :ok
:neexistujeadr
echo Zadaný adresář %adresar% neexistuje.
goto :konec
:ok
Echo Kopı́rovánı́ dokončeno, bylo zkopı́rováno %pocet% souborů.
:konec
Přı́kaz FOR má ve skutečnosti mnohem širšı́ možnosti použitı́ (zjistı́me pomocı́ for /? nebo v grafické
nápovědě). Najdeme tady několik různých přepı́načů, a také modifikátory, kterými se dostaneme
k částem řetězce dosazeného za proměnnou.
Přı́klad 2.26
Napřı́klad u některých konverznı́ch programů je třeba zadat tentýž název souboru, jako původnı́,
ale s jinou přı́ponou, zde vidı́me použitı́ přı́mo na přı́kazovém řádku:
for %i in (*.png) do convert %i %~ni.eps
(program convert je součástı́ balı́ku programů Image Magick) – uvedený přı́kaz provede konverzi
všech souborů s přı́ponou PNG v pracovnı́m adresáři na stejně pojmenované soubory, ale s přı́ponou
(a také typem) EPS, modifikátor ~n způsobı́ u proměnné odtrženı́ přı́pony včetně tečky, a tedy řetězec
%~ni vrátı́ tentýž název souboru jako %i, ale bez přı́pony.
Úkoly
1. Vytvořte dávkový soubor, který postupně všechny své parametry vypı́še na samostatné řádky,
pokud žádný parametr nenı́ zadán, vypı́še pouze řetězec ”Žádný parametr nebyl zadán”
(využijte přı́kazy IF, GOTO, FOR, SHIFT, ECHO, neexistujı́cı́ parametr zjistı́te tak, že přı́slušná
proměnná je prázdný řetězec).
2. Vytvořte dávkový soubor, který vypı́še obsah zadaného adresáře (tento adresář bude zadán
jako prvnı́ parametr souboru). Dále se zeptá, které soubory má vypsat, načte řetězec zadaný
uživatelem (přı́kaz SET /p) a použije v přı́kazu FOR s přı́kazem DIR.
3. V přı́kazu uvedeném v přı́kladu 2.23 odstraňte symbol @ před echo. Jaký vliv má uvedenı́ či
neuvedenı́ tohoto symbolu?
C
2.3
HROMADNÉ ZPRACOVÁNÍ DAT
2.2.4
53
Cyklus přes interval
Pokud chceme použı́t cyklus for tak, jak je obvykle použı́ván v programovacı́ch jazycı́ch, máme
k dispozici přepı́nač /L. Základnı́ syntaxe je:
for /L %prom in (začátek,krok,konec) do přı́kaz
Je to podobné, jako když napřı́klad v Pascalu napı́šeme přı́kaz
for prom=začátek to konec do
Navı́c máme možnost určit délku kroku jinou než 1, to znamená, že proměnná prom bude v každém
dalšı́m volánı́ zvýšena o zadanou hodnotu.
Přı́klad 2.27
Vypı́šeme lichá čı́sla z intervalu od 1 do 20:
for /L %i in (1,2,20) do @echo %i
Vypočteme faktoriál zadaného čı́sla:
set /p konec=”Zadej čı́slo: ”
set vypocet=1
for /L %i in (1,1,%konec%) do @set /a ”vypocet*=%i” & echo.
Úkoly
1. Na Přı́kazovém řádku vypočtěte aritmetický průměr ze zadaného počtu zadaných čı́sel (využijte postup z přı́kladu 2.27).
C
2. Podobně vypište řadu Fibbonacciho čı́sel o délce zadané uživatelem.
2.3
Hromadné zpracovánı́ dat
Přepı́nač /F přı́kazu for můžeme použı́t ke zpracovánı́ textového souboru. To využijeme napřı́klad
tehdy, když do souboru uložı́me posloupnost záznamů, na které chceme postupně uplatnit některý
přı́kaz.
Přı́klad 2.28
Předpokládejme, že máme k dispozici CSV soubor (tj. textový soubor, ve kterém je uložena tabulka,
buňky na řádku odděleny střednı́kem, lze otevřı́t v jednoduchém textovém editoru nebo v tabulkových editorech), ve kterém jsou uloženy údaje o objednávkách různých zařı́zenı́ – předpokládejme,
že jde o notebooky. Sloupce majı́ tento význam (nejsou v souboru přı́mo popsány, najdeme tam jen
samotná data o objednávkách):
1. identifikátor, každý řádek má jiný (můžeme brát jako „čı́slovánı́ řádků“)
2. čı́slo objednávky; řádky vztahujı́cı́ se ke stejné objednávce zde majı́ stejnou hodnotu
P
2.3
3.
4.
5.
6.
7.
HROMADNÉ ZPRACOVÁNÍ DAT
54
název zařı́zenı́
počet objednaných kusů tohoto zařı́zenı́
dodavatel
datum objednávky
komentář k zařı́zenı́
Chceme zjistit seznam zařı́zenı́, která jsou součástı́ objednávky čı́slo 152734, vypı́šeme název zařı́zenı́
a počet objednaných kusů:
for /F ”delims=; tokens=2-4” %a in (objednavky.csv) do (
if ”%a”==”152734” (echo %b: %c kusů ))
Vidı́me, že hned za přepı́načem /F je upřesněnı́ formátu načı́taného souboru (zadáváme, které části
souboru má přı́kaz brát v úvazu a jakým způsobem). Zadali jsme oddělovač (střednı́k) a pak sloupce,
které má přı́kaz „vidět“ (tj. od druhého do čtvrtého sloupce, prvnı́ nás nezajı́má).
Následuje proměnná %a, která bude přiřazena prvnı́mu z „viditelných“ sloupců, tedy vlastně
druhému sloupci ze souboru. Následujı́cı́ sloupec zpracovávaného řádku (třetı́ ze souboru) bude
přı́stupný v proměnné %b, dalšı́ v proměnné %c.
Konstrukce in (objednavky.csv) určuje soubor, který má být zpracován, musı́ následovat
klı́čové slovo do a pak přı́kaz, který se má provést pro každý nalezený řádek zvlášt’. Vnitřnı́m
přı́kazem je přı́kaz if, který otestuje, zda daný řádek chceme (patřı́ k objednávce, která nás zajı́má),
a když ano, vypı́še požadované údaje z tohoto řádku (název zařı́zenı́ a počet objednaných kusů).
Všimněte si, že přı́kaz zabı́rá dva řádky. To nenı́ problém, jen je třeba dbát na to, abychom na
konec řádku, která má mı́t pokračovánı́, napsali levou závorku (pak Přı́kazový řádek automaticky
počı́tá s tı́m, že přı́kaz nenı́ kompletnı́ a pokračuje na dalšı́m řádku).
Přı́klad 2.29
Opět budeme prohledávat soubor, který je popsán v předchozı́m přı́kladu. Zajı́majı́ nás dodavatelé
dodávajı́cı́ notebooky Lenovo řady IdeaPad. Vı́me, že součástı́ názvu výrobku bude řetězec „IdeaPad“,
tedy pro filtrovánı́ použijeme přı́kaz find (v podmı́nce přı́kazu if se zjišt’uje pouze rovnost či
nerovnost).
for /F ”delims=; tokens=2-5” %a in (objednavky.csv) do (
echo objednavka: %a, dodavatel: %d, zarizeni: %b | find /i ”ideapad” )
Vypı́šou se záznamy obsahujı́cı́ hledaný řetězec, ke každému nejdřı́v čı́slo objednávky, název dodavatele a pak název zařı́zenı́.
Úlohu bychom také mohli řešit přı́kazem findstr použitým přı́mo na soubor objednavky.csv,
ale výše uvedeným způsobem si vybereme, které části řádku budou vypsány a které majı́ být
ignorovány.
2.3
HROMADNÉ ZPRACOVÁNÍ DAT
55
Přı́klad 2.30
Při použitı́ přı́kazu for v dávkovém souboru je třeba k proměnným přidat druhý symbol %, abychom
odlišili tyto „vnitřnı́“ proměnné od jiných typů proměnných, předevšı́m parametrů dávkového
souboru.
Předpokládejme, že v evidenci testů do různých předmětů na některé škole máme tyto tři
soubory:
• tests.csv obsahujı́cı́ seznamy čı́sel otázek ke každému testu, význam jednotlivých sloupců
v souboru je následujı́cı́:
1.
2.
3.
4.
čı́slo (identifikátor) testu, každý test má jiné
čı́slo (identifikátor) předmětu, do něhož test patřı́
seznam čı́sel otázek tohoto testu (čı́sla jsou oddělena mezerami)
komentář k testu
• questions.csv obsahujı́cı́ texty otázek:
1. čı́slo (identifikátor) otázky, v tabulce tests.scv tyto identifikátory najdeme v 3. sloupci
2. text otázky
• answers.csv obsahujı́cı́ seznam odpovědı́ k otázkám, studenti majı́ označovat ty odpovědi,
které jsou správné:
1. čı́slo (identifikátor) odpovědi
2. čı́slo otázky, ke které odpověd’ patřı́, je to vlastně odkaz do prvnı́ho sloupce předchozı́
tabulky
3. text odpovědi
4. komentář k odpovědi
Chceme vytvořit soubor vysledek1056.csv obsahujı́cı́ otázky testu č. 1056 a odsazeně také odpovědi. Protože takto budeme chtı́t zpracovat vı́c různých testů, vytvořı́me dávkový soubor, který
bude mı́t jako prvnı́ parametr název souboru pro výstup, a jako druhý parametr čı́slo otázky. Na
konec zadaného souboru vložı́ řádek s otázkou a hned za tento řádek přidá řádky s odpověd’mi, za
poslednı́ odpověd’ k otázce přidá prázdný řádek. Obsah souboru:
@echo off
rem řádek s otázkou - v prvnı́m sloupci porovnáme čı́slo otázky, pokud souhlası́,
rem
přidáme ji na konec souboru
for /F ”delims=; tokens=1-2” %%a in (questions.csv) do ( if ”%%a”==”%2” ( echo %%b >> %1 ) )
rem řádky s odpověd’mi, budou odsazeny (přidáváme na začátek oddělovač)
for /F ”delims=; tokens=1-3” %%a in (answers.csv) do ( if ”%%a”==”%2” ( echo ; %%c
>> %1 ) )
rem prázdný řádek:
echo ; >> %1
Soubor uložı́me pod názvem testy.bat.
Abychom to přı́liš nekomplikovali, seznam čı́sel otázek k danému testu zjistı́me „ručně“ v souboru tests.csv. Předpokládejme, že tento seznam je
290 291 291 328 329 330 331 332 1017 1018 1019 1020
M
2.3
HROMADNÉ ZPRACOVÁNÍ DAT
56
Použijeme cyklus přes množinu:
for %i in (290 291 291 328 329 330 331 332 1017 1018 1019 1020) do @(
testy.bat vysledek1056.csv %i )
Seznam čı́sel otázek můžeme do přı́kazu vkopı́rovat (připomeňme si, že do Přı́kazového řádku
vkládáme přes kontextové menu titulku okna Úpravy ï Vložit). Všimněte si, že před volaný přı́kaz
jsme dali symbol @, aby se nevypisovaly prováděné přı́kazy. Volaný spustitelný (dávkový) soubor
má dva parametry – výsledný soubor a pak čı́slo otázky z množiny, přes kterou probı́há lokálnı́
proměnná %i.
Přı́klad 2.31
Chceme přidat několik desı́tek (nebo stovek, to je jedno) nových uživatelů (studentů), ale nechce se nám to
dělat ručně. Všichni majı́ být zařazeni do nové skupiny studenti2010.
Seznam jsme dostali v souboru (sice ne textovém, ale text bez problémů vytáhneme). Předpokládejme, že jsme podle původnı́ho souboru vytvořili soubor uzivatele2010.txt, kde na každém
řádku souboru je jeden student a pro něj vždy tři údaje – jako prvnı́ je identifikačnı́ čı́slo, pak
přı́jmenı́, a potom jméno. Všechny tři údaje na řádku jsou odděleny mezerou.
Ve stejném adresáři, ve kterém máme soubor uzivatele2010.txt, vytvořı́me dávkový soubor,
který chceme volat (spouštět) se dvěma parametry takto:
pridejuziv.bat studenti2010 uzivatele2010.txt
Prvnı́ parametr je název nové skupiny, druhý parametr je název souboru se seznamem uživatelů.
Vytvořı́me tedy dávkový soubor pridejuziv.bat s tı́mto obsahem:
@echo off
REM vytvorime skupinu uzivatelu s nazvem, ktery vezmeme z prvniho parametru:
net localgroup %1 /add
if errorlevel 1 goto :chyba
REM bereme v uvahu existenci tri ”sloupcu”,
REM na zpracovavanem radku je vzdy prvek z prvniho sloupce %%a, z druheho %%b, z tretiho %%c:
for /F ”tokens=1-3” %%a in (%2) do (
REM prvni prvek je prihlasovaci jmeno -- id. cislo, druhe prijmeni, treti krestni jmeno:
net user %%a %%a /add /fullname:”%%c %%b”
net localgroup %1 %%a /add
)
goto :konec
:chyba
Echo Chyba při zpracovánı́
:konec
Ve skutečnosti bychom nové uživatele přidávali spı́še na serveru do domény (přı́kaz net group
apod.), zde pro zjednodušenı́ použijeme lokálnı́ skupinu.
Vytvořený dávkový soubor pak můžeme použı́vat každoročně, stačı́ jen zaměnit soubor s uživateli za nový a v parametru napsat název jiné skupiny. Studenti majı́ nastaveno heslo totožné se
svým přihlašovacı́m jménem (to je identifikačnı́ čı́slo). Dále bychom měli správně přiřadit vhodná
M
2.3
HROMADNÉ ZPRACOVÁNÍ DAT
57
přı́stupová oprávněnı́ (nové skupině, nenı́ třeba je přidělovat zvlášt’ všem novým uživatelům). To
by také mohlo být součástı́ skriptu.
Pokud budeme chtı́t pro kontrolu vypsat všechna jména a přı́jmenı́ (jen na Přı́kazovém řádku,
ne v dávkovém souboru), zadáme:
for /F ”tokens=2,3” %a in (uzivatele2010.txt) do @echo %b %a
Přı́klad 2.32
Textové soubory s uživateli přidanými v jednotlivých letech si můžeme archivovat a po uplynutı́
maximálnı́ doby studia pomocı́ obsahu souboru všechny uživatele z daného roku odstranit:
for /F ”tokens=1-3” %a in (uzivatele2010.txt) do net user %a /delete
net localgroup studenti2010 /delete
Je zřejmé, že tyto přı́kazy jsme zadávali přı́mo na Přı́kazovém řádku, nenı́ nutné k tomu tvořit
dávkový soubor (i když i to by šlo).
Na přı́kladech vidı́me syntaxi – za parametrem /F je řı́dicı́ řetězec, který řı́ká, co konkrétně ze
souboru máme použı́t. Následuje vnitřnı́ proměnná, do které bude dosazen prvnı́ „oznámený“ prvek
na každém řádku (většinou chápán jako prvek v prvnı́m sloupci, resp. v tom, který zadáme v rozsahu
tokens). Dále zadáme název souboru, který se má zpracovávat, a zbytek už známe (přı́kaz).
P
Podle počtu deklarovaných sloupců (v části tokens) jsou vytvořeny dalšı́ vnitřnı́ proměnné
(následujı́cı́ podle abecedy za tou prvnı́), přes ně pak přistupujeme k dalšı́m prvkům na řádku.
Prvnı́ je dostupný přes %a nebo %%a, druhý přes %b nebo %%b, atd.
Velmi důležitý je řı́dicı́ řetězec. V přı́kladech je ”tokens=1-3”, to znamená, že zpracováváme
prvnı́ až třetı́ sloupec. Sloupce mohou být zadány také výčtem, některý můžeme i přeskočit (to má
vliv na „přidělovánı́“ položek řádku k vnitřnı́m proměnným přı́kazu). Řı́dicı́ řetězec může vypadat
i takto:
for /F ”delims=: tokens=1,3-5” %%a ...
(oddělovačem položek na řádku je dvojtečka, zpracováváme pouze prvnı́ a třetı́ až pátou položku
na řádku, druhou a přı́padně šestou přeskočı́me). Všimněte si, že celý řı́dicı́ řetězec musı́ být v uvozovkách.
Možnostı́ je vı́ce, podrobnosti zı́skáme zadánı́m for /? na Přı́kazovém řádku.
Úkoly
1. Projděte si pořádně přı́klady 2.28–2.32.
2. Podle prvnı́ho z těchto přı́kladů sestavte postup, kterým vytvořı́te obdobné soubory pro celou
sérii objednávek z rozsahu 140000–160000 (čı́slo objednávky bude součástı́ názvu souboru).
Použijte jednu z forem přı́kazu for, která je blı́zká pojetı́ přı́kazu v klasickém programovánı́
(najdete v předchozı́m textu).
C
R
2.5
POWERSHELL
58
3. Nynı́ trochu rozvineme přı́klad 2.30. Pokuste se zautomatizovat volánı́ dávkového souboru
pro seznam čı́sel otázek daného testu.
R
Vytvořte dávkový soubor, jehož parametrem bude čı́slo testu, v dávkovém souboru pak pomocı́
cyklu for /F vytáhněte ze souboru tests.csv posloupnost čı́sel otázek tohoto testu (můžete
ji prozatı́mně uložit do proměnné) a pak zavolejte již vytvořený dávkový soubor testy.bat
s přı́slušnými parametry (druhý parametr je posloupnost, kterou jste zjistili předchozı́m přı́kazem, prvnı́ parametr – název cı́lového souboru – vytvořte zřetězenı́m s parametrem souboru,
který právě tvořı́te, což je čı́slo testu). Vzpomeňte si, jak je třeba volat dávkový soubor uvnitř
jiného dávkového souboru! (viz str. 1.4)
2.4
Odlišnosti v nástrojı́ch Přı́kazového řádku
Různé verze (ale i varianty v rámci jedné verze) se lišı́ svým vybavenı́m nástroji pro Přı́kazový
řádek. Odlišnosti jsou také mezi desktopovými a serverovými variantami. Obecně se dá řı́ct, že
se stoupajı́cı́ verzı́ sice některé staršı́ nástroje zmizı́, ale pokaždé jich vı́ce přibývá, tedy množstvı́
nástrojů má stoupajı́cı́ tendendci.
Ve Windows Server od verze 2008 je velmi doporučována instalace tzv. Server Core (tj. nenı́ nainstalováno grafické rozhranı́, pracujeme pouze a jenom v textovém rozhranı́ podobně jako v nejstaršı́ch unixových systémech). Hlavnı́m důvodem je zvýšenı́ bezpečnosti (moduly grafického rozhranı́
běžı́ v kontextu jádra, a cokoliv běžı́ v kontextu jádra a je napadnutelné, to znamená bezpečnostnı́
riziko), dalšı́ důvod by mohl být zvýšenı́ propustnosti a snı́ženı́ zátěže serveru (grafické rozhranı́ je
výpočetně náročné).
Zřejmě proto zvláště ve verzı́ch XP a Vista (zároveň se Server 2003 a 2008) přibylo množstvı́
nových přı́kazů. V tomto dokumentu nenı́ ani zdaleka uvedeno vše, co lze na Přı́kazovém řádku
použı́t.
Základnı́ přehled o nových přı́kazech (obecně přes všechny verze) zı́skáme bud’ na internetu
a nebo v nápovědě, když zadáme nové nástroje přı́kazového řádku . Někdy nepomůže ani to (ve
variantách Home je nápověda neskutečně osekaná, až na hranici použitelnosti).
Úkoly
1. Zjistěte, jak funguje přı́kaz ipseccmd (od verze XP). Pomocı́ tohoto přı́kazu vypište statistiky
(většinou chybová hlášenı́) protokolu IPSec, filtrů, zásad, atd.
2. Zjistěte, jak funguje a k čemu sloužı́ přı́kaz driverquery (taktéž od verze XP).
3. Najděte seznam přı́kazů, který byl nově přidán do verze Windows, kterou právě použı́váte.
Vyberte si několik přı́kazů a zjistěte, k čemu sloužı́ a jaká je jejich syntaxe.
C
2.5
POWERSHELL
2.5
59
PowerShell
PowerShell je obdoba Přı́kazového řádku ve Windows Vista (Přı́kazový řádek však zůstává zachován, obě řešenı́ existujı́ vedle sebe). Je součástı́ Windows 7 a Windows Server 2008, lze ho doinstalovat
i do Windows XP SP2 a SP3 a Windows Vista. Momentálně existujı́ verze 1.0 a 2.0.
2.5.1
Jak na PowerShell
PowerShell je postaven na technologii .NET (později se o této technologii dovı́me vı́ce). Vzhledově
se velmi podobá Přı́kazovému řádku, rozdı́l je v možnosti použı́vánı́ myši a samozřejmě také
v přı́kazech. Existujı́ také grafická prostředı́. Použı́váme tyto typy přı́kazů:
P
• přı́kazy typu CMDLET – jde o nativnı́ přı́kazy PowerShellu, jiným způsobem se k nim nedostaneme, jsou uloženy v dynamických knihovnách dodávaných s PowerShellem,
• aplikace, tedy spustitelné soubory (třeba .EXE) – stačı́ napsat název souboru (přı́padně s cestou),
stejně jako v Přı́kazovém řádku, protože mnohé z dřı́ve probı́raných přı́kazů jsou vlastně
spustitelné soubory,
• aliasy – zastupujı́ přı́kazy jiných typů (obvykle s dlouhým či hůře zapamatovatelným názvem),
také existujı́ některé aliasy s názvem vnitřnı́ho přı́kazu Přı́kazového řádku, které vnitřně volajı́
přı́kaz typu CMDLET (napřı́klad dir),
• funkce – pojmenované skupiny přı́kazů (podobně jako v jazyce C).
Obvyklá syntaxe přı́kazů CMDLET je sloveso-podstatné_jméno parametry. Parametry typu přepı́načů
začı́najı́ pomlčkou, stejně jako v unixových systémech. Uvedeme si několik přı́kazů pro ukázku:
Přı́kaz
Význam
GET-PROCESS
seznam spuštěných procesů včetně základnı́ch informacı́ (jako parametr můžeme použı́t regulárnı́ výraz pro masku názvu procesů)
bez dalšı́ch parametrů zobrazı́ seznam aliasů
zastavı́ spuštěný proces (název dodáme jako parametr)
nastavı́ proměnnou na danou hodnotu
bez dalšı́ch parametrů vypı́še seznam přı́kazů
GET-ALIAS
STOP-PROCESS
SET-VARIABLE
GET-COMMAND
Tabulka 2.2: Některé přı́kazy PowerShellu
Přı́klad 2.33
Ukážeme si vyvolánı́ výpisu seznamu přı́kazů v PowerShellu. Pokud nemáme PowerShell k dispozici (v XP nebo Vistě), najdeme si instalačnı́ soubor na webu Microsoftu, vybereme pro náš operačnı́
systém (XP nebo Vista, pozor, u Visty je důležité vědět, zda máme 32bitový nebo 64bitový systém).
Po spuštěnı́ (Start ï Programy ï Windows PowerShell, přı́padně může být v Přı́slušenstvı́) se objevı́
úvodnı́ hlášenı́ a prompt:
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
PS C:\Documents and Settings\Šárka>
M
2.5
POWERSHELL
60
Skutečnou podobu okna (Windows XP) vidı́me na obrázku 2.2. Všimněte si, že se rozhranı́ sice
trochu podobá Přı́kazovému řádku, ale poznáme, že máme spuštěný PowerShell.
Obrázek 2.2: Okno PowerShellu
Zadáme přı́kaz, který by měl vypsat seznam přı́kazů typu CMDLET a přı́padně nadefinovaných
aliasů a funkcı́:
PS C:\Users\Šárka> get-command
CommandType
----------Alias
Alias
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Alias
Alias
Function
Function
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
Cmdlet
...
Name
---%
?
Add-Content
Add-History
Add-Member
Add-PSSnapin
cat
cd
cd..
cd\
Clear-Content
Clear-Item
Clear-ItemProperty
Clear-Variable
Compare-Object
ConvertFrom-SecureString
Convert-Path
ConvertTo-Html
ConvertTo-SecureString
Copy-Item
Copy-ItemProperty
Export-Alias
Export-Clixml
ForEach-Object
Format-List
Get-Acl
Definition
---------ForEach-Object
Where-Object
Add-Content [-Path] <String[]> [-Value] <Object[...
Add-History [[-InputObject] <PSObject[]>] [-Pass...
Add-Member [-MemberType] <PSMemberTypes> [-Name]...
Add-PSSnapin [-Name] <String[]> [-PassThru] [-Ve...
Get-Content
Set-Location
Set-Location ..
Set-Location \
Clear-Content [-Path] <String[]> [-Filter <Strin...
Clear-Item [-Path] <String[]> [-Force] [-Filter ...
Clear-ItemProperty [-Path] <String[]> [-Name] <S...
Clear-Variable [-Name] <String[]> [-Include <Str...
Compare-Object [-ReferenceObject] <PSObject[]> [...
ConvertFrom-SecureString [-SecureString] <Secure...
Convert-Path [-Path] <String[]> [-Verbose] [-Deb...
ConvertTo-Html [[-Property] <Object[]>] [-InputO...
ConvertTo-SecureString [-String] <String> [[-Sec...
Copy-Item [-Path] <String[]> [[-Destination] <St...
Copy-ItemProperty [-Path] <String[]> [-Destinati...
Export-Alias [-Path] <String> [[-Name] <String[]...
Export-Clixml [-Path] <String> [-Depth <Int32>] ...
ForEach-Object [-Process] <ScriptBlock[]> [-Inpu...
Format-List [[-Property] <Object[]>] [-GroupBy <...
Get-Acl [[-Path] <String[]>] [-Audit] [-Filter <...
(skutečný výpis je velmi dlouhý). Je to pouze orientačnı́ seznam přı́kazů, který pomůže, když si
nemůžeme vzpomenout na název přı́kazu.
M
2.5
POWERSHELL
61
Často je použı́ván „pomocný“ přı́kaz FORMAT-LIST, zkráceně FL, který vhodně zformátuje výstup.
Výstup zformátovaný pomocı́ FL bývá u většiny přı́kazů mnohem širšı́, tj. mnohé položky zobrazenı́
nejsou ignorovány. Napřı́klad GET_SERVICE | FORMAT-LIST vypı́še mnohem obsáhlejšı́ výstup než
bez směrovánı́ přes formátovacı́ přı́kaz (výstupem jsou podrobné informace o službách).
Přı́kazy lze spojovat rourou, napřı́klad pro GET_SERVICE | GET_MEMBER část před rourou vrátı́
seznam .NET objektů služeb, přı́kaz za rourou zobrazı́ vlastnosti a metody těchto objektů.
Oproti Přı́kazovému řádku se lišı́ syntaxe použı́vánı́ proměnných. Když k proměnné přistupujeme, neobklopujeme jejı́ název symboly %, ale před název dáme symbol $ (to je ostatně syntaxe
obvyklá v unixových systémech), také je někdy nutné přidat řetězec env:. Napřı́klad:
$env:path += ”;novy_adresar”
(na konec proměnné path přidá dalšı́ adresář, jak vidı́me,
adresáře jsou odděleny střednı́kem).
V PowerShellu můžeme bez problémů využı́vat i přı́kazy, které známe z Přı́kazového řádku.
Na výchozı́m promptu ostatně jistou podobnost vidı́me. Taktéž existuje pracovnı́ adresář (složka)
a mezi adresáři (složkami) se můžeme pohybovat jak pomocı́ CMDLETu set-location, tak i pomocı́
„staršı́ho“ přı́kazu cd (pokud je nadefinován alias cd, což obvykle je). Můžeme napřı́klad vypsat
sı́t’ové adresy přı́kazem ipconfig /all či vypsat seznam uživatelů přı́kazem net user a vše klidně
přesměrovat do souboru.
L
Přı́klad 2.34
Některé původnı́ přı́kazy dávajı́ v PowerShellu stejný výstup jako na Přı́kazovém řádku, ale u jiných
tomu tak nemusı́ být. Napřı́klad přı́kaz dir může být definován jako alias přı́kazu get-ChildItem,
a v tom přı́padě je jeho výstup v úplně jiném formátu než na Přı́kazovém řádku:
PS C:\Users\Šárka> dir
Directory: C:\Users\Šárka
Mode
---d---d---d-r-d-r-d-r-d-r-d-r-d-r-d---d----a---a---a---
LastWriteTime
------------15.8.2011
11:52
14.1.2012
23:04
29.7.2011
22:05
7.2.2012
17:05
15.8.2011
11:49
29.7.2011
22:05
29.7.2011
22:05
23.1.2012
18:17
14.8.2011
3:01
18.12.2011
16:34
22.12.2011
20:23
1.2.2012
17:59
16.8.2011
16:18
Length Name
------ ---.gimp-2.6
.VirtualBox
Contacts
Desktop
Documents
Favorites
Links
Pictures
programy
VirtualBox VMs
218 .recently-used.xbel
11165 gsview64.ini
0 Sti_Trace.log
Výstup vám určitě připomene výstup linuxového přı́kazu ls, jen je zde poněkud méně informacı́.
V prvnı́m sloupci najdeme řetězec obsahujı́cı́ nastavené atributy (pı́smeno „d“ znamená directory,
tedy adresář, dále u některých položek máme „r“ (read-only), „a“ (archivate), přı́padně by zde mohly
být atributy „h“ nebo „s“ (hidden, system), ale nenı́ zapnuto zobrazovánı́ těchto typů souborů.
M
2.5
POWERSHELL
2.5.2
62
Pár typických úloh v PowerShellu
Nápovědu zı́skáme takto:
•
•
•
•
vypı́še seznam přı́kazů
GET-COMMAND | FL navı́c vhodně zformátuje jako seznam položek
GET-HELP vypı́še obecnou nápovědu
GET-HELP přı́kaz vypı́še nápovědu pro daný přı́kaz, napřı́klad
GET-COMMAND
GET-HELP GET-PROCESS
•
•
•
•
vypı́še podrobnějšı́ nápovědu přı́kazu
GET-HELP přı́kaz -full vypı́še plnou nápovědu pro daný přı́kaz
GET-HELP přı́kaz -examples přı́klady použitı́ pro daný přı́kaz
GET-HELP GET-* vypı́še nápovědu ke všem přı́kazům začı́najı́cı́m GET-
GET-HELP přı́kaz -detailed
Přı́klad 2.35
Vı́me, že existuje přı́kaz get-process, ale chceme vı́ce informacı́. Tyto informace zı́skáme takto:
PS C:\Users\Šárka> get-help get-process
NAME
Get-Process
SYNOPSIS
Gets the processes that are running on the local computer.
SYNTAX
Get-Process [[-name] <string[]>] [<CommonParameters>]
Get-Process -id <Int32[]> [<CommonParameters>]
Get-Process -inputObject <Process[]> [<CommonParameters>]
DETAILED DESCRIPTION
The Get-Process cmdlet retrieves a process object for each process. Without
parameters, ”Get-Process” gets all of the processes on the computer, as though
you typed ”Get-Process *”. You can also identify a particular process by process
name or process ID (PID), or pass a process object through the pipeline to
Get-Process. For Get-Process, thedefault method is by process name. For
Stop-Process, the default method is by process ID.
RELATED LINKS
Stop-Process
REMARKS
For more information, type: ”get-help Get-Process -detailed”.
For technical information, type: ”get-help Get-Process -full”.
Všimněte si podobnosti koncepce stránky s manuálovými stránkami v unixových systémech. Z výpisu zjistı́me, že tento přı́kaz vypisuje běžı́cı́ procesy, následuje popis syntaxe (tj. parametry, které
lze použı́t, jejich pořadı́ a možné kombinace). V následujı́cı́m odstavci je přı́kaz popsán podrobněji.
Zjistı́me, že vlastně přistupujeme k objektům typu proces a můžeme vypsat bud’ všechny procesy,
M
2.5
POWERSHELL
63
nebo zadat konkrétnı́ proces, který nás zajı́má (názvem nebo jeho identifikačnı́m čı́slem PID) a nebo
můžeme přı́kazu „poslat“ objekt typu proces přes rouru.
Na konci výpisu nám přı́kaz poradı́, jakým způsobem zı́skat ještě podrobnějšı́ nápovědu (v podrobnějšı́ nápovědě předevšı́m najdeme seznam a vysvětlenı́ parametrů, a také ukázkové přı́klady).
Přı́klad 2.36
Některé přı́kazy včetně parametrů jsou v PowerShellu zbytečně „upovı́dané“ – dlouhé, a pokud je
často použı́váme, nenı́ od věci si pro ně vytvořit krátký alias nebo funkci.
get-help get-alias
nejdřı́v zjistı́me, jakým způsobem se aliasy vytvářejı́
get-help get-alias -examples
pro jistotu se ještě podı́váme na přı́klady použitı́ přı́kazu
get-alias seznam get-childitem
vytvořili jsme alias seznam, můžeme ho volně použı́vat
mı́sto přı́kazu get-childitem (po uzavřenı́ okna PowerShellu však přestane existovat)
Aliasy majı́ jednu nevýhodu – reprezentujı́ pouze řetězce, ve kterých nesmı́ být mezera, tedy pouze
jedno slovo (k zastupovanému přı́kazu také nelze přidat parametry). Tedy pokud chceme vytvořit
vlastnı́ přı́kaz, a to takový, který zastupuje jiný přı́kaz včetně parametrů, vytvořı́me funkci:
PS C:\Users\Šárka> function seznamx
Prompt se změnı́ na >> a můžeme psát tělo funkce (jako v jazyce C, v lomených závorkách):
{
get-children -force
}
Pozor na mezery u pomlček; zatı́mco kolem prvnı́ pomlčky žádná mezera nenı́ (get-children je
vlastně souvislé klı́čové slovo), před druhou pomlčkou mezera je, protože jde o vyznačenı́ přepı́nače
-force. Vytvořili jsme funkci, která vypisuje všechny soubory a podadresáře včetně skrytých.
Vkládánı́ funkce ukončı́me jednoduše tak, že vytvořı́me „prázdný řádek“ – dvakrát klepneme na
klávesu Enter .
Přı́klad 2.37
Ukážeme si pár přı́kazů (cmdlet) pro práci s procesy a službami:
get-process
vypı́še seznam spuštěných procesů se základnı́mi parametry
takto zjistı́me údaje o procesu s názvem firefox, napřı́klad jeho PID, výstup
může vypadat třeba takto:
get-process firefox
Handles
------262
NPM(K)
-----35
PM(K)
----23312
WS(K) VM(M)
----- ----35684
145
CPU(s)
-----1,73
Id ProcessName
-- ----------2772 firefox
vypı́še tyto údaje pouze o procesech, jejichž název začı́ná Apache (konkrétně – pokud máme nainstalován WWW server Apache, zjistı́me název jeho obslužného
procesu)
get-process Apache*
M
2.5
POWERSHELL
64
podobně, jen je proces určen čı́slem PID mı́sto názvu (to bude zřejmě
jiný proces než u předchozı́ho přı́kazu)
get-process -pid 3632
podobně jako předchozı́, ale k procesu se zobrazı́ seznam
modulů (dynamicky linkovaných knihoven)
get-process -pid 3632 -module
zajı́má nás, jaké existujı́ přı́kazy pro práci se službami (ve výpisu jeou
kromě jiného nám známé programy services.exe a services.msc)
get-command *service*
nevı́me, jak se jmenuje služba, která se v češtině nazývá delšı́m
jménem „Pracovnı́ stanice“, tak si to zjistı́me (název služby obsahuje řetězec „workstation“)
get-service *workstation*
chceme službu, jejı́ž
název končı́ zadaným řetězcem a zároveň běžı́; všimněte si syntaxe druhé části dotazu, podobá
se SQL syntaxi (vpodstatě pracujeme s databázı́), řetězec $_ představuje konkrétnı́ objekt, který
k přı́kazu where-object doputoval rourou, lomené závorky jsou nutné
get-service *station | where-object {$_.status -eq ”running”}
zaujal nás CMDLET where-object a chtěli bychom zjistit, na které
vlastnosti se můžeme ptát u objektu procesu, tı́mto způsobem zı́skáme výpis všech vlastnostı́
typu objektu, který k CMDLETu get-member dojde přes rouru (nás zajı́majı́ předevšı́m řádky
obsahujı́cı́ v druhém sloupci property), výstup může obsahovat napřı́klad tyto řádky:
get-process | get-member
TypeName: System.Diagnostics.Process
Name
---Handles
Name
CloseMainWindow
GetType
get_BasePriority
get_Handle
Kill
Start
BasePriority
Handle
HandleCount
Id
MachineName
MainModule
ProcessName
ProcessorAffinity
Responding
StartTime
Threads
TotalProcessorTime
CPU
Path
...
MemberType
---------AliasProperty
AliasProperty
Method
Method
Method
Method
Method
Method
Property
Property
Property
Property
Property
Property
Property
Property
Property
Property
Property
Property
ScriptProperty
ScriptProperty
Definition
---------Handles = Handlecount
Name = ProcessName
System.Boolean CloseMainWindow()
System.Type GetType()
System.Int32 get_BasePriority()
System.IntPtr get_Handle()
System.Void Kill()
System.Boolean Start()
System.Int32 BasePriority {get;}
System.IntPtr Handle {get;}
System.Int32 HandleCount {get;}
System.Int32 Id {get;}
System.String MachineName {get;}
System.Diagnostics.ProcessModule MainModule {get;}
System.String ProcessName {get;}
System.IntPtr ProcessorAffinity {get;set;}
System.Boolean Responding {get;}
System.DateTime StartTime {get;}
System.Diagnostics.ProcessThreadCollection Thre...
System.TimeSpan TotalProcessorTime {get;}
System.Object CPU {get=$this.TotalProcessorTime...
System.Object Path {get=$this.Mainmodule.FileNa...
(výstup byl značně zkrácen)
chceme vypsat procesy svchost, jejichž čas na procesoru je většı́ nebo roven 2 sekundám (vlastnost cpu jsme zjistili předchozı́m
přı́kazem)
get-process svchost | where-object {$_.cpu -ge 2}
M
2.6
SKRIPTY
65
get-process | where {$_.basepriority -gt 8}
mı́sto where-object můžeme použı́t kratšı́
where (je to alias), zde vypisujeme procesy, jejichž priorita je vyššı́ než 8
get-process | select-object name,handleCount,startTime,threads tı́mto způsobem mů-
žeme ke každému objektu procesu, který je nalezen prvnı́m přı́kazem v rouře, vypsat požadované vlastnosti (název, počet „držených“ objektů – napřı́klad otevřených souborů, čas spuštěnı́,
seznam vláken procesu – TID)
výstup bude
prakticky stejný jako předchozı́, jen jinak zformátovaný (poslednı́ přı́kaz v rouře výstup zformátuje do tabulky)
get-process | select-object name,handleCount,startTime,threads | ft
PowerShell nabı́zı́ zajı́mavé funkce pro zpracovánı́ řetězců a také se zdá být velmi silným nástrojem pro psanı́ skriptů. Zde se těmto vlastnostem již nebudeme věnovat, dalšı́ informace najdeme
napřı́klad v těchto zdrojı́ch:
•
•
•
•
•
http://technet.microsoft.com/en-us/library/ee692944.aspx
http://msdn2.microsoft.com/en-us/library/bb905330.aspx
http://microsoft.com/technet/scriptcenter/topics/winpsh/manual/start.mspx
http://en.wikipedia.org/wiki/Windows PowerShell
http://blogs.msdn.com/PowerShell/
Existuje jiný projekt se jménem PowerShell – emulátor X11 (základ grafického prostředı́ pro unixové
systémy), dostupný na powershell.sourceforge.net.
Úkoly
1. Zjistěte, jak se na vašem počı́tači spouštı́ PowerShell. Pokud nenı́ nainstalován, doinstalujte
ho podle návodu v předchozı́m textu (pokud máte přı́slušná oprávněnı́).
2. Procvičte si přı́kazy pro zı́skánı́ nápovědy a vyzkoušejte podle možnostı́ přı́kazy, které jsou
v přı́kladech 2.35, 2.36 a 2.37.
3. Zjistěte, jaké vlastnosti lze zjišt’ovat u služeb (stejným způsobem, jak jsme zjistili vlastnosti procesů v přı́kladu 2.37) a u souborů (připomeňme si, že seznam souborů lze zobrazit CMDLETem get-childitem). Některé z vlastnostı́ vypište podobně, jako jsme to udělali na konci
přı́kladu 2.37 u procesů.
2.6
Skripty
Skripty jsou textové spustitelné soubory obsahujı́cı́ přı́kazy, pro jejichž spuštěnı́ (provedenı́) je zapotřebı́ některý dalšı́ program (překladač, interpret).
Jednı́m z typů skriptů jsou i dávkové soubory s přı́ponou BAT (viz kapitolu Přı́kazový řádek), v novějšı́ch verzı́ch Windows můžeme použı́vat také SCF soubory (jejich použitelnost je však omezená)
a modul Windows Scripting Host.
C
2.6
SKRIPTY
66
soubory:
Windows od verze 98 nabı́zejı́ jistou omeze- [Shell]
nou možnost psanı́ skriptů s přı́ponou SCF (Shell Command Command=2
File). Z existujı́cı́ch je to napřı́klad Zobrazit plochu.scf nebo IconFile=explorer.exe,3
explorer.scf. Máme zde možnost určit, kdo má skript in- [Taskbar]
terpretovat (2=Windows, 3=Internet Explorer), jak bude vypa- Command=ToggleDesktop
dat ikonka souboru skriptu (ICO soubor nebo odkaz na ikonu Obrázek 2.3: Obsah souboru
v knihovně či spustitelném souboru) a dále co se má provést po Zobrazit plochu.scf
spuštěnı́ skriptu.
SCF
Windows Scripting Host (WSH): tento modul umožňuje spouštět skripty napsané v JScriptu
a VBScriptu, poskytuje také vlastnı́ skriptovacı́ jazyk umožňujı́cı́ použı́vat i prvky ActiveX (obvykle
pracujeme s objekty, také WMI objekty).
P
P
Skript pomocı́ WSH spustı́me jednı́m ze dvou přı́kazů – wscript nebo cscript. Syntaxe obou
přı́kazů je jednoduchá:
wscript název_souboru_skriptu
spustı́ soubor skriptu v prostředı́ Windows, použı́vá se v Start
ï Spustit nebo v Zástupci, bez uvedenı́ názvu souboru skriptu se spustı́ jednoduchý nástroj
na konfiguraci WSH, když je spuštěný, můžeme skripty spouštět jako jiné spustitelné soubory
poklepánı́m napřı́klad v Průzkumnı́kovi3 ,
cscript název_souboru_skriptu
spustı́ soubor skriptu v Přı́kazovém řádku, můžeme použı́t
také v dávkovém souboru.
Mezi oběma přı́kazy je jeden podstatný rozdı́l – pokud skript spustı́me pomocı́ wscriptu, veškerá
hlášenı́ programu se zobrazujı́ „v okýnkách“, která musı́me potvrzovat klepnutı́m na potvrzovacı́
tlačı́tko. To je ovšem nemyslitelné, pokud napřı́klad spouštı́me skript na jiném počı́tači, naplánovaný
na určitou hodinu (třeba takovou, ve které u počı́tače nikdo nesedı́) nebo v dávkovém souboru.
V takových přı́padech rozhodně použijeme cscript, který přı́padná hlášenı́ pouze zobrazı́ na
přı́kazovém řádku bez nutnosti potvrzovánı́.
V obou přı́padech můžeme za název skriptu přidat parametry, které řı́dı́ provedenı́ skriptu,
seznam parametrů se zobrazı́ v nápovědě – wscript /? resp. cscript /?.
O WSH najdeme informace na různých stránkách
na internetu, napřı́klad
http://www.kosek.cz/lenka/wsh/wsh.html.
Skripty v Perlu: Abychom mohli spouštět skripty
psané v Perlu, musı́me mı́t nainstalován modul pro
jeho interpretaci, bez toho by skripty nebylo možné
spustit. Modul pro Perl se jmenuje ActivePerl a je volně
ke staženı́ na adrese http://www.activestate.com/ (jde
o MSI soubor). Obvykle musı́me nastavit cestu ke spustitelnému souboru (standardně c:\Perl\bin).
Obrázek 2.4: Skripty při spuštěnı́ a ukonSkripty definované v Zásadách skupiny: mohou zde
čenı́ běhu Windows
být určeny přihlašovacı́ a odhlašovacı́ skripty (pro uživatele nebo jiný objekt) a spouštěcı́ a ukončovacı́ skripty (pro počı́tač).
3
Pokud se skript po poklepánı́ nespustı́, v zobrazeném okně Otevřı́t v programu provedeme přiřazenı́ přı́pony skriptu
programu Windows Based Scripting Host (wscript.exe), tedy tento program vybereme ze seznamu.
P
2.6
SKRIPTY
67
Mohou být psány v jakémkoliv skriptovacı́m jazyce, které dokáže interpretovat Windows Scripting Host (JS, VBS, BAT, . . . ). Až samotný skript sestavı́me, otevřeme Zásady skupiny (gpedit.msc),
najdeme uzel Skripty (bud’ ve větvi Konfigurace počı́tače ï Nastavenı́ systému Windows, pokud se majı́
spouštět při spuštěnı́ či ukončenı́ systému, a nebo ve větvi Konfigurace uživatele ï Nastavenı́ systému
Windows, pokud se majı́ spouštět při přihlášenı́ či odhlášenı́ konkrétnı́ho uživatele).
Úkoly
1. Najděte některý SCF soubor a prohlédněte si jeho obsah (napřı́klad v Poznámkovém bloku, jde
o textový soubor).
C
2. Na stránce http://www.kosek.cz/lenka/wsh/scripts.html si prohlédněte ukázkové kódy v JScriptu.
3. Podı́vejte se na mı́sto, kde bývajı́ uvedeny přihlašovacı́/odhlašovacı́ skripty uživatele a spouštěcı́/ukončovacı́ skripty pro počı́tač.
Pokud máte dostačujı́cı́ přı́stupová oprávněnı́, pokuste se vytvořit skript (může to být dávkový
soubor), který zobrazı́ uvı́tacı́ frázi (třeba Hello World) a počká na stisknutı́ klávesy uživatelem.
Tento skript pak umı́stěte jako přihlašovacı́ skript (nejdřı́v uložte a pak v Zásadách skupiny
vytvořte přı́slušnou zásadu).
4. Na stránce http://www.computerperformance.co.uk/vbscript/wmi basics.htm najdete tutoriál
o propojenı́ VBScriptu a WMI. Prohlédněte si některý zde uvedený přı́klad.
R
R
Kapitola
3
Řı́zenı́ přı́stupu
V této kapitole probereme technologie, na kterých je založeno řı́zenı́ přı́stupu k objektům. Zaměřı́me se
předevšı́m na Active Directory, správu uživatelů, použı́vánı́ bezpečnostnı́ch zásad a správu služeb a ovladačů.
3.1
Základnı́ pojmy
Nejdřı́v několik pojmů:
Důvěrnost (Confidentality) některá data jsou označena jako „důvěrná“, tj. určená pouze pro vymezený okruh uživatelů (přı́p. procesů).
Dostupnost (Availability) uživatelům je zajištěn (bezproblémový) přı́stup ke všem datům, ke kterým jsou oprávněni přistupovat.
Autenticita (Authenticity)
je možnost ověřenı́ původu dat.
Nepopiratelnost (Non-repudiation)
popřenı́ původu dat.
k možnosti ověřenı́ původu dat přidává vlastnost nemožnosti
Integrita (Integrity)
data jsou správná a úplná, nebyla pozměněna (napřı́klad při transportu přes
sı́t’), integrita dat může být narušena bud’ úmyslně (při transportu, malwarem apod.) nebo
neúmyslně (hardwarovou nebo softwarovou chybou).
Autentizace
je proces ověřovánı́ přı́stupových oprávněnı́ uživatele k datům (obecně k objektu).
Autentizačnı́ protokol je protokol (tedy popis postupu) autentizace – jakým způsobem má probı́hat
komunikace během autentizace, typické přı́klady autentizačnı́ch protokolů jsou Kerberos nebo
RADIUS.
SID (Security ID) je identifikátor zabezpečenı́, který jednoznačně (v lokálnı́ sı́ti) identifikuje uživatele, skupinu, službu nebo počı́tač v sı́ti, systém tento identifikátor přiřazuje při vytvořenı́
uživatele (skupiny, služby, připojenı́ počı́tače).
Některé identifikátory SID jsou předdefinované (obvykle; nemusı́ tomu tak být na všech
počı́tačı́ch v sı́ti). 1
1
Seznam obvyklých SID pro uživatele a skupiny najdeme na http://support.microsoft.com/kb/163846
68
P
3.1
ZÁKLADNÍ POJMY
69
Poznámka: V následujı́cı́m textu budeme mı́sty využı́vat nástroje, které nejsou součástı́ standardnı́ instalace Windows. Většinou se jedná o nástroje firmy Sysinternals, které najdete na adrese
http://sysinternals.com, vlevo odkaz Utilities Index. Z tohoto zdroje již dobře známe napřı́klad Process
Explorer.
L
Přı́klad 3.1
Asi nejjednoduššı́ způsob, jak zjistit SID některého uživatele nebo skupiny, je použitı́ programu
PsGetSID z balı́ku programů PSTools od firmy Sysinternals.
psgetsid
vypı́še SID počı́tače, napřı́klad
S-1-5-21-000111222-3334445555-666777888 (mı́sto sekvence 000...888 velmi pravdě-
podobně budou jiné čı́slice)
psgetsid uživatel
vypı́še SID zadaného uživatele, napřı́klad
S-1-5-21-000111222-3334445555-666777888-1005 (mı́sto sekvence 000...888 taktéž bu-
dou jiné čı́slice, ale stejné, jaké bychom dostali ve výstupu předchozı́ho přı́kazu)
psgetsid administrator
vypı́še SID administrátora (lokálnı́ho počı́tače), napřı́klad
S-1-5-21-000111222-3334445555-666777888-500
psgetsid guest
vypı́še SID účtu guest (host), napřı́klad
S-1-5-21-000111222-3334445555-666777888-501 (je zajı́mavé, že účty Administrator a Gu-
est majı́ téměř stejné SID, lišı́ se jen v poslednı́ čı́slici)
psgetsid everyone
SID skupiny everyone, tj. S-1-1-0
SID účtu Local Service, tj. S-1-5-19, jedná se o účet pro služby
pracujı́cı́ na počı́tači lokálně bez nutnosti autorizovaného přı́stupu na sı́t’, profil je v Documents
psgetsid ”local service”
and Settings\LocalService
psgetsid ”network service”
SID účtu Network Service, tj. S-1-5-20, pod tı́mto účtem pracujı́
sı́t’ové služby, jejich profil je v Documents and Settings\NetworkService
Účet Local System má SID S-1-5-18, ale přı́kazem psgetsid ho nezjistı́me (SID na tento účet nenı́
veřejně namapován). Namapovánı́ nenı́ potřeba kromě jiného ani proto, že účet Local System nemá
přiřazen žádný profil (také to lze chápat tak, že SID ve skutečnosti může souviset s profilem účtu).
Přı́kaz psgetsid může být použit také naopak, pro zjištěnı́ účtu určeného čı́slem SID, lze ho také
využı́vat v sı́ti (pracujeme s účty na vzdáleném počı́tači v sı́ti).
Pokračujeme v pojmech:
LSA (Local Security Authority, Mı́stnı́ úřad zabezpečenı́) je komponenta Windows (jedná se o soubor
lsass.exe), která zajišt’uje autorizaci (napřı́klad ověřuje heslo při přihlášenı́ uživatele nebo
ověřuje přı́stupová oprávněnı́ při přı́stupu k některému objektu).
ACE (Access Control Entry) je položka řı́zenı́ přı́stupu, je to vlastnost, kterou lze uživateli (procesu)
povolit nebo zakázat (napřı́klad čı́st, zapisovat, otevřı́t složku, atd.).
P
3.1
ZÁKLADNÍ POJMY
ACL (Access Control List)
něnı́).
70
seznam řı́zenı́ přı́stupu, je to seznam položek ACE (přidělená opráv-
DACL (Discretionary ACL) volitelný seznam řı́zenı́ přı́stupu, který má každý objekt zvlášt’ pro
každého uživatele nebo skupinu, pro které byla definována oprávněnı́ k danému objektu
(uživatelé a skupiny jsou zde určeni svými SID); v praxi se často mı́sto zkratky DACL pı́še
jednoduše ACL, tyto pojmy jsou do určité mı́ry zaměnitelné.
SACL (System Access Control List) podobně jako DACL (také seznam položek zvlášt’ pro různé
uživatele a skupiny), ale určuje, co se má u daného objektu pro konkrétnı́ho uživatele či člena
skupiny auditovat (zaznamenávat).
Popisovač zabezpečenı́ (Security Descriptor, bezpečnostnı́ deskriptor) tuto strukturu má každý objekt,
obsahuje všechny údaje důležité při přidělovánı́ oprávněnı́ (SID vlastnı́ka, SID skupiny, seznamy DACL, seznamy SACL, atd.), použı́vá se při kontrole každého pokusu o přı́stup k danému objektu.
Ve Windows (obvykle na diskovém oddı́lu se souborovým systémem NTFS) má každý objekt svůj
popisovač zabezpečenı́, ve kterém je určen vlastnı́k objektu, jeho skupina a přidružená přı́stupová
oprávněnı́ (DACL seznamy) pro různé uživatele a skupiny. Zjednodušenou strukturu deskriptoru
zabezpečenı́ vidı́me na obrázku 3.1.
Deskriptor zabezpečenı́
SID vlastnı́ka objektu
SID skupiny objektu
seznamy DACL
(SID uživ1 ; oprávněnı́ uživ1)
(SID uživ2 ; oprávněnı́ uživ2)
..
.
seznamy SACL
..
.
Obrázek 3.1: Zjednodušená struktura deskriptoru zabezpečenı́ některého objektu
Se seznamy DACL (ACL) lze manipulovat také v grafickém rozhranı́, a to ve vlastnostech objektu
(souboru nebo jakéhokoliv jiného objektu), karta Zabezpečenı́. Pokud je zapnuto Zjednodušené sdı́lenı́
souborů (v Možnostech složky), máme silně omezenou možnost zasahovat do ACL souborů, proto
alespoň pro účely procvičenı́ je dobré tuto vlastnost vypnout.
Přihlašovacı́ údaje jsou ověřovány
• moduly SAM (Security Accounts Manager) a LSASS, pokud jde o lokálnı́ účet,
• službou Active Directory na řadiči domény, pokud jde o doménový účet v sı́ti.
SAM udržuje na počı́tači mı́stnı́ databázi zabezpečenı́ obsahujı́cı́ údaje o zásadách pro účty, a to
v souboru secedit.sdb ve složce ...\Windows\security\Database.
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
71
Úkoly
1. Procvičte si to, co znáte z předchozı́ho semestru – najděte v grafickém rozhranı́ (některém
správci souborů, přı́padně v Průzkumnı́ku) ACL složky Program Files.
C
2. Pokuste se zjistit své SID. V registru zjistěte, čı́ SID jsou v klı́či HKU.
3.2
3.2.1
Objektový model ve Windows řady NT
Objekty
Windows NT nejsou čistě objektovým operačnı́m systémem, ale použı́vajı́ objekty pro reprezentaci
systémových zdrojů (pozor, nenı́ to totéž co objekty v objektovém programovánı́, zde jsou vlastnosti
objektů pevně stanoveny). Systému to umožňuje pracovat se všemi objekty jednotným způsobem
včetně zajištěnı́ bezpečnosti. Z pohledu jádra systému se objekty dělı́ do dvou kategoriı́:
P
• Objekty jádra jsou jednoduché nı́zkoúrovnové objekty viditelné pouze v privilegovaném režimu
(jenom pro jádro), tj. procesy běžı́cı́ v uživatelském režimu s těmito objekty nemohou přı́mo
pracovat.
• Objekty exekutivy (řı́dicı́ho programu jádra) jsou tvořeny obvykle jednı́m nebo vı́ce objekty
jádra, dalšı́mi daty a rozhranı́m (přı́stupovými metodami), např.:
– proces a podproces (vlákno procesu),
– událost, párová událost (párová pro meziprocesovou komunikaci),
– job (úloha) = skupina procesů sdı́lejı́cı́ch společné kvóty (stanovenı́ maximálnı́ho využı́vánı́ určitých prostředků), lze s nimi pracovat jako s celkem (napřı́klad skupina úzce
spolupracujı́cı́ch procesů),
– sekce (úsek) = oblast sdı́lené paměti,
– soubor (přesněji struktura určujı́cı́ otevřený soubor),
– port (přı́stupový bod pro volánı́ procedur jiných procesů, umožňuje informovat jiný
proces o dokončenı́ I/O operace),
– semafor (obecný semafor – počitadlo pro regulaci počtu procesů použı́vajı́cı́ch určitý
prostředek),
– mutex (pro realizaci vzájemného vyloučenı́ procesů v kritických sekcı́ch, vnitřně se nazývá mutant),
– adresář objektů (jakýsi kontejner),
– klı́č registru,
– ukazatel na jiný objekt (symbolický odkaz, Symbolic Link),
– typ objektu, atd.
Všimněte si, že v seznamu objektů nenı́ uživatel ani skupina.
Procesy a systém ke svým vlastnı́m objektům obvykle přistupujı́ přes manipulátor (handle), který
zı́skajı́ při vytvořenı́ objektu (obvykle se jedná o návratovou hodnotu přı́slušné API funkce). Jde
o nepřı́mý ukazatel, který (zjednodušeně) znamená index v tabulce manipulátorů pro daný proces.
P
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
72
Tento manipulátor (zachycený do vhodné proměnné) procesy mohou použı́vat jako parametr
API funkcı́ objekt zpracovávajı́cı́ch. K objektu lze také přistupovat přes jeho název (pokud ho známe),
ale je to pomalejšı́ než přes manipulátor (systém pokaždé překládá název na manipulátor). Jádro
(včetně exekutivy) může k objektům přistupovat přı́mo (bez manipulátoru či názvu).
Hlavička (záhlavı́) objektu obsahuje všechny důležité informace týkajı́cı́ se objektu, jako je
• jméno objektu (pokud ho má přiděleno; jméno má smysl pouze u objektů sdı́lených, proces
nebo systém k vlastnı́m objektům může přistupovat přes manipulátor),
• adresář objektu v hierarchické struktuře objektů,
• popisovač zabezpečenı́ s uvedenı́m vlastnı́ka, skupiny a přı́stupových oprávněnı́,
• režim, ve kterém je objekt použı́ván (privilegovaný nebo uživatelský),
• ukazatel na objekt typu (objekty určitého typu majı́ některé vlastnosti společné, nemusı́ být
ukládány u každého objektu zvlášt’, tedy máme speciálnı́ objekty, které shrnujı́ společné vlastnosti, které dědı́ jejich potomci), atd.
Každý objekt má svůj bázový typ a dále své atributy a metody. Napřı́klad atributem objektu typu
proces může být PID procesu, jeho priorita, ukazatel na bezpečnostnı́ deskriptor, atd., k jeho metodám patřı́ napřı́klad metody open a close.
Obrázek 3.2: Objekty v aplikaci WinObj
P
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
73
K objektům se lze dostat několika způsoby. Můžeme použı́t aplikaci WinObj2 od firmy Sysinternals (obrázek 3.2). Dostaneme se pouze k obecným základnı́m vlastnostem objektů (ne všech,
napřı́klad u objektů zařı́zenı́ to nenı́ možné), napřı́klad počtu manipulátorů (handle) na tento objekt
a přı́stupových oprávněnı́.
Dále mnohé aplikace pracujı́cı́ s procesy dokážou zobrazit seznam manipulátorů vlastněných
procesem. Napřı́klad v Process Exploreru se k těmto údajům dostaneme tak, že ve spodnı́m podokně
zobrazı́me manipulátory (View ï Lower Pane View ï Handles), pokud ovšem toto podokno máme
zobrazeno. Od firmy Sysinternals také pocházı́ program handle.exe,3 který je přı́mo určen pro
různé úlohy souvisejı́cı́ s manipulátory.
Mnohem sofistikovanějšı́ a úplnějšı́ přı́stup k objektům nabı́zejı́ programy pro laděnı́ jádra,
napřı́klad aplikace WinDbg (tyto postupy najdeme v přı́loze).
Správa objektů předevšı́m spravuje prostor jmen objektů (také obor názvů) s názvy všech pojmenovaných objektů, přes který jsou objekty přı́stupné v různých procesech, tento prostor je globálnı́
a viditelný pro všechny procesy. Objekty, které nemajı́ být viditelné pro jiné procesy, zde nesmı́ být,
a proto ani nemajı́ jméno.
Objekty jsou organizovány v hierarchické struktuře v paměti systému, v tzv. adresářové struktuře
objektů (adresář objektů je také objekt). Tuto strukturu vidı́me (alespoň částečně) na obrázku 3.2
v aplikaci WinObj. Strukturu objektů udržuje komponenta nazvaná Správce objektů (Object Manager).
Pouze objekty z adresářů \BaseNamedObjects a \GLOBAL?? jsou viditelné procesům v uživatelském režimu. Prvnı́ z nich obsahuje objekty událostı́, objekty synchronizačnı́ch mechanismů
(mutexy a semafory), časovače a objekty sdı́lené paměti, tedy vše potřebné ke komunikaci procesů
navzájem nebo procesů s jádrem. Druhý z nich obsahuje objekty odkazů na zařı́zenı́ (většina z nich
odkazuje na objekty zařı́zenı́ v adresáři \Devices) s poněkud srozumitelnějšı́mi názvy než objekty,
na které odkazujı́ (také se označujı́ jako Dos Devices).
Každý pojmenovaný (viditelný) objekt je zařazen ve stromové struktuře objektů a je adresován
cestou od kořene této struktury (kořen je označen \). Napřı́klad
\ObjectTypes\Process
je objekt typu „typ objektu“ (určuje typ objektu proces),
\Registry\System\CurrentControlSet
je objekt typu „klı́č registru“, a to HKLM/System/CurrentControlSet,
\Device\HardDiskVolume1
je objekt reprezentujı́cı́ prvnı́ oddı́l na prvnı́m pevném disku (je typu Device, tedy zařı́zenı́),
\Device\HardDisk0\Partition1
je odkaz (symlink) na předchozı́, tedy nepřı́mo odkazuje na prvnı́ oddı́l na prvnı́m pevném
disku,
\Device\HardDisk0\Partition0
je odkaz na objekt \Device\HardDisk0\DR0, který reprezentuje MBR sektor na prvnı́m pev-
ném disku.
2
WinObj najdeme na http://technet.microsoft.com/cs-cz/sysinternals/bb896657%28en-us%29.aspx.
Všechny nástroje firmy Sysinternals zı́skáme přes stránku http://sysinternals.com, jsme přesměrováni na stránky
Microsoftu.
3
$
P
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
74
Přı́klad 3.2
Vyzkoušı́me program handle.exe od Sysinternals:
Zadáme handle -p winlogon.exe Zı́skáme seznam manipulátorů vlastněných zadaným procesem (přepı́nač -p umožňuje zadat název nebo PID procesu), výstup (zkrácený):
Handle v3.42
Copyright (C) 1997-2008 Mark Russinovich
Sysinternals - www.sysinternals.com
-----------------------------------------------------------------------winlogon.exe pid: 668 NT AUTHORITY\SYSTEM
C: File (RW-)
C:\WINDOWS\system32
D8: File (RW-)
C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Cont
rols_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83
164: Section
\BaseNamedObjects\ShimSharedMemory
1EC: File (RW-)
C:\WINDOWS\system32
1F0: File (RW-)
C:\WINDOWS\system32\dllcache
1F4: File (RW-)
C:\WINDOWS\AppPatch
208: Section
\BaseNamedObjects\NWGINA_LOGON_STATE
...
858: Section
\BaseNamedObjects\mmGlobalPnpInfo
88C: Section
\BaseNamedObjects\WDMAUD_Callbacks
M
Jak vidı́me, u souboru je vždy souhrn požadavků na typ přı́stupu (většinou pro čtenı́ a zápis). Každý
řádek začı́ná čı́slem manipulátoru (hexadecimálně) a jeho typem, následuje jméno. Záhlavı́ s názvem
a autorem programu handle již nebudeme do dalšı́ch výpisů zařazovat, i když ve skutečnosti se
v nich objevuje.
Zadáme handle -p 3092 (mı́sto názvu procesu zadáme jeho PID, toto PID je právě přiřazeno
procesu notepad.exe), výstup (opět zkrácený):
notepad.exe pid: 3092 SARKA\Uzivatel
C: File (RW-)
C:\
10: File (RW-)
C:\WINDOWS\WinSxS\x86\_Microsoft.Windows.Common-Con
trols\_6595b64144ccf1df\_6.0.2600.5512\_x-ww\_35d4ce83
...
A8: Section
\BaseNamedObjects\MSCTF.Shared.SFM.IKL
M
Oproti předchozı́mu výpisu je odlišnost také ve vypsaném uživateli (na prvnı́m řádku), vlastnı́kem
je běžný uživatel.
Zadáme handle -p cmd.exe Předpokládejme, že máme spuštěny dvě instance přı́kazového
řádku (dvě okna), v jednom z nich právě zpracováváme jeden textový soubor. Protože jsme zadali
název, který přı́slušı́ vı́ce procesům, vypı́šou se informace o obou.
cmd.exe pid: 4088 SARKA\Uzivatel
C: File (RW-)
C:\Program Files\ProcessExplorer
6C: File (RW-)
C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Con
trols_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83
8C: Section
\BaseNamedObjects\ShimSharedMemory
98: File (R--)
D:\pokus.txt
-----------------------------------------------------------------------cmd.exe pid: 3920 SARKA\Uzivatel
M
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
75
C: File (RW-)
C:\Program Files\ProcessExplorer
6C: File (RW-)
C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Con
trols_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83
8C: Section
\BaseNamedObjects\ShimSharedMemory
Všimněte si, že ve výpisech jsou bud’ objekty typu soubor (což jsou typicky uživatelské objekty)
a nebo objekty z adresáře \BaseNamedObjects. Pokud chceme opravdu všechny objekty, které
s procesem souvisejı́, musı́me zadat parametr -a.
Zadáme tedy handle -a -p cmd.exe. Zkrácený výstup:
cmd.exe pid: 4088 SARKA\Uzivatel
4: KeyedEvent
\KernelObjects\CritSecOutOfMemoryEvent
8: Directory
\KnownDlls
C: File (RW-)
C:\Program Files\ProcessExplorer
10: Event
14: Directory
\Windows
18: Port
1C: WindowStation \Windows\WindowStations\WinSta0
20: Event
24: WindowStation \Windows\WindowStations\WinSta0
28: Directory
\BaseNamedObjects
2C: Mutant
\BaseNamedObjects\SHIMLIB\_LOG\_MUTEX
30: Desktop
\Default
34: Semaphore
...
7C: Key
HKLM\SYSTEM\ControlSet001\Control\Nls\Language Groups
88: Mutant
\BaseNamedObjects\ShimCacheMutex
8C: Section
\BaseNamedObjects\ShimSharedMemory
98: File (R--)
D:\pokus.txt
M
Ted’ jsou ve výpisu opravdu všechny objekty, které se podı́lejı́ na běhu procesu, včetně objektů jádra
(mnohé z objektů nejsou pojmenované).
Pokud nás zajı́má jen počet objektů jednotlivých typů (a máme spuštěný Poznámkový blok),
zadáme napřı́klad handle -s -p notepad.exe, výstup:
Handle type summary:
Desktop
: 1
Directory
: 3
Event
: 6
File
: 4
Key
: 4
KeyedEvent
: 1
Mutant
: 8
Port
: 2
Section
: 4
Semaphore
: 5
WindowStation
: 2
Total handles: 40
Ovšem nesmı́me zapomenout na to, že takto se počı́tajı́ pouze manipulátory, ale dva manipulátory
mohou odkazovat na tentýž objekt (napřı́klad u tohoto výpisu dva manipulátory typu WindowStation
ve skutečnosti odkazujı́ na tutéž stanici oken).
M
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
76
Pokud chceme vědět, který proces ve své tabulce obsahuje handle konkrétnı́ho (pojmenovaného)
objektu, zadáme napřı́klad handle -a pagefile.sys (zjišt’ujeme, kdo pracuje s tı́mto souborem),
výstup:
System
pid: 4
5AC: C:\pagefile.sys
Na tentýž objekt může odkazovat vı́ce handlů v různých procesech, napřı́klad pokud chceme vědět,
které procesy pracujı́ s našı́m podregistrem (větvı́ registru začı́najı́cı́ HKCU, zadáme handle -a hkcu.
Výpis bývá většinou velmi dlouhý, je vhodné ho přesměrovat do souboru (mezipamět’přı́kazového
řádku na delšı́ výpisy nestačı́).
M
Program Handle (nebo jiný program umožňujı́cı́ pracovat s manipulátory) se může hodit také
napřı́klad tehdy, když chcete pracovat s některým souborem (či jiným objektem), ale tento soubor
je uzamknut (vlastněn) jiným procesem.
Přı́klad 3.3
Ukážeme si způsob zjištěnı́ vlastnı́ka souboru a jeho „uvolněnı́“. Předpokládejme, že někdo má
v programu MS Word otevřen soubor pokus.rtf (na typu souboru ani moc nezáležı́), může být
otevřen i někým ze sı́tě. Chceme s tı́mto souborem provést některou operaci, která je programem
blokována. Nejdřı́v zjistı́me potřebné informace:
handle -a pokus.rtf
Výpis:
WINWORD.EXE
pid: 3960
3C8: D:\pokus.rtf
Z tohoto výpisu potřebujeme dva čı́selné údaje – PID procesu a čı́slo manipulátoru objektu. Obojı́
zadáme do následujı́cı́ho přı́kazu:
M
handle -c 3C8 -p 3960
Budeme dotázáni, zda opravdu chceme handle uvolnit, pokud souhlası́me, bude uvolněn a při
dotazu na vlastnı́ka tohoto souboru se objevı́ pouze hláška „No matching handles found.“. Postup
má jeden háček – pokud se nestihneme včas stát vlastnı́kem objektu, tak v okamžiku, kdy ve Wordu
znovu někdo začne se souborem pracovat (bez uzavřenı́ a znovuotevřenı́), Word znovu soubor
„uzurpuje“ (ale čı́slo manipulátoru už bude jiné). Z hlediska uživatele pracujı́cı́ho se souborem ve
Wordu se prakticky nic neprojevı́.
Předchozı́ postup je užitečný napřı́klad tehdy, když aplikace z nějakého důvodu při svém ukončenı́
neuvolnı́ své manipulátory (napřı́klad při nekorektnı́m ukončenı́ nebo „zamrzne“).
Úkoly
1. Stáhněte si a vyzkoušejte aplikaci WinObj. Projděte si názvy objektů souvisejı́cı́ s pevnými disky
a souborovými systémy, podı́vejte se na objekty jádra. Projděte si adresáře pojmenovaných
objektů, které jsou viditelné i v uživatelském režimu.
C
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
77
2. V aplikaci Process Explorer zapněte zobrazenı́ spodnı́ho podokna a nastavte v něm zobrazovánı́ manipulátorů (handlů). V podokně pro manipulátory zobrazte sloupec File Share Flags.
3. Podı́vejte se, jaké objekty vlastnı́ procesy system, smss.exe a některé dalšı́. U objektů typu
File (soubor) si všimněte přı́znaků (sloupec Share Flags). Zjistěte, který z těchto procesů je
vlastnı́kem hlavnı́ho adresáře objektů pro registr (\REGISTRY).
4. Pokud máte možnost, vyzkoušejte program handle (podle přı́kladů 3.2 a 3.3).
3.2.2
GDI objekty a stanice oken
Z hlediska určenı́ můžeme objekty rozdělit do třı́ skupin – objekty jádra, GDI objekty a uživatelské
objekty. GDI objekty souvisejı́ s grafickým rozhranı́m. Typickými zástupci jsou font, bitmapa, štětec,
pero, paleta, oblast na obrazovce, grafická metadata.
GDI objekty nejsou nativně chráněny tak jako objekty jádra. Jsou vždy soukromé pro konkrétnı́
proces (procesy nemohou použı́vat GDI objekty jiných procesů) a navı́c k jednomu GDI objektu může
existovat vždy jen jeden manipulátor. Protože GDI objekty (a dalšı́ objekty na nich založené) obecně
zabı́rajı́ hodně systémových zdrojů (hlavně paměti), je stanovena hornı́ hranice pro jejich počet. Tato
hranice je odlišná u různých verzı́ Windows a navı́c může být změněna, najdeme ji v registru v klı́či
HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/WindowsGDIProcessHandleQuota.
Stanice oken (Window Stations) jsou
objekty jádra určené k dodatečné
ochraně uživatelských objektů (GDI
objekty tuto ochranu nepotřebujı́, dı́ky
výše uvedeným omezenı́m). Každá
stanice oken má kromě jiného přiřazenu jednu schránku a jeden nebo
vı́ce objektů typu plocha (desktop). Stanice oken najdeme v adresáři objektů
\Windows\WindowStations, jehož obsah vidı́me na obrázku 3.3.
Obrázek 3.3: Objekty stanic oken
Z hlediska uživatele je nejdůležitějšı́ stanicı́ oken objekt WinSta0, která jako jediná dokáže zobrazit uživatelské prostředı́ a zajišt’ovat
komunikaci s uživatelem, je určena pro interaktivnı́ procesy a služby (většina služeb je neinteraktivnı́, ale některé vyžadujı́ možnost interakce s uživatelem a tedy zařazenı́ do WinSta0). Při
vytvořenı́ interaktivnı́ho procesu je tomuto procesu automaticky vytvořeno okno na výchozı́ ploše
stanice WinSta0 a proces může komunikovat s jinými procesy přes schránku stanice.
Dále existuje ještě několik stanic oken pojmenovaných Service-0x0-hhex čı́sloi$, které jsou
určeny pro systémové neinteraktivnı́ procesy nepoužı́vajı́cı́ okno. Hexadecimálnı́ čı́slo v názvu je
identifikátor přihlašovacı́ relace. Jsou určeny pro neinteraktivnı́ služby a jiné procesy se speciálnı́mi
přı́stupovými oprávněnı́mi, napřı́klad Service-0x0-3e7$ je stanice oken pro neinteraktivnı́ systé-
P
P
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
78
mové procesy běžı́cı́ pod účtem s vysokými přı́stupovými oprávněnı́mi na lokálnı́m počı́tači (účet
Local System).
Pokud služba běžı́ pod konkrétnı́m uživatelským účtem (tj. žádným ze speciálnı́ch účtů pro
služby, o kterých se budeme učit dále v této kapitole), jejı́ proces je připojen do stanice oken, jejı́ž
název je částečně odvozen z SID uživatelského účtu, pod kterým běžı́ (hornı́ část SID se použije jako
hexadecimálnı́ čı́slo v názvu, napřı́klad Service-0x0-63a8f$). Je zřejmé, že taková služba nemůže
být interaktivnı́ (protože nenı́ napojena na stanici oken WinSta0).
V seznamu stanic oken se může objevit SAWinSta. Tato stanice má poněkud zvláštnı́ postavenı́
(v dokumentaci ji často ani nenajdeme). Je určena pro procesy (lépe řečeno služby), které byly
spuštěny ještě dřı́v, než byly spuštěny všechny moduly správy procesů.
Počet GDI objektů a stanic oken je možné v Process Exploreru zobrazit jako dalšı́ sloupec (klepneme pravým tlačı́tkem myši na záhlavı́ kteréhokoliv sloupce, zvolı́me Select Columns a na záložce
Process Memory zaškrtneme volby pro tyto objekty). Seznam těchto objektů je ve spodnı́m podokně,
pokud máme nastaveno zobrazovánı́ manipulátorů (handle). Také v tomto podokně můžeme vybı́rat
zobrazené sloupce (v kontextovém menu některého sloupce zvolı́me Select Columns.
Přı́klad 3.4
Výstup přı́kazu handle -a windowstations\winsta0 je následujı́cı́ (zkrácený, bez záhlavı́):
csrss.exe
csrss.exe
csrss.exe
winlogon.exe
winlogon.exe
...
thunderbird.exe
thunderbird.exe
FreeCommander.exe
FreeCommander.exe
cmd.exe
cmd.exe
handle.exe
handle.exe
pid:
pid:
pid:
pid:
pid:
654
654
654
672
672
F8:
28C:
3FC:
B0:
B8:
\Windows\WindowStations\WinSta0
\Windows\WindowStations\WinSta0
\Windows\WindowStations\WinSta0
\Windows\WindowStations\WinSta0
\Windows\WindowStations\WinSta0
pid:
pid:
pid:
pid:
pid:
pid:
pid:
pid:
2540
2540
2500
2500
3920
3920
1420
1420
2C:
34:
2C:
34:
1C:
24:
7E0:
7F4:
\Windows\WindowStations\WinSta0
\Windows\WindowStations\WinSta0
\Windows\WindowStations\WinSta0
\Windows\WindowStations\WinSta0
\Windows\WindowStations\WinSta0
\Windows\WindowStations\WinSta0
\Windows\WindowStations\WinSta0
\Windows\WindowStations\WinSta0
M
Zı́skali jsme seznam procesů, které jsou napojeny do stanice oken WinSta0 (mohli jsme zadat jen
winsta0, ale tento podřetězec se vyskytuje v názvech některých dalšı́ch objektů). Podobně bychom
zjistili seznam procesů napojených do kterékoliv jiné stanice oken.
3.2.3
Model COM
COM (Component Object Model) je specifikace určujı́cı́ formu, vlastnosti a způsoby přı́stupu k objektům (nenı́ to programovacı́ jazyk). Tento model byl navržen, aby bylo možné vytvářenı́ binárnı́ch
(tj. s přeloženým kódem) komponent (to jsou ty cı́lové objekty) napsaných v libovolném jazyce pro
P
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
79
využitı́ opět v kterémkoliv programovacı́m jazyce. Můžeme řı́ci, že jde o specifikaci binárnı́ho rozhranı́ objektových komponent přı́stupného nejen v rámci jednoho procesu, ale i v jiných procesech,
než ve kterém běžı́. Účelem je také umožněnı́ relativně snadné komunikace mezi procesy.
Každá komponenta má definováno nejméně jedno rozhranı́ (interface), které určuje jejı́ metody.
Vnitřnı́ datové struktury komponenty nejsou přı́stupné, proto nedocházı́ k problémům běžným
u klasických dynamických knihoven. Narozdı́l od běžných objektově orientovaných jazyků (v nichž
jsou metody součástı́ objektu) je rozhranı́ vlastně třı́dou a objekt (komponenta) je třı́da odvozená
od některého rozhranı́, která přidává konkrétnı́ hodnoty vnitřnı́ch dat (jedna komponenta může
implementovat i vı́ce než jedno rozhranı́).
Přı́stupnost metod definovaných rozhranı́m je fyzicky řešena jako ukazatel na tabulku virtuálnı́ch
funkcı́, která obsahuje ukazatele na konkrétnı́ implementace metod dané komponenty. Všechna
rozhranı́ jsou potomky (v rámci dědičnosti) rozhranı́ iUnknown (názvy rozhranı́ tradičně začı́najı́
pı́smenem „i“).
rozhranı́
iUnknown
@
?@
R
@
tabulka
virtuálnı́ch
funkcı́
..
.
?
rozhranı́
iRozhrA
třı́da
-
Třı́daA
-
virtuálnı́
funkce
-
fce1
-
fce2
-
fce3
Obrázek 3.4: Vztah třı́d a rozhranı́ v modelu COM
Komponenty (třı́dy) jsou identifikovány podle čı́sla CLSID (Class ID), které jsme často viděli
napřı́klad v registru. CLSID je vlastně typ označenı́ odpovı́dajı́cı́ označenı́m, která souhrnně nazýváme GUID (Globally Unique ID). Existuje tedy několik typů GUID – pokud se jedná o identifikaci
třı́dy, je to CLSID, pokud identifikujeme rozhranı́, je to IID (Interface ID), jestliže identifikujeme
knihovnu, je to LIBID (Library ID), apod. Aby GUID bylo opravdu unikátnı́ (jednoznačné), musı́ být
vygenerováno programem pro tento účel určeným (můžeme stanovit nějaké GUID i ručně, ale nemáme zaručeno, že napřı́klad u zákaznı́ka takové GUID neexistuje. Programátoři obvykle použı́vajı́
program Guidgen.exe (tento nebo jiný podobný program bývá součástı́ běžných programovacı́ch
prostředı́).
Hodně systémových funkcı́ je implementováno jako rozhranı́ COM, na této technologii jsou
založeny technologie OLE, OCX, ActiveX a částečně .NET Framework. Také z nı́ vycházı́ rozhranı́
WMI, kterému se budeme věnovat ke konci této kapitoly.
Definice třı́d (typů) se vytvářı́ v jazyce MIDL (Microsoft Interface Definition Language) a dál se
překládá do konkrétnı́ho jazyka, ve kterém programujeme aplikace. COM lze programovat v mnoha
jazycı́ch (je důležité, aby jazyk podporoval ukazatele a aby byl objektový). Pro jazyk musı́ existovat
kompilátor (snad spı́še preprocesor) jazyka MIDL. Většinou je jazyk MIDL před programátorem
„skryt“ programovacı́m prostředı́m. Programujeme obvykle v jazycı́ch C++, Delphi, Visual Basic,
P
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
80
C# (a dalšı́ch .NET jazycı́ch), asi nejobvyklejšı́ programovacı́ prostředı́ pro COM je Visual Studio
(resp. Visual Studio.NET).
Velmi důležitou výhodou technologie COM je univerzálnost (COM komponenty lze použı́t
prakticky v jakémkoliv modernı́m jazyce i po jejich přeloženı́, je definováno jejich binárnı́ rozhranı́)
a dále vlastnı́ správa paměti (obvykle se nemusı́me starat o uvolněnı́ alokované paměti). Tento
model ale má také nevýhody, a to
P
• komplikovanost návrhu a použı́vánı́,
• problémy s bezpečnostı́ při programovánı́ internetových aplikacı́ (komponenty majı́ sice svá
data skrytá, ale samy mohou volně přistupovat všude tam, kam má přı́stup proces, v jehož
kontextu běžı́), atd.
Nejen z důvodu těchto nevýhod bylo navrženo (a použı́vá se) několik rozšı́řenı́:
• COM+ je rozšı́řenı́ původnı́ho COM o nové vlastnosti, napřı́klad byl vylepšen systém přı́stupových oprávněnı́ (oprávněnı́ založená na rolı́ch) a byla přidána podpora COM+ Events
(událostı́, které lze využı́vat mezi procesy),
• DCOM (Distributed COM) je rozšı́řenı́ možnosti komunikace mezi objekty i na různých počı́tačı́ch (podpora distribuovaných aplikacı́), toto rozšı́řenı́ bylo původně součástı́ COM+.
Ve Windows se pro konfiguraci DCOM použı́vá nástroj Konfigurace modelu DCOM, který spustı́me
souborem dcomcnfg.exe (je pravděpodobné, že po zadánı́ tohoto přı́kazu obdržı́me několik hlášenı́ typu „CLSID . . . nenı́ zaznamenán v registru. Chcete ji zaznamenat?“. Všechna vystornujeme
(klepneme na Ne). Ve Windows od verze Vista budeme potřebovat vyššı́ přı́stupová oprávněnı́.
V nástroji Konfigurace modelu DCOM (obrázek 3.5 vlevo) máme seznam aplikacı́ DCOM (dostaneme se k jejich vlastnostem (tentýž obrázek vpravo). Na záložce Výchozı́ vlastnosti můžeme povolit
nebo zakázat použı́vánı́ DCOM a stanovit, zda a jak se má provádět kontrola přı́stupových oprávněnı́. Na záložce Výchozı́ zabezpečenı́ nastavujeme výchozı́ přı́stupová, spouštěcı́ a konfiguračnı́
Obrázek 3.5: Nástroj Konfigurace modelu DCOM
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
81
oprávněnı́. Na záložce Výchozı́ protokoly lze stanovit a přı́padně i konfigurovat (u TCP/IP) protokoly
použı́vané pro komunikaci mezi komponentami (také po sı́ti). Všechny tyto vlastnosti můžeme také
konfigurovat zvlášt’pro jednotlivé aplikace v jejich vlastnostech.
Obrázek 3.6: Nástroj Služba komponent
Dalšı́m nástrojem pro konfiguraci, tentokrát modelu COM+, je Služba komponent (Component Services, soubor – konzola comexp.msc) dostupná v Nástrojı́ch pro správu. Rozhranı́ vidı́me na obrázku 3.6.
V konzole najdeme podrobné informace o COM
aplikacı́ch a jejich komponentách. Můžeme zde instalovat COM aplikace (také na ostatnı́ch počı́tačı́ch
v sı́ti) a konfigurovat je i jejich komponenty (až na
úroveň metod objektů). Zvláště v konzole běžı́cı́ na
serveru si dáváme záležet na konfiguraci zabezpečenı́. K vlastnostem aplikacı́, komponent a dalšı́ch
vnořených položek se dostaneme přes kontextové
menu položky, v něm zvolı́me Vlastnosti (viz obrázek 3.7).
Komponenty najdeme i v registru. Třı́dy
jsou v klı́či HKCR/CLSID (v podklı́čı́ch nazvaných podle jejich CLSID) a rozhranı́ komponent
v HKCR/interface (v podklı́čı́ch nazvaných podle
jejich IID). V obou přı́padech vždy najdeme v položce
(Výchozı́) název třı́dy (resp. rozhranı́). V podklı́čı́ch
P
Obrázek 3.7: Vlastnosti komponenty
3.2
OBJEKTOVÝ MODEL VE WINDOWS ŘADY NT
82
jsou pak dalšı́ informace. Ovšem vı́me, že klı́č HKCR je pouze odkazem jinam, tedy ve skutečnosti se
nacházejı́ v klı́či HKLM.
Informace o programovánı́ COM najdeme na vı́ce různých stránkách na internetu, napřı́klad na
http://antonio.cz/com/index.html.
Speciálnı́m typem COM objektů jsou Automation Objects, implementace potomků rozhranı́ iDispatch
(to znamená, že Automation Server je COM komponenta, která implementuje rozhranı́ iDispatch).
Původně byly nazývány OLE Automation, ale nejsou použı́vány pouze v technologii OLE. Účelem použı́vánı́ Automation je zjednodušenı́ přı́stupu ke komponentě. Rozhranı́ iDispatch umožňuje
zjistit metody nabı́zené komponentou bez nutnosti vyhledávánı́ přes tabulku virtuálnı́ch metod.
Jsou určeny k použitı́ ve skriptovacı́ch jazycı́ch pod Windows (zvláště založených na Visual Basicu).
Aplikace (Automation Server) může nabı́zet (exportovat) svůj Automation Object ke sdı́lenı́, a jiná
aplikace nazvaná Automation Controller (klient), s tı́mto objektem může manipulovat.
Automation Objects s vizuálnı́m rozhranı́m, které vždy běžı́ uvnitř některé aplikace, nazýváme
ActiveX Controls (ovládacı́ prvky ActiveX) a manipulujı́cı́ aplikace je ActiveX Client. Typické použitı́ je
při distribuovaném spouštěnı́ drobných aplikacı́ či prvků grafického rozhranı́ (to jsou právě ovládacı́
prvky ActiveX) ze serveru na klientských počı́tačı́ch v sı́ti. Prvky ActiveX jsou tedy Automation
objects, které kromě rozhranı́ iDispatch implementujı́ ještě některá dalšı́ rozhranı́ souvisejı́cı́ právě
s grafickým rozhranı́m komponenty.
P
P
Zkratka ADO znamená ActiveX Data Objects, technologie ADO byla původně založena na
prvcı́ch ActiveX (podobně ASP – Active Server Pages).
Dalšı́ známý typ objektů jsou OLE objekty, implementujı́cı́ rozhranı́ iOleObject. Konkrétnı́ rozhranı́ implementované některým OLE objektem se nazývá OLE kontejner.
Úkoly
1. Podle svých možnostı́ si projděte nástroj Konfigurace modelu DCOM a konzolu Služba komponent.
C
2. V klı́či HKCR/icmfile/shellex/ContextMenuHandlers zkopı́rujte název podklı́če obsahujı́cı́
CLSID (na klı́či zobrazte kontextové menu a vyberte Zkopı́rovat název klı́če). Pak se pokuste
v klı́či HKCR/CLSID najı́t podklı́č se stejným názvem a zjistěte, jaké jsou v jeho podklı́či položky.
Podobně můžete vyhledávat i dalšı́ klı́če nazvané podle CLSID souvisejı́cı́ch třı́d komponent
(nebo IID rozhranı́).
3. Najděte v registru rozhranı́ IUnknown a zjistěte jeho IID.
3.2.4
.NET
Technologie .NET vznikla roku 2000, použı́vá se od roku 2001/02. Je považována za nástupce
technologie COM.
Jedná se o standard pro běhové prostředı́ (ekvivalent podsystému ve Windows, ale v obecnějšı́m
smyslu slova) podobně jako napřı́klad Java, s vlastnı́ správou paměti. Je definováno jakési rozhranı́,
které (výlučně) sloužı́ ke komunikaci .NET aplikace se systémem. Podobně jako v Javě, .NET aplikace
jsou překládány do bytecode (mezikódu), který je nezávislý na softwarové platformě (operačnı́m
P
3.3
ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ
83
systému) a teprve při spuštěnı́ aplikace docházı́ k překladu bytecode do kódu specifického pro daný
systém (aplikace zcela přeložená pro běh v konkrétnı́m systému se nazývá assembly).
S touto technologiı́ se běžně setkáváme od Windows XP SP2 a Server 2003 (do Windows 2000
a XP bez SP2 ji lze doinstalovat) pod názvem .NET Framework, od verze Vista je dokonce velmi
úzce spojena s grafickým rozhranı́m systému (nový podsystém WinFX pro .NET aplikace, pod nı́m
běžı́ napřı́klad PowerShell).
.NET technologie je prezentována jako multiplatformnı́, tedy dostupná pro kterýkoliv operačnı́
systém, i když ze začátku tı́m „kterýkoliv“ byl mı́něn kterýkoliv systém typu Windows. Dnes již
existujı́ porty pro dalšı́ operačnı́ systémy. Přı́mo na MSDN4 jsou už nějakou dobu dostupné porty
pro FreeBSD a MacOS X, na internetu je několik řešenı́ pro Linux (MONO, dotGNU – Portable.NET).
Programujeme v tzv. .NET jazycı́ch, což je předevšı́m C#, ale také Visual Basic.NET, Delphi.NET,
J#, IronPython, IronRuby, atd.
Od .NET jsou odvozeny technologie ADO.NET (potomek staršı́ technologie ADO, pro přı́stup
k databázı́m) a ASP.NET (pro programovánı́ webových aplikacı́).
Ve Windows můžeme prostředı́ .NET Framework konfigurovat v snap-in modulu .NET Framework Configuration. Konzolu s tı́mto snap-in modulem vytvořı́me snadno – spustı́me MMC
(mmc.exe) a běžným způsobem přidáme snap-in modul. Fyzicky se jedná o soubor (konzoli)
msCorCfg.msc (je „zanořen“ ve složce ...\windows\Microsoft.NET\Framework\verze). Tento
nástroj použı́váme předevšı́m k řı́zenı́ prostředı́, ve kterém běžı́ .NET aplikace (assemblies), napřı́klad můžeme zde nastavovat bezpečnostnı́ zóny, ve kterých běžı́ aplikace s různými oprávněnı́mi.
Seznam všech nástrojů od Microsoftu pro práci s .NET je na
http://msdn.microsoft.com/en-us/library/d9kh6s92%28VS.80%29.aspx.
3.3
3.3.1
Řı́zenı́ přı́stupu a správa uživatelů
Uživatelské profily a uživatelské účty
Uživatelský profil (User Profile) ve Windows je souhrn prostředků přidělených uživateli a nastavenı́ systému (většinou prostředı́) typických pro tohoto uživatele. Obvykle zde bývá řazen datový
prostor přidělený uživateli (standardně složka Dokumenty) a dále nastavenı́ plochy, nabı́dky Start,
individuálnı́ch položek kontextového menu Nový a Odeslat, Cookies, apod.
Celý uživatelský profil je ve Windows řady NT načten ve složce Documents and Settings (od
verze Vista Users), v podsložce každého uživatele, ve Windows s DOS jádrem je to bud’ systémová
složka (část je přı́mo na systémovém disku) a nebo složka Profiles (pokud je nadefinován vı́ce než
jeden uživatelský profil).
Uživatelský účet (User Account) je fyzicky implementován v registru (narozdı́l od profilu, který
je vlastně adresářem/složkou), je to záznam obsahujı́cı́ převážně bezpečnostnı́ informace určujı́cı́
konkrétnı́ho uživatele v operačnı́m systému. Tyto informace jsou obvykle uživatelské jméno, heslo,
členstvı́ ve skupinách a oprávněnı́ k přı́stupu ke zdrojům systému (přı́stupová práva).
4
$
MSDN (Microsoft Developer Network) je část serveru Microsoftu dostupná na jeho stránkách, obsahuje nástroje
a dokumenty pro podporu programátorů.
P
P
3.3
ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ
84
Skupina je definována svým názvem, seznamem členů a také oprávněnı́mi k přı́stupu ke zdrojům
pro členy skupiny. Jeden uživatel může být členem vı́ce skupin.
Uživatelské účty se ve Windows použı́vajı́ pouze v řadě NT, profily jsou v obou větvı́ch Windows.
Ve Windows řady NT existuje mezi profily a účty úzký vztah (obvykle k účtu přı́slušı́ konkrétnı́
profil, včetně procesů služeb), po přihlášenı́ uživatele s určitým účtem je načten jeho profil.
Obrázek 3.8: Přesunutı́ složky Dokumenty
Přesměrovánı́ složek: Složky patřı́cı́ do profilu uživatele lze přesměrovat pomocı́ Zásad skupiny
nebo Systémových zásad (viz dále), přı́padně v registru, ale složku Dokumenty můžeme přesměrovat
na jiné mı́sto (na lokálnı́m disku) s použitı́m Vlastnostı́ (na složce Dokumenty vyvoláme kontextové
menu, zvolı́me Vlastnosti) – z důvodu bezpečnosti systému a dat je výhodnějšı́ mı́t data na jiném
logickém disku než systém a programy (Windows je vhodné občas přeinstalovat, ale přece si kvůli
tomu nebudeme mazat data).
Zkopı́rovánı́ profilu použijeme napřı́klad tehdy, když chceme profil uživatele přenést na jiný počı́tač
(včetně všech nastavenı́ a dat). Tuto operaci provádı́me v nástroji Systém (Vlastnosti v kontextovém
menu ikony Tento počı́tač, záložka Profily uživatelů), a to vybránı́m profilu a klepnutı́m na tlačı́tko
Kopı́rovat. Zobrazı́ se okno, ve kterém zadáme umı́stěnı́ kopie (třeba USB flash disk, na kterém profil
přeneseme).
Upozorněnı́: profil můžeme kopı́rovat jen tehdy, pokud zrovna nenı́ použı́ván, tedy nelze zkopı́rovat profil patřı́cı́ „kopı́rujı́cı́mu“. Když chceme zkopı́rovat svůj vlastnı́ profil, přihlásı́me se jako
jiný uživatel s administrátorskými oprávněnı́mi.
Cestovnı́ profily (Roaming Profiles) umožňujı́ uživatelům použı́vat tentýž profil na vı́ce různých
počı́tačı́ch v téže sı́ti. Veškerá data profilu jsou uložena na serveru. Po přihlášenı́ k tomuto serveru
(tj. přihlášenı́ do sı́tě) je celý profil načten do počı́tače podobně, jakoby byl profil nadefinován na
samotném počı́tači, po odhlášenı́ se profil opět uložı́ na server.
Cestovnı́ profily se využı́vajı́ napřı́klad ve školstvı́, aby žáci – studenti nemuseli být vázáni na
konkrétnı́ počı́tač, a měli by ke svým datům přı́stup z kteréhokoliv počı́tače v každé učebně, ale také
napřı́klad u mobilnı́ch zaměstnanců. Ti svůj profil mohou použı́vat i na pracovnı́ cestě (notebook
připojı́ k internetu, přihlásı́ se, automaticky se načte profil, . . . ) – implementuje se pomocı́ VPN
$
$
P
3.3
ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ
85
(Virtual Private Network), připojenı́ by mělo být vhodně zabezpečené. Cestovnı́ profily mohou být
výhodné i tehdy, když uživatel použı́vá pořád tentýž počı́tač – svůj profil má zálohován na serveru
a neztratı́ data, pokud počı́tač odejde do „věčných lovišt’“.
Jistou nevýhodou je rozsáhlost dat, která takto při každém přihlášenı́ a odhlášenı́ putujı́ po sı́ti,
může zpomalovat přihlašovánı́ a odhlašovánı́ a za určitých okolnostı́ může dojı́t k problémům při
přenášenı́ dat na server. To lze řešit přesunutı́m některých druhů dat profilu na sı́t’ové disky a jejich
přı́padným zpřı́stupněnı́m offline, pokud uživatel nechce být neustále připojen k sı́ti.
Je nutné hlı́dat, zda se na počı́tačı́ch nehromadı́ profily uživatelů (občas je třeba je mazat). Dále
může nastat situace, kdy po odhlášenı́ uživatele některé služby nebo aplikace neukončı́ práci s částmi
registru patřı́cı́mi do profilu uživatele, a tı́m znemožnı́ přenesenı́ profilu na server (a samozřejmě
profil se na lokálnı́m počı́tači nevymaže). Tyto je problémy se týkajı́ předevšı́m klientských počı́tačů
s Windows 2000, ve Windows XP jsou již řešeny.
Cestovnı́ profil bud’ vytvořı́me přı́mo na serveru, a nebo můžeme lokálnı́ profil změnit na cestovnı́. To se provede tak, že
$
• v nástroji pro správu uživatelů (Uživatelé a hesla nebo Uživatelské účty, podle verze Windows)
najdeme vlastnosti uživatele, jehož profil chceme změnit na cestovnı́, najdeme záložku pro profil a zadáme sı́t’ovou cestu k budoucı́mu profilu (začı́najı́cı́ dvěma opačnými lomı́tky, povede do
vhodného adresáře na serveru, který ještě neexistuje), napřı́klad \\serverXXX\lide\novak,
• zkopı́rujeme profil na server (při kopı́rovánı́ zadáme stejnou cestu jako v předchozı́m bodu).
Služby se nemusı́ přihlašovat s přı́stupovými právy přihlášeného uživatele, většinou využı́vajı́ účty
LocalSystem, LocalService a NetworkService. Službám a jejich přı́stupovým oprávněnı́m se budeme
věnovat později.
Nastavenı́ souvisejı́cı́ s uživateli, skupinami a přı́stupovými oprávněnı́mi provádı́me v těchto
nástrojı́ch:
$
• v nástroji Uživatelé a hesla/Uživatelské účty (v Ovládacı́ch panelech) – vytvořenı́ a zrušenı́ uživatelského účtu,
• v konzole Správa počı́tače ï Mı́stnı́ uživatelé a skupiny (konzola lusrmgr.msc) – vytvářenı́ a rušenı́
skupin, přidávánı́ a odstraňovánı́ uživatelů ze skupin, také některá z nastavenı́ prováděných
přı́kazy net user a net localgroup,
• v Mı́stnı́ch zásadách zabezpečenı́ (v Nástrojı́ch pro správu),
• v Zásadách skupiny (některé aspekty),
• v Přı́kazovém řádku pomocı́ cacls.exe a dalšı́ch.
Ne všechny tyto možnosti jsou dostupné ve všech verzı́ch Windows, mimořádně osekané jsou
napřı́klad Windows XP Home, kde nenajdeme konzolu Mı́stnı́ uživatelé a skupiny ani Zásady skupiny.
Úkoly
1. Najděte svůj profil a zjistěte, jak jsou k němu nastavena přı́stupová oprávněnı́ pro vás a pro
administrátora. Porovnejte s nastavenı́m oprávněnı́ u profilu All Users a Default User.
Ověřte si, ve které systémové proměnné je uložen název profilu právě přihlášeného uživatele.
C
3.3
ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ
86
2. Najděte svůj uživatelský účet v registru. Dále si vzpomeňte, kde v grafickém rozhranı́ lze
konfigurovat uživatelské účty a kde může uživatel nastavit své heslo. Vzpomeňte si, jak se to
dělá v Přı́kazovém řádku.
3. Pro účty Local Service a Network Service najděte uživatelské účty v registru (hodnoty SID zjistı́te
na začátku této kapitoly) a profily v adresářové struktuře.
4. Pokuste se přesměrovat svou složku Dokumenty na jiný diskový oddı́l.
5. Zjistěte, zda váš profil je lokálnı́ nebo cestovnı́. Projděte si postup, kterým byste změnili lokálnı́
profil na cestovnı́.
3.3.2
Přı́stupová oprávněnı́
V souborovém systému NTFS je u každého objektu (také složky a souboru) evidován seznam DACL
(resp. zjednodušeně ACL) s přı́stupovými právy. Je zde stanoveno, kdo (třeba člen konkrétnı́ skupiny
nebo uživatel) může provádět kterou akci s tı́mto objektem.
O přı́stupových oprávněnı́ch už něco vı́me z předchozı́ho semestru. Základnı́ symboly pro
přı́stupová oprávněnı́ jsou
•
•
•
•
•
O
f (full) – všechna práva,
r (read) – právo čtenı́,
w (write) – právo zápisu,
c (change) – právo modifikace (změny),
n (none) – žádná práva.
U složek navı́c můžeme určit, kterých vnořených objektů se nastavená práva budou týkat (aktuálnı́
složky, podsložek, souborů). Dědičnost práv se určuje jako kombinace voleb
P
• (OI) – pro tuto složku a soubory v nı́
• (CI) – pro tuto složku a jejı́ podsložky
• (IO) – neplatı́ pro tuto složku (tato volba „odebı́rá“ oblast platnosti)
Možné kombinace voleb pro ACL jsou v tabulce 3.1.
V grafickém rozhranı́ je nastavujeme ve vlastnostech souboru na kartě Zabezpečenı́. Po klepnutı́
na tlačı́tko Upřesnit můžeme nastavovat speciálnı́ oprávněnı́ specifická pro určitý typ objektu.
Přı́kaz CACLS sloužı́ k nastavenı́ přı́stupových práv souborového systému NTFS (pracuje pouze
na logickém disku formátovaném jako NTFS), je součástı́ Windows od verze 2000.
cacls soubor
výpis nadefinovaných přı́stupových práv souboru (ACL listy)
totéž, ale postupně pro všechny adresáře a soubory v pracovnı́m adresáři (můžeme
zadat také složitějšı́ výraz)
cacls *
k zadanému souboru přidělı́ uživateli s názvem patrik práva pro
čtenı́ (jakákoliv původnı́ oprávněnı́ budou přepsána)
cacls soubor /g patrik:r
$
3.3
ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ
Řetězec
Význam
prázdný řetězec
jen pro tuto složku, nedědı́ se
pro tuto složku a soubory v nı́
pro tuto složku a jejı́ podsložky
platı́ pro tuto složku, soubory v nı́ i jejı́ podsložky (plné děděnı́)
platı́ pro soubory ve složce a jejı́ podsložky, ale ne pro samotnou složku
platı́ jen pro soubory ve složce, ne pro složku ani podsložky
platı́ jen pro podsložky, ne pro složku ani soubory v nı́
(OI)
(CI)
(OI)(CI)
(OI)(CI)(IO)
(OI)(IO)
(CI)(IO)
87
Tabulka 3.1: Děděnı́ přı́stupových oprávněnı́ v ACL
ke všem souborům v pracovnı́ složce přidá uživateli patrik právo
zápisu (ostatnı́ práva zůstanou zachována)
cacls * /e /g patrik:w
cacls *.doc /t /e /g patrik:w
ke všem DOC souborům z pracovnı́ složky i z jejı́ch podsložek (parametr /t, rekurze) přidá uživateli patrik práva pro zápis (ostatnı́ práva zůstanou
zachována)
odebere uživateli patrik všechna přı́stupová práva k souboru abc.doc,
která měl navı́c oproti právům skupiny apod.
cacls abc.doc /r patrik
cacls abc.doc /d patrik
zakáže uživateli patrik přı́stup k danému souboru
Ve výpisu přı́stupových práv (přı́kaz bez parametrů, napřı́klad v kořenovém adresáři systémového
disku) vidı́me řetězce, které určujı́ způsob rekurzivnı́ho přenášenı́ práv na vnořené objekty (třeba
podsložky).
Přı́klad 3.5
Pohrajeme si s přı́stupovými oprávněnı́mi. Přesuneme se na disk, na kterém máme právo zápisu
a vytvořı́me dva vnořené adresáře. Také vytvořı́me nového uživatele a budeme mu přidávat nebo
odebı́rat přı́stupová oprávněnı́.
md pokus
vytvořı́me prvnı́ adresář
cd pokus
přesuneme se do něj
md vnitrni
cd..
vytvořı́me podadresář
přesuneme se o úroveň výše (všechny předchozı́ přı́kazy včetně tohoto lze provést jediným
přı́kazem md pokus\vnoreny)
vytvořı́me nového testovacı́ho uživatele (jeho heslo je stejné jako
jméno), po vytvořenı́ by měl mı́t přı́stupová oprávněnı́ spı́še nižšı́ (pravděpodobně skupina
Users, záležı́ na verzi Windows)
net user novy novy /add
pro jistotu si ověřı́me vlastnosti nově vytvořeného uživatele, všimněte si, do
kterých skupin patřı́ (tato informace je ve výpisu)
net user novy
zobrazı́me přı́stupová oprávněnı́ nového adresáře, měl by tam být záznam pro
skupinu everyone s právy f (full, vše)
cacls pokus
cacls pokus /e /d novy
novému uživateli zakážeme přı́stup k adresáři (pozor, nesmı́me zapomenout parametr /e, aby se nepřepsal celý ACL – seznam řı́zenı́ přı́stupu)
3.3
ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ
cacls pokus /e /g novy:r
cacls pokus
88
ale přidělı́me mu právo čtenı́
ověřı́me ve výpisu, měl by tam být řádek pro nového uživatele s oprávněnı́m „n“
podı́váme se, jestli to nastavenı́ mělo nějaký vliv na oprávněnı́ u vnořeného adresáře – zjistı́me, že ne, protože jsme nepoužili parametr pro rekurzi
cacls pokus /e /r novy
ted’ pozor – mohlo by se stát, že práva ještě ubı́ráme, ale ve skutečnosti
jsme ze seznamu oprávněnı́ ACL zadaného adresáře vymazali údaje o novém uživateli, tedy
v našem přı́padě jsme vlastně odstranili záznam o zákazu přı́stupu
cacls pokus\vnoreny
cacls pokus
ověřı́me si výsledek předchozı́ho přı́kazu
tento přı́kaz je podobný jako ten, který jsme použili pro zákaz
přı́stupu novému uživateli, ale dı́ky parametru /t je rekurzı́vnı́
cacls pokus /t /e /d novy
cacls pokus /t /e /g novy:r
cacls pokus
rekurzı́vně mu povolı́me čtenı́
ověřı́me si, ted’ by měl mı́t stejná oprávněnı́ i v podadresáři
aha, zapomněli jsme parametr /e, takže tı́mto přı́kazem jsme přepsali
ACL, můžeme si to ověřit zadánı́m cacls pokus
cd pokus
ted’ by se mělo objevit hlášenı́ „Přı́stup byl odepřen“, protože pro nás nejsou definována
žádná oprávněnı́ (je definováno pouze jedno, a to „Nepustit dovnitř uživatele novy“), do
adresáře se nedostaneme
cacls pokus /d novy
napravı́me chybu, kterou jsme provedli v předchozı́m přı́kazu, jinak bychom tento adresář nemohli ani smazat5
cacls pokus /e /g everyone:f
rd /s pokus
uklidı́me v adresářı́ch – rekurzı́vně smažeme adresář i jeho podadresář
net user novy /delete
uklidı́me po sobě také v seznamu uživatelů
Ve skutečnosti lze s přı́stupovými oprávněnı́mi pracovat i pomocı́ jiných přı́kazů, některé jsou
součástı́ novějšı́ch verzı́ Windows, jiné musı́me sehnat na internetu.
Jedná se předevšı́m o přı́kaz, který je velmi užitečný a také využı́vaný na serverech, ICACLS.
Najdeme ho ve Windows Vista a Windows Server od verze 2003 SP2. Některé parametry jsou
podobné jako u cacls (napřı́klad /t použı́váme pro rekurzi), ale obecně má odlišnou syntaxi.
Napřı́klad
$
icacls adresar /grant:r novy:r /t
přidá uživateli novy právo ke čtenı́ (pozor – „r“ za /grant znamená přidánı́ práv bez přepsánı́ již
definovaných, až druhé „r“ za uživatelem je právo čtenı́), poslednı́ parametr znamená rekurzı́vnı́
děděnı́.
Uživatele (vlastně i skupiny) je možné zadat nejen názvem, ale také řetězcem SID. Tento přı́pad
odlišujeme použitı́m hvězdičky před SID, napřı́klad
icacls adresar /grant:r *S-1-5-27-697:r /t
Podobně se použı́vá parametr /deny, kterým se práva odebı́rajı́.
Kromě běžných oprávněnı́ lze pracovat také se speciálnı́mi oprávněnı́mi:
icacls soubor /grant *S-1-1-0:(d,wdac)
5
Uvědomte si, že se sice do adresáře nedostaneme, ale můžeme k němu definovat přı́stupová oprávněnı́.
3.3
ŘÍZENÍ PŘÍSTUPU A SPRÁVA UŽIVATELŮ
89
Skupině Everyone (ve výchozı́m nastavenı́ má SID S-1-1-0) přiřazuje speciálnı́ práva pro mazánı́
(právo D, delete) a dále možnost zapisovat do seznamů určujı́cı́ch přı́stupová oprávněnı́ k zadanému
objektu (souboru) – WDAC.6
Také můžeme podrobně určovat dědičnost:
icacls adresář /grant:r uzivatel:(OI)(CI)r /T
(určili jsme plnou dědičnost, můžeme použı́vat jakoukoliv kombinaci z tabulky 3.1. Řetězec (NP)
znamená, že se nemá použı́t žádné děděnı́ (do not propagate inherit).
Tento přı́kaz má ještě dalšı́ důležitou funkci – můžeme seznamy přı́stupových práv ukládat do
souboru (textového) a nebo ze souboru načı́tat:
icacls * /save souborACL.txt /t
icacls * /restore souborACL.txt /t
(prvnı́ přı́kaz uložı́ nastavená oprávněnı́ z pracovnı́ho adresáře a rekurzı́vně z celého jeho obsahu
do zadaného souboru, druhý přı́kaz je opětovně načte).
Dalšı́ přı́kaz, který lze použı́vat k práci s přı́stupovými oprávněnı́mi, je XCACLS (s dodatkem
xcacls.vbs). Je součástı́ Windows Server od verze 2003.7 Má syntaxi velmi podobnou přı́kazu
cacls, ale umožňuje pracovat také se speciálnı́mi oprávněnı́mi.8
Z nástrojů „třetı́ch stran“ může být zajı́mavý také program SetACL šı́řený pod licencemi GPL
a LGPL.9 Je dostupný ve dvou formách – bud’ jako nástroj pro Přı́kazový řádek (bez grafického
rozhranı́) a nebo jako komponenta ActiveX.
Úkoly
1. Pokud na to budou stačit vaše přı́stupová oprávněnı́, vyzkoušejte si postupně všechny přı́kazy
z přı́kladu 3.5. Dbejte na bezpečnost – pokus provádějte na adresáři, který nenı́ důležitý (nejlépe
nově vytvořený), a to s jiným uživatelským jménem, než pod kterým pracujete (nejlépe nově
vytvořeným, stejně jako v přı́kladu). Nezapomeňte po sobě uklidit.
C
2. Vypište si nápovědu přı́kazu cacls. Projděte si všechny možné přepı́nače tohoto přı́kazu.
3. Sestavte přı́kaz (s použitı́m cacls), kterým uživateli honza přidáte právo pro zápis k adresáři
d:\faktury, a to rekurzı́vně i pro podadresáře. Potom tentýž přı́kaz sestavte s použitı́m
icacls.
4. Na adrese uvedené v jedné z poznámek pod čarou najděte seznam zkratek pro speciálnı́
přı́stupová oprávněnı́.
5. Pokuste se najı́t na internetu seznam programů, které jsou součástı́ Windows Server 2003
Resource Kit (pozor, nemá jı́t o knihu, ale o souhrn nástrojů, které si lze stáhnout). Všimněte
si, že zatı́mco v Resource Kitu pro Windows 2000 je přı́kaz icacls, v Resource Kitu pro verzi
2003 už nenı́. Proč?
6
Seznam všech zkratek pro speciálnı́ oprávněnı́ včetně WDAC najdeme na
http://technet.microsoft.com/en-us/library/cc753525%28WS.10%29.aspx.
7
Nástroj xcacls lze také stáhnout napřı́klad ze stránek http://support.microsoft.com/kb/927229.
8
Přı́klady na přı́kaz xcacls včetně jejich výstupů najdeme napřı́klad na stránce
http://technet.microsoft.com/en-us/library/cc728458%28WS.10%29.aspx.
9
Najdeme ho na http://setacl.sourceforge.net/.
R
3.4
JMENNÉ A ADRESÁŘOVÉ SLUŽBY
3.3.3
90
Navyšovánı́ přı́stupových oprávněnı́
Přı́kaz RUNAS sloužı́ ke spuštěnı́ procesu s právy jiného uživatele, většinou administrátora (to znamená, že přı́kaz umožňuje navýšenı́ přı́stupových oprávněnı́). Základnı́ syntaxe přı́kazu je
runas [/profile | /noprofile] /user:uživatel program
$
Napřı́klad:
runas /user:administrator ”net user novy heslo /add”
nebo
runas /user:pocitac\administrator ”net user novy heslo /add”
runas /user:administrator@pocitac ”net user novy heslo /add”
nebo
Všimněte si, že přı́kaz obsahujı́cı́ mezery musı́ být uzavřen do uvozovek. Totéž platı́ o uživateli,
pokud jeho název obsahuje mezery (bohužel to je možné, a někteřı́ OEM prodejci toho zneužı́vajı́).
Tento přı́kaz spustı́ zadaný program s právy zadaného uživatele (zeptá se na heslo – pozor, uživatel
musı́ mı́t definováno heslo, nesmı́ být prázdné!). Je určen předevšı́m pro administrátory, kteřı́
(zcela podle doporučenı́ odbornı́ků) obvykle pracujı́ s nižšı́mi přı́stupovými oprávněnı́mi, ale někdy
potřebujı́ ke své práci většı́ oprávněnı́.
E
Přepı́nač /profile nebo /noprofile použijeme, pokud chceme či nechceme načı́st profil přihlašovaného uživatele (nenačtenı́ profilu sice zrychlı́ start programu, ale některé aplikace nemusı́
správně fungovat). Program může být jakýkoliv spustitelný soubor nebo nástroj včetně nástrojů
Windows (také textový skript nebo jiný přı́kaz).
Ekvivalentem v grafickém rozhranı́ je zobrazenı́ položky Spustit jako (v anglické verzi Run as)
v kontextovém menu objektu (spustitelného souboru, to může být i skript). Pokud tato položka
v kontextovém menu nenı́ (což je obvyklé v některých verzı́ch Windows), zobrazı́me ji takto:
• stiskneme a dále držı́me klávesu Shift ,
• zároveň obvyklým způsobem vyvoláme kontextové menu spustitelného souboru.
Od verze Vista je v kontextovém menu pouze položka Spustit jako správce (mı́něno administrátor).
Pokud nám chybı́ původnı́ možnost spouštět programy s přı́stupovými oprávněnı́mi různých uživatelů, nejen administrátora, můžeme si nainstalovat program ShellRunAs, který najdeme na stránkách
http://sysinternals.com.
$
L
Takže v grafickém režimu použı́váme položku Spustit jako, v textovém režimu (i pro programy
s oknem) přı́kaz runas.
Úkoly
1. Pomocı́ přı́kazu runas můžete spustit jakýkoliv program jako jakýkoliv uživatel (dokonce
i ten samý uživatel, který je právě přihlášen – vy). Pokud nemáte administrátorské heslo,
můžete tento přı́kaz vyzkoušet se zadánı́m svého vlastnı́ho přihlašovacı́ho jména. Spust’te
tı́mto způsobem kalkulačku (je to program calc.exe) nebo Poznámkový blok (notepad.exe).
2. Vyberte si některý z programů v nabı́dce Start a vyzkoušejte, zda se při klepnutı́ pravým
tlačı́tkem na položku programu objevı́ v kontextovém menu položka Spustit jako. Pokud ne,
vyzkoušejte zobrazenı́ kontextového menu zároveň se stisknutou klávesou Shift .
C
3.4
3.4
JMENNÉ A ADRESÁŘOVÉ SLUŽBY
91
Jmenné a adresářové služby
Jmenné služby jsou obecným principem překladu jmenných názvů (textových řetězců) na čı́selné
adresy, se kterými snadněji pracujı́ počı́tače. Typickým představitelem je DNS, jehož hlavnı́m účelem
je překlad slovnı́ch adres, kterým rozumı́me (třeba www.google.com) na čı́selné IP adresy.
Ke jmenným službám můžeme řadit také WINS (Windows Internet Name Service, sloužı́ k překladu názvů NetBIOS na IP adresy). Ovšem WINS se již moc nepoužı́vá (zejména z důvodu značných
omezenı́, napřı́klad délka názvu je nejvýše 15 znaků).
Oproti tomu adresářové služby sloužı́ k uspořádánı́, zabezpečenı́ a správě prostředků (často reprezentovaných objekty ve struktuře). Typickým představitelem je napřı́klad Active Directory.
3.4.1
P
P
Úvod do DNS
DNS (Domain Name System) je, jak bylo výše uvedeno, jmenná služba, a to distribuovaná. Sı́t’
je organizována v hierarchickém systému domén, kde každá doména má své jméno, a adresace
pomocı́ jména se vytvářı́ podle hierarchie. Můžeme si to představit jako řadu stromů, kde každý
strom má jeden kořen nazývaný doména prvnı́ úrovně (TLD, Top Level Domain, napřı́klad .cz nebo
.org) a dále se větvı́ v dalšı́ch úrovnı́ch (domény druhé, třetı́ a přı́p. dalšı́ úrovně). Napřı́klad adresa
mail.seznam.cz obsahuje celkem tři úrovně, z nichž prvnı́ úroveň je zcela vpravo. Ve skutečnosti
i tyto „stromy“ majı́ společný kořen (tzv. kořenovou doménu), která se označuje pouze samotnou
tečkou (bez dalšı́ch znaků).
P
Překlad názvů probı́há pomocı́ DNS serverů (jmenných – name – serverů). Překládá se ze jmenné
adresy na čı́selnou IP adresu (napřı́klad 127.89.125.8 podle protokolu IPv4), a nebo naopak. Protože
nenı́ technicky realizovatelné mı́t jeden jediný DNS server se všemi potřebnými záznamy, a ani
mı́t vı́ce takových DNS serverů, probı́há dotazovánı́ u DNS serverů distribuovaně. To znamená, že
záznamy o vztahu jmenných a IP adres jsou rozprostřeny mezi mnoho DNS serverů. Každý DNS
server má záznamy o své zóně (oblasti, kterou spravuje). Každá doména prvnı́ úrovně má určité
množstvı́ tzv. kořenových serverů.
Dotazovánı́ (máme jmennou adresu a chceme IP adresu) probı́há distribuovaně – DNS server
často nedokáže na dotaz odpovědět okamžitě podle svých záznamů, proto se obracı́ na některý
z kořenových serverů zadané domény prvnı́ úrovně.
Napřı́klad pokud potřebujeme zjistit IP adresu počı́tače www.firma.cz, DNS server se obrátı́
na některý z kořenových serverů domény .cz. Dotazovaný kořenový server bud’ adresu dohledá
ve svých záznamech a nebo se obrátı́ na některý se svých podřı́zených serverů. Takto distribuovaně probı́há vyhodnocovánı́ dotazu (postupně podle vnořovánı́ domén různých úrovnı́) a zpět je
odeslána zjištěná IP adresa.
Systémy Windows Server bývajı́ vybaveny DNS serverem, a nebo můžeme zvolit jiné řešenı́
(BIND, MyDNS, PowerDNS, atd.). DNS servery komunikujı́ pomocı́ protokolu TCP/IP, tedy tento
protokol musı́ být správně nakonfigurován na všech počı́tačı́ch, které jsou v sı́ti adresovány. DNS
server od Microsoftu dále vyžaduje, aby počı́tače v sı́ti měly systémový disk naformátován souborovým systémem NTFS (alespoň verze 5.0).
3.4
JMENNÉ A ADRESÁŘOVÉ SLUŽBY
92
Instalace DNS serveru od Microsoftu se provádı́ klasicky přes Přidat nebo odebrat programy, na
serverovém systému ve Správci serveru (Server Manager), kde instalujeme roli „DNS server“.
Na serveru konfigurujeme DNS pomocı́ konzole DNS Management (Správa DNS, dnsmgmt.msc),
což je klasická konzola se stromovou strukturou položek v levém podokně. V tomto nástroji provádı́me běžnou konfiguraci DNS. Dále existuje nástroj určený pro řešenı́ problémů s DNS, přı́kaz
dnscmd.exe. Jde o textovou interaktivnı́ konzolu podobně jako třeba NetShell.
Firma (nebo osoba) vlastnı́cı́ doménu určité úrovně může (napřı́klad ve své organizaci) vytvářet
podstrom domén nižšı́ch úrovnı́. Na tyto DNS domény lze pak napojit domény služby Active
Directory.
V prvnı́ kapitole jsme se s konfiguracı́ DNS již trochu setkali v nástroji NetShell.
Nástroj NSLookUp (spouštěný přı́kazem nslookup) sloužı́ ke komunikaci s DNS serverem a je ve
skutečnosti textová konzola podobně jako NetShell. Také se může použı́vat jak v interaktivnı́m, tak
i v neinteraktivnı́m režimu.
$
Napřı́klad bez nutnosti přechodu do režimu textové konzoly můžeme zjistit IP adresu počı́tače
v doméně, pokud známe jeho název v této doméně:
nslookup název_počı́tače DNS_server
(DNS server můžeme zadat jeho názvem nebo IP adresou, také ho nemusı́me vůbec zadat, pokud
jeho název neznáme).
Přı́klad 3.6
Chceme zjistit IP adresy domény www.google.com a pak naopak zjistit doménové jméno pro IP
adresu 74.125.87.105. Nejdřı́v bez přechodu do interaktivnı́ho režimu – zadáme přı́kazy:
nslookup www.google.com (vypı́še požadované informace)
nslookup 74.125.87.105 (opět vypı́še požadované informace)
Ted’ provedeme totéž, ale v interaktivnı́m režimu:
nslookup (přejdeme do interaktivnı́ho režimu, změnı́ se prompt)
www.google.com (vypı́še požadované informace)
74.125.87.105 (opět vypı́še požadované informace)
exit (ukončı́me interaktivnı́ režim, zobrazı́ se prompt Přı́kazového řádku)
Úkoly
1. Zjistěte IP adresu serveru www.seznam.cz.
C
2. Zjistěte doménové jméno pro IP adresu 90.183.38.60.
3.4.2
Active Directory
Active Directory je implementace protokolu LDAP (Lightweight Directory Access Protocol) pro
Windows od verze 2000. Je závislá na DNS (můžeme ji chápat jako nástavbu nad doménami DNS),
P
3.4
JMENNÉ A ADRESÁŘOVÉ SLUŽBY
93
napřı́klad přejı́má názvy domén DNS a využı́vá DNS při vyhledávánı́ v doménách. Musı́ existovat
alespoň jeden server DNS, na klientských počı́tačı́ch musı́ být nakonfigurován klient DNS třeba přes
DHCP. Domény Active Directory však nejsou totožné s doménami DNS, i když majı́ stejný název,
jsou jinak reprezentovány, ukládajı́ se jiné typy informacı́.
Použı́váme tyto pojmy:
• adresářová databáze (adresář) je databáze objektů, které jsou v systému spravovány, je hierarchicky uspořádaná (takže adresář je vlastně o objektech a vztazı́ch mezi nimi, to vše je uloženo
v souborech),
• objekty mohou být napřı́klad uživatelé, skupiny, počı́tače, domény, apod., každý objekt má
své vlastnosti (napřı́klad přı́stupová práva), tyto vlastnosti se v hierarchické struktuře mohou
dědit,
• kontejner je objekt, který může obsahovat dalšı́ objekty (obdoba složek na disku),
• AD schéma popisuje objekty, které mohou být uloženy v adresáři Active Directory (jaké mohou
mı́t atributy, co v nich může být uloženo),
• doména je skupina počı́tačů sdı́lejı́cı́ch společnou adresářovou databázi,
• organizačnı́ jednotka (OU) je podskupina domény (ale ne jakékoliv) oddělená za určitým účelem
(napřı́klad firma může mı́t jedinou doménu a tu rozčlenı́ na organizačnı́ jednotky podle svých
oddělenı́). OU mohou být i vnořené.
V sı́ti je Active Directory provozován na doménových řadičı́ch (domain controller, vpodstatě jde
o doménové servery), musı́ existovat alespoň jeden (primárnı́ řadič domény) a přı́padně dalšı́
(doporučuje se mı́t alespoň dva).
V každé sı́ti je nejméně jeden Globálnı́ katalog (prvnı́ globálnı́ katalog se vytvořı́ na primárnı́m
řadiči domény). V Globálnı́m katalogu jsou předevšı́m souhrny informacı́ obsažených v dalšı́ch
doménových serverech sı́tě (ne všechny parametry, jen nejdůležitějšı́), hovořı́me také o replikaci
(dynamickém vytvářenı́ kopiı́).
Globálnı́ katalogy sloužı́ při vyhledávánı́ informacı́ v sı́ti
a také k autentizaci (uživatel se vlastně z technického hlediska
přihlašuje ke globálnı́mu katalogu) a autorizaci. Takže přes doménové řadiče s globálnı́mi katalogy přistupujeme k objektům
a také se na nich provádı́ autentizace (kontrola při přihlašovánı́)
a autorizace (při přı́stupu k objektům).
dc=firma,dc=cz
ou=pocitace
ou=zamestnanci
cn=novak
V Active Directory (také ve jmenných službách včetně DNS)
se použı́vá několik druhů názvů podle typu zanořenı́ v doménách. Jsou to předevšı́m Domain Component (DC, uzel domény), Obrázek 3.9: Názvy v doménách
Organization Unit (OU, organizačnı́ jednotka, to je Active Directory Container, obdoba složky) a Common Name (CN, objekt).
Adresace (popis cesty k objektu) podle struktury na obrázku 3.9 je
cn=novak,ou=zamestnanci,dc=firma,dc=cz
Tento způsob adresace objektu se označuje DN (Distinguished Name). Dalšı́ způsob adresace, UNC,
známe z DNS názvů:
firma.cz/zamestnanci/novak
3.5
ZÁSADY A ŠABLONY
94
V serverových verzı́ch Windows máme k dispozici nástroje pro práci s Active Directory několik
nástrojů. Nebudeme je zde probı́rat, je to spı́še záležitost počı́tačových sı́tı́. Tyto nástroje majı́ obvykle
ve svém názvu podřetězec „Active Directory“ či zkratku „AD“, napřı́klad pro správu uživatelů,
skupin, počı́tačů a organizačnı́ch jednotek použı́váme nástroj Uživatelé a počı́tače služby AD (Active
Directory Users and Computers). Dalšı́ nástroje jsou dostupné na instalačnı́m CD Windows Server
a také na internetu. Zajı́mavý a užitečný nástroj je napřı́klad Active Directory Explorer od Sysinternals.
Na desktopu obvykle služba Active Directory nenı́ nainstalována, pracujeme zde pouze se zásadami (politikami), a to v nástrojı́ch Mı́stnı́ zásady zabezpečenı́ a Zásady skupiny (Group Policies Editor
gpedit.msc).
Pod pojmem zásada (politika, policy) obvykle rozumı́me konkrétnı́ nastavenı́ (obvyke týkajı́cı́ se
zabezpečenı́) pro danou komponentu či vlastnost.
Dnes jsou běžné heterogennı́ sı́tě (tj. na počı́tačı́ch v sı́ti jsou různé typy operačnı́ch systémů.
Může se zdát, že použı́vánı́ mechanismu Active Directory v heterogennı́ sı́ti je problém, ale řešenı́
existuje, spočı́vá v použitı́ jakýchsi „překladatelů“ – protokolů, které zprostředkujı́ komunikaci
mezi počı́tači s různými operačnı́mi systémy. V přı́padě použitı́ Active Directory jde předevšı́m
o protokol LDAP implementovaný také na jiných operačnı́ch systémech včetně Linuxu, dále pro
přı́stup k datům se použı́vá protokol SMB.
Informace o základnı́ch principech a postupech v Active Directory najdeme na
•
•
•
•
http://www.samuraj-cz.com/clanek/active-directory-komponenty-domain-tree-forest-site/
http://www.mcmcse.com/microsoft/guides/ad.shtml
http://www.petri.co.il/ad.htm
http://www.learnthat.com/Software/learn/1295/Introduction-to-Active-Directory/
Úkoly
V Active Directory (firma Obláček, s.r.o.) jsou dány DN názvy
C
• agenda.oblacek.cz/uctarna/mzdove
• agenda.oblacek.cz/uctarna/vedouci
• agenda.oblacek.cz/administrativa/sekretarka
Vytvořte k nim graf podobně jako na obrázku 3.9 a převed’te je na UNC adresy.
3.5
Zásady a šablony
3.5.1
Systémové zásady
Systémové zásady sloužı́ ke konfiguraci objektů (uživatelů, počı́tačů apod.) v sı́ti řı́zené serverem
Windows NT 4.x. V současné době se s nimi proto již moc nesetkáváme. Obsahujı́ nastavenı́ ukládaná
do registru, která platı́ pro daného uživatele, skupinu nebo počı́tač.
3.5
ZÁSADY A ŠABLONY
95
K jejich editaci sloužı́ program Editor systémových zásad (poledit.exe),
soubory majı́ přı́ponu POL. Tento nástroj je dostupný také v systémech,
které byly původně zamýšleny jako klienty sı́tě se serverem Windows NT 4.x,
tedy ve Windows 9x (najdeme ho na
instalačnı́m CD).
Se Systémovými zásadami neumı́ pracovat klienty s instalovanými Windows XP, tam je nutné použı́t Zásady
skupiny nebo vhodným způsobem doplnit programové
vybavenı́.
Systémové zásady nejsou postaveny na službě Active
Directory, použı́vá se jen DNS.
3.5.2
Zásady skupiny
Obrázek 3.10: Nástroj Editor systémových
zásad ve Windows 98
Zásady skupiny ve Windows od v. 2000 (včetně serverů)
sloužı́ k podrobnějšı́ konfiguraci pracovnı́ho prostředı́
uživatele, pro své fungovánı́ v sı́ti potřebuje službu Active Directory. V některých přı́padech mohou
být zároveň použı́vány Systémové zásady i Zásady skupiny, a to napřı́klad tehdy, když v sı́ti s klienty
Windows 2000/XP přecházı́me na serveru z Windows NT 4.x na Windows 2000.
P
Oproti Systémovým zásadám jsou zde také zásady pro skripty, instalaci a údržbu softwaru, nastavenı́ zabezpečenı́ apod. Určujeme napřı́klad, které nástroje se objevı́ v Ovládacı́ch panelech, které
programy budou uživateli přı́stupné, co se objevı́ na pracovnı́ ploše, skripty, které se spustı́ při
přihlášenı́ nebo odhlášenı́ uživatele při zapnutı́ a vypnutı́ počı́tače, apod. Lze tady také spravovat
aplikace (jejich instalaci a aktualizaci tak, aby se o tyto úkoly musel uživatel starat co nejméně).
Se Zásadami skupiny lze pracovat lokálně pomocı́ konzoly Zásady skupiny (spustı́me v menu
Start ï Spustit, zadáme gpedit.msc , obrázek 3.11), ale i v sı́ti. Obvyklé použitı́ je v kombinaci se
službou Active Directory, kdy k jednotlivým objektům této služby (sı́tı́m, doménám, uživatelům,
apod.) přidružujeme objekty Zásad skupiny. Pro určenı́, kterého počı́tače se majı́ nastavenı́ Zásad
skupiny týkat, použijeme menu tohoto nástroje, a pokud chceme zásady přiřadit určitému objektu
Active Directory, použijeme nástroje poskytované touto službou na serveru.
Nástroj je rozdělen do dvou částı́ – Konfigurace počı́tače a Konfigurace uživatele. Nastavenı́ provedená v prvnı́ části platı́ obecně pro počı́tač a všechny uživatele, v druhé již konkrétně pro určitého
uživatele. Obrazem těchto dvou částı́ jsou některé podklı́če klı́čů HKLM a HKCU v registru. Pokud jsou
stejné typy položek v obou, pak přednost majı́ nastavenı́ v druhé části. Pokud jsou stejné položky
v Mı́stnı́ch zásadách, majı́ přednost nastavenı́ v Zásadách skupiny.
K práci se Zásadami skupiny sloužı́ také programy gpupdate.exe (změny provedené v gpedit.msc
se někdy neprojevı́ okamžitě, pokud chceme, aby se změny provedly, spustı́me gpupdate.exe)
a gpresult.exe (tento program prověřı́, zda nastavenı́ provedená v Zásadách skupiny platı́). Ve
$
3.5
ZÁSADY A ŠABLONY
96
Obrázek 3.11: Nástroj Editor zásad skupiny gpedit.msc
Windows 2000 se mı́sto programu gpupdate.exe použı́val program secedit.exe s přepı́načem
/refreshpolicy.
Úkoly
Pokud máte možnost, projděte si konzoly Zásady skupiny a Mı́stnı́ nastavenı́ zabezpečenı́.
3.5.3
C
Šablony pro správu
Šablony pro správu jsou soubory s přı́ponou ADM s přı́mou vazbou na registr, které obsahujı́ konfiguraci různých částı́ systému a prostředı́. Nedoporučuje se přı́mo zasahovat do těchto souborů, ani to
nenı́ nutné. Ve Windows NT 4.x se s nimi pracovalo prostřednictvı́m programu poledit.exe (Systémové zásady), ve Windows 2000 (včetně serverových variant) a XP jsou to rozšı́řenı́ Zásad pro správu
(některé šablony jsou v nich standardně zahrnuty, jiné lze přidat v kontextovém menu položky
„Šablony pro správu“) – viz obrázek 3.11.
Soubory se šablonami jsou většinou ve složce ...\System32\GroupPolicy\Adm. K nejdůležitějšı́m šablonám patřı́ napřı́klad system.adm, který obsahuje nastavenı́ operačnı́ho systému,
windows.adm s konfiguracı́ pro klientské počı́tače se systémem Windows 9x nebo conf.adm s nastavenı́mi pro NetMeeting.
P
3.5
ZÁSADY A ŠABLONY
97
To, co je uloženo v souborech ADM, je také
uloženo v registru. Význam šablon spočı́vá předevšı́m v zabezpečenı́ údajů registru proti neoprávněným změnám (změny na některých klı́čı́ch nenı́ dovoleno provádět, když je to nastaveno v ADM souboru), a dále v přı́padě změn
provedených v Zásadách skupiny (ty se projevı́
v ADM) se větve registru odpovı́dajı́cı́ změněným
údajům vyčistı́ a naplnı́ novými údaji. Nástroj Obrázek 3.12: Seznam právě zobrazovaných ADM
Zásady skupiny použı́vá soubory ADM předevšı́m souborů v uživatelské části
k tomu, aby určil, co má zobrazit a které zásady
může editovat uživatel, pod kterým byl nástroj spuštěn.
Úkoly
1. Projděte si nastavenı́ šablon pro správu v grafickém rozhranı́ (v Zásadách pro správu).
$
C
2. Najděte ADM soubory na systémovém disku. Zjistěte, které jsou namapovány do Zásad pro
správu.
3.5.4
Šablony zabezpečenı́
Šablony zabezpečenı́ jsou některé soubory s přı́ponou INF obsahujı́cı́ konfiguraci zabezpečenı́ (napřı́klad zásady definovánı́ hesel, zabezpečenı́ registru, systému souborů, služeb), jsou v adresáři
%WINNT%\SECURITY\TEMPLATES (...\Windows\Zabezpečenı́\Šablony).
Pracujeme s nimi bud’ lokálně na jednom počı́tači (spustı́me MMC a přidáme modul snap-in
Šablony zabezpečenı́ – viz obrázek 3.13) nebo v sı́ti. Můžeme je importovat do objektu Zásad skupiny
přidruženého k objektu služby Active Directory (po importu se přenastavı́ přı́stupová práva objektu
služby Active Directory).
P
$
S některými šablonami zabezpečenı́ můžeme pracovat na lokálnı́m počı́tači v grafickém rozhranı́
(napřı́klad zásady definovánı́ hesel jsou v Mı́stnı́ch zásadách zabezpečenı́ (v Nástrojı́ch pro správu).
Lepšı́ nástroj (zvláště z hlediska automatizace a plného přı́stupu k možnostem) je Konfigurace
a analýza zabezpečenı́ – secedit.exe. Po spuštěnı́ bez parametrů se spustı́ aplikace nápovědy (v grafickém rozhranı́), samotný přı́kaz se vždy použı́vá s parametry, napřı́klad
provede analýzu zabezpečenı́ systému, je také nutné zadat název souboru,
do kterého se uložı́ výsledek analýzy,
secedit /analyze
(s dalšı́mi parametry) provede konfiguraci pro určitý objekt, tedy načte
soubor INF šablony zabezpečenı́,
secedit /configure
(s dalšı́mi přı́padnými parametry) exportuje nastavenı́ zabezpečenı́ z objektu do souboru šablony zabezpečenı́ (toho, jehož název jsme zadali,
měl by to být nejlépe dosud neexistujı́cı́ soubor).
secedit /export /cfg d:\vysledek.inf
$
3.5
ZÁSADY A ŠABLONY
98
Obrázek 3.13: Šablony zabezpečenı́ jako samostatná konzola (vytvořeno)
Úkoly
1. Projděte si konzolu Šablony zabezpečenı́ a zjistěte, co vše je v nı́ nastaveno.
2. Exportujte celou databázi zabezpečenı́ do souboru seced.inf, umı́stěte soubor na disku, ke
kterému máte přı́stup k zápisu. Tento soubor si prohlédněte.
Všimněte si množstvı́ SID. Proč je před nimi vždy hvězdička? Vzpomeňte si na přı́kazy, ve
kterých se SID zadává jako parametr.
3. Zjistěte, co vše umı́ přı́kaz secedit. Prohlédněte si syntaxi tohoto přı́kazu.
4. Projděte si složku ...\Windows\security včetně jejı́ch podsložek. V podsložce Logs otevřete
soubor winlogon.log a najděte záznamy z současného data (na konci souboru). Všimněte
si pořadı́ záznamů pro daný den (jde o posloupnost zaváděnı́ a konfigurace zásad při startu
procesu winlogon). Projděte i dalšı́ logy v této složce.
C
Kapitola
4
Služby a procesy
4.1
4.1.1
Správa služeb
Jak služby fungujı́
Služba je proces, který sloužı́ k podpoře funkcı́ jiných procesů a obvykle pracuje na pozadı́ systému
(tj. nejde o interaktivnı́ procesy, uživatel do jejich činnosti většinou nezasahuje). Od běžných procesů
se lišı́ v několika aspektech:
P
• běžı́ na pozadı́ systému,
• přı́stupová oprávněnı́ služeb bývajı́ odlišná od přı́stupových oprávněnı́ běžných procesů,
• běh služeb je většinou nezávislý na přihlašovánı́ a odhlašovánı́ uživatelů (služby mohou běžet
i tehdy, když žádný uživatel nenı́ přihlášen),
• existujı́ nástroje určené speciálně pro mı́stnı́ a vzdálenou správu služeb, také v registu najdeme
služby na specifických mı́stech.
Ke službám se ve skutečnosti řadı́ také ovladače, tedy ovladač je vlastně speciálnı́ druh služby sloužı́cı́
jako rozhranı́ k zařı́zenı́ (včetně virtuálnı́ch zařı́zenı́). K ovladačům můžeme přistupovat stejným
způsobem jako ke službám.
Služby použı́vajı́ tyto účty pro stanovenı́ svých přı́stupových oprávněnı́:
• Local System – účet pro systémové procesy, služba má plný přı́stup k čemukoliv, v seznamech
se také může zobrazovat jako System,
• Local Service – pro služby, které nepotřebujı́ zvýšená přı́stupová oprávněnı́, k mı́stnı́m prostředkům majı́ stejný typ přı́stupu jako běžný uživatel, k sı́ti použı́vajı́ jen omezený anonymnı́
přı́stup,
• Network Service – pro služby, které potřebujı́ autorizovaně pracovat na sı́ti (podobně jako
předchozı́ účet), ale k mı́stnı́m prostředkům počı́tače majı́ stejný typ přı́stupu (omezený) jako
běžný uživatel,
• Doménový nebo lokálnı́ účet – podobně jako u kteréhokoliv jiného procesu, lze nastavovat oprávněnı́.
99
P
4.1
SPRÁVA SLUŽEB
100
Služby (a všechny dalšı́ procesy) pracujı́cı́ pod účtem Local System majı́ velmi rozsáhlá oprávněnı́,
s určitým omezenı́m: použı́vajı́ uživatelský profil uložený ve větvi registru HKU/.Default ( nı́ v následujı́cı́ kapitole na straně 6.1.4), a nemohou přistupovat do uživatelských profilů jiných uživatelů
v dalšı́ch podklı́čı́ch klı́če HKU.
Na obrázku 4.1 je znázorněna architektura služeb. Veškerá komunikace se službami (včetně jejich
konfigurace) probı́há přes modul SCM (Service Control Manager – správce služeb), který je fyzicky
představován souborem services.exe.
Programy
Služba 1
services.msc
msconfig.exe
sc.exe
..
.
SCM
(Service
Control
Manager)
Služba 2
..
.
Obrázek 4.1: Architektura služeb
SCM tedy spravuje databázi služeb a ovladačů a zprostředkovává k nim přı́stup. Databáze je
zpřı́stupněna také přes registr, najdeme ji v klı́či
HKLM/System/CurrentControlSet/Services.
V tomto klı́či jsou podklı́če nazvané podle krátkých jmen služeb a ovladačů (každá služba má dlouhé
a krátké jméno). V podklı́čı́ch pak jsou všechny údaje souvisejı́cı́ s danou službou či ovladačem.
Najdeme zde obvykle tyto položky:
• DisplayName – dlouhé jméno (krátké jméno známe z názvu klı́če, dlouhé může být v jiném
jazyce než v angličtině),
• Description – popis služby či ovladače,
• ImagePath – cesta k souboru (spustitelný soubor, soubor ovladače, dynamická knihovna
apod.),
• Tag – pořadové čı́slo, které určuje pořadı́ spouštěnı́ služeb (je jen u těch služeb, které závisejı́
na jiných službách a je tedy důležité, v jakém pořadı́ jsou spouštěny),
• ObjectName – název účtu, pod kterým se má služba spustit (u ovladačů tuto položku nenajdeme, protože jsou vždy spouštěny s vysokými přı́stupovými oprávněnı́mi, pracujı́ v režimu
jádra), pokud u služby nenı́ tento klı́č uveden, jde o účet LocalSystem,
• Type – typ služby nebo ovladače (je to čı́selná hodnota), napřı́klad
– 1 (Service Kernel Driver) je ovladač zařı́zenı́ pracujı́cı́ v režimu jádra,
– 2 (Service File System Driver) je ovladač souborového systému (napřı́klad NTFS),
– 16 (Service Win32 Own Process) je služba, která má vlastnı́ proces (žádná jiná služba
v tomto procesu neběžı́), může být spuštěna z vlastnı́ho spustitelného souboru nebo
může jı́t o modul spouštěný procesem svchost.exe,
– 32 (Service Win32 Share Process) je služba, která je součástı́ procesu hostujı́cı́ho vı́ce
služeb,
P
4.1
SPRÁVA SLUŽEB
101
– 272 (Service Win32 Own Process Interactive) podobně jako 16, ale může pracovat interaktivně (lze k němu za určitých okolnostı́ přistupovat přı́mo, napřı́klad v konfiguračnı́m
okně),
– 288 (Service Win32 Share Process Interactive) podobně jako 32, ale může pracovat interaktivně,
o řešenı́ uživatelského rozhranı́ pro interaktivnı́ služby jsme se učili v sekci o objektech na
straně 77, všechny interaktivnı́ služby musı́ být spuštěny pod účtem Local System,
• Start – kdy má být služba načtena, napřı́klad
–
–
–
–
–
0: služba či ovladač se načı́tá při zaváděnı́ systému (se zavaděčem systému),
1: při inicializaci jádra (tj. po všech službách s hodnotou 0),
2: spouštı́ se automaticky hned po startu systému,
3: lze ji spustit, ale jen ručně (služba nenı́ spuštěna automaticky),
4: služba je zakázána (nelze ji spustit ani ručně),
• Group – služba může patřit do některé skupiny služeb,
• DependOnService, DependOnGroup – služba může být závislá na službě nebo skupině služeb,
• atd.
Většina služeb a ovladačů má ve svém klı́či podklı́če s dalšı́mi, specifickými informacemi vztahujı́cı́mi se k zabezpečenı́ nebo konfiguraci.
Podrobnosti o dalšı́ch možných položkách zjistı́me napřı́klad na adrese
http://technet.microsoft.com/en-us/library/cc778056%28WS.10%29.aspx.
Úkoly
Spust’te konzolu Služby. Vyberte si kteroukoliv službu (napřı́klad Klient DHCP) a zobrazte jejı́ vlastnosti. Zjistěte, jestli běžı́, zda se spouštı́ automaticky, pod jakým účtem se přihlašuje, na kterých
službách závisı́ a které služby závisejı́ na nı́ pak tyto údaje najděte v registru.
4.1.2
C
Sdı́lené procesy služeb, Service Host
Jak bylo výše uvedeno, několik služeb může běžet v jediném procesu. Je to předevšı́m z důvodu
šetřenı́ systémovými prostředky (každý proces zabere poměrně hodně paměti a času procesoru,
služba jako taková však moc prostředků nepotřebuje, zvláště když nenı́ interaktivnı́).
Seznam služeb, které hostı́ zadaný proces, zjistı́me napřı́klad v Process Exploreru, a to hned
dvěma možnými způsoby – bud’ podržı́me myš nad názvem procesu (žluté okno na obrázku 4.2)
a nebo zobrazı́me vlastnosti procesu (poklepánı́m), služby najdeme na kartě Services (podokno na
tomtéž obrázku).
Procesy služeb s vlastnı́m procesem (obvykle typu 16 podle výše uvedeného výčtu) jsou obvykle
potomky (ve stromové struktuře) procesu services.exe, napřı́klad proces spoolsv.exe pro službu
Zařazovánı́ tisku. Stejně je tomu i u procesů, které hostı́ vı́ce služeb.
$
4.1
SPRÁVA SLUŽEB
102
Obrázek 4.2: Zobrazenı́ služeb v procesu
Služby mohou běžet v některém systémovém procesu, napřı́klad některé služby najdeme v procesu SCM (services.exe) nebo LSASS (lsass.exe).
Nejběžnějšı́m „kontejnerem“ pro služby je však proces Service Host (svchost.exe). Služby takto
spouštěné jsou uloženy v DLL knihovnách.
V Process Exploreru (také na obrázku 4.2) vidı́me, že je spuštěno vı́ce instancı́ procesu Service
Host. Lišı́ se předevšı́m ve dvou vlastnostech:
• účet, pod kterým proces běžı́ (sloupec User Name), obvykle System (Local System), Network
Service nebo Local Service,
• Command Line (přı́kaz včetně parametrů, kterým byl proces spuštěn), žádné dvě instance by
neměly mı́t tuto položku stejnou.
Přı́klad 4.1
To, ve které instanci programu Service Host bude služba spuštěna, záležı́ na řetězci uvedeném
v registru v klı́či HKLM/SYSTEM/CurrentControlSet/Services/hslužbai v položce ImagePath (tedy
cesta ke spustitelnému souboru pro službu). Napřı́klad služby AppMgmt (Správa aplikacı́), CryptSvc
(Šifrovánı́), Dhcp (Klient DHCP) a dalšı́ majı́ tento řetězec
%SystemRoot%\system32\svchost.exe -k netsvcs
to znamená, že všechny budou běžet ve stejném procesu s touto přı́kazovou řádkou (můžeme si
ověřit v Process Explorerovi nebo Správci úloh, když necháme zobrazit sloupec Command Line).
4.1
SPRÁVA SLUŽEB
103
Úkoly
1. V registru najděte klı́č obsahujı́cı́ podklı́če služeb (a ovladačů). Najděte následujı́cı́ podklı́če:
appmgmt
cdfs
cdrom
cisvc
EventSystem
ipsec
MountMgr
netlogon
null
PlugPlay
RemoteAccess
SamSs
C
spooler
tcpip
wmi
wuauserv
Tyto služby roztřid’te podle jejich typu. U každé zjistěte, jaké je jejı́ dlouhé jméno, kdy a jak
se spouštı́, ve kterém souboru je uložena, pod jakým účtem se spouštı́ (tj. jaká má přı́stupová
oprávněnı́).
2. Ze seznamu v předchozı́m bodu si vyberte některou interaktivnı́ službu, která je spuštěna.
Spust’te Process Explorer a zobrazte ve spodnı́m podokně manipulátory (handle). Najděte
v něm proces vybrané služby a zjistěte, v jaké stanici oken je napojen (záznam bude zřejmě
někde ke konci seznamu handlů procesu).
3. V Process Exploreru zjistěte, které služby jsou spouštěny řetězci
svchost -k rpcss
svchost -k netsvcs
Prohlédněte si vlastnosti těchto procesů, ve vlastnostech projděte všechny karty.
4.1.3
Program sc.exe
Program sc.exe je součástı́ Windows od verze XP (Server 2003). Jeho účelem je pokročilá konfigurace
služeb a dostaneme se prakticky k jakýmkoliv nastavenı́m, která pro služby (obecně) platı́. Podobně
jako přı́kaz net, i zde máme sadu podpřı́kazů, které upřesňujı́ chovánı́ přı́kazu samotného.
sc query
zobrazı́ informace (podáváme dotaz)
sc query
zobrazı́ informace o všech službách (hodně dlouhý výpis)
sc query webclient
zobrazı́ informace o službě WebClient (zadáváme vždy jen krátký
název služby)
vypı́šeme všechny interaktivnı́ služby (pozor, před rovnı́tkem
nenı́ mezera, za nı́m naopak musı́ být)
sc query type= filesys
vypı́šeme všechny ovladače souborových systémů (je jich poměrně hodně)
sc \\počı́tač query lmhosts
vypı́še informaci o zadané službě běžı́cı́ na vzdáleném
(zadaném) počı́tači
sc query type= interact
sc qc, sc queryex
zobrazı́ podrobnějšı́ informace zaměřené spı́še na umı́stěnı́ a přı́stupová oprávněnı́ nebo na
proces
sc qc rpcss
zobrazı́ tento typ informacı́ o službě Vzdálené volánı́ procedur
sc queryex rpcss
z tohoto výpisu zjistı́me napřı́klad PID procesu, ve kterém služba běžı́
$
4.1
SPRÁVA SLUŽEB
104
sc create, sc delete
vytvořı́ pro zadanou (novou) službu položku v registru, aby mohla být spouštěna; tento přı́kaz
sloužı́ ke zprovozněnı́ služby a ovladače, je součástı́ instalace
sc create novaSluzba binpath= c:\windows\system32\soubor.exe
type= own start= auto vytvářı́me novou službu, zadali jsme jejı́ spustitelný sou-
bor, typ služby (služba s vlastnı́m spustitelným souborem) a požadavek na automatické
spouštěnı́ při startu systému; můžeme zadat také dalšı́ položky včetně závislostı́ na jiných
službách či jejich skupinách, uživatelský účet, zobrazované jméno, atd., prakticky cokoliv
bývá v přı́slušných položkách registru
sc delete novaSluzba
odinstalujeme službu (ve smyslu odstraněnı́ údajů z registru)
sc config
upravı́ konfiguraci služby či ovladače (konkrétně hodnoty v registru)
změnı́ konfiguraci spuštěnı́ zadané služby Zařazovánı́
tisku na automatické spouštěnı́ při startu systému
sc config spooler start= auto
sc enumdepend
zjišt’ujeme, které dalšı́ služby závisejı́ na zadané službě (chceme vědět, které služby by nefungovaly, kdybychom zadanou službu ukončili)
sc enumdepend samss
sc enumdepend rpcss
zjišt’ujeme závislosti na službě Správce zabezpečenı́ účtů
Zjišt’ujeme totéž pro službu Vzdálené volánı́ procedur
Možných podpřı́kazů je vı́ce (zjistı́me je v nápovědě). Můžeme napřı́klad službu pozastavit a pak
ji kdykoliv odblokovat, nastavit akce při selhánı́ služby, přinutit správu služeb k aktualizaci stavu
služby, pokud byly provedeny změny a neprojevujı́ se. Lze také pracovat s popisovači zabezpečenı́
a také zamykat nebo odemykat databázi služeb na zadaném počı́tači.1
Přı́klad 4.2
Budeme pracovat se službou Klient DHCP. V konzole services.msc lze zjistit, že krátký název
služby je dhcp, spouštı́ se přı́kazem svchost.exe -k netsvcs, tedy běžı́ v hostitelském procesu
služeb a nemá svůj vlastnı́ proces, spouštı́ se automaticky, je spuštěna, proces má přı́stupová oprávněnı́ „mı́stnı́ systémový účet“ (tj. Local System), závisı́ na třech dalšı́ch službách (AFD, Ovladač
protokolu TCP/IP, Rozhranı́ NetBios nad protokolem TCP/IP). Údaje jsou z Windows XP, v jiných
verzı́ch mohou být odlišné.
Podı́váme se na výstupy přı́kazu sc:
C:\> sc query dhcp
SERVICE_NAME: dhcp
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT
1
: 20 WIN32_SHARE_PROCESS
: 4 RUNNING
(STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
: 0 (0x0)
: 0 (0x0)
: 0x0
: 0x0
Důsledkem zamknutı́ databáze služeb je napřı́klad to, že SCM nemůže od té chvı́le na daném počı́tači spustit žádnou
službu, tedy můžeme tento postup použı́t při synchronizaci – pokud chceme provést konfiguraci služeb (třeba i vzdáleně)
na daném počı́tači, zamkneme databázi služeb, provedeme konfiguraci a pak databázi odemkneme.
M
4.1
SPRÁVA SLUŽEB
105
C:\> sc queryex dhcp
SERVICE_NAME: dhcp
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT
PID
FLAGS
: 20 WIN32_SHARE_PROCESS
: 4 RUNNING
(STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
: 0 (0x0)
: 0 (0x0)
: 0x0
: 0x0
: 1260
:
M
C:\> sc qc dhcp
[SC] GetServiceConfig SUCCESS
SERVICE_NAME: dhcp
TYPE
START_TYPE
ERROR_CONTROL
BINARY_PATH_NAME
LOAD_ORDER_GROUP
TAG
DISPLAY_NAME
DEPENDENCIES
:
:
:
:
:
:
:
:
:
:
SERVICE_START_NAME :
M
20 WIN32_SHARE_PROCESS
2
AUTO_START
1
NORMAL
C:\WINDOWS\system32\svchost.exe -k netsvcs
TDI
0
Klient DHCP
Tcpip
Afd
NetBT
LocalSystem
Jak vidı́me, mezi prvnı́mi dvěma výpisy nenı́ velký rozdı́l, v druhém máme navı́c dva poslednı́
řádky (PID procesu, ve kterém služba běžı́, a pak přı́znaky, ale tato služba žádné nemá). Oproti
tomu třetı́ výpis již odlišný je. Dozvı́me se v něm tak důležité věci jako je třeba typ spuštěnı́ služby
(automaticky), přı́kaz, kterým je spuštěna, skupina, pořadı́ při spouštěnı́, zobrazované jméno (česky),
závislosti a účet, pod kterým je služba přihlášena.
Závislosti „opačným směrem“ – tedy které služby závisejı́ na této službě – zjistı́me takto:
C:\> sc enumdepend dhcp
Enum: entriesRead
= 0
Na této službě tedy žádná jiná služba nezávisı́. Jinak je tomu napřı́klad u služby Správce zabezpečenı́ účtů (samss):
M
C:\> sc enumdepend samss
Enum: entriesRead
= 1
SERVICE_NAME: MSDTC
DISPLAY_NAME: Koordinátor DTC
TYPE
: 10 WIN32_OWN_PROCESS
STATE
: 1 STOPPED
(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
WIN32_EXIT_CODE
: 1077
(0x435)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT
: 0x0
WAIT_HINT
: 0x0
M
4.2
WBEM
106
Úkoly
1. Vyzkoušejte dotazovou variantu přı́kazu sc, podle výše uvedených ukázek použitı́.
C
2. Najděte v nápovědě celkovou syntaxi přı́kazu sc. Zjistěte, jak lze některou běžı́cı́ službu
pozastavit a pak znovu odblokovat.
4.2
4.2.1
WBEM
Princip a implementace WBEM
WBEM (Web-Based Enterprise Management) je skupina technologiı́ a postupů vytvořená za účelem
sjednotit správu distribuovaných počı́tačových prostředı́ (tj. včetně vzdálené správy, ale také lokálně
na jednom počı́tači). Správa se provádı́ bud’ přes webové rozhranı́ nebo pomocı́ specializovaných
shellů.
P
Data jsou organizována v modelu CIM (Common Information Model), což je vlastně objektově
orientovaná databáze, kde jednotlivé objekty jsou zapouzdřeny a přistupuje se k nim přes unifikované rozhranı́. CIM je otevřený standard, tedy je možné ho jakkoliv využı́vat a dále upravovat.
Rozlišujeme WBEM server (ukládá a poskytuje informace, provádı́ přı́kazy) a WBEM klienta
(reprezentován předevšı́m rozhranı́m, se kterým pracuje administrátor, a přı́slušným API). Klient
odesı́lá žádosti, server konfrontuje se skutečným stavem a provádı́ je (přı́padně zajišt’uje proces
autentifikace a autorizace). Spolu komunikujı́ přes protokol HTTP nebo HTTPS. Právě podle těchto
protokolů je v názvu „web-based“.
Architektura je postavena na vzoru model–obraz. Klient čte data z „obrazu“, server přistupuje
k „modelu“ reprezentovanému skutečným stavem hardwaru a softwaru v sı́ti a při jakékoliv změně
modelu aktualizuje obraz.
WBEM má vı́ce různých implementacı́, napřı́klad:
WMI (Windows Management Instrumentation) je implementace Microsoftu pro Windows. Umožňuje (i vzdáleně) spravovat počı́tače s Windows v sı́ti, je předinstalována na všech verzı́ch od Win
2000 (resp. Win ME). Je postavena na VBScriptu a PowerShellu, WMI těmto skriptovacı́m jazykům
poskytuje přı́stup prakticky k čemukoliv ve Windows. Některé dalšı́ nástroje, které nejsou instalovány se systémem, je možné stáhnout ze stránek Microsoftu
http://www.microsoft.com/downloads/details.aspx?familyid=6430F853-1120-48DB-8CC5
-F2ABDC3ED314&displaylang=en.
OpenWBEM od Novellu je implementace určená pro Novell Netware, Linux a některé jiné Unixové systémy (včetně Solarisu a MacOSX). Je použı́vána v komerčnı́ i nekomerčnı́ sféře a stejně
jako WMI nabı́zı́ rozsáhlé možnosti zásahů do konfigurace sı́tě a monitorovánı́. Je ke staženı́ na
http://www.openwbem.org/.
OpenPegasus je dalšı́ otevřená implementace pro různé Unixové systémy včetně Linuxu, a Windows. Je ke staženı́ na http://www.openpegasus.org/.
4.2
WBEM
4.2.2
107
WMI
Jak bylo výše uvedeno, WMI je implementace modelu WBEM pro správu Windows. Databáze CIM
je taktéž objektová, oproti poměrně primitivnı́m objektům, o kterých jsme se učili dřı́ve, jde o objekty
plnohodnotné s implementacı́ třı́d, vlastnostı́, metod, událostı́, využı́vajı́cı́ dědičnost a kompozici.
Třı́dy jsou psány v objektovém jazyce MOF (Managed Object Format), který je interpretovaný
(dá se řı́ct skriptovacı́). Většina komponent WMI (včetně třı́d) je v adresáři ...\System32\Wbem.
Najdeme tam hodně souborů s přı́ponou MOF.
Pokud nás zajı́má, jak vlastně vypadajı́ třı́dy WMI, můžeme se na ně podı́vat v nástroji, který je
součástı́ Windows od verze XP. WbemTest se spouštı́ přı́kazem wbemtest a má grafické rozhranı́. Po
spuštěnı́ se objevı́ základnı́ okno, které vidı́me na obrázku 4.3.
Obrázek 4.3: Úvodnı́ okno aplikace WbemTest
Nejdřı́v je nutné se připojit k určitému oboru názvů
(zobrazuje se v levém hornı́m rohu okna), na obrázku 4.3
jsme připojeni k oboru názvů CIMV2 (k oboru názvů se
jednoduše připojı́me tak, že klepneme na tlačı́tko Připojit
a zadáme název). Pak můžeme volně pracovat se třı́dami,
které do zvoleného oboru názvu patřı́ (také vytvářet nové).
Pokud si chceme prohlédnout (nebo upravit) vlastnosti
některé třı́dy daného oboru názvů, klepneme v hlavnı́m
Obrázek 4.4: Stanovenı́ třı́dy
okně na tlačı́tko Výčet třı́d. Zobrazı́ se dialogové okno (obrázek 4.4), do kterého bud’ zadáme přı́mo název třı́dy, a nebo zvolı́me „rekurzivnı́ “ výčet (to znamená,
že budou vypsány všechny třı́dy z oboru názvů). V seznamu pak poklepeme na vybranou třı́du
a zobrazı́ se okno se všemi jejı́mi vlastnostmi a metodami (obrázek 4.5).
Kromě výše uvedeného nástroje WbemTest lze ke službě WMI přistupovat přes konzolu Řı́zenı́
P
4.2
WBEM
108
Obrázek 4.5: Vlastnosti zvolené třı́dy Win32_Process ve WbemTest
služby WMI. Spouštı́me ji souborem wmimgmt.msc, ale je dostupná také v konzole Správa počı́tače, jak
vidı́me na obrázku 4.6. V kontextovém menu položky Řı́zenı́ služby WMI zvolı́me Vlastnosti a zı́skáme
okno, které vidı́me na obrázku 4.6 vpravo. Nastavujeme obecné vlastnosti řı́zenı́ WMI jako je způsob
protokolovánı́ a umı́stěnı́ protokolu, zálohovánı́ (máme možnost obnovit databázi WMI ze zálohy)
a určujeme zabezpečenı́ prvků databáze.
$
Dalšı́m velmi užitečným nástrojem pro řı́zenı́ WMI je program wmic.exe, kterému se budeme
podrobněji věnovat dále. Pomocı́ tohoto nástroje můžeme přistupovat k databázi WMI a zı́skávat
z nı́ nejrůznějšı́ informace.
Na webu Microsoftu lze zı́skat WMI Administrative Tools,2 což je balı́k několika nástrojů pro práci
s WMI objekty. Je užitečný zejména pro programátory služeb, v nástrojı́ch balı́ku se dostaneme
prakticky k jakýmkoliv informacı́m, navı́c přehledně a srozumitelně členěným.
Rozhranı́ WMI se velmi často použı́vá ve skriptech (pomocı́ VB skriptu se takto dostaneme
prakticky k čemukoliv, co na počı́tači potřebujeme, i přes sı́t’). Skripty můžeme vytvářet bud’ ručně,
a nebo v některém nástroji pro generovánı́ WMI skriptů. Hodně použı́vané jsou napřı́klad
• WMI Code Creator3 generuje skripty v jazycı́ch VB Script, Visual Basic.NET a C#,
• Scriptomatic.4
2
WMI Administrative Tools zı́skáme na adrese http://www.microsoft.com/downloads/details.aspx?FamilyID=6430f
853-1120-48db-8cc5-f2abdc3ed314&DisplayLang=en. V balı́ku najdeme nástroje WMI Object Browser (zobrazuje objekty v hierarchické struktuře i jejich metody, metody můžeme i spouštět), WMI CIM Studio (pro práci s třı́dami), WMI
Event Registration Tool a WMI Event Viewer (pro práci s událostmi objektů).
3
WMI Code Creator je dostupný na stránce http://www.microsoft.com/downloads/details.aspx?familyid=2CC30A
64-EA15-4661-8DA4-55BBC145C30E&displaylang=en.
4
Scriptomatic zı́skáme na adrese http://www.microsoft.com/downloads/details.aspx?familyid=09DFC342-648B-4119B7EB-783B0F7D1178&displaylang=en.
4.2
WBEM
109
Obrázek 4.6: Vlastnosti v konzole Řı́zenı́ služby WMI
Zatı́mco ve Windows 2000 se rozhranı́ WMI spouštělo jako služba s vlastnı́m procesem, od verze
XP (Server 2003) jde o službu spouštěnou v rámci procesu svchost.exe. Kdykoliv se spouštı́ něco
souvisejı́cı́ho s WMI (napřı́klad požadavek na data z databáze CIM), kód je spouštěn v procesu
wmiprvse.exe, který je potomkem procesu hostı́cı́ho službu RPC.
Úkoly
1. V adresáři ...\System32\Wbem si vyberte některý MOF soubor (raději vı́ce) a prozkoumejte
syntaxi jazyka – jak se deklarujı́ třı́dy, instance a metody.
C
2. Spust’te WbemTest a připojte se k oboru názvů CIMV2. Prohlédněte si některou ze třı́d, které
jsou takto přı́stupné.
3. V konzole Řı́zenı́ služby WMI zjistěte, jak je momentálně nastaveno protokolovánı́ a zálohovánı́
této služby.
4.2.3
Program wmic
Program wmic (WMI Console) je dostupný od verze Windows XP/Server 2003. Umožňuje využı́vat
rozhranı́ WMI na přı́kazovém řádku. pracuje ve dvou režimech – klasickém (externı́m) a interaktivnı́m. Při použitı́ v klasickém režimu zadáváme přı́kaz začı́najı́cı́ názvem programu (wmic)
následovaný parametry, do interaktivnı́ho režimu se dostaneme zadánı́m přı́kazu wmic bez dalšı́ch
parametrů (prompt se změnı́ na wmic:root\cli> a zadáváme internı́ přı́kazy).
Nápovědu zı́skáme bud’ v grafickém režimu, nebo přı́kazem wmic /?, a nebo v interaktivnı́m
režimu této konzoly přı́kazem /?. Ještě podrobnějšı́ nápovědu zobrazı́me přı́kazem /?:FULL.
$
4.2
WBEM
110
Přı́kaz wmic je velmi komplexnı́. Má tuto syntaxi:
WMIC přepı́nače předmět sloveso parametry, kde
• přepı́nače nastavujı́ obecné chovánı́ přı́kazu, mohou být napřı́klad
/node:počı́tač – přı́kaz bude proveden na zadaném počı́tači (před názvem počı́tače nebu-
deme dávat opačná lomı́tka)
/user:uživatel – při vyhodnocovánı́ bude použit zadaný uživatel s jeho přı́stupovými
oprávněnı́mi (budeme dotázáni na heslo)
/output:soubor – výpis bude směrován do zadaného souboru
• předmět (také alias) určuje to, s čı́m chceme manipulovat nebo na co se dotazujeme, následuje
zkrácený seznam (všechny možnosti zjistı́me v nápovědě):
bios
bootconfig
cpu
dcomApp
desktop
diskdrive
fsdir
irq
job
memLogical
memPhysical
netuse
NIC
NICConfig
NTEvent
onBoardDevice
OS
pageFile
printer
process
registry
service
share
temperature
useraccount
• sloveso určuje požadovanou akci, která má být provedena s předmětem:
– LIST – toto sloveso lze použı́t na všechny předměty, zobrazı́ obecnou informaci o předmětu, můžeme upřesnit, jak podrobné informace chceme (full – všechny, brief – základnı́
v tabulce, writeable – které lze měnit, atd.),
– GET – zı́skánı́ podrobnějšı́ch informacı́ o všech nebo vybraných vlastnostech předmětu,
– SET – změna vlastnostı́ předmětu,
– ASSOC – vrátı́ instance zadaného objektu (tedy s nı́m asociované),
– CREATE, DELETE – vytvořenı́ nové instance, odstraněnı́ instance nebo třı́dy,
– CALL – spuštěnı́ metody zadané třı́dy WMI.
Přı́kaz v neinteraktivnı́m režimu použı́váme takto:
wmic bios list
vypı́še se informace o BIOSu (úplná)
wmic os list brief
stručná informace o operačnı́m systému ve formě tabulky
úplná informace o operačnı́m systému ve formě seznamu, výstup (zkrácený) bude vypadat nějak takto:
wmic os list full
BootDevice=\ Device\ HarddiskVolume1
BuildNumber=2600
BuildType=Multiprocessor Free
CodeSet=1250
CountryCode=420
CSDVersion=Service Pack 3
CSName=nazevpocitace
CurrentTimeZone=60
Debug=FALSE
...
FreePhysicalMemory=49996
M
4.2
WBEM
111
FreeSpaceInPagingFiles=490728
FreeVirtualMemory=2054164
...
MaxNumberOfProcesses=-1
MaxProcessMemorySize=2097024
Name=Microsoft Windows XP Professional|C:\ WINDOWS|\ Device\ Harddisk0\ Partition1
...
SystemDevice=\ Device\ HarddiskVolume1
SystemDirectory=C:\ WINDOWS\ system32
SystemDrive=C:
TotalSwapSpaceSize=
TotalVirtualMemorySize=2097024
TotalVisibleMemorySize=515516
Version=5.1.2600
WindowsDirectory=C:\ WINDOWS
Z výstupu se dá vyčı́st poměrně hodně o nastavenı́ch operačnı́ho systému (ve skutečnosti
by tam bylo mnohem vı́ce řádků, z bezpečnostnı́ch a kapacitnı́ch důvodů je výstup značně
zkrácen). Všimněte si řádku MaxNumberOfProcesses=-1. To znamená, že nenı́ omezen počet
spouštěných procesů (napřı́klad u Vista Starter by tady bylo jiné čı́slo).
přı́kaz zobrazı́ seznam všech
pamět’ových zařı́zenı́ (i výměnných), a to vlastnosti z výčtu oddělené čárkou, výstup:
wmic diskdrive get model,size,interfacetype,mediatype
InterfaceType
IDE
MediaType
Fixed
hard disk media
wmic /output:D:\procinfo.txt cpu get
Model
ST3160812AS
Size
160039272960
informace o procesoru (v tabulce) budou uloženy
do zadaného souboru
wmic cpu get > D:\procinfo.txt
totéž
vypı́še seznam běžı́cı́ch služeb
(pouze ty vlastnosti, které byly specifikovány), všimněte si syntaxe podobné SQL (ostatně
pracujeme s databázı́)
wmic service where state=”running” get caption, name
wmic process call create notepad.exe
process pro vytvořenı́ procesu)
spustı́ zadaný proces (zavolá proceduru create třı́dy
wmic /node:počı́tač process call create notepad.exe
totéž, ale na jiném počı́tači (to přı́kaz start neumı́), název počı́tače se zadává bez úvodnı́ch opačných lomı́tek
wmic os call reboot
restart systému
wmic /node:počı́tač os call shutdown
vzdálené vypnutı́ systému
wmic service ”spooler” call startservice
spustı́ zadanou službu (Zařazovánı́ tisku)
wmic /node:ucetni process where name=”explorer.exe” call terminate
zadaný proces bude ukončen, a to na uvedeném počı́tači (vypadá to, že účetnı́mu bude ukončeno grafické prostředı́, ale tento proces se obvykle po ukončenı́ znovu spustı́, tedy jde vlastně
o restart grafického prostředı́)
wmic /node:ucetni /user:dadmin process where name=”explorer.exe” call terminate
totéž jako předchozı́, ale v přı́kazu na zadaném počı́tači vystupujeme s přı́stupovými oprávněnı́mi zadaného uživatele
M
4.2
WBEM
112
Vidı́me, že můžeme použı́vat i dotazy filtrované podle vlastnostı́ (where) podobně jako v SQL. Pokud
se jedná o řetězcovou hodnotu, musı́me ji uzavřı́t do uvozovek (napřı́klad name=”explorer.exe”,
ale čı́sla nebo hodnoty true/false do uvozovek neuzavı́ráme.
Přı́klad 4.3
Ukážeme si práci v interaktivnı́m módu.
spustı́me interaktivnı́ režim, prompt je wmic:root\cli>
wmic
os /?
dotážeme se, co lze použı́t na předmět os (operačnı́ systém)
os list /?
chceme upřesnit parametry pro sloveso list
os list brief
os list full
zı́skáme tabulku s několika základnı́mi informacemi
zı́skáme seznam (už ne tabulku) s dvojicemi vlastnost=hodnota
tabulka s hodnotami volného mı́sta (ve fyzické paměti, v stránkovacı́ch souborech,
ve virtuálnı́ paměti)
os list free
/output:D:\procinfo.txt cpu get
do souboru se uložı́ hodně široká tabulka vlastnostı́ pro-
cesoru
totéž, ale mı́sto široké tabulky máme v souboru
seznam položek vlastnost=hodnota (při takovém množstvı́ je to poněkud přehlednějšı́)
/output:D:\procinfo.txt cpu list full
cpu get /?
zeptáme se, co se dá zjistit o procesoru
zı́skáme údaj o počtu logických procesorů (počet jader
nebo jeho dvojnásobek, pokud procesor podporuje hyperthreading)
cpu get NumberOfLogicalProcessors
cpu get AddressWidth,Caption,CurrentClockSpeed,DataWidth,Description,ExtClock
vy-
pı́še se tabulka s vybranými sloupci
vypı́še se seznam běžı́cı́ch procesů, u každého je přı́kaz, kterým byl spuštěn (všimněte si, že v seznamu je i wmiprvse.exe, který zajišt’uje vyhodnocovánı́ dotazů na WMI)
process get
process list brief
zı́skáme tabulku procesů s některými informacemi
process where ThreadCount>8 list brief
podobný výstup, ale vypı́šou se pouze procesy,
které majı́ vı́ce než 8 vláken
service get name,state,serviceType
vypı́še se tabulka s názvy, stavy a typy služeb
service where desktopInteract=true get name,state
zı́skáme seznam interaktivnı́ch slu-
žeb (všimněte si, že u neběžı́cı́ch služeb je PID=0)
service where (desktopInteract=true and startMode=”auto”) get name,processid výběrová
kritéria můžeme kombinovat (jako v SQL), ale v tom přı́padě je uzavřeme do závorky
service where desktopinteract=true get name,processid,status /every:5
takto zajistı́me, že dotaz bude automaticky opakován v intervalu 5 sekund (stisknutı́m některé
klávesy opakovánı́ přerušı́me)
quit
konec, ukončı́me interaktivnı́ režim, změnı́ se prompt a přesuneme se do Přı́kazového řádku
(funguje také přı́kaz exit)
4.3
SPRÁVA PROCESŮ
113
Úkoly
1. Vyzkoušejte práci v interaktivnı́m módu přı́kazu podle přı́kladu 4.3.
C
2. Najděte seznam všech předmětů (aliasů) pro přı́kaz wmic. V nápovědě v grafickém rozhranı́
jsou témata pro wmic značně rozházená, můžete použı́t napřı́klad wmic /?.
3. Zjistěte, co vše lze zjistit v předmětech (aliasech) csproduct, datafile, memphysical, netprotocol,
recoveros, registry, voltage.
4. Pomocı́ wmic zjistěte veškeré informace o řadičı́ch sı́t’ového rozhranı́ (plný výpis), přesměrujte
do souboru a ten potom prostudujte.
5. Vypište všechny běžı́cı́ procesy, jejichž PID je většı́ než 1000.
4.3
Správa procesů
Z předchozı́ho semestru vı́me, že k úlohám můžeme přistupovat pomocı́ Správce úloh a nebo jiného
nástroje, který si doinstalujeme (napřı́klad Process Explorer). Nástrojů s grafickým rozhranı́m pro
práci s procesy existuje poměrně hodně.
4.3.1
Procesy ve Windows NT
Proces je instance programu, aplikace nebo služby systému (což je ostatně obvykle také nějaký
program), která má přiděleny určité zdroje (pamět’, čas procesoru apod.). V 32bitových verzı́ch
Windows jádro nepracuje přı́mo s procesy, ale s jejich vlákny. Každý proces má minimálně jedno
vlákno, vlákna samotná provádějı́ výpočty. Každý proces má
•
•
•
•
tabulku deskriptorů objektů, což je vlastně odkaz na zdroje, které má k dispozici,
vlastnı́ adresový prostor, který byl přidělen správcem paměti (správcem virtuálnı́ch počı́tačů),
spustitelný program (kód a globálnı́ data),
přı́stupový token pro určenı́ jeho přı́stupových oprávněnı́.
Každé vlákno má
• 2 zásobnı́ky (pro uživatelský a privilegovaný mód),
• sadu registrů, které obsahujı́ stav procesoru,
• soukromou ukládacı́ oblast v paměti použı́vanou podsystémy a knihovnami DLL.
Ve Windows NT vlákna pracujı́ v preemptivnı́m multitaskingu.
Nový proces může být vytvořen spuštěnı́m programu nebo volánı́m API funkce CreateProcess().
Pokud to nenı́ proces typu Win32, je spuštěn odpovı́dajı́cı́ podsystém, pokud se tak ještě nestalo
(POSIX, OS/2, . . . ). Spouštěný proces pak tomuto podsystému předá. U DOS a Win16 procesů je
vytvořen virtuálnı́ stroj.
P
4.3
SPRÁVA PROCESŮ
114
Hlavnı́ vlákno procesu je spuštěno podle hlavnı́ho kódu procesu hned po vytvořenı́ procesu,
ale všechna ostatnı́ vlákna jsou spuštěna API
funkcı́ CreateThread() s kódem některé k tomu
účelu naprogramované funkce. Může to být funkce
uvnitř spustitelného souboru procesu a nebo funkce
z některé dynamicky linkované knihovny. Adresu
funkce spuštěného vlákna zjistı́me napřı́klad v Process Exploreru ve vlastnostech procesu na kartě
Threads. Na této kartě je kromě jiného pro každé
vlákno čı́slo TID (Thread ID, čı́slo vlákna) a adresa funkce vlákna (obvykle název souboru s čı́slem označujı́cı́m vzdálenost funkce v kódu od začátku souboru). Na této kartě se také nacházı́ tlačı́tko
Stack, přes které se dostaneme k zásobnı́ku vlákna.
Tlačı́tko Kill umožňuje násilně ukončit vlákno nebo
proces a tlačı́tko Suspend vlákno či proces uspı́.
Podsystém SMSS (Session Manager Subsystem) je správce relacı́ uživatelů. Jeho souborem je Obrázek 4.7: Vlastnosti vlákna procesu v Process Exploreru
smss.exe. Jako jeden z mála procesů nenı́ napojen
na žádnou stanici oken. Tento proces řı́dı́ všechny
relace na počı́tači.
LSASS (Local Security Authority Subsystem) je podsystém, který udržuje informace o všem, co
se týká zabezpečenı́ systému a právě zde běžı́ všechny procesy ověřovánı́ přı́stupu, také spravuje
Mı́stnı́ zásady zabezpečenı́ a některé dalšı́ zásady. Tento podsystém použı́vá databáze SAM (Security
Account Manager), ve kterých jsou uloženy informace o uživatelských účtech a účtech skupin, a to
bud’ databázi SAM na lokálnı́m počı́tači(součást registru, v samostatném souboru) nebo v doméně.
V podsystému Win32 běžı́ i některé systémové procesy (všechny, které jsou interaktivnı́). Je
fyzicky uložen ve dvou souborech – část běžı́cı́ v uživatelském režimu je v souboru csrss.exe, část
běžı́cı́ v režimu jádra je v souboru win32k.sys (je trochu zvláštnı́, že handle souboru win32k.sys
nikdo nevlastnı́).
Velmi důležitý proces, který se však ve Správci úloh neobjevı́, je ntldr (NT Loader, soubor
bez přı́pony). Po spuštěnı́ počı́tače je spuštěn jako prvnı́ proces a jeho úkolem je načı́st (load) celý
operačnı́ systém. Spouštı́ také proces smss (Session Manager, smss.exe), který pak má na starosti
dalšı́ provoz systému (viz kapitolu 6.2 Start systému).
Proces, který se ve většině nástrojů zobrazuje jako System, nás v zobrazenı́ procesů může překvapit. V Process Exploreru vidı́me, že v hierarchické struktuře je předkem prakticky všech systémových
procesů. Pokud si zobrazı́me vlastnosti tohoto procesu, zjistı́me, že nemá žádný spustitelný soubor,
ale přesto v něm běžı́ hodně vláken. Vlákna majı́ svůj kód bud’ v souboru ntoskrnl.exe (to je
hlavnı́ soubor jádra) nebo v různých souborech s přı́ponou SYS (to znamená ovladače). Tento proces
je hostitelem vláken mnoha ovladačů – ovladače běžı́cı́ v režimu jádra totiž většinou (ne vždy) nemajı́
žádný vlastnı́ proces.
P
4.3
SPRÁVA PROCESŮ
115
Dalšı́ „záhadné“ procesy, které vidı́me v Process Exploreru, jsou označeny jako Interrupts a DPCs.
Ve skutečnosti vůbec nejde o procesy (ostatně, nejen že nemajı́ žádný spustitelný soubor, ale dokonce
ani vlákna ani přidělené prostředky), sloužı́ k informovánı́ o čase, který systém strávı́ obsluhou
hardwarových přerušenı́ a volánı́ procedur DPC (Deferred Procedure Call, což je pozdržené volánı́
procedur – obvykle pro prováděnı́ té části kódu obsluhy přerušenı́, která „moc nespěchá“). Pokud
v těchto dvou položkách najdeme vyššı́ hodnoty než obvykle, znamená to obvykle nějaký problém
s hardwarem nebo ovladačem.
Úkoly
1. Spust’te Process Explorer a prohlédněte si vlastnosti položek Interrupts, DPCs, System, dále
všech zbylých systémových procesů a některého uživatelského procesu. Všı́mejte si zejména
vláken procesu, přidělených prostředků (včetně paměti) a uživatelského účtu, pod kterým
běžı́ (včetně SID). Všimněte si, že položky Interrupts a DPCs majı́ také SID. Jaké? Komu asi
patřı́?
C
2. U některého procesu s vı́ce vlákny (napřı́klad services.exe) ve vlastnostech na kartě Threads
si vyberte některé vlákno a zobrazte jeho zásobnı́k.
3. Spust’te některý jednoduchý program, třeba Poznámkový blok nebo Kalkulačku. Pak najděte
jeho záznam v Process Exploreru a uspěte ho (nápověda: uspánı́ je zde myšleno jako suspendovánı́, hledejte na kartě Performance). Pokuste se proces ukončit standardnı́m způsobem, když
to nepůjde, tak ho v Process Exploreru „zabijte“ (násilně ukončete).
4.3.2
Úlohy a procesy
Úloha je přesně vzato abstraktnı́ zadánı́, které je třeba provést, ale tento pojem se v praxi použı́vá i pro
sadu procesů, které definovaným způsobem spolupracujı́ na řešenı́ tohoto zadánı́. Úlohu můžeme
prostě brát jako zobecněnı́ činnosti a reprezentace procesů. Vztah mezi procesy patřı́cı́mi do jedné
úlohy bývá často typu rodič–potomek (ale pokud mezi dvěma procesy je vztah rodič–potomek,
neznamená to automaticky, že patřı́ do stejné úlohy).
V angličtině se poněkud chaoticky použı́vajı́ dva pojmy – job a task. Obojı́ znamená úloha,
jen v trochu jiném kontextu. Pojem task souvisı́ většinou s plánovánı́m, zatı́mco job použı́váme
v souvislosti s tiskovými úlohami a také s úlohami coby abstrakcı́ procesů (nebo skupin procesů).
Ve většině přı́padů platı́, že v jedné úloze je pouze jeden proces. Nemusı́ tomu tak být vždy,
ukázku vytvořenı́ vı́ce procesů sdı́lejı́cı́ch jednu úlohu máme v přı́kladu 4.5 na straně 121 (ve
Windows XP). Tam je popsán jeden z mála způsobů, jak vytvořit proces, jehož úlohu lze nějakým
způsobem ovlivňovat (napřı́klad přidávat do úlohy dalšı́ procesy).
Podpora úloh v tomto smyslu je však ve Windows zabudována až od verze XP/Server 2003.
Ve Windows do verze 2000 sice najdeme nástroj Správce úloh (mstask.exe, těžko řı́ct, proč vlastně
má ve svém názvu pojem „úloha“), který, jak vı́me, spouštı́me bud’ z přihlašovacı́ho okna, nebo
z kontextového menu hlavnı́ho panelu a nebo klávesovou zkratkou Ctrl+Shift+Esc , ale nenı́ tam
prakticky nic dalšı́ho, co s úlohami souvisı́. Pojem úloha se také použı́vá v souvislosti s tiskem nebo
plánovánı́m spouštěnı́ procesů.
P
4.3
SPRÁVA PROCESŮ
116
Alternativ ke Správci úloh je mnoho. Kromě nám již známého Process Exploreru můžeme použı́vat
napřı́klad tyto správce procesů:
$
• Task Patrol (http://www.asmdev.net/products/taskpatrol/index.html),
• Ultimate Process Manager
(http://www.lodusweb.net/index.php?option=com content&task=view&id=13&Itemid=45),
• Process Lasso, (http://www.bitsum.com/prolasso.php),
• DTaskManager (spolu s dalšı́mi aplikacemi na http://www.dimio.altervista.org/eng/),
• Security Process Explorer (http://www.glarysoft.com/spe.html),
• Daphne (http://www.drk.com.ar/daphne.php),
• System Explorer (http://systemexplorer.mistergroup.org/) – pozor, hned za „Download“ jsou
odkazy Google a až pak odkaz na stránku pro stahovánı́.
Výše uvedené aplikace nejsou všechny stejné. Vždy nabı́zejı́ alespoň takovou funkčnost jako má
správce úloh (plus mı́nus), dalšı́ majı́ vylepšené bezpečnostnı́ funkce, rozšı́řenou podporu sı́tě,
třı́děnı́ procesů, rozsáhlost informacı́, které lze zjistit o procesech, některé se nemusejı́ instalovat
(portable, přenosná, varianta) atd. Všechny jsou bud’ volně šiřitelné nebo majı́ volně dostupnou
verzi.
S úlohami můžeme pracovat pomocı́ nástroje tasklist. Sloužı́ k výpisu úloh (také podle vybraných kritériı́), a to na mı́stnı́m nebo vzdáleném počı́tači.
$
zobrazı́ seznam běžı́cı́ch procesů (úloh) na mı́stnı́m počı́tači (název, PID, relaci, přidělenou pamět’)
tasklist
totéž, ale pracujeme s procesy na zadaném počı́tači
tasklist /S počı́tač
zobrazené informace jsou podrobnějšı́ – přidajı́ se sloupce pro stav procesu, jeho
vlastnı́ka (uživatelský účet), čas procesoru a titulek
tasklist /V
tasklist /SVC
tasklist /M
k procesům se vypı́šou i služby, které v nich běžı́
ke každému procesu zjistı́me dynamicky linkované knihovny, které použı́vá
tasklist /M icmp.dll
takto zjistı́me, které procesy použı́vajı́ zadanou knihovnu
tasklist /fi ”imagename eq svchost.exe”
použı́váme filtr – chceme pouze procesy, u nichž
je název spustitelného souboru svchost.exe (spustitelný soubor se nazývá image)
tasklist /fi ”username eq NT AUTHORITY\SYSTEM”
chceme všechny procesy běžı́cı́ pod sys-
témovým účtem
tasklist /fi ”memusage le 98000”
chceme procesy, které zabı́rajı́ maximálně 98 000 kB paměti (le znamená less or equal, menšı́ nebo rovno), kromě eq a le máme k dispozici operátory
ne (nenı́ rovno), gt (většı́), lt (menšı́), ge (většı́ nebo rovno)
tasklist /FO list
výstup nebude mı́st formu tabulky, ale seznamu
výstup je ve formátu CSV, který lze importovat do běžných
tabulkových editorů včetně Excelu (výstup v tomto formátu obvykle směrujeme do souboru)
tasklist /FO csv >> proc.csv
Procesy a úlohy nemusı́me pouze zobrazovat, můžeme je i ukončovat. K tomu sloužı́ přı́kaz
taskkill („zabı́jenı́ “ úloh).
ukončı́ proces se zadaným PID, jde o řádné ukončenı́ podobně jako bychom
klepli myšı́ na křı́žek v pravém hornı́m rohu okna
taskkill /pid 5810
$
4.3
SPRÁVA PROCESŮ
117
zabije proces se zadaným PID (F jako Force, silný), použijeme, pokud
proces nereaguje a odmı́tá se nechat ukončit běžným způsobem
taskkill /F /pid 5810
taskkill /T /pid 5810
ukončı́me nejen zadaný proces, ale i všechny jeho potomky (rekurzı́vnı́
ukončenı́)
taskkill /IM firefox.exe
proces nemusı́me zadávat jeho PID, ale pomocı́ tohoto přepı́nače
i jeho názvem
můžeme použı́vat stejné filtry jako u přı́kazu tasklist,
zde ukončı́me všechny procesy pracujı́cı́ pod zadaným uživatelským účtem
taskkill /fi ”username eq uživatel”
ukončı́me všechny procesy, které „neodpovı́dajı́ “, tedy pravděpodobně zamrzly (pozor – pravděpodobně, ale ne zcela jistě)
taskkill /F /fi ”status eq not responding”
Přı́klad 4.4
Výstup přı́kazu vypisujı́cı́ho základnı́ informace o procesech (zkrácený, na mı́stě řádku se třemi
tečkami):
C:\> tasklist
Název procesu
PID Název relace
Cı́slo re Využitı́ pame
========================= ====== ================ ======== ============
System Idle Process
0 Console
0
16 kB
System
4 Console
0
112 kB
smss.exe
520 Console
0
124 kB
csrss.exe
780 Console
0
3 952 kB
winlogon.exe
804 Console
0
4 024 kB
services.exe
848 Console
0
1 536 kB
lsass.exe
860 Console
0
2 452 kB
svchost.exe
1028 Console
0
1 592 kB
...
thunderbird.exe
2560 Console
0
23 144 kB
FreeCommander.exe
2452 Console
0
5 600 kB
cmd.exe
4020 Console
0
3 092 kB
procexp.exe
156 Console
0
28 656 kB
firefox.exe
3060 Console
0
86 488 kB
cmd.exe
2252 Console
0
4 248 kB
PDFXCview.exe
1152 Console
0
45 684 kB
tasklist.exe
244 Console
0
5 004 kB
M
Když budeme chtı́t podrobnějšı́ výpis, použijeme přepı́nač /v. Záhlavı́ výpisu je následujı́cı́ (samotný
výpis je dlouhý, a navı́c dost do šı́řky):
C:\> tasklist /v
Název procesu
PID Název rel Cı́slo re Využitı́ pame Stav
Uživatelské jméno
Cas CPU Titulek okna
============= ===== ========= ======== ============ ======== =================== ======== ===============
M
Nechceme všechno, ale zajı́majı́ nás pouze procesy svchost.exe, tedy budeme filtrovat:
C:\> tasklist /v | findstr /i ”svchost.exe”
svchost.exe
svchost.exe
svchost.exe
svchost.exe
svchost.exe
svchost.exe
1028
1112
1260
1336
1452
768
Console
Console
Console
Console
Console
Console
0
0
0
0
0
0
1
1
14
1
600
736
196
220
200
144
kB
kB
kB
kB
kB
kB
Spušteno
Spušteno
Spušteno
Spušteno
Spušteno
Spušteno
NT
NT
NT
NT
NT
NT
AUTHORITY\SYSTEM
AUTHORITY\NETWORK SERVICE
AUTHORITY\SYSTEM
AUTHORITY\NETWORK SERVICE
AUTHORITY\LOCAL SERVICE
AUTHORITY\LOCAL SERVICE
0:00:00
0:00:01
0:00:30
0:00:00
0:00:00
0:00:00
Nenı́
Nenı́
Nenı́
Nenı́
Nenı́
Nenı́
k
k
k
k
k
k
dispozici
dispozici
dispozici
dispozici
dispozici
dispozici
M
4.3
SPRÁVA PROCESŮ
118
Oproti předchozı́mu výpisu máme navı́c předevšı́m účet, pod kterým služba pracuje, což už může
být cenná informace. Pokud chceme zjistit, které služby běžı́ v různých procesech, zadáme (výstup
je zkrácený o procesy, ve kterých žádná služba neběžı́):
C:\> tasklist /svc
Název procesu
PID Služby
========================= ====== ====================================================
...
services.exe
848 Eventlog, PlugPlay
lsass.exe
860 PolicyAgent, ProtectedStorage, SamSs
svchost.exe
1028 DcomLaunch, TermService
svchost.exe
1112 RpcSs
svchost.exe
1260 AudioSrv, Browser, CryptSvc, Dhcp, dmserver, ERSvc,
EventSystem, FastUserSwitchingCompatibility, helpsvc,
HidServ, lanmanserver, lanmanworkstation, Netman,
RasMan, Schedule, seclogon, SENS, SharedAccess,
ShellHWDetection, srservice, TapiSrv, Themes, TrkWks,
W32Time, winmgmt, wscsvc, wuauserv, WZCSVC
svchost.exe
1336 Dnscache
svchost.exe
1452 LmHosts, SSDPSRV
AvastSvc.exe
1560 avast! Antivirus
spoolsv.exe
2012 Spooler
svchost.exe
768 WebClient
jqs.exe
1060 JavaQuickStarterService
LSSrvc.exe
1424 LightScribeService
sqlservr.exe
1380 MSSQL$SQLEXPRESS
SMAgent.exe
256 SoundMAX Agent Service (default)
sqlwriter.exe
264 SQLWriter
wmiapsrv.exe
1352 WmiApSrv
alg.exe
2080 ALG
...
M
Jednotlivé procesy svchost.exe lze bohužel rozlišit jen podle jejich PID. Zjištěné PID můžeme
využı́t také k výpisu všech modulů (předevšı́m dynamicky linkovaných knihoven, ale i dalšı́ch
namapovaných souborů) daného procesu:
C:\> tasklist /m /fi ”pid eq 848”
Název procesu
PID Moduly
========================= ====== ===================================================
services.exe
848 ntdll.dll, kernel32.dll, snxhk.dll, ADVAPI32.dll,
RPCRT4.dll, Secur32.dll, msvcrt.dll, NCObjAPI.DLL,
MSVCP60.dll, SCESRV.dll, AUTHZ.dll, USER32.dll,
GDI32.dll, USERENV.dll, umpnpmgr.dll, WINSTA.dll,
NETAPI32.dll, ShimEng.dll, AcAdProc.dll, IMM32.DLL,
Apphelp.dll, VERSION.dll, eventlog.dll, PSAPI.DLL,
WS2_32.dll, WS2HELP.dll, wtsapi32.dll
Jde o seznam modulů procesu services.exe, což je systémový proces, který zajišt’uje běh služeb.
Uživatelský proces by měl zřejmě modulů ještě vı́ce.
M
4.3
SPRÁVA PROCESŮ
119
Zvláštnı́, a ne zrovna populárnı́, skupinou procesů jsou rootkity. Rootkit je program, který dokáže
skrýt sebe a přı́padně i jiné soubory a procesy před běžnými metodami zviditelněnı́ (tj. v rozhranı́
Windows nebo v souborovém systému). Pro odhalovánı́ rootkitů v současné době existuje vı́c
nástrojů, všechny obvykle pracujı́ takto: nejdřı́v sestavı́ výpis souborů, procesů a klı́čů registru
běžným způsobem přes knihovny Windows, a pak provedou totéž, ale oklikou přes vlastnı́ knihovny
(které mimochodem skrývajı́ před rootkity podobným způsobem jako se rootkity skrývajı́ samy).
Potom oba výpisy porovnajı́ a vypı́šou položky, které na prvnı́m výpisu nejsou.
P
Obrázek 4.8: Rootkit Revealer
Takto pracuje napřı́klad Rootkit Revealer od Sysinternals, který je volně ke staženı́ na webu
http://www.sysinternals.com, jeho výstup je na obrázku 4.8. V seznamu najdeme hodně „planých
poplachů“, protože ve skutečnosti se skrývajı́ i nevinné soubory, jako napřı́klad některé soubory
antivirového programu, internetových prohlı́žečů, ale také některé dočasné soubory.
Správa úloh jako takových nenı́ pro Windows moc dobře zdokumentována ani využı́vána, ale
výjimky lze najı́t. Napřı́klad na
http://www.informit.com/articles/article.aspx?p=362660&seqNum=14
najdeme zajı́mavý článek o naprogramovánı́ skutečné správy úloh pod Windows tak, jak běžně
funguje v unixových systémech.
Úkoly
1. Projděte si nejméně dva správce procesů, se kterými jste zatı́m nepracovali (stačı́ projı́t jejich
WWW stránky). Zaměřte se předevšı́m na odlišnosti v nabı́zených funkcı́ch oproti Správci
úloh a Process Exploreru.
2. Vypište seznam procesů pomocı́ přı́kazu tasklist a porovnejte výstup s tı́m, co zobrazuje
Správce úloh. Pak vyzkoušejte různé možnosti formátovánı́ výstupu, výstup ve formě CSV
(směrujte do souboru) pak otevřete (importujte) v některém tabulkovém editoru.
3. Vyzkoušejte u přı́kazu tasklist nejrůznějšı́ filtry, které je možné použı́t (celý seznam najdete
v nápovědě přı́kazu nebo na internetu). Bohužel je možné, že v české verzi Windows se u filtrů
setkáte s problémy.
C
4.3
SPRÁVA PROCESŮ
120
4. Spust’te některý jednoduchý program (Poznámkový blok, Kalkulačku apod.). Pomocı́ přı́kazu
tasklist si prohlédněte vlastnosti této úlohy a pak ji ukončete přı́kazem taskkill.
4.3.3
Vztahy mezi procesy
Procesy bývajı́ ve většině operačnı́ch systémů zařazeny ve stromové struktuře podle vztahu rodič–
potomek (potomek je proces, který byl spuštěn rodičovským procesem). Každý proces má přiděleno
své identifikačnı́ čı́slo PID (Process ID) a zná také PID svého rodiče (PPID, Parent PID).
Windows XP:
Windows 98:
Obrázek 4.9: Process Explorer ve Windows XP a 98
P
4.3
SPRÁVA PROCESŮ
121
Podobně to funguje i ve Windows. Pokud však už rodičovský proces neexistuje (ukončil svou
činnost) a potomci pořád ještě existujı́, jsou tito potomci „zarovnáni“ doleva, tedy už nemajı́ žádného
rodiče. Tı́m se pojetı́ struktury procesů lišı́ od unixových systémů, ve Windows mohou existovat
i procesy bez rodiče (rodič byl ukončen). Na obrázku 4.9 (v hornı́ části pro Windows XP) vidı́me
takto zarovnaný proces explorer.exe. Pokud se podı́váme na vlastnosti (Properties v kontextovém
menu) tohoto procesu, zjistı́me, že údaj Rodičovský proces je nastaven na „<Non-existent process>(936)“
(neexistujı́cı́ proces, čı́slo v závorce znamená PPID před ukončenı́m rodiče).
Přı́klad 4.5
Vyzkoušı́me „ztrácenı́“ rodičů. Postupně provedeme tyto kroky:
• Spustı́me Process Explorer, v něm budeme sledovat vztahy mezi procesy. Zavřeme všechna
okna Přı́kazového řádku, která momentálně máme spuštěna, aby nás nemátla.
• Do Start ï Spustit zadáme runas /user:uživatel cmd
(zadejte své uživatelské jméno).
• Budeme dotázáni na heslo, ale než ho zadáme, podı́váme se do Process Exploreru. Měl by se
tam objevit řádek procesu runas.exe. Zjistı́me jeho předka – explorer.exe (to lze zjistit ve
vlastnostech procesu na kartě Image).
• Až ted’ zadáme heslo a potvrdı́me. Co se stalo v Process Exploreru? Řádek runas.exe zmizel, ale zato se objevil řádek cmd.exe (pravděpodobně v hnědé barvě), a to pod procesem
svchost.exe spouštěným s řetězcem -k netsvcs. Proč? Protože při spouštěnı́ programu
došlo k autorizaci. Podle očekávánı́ je rodičem nového procesu onen proces svchost.exe.
V hlavnı́m menu Process Exploreru, položce Options ï Configure Highlighting zjistı́me, že hnědá
barva řádku znamená úlohu, tedy nic nebezpečného. Ve vlastnostech procesu zjistı́me, že je
navı́c jedna záložka, která u většiny ostatnı́ch procesů nenı́ – Jobs (Úlohy).
• V okně přı́kazového řádku, který jsme takto spustili, zadáme přı́kaz cmd (nebo cmd.exe).
Zřejmě zůstaneme v tomtéž okně (pravděpodobně nevznikne nové okno), ale v Process Exploreru se objevı́ nový proces – potomek původnı́ho procesu cmd.
• Ted’ v přı́kazovém řádku spustı́me dalšı́ program – zadáme přı́kaz notepad. Měl by se spustit
Poznámkový blok. Podı́váme se do Process Explorera, kam byl zařazen. Můžeme si ověřit
u všech třı́ procesů, že v jejich vlastnostech má karta Jobs stejný obsah.
• V Process Exploreru klepneme pravým tlačı́tkem na nejvrchnějšı́ proces cmd.exe (tj. prvnı́,
který jsme spustili, je zarovnaný nejvı́c k levému okraji) a v kontextovém menu zvolı́me Kill
process. Touto volbou proces násilně ukončı́me (jsme dotázáni, jestli to myslı́me vážně, tedy
potvrdı́me, že to opravdu myslı́me vážně). Odstranili jsme hlavnı́ho rodiče celé úlohy (skupiny
procesů). Co se stalo? V Process Exploreru ted’ najdeme oba zbývajı́cı́ procesy dole.
• Ověřı́me rodiče procesu. Zobrazı́me vlastnosti zbylého procesu cmd.exe, karta Image. Údaj
o rodiči bývá aktualizován s velkým zpožděnı́m, takže pokud tam je uveden již ukončený
proces, stačı́ uzavřı́t a znovu spustit Process Explorer. Správně by mı́sto údaje o rodičovském
procesu mělo být <Non-existent Process>(2628), čı́slo zřejmě bude na vašem počı́tači jiné.
Na obrázku 4.10 na straně 122 je pozice vytvořených procesů ve struktuře, a to nahoře před ukončenı́m prvnı́ho procesu cmd a dole po jeho ukončenı́.
4.3
SPRÁVA PROCESŮ
122
Obrázek 4.10: Vztahy mezi procesy
PID se použı́vá pouze ve Windows řady NT. Ve Windows s DOS jádrem (včetně Windows 98) nic
takového neexistuje (což komplikuje práci programátorům). Na obrázku 4.9 (ve spodnı́ části pro
Windows 98) si všimněte ve sloupci s PID procesu poněkud dlouhého údaje – mı́sto PID (které
neexistuje) se zobrazuje hodnota manipulátoru (handle) hlavnı́ho okna.
4.3.4
Priority procesů
Ve Windows se úrovně priorit (celkem 32) dělı́ na dvě části. Úrovně 1–15 jsou dynamické pro běžné
procesy, úrovně 16–31 jsou pro procesy reálného času:
• 0 – systémová úroveň, použı́vá se pro vlákno nulové stránky (to je pomocný mechanismus
probı́hajı́cı́ při uvolňovánı́ stránek ve fyzické paměti)
• 1 – dynamická nečinná (Idle)
• kolem 4 – Nečinná (Lowest)
• kolem 6 – Nižšı́ než normálnı́ (Below-normal)
• kolem 8 – Normálnı́ (Normal)
• kolem 10 – Vyššı́ než normálnı́ (Above-normal)
• kolem 13 (max. 15) – Vysoká priorita (Highest)
• 16 – nečinná reálného času
• kolem 24 – Reálného času (Time-critical)
• 31 – časově kritická reálného času
Obvyklé hodnoty priorit jsou následujı́cı́:
1. Pro uživatelské procesy je obvyklá priorita 8, normálnı́.
2. Pro systémové procesy je obvyklá priorita:
• 9 – Proces řı́zenı́ služeb SCM (services.exe), proces zabezpečenı́ (lsass.exe)
• 11 – napřı́klad Správce relacı́ (smss.exe)
• 13 – většina systémových procesů spouštěných ještě před přihlášenı́m kteréhokoliv uživatele, včetně hlavnı́ho Podsystému Win32 (csrss.exe) nebo procesu přihlášenı́ uživatele
(winogon.exe)
• 8 – ostatnı́ systémové procesy, obvykle ty, které se spouštějı́ po přihlášenı́ uživatele, a také
služby
P
4.3
SPRÁVA PROCESŮ
123
Prioritu procesu můžeme zjistit v těchto nástrojı́ch:
1. Správce úloh (Task Manager) – na kartě Procesy je seznam procesů, sloupec Základnı́ priorita
(pokud nenı́ tento sloupec zobrazen, v menu zvolı́me Zobrazit ï Vybrat sloupce, zatrhneme
přı́slušnou položku) – je zde pouze slovnı́ určenı́ priority,
$
2. Process Explorer – zobrazuje také čı́selnou hodnotu priority, na obrázku 4.9 ji vidı́me ve sloupci
Priority (v okně Select Columns na záložce Process Performance, položka Base Priority).
V obou těchto nástrojı́ch můžeme změnit prioritu procesu (kontextové menu), ale pouze mezi
„slovnı́mi“ úrovněmi, napřı́klad „Normálnı́“ (Normal), „Vysoká“ (High), „Nı́zká“ (Low) apod.
(v kontextovém menu procesu).
Ve skutečnosti rozlišujeme výchozı́ a dynamickou čı́selnou prioritu procesu. Výchozı́ priorita je
nastavena při startu procesu a obvykle se už neměnı́. Dynamická (momentálnı́) priorita se ve své
hodnotě pohybuje kolem výchozı́ priority (plus mı́nus několik bodů) a použı́vá se k dynamickému
řešenı́ přı́lišného zvýhodněnı́ nebo naopak znevýhodněnı́ procesu při jeho běhu (napřı́klad když
proces vyčerpá hodnotu času, po který mohl využı́vat procesor při vyššı́ prioritě, jeho priorita je
snı́žena, dále se měnı́ priority při práci s I/O prostředky).
Výchozı́ prioritu procesu při jeho spuštěnı́ můžeme určit při spuštěnı́ z přı́kazového řádku
(přı́padně ze skriptu) pomocı́ přı́kazu START (který už známe), napřı́klad pokud chceme spustit
aplikaci Poznámkový blok s nižšı́ výchozı́ prioritou, zadáme
P
$
start /LOW notepad.exe
Úkoly
1. Spust’te Poznámkový blok s nižšı́ prioritou tak, jak bylo výše popsáno, a pak v programu
Process Explorer zjistěte čı́selnou hodnotu priority tohoto procesu.
C
2. V Process Exploreru nebo Správci úloh snižte prioritu procesu Poznámkového bloku o jeden
„slovnı́“ stupeň. V Process Exploreru se pak podı́vejte na čı́selné vyjádřenı́ výchozı́ priority
(mı́sto 8 by mělo být 6).
3. V Process Exploreru seřad’te procesy podle priorit (stačı́ klepnout na záhlavı́ sloupce s prioritami) a zkontrolujte, které procesy majı́ nejvyššı́ prioritu.
4.3.5
Plánovánı́
Spouštěnı́ procesů můžeme plánovat v grafickém režimu v nástroji Naplánované úlohy (soubor
mstask.exe). Ve skutečnosti jde o interaktivnı́ službu (je napojena na stanici oken WinSta0), jejı́m rozhranı́m je právě uvedený nástroj.
V prostředı́ Přı́kazového řádku (a ve skriptu) použı́váme pro plánovánı́ spouštěnı́ programů
přı́kaz AT (od verze Windows 2000). Tento přı́kaz vyžaduje spuštěnou službu plánovánı́ procesů.
Přı́kaz umožňuje naplánovat přı́kazy jednorázově či pravidelně na určité dny v měsı́ci. Naplánovaný přı́kaz zı́ská identifikačnı́ čı́slo, které použijeme, když chceme naplánovánı́ zrušit.
AT
(bez parametrů) vypı́še seznam naplánovaných přı́kazů, a to včetně jejich identifikačnı́ch čı́sel
$
$
4.3
SPRÁVA PROCESŮ
124
AT 6:00 zalohuj.exe
v 6:00 ráno (přı́štı́ho dne, pokud dnes je už po této hodině) se spustı́
soubor zalohuj.exe
AT 16:00 /every:1 make_report.exe
každý měcı́c prvnı́ho v 16:00 spustı́ program make_report.exe
každý pátek v 5 odpoledne se spustı́ zadaný program (v některých verzı́ch se použı́vá anglické značenı́ dnů v týdnu, to zjistı́me v nápovědě)
AT 17:00 /every:pá zalohuj.exe
AT \\počı́tač 6:00 zalohuj.exe
v 6:00 ráno spustı́ zadaný přı́kaz na daném počı́tači (vzdá-
leně)
pokud chceme naplánovat spuštěnı́ něčeho jiného než jednoduchého exe souboru bez parametrů, musı́me použı́t přı́kaz cmd
/c (to znamená, že se zadaný přı́kaz spustı́ v nově vytvořeném přı́kazovém řádku, ale hned
po provedenı́ přı́kazu se přı́kazový řádek uzavře; když chceme, aby okno přı́kazového řádku
zůstalo, použijeme mı́sto /c přepı́nač /k)
AT 10:30 cmd /c ”net statistics server > report.txt”
AT 3 /delete
zrušı́ naplánovánı́ přı́kazu s daným čı́slem
Přı́klad 4.6
Ukážeme si postup při plánovánı́ spouštěnı́ přı́kazů.
AT 6:00 zalohuj.exe
vytvořı́me prvnı́ plánovánı́, a to jednorázové
dalšı́ plánovánı́ se má provádět každý měsı́c, a to
v zadaných dnech (prvnı́, osmý, atd. den měsı́ce)
AT 10:00 /every:1,8,17,26 report.exe
třetı́ naplánovánı́ znamená spuštěnı́ přı́kazu pro rychlou kontrolu disku, a to každé pondělı́ a středu (všimněte si přepı́nače u přı́kazu cmd)
AT 17:30 /every:po,st cmd /k chkdsk
AT
vypı́šeme všechny naplánované přı́kazy, výstup:
ID stavu
Den
Cas
Přı́kazový řádek
----------------------------------------------------------------1
Zı́tra
6:00 AM
zalohuj.exe
2
Každý den 1 8 17 26
10:00 AM
report.exe
3
Každý den Po St
17:30 PM
cmd /k chkdsk
M
Takto zobrazı́me naplánované přı́kazy na tomto počı́tači. Kdybychom chtěli zobrazit plán z jiného počı́tače (třeba na zde oblı́beném počı́tači účetnı́ho), použili bychom přı́kaz AT \\ucetni
AT 2 /delete
odstranı́me druhou položku, prvnı́ a třetı́ zůstanou naplánovány
Komplexnějšı́m přı́kazem (ve Windows od verze XP/Server 2003) je přı́kaz schtasks (Scheduled
Tasks, naplánované úlohy). Jak název napovı́dá, nepracujeme pouze s přı́kazy a programy, ale
s úlohami. Pomocı́ tohoto nástroje můžeme (nejen) plánovat spouštěnı́ zadaných úloh, procesů
a přı́kazů bud’ jednorázově nebo pravidelně v zadaný čas a jakkoliv řı́dit jejich naplánovánı́, a to
i na vzdáleném počı́tači.
naplánujeme spouštěnı́ úlohy denně vždy v 16 hodin, úloha se jmenuje Název a je spuštěna ze zadaného souboru
schtasks /CREATE /SC daily /ST 16:00 /TN Název /TR soubor.exe
zobrazı́me nápovědu k podpřı́kazu CREATE (to můžeme provést s kterýmkoliv podpřı́kazem)
schtasks /CREATE /?
$
4.3
SPRÁVA PROCESŮ
schtasks /QUERY
125
zı́skáme tabulku všech naplánovaných úloh na našem počı́tači
schtasks /QUERY /S počı́tač
totéž, ale na zadaném počı́tači
výpis nebude ve formě tabulky, ale jako seznam (oproti tabulce
zı́skáme některé informace navı́c – způsob spouštěnı́ a název hostitelského počı́tače)
schtasks /QUERY /FO list
schtasks /QUERY /TN Název /FO list
vypı́še se informace o zadané úloze
schtasks /CHANGE /TN ”Antivirová kontrola” /TR C:\antivir.exe zadaná úlo- ha už exis-
tuje, ale chceme ji pozměnit – změnı́me program, který se má v dané úloze spustit
zadaná úloha bude spuštěna okamžitě, bez ohledu na nastavenı́ plánovánı́ úloh (mohli bychom spustit přı́mo spustitelný soubor, ale zde
můžeme využı́t vytvořené definice úloh)
schtasks /RUN /TN ”Antivirová kontrola”
schtasks /END /TN ”Antivirová kontrola”
okamžité ukončenı́ běžı́cı́ úlohy (ale napláno-
vaná zůstane)
schtasks /DELETE /TN Úloha /S počı́tač
odstranı́ naplánovánı́ úlohy na zadaném počı́tači
Přı́klad 4.7
Vytvořı́me novou úlohu nejdřı́v tak, aby při jejı́m spouštěnı́m musel uživatel zadávat heslo (pokud
se jedná o úlohu s potřebou vyššı́ch oprávněnı́), a pak podobnou úlohu tak, aby uživatel heslo
zadávat nemusel (úloha poběžı́ na pozadı́).
schtasks /CREATE /S ucetni /SC daily /ST 16:00
/TN Monitorovani /TR c:\prog\monitoring.exe
vytvořı́me novou naplánovanou úlohu
s názvem Monitorovani, která se má provést na počı́tači s názvem ucetni, a to denně vždy v 16
hodin, uživatel bude pokaždé dotázán na heslo.
Zı́skáme hlášenı́:
Úspěch: Naplánovaná úloha Monitorovana byla úspěšně vytvořena.
schtasks /QUERY /S ucetni
zobrazı́ se tabulka naplánovaných úloh na zadaném počı́tači, něco
podobného:
...
Složka: \
Název úkolu
Čas přı́štı́ho spuštěnı́ Stav
=========================================================================
Monitorovani
10.2.2010 16:00:00
Připraveno
...
Složka: \Microsoft\Windows\Defrag
Název úkolu
Čas přı́štı́ho spuštěnı́ Stav
=========================================================================
ScheduledDefrag
10.2.2010 1:00:00
Připraveno
Složka: \Microsoft\Windows\DiskDiagnostic
Název úkolu
Čas přı́štı́ho spuštěnı́ Stav
=========================================================================
Microsoft-Windows-DiskDiagnosticDataColl 21.2.2010 1:00:00
Připraveno
Microsoft-Windows-DiskDiagnosticResolver Zakázáno
...
M
4.3
SPRÁVA PROCESŮ
126
zobrazı́ informaci o zadané úloze,
a to na počı́tači účetnı́ho a navı́c ve formátu „seznam“ (výchozı́ formát je tabulka, kterou jsme
viděli v předchozı́m výpisu). Výsledek:
schtasks /query /S ucetni /FO list /tn Monitorovani
Složka: \
Název hostitele:
Název úkolu:
Čas přı́štı́ho spuštěnı́:
Stav:
Režim přihlášenı́:
M
UCETNI
\Monitorovani
10.2.2010 16:00:00
Připraveno
Pouze interaktivně
schtasks /CREATE /SC daily /ST 16:00 /RU uživatel /RP
/TN Monitorovani2 /TR c:\prog\monitoring.exe vytvořı́me úlohu Monitorovani2 ten-
tokrát na lokálnı́m počı́tači spouštěnou ve stejném čase jako předchozı́ (také má stejný spustitelný soubor), ale úloha bude spouštěna s přı́stupovými oprávněnı́mi zadaného uživatele,
heslo zadáváme pouze nynı́ (uživatel nenı́ pravidelně obtěžován žádostı́ o heslo, které ani
nemusı́ znát)
schtasks /query /FO list /tn Monitorovani2
zobrazı́me informaci o zadané úloze ve for-
mátu „seznam“. Výsledek:
Složka: \
Název hostitele:
Název úkolu:
Čas přı́štı́ho spuštěnı́:
Stav:
Režim přihlášenı́:
NOTEBOOK
\Monitorovani2
10.2.2010 16:00:00
Připraveno
Interaktivně nebo na pozadı́
Podrobné informace o přı́kazu schtasks zı́skáme bud’ z nápovědy přı́kazu (běžným způsobem,
který známe od jiných přı́kazů) a nebo na adrese
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/
schtasks.mspx?mfr=true
Naplánovat se dá také vypnutı́, restart či uspánı́ počı́tače (také vzdáleně) a nebo odhlášenı́
uživatele. K tomuto účelu můžeme použı́t přı́kaz shutdown, který najdeme v různých verzı́ch
Windows (kromě variant Home pro Windows do verze XP včetně).
shutdown /L
odhlášenı́ právě přihlášeného uživatele
vypne zadaný počı́tač (parametr /s určuje vypnutı́, dalšı́ parametr
umožňuje zadat cı́lový počı́tač)
shutdown /s /m \\počı́tač
shutdown /r
restart
shutdown /h
hibernace (pouze ve verzı́ch, které hibernaci umožňujı́)
shutdown /s /t 5
je nastaven časový limit 5 sekund, po něm se počı́tač automaticky vypne
M
$
4.4
KOMUNIKACE MEZI PROCESY
127
Úkoly
1. Naplánujte spuštěnı́ programu kontrola.exe tak, aby se spouštěl každý pátek ve 4 hodiny
odpoledne. Pro naplánovánı́ použijte postupně oba přı́kazy (i ten staršı́, který lze použı́t také
na Windows 2000). U novějšı́ho přı́kazu nazvěte úlohu Kontrola.
2. Proved’te totéž co v předchozı́m úkolu, ale vzdáleně na počı́tači \\sekretarka.
C
Pokud nemáte možnost plánovat spouštěnı́ na jiných počı́tačı́ch než na tom, u kterého sedı́te,
použijte název svého počı́tače – pamatujete si, jak ho zjistit?
3. Zjistěte, jaké údaje jsou uloženy o naplánovánı́ provedeném v předchozı́ch dvou bodech (tj.
zobrazte informace o naplánovaných přı́kazech/úlohách). U přı́kazu schtasks vyzkoušejte
tabulkové i seznamové zobrazenı́ naplánované úlohy.
4. Odstraňte naplánovánı́ všech přı́kazů/úloh, které jste vytvořili v předchozı́ch úkolech.
5. Vyzkoušejte své odhlášenı́ pomocı́ přı́kazu, ke konci práce s počı́tačem také restart nebo
vypnutı́ pomocı́ přı́kazu.
4.4
4.4.1
Komunikace mezi procesy
Schránka
Ke schránce (clipboard) máme přı́stup obvykle přes menu různých programů (kopı́rovánı́ apod.),
ale také přes aplikaci Prohlı́žeč (sı́t’ové) schránky (soubor clipbrd.exe). Tato aplikace v některých
variantách Windows nenı́ standardně nainstalována, ale lze ji doinstalovat z instalačnı́ho CD.
Obrázek 4.11: Zkopı́rovaný text (vlevo) a obrázek (vpravo) ve schránce
Ve schránce mohou být tatáž data v několika různých formátech. Každý tento formát má své
označenı́. Existujı́ standardnı́ formáty, napřı́klad pro jednoduchý text bez formátovánı́ nebo pro
obrázek, aplikace si ale mohou vytvářet vlastnı́ formáty.
$
4.4
KOMUNIKACE MEZI PROCESY
128
Úkoly
1. Otevřete aplikaci, přes kterou máte přı́stup ke schránce (Prohlı́žeč sı́t’ové schránky). Dále
otevřete Poznámkový blok, cokoliv v něm napište a zkopı́rujte. Sledujte, co se děje v aplikaci
schránky (může být otevřeno vı́ce podoken, nás zajı́má podokno „Schránka“). Potom otevřete
Malovánı́, cokoliv v něm nakreslete a obrázek zkopı́rujte do schránky ( Ctrl+A , pak Ctrl+C ).
Opět se podı́vejte na obsah schránky.
C
2. V aplikaci Prohlı́žeč sı́t’ové schránky si vyzkoušejte připojenı́ ke schránce na jiném počı́tači.
4.4.2
DDE
DDE (Dynamic Data Exchange, Dynamická výměna dat) je technologie umožňujı́cı́ komunikaci
mezi procesy (je ve Windows už od verze 2). Jeden program může žádat data od druhého, aniž
by to vyžadovalo zásah uživatele, jde tedy o dynamickou formu sdı́lenı́ dat. Jeden proces (Server)
poskytuje data druhému procesu (Klientovi). Oba komunikujı́cı́ procesy (Server i Klient) musı́ být
spuštěny. Aplikace takto mohou sdı́let určitý objekt a komunikovat na jednom nebo vı́ce kanálech.
P
Implementace DDE částečně závisı́ na aplikacı́ch – data se po změně v aplikaci Server v aplikaci
Klient aktualizujı́ bud’ ihned nebo až po uloženı́ v aplikaci Server. Aktivita může být na straně
Klienta (zjišt’uje u Serveru, zda došlo k nějaké změně na datech) nebo na straně Serveru (informuje
Klienta o změně dat, přı́padně tato data Klientovi rovnou posı́lá).
Obrázek 4.12: Sdı́lená položka DDE (DDEShare)
Práci s DDE nemusı́me nechávat jen na aplikacı́ch, ke sdı́leným položkám DDE je přı́stup také
přes aplikaci Sdı́lená položka DDE (spustı́me ji napřı́klad v Start ï Spustit, ddeshare.exe ), rozhranı́
vidı́me na obrázku 4.12. Umožňuje předevšı́m vytvářenı́ DDE vazeb mezi procesy běžı́cı́mi na
různých počı́tačı́ch v sı́ti, můžeme zde vytvářet nebo mazat sdı́lené objekty, ale také pracovat
$
4.4
KOMUNIKACE MEZI PROCESY
129
Obrázek 4.13: Vytvořenı́ DDE vazby v OpenOffice.org
s přı́stupovými právy k jednotlivým objektům. Aby mohl být tento nástroj použı́ván, musı́ běžet
obě výše zmı́něné služby.
V kancelářských aplikacı́ch se s DDE setkáme napřı́klad při vkládánı́ odkazů. Na obrázku 4.13 je
vkládánı́ přes Vložit jinak, pole s proměnným obsahem závislým na obsahu jedné buňky v tabulkovém
editoru, obrázku s DDE vazbou a sekce z jiného dokumentu přes DDE.
NetDDE je sı́t’ová varianta DDE (sdı́lenı́ dat pomocı́ DDE po sı́ti). Až do verze XP byla součástı́
Windows, ale od verze Vista již nenı́ podporována.
4.4.3
OLE
OLE (Object Linking and Embedding) je technologie, která umožňuje vnořit do objektu vytvářeného
jednou aplikacı́ objekt vytvořený jinou aplikacı́ nebo vytvořit propojenı́ k takovému objektu. S OLE
objekty jsme se seznámili na straně 82 v sekci o modelu COM.
Aplikace, které mohou být zdrojem, se nazývajı́ Servery, cı́le jsou Klienty. Některé aplikace dokážou být obojı́. Narozdı́l od DDE můžeme sdı́let nejen data, ale obecně různé objekty (všechny OLE
objekty jsou implementacı́ rozhranı́ IOleObject z modelu COM), a pokud je nutné v „přijı́majı́cı́ “
aplikaci objekt upravit či s nı́m jakkoliv pracovat, nechá tuto činnost na „poskytujı́cı́ “ aplikaci.
Typický přı́klad použitı́ je spolupráce internetového prohlı́žeče (takového, který OLE podporuje)
a Adobe Readeru. Pokud v internetovém prohlı́žeči klepneme myšı́ na odkaz na PDF soubor, prohlı́žeč
vytvořı́ OLE vazbu k Adobe Readeru a ve svém vlastnı́m okně poskytne prostor pro zobrazenı́ PDF
souboru, které ve skutečnosti provede Adobe Reader. OLE také hodně využı́vajı́ aplikace v balı́ku
P
4.4
KOMUNIKACE MEZI PROCESY
130
Microsoft Office při skládánı́ dokumentů z různých druhů objektů, k témuž účelu je použı́vána
v OpenOffice.org.
Při vnořenı́ objektu se zı́skaný objekt stává součástı́ vytvářeného dokumentu (obecně souhrnu
objektů), vazba je jen nepřı́má (je to pouze vazba na aplikaci, která je OLE serverem). Napřı́klad
do dokumentu Wordu vložı́me obrázek vytvořený v aplikaci Malovánı́ (Paintbrush) pomocı́ OLE
vazby. V samotném Wordu s tı́mto obrázkem nemůžeme pracovat, ale je zde také odkaz na aplikaci,
která dokáže s obrázky pracovat, proto stačı́ poklepat na obrázek a můžeme ho editovat v nově
otevřené instanci aplikace Malovánı́. Po poklepánı́ na obrázek se nastartuje OLE server pro tento
druh dat (v našem přı́padě aplikace Malovánı́), po ukončenı́ editace (uloženı́) se změny provedou
i na klientovi (Word).
Jiná možnost pro OLE je propojenı́. Narozdı́l od vloženı́ data ve skutečnosti nejsou součástı́ objektu
klienta, ale zůstávajı́ uložena u serveru, u klienta je vytvořena pouze vazba na tato data. V přı́padě
prováděnı́ změn objektu na straně serveru se změny projevı́ i na straně klienta. Pokud dokument
vytvořený klienem přemı́stı́me, propojený objekt se „ztratı́“, protože zůstal u serverové aplikace.
P
P
Rozdı́l mezi vnořenı́m a propojenı́m je
tedy předevšı́m v umı́stěnı́ objektu, se kterým pracujeme.
V kancelářských aplikacı́ch se obvykle
k OLE dostaneme v nabı́dkách souvisejı́cı́ch s objekty. Napřı́klad v aplikaci OpenOffice.org najdeme Vložit ï Objekt ï OLE
objekt a zı́skáme okno (obrázek 4.14), ve
kterém vybereme mezi vloženı́m existujı́- Obrázek 4.14: Vloženı́ OLE objektu v OpenOffice.org
cı́ho OLE objektu a vytvořenı́m nového.
S OLE také můžeme pracovat při vkládánı́ částı́ dokumentů v rámci téhož kancelářského balı́ku
(napřı́klad v tabulkovém editoru zkopı́rujeme několik buněk a vložı́me je do textového editoru).
Programátoři použı́vajı́ OCX (OLE Control eXtension), což jsou binárně přenosné komponenty
obsahujı́cı́ prvky uživatelského rozhranı́ (lze je použı́vat v různých programovacı́ch jazycı́ch), jsou
uloženy v souborech s přı́ponou OCX (jde o dynamicky linkované knihovny).
Úkoly
1. Projděte si nástroj Sdı́lená položka DDE.
$
P
C
2. Vyzkoušejte možnosti DDE a OLE vazeb mezi aplikacemi patřı́cı́mi do některého kancelářského balı́ku (MS Office nebo OpenOffice.org).
4.4.4
Zprávy
Zpráva může být vytvořena přerušenı́m od nějakého zařı́zenı́ (napřı́klad stiskneme klávesu na
klávesnici nebo pohneme myšı́), zprávy si také posı́lajı́ aplikace navzájem, systém aplikacı́m nebo
aplikace systému (zprávy jsou adresovány oknům aplikacı́).
P
4.4
KOMUNIKACE MEZI PROCESY
131
Zası́lánı́ zpráv oknům je zřejmě nejtypičtějšı́m způsobem komunikace aplikace ve Windows
(pokud ovšem aplikace nějaké okno má – běžı́ ve WinSta0). Zprávu aplikaci může zaslat jádro (také
napřı́klad zprávu o ukončenı́ aplikace) nebo jakýkoliv proces, který zná handle okna (zpráva vždy
souvisı́ s oknem).
Každá (téměř) Win32 aplikace má svou vlastnı́ frontu zpráv, což má přı́znivý vliv na stabilitu
systému, protože fronta nemůže být blokovaná jinou aplikacı́. K blokovánı́ může dojı́t u fronty zpráv
pro Win16 aplikace (majı́ jednu společnou) také z důvodu kooperativnı́ho multitaskingu – aplikace
může dostat zaměřenı́ jen tehdy, když je k nı́ směrována nějaká událost, ale pokud aktivnı́ aplikace
zamrzne napřı́klad při práci s frontou zpráv, žádná jiná aplikace se ke zprávám nedostane.
Na obrázku 4.15 je nákres cesty zprávy k Win32 a Win16 aplikacı́m (DOS aplikace zprávy
nepoužı́vajı́).
Proces pro
zpracování
přerušení
nová
zpráva
Win32
aplikace
Win32
aplikace
...
Win16
aplikace
Win16
aplikace
...
Obrázek 4.15: Fronty pro zpracovánı́ zpráv ve Windows 9x/ME/NT
4.4.5
Volánı́ procedur
Volánı́ procedur jiného procesu je také jedna z možnostı́ komunikace mezi procesy. Jeden proces
může vyvolat proceduru jiného procesu s předánı́m skutečných parametrů procedury (přes parametry docházı́ k výměně dat mezi procesy). Ve Windows rozlišujeme
• LPC (Local Procedure Call – Volánı́ lokálnı́ procedury) pro volánı́ procedury procesu běžı́cı́ho
na stejném počı́tači, a to v režimu jádra (to znamená, že nenı́ implementováno v API, uživatelské procesy takto nemohou komunikovat), sloužı́ napřı́klad ke komunikaci procesu winlogon
a dalšı́ch s podsystémem LSASS,
• RPC (Remote Procedure Call – Vzdálené volánı́ procedury) pro proces běžı́cı́ na některém
stroji v mı́stnı́ sı́ti (ale je možné takto komunikovat i v rámci jednoho počı́tače), je nutné mı́t
spuštěnou službu Vzdálené volánı́ procedur (Remote Procedure Call), je realizována přes API
a tedy dostupná všem procesům,
• APC (Asynchronous Procedure Call – Asynchronnı́ volánı́ procedury) je speciálnı́ mechanismus, který umožňuje využı́t dobu čekánı́ procesu (vlákna) na událost (napřı́klad čeká na I/O);
P
4.5
PROGRAMOVÉ ROZHRANÍ
132
čekajı́cı́ vlákno může takto povolit použitı́ svého kontextu a času jinému vláknu (typicky
vláknu jádra, které provádı́ instrukce na žádost „vlastnı́ka“), pomocı́ APC se provádı́ také
ukončenı́ procesů,
• DPC (Deferred Procedure Call – Zpožděné volánı́ procedury) se většinou použı́vá jako dodatečná obsluha některého přerušenı́; „spěchajı́cı́ “ část obsluhy přerušenı́ se provede hned po
zjištěnı́ přerušenı́, zbylá část, jejı́ž zpracovánı́ už tolik nespěchá, se provede jako DPC, aby
nebyly zbytečně zdržovány dalšı́ procesy.
Pokud známe název procedury v knihovně, můžeme ji zavolat také „mimo programový kód“,
a to s použitı́m programu rundll32.exe (ve staršı́ch Windows rundll.exe), s touto možnostı́ se
hlouběji seznámı́me na straně 134.
4.5
Programové rozhranı́
4.5.1
Dynamicky linkované knihovny
Dynamicky linkované knihovny (DLL) použı́vajı́ předevšı́m programátoři. Aby bylo možné DLL
knihovnu použı́vat v aplikaci, je nutné ji nejdřı́v načı́st (zavést), pak je knihovna namapována
do adresového prostoru aplikace a jejı́ funkce a objekty můžeme volně použı́vat (jen musı́ být
deklarovány jako externı́).
Typické přı́pony souborů dynamicky linkovaných knihoven jsou DLL, TTF (True Type Font), FON
(staré rastrové fonty), NLS (National Language Services, ovladač pro jazyk), OCX (ActiveX Server).
Jako dynamickou knihovnu lze použı́t také EXE soubor nebo ovladač.
Obrázek 4.16: Seznam dynamických knihoven použı́vaných procesem v Process Exploreru
Pokud tutéž DLL knihovnu použı́vá vı́ce aplikacı́, v 32bitových Windows (řada NT a dále
Windows 9x/ME) je kód funkcı́ knihovny sdı́len a pouze namapován do adresového prostoru
P
4.5
PROGRAMOVÉ ROZHRANÍ
133
procesu (je v paměti ve skutečnosti jen jednou), ale data (objekty) má každá aplikace ve vlastnı́ kopii
(kopie se vytvořı́ v okamžiku, kdy se proces pokusı́ do knihovny zapisovat), v 16bitových Windows
byla sdı́lena i data (to umožňovalo jednoduchou komunikaci mezi procesy). Způsob mapovánı́
knihoven v NT (vlatnı́ kopie až při pokusu o zápis) se nazývá copy-on-write (je také popsán v sekci
o správě paměti na straně 163).
Mnohé programovacı́ jazyky nabı́zejı́ možnost ukládat do DLL i vlastnı́ typy komponent a jiných objektů charakteristických pro konkrétnı́ programovacı́ jazyk. Pokud však chceme, aby bylo
možné tyto knihovny použı́vat i aplikacı́ch psaných v jiném programovacı́m jazyce, musı́me k těmto
komponentám a objektům vytvořit rozhranı́, kterému budou rozumět již všechny aplikace.
P
DLL knihovny majı́ funkce internı́ (mohou být volány pouze uvnitř DLL) a exportované (mohou
být volány z jakékoliv aplikace). Exportované funkce si můžeme prohlédnout některým programem
dodávaným obvykle s programovacı́m jazykem (firma Borland napřı́klad dodává program tdump
pracujı́cı́ na Přı́kazovém řádku, je potřeba věnovat pozornost přepı́načům tohoto programu).
Seznam DLL knihoven, které jsou nalinkovány v konkrétnı́m procesu, zı́skáme napřı́klad v programu Process Explorer (viz obrázek 4.16), když v menu zvolı́me View ï Show Lower Pane, hned
následujı́cı́ položka určuje, zda se zobrazı́ DLL knihovny nebo manipulátory (handle) procesu.
Knihovna GINA (Graphical Identification and Authentication) je dynamicky linkovaná knihovna,
ve které je implementováno přihlašovánı́ uživatelů v grafickém režimu. Použitı́ této knihovny je
vázáno na SAS (Secure Attention Sequence, zabezpečenou sekvenci upozorněnı́), o které jsme slyšeli
už v minulém semestru – jde vpodstatě o klávesovou zkratku Ctrl+Alt+Del .
$
P
Standardně je GINA v souboru msgina.dll, ale tato knihovna může být nahrazena jinou GINA
knihovnou. Obvykle se tak děje při instalaci sı́t’ové nástavby (Novell NetWare) nebo při použitı́
zařı́zenı́ v kiosk módu (kiosk je omezený režim činnosti systému, ve kterém jsou silně omezeny
možnosti zásahu uživatele do systému, známe napřı́klad kiosky na nádražı́ch, v administrativnı́ch
budovách a také v mnoha školách). Od verze Vista lze GINA knihovnu měnit jen při instalaci
systému. Všimněte si, že GINA knihovna je uvedena na výpisu přı́kazu handle na straně 74.
Kontrola systémových souborů včetně systémových dynamicky linkovaných knihoven se provádı́
přı́kazem SFC. Zkontroluje, zda nedošlo k pozměněnı́ či poškozenı́ systémových souborů (s přı́ponou
SYS, DLL, EXE, OCX, FON, TTF), použı́vá kontrolu digitálnı́ho podpisu.
sfc /scannow
$
okamžitě zkontroluje všechny systémové soubory
pravidelně při každém spuštěnı́ systému zkontroluje systémové soubory, navı́c nebude uživatele informovat o přı́padném nahrazovánı́ (tichý režim, quiet)
sfc /scanboot /quiet
provede okamžitou jednorázovou kontrolu; použijeme, pokud máme podezřenı́,
že některý systémový soubor nenı́ zcela vpořádku
sfc /scanonce
Registrace: aby mohla být dynamicky linkovaná knihovna obsahujı́cı́ COM komponenty (také
ActiveX prvky) použı́vána, musı́ být v systému registrována. K registraci docházı́ obvykle během
instalace aplikace, která knihovnu do systému přinášı́, a to přı́kazem regsvr32. Podobně při odinstalaci bývá odregistrována. Registrace:
regsvr32 %ProgramFiles%\aplikace\knihovna.dll
$
4.5
PROGRAMOVÉ ROZHRANÍ
134
Deregistrace (uvolněnı́ knihovny):
regsvr32 /U %ProgramFiles%\aplikace\knihovna.dll
Opětovná registrace knihovny někdy může vyřešit nefunkčnost služby nebo programu. Někdy
se stává, že služba Windows Update přestane fungovat a řešenı́m je opětovná registrace knihoven,
které služba využı́vá, popřı́padě naopak po aktualizaci systému či některé aplikace může být nutné
provést opětovnou registraci některých knihoven.
Rundll32: Program Rundll32.exe známe už z předchozı́ho semestru. Vı́me, že pomocı́ tohoto
programu lze z Přı́kazového řádku (nebo ze skriptu) volat procedury uložené v některé dynamicky linkované knihovně (ostatně, zamyslete se nad názvem programu). Nelze volat jakoukoliv
proceduru, volané procedury musı́ být k tomu účelu naprogramovány.5
$
Tento program můžeme použı́vat i vzdáleně. Napřı́klad:
rundll32 printui.dll,PrintUIEntry /?
zı́skáme nápovědu k proceduře s názvem PrintUIEntry,
která je uložena v knihovně printUI.dll (pozor, v názvu procedury je nutné zachovávat velká
a malá pı́smena, názvy procedur jsou case-sensitive); výstupem tohoto přı́kazu je okno (ano,
opravdu okno) s obsahem (zde zkráceným):
Použitı́: rundll32 printui.dll,PrintUIEntry [parametry] [@soubor_přı́kazů]
/a[soubor] Název binárnı́ho souboru
/b[název] Název základnı́ tiskárny
/c[název] Název UNC počı́tače, jde-li o˜přı́kaz pro vzdálený počı́tač
/dl Odstranit mı́stnı́ tiskárnu
/dn Odstranit připojenı́ mı́stnı́ tiskárny
/dd Odstranit ovladač tiskárny
...
M
(součástı́ výpisu jsou také přı́klady). Tı́mto přı́kazem (a vhodnými parametry, kterých je
opravdu hodně) můžeme dělat se vzdálenou tiskárnou téměř cokoliv, včetně nastavenı́ popisovače zabezpečenı́, instalace a odinstalace ovladače, atd.
rundll32 printui.dll,PrintUIEntry /p /n\\počı́tač\tiskárna
vypı́še se informace o za-
dané tiskárně,
přechod do úsporného režimu (tento přı́kaz můžeme napřı́klad uložit do zástupce na pracovnı́ plochu, pak stačı́ poklepat na ikonu zástupce
a okamžitě přejdeme do úsporného režimu),
rundll32 PowrProf.dll,SetSuspendState
způsobı́ odpojenı́ počı́tače od internetu (to je
ideálnı́ pro vytvořenı́ zástupce na ploše nebo naplánovánı́ spuštěnı́ úlohy na zadanou dobu),
rundll32 iedkcs32.dll,CloseRASConnections
způsobı́ okamžité provedenı́ procesů, které čekajı́
na událost OnIdle, tedy na dobu, kdy žádný jiný proces nemá přiřazen procesor (týká se to
předevšı́m procesů, které provádějı́ pravidelnou údržbu Windows).
rundll32 advapi32.dll,ProcessIdleTasks
Možnost volat procedury systémových knihoven nenı́ moc dobře zdokumentována. Předevšı́m je
problém najı́t seznamy procedur, které lze takto volat v jednotlivých knihovnách. Jeden ze způsobů,
jak tyto informace najı́t, je zadat do vyhledávacı́ho řádku Googlu rundll32 knihovna site:microsoft.com
(doplnı́me název knihovny), napřı́klad rundll32 shell32.dll site:microsoft.com .
4.5
PROGRAMOVÉ ROZHRANÍ
135
Úkoly
1. Pokud máte k dispozici Process Explorer (pokud nemáte, stáhněte ho z webu), spust’te ho, nastavte zobrazenı́ spodnı́ho podokna se seznamem knihoven procesu a prohlédněte si knihovny
(i jejich vlastnosti) pro spuštěné aplikace. K vlastnostem knihovny se dostanete poklepánı́m
na název knihovny.
C
Všimněte si řádku Mapping (na prvnı́ záložce vlastnostı́ dynamické knihovny) – u běžné dynamické knihovny je zde Image, u datové knihovny (třeba TTF nebo NLS) tu najdeme Data. Oba
typy knihoven najdete napřı́klad na řádku csrss.exe nebo pokud máte spuštěný Poznámkový blok, u notepad.exe.
2. Zjistěte (přı́kazem pro okamžitou kontrolu), zda všechny systémové soubory včetně dynamicky linkovaných knihoven jsou vpořádku.
3. Zjistěte, které knihovny GINA jsou na vašem počı́tači dostupné (jsou vždy ve složce System32
a jejich název bývá xxgina.dll, kde xx jsou odlišujı́cı́ pı́smena). Může být dostupná i knihovna
GINA pro rychlé přepı́nánı́ uživatelů.
4. Pokuste se najı́t alespoň několik procedur knihovny user32.dll, které lze volat přes rundll32.
4.5.2
Lokálnı́ verze knihoven
DLL Hell (Peklo DLL) je stav, kdy některá aplikace při své instalaci pozměnı́ (nahradı́) některou DLL
knihovnu, ale tato změna začne vadit jiným aplikacı́m, které ke svému běhu vyžadujı́ dřı́vějšı́ verzi
pozměněné knihovny. Tyto přı́pady se stávaly dokonce i při aktualizaci systémových knihoven přes
službu Windows Update.
Tento problém je v současné době řešen (u systémových knihoven) dvěma opatřenı́mi:
1. verze knihoven jsou pravidelně kontrolovány a při zjištěné modifikaci nahrazovány originálnı́mi verzemi (program SFC a složka DLLCache), toto opatřenı́ je určeno pro systémové
knihovny,
2. zavedenı́ tzv. lokálnı́ch verzı́ (soukromých kopiı́) knihoven, toto opatřenı́ je určeno pro jiné než
systémové knihovny.
Lokálnı́ verze knihoven si může soukromě vytvářet každá aplikace ve svém instalačnı́m adresáři, ale je možné vytvářet lokálnı́ verze určené ke sdı́lenı́. Lokálnı́ verze ke sdı́lenı́ jsou ve složce
...\Windows\WinSxs. V této složce najdeme
• podsložky obsahujı́cı́ soubory s knihovnami, názvy podsložek obsahujı́ identifikaci názvu
originálnı́ knihovny, hardwarovou architekturu, verzi a přı́padně dalšı́ informace (v jedné
podsložce může být i vı́c než jedna knihovna),
• podsložka Manifest obsahuje pro každou podsložku z předchozı́ho bodu dva soubory (xxx
představuje název podsložky z předchozı́ho bodu):
– xxx.manifest – XML soubor (dá se otevřı́t napřı́klad v Poznámkovém bloku) s podrobnou informacı́ o knihovnách, které jsou zde uloženy,
5
Programovánı́ procedur v knihovnách tak, aby mohly být volány přes Rundll32, je stručně popsáno
v http://support.microsoft.com/kb/164787.
4.5
PROGRAMOVÉ ROZHRANÍ
136
– xxx.cab – katalogový soubor; katalogové soubory s přı́ponou CAT obsahujı́ bezpečnostnı́
informace, předevšı́m digitálnı́ podpis (soubor otevřeme poklepánı́m, k digitálnı́mu podpisu se dostaneme stisknutı́m tlačı́tka Zobrazit podpis),
• Policies – pro některé položky z prvnı́ho bodu tohoto seznamu je zde podsložka (ne nutně
stejně pojmenovaná) obsahujı́cı́ jednu nebo vı́ce dvojic souborů – ve dvojici jeden soubor
katalogu CAT a soubor xxx.policy, kde xxx je označenı́ verze knihovny (jedná se o XML
soubor s nastavenı́m zásad použı́vánı́ knihovny).
Ve výše uvedených souborech se setkáme s pojmem assembly. Assembly je sestava zahrnujı́cı́ sdı́lené
prostředky (jednu nebo vı́ce knihoven), manifest a přı́padně katalogový soubor.
Úkoly
Prohlédněte si složku s lokálnı́mi verzemi knihoven určenými ke sdı́lenı́. Vyberte si kteroukoliv
assembly a zobrazte jejı́ katalogový soubor a manifest.
4.5.3
C
Win API
Programové rozhranı́ Windows je realizováno přes Win API (Applications Programming Interface),
což je souhrn prostředků a procedur (funkcı́), které mohou programy použı́vat. Win API je uloženo
v dynamicky linkovaných knihovnách – DLL, některé EXE, TIFF, . . . , napřı́klad funkce pro vykreslenı́
určitého dialogového okna se zadaným textem a tlačı́tky.
API je vlastně přeložený, binárnı́ kód, tentýž jako u spustitelných (EXE) souborů, dynamicky
linkované knihovny majı́ strukturu hodně podobné struktuře EXE souborů. Existuje vı́c verzı́ API:
• Win16 API je pro 16bitové aplikace (většina kódu je uložena v knihovnách kernel.exe,
krnl286.exe, krnl386.exe, user.exe, shell.dll a gdi.exe),
• Win32 API je pro 32bitové aplikace (většina kódu je v knihovnách kernel32.dll, advapi32.dll,
user32.dll, gdi32.dll, comctl32.dll, comdlg32.dll, shell32.dll a dalšı́ch), přı́mo jsou
použı́vány modulem csrss.exe (část podsystému Win32 pro uživatelský režim) a win32k.sys
(pro režim jádra).
• Win64 API plnı́ podobnou úlohu jako Win32, ale na 64bitových systémech, je uloženo ve
stejných knihovnách.
API pro komunikaci s jádrem je ntdll.dll.
Nenativnı́ aplikace využı́vajı́ API ze svého podsystému či virtuálnı́ho stroje. K překladu API
docházı́ také při běhu 32bitové aplikace na 64bitovém systému, použı́vá se podsystém WoW64 (což
znamená Windows 32bit on Windows 64bit). Ve staršı́ch 32bitových Windows se použı́valo API pro
grafické operace Win32 GDI, od Windows 2000 je to Win32 GDI+. Je objektově orientované, bližšı́
způsobu programovánı́ v C++.
Implementacı́ Win API je také napřı́klad podsystém Wine použı́vaný v unixových systémech pro
běh Win aplikacı́, dalšı́ zajı́mavá implementace je napřı́klad ReactOS.
P
4.5
PROGRAMOVÉ ROZHRANÍ
137
Jinak jde o pojem poměrně hodně použı́vaný, API jednoduše znamená programové rozhranı́
(k čemukoliv). Své API majı́ také grafické a zvukové karty. Můžeme se napřı́klad setkat s pojmem
DirectX API nebo OpenGL API.
Podrobné informace o Win API můžeme zı́skat napřı́klad na webu MSDN Library http://msdn.
microsoft.com/en-us/library/aa383749%28VS.85%29.aspx. Také existuje hodně tutoriálů pro programovánı́ ve Win API, napřı́klad na internetu najdeme seznam tutoriálů na
http://pepinator.tym.cz/tutorials/winapi/tutorials winapi.php.
Úkoly
1. Na stránce http://www.builder.cz/art/cpp/winapi1.html najděte API funkci, kterou lze zobrazit
jednoduché dialogové okno s nápisem.
C
2. Najděte domovskou stránku projektu ReactOS a zjistěte, o jaký systém se vlastně jedná.
3. Zjistěte, ve které složce se nacházejı́ soubory, které byly v této sekci zmı́něny.
4.5.4
Běh aplikacı́
Už v předchozı́m semestru jsme se seznámili s členěnı́m operačnı́ch systémů na 8bitové, 16bitové,
32bitové, 64bitové, atd. Proto vı́me, že přı́slušné čı́slo závisı́ předevšı́m na velikosti pamět’ového
mı́sta, které je potřeba pro uloženı́ jedné adresy (to znamená, že napřı́klad 32bitový systém potřebuje
na uloženı́ adresy mı́sta v paměti, třeba umı́stěnı́ proměnné, 32 bitů, což jsou 4 B). Od toho se odvı́jı́
napřı́klad
• velikost datového typu pro ukazatel (pointer), protože do pointeru se ukládá adresa,
• často také velikost datového typu integer (celé čı́slo, int), protože se také často použı́vá při
manipulacı́ch s adresami,
• typ knihoven – napřı́klad v 32bitovém systému se použı́vajı́ 32bitové knihovny, kde celá čı́sla
a pointery zabı́rajı́ 32 bitů.
MS-DOS. V MS-DOSu existoval pouze jeden typ „klasických“ programů – EXE nebo COM soubory
s 8bitovou strukturou, které se coby procesy po svém spuštěnı́ stávaly defacto „majitelem“ všech
zdrojů a podle toho se také chovaly. Měly absolutnı́ přı́stup ke všem zdrojům (pamět’, procesor,
periférie apod.) a programátora naprosto nezajı́malo, že by některý zdroj mohl přı́padně využı́vat
jiný proces. Tento systém nebyl multitaskový (to znamená, že nemohlo běžet vı́ce programů zároveň,
které by spolu mohly napřı́klad komunikovat).
Windows 3.x. Aby bylo možné ve Windows 3.x implementovat multitasking, pro aplikace Win16
(tj. se 16bitovou strukturou) platı́ přı́sná „pravidla chovánı́“. Tyto aplikace již musejı́ počı́tat s tı́m,
že zdroje mohou být využı́vány jinými procesy, a proto je definován kontext procesu (viz přednášky),
který je při přepı́nánı́ aktivnı́ho procesu odkládán a při jeho znovuzaktivněnı́ opět načten. Aplikace
také majı́ omezený přı́stup k systémové paměti.
Aby bylo možné provozovat také DOSovské 8bitové aplikace, musejı́ být tyto „nevychované“
procesy uzavřeny do virtuálnı́ch strojů. Každý virtuálnı́ stroj má přidělenu určitou část zdrojů a vzhledem k aplikaci v něm běžı́cı́ se tvářı́, že dalšı́ zdroje ani neexistujı́.
O
4.5
PROGRAMOVÉ ROZHRANÍ
138
Jeden virtuálnı́ stroj je systémový, v něm běžı́ všechny Win16 aplikace včetně systémových
procesů. Proto pokud právě běžı́ n DOSovských procesů, je spuštěno celkem n + 1 virtuálnı́ch strojů
bez ohledu na počet běžı́cı́ch Win16 aplikacı́.
Běh Win16 aplikacı́ má ještě jedno specifikum, které komplikuje jejich spouštěnı́ v novějšı́ch
Windows – sdı́lenı́ knihoven. Pokud Win16 aplikace potřebuje ke svému běhu některou dynamicky
linkovanou knihovnu, pak zavolá přı́slušnou API funkci a tato knihovna se tzv. přilinkuje k aplikaci
(zpřı́stupnı́ se v nı́ obsažené funkce a objekty). Fyzicky tento proces probı́há tak, že pokud je tato
knihovna načı́tána poprvé (dosud ji žádná aplikace nepotřebovala), tak je pro ni vyhrazeno mı́sto ve
sdı́lené paměti a knihovna je reálně do operačnı́ paměti uložena. Při druhém načı́tánı́ této knihovny
(jinou aplikacı́) již nenı́ znovu načı́tána, ale pouze speciálnı́ čı́tač zvýšen o 1. Při ukončenı́ aplikace
využı́vajı́cı́ tuto knihovnu je tento čı́tač snı́žen o 1 (když klesne na 0, znamená to, že knihovna již
nenı́ použı́vána žádnou aplikacı́ a může být odstraněna z paměti). Dynamické knihovny jsou sdı́lené
zdroje.
Windows 9x/ME. Windows s DOS jádrem jsou od verze 95 32bitové,6 NT systémy jsou 32bitové již
od svého počátku. Tedy existujı́ tři druhy prakticky nativnı́ch aplikacı́, které je možné zde provozovat
– 8bitové DOS aplikace, Win16 aplikace a Win32 aplikace.
Aplikace Win16 a Win32 běžı́ v systémovém virtuálnı́m počı́tači, 32bitové majı́ každá svůj adresový prostor, 16bitové sdı́lejı́ jeden společný. Aplikace MS-DOSu majı́ každá svůj virtuálnı́ počı́tač
(a tedy každá svůj adresový prostor).
Win16 aplikace mezi sebou spolupracujı́ formou
kooperativnı́ho multitaskingu se sdı́lenı́m knihoven, s Win32 aplikacemi a ovladači spolupracujı́ formou preemptivnı́ho multitaskingu. Win32 aplikace
spolupracujı́ formou preemptivnı́ho multitaskingu.
Provoz DOS aplikace v prostředı́ Windows: systém
vytvořı́ virtuálnı́ počı́tač, ve kterém je DOS aplikace
uzavřena. Někdy je vhodné provést dalšı́ konfiguraci možnostı́ spuštěnı́ (výchozı́ typ a velikost
pı́sma, barvy obrazovky, přidělenı́ paměti, přı́stup
k zařı́zenı́m, využı́vánı́ multitaskingu, atd.). To se
provede vytvořenı́m souboru PIF (Program Information File) pro daný program (přı́pony PIF se standardně nezobrazujı́, toto nastavenı́ se dá změnit v registru).
Jedná se o binárnı́ soubor, který nelze upravovat přı́mo. Ve Windows do verze 3.x se PIF soubory
vytvářely pomocı́ aplikace Editor PIF, nynı́ máme Obrázek 4.17: Vlastnosti DOS aplikace ve Winjednoduššı́ možnost – vyvoláme kontextové menu dows 98
programu, v něm zvolı́me Vlastnosti a provádı́me ty6
Ve skutečnosti Windows 95 obsahovaly část knihoven v 16bitové verzi – šlo o ty knihovny, které programátoři nestačili
přepsat do 32bitové podoby.
P
4.5
PROGRAMOVÉ ROZHRANÍ
139
též změny, jaké se dřı́ve prováděly pomocı́ Editoru PIF. PIF soubor je v novějšı́ch verzı́ch Windows
chápán již jako speciálnı́ typ zástupce, a podle toho je s nı́m také zacházeno (poklepánı́m spustı́me
původnı́ program se změnami definovanými v tomto zástupci).
Přepnutı́ mezi celoobrazovkovým režimem a oknem: Alt+Enter . Způsob běhu DOS aplikacı́ je
možné kromě jiného konfigurovat v souboru apps.inf v adresáři inf.
$
Obrázek 4.18: Porovnánı́ okna vlastnostı́ Win32 a DOS aplikace
Pokud dojde k chybě GPF (General Protection Fault – všeobecná chyba ochrany), tedy k narušenı́
pamět’ového prostoru, obvykle je to způsobeno tı́m, že některá aplikace přepı́še své vlastnı́ pamět’ové
segmenty, nikoliv segmenty jiné aplikace. Windows 98 sledujı́ prostředky přidělené aplikacı́m a při
GPF dokážou tyto zablokované prostředky uvolnit, když to aplikace nedokáže (třeba proto, že
zamrzla, zhroutila se, . . . ).
P
32bitová Windows řady NT. Narozdı́l od systémů s DOS jádrem také Win16 aplikace běžı́ každá ve
svém virtuálnı́m stroji stejně jako DOS aplikace. Proto také adresové prostory jednotlivých Win16
aplikacı́ jsou oddělené (každý virtuálnı́ stroj má vyhrazen vlastnı́ pamět’ový prostor) a to je jeden
z důvodů, proč Win16 aplikace často v NT systémech majı́ problémy se svým během (nemohou
komunikovat s ostatnı́mi aplikacemi tak, jak bylo běžné ve staršı́ch systémech).
Protože každému virtuálnı́mu počı́tači je vyhrazeno poměrně hodně zdrojů, předevšı́m paměti,
která již nemůže být využı́vána jiným procesem (ani systémovým) a musı́ v nı́ být uloženo to,
co dotyčná aplikace očekává (včetně jakési kopie částı́ systému), představuje provoz vı́ce Win16
aplikacı́ značnou zátěž zdrojů, zejména paměti. To ostatně platı́ i o provozovánı́ vı́ce DOS aplikacı́
v kterýchkoliv Windows.
Win32 (a přı́padně Win64) aplikace běžı́ ve společném systémovém virtuálnı́m počı́tači. Pokud
je spuštěno n16 Win16 aplikacı́ a n8 DOS aplikacı́, pak běžı́ celkem n16 + n8 + 1 virtuálnı́ch strojů.
Protože součástı́ jádra nenı́ MS-DOS, máme omezenějšı́ možnosti běhu DOS aplikacı́. Vlastnosti
běhu DOS aplikace nastavujeme v kontextovém menu Vlastnosti na kartách pojmenovaných podle
typu vlastnosti, kterou chceme nastavovat. Porovnánı́ okna vlastnostı́ Win32 a DOS aplikace v pro-
P
4.6
KOMPATIBILITA VERZÍ WINDOWS
140
středı́ Windows 2000 vidı́me na obrázku 4.18 – DOS aplikace zde má výrazně vı́ce záložek. U DOS
aplikace je zobrazeno také okno, které zı́skáme, když klepneme na tlačı́tko Upřesnit. Ve Windows 98
jsou trochu jiné možnosti nastavenı́ běhu staršı́ch programů – na obrázku 4.17 je okno s vlastnostmi
zástupce DOS aplikace s oknem, které zı́skáme klepnutı́m na tlačı́tko Upřesnit.
Aplikace běžı́ v tzv. podsystémech. Je zde podsystém Win32 pro Win a DOS aplikace (je to proces programu CSRSS.EXE), může být provozován také podsystém pro aplikace OS/2 a podsystém
POSIX7 . Tyto podsystémy nebývajı́ přı́tomny všechny, podrobnosti na přednáškách. Virtuálnı́ stroje
pro DOS a Win16 aplikace je spouštěn procesem ntvdm.exe běžı́cı́m v podsystému Win32.
P
64bitová Windows řady NT. Taktéž se použı́vajı́ podsystémy a soubor ntvdm.exe pro Win16 a DOS
aplikace. Win64 aplikace běžı́ v podsystému, který se nynı́ jmenuje přı́mo Windows (již ne Win32),
a dále existuje podsystém WoW64 (Windows 32bit on Windows 64bit) pro běh 32bitových aplikacı́.
Úkoly
V Process Exploreru nebo jiné podobné aplikaci najděte proces csrss.exe.
C
• Zjistěte, kdo je ve stromové struktuře jeho rodičem.
• Zjistěte jeho PID. Seřad’te procesy podle PID (klepněte na záhlavı́) a pokuste se odhadnout
podle hodnot PID pořadı́ spouštěnı́ systémových procesů.
• Zobrazte spodnı́ podokno (v menu View ï Show Lower Pane), a to se seznamem použı́vaných
handlů (View ï Lower Pane View ï Handles). Projděte si položky v seznamu a všimněte si
zejména klı́čů registru a vláken procesů, se kterými proces komunikuje (threads). Podobně
projděte také seznam použı́vaných dynamických knihoven.
• Zobrazte vlastnosti procesu csrss.exe (stačı́ poklepat na jeho název). Všimněte si jeho priority,
vláken, proměnných, které využı́vá (záložka Environment) a zabezpečenı́ (je zde také vlastnı́k
a jeho SID).
4.6
Kompatibilita verzı́ Windows
V souvislosti s provozovánı́m aplikacı́ pro různé verze Windows v jednom systému se setkáváme
se zkratkou WOW (Windows on Windows) – jde o emulačnı́ platformu ve Windows pro staršı́
Windows aplikace. Napřı́klad WOW64 je emulačnı́ platforma na 64bitových Windows pro 32bitové
aplikace. Tato zkratka se vyskytuje také v registru.
32bitové aplikace pro Windows obvykle je možné spouštět na všech 32bitových Windows včetně
řady NT. Výjimkou jsou programy, které potřebujı́ přı́mý přı́stup k prostředkům nebo „trvajı́“ na
umı́stěnı́ systémových souborů charakteristickém pouze pro určité verze systému.
7
POSIX (Portable Open Systems Interface based on Unix – přenositelné otevřené, tj. volně šiřitelné, rozhranı́ systémů
založených na Unixu): nejedná se o operačnı́ systém nebo určitou aplikaci, ale o souhrn norem, které definujı́, jak spolu
komunikujı́ operačnı́ systém a aplikace. Aplikace napsané podle tohoto standardu pouze majı́ určitou strukturu a určitým
způsobem komunikujı́ s operačnı́m systémem, což znamená i určité požadavky na tento operačnı́ systém (obvykle je
nutné v klasickém operačnı́m systému pouze vytvořit komunikačnı́ „mezivrstvu“ mezi systémem a aplikacı́, v NT jde
o program a několik dynamických knihoven).
P
4.6
KOMPATIBILITA VERZÍ WINDOWS
141
DOSovské aplikace majı́ se spouštěnı́m v NT systémech ještě většı́ problémy. Zatı́mco při spuštěnı́
na Windows s DOS jádrem máme možnost využı́t režim MS-DOS (hned při spuštěnı́) a přı́padně na
internetu stáhnout potřebné ovladače, v NT systémech tato možnost nenı́. Řešenı́m, které nezabı́rá
vždy, je vhodné nastavenı́ parametrů spouštěnı́ aplikace ve Vlastnostech – viz obrázky 4.18 a 4.17 na
straně 138.
Ve Windows XP můžeme nastavit režim kompatibility. Nastavuje se ve vlastnostech takovéhoto
spustitelného souboru – v kontextovém menu Vlastnosti ï karta Kompatibilita, viz obrázek 4.19 – tam
máme možnost si v rozbalovacı́m seznamu vybrat „simulovaný“ systém, aplikace pak reálně poběžı́
v jakémsi virtuálnı́m počı́tači. Máme na výběr mezi Windows 95, Windows 98/ME, Windows NT 4
a Windows 2000 (XP zde ze zřejmého důvodu nenajdeme). Z výběru se dajı́ vypozorovat odlišnosti
zacházenı́ s aplikacemi v těchto systémech – mezi Windows 98 a ME prakticky v tomto směru nejsou
odlišnosti, zatı́mco Windows 95 musejı́ být odděleny kromě jiného proto, že část jejich knihoven je
16bitová a plánovač procesů má jiný algoritmus.
Pokud program potřebuje přı́mo přistupovat k určitému zařı́zenı́ (týká se to hlavně zvukových karet
ve vztahu k DOSovským hrám) a nemůžeme použı́t
boot disketu pro naběhnutı́ „pouze DOSu“ (třeba tehdy,
když máme všechny disky naformátovány na NTFS), jediným řešenı́m je použı́t některý emulátor. Tyto programy můžeme stáhnout na internetu, např. DOSBox na
http://www.sourceforge.net nebo použijeme některý program pro vytvořenı́ virtuálnı́ho počı́tače (VMWare, VirtualBox, VirtualPC, . . . ).
$
$
Problémy s kompatibilitou mohou nastat při instalaci
systému přes staršı́ operačnı́ systém typu Windows, napřı́klad nelze přeinstalovávat Windows 3.x ani 95 na Windows XP (je nutné provést čistou instalaci). Hlavnı́ problémy mohou nastat s kompatibilitou ovladačů, protože
16bitové ovladače použitelné ve Windows 3.x, 9x a ME
nelze použı́vat ve Windows 2000 a XP.
Ve Windows od verze Vista přibylo problémů souvi- Obrázek 4.19: Režim kompatibility ve
sejı́cı́ch s provozem staršı́ch aplikacı́ (už proto, že staršı́ Windows XP
aplikacı́ je vlastně už i aplikace programovaná pro Windows XP). Režim kompatibility se nastavuje prakticky stejně jako ve Windows XP (také v zástupci,
jeho vlastnostech, záložka Kompatibilita). Někdy však nepomůže ani to, protože Vista má mnohem
striktnějšı́ pravidla přı́stupu k systémovým souborům. V takovém přı́padě může pomoci spuštěnı́
programu pod správcovským účtem (položka Spustit jako v kontextovém menu a nebo přı́kaz runas,
tuto vlastnost můžeme nastavit i přı́mo na kartě Kompatibilita), ale v tom přı́padě musı́me počı́tat
s vyššı́m rizikem. Jiným řešenı́m problémů s přı́stupy (předevšı́m do Program Files) je instalace
aplikace jinam (napřı́klad si pro tyto účely vytvořı́me nový adresář C:\programy).
Windows 7 přišla s novým řešenı́m režimu kompatibility, XP Mode. Spočı́vá v kombinaci dvou
modulů – virtualizačnı́ho nástroje MS Virtual PC a VHD obrazu (tj. obrazu systému do virtuálnı́ho
počı́tače) Windows XP (má 0,5 GB). Takto zı́skáme virtualizovaný systém Windows XP uvnitř Win-
$
4.6
KOMPATIBILITA VERZÍ WINDOWS
142
dows 7 a můžeme bez problémů provozovat „běžné“ XP aplikace. Ovšem setkáme se se značnými
omezenı́mi:
• potřebujeme procesor s podporou virtualizace, zapnutou v BIOSu,
• hardware je také virtualizován, včetně grafické karty, takže žádná akcelerace grafiky, obecně
jsou problémy s multimédii.
XP Mode nenı́ v systému přı́tomen, musı́me ho doinstalovat (to znamená stáhnout z webu Microsoftu
a nainstalovat nejdřı́v MS Virtual PC a potom modul XP Mode obsahujı́cı́ obraz Windows XP).
Úkoly
Pokud máte možnost, vyzkoušejte výše popsané postupy s kompatibilitou (napřı́klad ve Windows
XP nebo Vista najděte některý staršı́ program, vytvořte jeho zástupce a projděte si kartu Kompatibilita
v jeho vlastnostech).
C
Kapitola
5
Zařı́zenı́ a paměti
V této kapitole se budeme věnovat postupům při konfiguraci systému a aplikacı́ specifickým pro různé verze
Windows. Budeme se zabývat také provozem nenativnı́ch aplikacı́ a správou zařı́zenı́.
5.1
Správa zařı́zenı́
5.1.1
Ovladače zařı́zenı́
Ovladač zařı́zenı́ je rozhranı́ mezi zařı́zenı́m a systémem (přı́p. procesy), které má předevšı́m zjednodušit a ujednotit komunikaci procesů se zařı́zenı́m (napřı́klad u tiskárny proces při požadavku
na tisk předá hodnoty předem stanovených parametrů, jako je adresa dat, která se majı́ tisknout,
formát tisku apod., nestará se již o konkrétnı́ implementaci pro určitou tiskárnu).
Protože ve Windows procesy pracujı́ v prostředı́ s multitaskingem, je nutné ošetřit možnost
přı́stupu vı́ce procesů k jednomu zařı́zenı́. Proto se použı́vajı́ ovladače virtuálnı́ch zařı́zenı́, které
zároveň s rozhranı́m pro přı́stup k zařı́zenı́ poskytujı́ také rozhranı́ pro komunikaci s vı́ce procesy
(obvykle obsahuje frontu, do které se řadı́ požadavky procesů).
Od Windows 98 Microsoft testuje ovladače a jejich použitelnost pod Windows. Pokud v laboratořı́ch Microsoftu nenı́ nalezen žádný problém s kompatibilitou, přidělı́ ovladači certifikát WHQL
(Windows Hardware Quality Lab) a ovladač je tzv. digitálně podepsaný. Testy se zaměřujı́ pouze na
kompatibilitu s Windows, nikoliv na kvalitu ovladače směrem k samotnému zařı́zenı́, tedy to, že
je ovladač podepsaný, nic neřı́ká o samotné kvalitě ovladače. V 64bitových Windows lze použı́vat
pouze podepsané ovladače.
Ne každý výrobce však „ztrácı́ čas“ čekánı́m, než Microsoft provede testy, a proto existuje hodně
ovladačů, které sice jsou kompatibilnı́ s Windows, ale nejsou podepsané.
Někteřı́ výrobci podepisujı́ své ovladače vlastnı́m certifikátem (důvěryhodným). Takto podepsané ovladače lze instalovat i v 64bitových verzı́ch Windows. Ve Windows od verze Vista je jejich
instalace obvykle bezproblémová, ve Windows XP se můžeme setkat s varovným hlášenı́m, že tento
ovladač nenı́ certifikován pro Windows (v XP jsou uznávány pouze podpisy přı́mo od Microsoftu).
143
P
5.1
SPRÁVA ZAŘÍZENÍ
144
Pokud chceme nalézt nepodepsané ovladače (někdy mohou způsobovat problémy, i když to nenı́
pravidlem), můžeme použı́t program Ověřenı́ podpisu souboru (SigVerif, spustı́me ho přes Start ï
Spustit, napı́šeme sigverif ). Na obrázku 5.1 je okno se dvěma záložkami, ve kterém upřesňujeme
činnost programu, a okno s výsledným seznamem nepodepsaných souborů.
$
Obrázek 5.1: Upřesněnı́ možnostı́ nástroje sigverif
Jako složku s ovladači můžeme zvolit System32\Drivers, po testovánı́ najdeme výsledky v souboru sigverif.txt v systémovém adresáři, a nebo si je přečteme v zobrazeném okně.
V tomto souboru najdeme položky označené jako nepodepsané, podle údajů položky vyhledáme
soubor ovladače a v jeho vlastnostech (v kontextovém menu) zjistı́me výrobce a tı́m i hardware, ke
kterému ovladač patřı́. Pak podle těchto údajů najdeme na internetu stránky výrobce a zjistı́me, jestli
už na nich nemá publikovány nové ovladače pro naše zařı́zenı́, které by už byly podepsané.
Úkoly
Na svém počı́tači zjistěte, zda jsou instalovány nějaké nepodepsané ovladače.
C
5.1
SPRÁVA ZAŘÍZENÍ
5.1.2
145
Instalace ovladačů
Windows jdou dodávány s ovladači pro mnoho typů zařı́zenı́ od různých výrobců, většinou tyto
ovladače stačı́ alespoň pro základnı́ použı́vánı́ zařı́zenı́ a použı́vajı́ se při automatické detekci službou Plug&Play (obvykle dostaneme CD s ovladači zároveň se zařı́zenı́m). Tyto ovladače jsou na
instalačnı́m CD v souboru DRIVER.CAB, po instalaci se zkopı́rujı́ do některého systémového adresáře (většinou Driver Cache nebo jeho podadresáře, nebo i386), skutečné umı́stěnı́ zjistı́me v registru v klı́či HKLM/Software/Microsoft/Windows/CurrentVersion/Setup. Pokud tento soubor
zůstane na instalačnı́m CD, potřebujeme ho při instalaci každého nového zařı́zenı́.
Pokud služba Plug&Play najde nové zařı́zenı́, předevšı́m se pokoušı́ najı́t přı́slušný soubor INF
v adresáři Inf. V něm jsou údaje potřebné pro instalaci a předevšı́m cesta k souboru ovladače (může
to být driver.cab). Pokud INF soubor nenı́ nalezen, je uživatel požádán o disketu nebo CD se
soubory pro instalaci ovladače.
Může se stát, že zařı́zenı́ nepracuje správně. Na vině může být poškozený ovladač (to může
nastat i hned po instalaci, nebo po změnách v konfiguraci systému) nebo ovladač nekompatibilnı́
s momentálnı́ konfiguracı́ systému (s některou částı́ systému si „nerozumı́“, to může nastat při
instalaci takových opravných balı́čků, se kterými programátor ovladače nepočı́tal). Když je na vině
ovladač, často je možné najı́t na internetu jeho novějšı́ verzi (na stránkách výrobce zařı́zenı́).
Po instalaci monitoru a některých dalšı́ch zařı́zenı́, pro která je důležité správné nastavenı́ barev (např. tiskárny), můžeme také instalovat vhodný barevný profil. Barevné profily jsou v souborech s přı́ponou ICM (Image Color Management) a najdeme je bud’ v souboru DRIVER.CAB nebo
(a to je lepšı́) na CD dodávaném se zařı́zenı́m. Soubory s profily jsou obvykle uloženy ve složce
...\System32\spool\drivers\color.
Pro monitor se instalace barevného profilu provádı́ přidánı́m tohoto souboru do seznamu v nástroji Zobrazenı́ (Vlastnosti v kontextovém menu Plochy), karta Nastavenı́ ï Upřesnit ï Správa barev.
Úkoly
1. Prohlédněte si některé soubory v adresáři Inf (ostatně už je trochu znáte z předchozı́ho
semestru).
O
$
P
$
C
2. Zjistěte, jaké barevné profily pro monitor jsou navoleny a který z nich je vybrán.
5.1.3
Modely ovladačů
Každý ovladač je psán podle některého modelu, který obvykle také určuje, v jaké verzi Windows je
možné tento ovladač použı́vat.
Ve Windows 95 se použı́valy dva základnı́ typy ovladačů:
PMD (Protected Mode Driver) – 32-bitový ovladač pracujı́cı́ v chráněném režimu, konfiguračnı́
údaje o něm jsou uloženy v registru, tyto ovladače nejsou přı́stupné DOS aplikacı́m ani Win16
aplikacı́m, mı́vajı́ přı́ponu SYS nebo VXD (Virtual Device Driver, ovladač virtuálnı́ho zařı́zenı́).
P
5.2
PAMĚŤOVÁ ZAŘÍZENÍ
146
RMD (Real Mode Driver) – ovladač pracujı́cı́ v reálném režimu, konfiguračnı́ údaje (přı́kaz pro
zavedenı́ ovladače s konfiguračnı́mi parametry) jsou v souboru CONFIG.SYS, tyto ovladače
nejsou použitelné pro aplikace a systémy, které nepoužı́vajı́ soubor CONFIG.SYS.
Pro některá zařı́zenı́ existuje PMD i RMD varianta ovladače. Potom v přı́padě, že má být zařı́zenı́
přı́stupné DOS aplikaci, je potřeba nahradit PMD ovladač obdobným RMD ovladačem po dobu
běhu této aplikace (např. ovladač myši). Ovladače, které lze takto bezpečně nahradit, jsou v souboru
IOS.INI v systémovém adresáři (Win9x).
Win32 aplikace ve Windows 95 mohou použı́vat i RMD ovladače (většinu), ale snižuje to výkon
systému. Seznam RMD ovladačů, které momentálně pracujı́, je v nástroji Systém na kartě Výkon.
Windows 98 a 2000 zavádějı́ nový model ovladačů – WDM (Win32 Driver Model), který má
sjednotit modely ovladačů pro Windows 98 a Windows 2000. Hlavnı́m důvodem této změny je
možnost použı́vat ve Windows 98 ovladače psané pro Windows NT. Pro zpětnou kompatibilitu jsou
v systému zahrnuty také PMD a RMD ovladače, tedy použı́vajı́ se tři modely.
Windows XP použı́vajı́ předevšı́m ovladače WDM, ve virtuálnı́ch strojı́ch některých podsystémů
lze použı́vat i jiné typy ovladačů.
Vista použı́vá nový model ovladačů WDDM (Windows Display Driver Model) odlišný od modelů
použı́vaných v předchozı́ch verzı́ch Windows. Ve Vistě je WDDM verze 1.0, Windows 7 majı́ novou
verzi 1.1.
P
P
WDDM je navržen tak, aby v přı́padě selhánı́ ovladače bylo možné dále pokračovat (funkce
rychlého zotavenı́ z pádu ovladače). Hlavnı́m přı́nosem WDDM ovladačů je přenos značné části
multimediálnı́ch (grafických) operacı́ z procesoru na GPU (grafický procesor na grafické kartě), což
mnohdy znamená zrychlenı́ grafických operacı́. Bez ovladače grafické karty s podporou WDDM
nefunguje rozhranı́ AeroGlass.
5.2
5.2.1
Pamět’ová zařı́zenı́
Diskové kvóty
Diskové kvóty určujı́, kolik mı́sta na disku (obvykle sı́t’ovém) může který uživatel zabrat, znemožňujı́
zabrat vı́ce než je stanovené množstvı́ nebo dovolujı́ protokolovat překročenı́ stanoveného mı́sta.
Je sledováno množstvı́ mı́sta zabraného soubory, jejichž vlastnı́kem je daný uživatel (mı́sto zabrané
uživatelem, který patřı́ mezi správce systému, nenı́ omezováno, protože administrátoři je vlastnı́kem
všech systémových souborů, kterých nenı́ zrovna málo).
P
Rozlišujeme dva pojmy:
• Maximálnı́ disková kvóta – množstvı́ mı́sta, které bude mı́t uživatel k dispozici.
• Úroveň pro upozorněnı́ – hodnota o něco nižšı́ než předchozı́, sloužı́ k upozorněnı́, že se uživatel
blı́žı́ hornı́ povolené hranici.
Obě hranice (maximálnı́ hranici a hranici pro upozorněnı́) lze protokolovat, při protokolovánı́ můžeme nastavit přı́slušnou reakci (napřı́klad upozornit uživatele nebo upozornit správce). K protokolům se dostaneme napřı́klad v nástroji Prohlı́žeč událostı́, a to v Systémovém protokolu.
$
5.2
PAMĚŤOVÁ ZAŘÍZENÍ
147
Obecně je možné přidělovat diskové kvóty na discı́ch (složkách), které jsou sdı́lené a naformátované souborovým systémem NTFS. Možnost použı́vánı́ kvót je jednou z vlastnostı́ tohoto souborového systému; pokud máme disk naformátován souborovým systémem FAT32 nebo staršı́m,
nemůžeme na něm kvóty použı́vat.
Kvóty jsou také záležitostı́ lokálnı́ sı́tě. Můžeme přidělovat kvóty na kterémkoliv počı́tači v sı́ti,
ke kterému má daný uživatel jakýkoliv typ přı́stupu. To ovšem vyžaduje, aby byli uživatelé v záznamech kvót identifikováni jednoznačně v rámci celé lokálnı́ sı́tě, tedy se použı́vajı́ SID uživatelů
mı́sto jejich jmen.
Obrázek 5.2: Nastavenı́ kvót
Na lokálnı́m počı́tači se v grafickém režimu dostaneme ke kvótám takto: zobrazı́me vlastnosti
disku (např. v Průzkumnı́kovi v kontextovém menu jednotky oddı́lu na disku), a pokud je typu
NTFS, je zde záložka Přidělená kvóta (musı́me mı́t dostatečné oprávněnı́ k přı́stupu, aby se tato
záložka zobrazila). Povolı́me přidělovánı́ kvót (na obrázku 5.2 vlevo) a dále je přidělı́me jednotlivým
uživatelům (k podrobnějšı́mu nastavenı́ pro jednotlivé uživatele se dostaneme klepnutı́m na tlačı́tko
Přidělené kvóty, na obrázku 5.2 vpravo).
$
Pokud chceme pracovat s kvótami nastavenými na jiném počı́tači, než u kterého sedı́me, můžeme
jednoduše připojit disk z toho počı́tače jako sı́t’ový disk (přidělı́me pı́smeno jednotky) a stejným
způsobem jako u lokálnı́ho disku zobrazı́me jeho vlastnosti.
Pro práci s kvótami existuje také přı́kaz fsutil quota, se kterým se seznámı́me dále.
Úkoly
Zjistěte, zda jsou na discı́ch vašeho počı́tače přiděleny kvóty (pokud máte dostatečná přı́stupová
oprávněnı́).
C
5.2
PAMĚŤOVÁ ZAŘÍZENÍ
5.2.2
148
Kontrola stavu disků
Zde se budeme zabývat kontrolou stavu disků na softwarové (souborový systém) a hardwarové
úrovni.
$
(pouze Windows s DOS jádrem)
program pro kontrolu povrchu disku; pokud zjistı́ poškozenı́ některé oblasti, zakáže do nı́
přı́stup, aby zde žádný program neukládal data (data by pak byla nepoužitelná). Má svůj
protějšek v grafickém prostředı́ Windows.
SCANDISK
CHKDSK
(název je zkratkou z „Check Disk“) se chová odlišně v různých verzı́ch Windows:
• ve Windows s DOS jádrem vypı́še stručnou informaci o stavu systému,
• ve Windows s NT jádrem (je v adresáři system32) při použitı́ bez parametrů provede
rychlou (asi tak minutovou) kontrolu a vypı́še informaci o stavu systému, pomocı́ přepı́načů můžeme spustit podrobnou kontrolu s možnostı́ oprav (ta je však prováděna při
následujı́cı́m startu systému programem autochk.exe), data zachráněná z poškozených
sektorů najdeme v souborech s přı́ponou CHK.1
chkdsk
provede rychlou kontrolu a vypı́še informace o disku
chkdsk d:
provede rychlou kontrolu zadané jednotky a vypı́še o nı́ informace
chkdsk d: /F
důkladná softwarová kontrola, u zjištěných chyb se pokoušı́ provést opravu
(fix errors), oddı́l musı́ být odpojen (jen softwarově!)
chkdsk d: /R
důkladná hardwarová kontrola (zahrnuje v sobě i přepı́nač /F), hledá chybné
sektory a pokoušı́ se z nich obnovit data
Následujı́cı́ informace se vztahujı́ pouze k Windows s NT jádrem. Existujı́ dvě možnosti, jak zajistit,
aby oddı́l na disku (svazek nebo celý disk) byl důkladně zkontrolován po startu systému:
P
1. dirty bit – pokud kterýkoliv program s vyššı́mi oprávněnı́mi zjistı́ problémy s oddı́lem na
disku (při čtenı́, zápisu nebo jakékoliv jiné manipulaci s oddı́lem), je tento oddı́l označen jako
„špinavý“ (má nastaven dirty bit),
2. položka BootExecute v registru v klı́či HKLM/SYSTEM/CurrentControlSet/Control/Session
Manager, obvykle za běhu systému obsahuje řetězec ve tvaru „autocheck autochk *“; tato
položka určuje oddı́ly, které majı́ být zkontrolovány při startu systému, i kdyby neměly nastaven dirty bit. Uvedený řetězec vlastně znamená „všechno“ a takto je zajištěno, že při
nesprávném vypnutı́ počı́tače budou při následném startu zkontrolovány všechny jednotky,
tento řetězec je změněn při každém správném vypnutı́ počı́tače a opětovně nastaven při startu
(takže kontrola je vyvolána, jen když nesprávně vypneme počı́tač).
(pouze Windows s NT jádrem, v adresáři system32)
je program pro automatickou kontrolu odpojených disků před startem systému, nelze ho spustit,
pokud systém pracuje; je spouštěn (programem chkdsk) před každým startem systému a zjišt’uje, zda je některý disk označen jako „špinavý“ (má nastaven dirty bit) nebo byla vynucena
jeho kontrola v registru, u každého takového disku (oddı́lu) provede hloubkovou kontrolu.
AUTOCHK
1
Někdy bývá trochu problém s obnovou dat z těchto souborů, už proto, že jde vlastně o fragmenty původnı́ch souborů
z disku. Existuje několik možnostı́, jak se s tı́mto problémem vypořádat, zajı́mavá stránka o tomto tématu je napřı́klad
http://www.ericphelps.com/uncheck/.
$
5.2
PAMĚŤOVÁ ZAŘÍZENÍ
149
(pouze Windows s NT jádrem, v adresáři system32)
sloužı́ k řı́zenı́ naplánovánı́ spuštěnı́ kontroly disků těsně před startem systému. Název přı́kazu
je sice zkratkou z anglického „Check NTFS“, ale ve skutečnosti lze takto naplánovat také
kontrolu jiných souborových systémů než NTFS (pracuje také s FAT a FAT32).
CHKNTFS
Tento přı́kaz ve skutečnosti nedokáže měnit samotný dirty bit (ten nuluje pouze program
chkdsk), ale dokáže zajistit, aby kontrola nebyla vyžadována při následujı́cı́ch startech systému. Také dokáže naopak vynutit kontrolu u oddı́lu, který nemá nastavený dirty bit.
zobrazı́ informaci o tom, zda je či nenı́ zadaný oddı́l na disku označen jako
„špinavý“ (a také informaci o typu souborového systému na oddı́lu)
chkntfs /x e: f:
zadané disky nebudou kontrolovány při startu systému, i kdyby byly
označeny jako „špinavé“ (jsou vyloučeny z kontroly – excluded)
chkntfs /c d:
zadaný disk bude zkontrolován po startu počı́tače, i když nenı́ označen
jako „špinavý“.
chkntfs d:
Nastavenı́ dirty bitu lze zjistit ještě jiným způsobem – přı́kazem fsutil dirty query (bude probı́ráno později).
Ve Windows do verze XP lze kontrolu diskového oddı́lu spustit v grafickém režimu – v kontextovém menu jednotky (oddı́lu) zvolı́me Vlastnosti a na kartě Nástroje klepneme na tlačı́tko Zkontrolovat.
V tom přı́padě provádı́ kontrolu jen program explorer.exe s využitı́m knihoven ifsutil.dll
a fmifs.dll, jen pokud v okně povolı́me odpojenı́ svazku (a přı́padně restart), použije se chkdsk
a autochk.
Rozdělenı́ rolı́ programů ve Windows XP (na desktopu):
• chkntfs – umožňuje určit, co má být zkontrolováno
• autochk – po svém spuštěnı́ (obvykle při startu systému) prověřı́, jestli nenı́ některý oddı́l
(svazek) určen ke kontrole, pokud ano, provede hloubkovou kontrolu takového oddı́lu
• chkdsk – provede bud’ jen krátký základnı́ test a vypı́še stručnou informaci, a nebo provádı́
podrobné testovánı́ před vlastnı́m startem systému nebo na odpojeném oddı́lu (při testovánı́
před startem systému spustı́ program autochk)
$
O
Programy scandisk a chkdsk nejsou moc silné, majı́ problém s opravou poškozeného sektoru
a přı́padným zachráněnı́m dat, ale také se jim některé chyby nedařı́ detekovat. V horšı́ch přı́padech
se doporučuje použı́t jiný nástroj – bud’ komerčnı́, a nebo některý z volně šiřitelných, které jsou také
velmi kvalitnı́.
Pokud je poškozena systémová část disku, volı́me nástroje, které jsou bootovatelné, tj. po zasunutı́
CD s tı́mto nástrojem restartujeme počı́tač a systém se spustı́ z CD (obvykle jde o upravený Linux
nebo FreeDOS). Výborný je volně šiřitelný MHDD,2 který se poměrně snadno ovládá a pracuje
s běžnými souborovými systémy, jen je vhodné pořádně čı́st, co nám sděluje (když zadáváme
parametry pro hledánı́ vadných oblastı́, musı́me explicitně stanovit, že majı́ být také opraveny, jinak
nás program „pouze“ informuje).
Dalšı́m zajı́mavým programem, který pracuje také s údaji S.M.A.R.T., je napřı́klad aplikace
HDDScan.3 Pokud nevı́te, co je to S.M.A.R.T., podı́vejte se do skript předmětu Technické vybavenı́
osobnı́ch počı́tačů.
2
3
Stránky programu MHDD: http://hddguru.com/content/en/software/2005.10.02-MHDD/, volně dostupný.
Stránky programu HDDScan: http://hddscan.com/, volně dostupný.
$
5.2
PAMĚŤOVÁ ZAŘÍZENÍ
150
Úkoly
1. Prověřte, zda některý oddı́l na disku nemá nastaven dirty bit.
C
2. Podı́vejte se do registru, jak je nastavena výše popisovaná položka BootExecute.
3. Spust’te zběžnou (rychlou) kontrolu sektorů na disku (bez nutnosti restartu počı́tače).
4. Pokud jste dosud neslyšeli o zkratce S.M.A.R.T., pokuste se o této technologii zjistit alespoň
základnı́ informace (probı́rali jsme v předmětu Technické vybavenı́ osobnı́ch počı́tačů). Projděte si
stránky programů MHDD a HDDScan a zjistěte, co všechno tyto programy zvládajı́.
5. Zjistěte, k čemu sloužı́ a jak se použı́vá program diskperf.exe.
5.2.3
R
Program diskpart
DISKPART je program pro práci s diskovými oddı́ly ve Windows od verze Vista a Server 2008 (lze jej
stáhnout z webu Microsoftu i pro staršı́ systémy), je také součástı́ Konzoly pro zotavenı́ a Windows
PE. Ve skutečnosti se jedná o interaktivnı́ textovou konzolu podobně jako v přı́padě NetShellu a lze
ho použı́vat jak v interaktivnı́m, tak i neinteraktivnı́m módu.
Tento přı́kaz umožňuje na velmi pokročilé úrovni pracovat s disky a jejich jednotlivými oddı́ly
včetně dynamických svazků a dynamických oddı́lů. Typické úlohy jsou zjistěnı́ informacı́ o disku
či oddı́lu, vytvořenı́ či zrušenı́ oddı́lu, vytvořenı́ nebo rozšı́řenı́ dynamického svazku, práce s RAID
(zrcadlenı́), připojenı́ nebo odpojenı́ oddı́lu.
Některé přı́kazy jsou určeny k práci s konkrétnı́m diskem nebo oddı́lem. Před použitı́m takovýchto přı́kazů musı́me nejdřı́v daný disk či oddı́l vybrat přı́kazem select, vybraný disk (oddı́l) se
nazývá zaměřený (focused). Neplést si s aktivnı́m diskem, to je něco jiného!
Přı́klad 5.1
V tomto souhrnném přı́kladu si ukážeme základnı́ práci s programem diskpart.
spustili jsme program, jsme v interaktivnı́m režimu, dále zadáváme přı́kazy určené
tomuto programu (prompt je ted’ ve tvaru diskpart>)
diskpart
vypı́šeme seznam disků s informacemi (pracuje také s externı́mi disky včetně USB
flash disků), v seznamu má každý disk své čı́slo (od 0)
select disk 1
vybrali jsme disk čı́slo 1 (tj. druhý v pořadı́), tento disk je ted’ zaměřený
list disk
list partition
vypı́šeme seznam oddı́lů na zaměřeném disku
select partition 3
zaměřı́me vybraný oddı́l (č. 3)
odstranı́me zaměřený oddı́l (pozor, opravdu se odstranı́!), při práci s dynamickými svazky tento přı́kaz nepoužı́váme (mı́sto něj použı́váme delete volume)
delete partition
vytvořı́ nový primárnı́ oddı́l na disku se zaměřenı́m
o velikosti 18 000 MB, na disku musı́ být dostatek nepřiřazeného mı́sta (nepřiřadı́ žádné
pı́smeno jednotky), jiné přı́kazy jsou pro vytvořenı́ rozšı́řeného (extended) a logického (logical)
oddı́lu (budeme se učit na přednáškách)
create partition primary size=18000
$
5.2
PAMĚŤOVÁ ZAŘÍZENÍ
151
přiřadı́ vytvořenému oddı́lu pı́smeno jednotky (bude dostupný pod pı́smenem E:), tı́mto přı́kazem (assign mount=...) můžeme vytvořený oddı́l připojit také do adresáře (bod připojenı́)
assign letter=e
zobrazı́ detailnı́ informaci a disku se zaměřenı́m
detail disk
odchod z prostředı́ programu
exit
Popis parametrů přı́kazu najdeme na http://support.microsoft.com/kb/300415 (a také v nápovědě).
Přı́klad 5.2
Pokud chceme instalovat jakýkoliv operačnı́ systém na počı́tač (typicky netbook) bez optické mechaniky (a tudı́ž nelze použı́t instalačnı́ DVD), a nebo prostě vyrobit bootovacı́ USB flash disk, je
třeba toto médium předem připravit, aby bylo použitelné pro tento účel.
Předpokládejme, že chceme vytvořit instalačnı́ USB flash disk pro Windows 7 nebo Windows
Vista. Potřebujeme
• USB flash disk o vhodné kapacitě (ideálně kolem 4 GB nebo vı́ce),
• počı́tač s DVD mechanikou a programem diskpart (bud’ v systému, který ho obsahuje, nebo
stáhneme z internetu),
• instalačnı́ DVD, jehož obsah chceme přesunout na USB flash disk.
USB flash disk připojı́me k počı́tači (pro jistotu odpojı́me vše s rozhranı́m USB, co zrovna nepotřebujeme), spustı́me Přı́kazový řádek s právy administrátora a dále postupujeme následovně:
spustı́me diskpart, prompt se změnı́ na diskpart>
diskpart
list disk
zjistı́me čı́slo USB flash disku, se kterým chceme pracovat, zobrazı́ se něco podobného:
Disk###
------Disk 0
Disk 1
Disk 2
Stav
-----Online
Online
Online
Velikost
------18 GB
40 GB
3824 MB
Volné
----0 GB
0 GB
0 GB
Dyn
---
Gpt
---
Prvnı́ dvě položky jsou zřejmě pevné disky, to, co hledáme (USB flash disk), je poslednı́ položka
(disk č. 2). Sloupec Volné neznamená množstvı́ mı́sta nezabraného daty, ale množstvı́ mı́sta,
které nenı́ zařazeno do žádného oddı́lu na disku.
select disk 2
předáme zaměřenı́ na disk 2, se kterým budeme dále pracovat
na celém disku se zaměřenı́m vytvořı́me primárnı́ oddı́l (celém,
protože jsme nezadali velikost)
create partition primary
právě vytvořenému oddı́lu předáme zaměřenı́, tedy následujı́cı́ přı́kazy
patřı́ právě tomuto oddı́lu (všimněte si, že jsme nezadali 0; toto čı́slo je totiž přiřazeno speciálnı́mu oddı́lu MBR, který obsahuje informaci o struktuře disku, tedy prvnı́ oddı́l, do kterého
se dá něco ukládat, má čı́slo 1)
select partition 1
active
označı́me oddı́l jako aktivnı́, to znamená, že z něho lze zavést operačnı́ systém
5.2
PAMĚŤOVÁ ZAŘÍZENÍ
152
naformátujeme aktivnı́ oddı́l souborovým systémem NTFS (pozor, tento souborový systém nenı́ přı́liš vhodný pro USB flash disky, na které se často zapisuje, zde ho
použijeme jen proto, aby bylo možné na něj přenést instalaci Windows 7 nebo Visty)
format fs=ntfs
přiřadı́me vytvořenému oddı́lu pı́smeno (žádné jsme nezadali, tedy se použije prvnı́
volné)
assign
exit
D:
odchod z prostředı́ programu diskpart, dalšı́ přı́kazy již zadáváme přı́mo v Přı́kazovém
řádku. Nejdřı́v zasuneme do DVD mechaniky instalačnı́ DVD s Windows 7 nebo Vista. Dále:
(dosad’te pı́smeno DVD mechaniky s instalačnı́m DVD), přesun na instalačnı́ DVD
na instalačnı́m DVD se přesuneme do adresáře boot
bootsect.exe /nt60 X:
(za X dosad’te pı́smeno, které bylo přiřazeno upravenému USB flash
disku, to lze zjistit napřı́klad přes Tento počı́tač) spouštı́me program, který vytvořı́ boot sektor
na zadaném disku (aby bylo možné z něho nabootovat)
cd boot
zkopı́rujeme všechno z instalačnı́ho DVD na USB flash disk (opět musı́me
dosadit správná pı́smenka) rekurzı́vně; pokud se nám nechce provádět to v Přı́kazovém řádku,
nenı́ problém vše zkopı́rovat v Průzkumnı́kovi nebo jakémkoliv souborovém manažerovi
xcopy D:\* X: /e
Hotovo. USB flash disk odpojı́me a můžeme z něj nabootovat na kterémkoliv počı́tači a instalovat.
Pokud nepracujeme v interaktivnı́m režimu, použı́váme trochu jinou syntaxi. Internı́ přı́kazy zadáváme pomocı́ parametrů programu, napřı́klad
na pevném disku, který je prvnı́ v pořadı́, vytvořı́
nový oddı́l o velikosti 15 000 MB (na disku musı́ být tolik volného mı́sta nepřiřazeného
žádnému oddı́lu)
diskpart /add \Device\HardDisk0 15000
diskpart /delete \Device\HardDisk0\Partition1
na disku 0 odstranı́ prvnı́ oddı́l (pozor,
oddı́ly, které běžně vidı́me, jsou čı́slovány až od 1)
diskpart /delete F:
odstranı́ oddı́l, který má přiřazeno pı́smeno F
Úkoly
1. Zjistěte, do jaké mı́ry program diskpart umožňuje pracovat s dynamickými svazky (použı́vá
se pojem volume). Dále zjistěte, jakým způsobem lze pomocı́ tohoto nástroje vytvořit RAID
(diskpart umožňuje pracovat se zrcadlenı́m disků).
2. Najděte na internetu postupy vytvořenı́ bootovatelného USB disku a porovnejte s tı́m, který je
popsán v přı́kladu 5.2.
5.2.4
C
R
Program fsutil
Program FSUTIL (součást systému až od verze XP) sloužı́ ke správě diskových oddı́lů se souborovým
systémem NTFS (ale rozumı́ také FAT a FAT32). Podobně jako u jiných silných přı́kazů je třeba mı́t
administrátorská přı́stupová oprávněnı́ (alespoň k prováděnı́ změn).
Syntaxe je podobná přı́kazu net – za názvem fsutil následuje upřesňujı́cı́ přı́kaz.
$
5.2
PAMĚŤOVÁ ZAŘÍZENÍ
153
fsutil fsinfo
vypı́še informace o diskových jednotkách a souborovém systému, napřı́klad
fsutil fsinfo drives
vypı́še seznam připojených jednotek (včetně externı́ch)
fsutil fsinfo drivetype d:
chceme zjistit typ jednotky d: (napřı́klad pevný disk, vý-
měnné médium, sı́t’ový disk, CD mechanika, apod.)
fsinfo volumeinfo d:
k zadané jednotce vypı́še o něco podrobnějšı́ informaci (název
a sériové čı́slo, souborový systém, atd.)
fsutil fsinfo ntfsinfo d:
pokud je na jednotce souborový systém NTFS, vypı́šou se
podrobné informace týkajı́cı́ se nastavenı́ tohoto souborového systému (počet sektorů,
počet clusterů, adresy některých metadat, atd.)
fsutil fsinfo statistics d:
vypı́še statistické informace o jednotce (předpokládá se
souborový sytém NTFS) jako je počet čtenı́, počet zápisů apod.
Přı́klad 5.3
Zjistı́me údaje o souborovém systému na oddı́lu C: pevného disku.
C:\> fsutil fsinfo ntfsinfo c:
Sériové cı́slo svazku NTFS:
0x9090dabe90daa9cc
Verze:
3.1
Pocet sektoru:
0x000000000c422f42
Celkový pocet clusteru
0x00000000018845e8
Volné clustery:
0x0000000000b8ae55
Celkem vyhrazeno:
0x00000000000015c0
Pocet bajtu na sektor:
512
Pocet bajtu na cluster:
4096
Pocet bajtu na segment záznamu souboru:
1024
Pocet clusteru na segment záznamu souboru:
0
Platná délka dat hlavnı́ tabulky souboru (MFT):
0x0000000018d40000
Pocátecnı́ cı́slo logického clusteru hlavnı́ tabulky souboru (MFT): 0x00000000000c0000
Pocátecnı́ cı́slo logického clusteru hlavnı́ tabulky souboru (MFT2): 0x00000000012a14bc
Zacátek zóny hlavnı́ tabulky souboru (MFT):
0x000000000161ae00
Konec zóny hlavnı́ tabulky souboru (MFT):
0x000000000161bca0
M
Z údajů můžeme vyčı́st, jak velký je oddı́l (můžeme napřı́klad vynásobit počet sektorů velikostı́
sektoru, pozor, hexadecimálnı́ čı́slo je třeba nejdřı́v převést na dekadické), sektory majı́ velikost 512
B (půl KiB) jak je dnes pořád ještě obvyklé (některé nejnovějšı́ disky 4 KiB), jeden cluster zabı́rá 8
sektorů, atd. Podobně zjistı́me statistiku o daném oddı́lu disku:
C:\> fsutil fsinfo statistics c:
Typ systému souboru:
NTFS
Ctenı́ souboru uživatele:
106024
Precteno bajtu souboru uživatele:
3085795328
Ctenı́ disku uživatele:
106581
Zápisy do souboru uživatele:
25892
Zapsáno bajtu do souboru uživatele:
769765376
Zápisy na disk uživatele:
27589
Ctenı́ metadat:
5769
M
5.2
PAMĚŤOVÁ ZAŘÍZENÍ
154
Precteno bajtu metadat:
97398784
Ctenı́ metadat disku:
12274
Zápisy metadat:
17495
Zapsáno bajtu metadat:
95387648
Zápisy metadat disku:
22158
Ctenı́ hlavnı́ tabulky souboru (MFT):
3802
Precteno bajtu tabulky MFT:
89341952
Zápisy do tabulky MFT:
12804
Zapsáno bajtu tabulky MFT:
69070848
Zápisy do tabulky MTF2:
0
Zapsáno bajtu tabulky MFT2:
0
Pocet ctenı́ korenového indexu:
0
Precteno bajtu korenového indexu:
0
Zápisy do korenového indexu:
0
Zapsáno bajtu do korenového indexu: 0
Ctenı́ rastru:
1195
Precteno bajtu rastru:
4894720
Zápisy rastru:
3652
Zapsáno bajtu rastru:
21164032
Ctenı́ rastru tabulky MFT:
26
Precteno bajtu rastru tabulky MFT:
106496
Zápisy rastru tabulky MTF:
309
Zapsáno bajtu rastru tabulky MFT: 1413120
Ctenı́ indexu uživatele:
6742
Precteno bajtu indexu uživatele:
27615232
Zápisy do indexu uživatele:
4614
Zapsáno bajtu do indexu uživatele: 22216704
Ctenı́ souboru protokolu:
6
Precteno bajtu souboru protokolu:
24576
Zápisy do souboru protokolu:
12689
Zapsáno bajtu do souboru protokolu:
112349184
fsutil file
práce s konkrétnı́mi soubory (vytvářenı́, vyhledávánı́, atd.)
fsutil file createnew d:\soubor.txt 10000
vytvořı́ nový soubor se zadaným ná-
zvem o délce 10 000 B (necelých 10 KB)
fsutil file findbysid novak d:\pisemnosti
bude hledat soubor, jehož vlastnı́kem je
novak, v adresáři d:\pisemnosti (funguje, pokud máme nastaveny diskové kvóty pro
uživatele)
Tento přı́kaz také dovoluje pracovat také s tzv. „řı́dkými soubory“.
fsutil volume
základnı́ správa svazku – možnost zjištěnı́ volného mı́sta a možnost jeho odpojenı́
zjistı́, kolik volného mı́sta je na disku d: (kolik lze ještě
použı́t pro soubory – pozor, neplést si s pojmem „volné mı́sto na fyzickém disku“, se
kterým jsme se setkali u přı́kazu diskpart v přı́kladu 5.2 na straně 151)
fsutil volume dismount d:
odpojı́ zadanou diskovou jednotku
fsutil volume diskfree d:
5.2
PAMĚŤOVÁ ZAŘÍZENÍ
155
fsutil behavior
zobrazı́ nebo změnı́ chovánı́ souborového systému (NTFS)
zjistı́me, zda je povoleno nebo zakázáno
časové razı́tko při každém přı́stupu (zda se položka času poslednı́ho přı́stupu měnı́ při
každém přı́stupu k souboru včetně přı́stupu pouze pro čtenı́)
fsutil behavior query disablelastaccess
• pokud tento přı́znak nenı́ nastaven, zobrazı́ se hlášenı́
disablelastaccess nenı́ aktuálne nastaven
• pokud naopak nastaven je, zobrazı́ se
disablelastaccess = 1
nastavı́me zákaz časového razı́tka při každém přı́stupu k souborům (to je praktické zvláště u SSD disků, kde každý nadbytečný
zápis čehokoliv zbytečně snižuje životnost disku)
fsutil behavior set disablelastaccess 1
Položek, které lze takto zjišt’ovat nebo nastavovat, je vı́ce. Přı́kaz obsahuje vždy bud’ výraz
query (zjišt’ovánı́) nebo set (nastavovánı́).
fsutil dirty
pracuje s přı́znakem dirty („špinavý“), se kterým jsme se setkali už u přı́kazu chkntfs (na
straně 149)
fsutil dirty query d:
zjistı́, zda je u oddı́lu D: nastaven přı́znak dirty
fsutil dirty set d:
jednotka D: je označena jako „špinavá“ (pak by měla být tato jed-
notka zkontrolována při přı́štı́m startu systému)
fsutil hardlink
práce s pevnými odkazy (u novějšı́ch verzı́ NTFS jsou podporovány pevné odkazy s podobnými vlastnostmi jako pevné odkazy v unixových souborových systémech, také původnı́ cesta
k souboru je chápána jako pevný odkaz a tedy na každý soubor vede vždy nejméně jeden)
fsutil hardlink create d:\zkratky\novy.dat c:\cesta\puvodni.dat
vytvořı́ se
pevný odkaz s názvem v prvnı́m parametru za klı́čovým slovem create, na existujı́cı́
soubor, který je poslednı́m parametrem přı́kazu
Pevné odkazy lze použı́vat stejně jako původnı́ cesty k souborům, pevný odkaz lze vytvořit
pouze na běžný soubor (pevný odkaz na adresář by mohl způsobit zacyklenı́ při některých
operacı́ch v souborovém systému)
fsutil quota
práce s kvótami (o kvótách jsme se učili v kapitole 5.2.1 na straně 146). Kvóta stanovuje
každému uživateli limit pro mı́sto na jednotce, které může využı́vat pro své vlastnı́ soubory.
Obvykle je stanovena určitá tolerance (threshold), která sice může vyvolat „poplach“, ale
uživatel ještě může do této stanovené mı́ry kvótu překročit
fsutil
fsutil
fsutil
fsutil
fsutil
quota
quota
quota
quota
quota
query d:
zobrazı́ nastavenı́ diskových kvót
violations
zobrazı́ porušenı́ stanovených kvót
track d:
povolı́ sledovánı́ kvót
enforce d:
povolı́ vynucovánı́ kvót
disable d:
zakáže použı́vánı́ kvót
5.2
PAMĚŤOVÁ ZAŘÍZENÍ
156
vytvořı́ novou kvótu nebo pozměnı́
existujı́cı́ pro zadaného uživatele; prvnı́ čı́selný parametr určuje toleranci (threshold),
druhý pak mı́sto na jednotce vymezené zadanému uživateli (oba údaje v B)
fsutil quota modify d: 1024 10000000 novak
Poznámka: Pro úplnost – souborový systém NTFS podporuje nejen pevné odkazy (které můžeme
vytvářet napřı́klad pomocı́ fsutil), ale i symbolické odkazy (to nenı́ úplně totéž jako zástupci).
Lze je vytvářet (a také prohlı́žet a rušit) programem junction, který je ke staženı́ na stránkách
http://www.sysinternals.com.
junction -c d:programy ”c:\program files”
vytvořı́ symbolický odkaz (zadáváme název
odkazu a jeho cı́l)
junction -d d:\programy
junction d:\abc.txt
odstranı́me symbolický odkaz
zjistı́, zda zadaný soubor je či nenı́ symbolickým odkazem (funguje i na
adresáře)
vypı́še (rekurzı́vně) všechny symbolické odkazy na disku C:, součástı́ výpisu
může být napřı́klad
junction -s c:\
\\?\c:\\programy: JUNCTION
Substitute Name: c:\program files
M
Je zvláštnı́, že v aplikaci WinObj (seznámili jsme se s nı́ v kapitole o objektech) se symbolické odkazy
(vytvořené pomocı́ junction) vůbec neobjevujı́, ale zato odkazy vytvořené pomocı́ přı́kazu subst
tam najdeme (viz obr. 5.3).
Obrázek 5.3: WinObj po přı́kazu subst – týká se jednotek R: a T:
Úkoly
1. Zobrazte nápovědu přı́kazu fsutil a zjistěte, jaké dalšı́ podpřı́kazy podporuje.
C
2. Pokuste se pomocı́ tohoto přı́kazu vytvořit nový soubor o nulové délce a soubor o délce 1 KB
(dejte pozor na to, v jakých jednotkách se délka souboru zadává). U obou souborů použijte
přı́ponu TXT a pak je otevřete v některém editoru (třeba Poznámkovém bloku).
3. Na některý ze souborů vytvořených v předchozı́m úkolu vytvořte pevný odkaz v tomtéž adresáři, ale jinak pojmenovaný. Projděte si pak vlastnosti tohoto pevného odkazu (v kontextovém
menu).
4. Zjistěte, zda jsou nastaveny kvóty na jednotkách pevného disku ve vašem počı́tači.
5. Zjistěte, jestli jsou nastavována časová razı́tka při každém přı́stupu k souboru na jednotkách
vašeho disku.
R
5.2
5.2.5
PAMĚŤOVÁ ZAŘÍZENÍ
157
Streamy v NTFS
V souborovém systému NTFS můžeme ke každému souboru (i složce) přidružit stream – proud
dat (nebo vı́ce streamů). Fyzicky každý soubor obsahuje alespoň jeden (hlavnı́) stream, který je
pojmenovaný názvem souboru. Ostatnı́ streamy jsou pojmenované pouze doplňkovým řetězcem
za názvem souboru a jsou přı́stupné přes „dvojtečku“, nazývajı́ se alternativnı́ datové streamy (ADS,
Alternative Data Streams).
Vytvořit stream můžeme bud’ programově (v procesu), a nebo „ručně“ přesměrovánı́m (napřı́klad u krátkého řetězce stačı́ přesměrovat výstup přı́kazu echo, ale lze přesměrovat i obsah
souboru).
P
$
Přı́klad 5.4
Vytvořı́me textový soubor, jehož hlavnı́ stream zůstane prázdný a ve dvou dalšı́ch streamech uložı́me
řetězce pı́smen.
echo Ahoj > d:\soubor.txt:cesky
prvnı́ stream obsahuje český pozdrav,
echo Hello > d:\soubor.txt:anglicky
more < soubor.txt:cesky
vypı́šeme stream s českým obsahem,
more < soubor.txt:anglicky
type test.txt
druhý stream obsahuje anglický pozdrav,
vypı́šeme dalšı́ stream,
vypı́šeme obsah souboru – všimněte si dvou věcı́:
• tı́mto přı́kazem se nevypı́še nic, soubor je sám o sobě prázdný (streamy jsou „navı́c“,
nejsou obsaženy v souboru),
• k výpisu souboru můžeme použı́t přı́kaz type, ale k výpisu streamů ho použı́t nelze
(musı́me je vypsat přı́kazem more a také přesměrovánı́ je nutné), můžete vyzkoušet
výpis streamu přı́kazem type nebo more bez směrovánı́ (nebo nemusı́te, když nemáte
rádi chybová hlášenı́),
dir test.txt
vypsali jsme údaje o našem souboru – velikost je 0.
Je těžké poznat, jestli je u souboru ukrytý stream.
Rychlé a spolehlivé (pokud máme podezřenı́ na
jeden konkrétnı́ soubor) je pokusit se tento soubor v grafickém režimu zkopı́rovat na diskový
oddı́l, jehož souborový systém nepodporuje streamy (třeba FAT32, což je obvyklé napřı́klad na
USB flash discı́ch). Při pokusu o vloženı́ „podezřelého“ souboru na takový diskový oddı́l se objevı́ hlášenı́, které vidı́me na obrázku 5.4. Takto
zjistı́me názvy streamů a můžeme se podı́vat i na
jejich obsah (třeba postupem z přı́kladu 5.4).
Obrázek 5.4: Pokus o zkopı́rovánı́ souboru se
Při práci se streamy můžeme bud’ použı́vat
streamy na FAT
postup z předchozı́ho přı́kladu, a nebo lze využı́t program Streams od firmy Sysinternals (je ke
staženı́ na webu firmy). Tı́mto programem můžeme streamy také odstraňovat.
$
5.3
SPRÁVA PAMĚTI
158
streams soubor.txt
vypı́še streamy v zadaném souboru včetně jejich délky, výstup:
Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com
M
soubor.txt:
:anglicky:$DATA 8
:cesky:$DATA 7
streams -d soubor.txt
streams -s c:\
odstranı́ všechny streamy u zadaného souboru.
vypı́še streamy všech souborů a adresářů na disku C: rekurzı́vně, zkrácený
výstup:
Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com
M
Error opening c:\pagefile.sys:
Proces nemá přı́stup k souboru, nebot’ jej právě využı́vá jiný proces.
c:\soubor.txt:
:anglicky:$DATA 8
:cesky:$DATA 7
c:\Documents and Settings\Uzivatel\Dokumenty\dokument.zip:
:Zone.Identifier:$DATA
26
c:\WINDOWS\Thumbs.db:
:encryptable:$DATA 0
...
Ve Windows od verze Vista je přı́kaz dir obohacen o přepı́nač /r, který dokáže zobrazit i alternativnı́
streamy (ve Windows XP máme v tomto směru smůlu):
$
dir /s /b /r c:\ | find ”$DATA”
Dalšı́m nástrojem (volně dostupným) pro odhalovánı́ streamů je LADS.4
Stream Zone.identifier bývá obvykle přidáván Internet Explorerem při staženı́ souboru z internetu.
Ne všechny streamy jsou bohužel takto nevinné. Protože běžný uživatel prakticky nemá šanci
náhodně zjistit, že k souboru patřı́ alternativnı́ stream (dokonce se v běžných výpisech včetně
Průzkumnı́ka neprojevı́ ani jeho délka), mohou být streamy zneužı́vány malwarem k transportu
nežádoucı́ch dat či kódu. Pokud výše popsanými technikami najdeme alternativnı́ stream s délkou
většı́ než obvyklou (ve výpisu streams třı́- nebo vı́ceciferné čı́slo), měli bychom zpozornět a spustit
antispyware.
Úkoly
1. Podobně jako v přı́kladu 5.4, vytvořte soubor se dvěma streamy. Zjistěte délku souboru a kolik
mı́sta zabı́rá na disku.
2. Pokud máte možnost, spust’te rekurzivnı́ vyhledávánı́ streamů na vašem počı́tači.
4
LADS je dostupný na http://www.heysoft.de/en/software/lads.php.
C
5.3
SPRÁVA PAMĚTI
5.3
5.3.1
159
Správa paměti
Adresovánı́
Toto téma bylo již probı́ráno na přednášce. Současné procesory mohou pracovat minimálně v těchto
dvou režimech:
1. reálný – procesor se chová jako i8086, použı́vá jen 20 bitů na adresové sběrnici (1 MB), nelze
použı́t ochranu paměti a tedy ani multitasking, většinou existuje podpora segmentace paměti,
2. chráněný (privilegovaný) – procesor použı́vá celý rozsah adresové sběrnice, využı́vá podpůrné
obvody pro tento režim včetně dalšı́ch registrů (přı́stupných jen v chráněném režimu), podpora
ochrany paměti, multitaskingu, použı́vá se většinou segmentace se stránkovánı́m paměti na
žádost.
Reálný režim procesoru Omezenı́ adresace na 1 MB paměti se obcházı́ takto:
• spuštěný proces (program) má přiděleny segmenty paměti pro konkrétnı́ účely (napřı́klad
u Intelu kód, data, dalšı́ data, zásobnı́k, halda)
• absolutnı́ adresy začátku segmentů začı́najı́ vždy na adrese, která je dvojkově zaokrouhlená
nejméně na 4 bity (tj. adresa v binárnı́ podobě končı́ nejméně čtyřmi nulami)
• v segmentových registrech se ukládá upravená absolutnı́ adresa začátku segmentu posunutá
o 4 bity doprava
absolutnı́ adresa segmentu:
v segmentovém registru:
binárně
hex.
1001101100100000
100110110010
9B20
9B2
• použı́váme relativnı́ adresy uvnitř segmentu (offset), ty se ukládajı́ do ostatnı́ch adresových
a univerzálnı́ch registrů
Současné operačnı́ systémy tento režim přı́mo nevyužı́vajı́.
Chráněný (privilegovaný) režim znamená předevšı́m možnost (ne nutnost) hardwarové ochrany
paměti. Od předchozı́ho se lišı́ přidánı́m některých součástı́ (jsou přidány některé registry a přı́znaky) a odlišným zpracovánı́m adres.
V chráněném režimu mohou procesy běžet v několika různých okruzı́ch – Ring 0, Ring 1, Ring 2,
Ring 3. Nejvnitřnějšı́ okruh, Ring 0, je nejvı́ce chráněný, je určen pro běh jádra operačnı́ho systému,
ostatnı́ okruhy majı́ úrovně ochrany odstupňovány. Registry a přı́znaky souvisejı́cı́ s tı́mto režimem
nesmı́ být jakkoliv ovlivňovány procesy běžı́cı́mi v jiném okruhu než ring0, některé jsou pouze pro
čtenı́ dokonce i pro procesy z Ring 0.
Ve skutečnosti jsou obvykle použı́vány jen dva okruhy – Ring 0 pro jádro operačnı́ho systému
(privilegovaný/chráněný režim, režim jádra) a Ring 3 pro ostatnı́ procesy (uživatelský režim).
Doporučuje se sice napřı́klad použı́vat Ring 1 pro ovladače hardwaru, ale prakticky žádný běžný
operačnı́ systém to nedělá.
Adresace probı́há odlišně v privilegovaném režimu (Ring 0) a v uživatelském režimu (Ring 3).
V privilegovaném režimu jsou v segmentových registrech přı́mo adresy segmentů, kdežto v uživatelském režimu najdeme v těchto registrech selektory.
O
5.3
SPRÁVA PAMĚTI
160
Adresace ve Windows v chráněném režimu funguje takto:
• pro různé objekty včetně bloků (segmentů) paměti se použı́vajı́ deskriptory (popisovače), každý
deskriptor obsahuje
Proces ABCD
GDT
...
LDT
deskriptor (ABCD)
...
Operačnı́ systém
- ...
deskriptor (proměnné)
...
6
Proměnné
- prom
selektor
offset
...
...
Instrukce
...
read prom
...
Obrázek 5.5: Tabulky deskriptorů ve Windows
– data souvisejı́cı́ s použı́vánı́m objektu (např. u segmentu paměti umı́stěnı́, velikost, typ,
apod., u zařı́zenı́ jeho identifikaci, popis, požadavky na zdroje, atd.)
– přı́stupová oprávněnı́ (SID s jejich přı́padnými oprávněnı́mi)
• mı́sto přı́mých adres segmentů se použı́vajı́ selektory; selektor je ukazatel na deskriptor (popisovač)
• každý proces (včetně systémových) má svou vlastnı́ LDT (Local Descriptor Table) s deskriptory
vlastnı́ch objektů
• existuje tabulka GDT (Global Descriptor Table) vedená systémem, ve které jsou deskriptory
tabulek LDT všech procesů
• selektor je ukazatel do tabulky deskriptorů, obsahuje
– index řádku v dané tabulce LDT nebo GDT (u paměti jde o deskriptor daného segmentu),
– informaci, zda jde o index v GDT (bit je nastaven na hodnotu 0) nebo LDT (nastaven na
1),
– dva bity pro úroveň oprávněnı́ (u Windows je to 00 pro ring0 nebo 11 pro ring3)
• v uživatelském režimu jsou v segmentových registrech selektory, tj. adresujeme dvojicı́ selektor:offset
• segmenty jsou dále děleny na stránky, tj. překlad virtuálnı́ adresy selektor:offset na fyzickou je
vı́ceúrovňový
P
5.3
SPRÁVA PAMĚTI
161
Při použı́vánı́ chráněného režimu možná dojde k závažnému posunu. Firma Microsoft již dlouho
pracuje na novém operačnı́m systému Singularity, který je momentálně chápán jako testovacı́ prostředı́ nových myšlenek a technologiı́ a zřejmě ještě dlouho v této fázi vývoje zůstane (uživatelům
by zřejmě hodně vadilo chybějı́cı́ grafické prostředı́). Je zajı́mavé, že v Singularity je ochrana paměti a jiných zdrojů plně softwarová – hardwarová ochrana se zde nepoužı́vá (z důvodu urychlenı́
činnosti systému), všechny procesy běžı́ v Ring 0.
U novějšı́ch procesorů se objevila ochrana
proti spouštěnı́ kódu na pamět’ových stránkách
s daty. U procesorů AMD jde o NX bit (NonExecutive), u Intelu XD bit (Execute Disable).
Pokud má stránka nastaven tento bit na 1, je
považována za datovou a při pokusu o zacházenı́ s obsahem stránky jako s kódem (spuštěnı́
instrukcı́ zde uložených) je vyvolána výjimka,
která většinou končı́ ukončenı́m procesu, který
se o to pokusil. Účelem je zabránit útokům typu
přetečenı́ paměti.
Ve Windows (od verze XP) se tento typ
ochrany (funkce DEP – Zabráněnı́ spuštěnı́ dat)
nastavuje v nástroji Systém, záložka Upřesnit,
Možnosti výkonu.
P
Obrázek 5.6: Funkce Zabráněnı́ spuštěnı́ dat
Úkoly
Zjistěte, zda je zapnuta funkce DEP (Zabráněnı́ spouštěnı́ dat).
5.3.2
C
Stránkovánı́
Stránkovacı́ soubor se obvykle jmenuje pagefile.sys a je na systémovém disku, ale ve skutečnosti
můžeme mı́t vı́ce stránkovacı́ch souborů (v tom přı́padě by však každý měl být na jiném pevném
disku). Názvy stránkovacı́ch souborů najdeme v klı́či HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/Memory Management, a to v položce typu pole řetězců PagingFiles.
Pokud máme vı́ce stránkovacı́ch souborů, měl by být každý na jiném fyzickém disku (pokud je
jich vı́c na stejném fyzickém disku, třeba i na jiných oddı́lech, může to systém dokonce zpomalit).
Umı́stěnı́ stránkovacı́ho souboru do samostatného oddı́lu na disku (odděleně od oddı́lů se systémem a daty) může být užitečné napřı́klad proto, že takto nehrozı́ fragmentace stránkovacı́ho
souboru (ale na druhou stranu tady máme hornı́ ohraničenı́ pamět’ové oblasti, která může být pro
stránkovánı́ využita).
V tomtéž klı́či je ještě jedna zajı́mavá položka – ClearPageFileAtShutdown. Pokud existuje
a je nastavená na 1, před každým (regulérnı́m) vypnutı́m systému se smaže stránkovacı́ soubor.
To je důležité z hlediska bezpečnosti, protože v stránkovacı́m souboru se mohou nacházet důležité
P
$
5.3
SPRÁVA PAMĚTI
162
informace, které by se neměly dostat do nepovolaných rukou (jistá verze Windows takto „zveřejnila“
nezašifrované heslo administrátora).
Při potřebě uvolněnı́ rámců v operačnı́ paměti se pro výběr „oběti“ použı́vá na jednoprocesorových systémech hodinový algoritmus, na vı́ceprocesorových systémech algoritmus FIFO.
Úkoly
Zjistěte, kolik máte stránkovacı́ch souborů a jak se jmenujı́. Také zkontrolujte, zda máte nastaveno
mazánı́ stránkovacı́ho souboru při každém vypnutı́ systému.
5.3.3
P
C
Struktura paměti
Na architektuře x86 (tj. 32bitové) je na desktopu k dispozici standardně maximálně 4 GB virtuálnı́
paměti pro aplikaci, z toho max. 2 GB využı́vá proces, do zbylých 2 GB se mapuje systém.
Toto rozloženı́ lze změnit v XP a Server 2003 na 3+1, a to tak, že v souboru Boot.ini přidáme
přepı́nač /3GB.
FFFFFFFF
C0800000
C0000000
80000000
7FFFFFFF
00000000
Nestránkovaný fond
Stránkovaný fond
Mezipamět’systému
O
















Hyperprostor
2 GB
Stránkovacı́ tabulky procesů 





Zavedené ovladače





Vrstva HAL




Jádro a exekutiva


Kód DLL knihoven




Zásobnı́ky vláken
2 GB

Globálnı́ proměnné




Aplikačnı́ kód
Obrázek 5.7: Struktura paměti procesu na architektuře x86
Na obrázku 5.7 je běžná struktura virtuálnı́ paměti uživatelského procesu. Vysvětlı́me si některé
pojmy:
Pracovnı́ sada (Working Set, WS) je celkové množstvı́ paměti, která je aplikaci (prozatı́m) přidělena
(pro označenı́ hornı́ hranice přidělenı́ paměti se také použı́vá pojem „Peak WS“). Pracovnı́ sada
se dělı́ na dvě části – soukromou (private) a sdı́lenou (shared). Údaje o pracovnı́ sadě a obecně
o paměti využı́vané procesy vidı́me na obrázku ?? (v Process Exploreru).
Stránkovaný fond (Paged Pool) je virtuálnı́ pamět’, která je přidělená procesu a může být stránkována (tedy odkládaná na disk, když je třeba uvolnit rámce ve fyzické paměti).
P
5.3
SPRÁVA PAMĚTI
163
Obrázek 5.8: Pamět’procesu Thunderbird.exe v Process Exploreru a Správci úloh
Nestránkovaný fond (Non-paged Pool) je virtuálnı́ pamět’, která je přidělená procesu a nemůže být
stránkována, vždy se nacházı́ ve fyzické operačnı́ paměti; tento typ virtuálnı́ paměti se použı́vá
pro data s „časově kritickou“ dostupnostı́.
Hodnoty stránkovaného a nestránkovaného fondu uváděné v přı́slušných nástrojı́ch (napřı́klad ve
Správci úloh) je však třeba brát s rezervou. Je tak pouze stanoveno, kolik které paměti minimálně
spadá do dané kategorie. Na obrázku 5.8 vidı́me hodnoty pro pamět’ procesu v Process Exploreru
(včetně okna vlastnostı́ procesu) a pro srovnánı́ tentýž proces ve Správci úloh.
$
Pro přı́stup k dynamickým knihovnám se použı́vá metoda známá také z jiných operačnı́ch
systémů, copy-on-write. Spočı́vá v tom, že dokud proces ke knihovně přistupuje jen pro čtenı́, čte
se ze sdı́leného umı́stěnı́ knihovny, ale v okamžiku, kdy se proces pokusı́ zapisovat, knihovna je
namapována do adresového prostoru procesu (na obrázku 5.7 jde o oblast v hornı́ch 2 GB) a zápis
se provádı́ do soukromé kopie knihovny, aby pamět’originálnı́ knihovny nebyla pozměněna.
Úkoly
1. Otevřete Process Explorer. Dále spust’te program Poznámkový blok (notepad.exe). V Process
Exploreru najděte řádek pro Poznámkový blok, zobrazte vlastnosti (poklepánı́m na řádek)
a ve vlastnostech se přesuňte na kartu Performance.
2. Okna umı́stěte tak, abyste viděli zároveň jak okno Poznámkového bloku, tak i okno s vlastnostmi jeho procesu. V následujı́cı́m postupu se zaměřte na údaje o pracovnı́ sadě a virtuálnı́
paměti procesu.
3. Dále v Poznámkovém bloku běžným způsobem otevřete některý velký textový soubor (je
jedno s jakou přı́ponou). Sledujte, co se děje s pracovnı́ sadou procesu při volbě otevřenı́
souboru v menu a co se stane při zobrazenı́ obsahu otevı́raného souboru.
C
5.3
SPRÁVA PAMĚTI
5.3.4
164
Správa paměti ve Windows od verze Vista
Ve Windows od verze Vista (a také v serverové linii verzı́ od 2008) se koncepce správy paměti zcela
změnila. Zatı́mco do verze XP včetně byla pamět’přidělována procesům podle jejich momentálnı́ch
potřeb, od verze Vista to funguje jinak.
P
Když se pokusı́me zjistit využı́vánı́ paměti, s překvapenı́m zjistı́me, že je použı́váno velmi mnoho
fyzické paměti (často téměř všechna). Je to z toho důvodu, že systém přı́mo ması́vně přednačı́tá do
paměti to, o čem předpokládá, že bude v brzké době použı́váno. Tato funkce v určité omezené mı́ře
byla zahrnuta už ve Windows XP pod názvem Prefetch, ve Vistě byla v tomto směru značně rozšı́řena
a nazýváme ji Superfetch.
Funkce Superfetch je zajišt’ována stejnojmennou službou běžı́cı́ s poměrně nı́zkou prioritou, aby
nezatěžovala systém. Je možné ji zastavit a znovu spustit jako každou jinou službu, napřı́klad přı́kaz
net stop superfetch
zastavı́ tuto službu a pamět’se začne pomalu uvolňovat (ne okamžitě). Tento postup volı́me napřı́klad tehdy, když máme spuštěnou aplikaci (třeba hru), která má vysoké nebo proměnlivé nároky
na operačnı́ pamět’.
Od verze Vista se dost těžko odhaduje skutečná spotřeba paměti procesem. Přı́slušné ukazatele
(pracovnı́ sadu, stránkovaný fond, atd.) sice zı́skáme podobným způsobem jako v předchozı́ch
verzı́ch, ale uvedeným čı́slům nelze moc věřit (ani součty „podmnožin“ pracovnı́ sady nesedı́),
můžeme je použı́t pouze pro základnı́ orientaci.
Dalšı́ technologie týkajı́cı́ se paměti také už vpodstatě známe z předchozı́ho semestru, napřı́klad
ReadyBoost (použı́váme USB flash pamět’ jako nastavenı́ cache paměti pro disk) nebo ReadyDrive
(tam je flash pamět’přı́mo součástı́ krabice s diskem, takže oproti ReadyBoost nemusı́ systém počı́tat
s „vytrhnutı́m“ flashky z konektoru bez řádného odpojenı́).
Úkoly
Pokud máte možnost pracovat s verzı́ Vista nebo novějšı́, otevřete konzolu se službami (services.msc)
a najděte službu Superfetch. Zjistěte jejı́ vlastnosti – jak je spouštěna, ve kterém souboru se nacházı́,
jaké má závislosti, pod jakým účtem je spouštěna apod.
O
C
Kapitola
6
Nasazenı́ systému
V této kapitole probereme některé důležité rysy operačnı́ch systémů typu Windows. Zde najdeme pokročilejšı́
nebo komplexnějšı́ témata, která nebylo možné zařadit do předchozı́ch kapitol.
6.1
6.1.1
Konfigurace systému a aplikacı́
Konfiguračnı́ soubory pro staršı́ programy
Prostředı́ DOS programů se konfiguruje ve speciálnı́ch konfiguračnı́ch souborech, jiných pro systémy
s DOS jádrem a jiných pro NT systémy. Nı́že uvedené soubory obsahujı́ výchozı́ konfiguraci, ale
u každého staršı́ho programu lze ve vlastnostech jeho zástupce určit jakýkoliv jiný soubor podobné
struktury, který (předem) vytvořı́me.
V systémech s DOS jádrem až do verze Windows ME se použı́vajı́ soubory
CONFIG.SYS – konfigurace hardware, obvykle se zde načı́taji ovladače, včetně ovladačů rozšı́řené
paměti. Použı́váme zde speciálnı́ přı́kazy (např. DEVICE nebo DEVICEHIGH pro zavedenı́ ovla-
dače do paměti). Bývá tady také nakonfigurován ovladač zajišt’ujı́cı́ národnı́ prostředı́ a zobrazovánı́ českých znaků na obrazovce, napřı́klad
COUNTRY=042,852,C:\...\COUNTRY.SYS
DEVICE=C:\...\DISPLAY.SYS CON=(EGA,,1)
Ten prvnı́ zajistı́ podporu českého prostředı́ (načtenı́ české znakové stránky Latin2 – 852,
nastavenı́ českého formátu pro datum a dalšı́ objekty – 042), ten druhý načte ovladač pro
podporu české znakové sady na obrazovce. Mı́sto teček bude samozřejmě cesta k souboru.
AUTOEXEC.BAT – konfigurace uživatelského prostředı́ (operačnı́ systém a software). Mohou se zde
použı́vat prakticky všechny výše uvedené přı́kazy (je to dávkový soubor, většinou se zde nastavujı́ systémové proměnné nebo spouštějı́ některé programy), a pak ještě dalšı́ – konfiguračnı́
– přı́kazy, obvykle jde o modifikace přı́kazu MODE, napřı́klad
MODE CON CP PREPARE = ((852) C:\...\EGA.CPI)
165
P
6.1
KONFIGURACE SYSTÉMU A APLIKACÍ
166
MODE CON CP SELECT = 852
KEYB CZ, 852, C:\...\KEYBOARD.SYS
Přı́kaz MODE má hodně možnostı́ použitı́, sloužı́ obvykle k nastavovánı́ vlastnostı́ některých
zařı́zenı́ (obrazovky, tiskárny apod.). CON je zařı́zenı́ „obrazovka“, CP (nebo CODEPAGE) je znaková stránka, prvnı́ přı́kaz tuto stránku připravı́ k použitı́, druhý řádek ji vybere ze seznamu
připravených stránek, třetı́ nastavı́ českou klávesnici.
V systémech s NT jádrem se tyto soubory nepoužı́vajı́, pro konfiguraci DOS prostředı́ (včetně
prostředı́ přı́kazu COMMAND) se použı́vajı́ obdobné soubory ve složce System32, a to CONFIG.NT
(obdoba CONFIG.SYS) a AUTOEXEC.NT (obdoba AUTOEXEC.BAT).
P
Sada přı́kazů pro tyto soubory je obdobná sadě přı́kazů pro konfiguračnı́ soubory systémů s DOS jádrem, ale ne úplně
stejná. Některé přı́kazy nenı́ nutné použı́t,
protože se provedou automaticky (napřı́klad nastavenı́ národnı́ho prostředı́ a znakové sady). Soubory (NT) jsou okomentovány, ale nejsou zdokumentovány v nápo- Obrázek 6.1: Určenı́ konfiguračnı́ch souborů pro DOS
vědě (alespoň základnı́ přı́kazy však ano). program
Můžeme si vytvořit vlastnı́ varianty těchto souborů, pro daný DOS program určı́me jejich použı́vánı́ ve vlastnostech spustitelného souboru (pokud to nejde, musı́me nejdřı́v vytvořit zástupce
spustitelného souboru a pak provést nastavenı́ ve vlastnostech tohoto zástupce), na kartě Program,
tlačı́tko Upřesnit, jak vidı́me na obrázku 6.1.
Úkoly
1. Prohlédněte si soubory autoexec.nt a config.nt, zjistěte, jaká nastavenı́ momentálně obsahujı́.
$
C
2. Pokud máte některou staršı́ DOS aplikaci, vytvořte jejı́ho zástupce a v jeho vlastnostech zkontrolujte, které konfiguračnı́ soubory jsou nastaveny. Pak vytvořte nové (ve stejném adresáři,
kde je aplikace), a přesměrujte na ně konfiguraci aplikace.
3. Zjistěte, co vše lze nastavovat přı́kazem mode.
6.1.2
INI
R
soubory
Soubory s přı́ponou INI se ve staršı́ch verzı́ch Windows běžně použı́valy jako konfiguračnı́ soubory,
zvláště v době, kdy ještě neexistoval registr. Dodnes se pro tyto účely použı́vajı́ a protože běžnı́
uživatelé majı́ jen omezený přı́stup do registru, použitı́ INI souborů mı́sto umı́stěnı́ konfigurace do
registru zjednodušuje instalaci a přı́padnou dalšı́ konfiguraci, protože INI soubory lze samozřejmě
umı́stit i do domovské složky uživatele.
Soubory s přı́ponou INI najdeme i v systémových složkách. Je to zejména soubor desktop.ini,
který je umı́stěn v každé složce, pro kterou je zapnuto Vlastnı́ nastavenı́ (v Možnostech složky). Některé
systémové INI soubory existujı́ spı́še z důvodu zpětné kompatibility s aplikacemi Windows 3.x.
O
6.1
KONFIGURACE SYSTÉMU A APLIKACÍ
167
Konfiguračnı́ informace ve vlastnı́ch INI souborech využı́vajı́ také s úspěchem aplikace portované
(přenesené) z jiných operačnı́ch systémů (OpenOffice.org, Firefox aj.), kde je použı́vánı́ textových
konfiguračnı́ch souborů běžné a proto přenesenı́ tohoto chovánı́ je jednoduššı́ než programovánı́
přı́stupu do registru. Ale i aplikace primárně psané pro Windows často ukládajı́ konfiguraci do INI
souborů.
Jedná se o textové soubory s částečně vázaným formátem (tj. je zvykem zachovávat určitá formátovacı́ pravidla). Většina programovacı́ch jazyků podporuje práci s INI soubory speciálnı́mi přı́kazy
pro tento účel určenými, uživatelé je také mohou otevı́rat v textových editorech (ale neukládat
s formátovánı́m!), napřı́klad v Poznámkovém bloku.
soubory jsou rozděleny na sekce. Každá sekce začı́ná názvem sekce umı́stěným v hranatých
závorkách, pomocı́ programových prostředků (přı́kazů) se lze v INI souboru rychle přesunout na
sekci s daným názvem. Uvnitř každé sekce je pak sekvence přiřazovacı́ch přı́kazů (klı́čů) ve tvaru
vlastnost = hodnota, každý na jednom řádku. Můžeme také použı́vat komentáře (začı́najı́ střednı́kem). INI soubor může vypadat napřı́klad takto:
INI
; nastavenı́ fontu programu:
[Font]
hlavni=bookman
kodprog=times
M
; barvy použité v okně:
[Barva]
pozadi=white
font=black
zvyrazneny=red
; umı́stěnı́ a rozměry okna programu:
[Okno]
left=20
right=0
width=750
height=400
Pro systémové INI soubory existuje ve Windows Editor systémové konfigurace, spouštěný přı́kazem
sysedit.exe.
Úkoly
1. Najděte jakýkoliv soubor desktop.ini a prozkoumejte jeho obsah.
$
C
2. Najděte kterýkoliv soubor s přı́ponou INI v některém z podadresářů v adresáři Program Files,
otevřete v Poznámkovém bloku a prohlédněte si jeho strukturu.
3. Otevřete Editor systémové konfigurace a zjistěte, které soubory jsou v něm dostupné.
6.1.3
INF
soubory
soubory jsou podobné INI souborům, i včetně jejich struktury. Jejich určenı́ je ale trochu jiné.
Obvykle obsahujı́ konfiguračnı́ informace ovladačů a většina z nich se nacházı́ ve složce Inf, některé
také ve složce System32. Jsou také rozděleny do sekcı́, lze na ně použı́t tytéž programátorské postupy.
INF
O
6.1
KONFIGURACE SYSTÉMU A APLIKACÍ
168
K INF souborům existujı́ do páru stejně pojmenované soubory s přı́ponou PNF. Narozdı́l od INF
souborů, PNF soubory jsou binárnı́, předkompilované.
soubory obvykle začı́najı́ sekcı́ [Version], ve které je informace o nejnižšı́ verzi Windows,
pro kterou je soubor určen (často tu bývá napřı́klad $Chicago$, tj. pro všechna Windows od verze
951 ) nebo $Windows NT$ (tj. pro NT systémy, nelze použı́t napřı́klad pro Windows 95/98/ME).
Dále je zde většinou název a kód třı́dy zařı́zenı́. Pokud soubor nepatřı́ konkrétnı́ třı́dě (napřı́klad
layout.inf nebo apps.inf), je kód nulový a název nenı́ uveden. Asi nejsrozumitelnějšı́ je poslednı́ sekce až ke konci souborů, [Strings]. Tady najdeme konkrétnı́ přiřazenı́ řetězců zkratkám
použitým výše.
INF
Nejdůležitějšı́m INF souborem je layout.inf. Na tento soubor se odvolává většina ostatnı́ch
INF souborů, obsahuje obecné informace o systému, které jsou potřebné pro instalaci a nastavenı́
ovladačů. Soubor začı́ná takto:
[Version]
signature=$Windows NT$
ClassGUID=00000000-0000-0000-0000-000000000000
M
Dalšı́m obecným INF souborem je apps.inf, který zajišt’uje správné chovánı́ starých 16bitových
aplikacı́ a jejich ovladačů. Pro změnu si ukážeme část poslednı́ sekce (je velmi dlouhá):
[Strings]
...
ACAD.EXE=”Autocad”
ACAD386.BAT=”Autocad”
BASIC.COM=”Microsoft Basic”
BC.EXE.1=”Borland C++ IDE”
BC.EXE.2=”Microsoft Basic Compiler”
COMMAND.COM=”Přı́kazový řádek MS-DOS”
EDIT.COM=”MS-DOS Editor”
EDIT.EXE=”IBM Professional Editor”
MEM.EXE=”MS-DOS Memory Information”
MEMMAKER.EXE=”MS-DOS Memory Optimizer”
PAINT.BAT=”PC Paintbrush IV Plus”
PCSHELL.EXE=”PCTools PCShell”
PING.EXE=”Nástroj FTP PING”
UNDEL.EXE=”PCTOOLS - UnDelete”
UNDELETE.EXE=”UNDELETE (dos)”
...
M
Ve složce Inf najdeme mnoho zajı́mavých souborů, napřı́klad au.inf pomáhá nastavit automatické aktualizace (AutoUpdate), games.inf obsahuje informace o jednoduchých předinstalovaných
hrách, cdrom.inf sloužı́ při instalaci CD mechanik, atd.
Úkoly
1. Najděte soubor monitor.inf (je ve složce Inf). Prohlédněte si celou strukturu tohoto souboru.
Zjistěte, pro které verze Windows je tento soubor určen, do jaké třı́dy patřı́ zařı́zenı́, která má
pomoci instalovat, prohlédněte si také sekci [Strings].
2. Zkopı́rujte do schránky identifikačnı́ čı́slo třı́dy zařı́zenı́ (ClassGUID). Otevřete registr (regedit)
a vyhledejte klı́č s tı́mto názvem. Prohlédněte si obsah nalezeného klı́če.
1
Chicago je kódové jméno Windows 95.
C
R
6.1
KONFIGURACE SYSTÉMU A APLIKACÍ
6.1.4
169
Registr
V této podsekci shrneme a rozšı́řı́me naše dosavadnı́ znalosti o registru Windows (v angličtině
Windows Registry). Z předchozı́ho semestru vı́me, že rozlišujeme několik pojmů:
• větev registru – začı́ná vždy některým z hlavnı́ch klı́čů HKLM (Local Machine), HKU (Users),
HKCU (Current User), HKCR (Classes Root), HKCC (Current Config),
O
• podstrom registru – dva z hlavnı́ch klı́čů jsou na počı́tači unikátnı́ (to jsou podstromy) – HKLM
a HKU, ostatnı́ hlavnı́ klı́če pouze odkazujı́ na některý z podklı́čů těchto podstromů
• podregistr (hive, úl) – tento pojem se vztahuje k souborům, ve kterých je registr uložen:
– několik systémových podregistrů s názvy sam, security, software, system, všechny
jsou uloženy v ...\system32\config, jde o podklı́če v klı́či HKLM,
– pro každého uživatele jeden s názvem ntuser.dat uložený v profilu uživatele, tyto
podklı́če jsou v klı́či HKU, resp. HKCU pro právě přihlášeného uživatele,
– dalšı́ pomocné podregistry, předevšı́m HKU/.Default (tento podregistr najdeme ve stejném adresáři jako systémové podregistry, soubor default), a dále klı́če HKU/hSIDi_Classes
(tento podregistr je v souboru %userprofile%/Local Settings/Data Aplikacı́/Microsoft
Windows/usrClass.dat, kde podřetězec %userprofile% je cesta k profilu uživatele s daným SID).
Všimněte si, že v klı́či HKLM je ještě jeden podklı́č – hardware. Pro tento podklı́č však neexistuje
žádný podregistr, protože všechny údaje, které v něm najdeme, jsou dynamicky generovány při
každém startu systému a proto nejsou nikde uloženy.
Vı́me, že ve Windows řady NT (a ve Windows s DOS jádrem od verze 95) se konfigurace
systému a aplikacı́ obvykle ukládá do registru. Protože se jedná o binárnı́ soubory, je zpracovánı́
údajů registru pro procesy (a nebo v textové konzole) o něco náročnějšı́, nelze použı́t přı́mou úpravu
těchto souborů. Shrňme si, jaké máme možnosti:
• programy regedit.exe a regedt32.exe – pouze pro uživatele klepajı́cı́ho myšı́ u počı́tače,
i vzdáleného,
• soubory s přı́ponou REG – lze jen bud’ exportovat z výše zmı́něných programů, a nebo načı́st
do registru nová data, ale pro proces nenı́ možné tı́mto způsobem data z registru zı́skat,
• přı́slušné API funkce a nebo funkce či třı́dy a objekty nabı́zené programovacı́mi nástroji (pro
procesy),
• program reg.exe (pro uživatele i procesy, je až od Windows verze XP/Server 2003),
• dalšı́.
Ted’ nás bude zajı́mat program reg.exe. Tento program je určen k běhu v Přı́kazovém řádku
a s jistými omezenı́mi ho lze použı́t i procesem. Má syntaxi podobnou přı́kazu net, ale množstvı́
variant je výrazně menšı́. Probereme postupně jednotlivé varianty.
reg query
takto zı́skáváme údaje z registru; zadáváme vždy větev registru, která nás zajı́má (větve začı́najı́ některým z řetězců HKLM, HKU, HKCU, HKCC, HKCR), můžeme zadat také větev ze vzdáleného
registru (na jiném počı́tači), řetězec obsahujı́cı́ mezery uzavřeme do uvozovek
$
6.1
KONFIGURACE SYSTÉMU A APLIKACÍ
170
reg query ”HKLM\system\currentcontrolset\Control\Session Manager”
vypı́šou se všechny záznamy (položky) zadaného klı́če a všechny jeho podklı́če
reg query ”HKCU\Control panel\desktop /v autoendtasks
přepı́nač /v vypı́še momentálnı́ nastavenı́ hodnoty AutoEndTasks v zadaném klı́či
reg query ”HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\
Memory Management” /v clearpagefileatshutdown
takto zjistı́me momentálnı́
nastavenı́ hodnoty (položky) ClearPageFileAtShutdown v zadaném klı́či
reg query HKCU\Software\OpenOffice.org /s
vypı́šou se všechny údaje, a to rekur-
zı́vně i v podklı́čı́ch
takto přistupujeme ke vzdálenému registru (jednoduše před
název hlavnı́ho klı́če dáme název počı́tače podle UNC adresy); na vzdálených počı́tačı́ch
můžeme přistupovat pouze k podstromům registru, tj. ke klı́čům HKLM a HKU (a jejich
podklı́čům), nelze zadat napřı́klad HKCU
reg query ”\\pocitac\HKU”
reg copy
kopı́ruje obsah jednoho klı́če do druhého (počı́tá se spı́še s využitı́m kopı́rovánı́ mezi dvěma
různými počı́tači)
reg copy \\RefPocitac\HKLM\software \\JinyPocit\HKLM\software /s /F
zkopı́ruje celou softwarovou konfiguraci (obecně) z jednoho počı́tače na jiný (pozor,
pokud chceme tı́mto způsobem přenášet konfiguraci mezi počı́tači, musı́me toho přenést
poněkud vı́ce), a to rekurzı́vně (/s) a bez požadavku na potvrzovánı́ kopı́rovánı́ (/F)
Pokud nezadáme UNC počı́tače, pracuje se s větvı́ registru lokálnı́ho počı́tače.
reg delete
odstranı́ z registru podklı́č nebo položku
reg delete HKCR\.xxx
odstranı́ zadaný podklı́č v
reg delete ”HKLM\software\program /v cfile
odstranı́ položku cfile v zadaném
klı́či
v zadaném klı́či odstranı́ všechny položky,
které nemajı́ vloženu žádnou hodnotu (empty)
reg delete ”HKLM\software\program /va
v zadaném klı́či odstranı́ všechny položky
(ale podklı́če nechá)
reg delete ”HKLM\software\program /ve
reg export
sloužı́ k exportu větve do souboru s přı́ponou REG
reg export ”HKCU\AppEvents\EventLabels d:\uzivatelUdalosti.reg
exportujeme zadanou větev registru do REG souboru
reg import
importujeme obsah REG souboru do registru
reg import uzivatelUdalosti.reg
import zadaného REG souboru
Přı́kaz reg má ještě dalšı́ parametry. Kromě běžných větvı́ registru můžeme také zvlášt’ pracovat
s podregistry. Podregistr můžeme dočasně připojit, pak znovu odpojit nebo uložit podregistr do
6.1
KONFIGURACE SYSTÉMU A APLIKACÍ
171
souboru s přı́ponou HIV (zkratka z „hive“), připojovat můžeme pouze pod klı́če HKLM a HKU. Pro tyto
účely sloužı́ podpřı́kazy save, load, atd.
Použı́vánı́ přı́kazu reg přı́mo na Přı́kazovém řádku je poměrně jednoduché (když neznáme
syntaxi, stačı́ použı́t přepı́nač /?, stejně jako u kteréhokoliv jiného přı́kazu), horšı́ je to ve skriptu
(dávkovém souboru) nebo v procesu. Přı́kaz totiž vypisuje poněkud hodně informacı́ (nejen to, co
chceme). Na začátku výpisu se vždy zobrazı́ řádek
! REG.EXE VERSION xxx
(zobrazı́ se čı́slo verze souboru)
a zbytek výpisu je prokládán prázdnými řádky. Při automatickém zpracovánı́ tedy musı́me přeskočit
řádky začı́najı́cı́ symbolem „!“ a prázdné řádky, a dále je třeba rozpoznat názvy klı́čů od názvů
položek.
Pokud nás zajı́má, které podregistry jsou kde uloženy (a obvykle takto také můžeme zjistit přiřazenı́ SID konkrétnı́mu uživateli), podı́váme se do klı́če HKLM/SYSTEM/CurrentControlSet/Control/hivelist, ve kterém najdeme položky nazvané podle názvů objektů registru, jejichž
hodnotou je umı́stěnı́ přı́slušného souboru.
Úkoly
1. V nápovědě přı́kazu reg zjistěte, jak konkrétně se dá pracovat s podregistry.
M
C
2. Vyberte si kteroukoliv větev registru a vyzkoušejte na nı́ přı́kazy reg query (včetně přepı́načů)
a reg export.
3. V nápovědě přı́kazu for zjistěte, jak při použitı́ parametru /F určit, že řádky začı́najı́cı́ symbolem ! budou považovány za komentáře. Dále najděte způsob, jak při použitı́ přı́kazu for
přeskočit několik prvnı́ch řádků (napřı́klad ten s komentářem).
4. Pokud máte dostatečná přı́stupová oprávněnı́, vyzkoušejte si připojenı́ podregistru (můžete
v grafickém režimu):
• Otevřete složku ...\Windows\repair. Obsah této složky je obvykle generován při instalaci nebo reinstalaci systému, kdy se jednotlivé podregistry teprve vytvářejı́.
• Vytvořte kopii souboru system (bez přı́pony), kopii nazvěte např. system.hiv. Tento
krok nenı́ až tak nezbytný, ale z bezpečnostnı́ch důvodů budeme pracovat s touto vytvořenou kopiı́.
• Otevřete Editor registru (regedit.exe, na Windows 2000 regedt32.exe). Klepněte na
klı́č HKLM (aby byl aktivnı́). V hlavnı́m menu aplikace zvolte Soubor ï Načı́st podregistr,
najděte kopii, kterou jste vytvořili v předchozı́m kroku (system.hiv). Je třeba zadat
název klı́če, zadejte Test (může to být cokoliv, ale bez diakritiky a bez mezer).
• V klı́či HKLM se objevı́ podklı́č Test. Prohlédněte si jeho obsah a porovnejte s klı́čem
HKLM/System.
• Pak připojený podregistr odpojte – sbalte jeho strom, klepněte na jeho název (Test) a pak
v hlavnı́m menu zvolte Soubor ï Uvolnit podregistr.
Tento postup je výhodný napřı́klad tehdy, když počı́tač nelze spustit a přı́činu chceme najı́t
(nebo napravit) v registru (podregistr můžeme připojit i z jiného počı́tače a nebo napřı́klad
z prostředı́ Windows PE).
Postup si můžete vyzkoušet i s použitı́m přı́kazu reg – jde o podpřı́kazy load a unload.
Syntaxi zjistı́te v nápovědě přı́kazu.
R
6.2
START SYSTÉMU
172
5. Podı́vejte se do adresáře, ve kterém je systémová část registru ...\System32\Config. Zobrazte vlastnosti kteréhokoliv podregistru (souboru bez přı́pony, máte zapnuté zobrazovánı́
přı́pon souborů známých typů?). Všimněte si, že údaje Velikost a Velikost na disku jsou stejné
(porovnejte s jiným typem souborů, třeba s některým LOG souborem).
R
Je to z toho důvodu, že pokud je soubor s podregistrem prodlužován (nebo zkracován), přidává
se vždy najednou celý blok paměti o velikosti 4096 B (4 KB), která je odvozena od obvyklé
velikosti clusteru na disku (můžete si ověřit třeba na kalkulačce).
6. Vlastnı́kem načtených podregistrů (tedy souborů system, sam, atd.) je jádro. Ve struktuře procesů zobrazených v aplikaci Process Explorer je jádro představováno řádkem System. Zobrazte
seznam manipulátorů vlastněných tı́mto procesem (handlů) a najděte mezi nimi podregistry
(jedná se o objekty typu soubor, file).
6.2
6.2.1
Start systému
Windows s DOS jádrem
Při startu systému lze použı́t klávesnici pro určenı́ typu spuštěnı́ Windows. Klávesy nebo klávesové
zkratky držı́me od chvı́le před startem systému po dobu, než systém na tyto klávesy zareaguje. Jsou
to:
F5
start bez konfiguračnı́ch souborů (soubory config.sys a autoexec.bat)
F6
totéž, ale v sı́ti
F8
start s úvodnı́m (startovacı́m) menu (v některých verzı́ch Windows také klávesa Ctrl )
Shift+F5
Shift
R
$
start MS-DOS 7.0 bez konfiguračnı́ch souborů
pokud tuto klávesu držı́me po celou dobu startu systému od potvrzenı́ přihlášenı́ (až do
chvı́le, kdy se objevı́ ikony na ploše), nespustı́ se programy uložené ve složkách Po spuštěnı́
(Startup)
Úvodnı́ (startovacı́) menu umožňuje napřı́klad spustit nouzový režim, nebo pokud máme zároveň
nainstalované předchozı́ verze Windows (ne přeinstalované), tak je lze spustit odtud.
Úvodnı́ menu je použitelné předevšı́m pro možnost spuštěnı́ systému v nouzovém režimu. V tomto
režimu je systém načten ve výchozı́m nastavenı́ (standardnı́ ovladače monitoru a myši, z ostatnı́ch
ovladačů pouze to nejnutnějšı́). Systém spouštı́me v nouzovém režimu, pokud nemůžeme spustit
systém po instalaci nového ovladače nebo aplikace, po nevhodných zásazı́ch do konfigurace systému
nebo při jakémkoliv poškozenı́ ovladačů. Je možné odtud také instalovat aktualizace Windows
včetně Service Packů.
Pokud chceme, aby se ve Windows s DOS jádrem vždy při startu systému zobrazilo úvodnı́
menu, pak do MSDOS.SYS přidáme do sekce [Options] řádek
BootMenu=1
P
6.2
START SYSTÉMU
173
Je možné zakázat zobrazovánı́ startovacı́ nabı́dky pomocı́ kláves F5 a F8 , a to také v souboru
MSDOS.SYS. Toto nastavenı́ se provádı́ také v sekci [Options], kde přidáme řádek
BootKeys=0
V systémech s NT jádrem je pro tento účel třeba upravit soubor ntldr.
6.2.2
Windows 2000 a XP
Úvodnı́ (startovacı́) menu zobrazı́me tak, že držı́me klávesu F8 během startu systému (ale pokud
je tato vlastnost zakázána, nefunguje to).
Ve Windows S NT jádrem startovacı́ menu nabı́zı́ tyto možnosti:
Stav nouze: Při startu systému jsou načteny pouze ovladače pro nejdůležitějšı́ zařı́zenı́ (monitor,
myš, klávesnice, apod.), a to standardnı́ (od Microsoftu), nenı́ zprovozněna sı́t’, jsou spuštěny
pouze nejdůležitějšı́ služby systému.
$
P
Stav nouze s pracı́ v sı́ti: Totéž jako předchozı́ bod, navı́c jsou načteny i ovladače pro práci v sı́ti.
Stav nouze se systémem MS-DOS: (Stav nouze s přı́kazovým řádkem) Zde nejde o pravý systém
MS-DOS (některé soubory, které s MS-DOSem souvisejı́, ve Windows NT ani neexistujı́), ale
o spuštěnı́ systému bez grafického rozhranı́, registru a služeb Windows, pouze s nejnutnějšı́mi
standardnı́mi ovladači, je to obdoba Přı́kazového řádku.
Povolit protokolovánı́ při spouštěnı́: Systém se spouštı́ jako obvykle, ale během tohoto procesu se vytvářı́ protokol (textový soubor s názvem ntbtlog.txt v systémovém adresáři) obsahujı́cı́
informace o stavu načtenı́ všech ovladačů a služeb (zda bylo či nebylo načtenı́ úspěšné). Je to
obdoba souboru bootlog.txt ze systémů s DOS jádrem.
Do souboru ntbtlog.txt je ukládán protokol také při předchozı́ch možnostech Stavu nouze.
Zapnout režim VGA: Omezenı́ na načtenı́ pouze standardnı́ch verzı́ ovladačů se týká pouze ovladače
grafické karty. Tuto položku použijeme, pokud se nezdařila instalace ovladače grafické karty
nebo je tento ovladač poškozen (monitor je při běžném spuštěnı́ systému „nečitelný“).
Poslednı́ známá platná konfigurace: Při spuštěnı́ systému nenı́ brán ohled na změny v konfiguraci
provedené pomocı́ nástrojů ve Windows (registr, konfigurace ovladačů v registru), ale použije
se nastavenı́ uložené v registru, změny v konfiguraci do „definitivnı́“ konfigurace dostávajı́ až
při restartu nebo dalšı́m spuštěnı́ systému, tedy tyto změny jsou „zahozeny“). Nelze tak řešit
změny v konfiguraci typu poškozených systémových souborů nebo ovladačů.
Režim laděnı́: Pro diagnostiku problémů můžeme použı́t nástroje pro laděnı́ jádra (některé jsou ke
stáhnutı́ na stránkách Microsoftu). Během spouštěnı́ systému mohou být zası́lány sériovým
kabelem informace o laděnı́ do jiného počı́tače.
Údaje o konfiguracı́ch jsou v klı́či HKLM/System. V klı́či HKLM/System/Select najdeme několik
důležitých položek:
• Current obsahuje čı́slo momentálnı́ platné konfigurace; obvykle je zde čı́slo 1, což znamená,
že platná konfigurace je v klı́či HKLM/System/ControlSet001, do tohoto klı́če odkazuje klı́č
HKLM/System/CurrentControlSet,
$
6.2
START SYSTÉMU
174
• Default označuje výchozı́ volbu, obvykle obsahuje stejné čı́slo jako Current,
• LastKnownGood obsahuje čı́slo poslednı́ známé platné konfigurace (před změnami, které
mohly způsobit problémy), napřı́klad pokud je zde čı́slo 2, poslednı́ známá platná konfigurace
je v klı́či HKLM/System/ControlSet002,
• Failed obsahuje čı́slo konfigurace, jejı́ž načtenı́ se nezdařilo (pokud je zde 0, znamená to, že
žádné problémy se nevyskytly).
V úvodnı́m menu se mohou objevit i dalšı́ položky. Některé jsou tam přidány při instalaci po sı́ti nebo
dodatečné instalaci některých modulů, napřı́klad pokud chceme, aby zde byla možnost spuštěnı́
Konzoly pro zotavenı́ (s Konzolou pro zotavenı́ jsme se již trochu seznámili v předchozı́m semestru),
vložı́me do mechaniky instalačnı́ CD a nainstalujeme ji, tedy zadáme přı́kaz (předpokládejme, že
CD disku je přidělena jednotka X):
X:\i386\winnt32.exe /cmdcons
Start počı́tače probı́há takto:
1. BIOS spouštı́ test POST (Power On Self Test) pro základnı́ desku – kontrola hardwaru (množstvı́
operačnı́ paměti, připojené disky, klávesnice, apod.), načte konfiguraci počı́tače z paměti CMOS
(čip na základnı́ desce), tam také zjistı́ pořadı́ zařı́zenı́, ze kterých se má spustit operačnı́ systém,
pak proběhne test POST také na některých rozšiřujı́cı́ch kartách (např. řadiče disků, grafická
karta),
2. BIOS se pokoušı́ zavést operačnı́ systém nejdřı́v z prvnı́ho zaváděcı́ho zařı́zenı́ (obvykle to je
pevný disk), v přı́padě neúspěchu (disk nenı́ systémový, . . . ) z druhého, atd.; disk, ze kterého
lze načı́st systém, musı́ být označen přı́znakem aktivnı́ (o tomto přı́znaku jsme se už něco
dozvěděli napřı́klad u přı́kazu diskpart),
3. pokud BIOS našel zaváděcı́ zařı́zenı́, ze kterého lze zavést operačnı́ systém, spustı́ přı́slušný
zavaděč (ve speciálnı́m sektoru na disku je jeho adresa). V přı́padě Windows řady NT je
tı́mto zavaděčem proces ntldr (NT Loader, nacházı́ se na systémovém disku), který provede
samotné zavedenı́ systému. Zavaděčem může být také některý Boot Manager, který umožnı́
zvolit si mezi vı́ce nainstalovanými operačnı́mi systémy, po zvolenı́ je spuštěn již konkrétnı́ zavaděč operačnı́ho systému (ntldr je vlastně taky jednoduchý Boot Manager, ale umı́ pracovat
pouze s operačnı́mi systémy z rodiny Windows).
V přı́padě zaváděnı́ Windows 2000 a XP na platformě x86 je dalšı́ průběh následujı́cı́:
1. proces ntldr načte soubor BOOT.INI, pokud je v něm uvedeno vı́ce operačnı́ch systémů
z rodiny Windows, zobrazı́ nabı́dku těchto systémů (s vlastnostmi uvedenými v BOOT.INI),
dalšı́ body platı́ pro přı́pad, že byl zvolen systém Windows řady NT, jinak jinak je předáno
řı́zenı́ souboru BOOTSECT.DOS (obsahuje údaje o boot sektorech operačnı́ch systémů Windows
s DOS jádrem), přı́padně zavaděči jiného NT systému,
2. ntldr přepne procesor z reálného do chráněného režimu a načte některé systémové soubory,
BIOS již dále nenı́ použı́ván pro přı́stup k zařı́zenı́m,
3. ntldr spouštı́ program ntdetect.com, který provede detekci hardwaru (postupuje podle
zvoleného hardwarového profilu, pokud jsou tyto profily definovány) a zı́skané informace
předá procesu ntldr,
P
6.2
START SYSTÉMU
175
4. ntldr spustı́ hlavnı́ soubor jádra – ntoskrnl.exe a načte knihovnu hal.dll (Hardware
Abstraction Layer, vrstva abstrakce hardwaru), načı́tá řı́dicı́ sady (většinou ovladače a služby)
uvedené v registru v klı́či HKLM/System/Current ControlSet (nebo ControlSetxxx, podle
typu spuštěnı́ systému), včetně služeb, které se majı́ spouštět při startu počı́tače,
5. ntldr spustı́ Správce relacı́ (relacı́ uživatelů, sessions) – SMSS.EXE a předá mu řı́zenı́,
6. Správce relacı́ dále
• vytvářı́ systémové proměnné,
• spouštı́ ty podsystémy, které jsou potřeba již při začátku práce na počı́tači: předevšı́m
podsystém Windows, který je nutný i pro nastartovánı́ grafického režimu (pro režim jádra
je představován ovladačem Win32k.sys, pro uživatelský režim souborem csrss.exe),
• spustı́ Správce přihlašovánı́ (winlogon.exe), atd.,
7. Správce prihlašovánı́ pak spouštı́ podsystém SCM (Správce služeb určený souborem services.exe,
seznámı́me se s nı́m v následujı́cı́ kapitole na straně 100) a podsystém LSASS (pro ověřovánı́
přı́stupu, soubor lsass.exe, taktéž se s nı́m seznámı́me později), a dále umožnı́ přihlášenı́
uživatele (podsystém lsass kontroluje údaje zı́skané při přihlášenı́),
8. uživatel je přihlášen a projevı́ se některá nastavenı́ jako třeba Zásady skupiny (pro počı́tač
i uživatele), přı́padně přihlašovacı́ skripty, pokud existujı́, jsou spuštěny procesy, které se majı́
spustit po přihlášenı́ – jsou uvedeny v registru a ve složce Po spuštěnı́ (Startup).
Rozpoznávánı́ zařı́zenı́ službou Plug&Play běžı́ od spuštěnı́ této služby (bod 4.) nezávisle na přihlašovacı́m procesu.
Dalšı́ informace můžeme zı́skat napřı́klad na adresách
http://technet.microsoft.com/en-us/library/cc766314%28WS.10%29.aspx
http://technet.microsoft.com/en-us/library/cc721886%28WS.10%29.aspx
http://technet.microsoft.com/en-us/library/cc749177%28WS.10%29.aspx
Konfiguraci zaváděnı́ systému můžeme provádět bud’ přı́mo v souboru boot.ini (je vždy na
disku C:, i když nenı́ systémový) nebo v grafickém režimu v ovládacı́m panelu Systém (v kontextovém
menu ikony Tento počı́tač zvolı́me Vlastnosti nebo jednoduše spustı́me soubor sysdm.cpl), záložka
Upřesnit, část Spuštěnı́ a zotavenı́ systému.
$
Vı́me, že v souboru boot.ini je konfigurace zaváděnı́ Windows. Tento soubor můžeme upravovat bud’ přı́mo (ovšem je chráněn atributem „read-only“ a přı́slušnými ACL seznamy) nebo v nástroji
Systém (záložka Upřesnit, oblast Spuštěnı́ a zotavenı́ systému) – pouze základnı́ nastavenı́.
Ve Windows XP a Server 2003 je k dispozici nástroj bootcfg (v Konzole pro zotavenı́). Umožňuje
pracovat se souborem boot.ini na Přı́kazovém řádku, a to i na vzdáleném počı́tači (v lokálnı́ sı́ti).
Syntaxı́ se nebudeme podrobně zabývat (nápovědu lze zı́skat běžným způsobem jako u kteréhokoliv
jiného přı́kazu), podrobnějšı́ informace najdeme napřı́klad na adresách
http://support.microsoft.com/kb/291980/cs
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/bootcfg.mspx?mfr=true
http://www.windowsportal.cz/Blog/tabid/102/EntryID/87/Default.aspx
Parametry použitelné v souboru boot.ini najdeme napřı́klad na
http://msdn.microsoft.com/en-us/library/ms791480.aspx.
$
6.3
INSTALACE WINDOWS
6.2.3
176
Windows Vista a novějšı́
Vista od SP1 obsahuje podporu EFI (EFI je modernějšı́ varianta BIOSu, probı́rali jsme to v předmětu
Technické vybavenı́ osobnı́ch počı́tačů).
Mı́sto souboru ntldr se pro načtenı́ systému použı́vá dvojice programů:
P
• Windows Boot Manager (soubor bootmgr) – správce zaváděnı́ systémů (zobrazuje startovacı́
nabı́dku),
• Windows Loader (soubor winload.exe) – provede vlastnı́ zavedenı́ systému.
Jednı́m z mnoha rozdı́lů mezi ntldr a bootmgr je samozřejmě na straně bootmgr podpora EFI (je
zobrazován v EFI jako jedna z rozpoznaných položek).
Start počı́tače probı́há takto:
• start BIOSu nebo EFI, podle architektury, včetně přı́slušných testů,
• start Windows Boot Managera (bootmgr),
• zobrazenı́ jeho nabı́dky (pokud je tak nastaven), v nabı́dce je
–
–
–
–
volba pro spuštěnı́ Windows Vista nebo novějšı́ (spuštěnı́m winload.exe),
obnovenı́ z hibernace (spuštěnı́m winresume.exe),
přı́padné spuštěnı́ staršı́ verze Windows, pokud je některá nainstalována,
dalšı́ volby.
Pro konfiguraci zaváděnı́ lze použı́t rozhranı́ BCD od firmy Microsoft. Toto rozhranı́ přistupuje
k prostředkům přes WMI. Je to programové rozhranı́ (použı́vané procesem, jedná se o sadu funkcı́).
BCDEdit je nástroj pro Přı́kazový řádek, který využı́vá rozhranı́ BCD. Je obsažen přı́mo ve
Windows (od verze Vista/Server 2008) a sloužı́ k podobnému účelu jako bootcfg v Konzole pro
zotavenı́ Windows XP. Popis parametrů najdeme napřı́klad na
http://msdn.microsoft.com/en-us/library/aa906217.aspx.
Program BCDEdit nenı́ zrovna „uživatelsky přı́tulný“. Aplikace EasyBCD2 od firmy NeoSmart
Technologies sloužı́cı́ ke stejnému účelu má přehledné grafické rozhranı́ a je volně ke staženı́.
Umožňuje dokonce snadné nastavenı́ zařazenı́ unixových operačnı́ch systémů do startovacı́ nabı́dky
Windows Boot Managera.
Úkoly
1. Na svém počı́tači najděte výše popsané soubory (platné pro váš operačnı́ systém). Nezapomeňte si zobrazit skryté soubory a chráněné soubory operačnı́ho systému. Také nechte
zobrazovat přı́pony souborů známých typů (vzpomeňte si, kde se tato nastavenı́ provádějı́).
2. Otevřete soubor msdos.sys (je vždy na disku C:, a to i na NT systémech). Projděte si sekci
[options].
3. Na internetu najděte stránky s popisem aplikace EasyBCD a zjistěte, co vše v nı́ lze nastavovat.
4. V registru najděte klı́č HKLM/System/Select a prohlédněte si momentálnı́ hodnoty položek
v tomto klı́či. Prohlédněte si vlastnosti souboru ntdetect.com a dále podle verze Windows
bud’ ntldr nebo bootmgr a winload.exe.
2
EasyBCD je ke staženı́ na http://neosmart.net/dl.php?id=1.
$
$
C
6.3
INSTALACE WINDOWS
6.3
6.3.1
177
Instalace Windows
Instalace Windows do verze XP
Rozlišujeme několik základnı́ch typů instalacı́ Windows:
Čistá instalace: instalujeme na prázdný zformátovaný logický disk (budoucı́ systémový disk) nebo
provedeme formátovánı́ na začátku instalace, instalace probı́há bez jakékoliv vazby na předchozı́ operačnı́ systém, který byl přı́padně na daném logickém disku nainstalován.
P
Inovace (přeinstalovánı́): na budoucı́m systémovém disku je již nainstalován některý operačnı́ systém
typu Windows, chceme ho přeinstalovat na vyššı́ verzi. U některých systémů nelze provést
inovaci (napřı́klad nelze Windows 3.x nebo 95 inovovat na Windows XP, ale na Windows 98
nebo 2000 již ano).
Instalace vedle jiného operačnı́ho systému: provádı́ se do jiného adresáře (složky) nebo na jiný logický
disk, podle typu systémů. Účelem je funkčnost předchozı́ho (předchozı́ch) i nového operačnı́ho
systému.
Poslednı́ možnost může být v přı́padě Windows problematická. Za určitých okolnostı́ dokážou vedle
sebe na jednom logickém disku existovat MS-DOS a některé Windows s DOS jádrem, pokud ale
chceme instalovat Windows s NT jádrem vedle jiných Windows, musı́ to být na jiný logický disk.
Jiný operačnı́ systém než Windows je tvrdě ignorován. Problémy nastávajı́ s přı́stupem k zavaděči
jiných systémů – řešenı́ bude probı́ráno později.
Za normálnı́ch okolnostı́ (instalujeme přı́mo na klientském počı́tači, máme bootovacı́ CD mechaniku) se instalace spustı́ automaticky po nabootovánı́ z CD, instalaci provádı́ soubor setup.exe. Na
instalačnı́m disku je však ještě několik programů, které provádějı́ instalaci, použı́vajı́ se napřı́klad
při automatizované instalaci nebo v přı́padě, že nemáme bootovacı́ CD mechaniku.
Možnosti instalace na desktopu:
Běžná instalace: program setup.exe, sedı́me u počı́tače a přı́mo zadáváme údaje.
Bezobslužná instalace: pro Windows XP jsou instalačnı́ soubory WINNT32.EXE a WINNT.EXE ve složce
i386 na instalačnı́m disku. Použijeme ji, pokud máme instalovat velké množstvı́ počı́tačů
s různými hardwarovými architekturami a přı́padně různý software.
Sysprep (Nástroj přı́pravy systému): v instalačnı́m souboru DEPLOY.CAB (jde o archiv podobně jako
ZIP) ve složce Support\Tools na instalačnı́m disku. Je použitelná, pokud instalovaný počı́tač
má stejnou vrstvu HAL3 jako ten, ze kterého instalujeme (referenčnı́), což obvykle znamená
naprosto stejný hardware; tento nástroj dokáže provést pouze čistou instalaci (nikoliv reinstalaci).
Sysprep vytvořı́ bitovou kopii systému referenčnı́ho počı́tače (image) bez „specifických“ informacı́, a ta se nakopı́ruje na ostatnı́ počı́tače.4 Takto lze přenášet nejen systém, ale také všechny
3
Architekturu systému budeme probı́rat na přednáškách – HAL (Hardware Abstraction Layer) je součást jádra závislá
na hardware; Windows na dvou počı́tačı́ch majı́ stejnou vrstvu HAL, pokud jsou instalovány na stejném HW.
4
Přesný postup použı́vánı́ Sysprep včetně formy souborů odpovědı́ lze najı́t na internetu, napřı́klad na adrese
http://articles.techrepublic.com.com/5100-22 11-5838633.html.
$
6.3
INSTALACE WINDOWS
178
nainstalované aplikace a konfiguraci. Nevýhodou je omezenı́ velikosti image na kapacitu disku
CD.
Některé verze Windows nabı́zejı́ vı́ce různých možnostı́ instalace, zajı́mavé jsou předevšı́m možnosti
pro automatizovanou instalaci (typicky v sı́ti s Windows Serverem). Následujı́cı́ možnosti jsou
použitelné v lokálnı́ sı́ti s Windows server.
$
RIS (Služba vzdálené instalace): je součástı́ serverových variant Windows od verze 2000. Je řešena
podobně jako Sysprep, ale nejsme omezeni kapacitou CD (instalace probı́há po sı́ti), je nutné
mı́t v sı́ti zprovozněnou službu Active Directory.
SMS (Systems Management Server): také na serverových Windows. Je použitelný pouze pro inovaci
existujı́cı́ instalace některého systému Windows. Nabı́zı́ možnost načasovánı́ inovace, určenı́
počı́tačů, kterých se bude týkat, instalaci opravných balı́čků, apod.
Existujı́ také dalšı́ způsoby instalace či inovace. Lze použı́t i netradičnı́ možnosti typu bitové kopie
(obraz disku, image) systémového disku, se kterou nebude pracovat server Windows, ale Linux
nebo jiný operačnı́ systém (nebo použijeme speciálnı́ programy pro vytvořenı́ obrazu systémového
disku na bootovacı́m CD nebo disketě, některé z nich jsou také postaveny na Linuxu, nebo běžı́
na jiném počı́tači v sı́ti), to je možnost velmi vhodná pro obnovu poškozeného systému (předem
vytvořı́me „nepoškozený“ obraz), data by pokud možno měla být na jiném logickém disku nebo na
sı́ti.
Během pořizovánı́ bitové kopie systému (at’ už jakoukoliv metodou) kopı́rovaný systém nesmı́
běžet. Často je také nutné tento systém předem upravit (napřı́klad u nástroje Sysprep); upravovat
nemusı́me, pokud bitovou kopii chceme použı́t jako zálohu našeho systému pro přı́padné pozdějšı́
znovunačtenı́ na tentýž počı́tač (ale pozor na přı́padné změny hardwaru).
Automatizovaná instalace probı́há s minimem zásahů uživatele (správce), pro vstupy se použı́vajı́ soubory odpovědı́ (answer file, to jsou textové soubory s informacemi, které by bylo jinak nutné
zadávat během instalace, přı́padně tady mohou být přı́kazy pro spuštěnı́ určitých programů včetně
instalačnı́ch a konfiguračnı́ch nástrojů). Přı́pona souborů odpovědı́ bývá obvykle TXT nebo INF,
napřı́klad sysprep.inf. Soubory odpovědı́ můžeme vytvářet bud’ ručně, a nebo s využitı́m specializovaného programu, napřı́klad Správce instalace (setupmgr.exe), který najdeme na instalačnı́m
CD ve složce Support\Tools.
Podrobné informace o automatizovaných instalacı́ch a o formě souborů odpovědı́ pro různé
metody jsou v Resource Kitu5 pro zvolenou verzi Windows, a nebo na internetu6 .
V přı́padě, že CD mechanika počı́tače nenı́ bootovacı́, instalace se provede tak, že nabootujeme
z instalačnı́ diskety Windows 98 (ta se dá opatřit napřı́klad na www.bootdisk.com) a v zobrazeném
menu zvolı́me Spustit systém s podporou CD-ROM. Vytvořı́ se virtuálnı́ CD disk, přes který již je
přı́stupná CD mechanika. Přepneme se na tuto mechaniku (pı́smena jednotek mohou být posunutá)
a instalaci spustı́me přı́kazem i386\winnt.exe (program setup.exe v prostředı́ DOSu nefunguje).
To, jakou verzi systému máme, zjistı́me v nástroji Systém, přı́padně rychle pomocı́ přı́kazu winver
5
Resource Kit pro Windows 2000 je dokonce celý dostupný na internetu (stačı́ do vyhledávače zadat napřı́klad
„Resource Kit 2000“).
6
Napřı́klad adresy http://technet.microsoft.com (ve vyhledávánı́ použijte „bezobslužná instalace“ nebo třeba „answer
file installation“), http://www.adminxp.cz (ve vyhledávánı́ použijte „soubor odpovědı́“), http://www.google.com.
P
$
$
6.3
INSTALACE WINDOWS
179
nebo ver.
Některé verze Windows (včetně Windows XP) je nutné aktivovat. Nenı́ to totéž co registrace
(registrace umožňuje využı́vat některé dalšı́ služby Microsoftu). Bez aktivace běžı́ systém po určitou
dobu (60 dnů, Grace Period) bez jakýchkoliv restrikcı́.7 Aktivace nebývá nutná u některých typů
licencı́, např. OEM (produkt byl aktivován při instalaci) nebo některých hromadných licencı́ch.
Aktivaci také můžeme provést při automatizované instalaci úpravou souboru odpovědı́ (funguje,
pokud je počı́tač připojen k internetu).
P
Samotná aktivace spočı́vá ve vygenerovánı́ kódu typického pro určitý počı́tač, vytvářı́ se na
základě hardwarové konfigurace počı́tače (to je vlastně důvod, proč se po „razantnějšı́ch“ a opakovaných změnách konfigurace začne systém chovat jako neaktivovaný). Tento kód je uložen v souboru
wpa.dbl v adresáři System32. Závisı́ na 10 parametrech, po změně 5 z nich je považován za neplatný.
Aktivaci je teoreticky nutné provést při každém přeinstalovánı́ Windows, ale ve skutečnosti stačı́,
když si včas zálohujeme soubor wpa.dbl a po přeinstalovánı́ ho vrátı́me do System32.
Úkoly
1. V nápovědě nebo na internetu zjistěte, jaké parametry majı́ programy winnt a winnt32. Jak
podle těchto parametrů můžeme určit umı́stěnı́ souboru odpovědı́?
C
2. Stručně charakterizujte vlastnosti instalace z programů setup, winnt a sysprep (v souboru
deploy.cab) na instalačnı́m disku systému, předevšı́m rozdı́ly mezi nimi.
6.3.2
Nástroje k bezobslužné instalaci Visty a novějšı́ch verzı́
Windows jsou od verze distribuovány na DVD (u staršı́ch verzı́ bylo CD) ve formátu WIM (Windows Imaging). Zatı́mco jiné typy obrazů disků jsou strukturovány podle stop na médiu, WIM je
strukturován podle souborů (modulů).
Pro automatizovanou instalaci potřebujeme bud’ jeden referenčnı́ (vzorový) počı́tač, který je
kompletně nainstalovaný a nakonfigurovaný včetně instalace aplikacı́, a nebo instalačnı́ médium
(pokud netrváme na automatizaci instalace aplikacı́).
P
Vždy je nutné vytvořit soubor odpovědı́. Od verze Vista jde o soubor ve formátu XML s názvem
unattend.xml nebo autounattend.xml.
Pro bezobslužnou instalaci budeme potřebovat některé z následujı́cı́ch nástrojů.
Windows AIK (Automated Installation Kit)8 je sada nástrojů určených k usnadněnı́ automatizované
instalace Windows. Je volně ke staženı́ na webu Microsoftu. Obsahuje několik nástrojů, které nás
mohou zajı́mat (pro různé verze Windows zde najdeme trochu jinou množinu nástrojů), dva z nich
jsou dále použı́vány:
• ImageX – sloužı́ k zachycenı́ bitové kopie pro instalaci z již nainstalovaného počı́tače (dokáže zachytit nejen nainstalovaná Windows, ale i konfiguraci a aplikace), taktéž umožňuje
manipulovat s bitovými kopiemi (přidávat nebo odstraňovat soubory),
7
Původně běžel systém bez aktivace v režimu snı́žené funkčnosti (některé funkce systému nebyly zprovozněny), od
verze Vista SP1 a Windows Server 2008 již tomu tak nenı́. Grace Period byla u Windows Server 2008 R2 snı́žena na 30 dnı́.
8
Stačı́ zadat do Googlu řetězec windows aik site:microsoft.com .
$
6.3
INSTALACE WINDOWS
180
• SIM (Windows System Image Manager, také WSIM) – nástroj pro vytvářenı́ souborů odpovědı́,
manipulaci s existujı́cı́mi bitovými kopiemi, atd. (ve staršı́ch verzı́ch se pro vytvářenı́ souborů
odpovědı́ použı́val Setup Manager).
Instaluje se poněkud nezvykle – stáhnutý soubor (měl by odpovı́dat verzi Windows, kterou máme
na počı́tači nainstalovanou) je ve skutečnosti obraz disku (pro Vistu má přı́ponu IMG, pro Windows 7
přı́ponu ISO) a je poměrně velký (pro Vistu téměř 1 GB). Je nutné stáhnutý obraz vypálit na přenosný
disk (nebo připojit jako virtuálnı́ mechaniku) a (v grafickém prostředı́, které se zobrazı́ po spuštěnı́
z disku) nainstalovat.
Dalšı́ informace najdeme na adresách
http://www.windowsnetworking.com/articles tutorials/Deploying-Vista-Understanding-Windows-AIK.html
http://technet.microsoft.com/en-us/library/cc722301%28WS.10%29.aspx
Projdeme si nástroje, které zde z Windows AIK využijeme.
Obrázek 6.2: Windows SIM (v anglické verzi)
SIM je nástroj s grafickým rozhranı́m, který lze kromě jiného použı́t pro vytvořenı́ souboru
odpovědı́ a bezobslužnou instalaci z DVD. Po nainstalovánı́ AIK najdeme tuto aplikaci v menu Start
ï Programy ï MS Windows AIK ï Správce bitových kopiı́ systému Windows (resp. Windows System
Image Manager).
Okno aplikace obsahuje několik podoken, nás zajı́majı́ podokna Bitová kopie (Windows Image v anglické verzi) a Soubor odpovědı́ (Answer File v anglické verzi). Podokno Bitová kopie sloužı́ k vytvořenı́
a modifikaci bitové kopie, ze které bude systém instalován, a v podokně Soubor odpovědı́ vytvářı́me
a modifikujeme soubory odpovědı́ (můžeme jich mı́t i vı́ce).
6.3
INSTALACE WINDOWS
181
ImageX je nástroj s textovým rozhranı́m (aby byl použitelný i ve skriptu). Má několik funkcı́,
které řı́dı́me přepı́nači (vždy lze použı́t jen jediný z hlavnı́ch přepı́načů, pak existujı́ ještě dodatečné
přepı́nače a parametry). Sloužı́ k vytvářenı́ a správě WIM souborů. Hlavnı́ úlohou, při které se
uplatňuje, je vytvořenı́ bitové kopie z nainstalovaného (včetně aplikacı́) referenčnı́ho počı́tače.
Windows PE se hodı́ při vytvořenı́ bitové kopie referenčnı́ho počı́tače. Může být bud’ na optickém
médiu (většinou CD) nebo na USB flash disku, prostředı́ PE spustı́me nabootovánı́m z tohoto
datového média. Pokud nemáme (Windows PE obvykle bývá k dispozici na instalačnı́m DVD
Windows), můžeme je vytvořit na počı́tači s nainstalovanou Vistou nebo vyššı́ verzı́ Windows:
1. Instalujeme Windows AIK.
2. Zvolı́me Start ï Programy ï MS Windows AIK a zvolı́me položku pro nástroje Windows PE
(pokud pracujeme s nižšı́mi přı́stupovými oprávněnı́mi, tak na tuto položku klepneme pravým
tlačı́tkem myši a zvolı́me spuštěnı́ s právy administrátora).
3. V přı́kazovém řádku PE, který se spustı́, použijeme přı́kaz
copype i86 c:\winpe
(platı́, pokud máme variantu pro 32bitovou hardwarovou architekturu; jestliže jde o variantu
pro 64bitovou architekturu, použijeme mı́sto i86 volbu amd64 nebo ia64 podle typu procesoru), můžeme použı́t také jinou cestu k výslednému obrazu. V zadané složce se vytvořı́
adresářová struktura, ve které najdeme prostředı́ Windows PE (winpe.wim) a také bootovacı́
informace.
4. Do obrazu přidáme nástroj ImageX:
• WIM soubor s obrazem připojı́me, abychom ho mohli modifikovat:
imagex /mountrw c:\winpe\winpe.wim 1 c:\winpe\mount
(připojujeme pro čtenı́ i zápis – /mountrw, dále zadáváme soubor s obrazem, následuje
čı́slo 1 znamenajı́cı́ prvnı́ obraz v tomto souboru – v jednom WIM souboru může být vı́ce
obrazů, obraz připojı́me do složky c:\winpe\mount),
• přidáme do obrazu program imageX:
copy C:\WAIK\tools\x86\imagex.exe c:\winpe\mount\windows\system32
(přı́padně napı́šeme správnou cestu k imagex.exe, pokud je jiná),
• stejným způsobem zkopı́rujeme soubor wimscript.ini, použijeme stejná umı́stěnı́ jako
v předchozı́m bodu (tento soubor je konfiguračnı́m souborem pro imagex.exe),
• obraz odpojı́me přı́kazem
imagex.exe /unmount /commit c:\winpe\mount
5. Pokud chceme vytvořit bootovacı́ CD, musı́me nejdřı́v stanovit, že obraz prostředı́ Windows
PE má být zároveň bootovacı́m programem (tj. spustı́ se po nabootovánı́ z média):
copy c:\winpe\winpe.wim c:\winpe\iso\sources\boot.wim /y
6. vytvořı́me ISO soubor, který pak lze vypálit na CD:
oscdimg -n -h -bc:\winpe\etfsboot.com c:\winpe\iso c:\winpe\winpe.iso
(program oscdimg je součástı́ Windows AIK). Vytvořený ISO obraz vypálı́me na CD v kterémkoliv programu, který to umı́ (napřı́klad ImgBurn).
Bod 4 provedeme jen tehdy, pokud chceme do obrazu něco přidávat, jinak je nepovinný. Jestliže
chceme mı́t Windows PE na USB flash disku mı́sto na CD, použijeme postup popsaný na stránce
$
6.3
INSTALACE WINDOWS
182
http://www.svrops.com/svrops/articles/winvistape2.htm nebo v přı́kladu 5.2 na straně 151 v těchto
skriptech – jde o nahrazenı́ poslednı́ho bodu postupu úpravou USB flash disku a následným zkopı́rovánı́m potřebných souborů.
Sysprep bylo nutné do staršı́ch verzı́ (Windows XP, Server 2003 a staršı́ch) doinstalovat, od verze
Windows Vista a Server 2008 je již součástı́ systému a najdeme jej ve složce ...\System32\Sysprep.
Hlavnı́m účelem nástroje Sysprep je odstranit všechny specifické informace (SID, dodatečně
nainstalované ovladače Plug&Play zařı́zenı́, body obnovy, atd.), většinou v přı́pravě systému pro
pořı́zenı́ obecně použitelné bitové kopie.
$
Obrázek 6.3: Nastavenı́ nástroje Sysprep (česká a anglická verze)
Tento nástroj lze spouštět jak v textovém, tak i v grafickém režimu (grafické rozhranı́ české
a anglické varianty vidı́me na obrázku 6.3). Podrobný popis nástroje najdeme napřı́klad na stránce
http://www.windowsnetworking.com/articles tutorials/Deploying-Vista-Part5.html.
Okno nástroje Sysprep obsahuje tři prvky:
• v rozbalovacı́m seznamu určujeme, zda chceme systém spustit v auditovacı́m režimu (audit
mode; je určen pro OEM prodejce, v tomto režimu lze měnit nastavenı́ instalace a ze souboru
odpovědı́ se načı́tajı́ předevšı́m sekce obsahujı́cı́ v názvu řetězec „audit“), a nebo spustit uvı́tacı́
centrum při dalšı́m startu systému (tuto volbu vidı́me na obrázcı́ch, zvolı́me ji),
• můžeme zaškrtnout pole, které provede zobecněnı́ (generalizaci) – zaškrtneme (protože chceme
odstranit všechny specifické informace),
• určı́me, co se má dı́t při ukončenı́ nástroje Sysprep – restart, vypnutı́ nebo nic (zvolı́me některou
z prvnı́ch dvou možnostı́).
Pokud budeme výsledný obraz načı́tat v prostředı́ Windows PE, předem zasuneme datové médium
s Windows PE a v poslednı́ volbě zadáme restart, jestliže chceme obraz načı́tat po sı́ti, zvolı́me
vypnutı́ a v BIOSu nastavı́me bootovánı́ ze sı́tě.
Úkoly
1. Najděte na internetu seznam nástrojů, které jsou součástı́ Windows AIK (můžete zkusit napřı́klad řetězec windows aik site:technet.microsoft.com na Googlu).
C
6.3
INSTALACE WINDOWS
183
2. Najděte na internetu podrobný popis nástroje imagex (včetně parametrů přı́kazu), je možné
použı́t podobný způsob zı́skánı́ informacı́ jako v předchozı́m bodu.
3. Zjistěte, které nástroje jsou obsaženy ve Windows PE (můžete zkusit napřı́klad vyhledávacı́
řetězec windows pe tools site:technet.microsoft.com na Googlu).
4. Vzpomeňte si, k jakým typům úloh lze použı́t Windows PE a jak se vlastně spouštı́ a použı́vá
(o Windows PE jsme slyšeli už v minulém semestru). Pokud máte možnost, vytvořte si vlastnı́
Windows PE s nástroji, které uznáte za potřebné.
R
5. Na internetu (napřı́klad na výše uvedené adrese) zjistěte, jaké přepı́nače lze u nástroje Sysprep
zvolit, pokud je použı́ván v textovém režimu (přepı́nače odpovı́dajı́ volbám, které zde byly
popsány). Sestavte přı́kaz odpovı́dajı́cı́ nastavenı́m popsaným pro grafický režim nástroje.
R
6.3.3
Instalace Visty a novějšı́ch verzı́
Pokud instalujeme na počı́tač, u kterého přı́mo sedı́me, stačı́ instalačnı́ DVD (nebo instalačnı́ USB
flash disk, jak bylo naznačeno výše, přı́prava flash disku je v přı́kladu 5.2 na straně 151).
Mnohé ze sekce o instalaci Windows XP platı́ i pro instalaci Windows Vista. Můžeme bud’ provést
čistou instalaci, inovaci (s určitými problémy) nebo instalaci vedle jiného operačnı́ho systému. Taktéž
nutnost aktivace zůstává zachována.
Windows Vista majı́ přepracované jádro a z toho důvodu se lišı́ také instalace. Jádro je od této
verze silně inspirováno unixovými systémy – je modulárnı́ a vlastnosti výsledné varianty k instalaci
jsou určeny poskládánı́m jednotlivých modulů. Samotný princip instalace je inspirován principem,
který se objevil o několik let dřı́ve u některých linuxových distribucı́ – živé (bootovacı́) médium
umožňuje během instalace běžně pracovat. V přı́padě Windows je použito prostředı́ Windows PE
2.0 (a novějšı́), které může být jednı́m z modulů.
Jak bylo výše uvedeno, Windows jsou od verze Vista distribuovány na DVD ve formátu WIM.
Jedná se vlastně o obraz disku, který je komprimovaný (pomocı́ různých postupů je zmenšena jeho
velikost) a neredundantnı́ (každá informace je zde jen jednou, i když po instalaci může být na disku
na vı́ce různých mı́stech).
Zatı́mco jiné typy obrazů jsou strukturovány podle stop na médiu, WIM je strukturován podle
souborů (modulů). Soubory s přı́ponou WIM jsou technicky vlastně archivy podobně jako ZIP,
každý může obsahovat i několik tzv. obrazů (obvykle souborů nebo jiných typů dat).
WIM
Existujı́ pouze dvě varianty instalačnı́ho DVD – 32bitová a 64bitová podle toho, pro jakou
hardwarovou architekturu je DVD určeno. To znamená, že DVD obsahuje všechny existujı́cı́ moduly
pro danou hardwarovou architekturu a lze je použı́t pro instalaci kterékoliv varianty Windows
(Home, Ultimate, atd.). Moduly z obrazu, které se majı́ nainstalovat, jsou stanoveny při instalaci
podle typu zakoupené licence (podle Product Key, který uživatel obdržel při koupi). Pokud Product
Key nenı́ během instalace zadáván, vybı́ráme variantu ze seznamu během instalace.
Lze také použı́t automatizovanou instalaci. Potřebujeme bud’ jeden referenčnı́ (vzorový) počı́tač,
který je kompletně nainstalovaný a nakonfigurovaný včetně instalace aplikacı́, a nebo instalačnı́
médium (pokud netrváme na automatizaci instalace aplikacı́).
P
6.3
INSTALACE WINDOWS
184
Soubor odpovědı́ je od verze Vista ve formátu XML s obvyklým názvem unattend.xml nebo
autounattend.xml.
Podı́váme se na dvě možnosti bezobslužné instalace.
Bezobslužná instalace z DVD znamená instalaci s využitı́m instalačnı́ho média (DVD) a souboru
odpovědı́. Celý postup je následujı́cı́:
1. Stáhneme a nainstalujeme Windows AIK. Spustı́me výše popsaný nástroj SIM a připojı́me
instalačnı́ DVD Windows (bud’ vložı́me do mechaniky nebo připojı́me jeho obraz do virtuálnı́
mechaniky).
2. Na instalačnı́m DVD najdeme složku sources a v nı́ soubor install.wim. Zkopı́rujeme ho
někam na pevný disk, předpokládejme umı́stěnı́ c:\sources\install.wim.
3. Stanovı́me bitovou kopii, pro kterou budeme vytvářet soubor odpovědı́:
• V SIM, podokně Bitová kopie, klepneme pravým tlačı́tkem na položku Vyberte bitovou kopii
a v kontextovém menu zvolı́me Vybrat bitovou kopii.
• V dialogovém okně najdeme cestu k souboru install.wim, který jsme uložili na pevný
disk (zde c:\sources\install.wim). Otevře se okno se seznamem bitových kopiı́, které
jsou k dispozici (odpovı́dajı́ variantám Windows pro danou verzi). Vybereme variantu,
kterou potřebujeme (na kterou máme licenci).
• Může se zobrazit upozorněnı́, že pro vybranou bitovou kopii ještě nenı́ vytvořen soubor
katalogu, což provedeme (klepneme na tlačı́tko Ano , resp. OK v tomto okně).
4. Začneme vytvářet soubor odpovědı́ autounattend.xml tak, že v SIM v podokně Soubor odpovědı́ klepneme pravým tlačı́tkem na položku Vytvořit nebo otevřı́t soubor odpovědı́ a vybereme
Nový soubor odpovědı́.
5. Naplnı́me soubor odpovědı́ tak, že v podokně Bitová kopie tak, že postupně projdeme položky
zde uvedené (jsou ve stromové struktuře) a na ty, které budeme chtı́t zařadit, klepneme pravým
tlačı́tkem myši. V zobrazeném kontextovém menu klepneme na konkrétnı́ položku, kterou
chceme vložit do souboru odpovědı́. Takto můžeme napřı́klad stanovit, jak se má rozdělit
pevný disk apod.
6. Položka, kterou jsme vybrali v podokně Bitová kopie, se objevı́ i v podokně Soubor odpovědı́,
taktéž ve stromové struktuře. Procházı́me jednotlivé položky; po klepnutı́ na položku se ve
vedlejšı́m podokně Vlastnosti zobrazı́ konkrétnı́ vlastnosti vybrané položky, které můžeme
pozměnit.
7. Po provedenı́ všech potřebných změn uložı́me vytvořený soubor odpovědı́ pod názvem
autounattend.xml na pevný disk a pak zkopı́rujeme na disketu nebo USB flash disk, a to do
kořenového adresáře (nesmı́ být v žádné složce!).
(Přesun k cı́lovému počı́tači)
8. Na počı́tači, kde chceme provést tento typ instalace, vložı́me do přı́slušné mechaniky/konektoru
disketu nebo USB flash disk se souborem odpovědı́.
9. Dále do DVD mechaniky vložı́me instalačnı́ DVD Windows.
P
6.3
INSTALACE WINDOWS
185
10. Restartujeme tento počı́tač a necháme proběhnout instalaci. Soubor odpovědı́ by měl být
automaticky rozpoznán a použit. Kdyby došlo k nějaké chybě (napřı́klad kdyby nebylo správně
detekováno médium se souborem odpovědı́, probı́hala by instalace klasickým způsobem,
zadávali bychom všechny informace „ručně“.
Bezobslužná instalace podle referenčnı́ho počı́tače představuje možnost nainstalovat a nakonfigurovat referenčnı́ počı́tač (včetně instalace aplikacı́), vytvořit bitovou kopii takto nakonfigurovaného
systému a použı́t pro instalaci dalšı́ch počı́tačů. Oproti předchozı́mu postupu je výhodou instalace
„hotového“ systému na všechny počı́tače.
Předně potřebujeme referenčnı́ (výchozı́) počı́tač s nainstalovaným operačnı́m systémem a všemi
aplikacemi, nakonfigurovaný. Tento počı́tač nebude v dané instalaci použı́ván pro běžnou práci,
protože v následujı́cı́m postupu z něj budou některé důležité informace odstraněny. Postup:
1. Nainstalujeme a nakonfigurujeme referenčnı́ počı́tač. Ručně smažeme vše, co nelze zpracovat
jinak a přitom to v bitové kopii nechceme (napřı́klad některé aplikace, nepotřebné uživatelské
účty, dočasné soubory apod.).
2. Vytvořı́me soubor odpovědı́ stejným způsobem, jak bylo popsáno v předchozı́m textu (můžeme
ho nazvat napřı́klad sysprep.xml, je to celkem jedno). Soubor odpovědı́ můžeme vytvořit na referenčnı́m počı́tači, ale protože je k tomu obvykle třeba Windows AIK, většinou
jej vytvářı́me jinde (třeba na serveru). Několik ukázek takového souboru je napřı́klad na
http://www.svrops.com/svrops/articles/sysprepvista.htm.
3. Soubor odpovědı́ umı́stı́me na referenčnı́ počı́tač do adresáře ...\System32\Sysprep.
4. Na referenčnı́m počı́tači spustı́me nástroj Přı́prava systému (Sysprep) popsaný na straně 182.
Sysprep připravı́ tento počı́tač pro vytvořenı́ bitové kopie – odstranı́ všechny „specifické“ informace (identifikátory HW a SW, autentizačnı́ informace apod.). Jedná se o nástroj s grafickým
rozhranı́m (vidı́me na obrázku 6.3), ve kterém provedeme tyto kroky:
• zaškrtneme pole Zobecnit (Generalize),
• v rozbalovacı́m seznamu Akce čištěnı́ systému (System Cleanup Action) zvolı́me Zobrazit
prostředı́ při prvnı́m zapnutı́ počı́tače (Enter System Out-of-Box Experience (OOBE))
• v rozbalovacı́m seznamu Možnosti vypnutı́ (Shutdown Options) necháme volbu pro restart.
To vše můžeme souhrnně provést přı́kazem
sysprep /oobe /generalize /shutdown /unattend:sysprep.xml
(zadáme takový název souboru odpovědı́, který jsme vytvořili).
5. Po restartu nabootujeme Windows PE (měli bychom se předem přesvědčit, že v BIOSu je
nastaveno jako prvnı́ bootovánı́ z datového média, na kterém máme Windows PE).
6. Vytvořı́me obraz referenčnı́ho počı́tače pomocı́ nástroje XImage, který je součástı́ Windows
AIK, a pokud jsme Windows PE vytvořili výše popsaným způsobem, tak tento nástroj máme
k dispozici ve Windows PE. Ted’ záležı́ na tom, kam vlastně chceme obraz uložit. Může to být
na výměnné médium, ale je třeba počı́tat s tı́m, že půjde o poměrně mnoho dat.
• Jestliže chceme obraz ukládat na sı́t’, měli bychom se nejdřı́v připojit k serveru, který bude
úložištěm:
net use Z: \\server\adr_instalace /user:doména\uživatel
P
6.3
INSTALACE WINDOWS
186
(přı́kaz net jsme se učili na straně 31), zadali jsme pı́smeno, pod kterým má být sı́t’ový
disk připojen, pak server a adresář na něm (doplnı́me podle skutečnosti), dále je důležité
se na serveru přihlásit pod uživatelským jménem s dostatečně vysokými přı́stupovými
oprávněnı́mi k zadanému adresáři, také doplnı́me podle skutečnosti. Budeme požádáni
o zadánı́ hesla.
• Pokud chceme obraz uložit na výměnné médium, stačı́ ho připojit (pro zjednodušenı́
budeme předpokládat, že je také dostupné pod pı́smenem Z:. Také by mohl nastat problém
se souborovým systémem – napřı́klad na USB flash disk nelze ukládat tak velké soubory,
pokud je naformátován souborovým systémem FAT (což obvykle je), takže bychom jej
měli předem naformátovat na NTFS. V takovém přı́padě by bylo lepšı́ použı́t spı́še externı́
pevný nebo SSD disk s vhodným souborovým systémem.
7. Obraz systému vytvořı́me přı́kazem
imagex /capture c: z:\winXXX.wim ”Komentář” /compress maximum /check
(capture znamená zachytit), což znamená, že vytvářı́me co nejvı́ce komprimovaný obsah disku
C:, ukládáme do zadaného WIM souboru a chceme provést kontrolu integrity výsledného souboru (poslednı́ parametr). Komentář může usnadnit rozpoznávánı́, pokud máme vytvořeno
vı́ce obrazů. Soubor můžeme pojmenovat jakkoliv (jen přı́pona je důležitá), pı́smena XXX mohou být třeba verze Windows nebo bližšı́ určenı́ typu klienta.
Pokud ukládáme na sı́t’, nemusı́me použı́t syntaxi s pı́smenem jednotky, ale můžeme napsat
UNC cestu (pak je zbytečné připojovat sı́t’ový disk k jednotce přı́kazem net use z předchozı́ho
bodu, ovšem zadánı́ hesla se nevyhneme).
(Přesun k cı́lovému počı́tači nebo přı́stup přes sı́t’)
8. Na cı́lovém počı́tači opět nabootujeme Windows PE a připojı́me úložiště, na kterém máme
uložen obraz systému (sı́t’ový disk nebo výměnné médium).
9. Pokud je to nutné (často je), vytvořı́me na disku oddı́l pro instalaci. Pro tento účel můžeme
použı́t přı́kazy diskpart (vytvořenı́ oddı́lu) a format (vytvořenı́ souborového systému, pravděpodobně NTFS). S oběma nástroji jsme se seznámili v předchozı́ch kapitolách.
10. Aplikujeme (načteme) sejmutý obraz, který jsme vytvořili na referenčnı́m počı́tači:
imagex /apply z:\winverzexxx.wim ”Komentář” c:
(všimněte si, že posloupnost parametrů určujı́cı́ch WIM soubor a disk je opačná oproti posloupnosti při použitı́ přepı́nače /capture).
Nástroj ImageX lze použı́vat kromě jiného i pro offline práci s vytvořeným obrazem. Obraz připojı́me
do souborového systému parametrem /mountrw (podrobnosti v nápovědě přı́kazu), pak s nı́m
pracujeme napřı́klad v Průzkumnı́kovi (můžeme přidávat nebo odstraňovat soubory, aktualizovat
apod.), po provedených změnách musı́me obraz odpojit parametrem /unmount.
Bitovou kopii referenčnı́ho počı́tače můžeme vytvořit a přenést na sı́t’ také jinak než pomocı́
nástroje ImageX – s využitı́m služby WDS.
Úkoly
1. Zjistěte, co vše lze dělat pomocı́ ImageX (jaké má parametry apod.).
C
6.4
AKTUALIZACE SYSTÉMU
187
2. Nemusı́te znát výše popsané postupy do podrobna, ale shrňte si, co vše k bezobslužným
instalacı́m potřebujete.
3. OEM prodejci často využı́vajı́ OOBE (Out-Of-Box Experience) pro úpravy instalace Windows,
také existuje možnost vytvořit soubor oobe.xml (pro Windows od verze Vista). Pokuste se
zjistit (třeba na internetu), co vše lze takto ovlivňovat. Dobrým zdrojem může být napřı́klad
adresa http://www.windowsnetworking.com/articles tutorials/Deploying-Vista-Part9.html,
kde najdeme velmi zajı́mavý seriál o nasazenı́ Windows Vista (a novějšı́ch verzı́).
6.3.4
R
Služba pro nasazenı́ systému Windows (WDS)
Služba pro nasazenı́ systému Windows (WDS, Windows Deployment Service) je nástupcem služby
RIS ve Windows od verze Vista. Narozdı́l od bezobslužné instalace z DVD umožňuje instalovat také
po sı́ti, a narozdı́l od staršı́ služby RIS je odstraněna závislost na hardwaru (lze instalovat i na počı́tače
s různým hardwarovým vybavenı́m, s pouhým rozlišenı́m na 32- nebo 64bitovou architekturu).
P
Stejně jako RIS, také WDS je služba na straně serveru, musı́me tedy mı́t v sı́ti server Windows
Server 2008 nebo novějšı́. V sı́ti je vyžadováno funkčnı́ Active Directory, DHCP a DNS server.
Aby WDS mohla řádně fungovat, musı́ být na serveru nainstalována a musı́ obsahovat
• alespoň jednu spouštěcı́ bitovou kopii, která sloužı́ ke startu klientského počı́tače přes sı́t’(lze
pracovat na klientovi, i vzdáleně, ale systém běžı́ na serveru), ale také např. k řı́zenı́ instalace
klientského počı́tače z některé instalačnı́ bitové kopie, nemusı́me vytvářet Windows PE,
• alespoň jednu instalačnı́ bitovou kopii (z té se instalujı́ klientské počı́tače).
Ve Windows Server 2008 se pracuje s rolemi, z nichž jedna je také WDS. Tedy instalace WDS probı́há
přidánı́m této role. Instalujeme běžným způsobem jako cokoliv jiného – na serveru máme k dispozici
jakousi hlavnı́ grafickou konzolu Správce serveru (Server Manager) dostupnou hned z tlačı́tka Start,
v této konzole najdeme instalovánı́ nové role a několika klepnutı́mi myšı́ přidáme roli WDS.
Popis činnosti a správy WDS je nad rámec těchto skript, proto nezbývá než odkázat na literaturu
(vše je popsáno prakticky v každé knize určené pro správce Windows serveru). WDS dokáže ulehčit
mnohé z úkolů, které jsme probı́rali výše o instalaci Windows.
O instalaci Windows najdeme dalšı́ informace na adresách
http://drnek.spaces.live.com/blog/cns!509D00E35B2D7B2C!198.entry
http://technet.microsoft.com/en-us/library/cc749003%28WS.10%29.aspx
http://technet.microsoft.com/en-us/library/cc749447%28WS.10%29.aspx
6.4
Aktualizace systému
Podpora aktualizacı́ je součástı́ rozhranı́ Windows od verze 98, pod názvem Windows Update –
v novějšı́ch verzı́ch českých variant systému Automatické aktualizace. Microsoft stanovil druhé úterý
každého měsı́ce pro den pravidelných bezpečnostnı́ch záplat (tomu dni se také řı́ká „Patch Day“,
den záplat), ale bezpečnostně závažné záplaty jsou distribuovány i mimo tyto dny.
O
6.5
CHYBY PŘI BĚHU APLIKACÍ A SYSTÉMU
188
Z předchozı́ho semestru už vı́me, jaké typy aktualizacı́ Windows existujı́ a jak lze řı́dit jejich
využı́vánı́ na lokálnı́m počı́tači.
Jestliže však ve většı́ organizaci chceme zajistit aktualizaci všech počı́tačů v sı́ti, nenı́ vhodné
nechávat každého uživatele zvlášt’stahovat aktualizace ze serveru Microsoft Update.
Obvyklým řešenı́m je stanovenı́ lokálnı́ho serveru WSUS (Windows Server Update Services),
který stahuje aktualizace z webu Microsoftu a dále je distribuuje v lokálnı́ sı́ti. Server WSUS (samozřejmě softwarový server, ne kus hardwaru) lze stáhnout ze stránek http://technet.microsoft.com/enus/wsus/default.aspx. Na téže stránce najdeme také návod k instalaci (dokonce v češtině).
Samotnou instalacı́ nás provázı́ průvodce (můžeme instalovat bud’ z grafického režimu formou
přidánı́ role, a nebo jendoduše spuštěnı́m instalačnı́ho souboru), tedy jen potvrzujeme a zadáváme
přı́padné pozměňujı́cı́ informace. Měli bychom si předem rozmyslet, kam budou ukládány aktualizace stáhnuté z internetu (dostatečně velký adresář nebo disk), také bychom měli vědět, který
webový server máme nainstalován (to administrátoři obvykle vědı́) a který databázový systém
použı́váme (stačı́ napřı́klad MySQL). Někdy je nutné upravit firewall a proxy server (pokud je použı́váme) tak, aby WSUS server měl bezproblémový přı́stup k aktualizacı́m na webu Microsoftu.
Použı́vajı́ se porty 80 (pro HTTP) nebo 443 (pro HTTPS a SSL).
Konfigurace stahovánı́ aktualizacı́ (které balı́čky se majı́ stahovat včetně jazykových verzı́ a verzı́
systému, jak často apod.) se provádı́ obvykle v konzole Update Services na serveru WSUS. Je to běžná
konzola s unifikovaným grafickým rozhranı́m, jaké známe napřı́klad z konzoly Správa počı́tače
(compmgmt.msc).
Dále je nutné nakonfigurovat klientské počı́tače v sı́ti. Nejobvyklejšı́ možnostı́ je využitı́ zásad
skupiny (v minulém semestru jsme se s nimi seznámili spı́še na lokálnı́m počı́tači, ale jde o zásady
použitelné předevšı́m na úrovni lokálnı́ sı́tě). V konzole Zásady skupiny (mı́stně nebo vzdáleně na
lokálnı́m počı́tači) vybereme v části konfigurace počı́tače větev Šablony pro správu, podvětev Součásti
systému Windows a najdeme Windows Update (pokud tam nenı́, musı́me importovat soubor wuau.adm
přes kontextové menu položky Šablony pro správu). V tomto uzlu nás zajı́majı́ položky
P
$
$
• Konfigurace automatických aktualizacı́ – poklepeme na položku, povolı́me, určı́me, zda se aktualizace majı́ přı́mo stahovat, nebo jestli se má pouze zobrazit upozorněnı́, atd.,
• Určenı́ umı́stěnı́ intranetové služby MS Update – poklepeme, povolı́me, zadáme adresu našeho
WSUS serveru (do obou polı́ – pro zjišt’ovánı́ aktualizacı́ i statistik).
Počı́tače v sı́ti lze rozdělit do skupin (to je ostatně obvyklé zvláště ve velkých sı́tı́ch) a použı́vat pro
ně různé konfigurace i co se týče aktualizacı́. Přes konzolu automatických aktualizacı́ na serveru
také můžeme kromě jiného sledovat stav aktualizacı́ na jednotlivých počı́tačı́ch.
Úkoly
1. Ověřte si, jak vlastně jsou nastaveny automatické aktualizace na vašem počı́tači – zda jsou
stahovány a instalovány automaticky.
2. Pokud na svém počı́tači nemáte v Zásadách skupiny položku Windows Update, importujte jejı́
ADM soubor výše popsaným způsobem.
3. Podı́vejte se, jak jsou v této položce nastaveny zásady, předevšı́m odkud stahujete aktualizace.
C
6.5
CHYBY PŘI BĚHU APLIKACÍ A SYSTÉMU
6.5
189
Chyby při běhu aplikacı́ a systému
Někdy se stane, že se aplikace při své práci dostane do nekonečné smyčky nebo dojde k uváznutı́ při
čekánı́ na prostředek (bude probı́ráno na přednáškách), a nereaguje. U Win aplikacı́ to poznáme ve
Správci úloh (známe z předchozı́ho semestru) označenı́m „neodpovı́dá“ u této aplikace. Ve Správci
úloh také můžeme tuto aplikaci násilně ukončit označenı́m aplikace a stisknutı́m tlačı́tka Ukončit
úlohu.
Pokud je některá aplikace spuštěna v celoobrazovkovém režimu (DOS aplikace, Flash, prezentace
– PowerPoint, Adobe Reader), a „zasekne se“ nebo nenabı́zı́ možnost pro své ukončenı́, přesuneme
se do Windows, kde se dá „zlikvidovat“:
Alt+Enter
Alt+Tab
Ctrl+Esc
O
$
(do okna), pak v kontextovém menu tlačı́tka aplikace na Hlavnı́m panelu zvolı́me Zavřı́t,
(přepnutı́ úlohy), podobně jako v předchozı́m přı́padě,
nebo (otevřenı́ menu Start), podobně jako v předchozı́ch přı́padech,
Ctrl+Alt+Del
nebo Ctrl+Shift+Esc zobrazı́me Správce úloh, v něm aplikaci ukončı́me.
Jestliže je poškozen některý z chráněných systémových souborů (nebo přepsán při instalaci nové
aplikace), lze ho opravit programem System File Checker. Tento program obnovuje systémové soubory
ze zálohy. Spustı́me ho přı́kazem sfc (vlastně ho už známe) při použitı́ vhodných parametrů (viz
nápovědu přı́kazu – napřı́klad je možné spustit okamžitou kontrolu, kontrolu při přı́štı́m spuštěnı́
Windows nebo pravidelnou kontrolu při každém spuštěnı́.
Modrá obrazovka („obrazovka smrti“, BSOD – Blue Screen of Death, podle terminologie Microsoftu
„obrazovka Stop“) se zobrazı́ při narušenı́ jádra systému (chybějı́cı́ nebo poškozená část systému,
zaseknutı́ systémové části, prováděnı́ některého kódu ve smyčce, spuštěnı́ vı́ce antivirových programů či firewallů zároveň, . . . ), někdy za to může virus. Modrou obrazovku generuje vždy jádro
systému.
Často je jedinou možnostı́ restart počı́tače. Pokud se tato obrazovka objevı́ při startu systému, je
to zřejmě způsobeno nesprávnou instalacı́ nebo konfiguracı́ některého zařı́zenı́. Řešenı́m je spustit
Windows v nouzovém režimu a prohlédnout protokol bootlog.txt nebo ntbtlog.txt.
Pokud se objevı́ modrá obrazovka, systém (s NT jádrem) vytvořı́ soubor výpisu stavu paměti, ze
kterého je možné zjistit přesnou přı́činu tohoto stavu (je použitelný také v přı́padě, že se nepodařı́
nastartovat systém, jen zkopı́rujeme soubor):
• omezený výpis paměti (ve složce Windows\Minidump na systémovém disku, zabı́rá jen 64 kB
paměti), obsahuje pouze zásobnı́k vlákna, které způsobilo pád jádra,
• výpis stavu paměti jádra (tamtéž, rozsáhlejšı́), obsahuje výpis paměti použı́vané jádrem,
• úplný výpis stavu paměti (v souboru Memory.dmp na systémovém disku, zabı́rá mı́sto odpovı́dajı́cı́ fyzické kapacitě operačnı́ paměti plus 1 MB) a obsahuje výpis paměti jak jádra, tak
i uživatelského prostoru (tj. všech běžı́cı́ch procesů).
O tom, který výpis bude generován, rozhodujeme pomocı́ nástroje Systém, záložka Upřesnit, Spuštěnı́
a zotavenı́ systému, tlačı́tko Nastavenı́ (nejobvyklejšı́ volbou je minidump, omezený výpis paměti).
Použitelný je také soubor Pagefile.sys na systémovém disku (stránkovacı́ soubor, obsahuje celou
logickou pamět’).
O
P
P
6.5
CHYBY PŘI BĚHU APLIKACÍ A SYSTÉMU
190
V souboru s výpisem paměti jako takovém bychom se jen těžko orientovali. Pro jeho analýzu se
použı́vajı́ nástroje na laděnı́ jádra. Informace najdete v přı́loze a nebo na adrese
http://www.zezula.net/cz/prog/pm os debug.html.
Jestliže se objevı́ chyba při startu Windows
z těchto způsobů:
(nelze nastartovat Windows), reagujeme některým
$
1. Použijeme některou možnost pro nouzový režim (stiskneme F8 při startu systému, viz str.
172), může to být i obnovenı́ pomocı́ Poslednı́ známé platné konfigurace.
V nouzovém režimu můžeme pro obnovenı́ systému použı́t mimo jiné i nástroj Obnovenı́
systému (od verze XP), obnovit registr ze zálohy, spouštět různé programy včetně nástrojů pro
konfiguraci a úpravu registru (samozřejmě podle typu spuštěnı́ nouzového režimu).
2. Spustı́me Konzolu pro zotavenı́ nebo Windows PE, platı́ pro systémy s NT jádrem).
3. Ve Windows NT 4.x a 2000 lze vytvořit disk se zálohou systému – Záchrannou a opravnou disketu
(v nástroji Zálohovánı́, možnost Záchranná opravná disketa), a to včetně registru, ten můžeme
vedle dalšı́ch možnostı́ opravy využı́t v Konzole pro zotavenı́, volba Opravit . . . pomocı́ procesu
záchranné opravy, možnost ručnı́ opravy. Záchranný disk musı́me předem vytvořit!!!
4. Ve Windows XP je možnost vytvořenı́ záchranné opravné diskety nahrazena možnostı́ Automatické obnovenı́ systému, dostupnou (kromě jiných umı́stěnı́) v nástroji Zálohovánı́ (ntbackup.exe).
Systém zálohujeme v době, kdy je funkčnı́ (také v nástroji Zálohovánı́).
Vytvořenou zálohu (datové médium s vlastnı́ zálohou a disketu se zálohou konfigurace disku)
máme možnost obnovit také v přı́padě, že se nepodařı́ spustit Windows: při spuštěnı́ počı́tače
nabootujeme z instalačnı́ho CD. Brzy po startu počı́tače (ještě v textové části instalace) se objevı́
(na krátkou dobu!) výzva „Stiskněte klávesu F5 pro spuštěnı́ Automatického obnovenı́ systému.“
Stiskneme klávesu F5 a dále provedeme to, co po nás proces bude chtı́t (předevšı́m bychom
měli mı́t připraven datový nosič se zálohou).
5. V systému s DOS jádrem můžeme nabootovat ze spouštěcı́ diskety. Tu vytvořı́me v nástroji
Přidat nebo odebrat programy, záložka Spouštěcı́ disketa.
Po naformátovánı́ můžeme na disketu zkopı́rovat pár nástrojů, které bychom mohli přı́padně
potřebovat, musı́ to být programy nezávislé na registru, DLL knihovnách apod. Takto vytvořená disketa neumožňuje přı́stup na disky NTFS (pokud neseženeme prográmek, který to
„zařı́dı́ “).
6. Použijeme jiné nástroje, které máme momentálně k dispozici (jsou také specializované nástroje
použitelné pro tyto účely).
Spouštěcı́ disketu pro bootovánı́ vytvořenou ve Windows 9x nebo ME lze ve skutečnosti použı́t i ve
Windows 2000/XP.
Můžeme ji dokonce v těchto systémech i vytvořit (i když při jejı́m použitı́ můžeme mı́t k dispozici
méně možnostı́ než u spouštěcı́ diskety vytvořené ve Windows s DOS jádrem), a to tak, že do
disketové mechaniky zasuneme disketu, zobrazı́me jejı́ kontextové menu (třeba v Průzkumnı́kovi)
a vybereme Naformátovat. V možnostech formátovánı́ použijeme volbu Vytvořit spouštěcı́ disketu MSDOS. Ve skutečnosti je to spouštěcı́ disketa Windows ME (po nabootovánı́ z této diskety si to ostatně
můžeme ověřit přı́kazem VER). Ukázka je na obrázku 6.4.
$
6.5
CHYBY PŘI BĚHU APLIKACÍ A SYSTÉMU
191
Obrázek 6.4: Vytvořenı́ spouštěcı́ diskety ve Windows XP
Startovacı́ diskety pro různé verze Windows jsou ke staženı́ na mnoha mı́stech na internetu, napřı́klad
na www.bootdisk.com (je tam také spousta dalšı́ch užitečných informacı́ včetně HowToGuides – „Jak
na to“).
Obsah standardnı́ startovacı́ diskety můžeme doplnit některými užitečnými programy, které se
mohou hodit, pokud Windows nelze spustit, přı́padně část obsahu nahradit jinými programy.
Doporučuje se napřı́klad přidat nástroje ntfsdos (http://www.sysinternals.com, pro read-only podporu NTFS disků), Shsucdx (http://www.geocities.com/jadoxa/shsucdx, podpora CD-ROM, náhrada mscdex.exe), přı́padně pkunzip.exe (a co se dá, předem zabalı́me do ZIP archivu, program
pkunzip to v přı́padě potřeby rozbalı́).
Chyby na ovladači: Ve Windows XP máme v přı́padě instalace chybného ovladače možnost vrátit
změny na ovladači. Ve Správci zařı́zenı́ (ten je dostupný v nástroji Systém, karta Hardware) najdeme
zařı́zenı́, které dělá problémy, zobrazı́me jeho vlastnosti a na kartě Ovladač použijeme tlačı́tko Vrátit
změny ovladače. To je samozřejmě použitelné pouze tehdy, když se dostaneme do grafického prostředı́ Windows, funkce má pouze odbourat nutnost ovladač ručně odinstalovat a nainstalovat ten
původnı́.
$
$
Jinou možnostı́ nápravy je návrat k poslednı́ funkčnı́ konfiguraci nebo nástroj Obnovenı́ systému.
Ovladače zařı́zenı́ mohou být v čerstvě uvedené verzi Windows velký problém. Za určitých
okolnostı́ je možné použı́t režim kompatibility pro ovladače – pokud je ovladač nebo alespoň jeho instalačnı́ program reprezentován spustitelným souborem, ve Vlastnostech zástupce tohoto programu
nastavı́me režim kompatibility tak, jak bylo výše popsáno.
Úkoly
1. Vyzkoušejte zobrazenı́ startovacı́ nabı́dky při startu operačnı́ho systému a prohlédněte si
položky zobrazované nabı́dky. Spust’te systém v nouzovém režimu.
C
6.6
SPRÁVA SOFTWARU
192
2. Zjistěte, jaký typ výpisu stavu paměti při modré obrazovce je generován a kam konkrétně se
ukládá. Zjistěte, zda má být systém při modré obrazovce automaticky restartován.
3. Zobrazte nápovědu programu System File Checker (sfc) a zjistěte, co znamená použitı́ přepı́načů
/quiet a /cancel.
4. Vyzkoušejte, jak je možné vrátit změny na ovladači nebo ovladač odinstalovat (nemusı́te
postup dovést až do konce).
5. Prohlédněte si seznam bodů obnovy, které jsou vytvořeny za poslednı́ týden.
6.6
Správa softwaru
6.6.1
Instalace aplikacı́
Většina aplikacı́ dnes nabı́zı́ instalačnı́ proces, který provede vše potřebné od detekce ovladačů přes
editaci registru a registraci DLL knihoven až po přesun adresářů a souborů na pevný disk. Tento
instalačnı́ proces si programátor bud’ vytvořı́ sám, a nebo využije některý existujı́cı́ program, který
pouze upravı́. Instalačnı́ programy využı́vajı́ do určité mı́ry službu Služba Windows Installer zabudovanou do Windows, ale jinak se jejich vlastnosti mohou hodně lišit.
Hodně použı́vaný je nástroj InstallShield Developer (http://www.installshield.com), který nabı́zı́
prakticky vše, co si programátor může přát, ale možná i z toho důvodu jsou použı́vány i jiné programy, napřı́klad taktéž velmi silný, ale přehlednějšı́ Wise Installation System (http://www.wise.com),
CreateInstall (http://www.createinstall.com), nebo Inno Setup (http://www.jrsoftware.org, freeware, je
velmi jednoduchý, třebaže použitelný).
Služba Windows Installer: Tato služba zaznamenává všechny změny, které jsou prováděny v systému během instalace aplikacı́ a zajišt’uje možnost vrátit provedené změny při nesprávně provedené instalaci (automaticky vytvářı́ body obnovy). Dokáže také zabránit některým konfliktům mezi
aplikacemi způsobeným aktualizacemi sdı́lené dynamické knihovny (dřı́ve nainstalované aplikace
mohou mı́t s touto knihovnou po aktualizaci problémy).
Některé aplikace (např. MS Word) využı́vajı́ i dalšı́ funkci této služby, a to instalace některých
součástı́ až při prvnı́m použitı́ (instalace „na vyžádánı́“ – součásti se při samotné instalaci produktu
nenainstalujı́, ale až ve chvı́li, kdy je některý uživatel chce poprvé použı́t, což může být nebezpečná
záludnost – kdo má mı́t pořád po ruce instalačnı́ médium?).
Automatizace instalace softwaru: Pomocı́ nástroje Zásady skupiny můžeme na počı́tačı́ch v doméně se službou Active Directory řı́dit instalaci následujı́cı́m způsobem: aplikaci neinstalujeme
osobně, ale „přenecháme tuto čest“ uživateli, i když mu neponecháme mnoho volnosti a proces
bude automatizovaný. Aplikaci můžeme
• přiřadit počı́tači – aplikace se tvářı́, jakoby byla již nainstalována, jejı́ odkaz je napřı́klad v menu
Start ï Programy, ale samotná instalace se spustı́ v okamžiku, kdy se uživatel počı́tače pokusı́
aplikaci poprvé použı́t.
P
$
P
P
6.6
SPRÁVA SOFTWARU
193
• přiřadit uživateli – podobně jako předchozı́, ale aplikace je „nasimulována“ v menu Start ï
Programy pouze při přihlášenı́ toho uživatele (a to v jakémkoliv počı́tači, ke kterému se může
přihlašovat), kterému je přiřazena, po „spuštěnı́“ se nainstaluje tak, aby byla dostupná tomuto
uživateli.
• publikovat – uživatel může sám rozhodnout, jestli si aplikaci nainstaluje; aplikace je uvedena
v nástroji Přidat nebo odebrat programy.
Pro instalaci můžeme na lokálnı́m počı́tači použı́t nástroj Přidat nebo odebrat programy z Ovládacı́ch panelů, ale pokud chceme instalovat ze serveru na klientské počı́tače, tento postup nenı́ moc
praktický.
K automatizované instalaci aplikacı́ můžeme ve Windows Server 2003 použı́t Systems Management
Server (SMS), a to během instalace systému i později. Tento způsob je vhodný zvláště pro rozsáhlé
instalace. SMS umožňuje při instalaci použı́vat obrazy – SMS vytvořı́ obraz referenčnı́ho počı́tače,
pak na tento počı́tač nainstalujeme aplikaci, SMS vytvořı́ znovu obraz a porovná rozdı́ly. Tyto rozdı́ly
jsou pak aplikovány při vzdálené instalaci téže aplikace na ostatnı́ch počı́tačı́ch v sı́ti.
$
Tato metoda se může zdát výhodná a někdy může ušetřit hodně času, ale poměrně často se při
takovéto instalaci aplikacı́ z obrazu setkáváme s problémy (instalace někdy nenı́ provedena zcela
korektně).
Od verze 2008 se mı́sto SMS použı́vá System Center Configuration Manager (ConfMgr, také SCCM).
6.6.2
Instalačnı́ soubory aplikacı́
Pokud chce aplikace využı́vat pokročilejšı́ možnosti služby Windows Installer, stačı́ vytvořit instalačnı́ soubor s přı́ponou MSI. Soubory MSI jsou instalačnı́ balı́čky, jde o obdobu instalačnı́ch balı́čků,
které známe z Linuxu. V těchto souborech bývá (skoro) všechno, co je třeba při instalaci aplikace,
ale MSI soubor může být doprovázen jednı́m nebo vı́ce soubory s přı́ponou CAB, ve kterých kromě
dat může být uložena bezpečnostnı́ informace (včetně digitálnı́ho podpisu).
P
Kromě msi jsou použı́vány ještě dalšı́ přı́pony, napřı́klad MSP pro záplaty (patch) nebo MST pro
transformace (tento soubor lze vytvořit zároveň se souborem MSI, obsahuje transformace, které je
nutné provést po instalaci, napřı́klad v registru, často jsou takto řešeny jazykové varianty).
Na Přı́kazovém řádku můžeme použı́t nástroj msiexec, který instaluje (nebo odinstaluje) zadaný
MSI balı́ček.
msiexec /?
zobrazı́ se okno (v grafickém režimu) s nápovědou
msiexec /i cesta\balı́ček.msi
nainstalujeme zadaný balı́ček
msiexec /x cesta\balı́ček.msi
odinstalujeme zadaný balı́ček
do zadaného LOG souboru se zapı́še
informace o průběhu instalace; tı́mto způsobem můžeme zjistit, proč instalace aplikace selhává
msiexec /i cesta\balı́ček.msi /L*V logsoubor.log
instalace balı́čku zadaného pomocı́
GUID (GUID zjistı́me napřı́klad v LOG souboru podle předchozı́ho přı́kazu), tento postup
někdy funguje i v přı́padě, že odinstalace aplikace se nedařı́ při zadánı́ názvu balı́čku
msiexec /x {56D35A37-90B7-45BC-B3AA-9C5233F8E3D7}
msiexec /ju cesta\balı́ček.msi
přiřadı́ (inzeruje) aplikaci uživateli (právě přihlášenému)
$
6.6
SPRÁVA SOFTWARU
msiexec /jm cesta\balı́ček.msi
194
přiřadı́ aplikaci všem uživatelům počı́tače (tj. počı́tači)
administrativnı́ (sı́t’ová) instalace – jsme dotázáni na mı́sto,
kam má být aplikace umı́stěna, a potom se balı́ček na zadaném mı́stě rozbalı́ podobně, jako
by se opravdu instaloval, ale neprovedou se žádné změny v systému (předpokládáme, že jde
o server, tedy aplikace nebude provozována na serveru), vytvořı́ se „menšı́“ MSI balı́ček, který
je již dostupný klientským počı́tačům (publikován)
msiexec /a cesta\balı́ček.msi
msiexec /a soubor.msi /p záplata.msp
použitı́ záplaty na aplikaci, která byla publikována
na sı́ti
Dalšı́mi přepı́nači lze napřı́klad podrobně řı́dit logovánı́, zakázat zobrazovánı́ grafického rozhranı́
instalátoru (pro bezobslužný mód instalace), apod.
Pomocı́ Active Directory můžeme instalovat po sı́ti takto:
• přihlásı́me se na server, který je doménovým řadičem Active Directory, a to jako Domain/Administrator,
• provedeme administrativnı́ instalaci (msiexec /a), ted’ by nám mělo být známo umı́stěnı́ MSI
souboru ve sdı́lené složce na tomto serveru (tato složka musı́ být přı́stupná všem klientům, na
kterých chceme instalovat),
• na serveru spustı́me MMC konzolu Group Policy Management (správa zásad skupiny), zobrazı́
se struktura položek, ve které najdeme Group Policy Objects (GPO),
• v kontextovém menu položky zvolı́me Nový (New), vytvořı́me nový GPO (vpodstatě jde o novou zásadu, která má být aplikována na zadané počı́tače), vhodně nazveme (podle instalované
aplikace),
• po vytvořenı́ musı́me GPO nastavit – klepneme na vytvořenou položku a nastavı́me vše, co
potřebujeme (v pravém podokně na všech záložkách), napřı́klad určı́me objekty, na které se
má zásada aplikovat (v našem přı́padě počı́tače),
• potom v kontextovém menu vytvořeného GPO zvolı́me Edit; otevře se konzola Group Policy pro
tuto položku, ve které najdeme Computer Configuration ï Software Settings ï Software Installation,
v kontextovém menu této položky zvolı́me New ï Package a najdeme MSI balı́ček, který jsme
vytvořili na začátku tohoto postupu,
• dále určı́me, jestli na balı́ček chceme aplikovat nějaké transformace (volba Advanced – rozšı́řené
možnosti nasazenı́), v tom přı́padě musı́me ve vlastnostech položky „nat’ukat“ přı́slušné volby
pro transformace, potvrdı́me,
• v konzole Group Policy pro námi vytvořený GPO ještě nastavı́me podrobnosti instalace –
najdeme Computer Configuration ï Administrative Templates ï Windows Components ï Windows
Installer a nastavı́me zde zásady podle našich požadavků (napřı́klad můžeme nastavit, že se
má aplikace instalovat se zvýšenými oprávněnı́mi apod.).
Možných postupů je vı́ce. Konkrétně pro jednotlivé produkty se můžeme podı́vat napřı́klad na
adresy
http://www.adobe.com/devnet/acrobat/pdfs/gpo ad 8.pdf
http://www.python.org/download/releases/2.4/msi/
6.6
SPRÁVA SOFTWARU
195
InstallShield vytvářı́ mı́sto MSI souborů spustitelné instalačnı́ EXE soubory. Hlavnı́ spustitelný
soubor instalace se většinou nazývá setup.exe a podporuje některé běžné přepı́nače (napřı́klad
pro vytvořenı́ souboru odpovědı́ setup.iss, bezobslužné instalace apod.).
$
pokud nemáme soubor odpovědı́, takto ho vytvořı́me (spustı́ se modelová instalace, ve které „naklikáme“ vše potřebné a všechna zvolená nastavenı́ se uložı́ do souboru
...\windows\setup.iss), vytvořený soubor odpovědı́ pak přesuneme do složky, ve které
máme instalačnı́ soubor setup.exe
setup.exe /r
pokud máme ve stejné složce i soubor odpovědı́ setup.iss, je takto spuštěna
bezobslužná instalace
setup.exe /s
Zajı́mavý článek o instalátorech aplikacı́ najdeme napřı́klad na
http://unattended.sourceforge.net/installers.php.
Úkoly
1. Zobrazte nápovědu přı́kazu msiexec a zjistěte, co vše lze během činnosti tohoto programu
ukládat do LOG souboru a jakým způsobem se tyto volby nastavujı́.
2. Na internetu zjistěte, jaké parametry (kromě výše uvedených) může mı́t setup.exe vytvořený
programem InstallShield.
6.6.3
C
R
IntelliMirror
Technologie IntelliMirror sloužı́ k centrálnı́ správě softwaru, uživatelských dat a nastavenı́ v lokálnı́
sı́ti. Většina možnostı́, které nabı́zı́, vyžaduje použı́vánı́ služby Active Directory, ale některé možnosti
mohou být použı́vány i v sı́ti bez Active Directory (samozřejmě potřebujeme sı́t’ se serverem, na
kterém je nainstalována některá serverová verze Windows od 2000).
P
Technologie IntelliMirror umožňuje napřı́klad
• konfiguraci nastavenı́ uživatelů a počı́tačů,
• nastavenı́ zabezpečenı́ v doméně,
• použı́vánı́ přihlašovacı́ch a odhlašovacı́ch skriptů,
• správu cestovnı́ch profilů,
• centrálnı́ instalaci a aktualizaci softwaru v sı́ti.
Jak bylo výše uvedeno, IntelliMirror je poměrně úzce svázán s Active Directory. S některými položkami Active Directory týkajı́cı́mi se IntelliMirror jsme vlastně už pracovali (napřı́klad v sekci
o instalaci softwaru to byly položky Administrative Templates, Software Installation apod.).
Centrálnı́ instalace a aktualizace softwaru: Tento úkol se provádı́ pomocı́ Zásad skupiny (Group Policy Management) ve službě Active Directory. Můžeme tak bez nutnosti fyzické návštěvy u konkrétnı́ho počı́tače instalovat software, inovovat na novou verzi, aktualizovat operačnı́ systém (opravné
balı́čky, bezpečnostnı́ záplaty). Ukázku jsme už viděli, můžeme software přiřadit či publikovat.
6.6
SPRÁVA SOFTWARU
196
Úkoly
Ne každý má přı́stup k serveru, ale některé z výše popsaných položek si můžeme prohlédnout
i na desktopové variantě Windows (kromě variant Home). Spustı́me Zásady skupiny (gpedit.msc)
a v Konfiguraci počı́tače (Computer Configuration) najdeme
• uzel Nastavenı́ softwaru (Software Settings) – je možné, že v něm nic nenı́,
• uzel Šablony pro správu ï Součásti systému Windows ï Služba Windows Installer (Administrative
Templates ï Windows Components ï Windows Installer) – podı́vejte se, jak jsou zde nastaveny
zásady.
C
Přı́lohy
pro pokročilé
Přı́loha
A
Laděnı́ programů a jádra Windows
Zde se budeme věnovat nástrojům usnadňujı́cı́m sledovánı́ a nalezenı́ chyb při běhu procesů, služeb, ovladačů
a samotného jádra.
A.1
Princip laděnı́
Debuggery jsou nástroje pro laděnı́ programů nebo jádra operačnı́ho systému. Ve Windows máme
k dispozici jako výchozı́ debugger Dr. Watson, ale rozsáhlejšı́ programovacı́ prostředı́ tento jednoduchý debugger nahrazujı́ vlastnı́m programem.
P
Laděnı́ jádra se použı́vá nejen ke sledovánı́ operacı́ v jádru probı́hajı́cı́ch a sdı́lených prostředků,
ale také tı́mto způsobem můžeme zjistit důvod chybného chovánı́ aplikace nebo ovladače. Přes
debugger se připojı́me k běžı́cı́mu procesu a máme možnost zkoumat (a ovlivňovat) jeho adresový
prostor a různé vlastnosti.
Laděnı́ jádra lze provádět různými nástroji, které si obvykle musı́me pro tento účel nainstalovat
– napřı́klad Windows Debugging Tools od Microsoftu (konkrétně nás zajı́má WinDbg nebo jeho textová
obdoba kd.exe) nebo LiveKD od Sysinternals. Oba tyto programy jsou volně ke staženı́ na serveru
Microsoftu.
A.2
Dr. Watson
DrWatson je aplikace, která může zjistit přı́činu chyb při běhu aplikacı́ včetně součástı́ systému. Je
dostupná v nástroji Systémové informace (Start ï Programy ï Přı́slušenstvı́ ï Systémové nástroje, v menu
Nástroje) nebo spuštěnı́m programu drwtsn32.exe. Použitı́ této aplikace má smysl předevšı́m pro
programátory, kteřı́ tak mohou své aplikace ladit, odchytávat chyby.
Dr. Watson ukládá všechny ladicı́ informace do protokolu (drwtsn32.log), který si pak programátor může
prohlédnout. Můžeme také určit, co se do protokolu bude
198
$
A.3 WinDbg
199
ukládat, napřı́klad zda se má pro moduly aplikace uložit
tabulka symbolů, kontexty procesů (viz kapitolu o procesech), apod.
Jak bylo výše poznamenáno, debugger Dr. Watson bývá často nahrazován jinými programy obvykle při instalaci rozsáhlejšı́ch programovacı́ch prostředı́. Který debugger je nastaven, zjistı́me v registru v klı́či HKLM/Software/Microsoft/Windows
NT/CurrentVersion/AeDebug v řetězcové hodnotě
Debugger, ve které je uložen nástroj s celou cestou. Pokud
chceme z nějakého důvodu dočasně využı́t program Dr.
Watson a pak se vrátit k právě nastavenému, provedeme
to takto:
$
• najdeme výše popsanou hodnotu v registru,
• exportujeme tento klı́č do REG souboru,
• na Přı́kazovém řádku nebo v menu Start ï Spustit
zadáme drwtsn32 -i
• použı́váme program Dr. Watson,
• vrátı́me do registru původnı́ nastavenı́ spuštěnı́m
REG souboru vytvořeného v druhém bodu tohoto
výčtu (třeba poklepánı́m na tento soubor).
Úkoly
1. Zjistěte, který debugger je na vašem počı́tači nastaven.
C
2. Spust’te okno aplikace Dr. Watson a zjistěte v něm, kam se ukládá soubor protokolu, kam se
ukládá stav systému, co vše se má uložit apod.
A.3 WinDbg
A.3.1
Instalace a nastavenı́ programu
Instalace: Předpokládejme, že budeme chtı́t použı́t program WinDbg. Na stránkách http://www.microsoft.com
zadáme do vyhledávacı́ho okýnka řetězec windbg , ve výsledcı́ch vyhledávánı́ zvolı́me hned prvnı́
možnost („Install Debugging Tools . . . “) a vybereme si verzi pro náš systém (nejnovějšı́, poměrně
často se měnı́). Stáhne se soubor s přı́ponou MSI, který spustı́me a projdeme instalacı́. V nabı́dce
Start ï Programy se objevı́ položka Debugging Tools for Windows ï WinDbg. Ve složce, do které byl
program nainstalován, je také textová obdoba programu kd.exe, která má prakticky stejné funkce,
až na grafické rozhranı́.
$
A.3 WinDbg
200
Úpravy:
Zprovozněnı́ programu zahrnuje několik úprav. Vytvořı́me adresář (složku) s názvem
symbols, a to někde v adresáři, do kterého se nainstaloval program, napřı́klad C:\Program Files\Debugging
Tools for Windows\symbols. Spustı́me WinDbg, v menu najdeme File ï Symbol File Path a zadáme
tento řetězec s cestou k vytvořenému adresáři symbols:
srv*C:\cesta_k_adresáři_symbols*http://msdl.microsoft.com/download/symbols
Napřı́klad (v adrese je opravdu msdl, ne msdn):
srv*C:\Program Files\Debugging Tools for Windows\symbols*http://msdl.mi,→ crosoft.com/download/symbols
Do zvoleného adresáře (předem vytvořeného) si debugger sám stáhne soubory, které
potřebuje pro laděnı́.
Předpokládá se, že máme přı́stup na internet, v opačném přı́padě musı́me vytvořit sady
symbolů „ručně“. Informace o způsobu vytvořenı́ sady symbolů najdeme v nápovědě.
Obrázek A.2: Vloženı́ adresy pro zı́skánı́ symbolů
do WinDbg
Pokud máte možnost, pokuste se nainstalovat a zprovoznit program WinDbg a vyzkoušejte dále
popsané postupy.
Úkoly
A.3.2
Práce se souborem výpisu při zhroucenı́ Windows
Pokud dojde k závažnému problému, jsou veškeré potřebné informace o průběhu selhánı́ zapsány
ve speciálnı́m souboru (obvykle memory.dmp). Název a umı́stěnı́ tohoto souboru najdeme podle
popisu v kapitole 6.5 v odstavci Modrá obrazovka na straně 189.
Následujı́cı́ postup lze provést jen tehdy, když soubor s výpisem stavu systému existuje (tj. když
nastala chyba v jádře a objevila se modrá obrazovka). V rozhranı́ WinDbg zvolı́me File ï Open Crash
Dump, najdeme daný soubor, jeho otevřenı́ trvá několik desı́tek sekund. Zobrazı́ se obsah daného
DMP souboru, najdeme ho na obrázku A.3 na straně 201.
Z tohoto základnı́ho výpisu lze zjistit pouze obecné informace. Na řádku „Probably caused
by“ najdeme název ovladače nebo modulu jádra, který pravděpodobně chybu způsobil, informace
o něm zobrazı́ přı́kaz lm popsaný v následujı́cı́ sekci. K podrobnějšı́m se dostaneme použitı́m
přı́kazu, který je nám ve výpisu doporučen (napı́šeme ho do řádku na spodnı́m okraji okna) –
přı́kaz začı́ná symbolem „!“ jako většina přı́kazů ve WinDbg:
!analyze -v
Dostaneme analýzu souboru výpisu, ze které je obvykle možné zjistit důvod havárie. Výpis je
zachycen na obrázku A.4. Je zde uveden název procesu, při jehož zpracovánı́ došlo k chybě (část
„PROCESS_NAME“), a také by nás měl zajı́mat výpis obsahu zásobnı́ku (část „STACK_TEXT“) tohoto
procesu. Ze zásobnı́ku totiž poznáme, které funkce byly právě ve zpracovánı́, když došlo k chybě.
C
A.3 WinDbg
201
Obrázek A.3: Načtenı́ DBG souboru do programu WinDbg
Zásobnı́k čteme odspoda. Z ukázkového výpisu vidı́me, že funkce s adresou 0x7c90eb94 uvnitř
adresového prostoru procesu zavolala funkci KiFastCallEntry v modulu nt (to je ntoskrnl), která
zavolala funkci NtDeviceIoControlFile v témže modulu, atd. Poslednı́ (na vrcholu zásobnı́ku) je
volánı́ chybového ovladače myfault.
Pokud přı́mo nedošlo ke zhroucenı́ jádra systému (modrá obrazovka), nenı́ standardně výpis
stavu systému generován. Když však přesto chceme takový soubor vytvořit, připojı́me se k lokálnı́mu jádru operačnı́ho systému (postup je popsán v sekci A.3.3) a použijeme v rozhranı́ WinDbg
přı́kaz
.dump /m c:\tmp\memory.dmp
(přı́padně jiný název souboru, tečka na začátku řádku je součástı́ přı́kazu). Přepı́nač /m způsobı́
vygenerovánı́ minimálnı́ho výpisu obsahu paměti (minidump), jiné přepı́nače zjistı́me zadánı́m
přı́kazu bez jakýchkoliv parametrů.
A.3.3
Práce ve WinDbg bez načtenı́ DBG souboru
A.3 WinDbg
202
Obrázek A.4: Výsledky analýzy DBG souboru ve WinDbg
Přı́kazový řádek debuggeru se zobrazı́ až po načtenı́
některého DMP souboru, a nebo po připojenı́ k jádru některého počı́tače. Ve Windows XP a Windows
Server 2003 (a vyššı́ch) máme možnost se připojit
i k lokálnı́mu jádru, ve staršı́ch verzı́ch však pouze
k jádru systému na jiném počı́tači.
Programu WinDbg tedy musı́me sdělit, že
chceme pracovat na lokálnı́m (nebo vzdáleném) počı́tači. V menu najdeme File ï Kernel Debug a zvoObrázek A.5: Funkce Kernel Debug
lı́me pro připojenı́ k lokálnı́mu jádru záložku Local,
pro připojenı́ k jádru na jiném počı́tači vybı́ráme mezi záložkami podle typu připojenı́ k tomuto
počı́tači (výchozı́ je COM, znamená to použitı́ COM portu nebo virtuálnı́ho sériového rozhranı́,
dalšı́ možnostı́ je 1394, což je FireWire rozhranı́, a nebo USB 2.0). Pak už se zobrazı́ okno, na jehož
spodnı́m konci můžeme zadávat přı́kazy – je na obrázku A.6. Zatı́mco při analýze dmp souboru byl
v přı́kazovém řádku prompt kd>, při laděnı́ lokálnı́ho jádra máme prompt lkd>.
Dále můžeme zadávat přı́kazy (některé začı́najı́ symbolem !, to jsou tzv. rozšı́řenı́). Napřı́klad
přı́kaz !process vypı́še informace o právě běžı́cı́m procesu. Pokud máme spuštěny spı́še interak-
$
A.3 WinDbg
203
Obrázek A.6: Kernel Debug na lokálnı́m počı́tači
tivnı́ procesy, tak se pravděpodobně vypı́še proces Idle (nečinný, ve skutečnosti nejde o proces) nebo
WinDbg, takže tento přı́kaz má smysl spı́še tehdy, když chceme zjistit, který proces dlouhodobě
zabı́rá procesor (napřı́klad se mohl dostat do nekonečné smyčky).
Na obrázku A.7 vidı́me výpis stavu běžı́cı́ho procesu s tı́m, že při prvnı́m provedenı́ přı́kazu
byl procesor přidělen procesu WinDbg, při druhém provedenı́ přı́kazu to byl program s obrazem
Lin.exe.
V tomto rozhranı́ můžeme použı́t i dalšı́ podobné přı́kazy, napřı́klad
!process 0 0
pro výpis všech aktivnı́ch procesů (dva parametry v hodnotě 0),
zobrazı́ detailnı́ informace o daném procesu
a jeho vláknech (musı́me zadat adresu procesu, kterou zı́skáme napřı́klad z výpisu předchozı́ho
přı́kladu, je to prvnı́ čı́selný údaj o každém procesu v seznamuk anebo jeho CID, které je také
součástı́ výpisu), viz obrázek A.8,
!process adresa_začátku_prostoru_procesu
!thread
pro výpis běžı́cı́ho vlákna,
pro výpis konkrétnı́ho vlákna, adresu zı́skáme z výpisu přı́kazu !process
s adresou procesu v parametru,
!thread adresa_vlákna
zobrazı́ obsah bloku PEB (něco jako PCB procesu), tedy soubor obrazu, načtené moduly, adresu heapu (haldy) procesu, hodnoty proměnných prostředı́ procesu,
atd., je nutné zadat adresu PEB, kterou zı́skáme napřı́klad pomocı́ přı́kazu
!peb adresa_peb_procesu
!process 0 0
zobrazı́ vlákna, která jsou ve stavu připraven (čekajı́ na procesor), pokud jsou spuštěny
spı́še interaktivnı́ procesy, je seznam obvykle prázdný,
!ready
vypı́še moduly (načtené i nenačtené) včetně obrazu (tj. názvu spustitelného souboru),
lm i
vypı́še veškeré dostupné informace o zavedených modulech – parametr o znamená „pouze
zavedené moduly“, parametr v určuje „upovı́daný mód“ (verbose), tedy vypı́še všechny dostupné informace,
lm ov
$
A.3 WinDbg
204
Obrázek A.7: Výpis stavu běžı́cı́ho procesu
lm e
vypı́še moduly, které majı́ problém se zavedenı́m symbolů (tento výpis by měl být pokud
možno prázdný, v opačném přı́padě je modul nesprávně naprogramován),
zobrazı́ podrobné informace o načteném modulu, zadáme vždy
adresu, která je na výpisu modulů (dle předchozı́ch přı́kazů) uvedena na začátku řádku jako
startovnı́,
!lmi adresa_začátku_modulu
A.3 WinDbg
205
Obrázek A.8: Informace o procesu
zobrazı́ informaci o kernel zásobnı́cı́ch spuštěných vláken, ve výpisu najdeme ID procesu a vlákna (tyto údaje jsou v prvnı́m sloupci odděleny tečkou), adresu vlákna, délku běhu,
stav a momentálnı́ adresu vrcholu zásobnı́ku,
!stacks
zobrazı́ seznam objektů výkonné části (sdı́lených), které jsou momentálně vlastněny,
všechny (i nepoužı́vané) zobrazı́me použitı́m s parametrem -d,
!locks
!vm
zobrazı́ podrobné informace o virtuálnı́ paměti (včetně jejı́ho využı́vánı́ jednotlivými procesy),
vypı́še veškeré informace o zadaném objektu typu token – token je objekt, ve kterém jsou uloženy bezpečnostnı́ informace (napřı́klad přı́stupová oprávněnı́, SID
souvisejı́cı́ch účtů a skupin apod.), čı́slo tokenu zı́skáme takto:
!token čı́slo_tokenu
• přı́kazem
!process 0 0
vypı́šeme seznam procesů, ve kterém najdeme ten proces, který nás zajı́má, zjistı́me jeho
CID,
• zjištěné CID použijeme jako parametr přı́kazu !process (jako jediný parametr), tam
najdeme řádek Token, na něm je čı́slo tokenu.
A.3 WinDbg
206
výpis hlavičky objektu (velká pı́smena u názvu struktury
musı́ být, také pozor na podtržı́tka), adresu objektu zı́skáme z různých výpisů; napřı́klad
pokud chceme vypsat informace o hlavičce objektu procesu (proces je také objekt), vypı́šeme
si informaci o daném procesu přı́kazem
dt _OBJECT_HEADER adresa_objektu
!process adresa_procesu
(adresu procesu zı́skáme dle výše uvedeného popisu tohoto přı́kazu), hledaná adresa objektu
je na řádku ObjectHeader. Přı́kaz bez zadánı́ adresy vypı́še pouze strukturu typu hlavičky
objektu.
!object \device
zobrazı́ seznam objektů typu zařı́zenı́, a to adresu, typ a název,
!devobj nějaké_zařı́zenı́ vypı́še informaci o objektu typu zařı́zenı́, zařı́zenı́ může být zadáno
adresou nebo (od Windows 2000) názvem, obojı́ zjistı́me z výpisu předchozı́ho přı́kazu,
!devstack nějaké_zařı́zenı́
vypı́še informace o objektech zařı́zenı́ přidružených k danému
zařı́zenı́,
vypı́še informace o zadaném ovladači; ovladač je zadán adresou,
kterou zı́skáme napřı́klad z výpisu přı́kazu
!drvobj nějaký_ovladač 7
!devobj
(údaj je označen jako DriverObject), čı́slo 7 na konci přı́kazu určuje, že se majı́ také vypsat
rutiny nabı́zené ovladačem včetně jejich přı́stupových bodů. Na obrázku A.10 je výstup tohoto
přı́kazu a předchozı́ch dvou, týká se jednoho z USB rozbočovačů.
Přı́kazů je mnohem vı́ce, jejich seznam a popis najdeme také v nápovědě dostupné z prostředı́
WinDbg.
Obrázek A.9: Výstup přı́kazů !stacks a !locks (prvnı́ výpis je velmi dlouhý, jeho část byla
odstraněna)
A.3.4
Funkce napojenı́ se na proces
A.3 WinDbg
207
Obrázek A.10: Výstup přı́kazů !devobj, !devstack a !drvobj
Někdy je třeba kontrolovat nebo ovlivňovat běh procesu
a jeho adresový prostor.
$
WinDbg nabı́zı́ tuto možnost, ale musı́me počı́tat s tı́m,
že běh procesu, na který se napojı́me, se značně zpomalı́. V menu nástroje WinDbg je volba File ï Attach to
a Process. Po jejı́m vybránı́ se zobrazı́ okno, ve kterém
se můžeme napojit na některý spuštěný proces. V okně
s procesy klepneme na proces, jehož běh nás zajı́má, jeho
PID se automaticky vložı́ do řádku pro výběr ID procesu.
Dále bychom měli klepnout na volbu Noninvasive,
která zajistı́, že adresový prostor procesu nebude debuggerem narušováno (ovšem při invazivnı́m napojenı́
máme možnost proces doopravdy ladit, tedy napřı́klad
kromě přidávánı́ breakpointů také měnit obsah registrů,
pamět’ových mı́st apod.). Při invazivnı́m napojenı́ je standardně po ukončenı́ laděnı́ proces automaticky ukončen.
Na obrázku A.11 je ukázka výběru neinvazivnı́ho napojenı́ na proces Kalkulačka (calc.exe).
Obrázek A.11: Napojenı́ na proces
A.3 WinDbg
208
Obrázek A.12: Zobrazená okna Command, Call Stack a Disassembly
Některé informace o běhu procesu můžeme zı́skat z oken, která lze otevřı́t přes nabı́dku View. Na
obrázku A.12 vidı́me otevřená okna Command (pro zadávánı́ přı́kazů debuggeru), Call Stack (obsah
kernel zásobnı́ku vláken) a Disassembly (zpětné přeloženı́ strojových instrukcı́ do assembleru). Dále
zde najdeme napřı́klad okno s obsahem registrů procesoru nebo okno s obsahem pamět’ové oblasti.
Také je k dispozici okno Watch pro sledovánı́ proměnných, které se použı́vá způsobem obvyklým
v běžných programovacı́ch prostředı́ch.
V menu také najdeme nabı́dku Debug. Některé položky nabı́dky jsou určeny spı́še pro invazivnı́
laděnı́, jiné lze použı́t i při neinvazivnı́m. Opět jde o běžné možnosti nabı́zené debuggery v programovacı́ch prostředı́ch. Je tady také volba Stop Debugging, kterou bychom měli správně ukončit
každé laděnı́ procesu.
Literatura
Základnı́ stránky o Windows:
[1] Microsoft Technet [online].
URL: http://technet.microsoft.com/
[2] Microsoft Support [online].
URL: http://support.microsoft.com
[3] Licence na Microsoft.com [online].
URL: http://www.microsoft.com/cze/licence/default.mspx
Dalšı́:
[4] AITKEN, P. G. Windows Script Host 2.0. Praha, Grada Publishing, 2001.
[5] ALLEN, R. – LOWE-NORRIS, A. G. Active Directory. Praha, Grada Publishing, 2005.
[6] BORN, G. Skriptujeme operace na PC pomocı́ Microsoft Windows Script Host 2.0. Brno, Computer
Press, 2001.
[7] HOLČÍK, T. Stručná historie Windows [online].
URL: http://www.zive.cz/clanky/strucna-historie-windows/sc-3-a-115491/default.aspx
[8] KAČMÁŘ, D. Programujeme v COM a COM+. Brno, Computer Press, 2000.
[9] Knihy s vývojářskou tematikou [online].
URL: http://www.microsoft.com/cze/msdn/csebooks/
[10] KRAVAL, I. – IVACHIV, P. Základy komponentnı́ technologie COM. Brno, Computer Press, 2001.
[11] KWOLEK, J. Problematika IRQ – sdı́lenı́, konflikty, PCI [online]. Živě.cz. Dostupné
na:
http://www.zive.cz/clanky/problematika-irq—sdileni-konflikty-pci/irq—what-the-hell/
sc-3-a-1399-ch-16552/default.aspx
[12] LAURIE, V. The Command Line in Windows [online].
URL: http://commandwindows.com/
209
210
[13] LOCKHART, E. Bezpečnost sı́tı́ na maximum. Brno, Computer Press, 2005.
[14] Microsoft Corporation. Microsoft Windows XP Professional Resource Kit. Brno, Computer Press,
2004.
[15] MOSKOWITZ, J. Zásady skupiny, profily a IntelliMirror ve Windows 2003, 2000 a XP. Brno, Computer
Press, 2006.
[16] MS-DOS [online].
URL: http://ms-dos.wz.cz/
[17] MS Windows Academic Program [online].
URL: http://www.microsoft.com/resources/sharedsource/windowsacademic/default.mspx
[18] OSIF, M. Windows Server 2003. Praha, Grada, 2003. Většina stran dostupná na
http://books.google.cz/books?id=FEbKcbgfKdIC&printsec=frontcover#v=onepage
[19] PHELPS, E. Using Rundll [online].
URL: http://www.ericphelps.com/batch/rundll/
[20] POKORNÝ, J. Úvod do .NET Framework. Brno, Computer Press, 2000. Soubory ke staženı́ na
knihy.cpress.cz/DataFiles/Book/00000896/Download/frameworknet.zip
[21] SOLOMON, D. A. Windows NT pro administrátory a vývojáře. Brno, Computer Press, 1999.
[22] STANEK, W. R. Přı́kazový řádek Microsoft Windows. Brno, Computer Press, 2005.
[23] Uniblue Process Library [online].
URL: http://www.liutilities.com/products/wintaskspro/processlibrary/
[24] Windows API Reference [online].
URL: http://msdn.microsoft.com/en-us/library/aa383749%28VS.85%29.aspx.
[25] Rob van der WOUDE. PowerShell [online].
URL: http://www.robvanderwoude.com/powershell.php
[26] ŽEMBER, M. Exploity [online].
URL: http://www.ms.mff.cuni.cz/˜zembm2am/exploity/exploity.html

Podobné dokumenty

Praktikum z operacˇnıch syste´mu

Praktikum z operacˇnıch syste´mu z operačních systémů. Obsahuje pouze část věnovanou základům správy operačního systému Windows.

Více

stáhnout zde - Petr Korviny

stáhnout zde - Petr Korviny 1.4 Určovánı́ vah kritériı́ - zadávánı́, výpočet, uloženı́ V této části bude vysvětlen postup při určovánı́ důležitosti jednotlivých kritériı́. U vı́cekriteriálnı́ch metod, jež...

Více

Praktikum z operacˇnıch syste´mu

Praktikum z operacˇnıch syste´mu Kromě toho, že EULA silně omezuje možnosti využitı́ softwaru pod nı́ distribuovaného, obsahuje také klauzuli o tom, že autor neodpovı́dá za škody vzniklé provozovánı́m softwaru. Tato kl...

Více

isass.exe objekt nebyl nalezen

isass.exe objekt nebyl nalezen restartování počítače zadejte příkaz exit. Úplný seznam příkazů nástroje Recovery Console přikládám na konci dokumentu v sekci zdroje jako link. Nástroj Recovery Console jde přidat do úvodní spoušt...

Více

Operační systémy - Střední škola AGC as

Operační systémy - Střední škola AGC as Adresářová struktura, SED - stream editor, příkazy, regulární výrazy, přesměrování vstupu a výstupu Správa systému Linux Souborové systémy, proces init, superserver inetd a xinetd, virtuální soubor...

Více

Správa diskových jednotek a systémů souborů

Správa diskových jednotek a systémů souborů se však nedělí na oddíly, ale na svazky. Svazek se velmi podobá oddílu. Nejčastějším typem svazku je jednoduchý svazek. Jednoduchý svazek se nachází na jediném disku a umožňuje spustit operační sys...

Více

Technické vybavenı osobnıch pocıtacu

Technické vybavenı osobnıch pocıtacu Technické vybavenı́ osobnı́ch počı́tačů Otázky ke zkoušce, rok 2015/16 RNDr. Šárka Vavrečková, Ph.D. Poslednı́ aktualizace: 13. ledna 2016 Následujı́cı́ otázky jsou členěny tematicky....

Více

pdf 1

pdf 1 dávkového souboru AUTOEXEC.BAT, který má zajistit automatické provedení požadovaných činností při každém zavedení O.S. Dávku si určuje samotný uživatel počítače. - zpracování dávkových souborů – ob...

Více