Jump to content

Типы файлов Unix

(Перенаправлено из режимов (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]

Наиболее распространенным специальным файлом является каталог. Расположение файла каталога определяется используемой файловой системой. Поскольку в 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)
...
[ редактировать ]

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

Символическая ссылка помечается значком l (нижний регистр L) в качестве первой буквы строки режима, например, в этом сокращенном виде ls -l выход: [5]

lrwxrwxrwx ... termcap -> /usr/share/misc/termcap
lrwxrwxrwx ... S03xinetd -> ../init.d/xinetd

FIFO (именованный канал)

[ редактировать ]

Одной из сильных сторон Unix всегда было межпроцессное взаимодействие . Среди возможностей, предоставляемых ОС, есть каналы , которые соединяют выход одного процесса со входом другого. Это нормально, если оба процесса существуют в одном пространстве родительского процесса и запущены одним и тем же пользователем, но бывают случаи, когда взаимодействующие процессы должны использовать FIFO, называемые здесь именованными каналами . Одно из таких обстоятельств возникает, когда процессы должны выполняться под разными именами пользователей и разрешениями.

Именованные каналы — это специальные файлы, которые могут существовать в любом месте файловой системы. Их можно создать командой mkfifo как в mkfifo mypipe.

Именованный канал помечается значком p в качестве первой буквы строки режима, например, в этом сокращенном виде ls -l выход: [5]

prw-rw---- ... mypipe

Сокет — это специальный файл, используемый для межпроцессного взаимодействия , который обеспечивает связь между двумя процессами. Помимо отправки данных, процессы могут отправлять дескрипторы файлов через соединение сокета домена Unix, используя команду sendmsg() и recvmsg() системные вызовы.

В отличие от именованных каналов, которые допускают только однонаправленный поток данных, сокеты полностью поддерживают дуплексный режим .

Розетка отмечена значком s в качестве первой буквы строки режима, например

srwxrwxrwx /tmp/.X11-unix/X0

Файл устройства (блок, символ)

[ редактировать ]

В Unix почти все объекты обрабатываются как файлы и располагаются в файловой системе, даже такие аппаратные устройства, как жесткие диски. Большим исключением являются сетевые устройства, которые не отображаются в файловой системе, а обрабатываются отдельно.

Файлы устройств используются для применения прав доступа к устройствам и направления операций с файлами соответствующим драйверам устройств.

Unix проводит различие между символьными и блочными устройствами. Различие примерно следующее:

  • Символьные устройства обеспечивают только последовательный поток ввода или принимают последовательный поток вывода.
  • Блочные устройства доступны в произвольном порядке

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

Символьное устройство отмечено значком c в качестве первой буквы строки режима, а блочное устройство помечается знаком b, например, в этом сокращенном виде ls -l выход: [5]

crw-rw-rw- ... /dev/null
brw-rw---- ... /dev/sda
  1. ^ Перейти обратно: а б с "<sys/stat.h>" . Базовые спецификации открытой группы, выпуск 6 . Открытая группа. 21 июля 2019 года. Архивировано из оригинала 27 ноября 2016 года . Проверено 10 февраля 2017 г. .
  2. ^ Лукидес, Майк (октябрь 2002 г.). «Когда файл не является файлом?». Unix Power Tools (3-е изд.). О'Рейли. п. 80. ИСБН  9780596003302 . Файл - это не что иное, как поток байтов...
  3. ^ " file" . IEEE Std 1003.1-2017 ( POSIX ) . Открытая группа . 2018. Архивировано из оригинала 12 октября 2018 г. Проверено 26 октября 2023 г.
  4. ^ Китт, Стивен. «Какой файловый режим является символической ссылкой?» . Обмен стеками Unix и Linux .
  5. ^ Перейти обратно: а б с д и " ls Архивировано из IEEE Std 1003.1-2008 ( POSIX ) . Открытая группа. 11 марта 2017. оригинала 3 августа 2017 года . Проверено 10 февраля 2017 года .
  6. ^ «функция файлового режима в GNU coreutils» . ГНУ. 11 марта 2017 г.
  7. ^ «функция printtype из FreeBSD» . FreeBSD. 11 марта 2017 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2037afeecfe3c49eeef5f9bd5f8dd3d9__1721854020
URL1:https://arc.ask3.ru/arc/aa/20/d9/2037afeecfe3c49eeef5f9bd5f8dd3d9.html
Заголовок, (Title) документа по адресу, URL1:
Unix file types - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)