Какое расширение использовать для текстовых файлов? (Unix / Linux)

20

Я заметил, что я могу читать текстовые файлы без расширения .txtпросто отлично. Как придешь? Должен ли я сохранить эти файлы с .txtрасширением или без него ?

Кроме того, как насчет .iniфайлов? Я обычно использую их следующим образом: config.iniнужно ли мне удалять расширение здесь?

Любые общие ресурсы о том, как Linux обрабатывает расширения файлов, были бы полезны.

jcora
источник

Ответы:

37

UNIX / Linux не имеет того же раннего наследия DOS / CP / M, как Windows. Поэтому расширения, как правило, менее значимы для большинства утилит и инструментов UNIX.

Я обычно использую только среду командной строки. Расширения в такой среде под Linux не имеют большого значения, кроме как для удобства оператора или пользователя. (У меня недостаточно опыта работы с KDE или GNOME, чтобы знать, как их файловые менеджеры работают с расширениями.)

Но такое удобство обычно важно. Если config.iniон действительно в стандартном формате Microsoft .ini, я бы оставил расширение в силе. Обычные старые текстовые файлы обычно не имеют расширения в Linux, но это не универсально для всех файлов конфигурации программ. Программист обычно решает это.

Я думаю, что «.txt» полезен в Linux, если вы хотите подчеркнуть, что это НЕ файл конфигурации или другой машиночитаемый документ. Однако в исходных дистрибутивах соглашение состоит в том, чтобы называть такие файлы заглавными буквами без расширения (т. Е. README, INSTALL, COPYING и т. Д.)

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

В Windows присвоение имени файлу .exeуказывает оболочке (обычно explorer.exe), что это исполняемый файл. UNIX встраивает эти знания в разрешения файловой системы. Если установлены правильные xбиты (см. man chmod), Они распознаются как исполняемые оболочками и функциями ядра (я полагаю). Помимо этого, Linux не волнует, большинство оболочек не заботятся, и большинство программ ищут в файле «тип».

Конечно, есть хорошая команда, fileкоторая может проанализировать файл и сказать вам, что это с определенной степенью уверенности. Я считаю, что если он не может сопоставить данные в файле с любым известным типом, и если он содержит только печатные символы ASCII / Unicode, то он предполагает, что это текстовый файл.


@ Брюс Эдигер ниже абсолютно прав. На уровне ядра или файловой системы нет ничего, то есть самого Linux, который обеспечивает или заботится о том, чтобы содержимое файла совпадало с его именем или программой, которая должна его понимать. Это не означает, что невозможно создать утилиту оболочки или запуска, которая будет выполнять действия на основе имени файла.

LawrenceC
источник
7
Это также полезно, если вы много работаете в консоли, поскольку файлы с красивыми именами легче отличить от других с помощью глобализации.
lynxlynxlynx
9
Следует подчеркнуть, что имена файлов Linux не имеют «расширений» - часть «.txt» имени файла, содержащая его, является просто подстрокой. Вы должны также подчеркнуть, что внутренняя организация файлов (строки с LF-концом, строки с CR-LF, записи с фиксированным размером и т. Д.) Даже не имеет никакого отношения к имени, а также «приложение», которое знает о файле, связанном с ним по имени ,
Брюс Эдигер
2
Я думаю, что только записи каталога FAT16 8.3 под DOS имели отдельное 3-байтовое поле для расширения. FAT32 сохранил поле 8.3 для совместимости, но фактическое «длинное имя файла» представляет собой строку без отдельного поля расширения, разделенную на несколько записей каталога ( fandecheng.com/personal/interests/ewindows/nuhelp/lfnspec.htm )
LawrenceC
23

В отличие от Windows, в системах UNIX тип файла не определяется расширением. Расширение файла является и было просто визуальным индикатором для людей. Вы можете назвать JPEG-файл foo.c и открыть его в Gimp. Другим отличием от Windows является то, что в системах UNIX вы должны использовать полное имя файла, в то время как Windows часто позаботится об этом за вас (например, работает только explorerпротив explorer.exe). На UNIX foo.shнадо называть как foo.sh, а не просто foo.

