ADS (Alternative Data Streams, альтернативные потоки данных)

Хотите говорить о Far и не знаете, куда обратиться?
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

ADS (Alternative Data Streams, альтернативные потоки данных)

Post by ccaid »

Поддержка такой маргинальной фичи как ADS просто напрашивается в маргинальный файловый инструмент, и она уже во многом поддерживается Far2, хотя по большей части в маргинальной форме. В будущем, возможно, это изменится, а пока работа с ADS возможна нижеописанным образом.

Создание потока
1) для этого можно использовать стандартную функцию копирования Far2, явно указывая имя потока через двоеточие после имени файла
типичная последовательность действий:
  • на пассивной панели становимся на файл, в который хотим внедрить поток,
    на активной панели становимся на файл, содержимое которого хотим поместить в поток,
    жмем F5 End CtrlShiftEnter : ShiftEnter Enter
    готово
внедрять поток возможно и в файл, и в папку
групповое создание не поддерживается (а как?) — только по одному потоку за раз
внедрение потока работает независимо от положения флажка Use system copy routine
юникондные имена файлов и потоков поддерживаются
2) старинный ANSI плагин NTFS File Streams
используется банальное копирование на панель плагина
внедрять поток возможно и в файл, и в папку
групповое создание поддерживается
юникондные имена файлов и потоков поддерживаются (!)

Просмотр/редактирование потока
можно использовать внутренние вьюер/редактор через префикс, что-то типа:
view: c:\windows\win.ini:win.bmp
edit: c:\windows\win.ini:win.txt
при этом можно свободно переключаться между вьюером и редактором (по F6)
будучи во вьюере, можно вызвать плагин для текущего файла, и некоторые даже работают:
PictureView2 и S&R VersionInfo заработали, MMview и Hlfviewer отказались (что интересно, напрямую через собственный префикс PictureView2 не смог открыть поток)

Открытие потока во внешней программе
без проблем, например:
c:\windows\win.ini:win.txt
поток будет открыт в ассоциированной программе, если она поддерживает такой формат пути. notepad и akelpad — поддерживают

Листинг потоков
1) в Far2 можно, во-первых, в обычной файловой панели использовать колонки: количество потоков и суммарный размер потоков файла (F, G);
во-вторых, использовать стандартный поиск (AltF7): устанавливаем флажок Process alternate data streams под кнопкой Advanced и ищем строку *:* в желаемой области. по окончании поиска результаты передаем в панель и пользуемся
для автоматизации можно использовать в юзерменю примерно такой пункт

Code: Select all

s:  Search ADS
    macro:post AltF7 CtrlY * : * Enter
юникондные имена файлов и потоков поддерживаются
потоки с панели TmpPanel другими плагинами замечательно подхватываются, ну кроме таких, как MMview и Hlfviewer
2) все тот же плагин NTFS File Streams
список потоков он предоставляет в виде плагиновой панели, также на панели есть основной поток и информация по контролю доступа
юникондные имена файлов и потоков поддерживаются
потоки с панели плагина другими плагинами не подхватываются: PictureView2 и S&R VersionInfo не заработали
3) консольная утилита LADS
выводит список всех потоков всех файлов, у которых они есть, в заданной папке (можно и во вложенных папках)
используется кодировка ANSI, поэтому с юникодом в именах — проблемы
формат выводимого списка позволяет без больших усилий получать файл-список для плагина TmpPanel:
в юзерменю добавляем такие пункты

Code: Select all

a:  Panel ADS
    tmp: <lads|ssed -n "/\s\+[0-9]\+\s\+[^:]\+:/{s/\\:/:/;s/\s\+[0-9]\+\s\+//;p}"|recode cp1251..co|recode utf-16be..utf-16le
v:  View ADS
    tmp:+menu <lads|ssed -n "/\s\+[0-9]\+\s\+[^:]\+:/{s/\\:/:/;s/\s\+[0-9]\+\s\+/view: /;p}"|recode cp1251..co|recode utf-16be..utf-16le
(требуется recode из UnxUtils и ssed. возможно, достаточно и sed'а попроще, но зачем, если есть этот)
при вызове первого пункта получаем панель с потоками, при вызове второго — получаем меню потоков. и панель, и меню могут быть пустыми, если потоков в данной папке нет
при выборе пункта меню потоков команда не запускается на исполнение немедленно, а остается в комстроке готовой к нажатию enter или редактированию — это особенность работы плагина TmpPanel
4) консольная утилита streams Марка Руссиновича
с русским и другими подобными символами у нее вообще никак — сплошь вопросительные знаки
и формат представления списка специфичен
поэтому не катит

Удаление потоков
1) имея список потоков на панели TmpPanel, может использовать операцию удаления, и она будет применяться именно к указанному потоку
можно удалять избирательно, по одному
юникодные имена не вызывают затруднений
2) плагин… правильно: NTFS File Streams
можно удалять избирательно, по одному
юникодные имена не вызывают затруднений
3) консольная утилита streams Марка Руссиновича
удаляются сразу все дополнительные потоки файла
юникодные имена затруднений не вызывают, как ни странно. видимо вопросики только при выводе на экран появляются

Извлечение потоков
1) Far2 в лице панели плагина TmpPanel со списком потоков не смог помочь в извлечении. единственный способ — это открыть поток в редакторе и сохранить как. применимо даже к бинарным файлам, если в редакторе нет плагинов, фильтрующих символы
2) плагин NTFS File Streams судя по докам должен извлекать потоки, но на практике добиться этого не удалось, выдает две ошибки подряд: Copy error, Канал был закрыт.

