Какие символы допустимы в имени файла в операционной системе linux
Файловые системы ext2 и ext3 допускают наличие в именах файлов практически любых символов, кроме разделителя директорий ( / ). Однако я не советую использовать имена, содержащие русские буквы, знаки пунктуации (кроме точки), пробелы, псевдографику, экзотические знаки вроде символа перехода на новую строку. Не стоит также начинать имена файлов с дефиса ( — ). Тут дело в том, что многие программы, работающие с файлами, принимают в командной строке ключи (опции), начинающиеся с дефиса. Например, вы хотите пролистать каталог по имени -lR командой ls -lR . Но -lR будет воспринято программой ls не как имя каталога, а как ключи -l (выдать подробный листинг) и -R (рекурсивно), и в результате вы получите листинг текущего каталога (так как каталог не указан, программа ls по умолчанию работает с текущим). Во всех остальных случаях дефис в именах файлов вполне допустим и часто используется. Советуем ограничиться следующим набором символов — латинские буквы (большие и маленькие), цифры, знак подчёркивания, дефис (но не в начале), точка.
Заглавные и маленькие буквы
В файловых системах ext2 и ext3 (в отличие от файловых систем Microsoft Windows ) имена файлов являются чувствительными к регистру ( case sensitive ) — заглавные и маленькие буквы в именах различаются.
Расширения (суффиксы) имён
Термин «расширение» сохранился со времён, когда операционная система Microsoft DOS была самой популярной для персональных компьютеров типа IBM PC. Файловая система DOS позволяла в именах файлов не более 11 знаков; первые не более 8 из них считались основным именем (base name), а не более 3 последних — расширением ( extension ) имени. Для отделения основной части имени от расширения использовалась точка (кроме специальных имён — . и .. ). Сама точка не считалась частью имени. Имена WORK и WORK. означали одно и то же. Вот пример имени файла наиболее длинного имени: AUTOEXEC.BAT . Многие программы для DOS и Windows придают расширениям чересчур большое значение — например, Microsoft Word будет упорно пытаться открыть файл с расширением .DOC как документ в его родном формате, даже если в файле содержится простой текст. В файловых системах Linux точка — такая же часть имени, что и любой другой символ. Теперь уже WORK и WORK. станут ссылаться на разные файлы. Если угодно, можно по-прежнему называть часть имени файла, следующую за точкой, расширением, хотя точек в имени может быть и несколько. Например, файловому архиву в формате tar , сжатому компрессором lzma , часто дают суффикс .tar.lzma . Большинство программ для Linux не связывают расширение имени файла с его содержимым, либо связывают, но позволяют явно указать тип содержимого файла с помощью опций. Тот же Perl будет запускать свои программы по имени, независимо от того, какое расширение использовано — .pl , .plx или .cgi , и есть ли оно вообще.
Некоторые программы вроде текстовых редакторов, работающие с файлами, и «на месте» изменяющие их содержимое, способны оставлять резервные копии. Имена таких копий обычно получаются из исходных имён добавлением знака ~ в конце, например, linux.html~ .
Допустимые имена
Главные отличительные признаки файлов и каталогов — их имена. В Linux имена файлов и каталогов могут быть длиной не более 256 символов, и могут содержать любые символы, кроме «/». Причина этого ограничения очевидна: данный символ используется как разделитель имен в составе пути, поэтому не должен встречаться в самих именах. Причем Linux всегда различает заглавные и строчные буквы в именах файлов и каталогов, поэтому ”ivan”, ”Ivan” и ”IVAN” будут тремя разными именами.
Есть несколько символов, допустимых в именах файлов и каталогов, которые нужно использовать с осторожностью. Это так называемые спецсимволы «*», «\», «&», «», «;», «(», «)», «|», а также символы пробела и табуляции.
Дело в том, что эти символы имеют особое значение для любой командной оболочки, поэтому нужно будет специально позаботиться о том, чтобы командная оболочка воспринимала эти символы как часть имени файла или каталога. О специальном значении символа «-» для команд Linux уже шла речь в лекции 2, там же обсуждалось, как изменить его интерпретацию. О том, зачем командной оболочке нужны спецсимволы, речь пойдет в лекции 8.
Какие символы запрещены в именах файлов для unix-подобных ОС? Спасибо.
В Linux несколько другие правила построения имен файлов, поэтому вам придется с этим смириться. Начнем с того, что в Linux нет такого понятия, как расширение файла. В Linux несколько другие правила построения имен файлов, поэтому вам придется с этим смириться. Начнем с того, что в Linux нет такого понятия, как расширение файла. Например, возьмем имя файла Documentl.doc. В Windows именем файла является Document 1, a doc — это расширение. В Linux Documentl.doc — это имя файла, расширения нет.
Максимальная длина имени файла — 254 символа. Имя может содержать любые символы (в том числе и кириллицу) , кроме /, \, ?,, *, \ |. Кириллицу в именах файлов я бы не рекомендовал вообще использовать. Если вы уверены, что не будете эти файлы передавать Windows-пользователям (на дискете, по электронной почте) — используйте на здоровье. А если же нужно будет отправить файл по электронной почте (кодировка-то у всех разная, поэтому вместо русскоязычного имени пользователь увидит абракадабру) , лучше использовать латиницу в имени файла.
Также вам придется привыкнуть к тому, что система Linux чувствительна к регистру в имени файла: FILE.txt и FiLe.Txt — это два разных файла.
Для разделения элементов пути используется символ / (прямой слэш) , а не \ (обратный слэш) , как в Windows.
Источник: http://runos.ru/faylovaya-sistema/imena-faylov-v-linux.html
Александр СтремиловУченик (184) 8 лет назад
Ответ неверный, можно любые символы использовать, кроме / (корневая директория) . Только экранировать нужно. А создать можно любое имя, например: ~`\|@#. $%^&*()<>[]»»
Структура файловой системы
Главные отличительные признаки файлов и каталогов — их имена. В Linux имена файлов и каталогов могут быть длиной не более 255 символов, и могут содержать любые символы, кроме » / «. Причина этого ограничения очевидна: данный символ используется как разделитель имен в составе пути, поэтому не должен встречаться в самих именах. Причем Linux всегда различает заглавные и строчные буквы в именах файлов и каталогов , поэтому » methody «, » Methody » и » METHODY » будут тремя разными именами.
Есть несколько символов, допустимых в именах файлов и каталогов , которые нужно использовать с осторожностью. Это так называемые спецсимволы » * «, » \ «, » & «, » < ", " >«, » ; «, » ( «, » ) «, » | «, а также символы пробела и табуляции. Дело в том, что эти символы имеют особое значение для любой командной оболочки, поэтому нужно будет специально позаботиться о том, чтобы командная оболочка воспринимала эти символы как часть имени файла или каталога . О специальном значении символа » — » для команд Linux уже шла речь в лекции 2, там же обсуждалось, как изменить его интерпретацию 1 Символ » — » означает, что следующее слово – ключ, а пробелы и табуляции разделяют параметры в командной строке. . О том, зачем командной оболочке нужны спецсимволы , речь пойдет в лекции 8.
Кодировки и русские имена
Как можно было заметить, пока во всех встречавшихся именах файлов и каталогов употреблялись только символы латинского алфавита и некоторые знаки препинания. Это не случайно и вызвано желанием сделать так, чтобы приводимые примеры выглядели на любых системах одинаково. В Linux в именах файлов и каталогов допустимо использовать любые символы любого языка, однако такая свобода требует жертв, на которые Мефодий, например, пойти не смог.
Дело в том, что с давних пор каждый символ (буква) каждого языка традиционно представлялся в виде одного байта. Такое представление накладывает очень жесткие ограничения на количество букв в алфавите: их может быть не больше 256, а за вычетом управляющих символов, цифр, знаков препинания и прочего — и того меньше. Обширные алфавиты (например, иероглифические японский и китайский) пришлось заменять упрощенным их представлением. Вдобавок, первые 128 символов из этих 256 лучше всегда оставлять неизменными, соответствующими стандарту ASCII, включающему латиницу, цифры, знаки препинания и наиболее популярные символы из тех, что встречаются на клавиатуре печатной машинки. Интерпретация остальных 128 символов зависит от того, какая кодировка установлена в системе. Например, в русской кодировке KOI8-R 228-й символ такой таблицы соответствует букве «Д», а в западноевропейской кодировке ISO-8859-1 этот же символ соответствует букве «a» с двумя точками над ней (как у нашей буквы «ё»).
Имена файлов , записанные на диск в одной кодировке , выглядят нелепо, если при просмотре каталога была установлена другая. Более того, многие кодировки заполняют диапазон символов с номерами от 128 до 255 не полностью, поэтому соответствующего символа может вообще не быть! Это означает, что ввести такое искаженное имя файла с клавиатуры (например, для того, чтобы его переименовать) напрямую не удастся: придется пускаться на разные ухищрения, описанные в лекции 8. Наконец, многие языки, в том числе и русский, исторически имеют несколько кодировок 2 Мефодий и сам несколько раз получал электронные письма, начинающиеся словами «бНОПНЯ» или «бМХЛЮМХЕ» – результат представления текста, имеющего кодировку CP-1251, в кодировке KOI8-R. . К сожалению, в настоящее время нет стандартного способа указывать кодировку прямо в имени файла , поэтому в рамках одной файловой системы стоит придерживаться единой кодировки при именовании файлов .
Существует универсальная кодировка , включающая символы всех письменностей мира — UNICODE. Стандарт UNICODE в настоящее время получает все большее распространение и претендует на статус общего для всех текстов, хранящихся в электронном виде. Однако пока он не достиг желаемой универсальности, особенно в области имен файлов . Один символ в UNICODE может занимать больше одного байта — и в этом его главный недостаток, так как множество полезных прикладных программ, отлично работающих с однобайтными кодировками, необходимо основательно или даже полностью перерабатывать для того, чтобы научить их обращаться с UNICODE. Возможно, причина недостаточной распространенности этой кодировки также и в том, что UNICODE — очень громоздкий стандарт, и он может оказаться неэффективным при работе с файловой системой , где скорость и надежность обработки — очень существенные качества.
Это не означает, что, называя файлы , не следует использовать языки, отличные от английского. Пока точно известно, в какой кодировке задано имя файла — проблем не возникнет. Однако Мефодий решил, что гарантий в передаче названного по-русски файла на какую-нибудь другую систему можно добиться, только передавая вместе с ним настройку кодировки , даже две: в своей системе и в системе адресата (неизвестно какой!). Другой, гораздо более легкий способ передать файл — использовать в его названии только символы ASCII.
Расширения
Многим пользователям знакомо понятие расширение — часть имени файла после точки, обычно ограничивающаяся несколькими символами и указывающая на тип содержащихся в файле данных. В файловой системе Linux нет никаких предписаний по поводу расширения: в имени файла может быть любое количество точек (в том числе ни одной), а после последней точки может стоять любое количество символов 3 В отличие от старых файловых систем, организованных по принципу «8+3″ (DOS, ISO9660 и т. п.), где в имени файла допустимо не более одной точки и расширение может быть не длиннее 3-х символов. Это ограничение определило вид многих известных сегодня расширений файлов, например, » txt » для текстового файла. . Хотя расширения не обязательны и не навязываются технологией в Linux, они широко используются: расширение позволяет человеку или программе, не открывая файл , только по его имени определить, какого типа данные в нем содержатся. Однако нужно учитывать, что расширение — это только набор соглашений о наименовании файлов разных типов. Строго говоря, данные в файле могут не соответствовать заявленному расширению по той или иной причине, поэтому всецело полагаться на расширение нельзя.
Определить тип содержимого файла можно и на основании самих данных. Многие форматы предусматривают указание в начале файла , как следует интерпретировать дальнейшую информацию: как программу, исходные данные для текстового редактора, страницу HTML, звуковой файл , изображение или что-то другое. В распоряжении пользователя Linux всегда есть утилита file , которая предназначена именно для определения типа содержащихся в файле данных:
[methody@localhost methody]$ file -- -filename-with- -filename-with-: ASCII English text [methody@localhost methody]$ file /home/methody /home/methody: directory
Пример 3.1. Определение типа данных в файле
Мефодий, забыв, что содержится в файле » -filename-with- «, который он создал в примере, представленном в предыдущей лекции, хотел было уже посмотреть его содержимое при помощи команды cat . Однако его остановил Гуревич, который посоветовал сначала выяснить, что за данные содержатся в этом файле . Не исключено, что это двоичный файл исполняемой программы, а в таком файле могут встречаться последовательности, которые случайно совпадут с управляющими последовательностями терминала. Поведение терминала после этого может стать непредсказуемым, и неопытный пользователь вряд ли сможет с ним справиться. Мефодий получил вполне точный ответ от утилиты file : в его файле — английский текст в кодировке ASCII. file умеет различать очень многие типы данных и почти наверняка выдаст правильную информацию. Эта утилита никогда не доверяет расширению файла (если оно присутствует) и анализирует сами данные. file различает не только разные данные, но и разные типы файлов , в частности, сообщит, если исследуемый файл является не обычным файлом , а, например, каталогом .
Дерево каталогов
Понятие каталога позволяет систематизировать все объекты, размещенные на носителе данных (например, на диске). В большинстве современных файловых систем используется иерархическая модель организации данных: существует один каталог , объединяющий все данные в файловой системе — это «корень» всей файловой системы , корневой каталог . Корневой каталог может содержать любые объекты файловой системы , и в частности, подкаталоги ( каталоги первого уровня вложенности). Те, в свою очередь, также могут содержать любые объекты файловой системы и подкаталоги (второго уровня вложенности) и т. д. Таким образом, все, что записано на диске — файлы , каталоги и специальные файлы — обязательно «принадлежит» корневому каталогу : либо непосредственно (содержится в нем), либо на некотором уровне вложенности.
Иерархию вложенных друг в друга каталогов можно соотнести с иерархией данных в системе: объединить тематически связанные файлы в каталог , тематически связанные каталоги — в один общий каталог и т. д. Если строго следовать иерархическому принципу, то чем глубже будет уровень вложенности каталога, тем более частным признаком должны быть объединены содержащиеся в нем данные. Если не следовать этому принципу, то вскоре окажется гораздо проще складывать все файлы в один каталог и искать среди них нужный, чем выполнять такой поиск по всем подкаталогам системы. Однако в этом случае о какой бы то ни было систематизации файлов говорить не приходится.
Структуру файловой системы можно представить наглядно в виде дерева 4 Здесь имеется в виду дерево в строгом математическом смысле: ориентированный граф без циклов с одной корневой вершиной, в котором в каждую вершину входит ровно одно ребро. , «корнем» которого является корневой каталог , а в вершинах расположены все остальные каталоги . На рис. 3.1 изображено дерево каталогов , курсивом обозначены имена файлов , прямым начертанием — имена каталогов .
Рис. 3.1. Дерево каталогов в Linux
В любой файловой системе Linux всегда есть только один корневой каталог , который называется » / «. Пользователь Linux всегда работает с единым деревом каталогов , даже если разные данные расположены на разных носителях: нескольких жестких или сетевых дисках, съемных дисках, CD-ROM и т. п. 5 Это отличается от технологии, применяемой в Windows или Amiga, где для каждого устройства, на котором есть файловая система, используется свой корневой каталог, обозначенный литерой, например » a «, » c «, » d » и т. д. Для того чтобы отключать и подключать файловые системы на разных устройствах в состав одного общего дерева, используются процедуры монтирования и размонтирования , о которых речь пойдет в лекции 11. После того, как файловые системы на разных носителях подключены к общему дереву, содержащиеся на них данные доступны так, как если бы все они составляли единую файловую систему : пользователь может даже не знать, на каком устройстве какие файлы хранятся.
Положение любого каталога в дереве каталогов точно и однозначно описывается при помощи полного пути . Полный путь всегда начинается от корневого каталога и состоит из перечисления всех вершин, встретившихся при движении по ребрам дерева до искомого каталога включительно. Названия соседних вершин разделяются символом » / » («слэш»). В Linux полный путь , например, до каталога » methody » в файловой системе , приведенной на рис. 3.1, записывается следующим образом: сначала символ » / «, обозначающий корневой каталог , затем к нему добавляется » home «, затем разделитель » / «, за которым следует название искомого каталога » methody «, в результате получается полный путь » /home/methody » 6 Весьма похожий способ записи полного пути используется в системах Windows, с той лишь разницей, что корневой раздел обозначается литерой устройства с последующим двоеточием, а в качестве разделителя используется символ » \ «(«обратный слэш»). .
Организация каталогов файловой системы в виде дерева не допускает появления циклов: т. е. каталог не может содержать в себе каталог , в котором содержится сам. Благодаря этому ограничению полный путь до любого каталога или файла в файловой системе всегда будет конечным.