Вопросы, связанные с администрированием системы

Как однократно передать параметр ядра?

Для передачи параметра необходимо в меню загрузчика Grub 2 выбрать нужную строку и нажать клавишу E на клавиатуре для перехода к её редактированию, затем в конце через пробел дописать нужный параметр (или параметры), после чего нажать Enter, чтобы начать процесс загрузки.

Как мне задать параметр ядра для постоянного использования?

Необходимо открыть с шаблонами загрузчика /etc/default/grub в любом текстовом редакторе, найти в нём переменную GRUB_CMDLINE_LINUX и внести соответствующие правки. После этого нужно пересобрать конфиг Grub 2 посредством grub2-mkconfig.

Как определить какие параметры ядра заданы в настоящее время?

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

cat /proc/cmdline

Как определить какие модули ядра в настоящее время загружены?

Для получения информации о загруженных модулях ядра следует применять lsmod:

lsmod

Как узнать какие опциональные параметры поддерживает конкретный модуль ядра?

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

modinfo foo-bar

Здесь foo-bar - имя модуля, информацию о котором требуется вывести.

Как мне посмотреть текущий журнал работы системы?

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

journalctl -b

Чтобы посмотреть только журнал работы ядра (аналог dmesg):

journalctl -k

Как мне посмотреть журналы с прошлых загрузок?

Вывести список всех загрузок:

journalctl --list-boots

Вывести содержимое журнала загрузки с идентификатором X:

journalctl -b -X

Как мне выгрузить журнал в файл?

Необходимо перенаправить поток стандартного вывода в файл:

journalctl -b > ~/abc.txt

Также можно воспользоваться утилитой fpaste для автоматической загрузки файла на сервис fpaste.org:

journalctl -b | fpaste

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

Как сделать chroot в установленную систему с LiveUSB?

Загружаемся с LiveCD/USB и запускаем эмулятор терминала или переходим в виртуальную консоль (особой разницы не имеет).

Для начала создадим каталог для точки монтирования:

sudo mkdir /media/fedora

Смонтируем корневой раздел установленной ОС:

sudo mount -t ext4 /dev/sda1 /media/fedora

Здесь /dev/sda1 - раздел, на котором установлена ОС, а ext4 - его файловая система. Внесём соответствующие правки если это не так.

Переходим в каталог с корневой ФС и монтируем ряд необходимых для работы окружения виртуальных ФС:

cd /media/fedora
sudo mount -t proc /proc proc
sudo mount --rbind /sys sys
sudo mount --make-rslave sys
sudo mount --rbind /dev dev
sudo mount --make-rslave dev
sudo mount -t tmpfs tmpfs tmp
sudo mount -t efivarfs efivarfs sys/firmware/efi/efivars

Теперь выполняем вход в chroot:

sudo chroot /media/fedora

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

logout

Отмонтируем раздел:

sudo umount /media/fedora

Как настроить ИБП (UPS) в Fedora?

См. здесь.

При использовании SSH появляется ошибка доступа к ключам. Как исправить?

См. здесь.

Системные журналы занимают слишком много места. Как их ограничить?

См. здесь.

Как пробросить локальный порт на удалённый хост?

См. здесь.

Как поднять OpenVPN сервер в Fedora?

См. здесь. В данной статье вместо ovn следует использовать openvpn во всех путях и именах юнитов.

Как поднять WireGuard сервер в Fedora?

См. здесь.

Что такое systemd и как с ним работать?

См. здесь.

Как поднять свой сервер Matrix в Fedora?

См. здесь.

Как очистить кэши и буферы всех файловых систем?

Чтобы очистить кэши и буферы нужно выполнить:

sync && echo 3 > /proc/sys/vm/drop_caches && sync

Как настроить системные часы в UTC или локального времени и наоборот?

Переключение аппаратных часов компьютера в UTC из localtime:

sudo timedatectl set-local-rtc no

Переключение аппаратных часов компьютера в localtime из UTC:

sudo timedatectl set-local-rtc yes

У меня в дуалбуте с Fedora установлена Windows и часы постоянно сбиваются. В чём дело?

Чтобы такого не происходило, обе операционные системы должны хранить время в формате UTC. Для этого в Windows нужно применить следующий файл реестра:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001

Как запустить простейший веб-сервер в Fedora?

Для запуска простейшего веб-сервера можно использовать Python и модуль, входящий в состав базового пакета:

python3 -m http.server 8080

Веб-сервер будет запущен на порту 8080. В качестве webroot будет использоваться текущий рабочий каталог.

Как изменить имя хоста?

Изменение имени хоста возможно посредством hostnamectl:

hostnamectl set-hostname NEW

Здесь вместо NEW следует указать новое значение. Изменения вступят в силу немедленно.

Как лучше настраивать сетевые подключения?

В Fedora для настройки сети используется Network Manager. Для работы с ним доступны как графические менеджеры (встроены в каждую DE), так и консольный nm-cli.

Как мне проверить ФС в составе LVM с LiveUSB?

Если файловая система была повреждена, необходимо запустить fsck и разрешить ему исправить её. При использовании настроек по умолчанию (LVM, ФС ext4) это делается так:

fsck -t ext4 /dev/mapper/fedora-root
fsck -t ext4 /dev/mapper/fedora-home

Если вместо ext4 применяется другая файловая система, необходимо указать её после параметра -t.

Как мне проверить ФС при использовании классических разделов с LiveUSB?

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

fsck -t ext4 /dev/sda2
fsck -t ext4 /dev/sda3

Если вместо ext4 применяется другая файловая система, необходимо указать её после параметра -t. Также вместо /dev/sda2 следует прописать соответствующее блочное устройство с повреждённой ФС.

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

sudo fdisk -l

Как мне проверить ФС на зашифрованном LUKS разделе с LiveUSB?

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

cryptsetup luksOpen /dev/sda2 luks-root

Здесь вместо /dev/sda2 следует прописать соответствующее блочное устройство зашифрованного накопителя.

Теперь запустим проверку файловой системы:

fsck -t ext4 /dev/mapper/luks-root

Если вместо ext4 применяется другая файловая система, необходимо указать её после параметра -t.

По окончании обязательно отключим LUKS том:

cryptsetup luksClose /dev/mapper/luks-root

Как поднять DLNA сервер в локальной сети?

См. здесь.

Возможна ли полная дедупликация оперативной памяти?

Да, дедупликация памяти поддерживается в ядре Linux начиная с версии 2.6.32 модулем KSM и по умолчанию применяется лишь в системах виртуализации, например в KVM.

Возможна ли полная дедупликация данных на дисках?

Полная автоматическая дедупликация данных на дисках поддерживается лишь файловой системой BTRFS.

Можно ли включить сжатие оперативной памяти?

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

Включение zram в Fedora:

sudo systemctl enable --now zram-swap

Отключение zram в Fedora:

sudo systemctl stop zram-swap
sudo systemctl disable zram-swap

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

Как сделать замеры скорости локальной или беспроводной сети?

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

sudo dnf install iperf2

На первом устройстве запустим сервер iperf:

iperf -s

По умолчанию iperf прослушивает порт 5001/tcp на всех доступных сетевых соединениях.

Теперь временно разрешим входящие соединения на данный порт посредством Firewalld (правило будет действовать до перезагрузки):

sudo firewall-cmd --add-port=5001/tcp

На втором устройстве запустим клиент и подключимся к серверу:

iperf -c 192.168.1.2

В качестве клиента может выступать и мобильное устройство на базе ОС Android с установленным Network Tools. В этом случае в главном меню программы следует выбрать пункт Iperf2, а в окне подключения ввести:

-c 192.168.1.2

Параметр -c обязателен. Если он не указан, программа выдаст ошибку.

192.168.1.2 - это внутренний IP-адрес устройства в ЛВС, на котором запущен сервер. Номер порта указывать не требуется.

Как временно изменить параметр sysctl?

Временно установить любой параметр ядра возможно через sysctl:

sudo sysctl -w foo.bar=X

Здесь foo.bar имя параметра, а X - его значение. Изменения вступят в силу немедленно и сохранятся до перезагрузки системы.

Как задать и сохранить параметр sysctl?

Чтобы сохранить параметр ядра, создадим специальный файл 99-foobar.conf в каталоге /etc/sysctl.d:

foo.bar1=X1
foo.bar2=X2

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

Для вступления изменений в силу требуется перезагрузка:

sudo systemctl reboot

В каком порядке загружаются sysctl файлы настроек?

При загрузке ядро проверяет следующие каталоги в поисках .conf файлов:

  1. /usr/lib/sysctl.d - предустановленные конфиги системы и определённых пакетов;
  2. /run/sysctl.d - различные конфиги, сгенерированные в рантайме;
  3. /etc/sysctl.d - пользовательские конфиги.

Порядок выполнения - в алфавитном порядке, поэтому для его изменения многие конфиги содержат цифры и буквы. Например конфиг 00-foobar.conf выполнится раньше, чем zz-foobar.conf.

