Hostwinds Блог
Результаты поиска для:
С 1995 года Microsoft Windows NTFS Файловая система поддерживает потоки.На самом деле, все «файлы NTFS" на самом деле являются потоками.То, что мы обычно считаем файлом в NTFS, более точно называется потоком данных по умолчанию.Поток данных по умолчанию не назван.Что такое неназванный поток данных?Рассмотрим полностью квалифицированный формат файла NTFS:
file-name:stream-name:stream-type
Слева направо, у нас есть:
Пример следует:
myTextFile.txt
Это поток данных по умолчанию.Как уже упоминалось, потоки данных по умолчанию не названы.Это можно увидеть в его полностью квалифицированной форме файла:
myTextFile.txt::$DATA
Тот факт, что между двумя Колонами нет ничего (: :) указывает на то, что это неназванный поток данных.Для потока данных по умолчанию нам не нужно использовать полностью квалифицированное имя файла, хотя мы можем.Например, из командной строки Windows следующие две команды открывают именно тот же поток данных по умолчанию:
notepad myTextFile.txt
notepad myTextFile.txt::$DATA
Чтобы упростить вещи, мы будем использовать термин «файл» вместо более точного «потока данных по умолчанию».
Вы можете создать именованный поток в файле, используя обычные NTFS Наименование соглашенийАнкетНапример, из командной строки запустите следующее:
notepad foo.docx:bar.txt
Выбрать да Когда спросите, хотите ли вы создать новый файл.Далее введите следующий контент:
This is the named stream "bar.txt" that is in (attached to) the file "foo.docx".
Сохраните и выйдите из блокнота.
Когда вы запустите команду DIR, вы увидите файл с именем foo.docx, размер которого, что интересно, составляет 0 байтов.Однако, когда вы запустите команду Dir /R, вы увидите только что созданный поток данных, который вы только что создали, размер которого составляет 80 байтов:
Эти два размера потока имеют смысл в этом потоке foo.docx не имеют контента, в то время как Stream foo.docx: bar.txt имеет контент на 80 байтов.Чтобы помочь выяснить это, добавьте немного контента в поток данных по умолчанию следующим образом:
notepad foo.docx
Введите следующий текст:
This is the default data stream (file) named "foo.docx", which has one named data stream attached to it, called "bar.txt".
Сохраните и выйдите из блокнота.
Запустите Dir /R снова и обратите внимание, что поток данных по умолчанию Foo.docx теперь содержит 120 байтов данных:
Из -за этого мы можем сказать, что два потока потребляют 200 байтов на томе.Тем не менее, запуск команды неукрашенного DIR действительно предоставляет несколько вводящую в заблуждение информацию - она подразумевает, что Foo.docx содержит только 120 байтов данных, что неточно в том смысле, что при удалении Foo.docx вы фактически выпускаете 200 байтов обратно кТом как доступный бесплатное пространство:
del foo.docx
dir /r
Возможно, мораль истории - всегда использовать переключатель /r.Возникает вопрос, как вы находите все файлы, которые содержат «скрытые» потоки?Эта тема обсуждается дальше.
Если мы позволим термину «файл» означают «поток данных по умолчанию» и «потоковое» означает «названный поток данных», то мы можем использовать PowerShell для поиска всех файлов, содержащих потоки следующим образом.
Откройте командную строку PowerShell и при желании запустите следующую команду (это подавляет, возможно, раздражающий доступ к файлу доступа к сообщениям об ошибках):
$ErrorActionPreference = "SilentlyContinue"
Далее запустите следующие команды:
Get-ChildItem -Path \ -Recurse | Get-Item -Stream * | Where-Object Stream -ne ':$DATA' | Convert-Path
Для текущего тома это возвращает список всех файлов, содержащих один или несколько потоков.Этот трубопровод PowerShell объясняется следующим образом:
В командной строке PowerShell вы можете удалить потоковой bar.txt из файла foo.docx следующим образом:
Remove-Item -Path .\foo.docx -Stream bar.txt
Если у имени потока есть места, вы должны использовать кавычки, как в:
Remove-Item -Path ".\Bob's Grandfather.png" -Stream "Image Info.txt"
Первоначальным намерением NTFS Streams было включение совместимости Apple Macintosh File, но потоки NTFS могут быть довольно удобными.Например, вы можете «встраивать» подробную информацию в файлах семейных фотографий:
Если приведенный выше файл изображения был назван «Дедушка Боба».
Set-Content -Path ".\Bob's Grandfather.png" -Stream "image-info.txt" -Value "This is Bob's grandfather (on his mother's side) in the Gold Rush Bar and Restaurant in Seattle, WA - circa 1856."
Чтобы просмотреть метаданные изображения, которые вы только что установили, запустите:
Get-Content -Path ".\Bob's Grandfather.png" -Stream "image-info.txt"
Обратите внимание, что аргумент -stream требует, чтобы вы знали точное имя потока (подстановочные знаки не допускаются).Напомним, что вы всегда можете получить имена потоков, используя get-item (который принимает подстановочные знаки):
Get-Item -Path '.\Bob''s Grandfather.png' -Stream *
Для востребованного имени потока посмотрите на свойство потока на полученном выходе:
Другое использование потоков NTFS может включать в себя:
Наконец, вы, возможно, отметили, что ваш объем содержит ряд потоков с именем Zone.Identifier.Эти потоки обычно используются Windows для хранения зон безопасности URL, которые определяют, следует ли доверять файлу или нет.Пример, показывающий, как просмотреть содержимое зоны. Поток идентификатор следует:
Get-Content -Path .\sanders.net-May-2022.gz -Stream Zone.Identifier
И через командную строку Windows:
notepad sanders.net-May-2022.gz:Zone.Identifier
Надеюсь, вы нашли эту статью интересной;И, возможно, вы найдете некоторые интересные применения для загрузки потоков NTFS.
Написано Karlito Bonnevie / май 24, 2022