Noexec linux что это

Обновлено: 02.07.2024

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

Пример файла

Простой пример /etc/fstab , в котором файловые системы заданы по именам файлов устройств:

Формат строки

Каждая строка в файле /etc/fstab содержит следующие поля, разделенные пробелами или символами табуляции:

filesystem

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

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

Тип файловой системы. Поддерживается множество типов: ext2, ext3, ext4, btrfs, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap и auto. При выборе auto команда mount попытается определить реальный тип файловой системы самостоятельно. Это полезно для компакт-дисков (CD/DVD).

options

Параметры монтирования файловой системы. Подробнее смотрите на man странице mount. Обратите внимание, что некоторые параметры относятся к конкретным типам файловых систем.

Используется утилитой dump для определения того, нужно ли создать резервную копию данных в файловой системе. Возможные значения: 0 или 1. Если указано число 1, dump создаст резервную копию. У большинства пользователей утилита dump не установлена, поэтому им следует указывать 0 в этом поле.

Используется программой fsck для определения того, нужно ли проверять целостность файловой системы. Возможные значения: 0, 1 или 2. Значение 1 следует указывать только для корневой файловой системы (с точкой монтирования /); для остальных ФС, которые вы хотите проверять, используйте значение 2, которое имеет менее высокий приоритет.Обратите внимание, что в случае btrfs следует всегда указывать 0, даже если эта файловая система используется в качестве корневой. Файловые системы, для которых в поле указано значение 0, не будут проверяться fsck.

Определение файловой системы

Конкретное место расположения файловой системы может быть определено различными способами. В файле /etc/fstab можно указать имя файла устройства, его метку или UUID (в том числе GPT-метку и GPT-UUID для дисков GPT). Определение по UUID является наиболее предпочтительным способом. Далее приведены примеры определений файловых систем с использованием каждого из способов. Вывод lsblk -f and blkid для этих примеров вы можете найти на странице Persistent block device naming.

По именам устройств

Запустите lsblk -f , чтобы отобразить список разделов. Укажите имена устройств с префиксом /dev/ :

По меткам

Запустите lsblk -f , чтобы отобразить список разделов. Укажите метки из столбца LABEL с префиксом LABEL= :

По UUID

Запустите lsblk -f, чтобы отобразить список разделов. Укажите идентификаторы из столбца UUID с префиксом UUID= :

Совет: Если вы хотите отобразить только UUID конкретного раздела, используйте команду lsblk -no UUID /dev/sda2.

По меткам GPT

Запустите blkid чтобы отобразить список разделов. Укажите значения PARTLABEL без кавычек:

По UUID GPT

Запустите blkid чтобы отобразить список разделов. Укажите значения PARTUUID без кавычек:

Дополнительная информация

Автоматическое монтирование с systemd

Если у вас большой раздел /home, вы можете разрешить службам, которые не обращаются к /home, запускаться в то время, как /home проверяется программой fsck. Для этого добавьте следующие параметры монтирования в запись /etc/fstab для точки монтирования /home:

При этом процедура проверки и монтирования /home будет запущена только при первой попытке доступа, и ядро будет держать в ожидании все создаваемые потоки ввода-вывода в /home, пока раздел не будет смонтирован.

Обратите внимание: Ускорение при автоматическом монтировании /home может составлять не более секунды-двух, в зависимости от конфигурации вашей системы. При этом разделу /home будет присвоен тип файловой системы autofs, который по умолчанию игнорируется mlocate. Используйте эту возможность с осторожностью.

Обратите внимание: Если вы намереваетесь использовать флаг exec при автоматическом монтировании, вам следует удалить флаг user, чтобы монтирование производилось корректно.

Если у вас имеются зашифрованные файловые системы, вы можете также добавить параметр noauto в соответствующие записи в /etc/crypttab . Тогда systemd не будет пытаться открыть зашифрованное устройство во время загрузки системы, а сделает это при первой попытке доступа к файловой системе на этом устройстве, применив указанный файл ключа и затем автоматически смонтировав ФС. Это может дать выигрыш в несколько секунд при загрузке системы, например, если у вас зашифрованный RAID массив: systemd не придется ожидать готовности устройства.

