Hostwinds 博客
寻找结果为:
自1995年以来,Microsoft Windows NTFS 文件系统具有支持的流。实际上,所有NTFS"文件"实际上都是流。我们通常认为NTFS中的文件被更精确地称为默认数据流。默认数据流未命名。什么是未命名的数据流?考虑NTF完全合格的文件名格式:
file-name:stream-name:stream-type
从左到右,我们有:
一个示例如下:
myTextFile.txt
这是默认数据流。如前所述,默认数据流未命名。这可以在其完全合格的文件名表格中看到:
myTextFile.txt::$DATA
两个结肠之间没有任何东西(::)表示这是一个未命名的数据流。对于默认数据流,尽管可以,但我们不需要使用完全合格的文件名。例如,从Windows命令提示符中,以下两个命令正好打开相同的默认数据流:
notepad myTextFile.txt
notepad myTextFile.txt::$DATA
为了简化事物,我们将使用术语"文件"代替更准确的"默认数据流"。
您可以使用普通NTF在文件中创建命名流 命名约定。例如,从命令提示符中,运行以下内容:
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中没有内容是有意义的,而流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个字节回到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命令提示符中,您可以从file foo.docx中删除stream bar.txt如下:
Remove-Item -Path .\foo.docx -Stream bar.txt
如果流名称具有空格,则必须使用引号,如以下方式:
Remove-Item -Path ".\Bob's Grandfather.png" -Stream "Image Info.txt"
NTFS流的最初意图是启用Apple Macintosh文件互操作性,但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