Как переключить запуск системы в текстовый режим и обратно?

Чтобы активировать запуск Fedora в текстовом режиме, нужно переключиться на цель multi-user.target:

sudo systemctl set-default multi-user.target

Чтобы активировать запуск в графическом режиме, необходимо убедиться в том, что установлен какой-либо менеджер графического входа в систему (GDM, SDDM, LightDM и т.д.), а затем переключиться на цель graphical.target:

sudo systemctl set-default graphical.target

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

systemctl get-default

Изменения вступят в силу лишь после перезапуска системы:

sudo systemctl reboot

Как настроить подкачку в файл в Fedora?

Создадим файл подкачки на 4 ГБ:

sudo dd if=/dev/zero of=/media/pagefile count=4096 bs=1M

Установим правильный chmod:

sudo chmod 600 /media/pagefile

Подготовим swapfs к работе:

sudo mkswap /media/pagefile

Активируем файл подкачки:

sudo swapon /media/pagefile

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

/media/pagefile    none    swap    sw    0    0

Действия вступят в силу немедленно.

Как передать содержимое каталога на удалённый сервер?

Передача содержимого локального каталога на удалённый сервер посредством rsync:

rsync -chavzP --stats /path/to/local user@example.org:/path/to/remote

Здесь user@example.org - данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост.

Как получить содержимое каталога с удалённого сервера?

Получение содержимого каталога с удалённого сервера посредством rsync:

rsync -chavzP --stats user@example.org:/path/to/remote /path/to/local

Здесь user@example.org - данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост.

Как узнать какой процесс осуществляет запись на диск?

Для мониторинга дисковой активности существуют улититы iotop и fatrace. Установим их:

sudo dnf install iotop fatrace

Запустим iotop в режиме накопления показаний:

sudo iotop -a

Запустим fatrace в режиме накопления с выводом лишь информации о событиях записи на диск:

sudo fatrace -f W

Запустим fatrace в режиме накопления с выводом информации о событиях записи на диск в файл в течение 10 минут (600 секунд):

sudo fatrace -f W -o ~/disk-usage.log -s 600

Как сменить метку раздела?

Смена метки раздела с файловой системой ext2, ext3 и ext4:

sudo e2label /dev/sda1 "NewLabel"

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

sudo xfs_admin -L "NewLabel" /dev/sda1

Здесь /dev/sda1 - раздел, на котором требуется изменить метку.

Как получить UUID всех смонтированных разделов?

Для получения всех UUID можно использовать утилиту blkid:

sudo blkid

Вывод UUID для указанного раздела:

sudo blkid /dev/sda1

Здесь /dev/sda1 - раздел, для которого требуется вывести UUID.

Как изменить UUID раздела?

Смена UUID раздела с файловой системой ext2, ext3 и ext4:

sudo tune2fs /dev/sda1 -U $(uuidgen)

Смена UUID раздела с файловой системой XFS:

sudo xfs_admin -U generate /dev/sda1

Здесь /dev/sda1 - раздел, на котором требуется изменить UUID.

Как правильно указать DNS серверы в Fedora?

Для того, чтобы указать другие DNS серверы, необходимо использовать Network Manager (графический или консольный): свойства соединения -> страница IPv4 -> другие DNS серверы.

Можно ли править файл /etc/resolv.conf в Fedora?

Нет, т.к. этот файл целиком управляется Network Manager и перезаписывается при каждом изменении статуса подключения (активация-деактивация соединений, перезапуск сервиса и т.д.).

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

Как можно средствами Firewalld запретить ICMP?

По умолчанию ICMP трафик разрешён для большей части зон, поэтому запретить его можно вручную:

sudo firewall-cmd --zone=public --remove-icmp-block={echo-request,echo-reply,timestamp-reply,timestamp-request} --permanent

Применим новые правила:

sudo firewall-cmd --reload

В данном примере для зоны public блокируются как входящие, так и исходящие ICMP ECHO и ICMP TIMESTAMP.

Как средствами Firewalld разрешить подключение к OpenVPN серверу только с разрешённых IP адресов?

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

sudo firewall-cmd --zone=public --remove-service openvpn --permanent

Теперь создадим rich rule, разрешающее доступ с указанных IP-адресов (или подсетей):

sudo firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address="1.2.3.4" service name="openvpn" accept' --permanent
sudo firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address="5.6.7.0/24" service name="openvpn" accept' --permanent