Пробелы в значениях полей

Так как пробельные символы используются в fstab для разделения полей, их нельзя напрямую использовать в значениях полей. Любые пробелы в полях (например, значения PARTLABEL, LABEL или точки монтирования) должны быть заменены специальными управляющими последовательностями, которые состоят из обратной косой черты (\) и трех восьмеричных цифр (например, для пробела это \040):

Внешние устройства

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

Параметры atime

Если файловая система смонтирована с параметром atime, то, когда происходит обращение к файлу, в его поле atime записывается текущее время (иными словами, время доступа). Это может быть полезно, когда Linux используется на сервере; на персональном компьютере эта функция обычно не нужна. Недостаток этой функции в том, что даже при чтении файла из кэша (в оперативной памяти) все равно производится медленная операция записи на диск. Использование параметров монтирования noatime, nodiratime или relatime может улучшить производительность доступа к данным, а также уменьшить износ твердотельных (SSD) накопителей. Параметр noatime полностью отключает запись времени доступа к файлу. Большинство программ не используют это поле. Но бывают и редкие исключения — например, Mutt полагается на его значение. Для mutt вы можете использовать параметр relatime. Параметр nodiratime отключает обновление времени доступа только для каталогов; для остальных файлов время atime будет обновляться всегда.

Обратите внимание: Действие noatime перекрывает собой nodiratime. Нет необходимости указывать оба параметра.

Параметр relatime включает обновление поля только когда содержимое файла перезаписывается (в отличие от noatime, при котором поле atime вообще не обновляется, и может становиться раньше времени изменения mtime). Использование этого параметра наиболее предпочтительно, так как программы вроде Mutt будут работать корректно, и при этом вы все равно получите достаточное улучшение производительности: при операциях чтения (как правило, гораздо более частых, чем записи) не будет производиться запись времени на диск. По умолчанию файловые системы монтируются с этим параметром

Запись в FAT32 с правами обычного пользователя

Чтобы иметь возможность записи в разделе FAT32, вам следует указать правильные параметры монтирования в вашем файле /etc/fstab.

Перемонтирование корневого раздела

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

Команда sudo играет очень важное значение для управления правами доступа в операционной системе Linux. Благодаря этой небольшой команде вы можете давать полномочия на выполнение тех или иных действий от имени администратора другим пользователям, при этом не давая им сам пароль суперпользователя. Также вам не нужно сидеть всегда под учетной записью суперпользователя чтобы иногда выполнять административные действия.

Казалось бы, такая небольшая команда, с минимумом возможностей и максимально простым использованием, но на самом деле она может намного больше. В этой статье мы рассмотрим как выполняется настройка sudo в linux для контроля доступа к функциям системы и возможностей пользователя.

Как работает sudo?

Перед тем, как переходить к настройке доступа к утилите sudo давайте рассмотрим как она работает. В Linux есть два способа получить права администратора. Вы можете переключиться на пользователя root с помощью команды su или можете передать в параметре нужную команду утилите sudo, которая выполнит ее с правами администратора. Причем второй способ предпочтительнее, потому что вы не забудете что используете права root и не наделаете ничего лишнего.

Имя команды означает substitute user do или super user do. Утилита позволяет запускать программы от имени другого пользователя, но чаще всего от имени корневого. Утилита была разработана еще в 1980 году Бобом Когшелом и Клиффом Спенсером. За это время сменилось много разработчиков и было добавлено много функций.

Работает sudo благодаря флагу доступа SUID. Если этот флаг установлен для программы, то она выполняется не от имени того пользователя который ее запустил, а от имени владельца, учитывая что файл sudo принадлежит, то утилита выполняется от имени root. Затем она читает свои настройки, запрашивает пароль пользователя и решает можно ли ему разрешать выполнение команд от имени администратора. Если да, то выполняется переданная в параметре команда.

