elf

title: elf(5)

text:
# elf(5)

## ИМЯ
elf - формат исполняемых и компонуемых файлов (ELF)

## ОБЗОР

```
#include <elf.h>
```

## ОПИСАНИЕ
В заголовочном файле <elf.h> определён формат ELF для исполняемых двоичных файлов. К таким файлам относятся обычные исполняемые файлы, перемещаемые объектные файлы, core-файлы и общие объекты.

Исполняемый файл в формате ELF состоит из заголовка ELF, таблицы заголовков программы или таблицы заголовков разделов (или обеих таблиц). Заголовок ELF всегда расположен в начале файла. Расположение таблицы заголовков программы и таблицы заголовков разделов задаётся в заголовке ELF. В этих двух таблицах описывается всё остальное содержимое файла.

Данный заголовочный файл описывает вышеупомянутые заголовки в виде структур C, а также включает описание структур динамических разделов, разделов перемещений и таблиц символов.

### Базовые типы
Для каждой N-битной архитектуры используются следующие типы (N=32,64; ElfN может быть Elf32 или Elf64; uintN_t может быть uint32_t или uint64_t):

```
ElfN_Addr       Беззнаковый адрес программы, uintN_t
ElfN_Off        Беззнаковое смещение в файле, uintN_t
ElfN_Section    Беззнаковый индекс раздела, uint16_t
ElfN_Versym     Беззнаковые данные о версии символа, uint16_t
Elf_Byte        unsigned char
ElfN_Half       uint16_t
ElfN_Sword      int32_t
ElfN_Word       uint32_t
ElfN_Sxword     int64_t
ElfN_Xword      uint64_t
```

(Замечание: В *BSD используется немного другая терминология. Так, Elf64_Half — удвоенный Elf32_Half, а Elf64Quarter — uint16_t. Чтобы не путаться, далее эти типы заменены на их явные типы.)

Все структуры данных этого формата файлов следуют «естественному» размеру и принципам выравнивания соответствующего класса. Если требуется, структуры данных содержат явно указанные заполнители (padding) для выравнивания по 4-м байтам для 4-байтовых объектов, для доведения размера структур до кратного 4-м и т. д.

### Заголовок ELF (Ehdr)
Заголовок ELF описывается типом Elf32_Ehdr или Elf64_Ehdr:

```
#define EI_NIDENT 16
typedef struct {

    unsigned char e_ident[EI_NIDENT];

    uint16_t      e_type;

    uint16_t      e_machine;

    uint32_t      e_version;

    ElfN_Addr     e_entry;

    ElfN_Off      e_phoff;

    ElfN_Off      e_shoff;

    uint32_t      e_flags;

    uint16_t      e_ehsize;

    uint16_t      e_phentsize;

    uint16_t      e_phnum;

    uint16_t      e_shentsize;

    uint16_t      e_shnum;

    uint16_t      e_shstrndx;
} ElfN_Ehdr;
```

Значения полей:

e_ident

Массив байт, описывающий как воспринимать файл, не зависит от типа процессора или остального содержимого файла. Всё в массиве описывается макросами, начинающимися с префикса EI_, которые могут иметь значения, начинающиеся с префикса ELF. Определены следующие макросы:

EI_MAG0

Первый байт отличительного (magic) числа. Должен быть заполнен ELFMAG0. (0: 0x7f)

EI_MAG1

Второй байт отличительного числа. Должен быть заполнен ELFMAG1. (1: 'E')

EI_MAG2

Третий байт отличительного числа. Должен быть заполнен ELFMAG2. (2: 'L')

EI_MAG3

Четвёртый байт отличительного числа. Должен быть заполнен ELFMAG3. (3: 'F')

EI_CLASS

В пятом байте задаётся архитектура двоичного файла:

ELFCLASSNONE

Неправильный класс.

ELFCLASS32

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

ELFCLASS64

64-битная архитектура.

EI_DATA

В шестом байте задаётся порядок кодирования данных в файле, используемый в процессоре. В настоящее время поддерживаются:

ELFDATANONE

Неизвестный формат данных.

ELFDATA2LSB

Обратный порядок байт (little-endian) в дополнительном коде.

ELFDATA2MSB

Прямой порядок байт (big-endian) в дополнительном коде.

EI_VERSION

В седьмом байте указывается номер версии спецификации ELF:

EV_NONE

Неправильный номер версии.

EV_CURRENT

Текущая версия.

EI_OSABI

В восьмом байте указывается тип операционной системы и двоичного интерфейса приложений (ABI), для которой предназначен объект. Некоторые поля в других структурах ELF имеют флаги и значения, зависящие от платформы; интерпретация таких полей определяется значением данного байта. Пример:

ELFOSABI_NONE

Тоже что и ELFOSABI_SYSV.

ELFOSABI_SYSV

UNIX System V ABI

ELFOSABI_HPUX

HP-UX ABI

ELFOSABI_NETBSD

NetBSD ABI

ELFOSABI_LINUX

Linux ABI

ELFOSABI_SOLARIS

Solaris ABI

ELFOSABI_IRIX

IRIX ABI

ELFOSABI_FREEBSD

FreeBSD ABI

ELFOSABI_TRU64

TRU64 UNIX ABI

ELFOSABI_ARM

ABI архитектуры ARM

ELFOSABI_STANDALONE

Автономный (встраиваемый) ABI

EI_ABIVERSION

В девятом байте указывается версия ABI, для которой предназначен объект. Это поле используется для разграничения несовместимых версий ABI. Интерпретация данного номера версии зависит от ABI, указанного в поле EI_OSABI. В приложениях, удовлетворяющих данной спецификации, используется значение 0.

EI_PAD

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

EI_NIDENT

Размер массива e_ident.

e_type

В этом поле структуры содержится тип объектного файла:

ET_NONE

Неизвестный тип.

ET_REL

Перемещаемый файл.

ET_EXEC

Исполняемый файл.

ET_DYN

Динамический объект.

ET_CORE

Файл типа core.

e_machine

В этом поле содержится значение требуемой для файла архитектуры. Пример:

EM_NONE

Неизвестная машинная архитектура

EM_M32

AT&T WE 32100

EM_SPARC

Sun Microsystems SPARC

EM_386

Intel 80386

EM_68K

Motorola 68000

EM_88K

Motorola 88000

EM_860

Intel 80860

EM_MIPS

MIPS RS3000 (только с прямым порядком байт)

EM_PARISC

HP/PA

EM_SPARC32PLUS

SPARC с расширенным набором инструкций

EM_PPC

PowerPC

EM_PPC64

PowerPC, 64-битная

EM_S390

IBM S/390.

EM_ARM

Advanced RISC Machines.

EM_SH

Renesas SuperH.

EM_SPARCV9

SPARC v9, 64-битная

EM_IA_64

Intel Itanium.

EM_X86_64

AMD x86-64.

EM_VAX

DEC Vax

e_version

В этом поле содержится версия файла:

EV_NONE

Неправильный номер версии

EV_CURRENT

Текущая версия

e_entry

В этом поле содержится виртуальный адрес, по которому система должна передать управление для запуска процесса. Если в файле нет такой точки входа, то значение поля равно 0.

e_phoff

В этом поле содержится файловое смещение в байтах для таблицы заголовков программы. Если в файле нет таблицы заголовков программы, то значение поля равно 0.

e_shoff

В этом поле содержится файловое смещение в байтах для таблицы заголовков разделов. Если в файле нет таблицы заголовков разделов, то значение поля равно 0.

e_flags

В этом поле содержатся специфичные для процессора флаги, относящиеся к файлу. Имена флагов имеют вид: EF_машинный_флаг. В настоящее время нет ни одного предопределённого флага.

e_ehsize

В этом поле содержится размер заголовка ELF в байтах.

e_phentsize

В этом поле содержится размер в байтах одного элемента таблицы заголовков программы в файле; все элементы имеют одинаковый размер.

e_phnum

В этом поле содержится количество элементов в таблице заголовков программы. Таким образом, произведение e_phentsize и e_phnum даёт размер таблицы в байтах. Если в файле нет заголовков программы, то e_phnum содержит 0.

Если количество элементов в таблице заголовков программы больше или равно PN_XNUM (0xffff), это поле содержит значение PN_XNUM (0xffff) и реальное количество элементов таблицы заголовков программы хранится в поле sh_info начального элемента таблицы заголовков разделов. Иначе поле sh_info начального элемента содержит ноль.

PN_XNUM

Имеет значение 0xffff, самое большое количество, которое может иметь e_phnum, показывает, где расположено реальное количество заголовков программы.

e_shentsize

В этом поле содержится размер в байтах одного элемента таблицы заголовков разделов; все элементы имеют одинаковый размер.

e_shnum

В этом поле содержится количество элементов в таблице заголовков разделов. Таким образом, произведение e_shentsize и e_shnum даёт размер таблицы разделов в байтах. Если в файле нет заголовков разделов, то e_shnum содержит 0.

Если количество элементов в таблице заголовков разделов больше или равно SHN_LORESERVE (0xff00), то значение e_shnum равно и реальное количество элементов таблицы заголовков разделов хранится в поле sh_size начального элемента таблицы заголовков разделов. Иначе поле sh_size начального элемента таблицы заголовков разделов имеет значение ноль.

e_shstrndx

В этом поле содержится индекс элемента в таблице заголовков разделов, указывающий на строковую таблицу названий разделов. Если в файле нет строковой таблицы названий разделов, то это поле содержит значение SHN_UNDEF.

Если индекс строки имён разделов в таблице разделов больше или равен SHN_LORESERVE (0xff00), то в этом поле содержится значение SHN_XINDEX (0xffff) и реальный индекс строки имён разделов в таблице разделов хранится в поле sh_link начального элемента таблицы заголовков разделов. Иначе поле sh_link начального элемента таблицы заголовков разделов имеет значение ноль.

### Заголовок программы (Phdr)
Таблица заголовков программы исполняемого или совместно используемого объектного файла представляет собой массив структур, каждая из которых описывает сегмент или содержит другую информацию, необходимую системе для подготовки программы к выполнению. Сегмент объектного файла содержит один или более разделов. Заголовки программы нужны только для исполняемых и совместно используемых объектных файлов. Размер заголовков программы указывается в файле в заголовке ELF в полях e_phentsize и e_phnum. Заголовок программы ELF описывается типом Elf32_Phdr или Elf64_Phdr, в зависимости от архитектуры:

```
typedef struct {

    uint32_t   p_type;

    Elf32_Off  p_offset;

    Elf32_Addr p_vaddr;

    Elf32_Addr p_paddr;

    uint32_t   p_filesz;

    uint32_t   p_memsz;

    uint32_t   p_flags;

    uint32_t   p_align;
} Elf32_Phdr;
```

```
typedef struct {

    uint32_t   p_type;

    uint32_t   p_flags;

    Elf64_Off  p_offset;

    Elf64_Addr p_vaddr;

    Elf64_Addr p_paddr;

    uint64_t   p_filesz;

    uint64_t   p_memsz;

    uint64_t   p_align;
} Elf64_Phdr;
```

Основным отличием между 32-битным и 64-битным программным заголовком в структуре является расположение поля p_flags.

p_type

Это поле структуры определяет, какой тип сегмента описывает этот элемент массива или как воспринимать информацию данного элемента массива.

PT_NULL

Элемент массива не используется и значения других полей не определены. Это позволяет иметь в заголовке программы игнорируемые элементы.

PT_LOAD

