Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Основы работы с файлами

Пред. 

Глава 1. Основные понятия системы UNIX

 След.


Основы работы с файлами

Аннотация

По сравнению с Windows® и большинством других операционных систем в GNU/Linux работа с файлами организована совсем по-другому. В этом разделе мы рассмотрим большинство явных различий. Для получения дополнительной информации прочтите, пожалуйста, Глава 9, Файловая система Linux.

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

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

Существует три разновидности разрешений:

  1. Разрешение на чтение (Read, r): дает пользователю возможность прочитать содержимое файла. По отношению к каталогу это означает, что пользователь может просмотреть его содержимое (т.е. список файлов этого каталога).
  2. Разрешение на запись (Write, w): разрешает изменять содержимое файла. По отношению к каталогу разрешение на запись дcт пользователю возможность добавлять или удалять файлы из этого каталога, даже если он не является владельцем этих файлов.
  3. Разрешение на выполнение (eXecute, x): разрешает запуск файла (обычно только исполняемые файлы имеют этот тип разрешения). По отношению к каталогу это дает пользователю возможность проходить его, что означает захождение в этот каталог или прохождение сквозь него. Обратите внимание, что это отличается от доступа на чтение: вы в состоянии пройти через каталог, но прочитать его содержимое все-таки не можете!

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

Давайте рассмотрим пример файла и каталога. Ниже представлено выполнение команды 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). Но поскольку у него нет разрешений wx, он не сможет записать файлы или войти в каталог.

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

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

  • Имя файла может содержать любые символы, включая непечатаемые, за исключением ASCII-символа 0, который означает конец строки, и /, который является разделителем каталога. Кроме того, вследствие чувствительности к регистру в UNIX® файлы readme и Readme будут разными, потому что под буквами r и R в системах на базе UNIX® подразумеваются два разных символа.
  • Как вы могли заметить, имя файла не обязательно должно иметь расширение, если только вам не захочется так называть свои файлы. В GNU/Linux расширения файлов не определяют их содержимого, а также на большинстве операционных систем. Тем не менее, так называемые «расширения файлов» довольно удобны. В UNIX® точка (.) - это просто один из символов, но он также имеет одно специальное назначение. В UNIX® файлы с именами, начинающимися с точки, являются «скрытыми»[1], это также касается и каталогов, чьи имена начинаются с .

[Note]

Замечание

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



[1] По умолчанию скрытые файлы не будут отображаться в файловом менеджере до тех пор, пока вы не скажете ему сделать это. В терминале вы должны ввести команду ls -a, чтобы увидеть все скрытые файлы. Зачастую в них содержится конфигурационная информация. В качестве примера взгляните на файлы .mozilla или .openoffice из своего каталога home/.


Пред. 

Уровень выше

 След.

Пользователи и группы 

Начало

 Процессы