Основы Файла

Файлы это еще одна тема, где GNU/Linux существенно отличается от Windows и большинства других операционных систем. Мы рассмотрим здесь большинство явных различий. Для получения большей информации смотрите главу Файловая Система Linux, в которой это все рассмотрено подробно.

Преимущественные различия являются прямым следствием того факта,что Linux это многопользовательская система: каждый файл это эксклюзивная собственность одного пользователя и одной группы. Еще одна вещь, которую мы не упоминали о пользователях и группах, состоит в том, что каждый из них обладает личным каталогом (называемым домашний каталог ). Пользователь является владельцем этого каталога и всех файлов, которые он в нем будет создавать.

Однако, это было бы не очень полезно, если это было бы единственное понятие монопольного использования файла. Но это больше: как владелец файла, пользователь может устанавливать права на файлы. Эти права разделяются на три категории пользователей: владелец файла, каждый пользователь, входящий в группу, ассоциированную с файлом (также называемый владелец группы (owner group)), но не являющийся владельцем, и другие, что включает в себя каждого пользователя, отличного от владельца и членов группы владельца.

Существуют три различных варианта прав:

  1. Read (права на чтение) (r): разрешает чтение содержимого файла . Для каталога это обозначает разрешение просмотра его содержимого (то есть файлов в этом каталоге).

  2. Write (права на запись) (w): позволяет изменение содержимого файла. Для каталога права на запись позволяют пользователю добавлять и/или удалять файлы в этом каталоге, даже если пользователь не является владельцем этих файлов.

  3. 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) файлами”;



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости