Hostwinds Blog

Resultados de búsqueda para:


Transmisión de Windows NTFS Foto principal

Transmisión de Windows NTFS

por: Karlito Bonnevie  /  Mayo 24, 2022


Desde 1995, el Microsoft Windows NTFS El sistema de archivos ha admitido transmisiones.De hecho, todos los "archivos" de NTFS son realmente transmisiones.Lo que normalmente pensamos como un archivo en NTFS se llama más precisamente un flujo de datos predeterminado.Una secuencia de datos predeterminada no tiene nombre.¿Qué es un flujo de datos sin nombre?Considere el formato de nombre de archivo NTFS totalmente calificado:

file-name:stream-name:stream-type

De izquierda a derecha tenemos:

  • nombre del archivo: El nombre del "archivo" (es decir, flujo de datos predeterminado).
  • nombre de transmisión: El nombre de cualquier flujo de datos alternativo (nombrado) adjunto a nombre del archivo (Un archivo puede tener múltiples transmisiones).
  • tipo de transmisión: Para cualquier flujo, indica su tipo, siendo los datos de $ más comunes.Una secuencia de datos tipo $ puede contener cualquier cosa que pueda contener un archivo normal.Para obtener una lista de posibles tipos de transmisión, ver Tipos de transmisión.

Sigue un ejemplo:

myTextFile.txt

Este es un flujo de datos predeterminado.Como se mencionó, los flujos de datos predeterminados no tienen nombre.Esto se puede ver en su formulario de nombre de archivo totalmente calificado:

myTextFile.txt::$DATA

El hecho de que no haya nada entre los dos colons (: :) indica que este es un flujo de datos sin nombre.Para un flujo de datos predeterminado, no necesitamos usar el nombre de archivo completamente calificado, aunque podemos.Por ejemplo, desde el símbolo del sistema de Windows, los siguientes dos comandos se abren precisamente el mismo flujo de datos predeterminado:

notepad myTextFile.txt
notepad myTextFile.txt::$DATA

Para simplificar las cosas, utilizaremos el término "archivo" en lugar de la "secuencia de datos predeterminada" más precisa.

Puede crear una transmisión con nombre en un archivo usando NTFS normal convenciones de nombres.Por ejemplo, desde el símbolo del sistema, ejecute lo siguiente:

notepad foo.docx:bar.txt

Seleccione si Cuando se le preguntó si desea crear un archivo nuevo.A continuación, escriba el siguiente contenido:

This is the named stream "bar.txt" that is in (attached to) the file "foo.docx".

Guardar y salir del bloc de notas.

Cuando ejecute el comando Dir, verá un archivo llamado foo.docx cuyo tamaño, curiosamente, es 0 bytes.Sin embargo, cuando ejecute el comando Dir /R, verá el flujo de datos con nombre que acaba de crear, cuyo tamaño es 80 bytes:

Estos dos tamaños de transmisión tienen sentido en esa transmisión foo.docx no tiene contenido, mientras que Stream foo.docx: Bar.txt tiene un valor de 80 bytes de contenido.Para ayudar a dilucidar esto, agregue algo de contenido al flujo de datos predeterminado, de la siguiente manera:

notepad foo.docx

Ingrese el siguiente texto:

This is the default data stream (file) named "foo.docx", which has one named data stream attached to it, called "bar.txt".

Guardar y salir del bloc de notas.

Ejecute dir /r nuevamente y tenga en cuenta que el flujo de datos predeterminado foo.docx ahora contiene 120 bytes de datos:

Debido a esto, podemos decir que las dos transmisiones consumen 200 bytes en el volumen.Dicho esto, ejecutar el comando Dir sin adornos proporciona información algo engañosa: implica que Foo.docx solo contiene 120 bytes de datos, lo cual es inexacto en el sentido de que cuando elimina foo.docx, en realidad está liberando 200 bytes de regresoVolumen según el espacio libre disponible:

del foo.docx
dir /r

