Файл: Руссинович М., Маргозис А. Утилиты Sysinternals. Справочник администратора 2012.pdf
Добавлен: 29.10.2018
Просмотров: 33047
Скачиваний: 742

332 Часть
II
Работа с утилитами
Удалить соединение можно также командой
rd
, встроенной в Cmd.exe.
При использовании rd файлы и подпапки в целевой папке не удаляются,
если не указать параметр /S.
Чтобы определить, является ли папка соединением, и если является, ото-
бразить целевую папку, используйте следующую команду:
junction [-s] [-q] имя_соединения
имя_соединения указывает путь и может включать символы подстановки.
Если имя указывает не на соединение, Junction возвратит сообщение «No
reparse points found» («Точки повторного разбора не найдены»). Для выпол-
нения поиска во вложенных папках используйте параметр -s. Параметр -q
отключает сообщения об ошибках. Например, следующая команда показы-
вает все точки соединения, найденные на диске C:
junction -s -q C:\
Следующая команда показывает все точки соединения в папке профиля
пользователя:
junction %USERPROFILE%\*
Эта команда показывает все точки соединения из папки профиля пользо-
вателя, имена которых начинаются с «My»:
junction -s -q %USERPROFILE%\My*
На рис. 11-3 Junction показывает все точки соединения из папки
ProgramData, обеспечивающие совместимость приложений.
Рис. 11-3. Junction
FindLinks
FindLinks показывает жесткие ссылки, указывающие на данные файла.
Просто выполните команду findlinks имя_файла; и если на указанный файл
имеются другие жесткие ссылки, они будут показаны. Например, в Windows 7
SIN_ch_11.indd 332
27.12.2011 14:35:53

Утилиты для работы с файлами
Глава 11 333
x64 есть одна копия 64-разрядной версии Notepad.exe, на которую указы-
вают жесткие ссылки из нескольких мест. На рис. 11-4 показаны выход-
ные данные команд findlinks System32\Notepad.exe и findlinks SysWOW64\
notepad.exe.
Рис. 11-4. FinlLinks
Видно, что четыре экземпляра Notepad.exe из папок Windows, System32 и
двух папок winsxs в действительности являются одним файлом. Кроме того,
есть 32-разрядная версия в папке SysWOW64, связанная с копией из папки
winsxs. FindLinks показывает также индекс файла, 64-разрядный идентифи-
катор, назначаемый файловой системой NTFS каждому уникальному файлу
и папке на томе.
Начиная с Windows 7, можно искать жесткие ссылки, связанные с фай-
лом, при помощи команды fsutil hardlink list имя_файла, но напомним, что
fsutil всегда требует административных прав.
DU
Можно подумать, что подсчитать размер папки можно, просто просмотрев ее
содержимое, пройдя через все подпапки и сложив размеры файлов. Однако
все гораздо сложнее, так как для получения точного значения необходимо
учесть жесткие ссылки, символьные ссылки на файлы и каталоги, соедине-
ния, сжатые и распределенные файлы, потоки альтернативных данных и не-
используемое пространство кластера.
Утилита DU (Disk Usage, использование диска) показывает дисковое про-
странство, занятое иерархией папок, учитывая все эти факторы. По умолча-
нию она проходит подпапки, но не переходит в соединения и по символьным
ссылкам на папки, а также игнорирует символьные ссылки на файлы. Она
учитывает размер содержимого альтернативных потоков данных, включая
потоки, связанные с объектами-папками. Файлы, на которые ссылается не-
сколько жестких ссылок, считаются только один раз. Наконец, DU сооб-
щает как логический размер, так и фактический размер на диске, учитывая
SIN_ch_11.indd 333
27.12.2011 14:35:53

334 Часть
II
Работа с утилитами
сжатые и распределенные файлы и неиспользуемое пространство кластера.
Например, если папка содержит только один файл размером 10 байтов, DU
покажет размер 10 байтов и «размер на диске» 4096 байтов, учитывая размер
кластера, занятого файлом.
Синтаксис командной строки DU:
du [-n | -l уровни | -v] [-q] папка
По умолчанию DU проходит всю структуру целевой папки и отображает
итоговые результаты, включая число обработанных файлов и папок, общий
размер файлов и фактическое занятое место на диске. На рис. 11-5 показан
пример выполнения команды du -q “C:\Program Files” (параметр -q убирает
заголовок DU).
Рис. 11-5. Результаты команды du -q “C:\Program Files”
Параметры -n, -l и -v взаимно исключают друг друга. При использовании
параметра -n DU не проходит подпапки и учитывает только файлы и пап-
ки, находящиеся только в самой целевой папке. Параметр -v используется
для отображения размера в КБ промежуточных папок при их обработке. На
рис. 11-6 показана часть результатов выполнения команды из предыдущего
примера, но с параметром -v.
Рис. 11-6. Запуск DU с параметром -v
Параметр -l похож на -v. С ним сканируется вся иерархия папок, но про-
межуточные результаты сообщаются только для указанного числа уровней
SIN_ch_11.indd 334
27.12.2011 14:35:53