Теперь, когда вы знаете теорию, давайте рассмотрим как настроить sudo в Linux.

Настройка sudo в Linux

Все настройки sudo находятся в файле /etc/sudoers. Здесь можно настроить очень много параметров, начиная от кому будет позволено выполнять команды от имени суперпользователя и заканчивая ограничением набора доступных команд.

Чтобы открыть файл для редактирования наберите такую команду от имени суперпользователя:

Вы также можете указать текстовый редактор, в котором вы хотите редактировать файл настройки:

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

тип имя_алиаса = элемент1, элемент2, элемент3

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

Описание разрешений для пользователей имеет немного другой синтаксис:

пользователь хост = (другой_пользователь:группа) команды

Пользователь указывает пользователя или группу, для которых мы создаем правило, хост - компьютер, для которого будет действовать это правило. Другой пользователь - под видом какого пользователя первый может выполнять команды, и последнее - разрешенные команды. Вместо любого из параметров может использоваться алиас. А теперь настройка sudo в Debian и других дистрибутивах.

Основные параметры

Алиас Defaults позволяет задать стандартные параметры для работы утилиты, их мы и рассмотрим в этом разделе. Начинается такой алиас со слова Defaults, дальше идет имя флага. Если перед именем есть символ !, это значит, что флаг нужно включить, в обратном случае выключить:

Отключаем введение при первом использовании:

sudo

Суперпользователь не может выполнять sudo:

sudo1

Теперь если вы попытаетесь выполнить sudo sudo ничего не сработает:

sudo2

Изменять домашнюю директорию для целевого пользователя, по умолчанию остается папка текущего пользователя в качестве домашней директории:

sudo3

Сохранять список групп текущего пользователя:

sudo4

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

sudo5

sudo6

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

Задать количество попыток ввода пароля перед тем, как sudo прекратит работу, по умолчанию - 3:

sudo7

sudo8

Количество минут, которое пройдет перед тем, как sudo будет спрашивать пароль снова, по умолчанию 5. Если установить значение в 0, то пароль будет спрашиваться всегда, независимо от того как давно вы использовали утилиту:

sudo9

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

sudo9

Defaults passprompt="Ваш пароль:"

sudo12

Можно указать другого пользователя, не root, от которого будут выполняться все команды, для этого используйте:

Вы можете записывать в лог все попытки подключения к sudo:

sudo10

Затем пробуем проверить работу лога:

sudo cat /var/log/sudo

sudo11

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

Настройка пользователей sudo

Мы уже рассматривали выше синтаксис настройки действий для пользователей, здесь все сложнее чем с псевдонимами, но разобраться можно. Например, разрешим любому пользователю использовать sudo, от любого хоста и выполнять любые команды:

ALL ALL = (ALL) ALL

sudo13

Такая команда очень небезопасна, она разрешает всем и все. Первое ALL - разрешить всем пользователям, второе ALL - для всех хостов, третье ALL - разрешить вход под любым пользователем и четвертое - разрешить выполнять любою команду. Но куда более часто используется другая конструкция:

%wheel ALL = (ALL) ALL

sudo14

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

%wheel ALL = (root) ALL

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

%wheel ALL = (root:admins) ALL

sudo15

Это значит что можно выполнить команду от имени root или другого пользователя из группы admins. Еще мы можем указать команды, которые может выполнять пользователь. Например:

%wheel ALL = (root) /bin/mount, /bin/umount

sudo17

Пользователь может выполнять только команды mount и umount от имени суперпользователя. Теперь сделаем еще интереснее, пользователь может выполнять mount и umount без пароля, а все остальные команды с паролем:

%wheel ALL = (root) ALL
%wheel ALL = (root) NOPASSWD: /bin/mount, /bin/umount

Также можно ограничивать пользователям по хостах, например, разрешаем использование sudo только из host1:

%wheel host1 = (root) ALL

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

  • User_Alias - псевдоним пользователей, которые будут использовать sudo;
  • Runas_Alias - псевдоним пользователей, от имени которых будут выполняться команды;
  • Host_Alias - псевдоним хоста;
  • Cmnd_Alias - псевдоним команд;

Например, создадим четыре псевдонима и применим их в нашем правиле:

User_Alias Users = user1,user2,user3
Runas_Alias Admins = root,admin
Host_Alias Hosts = host1,host2
Cmd_Alias Cmds = /bin/mount,/bin/umount

Далее применяем все это в правиле:

Users Hosts = (Admins) Cmds

Это значит, что пользователи из списка Users смогут выполнять команды Cmds от имени пользователей Amdins на хостах Hosts.

Еще осталось сказать несколько слов о флагах. Флаг NOPASSWD говорит, что не нужно запрашивать пароль при выполнении этого правила. Например, разрешить всем пользователям выполнять команду mount с sudo без пароля:

ALL ALL = (root) NOPASSWD: /bin/mount

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

ALL ALL = (root) NOEXEC /bin/mount

Вы можете проверить правильно ли была проведена настройка файла /etc/sudoers и посмотреть все созданные правила с помощью команды:

sudo18

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

Выводы

В этой статье мы рассмотрели как выполняется настройка sudo в linux. Как видите, несмотря на то, что это очень простая утилита, она скрывает очень много полезных настроек, которые можно использовать в своей системе. Если у вас остались вопросы, спрашивайте в комментариях!

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

Открыть файл fstab для редактирования, например в текстовом редакторе gedit, вы можете набрав команду в терминале: Предварительно рекомендуется создать резервную копию:

Пример файла fstab

Пример файла fstab c примонтированными Windows-дисками sda3 (С:) и sda4 (D:):

Строки файла содержат следующие поля:

Что монтируем — некоторое блочное устройство, которое должно быть примонтировано Куда монтируем — точка монтирования - путь в корневой файловой системе к каталогу в который будет смонтировано устройство Тип файловой системы монтируемого раздела Индикатор необходимости делать резервную копию (как правило не используется и равно 0) Порядок проверки раздела (0- не проверять, 1 - устанавливается для корня, 2 - для остальных разделов).

Блочное устройство

То, что нужно смонтировать. Это может быть файл-образ, раздел диска или диск целиком. С файлами-образами всё вполне очевидно — нужно указать путь к файлу. С дисками и их разделами интереснее. Они числятся в системе как, например, /dev/sda (диск целиком) или /dev/hdc1 (раздел диска), но монтировать разделы встроенного диска стоит по UUID. Это позволит правильно монтировать разделы даже если они поменяют свой порядок, например, при добавлении новых разделов или подключении новых дисков. Например, добавление раздела перед /dev/sda6 может превратить его в /dev/sda7. А добавление нового диска может превратить /dev/sdb в /dev/sdc, соответственно раздел /dev/sdb1 станет /dev/sdc1. Но во всех приведенных примерах UUID раздела не изменится.

Узнать UUID раздела можно из вывода команды

Кроме UUID монтировать можно еще и по другим адресам устройств, вот они:

Эти адреса являются ссылками на те же /dev/sd*.

Для флешки (если вы хотите прописать ее монтирование в fstab, а не пользоваться автоматическим монтированием) удобнее использовать адрес из by-id (название), для iSCSI-тома — by-path (используется сетевой адрес и название «цели»).

Точка монтирования

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

Файловая система

Обычно что-то из следующего:

Примеры монтирования разделов рассмотрены в соответствующей статье

Опции файловых систем

(указываются через запятую, без пробелов) :

ОпцииОписание
Общие Могут применяться к любой файловой системе (но не все файловые системы на самом деле поддерживают их) - например, опция sync сегодня имеет силу только для ext2, ext3, fat, vfat и ufs
sync / asyncВсе операции ввода / вывода файловой системы должны выполняться синхронно/асинхронно.
atimeПроизводить запись времени последнего доступа к файлу. Значение по умолчанию.
noatimeНе обновлять время доступа к файлу (например, для быстрого доступа к новостным потокам, для ускорения серверов новостей).
relatimeОбновлять время доступа только при изменении файла или изменении времени доступа. (В отличие от noatime, необходимая опция для нормальной работы, например, почтовых клиентов или других приложений, которым необходимо точное время последнего изменения файлов)
norelatimeНе включать функцию relatime (например, для систем, в которых эта функция включена по умолчанию, для более подробной информации см. параметры монтирования в /proc/mounts).
strictatimeОбновление времени доступа к структуре данных при изменении файлов. Отключает noatime и relatime.
nostrictatimeОбновлять время доступа к структуре данных, в соответствии с настройками ядра по умолчанию.
auto / noauto При auto устройство будет устанавливаться автоматически при загрузке, или по команде mount. auto является вариантом по умолчанию. Если вы не хотите, чтобы устройство устанавливалось автоматически, используйте параметр noauto.
context=
fscontext=
defcontext=
rootcontext=
Эти опции полезны при монтировании файловой систем, которые не поддерживают дополнительные атрибуты, такие как дискеты или жесткие диски отформатирован в VFAT, или файловые системы, которые обычно не работает под SELinux (например ext3 диск отформатированный на не-SELinux рабочей станции). Вы можете также использовать *context= для файловых систем которым вы не доверяете, например на дискетах или флешках. Более подробно о контексте можно узнать прочитав о SELinux.
defaultsИспользовать настройки по умолчанию. Эквивалентно: rw,suid,dev,exec,auto,nouser,async.
dev / nodevИнтерпретировать/не интерпретировать блок специальных устройств на файловой системе.
diratime / nodiratimeОбновлять/не обновлять время доступа к каталогу структуры данных. По умолчанию установлено diratime
dirsyncИзменения каталогов в файловой системе выполняются синхронно. Это относится к следующим системным командам: creat, link, unlink, symlink, mkdir, rmdir, mknod и rename.
exec / noexecexec позволяет выполнять двоичные файлы, которые находятся на этом раздел, в то время как noexec не позволяет этого делать. noexec может быть полезно для раздела, который не содержит бинарные файлы например /var, или содержит бинарные файлы которые вы не хотите выполнять на вашей системе, или которые не могут быть выполнены в вашей системе. Последнее может быть в случае Windows раздела.
groupРазрешает обычным (т.е. не root) пользователям монтировать файловую систему, если одна из его групп совпадает с группой устройства. Эта опция подразумевает наличие опций nosuid и nodev (за исключением случаев, когда пересекается с последующими опциями, такими как group,dev,suid).
encryptionОпределяет используемый алгоритм шифрования. Используется в сочетании с опцией loop.
keybitsОпределяет размер ключа для используемого алгоритма шифрования. Используется в сочетании с loop и encryption.
nofailВ случае отсутствия устройства не сообщать об ошибке.
iversionНомер версии структуры данных увеличивается каждый раз, когда структура данных изменяется.
noiversionНомер версии структуры данных не увеличивается при изменении структуры данных.
mandРазрешает принудительное блокирование файловой системы.
nomandНе разрешает принудительное блокирование файловой системы.
_netdevИспользуется для предотвращения попыток смонтировать файловые системы, подключённые к сети.
suid / nosuidРазрешает использование битовых идентификаторов пользователей или групп / Запрещает использование битовых идентификаторов пользователей или групп. (Это достаточно небезопасно, особенно, если установлен suidperl).
ownerРазрешает обычному (т.е. не root) пользователю монтировать файловую систему, если он является владельцем устройства. Эта опция подразумевает параметры nosuid и nodev (за исключением случаев, когда пересекается с последующими опциями, такими как owner, suid и dev).
roМонтировать только для чтения.
rwМонтирование файловой системы для чтения и записи.
user / nouseruser - разрешает монтирование от лица обычного пользователя, по умолчанию это имеет право сделать только root. nouser — соответсвенно запрещает (является параметром по умолчанию).
usersРазрешает монтирование от лица любого пользователя. Эта опция подразумевает параметры nosuid, noexec и nodev (за исключением случаев, когда пересекается с последующими опциями, такими как users, exec, owner, suid и dev).
Опции для файловой системы Microsoft NTFS
nls=utf8Включение поддержки utf-8. Поддержка «нестандартных» символов (кирилицы) в файловой системе.
codepage=866Включаем поддержку кириллицы в названия файлов папок для MS -DOS/fat32 разделов. Подробнее.

