original:http://www.it.fht-esslingen.de/%7Ezimmerma/software/ltools/ltools.html
LTOOLS предоставляет для Windows такую же функциональность, как и MTOOLS для Linux: они позволяют вам обращаться к своим файлам в «неорганизованной» файловой системе.
Использование LTOOLS из командной строки
В основе LTOOLS лежит набор программ командной строки, которые можно вызывать из DOS или из DOS-окна в Windows 9x / ME или Windows NT / 2000 / XP. Они обеспечивают ту же функциональность, что и известные команды LINUX «ls», «cp», «rm», «chmod», «chown» и «ln». Таким образом, под DOS / Windows вы можете
- Создать список файлов и каталогов Linux (команда: ldir),
- Копировать файлы из Linux в Windows и наоборот (команды: lread, lwrite),
- Удалять или переименовывать файлы Linux (команды: ldel, lren),
- Создать символические ссылки (команда: lln),
- Создавать новые каталоги Linux (команда: lmkdir),
- Изменить права доступа и владельца файла Linux (команда: lchange),
- Изменить каталог Linux по умолчанию (команда: lcd),
- Установить диск Linux по умолчанию (команда: ldrive) и
- Показать настройку раздела жесткого диска (команда: ldir -part).
Как и во многих других инструментах UNIX, эти функции включены в один исполняемый файл, который вызывается с набором параметров командной строки. Чтобы сделать вашу жизнь проще, предоставляется набор командных файлов (сценариев оболочки), поэтому вам не нужно запоминать и вводить все эти параметры.
Кроме того, существует версия LTOOLS для Unix / Linux, так что вы можете использовать их под Solaris или даже под Linux, когда хотите получить доступ к файлу на другом разделе жесткого диска, не устанавливая этот раздел.
LTOOLgui – графический интерфейс Java для LTOOLS
Программы командной строки старомодны! Где графический пользовательский интерфейс LTOOLS? Ну, без проблем: используйте LTOOLgui. LTOOLgui, написанный на Java с использованием библиотеки Swing JDK 2, предоставляется для Windows Explorer, как пользовательский интерфейс (рис.1). В двух дочерних окнах LTOOLgui показывает ваши DOS / Windows и ваши деревья каталогов Linux. Перемещение можно выполнять с помощью обычных действий «нажать и вправо». Копирование файлов из Windows в Linux или наоборот может выполняться копированием и вставкой или перетаскиванием. Щелчок правой кнопкой мыши открывает диалоговое окно для просмотра и изменения атрибутов файла, таких как права доступа, GID или UID. Двойной щелчок на файле запустит его, если это исполняемый файл Windows, или откроет его с помощью связанного с ним приложения. Это даже работает с файлами Linux, если у них есть зарегистрированное приложение Windows.
BTW: Вы также можете использовать LTOOLgui в качестве файлового менеджера под Linux. Поскольку программы командной строки LTOOLS также входят в версию Linux, вы можете получить доступ к файлам на дисках без их установки.
Автор выбрал Java для LTOOLgui, потому что Java особенно подходит для низкоуровневого доступа к жесткому диску … шутка! Нет, конечно, это невозможно в Java вообще. Если вы хотите получить доступ к оборудованию напрямую, вы должны использовать код C ++ и JNI (Java для родного интерфейса). Однако, поскольку JNI работает только для 32-битного кода, под Windows 9x / ME это будет означать использование ’32bit до 16bit thunking’ (см. ниже). Поскольку автору не понравилась идея объединить Sun Java с MASM-кодом Microsoft, он использовал другой подход. Он просто использует программу командной строки LTOOLS, которая вызывается из Java через хорошо известный интерфейс stdin / stdout. Поэтому для стороны Java доступ к аппаратным средствам означает простой ввод / вывод файлов на основе потока.
Рис. 1: графический пользовательский интерфейс LTOOLgui на базе Java
Доступ к файлам через Интернет?
Несомненно, любая современная программа должна быть с доступом к интернету! Если вы запустите LREADjav на удаленном компьютере и подключитесь к нему через кнопку подключения LTOOLgui, вы можете получить доступ к файлам Linux на этом удаленном сервере, как если бы они были локальными. LREADjav – простой сервер, который преобразует запрос, выданный LTOOLgui по TCP / IP, в программные вызовы LTOOLS командной строки и отправляет выходные данные программ командной строки обратно через TCP / IP в LTOOLgui (рис.2). Конечно, вы можете не только просматривать списки каталогов, но и делать все то же самое удаленно, что вы можете делать и локально, включая выгрузку и загрузку файлов. Удаленный компьютер может работать под Unix / Linux или Windows. Сегодня это скорее игрушка, чем серьезное приложение, потому что LREADjav может создавать определенные проблемы с безопасностью. В конфигурации по умолчанию его можно использовать только с «localhost», но его можно настроить так, чтобы разрешать соединения от 3 различных удаленных клиентов. Но они идентифицируются только по их IP-адресу, нет защиты паролем или чего-то подобного. Однако, если у пользователя есть серьезное приложение для этого, он может легко реализовать схему логин / пароль … Это все Open Source!
Рис. 2: LTOOLgui для удаленного доступа
Нет Java? Используйте свой веб-браузер!
Возможно, у вас нет установленной Java 2. Ну, без проблем, если у вас есть веб-браузер. Запустите ‘LREADsrv’ и ваш веб-браузер, а также в качестве типа URL-адреса ‘http: // localhost’ (рис.3). Теперь ваш список каталогов Linux должен отображаться графически в вашем веб-браузере. LREADsrv – это небольшой локальный веб-сервер, который через простой CGI-подобный интерфейс делает LTOOLS доступным через HTTP-запросы и динамически преобразует их вывод в HTML-страницы (рисунок 4). Конечно, это не только обеспечивает локальный доступ, но также позволяет удаленный доступ через Интернет. Однако для удаленных пользователей LREADsrv имеет такой же низкий уровень безопасности, как LREADjav.
Поскольку LREADsrv основан на HTML-формах, т.е. не поддерживает перетаскивание или прямое копирование и вставку, работа с вашим веб-браузером немного менее удобна, чем работа с графическим интерфейсом на основе Java. Тем не менее он предоставляет те же функции.
Рис. 3. Изучение файлов Linux с помощью Microsoft Internet Explorer
Рис. 4: LREADsrv – HTTP-доступ к файлам Linux
LTOOLS Internals – доступ к жесткому диску под Windows
Поскольку DOS / Windows сама по себе не поддерживает интерфейсы с чужими файловыми системами, LTOOLS должен обращаться к «сырым» байтам данных непосредственно на диске. Чтобы понять внутреннее устройство LTOOLS, вам необходимо иметь базовое понимание следующих областей:
- Как жесткие диски организованы в разделах и секторах и как к ним можно получить доступ, т.е. как «сырые» байты могут считываться или записываться с диска. Эту информацию можно найти, например в / 2,3 /.
- Как организована файловая система Linux Extended 2. Хороший обзор обо всех файлах inodes, groups, blocks, bitmaps и справочников можно найти, например в / 4 /.
Это автоматически приводит к многоуровневой архитектуре ядра LTOOLS (рис.5), которая состоит из нескольких файлов C:
- Самый нижний уровень 1 (в файле Readdisk.c) физически обращается к жесткому диску. Этот уровень имеет дело с (почти всеми) различиями между DOS, Windows 9x / ME, Windows NT / 2000 / XP и Linux / Unix, касающимися прямого доступа к жесткому диску, и пытается скрыть их от более высоких уровней. Более подробно об этом мы расскажем позже.
- На Уровне 2 рассматриваются типичные inode, block и group UNIX UNIX, в которые организована файловая система Extended 2.
- Уровень 3 управляет структурой каталогов файловой системы.
- Самый высокий уровень 4 (в Main.c) предоставляет пользовательский интерфейс и сканирует параметры командной строки.
Сканируя таблицу разделов вашего жесткого диска, LTOOLS пытается автоматически найти ваш первый Linux-раздел на вашем первом жестком диске. Если вы хотите получить доступ к другому разделу или диску, вам нужно указать его параметром командной строки ‘-s’, например. ‘-s / dev / hdb2’. Кроме того, вы можете установить другой диск и раздел по умолчанию с помощью команды ‘ldrive’. Чтобы узнать, какие разделы у вас есть, вызовите ‘ldir -part’.
Рис. 5: Архитектура LTOOLS
В старые добрые времена DOS жизнь была легкой. Был только один способ для низкоуровневого чтения или записи на ваш жесткий диск: прерывание BIOS 13h / 3 /. Структуры данных BIOS ограничивают жесткие диски до 1024 цилиндров, 63 головки и 255 секторов 512 байтов, то есть 8 ГБ. Большинство компиляторов C предоставили функцию biosdisk (), чтобы эта функция могла использоваться напрямую, без необходимости кодирования на языке ассемблера. Чтобы справиться с большими жесткими дисками, несколько лет назад были введены расширенные функции int 13h. Чтобы преодолеть ограничения BIOS, эти функции используют схему линейной адресации, адреса логических блоков (LBA), а не адресацию старого блока цилиндров (CHS).
Это все еще работает в окне DOS Windows 9x / ME (Таблица 1), по крайней мере для доступа на чтение и до тех пор, пока программа компилируется с 16-битным компилятором. (LTOOLS использует Borland C, версия Windows NT / 2000 / XP также компилируется с Microsoft Visual C, версия Unix / Linux использует GNU C). Если вы хотите иметь низкий уровень доступа для записи, вам нужны блокировки громкости / 3 /. Этот механизм информирует операционную систему о том, что ваша программа выполняет прямую запись на диск в обход драйверов операционной системы, чтобы Windows могла запретить другим программам доступ к диску до тех пор, пока вы не закончите данную операцию. Опять же, это можно сделать без программирования сборки, используя функцию ioctl () компилятора C.
В 16-битной Windows-программе функции BIOS могут быть вызваны только через DPMI. Поскольку большинство компиляторов C не предоставляют функции-оболочки, для этого потребуется (inline) ассемблер. Тем не менее, Win16 не позволяет программы командной строки совсем, так что не волнуйтесь …
В DOS-окне Windows NT / 2000 / XP использование BIOS int 13h приведет к GPF (General Protection Fault). Из соображений безопасности Windows NT / 2000 / XP не позволяет напрямую подключаться к жесткому диску в обход операционной системы. Однако Microsoft предлагает решение, которое почти такое же простое, как и то, что вы напишете в Unix / Linux:
int disk_fd = open("/dev/hda1", O_RDWR);
Это откроет раздел вашего жесткого диска / dev / hda1, чтобы прочитать, что вы должны вызвать read (), чтобы написать, что вы должны вызывать write (). Просто и понятно, не так ли? В Windows NT / 2000 / XP, если вы используете WIN32 API / 5 /, функция CreateFile () не только позволяет создавать и открывать файлы, но также и разделы диска:
HANDLE hPhysicalDrive = CreateFile("\\\\.\\PhysicalDrive0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0 );
Чтение и запись секторов диска теперь можно выполнять с помощью ReadFile () и WriteFile ().
На мгновение вы можете подумать, что вы можете использовать ту же функцию Win32 под Windows 9x / ME. Однако, если вы читаете документацию для CreateFile (), вы найдете:
Windows 95: Этот метод не работает для открытия логического диска. Windows 95, В Windows 95 указание строки в этой форме приводит к тому, что CreateFile возвращает ошибку
В Windows 9x / ME Документация Microsoft Win32 рекомендует вызывать BIOS Int 13h через VWIN32, один из системных VxD (драйверов ядра). Однако, если вы попытаетесь это сделать, вы не добьетесь успеха. В отчете о проблеме Q137176 в базе знаний Microsoft говорится, что, несмотря на то, что говорит официальная документация по Win32, это работает только на гибких дисках, а не на жестких дисках. Как говорится в отчете о проблеме, для жестких дисков единственным способом является вызов BIOS Int 16h в 16-битном коде. Чтобы вызвать 16-битный код из 32-битной программы, вам понадобится «от 32 до 16 бит» от Microsoft … Это не только другой API (с другими не документированными функциями или документированными ошибками?), Для транкинга требуется также транкинг-генератор от Microsoft, который из сценария определения генерирует код ассемблера. Из этого следует сгенерировать 16-битный и 32-битный объектные файлы с помощью ассемблерного MASM Microsoft. Они будут связаны с некоторыми линиями C-кода dozend, которые вы должны писать, в результате чего получается 16-битная и 32-битная DLL (динамическая библиотека ссылок). Кстати, для этого вам понадобится не только 32-битный Visual C ++, но вы также должны иметь старую 16-битную версию компилятора C от Microsoft … Поняли? Использование набора проприетарных, не широко используемых инструментов не будет хорошим решением для программного обеспечения с открытым исходным кодом, такого как LTOOLS!
Подведение итогов: Должны быть отдельные версии для DOS / Windows 9x / ME, Windows NT / 2000 / XP и Linux / Unix. Чтобы скрыть это от пользователя, насколько это возможно, LTOOLS пытается выяснить, под какой операционной системой он запущен и автоматически вызывает соответствующий исполняемый файл.
Таблица 1. Низкоуровневый доступ к жесткому диску
Под DOS | Под Windows 9x / ME | Под Windows NT / 2000 / XP | Под LINUX/Unix |
BIOS Int 13h
(Нужны расширения BIOS для дисков выше 8 ГБ) |
Должен вызывать BIOS Int 13h через DPMI
От 32 до 16 бит в Win16 DLL |
не допускаются
не допускаются
CreateFile (), ReadFile (), WriteFile () |
open(), read(), write() |
Соображения безопасности?
Да, наличие LTOOLS в определенной степени может создать проблемы с безопасностью. Каждый пользователь, который может их запускать, может получать и изменять файлы в файловой системе LINUX, например. Изменять права доступа к файлам или владельцев файлов, обмениваться файлами паролей и т. д. Однако это также возможно и в случае с простым редактором диска. Может быть, это немного более удобно, когда вы используете LTOOLS. Тем не менее, неограниченный доступ возможен только при работе под DOS или Windows 9x / ME. В Windows NT / 2000 / XP пользователю LTOOLS необходимо иметь права администратора для прямого доступа к жесткому диску. В Unix / Linux в большинстве стандартных инсталляций также только администратор sys имеет права доступа к «сырым» дисковым устройствам / dev / hda, / dev / hda1 и т. Д.
Есть ли альтернативы?
LTOOLS – не единственное решение для доступа к файлам Linux из DOS / Windows. Вероятно, Ext2tool / 6 / Claus Tondering, первый набор инструментов для командной строки, разработанный в 1996 году, был первым решением этой проблемы. Тем не менее, Ext2tool ограничен доступом только на чтение и не работает под Windows NT. Основанный на Ext2tool, Питер Джут в 1997 году написал версию Windows NT, все еще ограниченную только для чтения / 7 /. Обе программы были написаны на C, исходные коды доступны.
John Newbigin предоставляет нам Explore2fs / 8 /, который поставляется с очень приятным графическим интерфейсом и работает под Windows 9x и Windows NT. Благодаря доступу на чтение и запись он предоставляет те же функции, что и LTOOLgui. BTW: Джон проделал огромную работу, потому что ему удалось реализовать 32-битную версию Microsoft от 16 бит (см. выше) даже под Delphi от Borland! Поскольку все программы Delphi Explore2fs интегрируются в Windows «бесшовно», перенос на операционные системы, отличные от Windows, может быть затруднен.
История и будущее
Первая версия LTOOLS была создана под оригинальным названием «lread» Джейсона Хантера и Дэвида Лутца в Университете Willamette, Салем / Орегон (США). Эта первая версия работала под DOS, могла показывать списки директорий Linux и копировать файлы с Linux на DOS и ограничивалась небольшими жесткими дисками IDE и LINUX на первичных разделах.
Автор взял на себя техническое обслуживание и дальнейшее развитие в 1996 году. С тех пор LTOOLS научились работать с большими жесткими дисками, получать доступ к дискам SCSI, работать под Windows 9x / ME и Windows NT / 2000 / XP, получать дополнительный доступ на запись и переноситься обратно UNIX, чтобы заставить их работать под Solaris и самим Linux. У них есть веб-браузер, основанный на JAVA графический пользовательский интерфейс и т. д. и т. д. Многие пользователи Linux, большинство из которых названы в исходном коде, помогли в тестировании и отладке. Спасибо.
Тем временем, LTOOLS достиг версии V4.7 / 1 /, может быть, даже больше, после выпуска этой статьи. Помимо дополнительных функций, исправлено много ошибок – и, скорее всего, новые. На протяжении многих лет оставалась общая проблема: никто не предвидел быстрой скорости в технологии жестких дисков, где размеры дисков взорвались, что постоянно наносит ущерб операционным системам. Помните ли вы проблемы DOS с дисками объемом 512 МБ, проблемы с Windows 3.x с разделами 2GB, ограничение по BIOS на 8GB и различные проблемы, с которыми Windows NT имеет 2GB, 4GB и 8GB? Это всего лишь минута назад! И кстати, даже у Linux есть своя проблема: в ядрах, предшествующих 2.3, ни один файл не может превышать 2 ГБ, поскольку Linux, как и большинство 32-битных Unix-систем, использует подписанный 32-битный указатель смещения в read () или write () (это будет разрешено в ядре 2.4 путем изменения смещений на 64-битные значения, но поддержание восходящей совместимости может привести Linux к тем же проблемам, которые мы обсуждали для Windows выше). Стандартизация программного обеспечения для доступа к дискам всегда была намного медленнее, чем у разработчиков дисков, поэтому они изобрели проприетарные решения для преодоления ограничений операционной системы. И всегда LTOOLS – и многим другим программистам – приходилось иметь дело с этим … Так что не сердитесь, если LTOOLS не работают для вас на вашем новом 64GB диске. Это Open Source, поэтому просто попробуйте помочь в отладке и дальнейшей разработке!
И не забывайте, если вы используете LTOOLS: делайте это на свой страх и риск! Доступ только для чтения в Linux не критичен. Однако, если вы используете доступ на запись для удаления файлов или изменения атрибутов файлов на вашем Linux-диске, LTOOLS – и вы обычный пользователь – то вы можете наделать много глупостей. Поэтому всегда держите резервную копию под рукой!
Ссылки
- http://www.it.fht-esslingen.de/~zimmerma/software/ltools.html: Homepage of the LTOOLS
- Michael Tischer: PC-Intern 4. Data-Becker-Verlag
- http://www.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/WWW/files.html Ralf Brown’s interrupt list for x86-PCs
- http://metalab.unc.edu/pub/Linux/system/filesystems/ext2/Ext2fs-overview-0.1.ps.gz: Gadi Oxman’s overview about the Extended 2 filesystem.
- Microsoft Windows Win32 API – Documentation, comes with most Windows C compilers or on the MSDN CDs
- http://metalab.unc.edu/pub/Linux/system/filesystems/ext2/ext2tool_1_1.zip: Claus Tondering’s Ext2tool
- http://metalab.unc.edu/pub/micro/pc-stuff/Linux/utils/dos/ext2nt.lsm: Peeter Joot’s Ext2nt
- http://uranus.it.swin.edu.au/~jn/linux/explore2fs.htm: John Newbigin’s Explore2fs
Об Авторе
«В реальной жизни» Вернер Циммерманн обучает технике управления, цифровым системам и компьютерной архитектуре в Университете прикладных наук FH Esslingen, Эсслинген, Германия. Он имеет аппаратный и программный фон в автомобильных и промышленных встроенных системах. Его «карьера» в качестве разработчика системного программного обеспечения для Linux началась в 1994 году, когда он приобрел диск CDROM, который не поддерживался Linux … Поэтому он разработал «aztcd.c», драйвер CDROM для Linux, который по-прежнему включен во все Стандартные ядра Linux, даже если диск в настоящее время сильно устарел