Применим новые правила:

sudo firewall-cmd --reload

Здесь public - имя зоны для публичного интерфейса, 1.2.3.4 - IP-адрес, а 5.6.7.0/24 - подсеть, доступ для адресов из которой следует разрешить.

Как средствами Firewalld разрешить подключение к WireGuard серверу только с разрешённых IP адресов?

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

sudo firewall-cmd --zone=public --remove-port=27015/udp --permanent

Теперь создадим rich rule, разрешающее доступ с указанных IP-адресов (или подсетей):

sudo firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address="1.2.3.4" port port=27015 protocol=udp accept' --permanent
sudo firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address="5.6.7.0/24" port port=27015 protocol=udp accept' --permanent

Применим новые правила:

sudo firewall-cmd --reload

Здесь 27015 - порт сервера WireGuard, public - имя зоны для публичного интерфейса, 1.2.3.4 - IP-адрес, а 5.6.7.0/24 - подсеть, доступ для адресов из которой следует разрешить.

Как узнать внешний IP адрес за NAT провайдера?

Для этой цели можно использовать внешний сервис, возвращающий только внешний IP и утилиту curl:

curl https://ifconfig.me

Как получить PID запущенного процесса?

Для получения идентификатора запущенного процесса (PID), следует применять утилиту pidof:

pidof foo-bar

Здесь вместо foo-bar следует указать имя образа процесса, информацию о котором требуется получить.

Как правильно завершить работу процесса?

Для того, чтобы завершить работу процесса, необходимо отправить ему сигнал SIGTERM. После получения данного сигнала процесс должен немедленно начать завершение своей работы:

  • остановить активные потоки;
  • сообщить порождённым им процессам (потомкам) о том, что он завершает свою работу;
  • закрыть все открытые процессом дескрипторы;
  • освободить все занятые процессом ресурсы;
  • вернуть управление операционной системе.

Чтобы отправить сигнал SIGTERM процессу с определённым PID, воспользуемся утилитой kill:

kill -15 XXXX

Здесь XXXX - PID нужного процесса.

Вместо явного указания PID процесса существует возможность завершить работу процесса с указанным именем посредством killall:

killall -15 foo-bar

Здесь вместо foo-bar следует указать имя образа процесса, который требуется завершить, однако её следует применять с особой осторожностью ибо если существует несколько процессов с одинаковым названием, все они будут завершены.

Как принудительно завершить работу процесса?

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

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

Чтобы отправить сигнал SIGKILL процессу с определённым PID, воспользуемся утилитой kill:

kill -9 XXXX

Здесь XXXX - PID нужного процесса.

Вместо явного указания PID процесса существует возможность завершить работу процесса с указанным именем посредством killall:

killall -9 foo-bar

Здесь вместо foo-bar следует указать имя образа процесса. Если существует несколько процессов с одинаковым названием, все они будут завершены.

Что такое процесс-зомби?

Процессы-зомби появляются в системе если потомок завершил свою работу раньше родительского процесса, а последний не отрегировал на отправленный ему сигнал SIGCHLD.

Такие процессы не занимают ресурсов в системе (ибо успешно завершили свою работу), за исключением строки в таблице процессов, хранящей его PID.

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

Что такое процесс-сирота?

Процессы-сироты появляются в системе если их родитель был аварийно уничтожен системой сигналом SIGKILL и не смог сообщить своим потомкам о своём завершении работы.

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

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

Как средствами Firewalld разрешить подключение к веб-серверу только с IP адресов CloudFlare?

При использовании CloudFlare в качестве системы защиты от DDoS атак, а также WAF, возникает необходимость разрешать входящие подключения исключительно с IP адресов данного сервиса.

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

sudo firewall-cmd --zone=public --remove-service http --permanent
sudo firewall-cmd --zone=public --remove-service https --permanent

Напишем небольшой скрипт foo-bar.sh, который получит актуальные пулы IP-адресов и создаст rich rule, разрешающие доступ лишь с подсетей CloudFlare (IPv4, IPv6):

#!/bin/bash
set -ef

API=https://www.cloudflare.com/ips-v
ZONE=public

function fw_add {
    local IFS=$'\n'
    local lines=($(curl -sS $API$1))
    for i in "${lines[@]}"
    do
        firewall-cmd --zone=$ZONE --add-rich-rule="rule family=ipv$1 source address=\"$i\" service name=\"http\" accept" --permanent
        firewall-cmd --zone=$ZONE --add-rich-rule="rule family=ipv$1 source address=\"$i\" service name=\"https\" accept" --permanent
    done
}

