Исправления и дополнения к разделу additional

This commit is contained in:
monosans 2021-06-26 21:32:52 +03:00
parent 13c089c8f6
commit 654dcce266
11 changed files with 160 additions and 154 deletions

View File

@ -7,18 +7,18 @@
## Термины
- `FHS` (`Filesystem Hierarchy Standart`) - документ, который определяет схему директорий в UNIX-системах. FHS разработан, чтобы предоставить общую схему для упрощения независимой от дистрибутива разработки `программного обезпечения` (далее - `ПО`). Другими словами, это стандарт, унифицирующий местонахождение файлов и каталогов с общим назначением в файловой системе UNIX. Таблицу директорий и другую информацию вы сможете лицезреть [здесь](partition_catalogs).
- `LSB` (`Linux Standart Base`) - совместный проект дистрибутивов Linux при организации Linux Foundation, целью которого является стандартизация их внутренней инфраструктуры. Цель LSB - разработать и продвигать набор стандартов, который увеличит совместимость различных дистрибутивов Linux и даст возможность запускать приложения на любой совместимой системе; помимо этого, LSB помогает сконцентрировать усилия в привлечении разработчиков к написанию и портированию ПО. LSB сертифицирует стандартные библиотеки, пару утилит, структуру иерархии `файловой системы` (далее - `ФС`), уровни запуска, et cereta.
- `конфиг` - сленговое. Означает "конфигурационный файл"
- `юзер` - сленговое. Означает "пользователь"
- `ФС` - сокращение от "файловая система"
- `LSB` (`Linux Standart Base`) - совместный проект дистрибутивов Linux при организации Linux Foundation, целью которого является стандартизация их внутренней инфраструктуры. Цель LSB - разработать и продвигать набор стандартов, который увеличит совместимость различных дистрибутивов Linux и даст возможность запускать приложения на любой совместимой системе; помимо этого, LSB помогает сконцентрировать усилия в привлечении разработчиков к написанию и портированию ПО. LSB сертифицирует стандартные библиотеки, пару утилит, структуру иерархии `файловой системы` (далее - `ФС`), уровни запуска и et cetera.
- `конфиг` - сленговое. Означает "конфигурационный файл".
- `юзер` - сленговое. Означает "пользователь".
- `ФС` - сокращение от "файловая система".
## Filesystem Hierarhy Standart
## Filesystem Hierarchy Standard
В данном разделе речь пойдёт про иерархию ФС Linux. Может быть применимо и к другим UNIX-Like системам и дистрибутивам, главное, чтобы они соответствовали стандарту `FHS`. Всякие Gobo Linux не рассматриваем.
В данном разделе речь пойдёт про иерархию ФС Linux. Может быть применимо и к другим UNIX-Like системам и дистрибутивам, главное, чтобы они соответствовали стандарту `FHS`. Всякие NixOS и Gobo Linux не рассматриваем.
## Независимые классификации в FHS
Спецификация FHS основывается на идее существования двух независимых классификаций файлов: разделяемых и неразделяемых, а так же изменяемые и статичные. Разделяемые данные могут распространяться на несколько хостов; неразделяемые специфичны для конкретного хоста (например, конфиги). Соответственно, изменяемые файлы изменяются, а статичные - нет (за исключением установки и обслуживания системы).
Спецификация FHS основывается на идее существования двух независимых классификаций файлов: разделяемых и неразделяемых, а также изменяемые и статичные. Разделяемые данные могут распространяться на несколько хостов; неразделяемые специфичны для конкретного хоста (например, конфиги). Соответственно, изменяемые файлы изменяются, а статичные - нет (за исключением установки и обслуживания системы).
Резюме. 4 возможные комбинации + нужные директории.
@ -34,14 +34,14 @@
> В данной статье загрузка ПК, BIOS, UEFI и прочее будет пропущено, ибо это не тема этой статьи.
Начнём с загрузчика. Их очень много - `GRUB2`, `rEFInd`, `systemd-boot`, `syslinux` и другие. Но самым популярным является, конечно, `GRUB2`.
Задача загрузчика - инициализировать ядро Linux (в нашем случае). В помощь ядру загрузчик обычно использует начальный образ загрузки - `initrd` или `initfarms`, представляющий собой архив с образом файловой системы, разворачивающейся в ОЗУ в начале загрузки. В `initrd`/`initfarms` находятся нужные драйверы, скрипты и прочее, что необходимо для инициализации оборудования и прочих целей.
Задача загрузчика - инициализировать ядро Linux (в нашем случае). В помощь ядру загрузчик обычно использует начальный образ загрузки - `initrd` или `initramfs`, представляющий собой архив с образом файловой системы, разворачивающейся в ОЗУ в начале загрузки. В `initrd`/`initramfs` находятся нужные драйверы, скрипты и прочее, что необходимо для инициализации оборудования и прочих целей.
---
После начального образа загружается ядро. Находится в `/boot`, в своём названии имеет `vmlinuz`:
- `vm` - поддержка виртуальной памяти
- `linu` - когда-то называлось `linux`, но позже сократилось до текущего состояния, потому что необходимо указать факт сжатия ядра (следующий пункт)
- `vm` - поддержка виртуальной памяти;
- `linu` - когда-то называлось `linux`, но позже сократилось до текущего состояния, потому что необходимо указать факт сжатия ядра (следующий пункт);
- `z` - указатель того, что файл с ядром сжат (формат сжатия обычно `zlib`. Не всегда используется именно это сжатие, иногда можно встретить `LZMA` или `BZIP2`, поэтому некоторые ядра называют просто `zImage`).
Ядро Linux является `монолитным`.
@ -69,26 +69,26 @@ modprobe qemu-nbd
GNU/Linux состоит из четырёх основных частей:
- `Ядро Linux` — основная интересующая нас часть; ядро создаёт абстрактный слой и является «посредником» между первыми двумя частями и hardware-частью компьютера;
Hardware controllers (контроллеры оборудования) — подсистема, охватывающая все возможные физические устройства, такие как CPU, устройства памяти, жёсткие диски, сетевые карты — все они являются частью этой подсистемы.
- `O/S services` (службы операционной системы) — службы, которые обычно считаются частью операционной системы. Например, оконные менеджеры. Ну и программный интерфейс ядра (компиляторы и прочее)
- `Hardware controllers` (контроллеры оборудования) — подсистема, охватывающая все возможные физические устройства, такие как CPU, устройства памяти, жёсткие диски, сетевые карты — все они являются частью этой подсистемы
- `O/S services` (службы операционной системы) — службы, которые обычно считаются частью операционной системы. Например, оконные менеджеры. Ну и программный интерфейс ядра (компиляторы и прочее);
- `User applications` (пользовательские приложения) — набор пользовательских приложений, который в разных дистрибутивах Linux может быть разным. Например, в Linux For Yourself предложен самый небольшой набор ПО, которого хватит для корректной работы операционной системы.
![kernel1](pic/kernel1.jpg)
Каждая подсистема может взаимодействовать только с двумя соседними, расположенными непосредственно «выше» и «ниже» её уровня. Кроме того, зависимости между этими подсистемами направлены сверху вниз: слои расположенные выше — зависят от частей ниже, но части, расположенные ниже — не зависят от частей выше их.
Каждая подсистема может взаимодействовать только с двумя соседними, расположенными непосредственно «выше» и «ниже» её уровня. Кроме того, зависимости между этими подсистемами направлены сверху вниз: слои, расположенные выше — зависят от частей ниже, но части, расположенные ниже — не зависят от частей выше их.
Ядро Linux состоит из пяти основных подсистем:
- `Process Scheduler` (`SCHED`) — планировщик процессов, отвечает за контроль над доступом процессов к CPU. Планировщик обеспечивает такое поведения ядра, при котором все процессы имеют справедливый доступ к центральному процессору.
- `Memory Manager` (`MM`) — менеджер памяти, обеспечивает различным процессам безопасный доступ к основной памяти системы. Кроме того, MM обеспечивает работу виртуальной памяти, которая позволяет процессам использовать больше памяти, чем реально доступно в системе. Выделенная, но неиспользуемая память вытесняется на файловую систему, и при необходимости — возвращается из неё обратно в память (swapping).
- `Virtual File System` (`VFS`) — виртуальная файловая система, создаёт абстрактный слой, скрывая детали оборудования, предоставляя общий файловый интерфейс для всех устройств. Кроме того, VFS поддерживает несколько форматов файловых систем, которые совместимы с другими операционными системами.
- `Network Interface` (`NET`) — сетевые интерфейсы, обеспечивает работу с различными сетевыми стандартами и сетевым оборудованием.
- `Process Scheduler` (`SCHED`) — планировщик процессов, отвечает за контроль над доступом процессов к CPU. Планировщик обеспечивает такое поведения ядра, при котором все процессы имеют справедливый доступ к центральному процессору;
- `Memory Manager` (`MM`) — менеджер памяти, обеспечивает различным процессам безопасный доступ к основной памяти системы. Кроме того, MM обеспечивает работу виртуальной памяти, которая позволяет процессам использовать больше памяти, чем реально доступно в системе. Выделенная, но неиспользуемая память вытесняется на файловую систему, и при необходимости — возвращается из неё обратно в память (swapping);
- `Virtual File System` (`VFS`) — виртуальная файловая система, создаёт абстрактный слой, скрывая детали оборудования, предоставляя общий файловый интерфейс для всех устройств. Кроме того, VFS поддерживает несколько форматов файловых систем, которые совместимы с другими операционными системами;
- `Network Interface` (`NET`) — сетевые интерфейсы, обеспечивает работу с различными сетевыми стандартами и сетевым оборудованием;
- `Inter-Process Communication` (`IPC`) — межпроцессная подсистема, поддерживающая несколько механизмов для process-to-process связей в единой Linux-системе.
![kernel2](pic/kernel2.gif)
![kernel3](pic/kernel3.png)
Символом ядра Linux является Tux, отличающийся от «обычных» пингвинов жёлтым цветом клюва и лап. Однако, в кач-ве символа Linux 2.6.29 был принят Tuz (тасманский дьявол), изображение которого ранее служило талисманом конференции linux.conf.au 2009. В следующих версиях ядра используется предыдущий пингвин Tux. Его можно наблюдать и поныне.
Символом ядра Linux является Tux, отличающийся от «обычных» пингвинов жёлтым цветом клюва и лап. Однако, в качестве символа Linux 2.6.29 был принят Tuz (тасманский дьявол), изображение которого ранее служило талисманом конференции linux.conf.au 2009. В следующих версиях ядра используется предыдущий пингвин Tux. Его можно наблюдать и поныне.
![Tux](pic/Tux.png)
_Tux_
@ -98,14 +98,14 @@ _Tuz_
---
После ядра стартует `init` - подсистема инициализации в UNIX-ах, которая запускает все остальные процессы. Имеет `PID`=1. Раньше, де-факто стандартным инитом в GNU/Linux был SysVInit. Однако, в самом начале 10-ых были попытки заменить sysvinit на другую систему инициализации. Например, в Ubuntu первое время использовался `upstart` от Canonical, а в Gentoo Linux используется OpenRC. Так же, был создан `systemd`, на который в данный момент перешло большинство дистрибутивов Linux.
После ядра стартует `init` - подсистема инициализации в UNIX-ах, которая запускает все остальные процессы. Имеет `PID`=1. Раньше, де-факто стандартным инитом в GNU/Linux был SysVInit. Однако, в самом начале 10-ых были попытки заменить sysvinit на другую систему инициализации. Например, в Ubuntu первое время использовался `upstart` от Canonical, а в Gentoo Linux используется OpenRC. Также был создан `systemd`, на который в данный момент перешло большинство дистрибутивов Linux.
**Достоинства `systemd`**
- _агрессивная параллелизация_ и прочее, что позволяет существенно ускорить загрузку ОС
- запуск сервисов по расписанию (вместо `cron`)
- смена корня (вместо `chroot`)
- простой и лаконичный синтаксис служб
- _Агрессивная параллелизация_ и прочее, что позволяет существенно ускорить загрузку ОС
- Запуск сервисов по расписанию (вместо `cron`)
- Смена корня (вместо `chroot`)
- Простой и лаконичный синтаксис служб
**Недостатки `systemd`**
@ -129,12 +129,14 @@ _Tuz_
После инита загружается `командная оболочка`, коих так же довольно много:
- `bourne shell` (sh) - "тот самый"
- `bourne again shell` (bash) - ставшая классической в Linux оболочка, которая используется во многих дистрибутивах по умолчанию. В Linux for yourself `/bin/sh` является символической ссылкой на `/bin/bash`.
- `BusyBox` - представляет собой целое пользовательское окружение, в том числе, командную оболочку (вызов: `busybox sh`). Достоинство: малый размер и небольшие требования к аппаратуре.
- et cetera
- `bourne shell` (sh) - "тот самый";
- `bourne again shell` (bash) - ставшая классической в Linux оболочка, которая используется во многих дистрибутивах по умолчанию. В Linux for yourself `/bin/sh` является символической ссылкой на `/bin/bash`;
- `BusyBox` - представляет собой целое пользовательское окружение, в том числе, командную оболочку (вызов: `busybox sh`). Достоинство: малый размер и небольшие требования к аппаратуре;
- `Z shell` (zsh) - мощная современная оболочка. Она почти полностью совместима с bash, но имеет преимущества, такие как улучшенное завершение на клавишу Tab (англ. tab completion), автоматическое исправление опечаток и огромное количество разработанных сообществом плагинов. К слову, именно она по умолчанию используется в macOS.
- `friendly interactive shell` (fish) - удобная оболочка, которая "из коробки" имеет подсветку синтаксиса, автодополнения, генерируемые из мануалов, и т. п. Из минусов нужно выделить несовместимость со спецификацией POSIX sh;
- et cetera.
Коммандная оболочка прописана в стандарте POSIX и необходима для работы системы.
Командная оболочка прописана в стандарте POSIX и необходима для работы системы.
В Linux for yourself список оболочек содержится в файле `/etc/shells`.
---
@ -143,25 +145,25 @@ _Tuz_
Состоит из следующих компонентов:
- `Display Server` - дисплейный сервер
- `Display Manager` - дисплейный менеджер
- `Desktop Manager` (DE) - рабочее окружение
- `Display Server` - дисплейный сервер;
- `Display Manager` (DM) - дисплейный менеджер;
- `Desktop Manager` (DE) - рабочее окружение.
Рабочее окружение (DE) можно разделить на следующее:
- `WM` (Window Manager) - программа, которая управляет отображением окон в системе GUI (Graphic User Interface) - графическом интерфейсе пользователя.
- Средство запуска ПО
- `WM` (Window Manager) - программа, которая управляет отображением окон в системе GUI (Graphic User Interface) - графическом интерфейсе пользователя;
- Средство запуска ПО;
- Панель, на которой располагаются апплеты/виджеты:
- ср-во запуска приложений
- апплет переключения между открытыми окнами
- апплет системного трея
- другие апплеты/виджеты по усмотрению пользователя
- Файловый менеджер, задача которого - не только работа с файлами, но и управление иконками на рабочем столе
- Менеджер обоев рабочего стола
- Приложения по умолчанию (эмулятор терминала, файловый менеджер (см. по списку выше), настройки системы и рабочего окружения, et cereta)
- et cetera
- средство запуска приложений;
- апплет переключения между открытыми окнами;
- апплет системного трея;
- другие апплеты/виджеты по усмотрению пользователя.
- Файловый менеджер, задача которого - не только работа с файлами, но и управление иконками на рабочем столе;
- Менеджер обоев рабочего стола;
- Приложения по умолчанию (эмулятор терминала, файловый менеджер (см. по списку выше), настройки системы и рабочего окружения, et cetera);
- et cetera.
> Хочу заострить ваше внимание на том, что оконный менеджер, панель и некоторые другие компоненты можно использовать и отдельно от рабочего окружения. Например, оконные менеджеры Fluxbox, Openbox, i3-wm, Awesome, Sway и др. используются отдельно от DE. Так же существуют отдельные файловые менеджеры, которые так же поставляются отдельно от рабочего окружения.
> Хочу заострить ваше внимание на том, что оконный менеджер, панель и некоторые другие компоненты можно использовать и отдельно от рабочего окружения. Например, оконные менеджеры Fluxbox, Openbox, i3-wm, Awesome, Sway и др. используются отдельно от DE. Также существуют отдельные файловые менеджеры, которые так же поставляются отдельно от рабочего окружения.
!> Не путайте понятия "рабочий стол" и "рабочее окружение". Хотя эти два термина похожи, но значения немного разные.
@ -171,22 +173,23 @@ _Tuz_
### Display server
Дисплейный сервер - программа, отвечающая за координацию ввода и вывода своих клиентов с ОС, а так же между оборудованием и ОС. Именно благодаря Display Server вы используете Linux в графическом режиме, а не в TTY. Когда говорят "дисплейный сервер", нередко имеют ввиду `Xorg`, `Wayland`, `Mir` и прочие.
Дисплейный сервер - программа, отвечающая за координацию ввода и вывода своих клиентов с ОС, а также между оборудованием и ОС. Именно благодаря Display Server вы используете Linux в графическом режиме, а не в TTY. Когда говорят "дисплейный сервер", нередко имеют ввиду `Xorg`, `Wayland`, `Mir` и прочие.
### Display Manager
Первая программа, которая запускается при старте графики. Его основные задачи:
Первая программа, которая запускается при старте графики. Её основные задачи:
- запросить аутентификационные данные нужного пользователя (имя, пароль или отпечаток пальца).
- выбрать, какую среду рабочего стола запустить
- запросить аутентификационные данные нужного пользователя (имя, пароль или отпечаток пальца);
- выбрать, какую среду рабочего стола запустить.
Примеры DM:
- LightDM
- Xdm
- SDDM (из состава KDE)
- TDM (из состава Trinity)
- WDM (из состава Window Maker)
- LightDM;
- XDM;
- GDM (из состава GNOME);
- SDDM (из состава KDE);
- TDM (из состава Trinity);
- WDM (из состава Window Maker).
Как и упоминалось ранее, дисплейные менеджеры можно использовать и отдельно от DE.
@ -195,6 +198,6 @@ _Tuz_
Я не случайно начал именно с WM. Во-первых, про DE было сказано выше, а во-вторых, оконный менеджер можно использовать отдельно от всего громоздкого рабочего окружения.
Что такое `WM` было так же сказано выше. Можно выделить три вида оконных менеджеров:
- `Стековые` (`плавающие`) следуют классической метафоре, которая на данный момент самая удобная и популярная. Классическое расположение окон, которые могут накладываться и перекрывать друг друга.
- `Фреймовые` WM располагают окна в виде `фреймов` (`плиток`), эти фреймы не способны перекрывать друг друга, подобное поведение встречается в графическом интерфейсе _Windows_ 1.x. Наиболее удобно использовать такие оконные менеджеры посредством клавиатуры, хотя поддержка мыши во многих из них так же присутствует.
- `Динамические` (например, i3wm) - динамически переключаются между двумя режимами, описанными выше (`стековый` и `фреймовый` режимы). Поддержка мыши есть в большинстве из них
- `Стековые` (`плавающие`, англ. `stacking`, `floating`) следуют классической метафоре, которая на данный момент самая удобная и популярная. Классическое расположение окон, которые могут накладываться и перекрывать друг друга;
- `Фреймовые` (англ. `tiling`) WM располагают окна в виде `фреймов` (`плиток`), эти фреймы не способны перекрывать друг друга, подобное поведение встречается в графическом интерфейсе _Windows_ 1.x. Наиболее удобно использовать такие оконные менеджеры посредством клавиатуры, хотя поддержка мыши во многих из них также присутствует;
- `Динамические` (например, i3wm) - динамически переключаются между двумя режимами, описанными выше (`стековый` и `фреймовый` режимы). Поддержка мыши есть в большинстве из них.

