Файлы это еще одна тема, где GNU/Linux существенно отличается от Windows и большинства других операционных систем. Мы рассмотрим здесь большинство явных различий. Для получения большей информации смотрите главу Файловая система Linux, в которой это все рассмотрено подробно.
Преимущественные различия являются прямым следствием того факта,что Linux это многопользовательская система: каждый файл это эксклюзивная собственность одного пользователя и одной группы. Еще одна вещь, которую мы не упоминали о пользователях и группах, состоит в том, что каждый из них обладает личным каталогом (называемым домашний каталог ). Пользователь является владельцем этого каталога и всех файлов, которые он в нем будет создавать.
Однако, это было бы не очень полезно, если это было бы единственное понятие монопольного использования файла. Но это больше: как владелец файла, пользователь может устанавливать права на файлы. Эти права разделяются на три категории пользователей: владелец файла, каждый пользователь, входящий в группу, ассоциированную с файлом (также называемый владелец группы (owner group)), но не являющийся владельцем, и другие, что включает в себя каждого пользователя, отличного от владельца и членов группы владельца.
Существуют три различных варианта прав:
Read (права на чтение) (r): разрешает чтение содержимого файла . Для каталога это обозначает разрешение просмотра его содержимого (то есть файлов в этом каталоге).
Write (права на запись) (w): позволяет изменение содержимого файла. Для каталога права на запись позволяют пользователю добавлять и/или удалять файлы в этом каталоге, даже если пользователь не является владельцем этих файлов.
eXecute (права на запуск/поиск) (x): разрешают запуск файла (как следствие, все выполняемые файлы обычно идут с этими установленными правами). Для каталога, это позволяет пользователю пересекать(traverse) его (что означает вход в каталог или проход через него). Заметьте, что это отделено от прав на чтение: очень может быть, что вы можете проходить через каталог, но не можете читать его содержимое!
Возможны любые комбинации этих прав. Например, вы можете разрешить чтение файла только для себя и запретить для других. Вы даже можете сделать обратное, даже если это не очень логично на первый взгляд... Как владелец файла, вы также можете сменить владельца группы (если и только если вы являетесь членом новой группы), и даже лишить себя прав на файл (собственно поменять его владельца). Естественно, что если вы лишаете себя прав владельца файла, вы потеряете все права на него...
Давайте приведем пример файла и каталога. Ниже находится результат выполнения команды ls -l из командной строки:
$ ls -l total 1 -rw-r----- 1 queen users 0 Jul 8 14:11 a_file drwxr-xr-- 2 peter users 1024 Jul 8 14:11 a_directory/ $ |
Результаты команды ls -l обозначают (слева направо):
первые десять символов отображают тип файла и связанные с ним права. Первый символ это тип файла: если это обычный файл, тип будет содержать тире (-). Если каталог, вы увидите символ : d. Существуют другие типы файлов, о которых мы поговорим в книге Справочное руководство. Девять следующих символов представляют права для данного файла. Здесь вы видите разделение, проведенное между различными пользователями для одного и того же файла: первые три символа обозначают права для владельца файла, следующие три применяются ко всем пользователям, принадлежащим группе, но которые не являются владельцами, и последние три для других. Тире (-) обозначает, что права не установлены;
затем идет номер ссылки на файл. Мы увидим в книге Справочное руководство что уникальный идентификатор файла это не имя, а номер ( номер inode), и для одного файла на диске возможно иметь несколько названий. Для каталога номер ссылок имеет специальное значение, что мы также обсудим в книге Справочное руководство;
и наконец, показан размер файла (в байтах) и время его последней модификации, идущее за собственно именем файла или каталога.
Давайте теперь поближе посмотрим на права, связанные с каждым из этих файлов: сначала мы отбросим первый символ типа файла и, для файла a_file, получим следующие права: rw-r-----. Права имеют следующую интерпретацию:
первые три символа (rw-) это права владельца файла, в данном случае queen. Следовательно, queen имеет права читать файл (r), изменять его содержимое (w) но не может его запускать (-);
следующие три символа (r--) применяются к любому пользователю, который не queen, но который является членом группы users: такой пользователь сможет читать файл (r), но не писать не выполнять его не сможет (--);
последние три символа (---) применяются для любого пользователя, который не queen и не член группы users : такой пользователь просто не имеет прав на этот файл вообще.
Для каталога a_directory, права такие rwxr-xr--, и также:
peter, как владелец каталога, может получит список файлов, лежащих в нем (r), добавлять или убивать файлы в этом каталоге (w), и он может пересекать его (x);
каждый пользователь, отличный от peter, но член группы users, может видеть список файлов в этом каталоге (r), но не может ни удалять ни добавлять файлов в нем (-), но сможет пересекать его (x);
каждый другой пользователь сможет только получить список содержимого этого каталога (r), но это и все. Он не сможет даже войти в каталог.
Есть одно исключение из этих правил: root. root может изменять атрибуты (права, владельца и владельца группы) всех файлов, даже если он не является владельцем. Это означает, что он также может предоставлять себе монопольное использование! Он может читать файлы, на которые у него нет права на чтение , пересекать каталоги, к которым у него обычно нет прав доступа и так далее. И если он испытывает недостаток прав, ему достаточно только добавить их...
И последнее. Нет никакой разницы между именами файлов в UNIX и Windows мирах. Что касается UNIX, то она предоставляет большую гибкость и имеет меньше ограничений:
имя файла может содержать любой символ (кроме символа ASCII 0, который является концом строки и /, который обозначает разделитель каталога ), даже непечатные. Более того, UNIX является чувствительной к регистру символов : файлы readme и Readme являются разными файлами, потому что r и R читаются как два разных символа под системами на базе UNIX.
Как вы могли заметить, имя файла не обязано иметь расширение, если только вам так не нравится больше. Расширения файлов не обозначают содержимого файлов под GNU/Linux, и не делают этого на любой операционной системе в этом отношении. Так называемые “расширения файлов” являются очень удобными и только. Точка (.) под UNIX это просто один из символов. Нужно заметить, что файлы, у которых имена начинаются с точки под UNIX являются “скрытыми (hidden) файлами”;