Hostwinds Blog
Zoekresultaten voor:
Sinds 1995, de Microsoft Windows NTFS Bestandssysteem heeft streams ondersteund.In feite zijn alle NTFS "-bestanden" eigenlijk streams.Wat we normaal als een bestand in NTFS beschouwen, wordt meer precies een standaardgegevensstroom genoemd.Een standaardgegevensstroom is niet nader genaamd.Wat is een niet nader genoemde gegevensstroom?Beschouw de NTFS volledig gekwalificeerd bestandsnaamformaat:
file-name:stream-name:stream-type
Van links naar rechts hebben we:
Een voorbeeld volgt:
myTextFile.txt
Dit is een standaardgegevensstroom.Zoals vermeld, zijn standaardgegevensstromen niet genoemd.Dit is te zien in het volledig gekwalificeerde bestandsnaamformulier:
myTextFile.txt::$DATA
Het feit dat er niets is tussen de twee dikke darm (: :) geeft aan dat dit een niet nader genoemde gegevensstroom is.Voor een standaardgegevensstroom hoeven we de volledig gekwalificeerde bestandsnaam niet te gebruiken, hoewel we dat kunnen.Bijvoorbeeld, vanuit de Windows -opdrachtprompt, openen de volgende twee opdrachten precies dezelfde standaardgegevensstream:
notepad myTextFile.txt
notepad myTextFile.txt::$DATA
Om dingen te vereenvoudigen, zullen we de term "bestand" gebruiken in plaats van de meer accurate "standaardgegevensstroom".
U kunt een benoemde stream maken in een bestand met behulp van normale NTFS het benoemen van conventies.Voer bijvoorbeeld uit de opdrachtprompt het volgende uit:
notepad foo.docx:bar.txt
Selecteer Ja Op de vraag of u een nieuw bestand wilt maken.Typ vervolgens de volgende inhoud:
This is the named stream "bar.txt" that is in (attached to) the file "foo.docx".
Bewaar en verlaat Kladblok.
Wanneer u de DIR -opdracht uitvoert, ziet u een bestand met de naam FOO.DOCX, wiens grootte, interessant, 0 bytes is.Wanneer u echter de opdracht DIR /R uitvoert, ziet u de genoemde gegevensstroom die u zojuist hebt gemaakt, waarvan de grootte 80 bytes is:
Deze twee streamgroottes zijn logisch in die stream foo.docx heeft geen inhoud terwijl stream foo.docx: bar.txt heeft 80 bytes aan inhoud.Voeg als volgt om dit op te helderen, om dit te verduidelijken wat inhoud aan de standaardgegevenstream toe te voegen:
notepad foo.docx
Voer de volgende tekst in:
This is the default data stream (file) named "foo.docx", which has one named data stream attached to it, called "bar.txt".
Bewaar en verlaat Kladblok.
Voer ADR /R opnieuw uit en merk op dat de standaardgegevensstream foo.docx nu 120 bytes aan gegevens bevat:
Daarom kunnen we zien dat de twee streams 200 bytes op het volume verbruiken.Dat gezegd hebbende, het uitvoeren van het onopgesmukte DIR -commando biedt wel enigszins misleidende informatie - het houdt in dat Foo.Docx slechts 120 bytes aan gegevens bevat, wat onnauwkeurig is in de zin dat wanneer u Foo.docx verwijdert, u eigenlijk 200 bytes terug vrijgeeft aanVolume als beschikbare vrije ruimte:
del foo.docx
dir /r
De moraal van het verhaal is misschien om altijd de /R -schakelaar te gebruiken.Dat roept de vraag op, hoe vindt u alle bestanden die "verborgen" streams bevatten?Dat onderwerp wordt vervolgens besproken.
Als we de term "bestand" "standaardgegevensstream" en "stream" betekenen "met de naam Data Stream" betekenen, kunnen we PowerShell gebruiken om alle bestanden met streams als volgt te vinden.
Open een PowerShell -opdrachtprompt en voert optioneel de volgende opdracht uit (dit onderdrukt mogelijk irritante bestandstoegang geweigerd foutmeldingen):
$ErrorActionPreference = "SilentlyContinue"
Voer vervolgens de volgende opdrachten uit:
Get-ChildItem -Path \ -Recurse | Get-Item -Stream * | Where-Object Stream -ne ':$DATA' | Convert-Path
Voor het huidige volume retourneert dit een lijst met alle bestanden met een of meer streams.Deze PowerShell -pijplijn wordt als volgt uitgelegd:
Uit een PowerShell -opdrachtprompt kunt u de streambar.txt uit Bestand foo.docx als volgt verwijderen:
Remove-Item -Path .\foo.docx -Stream bar.txt
Als de streamnaam spaties heeft, moet u citaten gebruiken, zoals in:
Remove-Item -Path ".\Bob's Grandfather.png" -Stream "Image Info.txt"
De oorspronkelijke bedoeling van NTFS -streams was om Apple Macintosh -bestandsinteroperabiliteit mogelijk te maken, maar NTFS -streams kunnen best handig zijn.Misschien wilt u bijvoorbeeld gedetailleerde informatie "insluiten" in Family Photo Foto -bestanden:
Als het bovenstaande afbeeldingsbestand de naam "Bob's Grandfather.png" heette, kunt u een stream (met behulp van PowerShell) toevoegen met gedetailleerde beeldinformatie, als volgt:
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."
Om de afbeelding metadata te bekijken die u zojuist instelt, voert u uit:
Get-Content -Path ".\Bob's Grandfather.png" -Stream "image-info.txt"
Merk op dat het -stroomargument vereist dat u de exacte naam van de stroom kent (jokertekens zijn niet toegestaan).Bedenk dat u altijd streamnamen kunt verkrijgen met behulp van Get-Item (die jokertekens accepteert):
Get-Item -Path '.\Bob''s Grandfather.png' -Stream *
Kijk voor de gewilde streamnaam naar de stream -eigenschap in de resulterende uitvoer:
Andere toepassingen voor NTFS -streams kunnen zijn:
Ten slotte heeft u misschien opgemerkt dat uw volume een aantal streams met de naam Zone bevat. Identificeerder.Deze streams worden over het algemeen door Windows gebruikt voor de opslag van URL -beveiligingszones, die bepalen of een bestand moet worden vertrouwd of niet.Een voorbeeld dat laat zien hoe de inhoud van een zone te bekijken. Identificatieverstroom volgt:
Get-Content -Path .\sanders.net-May-2022.gz -Stream Zone.Identifier
En via de Windows -opdrachtprompt:
notepad sanders.net-May-2022.gz:Zone.Identifier
Hopelijk heb je dit artikel interessant gevonden;En misschien vind je een aantal interessante toepassingen voor NTFS -streams om op te starten.
Geschreven door Karlito Bonnevie / mei 24, 2022