FAT 32

Опции для файловой системы Microsoft FAT
utf8Включение поддержки utf-8. Поддержка «нестандартных» символов (кирилицы) в файловой системе.
codepage=866Включаем поддержку кириллицы в названия файлов папок для MS -DOS/fat32 разделов. Подробнее.

btrfs

Опции для файловой системы btrfs
subvol=subvolume_nameМонтирует корень указанного подраздела subvolume_name, где subvolume_name - путь к нему в корне btrfs.
subvolid=subvolume_IDМонтирует корень указанного подраздела subvolume_ID, где subvolume_ID - идентификатор подраздела.
autodefragДефрагментация на «лету», не применять для SSD
noacl Отключить контроль доступа к файлам (права)
compression
compress=zlibВключение прозрачного сжатия с алгоритмом gzip (медленнее lzo, но лучше сжимает)
compress=lzoВключает алгоритм прозрачного сжатия lzo (быстрее gzip, немного хуже сжимает) Btrfs LZO Compression Performance.
compress=zstd(>5,14)Включает алгоритм прозрачного сжатия zstd (настраиваемый уровень сжатия) wiki о zstd.
compress=noБез компрессии с версии ядра 3.6
compress-force=…Применяется аналогично compress, опция force позволяет выполнять компрессию файлов, которые обычно имеют низкий коэффициент сжатия (таких, как сжатые аудио или видео форматы).
cache
inode_cache (>3,0) Включить кэширование inode. Эта опция может замедлить работу системы при первом запуске.
space_cacheКэширование данных о свободных блоках, чтобы не искать их перед записью
clear_cache(>2.6.37) Очищает весь кеш свободного места, после монтирования. Это безопасная опция, но вызывает пересоздание кеша.
nospace_cache(>3.2) выключает space_cache
другие
skip_balance(>3.3)Пропускает автоматическую балансировку после монтирования или неправильного выключения.
nodatasumНе высчитывать хэш-сумму, для новых файлов. Некоторый мусор и ошибки могут быть не замечены, но позволяет ускорить работу с FS. На большинстве современных CPU не даст ощутимого прироста к производительности.
SSD
ssdВключает некоторые оптимизации для SSD в Btrfs. Минимизируется количество записей, отключается последовательная запись файлов. Эта опция включается автоматически, если вращение диска = 0. Не влечет за собой включения параметров TRIM/discard.
ssd_spreadМонтирование с -o ssd_spread вынуждает драйвер использовать для записи преимущественно не занятые области жёсткого диска, что специально вызывает сильную фрагментацию. Может значительно ускорить недорогие SSD.
recovery and debug
recovery(>3.2)Включает автовосстановление после монтирования, на данный момент сканирует старые списки корней и деревьев, которые можно прочесть. Информация о корнях деревьев сохраняется с версии ядра > 3.2, старые ядра не смогут использовать режим восстановления. Практика показала что оно работает, но нужно иметь снимки файловой системы и оно просто вытаскивает списки корней и деревьев из снимков если таковые имеются
degradedИспользуйте это, если у вас есть несколько устройств в объеме Btrfs (одна из RAID конфигураций или несколько дисков в Single или DUP режиме) и одно из них не монтируется. Это позволит вам по-прежнему монтировать файловую систему, даже если неисправное устройство выдаёт ошибки.
enospc_debugИспользуйте, если столкнулись с ошибкой «Не хватает места»

