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

Глава 11
Утилиты для работы с файлами
В этой главе рассматриваются утилиты Sysinternals, предназначенные для
управления файлами. Все эти утилиты являются консольными:
• Strings выполняет поиск встроенного текста ASCII и Unicode в файлах;
• Streams выявляет объекты файловой системы, имеющие альтернативные
потоки данных, и, если указано, удаляет эти потоки;
• Junction и FindLinks показывают и позволяют управлять соединениями
папок и жесткими ссылками (два типа ссылок NTFS);
• DU показывает логический размер иерархии папок и ее размер на диске;
• PendMoves и MoveFile показывают и регистрируют операции с файла-
ми, которые будут выполнены при следующей загрузке системы.
Strings
В программировании термин «string» (строка) обозначает структуру дан-
ных, состоящую из последовательности символов, обычно представляющих
текст, понятный человеку. Существуют различные утилиты, позволяющие
искать в файлах встроенные строки. Однако многие из них (например,
утилита findstr, входящая в состав Windows) ищут только текст в формате
ASCII и игнорируют текст Unicode, тогда как другие (например, find, тоже
входящая в состав Windows) некорректно выполняют поиск в двоичных
файлах. Утилита Strings из пакета Sysinternals не имеет подобных проблем,
что делает ее полезной для поиска файлов, а также для исследования со-
держимого неизвестных файлов в поисках строк, которые могут прояснить
происхождение и назначение этих файлов.
Синтаксис командной строки Strings:
strings [-a] [-b байты] [-n длина] [-o] [-q] [-s] [-u] файл_или_папка
Параметр файл_или_папка обязателен. Он принимает знаки подстанов-
ки (например, *.dll). Strings выполняет поиск всех подходящих файлов и
по умолчанию выводит в стандартный поток вывода все найденные стро-
ки ASCII и Unicode длиннее трех символов, в порядке их вхождения в теле
файла. Чтобы искать только строки ASCII или Unicode, используйте пара-
SIN_ch_11.indd 327
27.12.2011 14:35:51

328 Часть
II
Работа с утилитами
метры -a или -u, соответственно. Параметр -s выполняет рекурсивный по-
иск папок. Чтобы указать минимальную длину строки (по умолчанию 3),
укажите ее после параметра -n. Если добавить параметр -o, будет сообщаться
смещение в файле, по которому начинается строка. Чтобы выполнять по-
иск только в начале файла, используйте параметр -b для ограничения числа
проверяемых байтов. Наконец, параметр -q (quiet, тихий режим) убирает за-
головок Strings из выходных данных; это полезно, когда выходные данные
будут обрабатываться другой утилитой.
Следующая команда выполняет в первых 850000 байтах explorer.exe по-
иск строк Unicode длиной не менее 20 символов, убирая текст заголовка
Strings. Полученные строки сортируются по алфавиту. На рис. 11-1 показана
часть результатов.
strings -b 850000 -u -n 20 -q explorer.exe | sort
Рис. 11-1. Извлечение текста из explorer.exe при помощи Strings
Streams
Утилита Streams показывает объекты файловой системы, имеющие альтернатив-
ные потоки данных, и позволяет удалять их. NTFS предоставляет возможность
создавать в файлах и папках альтернативные потоки данных. По умолчанию
файл не имеет альтернативных потоков, и его содержимое хранится в основном
неименованном потоке. Но если использовать синтаксис имя_файла:имя_по-
тока, можно выполнять чтение и запись альтернативных потоков. Не все при-
ложения имеют поддержку альтернативных потоков, но работать с такими по-
токами просто. Откройте командную строку, перейдите в папку на томе NTFS,
в которую разрешена запись, и выполните следующую команду:
echo hello > test.txt:altdata
Вы только что создали поток с именем altdata, связанный с файлом test.
txt. Обратите внимание: если просмотреть размер файла test.txt при помощи
SIN_ch_11.indd 328
27.12.2011 14:35:52

Утилиты для работы с файлами
Глава 11 329
команды DIR или в Проводнике, будет показан нулевой размер (если файл
test.txt не существовал до выполнения указанной команды), а при открытии
в текстовом редакторе этот файл будет пустым. (Начиная с Windows Vista,
для просмотра сведений об альтернативных потоках можно использовать
команду DIR /R.) Для просмотра содержимого альтернативного потока вы-
полните следующую команду:
more < test.txt:altdata
Команды type и more не поддерживают синтаксис альтернативных пото-
ков, но оболочка Cmd.exe и ее операции перенаправления поддерживают.
Windows применяет альтернативные потоки данных при обработке загру-
женных файлов. Служба выполнения прикреплений (Attachment Execution
Service) Windows добавляет поток Zone.Identifier, в котором указывает зону
безопасности, из которой получен файл, чтобы система могла продолжать
обрабатывать этот файл в соответствии с правилами, установленными для
этой зоны. Один из способов удаления этого индикатора из файла — от-
крыть его диалоговое окно Свойства (Properties) в Проводнике и щелкнуть
кнопку Разблокировать (Unblock). Однако это кнопка и другие элементы
пользовательского интерфейса, позволяющие удалить информацию о зоне
безопасности, часто скрыты групповой политикой.
Утилита Streams проверяет указанные файлы и папки и сообщает имена
и размеры всех обнаруженных альтернативных потоков. Можно выполнить
поиск по структурам папок и получить список файлов и папок с альтерна-
тивными потоками. Можно также удалить эти потоки, например, чтобы раз-
блокировать загруженное содержимое. Для этого используется следующий
синтаксис:
streams [-s] [-d] файл_или_папка
Параметр файл_или_папка является обязательным и принимает знаки
подстановки. Например, команда streams *.exe проверяет все системные
объекты, имя которых оканчивается на «.exe», расположенные в текущей
папке, и выводит список тех из них, которые имеют альтернативные потоки
данных. Выходные данные выглядят следующим образом:
C:\Users\Abby\Downloads\msvbvm50.exe:
:Zone.Identifier:$DATA 26
В этом примере файл msvbvm50.exe имеет альтернативный поток «Zone.
ldentifier» размером 26 байт. Чтобы просмотреть содержимое этого потока,
используйте команду more < msvbvm50.exe:Zone.ldentifier.
Параметр -s выполняет рекурсивную проверку папок, а параметр -d уда-
ляет найденные альтернативные потоки. Например, следующая команда
выполняет поиск файлов с альтернативными потоками в папке Downloads
пользователя Abby и удаляет все обнаруженные альтернативные потоки:
streams -s -d C:\Users\Abby\Downloads
SIN_ch_11.indd 329
27.12.2011 14:35:53