Элемент массива определяет загружаемый сегмент, описываемый p_filesz и p_memsz. Байты из файла проецируются в начало сегмента памяти. Если размер сегмента памяти p_memsz больше чем размер файла p_filesz, то определяются "дополнительные" байты, содержащие значение 0, и их располагают за инициализированной областью сегмента. Размер файла не может быть больше размера памяти. Элементы загружаемых сегментов в таблице заголовков программы располагаются в порядке возрастания, их сортируют по полю p_vaddr.

PT_DYNAMIC

Элемент массива указывает на данные с информацией по динамической компоновке.

PT_INTERP

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

PT_NOTE

Элемент массива указывает на расположение заметок (ElfN_Nhdr).

PT_SHLIB

Данный тип сегмента зарезервирован, но имеет неопределённую семантику. Программы, в которых есть элемент массива такого типа, не соответствуют ABI.

PT_PHDR

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

PT_LOPROC, PT_HIPROC

Значения из диапазона [PT_LOPROC, PT_HIPROC] (не включая) зарезервированы для процессорно-ориентированной семантики.

PT_GNU_STACK

Расширение GNU, используемое ядром Linux для управления состоянием стека через флаги, настраивается в поле p_flags.

p_offset

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

p_vaddr

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

p_paddr

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

p_filesz

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

p_memsz

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

p_flags

В этом поле содержится битовая маска флагов соответствующего сегмента:

PF_X

Исполняемый сегмент.

PF_W

Сегмент доступен для записи.

PF_R

Сегмент доступен для чтения.

Сегмента кода (text segment) обычно имеет флаги PF_X и PF_R. Сегмент данных обычно имеет флаги PF_W и PF_R.

p_align

В этом поле содержится значение согласно которому сегменты выровнены в памяти и в файле. У загружаемых сегментов процесса значения p_vaddr и p_offset должны быть кратны размеру страницы. Величины ноль и один означают, что выравнивание не требуется. В противном случае значение p_align должно быть положительным числом кратным степени двойки, а значение p_vaddr должно быть равно p_offset и кратным p_align.

### Заголовок раздела (Shdr)
По таблице заголовков разделов можно найти расположение всех разделов в файле. Она представляет собой массив структур Elf32_Shdr или Elf64_Shdr. На начало таблицы заголовков разделов в файле указывает поле e_shoff заголовка ELF (в байтах). В e_shnum содержится количество элементов таблицы заголовков разделов. В e_shentsize содержится размер каждого элемента в байтах.

Индекс элемента в таблице заголовков разделов указывает в этот массив. Некоторые индексы элемента в таблице заголовков разделов зарезервированы: начальный элемент и индексы от SHN_LORESERVE и до SHN_HIRESERVE. Начальный элемент используется в расширениях ELF для e_phnum, e_shnum and e_strndx; в других случаях, каждое поле начального элемента равно нулю. В объектном файле нет разделов с этими специальными индексами:

SHN_UNDEF

Этим значением помечается неопределённая, отсутствующая, неприменимая, или другая нецелесообразная ссылка на раздел.

SHN_LORESERVE

Это значение задаёт нижнюю границу диапазона зарезервированных индексов.

SHN_LOPROC, SHN_HIPROC

Значения, больше диапазона [PT_LOPROC, PT_HIPROC] (включительно) зарезервированы для процессорно-ориентированной семантики.

SHN_ABS

Это значение указывает на абсолютное значение соответствующей ссылки. Например, символы, определённые относительно раздела с номером SHN_ABS, имеют абсолютные значения и не подвержены перемещению.

SHN_COMMON

Символы, определённые относительно такого раздела, являются общими символами, такими как Fortran COMMON или нераспределённые внешние переменные C.

SHN_HIRESERVE

Этим значением определяется верхняя граница диапазона зарезервированных индексов. В системе зарезервированы индексы между SHN_LORESERVE и SHN_HIRESERVE включительно. В таблице заголовков разделов нет элементов с зарезервированными индексами.

Заголовок раздела имеет следующую структуру:

```
typedef struct {

    uint32_t   sh_name;

    uint32_t   sh_type;

    uint32_t   sh_flags;

    Elf32_Addr sh_addr;

    Elf32_Off  sh_offset;

    uint32_t   sh_size;

    uint32_t   sh_link;

    uint32_t   sh_info;

    uint32_t   sh_addralign;

    uint32_t   sh_entsize;
} Elf32_Shdr;
```

```
typedef struct {

    uint32_t   sh_name;

    uint32_t   sh_type;

    uint64_t   sh_flags;

    Elf64_Addr sh_addr;

    Elf64_Off  sh_offset;

    uint64_t   sh_size;

    uint32_t   sh_link;

    uint32_t   sh_info;

    uint64_t   sh_addralign;

    uint64_t   sh_entsize;
} Elf64_Shdr;
```

Существенной разницы между 32-битными и 64-битными заголовками разделов нет.

sh_name

В этом поле указывается название раздела. Его значением является индекс в строковой таблице заголовков разделов, дающий расположение строки, заканчивающейся null.

sh_type

В этом поле содержится тип содержимого раздела, определяющий смысл.

SHT_NULL

Этим значением помечают неактивные разделы в заголовке. У такого элемента нет привязанного раздела. Значения других полей заголовка раздела не определены.

SHT_PROGBITS

Этот раздел содержит информацию, задаваемую программой; её формат и смысл полностью определяется программой.

SHT_SYMTAB

В этом разделе содержится таблица символов. Обычно, раздел SHT_SYMTAB предоставляет символы для редактирования связей, хотя также может использоваться при динамической компоновке. Являясь полной таблицей символов может содержать символы, не требуемые для динамической компоновки. Объектный файл также может содержать раздел SHT_DYNSYM.

SHT_STRTAB

В этом разделе содержится таблица строк. В объектном файле может быть несколько разделов с таблицами строк.

SHT_RELA

В этом разделе содержатся элементы перемещения с явными добавками, такими как тип Elf32_Rela для 32-битного класса объектных файлов. Объектный файл может иметь несколько разделов перемещений.

SHT_HASH

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

SHT_DYNAMIC

В этом разделе содержится информация по динамической компоновке. В объектном файле должен быть только один динамический раздел.

SHT_NOTE

В этом разделе содержатся заметки (ElfN_Nhdr).

SHT_NOBITS

Разделы этого типа не занимают пространства в файле, но слегка напоминают SHT_PROGBITS. Несмотря на то, что байт в нём нет, поле sh_offset содержит умозрительное файловое смещение.

SHT_REL

В этом разделе содержатся элементы перемещения без явных добавок, таких как тип Elf32_Rela для 32-битного класса объектных файлов. Объектный файл может иметь несколько разделов перемещений.

SHT_SHLIB

Данный тип сегмента зарезервирован, но имеет неопределённую семантику.

SHT_DYNSYM

В этом разделе содержится минимальный набор символов для динамической компоновки. В объектном файле также может быть раздел SHT_SYMTAB.

SHT_LOPROC, SHT_HIPROC

Значения из диапазона SHT_LOPROC, SHT_HIPROC] (включительно) зарезервированы для процессорно-ориентированной семантики.

SHT_LOUSER

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

SHT_HIUSER

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

sh_flags

В этом поле указываются различные атрибуты раздела, задаваемые в виде однобитных флагов. Если бит флага установлен в sh_flags, то атрибут "активен" для раздела. Иначе атрибут "выключен" или не применяется. Не указанные атрибуты сбрасываются в ноль.

SHF_WRITE

В разделе содержатся данные, к которым при работе процесса нужен доступ на запись.

SHF_ALLOC

Этот раздел занимает память при работе процесса. Некоторые управляющие разделы не располагаются в образе памяти объектного файла. Этот атрибут выключен у таких разделов.

SHF_EXECINSTR

Этот раздел содержит исполняемые машинные инструкции.

SHF_MASKPROC

Все биты этой маски зарезервированы для процессорно-ориентированной семантики.

sh_addr

Если этот раздел появляется в образе памяти процесса, то это поле содержит адрес, по которому должен располагаться первый байт раздела. Иначе поле содержит ноль.

sh_offset

В этом поле содержится смещение в байтах от начала файла до первого байта раздела. Раздел типа SHT_NOBITS не занимает места в файле и его поле sh_offset содержит умозрительное размещение в файле.

sh_size

В этом поле содержится размер раздела в байтах. За исключением раздела с типом SHT_NOBITS, все разделы занимают sh_size байт в файле. Раздел с типом SHT_NOBITS может иметь ненулевой размер, но места в файле не занимает.

sh_link

В этом поле содержится ссылка-индекс в таблицу заголовков раздела, а интерпретация зависит от типа раздела.

sh_info

В этом поле содержится дополнительная информация, чья интерпретация зависит от типа раздела.

sh_addralign

Некоторые разделы имеют требования по выравниванию адресов. Если раздел содержит двойное слово, то система должна произвести выравнивание по двойному слову всего раздела. То есть, значение sh_addr должно быть таким, чтобы при делении по модулю sh_addralign получался ноль. Разрешены только ноль и положительные степени двойки. Значение 0 или 1 означают, что раздел не имеет требований по выравниванию.

sh_entsize

В некоторых разделах содержатся таблицы с элементами одинакового размера, например, таблица символов. Для таких разделов в данном поле указывается размер в байтах каждого элемента. Если раздел содержит таблицу с элементами разного размера, то это поле равно нулю.

Программа и управляющая информация содержится в различных разделах:

.bss

В этом разделе содержатся неинициализированные данные, которые вносятся в образ программы в памяти. По определению, в начале выполнения программы система инициализирует эти данные нулями. Этот раздел имеет тип SHT_NOBITS и атрибуты SHF_ALLOC и SHF_WRITE.

.comment

В этом разделе содержится управляющая информация о версии. Он имеет тип SHT_PROGBITS и не имеет атрибутов.

.ctors

В этом разделе содержатся инициализированные указатели функций-конструкторов C++. Он имеет тип SHT_PROGBITS и атрибуты SHF_ALLOC и SHF_WRITE.

.data

В этом разделе содержатся инициализированные данные, которые вносятся в образ программы в памяти. Он имеет тип SHT_PROGBITS и атрибуты SHF_ALLOC и SHF_WRITE.

.data1

В этом разделе содержатся инициализированные данные, которые вносятся в образ программы в памяти. Он имеет тип SHT_PROGBITS и атрибуты SHF_ALLOC и SHF_WRITE.

.debug

В этом разделе содержится информация для символьной отладки. Формат содержимого не определён. Этот раздел имеет тип SHT_PROGBITS и не имеет атрибутов.

.dtors

В этом разделе содержатся инициализированные указатели функций-деструкторов C++. Он имеет тип SHT_PROGBITS и атрибуты SHF_ALLOC и SHF_WRITE.

.dynamic

В этом разделе содержится информация о динамической компоновке. К атрибутам раздела будет добавлен бит SHF_ALLOC. В зависимости от процессора может быть установлен бит SHF_WRITE. Этот раздел имеет тип SHT_DYNAMIC.

.dynstr

В этом разделе содержатся строки, необходимые для динамической компоновки; чаще всего это строки, представляющие имена, связанные с элементами таблицы символов. Этот раздел имеет тип SHT_STRTAB и атрибут SHF_ALLOC.

.dynsym

В этом разделе содержится таблица символов для динамической компоновки. Этот раздел имеет тип SHT_DYNSYM и атрибут SHF_ALLOC.

.fini

В этом разделе содержатся исполняемые инструкции, которые вносятся в код завершения процесса. При нормальном завершении программы система передаёт выполнение коду из этого раздела. Этот раздел имеет тип SHT_PROGBITS и атрибуты SHF_ALLOC и SHF_EXECINSTR.

