Hostwinds Blog
Suchergebnisse für:
Seit 1995 das Microsoft Windows NTFS Dateisystem hat Streams unterstützt.Tatsächlich sind alle NTFS -Dateien tatsächlich Streams.Was wir normalerweise als Datei in NTFS betrachten, wird genauer als Standarddatenstrom bezeichnet.Ein Standarddatenstrom ist unbenannt.Was ist ein unbenannter Datenstrom?Betrachten Sie das voll qualifizierte Dateiname -Format von NTFs:
file-name:stream-name:stream-type
Von links nach rechts haben wir:
Ein Beispiel folgt:
myTextFile.txt
Dies ist ein Standarddatenstrom.Wie bereits erwähnt, sind Standarddatenströme unbenannt.Dies ist in seinem voll qualifizierten Dateinamenformular zu sehen:
myTextFile.txt::$DATA
Die Tatsache, dass es nichts zwischen den beiden Kolons gibt (: :) zeigt, dass dies ein unbenannter Datenstrom ist.Für einen Standarddatenstrom müssen wir den voll qualifizierten Dateinamen nicht verwenden, obwohl wir können.Beispielsweise öffnen die folgenden zwei Befehle aus der Windows -Eingabeaufforderung genau den gleichen Standarddatenstrom:
notepad myTextFile.txt
notepad myTextFile.txt::$DATA
Um die Dinge zu vereinfachen, verwenden wir den Begriff "Datei" anstelle des genaueren "Standarddatenstroms".
Sie können einen benannten Stream in einer Datei mit normalem NTFS erstellen Regeln der Namensgebung.Führen Sie beispielsweise aus der Eingabeaufforderung Folgendes aus:
notepad foo.docx:bar.txt
Wählen Ja Auf die Frage, ob Sie eine neue Datei erstellen möchten.Geben Sie als nächstes den folgenden Inhalt ein:
This is the named stream "bar.txt" that is in (attached to) the file "foo.docx".
Speichern und beenden Sie den Notizblock.
Wenn Sie den Befehl DIR ausführen, sehen Sie eine Datei namens Foo.docx, deren Größe interessanterweise 0 Bytes ist.Wenn Sie jedoch den Befehl DIR /R ausführen, sehen Sie den genannten Datenstrom, den Sie gerade erstellt haben, dessen Größe 80 Bytes beträgt:
Diese beiden Stream -Größen sind in diesem Stream Foo.docx keinen Inhalt, während Stream foo.docx: bar.txt 80 Bytes -Inhalte hat.Um dies zu erleichtern, fügen Sie den Standarddatenstrom wie folgt einige Inhalte hinzu:
notepad foo.docx
Geben Sie den folgenden Text ein:
This is the default data stream (file) named "foo.docx", which has one named data stream attached to it, called "bar.txt".
Speichern und beenden Sie den Notizblock.
Führen Sie erneut Dir /R aus und beachten Sie, dass der Standarddatenstrom Foo.docx jetzt 120 Datenbytes enthält:
Aus diesem Grund können wir feststellen, dass die beiden Streams 200 Bytes auf dem Volumen verbrauchen.Das Ausführen des Befehls "Unedorned DIR" liefert jedoch etwas irreführende Informationen - dies impliziert, dass Foo.docx nur 120 Datenbytes enthält, was in dem Sinne ungenau istVolumen als verfügbarer freier Speicherplatz:
del foo.docx
dir /r
Die Moral der Geschichte besteht vielleicht darin, immer den /R -Schalter zu verwenden.Was wirft die Frage auf, wie finden Sie alle Dateien, die "versteckte" Streams enthalten?Dieses Thema wird als nächstes erörtert.
Wenn wir den Begriff "Datei" mittlerer "Standarddatenstrom" und "Stream" Mean "Named Data Stream" zulassen, können wir PowerShell verwenden, um alle Dateien zu finden, die Streams wie folgt enthalten.
Öffnen Sie eine Eingabeaufforderung für PowerShell -Eingabeaufforderung und führen Sie den folgenden Befehl optional aus (dies unterdrückt möglicherweise einen ärgerlichen Dateizugriff verweigerte Fehlermeldungen):
$ErrorActionPreference = "SilentlyContinue"
Führen Sie als nächstes die folgenden Befehle aus:
Get-ChildItem -Path \ -Recurse | Get-Item -Stream * | Where-Object Stream -ne ':$DATA' | Convert-Path
Für das aktuelle Volumen wird eine Liste aller Dateien zurückgegeben, die einen oder mehrere Streams enthalten.Diese PowerShell -Pipeline wird wie folgt erklärt:
Aus einer Eingabeaufforderung von PowerShell können Sie die Stream -Bar.txt aus der Datei foo.docx wie folgt entfernen:
Remove-Item -Path .\foo.docx -Stream bar.txt
Wenn der Stream -Name Leerzeichen hat, müssen Sie Zitate verwenden, wie in:
Remove-Item -Path ".\Bob's Grandfather.png" -Stream "Image Info.txt"
Die ursprüngliche Absicht von NTFS -Streams war es, die Interoperabilität von Apple Macintosh -Datei zu ermöglichen, aber NTFS -Streams können sehr praktisch sein.Sie möchten beispielsweise detaillierte Informationen in Familienfotografien "einbetten":
Wenn die obige Bilddatei "Bobs Großvater.png" heißt, können Sie wie folgt einen Stream (mit PowerShell) mit detaillierten Bildinformationen hinzufügen:
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."
Um die Bildmetadaten anzuzeigen, die Sie gerade festgelegt haben, rennen Sie:
Get-Content -Path ".\Bob's Grandfather.png" -Stream "image-info.txt"
Beachten Sie, dass das Stream -Argument erfordert, dass Sie den genauen Namen des Streams kennen (Wildcards sind nicht zulässig).Denken Sie daran, dass Sie immer Streamnamen mit Get-iTEM erhalten können (was Platzhalter akzeptiert):
Get-Item -Path '.\Bob''s Grandfather.png' -Stream *
Sehen Sie sich für den gesuchten Stream -Namen die Stream -Eigenschaft in der resultierenden Ausgabe an:
Andere Verwendungen für NTFS -Streams können umfassen:
Zuletzt haben Sie vielleicht festgestellt, dass Ihr Volumen eine Reihe von Streams namens Zone enthält. Identifikator.Diese Streams werden im Allgemeinen von Windows für die Speicherung von URL -Sicherheitszonen verwendet, die feststellen, ob eine Datei vertrauenswürdig sein sollte oder nicht.Ein Beispiel, das zeigt, wie der Inhalt einer Zone angezeigt wird. Der Identifikator Stream folgt:
Get-Content -Path .\sanders.net-May-2022.gz -Stream Zone.Identifier
Und über die Windows -Eingabeaufforderung:
notepad sanders.net-May-2022.gz:Zone.Identifier
Hoffentlich haben Sie diesen Artikel interessant gefunden;Und vielleicht finden Sie einige interessante Verwendungszwecke, damit NTFS -Streams starten können.
Geschrieben von Karlito Bonnevie / Kann 24, 2022