Актуально для выбора алгоритма сжатия (смотрите как соотносятся реализованные в BTRFS zlib/lzo/zstd)

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

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

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

Что такое proc?

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

Только папка proc linux содержит файлы нулевого размера. А также у каждого файла будет текущая дата создания. Например файл /proc/meminfo будет содержать разные данные при каждом открытии, поскольку использование памяти постоянно колеблется.

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

Структура файловой системы proc

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

/proc/buddyinfo

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

Node 0, zone DMA 0 0 0 1 2 0 1 0 1 1 3
Node 0, zone DMA32 421 164 73 49 71 17 53 44 33 7 89
Node 0, zone Normal 387 127 65 39 78 30 29 56 20 9 52

/proc/cgroups

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

/proc/cmdline

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

/proc/config.gz

Для извлечения информации обычно используется утилита zcat поскольку данные сжаты по алгоритму gzip:

/proc/consoles

tty0 -WU (EC p ) 4:7

/proc/cpuinfo

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

processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 6
model name : AMD Athlon(tm) II X2 250 Processor
stepping : 3
microcode : 0x10000c8
cpu MHz : 3000.000
cache size : 1024 KB
physical id : 0
siblings : 2

/proc/crypto

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

name : cbc(aes)
driver : cbc(aes-generic)
module : kernel
priority : 100
refcnt : 1
selftest : passed
internal : no
type : blkcipher
blocksize : 16
min keysize : 16
max keysize : 32
ivsize : 16
geniv : <default>

/proc/devices

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

Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
5 /dev/tty
5 /dev/console
5 /dev/ptmx
7 vcs

/proc/diskstats

Статистика ввода и вывода на блочные устройства, в том числе и жесткие диски.

8 0 sda 411 0 6808 1772 0 0 0 0 0 512 1772
8 1 sda1 102 0 1696 804 0 0 0 0 0 444 804
8 2 sda2 96 0 1648 488 0 0 0 0 0 344 488
8 3 sda3 122 0 1856 432 0 0 0 0 0 312 432

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

/proc/fb

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

Также здесь может быть указан драйвер Nvidia или catalyst если вы использовали проприетарный драйвер. Это один из способов посмотреть какой драйвер видеокарты используется.

/proc/filesystems

Здесь содержится список файловых систем, которые на данный момент поддерживаются ядром. Например:

nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cpuset
ext3
ext4

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

/proc/interrupts

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

CPU0 CPU1
0: 45 0 IO-APIC-edge timer
1: 0 2 IO-APIC-edge i8042
7: 2 0 IO-APIC-edge parport0
8: 0 1 IO-APIC-edge rtc0
9: 0 0 IO-APIC-fasteoi acpi
12: 1 4 IO-APIC-edge i8042

/proc/iomem

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

00000000-00000fff : reserved
00001000-0009ebff : System RAM
0009ec00-0009ffff : reserved
000a0000-000bffff : PCI Bus 0000:00
000c0000-000c7fff : Video ROM
000d0000-000dffff : PCI Bus 0000:00
000e4000-000fffff : reserved
000f0000-000fffff : System ROM
00100000-cfe8ffff : System RAM
01000000-0166a9ea : Kernel code
0166a9eb-01f0f67f : Kernel data
0209e000-02219fff : Kernel bss

/proc/ioports

0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0071 : rtc0

/proc/kallsyms

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

/proc/kcore

Это все содержимое вашей оперативной памяти представленное в одном файле. В отличии от других файлов у этого есть размер - объем вашей ОЗУ плюс 4 килобайта. Для доступа к нему нужны права суперпользователя. Не нужно открывать этот файл для чтения, у вас ничего не выйдет. Перед тем как с ним работать скопируйте файл в другую папку, а уже потом делайте что нужно, например вы можете попытаться найти определенный фрагмент текста из памяти браузера.