330 Часть
II
Работа с утилитами
Streams сообщает имена удаленных альтернативных потоков.
На рис. 11-2 показаны выходные данные Streams после обнаружения и удале-
ния альтернативного потока данных Zone.Identifier из файла SysinternalsSuite.
zip. Если удалить поток Zone.Identifier перед извлечением утилит из этого ар-
хива позволяет запускать их без предупреждений безопасности и просматри-
вать справочные файлы в формате Compiled HTML (.chm).
Рис. 11-2. Обнаружение и удаление альтернативных потоков данных
Утилиты для работы со ссылками NTFS
NTFS поддерживает как жесткие ссылки, так и мягкие, называемые также
символьными ссылками. Жесткие ссылки доступны только для файлов, тог-
да как символьные ссылки можно использовать и с файлами, и с папками.
Жесткая ссылка позволяет создать несколько путей, ведущих на один
файл на том же разделе. Например, если создать жесткую ссылку C:\
Docs\Spec.docx, указывающую на существующий файл C:\Users\Abby\
Documents\Specifications.docx, эти два пути будут вести к одному и тому
же файлу на диске, который можно будет изменять, используя любой из
этих путей. Для реализации жестких ссылок в NTFS ведется счет ссылок
на файл, хранящийся на диске. При создании новой жесткой ссылки NTFS
добавляет в данные ссылку с именем файла. Файл не удаляется, пока не об-
нулится его счетчик ссылок, поэтому можно удалить исходный файл (C:\
Users\Abby\Documents\Specifications.docx в нашем примере) и продол-
жать использовать остальные жесткие ссылки (C:\Docs\Spec.docx). Файл,
на который указывают жесткие ссылки, включает не только содержимое и
альтернативные потоки данных, но и дескриптор безопасности, временные
штампы и атрибуты, такие как «только чтение», «системный», «скрытый»,
«шифрованный» и «сжатый».
Символьные ссылки являются строками, которые интерпретируются ди-
намически и могут быть относительными или абсолютными путями, ссыла-
ющимися на файл или папку на любом запоминающем устройстве, включая
другие локальные тома и даже общие папки на других системах. Это значит,
SIN_ch_11.indd 330
27.12.2011 14:35:53

Утилиты для работы с файлами
Глава 11 331
что символьные ссылки не увеличивают счетчик ссылок исходного объек-
та файловой системы. При удалении исходного объекта данные удаляют-
ся, а символьные ссылки остаются, указывая на несуществующий объект.
Символьные ссылки на файлы и папки имеют собственные разрешения и
другие атрибуты, не зависящие от целевого объекта файловой системы.
Соединения очень похожи на символьные ссылки на папки, за тем исклю-
чением, что могут вести только к объектам на локальных томах. Соединения
широко используются в Windows Vista и последующих версиях для обе-
спечения совместимости приложений. Например, в стандартной установке
Windows 7 имя «C:\Documents and Settings» является соединением с C:\
Users. Это позволяет работать многим программам, имеющим жестко про-
писанные пути. Разрешения на доступ к таким соединениям, обеспечиваю-
щим совместимость приложений, не позволяют просматривать содержимое
соединения, так что программы резервного копирования, не поддерживаю-
щие соединения, не копируют одни и те же файлы несколько раз. Такие сое-
динения обычно помечаются как скрытые и системные, поэтому по умолча-
нию не отображаются в списке папок.
В Windows Vista и последующих версиях ОС жесткие ссылки, символь-
ные ссылки и соединения можно создавать при помощи команды mklink,
встроенной в Cmd.exe. Пользователи, не имеющие административных прав,
могут использовать mklink для создания жестких ссылок и соединений.
Для создания символьных ссылок на файлы и папки требуется привилегия
Create Symbolic Links (Создание символьных ссылок), по умолчанию предо-
ставляемая только администраторам. В Windows XP и Windows Server 2003
команда mklink недоступна. Жесткие ссылки можно создавать также коман-
дой fsutil hardlink, а команда fsutil reparsepoint позволяет просматривать
подробную информацию о соединениях и символьных ссылках и удалять
их. Однако fsutil всегда требует административных прав.
В пакет Sysinternals включены две утилиты, заполняющие некоторые про-
белы в управлении ссылками средствами Windows: Junction и FindLinks.
Junction
Junction позволяет создавать, удалять, искать соединения и отображать ин-
формацию о них. Если для работы с папкой, в которой создается или удаля-
ется соединение, достаточно разрешений, Junction не требует администра-
тивных прав и работает во всех поддерживаемых версиях Windows.
Синтаксис для создания соединения:
junction имя_соединения цель_соединения
имя_соединения — имя пути нового соединения, цель_соединения — суще-
ствующая папка, на которую указывает соединение.
Синтаксис для удаления соединения:
junction -d имя_соединения
SIN_ch_11.indd 331
27.12.2011 14:35:53