.gnu.version

В этом разделе содержится таблица версий символов, массив элементов ElfN_Half. Данный раздел имеет тип SHT_GNU_versym и атрибут SHF_ALLOC.

.gnu.version_d

В этом разделе содержатся определения версий символов, таблица структур ElfN_Verdef. Данный раздел имеет тип SHT_GNU_verdef и атрибут SHF_ALLOC.

.gnu.version_r

В этом разделе содержатся версии символов необходимых элементов, таблица структур ElfN_Verneed. Данный раздел имеет тип SHT_GNU_versym и атрибут SHF_ALLOC.

.got

В этом разделе содержится таблица глобальных перемещений. Он имеет тип SHT_PROGBITS. Набор используемых атрибутов зависит от процессора.

.hash

В этом разделе содержится хэш-таблица символов. Он имеет тип SHT_HASH и атрибут SHF_ALLOC.

.init

В этом разделе содержатся исполняемые инструкции, которые вносятся в код инициализации процесса. Когда программа запускается, система передаёт выполнение коду из этого раздела до вызова основной программы. Данный раздел имеет тип SHT_PROGBITS и атрибуты SHF_ALLOC и SHF_EXECINSTR.

.interp

В этом разделе содержится путь к интерпретатору программы. Если файл имеет загружаемый сегмент, который включает раздел, то в атрибуты раздела будет добавлен бит SHF_ALLOC. Иначе этот бит будет обнулён. Данный раздел имеет тип SHT_PROGBITS.

.line

В этом разделе содержатся информация о номерах строк для символьной отладки, которая описывает соответствие между исходным кодом программы и машинным кодом. Формат содержимого не определён. Данный раздел имеет тип SHT_PROGBITS и не имеет атрибутов.

.note

В этом разделе содержатся различные заметки. Он имеет тип SHT_NOTE. Типы атрибутов атрибутов не используются.

.note.ABI-tag

Этот раздел используется для объявления ожидаемой образом ELF среды выполнения (run-time) ABI. Здесь может указываться имя операционной системы и её версии среды выполнения. Данный раздел имеет тип SHT_NOTE. Используется только атрибут SHF_ALLOC.

.note.gnu.build-id

Данный раздел используется для хранения ID, который уникально отождествляет содержимое образа ELF. Разные файлы с одинаковым ID сборки должны содержать одинаковое исполняемого содержимое. Подробней смотрите в описании параметра --build-id компоновщика GNU (ld (1)). Данный раздел имеет тип SHT_NOTE. Используется только атрибут SHF_ALLOC.

.note.GNU-stack

Этот раздел используется в объектных файлах Linux для объявления атрибутов стека. Данный раздел имеет тип SHT_PROGBITS и единственный атрибут SHF_EXECINSTR. Он указывает компоновщику GNU на необходимость объектного файла иметь исполняемый стек.

.note.openbsd.ident

Обычно, этот раздел содержится а собственных исполняемых файлах OpenBSD для их идентификации, что используется ядром для пропуска тестирования на необходимость эмуляции двоичных файлов ELF при загрузке файла.

.plt

В этом разделе содержится таблица компоновки процедур. Он имеет тип SHT_PROGBITS. Набор используемых атрибутов зависит от процессора.

.relИМЯ

В этом разделе содержится информация о перемещениях, описываемая далее. Если файл имеет загружаемый сегмент, включающий перемещение, то в атрибуты раздела добавится бит SHF_ALLOC. Иначе этот бит будет обнулён. По соглашению, «ИМЯ» указывает на раздел, к которому применяются перемещения. То есть раздел перемещений для .text обычно называется .rel.text. Данный раздел имеет тип SHT_REL.

.relaNAME

В этом разделе содержится информация о перемещениях, описываемая далее. Если файл имеет загружаемый сегмент, включающий перемещение, то в атрибуты раздела добавится бит SHF_ALLOC. Иначе этот бит будет обнулён. По соглашению, «ИМЯ» указывает на раздел, к которому применяются перемещения. То есть раздел перемещений для .text обычно называется .rela.text. Данный раздел имеет тип SHT_RELA.

.rodata

В этом разделе содержатся данные, доступные только для чтения, которые обычно вносятся в недоступный для записи сегмент образа процесса. Этот раздел имеет тип SHT_PROGBITS и атрибут SHF_ALLOC.

.rodata1

В этом разделе содержатся данные, доступные только для чтения, которые обычно вносятся в недоступный для записи сегмент образа процесса. Этот раздел имеет тип SHT_PROGBITS и атрибут SHF_ALLOC.

.shstrtab

В этом разделе содержатся имена разделов. Он имеет тип SHT_STRTAB и не имеет атрибутов.

.strtab

В этом разделе содержатся строки, чаще всего представляющие имена, связанные с элементами таблицы символов. Если файл имеет загружаемый сегмент, который включает таблицу строк символов, то к разделу атрибутов будет добавлен бит SHF_ALLOC. Иначе этот бит будет обнулён. Данный раздел имеет тип SHT_STRTAB.

.symtab

В этом разделе содержится таблица символов. Если файл имеет загружаемый сегмент, который включает таблицу символов, то к разделу атрибутов будет добавлен бит SHF_ALLOC. Иначе этот бит будет обнулён. Данный раздел имеет тип SHT_SYMTAB.

.text

В этом разделе содержится "код (text)", то есть исполняемые инструкции программы. Он имеет тип SHT_PROGBITS и атрибуты SHF_ALLOC и SHF_EXECINSTR.

### Таблицы строк и символов
В разделах с таблицами строк содержатся символьные последовательности, завершающиеся null, которые обычно называются строками. Объектный файл использует эти строки для имён символов и разделов. Он ссылается на строку посредством индекса в разделе таблицы строк. В первом байте с нулевым индексом задаётся байт null ('\0'). Подобно этому, для обеспечения завершения null всех строк последний байт таблицы строк также содержит байт null.

В таблице символов объектного файла содержится информация, необходимая для обнаружения и перемещения определённых в программе символов и ссылок. Индекс таблицы символов указывает на элемент из этого массива.

```
typedef struct {

    uint32_t      st_name;

    Elf32_Addr    st_value;

    uint32_t      st_size;

    unsigned char st_info;

    unsigned char st_other;

    uint16_t      st_shndx;
} Elf32_Sym;
```

```
typedef struct {

    uint32_t      st_name;

    unsigned char st_info;

    unsigned char st_other;

    uint16_t      st_shndx;

    Elf64_Addr    st_value;

    uint64_t      st_size;
} Elf64_Sym;
```

32-битная и 64-битная версии имеют одинаковые поля, различен только их порядок.

st_name

В этом поле содержится индекс на элемент в таблице строк символов объектного файла, которая содержит символьное представление имён символов. Если значение не равно нулю, то это индекс таблицы строк, по которому определяется имя символа. Иначе символ не имеет имени.

st_value

В этом поле содержится значение соответствующего символа.

st_size

Со многими символами связываются определённые размеры. Это поле имеет значение ноль, если символ не имеет размера или его размер неизвестен.

st_info

В этом поле задаётся тип символа и атрибуты привязки:

STT_NOTYPE

Тип символа не определён.

STT_OBJECT

Символу соответствует объект данных.

STT_FUNC

Символу соответствует функция или другой исполняемый код.

STT_SECTION

Символу соответствует раздел. Элементы таблицы символов этого типа существуют, прежде всего, для перемещения и обычно имеют привязки STB_LOCAL.

STT_FILE

По соглашению, имя символа назначается согласно имени файла исходного кода для соответствующего объектного файла. Файловый символ имеет привязки STB_LOCAL, его индекс раздела SHN_ABS, и он предваряется другим символом STB_LOCAL файла, если он есть.

STT_LOPROC, STT_HIPROC

Значения из диапазона [STT_LOPROC, STT_HIPROC] (включительно) зарезервированы для процессорно-ориентированной семантики.

STB_LOCAL

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

STB_GLOBAL

Глобальные символы видимы во всех объектных файлах после объединения. Определение глобального символа в одном файле будет разрешать неопределённую ссылку в другом файле для того же символа.

STB_WEAK

Слабые символы (weak symbols) похожи на глобальные символы, но их определения имеют меньший приоритет.

STB_LOPROC, STB_HIPROC

Значения из диапазона [STB_LOPROC, STB_HIPROC] (включительно) зарезервированы для процессорно-ориентированной семантики.

Макросы для упаковки и распаковки полей привязки и типа:

ELF32_ST_BIND(info), ELF64_ST_BIND(info)

Извлекают привязку из значения st_info.

ELF32_ST_TYPE(info), ELF64_ST_TYPE(info)

Извлекают тип из значения st_info.

ELF32_ST_INFO(bind, type), ELF64_ST_INFO(bind, type)

Преобразуют привязку и тип в значение st_info.

st_other

Этим полем определяется видимость символа.

STV_DEFAULT

Правила видимости символов по умолчанию. Глобальные и слабые символы доступны в других модулях; ссылки в локальном модуле могут помещаться определениями в других модулях.

STV_INTERNAL

Скрытый класс, зависящий от процессора.

STV_HIDDEN

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

STV_PROTECTED

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

Эти макросы служат для извлечения типа видимости:

ELF32_ST_VISIBILITY(other) или ELF64_ST_VISIBILITY(other)

st_shndx

Каждый элемент таблицы символов «определён» в отношении к некоторому разделу. Это поле содержит соответствующий индекс таблицы заголовков разделов.

### Элементы перемещений (Rel & Rela)
Перемещение — это процесс соединения символьных ссылок с символьными определениями. Перемещаемые файлы должны иметь информацию, которая описывает как нужно изменить их содержимое разделов, чтобы позволить исполняемым и динамическим объектным файлам содержать корректную информацию для образа процесса программы. Для этого существуют перемещения.

Перемещаемые структуры, которым не нужна добавка:

```
typedef struct {

    Elf32_Addr r_offset;

    uint32_t   r_info;
} Elf32_Rel;
```

```
typedef struct {

    Elf64_Addr r_offset;

    uint64_t   r_info;
} Elf64_Rel;
```

Перемещаемые структуры, которым нужна добавка:

```
typedef struct {

    Elf32_Addr r_offset;

    uint32_t   r_info;

    int32_t    r_addend;
} Elf32_Rela;
```

```
typedef struct {

    Elf64_Addr r_offset;

    uint64_t   r_info;

    int64_t    r_addend;
} Elf64_Rela;
```

r_offset

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

r_info

В этом поле указывается индекс таблицы символов с соблюдением того, что нужно выполнить перемещение и тип применяемого перемещения. Типы перемещений зависят от архитектуры процессора. Когда в коде есть ссылка на тип перемещения элемента перемещения или индекс таблицы символов, то имеется в виду результат применения ELF[32|64]_R_TYPE или ELF[32|64]_R_SYM, соответственно, к полю r_info.

r_addend

В этом поле указывается константа-добавка, используемая для вычисления значения, хранимого в поле перемещения.

### Динамические метки (Dyn)
В разделе .dynamic содержится несколько структур, в которых содержится информация по динамической компоновке. Полем d_tag контролируется интерпретация d_un.

```
typedef struct {

    Elf32_Sword    d_tag;

    union {

        Elf32_Word d_val;

        Elf32_Addr d_ptr;

    } d_un;
} Elf32_Dyn;
extern Elf32_Dyn _DYNAMIC[];
```

```
typedef struct {

    Elf64_Sxword    d_tag;

    union {

        Elf64_Xword d_val;

        Elf64_Addr  d_ptr;

    } d_un;
} Elf64_Dyn;
extern Elf64_Dyn _DYNAMIC[];
```