Копирование файлов с потоками
стандартная функция копирования Far2 копирует файлы, сохраняя потоки, если установлен флажок Use system copy routine (само собой целевой том должен быть NTFS)
но есть отличие от поведения explorer'а при копировании на FAT том. explorer сообщает о невозможности скопировать файл без потери свойств, а Far2 молча некопирует потоки
Фар делают добрые люди
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by DrKnS »

ccaid wrote:Листинг потоков
тут нативной поддержки Far2 не предоставляет
Отнюдь:
AltF7 + "*:*" + "[x] Process alternate data streams"
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by ccaid »

DrKnS
ага, бум знать, потом поправлю
сходу возникла пара вопросов
1) поиск походу имеет более прямой подход к TmpPanel, чем использование файл-списков — в его случае с юникодом проблем нет. как бы файл-список пристроить к этому VIP-входу?
2) поток из папки имеет атрибут папки, поэтому его невозможно смотреть/редактировать — баг?
Фар делают добрые люди
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by DrKnS »

поиск походу имеет более прямой подход к TmpPanel, чем использование файл-списков — в его случае с юникодом проблем нет. как бы файл-список пристроить к этому VIP-входу?
Никак и какой в в этом смысл, если список не юникодный?
(TmpPanel) понимает только OEM кодировку файла-списка
Это не так.
поток из папки имеет атрибут папки, поэтому его невозможно смотреть/редактировать — баг?
Да.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by sToLp »

Полагаю, по теме полезна следующая почерпнутая на просторах инета информация о работе с ADS из консоли.

Добавление нового потока: любой человек, обладающий правом записи в файл NTFS, может воспользоваться обычными командами операционной системы для присоединения к файлу альтернативного потока данных. К примеру, следующая команда создает альтернативный поток данных Stream, присоединяет его к файлу с именем file.txt и сохраняет в потоке Stream фразу "top secret":
echo top secret > file.txt:Stream

Просмотреть содержимое потока Stream можно с помощью команды:
more < file.txt:Stream

Для того, чтобы добавить скрытую копию калькулятора Windows (calc.exe) к файлу file.txt нужно просто ввести команду:
type calc.exe >> file.txt:calc.exe

Для запуска скрытого калькулятора введите команду:
start .\file.txt:calc.exe

Создание файла с потоком:
type nul > somefile.txt:Stream

Запись в поток:
echo "Something" >> somefile.txt:Stream

Чтение из потока:
more < somefile:Stream

Копирование содержимого существующего файла в поток:
type file1.txt >> somefile.txt:Stream

Копирование содержимого потока в файл:
more < somefile.txt:Stream >> file2.txt
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by ccaid »

изменил первый пост:
Листинг потоков — добавил пункт про Far2 и изменил пункт про LADS
Удаление потоков — добавил пункт про Far2
добавил раздел Извлечение потоков
Фар делают добрые люди
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by ccaid »

изменен первый пост:
преамбула
первый пункт в «Листинг потоков»

DrKnS
в хелпе есть пункт @WarnCopyStream. согласно ему Фар должен предупреждать при попытке скопировать файл с потоками на FAT, а в реальности этого не происходит. это хелп вперед забежал, или с реализацией что-то не то? на мантис надо?
кстати, последний абзац этого пункта утверждает, что папку скопировать (по F5) с сохранением потоков нельзя — а в рельности уже можно.
Фар делают добрые люди
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by DrKnS »

ccaid wrote:в хелпе есть пункт @WarnCopyStream. согласно ему Фар должен предупреждать при попытке скопировать файл с потоками на FAT, а в реальности этого не происходит. это хелп вперед забежал, или с реализацией что-то не то? на мантис надо?
Ну там даже код есть, который это проверяет, только всё закомментировано. Надо бы доделать когда-нибудь. Запиши на трекер, если такого там ещё нет.
кстати, последний абзац этого пункта утверждает, что папку скопировать (по F5) с сохранением потоков нельзя — а в рельности уже можно.
Уже не утверждает :)
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by ccaid »

Фар делают добрые люди
AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 147 times
Contact:

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by AlexII »

Nir Sofer сделал консольную версию: AltStreamDump - Dumps the list of NTFS alternate streams found in the current directory.

Надо полагать, первой просьбой будет возможность указания конкретного файла, второй — сделать нормальный вывод (при перенаправлении вывода в файл конец строки выглядит как «0x0D, 0x0D, 0x0A»).
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by ccaid »

по первому пункту:
AltStreamDump.exe -f "c:\myfolder" | find "конкретный файл:"
Фар делают добрые люди
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by DrKnS »

Так всё искаропки есть.

for /f "tokens=1* " %a in ('dir /s /r ^|find ":$DATA"') do @echo %b
AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 147 times
Contact:

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by AlexII »

ccaid wrote:AltStreamDump.exe -f "c:\myfolder" | find "конкретный файл:"
Как бы понятно, что фильтровать можно. Но когда наличествует полный путь к конкретному файлу, извращаться разбиением его на путь и на собственно имя (из-за отсутствия соответствующего параметра) не очень впечатляет.


DrKnS, этот параметр:
…dir /s /r
c какой версии ОС есть (в XP нет, 2003 R2 нет; в 2008 Server R2 вижу такое)?
User avatar
zg
zero-gravity
Posts: 6034
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by zg »

AlexII wrote:c какой версии ОС есть (в XP нет, 2003 R2 нет; в 2008 Server R2 вижу такое)?
ну если в xp нет, то с висты.
AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 147 times
Contact:

Re: ADS (Alternative Data Streams, альтернативные потоки дан

Post by AlexII »

zg wrote:если в xp нет, то с висты.
Спасибо, ясно.
Post Reply

Return to “Обсуждение Far Manager”