Типы файлов Unix
Семь стандартных типов файлов Unix : обычный , каталог , символическая ссылка , специальный FIFO , специальный блок , специальный символ и сокет , как определено POSIX . [1] Различные реализации, специфичные для ОС, допускают больше типов, чем требует POSIX (например, двери Solaris ). Тип файла можно определить по ls -l
Команда, которая отображает тип в первом символе поля разрешений файловой системы .
Для обычных файлов Unix не навязывает и не предоставляет никакой внутренней файловой структуры; поэтому их структура и интерпретация полностью зависят от программного обеспечения, использующего их. [2] Однако file
Обычно команду можно использовать для определения типа данных, которые они содержат. [3]
Представительства
[ редактировать ]Числовой
[ редактировать ]В структуре статистики тип файла и разрешения ( режим ) хранятся вместе в st_mode
битовое поле , имеющее размер не менее 12 бит (3 бита для указания типа среди семи возможных типов файлов; 9 бит для разрешений). Структура разрешений определяется POSIX как минимум 9 младших битов, но остальная часть не определена. [1]
По соглашению, режим представляет собой 16-битное значение, записанное в виде шестизначного восьмеричного числа без ведущего нуля. Часть формата занимает первые 4 бита (2 восьмеричные цифры) и «010» ( 1000 в двоичном формате) обычно обозначает обычный файл. Следующие 3 бита (1 цифра) обычно используются для setuid, setgid и Sticky . Последняя часть уже определена POSIX как содержащая разрешение. Примером может служить «100644» для типичного файла. Этот формат можно увидеть, в git , tar и ar . среди прочего, [4]
Тип файла можно проверить с помощью макросов, например S_ISDIR
. Такая проверка обычно выполняется путем маскировки режима с помощью S_IFMT
(часто восьмеричное число «170000» для обозначения ведущих 4 битов) и проверка соответствия результата S_IFDIR
. S_IFMT
это не основная концепция POSIX, а расширение X/Open System Interfaces (XSI); системы, соответствующие только POSIX, могут использовать некоторые другие методы. [1]
Строка режима
[ редактировать ]Возьмем, к примеру, одну строку в ls -l
выход:
drwxr-xr-x 2 root root 0 Jan 1 1970 home
POSIX определяет [5] формат вывода для длинного формата ( -l
вариант). В частности, первое поле (перед первым пробелом) называется «строкой режима файла», здесь drwxr-xr-x
. Его первый символ описывает тип файла, здесь d
(каталог). Остальная часть этой строки указывает права доступа к файлу .
Примеры реализации
[ редактировать ]Версия coreutils GNU ls
использует вызов filemode()
, функция glibc (представленная в gnulib библиотеке [6] ), чтобы получить строку режима.
FreeBSD использует более простой подход, но допускает меньшее количество типов файлов. [7]
Каталог
[ редактировать ]Этот раздел нуждается в дополнительных цитатах для проверки . ( октябрь 2023 г. ) |
Наиболее распространенным специальным файлом является каталог. Расположение файла каталога определяется используемой файловой системой. Поскольку в Unix доступно несколько файловых систем, как собственных, так и неродных, не существует единой структуры файлов каталога.
Каталог помечен значком d
в качестве первой буквы в поле режима вывода ls -dl
[5] или stat
, например
$ ls -dl / drwxr-xr-x 26 root root 4096 Sep 22 09:29 / $ stat / File: "/" Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 802h/2050d Inode: 128 Links: 26 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) ...
Символическая ссылка
[ редактировать ]Этот раздел нуждается в дополнительных цитатах для проверки . ( октябрь 2023 г. ) |
Символическая ссылка — это ссылка на другой файл. Этот специальный файл хранится как текстовое представление пути к указанному файлу (это означает, что пункт назначения может быть относительным путем или вообще не существовать).
Символическая ссылка помечается значком l
(нижний регистр L
) в качестве первой буквы строки режима, например, в этом сокращенном виде ls -l
выход: [5]
lrwxrwxrwx ... termcap -> /usr/share/misc/termcap lrwxrwxrwx ... S03xinetd -> ../init.d/xinetd
FIFO (именованный канал)
[ редактировать ]Этот раздел нуждается в дополнительных цитатах для проверки . ( октябрь 2023 г. ) |
Одной из сильных сторон Unix всегда было межпроцессное взаимодействие . Среди возможностей, предоставляемых ОС, есть каналы , которые соединяют выход одного процесса со входом другого. Это нормально, если оба процесса существуют в одном пространстве родительского процесса и запущены одним и тем же пользователем, но бывают случаи, когда взаимодействующие процессы должны использовать FIFO, называемые здесь именованными каналами . Одно из таких обстоятельств возникает, когда процессы должны выполняться под разными именами пользователей и разрешениями.
Именованные каналы — это специальные файлы, которые могут существовать в любом месте файловой системы. Их можно создать командой mkfifo
как в mkfifo mypipe
.
Именованный канал помечается значком p
в качестве первой буквы строки режима, например, в этом сокращенном виде ls -l
выход: [5]
prw-rw---- ... mypipe
Розетка
[ редактировать ]Сокет — это специальный файл, используемый для межпроцессного взаимодействия , который обеспечивает связь между двумя процессами. Помимо отправки данных, процессы могут отправлять дескрипторы файлов через соединение сокета домена Unix, используя команду sendmsg()
и recvmsg()
системные вызовы.
В отличие от именованных каналов, которые допускают только однонаправленный поток данных, сокеты полностью поддерживают дуплексный режим .
Розетка отмечена значком s
в качестве первой буквы строки режима, например
srwxrwxrwx /tmp/.X11-unix/X0
Файл устройства (блок, символ)
[ редактировать ]Этот раздел нуждается в дополнительных цитатах для проверки . ( октябрь 2023 г. ) |
В Unix почти все объекты обрабатываются как файлы и располагаются в файловой системе, даже такие аппаратные устройства, как жесткие диски. Большим исключением являются сетевые устройства, которые не отображаются в файловой системе, а обрабатываются отдельно.
Файлы устройств используются для применения прав доступа к устройствам и направления операций с файлами соответствующим драйверам устройств.
Unix проводит различие между символьными и блочными устройствами. Различие примерно следующее:
- Символьные устройства обеспечивают только последовательный поток ввода или принимают последовательный поток вывода.
- Блочные устройства доступны в произвольном порядке
Хотя, например, разделы диска могут иметь как символьные устройства, обеспечивающие небуферизованный произвольный доступ к блокам раздела, так и блочные устройства, обеспечивающие буферизованный произвольный доступ к блокам раздела.
Символьное устройство отмечено значком c
в качестве первой буквы строки режима, а блочное устройство помечается знаком b
, например, в этом сокращенном виде ls -l
выход: [5]
crw-rw-rw- ... /dev/null brw-rw---- ... /dev/sda
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с "<sys/stat.h>" . Базовые спецификации открытой группы, выпуск 6 . Открытая группа. 21 июля 2019 года. Архивировано из оригинала 27 ноября 2016 года . Проверено 10 февраля 2017 г. .
- ^ Лукидес, Майк (октябрь 2002 г.). «Когда файл не является файлом?». Unix Power Tools (3-е изд.). О'Рейли. п. 80. ИСБН 9780596003302 .
Файл - это не что иное, как поток байтов...
- ^ "
file
" . IEEE Std 1003.1-2017 ( POSIX ) . Открытая группа . 2018. Архивировано из оригинала 12 октября 2018 г. Проверено 26 октября 2023 г. - ^ Китт, Стивен. «Какой файловый режим является символической ссылкой?» . Обмен стеками Unix и Linux .
- ^ Перейти обратно: а б с д и "
ls
Архивировано из IEEE Std 1003.1-2008 ( POSIX ) . Открытая группа. 11 марта 2017. оригинала 3 августа 2017 года . Проверено 10 февраля 2017 года . - ^ «функция файлового режима в GNU coreutils» . ГНУ. 11 марта 2017 г.
- ^ «функция printtype из FreeBSD» . FreeBSD. 11 марта 2017 г.