Hostwinds 블로그


Windows NTFS 스트림 나타난 그림

Windows NTFS 스트림

으로: Karlito Bonnevie  /  할 수있다 24, 2022


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에 내용이없고 스트림 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 바이트의 데이터 만 포함되어 있음을 의미합니다.사용 가능한 여유 공간으로의 볼륨 :

del foo.docx
dir /r

이야기의 도덕은 아마도 /r 스위치를 항상 사용하는 것입니다."숨겨진"스트림이 포함 된 모든 파일을 어떻게 찾습니까?그 주제는 다음에 논의됩니다.

PowerShell을 사용하여 스트림을 찾습니다

"파일"이라는 용어가 "평균"기본 데이터 스트림 "및"스트림 "평균"명명 된 데이터 스트림 "이라는 용어를 사용하면 PowerShell을 사용하여 다음과 같이 스트림이 포함 된 모든 파일을 찾을 수 있습니다.

PowerShell 명령 프롬프트를 열고 선택적으로 다음 명령을 실행합니다 (이는 성가신 파일 액세스 거부 오류 메시지를 억제합니다) :

$ErrorActionPreference = "SilentlyContinue"

다음으로 다음 명령을 실행하십시오.

Get-ChildItem -Path \ -Recurse | Get-Item -Stream * | Where-Object Stream -ne ':$DATA' | Convert-Path

현재 볼륨의 경우 하나 이상의 스트림이 포함 된 모든 파일의 목록을 반환합니다.이 PowerShell 파이프 라인은 다음과 같이 설명됩니다.

  • get -childitem -path \ -recurse
    루트 디렉토리 (폴더)에서 시작하여 볼륨의 모든 파일을 가져옵니다.
  • get -item -Stream *
    파일과 관련된 모든 데이터 스트림을 가져옵니다.파일 (이름없는 데이터 스트림)은 스트림 속성의 값으로 ": $ data"를 반환합니다.스트림 (데이터 스트림)은 스트림 속성의 값이되므로 스트림의 이름을 반환합니다 (및 ": $ data는 반환되지 않음).
  • where-object stream -ne ': $ data'
    스트림 속성이 ": $ data"인 모든 파일을 제거하므로 하나 이상의 명명 된 스트림이 포함 된 파일 만 남습니다.
  • 변환 경로
    파일 경로를 멋지게 형식화합니다.

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 스트림은 매우 편리 할 수 있습니다.예를 들어, 가족 사진 파일 내에 자세한 정보를 "포함"할 수 있습니다.

위의 이미지 파일이 "Bob 's Grandfather.png"로 명명 된 경우, 다음과 같이 자세한 이미지 정보가 포함 된 스트림 (PowerShell 사용)을 추가 할 수 있습니다.

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"

-스트림 인수는 스트림의 정확한 이름을 알고 있어야합니다 (와일드 카드는 허용되지 않음).Get-Item (와일드 카드를 받아들이는)을 사용하여 항상 스트림 이름을 얻을 수 있음을 상기하십시오.

Get-Item -Path '.\Bob''s Grandfather.png' -Stream *

인기있는 스트림 이름의 경우 결과 출력의 스트림 속성을보십시오.

NTFS 스트림에 대한 다른 용도는 다음을 포함 할 수 있습니다.

  • 파일과 관련된 키워드 저장
  • 파일에 대한 요약 정보 제공.
  • 글꼴 및/또는 사운드를 파일과 연관시킵니다.
  • 생각할 수있는 파일 메타 데이터.

마지막으로, 귀하의 볼륨에는 Zone.Identifier라는 여러 개의 스트림이 포함되어 있음을 언급했을 것입니다.이 스트림은 일반적으로 URL 보안 영역의 저장에 Windows에서 사용되며 파일을 신뢰할지 여부를 결정합니다.Zone의 내용을 보는 방법을 보여주는 예제. Identifier Stream은 다음과 같습니다.

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