View File

@ -2,7 +2,7 @@
В первой части статьи речь была об общем строении системы. Так сказать, галопом по европам. А в следующих частях строение Linux будет описано подробнее. Каждая статья описывает только одну тему.
Для начала стоит написать о концепции "всё есть файл". Концепция была перенята разработчиками Linux из Unix. Это было сделано для предоставления простого доступа ко всем возможностям ОС не разрабатывая отдельных костылей. Т.е., преимущество такого принципа в том, что не надо реализовывать отдельный API для каждого устр-ва, в результате чего с ним (с файлом) могут работать все стандартные программы и API-интерфейсы. В Linux есть `корневая ФС` (корневая файловая система), куда монтируются раздел жёсткого диска, где установлена система, другие разделы, флешки, диски, псевдо-ФС и пр. Посмотрите на файл `/etc/os-release`:
Для начала стоит написать о концепции "всё есть файл". Концепция была перенята разработчиками Linux из Unix. Это было сделано для предоставления простого доступа ко всем возможностям ОС, не разрабатывая отдельных костылей. Т.е., преимущество такого принципа в том, что не надо реализовывать отдельный API для каждого устр-ва, в результате чего с ним (с файлом) могут работать все стандартные программы и API-интерфейсы. В Linux есть `корневая ФС` (корневая файловая система), куда монтируются раздел жёсткого диска, где установлена система, другие разделы, флешки, диски, псевдо-ФС и пр. Посмотрите на файл `/etc/os-release`:
```
file /etc/os-release
@ -36,15 +36,15 @@ file /dev/sda2
Есть 3 типа файлов:
- **Обыкновенные**, которые используются для хранения информации
- **Специальные** (для туннелей и устройств)
- **Директории** (их ещё называют _папками_ или аталогами_)
- **Обыкновенные**, которые используются для хранения информации;
- **Специальные** (для туннелей и устройств);
- **Директории** (их ещё называют _папками_ или аталогами_).
---
С обычными файлами пользователь работает чаще всего. Это документы, текстовые файлы, музыка, видео и пр.
Для того, чтобы просмотреть эти файлы, выполнить:
Для того, чтобы просмотреть эти файлы, выполните:
```
ls -l /etc |grep "^-"
@ -54,7 +54,7 @@ ls -l /etc |grep "^-"
### Объяснение команды
- `ls` просматривает каталог, а ключ `-l` добавляет отображение прав на файл. `/etc` замените на нужную директорию
- `ls` - просматривает каталог, а ключ `-l` добавляет отображение прав на файл. `/etc` замените на нужную директорию.
- `grep "^-"` - так как "обычные" файлы обозначаются чертой (в первой колонке вывода `ls`, где отображаются права на файл), то эта команда выведет только эти файлы по маске `^-`.
---
@ -62,7 +62,7 @@ ls -l /etc |grep "^-"
По поводу специальных файлов. Они обеспечивают обмен информации с ядром, работу с устр-вами и пр. Собственно, делятся ещё на несколько видов:
- **Символьные файлы** - любые специальные системные, например `/dev/null`, или периферийные устр-ва (последовательные/параллельные порты). Такие файлы идентифицированы символом `c`.
- **Блочные** - периферийные устр-ва, но в отличии от предыдущего типа, содержание блочных файлов буферизируется. Эти файлы идентифицированы символом `b`.
- **Блочные** - периферийные устр-ва, но в отличие от предыдущего типа, содержание блочных файлов буферизируется. Эти файлы идентифицированы символом `b`.
![Блочные файлы](pic/sda2.png)
@ -80,17 +80,17 @@ ls -l /etc |grep "^-"
Вывод `lsof` состоит из нескольких колонок с информацией:
- `COMMAND` - имя команды, которая открыла или использует файл
- `PID` - PID процесса
- `TID` - идентификационный номер задачи (потока) . Пустой столбец означает, что это не задача; это процесс
- `TASKCMD` - имя команды задачи. Обычно имеет то же самое название, что и процесс, названный в столбце `COMMAND`, но некоторые реализации задач (например, Linux) позволяют задаче изменить имя своей команды
- `USER` - имя пользователя, которому соответствует процесс, либо тот пользователь, которому принадлежит директория `/proc`, откуда lsof берёт информацию о процессе
- `FD` - показывает файловый дескриптор файла
- `TYPE` - тип узла, связанного с файлом
- `DEVICE` - содержит номера устройств, разделённые запятыми, для специальных символьных, специальных блочных, обычных файлов, каталогов или NFS. Также может отображаться базовый адрес или имя устройства с сокетом Linux AX.25
- `SIZE/OFF` - размер файла/смещение файла в байтах
- `NODE` - показывает номер узла локального файла или номер узла NFS-файла на хосте сервера или тип интернет-протокола. Может отображаться STR для потока, IRQ или номер инода устройства с сокетом Linux AX.25
- `NAME` - имя имя точки монтирования и файловой системы, в которой находится файл
- `COMMAND` - имя команды, которая открыла или использует файл;
- `PID` - PID процесса;
- `TID` - идентификационный номер задачи (потока). Пустой столбец означает, что это не задача, а процесс;
- `TASKCMD` - имя команды задачи. Обычно имеет то же самое название, что и процесс, названный в столбце `COMMAND`, но некоторые реализации задач (например, Linux) позволяют задаче изменить имя своей команды;
- `USER` - имя пользователя, которому соответствует процесс, либо тот пользователь, которому принадлежит директория `/proc`, откуда lsof берёт информацию о процессе;
- `FD` - показывает файловый дескриптор файла;
- `TYPE` - тип узла, связанного с файлом;
- `DEVICE` - содержит номера устройств, разделённые запятыми, для специальных символьных, специальных блочных, обычных файлов, каталогов или NFS. Также может отображаться базовый адрес или имя устройства с сокетом Linux AX.25;
- `SIZE/OFF` - размер файла/смещение файла в байтах;
- `NODE` - показывает номер узла локального файла или номер узла NFS-файла на хосте сервера или тип интернет-протокола. Может отображаться STR для потока, IRQ или номер инода устройства с сокетом Linux AX.25;
- `NAME` - имя точки монтирования и файловой системы, в которой находится файл;
### Опции lsof