d_tag

В этом поле могут содержаться следующие значения:

DT_NULL

Этим значением помечается конец динамического раздела

DT_NEEDED

Смещение в таблице строк на имя необходимой библиотеки

DT_PLTRELSZ

Размер в байтах элементов перемещений PLT

DT_PLTGOT

Адрес PLT и/или GOT

DT_HASH

Адрес хэш-таблицы символов

DT_STRTAB

Адрес таблицы строк

DT_SYMTAB

Адрес таблицы символов

DT_RELA

Адрес таблицы перемещений Rela

DT_RELASZ

Размер в байтах таблицы перемещений Rela

DT_RELAENT

Размер в байтах элемента таблицы перемещений Rela

DT_STRSZ

Размер в байтах таблицы строк

DT_SYMENT

Размер в байтах элемента таблицы строк

DT_INIT

Адрес функции инициализации

DT_FINI

Адрес функции окончания

DT_SONAME

Смещение в таблице строк для имени динамического объекта

DT_RPATH

Смещение в таблице строк для пути поиска (устарело)

DT_SYMBOLIC

Уведомление для компоновщика, что нужно искать этот динамический объект до поиска символов в исполняемом файле

DT_REL

Адрес таблицы перемещений Rel

DT_RELSZ

Размер в байтах таблицы перемещений Rel

DT_RELENT

Размер в байтах элемента таблицы Rel

DT_PLTREL

Тип элемента перемещения, на который ссылается PLT (Rela или Rel)

DT_DEBUG

Не определено, используется для отладки

DT_TEXTREL

Отсутствие этого элемента указывает, что перемещения не должны применяться к сегменту, недоступному на запись

DT_JMPREL

Адрес элементов перемещений, связанных исключительно с PLT

DT_BIND_NOW

Указать динамическому компоновщику, что нужно обработать все перемещения до передачи управления исполняемому файлу

DT_RUNPATH

Смещение в таблице строк для пути поиска библиотек

DT_LOPROC, DT_HIPROC

Значения из диапазона [DT_LOPROC, DT_HIPROC] (включительно) зарезервированы для процессорно-ориентированной семантики

d_val

В этом поле указываются целые (integer) значения различного смысла.

d_ptr

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

_DYNAMIC

Массив, содержащий все динамические структуры в разделе .dynamic. Автоматически заполняется компоновщиком.

### Заметки (Nhdr)
В заметки ELF можно добавлять произвольную информацию для использования в системе. В основном, это используется в файлах core (e_type равно ET_CORE), но многие проекты определяют свои собственные наборы расширений. Например, набор инструментов GNU использует заметки ELF для передачи информации компоновщика в библиотеку C.

В разделах заметок содержатся последовательности заметки (смотрите определение struct далее). Каждая заметка сопровождается полем имени (длина определяется в n_namesz) и полем дескриптора (длина задаётся в n_descsz) и начинается с адреса, кратного 4 байтам. Оба поля не определены в структуре из-за их произвольной длины.

Пример разбора двух последовательных заметок должен разъяснить их расположение в памяти:

```
void *memory, *name, *desc;
Elf64_Nhdr *note, *next_note;
/* буфер, указывающий на начало раздела/сегмента */
note = memory;
/* если имя определено, то после него идёт заметка */
name = note->n_namesz == 0 ? NULL : memory + sizeof(*note);
/* если дескриптор определён, то за ним идёт имя

   (выровненное) */
desc = note->n_descsz == 0 ? NULL :

       memory + sizeof(*note) + ALIGN_UP(note->n_namesz, 4);
/* следующая заметка с обоими полями (с выравниванием) */
next_note = memory + sizeof(*note) +

                     ALIGN_UP(note->n_namesz, 4) +

                     ALIGN_UP(note->n_descsz, 4);
```

Следует иметь в виду, что интерпретация n_type зависит от пространства имён, определённого в поле n_namesz field. Если поле n_namesz не задано (например, равно 0), то есть два набора заметок: один для файлов core files и другой для всех остальных типов ELF. Если пространство имён неизвестно, то инструменты, обычно, по умолчанию также используют эти наборы заметок.

```
typedef struct {

    Elf32_Word n_namesz;

    Elf32_Word n_descsz;

    Elf32_Word n_type;
} Elf32_Nhdr;
```

```
typedef struct {

    Elf64_Word n_namesz;

    Elf64_Word n_descsz;

    Elf64_Word n_type;
} Elf64_Nhdr;
```

n_namesz

Длина имени поля в байтах. Содержимое идёт в памяти сразу за заметкой. Имя заканчивается null. Например, если имя «GNU», то n_namesz будет равно 4.

n_descsz

Длина дескриптора поля в байтах. Содержимое идёт в памяти сразу за именем поля.

n_type

В зависимости от значения имени поля, этот член может содержать следующие значения:

Файлы core (e_type = ET_CORE)

Заметки используются всеми файлами core. Их формат определяется ОС или архитектурой и часто требует плотного взаимодействия ядра, библиотек C и отладчиков. Они используются при умолчательном пространстве имён (т. е., n_namesz равно 0) или когда пространство имён неизвестно.

NT_PRSTATUS

структура prstatus

NT_FPREGSET

структура fpregset

NT_PRPSINFO

структура prpsinfo

NT_PRXREG

структура prxregset

NT_TASKSTRUCT

структура задачи

NT_PLATFORM

Строка из sysinfo(SI_PLATFORM)

NT_AUXV

массив auxv

NT_GWINDOWS

структура gwindows

NT_ASRS

структура asrset

NT_PSTATUS

структура pstatus

NT_PSINFO

структура psinfo

NT_PRCRED

структура prcred

NT_UTSNAME

структура utsname

NT_LWPSTATUS

структура lwpstatus

NT_LWPSINFO

структура lwpinfo

NT_PRFPXREG

структура fprxregset

NT_SIGINFO

siginfo_t (в дальнейшем, размер может увеличиться)

NT_FILE

Содержит информацию об отображённых файлах

NT_PRXFPREG

user_fxsr_struct

NT_PPC_VMX

Регистры PowerPC Altivec/VMX

NT_PPC_SPE

Регистры PowerPC SPE/EVR

NT_PPC_VSX

Регистры PowerPC VSX

NT_386_TLS

слоты TLS в i386 (struct user_desc)

NT_386_IOPERM

битовая карта ввода-вывода в x86 (1=запрещено)

NT_X86_XSTATE

расширенное состояние x86, использующее xsave

NT_S390_HIGH_GPRS

верхние половинки регистров s390

NT_S390_TIMER

регистр таймера s390

NT_S390_TODCMP

регистр сравнивателя часов time-of-day (TOD) s390

NT_S390_TODPREG

программируемый регистр time-of-day (TOD) s390

NT_S390_CTRS

управляющие регистры s390

NT_S390_PREFIX

регистр префикса s390

NT_S390_LAST_BREAK

адрес прерывающего события s390

NT_S390_SYSTEM_CALL

данные системного вызова перезапуска s390

NT_S390_TDB

блок диагностики транзакции s390

NT_ARM_VFP

регистры VFP/NEON в ARM

NT_ARM_TLS

регистр TLS в ARM

NT_ARM_HW_BREAK

регистры аппаратного прерывания в ARM

NT_ARM_HW_WATCH

регистры аппаратного слежения в ARM

NT_ARM_SYSTEM_CALL

Номер системного вызова ARM

n_name = GNU

Расширения, используемый инструментами GNU.

NT_GNU_ABI_TAG

Информация ABI операционной системы (OS). Поле дескриптора содержит 4 слова:

- слово 0: дескриптор ОС (ELF_NOTE_OS_LINUX, ELF_NOTE_OS_GNU и так далее)`

- слово 1: основной номер версии ABI

- слово 2: вспомогательный номер версии ABI

- слово 3: дополнение к вспомогательному номеру версии ABI

NT_GNU_HWCAP

Синтетическая информация hwcap. Поле дескриптора начинается 2 словами:

- слово 0: количество элементов

- слово 1: битовая маска включённых элементов

Далее следуют элементы произвольной длины и один байт после строки имени hwcap, заканчивающейся null. В байте определён номер бита, который нужно тестировать для проверки включённости, (1U << бит) & битовая маска.

NT_GNU_BUILD_ID

Уникальный идентификатор сборки, генерируемый GNU ld(1), запущенной с параметром --build-id. Дескриптор содержит произвольное ненулевое количество байт.

NT_GNU_GOLD_VERSION

В поле дескриптора записывается использованная версия компоновщика GNU Gold.

Умолчательное/неизвестное пространство имён (e_type != ET_CORE)

Они используются при умолчательном пространстве имён (т. е., n_namesz равно 0) или когда пространство имён неизвестно.

NT_VERSION

Строка версии неопределённого вида

NT_ARCH

Информация об архитектуре

## ЗАМЕЧАНИЯ
Впервые ELF появился в System V. Формат ELF является утверждённым стандартом.

Расширения для e_phnum, e_shnum и e_strndx соответствующих расширений Linux. Также они поддерживаются в Sun, BSD и AMD64; дополнительную информацию смотрите в разделе "СМОТРИТЕ ТАКЖЕ".

## СМОТРИТЕ ТАКЖЕ
as(1), elfedit(1), gdb(1), ld(1), nm(1), objdump(1), patchelf(1), readelf(1), size(1), strings(1), strip(1), execve(2), dl_iterate_phdr(3), core(5), ld.so(8)

Hewlett-Packard, Формат объектных файлов Elf-64.

Santa Cruz Operation, Двоичный интерфейс приложений System V.

UNIX System Laboratories, «Объектные файлы», Формат исполняемых и компонуемых файлов (ELF).

Sun Microsystems, Руководстве по компоновщику и библиотекам (Linker and Libraries Guide).

черновик ABI AMD64, Дополнение к двоичному интерфейсу приложений System V процессорной архитектуры AMD64 (System V Application Binary Interface AMD64 Architecture Processor Supplement).


filesystems

package: man-pages-ru

title: filesystems(5)

text:
# filesystems(5)

## ИМЯ
filesystems - типы файловых систем Linux: ext, ext2, ext3, ext4, hpfs, iso9660, JFS, minix, msdos, ncpfs nfs, ntfs, proc, Reiserfs, smb, sysv, umsdos, vfat, XFS, xiafs,

## ОПИСАНИЕ
Если, как обычно, файловая система proc смонтирована в /proc, то в файле /proc/filesystems можно найти список типов файловых систем, которые в текущий момент поддерживаются ядром; подробности смотрите в proc(5). Также есть устаревший системный вызов sysfs(2) (доступен, если ядро собрано с параметром настойки CONFIG_SYSFS_SYSCALL, начиная с Linux 3.15), который содержи перечисление доступных типов файловых систем независимо от того, смонтировано ли что-то в /proc или нет.

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

Чтобы использовать файловую систему, её нужно смонтировать; смотрите mount(2) и mount(8).

В списке далее приводится краткое описание доступных или доступных ранее файловых систем в ядре Linux. Полное описание, все параметры и ограничения описаны в документации к ядру.

ext

Доработанное расширение файловой системы minix. Полностью вытеснена второй версией расширенной файловой системой (ext2) и была удалена из ядра (в 2.1.21).

ext2

Высокопроизводительная дисковая файловая система Linux для жёстких дисков, а также сменных носителей. Вторая версия расширенной файловой системы разрабатывалась как расширение расширенной файловой системы (ext). Смотрите ext2(5).

ext3

Журналируемая версия файловой системы ext2. Очень легко переключаться с ext2 на ext3 и обратно. Смотрите ext3(5).

ext4

Обновлённая версия ext3, включающая существенное увеличение производительности и надёжности, размеров границ томов, файлов и каталогов. Смотрите ext4(5).

hpfs

Высокопроизводительная файловая система (High Performance Filesystem), используемая в OS/2. Данная файловая система доступна под Linux только для чтения из-за отсутствия документации.

iso9660

Файловая система для CD-ROM, соответствующая стандарту ISO 9660.

High Sierra

В Linux есть поддержка стандарта High Sierra, предшественника стандарта ISO 9660 для файловых систем CD-ROM. High Sierra автоматически распознается при включении в Linux поддержки файловой системы iso9660.

Rock Ridge

В Linux также есть поддержка записей System Use Sharing Protocol, которые определены в протоколе обмена Rock Ridge. Они используются для подробного описания файлов в файловой системе iso9660 для машин UNIX и предоставляют информацию о длинных именах файлов, UID/GID, правах доступа к файлам по стандарту POSIX и файлах устройств. Rock Ridge автоматически распознаётся при включении в Linux поддержки файловой системы iso9660.

JFS

Журналируемая файловая система, разработанная IBM, была добавлена в Linux начиная с ядра версии 2.4.24.

minix

Файловая система, использующаяся в операционной системе Minix, первая, на которой заработал Linux. Имеет несколько недостатков: максимальный размер раздела 64 МБ, короткие имена файлов и одна временная метка. Осталась полезной для дискет и RAM-дисков.

msdos

Файловая система, используемая в DOS, Windows и на некоторых компьютерах с OS/2. Имена файлов в msdos не могут быть более 8 символов с необязательным расширением из 3 символов, отделённого точкой.

ncpfs

Сетевая файловая система, которая поддерживает протокол NCP, используемый в Novell NetWare.

Для использования ncpfs необходимы специальные программы, которые можно найти по адресу ftp://linux01.gwdg.de/pub/ncpfs.

nfs

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

ntfs

Замена для файловых систем Microsoft Window FAT (VFAT, FAT32). Улучшена надёжность, производительность и использование пространства и добавлены такие возможности как списки контроля, журналирование, шифрование и т.д.

proc

Ненастоящая файловая система, используется как интерфейс к структурам данных ядра вместо прямого чтения из /dev/kmem. В частности, её файлы не занимают пространство на диске. Смотрите proc(5).

Reiserfs

Журналируемая файловая система, разработанная Гансом Рейзером (Hans Reiser), была добавлена в Linux начиная с ядра версии 2.4.1.

smb

Сетевая файловая система, которая поддерживает протокол SMB, используемый в Windows for Workgroups, Windows NT и Lan Manager. Смотрите https://www.samba.org/samba/smbfs/.

sysv

Реализация файловой системы SystemV/Coherent для Linux. Поддерживает файловые системы из Xenix, SystemV/386 и Coherent.

umsdos

Расширенная файловая система DOS, используемая в Linux. Была добавлена поддержка длинных имён файлов, UID/GID, права доступа POSIX и специальные файлы (устройства, именованные каналы и т.д.) без ухудшения совместимости с DOS.

tmpfs

Файловая система, чьё содержимое находится в виртуальной памяти. Так как файлы в таких файловых системах, обычно, располагаются в оперативной памяти, то доступ к файлах очень быстр. Смотрите tmpfs(5).

vfat

Расширенная файловая система FAT, используемая в Microsoft Windows95 и Windows NT. В vfat добавлена поддержка длинных имён файлов из файловой системы MSDOS.

XFS

Журналируемая файловая система, разработанная SGI, была добавлена в Linux начиная с ядра версии 2.4.20.

xiafs

Разработана и реализована как стабильная надёжная файловая система посредством расширения кода файловой системы Minix. Предоставляет основные часто запрашиваемые возможности без неоправданной сложности. Файловая система xiafs больше активно не разрабатывается или сопровождается. Была удалена из ядра 2.1.21.

## СМОТРИТЕ ТАКЖЕ
fuse(4), btrfs(5), ext2(5), ext3(5), ext4(5), nfs(5), proc(5), tmpfs(5), fsck(8), mkfs(8), mount(8)

branch: sisyphus


ftpusers

title: ftpusers(5)

text:
# ftpusers(5)

## ИМЯ
ftpusers - список пользователей, не имеющих доступа к службе FTP

## ОПИСАНИЕ
Текстовый файл ftpusers содержит список пользователей, которые не могут войти на сервер по протоколу передачи файлов (FTP). Этот файл используется не только в целях администрирования системы, но и для улучшения безопасности в сетевой среде TCP/IP.

Обычно, файл ftpusers содержит список пользователей, которые не пользуются ftp или имеют слишком много прав, позволяющих получить доступ через службу сервера FTP. Такими пользователями, обычно, являются root, daemon, bin, uucp и news.

Если сервер FTP не использует ftpusers, то рекомендуется прочитать его документацию, чтобы найти способ блокирования определённых пользователей. Сервер Washington University FTP Daemon (wuftpd) и Professional FTP Daemon (proftpd) умеют обращаться с ftpusers.

### Формат
Формат ftpusers очень прост. Он содержит по одному имени учётной записи (или имени пользователя) в каждой строке. Строки, начинающиеся с # игнорируются.

## ФАЙЛЫ
/etc/ftpusers

## СМОТРИТЕ ТАКЖЕ
passwd(5), proftpd(8), wuftpd(8)


gai.conf

title: gai.conf(5)

summary: файл настройки getaddrinfo(3)

text:
# gai.conf(5)

## ИМЯ
gai.conf - файл настройки getaddrinfo(3)

## ОПИСАНИЕ
Вызов getaddrinfo(3) может вернуть несколько результатов. Согласно RFC 3484 эти результаты должны быть отсортированы так, что первым в списке будет ответ с высшим показателем достоверности (success rate). В RFC имеется алгоритм сортировки. Но статические правила не всегда приемлемы. По этой причине в RFC также требуется, чтобы системный администратор имел возможность динамически изменять сортировку. В реализации glibc это можно делать через файл /etc/gai.conf.

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

Распознаваемые ключевые слова:

label маска_сети приоритет

Значение, добавляемое в таблицу ярлыков (label), используемую в RFC 3484 при сортировке. Если определение label, имеющееся в файле настройке, существует, то таблица по умолчанию не используется. Все определения ярлыков таблицы по умолчанию, которые нужно поддерживать, будут являться дублями. За ключевым словом указывается маска сети и значение приоритета.

precedence маска_сети приоритет

Данное ключевое слово подобно label, но значение добавляется в таблицу приоритетов (precedence), как описано в RFC 3484. И здесь наличие единственной строки precedence в файле настройки отключает использование таблицы по умолчанию.

reload <yes|no>

Данное ключевое слово определяет будет ли процесс проверять изменился ли файл настройки с момента последнего чтения. Если значение yes, то файл перечитывается. Это может привести к проблемам в многонитевых приложениях. Значение по умолчанию no.

scopev4 маска значение

Добавляет новое правило в таблицу областей RFC 3484 для адресов IPv4. По умолчанию используются ID областей, описанные в разделе 3.2 RFC 3438. Изменять значения по умолчанию почти никогда не требуется.

## ФАЙЛЫ
/etc/gai.conf

## ВЕРСИИ
Файл gai.conf поддерживается glibc начиная с версии 2.5.

## ПРИМЕР
Таблица по умолчанию согласно RFC 3484 должна задаваться следующим файлом настройки:

```
label  ::1/128       0
label  ::/0          1
label  2002::/16     2
label ::/96          3
label ::ffff:0:0/96  4
precedence  ::1/128       50
precedence  ::/0          40
precedence  2002::/16     30
precedence ::/96          20
precedence ::ffff:0:0/96  10
```

## СМОТРИТЕ ТАКЖЕ
getaddrinfo(3), RFC 3484


group

title: group(5)

summary: файл групп пользователей

text:
# group(5)

## ИМЯ
group - файл групп пользователей

## ОПИСАНИЕ
В текстовом файле /etc/group описаны группы в системе. В каждой строке файла содержится одна запись следующего формата:

```
group_name:password:GID:user_list
```

Поля:

group_name

имя группы

password

пароль группы (в зашифрованном виде). Если это поле пустое, то пароль не нужен.

GID

числовой идентификатор (ID) группы.

user_list

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

## ФАЙЛЫ
/etc/group

## ДЕФЕКТЫ
Согласно справочной страницы 4.2BSD initgroups(3): похоже, никто не поддерживает актуальность /etc/group.

## СМОТРИТЕ ТАКЖЕ
chgrp(1), gpasswd(1), groups(1), login(1), newgrp(1), sg(1), getgrent(3), getgrnam(3), gshadow(5), passwd(5), vigr(8)


host.conf

title: host.conf(5)

summary: файл с настройками для резолвера

text:
# host.conf(5)

## ИМЯ
host.conf - файл с настройками для резолвера

## ОПИСАНИЕ
В файле /etc/host.conf содержатся настройки для библиотеки резолвера (resolver). Данный файл должен содержать в каждой строке одно ключевое слово, за которым следует информация о соответствующей этому ключевому слову настройке. Ключевые слова:

trim

Данное ключевое слово может быть использовано более одного раза. Каждый раз, когда указывается это слово, за ним должен следовать список доменов, начинающихся с точки и разделённых двоеточием (':'), точкой с запятой (';') или запятой (','). Эта настройка говорит библиотеке резолвера отсекать указанное имя домена из конца всех имен узлов, которые преобразуются в адреса через DNS. Этот параметр задумывался для использования с локальными узлами и доменами. (Важное замечание: trim не будет учитываться для имён узлов, обрабатываемых через NIS или файл hosts(5). Вы должны побеспокоиться о том, чтобы первое имя узла в каждой записи в файле узлов являлось полностью (имя узла с доменом) или не полностью (только имя узла) заданным, в зависимости от того как это необходимо для ваших правил.)

multi

Допустимыми для этого ключевого слова являются значения on и off. Если задано on, то библиотека резолвера будет возвращать все допустимые адреса узла, которые встретились в файле /etc/hosts, а не только первый из них. По умолчанию используется off, так как в противном случае возможно существенное снижение производительности на машинах с большими файлами узлов.

reorder

Допустимыми для этого ключевого слова являются значения on и off. Если задано on, то библиотека резолвера будет пытаться перегруппировать адреса узлов так, чтобы локальные адреса (т. е. адреса в той же подсети) были выданы первыми, когда выполняется вызов gethostbyname(3). Перегруппировка выполняется для всех методов поиска. По умолчанию значение установлено в off.

## ОКРУЖЕНИЕ
Существуют переменные окружения, которые могут быть использованы, чтобы позволить пользователям изменить поведение, настроенное через /etc/host.conf:

RESOLV_HOST_CONF

Если значение этой переменной является именем файла, то он будет прочитан вместо файла /etc/host.conf.

RESOLV_MULTI

Заменяет значение ключа multi.

RESOLV_REORDER

Заменяет значение ключа reorder.

RESOLV_ADD_TRIM_DOMAINS

Список доменов, начинающихся с точки, разделённых двоеточием (':'), точкой с запятой (';') или запятой (','), который будет добавлен к списку доменов для отсечения.

RESOLV_OVERRIDE_TRIM_DOMAINS

Список доменов, начинающихся с точки, разделённых двоеточием (':'), точкой с запятой (';') или запятой (','), который заменит список доменов для отсечения. Заменяет значение ключа trim.

## ФАЙЛЫ
/etc/host.conf

Файл с настройками резолвера

/etc/resolv.conf

Файл с настройками резолвера

/etc/hosts

Локальная база данных узлов

## ЗАМЕЧАНИЯ
Существуют следующие различия с первоначальной реализацией: новая команда spoof и новая переменная окружения RESOLV_SPOOF_CHECK могут быть установлены в значение off, nowarn и warn. Комментарии могут вставляться везде, а не только в начале строки.

### Историческая справка
Современным способом управления порядком поиска узлов является файл nsswitch.conf(5).

В glibc 2.4 и старее, распознаётся следующее ключевое слово:

order

Данное ключевое слово задает метод, с помощью которого будет осуществляться поиск адреса узла. За этим словом должно следовать одно или несколько названий методов, разделённых запятыми. Допустимы следующие названия методов: bind, hosts и nis.

RESOLV_SERV_ORDER

Заменяет команду order.

Начиная с glibc 2.0.7 и до версии 2.24 не обрабатываются, но распознаются следующие ключевые слова и переменная окружения:

nospoof

Допустимыми для этого ключевого слова являются значения on и off Если задано on, то библиотека резолвера будет пытаться предотвратить подмену имён узлов для усиления безопасности rlogin and rsh. Это работает так: после выполнения поиска адреса узла по имени, библиотека резолвера будет выполнять поиск имени узла по адресу. Если два имени не совпадут, то запрос завершается ошибкой. По умолчанию значение установлено в off.

spoofalert

Допустимыми для этого ключевого слова являются значения on и off. Если задано on и при этом также установлен параметр nospoof, то библиотека резолвера будет записывать в системный журнал предупреждения об ошибках через syslog. По умолчанию значение установлено в off.

spoof

Допустимыми для этого ключевого слова являются значения off, nowarn и warn. Если задано off, то подмена адресов допускается и в системный журнал через syslog не будет попадать никаких предупреждающих сообщений. Если значение параметра равно warn, то библиотека резолвера будет пытаться предотвратить обман по именам узлов для усиления безопасности и в системный журнал через syslog будут записываться предупреждения об ошибках. Если значение параметра равно nowarn, то библиотека резолвера будет пытаться предотвратить обман по именам узлов для усиления безопасности, но предупреждающие сообщения генерироваться не будут. Присвоение других значений будет считаться установкой в значение nowarn.

RESOLV_SPOOF_CHECK

Заменяет значение ключей nospoof, spoofalert и spoof тем же способом как задаётся значение для ключа spoof. Допустимыми являются значения off, nowarn и warn.

## СМОТРИТЕ ТАКЖЕ
gethostbyname(3), hosts(5), nsswitch.conf(5), resolv.conf(5), hostname(7), named(8)


hosts

title: hosts(5)

text:
# hosts(5)

## ИМЯ
hosts - статическая таблица для поиска имён узлов

## ОБЗОР
/etc/hosts

## ОПИСАНИЕ
Данная справочная страница описывает формат файла /etc/hosts. Это простой текстовый файл, который связывает IP-адреса с именами узлов (по одному IP-адресу на строку). Для каждого узла в отдельной строке должна быть представлена запись со следующей информацией:

IP-адрес каноническое_имя_узла [псевдонимы...]

Поля записи разделяются пробелами и/или символами табуляции. Текст, начинающийся с символа "#" до конца строки считается комментарием и игнорируется. Имена узлов могут содержать только буквы, цифры, знаки минус ("-") и точки ("."). Они должны начинаться с буквы и заканчиваться буквой или цифрой. Псевдонимы предоставляются для возможности выбора более одного имени, альтернативного произношения, сокращения имени узла или для указания наиболее общего имени узла (например, localhost).

DNS сервер Berkeley Internet Name Domain (BIND) реализует сервер службы имён для UNIX систем. Он расширяет или замещает файл /etc/hosts при операциях поиска имени узла, а также освобождает от необходимости поддерживать актуальность и полноту /etc/hosts.

В современных системах, даже таблица узлов может быть заменена на DNS, это широко используется в следующих случаях:

начальная загрузка

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

NIS

Сайты, которые используют NIS, хранят таблицу узлов в базе данных узлов NIS. Но даже при работе с NIS остаётся возможность использовать DNS, большинство NIS сайтов также используют для целей резервирования и таблицу узлов, где размещаются записи о всех локальных узлах.

изолированные узлы

Очень маленькие сайты, которые изолированы от сети, используют таблицу узлов вместо DNS. Если локальная информация меняется редко и сеть не подключена к Интернет, DNS не даёт ощутимых преимуществ.

## ФАЙЛЫ
/etc/hosts

## ЗАМЕЧАНИЯ
Изменения этого файла сразу начинают действовать, если этот файл не кэшируется используемым его приложением.

### Исторические замечания
В RFC 952 показан первоначальный формат таблицы узлов, хотя позднее он был изменён.

Перед появлением DNS, таблица узлов была единственным способом определения IP-адресов по именам узлов в развивающейся сети Интернет. В самом деле, этот файл мог быть создан из официальной базы данных узлов, которая обслуживалась Центром управления сетевой информацией (Network Information Control Center (NIC)), и внесения локальных изменений, которые часто требовались для поддержки актуальности данных и добавления неофициальных псевдонимов и/или неизвестных узлов. NIC больше не поддерживает файлы hosts.txt (приблизительно с 2000 года), но на их WWW существуют исторические файлы hosts.txt. Я обнаружил три: от 92, 94 и 95 годов.

## ПРИМЕР

```
# Следующие строки желательно иметь для узлов, поддерживающих IPv4
127.0.0.1       localhost
# 127.0.1.1 часто используется для FQDN машины
127.0.1.1       thishost.mydomain.org  thishost
192.168.1.10    foo.mydomain.org       foo
192.168.1.13    bar.mydomain.org       bar
146.82.138.7    master.debian.org      master
209.237.226.90  www.opensource.org
# Следующие строки желательно иметь для узлов, поддерживающих IPv6
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
```

## СМОТРИТЕ ТАКЖЕ
hostname(1), resolver(3), host.conf(5), resolv.conf(5), resolver(5), hostname(7), named(8)

Internet RFC 952


hosts.equiv

title: hosts.equiv(5)

text:
# hosts.equiv(5)

## ИМЯ
hosts.equiv - список узлов и пользователей, которым предоставляется "доверительный" доступ к вашей системе через r-команды

## ОПИСАНИЕ
Файл /etc/hosts.equiv разрешает или запрещает узлам и пользователям использовать r-команды (например, rlogin, rsh или rcp) без ввода пароля.

Файл имеет следующий формат:

+|[-]hostname|+@netgroup|-@netgroup [+|[-]username|+@netgroup|-@netgroup]

В hostname задаётся имя узла, которое логически эквивалентно локальному узлу. Пользователям, которые вошли на этот узел, разрешается доступ к локальному узлу под их собственным именем без ввода пароля. Значение hostname может (необязательно) начинаться со знака плюс (+). Если на месте имени узла указан только плюс, то доступ к вашей системе разрешён с любого узла. Вы можете явно запретить доступ для какого-либо узла, если перед hostname поставите знак минус (-). Пользователи с этого узла всегда будут должны предоставлять параметры доступа, возможно включая пароль. Из соображений безопасности вы всегда должны использовать полностью заданные имена узлов (FQDN) и не использовать коротких имён.

Элементом username предоставляется доступ заданному пользователю ко всем учётным записям (исключая root) без ввода пароля. Это означает, что пользователь может использовать любые имена на локальной машине. usernameможет (необязательно) предваряться знаком плюс (+). Вы можете явно запретить доступ для какого-либо пользователя, если перед username поставите знак минус (-). Это будет означать, что этому пользователю нет доверия, независимо от других существующих на этом узле настроек.

С помощью знака @ может быть задана сетевая группа.

Будьте очень осторожны, когда используете знак плюс (+). Простая описка может привести к тому, что этот плюс будет стоять в строке в полном одиночестве, и в этом случае он будет означать "любой узел"!

## ФАЙЛЫ
/etc/hosts.equiv

## ЗАМЕЧАНИЯ
Некоторые системы используют содержимое данного файла, только когда его владельцем является root и при этом отсутствуют права на запись для всех остальных. Некоторые исключительно параноидальные системы даже требуют, чтобы для данного файла не существовало других жёстких ссылок.

Современные системы используют библиотеку Pluggable Authentication Modules ( PAM) (подключаемые модули аутентификации). При использовании PAM одиночный знак плюса рассматривается как символ шаблона, который означает только «любой узел», когда слово promiscuous добавляется к компоненту auth в вашем файле PAM для конкретной службы (например rlogin).

## ПРИМЕР
Далее представлен пример файла /etc/host.equiv или ~/.rhosts.

Разрешить всем пользователям входить с любых узлов:

+

Разрешить всем пользователям с host входить при совпадении с локальной учётной записью:

host

Замечание: указание +host является синтаксически некорректным при попытке задать, что разрешён доступ всем пользователям с узла.

Разрешить вход всем пользователям с host:

host +

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

Разрешить user входить с host в качестве не-root пользователя:

host user

Разрешить всем пользователям при совпадении с локальной учётной записью входить с host, но исключить доступ для baduser:

host -baduser

host

Запретить всем пользователям доступ с host:

-host

Замечание: указание -host -user является синтаксически некорректным при попытке запретить доступ определённому пользователю с узла.

Разрешить всем пользователям при совпадении с локальной учётной записью входить на все узлы, включённые в netgroup:

+@netgroup

Запретить всем пользователям доступ на все узлы из netgroup:

-@netgroup

Разрешить всем пользователям из netgroup входить с host в качестве не-root пользователя:

host +@netgroup

Разрешить всем пользователям, за исключением baduser, при совпадении с локальной учётной записью входить на все узлы, включённые в netgroup:

+@netgroup -baduser

+@netgroup

Замечание: записи о запрете всегда должны стоять раньше записей разрешения, так как файл обрабатывается последовательно до первого найденного совпадения.

## СМОТРИТЕ ТАКЖЕ
rhosts(5), rlogind(8), rshd(8)


intro

title: intro(5)

text:
# intro(5)

## ИМЯ
intro - введение в форматы файлов и файловые системы

## ОПИСАНИЕ
В разделе 5 описываются различные форматы файлов, а также, если есть, соответствующие структуры на языке C.

Также есть несколько страниц с описанием различных файловых систем.

## ЗАМЕЧАНИЯ

### Авторы и условия распространения
Авторы и условия распространения указаны в заголовке исходной справочной страницы. Заметим, что у разных страниц они могут быть разными! Список русских переводчиков для каждой страницы можно найти в .po файле в исходном коде пакета.

## СМОТРИТЕ ТАКЖЕ
standards(7)


issue

title: issue(5)

text:
# issue(5)

## ИМЯ
issue - Файл с идентификационной информацией и сообщением, выдаваемым перед приглашением к входу

## ОПИСАНИЕ
В текстовом файле /etc/issue содержится сообщение или идентификационная информация системы, которая будет показана до приглашения к входу в систему. Он может содержать различные управляющие экраном последовательности @char и \char, если они поддерживаются в системе программой, подобной getty.

## ФАЙЛЫ
/etc/issue

## СМОТРИТЕ ТАКЖЕ
motd(5), agetty(8), mingetty(8)


locale

title: locale(5)

summary: описание файла определения локали

text:
# locale(5)

## ИМЯ
locale - описание файла определения локали

## ОПИСАНИЕ
Файл определения локали содержит в себе всю информацию, которая нужна команде localedef(1) для преобразования её в двоичную базу данных локалей.

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

### Синтаксис
Файл определения локали начинается с заголовка, который может состоять из следующих ключевых слов:

escape_char

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

comment_char

за которым указывается символ, использующийся в оставшихся строках файла как символ комментария. По умолчанию это символ решётки (#).

Определение локали поделено на отдельные части — для каждой категории своя. Каждую часть можно скопировать из другой существующей локали или создать с нуля. Если категорию нужно скопировать, то в определении должно находиться единственное ключевое слово copy и имя локали в двойных кавычках, из которого копируется категория. Исключением из этого правила являются LC_COLLATE и LC_CTYPE, когда в описании copy могут перечисляться правила для локали и выбранные замены.

При создании локали или категории с нуля за основу нужно взять из системы существующее определение локали, так как оно следует общим соглашениям glibc.

### Разделы категорий локали
Следующие разделы категорий определены в POSIX:

- LC_CTYPE

- LC_COLLATE

- LC_MESSAGES

- LC_MONETARY

- LC_NUMERIC

- LC_TIME

Также, начиная с версии 2.2, библиотека GNU C поддерживает следующие нестандартные категории:

- LC_ADDRESS

- LC_IDENTIFICATION

- LC_MEASUREMENT

- LC_NAME

- LC_PAPER

- LC_TELEPHONE

Более подробное описание каждой категории смотрите в locale(7).

### LC_ADDRESS
Определение начинается со строки LC_ADDRESS в первой колонке.

Допустимы следующие ключевые слова:

postal_fmt

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

%n

Имя человека, возможно собранное с использованием ключевого слова LC_NAME name_fmt (начиная с glibc 2.24).

%a

Относится к человеку или организации.

%f

Фирменное название.

%d

Название отдела.

%b

Обозначение здания.

%s

Название улицы или блока (в Японии).

%h

Номер дома или назначения.

%N

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

%t

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

%r

Номер квартиры, комнаты.

%e

Номер этажа.

%C

Страна назначения, берётся из ключевого слова country_post.

%l

Часть территории внутри посёлка или города (начиная с glibc 2.24).

%z

Индекс, почтовый код.

%T

Город, посёлок.

%S

Область, штат или префектура.

%c

Страна, как указана в данных записи.

Каждый описатель поля может содержать «R» после «%» для указания того, что информация берётся из версии строки на латинице.

country_name

за которым указывается название страны на языке текущего документа (например, «Deutschland» для локали de_DE).

country_post

за которым указывается аббревиатура страны (смотрите CERT_MAILCODES).

country_ab2

за которым указывается двухсимвольная аббревиатура страны (ISO 3166).

country_ab3

за которым указывается трёхсимвольная аббревиатура страны (ISO 3166).

country_num

за которым указывается числовой код страны (ISO 3166).

country_car

за которым указывается код страны в международном номерном знаке.

country_isbn

за которым указывается код ISBN (для книг).

lang_name

за которым указывается название языка на языке текущего документа.

lang_ab

за которым указывается двухсимвольная аббревиатура языка (ISO 639).

lang_term

за которым указывается трёхсимвольная аббревиатура языка (ISO 639-2/T).

lang_lib

за которым указывается трёхсимвольная аббревиатура языка, используемая в библиотеках (ISO 639-2/B). Обычно, приложениям нужно использовать lang_term вместо lang_lib.

Определение категории LC_ADDRESS заканчивается строкой END LC_ADDRESS.

### LC_CTYPE
Определение начинается со строки LC_CTYPE в первой колонке.

Допустимы следующие ключевые слова:

upper

за которым указывается список символов в верхнем регистре. Символы от A до Z добавляются автоматически. Символы, указанные для cntrl, digit, punct или space, не допускаются.

lower

за которым указывается список символов в нижнем регистре. Символы от a до z добавляются автоматически. Символы, указанные для cntrl, digit, punct или space, не допускаются.

alpha

за которым указывается список букв. Символы, указанные для upper или lower, добавляются автоматически. Символы, указанные для cntrl, digit, punct или space, не допускаются.

digit

за которым указывается список символов, которые считаются цифрами. Разрешается использовать в списке только цифры от 0 до 9. По умолчанию они добавляются автоматически.

space

за которым указывается список символов, которые считаются пробельными символами. Символы, указанные для upper, lower, alpha, digit, graph или xdigit, не допускаются. Символы <space>, <form-feed>, <newline>, <carriage-return>, <tab> и <vertical-tab> добавляются автоматически.

cntrl

за которым указывается список управляющих символов. Символы, указанные для upper, lower, alpha, digit, punct, graph, print или xdigit, не допускаются.

punct

за которым указывается список символов пунктуации. Символы, указанные для upper, lower, alpha, digit, cntrl, xdigit или <space>, не допускаются.

graph

за которым указывается список печатных (видимых) символов, не считая символа <space>. Автоматически включаются символы из upper, lower, alpha, digit, xdigit и punct. Символы, указанные в cntrl, не допускаются.

print

за которым указывается список печатных (видимых) символов, включая символ <space>. Автоматически включаются символы из upper, lower, alpha, digit, xdigit, punct и <space>. Символы, указанные в cntrl, не допускаются.

xdigit

за которым указывается список символов, относящихся к шестнадцатеричным цифрам. Должны быть указаны десятичные цифры, а также один или несколько наборов из шести символов в возрастающем порядке. По умолчанию включены: от 0 до 9, от a до f, от A до F.

blank

за которым указывается список символов, классифицированных как blank. Автоматически включены символы <space> и <tab>.

charclass

за которым указывается список определённых в локали имён классов символов, которые будут определены в локали позднее.

toupper

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

tolower

за которым указывается список преобразований символов верхнего регистра в символы нижнего. Если ключевое слово tolower не задано, то по умолчанию используется список, противоположный списку toupper.

map totitle

за которым указывается список преобразований пар символов и букв, используемых в заголовках.

class

за которым указывается определение класса символов определённой локали, сначала имя класса, затем идут символы, принадлежащие классу.

charconv

за которым указывается список определённых в локали имён преобразований символов, которые будут определены в локали позднее.

outdigit

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

map to_inpunct

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

map to_outpunct

за которым указывается список преобразований пар альтернативных разделителей вывода для локали.

translit_start

отмечает начало раздела правил транслитерации. В начале раздела может содержаться ключевое слово include, за которым указываются правила и замены для определённой локали. Любое правило, указанное в локали, заменит любое правило, скопированное или включённое из других файлов. В случае повтора определения правила в файле локали, используется только первое правило.

Правило транслитерации состоит из символа, который будет транслитерироваться, и списка целей транслитерации через точку с запятой. Используется первая цель, из набора символов которой может быть представлен указанный символ. Если представить нечем, то будет использоваться символ default_missing.

include

в разделе правил транслитерации включает файл правил транслитерации (и необязательный файл_набора отображения).

default_missing

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

translit_end

помечает конец правил транслитерации.

Определение категории LC_CTYPE заканчивается строкой END LC_CTYPE.

### LC_COLLATE
Заметим, что в glibc не поддерживаются все параметры, определённые в POSIX; список поддерживаемых параметров приведён ниже (для glibc 2.23).

Определение начинается со строки LC_COLLATE в первой колонке.

Допустимы следующие ключевые слова:

coll_weight_max

за которым указывается число, представляющее уровни сортировки. Это ключевое слово воспринимается glibc, но игнорируется.

collating-element

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

collating-symbol

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

define

за которым указывается строка, которая будет вычислена в конструкции ifdef строка / else / endif.

reorder-after

за которым следует повторное определение правила сортировки.

reorder-end

помечает конец повторного определения правила сортировки.

reorder-sections-after

за которым следует имя сценария для переупорядочивания сценариев, перечисляемых после.

reorder-sections-end

помечает конец разделов переупорядочивания.

script

за которым следует объявление сценария.

symbol-equivalence

за которым следует символ-сортировки, который будет эквивалентен другому определённому символу-сортировки.

Определение правила сортировки начинается со строки:

order_start

за которой указывается список ключевых слов из forward, backward или position. Определение сортировки состоит из строк, описывающих порядок сортировки, и заканчивается ключевым словом order_end.

Определение категории LC_COLLATE заканчивается строкой END LC_COLLATE.

### LC_IDENTIFICATION
Определение начинается со строки LC_IDENTIFICATION в первой колонке.

Допустимы следующие ключевые слова:

title

за которым указывается название документа локали (например, «Maori language locale for New Zealand»).

source

за которым указывается название организации, которая сопровождает этот документ.

address

за которым указывается адрес организации, которая сопровождает этот документ.

contact

за которым указывается контактное лицо от организации, которое сопровождает этот документ.

email

за которым указывается адрес электронной почты лица или организации, которое сопровождает этот документ.

tel

за которым указывается номер телефона (в международном формате) организации, которая сопровождает этот документ. В glibc 2.24 это ключевое слово устарело и заменено другими методами описания контактов.

fax

за которым указывается номер факса (в международном формате) организации, которая сопровождает этот документ. В glibc 2.24 это ключевое слово устарело и заменено другими методами описания контактов.

language

за которым указывается название языка, к которому применим этот документ.

territory

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

audience

за которым указывается аудитория, которой адресован этот документ.

application

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

abbreviation

за которым указывается короткое имя источника, предоставившего этот документ.

revision

за которым указывается номер выпуска этого документа.

date

за которым указывается дата выпуска этого документа.

Также, для каждой категории, определяемой документом, должна быть строка, начинающаяся с ключевого слова category, после которого указывается:

- строка, обозначающая определение этой категории локали,

- точка с запятой и

- один из идентификаторов LC_*.

Определение категории LC_IDENTIFICATION заканчивается строкой END LC_IDENTIFICATION.

### LC_MESSAGES
Определение начинается со строки LC_MESSAGES в первой колонке.

Допустимы следующие ключевые слова:

yesexpr

за которым указывается регулярное выражение, которое описывает возможные ответы «да».

noexpr

за которым указывается регулярное выражение, которое описывает возможные ответы «нет».

yesstr

за которым указывается выходная строка, соответствующая «да».

nostr

за которым указывается выходная строка, соответствующая «нет».

Определение категории LC_MESSAGES заканчивается строкой END LC_MESSAGES.

### LC_MEASUREMENT
Определение начинается со строки LC_MEASUREMENT в первой колонке.

Допустимы следующие ключевые слова:

measurement

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

1

Метрическая

2

Система мер США

Определение категории LC_MEASUREMENT заканчивается строкой END LC_MEASUREMENT.

### LC_MONETARY
Определение начинается со строки LC_MONETARY в первой колонке.

Допустимы следующие ключевые слова:

int_curr_symbol

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

currency_symbol

за которым указывается локальный символ валюты.

mon_decimal_point

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

mon_thousands_sep

за которым указывается строка, используемая как разделитель групп тысяч в денежных величинах.

mon_grouping

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

positive_sign

за которым указывается строка, используемая для указания положительного знака денежных величин.

negative_sign

за которым указывается строка, используемая для указания отрицательного знака денежных величин.

int_frac_digits

за которым указывается количество цифр в дробной части, которое нужно использовать при форматировании с int_curr_symbol.

frac_digits

за которым указывается количество цифр в дробной части, которое нужно использовать при форматировании с currency_symbol.

p_cs_precedes

за которым указывается целое, обозначающее положение currency_symbol при форматировании неотрицательной денежной величины:

0

сначала величина, затем символ

1

сначала символ, затем величина

p_sep_by_space

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

0

Отсутствует пробел между денежным символом и величиной.

1

Если денежный символ и строка знака находятся рядом, то они отделяются от значения пробелом; в противном случае пробелом разделяются денежный символ и значение.

2

Если денежный символ и строка знака находятся рядом, то они отделяются от значения пробелом; в противном случае пробелом разделяются строка знака и значение.

n_cs_precedes

за которым указывается целое, обозначающее положение currency_symbol при форматировании отрицательной денежной величины. Используются те же значения что и для p_cs_precedes.

n_sep_by_space

за которым указывается целое, обозначающее разделитель currency_symbol, строку знака и значение при генерации отрицательной денежной величины. Используются те же значения что и для p_sep_by_space.

p_sign_posn

за которым указывается целое, обозначающее положение positive_sign при форматировании неотрицательной денежной величины:

0

Величина и currency_symbol или int_curr_symbol заключается в круглые скобки.

1

Строка знака указывается перед величиной и currency_symbol или int_curr_symbol.

2

Строка знака указывается после величины и currency_symbol или int_curr_symbol.

3

Строка знака указывается перед величиной и currency_symbol или int_curr_symbol.

4

Строка знака указывается после currency_symbol или int_curr_symbol.

n_sign_posn

за которым указывается целое, обозначающее положение negative_sign при форматировании отрицательной денежной величины. Используются те же значения что и для p_sign_posn.

int_p_cs_precedes

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

int_n_cs_precedes

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

int_p_sep_by_space

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

int_n_sep_by_space

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

int_p_sign_posn

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

int_n_sign_posn

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

Определение категории LC_MONETARY заканчивается строкой END LC_MONETARY.

### LC_NAME
Определение начинается со строки LC_NAME в первой колонке.

Допускаются различные ключевые слова, но обязательно только name_fmt. Другие ключевые слова нужны только, если есть общее соглашение использовать соответствующее приветствие в этой локали.Допустимые ключевые слова:

name_fmt

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

%f

Фамилия.

%F

Фамилия в верхнем регистре.

%g

Имя.

%G

Инициал имени.

%l

Имя латиницей.

%o

Другое сокращённое имя.

%m

Дополнительные имена.

%M

Инициалы дополнительных имён.

%p

Профессия.

%s

Приветствие, например «доктор».

%S

Сокращение приветствия, например «Mr.» или «Dr.».

%d

Приветствие в соответствии с соглашениями FDCC.

%t

Если предыдущий описатель поля равен пустой строке, то выдаётся пустая строка, в противном случае символ пробела.

name_gen

за которым указывается приветствие для любого пола.

name_mr

за которым указывается приветствие для мужчин.

name_mrs

за которым указывается приветствие для замужних женщин.

name_miss

за которым указывается приветствие для не замужних женщин.

name_ms

за которым указывается приветствие, подходящее для всех женщин.

Определение категории LC_NAME заканчивается строкой END LC_NAME.

### LC_NUMERIC
Определение начинается со строки LC_NUMERIC в первой колонке.

Допустимы следующие ключевые слова:

decimal_point

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

thousands_sep

за которым указывается строка, используемая в качестве разделителя тысяч при форматировании числовых величин.

grouping

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

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

Определение категории LC_NUMERIC заканчивается строкой END LC_NUMERIC.

### LC_PAPER
Определение начинается со строки LC_PAPER в первой колонке.

Допустимы следующие ключевые слова:

height

за которым указывается высота бумаги стандартного формата в миллиметрах.

width

за которым указывается ширина бумаги стандартного формата в миллиметрах.

Определение категории LC_PAPER заканчивается строкой END LC_PAPER.

### LC_TELEPHONE
Определение начинается со строки LC_TELEPHONE в первой колонке.

Допустимы следующие ключевые слова:

tel_int_fmt

за которым указывается строка описателей поля, которыми задаётся формат, используемый для набора международных номеров. Доступны следующие описатели поля:

%a

Код региона без национального префикса (используемый чаще всего префикс «00»).

%A

Код региона включая национальный префикс.

%l

Локальный номер (внутри кода региона).

%e

Расширение (локального номера).

%c

Код страны.

%C

Альтернативный сервисный код поставщика услуг связи (carrier), используемый при наборе заграничного номера.

%t

Если предыдущий описатель поля равен пустой строке, то выдаётся пустая строка, в противном случае символ пробела.

tel_dom_fmt

за которым указывается строка описателей поля, которыми задаётся формат, используемый для набора местных номеров. Используются те же описатели поля, что и в tel_int_fmt.

int_select

за которым указывается префикс для набора международных телефонных номеров.

int_prefix

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

Определение категории LC_TELEPHONE заканчивается строкой END LC_TELEPHONE.

### LC_TIME
Определение начинается со строки LC_TIME в первой колонке.

Допустимы следующие ключевые слова:

abday

за которым указывается список сокращённых названий дней недели. Список начинается с первого дня недели, указанного в week (по умолчанию Sunday, воскресенье). Смотрите ЗАМЕЧАНИЯ.

day

за которым указывается список названий дней недели. Список начинается с первого дня недели, указанного в week (по умолчанию Sunday, воскресенье). Смотрите ЗАМЕЧАНИЯ.

abmon

за которым указывается список кратких названий месяцев.

mon

за которым указывается список названий месяцев.

d_t_fmt

за которым указывается соответствующий формат даты и времени (синтаксис описан в strftime(3)).

d_fmt

за которым указывается соответствующий формат даты (синтаксис описан в strftime(3)).

t_fmt

за которым указывается соответствующий формат времени (синтаксис описан в strftime(3)).

am_pm

за которым указывается соответствующее представление строк am и pm. Должно быть пустым для локалей, в которых не используется соглашение для AM/PM.

t_fmt_ampm

за которым указывается соответствующий формат времени для представления 12 часового формата (синтаксис описан в strftime(3)). Должно быть пустым для локалей, в которых не используется соглашение для AM/PM.

era

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

direction:offset:start_date:end_date:era_name:era_format

Поля определены следующим образом:

direction

Может быть + или -. Символ + означает, что у годов, находящихся ближе к start_date, числовое значение меньше, чем у годов, находящихся ближе к end_date. Символ - имеет обратный смысл.

offset

Ближайший к start_date номер года в эре, соответствует описателю %Ey (смотрите strptime(3)).

start_date

Начало эры в виде гггг/мм/дд. Года до 1-го нашей эры представляются отрицательными числами.

end_date

Конец эры в виде гггг/мм/вв или одно из двух специальных значений: -* или +*. Комбинация -* означает, что конечная дата — это начало времён. Комбинация +* означает, что конечная дата — это конец времён.

era_name

Название эпохи, соответствует описателю %EC (смотрите strptime(3)).

era_format

Формат года в эпохе, соответствует описателю %EY (смотрите strptime(3)).

era_d_fmt

за которым указывается формат даты в альтернативном формате эпохи, соответствует описателю %Ex (смотрите strptime(3)).

era_t_fmt

за которым указывается формат времени в альтернативном формате эпохи, соответствует описателю %EX (смотрите strptime(3)).

era_d_t_fmt

за которым указывается формат даты и времени в альтернативном формате эпохи, соответствует описателю %Ec (смотрите strptime(3)).

alt_digits

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

week

за которым указывается список из трёх значений, разделённых точкой с запятой: количество дней в неделе (по умолчанию 7), день начала недели (по умолчанию воскресенье) и минимальная длина первой недели в году (по умолчанию 4). Независимо от начала недели, 19971130 считается воскресеньем и 19971201 считается понедельником. Смотрите ЗАМЕЧАНИЯ.

first_weekday (начиная с glibc 2.2)

за которым указывается номер первого дня из списка day, который будет показан в приложениях-календарях. Значение по умолчанию 1 соответствует или воскресенью или понедельнику, в зависимости от значения второго элемента в списке week. Смотрите ЗАМЕЧАНИЯ.

first_workday (начиная с glibc 2.2)

за которым указывается номер первого рабочего дня из списка day Значение по умолчанию равно 2.Смотрите ЗАМЕЧАНИЯ.

cal_direction

за которым указывается числовое значение, задающее направление показа календарных дат:

1

Слева направо, сверху.

2

Сверху вниз, слева.

3

Справа налево, сверху.

date_fmt

за которым указывается представление соответствующей даты для date(1) (синтаксис описан в strftime(3)).

Определение категории LC_TIME заканчивается строкой END LC_TIME.

## ФАЙЛЫ
/usr/lib/locale/locale-archive

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

/usr/share/i18n/locales

Обычный путь по умолчанию для файлов определений локалей.

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.2.

## ЗАМЕЧАНИЯ
Коллективная мудрость сообщества библиотеки GNU C про abday, day, week, first_weekday и first_workday пишет в https://sourceware.org/glibc/wiki/Locales следующее:

- Значение второго элемента в списке week задаёт начало списков abday и day.

- В first_weekday задаётся смещение первого дня недели в списках abday и day.

- Для совместимости, все локали glibc должны содержать значение второго элемента в списке week равное 19971130 (воскресенье), а также в базовых списках abday и day, соответственно, и установить значение first_weekday и first_workday равное 1 или 2, в зависимости от реального начала и рабочего дня недели в локали — воскресенья или понедельника.

## СМОТРИТЕ ТАКЖЕ
iconv(1), locale(1), localedef(1), localeconv(3), newlocale(3), setlocale(3), strftime(3), strptime(3), uselocale(3), charmap(5), charsets(7), locale(7), unicode(7), utf-8(7)


motd

title: motd(5)

summary: сообщение дня

text:
# motd(5)

## ИМЯ
motd - сообщение дня

## ОПИСАНИЕ
Содержимое файла /etc/motd отображается программой login(1) после осуществления успешного входа в систему, перед запуском командного интерпретатора.

Сокращение "motd" расшифровывается как "message of the day" (сообщение дня), и данный файл традиционно используется именно для этой цели (он требует гораздо меньше дискового пространства, чем почтовое сообщение каждому пользователю).

## ФАЙЛЫ
/etc/motd

## СМОТРИТЕ ТАКЖЕ
login(1), issue(5)


networks

title: networks(5)

summary: информация об имени сети

text:
# networks(5)

## ИМЯ
networks - информация об имени сети

## ОПИСАНИЕ
Файл /etc/networks представляет собой простой файл в формате ASCII и описывает известные сети DARPA и символические имена этих сетей. Каждая строка описывает одну сеть и имеет следующую структуру:

имя номер псевдонимы ...

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

Описание полей:

имя

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

номер

Официальный номер данной сети в цифро-точечной форме (см. inet(3)). Завершающий ".0" (компонент узла в адресе сети) можно не указывать.

псевдонимы

Необязательные псевдонимы сети.

Этот файл используется программами route(8) и netstat(8). Поддерживаются только сети классов A, B или C, бесклассовая адресация (то есть, сеть/26 или сеть/28) не поддерживаются данным средством.

## ФАЙЛЫ
/etc/networks

Файл с именами сетей.

## СМОТРИТЕ ТАКЖЕ
getnetbyaddr(3), getnetbyname(3), getnetent(3), netstat(8), route(8)


nologin

title: nologin(5)

text:
# nologin(5)

## ИМЯ
nologin - отказывает во входе в систему непривилегированным пользователям

## ОПИСАНИЕ
Если существует файл /etc/nologin и он доступен для чтения, то login(1) будет разрешать доступ в систему только пользователю root. Остальным пользователям будет показано содержимое этого файла, а в доступе в систему будет отказано. Предоставляет простой способ временной блокировки входа всем непривилегированным пользователям.

## ФАЙЛЫ
/etc/nologin

## СМОТРИТЕ ТАКЖЕ
login(1), shutdown(8)