La moraleja de la historia, tal vez, es usar siempre el interruptor /R.Lo que plantea la pregunta, ¿cómo se encuentra todos los archivos que contienen transmisiones "ocultas"?Ese tema se discute a continuación.

Usar PowerShell para encontrar corrientes

Si dejamos que el término "archivo" significa "flujo de datos predeterminado" y "transmisión" media "flujo de datos con nombre", entonces podemos usar PowerShell para encontrar todos los archivos que contienen transmisiones de la siguiente manera.

Abra un símbolo del sistema PowerShell y opcionalmente ejecute el siguiente comando (esto suprime los mensajes de error de acceso posiblemente molesto denegado):

$ErrorActionPreference = "SilentlyContinue"

A continuación, ejecute los siguientes comandos:

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

Para el volumen actual, esto devuelve una lista de todos los archivos que contienen una o más transmisiones.Esta tubería PowerShell se explica de la siguiente manera:

  • Get -ChildItem -Path \ -Recurse
    A partir del directorio root (carpeta), obtiene todos los archivos en el volumen.
  • Get -Item -stream *
    Obtiene todos los flujos de datos asociados con un archivo.Los archivos (transmisiones de datos sin nombre) devolverán ": $ data" como el valor de la propiedad de transmisión.Las transmisiones (transmisiones de datos con nombre) devolverán el nombre de la secuencia como el valor de la propiedad de la secuencia (y ": $ data no se devolverán).
  • Where -Object Stream -ne ': $ Data'
    Elimina todos los archivos cuya propiedad de transmisión es ": $ datos", dejando así solo archivos que contienen una o más transmisiones con nombre.
  • Converso
    Emite rutas de archivo bien formateadas.

Usar PowerShell para eliminar corrientes

Desde un símbolo del sistema PowerShell, puede eliminar el transmisión bar.txt del archivo foo.docx de la siguiente manera:

Remove-Item -Path .\foo.docx -Stream bar.txt

Si el nombre de la secuencia tiene espacios, debe usar citas, como en:

Remove-Item -Path ".\Bob's Grandfather.png" -Stream "Image Info.txt"

Usando transmisiones

La intención original de las transmisiones NTFS era habilitar la interoperabilidad de archivos de Apple Macintosh, pero las transmisiones NTFS pueden ser bastante útiles.Por ejemplo, es posible que desee "incrustar" información detallada dentro de los archivos de fotografías familiares:

Si el archivo de imagen de arriba se llamaba "Bob's Grandfather.png", entonces podría agregar una transmisión (usando PowerShell) que contiene información de imagen detallada, de la siguiente manera:

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."

Para ver los metadatos de la imagen que acabas de configurar, ejecute:

Get-Content -Path ".\Bob's Grandfather.png" -Stream "image-info.txt"

Tenga en cuenta que el argumento -stream requiere que sepa el nombre exacto de la transmisión (no están permitidos los comodines).Recuerde que siempre puede obtener nombres de flujo usando Get-Item (que acepta comodines):

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

Para el nombre de transmisión solicitado, mire la propiedad de la secuencia en la salida resultante:

Otros usos para transmisiones NTFS pueden incluir:

  • Almacenamiento de palabras clave relacionadas con un archivo.
  • Proporcionando información resumida para un archivo.
  • Asociar fuentes y/o sonidos con un archivo.
  • Casi cualquier metadato de archivo que se te ocurra.

Por último, es posible que haya notado que su volumen contiene una serie de transmisiones nombradas Zone.identifier.Windows generalmente usa estas transmisiones para el almacenamiento de zonas de seguridad de URL, que determinan si se debe confiar en un archivo o no.Un ejemplo que muestra cómo ver el contenido de una zona. El flujo de identificación sigue:

Get-Content -Path .\sanders.net-May-2022.gz -Stream Zone.Identifier

Y a través del símbolo del sistema de Windows:

notepad sanders.net-May-2022.gz:Zone.Identifier

Con suerte, has encontrado este artículo interesante;Y tal vez encuentre algunos usos interesantes para que las transmisiones NTFS arrancen.

Escrito por Karlito Bonnevie  /  Mayo 24, 2022