fw_add 4
fw_add 6

Запустим наш скрипт:

sudo ./foo-bar.sh

Применим новые правила файрвола:

sudo firewall-cmd --reload

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

Как пробросить IP адреса клиентов за CloudFlare?

См. здесь.

Как правильно установить Docker в Fedora?

Вместо Docker в Fedora рекомендуется установить и использовать Podman, т.к. он не требует прав суперпользователя для работы:

sudo dnf install podman

Синтаксис команд аналогичен Docker.

Как проверить наличие или отсутствие потерь пакетов до узла?

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

sudo dnf install mtr

Запустим проверку маршрута до узла example.org:

mtr example.org

Приостановить работу можно нажатием клавиши P, для возобновить - пробел, а для выхода - Q.

Как определить включена ли определённая опция ядра во время компиляции?

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

В качестве примера проверим статус опции CONFIG_EFI_STUB текущего ядра:

grep CONFIG_EFI_STUB /boot/config-$(uname -r)

В выводе y означает, что опция была включена, а not set, соответственно, выключена.

Как получить список установленных сетевых соединений?

Воспользуемся утилитой ss для вывода списка установленных сетевых соединений:

ss -tupn

Как получить список открытых портов?

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

ss -tulpn

Статус LISTEN означает, что TCP-порт открыт и ожидает входящих соединений. В то же время для UDP-портов будет отображаться статус UNCONN, т.к. этот протокол не подразумевает предварительное открытие подключений.

Процесс ksoftirqd съедает все ресурсы системы. Что делать?

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

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

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

Как определить какое устройство генерирует огромное количество прерываний?

Для диагностики системы обработки прерываний, ядро имеет встроенный механизм:

cat /proc/interrupts

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

Как произвести ручную балансировку прерываний?

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

sudo bash -c "echo X > /proc/irq/Y/smp_affinity"

Здесь X - маска процессора (CPU affinity), который будет обрабатывать данное прерывание, а Y - номер прерывания (указан в левом столбце таблицы прерываний).

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

При работе приложения возникает ошибка Too many open files. Что делать?

Ошибка Too many open files возникает при превышении количества открытых дескрипторов файлов процессом. Для её исправления, нужно увеличить это ограничение.

Как узнать текущий лимит открытых файловых дескрипторов?

Существует два типа ограничений: мягкий (soft) и жёсткий (hard). Жёсткий задаётся администратором системы, а мягкий может регулироваться как пользователем, так и запущенным приложением, но не может превышать максимально заданное значение жёсткого лимита, а также глобальное для всего ядра.

Получим значение мягкого ограничителя:

ulimit -Sn

Получим значение жёсткого ограничителя:

ulimit -Hn

Значения по умолчанию 1024 (soft) и 4096 (hard).

Как узнать глобальный лимит открытых файловых дескрипторов?

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

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

cat /proc/sys/fs/file-max

Как увеличить лимит открытых файловых дескрипторов?

Мягкие и жёсткие лимиты на количество дескрипторов открытых файлов задаются в файле /etc/security/limits.conf суперпользователем, но при этом не могут превышать глобальный.

Увеличим ограничение для пользователя foo-bar до 8192/2048:

foo-bar       soft    nofile          2048
foo-bar       hard    nofile          8192

Увеличим ограничение для любых пользователей до 8192/2048:

*       soft    nofile          2048
*       hard    nofile          8192

Изменения вступят в силу при следующем входе в систему.

Как запустить процесс так, чтобы он мог использовать лишь определённые ядра процессора?

По умолчанию процесс выполняется на любых доступных для Linux процессорах (или их ядрах).

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

Запустим приложение foo-bar на каждом чётном ядре (нумерация всегда начинается с нуля):

taskset -a -c 0,2,4,6 foo-bar

Изменим ассоциацию ядер для уже запущенного процесса foo-bar (в качестве параметра указывается PID необходимого процесса):

taskset -a -c 1,3,5,7 -p $(pidof foo-bar)

Как изменить приоритет процесса?

Допустимые значения приоритета находятся в диапазоне от -20 (наиболее высокий приоритет) до 19 (наиболее низкий). Отрицательные значения может устанавливать лишь суперпользователь.

Запустим приложение foo-bar с приоритетом 10:

nice -n 10 foo-bar

Изменим приоритет запущенного процесса foo-bar (в качестве параметра указывается PID необходимого процесса) до 8:

renice -n 8 -p $(pidof foo-bar)