Утилиты для работы с файлами
Глава 11 335
папок. На рис. 11-7 показана часть результатов того же примера, но с исполь-
зованием -l 1 вместо -v.
Рис. 11-7. Отображение промежуточных результатов для одного уровня папок
Утилиты для операций с файлами после загрузки
Программы-установщики часто не могут заменить, переместить или удалить
файлы из-за того, что они используются. На этот случай Windows позволя-
ет регистрировать такие операции, чтобы процесс диспетчера сеансов (Smss.
exe) — первый процесс пользовательского режима, запускаемый в процессе
загрузки, выполнял их при следующей загрузке системы, прежде чем какие-
либо приложения или службы смогут занять файл и помешать его изменению.
Приложения с администраторскими правами могут вызывать API MoveFileEx
с флагом MOVEFILE_DELAY_UNTIL_REBOOT, который добавляет за-
просы на перемещение или удаление в значения PendingFileRenameOperations
и PendingFileRenameOperations2 типа REG_MULTI_SZ из раздела реестра
HKLM\System\CurrentControlSet\Control\Session Manager.
PendMoves
PendMoves считывает значения PendingFileRenameOperations и PendingFile-
RenameOperations2 и показывает все операции переименования и удаления
файлов, которые будут выполнены при следующей загрузке. PendMoves так-
же проверяет наличие исходного файла и отображает сообщение об ошибке,
если он недоступен. Наконец, PendMoves показывает дату и время последне-
го изменения содержимого раздела Session Manager. Это позволяет понять,
когда были зарегистрированы операции удаления и переименования.
Приведем пример выходных данных PendMoves, показывающих одну
ожидающую операцию удаления файла и две операции перемещения, ис-
точник одной из которых не найден:
SIN_ch_11.indd 335
27.12.2011 14:35:54

336 Часть
II
Работа с утилитами
Source: C:\Config.Msi\3ec7bbbf.rbf
Target: DELETE
Source: C:\Windows\system32\spool\DRIVERS\x64\3\New\mxdwdrv.dll
Target: C:\Wi ndows\system32\spool\DRIVERS\x64\3\mxdwdrv.dll
Source: C:\Windows\system32\spool\DRIVERS\x64\3\New\XPSSVCS.DLL
*** Source file lookup error: The system cannot find the file specified.
Target: C:\Windows\system32\spool\DRIVERS\x64\3\XPSSVCS.DLL
Time of last update to pending moves key: 8/29/2010 11:55 PM
MoveFile
MoveFile позволяет запланировать операции перемещения, переименова-
ния и удаления файлов на следующую перезагрузку системы. Просто ука-
жите имя существующей папки или файла и имя цели. Если объект нужно
удалить, используйте в качестве имени цели две двойные кавычки. При по-
мощи MoveFile можно удалить только пустую папку. Перемещение можно
выполнять только в пределах одного тома, и при этом целевая папка должна
существовать. Заметьте, что переименование — это перемещение, при кото-
ром не изменяется папка.
MoveFile требует административные права. В некоторых случаях отло-
женные операции с файлами могут не быть выполнены; об этом см. статью
Knowledge Base 948601 (http://support.microsoft.com/kb/948601).
В следующем примере файл sample.txt перемещается из c:\original в c:\
newdir после перезагрузки системы, если c:\newdir существует:
movefile c:\original\sample.txt c:\newdir\sample.txt
В этом примере файл sample.txt перемещается и переименовывается:
movefile c:\original\sample.txt c:\newdir\renamed.txt
В этом примере сначала удаляется файл c:\original\sample.txt, а затем
папка c:\original, в которой не должно оставаться содержимого:
movefile c:\original\sample.txt «»
movefile c:\original «»
SIN_ch_11.indd 336
27.12.2011 14:35:54