View File

@ -1,5 +1,5 @@
# Вспомогательные материалы
Это необязательна часть, и служит дополнительным источником знаний. В некоторых случаях здесь могут быть решения возникающих проблем, важные заметки по процессу работы в целом.
Это необязательная часть, служащая дополнительным источником знаний. В некоторых случаях здесь могут быть решения возникающих проблем и важные заметки по процессу работы в целом.
Этот раздел создан, чтобы свести к минимуму Ваши поиски необходимой информации, и выполнить аккумулирование самых важных вопросов в одном месте.
Этот раздел создан, чтобы свести к минимуму Ваши поиски необходимой информации и выполнить аккумулирование самых важных вопросов в одном месте.

View File

@ -8,11 +8,11 @@
## Виды архитектур
В этой статье мы рассмотрим самые распространенные и актуальные архитектуры с программной точки зрения, кроме узкоспециализированных (графических, математических, тензорных).
В этой статье мы рассмотрим самые распространённые и актуальные архитектуры с программной точки зрения, кроме узкоспециализированных (графических, математических, тензорных).
### CISC
CISC (англ. Complex Instruction Set Computer — «компьютер с полным набором команд») — тип процессорной архитектуры, в первую очередь, с нефиксированной длиной команд, а также с кодированием арифметических действий в одной команде и небольшим числом регистров, многие из которых выполняют строго определенную функцию.
CISC (англ. Complex Instruction Set Computer — «компьютер с полным набором команд») — тип процессорной архитектуры, в первую очередь, с нефиксированной длиной команд, а также с кодированием арифметических действий в одной команде и небольшим числом регистров, многие из которых выполняют строго определённую функцию.
Самый яркий пример CISC архитектуры — это x86 (он же IA-32) и x86_64 (он же AMD64).
@ -20,13 +20,13 @@ CISC (англ. Complex Instruction Set Computer — «компьютер с п
### RISC
RISC (англ. Reduced Instruction Set Computer — «компьютер с сокращённым набором команд») — архитектура процессора, в котором быстродействие увеличивается за счёт упрощения инструкций: их декодирование становится более простым, а время выполнения — меньшим. Первые RISC-процессоры не имели даже инструкций умножения и деления и не поддерживали работу с числами с плавающей запятой.
RISC (англ. Reduced Instruction Set Computer — «компьютер с сокращённым набором команд») — архитектура процессора, в которой быстродействие увеличивается за счёт упрощения инструкций: их декодирование становится более простым, а время выполнения — меньшим. Первые RISC-процессоры не имели даже инструкций умножения и деления и не поддерживали работу с числами с плавающей запятой.
По сравнению с CISC эта архитектура имеет константную длину команды, а также меньшее количество схожих инструкций, позволяя уменьшить итоговую цену процессора и энергопотребление, что критично для мобильного сегмента. У RISC также большее количество регистров.
Примеры RISC-архитектур: PowerPC, серия архитектур ARM (ARM7, ARM9, ARM11, Cortex).
В общем случае RISC быстрее CISC. Даже если системе RISC приходится выполнять 4 или 5 команд вместо одной, которую выполняет CISC, RISC все равно выигрывает в скорости, так как RISC-команды выполняются в 10 раз быстрее.
В общем случае RISC быстрее CISC. Даже если системе RISC приходится выполнять 4 или 5 команд вместо одной, которую выполняет CISC, RISC всё равно выигрывает в скорости, так как RISC-команды выполняются в 10 раз быстрее.
Отсюда возникает закономерный вопрос: почему многие всё ещё используют CISC, когда есть RISC? Всё дело в совместимости. x86_64 всё ещё лидер в desktop-сегменте только по историческим причинам. Так как старые программы работают только на x86, то и новые desktop-системы должны быть x86(\_64), чтобы все старые программы и игры могли работать на новой машине.

View File

@ -4,19 +4,19 @@
## Применение кросс-компиляторов
- Встроенные компьютеры, где устройства имеют крайне ограниченные ресурсы.
- Компиляция для нескольких машин. Например, компания, возможно, пожелает поддержать несколько различных версий операционной системы или для поддержки нескольких различных операционных систем. С помощью кросс-компилятора одной сборки можно настроить для компиляции каждой из этих целевых задач.
- Компиляции на ферме серверов. Похожие на компиляции для нескольких машин сложной сборки, которые включают в себя множество операций компиляции и могут выполняться на любой машине.
- Встроенные компьютеры, на которых ресурсы устройства крайне ограничены.
- Компиляция для нескольких машин. Например, компания может пожелать поддерживать несколько разных версий операционной системы или поддерживать несколько разных операционных систем. Используя кросс-компилятор, можно настроить единую среду сборки для компиляции для каждой из этих целей.
- Компиляции на ферме серверов. Подобно компиляции для нескольких машин, сложная сборка, которая включает в себя множество операций компиляции, может быть выполнена на любой свободной машине.
- Самонастройка на новую платформу. При разработке программного обеспечения для новой платформы или эмулятора будущей платформы используется кросс-компилятор, чтобы скомпилировать необходимые инструменты.
- Компиляция машинного кода для эмуляторов для уже устаревших платформ, таких как Commodore 64 или Apple II
- Компиляция машинного кода для эмуляторов для уже устаревших платформ, таких как Commodore 64 или Apple II.
## Канадский крест
Канадский крест-это техника построения кросс-компиляторов для других машин. Система конфигурирования и сборки GNU позволяет собирать программы, которые запускаются на системе, отличной от той, на которой собирались необходимые средства. Иными словами, она поддерживает сборку программ с помощью кросс-компилятора.
Канадский крест - это техника построения кросс-компиляторов для других машин. Система конфигурирования и сборки GNU позволяет собирать программы, которые запускаются на системе, отличной от той, на которой собирались необходимые средства. Иными словами, она поддерживает сборку программ с помощью кросс-компилятора.
**При использовании канадского креста c GCC могут быть четыре вида:**
- Фирменный родной компилятор для машины (1) (например, компилятор из Visual студии) используется для построения собственного компилятора GCC для машины (2).
- Фирменный родной компилятор для машины (1) (например, компилятор из Visual Studio) используется для построения собственного компилятора GCC для машины (2).
- Родной компилятор GCC для машины (2) используется для сборки кросс-компилятора GCC с компьютера А на компьютер Б (3)
- GCC кросс-компилятор с компьютера A на компьютер Б (3) используется для построения компилятора GCC кросс-компилятор из машины в машину C (4)
@ -24,13 +24,13 @@
**Схема**
Конечный результат кросс-компилятор (4) не сможет работать на построение машины А; вместо этого она будет работать на машине B для компиляции приложения в исполняемый код, чтобы потом быть скопированным на машину C и выполненным на компьютере С.
Конечный кросс-компилятор (4) не сможет работать на машине сборки A; вместо этого он будет работать на машине B, чтобы скомпилировать приложение в исполняемый код, который затем будет скопирован на машину C и выполнен на машине C.
Термин канадский крест возник потому, что в то время, когда эти проблемы обсуждались, в Канаде было три национальных политических партии.
Термин «канадский крест» возник потому, что в то время, когда эти проблемы обсуждались, в Канаде было три национальные политические партии.
## Кросс-компиляция с GCC
GCC, бесплатная программа из коллекции компиляторов, может быть настроена для кросс компиляции. Она поддерживает множество платформ и языков.
GCC, коллекция свободно распространяемых компиляторов, может быть настроена для кросс-компиляции. Она поддерживает множество платформ и языков.
Для кросс-компиляции с GCC необходимо, чтобы была доступна скомпилированная для целевой платформы версия binutils. Особенно важно наличие GNU Assembler. Поэтому binutils должны быть предварительно скомпилированы с ключом --target=some-target, указанным скрипту конфигурирования (англ.). GCC также должна быть указана опция --target с аналогичным содержанием. После этого, чтобы GCC могла использовать полученные binutils, надо поместить путь к ним в переменную окружения path, например:
@ -38,4 +38,4 @@ GCC, бесплатная программа из коллекции компи
PATH=/path/to/binutils/bin:${PATH} make
```
Кросс-компиляцией GCC требует, чтобы часть стандартной библиотеки целевой платформы была доступна на хост-платформе. Программист может выбрать для составления полную библиотеку C, но этот выбор может быть ненадежным. Альтернативой является использование файла, который представляет собой небольшую библиотеку C, содержащий только самые необходимые компоненты, необходимые для компиляции C в исходный код.
Кросс-компиляция GCC требует, чтобы часть стандартной библиотеки целевой платформы была доступна на хост-платформе. Программист может решить скомпилировать полную библиотеку C, но этот выбор может быть ненадежным. Альтернативой является использование файла, который представляет собой небольшую библиотеку C, содержащий только самые важные компоненты, необходимые для компиляции исходного кода C.

View File

@ -1,14 +1,14 @@
# Решение ошибок сборки
При сборке пакетов иногда происходят ошибки.
В данном разделе будет описано решение наиболее распространенных ошибок.
В данном разделе будет описано решение наиболее распространённых ошибок.
## Стадии, на которых может произойти ошибка
Ошибка может произойти на любой стадии, однако чаще всего это случается после ввода make.
При этом в первую очередь определите действие, которое завершилось ошибкой - сделать это можно, просмотрев команду, завершившуюся с ошибкой.
В частности, если команда дается компилятору (cc, gcc или clang) то произошла ошибка компиляции, обычно наиболее трудны в своем решении.
Если команда дается ld, то ошибка произошла при линковке.
В частности, если команда даётся компилятору (cc, gcc или clang), то произошла ошибка компиляции. Эти ошибки, обычно, наиболее трудны в решении.
Если команда даётся ld, то ошибка произошла при линковке.
Также ошибка может произойти, например, при построении документации. В этом случае самым простым вариантом будет отключение выполнения этого шага.
## Общие принципы решения ошибок
@ -17,12 +17,12 @@
Если ошибка не исчезла, то прочитайте лог (хотя бы последние 30 строк).
Практически всегда там будет сказано о том, что за ошибка произошла.
Попробуйте поискать в интернете по частям лога, возможно решение этой ошибки уже было где либо описано.
Попробуйте поискать в интернете по частям лога, возможно, решение этой ошибки уже было где-либо описано.
## Ошибки компиляции
Ошибки компиляции - наиболее сложные в своем решении.
gcc всегда сообщает строку в которой произошла ошибка - проверьте её.
Ошибки компиляции - наиболее сложные в своём решении.
gcc всегда сообщает строку, в которой произошла ошибка - проверьте её.
### Не найден заголовок
@ -45,16 +45,16 @@ compilation terminated.
## Ошибки линковки
В процессе линковки несколько объектных файлов соединяются в один и к ним подключаются библиотеки.
В процессе линковки несколько объектных файлов соединяются в один, и к ним подключаются библиотеки.
### undefined referance to ...
### undefined reference to ...
Данная ошибка вызвана тем что необходимая библиотека не была подключена.
Данная ошибка вызвана тем, что необходимая библиотека не была подключена.
#### Решение
Попытайтесь определить, исходя из лога, какая библиотека была не подключена. Далее добавьте в переменную `CFLAGS` параметр -lsomelib (не надо указывать название файла библиотеки), например `-lcurses`
Попытайтесь определить, исходя из лога, какая библиотека не была подключена. Далее добавьте в переменную `CFLAGS` параметр -lsomelib (не надо указывать название файла библиотеки), например, `-lcurses`.
## Ошибки configure
Обычно они происходят из за отсутствия зависимостей или их неработоспособности.
Обычно они происходят из-за отсутствия зависимостей или их неработоспособности.

View File

@ -1,6 +1,6 @@
# Типы и разделов и каталогов
В этой статье объясняется, как различные термины, используемые в структуре Linux, можно описать логически. Хотя эти термины могут накладываться друг на друга, иногда означают две разные вещи одновременно.
В этой статье объясняется, как различные термины, используемые в структуре Linux, можно описать логически. Хотя эти термины могут накладываться друг на друга, они иногда означают две разные вещи одновременно.
_В данной статье уточняются только некоторые термины и определения, чтобы вы могли лучше понимать процесс установки и использования этой операционной системы._
@ -23,12 +23,13 @@ _В данной статье уточняются только некоторы
| XFS | Linux/Irix 64-разрядная версия, которая в основном поддерживается в Red Hat. |
| ReiserFS | Это был файловый формат, который использовался в нескольких дистрибутивах, но практически полностью был заменен системой Ext3. |
| Btrfs | Это файловая система для Linux, основанная на структурах B-деревьев и работающая по принципу «копирование при записи». Опубликована корпорацией Oracle в 2007 году. |
| F2FS | Файловая система, предназначенная для флэш-памяти на основе NAND. Её часто ремомендуют владельцам SSD, т. к. она способна продлить срок его службы. |
## Типы файлов
### Обычные файлы
Они содержат данные, например текстовые файлы, исполняемые файлы или файлы входа/выхода из программ и т. д.
Они содержат данные, например, текстовые файлы, исполняемые файлы или файлы входа/выхода из программ и т. д.
### Каталоги
@ -36,7 +37,7 @@ _В данной статье уточняются только некоторы
### Специальные файлы
Это механизм, используемый для ввода и вывода данных. Большинство специальных файлов находятся в каталоге /dev.
Это механизм, используемый для ввода и вывода данных. Большинство специальных файлов находится в каталоге /dev.
### Ссылки
@ -44,7 +45,7 @@ _В данной статье уточняются только некоторы
### Сокеты домена
Это особый тип файла, который аналогичен сокетам TCP/IP в Windows. Эти файлы обеспечивают создание межпроцессных сетевых подключений, защищенных средствами управления доступом к файловой системе.
Это особый тип файла, который аналогичен сокетам TCP/IP в Windows. Эти файлы обеспечивают создание межпроцессных сетевых подключений, защищённых средствами управления доступом к файловой системе.
### Именованные каналы
@ -60,7 +61,7 @@ _В данной статье уточняются только некоторы
Разделы создаются с помощью утилит `fdisk`, `gdisk` или `cfdisk`, которые используются для создания и редактирования таблиц разделов, расположенных на каждом диске. Таблица разделов определяет, как именно разбито пространство на целом диске.
Первый раздел всегда будет установочным разделом основного. Этот раздел иногда называется корневым разделом или отображается как `/`. В зависимости от того, как вы хотите использовать и настроить установку, будут созданы несколько других разделов. Корневой раздел будет самым важным. Хотя вы можете создавать эти разделы и задавать им размер, формат файлов и назначение, чтобы они работали их обычно необходимо смонтировать на `/` этого раздела.
Первый раздел всегда будет установочным разделом основного. Этот раздел иногда называется корневым разделом или отображается как `/`. В зависимости от того, как вы хотите использовать и настроить установку, будут созданы несколько других разделов. Корневой раздел будет самым важным. Хотя вы можете создавать эти разделы и задавать им размер, формат файлов и назначение, чтобы они работали, их обычно необходимо смонтировать на `/` этого раздела.
### Категории разделов
@ -76,29 +77,29 @@ _В данной статье уточняются только некоторы
### Типы разделов
Существует несколько общих разделов, которые будут перечислены ниже с описанием каждого из них. Опытные пользователи используют сочетание некоторых из этих разделов в качестве схемы, когда они собираются выполнять пользовательскую установку для определенного набора применений.
Существует несколько общих разделов, которые будут перечислены ниже с описанием каждого из них. Опытные пользователи используют сочетание некоторых из этих разделов в качестве схемы, когда они собираются выполнять пользовательскую установку для определённого набора применений.
Эти разделы упрощают работу и делают ее более эффективной. Здесь также будет представлена комбинация разделов, необходимая для самой распространенной установки..
Эти разделы упрощают работу и делают ее более эффективной. Здесь также будет представлена комбинация разделов, необходимая для самой распространенной установки.
| Названме | Описание |
| -------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| `/` | Расположенная отдельно косая черта / служит для обозначения корня дерева файловой системы. |
| `/boot` | Содержит все файлы, необходимые для процесса загрузки. |
| `/bin` | Содержит двоичные файлы и основные утилиты, необходимые всем пользователям. |
| `/dev` | Предназначен для устройств, которые содержат файлы для периферийных устройств и псевдоустройств. |
| `/etc` | Содержит файлы конфигурации системы и системные базы данных. Название директории произошло от слова _et cetera_ (лат. _и так далее_) |
| `/home ` | Здесь содержатся все "домашние" каталоги пользователей, в которых содержатся пользовательские файлы. |
| `/lib` | Содержит системные библиотеки и файлы, такие как модули ядра и драйверы устройств. |
| `/lib64` | Содержит системные библиотеки и файлы, такие как модули ядра и драйверы устройств для 64-разрядных систем. |
| `/media` | Это точка подключения, используемая по умолчанию для таких съемных устройств, как USB-накопители и медиаплееры. |
| `/mnt` | Содержит точки подключения файловой системы. Используется для нескольких жестких дисков, нескольких разделов, сетевых файловых систем, компакт-дисков и т.д. Название директории произошло от слова _mount_ |
| `/opt` | Содержит дополнительное программное обеспечение. Также используется для установки более крупных программ вместо /usr. |
| `/proc ` | Содержит виртуальные файловые системы, описывающие информацию о процессах в виде файлов. |
| `/sbin ` | Содержит основные утилиты, необходимые для запуска, обслуживания и восстановления системы. Название директории произошло от слов _System Binaries_ |
| `/root ` | Это исходное местоположение для корня системного администратора. Этот корневой каталог учетных записей обычно является корнем первого раздела. |
| `/srv ` | Содержит данные сервера, которые являются данными системных служб. |
| `/sys ` | Содержит виртуальную файловую систему sysfs, в которой хранится информация об операционной системе оборудования. |
| `/tmp ` | Это место для временных файлов. tmpfs, смонтированные на нем или сценарии при запуске обычно удаляют эти файлы при загрузке. |
| `/usr ` | Содержит исполняемые файлы и общие ресурсы, которые не являются критическими для системы. |
| `/var ` | Является местом для файлов, которые находятся в изменяемом состоянии. Например, файлы с изменяющимся размером. Название директории произошло от слова _variable (переменная)_ |
| `/swap ` | Раздел или файл подкачки, позволяющий расширить системную память, выделив часть свободного пространства жесткого диска. Подробнее о подкачке читать [здесь](https://lx4u.ru/dev/#/additional/swap) |
| Названме | Описание |
| -------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| `/` | Расположенная отдельно косая черта / служит для обозначения корня дерева файловой системы. |
| `/boot` | Содержит все файлы, необходимые для процесса загрузки. |
| `/bin` | Содержит двоичные файлы и основные утилиты, необходимые всем пользователям. |
| `/dev` | Предназначен для устройств, которые содержат файлы для периферийных устройств и псевдоустройств. |
| `/etc` | Содержит файлы конфигурации системы и системные базы данных. Название директории произошло от слова _et cetera_ (лат. _и так далее_). |
| `/home` | Здесь содержатся все "домашние" каталоги пользователей, в которых содержатся пользовательские файлы. |
| `/lib` | Содержит системные библиотеки и файлы, такие как модули ядра и драйверы устройств. |
| `/lib64` | Содержит системные библиотеки и файлы, такие как модули ядра и драйверы устройств для 64-разрядных систем. |
| `/media` | Это точка подключения, используемая по умолчанию для таких съемных устройств, как USB-накопители и медиаплееры. |
| `/mnt` | Содержит точки подключения файловой системы. Используется для нескольких жестких дисков, нескольких разделов, сетевых файловых систем, компакт-дисков и т.д. Название директории произошло от слова _mount_. |
| `/opt` | Содержит дополнительное программное обеспечение. Также используется для установки более крупных программ вместо /usr. |
| `/proc` | Содержит виртуальные файловые системы, описывающие информацию о процессах в виде файлов. |
| `/sbin` | Содержит основные утилиты, необходимые для запуска, обслуживания и восстановления системы. Название директории произошло от _System Binaries_. |
| `/root` | Это исходное местоположение для корня системного администратора. Этот корневой каталог учетных записей обычно является корнем первого раздела. |
| `/srv` | Содержит данные сервера, которые являются данными системных служб. |
| `/sys` | Содержит виртуальную файловую систему sysfs, в которой хранится информация об операционной системе оборудования. |
| `/tmp` | Это место для временных файлов. tmpfs, смонтированные на нем, или сценарии при запуске обычно удаляют эти файлы при загрузке. |
| `/usr` | Содержит исполняемые файлы и общие ресурсы, которые не являются критическими для системы. |
| `/var` | Является местом для файлов, которые находятся в изменяемом состоянии. Например, файлы с изменяющимся размером. Название директории произошло от слова _variable (переменная)_. |
| `/swap` | Раздел или файл подкачки, позволяющий расширить системную память, выделив часть свободного пространства жесткого диска. Подробнее о подкачке читать [здесь](https://lx4u.ru/dev/#/additional/swap). |

View File

@ -24,7 +24,7 @@ python $FILE
Поэтому, лучшим решением будет вставка определёной строки с указанием нужного интерпретатора. Эта строка называется _sha-bang_ (_шебанг_). И потом сделать скрипт исполняемым.
Например, если Bash-скрипт, то шебанг будет выглядеть так:
Например, для Bash-скриптов шебанг выглядит так:
```bash
#!/bin/bash
@ -38,7 +38,7 @@ python $FILE
`env` - UNIX-утилита, позволяющая модифицировать список переменных окружения перед исполнением пользовательской команды с изменением окружения.
Но так же эту команду используют и для улучшения переносимости скриптов, так как в разных дистрибутивах нужные интерпретаторы могут находиться в разных местах, а вот путь к `env` одинаковый везде.
Но также эту команду используют и для улучшения переносимости скриптов, так как в разных дистрибутивах нужные интерпретаторы могут находиться в разных местах, а вот путь к `env` одинаковый везде.
Например, в одних дистрибутивах путь к bash `/bin/bash`, а в других: `/usr/bin/bash`. И при компиляции этого интерпретатора он ставится именно в `/usr`, а уже позже его можно перенести в `/bin` (что и реализовано в этом руководстве, поэтому в вашем дистрибутиве путь классический: `/bin/bash`).

View File

@ -10,17 +10,17 @@ Linux-системы неразрывно связаны с концепцией
**Порядок сборки выглядит так:**
- Распаковка архива, содержащего файлы исходного кода (обычно именно так «исходники» и распространяются).
- Распаковка архива, содержащего файлы исходного кода (обычно именно так «исходники» и распространяются);
- Переход в директорию с распакованными исходными текстами.
- Переход в директорию с распакованными исходными текстами;
- Подготовка (конфигурирование) предстоящей сборки (указание директорий установки, сторонних библиотек, архитектуры, дополнительных компонентов и т.д.). Для этого обычно используются служебные скрипты.
- Подготовка (конфигурирование) предстоящей сборки (указание директорий установки, сторонних библиотек, архитектуры, дополнительных компонентов и т.д.). Для этого обычно используются служебные скрипты;
- Непосредственно, сама сборка — команда make.
- Непосредственно, сама сборка — команда make;
- Установка (распространение) построенного ПО — команда make install.
Ниже будет приведена эта процедура на примере пакета Zlib,
Ниже будет приведена эта процедура на примере пакета Zlib.
Скачаем архив пакета:
@ -28,19 +28,19 @@ Linux-системы неразрывно связаны с концепцией
wget https://zlib.net/zlib-1.2.11.tar.xz
```
Распаковка архива:
Распакуем архив:
```bash
tar -xvf zlib-1.2.11.tar.xz
```
В результате в текущем каталоге появится еще один каталог, с распакованным пакетом. Перейдём в него
В результате в текущем каталоге появится еще один каталог, с распакованным пакетом. Перейдём в него:
```bash
cd zlib-1.2.11
```
Для успешной сборки и работы пакета необходимо проверить существующую конфигурацию системы на наличие требуемых зависимостей, библиотек и настроек, а также сконфигурировать сборку, запустив соответствующий скрипт configure.
Для успешной сборки и работы пакета необходимо проверить существующую конфигурацию системы на наличие требуемых зависимостей, библиотек и настроек, а также сконфигурировать сборку, запустив соответствующий скрипт configure:
```bash
./configure
@ -48,7 +48,7 @@ cd zlib-1.2.11
Подобные скрипты создаются разработчиками для облегчения процесса сборки/установки.
Вывод этого скрипта показывает , готов ли данный пакет к сборке:
Вывод этого скрипта показывает, готов ли данный пакет к сборке:
```bash
Checking for gcc...
@ -136,7 +136,7 @@ gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -o minigzip64 minigzip64.o -L. lib
make install
```
или при наличии - воспользоваться командой sudo (от обычного пользователя)
или при наличии - воспользоваться командой sudo (от обычного пользователя):
```bash
sudo make install

View File

@ -20,11 +20,11 @@ free -m
## Рассчёт размера подкачки (swap)
Обычно объём подкачки равен половине объёма ОЗУ/объёму ОЗУ умноженного на 2, но не всегда этого может хватить, особенно на слабых ПК. Поэтому рассчитайте размер файла или раздела так, чтобы обеспечить минимум 4 Гб в общей сложности (ОЗУ+Swap). Для сборки базовой системы этого хватит, а для сборки таких программ, как, например, Pale Moon, этого не хватит - нужно мощное железо. Не проще ли, в таком случае, не компилировать такое "тяжёлое" ПО, а найти бинарные пакеты?
Обычно объём подкачки равен половине объёма ОЗУ/объёму ОЗУ, умноженному на 2, но не всегда этого может хватить, особенно на слабых ПК. Поэтому рассчитайте размер файла или раздела так, чтобы обеспечить минимум 4 Гб в общей сложности (ОЗУ+Swap). Для сборки базовой системы этого хватит, а для сборки таких программ, как, например, Pale Moon, этого не хватит - нужно мощное железо. Не проще ли, в таком случае, не компилировать такое "тяжёлое" ПО, а найти бинарные пакеты?
## Создание файла подкачки
Чтобы создать файл подкачки, выполнить:
Чтобы создать файл подкачки, выполните:
```bash
sudo fallocate -l 1G /swapfile &&
@ -35,15 +35,15 @@ sudo swapon /swapfile
**Значения новых команд**
- **`sudo fallocate -l 1G /swapfile`** - создать файл `/swapfile`, размером 1 Гб. Чтобы выбрать другой размер, заменить "1G" на нужное значение.
- **`sudo fallocate -l 1G /swapfile`** - создать файл `/swapfile`, размером 1 Гб. Чтобы выбрать другой размер, замените "1G" на желаемое значение.
- **`sudo chmod 600 /swapfile`** - в целях безопасности, выставить нужные права на файл. О правах на файлы читать в интернете.
- **`sudo mkswap /swapfile`** - создать файловую систему _swap_.
- **`sudo swapon /swapfile`** - включение подкачки.
## Настройка vm.swappiness
Теперь настройка свопа. Есть параметр, сообщающий ядру, как часто использовать подкачку. Параметр имеет значения от 0 до 100, чем выше значение, тем чаще будет использоваться swap.
Для того, чтобы проверить, какой параметр используется, выполнить:
Теперь настройка свопа. Есть параметр, сообщающий ядру, как часто использовать подкачку. Параметр имеет значение от 0 до 100. Чем выше значение, тем чаще будет использоваться swap.
Для того, чтобы проверить, какой параметр используется, выполните:
```
cat /proc/sys/vm/swappiness
@ -71,18 +71,20 @@ echo '/swapfile none swap sw 0 0' |sudo tee -a /etc/fstab
echo 'vm.swappiness=X' |sudo tee -a /etc/sysctl.conf
```
Где X - нужное значение.
## Удаление файла подкачки
После сборки и настройки системы, вероятно, swap вам больше не понадобится. Поэтому лучше его удалить. Напоминаю, что все действия из этой инструкции выполняются ТОЛЬКО на хост-системе.
Выполнить:
Выполните:
```
sudo swapoff /swapfile
sudo rm /swapfile
```
И удалить записи в `/etc/fstab` и `/etc/sysctl.conf`.
И удалите записи в `/etc/fstab` и `/etc/sysctl.conf`.
**Объяснение новых команд**
@ -91,13 +93,13 @@ sudo rm /swapfile
### ВАЖНО!!!
!> _Когда полностью отключить подкачку, то ОС будет использовать только ОЗУ и в случае его нехватки система может просто зависнуть._
!> _Если полностью отключить подкачку, то ОС будет использовать только ОЗУ и в случае его нехватки система может просто зависнуть._
Ну и пару нужных вещей:
- Подкачка нужна для ровного и эффективного высвобождения оперативной памяти и использовать swap в качестве "экстренной памяти" не рекомендуется в принципе.
- Подкачка нужна для ровного и эффективного высвобождения оперативной памяти, и использовать swap в качестве "экстренной памяти" не рекомендуется в принципе;
- Отключение swap не спасает от проблемы дискового ввода/вывода при конкуренции за память - дисковый I/O перемещается с анонимных страниц на файловые, что не только может быть менее эффективным, поскольку остаётся меньший пул страниц, доступных для высвобождения, но и само по себе может способствовать появлению этой высокой конкуренции.
Так же, вместо swap можно использовать zram/zswap.
Также вместо swap можно использовать zram/zswap.
Больше о подкачке смотреть [здесь](https://habr.com/ru/company/flant/blog/348324/).

View File

@ -1,18 +1,18 @@
# Настройка zram
Если оперативной памяти вашего компьютера недостаточно (3 Гб и меньше), то наиболее быстрым способом решения проблемы является использование подкачки, так как компиляция некоторых пакетов требует мощного ПК, в том числе, большого объёма ОЗУ. Для этих целей можно использовать файл или раздел, но можно и zram.
Если оперативной памяти вашего компьютера недостаточно (3 Гб и меньше), то наиболее быстрым способом решения проблемы является использование подкачки, так как компиляция некоторых пакетов требует мощного ПК, в том числе, большого объёма ОЗУ. Для этих целей можно использовать файл или раздел подкачки, но можно и zram.
ействия производятся на хост-системе_
Для начала нужно загрузить модуль. В системе его может не оказаться, поэтому можно его скомпилировать. Такие дистрибутивы как Ubuntu и прочие предоставляют пакет `zram-config`, в Fedora и Calculate Linux zram активирован по умолчанию.
Выполнить:
Выполните:
```
modprobe zram num_devices=4
```
В `num_devices` задается количество сжатых блочных устройств, которое будет создано.
В `num_devices` задаётся количество сжатых блочных устройств, которое будет создано.
Для наиболее оптимального использования CPU стоит учесть: сжатие каждого устройства `zram` однопоточное. Потому я создаю их по количеству ядер. У меня четыре ядра, этого хватит.
При настройке модуля задается фиксированный размер НЕ сжатых данных в байтах
@ -34,7 +34,7 @@ Disk /dev/zram0: 1610 MB, 1610612736 bytes, 393216 sectors
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
```
Данные записанные на него будут прозрачно сжаты в памяти. Что делать с ним далее — уже ваш выбор, я на этих устройствах создаю разделы подкачки.
Данные, записанные на него, будут прозрачно сжаты в памяти. Что делать с ним далее — уже ваш выбор, я на этих устройствах создаю разделы подкачки.
```
mkswap /dev/zram0