По соглашению люди склонны использовать общий набор расширений. Эта практика, хотя и не нужна, но, вероятно, полезна для всего человечества.

bahamat
источник
7
+1 заThis practice…is probably beneficial for humanity at large
Ульрих Дангель
Жаль, что разнообразие пакетов иногда затрудняет правильную обработку пантомимы (например, в KDE, исходя из моего опыта), хотя я не знаю, почему программы не обращаются к проверке магического байта.
lynxlynxlynx
3
Потому что нет "волшебного" байта. Это просто сокращение для «всех известных типов файлов, которые достаточно хорошо документированы и достаточно структурированы, чтобы их можно было достоверно обнаружить с высокой степенью достоверности». Это работает очень хорошо для текстовых или контейнерных файлов. Обычно он терпит неудачу для любых необработанных или неизвестных типов данных.
Багамат
1
@bahamat Это не байт, но есть часть файла, традиционно называемая « магическим числом », которая должна определять, что файл содержит. Это то, на что fileсмотрит команда. ( #!магическое число для сценариев sh, например)
Izkata
1
@lzkata верно, как я уже сказал: «известные типы файлов, которые достаточно хорошо документированы и достаточно структурированы, чтобы их можно было достоверно обнаружить с высокой степенью достоверности».
Багамат
7

В целом, я считаю, что соблюдение строгого, описательного соглашения об именах очень полезно. Вам не нужно расширение в Unix, но я бы оставил его по двум причинам:

1) Если этот файл когда-либо будет прочитан машиной Windows, его будет легче открыть, чем пытаться найти «открыть с помощью…».

2) Расширения помогают вам, пользователю, выяснить, что делает файл. В нашей лаборатории: .txt = текстовый файл .sgi = скомпилированный двоичный файл irix .linux = скомпилированный двоичный файл linux

Если вам нужно использовать более старые машины Unix (мы все еще используем IRIX), имейте в виду, что возврат каретки отличается на * nix машинах, и программы могут не оценить, если вы попытаетесь открыть файл с возвратами каретки Windows.

Ленц
источник
3

Есть несколько хороших ответов. Я хотел бы дополнительно ответить на часть исходного вопроса: «Любые общие ресурсы о том, как Linux обрабатывает расширения файлов, были бы полезны».

Можно зарегистрировать расширения, чтобы Linux всегда открывал определенные расширения с помощью определенных программ. Это средство называется binfmt .

binfmt_misc - это возможность ядра Linux, которая позволяет распознавать произвольные форматы исполняемых файлов и передавать их в определенные приложения пользовательского пространства, такие как эмуляторы и виртуальные машины. Исполняемые форматы регистрируются через интерфейс файловой системы специального назначения (аналогично / proc). Дистрибутивы на основе Debian предоставляют функциональность через дополнительный пакет binfmt-support.

Каждый формат имеет соответствующую запись файла в каталоге / proc / sys / fs / binfmt_misc, которую можно прочитать, чтобы получить информацию о данном формате файла.

Не сейчас
источник
-2

.txt можно открыть через разные приложения. но важно то, что он используется для классификации файлов определенного типа. Вы можете увидеть, сохраняем ли мы тот же файл, используя .html, который файл пытается открыть в Internet Explorer. приложения сделаны соответственно для поддержки таких типов файлов. Если вы используете .html выше, компилятор пытается найти в нем атрибуты html и соответственно показывает результат. то же самое с другими расширениями. INI-файл может быть прочитан как текст, но расширение классифицирует его как файл конфигурации, и, следовательно, компилятор рассматривает его как файл конфигурации, а не как обычный текстовый файл, так как текстовый файл является только набором записей и не имеет определенной функции. ini.hence вы бы не хотели менять расширение ini на текст

Санджай Махарджан
источник
6
Это может иметь место в Windows, но (как объяснено в других ответах), это не имеет значения в операционных системах UN * X.
Писквор