Linux: каталоги, ссылки и файлы

Doc

Doc

АйТишник со стажем... Профиль автора.

каталоги, ссылки и файлы в LinuxДля организации всех файлов в системе ядро поддерживает структуру одного иерархи­ческого каталога. (В отличие от таких операционных систем, как Microsoft Windows, где своя собственная иерархия каталогов имеется у каждого дискового устройства.) Основу этой иерархии составляет корневой каталог по имени / (слеш). Все файлы и каталоги являются дочерними или более отдаленными потомками корневого каталога. Пример такой иерархической файловой структуры показан на рис. 1.


Оглавление статьи[Показать]


 Пример иерархии одного каталога Linux

Рис. 1. Пример иерархии одного каталога Linux

 

Типы файлов Linux

Внутри файловой системы каждый файл имеет метку, указывающую, к какому типу файлов он относится. Один из этих типов файлов обозначает стандартные файлы данных, которые чаще всего называют обычными или простыми файлами, чтобы отличить их от файлов других типов. Другие типы файлов включают в себя устройства, конвейеры, со­кеты, каталоги и символьные ссылки.

Термин «файл» обычно используется для обозначения файла любого типа, а не только обычного файла.

 

Каталоги и ссылки

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

Каталоги могут содержать ссылки как на файлы, так и на другие каталоги. С помощью ссылок между каталогами устанавливается иерархия каталогов, показанная на рис. 1.

Каждый каталог содержит как минимум две записи: . (точка), которая представляет собой ссылку на сам каталог, и .. (точка-точка), которая является ссылкой на его роди­тельский каталог — тот каталог, что расположен над ним в иерархии. Каждый каталог, за исключением корневого, имеет свой родительский каталог. Для корневого каталога запись .. является ссылкой на него самого (таким образом, обозначение /.. — то же самое, что и /).

 

Символьные ссылки

Подобно обычной ссылке, символьная ссылка предоставляет альтернативное имя для файла. Но, в отличие от обычной ссылки, представляющей собой в списке каталога запись вида «имя файла плюс указатель», символьная ссылка — это специально помеченный файл, содержащий имя другого файла. (Иными словами, у символьной ссылки в каталоге есть запись вида «имя файла плюс указатель», и файл, на который ссылается указатель, содержит строку с именем другого файла.) Этот последний файл часто называют целью символьной ссылки, и зачастую говорится, что символьная ссылка «указывает» или «ссылается» на целевой файл. Когда в системном вызове указывается путевое имя, в боль­шинстве случаев ядро автоматически снимает косвенность каждой символьной ссылки в путевом имени (также говорят «следует по ним»), заменяя ее именем того файла, на который она ведет. Этот процесс может происходить рекурсивно, если цель символьной ссылки сама по себе является символьной ссылкой. (Ядро накладывает ограничение на количество ссылок, чтобы предотвратить возможность появления замкнутых цепочек символьных ссылок.) Если символьная ссылка указывает на несуществующий файл, то говорится, что это битая ссылка.

В качестве альтернативных названий для обычной и символьной ссылки зачастую используются выражения «жесткая ссылка» и «мягкая ссылка».

 

Имена файлов

В большинстве файловых систем Linux длина имен файлов может составлять до 255 символов. Имена файлов могут содержать любые символы, за исключением сле­шей (/) и символа с нулевым кодом (\0). Но желательно использовать только буквы и цифры, а также символы точки (.), подчеркивания (_) и дефиса (-). Этот 65-сим­вольный набор, [-._a-zA-Z0-9], в SUSv3 называется портируемым набором символов для имен файлов.

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

Кроме того, следует избегать ситуаций, когда в связке команда имя_файла имя файла начинается с -, так как оно может быть ошибочно принято за ключ команды.

Путевые имена

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

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

Путевое имя описывает местоположение файла в иерархии одного каталога и является либо абсолютным, либо относительным.

  • Абсолютное путевое имя начинается со слеша и указывает на местоположение файла относительно корневого каталога. Примеры абсолютного путевого имени для файлов, показанных на рис. 1: /home/mtk/.bashrc, /usr/include и / (путевое имя корневого каталога).
  • Относительное путевое имя указывает местоположение файла относительно рабочего каталога текущего запущенного процесса (см. ниже) и отличается от абсолютного путевого имени отсутствием начального слеша. На рис. 1 из каталога usr на файл types.h можно указать, используя относительное путевое имя include/sys/types.h, а из каталога avr доступ к файлу .bashrc можно получить с помощью относительного путевого имени ../mtk/.bashrc.

 

Текущий рабочий каталог

У каждого процесса есть свой текущий рабочий каталог (который иногда называют про­сто рабочим или текущим). Это «текущее местоположение» процесса в иерархии одного каталога, и именно с данного каталога для процесса интерпретируются относительные путевые имена.

Процесс наследует свой текущий рабочий каталог от родительского процесса. В случае входа в систему для оболочки рабочим каталогом является домашний каталог пользова­теля, который указан в его записи в файле паролей. Текущий рабочий каталог оболочки может быть изменен с помощью команды cd.

 

Владение файлами и права доступа

С каждым файлом связаны UID и GID, определяющие владельца этого файла и группу, к которой он принадлежит. Понятие «владение файлом» применяется для определения прав доступа пользователей к файлу.

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

  • права доступа на чтение позволяют считывать содержимое файла;
  • права доступа на запись дают возможность вносить изменения в содержимое файла;
  • права доступа на выполнение позволяют выполнять файл, который является либо про­граммой, либо сценарием, обрабатываемым каким-нибудь интерпретатором (обычно, но не всегда им оказывается одна из оболочек).

Эти права доступа могут быть установлены и для каталогов, хотя их значения не­сколько отличаются:

  • права доступа на чтение позволяют выводить список содержимого каталога (напри­мер, список имен файлов);
  • права доступа на запись дают возможность изменять содержимое каталога (напри­мер, можно добавлять имена файлов, заниматься их перемещением и изменением);
  • права доступа на выполнение (иногда называемые поиском) позволяют получить до­ступ к файлам внутри каталога (с учетом прав доступа к самим файлам).

 

Вас заинтересует / Intresting for you:

Основа операционной системы Li...
Основа операционной системы Li... 3031 просмотров Андрей Волков Wed, 09 Jan 2019, 05:36:45
Краткая история Linux
Краткая история Linux 2673 просмотров Андрей Волков Wed, 09 Jan 2019, 02:46:59
Сигналы в Linux: назначение и ...
Сигналы в Linux: назначение и ... 2044 просмотров Fortan Fri, 05 Nov 2021, 07:58:01
Процессы Linux
Процессы Linux 4555 просмотров Doctor Wed, 23 Jan 2019, 16:47:24
Войдите чтобы комментировать

Doc аватар
Doc ответил в теме #9329 5 года 2 мес. назад
Это да. Планирую просто более подробную статью конкретно по правам.
apv аватар
apv ответил в теме #9328 5 года 2 мес. назад
Хорошее описание основ работы с файлами и каталогами в Linux. Про систему прав можно было бы и по подробнее!