/proc/kmsg

/proc/kpagecount

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

/proc/loadavg

Здесь вы можете оценить среднюю нагрузку на систему. Например:

2.58 2.53 1.74 2/569 20842

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

/proc/locks

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

1: POSIX ADVISORY WRITE 16342 08:16:43386485 1073741825 1073741825
2: POSIX ADVISORY READ 16342 08:16:43386485 1073741826 1073742335
3: POSIX ADVISORY READ 1686 08:16:43253829 124 124
4: POSIX ADVISORY WRITE 16342 08:16:43647306 0 EOF

/proc/meminfo

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

MemTotal: 6109848 kB
MemFree: 2044352 kB
MemAvailable: 2562056 kB
Buffers: 36872 kB
Cached: 742456 kB
SwapCached: 740888 kB
Active: 2187724 kB

/proc/misc

В этом файле перечислены различные драйверы, загруженные для подключенных устройств или программ:

55 rfkill
200 tun
56 vboxnetctl
57 vboxdrvu
58 vboxdrv
232 kvm
59 memory_bandwidth

/proc/modules

Тоже довольно известный файл. Здесь содержится список всех загруженных модулей ядра. Ту же самую информацию мы можем увидеть выполнив lsmod. Но этой утилите тоже информацию предоставляет структура proc.

/proc/mounts

В этом файле перечислены все точки монтирования и все подключенные файловые системы:

sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,nosuid,size=3016160k,nr_inodes=754040,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0

То же самое можно увидеть выполнив mount -a.

/proc/partitions

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

8 0 488386584 sda
8 1 62914560 sda1
8 2 148064256 sda2
8 3 277406720 sda3
8 16 976762584 sdb

/proc/stat

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

/proc/swaps

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

Filename Type Size Used Priority
/dev/sdb2 partition 8388604 0 -1

/proc/sysrq-trigger

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

/proc/uptime

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

/proc/version

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

/proc/vmstat

И снова информация об оперативной памяти. На этот раз информация о виртуальной памяти и ее использовании в системе.

/proc/zoneinfo

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

/proc/PID/

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

ttr cpuset fdinfo mountstats stat
auxv cwd loginuid oom_adj statm
clear_refs environ maps oom_score status
cmdline exe mem root task
coredump_filter fd mounts smaps wchan

Мы не будем рассматривать все, давайте рассмотрим только основные файлы:

  • cmdline - содержит команду с помощью которой был запущен процесс, а также переданные ей параметры
  • cwd - символическая ссылка на текущую рабочую директорию процесса
  • exe - ссылка на исполняемый файл
  • root - ссылка на папку суперпользователя
  • environ - переменные окружения, доступные для процесса
  • fd - содержит файловые дескрипторы, файлы и устройства, которые использует процесс
  • maps, statm,иmem - информация о памяти процесса
  • stat, status - состояние процесса

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

/proc/sys/

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

Чтобы посмотреть можно ли записывать в файлы используйте команду:

Если у файла есть флаг W, значит в него можно записывать данные. Давайте рассмотрим основные подкаталоги в этой папке:

  • debug - содержит отладочную информацию, она будет вам полезна если вы разработчик ядра
  • dev - параметры различных устройств, подключенных к системе
  • fs - вся информация о файловой системе
  • kernel - позволяет напрямую настраивать ядро
  • net - настройка разных параметров сети
  • vm - взаимодействие с подсистемой vm

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

Выводы

Файловая система proc содержит наиболее полную и подробную информацию о внутреннем устройстве и работе операционной системе Linux и позволяет вам точно настроить многие параметры своей работы. Если потратить немного времени на изучение всех тонкостей этой подсистемы, вы получите более совершенную систему Linux. Разве это не то чего мы все хотим?

Читайте также: