stringtranslate.com

Расширение имени файла

Расширение имени файла , расширение имени файла или расширение файла — это суффикс имени компьютерного файла ( например, .txt, .docx, .md). Расширение указывает на характеристику содержимого файла или его предполагаемое использование. Расширение имени файла обычно отделяется от остальной части имени файла точкой ( точкой), но в некоторых системах [1] оно отделяется пробелами.

Некоторые файловые системы реализуют расширения имен файлов как особенность самой файловой системы и могут ограничивать длину и формат расширения, в то время как другие рассматривают расширения имен файлов как часть имени файла без особого различия.

Поддержка операционной системы и файловой системы

Файловая система Multics хранит имя файла в виде одной строки, не разделенной на базовое имя и компоненты расширения, что позволяет использовать "." быть просто еще одним символом, разрешенным в именах файлов. Он позволяет использовать имена файлов переменной длины, допуская более одной точки и, следовательно, несколько суффиксов, а также отсутствие точки и, следовательно, отсутствие суффикса. Некоторые компоненты Multics и приложения, работающие на нем, используют суффиксы для обозначения типов файлов, но не все файлы обязаны иметь суффикс — например, исполняемые файлы и обычные текстовые файлы обычно не имеют суффиксов в своих именах.

Файловые системы для UNIX-подобных операционных систем также хранят имя файла в виде одной строки с "." как еще один символ в имени файла. Иногда говорят, что файл с более чем одним суффиксом имеет более одного расширения, хотя терминология в этом отношении различается, и большинство авторов определяют расширение таким образом, чтобы не допускать более одного расширения в одном и том же имени файла. [ нужна цитация ] Более одного расширения обычно представляют собой вложенные преобразования, такие как files.tar.gz( .tarуказывает, что файл представляет собой tar-архив из одного или нескольких файлов, а значок .gzуказывает, что файл tar-архива сжат с помощью gzip ). Программы, преобразующие или создающие файлы, могут добавлять соответствующее расширение к именам, полученным из имен входных файлов (если явно не указано имя выходного файла), но программы, читающие файлы, обычно игнорируют эту информацию; он в основном предназначен для пользователя-человека. Чаще всего, особенно в двоичных файлах, файл содержит внутренние или внешние метаданные, описывающие его содержимое. Эта модель обычно требует указания полного имени файла в командах, тогда как подход с метаданными часто позволяет опустить расширение.

В DOS и 16-разрядной версии Windows имена файлов могут содержать максимум 8 символов, точку и расширение до трех букв. Файловая система FAT для DOS и Windows хранит имена файлов в виде 8-значного имени и трехзначного расширения. Символ точки не сохраняется.

Высокопроизводительная файловая система (HPFS), используемая в OS/2 от Microsoft и IBM , хранит имя файла в виде одной строки с добавлением "." символ как еще один символ в имени файла. Соглашение об использовании суффиксов сохранилось, хотя HPFS поддерживает расширенные атрибуты файлов, позволяя хранить тип файла в файле как расширенный атрибут.

Собственная файловая система Microsoft Windows NT , NTFS и более поздняя ReFS , также хранят имя файла в виде одной строки; Опять же, соглашение об использовании суффиксов для имитации расширений сохранилось для совместимости с существующими версиями Windows. В Windows NT 3.5 появился вариант файловой системы FAT, названный VFAT ; он поддерживает более длинные имена файлов, причем имя файла рассматривается как одна строка.

В Windows 95 с VFAT появилась поддержка длинных имен файлов и удалено разделение имени и расширения 8.3 в именах файлов из Windows, отличных от NT.

Классическая Mac OS полностью избавлялась от метаданных расширений на основе имени файла; вместо этого он использовал отдельный код типа файла для идентификации формата файла. Кроме того, был указан код создателя , определяющий, какое приложение будет запускаться при двойном щелчке по значку файла . [2] macOS , однако, использует суффиксы имен файлов как следствие UNIX-подобной операционной системы NeXTSTEP , в дополнение к использованию кодов типа и создателя.

В системах Commodore файлы могут иметь только четыре расширения: PRG, SEQ, USR, REL. Однако они используются для разделения типов данных, используемых программой, и не имеют значения для идентификации их содержимого.

С появлением графических пользовательских интерфейсов возникла проблема управления файлами и поведением интерфейса. Microsoft Windows позволяла связать несколько приложений с определенным расширением, и для выбора необходимого приложения были доступны различные действия, такие как контекстное меню , предлагающее выбор между просмотром, редактированием или печатью файла. По-прежнему предполагалось, что любое расширение представляет один тип файла; между расширением и значком было однозначное сопоставление.

Когда наступил век Интернета , пользователям систем Windows, которые все еще были ограничены форматами имен файлов 8.3 , приходилось создавать веб-страницы с именами, оканчивающимися на .HTM, в то время как пользователи компьютеров Macintosh или UNIX могли использовать рекомендованное .htmlрасширение имени файла. Это также стало проблемой для программистов, экспериментирующих с языком программирования Java , поскольку он требует четырехбуквенного суффикса .javaдля файлов исходного кода и пятибуквенного суффикса .classдля выходных файлов объектного кода компилятора Java . [3]

Тип содержимого

Расширения имен файлов можно рассматривать как тип метаданных . [4] Они обычно используются для обозначения информации о том, как данные могут храниться в файле. Точное определение, дающее критерии определения того, какая часть имени файла является его расширением, принадлежит правилам конкретной используемой файловой системы ; обычно расширением является подстрока, которая следует за последним появлением точки , если таковая имеется ( пример: txt это расширение имени файла readme.txtи htmlрасширение mysite.index.html). В файловых системах некоторых мэйнфреймов, таких как CMS в VM , VMS , а также в системах ПК, таких как CP/M , и производных системах, таких как MS-DOS , расширение представляет собой отдельное пространство имен от имени файла. В Microsoft DOS и Windows расширения, такие как EXE, COMили BATуказывают, что файл является исполняемым файлом программы . В OS/360 и его преемниках часть имени набора данных, следующая за последней точкой, называемая квалификатором низкого уровня, обрабатывается некоторым программным обеспечением, например TSO EDIT, как расширение, но не имеет особого значения для самой операционной системы; то же самое относится и к файлам Unix в MVS.

Расширение имени файла изначально использовалось для определения общего типа файла. [ нужна цитата ] Необходимость свести тип файла к трем символам часто приводила к сокращенным расширениям. Примеры включают использование .GFXдля графических файлов, .TXTобычного текста и .MUSмузыки. Однако, поскольку было создано множество различных программ, которые обрабатывают эти (и другие) типы данных по-разному, расширения имен файлов стали тесно ассоциироваться с определенными продуктами — даже с конкретными версиями продуктов. Например, в ранних файлах WordStar использовался .WSили , где n — номер версии программы. Кроме того, возникло противоречивое использование некоторых расширений имен файлов. Одним из примеров является , используемый как для пакетов RPM Package Manager , так и для файлов RealPlayer Media;. [5] Другие — , используемые шрифтами DESQview , финансовыми книгами Quicken и изображениями QuickTime ; [6] , совместно используется скриптами GrabIt и образами ПЗУ Game Boy Advance ; [7] , используется для SmallBasic и Scratch ; и используется для Dynamix Three Space и DTS ..WSn.rpm.qif .gba .sb.dts

По сравнению с типом MIME

Во многих интернет- протоколах, таких как электронная почта HTTP и MIME , тип битового потока указывается как тип носителя или тип MIME потока, а не как расширение имени файла. Это указывается в строке текста, предшествующей потоку, например Content-type: text/plain .

Не существует стандартного сопоставления между расширениями имен файлов и типами носителей, что приводит к возможным несоответствиям в интерпретации между авторами, веб-серверами и клиентским программным обеспечением при передаче файлов через Интернет. Например, автор контента может указать расширение svgz для сжатого файла масштабируемой векторной графики , но веб-сервер, который не распознает это расширение, может не отправить правильный тип контента application/svg+xml и требуемый заголовок сжатия, оставив веб-браузеры не в состоянии правильно интерпретировать и отобразить изображение.

BeOS , чья файловая система BFS поддерживает расширенные атрибуты, помечает файл его типом носителя как расширенный атрибут. Некоторые среды рабочего стола , такие как KDE и GNOME , связывают тип носителя с файлом, проверяя как суффикс имени файла, так и содержимое файла, подобно команде file , в качестве эвристического метода . Они выбирают приложение для запуска при открытии файла на основе этого типа носителя, уменьшая зависимость от расширений имен файлов. macOS использует как расширения имен файлов, так и типы носителей, а также коды типов файлов , чтобы выбрать универсальный идентификатор типа , по которому можно идентифицировать тип файла внутри.

Исполняемые программы

Использование расширения имени файла в имени команды появляется время от времени, обычно как побочный эффект того, что команда была реализована в виде сценария, например, для оболочки Bourne или для Python , а имя интерпретатора добавляется к имени команды, практика, распространенная в системах, которые полагаются на ассоциации между расширением имени файла и интерпретатором, но резко устарела [8] в Unix-подобных системах, таких как Linux , Oracle Solaris , системы на базе BSD и macOS от Apple , где интерпретатор обычно указывается как заголовок в скрипте (« шебанг »).

В системах на основе ассоциаций расширение имени файла обычно сопоставляется с одним общесистемным выбором интерпретатора для этого расширения (например, «.py», что означает использование Python), а сама команда может быть запущена из командной строки, даже если расширение опущено (при условии, что соответствующая настройка выполнена). Если язык реализации изменяется, расширение имени команды также изменяется, и ОС предоставляет согласованный API , позволяя использовать одну и ту же версию команды без расширения в обоих случаях. Этот метод несколько страдает от по существу глобального характера сопоставления ассоциаций, а также от того, что разработчики не полностью избегают расширений при вызове программ и что разработчики не могут принудительно этого избежать. Windows — единственный оставшийся широко распространенный поставщик этого механизма.

В системах с директивами интерпретатора , включая практически все версии Unix, расширения имен команд не имеют особого значения и в стандартной практике не используются, поскольку основной метод установки интерпретаторов для сценариев состоит в том, чтобы запустить их с одной строки, определяющей интерпретатор, который будет использоваться. use (которое можно рассматривать как вырожденную вилку ресурса ). В этих средах включение расширения в имя команды излишне раскрывает детали реализации, что подвергает все ссылки на команды из других программ будущему риску, если реализация изменится. Например, было бы совершенно нормально, если бы сценарий оболочки был переопределен на Python или Ruby, а затем на C или C++, и все это изменило бы имя команды, если бы использовались расширения. Без расширений программа всегда имеет одно и то же имя без расширения, меняется только директива интерпретатора и/или магическое число , а ссылки на программу из других программ остаются действительными.

Проблемы с безопасностью

По умолчанию проводник файлов , браузер файлов, входящий в состав Microsoft Windows , не отображает расширения имен файлов. Злоумышленники пытались распространять компьютерные вирусы и компьютерных червей , используя имена файлов, имеющие вид LOVE-LETTER-FOR-YOU.TXT.vbs. Есть надежда, что это будет выглядеть как LOVE-LETTER-FOR-YOU.TXTбезвредный текстовый файл, не предупреждая пользователя о том, что это вредоносная компьютерная программа, в данном случае написанная на VBScript . Поведением по умолчанию для ReactOS является отображение расширений имен файлов в ReactOS Explorer .

Более поздние версии Windows (начиная с Windows XP Service Pack 2 и Windows Server 2003 ) включали настраиваемые списки расширений имен файлов, которые следует считать «опасными» в определенных «зонах» работы, например, при загрузке из Интернета или получении по электронной почте. почтовое вложение. Современные системы антивирусного программного обеспечения также помогают защитить пользователей от таких попыток атак, где это возможно.

Некоторые вирусы используют сходство между доменом верхнего уровня « .com » и расширением имени файла «.COM», отправляя по электронной почте вредоносные вложения исполняемых командных файлов под именами, внешне похожими на URL-адреса ( например , «myparty.yahoo.com» ), в результате чего ничего не подозревающие пользователи нажимают на встроенные в электронную почту ссылки, которые, по их мнению, ведут на веб-сайты, но на самом деле загружают и запускают вредоносные вложения.

Были случаи вредоносного ПО , созданного для использования уязвимостей в некоторых приложениях Windows, которые могли вызвать переполнение стекового буфера при открытии файла со слишком длинным необработанным расширением имени файла.

Расширение имени файла — это всего лишь маркер, и содержимое файла не обязательно должно совпадать с ним. [9] Это можно использовать для маскировки вредоносного контента. Поэтому при попытке идентифицировать файл по соображениям безопасности считается опасным полагаться только на расширение, и предпочтительнее провести надлежащий анализ содержимого файла. Например, в UNIX-подобных системах нередко можно найти файлы вообще без расширений, поскольку fileвместо них предназначены такие команды, которые считывают заголовок файла, чтобы определить его содержимое.

Смотрите также

Рекомендации

  1. ^ "Что такое файл?" (PDF) . z/VM — Версия 7, выпуск 1 — Учебное пособие по CMS (PDF) . ИБМ. 11 сентября 2018 г. п. 7. СК24-6265-00. При создании файлов с помощью z/VM вам необходимо знать одну вещь: каждому файлу необходим собственный идентификатор, состоящий из трех частей. Первая часть идентификатора — это имя файла. Вторая часть — это тип файла. И третья часть — файловый режим. Эти три идентификатора файла часто обозначаются сокращением fn ft fm.
  2. ^ «Коды Mac Creator и типов файлов» . livecode.byu.edu . Проверено 2 сентября 2022 г.
  3. ^ «Javac - компилятор языка программирования Java» . Сан Микросистемс, Инк. 2004 г. Проверено 31 мая 2009 г. Имена файлов исходного кода должны иметь суффиксы .java, имена файлов классов должны иметь суффиксы .class, а файлы исходного кода и файлов классов должны иметь корневые имена, идентифицирующие класс.
  4. ^ Стауффер, Тодд; МакЭлхирн, Кирк (2006). Освоение Mac OS X. John Wiley & Sons. стр. 95–96. ISBN 9780782151282. Проверено 2 октября 2017 г.
  5. ^ Расширение файла .RPM. Подробности с сайта filext.com.
  6. ^ Расширение файла .QIF. Подробности с сайта filext.com.
  7. ^ Расширение файла .GBA. Подробности с сайта filext.com.
  8. ^ Расширения имен команд считаются вредными
  9. ^ «Что такое расширение файла?».

Внешние ссылки