<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.tmon8.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Comminux</id>
	<title>The Magic of Number 8 Wiki - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tmon8.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Comminux"/>
	<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Comminux"/>
	<updated>2026-07-30T01:42:03Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=229</id>
		<title>Конфигурации приложений</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=229"/>
		<updated>2026-07-20T01:57:13Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* MariaDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Описание отдельных настроек приложений и сервисов.&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
=== Chrome/Chromium ===&lt;br /&gt;
{{Внимание|Chrome 149 последний выпуск на котором данные флаги работоспособны}}&lt;br /&gt;
Чтобы включить поддержку расширений Manifest V2 нужно отредактировать поле &amp;lt;code&amp;gt;Объект&amp;lt;/code&amp;gt; в свойствах ярлыка:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files\Google\Chrome\Application\chrome.exe&amp;quot; --disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
=== MariaDB ===&lt;br /&gt;
&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание базы данных, пользователя и выставления доступа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MariaDB [(none)]&amp;gt; CREATE DATABASE `db_name` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_unicode_ci`;&lt;br /&gt;
MariaDB [(none)]&amp;gt; CREATE USER `db-user`@&#039;localhost&#039; IDENTIFIED BY &#039;password&#039;;&lt;br /&gt;
MariaDB [(none)]&amp;gt; GRANT ALL PRIVILEGES ON `db_name`.* TO `db_user`@`localhost`;&lt;br /&gt;
MariaDB [(none)]&amp;gt; FLUSH PRIVILEGES;&lt;br /&gt;
MariaDB [(none)]&amp;gt; \q&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
=== OpenVPN Client ===&lt;br /&gt;
&lt;br /&gt;
Добавив опцию route в ovpn файл, можно исключить маршрутизацию определенного сетевого узла:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;route XX.XX.XX.XX 255.255.255.255 YY.YY.YY.YY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где XX это IP требуемый удаленный адрес, а YY IP-адрес шлюза (IP-адрес домашнего роутера)&lt;br /&gt;
&lt;br /&gt;
== V ==&lt;br /&gt;
=== Visual Studio Code ===&lt;br /&gt;
[[Файл:Visual Studio Code - Merge Editor.png|мини|VS Code: Merge Editor]]&lt;br /&gt;
В случае конфликтной ситуации, при объединении кодовой базы из различных ветвей, Visual Studio Code предлагает воспользоваться режимом Merge Editor, трех оконным интерфейсом, который помогает увидеть небольшие конфликты, но совершенно непригоден когда большая часть требуемого файла была переписана.&lt;br /&gt;
&lt;br /&gt;
https://stackoverflow.com/questions/73277690/how-to-change-vs-codes-merge-conflict-layout&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Ubuntu&amp;diff=228</id>
		<title>Общие рекомендации по использованию дистрибутива Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Ubuntu&amp;diff=228"/>
		<updated>2026-07-20T01:46:25Z</updated>

		<summary type="html">&lt;p&gt;Comminux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Обновление ПО ==&lt;br /&gt;
Обновить индекс пакетов для подключенных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновить ПО.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновить snap приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;snap refresh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Ubuntu Software Center предупреждает о наличии обновления для snap-store, то для ручного обновления потребуется убить процесс по его pid и затем вручную запустить его обновление.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kill -9 1619&lt;br /&gt;
snap refresh snap-store&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с репозиториями ==&lt;br /&gt;
&lt;br /&gt;
Посмотреть одной командой настройки репозиториев пакетов для APT.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ubuntu LTS Hardware Enablement Stack ==&lt;br /&gt;
Главным недостатком релизов с долгосрочной поддержкой является невозможность использования нового оборудования, т.к. такие дистрибутивы поставляются с устаревшей версией ядра Linux.&lt;br /&gt;
&lt;br /&gt;
Для установки нового ядра в Ubuntu Server 22.04 следует запустить:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install --install-recommends linux-generic-hwe-22.04&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обновление Ubuntu до новой версии ==&lt;br /&gt;
&amp;lt;code&amp;gt;sudo do-release-upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если дистрибутив не видит новый LTS релиз, то нужно добавить следующий флаг (Обычно это происходит пока не выйдет первый корректирующий выпуск дистрибутива. К примеру, Ubuntu 24.04.1 LTS):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo do-release-upgrade -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В процессе обновления, пакетный менеджер может задавать уточняющие вопросы для выбора версии конфигурационных файлов. Требуется быть внимательным в отношении системного файла &amp;lt;code&amp;gt;/etc/systemd/resolved.conf&amp;lt;/code&amp;gt;, т.к. в обратном случае, можно лишится настроек DNS сервера.&lt;br /&gt;
&lt;br /&gt;
=== Продолжение обновления системы после аварийной остановки ===&lt;br /&gt;
В тех случаях, когда обновление дистрибутива было завершено из за ошибки или случайного выхода из диалога установки, потребуется выполнить следующую процедуру.&lt;br /&gt;
&lt;br /&gt;
Исправить сломанные зависимости:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если это все еще не работает, попробуйте следующую команду, чтобы исправить и перенастроить существующие распакованные, но еще не настроенные пакеты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dpkg --configure -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем можно снова попробовать продолжить обновление.&lt;br /&gt;
&lt;br /&gt;
Если снова наблюдаются проблемы, то можно попробовать удалить кэш загруженных пакетов (они хранятся в &amp;lt;code&amp;gt;/var/cache/apt/archives&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt clean&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда удалит все устаревшие пакеты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt autoremove -y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если же система осталась в нерабочем состоянии, то в этом случае поможет только полная переустановка.&lt;br /&gt;
&lt;br /&gt;
Решение взято из: https://askubuntu.com/a/346795&lt;br /&gt;
&lt;br /&gt;
== Решение проблем ==&lt;br /&gt;
=== Система стартует более 5 минут ===&lt;br /&gt;
&lt;br /&gt;
Если процесс инициализации сети (networking.service) происходит слишком долго, то можно ограничить время службы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl edit networking.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем добавить следующий блок в начале:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[Service]&lt;br /&gt;
TimeoutStartSec=5sec&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё нужно отредактировать системный файл /etc/systemd/system.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DefaultTimeoutStartSec=30s&lt;br /&gt;
DefaultTimeoutStopSec=30s&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Ubuntu&amp;diff=227</id>
		<title>Общие рекомендации по использованию дистрибутива Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Ubuntu&amp;diff=227"/>
		<updated>2026-07-20T01:42:07Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* Система стартует более 5 минут */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Обновление ПО ==&lt;br /&gt;
Обновить индекс пакетов для подключенных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновить ПО.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновить snap приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;snap refresh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Ubuntu Software Center предупреждает о наличии обновления для snap-store, то для ручного обновления потребуется убить процесс по его pid и затем вручную запустить его обновление.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kill -9 1619&lt;br /&gt;
snap refresh snap-store&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с репозиториями ==&lt;br /&gt;
&lt;br /&gt;
Посмотреть одной командой настройки репозиториев пакетов для APT.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ubuntu LTS Hardware Enablement Stack ==&lt;br /&gt;
Главным недостатком релизов с долгосрочной поддержкой является невозможность использования нового оборудования, т.к. такие дистрибутивы поставляются с устаревшей версией ядра Linux.&lt;br /&gt;
&lt;br /&gt;
Для установки нового ядра в Ubuntu Server 22.04 следует запустить:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install --install-recommends linux-generic-hwe-22.04&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обновление Ubuntu до новой версии ==&lt;br /&gt;
&amp;lt;code&amp;gt;sudo do-release-upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если дистрибутив не видит новый LTS релиз, то нужно добавить следующий флаг (Обычно это происходит пока не выйдет первый корректирующий выпуск дистрибутива. К примеру, Ubuntu 24.04.1 LTS):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo do-release-upgrade -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В процессе обновления, пакетный менеджер может задавать уточняющие вопросы для выбора версии конфигурационных файлов. Требуется быть внимательным в отношении системного файла &amp;lt;code&amp;gt;/etc/systemd/resolved.conf&amp;lt;/code&amp;gt;, т.к. в обратном случае, можно лишится настроек DNS сервера.&lt;br /&gt;
&lt;br /&gt;
=== Продолжение обновления системы после аварийной остановки ===&lt;br /&gt;
В тех случаях, когда обновление дистрибутива было завершено из за ошибки или случайного выхода из диалога установки, потребуется выполнить следующую процедуру.&lt;br /&gt;
&lt;br /&gt;
Исправить сломанные зависимости:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если это все еще не работает, попробуйте следующую команду, чтобы исправить и перенастроить существующие распакованные, но еще не настроенные пакеты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dpkg --configure -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем можно снова попробовать продолжить обновление.&lt;br /&gt;
&lt;br /&gt;
Если снова наблюдаются проблемы, то можно попробовать удалить кэш загруженных пакетов (они хранятся в &amp;lt;code&amp;gt;/var/cache/apt/archives&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt clean&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда удалит все устаревшие пакеты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt autoremove -y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если же система осталась в нерабочем состоянии, то в этом случае поможет только полная переустановка.&lt;br /&gt;
&lt;br /&gt;
Решение взято из: https://askubuntu.com/a/346795&lt;br /&gt;
&lt;br /&gt;
== Решение проблем ==&lt;br /&gt;
=== Система стартует более 5 минут ===&lt;br /&gt;
&lt;br /&gt;
Если процесс инициализации сети (networking.service) происходит слишком долго, то можно ограничить время службы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl edit networking.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем добавить следующий блок в начале:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[Service]&lt;br /&gt;
TimeoutStartSec=5sec&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё нужно отредактировать системный файл /etc/systemd/system.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DefaultTimeoutStartSec=30s&lt;br /&gt;
DefaultTimeoutStopSec=30s&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Ubuntu&amp;diff=226</id>
		<title>Общие рекомендации по использованию дистрибутива Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Ubuntu&amp;diff=226"/>
		<updated>2026-07-20T01:40:55Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* Решение проблем */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Обновление ПО ==&lt;br /&gt;
Обновить индекс пакетов для подключенных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновить ПО.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновить snap приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;snap refresh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Ubuntu Software Center предупреждает о наличии обновления для snap-store, то для ручного обновления потребуется убить процесс по его pid и затем вручную запустить его обновление.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kill -9 1619&lt;br /&gt;
snap refresh snap-store&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с репозиториями ==&lt;br /&gt;
&lt;br /&gt;
Посмотреть одной командой настройки репозиториев пакетов для APT.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ubuntu LTS Hardware Enablement Stack ==&lt;br /&gt;
Главным недостатком релизов с долгосрочной поддержкой является невозможность использования нового оборудования, т.к. такие дистрибутивы поставляются с устаревшей версией ядра Linux.&lt;br /&gt;
&lt;br /&gt;
Для установки нового ядра в Ubuntu Server 22.04 следует запустить:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install --install-recommends linux-generic-hwe-22.04&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обновление Ubuntu до новой версии ==&lt;br /&gt;
&amp;lt;code&amp;gt;sudo do-release-upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если дистрибутив не видит новый LTS релиз, то нужно добавить следующий флаг (Обычно это происходит пока не выйдет первый корректирующий выпуск дистрибутива. К примеру, Ubuntu 24.04.1 LTS):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo do-release-upgrade -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В процессе обновления, пакетный менеджер может задавать уточняющие вопросы для выбора версии конфигурационных файлов. Требуется быть внимательным в отношении системного файла &amp;lt;code&amp;gt;/etc/systemd/resolved.conf&amp;lt;/code&amp;gt;, т.к. в обратном случае, можно лишится настроек DNS сервера.&lt;br /&gt;
&lt;br /&gt;
=== Продолжение обновления системы после аварийной остановки ===&lt;br /&gt;
В тех случаях, когда обновление дистрибутива было завершено из за ошибки или случайного выхода из диалога установки, потребуется выполнить следующую процедуру.&lt;br /&gt;
&lt;br /&gt;
Исправить сломанные зависимости:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если это все еще не работает, попробуйте следующую команду, чтобы исправить и перенастроить существующие распакованные, но еще не настроенные пакеты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dpkg --configure -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем можно снова попробовать продолжить обновление.&lt;br /&gt;
&lt;br /&gt;
Если снова наблюдаются проблемы, то можно попробовать удалить кэш загруженных пакетов (они хранятся в &amp;lt;code&amp;gt;/var/cache/apt/archives&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt clean&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда удалит все устаревшие пакеты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt autoremove -y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если же система осталась в нерабочем состоянии, то в этом случае поможет только полная переустановка.&lt;br /&gt;
&lt;br /&gt;
Решение взято из: https://askubuntu.com/a/346795&lt;br /&gt;
&lt;br /&gt;
== Решение проблем ==&lt;br /&gt;
=== Система стартует более 5 минут ===&lt;br /&gt;
&lt;br /&gt;
Если процесс инициализации сети (networking.service) происходит слишком долго, то можно ограничить время службы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl edit networking.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем добавить следующий блок в начале:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[Service]&lt;br /&gt;
TimeoutStartSec=15sec&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё нужно отредактировать системный файл /etc/systemd/system.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DefaultTimeoutStartSec=30s&lt;br /&gt;
DefaultTimeoutStopSec=30s&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Ubuntu&amp;diff=225</id>
		<title>Общие рекомендации по использованию дистрибутива Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Ubuntu&amp;diff=225"/>
		<updated>2026-07-20T01:32:33Z</updated>

		<summary type="html">&lt;p&gt;Comminux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Обновление ПО ==&lt;br /&gt;
Обновить индекс пакетов для подключенных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновить ПО.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновить snap приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;snap refresh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Ubuntu Software Center предупреждает о наличии обновления для snap-store, то для ручного обновления потребуется убить процесс по его pid и затем вручную запустить его обновление.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kill -9 1619&lt;br /&gt;
snap refresh snap-store&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Работа с репозиториями ==&lt;br /&gt;
&lt;br /&gt;
Посмотреть одной командой настройки репозиториев пакетов для APT.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ubuntu LTS Hardware Enablement Stack ==&lt;br /&gt;
Главным недостатком релизов с долгосрочной поддержкой является невозможность использования нового оборудования, т.к. такие дистрибутивы поставляются с устаревшей версией ядра Linux.&lt;br /&gt;
&lt;br /&gt;
Для установки нового ядра в Ubuntu Server 22.04 следует запустить:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install --install-recommends linux-generic-hwe-22.04&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обновление Ubuntu до новой версии ==&lt;br /&gt;
&amp;lt;code&amp;gt;sudo do-release-upgrade&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если дистрибутив не видит новый LTS релиз, то нужно добавить следующий флаг (Обычно это происходит пока не выйдет первый корректирующий выпуск дистрибутива. К примеру, Ubuntu 24.04.1 LTS):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo do-release-upgrade -d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В процессе обновления, пакетный менеджер может задавать уточняющие вопросы для выбора версии конфигурационных файлов. Требуется быть внимательным в отношении системного файла &amp;lt;code&amp;gt;/etc/systemd/resolved.conf&amp;lt;/code&amp;gt;, т.к. в обратном случае, можно лишится настроек DNS сервера.&lt;br /&gt;
&lt;br /&gt;
=== Продолжение обновления системы после аварийной остановки ===&lt;br /&gt;
В тех случаях, когда обновление дистрибутива было завершено из за ошибки или случайного выхода из диалога установки, потребуется выполнить следующую процедуру.&lt;br /&gt;
&lt;br /&gt;
Исправить сломанные зависимости:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если это все еще не работает, попробуйте следующую команду, чтобы исправить и перенастроить существующие распакованные, но еще не настроенные пакеты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dpkg --configure -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем можно снова попробовать продолжить обновление.&lt;br /&gt;
&lt;br /&gt;
Если снова наблюдаются проблемы, то можно попробовать удалить кэш загруженных пакетов (они хранятся в &amp;lt;code&amp;gt;/var/cache/apt/archives&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt clean&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда удалит все устаревшие пакеты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt autoremove -y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если же система осталась в нерабочем состоянии, то в этом случае поможет только полная переустановка.&lt;br /&gt;
&lt;br /&gt;
Решение взято из: https://askubuntu.com/a/346795&lt;br /&gt;
&lt;br /&gt;
== Решение проблем ==&lt;br /&gt;
=== Система стартует более 5 минут ===&lt;br /&gt;
&lt;br /&gt;
Если процесс инициализации сети (networking.service) происходит слишком долго, то можно ограничить время службы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl edit networking.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем добавить следующий блок в начале:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[Service]&lt;br /&gt;
TimeoutStartSec=15sec&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=224</id>
		<title>Конфигурации приложений</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=224"/>
		<updated>2026-07-20T01:15:19Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* MariaDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Описание отдельных настроек приложений и сервисов.&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
=== Chrome/Chromium ===&lt;br /&gt;
{{Внимание|Chrome 149 последний выпуск на котором данные флаги работоспособны}}&lt;br /&gt;
Чтобы включить поддержку расширений Manifest V2 нужно отредактировать поле &amp;lt;code&amp;gt;Объект&amp;lt;/code&amp;gt; в свойствах ярлыка:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files\Google\Chrome\Application\chrome.exe&amp;quot; --disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
=== MariaDB ===&lt;br /&gt;
&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание базы данных, пользователя и выставления доступа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MariaDB [(none)]&amp;gt; CREATE DATABASE `db_name` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_unicode_ci`;&lt;br /&gt;
MariaDB [(none)]&amp;gt; CREATE USER `db-user`@&#039;localhost&#039; IDENTIFIED BY &#039;password&#039;;MariaDB [(none)]&amp;gt; GRANT ALL PRIVILEGES ON `db_name`.* TO `db_user`@`localhost`;&lt;br /&gt;
MariaDB [(none)]&amp;gt; FLUSH PRIVILEGES;&lt;br /&gt;
MariaDB [(none)]&amp;gt; \q&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
=== OpenVPN Client ===&lt;br /&gt;
&lt;br /&gt;
Добавив опцию route в ovpn файл, можно исключить маршрутизацию определенного сетевого узла:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;route XX.XX.XX.XX 255.255.255.255 YY.YY.YY.YY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где XX это IP требуемый удаленный адрес, а YY IP-адрес шлюза (IP-адрес домашнего роутера)&lt;br /&gt;
&lt;br /&gt;
== V ==&lt;br /&gt;
=== Visual Studio Code ===&lt;br /&gt;
[[Файл:Visual Studio Code - Merge Editor.png|мини|VS Code: Merge Editor]]&lt;br /&gt;
В случае конфликтной ситуации, при объединении кодовой базы из различных ветвей, Visual Studio Code предлагает воспользоваться режимом Merge Editor, трех оконным интерфейсом, который помогает увидеть небольшие конфликты, но совершенно непригоден когда большая часть требуемого файла была переписана.&lt;br /&gt;
&lt;br /&gt;
https://stackoverflow.com/questions/73277690/how-to-change-vs-codes-merge-conflict-layout&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.js&amp;diff=223</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.js&amp;diff=223"/>
		<updated>2026-07-20T01:09:13Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Timeless fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
&lt;br /&gt;
// Полное удаление пустого блока инструментов для анонимных пользователей&lt;br /&gt;
if ( mw.config.get( &#039;wgUserName&#039; ) === null ) {&lt;br /&gt;
    var siteToolsBlock = document.getElementById( &#039;site-tools&#039; );&lt;br /&gt;
    if ( siteToolsBlock ) {&lt;br /&gt;
        siteToolsBlock.remove();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.js&amp;diff=222</id>
		<title>MediaWiki:Timeless.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.js&amp;diff=222"/>
		<updated>2026-07-20T01:08:53Z</updated>

		<summary type="html">&lt;p&gt;Comminux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь JavaScript код будет загружаться для пользователей, использующих тему оформления Timeless */&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.js&amp;diff=221</id>
		<title>MediaWiki:Timeless.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.js&amp;diff=221"/>
		<updated>2026-07-20T01:06:38Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Новая страница: «/* Размещённый здесь JavaScript код будет загружаться для пользователей, использующих тему оформления Timeless */  // Полное удаление пустого блока инструментов для анонимных пользователей if ( mw.config.get( &amp;#039;wgUserName&amp;#039; ) === null ) {     var siteToolsBlock = document.getElementById( &amp;#039;site-tools&amp;#039; );     if ( siteToolsB...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь JavaScript код будет загружаться для пользователей, использующих тему оформления Timeless */&lt;br /&gt;
&lt;br /&gt;
// Полное удаление пустого блока инструментов для анонимных пользователей&lt;br /&gt;
if ( mw.config.get( &#039;wgUserName&#039; ) === null ) {&lt;br /&gt;
    var siteToolsBlock = document.getElementById( &#039;site-tools&#039; );&lt;br /&gt;
    if ( siteToolsBlock ) {&lt;br /&gt;
        siteToolsBlock.remove();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.css&amp;diff=220</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.css&amp;diff=220"/>
		<updated>2026-07-20T01:06:24Z</updated>

		<summary type="html">&lt;p&gt;Comminux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.css&amp;diff=219</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.css&amp;diff=219"/>
		<updated>2026-07-20T01:05:21Z</updated>

		<summary type="html">&lt;p&gt;Comminux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;br /&gt;
&lt;br /&gt;
/* Полное принудительное скрытие блока инструментов для всех гостей в Timeless */&lt;br /&gt;
body.mw-anon #mw-site-navigation #site-tools.sidebar-chunk,&lt;br /&gt;
body.anon #mw-site-navigation #site-tools.sidebar-chunk,&lt;br /&gt;
.skin-timeless.mw-anon #site-tools {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
    visibility: hidden !important;&lt;br /&gt;
    height: 0 !important;&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.css&amp;diff=218</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.css&amp;diff=218"/>
		<updated>2026-07-20T01:02:56Z</updated>

		<summary type="html">&lt;p&gt;Comminux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;br /&gt;
&lt;br /&gt;
/* Жесткое скрытие блока инструментов и его отступов для неавторизованных гостей */&lt;br /&gt;
body.anon #site-tools.sidebar-chunk,&lt;br /&gt;
body.mw-anon #site-tools,&lt;br /&gt;
.anon #site-tools {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
    height: 0 !important;&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.css&amp;diff=217</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Timeless.css&amp;diff=217"/>
		<updated>2026-07-20T01:02:22Z</updated>

		<summary type="html">&lt;p&gt;Comminux: TImeless test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;br /&gt;
&lt;br /&gt;
body.anon #site-tools {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=216</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=216"/>
		<updated>2026-07-20T01:02:06Z</updated>

		<summary type="html">&lt;p&gt;Comminux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
#footer-places-privacy { display: none !important; }&lt;br /&gt;
#footer-places-about { display: none !important; }&lt;br /&gt;
#footer-places-disclaimers { display: none !important; }&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=215</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=215"/>
		<updated>2026-07-20T01:01:22Z</updated>

		<summary type="html">&lt;p&gt;Comminux: TImeless test 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
#footer-places-privacy { display: none !important; }&lt;br /&gt;
#footer-places-about { display: none !important; }&lt;br /&gt;
#footer-places-disclaimers { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Жесткое скрытие блока инструментов и его отступов для неавторизованных гостей */&lt;br /&gt;
body.anon #site-tools.sidebar-chunk,&lt;br /&gt;
body.mw-anon #site-tools,&lt;br /&gt;
.anon #site-tools {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
    height: 0 !important;&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=214</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=214"/>
		<updated>2026-07-20T00:58:42Z</updated>

		<summary type="html">&lt;p&gt;Comminux: TImeless test 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
#footer-places-privacy { display: none !important; }&lt;br /&gt;
#footer-places-about { display: none !important; }&lt;br /&gt;
#footer-places-disclaimers { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Скрыть блок инструментов в боковой панели Timeless только для анонимов */&lt;br /&gt;
body.anon #site-tools {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=213</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=213"/>
		<updated>2026-07-20T00:57:15Z</updated>

		<summary type="html">&lt;p&gt;Comminux: TImeless test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
#footer-places-privacy { display: none !important; }&lt;br /&gt;
#footer-places-about { display: none !important; }&lt;br /&gt;
#footer-places-disclaimers { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Скрыть блок инструментов в боковой панели Timeless только для анонимов */&lt;br /&gt;
body.anon #p-tb {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.js&amp;diff=212</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.js&amp;diff=212"/>
		<updated>2026-07-20T00:32:53Z</updated>

		<summary type="html">&lt;p&gt;Comminux: MF Test 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=211</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=211"/>
		<updated>2026-07-20T00:32:33Z</updated>

		<summary type="html">&lt;p&gt;Comminux: MF Test 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
#footer-places-privacy { display: none !important; }&lt;br /&gt;
#footer-places-about { display: none !important; }&lt;br /&gt;
#footer-places-disclaimers { display: none !important; }&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.js&amp;diff=210</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.js&amp;diff=210"/>
		<updated>2026-07-20T00:31:19Z</updated>

		<summary type="html">&lt;p&gt;Comminux: MF Test 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
&lt;br /&gt;
// Ждем, пока MediaWiki полностью построит контент страницы&lt;br /&gt;
mw.hook(&#039;wikipage.content&#039;).add(function($content) {&lt;br /&gt;
    // Находим все заголовки и секции и удаляем у них классы мобильного сворачивания&lt;br /&gt;
    $content.find(&#039;.section-heading&#039;).removeClass(&#039;section-heading&#039;);&lt;br /&gt;
    $content.find(&#039;.collapsible-section&#039;).removeClass(&#039;collapsible-section&#039;).show();&lt;br /&gt;
    &lt;br /&gt;
    // Удаляем обработчики кликов, которые MobileFrontend вешает на заголовки&lt;br /&gt;
    $content.find(&#039;h2, h3, h4&#039;).off(&#039;click&#039;);&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=209</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=209"/>
		<updated>2026-07-20T00:30:46Z</updated>

		<summary type="html">&lt;p&gt;Comminux: MF Test 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
#footer-places-privacy { display: none !important; }&lt;br /&gt;
#footer-places-about { display: none !important; }&lt;br /&gt;
#footer-places-disclaimers { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Полная блокировка сворачивания: перебиваем любые JS-скрипты */&lt;br /&gt;
.mw-parser-output .mf-section-0,&lt;br /&gt;
.mw-parser-output section,&lt;br /&gt;
.mw-parser-output .section-heading + div,&lt;br /&gt;
.mw-parser-output div.openSection {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    visibility: visible !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    opacity: 1 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Принудительно убираем класс сворачивания, если JS успел его выдать */&lt;br /&gt;
.mw-parser-output .lazy-loaded-context,&lt;br /&gt;
.mw-parser-output .collapsible-section {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Скрываем мобильные иконки-стрелочки */&lt;br /&gt;
.mw-parser-output .section-heading .mw-ui-icon-mf-expand,&lt;br /&gt;
.mw-parser-output .section-heading .indicator {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=208</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=MediaWiki:Common.css&amp;diff=208"/>
		<updated>2026-07-20T00:28:28Z</updated>

		<summary type="html">&lt;p&gt;Comminux: MF Test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Размещённый здесь CSS будет применяться ко всем темам оформления */&lt;br /&gt;
#footer-places-privacy { display: none !important; }&lt;br /&gt;
#footer-places-about { display: none !important; }&lt;br /&gt;
#footer-places-disclaimers { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Принудительно разворачиваем и показываем разделы в MobileFrontend */&lt;br /&gt;
.mw-parser-output .mf-section-0,&lt;br /&gt;
.mw-parser-output .section-heading + div,&lt;br /&gt;
.mw-parser-output .section-heading + section {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    visibility: visible !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    opacity: 1 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Скрываем мобильные стрелочки (иконки раскрытия), так как кликать больше не нужно */&lt;br /&gt;
.mw-parser-output .section-heading .mw-ui-icon-mf-expand,&lt;br /&gt;
.mw-parser-output .section-heading .indicator {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=207</id>
		<title>Полезные команды Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=207"/>
		<updated>2026-07-20T00:21:21Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Фикс категории&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.&lt;br /&gt;
&lt;br /&gt;
== Файловые операции ==&lt;br /&gt;
=== Базовые команды ===&lt;br /&gt;
&lt;br /&gt;
Создать символическую ссылку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /original/path/to/file /path/to/symlink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие команды ===&lt;br /&gt;
&lt;br /&gt;
Запустить команду pwd -P в текущем каталоге и в поддиректориях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;find . -type d -exec sh -c &#039;cd -P -- &amp;quot;{}&amp;quot; &amp;amp;&amp;amp; pwd -P&#039; \;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переименовать кириллические файлы в каталоге&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;find -mindepth 1 -exec sh -c &#039;mv &amp;quot;$1&amp;quot; &amp;quot;$(echo &amp;quot;$1&amp;quot; | iconv -f cp1252 -t cp850 | iconv -f cp866 )&amp;quot;&#039; sh {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Права доступа ===&lt;br /&gt;
Изменить владельца и группу для файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown username:usergroup file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать режима доступа файла или папки в восьмеричной системе счисления Октал. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat -c %a file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оценка использования пространства накопителя ===&lt;br /&gt;
Общий отчёт об использовании пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;df -h /&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информация об использовании файлами и директориями пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -h file.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -ahx . | sort -rh | head -10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование накопителя ===&lt;br /&gt;
Низкоуровневое форматирование накопителя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Принудительно обновить таблицу разделов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo partprobe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Архивы ===&lt;br /&gt;
==== Создание ====&lt;br /&gt;
Создать tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив и исключить добавление отдельного файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --exclude=&#039;file3&#039; -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf site1.tar -C /var/www/ site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Gzip сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -czf archive.tar.gz file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Bz2 сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cjf archive.tar.bz2 file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Просмотр содержимого ====&lt;br /&gt;
Посмотреть содержимое tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -tf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l archive.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -Z1 archive.zip | xargs -I {} rm -v &amp;quot;{}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip | grep -aEv &#039;^Archive:&#039; | iconv -f iso8859-1 -t cp850 | iconv -f cp866&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Распаковка ====&lt;br /&gt;
Распаковать tar архив в текущую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распаковать tar архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar -C ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другие возможные tar команды собраны здесь:&lt;br /&gt;
&lt;br /&gt;
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/&lt;br /&gt;
&lt;br /&gt;
Распаковать zip архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip archive.zip -d ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Модификация архива ====&lt;br /&gt;
&lt;br /&gt;
Добавить новый файл в tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -rvf archive.tar newfile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл из tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --delete -f archive.tar file1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Portable Document Format (PDF) ===&lt;br /&gt;
Склеить несколько pdf файлов в один.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрезать pdf по листам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftoppm Input.pdf outputname -png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изображения ===&lt;br /&gt;
==== ExifTool ====&lt;br /&gt;
Прочитать EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool 1.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool -all= 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Изменить размер изображения&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 3.jpg -resize 128x128 1.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перевернуть изображение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 4.jpg -rotate 90 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 5.jpg Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 6.jpg -background white -page a4 Output.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SANE ====&lt;br /&gt;
Получить изображение со сканера или МФУ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scanimage --format=png --output-file test.png --progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Видео ===&lt;br /&gt;
==== FFmpeg ====&lt;br /&gt;
Конвертировать аудиодорожку видео в формат MP3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i filename.mp4 filename.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделать копию видео в формате mp4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i example.mkv -c copy example.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров (Создание хардсаба).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;02.ass&amp;quot; -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;03.ass&amp;quot; -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вырезать отрезок видео в выбранном диапазоне времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MKVToolNix ====&lt;br /&gt;
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== yt-dlp ====&lt;br /&gt;
&lt;br /&gt;
Cкачать плейлист YT с названием плейлиста в качестве имени папки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;yt-dlp -f &amp;quot;bestvideo[height&amp;lt;=1080]+bestaudio/best[height&amp;lt;=1080]&amp;quot; --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /&amp;quot;path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s&amp;quot; --embed-chapters https://youtube.com/playlist?list=xyz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сетевые команды ==&lt;br /&gt;
Отобразить информацию о сетевых соединениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;netstat -na&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт OpenVPN профиля в NetworkManager.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nmcli connection import type openvpn file ~/VPNs/name.ovpn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Послать Wake-on-LAN пакет на удаленную машину.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wol 00:00:00:00:00:00 -h example.com -p 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оптимизированная передача изображения с удаленного X сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo grep -r &#039;&amp;quot;-&amp;quot; &amp;quot;-&amp;quot;&#039; /var/log/nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.&lt;br /&gt;
&lt;br /&gt;
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -r -k -l 2 -p -E -nc http://site.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка файрвола ===&lt;br /&gt;
&lt;br /&gt;
==== UFW - Uncomplicated Firewall ====&lt;br /&gt;
Используется по умолчанию в Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Отобразить список активных правил в файрволе UFW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw status numbered&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 7-е правило.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw delete 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw insert 1 deny from 52.185.71.28 to any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Базы данных ==&lt;br /&gt;
&lt;br /&gt;
==== MariaDB ====&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка подключения к базе данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u db_user -p -D db_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экспортировать базу данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb-dump -u db_user -p db_name &amp;gt; backup.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импортировать базу данных из резервной копии. Необходимо, чтобы база данных была [[Конфигурации приложений#MariaDB|создана перед импортом]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u db_user -p new_db &amp;lt; backup.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Примечание|Если при импорте будет возникать ошибка ERROR at line 1: Unknown command &#039;\-&#039;., то требуется дополнительное действие: https://habr.com/ru/articles/824490/}}&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
Дамп всех баз данных в один файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;postgres pg_dumpall &amp;gt; postgres_databases.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Виртуализация ==&lt;br /&gt;
=== Контейнеры ===&lt;br /&gt;
==== Docker ====&lt;br /&gt;
Собрать новый образ из Dockerfile, расположенного в текущей директории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker buildx build --platform=linux/amd64 .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новый контейнер в фоне и дать ему определенное имя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список всех контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список загруженных или собранных образов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открыть bash сессию в запущенном контейнере&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker exec -it container_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -it image_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнер с данными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm container_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm $(docker ps -a -q --filter &amp;quot;ancestor=containrrr/watchtower&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить образ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi image_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все неактивные образы из системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi $(docker images -q)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать пути к файловым системам используемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker inspect $(sudo docker ps -qa) |  jq -r &#039;map([.Name, .GraphDriver.Data.MergedDir]) | .[] | &amp;quot;\(.[0])\t\(.[1])&amp;quot;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker system prune -a -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить политику перезапуска для существующего контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker update --restart unless-stopped open-webui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание компьютера ==&lt;br /&gt;
=== Очистка кэша ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccache -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить ccache кэш.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;trizen -Scc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить trizen кэш.&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Composer ===&lt;br /&gt;
Создать новый проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer create-project laravel/laravel example-site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить необходимые зависимости в существующий проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустить скрипт dev, определенный в composer.json проекта.&lt;br /&gt;
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer run dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pacman  ===&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm /var/lib/pacman/db.lck&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл блокировки базы данных pacman.&lt;br /&gt;
&lt;br /&gt;
== Системы сборки ==&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scons -c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить scons кэш.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
=== Android Debug Bridge (adb) ===&lt;br /&gt;
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb backup -noapk com.unciv.app -f unciv-data.ab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить список приложений, которые могут читать последний элемент в буфере обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops query-op READ_CLIPBOARD allow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запретить доступ к буферу обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops set com.octopod.russianpost.client.android READ_CLIPBOARD ignore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bash ==&lt;br /&gt;
=== Служебные символы ===&lt;br /&gt;
Запуск скрипта через эквивалент команды &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через &amp;lt;code&amp;gt;echo&amp;lt;/code&amp;gt; и регулярные выражения ($).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;. environment.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFI - менеджер загрузки ==&lt;br /&gt;
=== efibootmgr ===&lt;br /&gt;
==== Восстановление загрузочной записи ====&lt;br /&gt;
Обычно восстановление загрузочной записи загрузчика &#039;&#039;&#039;systemd-boot&#039;&#039;&#039; требуется после обновления прошивки (BIOS) материнской платы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Очистка и сортировка загрузочных записей ====&lt;br /&gt;
Отобразить очередь загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 4-ую запись из очереди загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -b 4 -B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить порядок загрузки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -o 0,1,2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
=== Работа с репозиториями ===&lt;br /&gt;
Инициализировать структуру Git репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить файл README.md в индекс существующего репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add README.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осуществить коммит изменений с выбранным заголовком.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &#039;Initial commit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote add origin &amp;lt;GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -u origin main&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать адреса удаленных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес удаленного репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote set-url origin &amp;lt;NEW_GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ветвление ===&lt;br /&gt;
Создать новую ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключиться на требуемую ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новую ветвь и переключиться на неё в одной команде.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -b branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить локальную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch -d branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить удаленную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -d origin branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить удаленную ветку в новую для этого локальную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch gitea master:fork&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push gitea fork:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch origin pull/103781/head:pr-103781&lt;br /&gt;
git checkout pr-103781&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все ветви, которых больше нет на удалённом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch --prune&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Инициализация, получение и извлечение всех существующих вложенных подмодулей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bare репозиторий ===&lt;br /&gt;
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для конвертации bare репозитория в &amp;quot;нормальное&amp;quot; состояние, требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git config core.bare false&lt;br /&gt;
mkdir .git&lt;br /&gt;
mv * .git/&lt;br /&gt;
git reset --hard&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SOPS ===&lt;br /&gt;
SOPS - простой и удобный инструмент для управления секретами.&lt;br /&gt;
&lt;br /&gt;
Зашифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расшифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd ==&lt;br /&gt;
=== journalctl ===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo journalctl -u act_runner.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать все сообщения для определенного сервиса.&lt;br /&gt;
&lt;br /&gt;
== X11-сервер ==&lt;br /&gt;
Включение возможности изменения раскладки клавиатуры через Alt + Shift.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setxkbmap -layout us,ru -option grp:alt_shift_toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xrandr --output eDP1 --dpi 135.09&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удаленно запустить приложение на основном дисплее.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY=:0 anydesk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=206</id>
		<title>Полезные команды Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=206"/>
		<updated>2026-07-20T00:20:35Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* MariaDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.&lt;br /&gt;
&lt;br /&gt;
== Файловые операции ==&lt;br /&gt;
=== Базовые команды ===&lt;br /&gt;
&lt;br /&gt;
Создать символическую ссылку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /original/path/to/file /path/to/symlink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие команды ===&lt;br /&gt;
&lt;br /&gt;
Запустить команду pwd -P в текущем каталоге и в поддиректориях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;find . -type d -exec sh -c &#039;cd -P -- &amp;quot;{}&amp;quot; &amp;amp;&amp;amp; pwd -P&#039; \;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переименовать кириллические файлы в каталоге&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;find -mindepth 1 -exec sh -c &#039;mv &amp;quot;$1&amp;quot; &amp;quot;$(echo &amp;quot;$1&amp;quot; | iconv -f cp1252 -t cp850 | iconv -f cp866 )&amp;quot;&#039; sh {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Права доступа ===&lt;br /&gt;
Изменить владельца и группу для файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown username:usergroup file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать режима доступа файла или папки в восьмеричной системе счисления Октал. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat -c %a file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оценка использования пространства накопителя ===&lt;br /&gt;
Общий отчёт об использовании пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;df -h /&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информация об использовании файлами и директориями пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -h file.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -ahx . | sort -rh | head -10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование накопителя ===&lt;br /&gt;
Низкоуровневое форматирование накопителя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Принудительно обновить таблицу разделов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo partprobe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Архивы ===&lt;br /&gt;
==== Создание ====&lt;br /&gt;
Создать tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив и исключить добавление отдельного файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --exclude=&#039;file3&#039; -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf site1.tar -C /var/www/ site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Gzip сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -czf archive.tar.gz file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Bz2 сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cjf archive.tar.bz2 file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Просмотр содержимого ====&lt;br /&gt;
Посмотреть содержимое tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -tf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l archive.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -Z1 archive.zip | xargs -I {} rm -v &amp;quot;{}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip | grep -aEv &#039;^Archive:&#039; | iconv -f iso8859-1 -t cp850 | iconv -f cp866&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Распаковка ====&lt;br /&gt;
Распаковать tar архив в текущую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распаковать tar архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar -C ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другие возможные tar команды собраны здесь:&lt;br /&gt;
&lt;br /&gt;
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/&lt;br /&gt;
&lt;br /&gt;
Распаковать zip архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip archive.zip -d ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Модификация архива ====&lt;br /&gt;
&lt;br /&gt;
Добавить новый файл в tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -rvf archive.tar newfile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл из tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --delete -f archive.tar file1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Portable Document Format (PDF) ===&lt;br /&gt;
Склеить несколько pdf файлов в один.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрезать pdf по листам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftoppm Input.pdf outputname -png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изображения ===&lt;br /&gt;
==== ExifTool ====&lt;br /&gt;
Прочитать EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool 1.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool -all= 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Изменить размер изображения&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 3.jpg -resize 128x128 1.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перевернуть изображение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 4.jpg -rotate 90 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 5.jpg Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 6.jpg -background white -page a4 Output.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SANE ====&lt;br /&gt;
Получить изображение со сканера или МФУ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scanimage --format=png --output-file test.png --progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Видео ===&lt;br /&gt;
==== FFmpeg ====&lt;br /&gt;
Конвертировать аудиодорожку видео в формат MP3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i filename.mp4 filename.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделать копию видео в формате mp4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i example.mkv -c copy example.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров (Создание хардсаба).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;02.ass&amp;quot; -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;03.ass&amp;quot; -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вырезать отрезок видео в выбранном диапазоне времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MKVToolNix ====&lt;br /&gt;
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== yt-dlp ====&lt;br /&gt;
&lt;br /&gt;
Cкачать плейлист YT с названием плейлиста в качестве имени папки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;yt-dlp -f &amp;quot;bestvideo[height&amp;lt;=1080]+bestaudio/best[height&amp;lt;=1080]&amp;quot; --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /&amp;quot;path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s&amp;quot; --embed-chapters https://youtube.com/playlist?list=xyz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сетевые команды ==&lt;br /&gt;
Отобразить информацию о сетевых соединениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;netstat -na&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт OpenVPN профиля в NetworkManager.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nmcli connection import type openvpn file ~/VPNs/name.ovpn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Послать Wake-on-LAN пакет на удаленную машину.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wol 00:00:00:00:00:00 -h example.com -p 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оптимизированная передача изображения с удаленного X сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo grep -r &#039;&amp;quot;-&amp;quot; &amp;quot;-&amp;quot;&#039; /var/log/nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.&lt;br /&gt;
&lt;br /&gt;
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -r -k -l 2 -p -E -nc http://site.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка файрвола ===&lt;br /&gt;
&lt;br /&gt;
==== UFW - Uncomplicated Firewall ====&lt;br /&gt;
Используется по умолчанию в Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Отобразить список активных правил в файрволе UFW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw status numbered&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 7-е правило.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw delete 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw insert 1 deny from 52.185.71.28 to any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Базы данных ==&lt;br /&gt;
&lt;br /&gt;
==== MariaDB ====&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка подключения к базе данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u db_user -p -D db_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экспортировать базу данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb-dump -u db_user -p db_name &amp;gt; backup.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импортировать базу данных из резервной копии. Необходимо, чтобы база данных была [[Конфигурации приложений#MariaDB|создана перед импортом]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u db_user -p new_db &amp;lt; backup.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Примечание|Если при импорте будет возникать ошибка ERROR at line 1: Unknown command &#039;\-&#039;., то требуется дополнительное действие: https://habr.com/ru/articles/824490/}}&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
Дамп всех баз данных в один файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;postgres pg_dumpall &amp;gt; postgres_databases.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Виртуализация ==&lt;br /&gt;
=== Контейнеры ===&lt;br /&gt;
==== Docker ====&lt;br /&gt;
Собрать новый образ из Dockerfile, расположенного в текущей директории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker buildx build --platform=linux/amd64 .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новый контейнер в фоне и дать ему определенное имя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список всех контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список загруженных или собранных образов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открыть bash сессию в запущенном контейнере&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker exec -it container_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -it image_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнер с данными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm container_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm $(docker ps -a -q --filter &amp;quot;ancestor=containrrr/watchtower&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить образ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi image_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все неактивные образы из системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi $(docker images -q)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать пути к файловым системам используемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker inspect $(sudo docker ps -qa) |  jq -r &#039;map([.Name, .GraphDriver.Data.MergedDir]) | .[] | &amp;quot;\(.[0])\t\(.[1])&amp;quot;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker system prune -a -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить политику перезапуска для существующего контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker update --restart unless-stopped open-webui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание компьютера ==&lt;br /&gt;
=== Очистка кэша ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccache -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить ccache кэш.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;trizen -Scc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить trizen кэш.&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Composer ===&lt;br /&gt;
Создать новый проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer create-project laravel/laravel example-site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить необходимые зависимости в существующий проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустить скрипт dev, определенный в composer.json проекта.&lt;br /&gt;
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer run dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pacman  ===&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm /var/lib/pacman/db.lck&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл блокировки базы данных pacman.&lt;br /&gt;
&lt;br /&gt;
== Системы сборки ==&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scons -c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить scons кэш.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
=== Android Debug Bridge (adb) ===&lt;br /&gt;
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb backup -noapk com.unciv.app -f unciv-data.ab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить список приложений, которые могут читать последний элемент в буфере обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops query-op READ_CLIPBOARD allow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запретить доступ к буферу обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops set com.octopod.russianpost.client.android READ_CLIPBOARD ignore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bash ==&lt;br /&gt;
=== Служебные символы ===&lt;br /&gt;
Запуск скрипта через эквивалент команды &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через &amp;lt;code&amp;gt;echo&amp;lt;/code&amp;gt; и регулярные выражения ($).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;. environment.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFI - менеджер загрузки ==&lt;br /&gt;
=== efibootmgr ===&lt;br /&gt;
==== Восстановление загрузочной записи ====&lt;br /&gt;
Обычно восстановление загрузочной записи загрузчика &#039;&#039;&#039;systemd-boot&#039;&#039;&#039; требуется после обновления прошивки (BIOS) материнской платы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Очистка и сортировка загрузочных записей ====&lt;br /&gt;
Отобразить очередь загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 4-ую запись из очереди загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -b 4 -B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить порядок загрузки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -o 0,1,2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
=== Работа с репозиториями ===&lt;br /&gt;
Инициализировать структуру Git репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить файл README.md в индекс существующего репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add README.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осуществить коммит изменений с выбранным заголовком.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &#039;Initial commit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote add origin &amp;lt;GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -u origin main&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать адреса удаленных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес удаленного репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote set-url origin &amp;lt;NEW_GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ветвление ===&lt;br /&gt;
Создать новую ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключиться на требуемую ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новую ветвь и переключиться на неё в одной команде.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -b branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить локальную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch -d branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить удаленную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -d origin branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить удаленную ветку в новую для этого локальную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch gitea master:fork&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push gitea fork:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch origin pull/103781/head:pr-103781&lt;br /&gt;
git checkout pr-103781&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все ветви, которых больше нет на удалённом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch --prune&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Инициализация, получение и извлечение всех существующих вложенных подмодулей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bare репозиторий ===&lt;br /&gt;
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для конвертации bare репозитория в &amp;quot;нормальное&amp;quot; состояние, требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git config core.bare false&lt;br /&gt;
mkdir .git&lt;br /&gt;
mv * .git/&lt;br /&gt;
git reset --hard&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SOPS ===&lt;br /&gt;
SOPS - простой и удобный инструмент для управления секретами.&lt;br /&gt;
&lt;br /&gt;
Зашифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расшифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd ==&lt;br /&gt;
=== journalctl ===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo journalctl -u act_runner.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать все сообщения для определенного сервиса.&lt;br /&gt;
&lt;br /&gt;
== X11-сервер ==&lt;br /&gt;
Включение возможности изменения раскладки клавиатуры через Alt + Shift.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setxkbmap -layout us,ru -option grp:alt_shift_toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xrandr --output eDP1 --dpi 135.09&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удаленно запустить приложение на основном дисплее.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY=:0 anydesk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=205</id>
		<title>Шаблон:Внимание</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=205"/>
		<updated>2026-07-19T23:34:22Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Поддержка редактирования в визуальном редакторе&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #fff3cd; border-left: 5px solid #ffc107; padding: 12px; margin: 1em 0; border-radius: 0 4px 4px 0; color: #856404; font-size: 0.95em; box-shadow: 0 1px 2px rgba(0,0,0,0.05);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; margin-bottom: 4px; display: flex; align-items: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;margin-right: 8px; font-size: 1.1em;&amp;quot;&amp;gt;⚠️&amp;lt;/span&amp;gt; {{{заголовок|Внимание!}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{{1|Внимание по умолчанию}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Шаблоны:Оформление]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Текст предупреждения&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Основное содержимое вашей предупреждающей плашки.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;заголовок&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Заголовок&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Собственный заголовок вместо стандартного слова \&amp;quot;Внимание!\&amp;quot;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;Внимание!&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Предупреждающий шаблон желтого цвета для привлечения внимания к важной информации.&amp;quot;,&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%87%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=204</id>
		<title>Шаблон:Примечание</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%87%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=204"/>
		<updated>2026-07-19T23:33:30Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Убрал категорию&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;mw-message-box&amp;quot; style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #a2a9b1; padding: 12px 15px; margin: 1em 0; border-radius: 0 2px 2px 0; color: #202122; font-size: 0.95em; box-shadow: 0 1px 2px rgba(0,0,0,0.05);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; margin-bottom: 4px; color: #404244; display: flex; align-items: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;margin-right: 8px; font-size: 1.1em;&amp;quot;&amp;gt;ℹ️&amp;lt;/span&amp;gt; {{{заголовок|Примечание}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{{1|Введите текст заметки}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Текст заметки&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Основное содержимое вашей плашки.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;заголовок&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Заголовок&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Собственный заголовок вместо стандартного слова \&amp;quot;Примечание\&amp;quot;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;Примечание&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Нейтральный шаблон для оформления заметок и примечаний.&amp;quot;,&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=203</id>
		<title>Полезные команды Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=203"/>
		<updated>2026-07-19T23:32:22Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* MariaDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.&lt;br /&gt;
&lt;br /&gt;
== Файловые операции ==&lt;br /&gt;
=== Базовые команды ===&lt;br /&gt;
&lt;br /&gt;
Создать символическую ссылку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /original/path/to/file /path/to/symlink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие команды ===&lt;br /&gt;
&lt;br /&gt;
Запустить команду pwd -P в текущем каталоге и в поддиректориях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;find . -type d -exec sh -c &#039;cd -P -- &amp;quot;{}&amp;quot; &amp;amp;&amp;amp; pwd -P&#039; \;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переименовать кириллические файлы в каталоге&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;find -mindepth 1 -exec sh -c &#039;mv &amp;quot;$1&amp;quot; &amp;quot;$(echo &amp;quot;$1&amp;quot; | iconv -f cp1252 -t cp850 | iconv -f cp866 )&amp;quot;&#039; sh {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Права доступа ===&lt;br /&gt;
Изменить владельца и группу для файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown username:usergroup file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать режима доступа файла или папки в восьмеричной системе счисления Октал. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat -c %a file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оценка использования пространства накопителя ===&lt;br /&gt;
Общий отчёт об использовании пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;df -h /&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информация об использовании файлами и директориями пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -h file.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -ahx . | sort -rh | head -10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование накопителя ===&lt;br /&gt;
Низкоуровневое форматирование накопителя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Принудительно обновить таблицу разделов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo partprobe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Архивы ===&lt;br /&gt;
==== Создание ====&lt;br /&gt;
Создать tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив и исключить добавление отдельного файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --exclude=&#039;file3&#039; -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf site1.tar -C /var/www/ site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Gzip сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -czf archive.tar.gz file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Bz2 сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cjf archive.tar.bz2 file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Просмотр содержимого ====&lt;br /&gt;
Посмотреть содержимое tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -tf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l archive.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -Z1 archive.zip | xargs -I {} rm -v &amp;quot;{}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip | grep -aEv &#039;^Archive:&#039; | iconv -f iso8859-1 -t cp850 | iconv -f cp866&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Распаковка ====&lt;br /&gt;
Распаковать tar архив в текущую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распаковать tar архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar -C ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другие возможные tar команды собраны здесь:&lt;br /&gt;
&lt;br /&gt;
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/&lt;br /&gt;
&lt;br /&gt;
Распаковать zip архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip archive.zip -d ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Модификация архива ====&lt;br /&gt;
&lt;br /&gt;
Добавить новый файл в tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -rvf archive.tar newfile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл из tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --delete -f archive.tar file1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Portable Document Format (PDF) ===&lt;br /&gt;
Склеить несколько pdf файлов в один.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрезать pdf по листам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftoppm Input.pdf outputname -png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изображения ===&lt;br /&gt;
==== ExifTool ====&lt;br /&gt;
Прочитать EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool 1.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool -all= 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Изменить размер изображения&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 3.jpg -resize 128x128 1.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перевернуть изображение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 4.jpg -rotate 90 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 5.jpg Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 6.jpg -background white -page a4 Output.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SANE ====&lt;br /&gt;
Получить изображение со сканера или МФУ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scanimage --format=png --output-file test.png --progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Видео ===&lt;br /&gt;
==== FFmpeg ====&lt;br /&gt;
Конвертировать аудиодорожку видео в формат MP3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i filename.mp4 filename.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделать копию видео в формате mp4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i example.mkv -c copy example.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров (Создание хардсаба).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;02.ass&amp;quot; -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;03.ass&amp;quot; -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вырезать отрезок видео в выбранном диапазоне времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MKVToolNix ====&lt;br /&gt;
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== yt-dlp ====&lt;br /&gt;
&lt;br /&gt;
Cкачать плейлист YT с названием плейлиста в качестве имени папки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;yt-dlp -f &amp;quot;bestvideo[height&amp;lt;=1080]+bestaudio/best[height&amp;lt;=1080]&amp;quot; --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /&amp;quot;path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s&amp;quot; --embed-chapters https://youtube.com/playlist?list=xyz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сетевые команды ==&lt;br /&gt;
Отобразить информацию о сетевых соединениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;netstat -na&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт OpenVPN профиля в NetworkManager.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nmcli connection import type openvpn file ~/VPNs/name.ovpn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Послать Wake-on-LAN пакет на удаленную машину.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wol 00:00:00:00:00:00 -h example.com -p 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оптимизированная передача изображения с удаленного X сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo grep -r &#039;&amp;quot;-&amp;quot; &amp;quot;-&amp;quot;&#039; /var/log/nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.&lt;br /&gt;
&lt;br /&gt;
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -r -k -l 2 -p -E -nc http://site.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка файрвола ===&lt;br /&gt;
&lt;br /&gt;
==== UFW - Uncomplicated Firewall ====&lt;br /&gt;
Используется по умолчанию в Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Отобразить список активных правил в файрволе UFW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw status numbered&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 7-е правило.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw delete 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw insert 1 deny from 52.185.71.28 to any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Базы данных ==&lt;br /&gt;
&lt;br /&gt;
==== MariaDB ====&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экспортировать базу данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb-dump -u username -p database_name &amp;gt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импортировать базу данных из резервной копии. Необходимо, чтобы база данных была [[Конфигурации приложений#MariaDB|создана перед импортом]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u username -p new_database &amp;lt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Примечание|Если при импорте будет возникать ошибка ERROR at line 1: Unknown command &#039;\-&#039;., то требуется дополнительное действие: https://habr.com/ru/articles/824490/}}&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
Дамп всех баз данных в один файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;postgres pg_dumpall &amp;gt; postgres_databases.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Виртуализация ==&lt;br /&gt;
=== Контейнеры ===&lt;br /&gt;
==== Docker ====&lt;br /&gt;
Собрать новый образ из Dockerfile, расположенного в текущей директории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker buildx build --platform=linux/amd64 .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новый контейнер в фоне и дать ему определенное имя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список всех контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список загруженных или собранных образов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открыть bash сессию в запущенном контейнере&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker exec -it container_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -it image_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнер с данными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm container_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm $(docker ps -a -q --filter &amp;quot;ancestor=containrrr/watchtower&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить образ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi image_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все неактивные образы из системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi $(docker images -q)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать пути к файловым системам используемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker inspect $(sudo docker ps -qa) |  jq -r &#039;map([.Name, .GraphDriver.Data.MergedDir]) | .[] | &amp;quot;\(.[0])\t\(.[1])&amp;quot;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker system prune -a -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить политику перезапуска для существующего контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker update --restart unless-stopped open-webui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание компьютера ==&lt;br /&gt;
=== Очистка кэша ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccache -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить ccache кэш.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;trizen -Scc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить trizen кэш.&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Composer ===&lt;br /&gt;
Создать новый проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer create-project laravel/laravel example-site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить необходимые зависимости в существующий проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустить скрипт dev, определенный в composer.json проекта.&lt;br /&gt;
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer run dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pacman  ===&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm /var/lib/pacman/db.lck&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл блокировки базы данных pacman.&lt;br /&gt;
&lt;br /&gt;
== Системы сборки ==&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scons -c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить scons кэш.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
=== Android Debug Bridge (adb) ===&lt;br /&gt;
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb backup -noapk com.unciv.app -f unciv-data.ab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить список приложений, которые могут читать последний элемент в буфере обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops query-op READ_CLIPBOARD allow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запретить доступ к буферу обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops set com.octopod.russianpost.client.android READ_CLIPBOARD ignore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bash ==&lt;br /&gt;
=== Служебные символы ===&lt;br /&gt;
Запуск скрипта через эквивалент команды &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через &amp;lt;code&amp;gt;echo&amp;lt;/code&amp;gt; и регулярные выражения ($).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;. environment.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFI - менеджер загрузки ==&lt;br /&gt;
=== efibootmgr ===&lt;br /&gt;
==== Восстановление загрузочной записи ====&lt;br /&gt;
Обычно восстановление загрузочной записи загрузчика &#039;&#039;&#039;systemd-boot&#039;&#039;&#039; требуется после обновления прошивки (BIOS) материнской платы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Очистка и сортировка загрузочных записей ====&lt;br /&gt;
Отобразить очередь загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 4-ую запись из очереди загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -b 4 -B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить порядок загрузки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -o 0,1,2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
=== Работа с репозиториями ===&lt;br /&gt;
Инициализировать структуру Git репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить файл README.md в индекс существующего репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add README.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осуществить коммит изменений с выбранным заголовком.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &#039;Initial commit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote add origin &amp;lt;GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -u origin main&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать адреса удаленных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес удаленного репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote set-url origin &amp;lt;NEW_GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ветвление ===&lt;br /&gt;
Создать новую ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключиться на требуемую ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новую ветвь и переключиться на неё в одной команде.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -b branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить локальную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch -d branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить удаленную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -d origin branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить удаленную ветку в новую для этого локальную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch gitea master:fork&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push gitea fork:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch origin pull/103781/head:pr-103781&lt;br /&gt;
git checkout pr-103781&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все ветви, которых больше нет на удалённом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch --prune&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Инициализация, получение и извлечение всех существующих вложенных подмодулей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bare репозиторий ===&lt;br /&gt;
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для конвертации bare репозитория в &amp;quot;нормальное&amp;quot; состояние, требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git config core.bare false&lt;br /&gt;
mkdir .git&lt;br /&gt;
mv * .git/&lt;br /&gt;
git reset --hard&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SOPS ===&lt;br /&gt;
SOPS - простой и удобный инструмент для управления секретами.&lt;br /&gt;
&lt;br /&gt;
Зашифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расшифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd ==&lt;br /&gt;
=== journalctl ===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo journalctl -u act_runner.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать все сообщения для определенного сервиса.&lt;br /&gt;
&lt;br /&gt;
== X11-сервер ==&lt;br /&gt;
Включение возможности изменения раскладки клавиатуры через Alt + Shift.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setxkbmap -layout us,ru -option grp:alt_shift_toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xrandr --output eDP1 --dpi 135.09&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удаленно запустить приложение на основном дисплее.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY=:0 anydesk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=202</id>
		<title>Полезные команды Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=202"/>
		<updated>2026-07-19T23:31:55Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* MariaDB */  шаблон исправлен&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.&lt;br /&gt;
&lt;br /&gt;
== Файловые операции ==&lt;br /&gt;
=== Базовые команды ===&lt;br /&gt;
&lt;br /&gt;
Создать символическую ссылку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /original/path/to/file /path/to/symlink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие команды ===&lt;br /&gt;
&lt;br /&gt;
Запустить команду pwd -P в текущем каталоге и в поддиректориях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;find . -type d -exec sh -c &#039;cd -P -- &amp;quot;{}&amp;quot; &amp;amp;&amp;amp; pwd -P&#039; \;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переименовать кириллические файлы в каталоге&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;find -mindepth 1 -exec sh -c &#039;mv &amp;quot;$1&amp;quot; &amp;quot;$(echo &amp;quot;$1&amp;quot; | iconv -f cp1252 -t cp850 | iconv -f cp866 )&amp;quot;&#039; sh {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Права доступа ===&lt;br /&gt;
Изменить владельца и группу для файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown username:usergroup file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать режима доступа файла или папки в восьмеричной системе счисления Октал. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat -c %a file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оценка использования пространства накопителя ===&lt;br /&gt;
Общий отчёт об использовании пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;df -h /&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информация об использовании файлами и директориями пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -h file.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -ahx . | sort -rh | head -10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование накопителя ===&lt;br /&gt;
Низкоуровневое форматирование накопителя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Принудительно обновить таблицу разделов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo partprobe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Архивы ===&lt;br /&gt;
==== Создание ====&lt;br /&gt;
Создать tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив и исключить добавление отдельного файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --exclude=&#039;file3&#039; -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf site1.tar -C /var/www/ site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Gzip сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -czf archive.tar.gz file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Bz2 сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cjf archive.tar.bz2 file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Просмотр содержимого ====&lt;br /&gt;
Посмотреть содержимое tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -tf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l archive.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -Z1 archive.zip | xargs -I {} rm -v &amp;quot;{}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip | grep -aEv &#039;^Archive:&#039; | iconv -f iso8859-1 -t cp850 | iconv -f cp866&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Распаковка ====&lt;br /&gt;
Распаковать tar архив в текущую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распаковать tar архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar -C ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другие возможные tar команды собраны здесь:&lt;br /&gt;
&lt;br /&gt;
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/&lt;br /&gt;
&lt;br /&gt;
Распаковать zip архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip archive.zip -d ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Модификация архива ====&lt;br /&gt;
&lt;br /&gt;
Добавить новый файл в tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -rvf archive.tar newfile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл из tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --delete -f archive.tar file1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Portable Document Format (PDF) ===&lt;br /&gt;
Склеить несколько pdf файлов в один.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрезать pdf по листам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftoppm Input.pdf outputname -png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изображения ===&lt;br /&gt;
==== ExifTool ====&lt;br /&gt;
Прочитать EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool 1.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool -all= 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Изменить размер изображения&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 3.jpg -resize 128x128 1.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перевернуть изображение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 4.jpg -rotate 90 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 5.jpg Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 6.jpg -background white -page a4 Output.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SANE ====&lt;br /&gt;
Получить изображение со сканера или МФУ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scanimage --format=png --output-file test.png --progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Видео ===&lt;br /&gt;
==== FFmpeg ====&lt;br /&gt;
Конвертировать аудиодорожку видео в формат MP3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i filename.mp4 filename.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделать копию видео в формате mp4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i example.mkv -c copy example.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров (Создание хардсаба).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;02.ass&amp;quot; -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;03.ass&amp;quot; -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вырезать отрезок видео в выбранном диапазоне времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MKVToolNix ====&lt;br /&gt;
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== yt-dlp ====&lt;br /&gt;
&lt;br /&gt;
Cкачать плейлист YT с названием плейлиста в качестве имени папки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;yt-dlp -f &amp;quot;bestvideo[height&amp;lt;=1080]+bestaudio/best[height&amp;lt;=1080]&amp;quot; --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /&amp;quot;path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s&amp;quot; --embed-chapters https://youtube.com/playlist?list=xyz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сетевые команды ==&lt;br /&gt;
Отобразить информацию о сетевых соединениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;netstat -na&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт OpenVPN профиля в NetworkManager.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nmcli connection import type openvpn file ~/VPNs/name.ovpn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Послать Wake-on-LAN пакет на удаленную машину.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wol 00:00:00:00:00:00 -h example.com -p 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оптимизированная передача изображения с удаленного X сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo grep -r &#039;&amp;quot;-&amp;quot; &amp;quot;-&amp;quot;&#039; /var/log/nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.&lt;br /&gt;
&lt;br /&gt;
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -r -k -l 2 -p -E -nc http://site.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка файрвола ===&lt;br /&gt;
&lt;br /&gt;
==== UFW - Uncomplicated Firewall ====&lt;br /&gt;
Используется по умолчанию в Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Отобразить список активных правил в файрволе UFW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw status numbered&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 7-е правило.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw delete 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw insert 1 deny from 52.185.71.28 to any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Базы данных ==&lt;br /&gt;
&lt;br /&gt;
==== MariaDB ====&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экспортировать базу данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb-dump -u username -p database_name &amp;gt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импортировать базу данных из резервной копии. Необходимо, что база данных была [[Конфигурации приложений#MariaDB|создана перед импортом]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u username -p new_database &amp;lt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Примечание|Если при импорте будет возникать ошибка ERROR at line 1: Unknown command &#039;\-&#039;., то требуется дополнительное действие: https://habr.com/ru/articles/824490/}}&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
Дамп всех баз данных в один файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;postgres pg_dumpall &amp;gt; postgres_databases.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Виртуализация ==&lt;br /&gt;
=== Контейнеры ===&lt;br /&gt;
==== Docker ====&lt;br /&gt;
Собрать новый образ из Dockerfile, расположенного в текущей директории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker buildx build --platform=linux/amd64 .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новый контейнер в фоне и дать ему определенное имя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список всех контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список загруженных или собранных образов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открыть bash сессию в запущенном контейнере&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker exec -it container_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -it image_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнер с данными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm container_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm $(docker ps -a -q --filter &amp;quot;ancestor=containrrr/watchtower&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить образ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi image_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все неактивные образы из системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi $(docker images -q)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать пути к файловым системам используемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker inspect $(sudo docker ps -qa) |  jq -r &#039;map([.Name, .GraphDriver.Data.MergedDir]) | .[] | &amp;quot;\(.[0])\t\(.[1])&amp;quot;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker system prune -a -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить политику перезапуска для существующего контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker update --restart unless-stopped open-webui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание компьютера ==&lt;br /&gt;
=== Очистка кэша ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccache -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить ccache кэш.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;trizen -Scc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить trizen кэш.&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Composer ===&lt;br /&gt;
Создать новый проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer create-project laravel/laravel example-site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить необходимые зависимости в существующий проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустить скрипт dev, определенный в composer.json проекта.&lt;br /&gt;
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer run dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pacman  ===&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm /var/lib/pacman/db.lck&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл блокировки базы данных pacman.&lt;br /&gt;
&lt;br /&gt;
== Системы сборки ==&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scons -c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить scons кэш.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
=== Android Debug Bridge (adb) ===&lt;br /&gt;
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb backup -noapk com.unciv.app -f unciv-data.ab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить список приложений, которые могут читать последний элемент в буфере обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops query-op READ_CLIPBOARD allow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запретить доступ к буферу обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops set com.octopod.russianpost.client.android READ_CLIPBOARD ignore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bash ==&lt;br /&gt;
=== Служебные символы ===&lt;br /&gt;
Запуск скрипта через эквивалент команды &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через &amp;lt;code&amp;gt;echo&amp;lt;/code&amp;gt; и регулярные выражения ($).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;. environment.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFI - менеджер загрузки ==&lt;br /&gt;
=== efibootmgr ===&lt;br /&gt;
==== Восстановление загрузочной записи ====&lt;br /&gt;
Обычно восстановление загрузочной записи загрузчика &#039;&#039;&#039;systemd-boot&#039;&#039;&#039; требуется после обновления прошивки (BIOS) материнской платы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Очистка и сортировка загрузочных записей ====&lt;br /&gt;
Отобразить очередь загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 4-ую запись из очереди загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -b 4 -B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить порядок загрузки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -o 0,1,2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
=== Работа с репозиториями ===&lt;br /&gt;
Инициализировать структуру Git репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить файл README.md в индекс существующего репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add README.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осуществить коммит изменений с выбранным заголовком.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &#039;Initial commit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote add origin &amp;lt;GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -u origin main&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать адреса удаленных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес удаленного репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote set-url origin &amp;lt;NEW_GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ветвление ===&lt;br /&gt;
Создать новую ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключиться на требуемую ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новую ветвь и переключиться на неё в одной команде.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -b branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить локальную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch -d branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить удаленную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -d origin branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить удаленную ветку в новую для этого локальную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch gitea master:fork&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push gitea fork:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch origin pull/103781/head:pr-103781&lt;br /&gt;
git checkout pr-103781&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все ветви, которых больше нет на удалённом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch --prune&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Инициализация, получение и извлечение всех существующих вложенных подмодулей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bare репозиторий ===&lt;br /&gt;
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для конвертации bare репозитория в &amp;quot;нормальное&amp;quot; состояние, требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git config core.bare false&lt;br /&gt;
mkdir .git&lt;br /&gt;
mv * .git/&lt;br /&gt;
git reset --hard&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SOPS ===&lt;br /&gt;
SOPS - простой и удобный инструмент для управления секретами.&lt;br /&gt;
&lt;br /&gt;
Зашифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расшифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd ==&lt;br /&gt;
=== journalctl ===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo journalctl -u act_runner.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать все сообщения для определенного сервиса.&lt;br /&gt;
&lt;br /&gt;
== X11-сервер ==&lt;br /&gt;
Включение возможности изменения раскладки клавиатуры через Alt + Shift.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setxkbmap -layout us,ru -option grp:alt_shift_toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xrandr --output eDP1 --dpi 135.09&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удаленно запустить приложение на основном дисплее.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY=:0 anydesk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=201</id>
		<title>Полезные команды Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=201"/>
		<updated>2026-07-19T23:31:03Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* MariaDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.&lt;br /&gt;
&lt;br /&gt;
== Файловые операции ==&lt;br /&gt;
=== Базовые команды ===&lt;br /&gt;
&lt;br /&gt;
Создать символическую ссылку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /original/path/to/file /path/to/symlink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие команды ===&lt;br /&gt;
&lt;br /&gt;
Запустить команду pwd -P в текущем каталоге и в поддиректориях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;find . -type d -exec sh -c &#039;cd -P -- &amp;quot;{}&amp;quot; &amp;amp;&amp;amp; pwd -P&#039; \;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переименовать кириллические файлы в каталоге&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;find -mindepth 1 -exec sh -c &#039;mv &amp;quot;$1&amp;quot; &amp;quot;$(echo &amp;quot;$1&amp;quot; | iconv -f cp1252 -t cp850 | iconv -f cp866 )&amp;quot;&#039; sh {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Права доступа ===&lt;br /&gt;
Изменить владельца и группу для файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown username:usergroup file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать режима доступа файла или папки в восьмеричной системе счисления Октал. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat -c %a file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оценка использования пространства накопителя ===&lt;br /&gt;
Общий отчёт об использовании пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;df -h /&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информация об использовании файлами и директориями пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -h file.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -ahx . | sort -rh | head -10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование накопителя ===&lt;br /&gt;
Низкоуровневое форматирование накопителя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Принудительно обновить таблицу разделов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo partprobe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Архивы ===&lt;br /&gt;
==== Создание ====&lt;br /&gt;
Создать tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив и исключить добавление отдельного файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --exclude=&#039;file3&#039; -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf site1.tar -C /var/www/ site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Gzip сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -czf archive.tar.gz file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Bz2 сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cjf archive.tar.bz2 file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Просмотр содержимого ====&lt;br /&gt;
Посмотреть содержимое tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -tf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l archive.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -Z1 archive.zip | xargs -I {} rm -v &amp;quot;{}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip | grep -aEv &#039;^Archive:&#039; | iconv -f iso8859-1 -t cp850 | iconv -f cp866&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Распаковка ====&lt;br /&gt;
Распаковать tar архив в текущую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распаковать tar архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar -C ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другие возможные tar команды собраны здесь:&lt;br /&gt;
&lt;br /&gt;
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/&lt;br /&gt;
&lt;br /&gt;
Распаковать zip архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip archive.zip -d ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Модификация архива ====&lt;br /&gt;
&lt;br /&gt;
Добавить новый файл в tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -rvf archive.tar newfile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл из tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --delete -f archive.tar file1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Portable Document Format (PDF) ===&lt;br /&gt;
Склеить несколько pdf файлов в один.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрезать pdf по листам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftoppm Input.pdf outputname -png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изображения ===&lt;br /&gt;
==== ExifTool ====&lt;br /&gt;
Прочитать EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool 1.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool -all= 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Изменить размер изображения&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 3.jpg -resize 128x128 1.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перевернуть изображение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 4.jpg -rotate 90 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 5.jpg Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 6.jpg -background white -page a4 Output.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SANE ====&lt;br /&gt;
Получить изображение со сканера или МФУ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scanimage --format=png --output-file test.png --progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Видео ===&lt;br /&gt;
==== FFmpeg ====&lt;br /&gt;
Конвертировать аудиодорожку видео в формат MP3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i filename.mp4 filename.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделать копию видео в формате mp4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i example.mkv -c copy example.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров (Создание хардсаба).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;02.ass&amp;quot; -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;03.ass&amp;quot; -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вырезать отрезок видео в выбранном диапазоне времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MKVToolNix ====&lt;br /&gt;
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== yt-dlp ====&lt;br /&gt;
&lt;br /&gt;
Cкачать плейлист YT с названием плейлиста в качестве имени папки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;yt-dlp -f &amp;quot;bestvideo[height&amp;lt;=1080]+bestaudio/best[height&amp;lt;=1080]&amp;quot; --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /&amp;quot;path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s&amp;quot; --embed-chapters https://youtube.com/playlist?list=xyz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сетевые команды ==&lt;br /&gt;
Отобразить информацию о сетевых соединениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;netstat -na&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт OpenVPN профиля в NetworkManager.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nmcli connection import type openvpn file ~/VPNs/name.ovpn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Послать Wake-on-LAN пакет на удаленную машину.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wol 00:00:00:00:00:00 -h example.com -p 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оптимизированная передача изображения с удаленного X сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo grep -r &#039;&amp;quot;-&amp;quot; &amp;quot;-&amp;quot;&#039; /var/log/nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.&lt;br /&gt;
&lt;br /&gt;
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -r -k -l 2 -p -E -nc http://site.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка файрвола ===&lt;br /&gt;
&lt;br /&gt;
==== UFW - Uncomplicated Firewall ====&lt;br /&gt;
Используется по умолчанию в Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Отобразить список активных правил в файрволе UFW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw status numbered&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 7-е правило.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw delete 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw insert 1 deny from 52.185.71.28 to any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Базы данных ==&lt;br /&gt;
&lt;br /&gt;
==== MariaDB ====&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экспортировать базу данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb-dump -u username -p database_name &amp;gt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импортировать базу данных из резервной копии. Необходимо, что база данных была [[Конфигурации приложений#MariaDB|создана перед импортом]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u username -p new_database &amp;lt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Примечание}}&lt;br /&gt;
&lt;br /&gt;
Если при импорте будет возникать ошибка &amp;lt;code&amp;gt;ERROR at line 1: Unknown command &#039;\-&#039;.&amp;lt;/code&amp;gt;, то требуется дополнительное действие: https://habr.com/ru/articles/824490/&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
Дамп всех баз данных в один файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;postgres pg_dumpall &amp;gt; postgres_databases.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Виртуализация ==&lt;br /&gt;
=== Контейнеры ===&lt;br /&gt;
==== Docker ====&lt;br /&gt;
Собрать новый образ из Dockerfile, расположенного в текущей директории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker buildx build --platform=linux/amd64 .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новый контейнер в фоне и дать ему определенное имя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список всех контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список загруженных или собранных образов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открыть bash сессию в запущенном контейнере&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker exec -it container_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -it image_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнер с данными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm container_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm $(docker ps -a -q --filter &amp;quot;ancestor=containrrr/watchtower&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить образ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi image_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все неактивные образы из системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi $(docker images -q)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать пути к файловым системам используемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker inspect $(sudo docker ps -qa) |  jq -r &#039;map([.Name, .GraphDriver.Data.MergedDir]) | .[] | &amp;quot;\(.[0])\t\(.[1])&amp;quot;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker system prune -a -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить политику перезапуска для существующего контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker update --restart unless-stopped open-webui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание компьютера ==&lt;br /&gt;
=== Очистка кэша ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccache -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить ccache кэш.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;trizen -Scc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить trizen кэш.&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Composer ===&lt;br /&gt;
Создать новый проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer create-project laravel/laravel example-site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить необходимые зависимости в существующий проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустить скрипт dev, определенный в composer.json проекта.&lt;br /&gt;
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer run dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pacman  ===&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm /var/lib/pacman/db.lck&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл блокировки базы данных pacman.&lt;br /&gt;
&lt;br /&gt;
== Системы сборки ==&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scons -c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить scons кэш.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
=== Android Debug Bridge (adb) ===&lt;br /&gt;
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb backup -noapk com.unciv.app -f unciv-data.ab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить список приложений, которые могут читать последний элемент в буфере обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops query-op READ_CLIPBOARD allow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запретить доступ к буферу обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops set com.octopod.russianpost.client.android READ_CLIPBOARD ignore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bash ==&lt;br /&gt;
=== Служебные символы ===&lt;br /&gt;
Запуск скрипта через эквивалент команды &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через &amp;lt;code&amp;gt;echo&amp;lt;/code&amp;gt; и регулярные выражения ($).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;. environment.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFI - менеджер загрузки ==&lt;br /&gt;
=== efibootmgr ===&lt;br /&gt;
==== Восстановление загрузочной записи ====&lt;br /&gt;
Обычно восстановление загрузочной записи загрузчика &#039;&#039;&#039;systemd-boot&#039;&#039;&#039; требуется после обновления прошивки (BIOS) материнской платы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Очистка и сортировка загрузочных записей ====&lt;br /&gt;
Отобразить очередь загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 4-ую запись из очереди загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -b 4 -B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить порядок загрузки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -o 0,1,2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
=== Работа с репозиториями ===&lt;br /&gt;
Инициализировать структуру Git репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить файл README.md в индекс существующего репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add README.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осуществить коммит изменений с выбранным заголовком.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &#039;Initial commit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote add origin &amp;lt;GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -u origin main&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать адреса удаленных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес удаленного репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote set-url origin &amp;lt;NEW_GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ветвление ===&lt;br /&gt;
Создать новую ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключиться на требуемую ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новую ветвь и переключиться на неё в одной команде.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -b branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить локальную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch -d branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить удаленную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -d origin branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить удаленную ветку в новую для этого локальную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch gitea master:fork&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push gitea fork:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch origin pull/103781/head:pr-103781&lt;br /&gt;
git checkout pr-103781&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все ветви, которых больше нет на удалённом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch --prune&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Инициализация, получение и извлечение всех существующих вложенных подмодулей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bare репозиторий ===&lt;br /&gt;
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для конвертации bare репозитория в &amp;quot;нормальное&amp;quot; состояние, требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git config core.bare false&lt;br /&gt;
mkdir .git&lt;br /&gt;
mv * .git/&lt;br /&gt;
git reset --hard&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SOPS ===&lt;br /&gt;
SOPS - простой и удобный инструмент для управления секретами.&lt;br /&gt;
&lt;br /&gt;
Зашифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расшифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd ==&lt;br /&gt;
=== journalctl ===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo journalctl -u act_runner.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать все сообщения для определенного сервиса.&lt;br /&gt;
&lt;br /&gt;
== X11-сервер ==&lt;br /&gt;
Включение возможности изменения раскладки клавиатуры через Alt + Shift.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setxkbmap -layout us,ru -option grp:alt_shift_toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xrandr --output eDP1 --dpi 135.09&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удаленно запустить приложение на основном дисплее.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY=:0 anydesk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[index.php?title=Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%87%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=200</id>
		<title>Шаблон:Примечание</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%87%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=200"/>
		<updated>2026-07-19T23:30:40Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Тест 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;mw-message-box&amp;quot; style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #a2a9b1; padding: 12px 15px; margin: 1em 0; border-radius: 0 2px 2px 0; color: #202122; font-size: 0.95em; box-shadow: 0 1px 2px rgba(0,0,0,0.05);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; margin-bottom: 4px; color: #404244; display: flex; align-items: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;margin-right: 8px; font-size: 1.1em;&amp;quot;&amp;gt;ℹ️&amp;lt;/span&amp;gt; {{{заголовок|Примечание}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{{1|Введите текст заметки}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Текст заметки&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Основное содержимое вашей плашки.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;заголовок&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Заголовок&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Собственный заголовок вместо стандартного слова \&amp;quot;Примечание\&amp;quot;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;Примечание&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Нейтральный шаблон для оформления заметок и примечаний.&amp;quot;,&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Шаблоны:Оформление]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%87%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=199</id>
		<title>Шаблон:Примечание</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%87%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=199"/>
		<updated>2026-07-19T23:26:00Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;mw-message-box&amp;quot; style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #a2a9b1; padding: 12px 15px; margin: 1em 0; border-radius: 0 2px 2px 0; color: #202122; font-size: 0.95em; box-shadow: 0 1px 2px rgba(0,0,0,0.05);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; margin-bottom: 4px; color: #404244; display: flex; align-items: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;margin-right: 8px; font-size: 1.1em;&amp;quot;&amp;gt;ℹ️&amp;lt;/span&amp;gt; {{{заголовок|Примечание}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{{1|Введите текст заметки}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Шаблоны:Оформление]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Текст заметки&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Основное содержимое вашей плашки.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;заголовок&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Заголовок&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Собственный заголовок вместо стандартного слова \&amp;quot;Примечание\&amp;quot;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;Примечание&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Нейтральный шаблон для оформления заметок и примечаний.&amp;quot;,&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%87%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=198</id>
		<title>Шаблон:Примечание</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%87%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=198"/>
		<updated>2026-07-19T23:22:29Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Шаблон:Примечание&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;mw-message-box&amp;quot; style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #a2a9b1; border-color: #a2a9b1; padding: 12px 15px; margin: 1em 0; border-radius: 0 2px 2px 0; color: #202122; font-size: 0.95em; box-shadow: 0 1px 2px rgba(0,0,0,0.05);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; margin-bottom: 4px; color: #404244; display: flex; align-items: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;margin-right: 8px; font-size: 1.1em;&amp;quot;&amp;gt;ℹ️&amp;lt;/span&amp;gt; {{{заголовок|Примечание}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{{1|Введите текст заметки}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны:Оформление]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=197</id>
		<title>Полезные команды Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=197"/>
		<updated>2026-07-19T23:19:05Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* MariaDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.&lt;br /&gt;
&lt;br /&gt;
== Файловые операции ==&lt;br /&gt;
=== Базовые команды ===&lt;br /&gt;
&lt;br /&gt;
Создать символическую ссылку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /original/path/to/file /path/to/symlink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие команды ===&lt;br /&gt;
&lt;br /&gt;
Запустить команду pwd -P в текущем каталоге и в поддиректориях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;find . -type d -exec sh -c &#039;cd -P -- &amp;quot;{}&amp;quot; &amp;amp;&amp;amp; pwd -P&#039; \;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переименовать кириллические файлы в каталоге&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;find -mindepth 1 -exec sh -c &#039;mv &amp;quot;$1&amp;quot; &amp;quot;$(echo &amp;quot;$1&amp;quot; | iconv -f cp1252 -t cp850 | iconv -f cp866 )&amp;quot;&#039; sh {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Права доступа ===&lt;br /&gt;
Изменить владельца и группу для файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown username:usergroup file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать режима доступа файла или папки в восьмеричной системе счисления Октал. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat -c %a file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оценка использования пространства накопителя ===&lt;br /&gt;
Общий отчёт об использовании пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;df -h /&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информация об использовании файлами и директориями пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -h file.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -ahx . | sort -rh | head -10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование накопителя ===&lt;br /&gt;
Низкоуровневое форматирование накопителя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Принудительно обновить таблицу разделов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo partprobe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Архивы ===&lt;br /&gt;
==== Создание ====&lt;br /&gt;
Создать tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив и исключить добавление отдельного файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --exclude=&#039;file3&#039; -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf site1.tar -C /var/www/ site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Gzip сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -czf archive.tar.gz file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Bz2 сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cjf archive.tar.bz2 file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Просмотр содержимого ====&lt;br /&gt;
Посмотреть содержимое tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -tf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l archive.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -Z1 archive.zip | xargs -I {} rm -v &amp;quot;{}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip | grep -aEv &#039;^Archive:&#039; | iconv -f iso8859-1 -t cp850 | iconv -f cp866&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Распаковка ====&lt;br /&gt;
Распаковать tar архив в текущую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распаковать tar архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar -C ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другие возможные tar команды собраны здесь:&lt;br /&gt;
&lt;br /&gt;
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/&lt;br /&gt;
&lt;br /&gt;
Распаковать zip архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip archive.zip -d ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Модификация архива ====&lt;br /&gt;
&lt;br /&gt;
Добавить новый файл в tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -rvf archive.tar newfile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл из tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --delete -f archive.tar file1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Portable Document Format (PDF) ===&lt;br /&gt;
Склеить несколько pdf файлов в один.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрезать pdf по листам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftoppm Input.pdf outputname -png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изображения ===&lt;br /&gt;
==== ExifTool ====&lt;br /&gt;
Прочитать EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool 1.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool -all= 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Изменить размер изображения&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 3.jpg -resize 128x128 1.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перевернуть изображение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 4.jpg -rotate 90 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 5.jpg Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 6.jpg -background white -page a4 Output.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SANE ====&lt;br /&gt;
Получить изображение со сканера или МФУ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scanimage --format=png --output-file test.png --progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Видео ===&lt;br /&gt;
==== FFmpeg ====&lt;br /&gt;
Конвертировать аудиодорожку видео в формат MP3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i filename.mp4 filename.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделать копию видео в формате mp4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i example.mkv -c copy example.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров (Создание хардсаба).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;02.ass&amp;quot; -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;03.ass&amp;quot; -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вырезать отрезок видео в выбранном диапазоне времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MKVToolNix ====&lt;br /&gt;
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== yt-dlp ====&lt;br /&gt;
&lt;br /&gt;
Cкачать плейлист YT с названием плейлиста в качестве имени папки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;yt-dlp -f &amp;quot;bestvideo[height&amp;lt;=1080]+bestaudio/best[height&amp;lt;=1080]&amp;quot; --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /&amp;quot;path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s&amp;quot; --embed-chapters https://youtube.com/playlist?list=xyz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сетевые команды ==&lt;br /&gt;
Отобразить информацию о сетевых соединениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;netstat -na&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт OpenVPN профиля в NetworkManager.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nmcli connection import type openvpn file ~/VPNs/name.ovpn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Послать Wake-on-LAN пакет на удаленную машину.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wol 00:00:00:00:00:00 -h example.com -p 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оптимизированная передача изображения с удаленного X сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo grep -r &#039;&amp;quot;-&amp;quot; &amp;quot;-&amp;quot;&#039; /var/log/nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.&lt;br /&gt;
&lt;br /&gt;
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -r -k -l 2 -p -E -nc http://site.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка файрвола ===&lt;br /&gt;
&lt;br /&gt;
==== UFW - Uncomplicated Firewall ====&lt;br /&gt;
Используется по умолчанию в Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Отобразить список активных правил в файрволе UFW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw status numbered&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 7-е правило.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw delete 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw insert 1 deny from 52.185.71.28 to any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Базы данных ==&lt;br /&gt;
&lt;br /&gt;
==== MariaDB ====&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экспортировать базу данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb-dump -u username -p database_name &amp;gt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импортировать базу данных из резервной копии. Необходимо, что база данных была [[Конфигурации приложений#MariaDB|создана перед импортом]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u username -p new_database &amp;lt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если при импорте будет возникать ошибка &amp;lt;code&amp;gt;ERROR at line 1: Unknown command &#039;\-&#039;.&amp;lt;/code&amp;gt;, то требуется дополнительное действие: https://habr.com/ru/articles/824490/&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
Дамп всех баз данных в один файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;postgres pg_dumpall &amp;gt; postgres_databases.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Виртуализация ==&lt;br /&gt;
=== Контейнеры ===&lt;br /&gt;
==== Docker ====&lt;br /&gt;
Собрать новый образ из Dockerfile, расположенного в текущей директории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker buildx build --platform=linux/amd64 .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новый контейнер в фоне и дать ему определенное имя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список всех контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список загруженных или собранных образов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открыть bash сессию в запущенном контейнере&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker exec -it container_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -it image_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнер с данными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm container_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm $(docker ps -a -q --filter &amp;quot;ancestor=containrrr/watchtower&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить образ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi image_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все неактивные образы из системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi $(docker images -q)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать пути к файловым системам используемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker inspect $(sudo docker ps -qa) |  jq -r &#039;map([.Name, .GraphDriver.Data.MergedDir]) | .[] | &amp;quot;\(.[0])\t\(.[1])&amp;quot;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker system prune -a -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить политику перезапуска для существующего контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker update --restart unless-stopped open-webui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание компьютера ==&lt;br /&gt;
=== Очистка кэша ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccache -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить ccache кэш.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;trizen -Scc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить trizen кэш.&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Composer ===&lt;br /&gt;
Создать новый проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer create-project laravel/laravel example-site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить необходимые зависимости в существующий проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустить скрипт dev, определенный в composer.json проекта.&lt;br /&gt;
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer run dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pacman  ===&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm /var/lib/pacman/db.lck&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл блокировки базы данных pacman.&lt;br /&gt;
&lt;br /&gt;
== Системы сборки ==&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scons -c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить scons кэш.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
=== Android Debug Bridge (adb) ===&lt;br /&gt;
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb backup -noapk com.unciv.app -f unciv-data.ab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить список приложений, которые могут читать последний элемент в буфере обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops query-op READ_CLIPBOARD allow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запретить доступ к буферу обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops set com.octopod.russianpost.client.android READ_CLIPBOARD ignore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bash ==&lt;br /&gt;
=== Служебные символы ===&lt;br /&gt;
Запуск скрипта через эквивалент команды &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через &amp;lt;code&amp;gt;echo&amp;lt;/code&amp;gt; и регулярные выражения ($).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;. environment.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFI - менеджер загрузки ==&lt;br /&gt;
=== efibootmgr ===&lt;br /&gt;
==== Восстановление загрузочной записи ====&lt;br /&gt;
Обычно восстановление загрузочной записи загрузчика &#039;&#039;&#039;systemd-boot&#039;&#039;&#039; требуется после обновления прошивки (BIOS) материнской платы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Очистка и сортировка загрузочных записей ====&lt;br /&gt;
Отобразить очередь загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 4-ую запись из очереди загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -b 4 -B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить порядок загрузки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -o 0,1,2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
=== Работа с репозиториями ===&lt;br /&gt;
Инициализировать структуру Git репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить файл README.md в индекс существующего репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add README.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осуществить коммит изменений с выбранным заголовком.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &#039;Initial commit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote add origin &amp;lt;GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -u origin main&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать адреса удаленных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес удаленного репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote set-url origin &amp;lt;NEW_GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ветвление ===&lt;br /&gt;
Создать новую ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключиться на требуемую ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новую ветвь и переключиться на неё в одной команде.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -b branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить локальную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch -d branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить удаленную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -d origin branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить удаленную ветку в новую для этого локальную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch gitea master:fork&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push gitea fork:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch origin pull/103781/head:pr-103781&lt;br /&gt;
git checkout pr-103781&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все ветви, которых больше нет на удалённом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch --prune&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Инициализация, получение и извлечение всех существующих вложенных подмодулей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bare репозиторий ===&lt;br /&gt;
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для конвертации bare репозитория в &amp;quot;нормальное&amp;quot; состояние, требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git config core.bare false&lt;br /&gt;
mkdir .git&lt;br /&gt;
mv * .git/&lt;br /&gt;
git reset --hard&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SOPS ===&lt;br /&gt;
SOPS - простой и удобный инструмент для управления секретами.&lt;br /&gt;
&lt;br /&gt;
Зашифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расшифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd ==&lt;br /&gt;
=== journalctl ===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo journalctl -u act_runner.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать все сообщения для определенного сервиса.&lt;br /&gt;
&lt;br /&gt;
== X11-сервер ==&lt;br /&gt;
Включение возможности изменения раскладки клавиатуры через Alt + Shift.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setxkbmap -layout us,ru -option grp:alt_shift_toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xrandr --output eDP1 --dpi 135.09&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удаленно запустить приложение на основном дисплее.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY=:0 anydesk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=196</id>
		<title>Конфигурации приложений</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=196"/>
		<updated>2026-07-19T23:15:00Z</updated>

		<summary type="html">&lt;p&gt;Comminux: MariaDB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Описание отдельных настроек приложений и сервисов.&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
=== Chrome/Chromium ===&lt;br /&gt;
{{Внимание|Chrome 149 последний выпуск на котором данные флаги работоспособны}}&lt;br /&gt;
Чтобы включить поддержку расширений Manifest V2 нужно отредактировать поле &amp;lt;code&amp;gt;Объект&amp;lt;/code&amp;gt; в свойствах ярлыка:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;C:\Program Files\Google\Chrome\Application\chrome.exe&amp;quot; --disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
=== MariaDB ===&lt;br /&gt;
&lt;br /&gt;
Создание базы данных, пользователя и выставления доступа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MariaDB [(none)]&amp;gt; CREATE DATABASE `db_name` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_unicode_ci`;&lt;br /&gt;
MariaDB [(none)]&amp;gt; CREATE USER `db-user`@&#039;localhost&#039; IDENTIFIED BY &#039;password&#039;;MariaDB [(none)]&amp;gt; GRANT ALL PRIVILEGES ON `db_name`.* TO `db_user`@`localhost`;&lt;br /&gt;
MariaDB [(none)]&amp;gt; FLUSH PRIVILEGES;&lt;br /&gt;
MariaDB [(none)]&amp;gt; \q&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
=== OpenVPN Client ===&lt;br /&gt;
&lt;br /&gt;
Добавив опцию route в ovpn файл, можно исключить маршрутизацию определенного сетевого узла:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;route XX.XX.XX.XX 255.255.255.255 YY.YY.YY.YY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где XX это IP требуемый удаленный адрес, а YY IP-адрес шлюза (IP-адрес домашнего роутера)&lt;br /&gt;
&lt;br /&gt;
== V ==&lt;br /&gt;
=== Visual Studio Code ===&lt;br /&gt;
[[Файл:Visual Studio Code - Merge Editor.png|мини|VS Code: Merge Editor]]&lt;br /&gt;
В случае конфликтной ситуации, при объединении кодовой базы из различных ветвей, Visual Studio Code предлагает воспользоваться режимом Merge Editor, трех оконным интерфейсом, который помогает увидеть небольшие конфликты, но совершенно непригоден когда большая часть требуемого файла была переписана.&lt;br /&gt;
&lt;br /&gt;
https://stackoverflow.com/questions/73277690/how-to-change-vs-codes-merge-conflict-layout&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=195</id>
		<title>Шаблон:Внимание</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=195"/>
		<updated>2026-07-19T22:53:28Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Первый шаблон! Спасибо Gemini!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #fff3cd; border-left: 5px solid #ffc107; padding: 12px; margin-bottom: 20px; border-radius: 4px; color: #856404;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Внимание!&#039;&#039;&#039; {{{1|Внимание по умолчанию}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=194</id>
		<title>Полезные команды Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=194"/>
		<updated>2026-07-10T18:51:53Z</updated>

		<summary type="html">&lt;p&gt;Comminux: PostgreSQL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.&lt;br /&gt;
&lt;br /&gt;
== Файловые операции ==&lt;br /&gt;
=== Базовые команды ===&lt;br /&gt;
&lt;br /&gt;
Создать символическую ссылку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /original/path/to/file /path/to/symlink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие команды ===&lt;br /&gt;
&lt;br /&gt;
Запустить команду pwd -P в текущем каталоге и в поддиректориях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;find . -type d -exec sh -c &#039;cd -P -- &amp;quot;{}&amp;quot; &amp;amp;&amp;amp; pwd -P&#039; \;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переименовать кириллические файлы в каталоге&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;find -mindepth 1 -exec sh -c &#039;mv &amp;quot;$1&amp;quot; &amp;quot;$(echo &amp;quot;$1&amp;quot; | iconv -f cp1252 -t cp850 | iconv -f cp866 )&amp;quot;&#039; sh {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Права доступа ===&lt;br /&gt;
Изменить владельца и группу для файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown username:usergroup file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать режима доступа файла или папки в восьмеричной системе счисления Октал. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat -c %a file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оценка использования пространства накопителя ===&lt;br /&gt;
Общий отчёт об использовании пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;df -h /&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информация об использовании файлами и директориями пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -h file.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -ahx . | sort -rh | head -10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование накопителя ===&lt;br /&gt;
Низкоуровневое форматирование накопителя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Принудительно обновить таблицу разделов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo partprobe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Архивы ===&lt;br /&gt;
==== Создание ====&lt;br /&gt;
Создать tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив и исключить добавление отдельного файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --exclude=&#039;file3&#039; -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf site1.tar -C /var/www/ site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Gzip сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -czf archive.tar.gz file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Bz2 сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cjf archive.tar.bz2 file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Просмотр содержимого ====&lt;br /&gt;
Посмотреть содержимое tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -tf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l archive.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -Z1 archive.zip | xargs -I {} rm -v &amp;quot;{}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip | grep -aEv &#039;^Archive:&#039; | iconv -f iso8859-1 -t cp850 | iconv -f cp866&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Распаковка ====&lt;br /&gt;
Распаковать tar архив в текущую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распаковать tar архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar -C ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другие возможные tar команды собраны здесь:&lt;br /&gt;
&lt;br /&gt;
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/&lt;br /&gt;
&lt;br /&gt;
Распаковать zip архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip archive.zip -d ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Модификация архива ====&lt;br /&gt;
&lt;br /&gt;
Добавить новый файл в tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -rvf archive.tar newfile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл из tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --delete -f archive.tar file1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Portable Document Format (PDF) ===&lt;br /&gt;
Склеить несколько pdf файлов в один.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрезать pdf по листам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftoppm Input.pdf outputname -png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изображения ===&lt;br /&gt;
==== ExifTool ====&lt;br /&gt;
Прочитать EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool 1.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool -all= 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Изменить размер изображения&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 3.jpg -resize 128x128 1.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перевернуть изображение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 4.jpg -rotate 90 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 5.jpg Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 6.jpg -background white -page a4 Output.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SANE ====&lt;br /&gt;
Получить изображение со сканера или МФУ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scanimage --format=png --output-file test.png --progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Видео ===&lt;br /&gt;
==== FFmpeg ====&lt;br /&gt;
Конвертировать аудиодорожку видео в формат MP3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i filename.mp4 filename.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделать копию видео в формате mp4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i example.mkv -c copy example.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров (Создание хардсаба).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;02.ass&amp;quot; -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;03.ass&amp;quot; -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вырезать отрезок видео в выбранном диапазоне времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MKVToolNix ====&lt;br /&gt;
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== yt-dlp ====&lt;br /&gt;
&lt;br /&gt;
Cкачать плейлист YT с названием плейлиста в качестве имени папки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;yt-dlp -f &amp;quot;bestvideo[height&amp;lt;=1080]+bestaudio/best[height&amp;lt;=1080]&amp;quot; --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /&amp;quot;path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s&amp;quot; --embed-chapters https://youtube.com/playlist?list=xyz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сетевые команды ==&lt;br /&gt;
Отобразить информацию о сетевых соединениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;netstat -na&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт OpenVPN профиля в NetworkManager.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nmcli connection import type openvpn file ~/VPNs/name.ovpn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Послать Wake-on-LAN пакет на удаленную машину.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wol 00:00:00:00:00:00 -h example.com -p 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оптимизированная передача изображения с удаленного X сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo grep -r &#039;&amp;quot;-&amp;quot; &amp;quot;-&amp;quot;&#039; /var/log/nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.&lt;br /&gt;
&lt;br /&gt;
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -r -k -l 2 -p -E -nc http://site.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка файрвола ===&lt;br /&gt;
&lt;br /&gt;
==== UFW - Uncomplicated Firewall ====&lt;br /&gt;
Используется по умолчанию в Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Отобразить список активных правил в файрволе UFW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw status numbered&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 7-е правило.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw delete 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw insert 1 deny from 52.185.71.28 to any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Базы данных ==&lt;br /&gt;
&lt;br /&gt;
==== MariaDB ====&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экспортировать базу данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb-dump -u username -p database_name &amp;gt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импортировать базу данных из резервной копии. Если при импорте будет возникать ошибка &amp;lt;code&amp;gt;ERROR at line 1: Unknown command &#039;\-&#039;.&amp;lt;/code&amp;gt;, то требуется дополнительное действие: https://habr.com/ru/articles/824490/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u username -p new_database &amp;lt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
Дамп всех баз данных в один файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;postgres pg_dumpall &amp;gt; postgres_databases.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Виртуализация ==&lt;br /&gt;
=== Контейнеры ===&lt;br /&gt;
==== Docker ====&lt;br /&gt;
Собрать новый образ из Dockerfile, расположенного в текущей директории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker buildx build --platform=linux/amd64 .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новый контейнер в фоне и дать ему определенное имя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список всех контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список загруженных или собранных образов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открыть bash сессию в запущенном контейнере&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker exec -it container_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -it image_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнер с данными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm container_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm $(docker ps -a -q --filter &amp;quot;ancestor=containrrr/watchtower&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить образ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi image_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все неактивные образы из системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi $(docker images -q)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать пути к файловым системам используемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker inspect $(sudo docker ps -qa) |  jq -r &#039;map([.Name, .GraphDriver.Data.MergedDir]) | .[] | &amp;quot;\(.[0])\t\(.[1])&amp;quot;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker system prune -a -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить политику перезапуска для существующего контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker update --restart unless-stopped open-webui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание компьютера ==&lt;br /&gt;
=== Очистка кэша ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccache -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить ccache кэш.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;trizen -Scc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить trizen кэш.&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Composer ===&lt;br /&gt;
Создать новый проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer create-project laravel/laravel example-site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить необходимые зависимости в существующий проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустить скрипт dev, определенный в composer.json проекта.&lt;br /&gt;
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer run dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pacman  ===&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm /var/lib/pacman/db.lck&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл блокировки базы данных pacman.&lt;br /&gt;
&lt;br /&gt;
== Системы сборки ==&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scons -c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить scons кэш.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
=== Android Debug Bridge (adb) ===&lt;br /&gt;
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb backup -noapk com.unciv.app -f unciv-data.ab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить список приложений, которые могут читать последний элемент в буфере обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops query-op READ_CLIPBOARD allow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запретить доступ к буферу обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops set com.octopod.russianpost.client.android READ_CLIPBOARD ignore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bash ==&lt;br /&gt;
=== Служебные символы ===&lt;br /&gt;
Запуск скрипта через эквивалент команды &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через &amp;lt;code&amp;gt;echo&amp;lt;/code&amp;gt; и регулярные выражения ($).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;. environment.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFI - менеджер загрузки ==&lt;br /&gt;
=== efibootmgr ===&lt;br /&gt;
==== Восстановление загрузочной записи ====&lt;br /&gt;
Обычно восстановление загрузочной записи загрузчика &#039;&#039;&#039;systemd-boot&#039;&#039;&#039; требуется после обновления прошивки (BIOS) материнской платы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Очистка и сортировка загрузочных записей ====&lt;br /&gt;
Отобразить очередь загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 4-ую запись из очереди загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -b 4 -B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить порядок загрузки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -o 0,1,2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
=== Работа с репозиториями ===&lt;br /&gt;
Инициализировать структуру Git репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить файл README.md в индекс существующего репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add README.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осуществить коммит изменений с выбранным заголовком.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &#039;Initial commit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote add origin &amp;lt;GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -u origin main&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать адреса удаленных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес удаленного репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote set-url origin &amp;lt;NEW_GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ветвление ===&lt;br /&gt;
Создать новую ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключиться на требуемую ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новую ветвь и переключиться на неё в одной команде.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -b branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить локальную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch -d branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить удаленную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -d origin branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить удаленную ветку в новую для этого локальную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch gitea master:fork&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push gitea fork:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch origin pull/103781/head:pr-103781&lt;br /&gt;
git checkout pr-103781&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все ветви, которых больше нет на удалённом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch --prune&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Инициализация, получение и извлечение всех существующих вложенных подмодулей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bare репозиторий ===&lt;br /&gt;
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для конвертации bare репозитория в &amp;quot;нормальное&amp;quot; состояние, требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git config core.bare false&lt;br /&gt;
mkdir .git&lt;br /&gt;
mv * .git/&lt;br /&gt;
git reset --hard&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SOPS ===&lt;br /&gt;
SOPS - простой и удобный инструмент для управления секретами.&lt;br /&gt;
&lt;br /&gt;
Зашифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расшифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd ==&lt;br /&gt;
=== journalctl ===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo journalctl -u act_runner.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать все сообщения для определенного сервиса.&lt;br /&gt;
&lt;br /&gt;
== X11-сервер ==&lt;br /&gt;
Включение возможности изменения раскладки клавиатуры через Alt + Shift.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setxkbmap -layout us,ru -option grp:alt_shift_toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xrandr --output eDP1 --dpi 135.09&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удаленно запустить приложение на основном дисплее.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY=:0 anydesk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Windows&amp;diff=193</id>
		<title>Полезные команды Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Windows&amp;diff=193"/>
		<updated>2026-06-17T09:02:54Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Scoop установка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Руководство по приложениям для Windows.&lt;br /&gt;
&lt;br /&gt;
== Команды Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chcp 65001&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить страницу кода активной консоли на &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Scoop ===&lt;br /&gt;
Установка менеджера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser&lt;br /&gt;
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновить установленные приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scoop update *&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить кэш и установщики.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scoop cleanup * -g -k&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WinGet (Windows Package Manager) ===&lt;br /&gt;
&lt;br /&gt;
WinGet - встроенный в Windows пакетный менеджер. Следующая команда позволит обновить все установленные и зарегистрированные в репозитории WinGet приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;winget upgrade --all&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=192</id>
		<title>Полезные команды Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=192"/>
		<updated>2026-06-17T09:00:45Z</updated>

		<summary type="html">&lt;p&gt;Comminux: adb - удаление доступа к буферу обмена&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.&lt;br /&gt;
&lt;br /&gt;
== Файловые операции ==&lt;br /&gt;
=== Базовые команды ===&lt;br /&gt;
&lt;br /&gt;
Создать символическую ссылку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /original/path/to/file /path/to/symlink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие команды ===&lt;br /&gt;
&lt;br /&gt;
Запустить команду pwd -P в текущем каталоге и в поддиректориях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;find . -type d -exec sh -c &#039;cd -P -- &amp;quot;{}&amp;quot; &amp;amp;&amp;amp; pwd -P&#039; \;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переименовать кириллические файлы в каталоге&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;find -mindepth 1 -exec sh -c &#039;mv &amp;quot;$1&amp;quot; &amp;quot;$(echo &amp;quot;$1&amp;quot; | iconv -f cp1252 -t cp850 | iconv -f cp866 )&amp;quot;&#039; sh {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Права доступа ===&lt;br /&gt;
Изменить владельца и группу для файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown username:usergroup file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать режима доступа файла или папки в восьмеричной системе счисления Октал. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat -c %a file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оценка использования пространства накопителя ===&lt;br /&gt;
Общий отчёт об использовании пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;df -h /&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информация об использовании файлами и директориями пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -h file.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -ahx . | sort -rh | head -10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование накопителя ===&lt;br /&gt;
Низкоуровневое форматирование накопителя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Принудительно обновить таблицу разделов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo partprobe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Архивы ===&lt;br /&gt;
==== Создание ====&lt;br /&gt;
Создать tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив и исключить добавление отдельного файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --exclude=&#039;file3&#039; -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf site1.tar -C /var/www/ site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Gzip сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -czf archive.tar.gz file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Bz2 сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cjf archive.tar.bz2 file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Просмотр содержимого ====&lt;br /&gt;
Посмотреть содержимое tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -tf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l archive.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -Z1 archive.zip | xargs -I {} rm -v &amp;quot;{}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip | grep -aEv &#039;^Archive:&#039; | iconv -f iso8859-1 -t cp850 | iconv -f cp866&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Распаковка ====&lt;br /&gt;
Распаковать tar архив в текущую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распаковать tar архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar -C ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другие возможные tar команды собраны здесь:&lt;br /&gt;
&lt;br /&gt;
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/&lt;br /&gt;
&lt;br /&gt;
Распаковать zip архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip archive.zip -d ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Модификация архива ====&lt;br /&gt;
&lt;br /&gt;
Добавить новый файл в tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -rvf archive.tar newfile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл из tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --delete -f archive.tar file1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Portable Document Format (PDF) ===&lt;br /&gt;
Склеить несколько pdf файлов в один.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрезать pdf по листам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftoppm Input.pdf outputname -png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изображения ===&lt;br /&gt;
==== ExifTool ====&lt;br /&gt;
Прочитать EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool 1.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool -all= 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Изменить размер изображения&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 3.jpg -resize 128x128 1.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перевернуть изображение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 4.jpg -rotate 90 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 5.jpg Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 6.jpg -background white -page a4 Output.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SANE ====&lt;br /&gt;
Получить изображение со сканера или МФУ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scanimage --format=png --output-file test.png --progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Видео ===&lt;br /&gt;
==== FFmpeg ====&lt;br /&gt;
Конвертировать аудиодорожку видео в формат MP3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i filename.mp4 filename.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделать копию видео в формате mp4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i example.mkv -c copy example.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров (Создание хардсаба).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;02.ass&amp;quot; -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;03.ass&amp;quot; -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вырезать отрезок видео в выбранном диапазоне времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MKVToolNix ====&lt;br /&gt;
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== yt-dlp ====&lt;br /&gt;
&lt;br /&gt;
Cкачать плейлист YT с названием плейлиста в качестве имени папки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;yt-dlp -f &amp;quot;bestvideo[height&amp;lt;=1080]+bestaudio/best[height&amp;lt;=1080]&amp;quot; --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /&amp;quot;path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s&amp;quot; --embed-chapters https://youtube.com/playlist?list=xyz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сетевые команды ==&lt;br /&gt;
Отобразить информацию о сетевых соединениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;netstat -na&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт OpenVPN профиля в NetworkManager.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nmcli connection import type openvpn file ~/VPNs/name.ovpn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Послать Wake-on-LAN пакет на удаленную машину.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wol 00:00:00:00:00:00 -h example.com -p 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оптимизированная передача изображения с удаленного X сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo grep -r &#039;&amp;quot;-&amp;quot; &amp;quot;-&amp;quot;&#039; /var/log/nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.&lt;br /&gt;
&lt;br /&gt;
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -r -k -l 2 -p -E -nc http://site.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка файрвола ===&lt;br /&gt;
&lt;br /&gt;
==== UFW - Uncomplicated Firewall ====&lt;br /&gt;
Используется по умолчанию в Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Отобразить список активных правил в файрволе UFW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw status numbered&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 7-е правило.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw delete 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw insert 1 deny from 52.185.71.28 to any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Базы данных ==&lt;br /&gt;
&lt;br /&gt;
==== MariaDB ====&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экспортировать базу данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb-dump -u username -p database_name &amp;gt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импортировать базу данных из резервной копии. Если при импорте будет возникать ошибка &amp;lt;code&amp;gt;ERROR at line 1: Unknown command &#039;\-&#039;.&amp;lt;/code&amp;gt;, то требуется дополнительное действие: https://habr.com/ru/articles/824490/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u username -p new_database &amp;lt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Виртуализация ==&lt;br /&gt;
=== Контейнеры ===&lt;br /&gt;
==== Docker ====&lt;br /&gt;
Собрать новый образ из Dockerfile, расположенного в текущей директории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker buildx build --platform=linux/amd64 .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новый контейнер в фоне и дать ему определенное имя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список всех контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список загруженных или собранных образов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открыть bash сессию в запущенном контейнере&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker exec -it container_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -it image_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнер с данными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm container_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm $(docker ps -a -q --filter &amp;quot;ancestor=containrrr/watchtower&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить образ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi image_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все неактивные образы из системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi $(docker images -q)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать пути к файловым системам используемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker inspect $(sudo docker ps -qa) |  jq -r &#039;map([.Name, .GraphDriver.Data.MergedDir]) | .[] | &amp;quot;\(.[0])\t\(.[1])&amp;quot;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker system prune -a -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить политику перезапуска для существующего контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker update --restart unless-stopped open-webui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание компьютера ==&lt;br /&gt;
=== Очистка кэша ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccache -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить ccache кэш.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;trizen -Scc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить trizen кэш.&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Composer ===&lt;br /&gt;
Создать новый проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer create-project laravel/laravel example-site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить необходимые зависимости в существующий проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустить скрипт dev, определенный в composer.json проекта.&lt;br /&gt;
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer run dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pacman  ===&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm /var/lib/pacman/db.lck&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл блокировки базы данных pacman.&lt;br /&gt;
&lt;br /&gt;
== Системы сборки ==&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scons -c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить scons кэш.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
=== Android Debug Bridge (adb) ===&lt;br /&gt;
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb backup -noapk com.unciv.app -f unciv-data.ab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получить список приложений, которые могут читать последний элемент в буфере обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops query-op READ_CLIPBOARD allow&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запретить доступ к буферу обмена.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb shell cmd appops set com.octopod.russianpost.client.android READ_CLIPBOARD ignore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bash ==&lt;br /&gt;
=== Служебные символы ===&lt;br /&gt;
Запуск скрипта через эквивалент команды &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через &amp;lt;code&amp;gt;echo&amp;lt;/code&amp;gt; и регулярные выражения ($).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;. environment.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFI - менеджер загрузки ==&lt;br /&gt;
=== efibootmgr ===&lt;br /&gt;
==== Восстановление загрузочной записи ====&lt;br /&gt;
Обычно восстановление загрузочной записи загрузчика &#039;&#039;&#039;systemd-boot&#039;&#039;&#039; требуется после обновления прошивки (BIOS) материнской платы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Очистка и сортировка загрузочных записей ====&lt;br /&gt;
Отобразить очередь загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 4-ую запись из очереди загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -b 4 -B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить порядок загрузки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -o 0,1,2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
=== Работа с репозиториями ===&lt;br /&gt;
Инициализировать структуру Git репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить файл README.md в индекс существующего репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add README.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осуществить коммит изменений с выбранным заголовком.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &#039;Initial commit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote add origin &amp;lt;GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -u origin main&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать адреса удаленных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес удаленного репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote set-url origin &amp;lt;NEW_GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ветвление ===&lt;br /&gt;
Создать новую ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключиться на требуемую ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новую ветвь и переключиться на неё в одной команде.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -b branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить локальную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch -d branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить удаленную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -d origin branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить удаленную ветку в новую для этого локальную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch gitea master:fork&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push gitea fork:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch origin pull/103781/head:pr-103781&lt;br /&gt;
git checkout pr-103781&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все ветви, которых больше нет на удалённом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch --prune&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Инициализация, получение и извлечение всех существующих вложенных подмодулей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bare репозиторий ===&lt;br /&gt;
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для конвертации bare репозитория в &amp;quot;нормальное&amp;quot; состояние, требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git config core.bare false&lt;br /&gt;
mkdir .git&lt;br /&gt;
mv * .git/&lt;br /&gt;
git reset --hard&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SOPS ===&lt;br /&gt;
SOPS - простой и удобный инструмент для управления секретами.&lt;br /&gt;
&lt;br /&gt;
Зашифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расшифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd ==&lt;br /&gt;
=== journalctl ===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo journalctl -u act_runner.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать все сообщения для определенного сервиса.&lt;br /&gt;
&lt;br /&gt;
== X11-сервер ==&lt;br /&gt;
Включение возможности изменения раскладки клавиатуры через Alt + Shift.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setxkbmap -layout us,ru -option grp:alt_shift_toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xrandr --output eDP1 --dpi 135.09&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удаленно запустить приложение на основном дисплее.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY=:0 anydesk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=191</id>
		<title>Полезные команды Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=191"/>
		<updated>2026-06-10T14:21:36Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Распаковать zip архив в требуемую директорию&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.&lt;br /&gt;
&lt;br /&gt;
== Файловые операции ==&lt;br /&gt;
=== Базовые команды ===&lt;br /&gt;
&lt;br /&gt;
Создать символическую ссылку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /original/path/to/file /path/to/symlink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие команды ===&lt;br /&gt;
&lt;br /&gt;
Запустить команду pwd -P в текущем каталоге и в поддиректориях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;find . -type d -exec sh -c &#039;cd -P -- &amp;quot;{}&amp;quot; &amp;amp;&amp;amp; pwd -P&#039; \;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переименовать кириллические файлы в каталоге&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;find -mindepth 1 -exec sh -c &#039;mv &amp;quot;$1&amp;quot; &amp;quot;$(echo &amp;quot;$1&amp;quot; | iconv -f cp1252 -t cp850 | iconv -f cp866 )&amp;quot;&#039; sh {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Права доступа ===&lt;br /&gt;
Изменить владельца и группу для файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown username:usergroup file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать режима доступа файла или папки в восьмеричной системе счисления Октал. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat -c %a file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оценка использования пространства накопителя ===&lt;br /&gt;
Общий отчёт об использовании пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;df -h /&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информация об использовании файлами и директориями пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -h file.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -ahx . | sort -rh | head -10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование накопителя ===&lt;br /&gt;
Низкоуровневое форматирование накопителя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Принудительно обновить таблицу разделов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo partprobe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Архивы ===&lt;br /&gt;
==== Создание ====&lt;br /&gt;
Создать tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив и исключить добавление отдельного файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --exclude=&#039;file3&#039; -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf site1.tar -C /var/www/ site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Gzip сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -czf archive.tar.gz file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Bz2 сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cjf archive.tar.bz2 file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Просмотр содержимого ====&lt;br /&gt;
Посмотреть содержимое tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -tf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l archive.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -Z1 archive.zip | xargs -I {} rm -v &amp;quot;{}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip | grep -aEv &#039;^Archive:&#039; | iconv -f iso8859-1 -t cp850 | iconv -f cp866&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Распаковка ====&lt;br /&gt;
Распаковать tar архив в текущую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распаковать tar архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar -C ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другие возможные tar команды собраны здесь:&lt;br /&gt;
&lt;br /&gt;
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/&lt;br /&gt;
&lt;br /&gt;
Распаковать zip архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip archive.zip -d ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Модификация архива ====&lt;br /&gt;
&lt;br /&gt;
Добавить новый файл в tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -rvf archive.tar newfile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл из tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --delete -f archive.tar file1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Portable Document Format (PDF) ===&lt;br /&gt;
Склеить несколько pdf файлов в один.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрезать pdf по листам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftoppm Input.pdf outputname -png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изображения ===&lt;br /&gt;
==== ExifTool ====&lt;br /&gt;
Прочитать EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool 1.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool -all= 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Изменить размер изображения&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 3.jpg -resize 128x128 1.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перевернуть изображение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 4.jpg -rotate 90 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 5.jpg Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 6.jpg -background white -page a4 Output.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SANE ====&lt;br /&gt;
Получить изображение со сканера или МФУ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scanimage --format=png --output-file test.png --progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Видео ===&lt;br /&gt;
==== FFmpeg ====&lt;br /&gt;
Конвертировать аудиодорожку видео в формат MP3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i filename.mp4 filename.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделать копию видео в формате mp4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i example.mkv -c copy example.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров (Создание хардсаба).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;02.ass&amp;quot; -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;03.ass&amp;quot; -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вырезать отрезок видео в выбранном диапазоне времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MKVToolNix ====&lt;br /&gt;
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== yt-dlp ====&lt;br /&gt;
&lt;br /&gt;
Cкачать плейлист YT с названием плейлиста в качестве имени папки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;yt-dlp -f &amp;quot;bestvideo[height&amp;lt;=1080]+bestaudio/best[height&amp;lt;=1080]&amp;quot; --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /&amp;quot;path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s&amp;quot; --embed-chapters https://youtube.com/playlist?list=xyz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сетевые команды ==&lt;br /&gt;
Отобразить информацию о сетевых соединениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;netstat -na&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт OpenVPN профиля в NetworkManager.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nmcli connection import type openvpn file ~/VPNs/name.ovpn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Послать Wake-on-LAN пакет на удаленную машину.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wol 00:00:00:00:00:00 -h example.com -p 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оптимизированная передача изображения с удаленного X сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo grep -r &#039;&amp;quot;-&amp;quot; &amp;quot;-&amp;quot;&#039; /var/log/nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.&lt;br /&gt;
&lt;br /&gt;
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -r -k -l 2 -p -E -nc http://site.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка файрвола ===&lt;br /&gt;
&lt;br /&gt;
==== UFW - Uncomplicated Firewall ====&lt;br /&gt;
Используется по умолчанию в Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Отобразить список активных правил в файрволе UFW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw status numbered&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 7-е правило.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw delete 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw insert 1 deny from 52.185.71.28 to any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Базы данных ==&lt;br /&gt;
&lt;br /&gt;
==== MariaDB ====&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экспортировать базу данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb-dump -u username -p database_name &amp;gt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импортировать базу данных из резервной копии. Если при импорте будет возникать ошибка &amp;lt;code&amp;gt;ERROR at line 1: Unknown command &#039;\-&#039;.&amp;lt;/code&amp;gt;, то требуется дополнительное действие: https://habr.com/ru/articles/824490/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u username -p new_database &amp;lt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Виртуализация ==&lt;br /&gt;
=== Контейнеры ===&lt;br /&gt;
==== Docker ====&lt;br /&gt;
Собрать новый образ из Dockerfile, расположенного в текущей директории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker buildx build --platform=linux/amd64 .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новый контейнер в фоне и дать ему определенное имя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список всех контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список загруженных или собранных образов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открыть bash сессию в запущенном контейнере&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker exec -it container_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -it image_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнер с данными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm container_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm $(docker ps -a -q --filter &amp;quot;ancestor=containrrr/watchtower&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить образ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi image_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все неактивные образы из системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi $(docker images -q)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать пути к файловым системам используемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker inspect $(sudo docker ps -qa) |  jq -r &#039;map([.Name, .GraphDriver.Data.MergedDir]) | .[] | &amp;quot;\(.[0])\t\(.[1])&amp;quot;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker system prune -a -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить политику перезапуска для существующего контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker update --restart unless-stopped open-webui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание компьютера ==&lt;br /&gt;
=== Очистка кэша ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccache -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить ccache кэш.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;trizen -Scc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить trizen кэш.&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Composer ===&lt;br /&gt;
Создать новый проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer create-project laravel/laravel example-site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить необходимые зависимости в существующий проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустить скрипт dev, определенный в composer.json проекта.&lt;br /&gt;
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer run dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pacman  ===&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm /var/lib/pacman/db.lck&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл блокировки базы данных pacman.&lt;br /&gt;
&lt;br /&gt;
== Системы сборки ==&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scons -c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить scons кэш.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
=== Android Debug Bridge (adb) ===&lt;br /&gt;
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb backup -noapk com.unciv.app -f unciv-data.ab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bash ==&lt;br /&gt;
=== Служебные символы ===&lt;br /&gt;
Запуск скрипта через эквивалент команды &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через &amp;lt;code&amp;gt;echo&amp;lt;/code&amp;gt; и регулярные выражения ($).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;. environment.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFI - менеджер загрузки ==&lt;br /&gt;
=== efibootmgr ===&lt;br /&gt;
==== Восстановление загрузочной записи ====&lt;br /&gt;
Обычно восстановление загрузочной записи загрузчика &#039;&#039;&#039;systemd-boot&#039;&#039;&#039; требуется после обновления прошивки (BIOS) материнской платы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Очистка и сортировка загрузочных записей ====&lt;br /&gt;
Отобразить очередь загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 4-ую запись из очереди загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -b 4 -B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить порядок загрузки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -o 0,1,2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
=== Работа с репозиториями ===&lt;br /&gt;
Инициализировать структуру Git репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить файл README.md в индекс существующего репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add README.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осуществить коммит изменений с выбранным заголовком.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &#039;Initial commit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote add origin &amp;lt;GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -u origin main&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать адреса удаленных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес удаленного репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote set-url origin &amp;lt;NEW_GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ветвление ===&lt;br /&gt;
Создать новую ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключиться на требуемую ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новую ветвь и переключиться на неё в одной команде.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -b branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить локальную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch -d branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить удаленную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -d origin branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить удаленную ветку в новую для этого локальную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch gitea master:fork&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push gitea fork:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch origin pull/103781/head:pr-103781&lt;br /&gt;
git checkout pr-103781&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все ветви, которых больше нет на удалённом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch --prune&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Инициализация, получение и извлечение всех существующих вложенных подмодулей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bare репозиторий ===&lt;br /&gt;
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для конвертации bare репозитория в &amp;quot;нормальное&amp;quot; состояние, требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git config core.bare false&lt;br /&gt;
mkdir .git&lt;br /&gt;
mv * .git/&lt;br /&gt;
git reset --hard&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SOPS ===&lt;br /&gt;
SOPS - простой и удобный инструмент для управления секретами.&lt;br /&gt;
&lt;br /&gt;
Зашифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расшифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd ==&lt;br /&gt;
=== journalctl ===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo journalctl -u act_runner.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать все сообщения для определенного сервиса.&lt;br /&gt;
&lt;br /&gt;
== X11-сервер ==&lt;br /&gt;
Включение возможности изменения раскладки клавиатуры через Alt + Shift.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setxkbmap -layout us,ru -option grp:alt_shift_toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xrandr --output eDP1 --dpi 135.09&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удаленно запустить приложение на основном дисплее.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY=:0 anydesk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=190</id>
		<title>Полезные команды Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=190"/>
		<updated>2026-06-10T14:19:42Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* Файловые операции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.&lt;br /&gt;
&lt;br /&gt;
== Файловые операции ==&lt;br /&gt;
=== Базовые команды ===&lt;br /&gt;
&lt;br /&gt;
Создать символическую ссылку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /original/path/to/file /path/to/symlink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие команды ===&lt;br /&gt;
&lt;br /&gt;
Запустить команду pwd -P в текущем каталоге и в поддиректориях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;find . -type d -exec sh -c &#039;cd -P -- &amp;quot;{}&amp;quot; &amp;amp;&amp;amp; pwd -P&#039; \;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переименовать кириллические файлы в каталоге&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;find -mindepth 1 -exec sh -c &#039;mv &amp;quot;$1&amp;quot; &amp;quot;$(echo &amp;quot;$1&amp;quot; | iconv -f cp1252 -t cp850 | iconv -f cp866 )&amp;quot;&#039; sh {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Права доступа ===&lt;br /&gt;
Изменить владельца и группу для файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown username:usergroup file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать режима доступа файла или папки в восьмеричной системе счисления Октал. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat -c %a file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оценка использования пространства накопителя ===&lt;br /&gt;
Общий отчёт об использовании пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;df -h /&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информация об использовании файлами и директориями пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -h file.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -ahx . | sort -rh | head -10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование накопителя ===&lt;br /&gt;
Низкоуровневое форматирование накопителя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Принудительно обновить таблицу разделов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo partprobe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Архивы ===&lt;br /&gt;
==== Создание ====&lt;br /&gt;
Создать tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив и исключить добавление отдельного файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --exclude=&#039;file3&#039; -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf site1.tar -C /var/www/ site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Gzip сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -czf archive.tar.gz file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Bz2 сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cjf archive.tar.bz2 file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Просмотр содержимого ====&lt;br /&gt;
Посмотреть содержимое tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -tf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l archive.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -Z1 archive.zip | xargs -I {} rm -v &amp;quot;{}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip | grep -aEv &#039;^Archive:&#039; | iconv -f iso8859-1 -t cp850 | iconv -f cp866&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Распаковка ====&lt;br /&gt;
Распаковать tar архив в текущую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распаковать tar архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar -C ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другие возможные tar команды собраны здесь:&lt;br /&gt;
&lt;br /&gt;
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/&lt;br /&gt;
&lt;br /&gt;
==== Модификация архива ====&lt;br /&gt;
&lt;br /&gt;
Добавить новый файл в tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -rvf archive.tar newfile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл из tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --delete -f archive.tar file1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Portable Document Format (PDF) ===&lt;br /&gt;
Склеить несколько pdf файлов в один.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрезать pdf по листам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftoppm Input.pdf outputname -png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изображения ===&lt;br /&gt;
==== ExifTool ====&lt;br /&gt;
Прочитать EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool 1.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool -all= 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Изменить размер изображения&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 3.jpg -resize 128x128 1.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перевернуть изображение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 4.jpg -rotate 90 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 5.jpg Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 6.jpg -background white -page a4 Output.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SANE ====&lt;br /&gt;
Получить изображение со сканера или МФУ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scanimage --format=png --output-file test.png --progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Видео ===&lt;br /&gt;
==== FFmpeg ====&lt;br /&gt;
Конвертировать аудиодорожку видео в формат MP3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i filename.mp4 filename.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделать копию видео в формате mp4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i example.mkv -c copy example.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров (Создание хардсаба).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;02.ass&amp;quot; -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;03.ass&amp;quot; -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вырезать отрезок видео в выбранном диапазоне времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MKVToolNix ====&lt;br /&gt;
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== yt-dlp ====&lt;br /&gt;
&lt;br /&gt;
Cкачать плейлист YT с названием плейлиста в качестве имени папки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;yt-dlp -f &amp;quot;bestvideo[height&amp;lt;=1080]+bestaudio/best[height&amp;lt;=1080]&amp;quot; --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /&amp;quot;path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s&amp;quot; --embed-chapters https://youtube.com/playlist?list=xyz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сетевые команды ==&lt;br /&gt;
Отобразить информацию о сетевых соединениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;netstat -na&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт OpenVPN профиля в NetworkManager.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nmcli connection import type openvpn file ~/VPNs/name.ovpn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Послать Wake-on-LAN пакет на удаленную машину.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wol 00:00:00:00:00:00 -h example.com -p 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оптимизированная передача изображения с удаленного X сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo grep -r &#039;&amp;quot;-&amp;quot; &amp;quot;-&amp;quot;&#039; /var/log/nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.&lt;br /&gt;
&lt;br /&gt;
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -r -k -l 2 -p -E -nc http://site.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка файрвола ===&lt;br /&gt;
&lt;br /&gt;
==== UFW - Uncomplicated Firewall ====&lt;br /&gt;
Используется по умолчанию в Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Отобразить список активных правил в файрволе UFW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw status numbered&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 7-е правило.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw delete 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw insert 1 deny from 52.185.71.28 to any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Базы данных ==&lt;br /&gt;
&lt;br /&gt;
==== MariaDB ====&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экспортировать базу данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb-dump -u username -p database_name &amp;gt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импортировать базу данных из резервной копии. Если при импорте будет возникать ошибка &amp;lt;code&amp;gt;ERROR at line 1: Unknown command &#039;\-&#039;.&amp;lt;/code&amp;gt;, то требуется дополнительное действие: https://habr.com/ru/articles/824490/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u username -p new_database &amp;lt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Виртуализация ==&lt;br /&gt;
=== Контейнеры ===&lt;br /&gt;
==== Docker ====&lt;br /&gt;
Собрать новый образ из Dockerfile, расположенного в текущей директории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker buildx build --platform=linux/amd64 .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новый контейнер в фоне и дать ему определенное имя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список всех контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список загруженных или собранных образов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открыть bash сессию в запущенном контейнере&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker exec -it container_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -it image_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнер с данными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm container_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm $(docker ps -a -q --filter &amp;quot;ancestor=containrrr/watchtower&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить образ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi image_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все неактивные образы из системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi $(docker images -q)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать пути к файловым системам используемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker inspect $(sudo docker ps -qa) |  jq -r &#039;map([.Name, .GraphDriver.Data.MergedDir]) | .[] | &amp;quot;\(.[0])\t\(.[1])&amp;quot;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker system prune -a -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить политику перезапуска для существующего контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker update --restart unless-stopped open-webui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание компьютера ==&lt;br /&gt;
=== Очистка кэша ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccache -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить ccache кэш.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;trizen -Scc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить trizen кэш.&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Composer ===&lt;br /&gt;
Создать новый проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer create-project laravel/laravel example-site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить необходимые зависимости в существующий проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустить скрипт dev, определенный в composer.json проекта.&lt;br /&gt;
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer run dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pacman  ===&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm /var/lib/pacman/db.lck&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл блокировки базы данных pacman.&lt;br /&gt;
&lt;br /&gt;
== Системы сборки ==&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scons -c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить scons кэш.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
=== Android Debug Bridge (adb) ===&lt;br /&gt;
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb backup -noapk com.unciv.app -f unciv-data.ab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bash ==&lt;br /&gt;
=== Служебные символы ===&lt;br /&gt;
Запуск скрипта через эквивалент команды &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через &amp;lt;code&amp;gt;echo&amp;lt;/code&amp;gt; и регулярные выражения ($).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;. environment.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFI - менеджер загрузки ==&lt;br /&gt;
=== efibootmgr ===&lt;br /&gt;
==== Восстановление загрузочной записи ====&lt;br /&gt;
Обычно восстановление загрузочной записи загрузчика &#039;&#039;&#039;systemd-boot&#039;&#039;&#039; требуется после обновления прошивки (BIOS) материнской платы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Очистка и сортировка загрузочных записей ====&lt;br /&gt;
Отобразить очередь загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 4-ую запись из очереди загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -b 4 -B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить порядок загрузки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -o 0,1,2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
=== Работа с репозиториями ===&lt;br /&gt;
Инициализировать структуру Git репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить файл README.md в индекс существующего репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add README.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осуществить коммит изменений с выбранным заголовком.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &#039;Initial commit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote add origin &amp;lt;GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -u origin main&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать адреса удаленных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес удаленного репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote set-url origin &amp;lt;NEW_GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ветвление ===&lt;br /&gt;
Создать новую ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключиться на требуемую ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новую ветвь и переключиться на неё в одной команде.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -b branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить локальную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch -d branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить удаленную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -d origin branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить удаленную ветку в новую для этого локальную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch gitea master:fork&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push gitea fork:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch origin pull/103781/head:pr-103781&lt;br /&gt;
git checkout pr-103781&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все ветви, которых больше нет на удалённом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch --prune&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Инициализация, получение и извлечение всех существующих вложенных подмодулей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bare репозиторий ===&lt;br /&gt;
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для конвертации bare репозитория в &amp;quot;нормальное&amp;quot; состояние, требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git config core.bare false&lt;br /&gt;
mkdir .git&lt;br /&gt;
mv * .git/&lt;br /&gt;
git reset --hard&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SOPS ===&lt;br /&gt;
SOPS - простой и удобный инструмент для управления секретами.&lt;br /&gt;
&lt;br /&gt;
Зашифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расшифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd ==&lt;br /&gt;
=== journalctl ===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo journalctl -u act_runner.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать все сообщения для определенного сервиса.&lt;br /&gt;
&lt;br /&gt;
== X11-сервер ==&lt;br /&gt;
Включение возможности изменения раскладки клавиатуры через Alt + Shift.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setxkbmap -layout us,ru -option grp:alt_shift_toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xrandr --output eDP1 --dpi 135.09&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удаленно запустить приложение на основном дисплее.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY=:0 anydesk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=189</id>
		<title>Установка и первичная настройка дистрибутива Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=189"/>
		<updated>2026-05-25T20:37:21Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Удалена ошибочная строка в настройках загрузочных записей&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данной статье описана типичная установка Arch Linux&#039;а с указанием специфичных различий в конфигурациях для разных компьютеров и рабочих окружений.&lt;br /&gt;
&lt;br /&gt;
== Подготовка к установке ==&lt;br /&gt;
&lt;br /&gt;
=== ssh ===&lt;br /&gt;
Если установка будет производится посредством &#039;&#039;&#039;ssh&#039;&#039;&#039; соединения с другого ПК, то перед подключением нужно задать пароль для &#039;&#039;&#039;root&#039;&#039;&#039; пользователя.&lt;br /&gt;
&lt;br /&gt;
=== Доступ в сеть ===&lt;br /&gt;
Для подключения к сети через LAN достаточно только активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер: &amp;lt;code&amp;gt;systemctl start dhcpcd.service&amp;lt;/code&amp;gt;. Чтобы настроить Wi-FI соединение нужно воспользоваться интерактивной консолью клиента &#039;&#039;&#039;iwctl&#039;&#039;&#039; для демона &#039;&#039;&#039;iwd&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Потребуется проверить идентификатор беспроводного адаптера сети Wi-Fi: &amp;lt;code&amp;gt;[iwd]# device list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Просканируем радио эфир на наличие нужной точки доступа: &amp;lt;code&amp;gt;[iwd]# station wlan0 scan&amp;lt;/code&amp;gt;&lt;br /&gt;
# Т.к. &#039;&#039;&#039;iwctl&#039;&#039;&#039; поддерживает автозаполнение ввода через клавишу tab, то можно выбрать нужную сеть после ввода первых букв её названия: &amp;lt;code&amp;gt;[iwd]# station wlan0 connect &amp;quot;Make Wi-Fi Great Again!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После подключения к точке доступа потребуется активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер.&lt;br /&gt;
&lt;br /&gt;
=== gdisk (создание gpt метки и разметка файловой системы) ===&lt;br /&gt;
 sudo gdisk /dev/nvme0n1 # или /dev/sda для SATA накопителя&lt;br /&gt;
 x&lt;br /&gt;
 l&lt;br /&gt;
 8&lt;br /&gt;
 d&lt;br /&gt;
 m&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +1G&lt;br /&gt;
 ef00&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +24G&lt;br /&gt;
 8200&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 8304&lt;br /&gt;
 w&lt;br /&gt;
 Y&lt;br /&gt;
&lt;br /&gt;
=== Создание и монтирование файловых систем ===&lt;br /&gt;
&lt;br /&gt;
Данный раздел будет разделен на обычную установку и с использованием LUKS для шифрования разделов.&lt;br /&gt;
&lt;br /&gt;
==== Обычные разделы ====&lt;br /&gt;
&lt;br /&gt;
 sudo mkfs.vfat -F32 -n EFI /dev/nvme0n1p1 # или /dev/sda1 для SATA накопителя&lt;br /&gt;
 sudo mkswap /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkfs.ext4 -b 4096 -m 0 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo swapon /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install&lt;br /&gt;
 sudo mount /dev/nvme0n1p3 /mnt/install/ # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install/boot&lt;br /&gt;
 sudo mount /dev/nvme0n1p1 /mnt/install/boot/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&lt;br /&gt;
==== LUKS разделы ====&lt;br /&gt;
&lt;br /&gt;
Для настройки шифрования необходимо инициализировать и открыть LUKS разделы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cryptsetup luksFormat --type luks2 /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksFormat --type luks2 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
cryptsetup --allow-discards --persistent luksOpen /dev/nvme0n1p3 root&lt;br /&gt;
sudo mkswap -L swap /dev/mapper/swap&lt;br /&gt;
sudo swapon /dev/mapper/swap&lt;br /&gt;
sudo mkfs.ext4 -E discard -b 4096 -m 0 -L root /dev/mapper/root&lt;br /&gt;
mount /dev/mapper/root /mnt/install&lt;br /&gt;
sudo mkdir -v /mnt/install/efi&lt;br /&gt;
sudo mount /dev/nvme0n1p1 /mnt/install/efi/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка базовой части системы ===&lt;br /&gt;
&lt;br /&gt;
Настроим список российских зеркал для Pacman:&lt;br /&gt;
&amp;lt;pre&amp;gt;reflector --country RU --age 24 --protocol https --sort rate --save /etc/pacman.d/mirrorlist&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 sudo pacstrap /mnt/install/ arch-install-scripts base base-devel bash-completion beep ccache cmake cryptsetup dosfstools git git-lfs go go-tools gptfdisk hdparm htop jre-openjdk linux linux-firmware lvm2 man-db mariadb neovim net-tools networkmanager networkmanager-openvpn ntfs-3g openssh openvpn p7zip parted pdftk pipewire pipewire-alsa pipewire-pulse python-pynvim rsync sbctl screen sudo tmux tree unzip usbutils util-linux vifm wget wireplumber wol xdg-user-dirs yt-dlp zip&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;В зависимости от производителя процессора, требуется поставить дополнительный пакет с обновлением микрокода:&#039;&#039;&#039; &amp;lt;code&amp;gt;intel-ucode&amp;lt;/code&amp;gt; &#039;&#039;&#039;или&#039;&#039;&#039; &amp;lt;code&amp;gt;amd-ucode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка базовой системы ==&lt;br /&gt;
=== Начальный этап настройки ===&lt;br /&gt;
Минимальный набор требуемых настроек для последующей настройки системы после перезагрузки.&lt;br /&gt;
 arch-chroot /mnt/install&lt;br /&gt;
 ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime&lt;br /&gt;
 sed -i &amp;quot;s/#en_US.UTF-8/en_US.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 sed -i &amp;quot;s/#ru_RU.UTF-8/ru_RU.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 locale-gen&lt;br /&gt;
 echo LANG=ru_RU.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
 echo -e &amp;quot;KEYMAP=ruwin_alt_sh-UTF-8\nFONT=cyr-sun16&amp;quot; &amp;gt; /etc/vconsole.conf&lt;br /&gt;
 export myhostname= # Создаём переменную с именем будущего хоста&lt;br /&gt;
 echo $myhostname &amp;gt; /etc/hostname&lt;br /&gt;
 echo -e &amp;quot;#\n#&amp;lt;ip-address&amp;gt;\t&amp;lt;hostname.domain.org&amp;gt;\t&amp;lt;hostname&amp;gt;\n127.0.0.1\t$myhostname.lan\t\tlocalhost $myhostname\n::1\t\t$myhostname.lan\t\tlocalhost $myhostname&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
 mkinitcpio -P&lt;br /&gt;
 sed -i &amp;quot;s/# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/&amp;quot; /etc/sudoers&lt;br /&gt;
 sed -i -e &#039;s/#Color/Color/g&#039; -e &#039;/#\[multilib\]/{N;s/#\[multilib\]\n#Include/\[multilib\]\nInclude/}&#039; /etc/pacman.conf # Включает Color и multilib&lt;br /&gt;
 systemctl enable systemd-resolved systemd-timesyncd NetworkManager sshd systemd-timesyncd&lt;br /&gt;
 systemctl mask systemd-networkd&lt;br /&gt;
&lt;br /&gt;
Создание основного пользователя:&lt;br /&gt;
&lt;br /&gt;
 useradd -m -G wheel archie&lt;br /&gt;
 passwd archie&lt;br /&gt;
&lt;br /&gt;
=== Unified Kernel Images ===&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;quiet rw&amp;quot; &amp;gt; /etc/kernel/cmdline&lt;br /&gt;
mkdir -p /efi/EFI/Linux&lt;br /&gt;
sed -i &#039;s/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block filesystems fsck)/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole sd-encrypt block filesystems fsck)/g&#039; /etc/mkinitcpio.conf&lt;br /&gt;
sed -i \&lt;br /&gt;
-e &amp;quot;s|PRESETS=(&#039;default&#039;)|#PRESETS=(&#039;default&#039;)|g&amp;quot; \&lt;br /&gt;
-e &amp;quot;s|#PRESETS=(&#039;default&#039; &#039;fallback&#039;)|PRESETS=(&#039;default&#039; &#039;fallback&#039;)|g&amp;quot; \&lt;br /&gt;
-e &#039;s|#default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_options=&amp;quot;-S autodetect&amp;quot;|fallback_options=&amp;quot;-S autodetect&amp;quot;|g&#039; \&lt;br /&gt;
/etc/mkinitcpio.d/linux.preset&lt;br /&gt;
mkinitcpio -P&lt;br /&gt;
bootctl install --esp-path=/efi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure Boot ===&lt;br /&gt;
&lt;br /&gt;
В первую очередь необходимо в BIOS сбросить все ключи и настройки Secure Boot и выключить его. Указанная команда позволит проверить наличие статуса Setup Mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbctl status&lt;br /&gt;
Installed:  ✓ sbctl is installed&lt;br /&gt;
Setup Mode: ✗ Enabled&lt;br /&gt;
Secure Boot:    ✗ Disabled&lt;br /&gt;
Vendor Keys:    none&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать персональные ключи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl create-keys&lt;br /&gt;
sudo sbctl enroll-keys -m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подпишем efi файлы и переустановим ядро Linux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux-fallback.efi&lt;br /&gt;
sudo pacman -S linux&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TPM2 разблокировка ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo systemd-cryptenroll /dev/gpt-auto-root-luks --recovery-key&lt;br /&gt;
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7  /dev/gpt-auto-root-luks --tpm2-with-pin=yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Swap раздел не был разблокирован на этапе загрузки, то необходимо это сделать сейчас:&lt;br /&gt;
&lt;br /&gt;
 sudo cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
&lt;br /&gt;
Добавим ключ для Swap раздела в TPM2.&lt;br /&gt;
&lt;br /&gt;
 sudo systemd-cryptenroll --tpm2-device auto /dev/disk/by-designator/swap-luks&lt;br /&gt;
&lt;br /&gt;
=== Завершение настройки базовой системы ===&lt;br /&gt;
Trizen менеджер пакетов для AUR: облегченная оболочка pacman и помощник AUR.&lt;br /&gt;
 cd /tmp&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://aur.archlinux.org/trizen.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd trizen&lt;br /&gt;
 makepkg -si&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и подготовка графического окружения для рабочих станции ==&lt;br /&gt;
&lt;br /&gt;
=== Установка требуемых пакетов и приложений ===&lt;br /&gt;
 pacman -S alacritty android-tools android-udev blender code filezilla gimp godot gvfs inkscape keepassxc lib32-ncurses libreoffice-fresh libreoffice-fresh-ru libva-utils mesa-demos mpv nextcloud-client noto-fonts noto-fonts-cjk noto-fonts-emoji qbittorrent steam telegram-desktop tesseract tesseract-data-eng tesseract-data-rus vlc&lt;br /&gt;
 trizen -S --noedit android-studio anydesk-bin assistant google-chrome-dev gtk2-patched-filechooser-icon-view webcord&lt;br /&gt;
&lt;br /&gt;
==== KDE ====&lt;br /&gt;
 pacman -S ark audiocd-kio dolphin dolphin-plugins ffmpegthumbs filelight icoutils kdegraphics-thumbnailers kdf kimageformats kio-admin kompare plasma resvg&lt;br /&gt;
 systemd enable plasmalogin.service&lt;br /&gt;
&lt;br /&gt;
После запуска KDE необходимо настроить раскладки клавиатуры, DPI.&lt;br /&gt;
&lt;br /&gt;
==== Sway (устарело, требуется обновление части) ====&lt;br /&gt;
 sudo pacman -S gdm sway&lt;br /&gt;
 trizen -S libdisplay-info-git rofi-lbonn-wayland-git slurp waybar xdg-desktop-portal-wlr --noedit&lt;br /&gt;
 sudo systemctl enable --now gdm&lt;br /&gt;
&lt;br /&gt;
=== Настройка путей и монтирования в домашнем каталоге ===&lt;br /&gt;
Тут необходимо решить проблему с тем, что русскоязычные папки уже могут быть созданы.&lt;br /&gt;
&lt;br /&gt;
 mkdir -pv /home/$USER/{Desktop,Databases,Downloads,Documents,Pictures,Public,Sounds,Templates,VPNs}&lt;br /&gt;
 mkdir -v /home/$USER/{Music,Videos,Work/Builds/ArchLinux} # Для устройства с одним накопителем&lt;br /&gt;
 ln -s ~/.local/share/Steam ~/Steam&lt;br /&gt;
&lt;br /&gt;
Если основной накопитель имеет малый размер и имеется возможность установки второго, то последний можно монтировать через &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; и создать симлинки на основной папки.&lt;br /&gt;
&lt;br /&gt;
 ln -s /mnt/storage/Music/ ~/Music&lt;br /&gt;
 ln -s /mnt/storage/Videos/ ~/Videos&lt;br /&gt;
 ln -s /mnt/storage/Work/ ~/Work&lt;br /&gt;
&lt;br /&gt;
=== Импортирование конфигурации ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://git.tmon8.ru/comminux/dotfiles.git&amp;lt;/nowiki&amp;gt; ~/Work/dotfiles&lt;br /&gt;
 cd ~/Work/dotfiles&lt;br /&gt;
 git checkout branch # Выбираем нужную ветку за основу&lt;br /&gt;
 mv .git/ ~/&lt;br /&gt;
 cp -r * /home/$USER/&lt;br /&gt;
 cp -r .* /home/$USER/&lt;br /&gt;
 cd ~&lt;br /&gt;
 rm -rf ~/Work/dotfiles&lt;br /&gt;
 sudo cp ~/.usr/bin/* /bin/&lt;br /&gt;
 chromexup&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные настройки и решения ===&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/Tk-Glitch/PKGBUILDS&amp;lt;/nowiki&amp;gt; ~/Work/Builds/ArchLinux/Tk-Glitch-PKGBUILDS&lt;br /&gt;
&lt;br /&gt;
=== Исправление ошибки &amp;quot;Not authorized to perform operation&amp;quot; при попытке монтирования дополнительного накопителя. ===&lt;br /&gt;
&lt;br /&gt;
Создаём это polkit правило в &amp;lt;code&amp;gt;/etc/polkit-1/rules.d/00-mount-internal.rules&amp;lt;/code&amp;gt;:&lt;br /&gt;
 polkit.addRule(function(action, subject) {&lt;br /&gt;
    if ((action.id == &amp;quot;org.freedesktop.udisks2.filesystem-mount-system&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
       subject.local &amp;amp;&amp;amp; subject.active &amp;amp;&amp;amp; subject.isInGroup(&amp;quot;storage&amp;quot;)))&lt;br /&gt;
       {&lt;br /&gt;
          return polkit.Result.YES;&lt;br /&gt;
       }&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
И добавляем нашего пользователя в группу &#039;&#039;&#039;storage&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# sudo usermod -aG storage $USER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Устаревшая секция ===&lt;br /&gt;
&lt;br /&gt;
 sudo pacman -S android-tools android-udev baobab chromium filezilla gimp gnu-netcat gvfs inkscape keepassxc lib32-ncurses libreoffice-fresh libreoffice-fresh-ru libva-utils mesa-demos minetest mpv neofetch nextcloud-client nomacs noto-fonts noto-fonts-cjk noto-fonts-emoji pavucontrol pcmanfm-qt pipewire-jack qbittorrent qt5-translations qt6-translations qutebrowser steam steam-native-runtime telegram-desktop tesseract tesseract-data-eng tesseract-data-rus ttf-liberation wine-gecko wine-mono winetricks&lt;br /&gt;
Для компьютера на базе графического процессора от Intel: &amp;lt;code&amp;gt;sudo pacman -S intel-media-driver powertop xf86-video-intel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для компьютера на базе графического процессора от AMD: &amp;lt;code&amp;gt;sudo pacman -S lib32-vulkan-radeon libva-mesa-driver vulkan-radeon xf86-video-amdgpu&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перечень Vulkan драйверов: &amp;lt;nowiki&amp;gt;https://wiki.archlinux.org/title/Vulkan&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для настройки тачпада ноутбука: &amp;lt;code&amp;gt;xorg-xinput&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 trizen -S android-studio anydesk-bin chromexup evhz-git godot lib32-gconf undistract-me-git webcord --noedit&lt;br /&gt;
 echo -e &amp;quot;source /usr/share/undistract-me/long-running.bash\nnotify_when_long_running_commands_finish_install&amp;quot; &amp;gt;&amp;gt; ~\.bashrc&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и настройка серверной станции ==&lt;br /&gt;
&lt;br /&gt;
=== Основные программы ===&lt;br /&gt;
 sudo pacman -Suy certbot-nginx composer cups ffmpeg gitea libreoffice-fresh mediawiki nextcloud nginx php-fpm php-gd php-imagick php-intl php-sodium qbittorrent-nox sane vlc vsftpd youtube-dl&lt;br /&gt;
 trizen -S gerbera minetest-git samsung-unified-driver steamcmd --noedit&lt;br /&gt;
&lt;br /&gt;
=== Настройка принтера ===&lt;br /&gt;
Несмотря на то, что &#039;&#039;&#039;cups&#039;&#039;&#039; предоставляет юнит &#039;&#039;&#039;cups.socket&#039;&#039;&#039; для запуска веб-сервера печати по запросу, лучше всего запускать сервис печати при запуске хоста, т.к. иногда задания печати могут быть пропущены и не войти в очередь для отработки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable cups.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка MariaDB и NGINX ===&lt;br /&gt;
 sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql&lt;br /&gt;
 sudo systemctl start mariadb.service&lt;br /&gt;
 sudo mysql_secure_installation&lt;br /&gt;
 sudo systemctl enable mariadb.service&lt;br /&gt;
 sudo systemctl enable vsftpd.service # Не актуально.&lt;br /&gt;
 sudo systemctl enable php-fpm.service&lt;br /&gt;
 sudo systemctl enable nginx.service&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-available&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-enabled&lt;br /&gt;
&lt;br /&gt;
Также потребуется добавить опцию sites-enabled/*; в конец блока http в файле &amp;lt;code&amp;gt;/etc/nginx/nginx.conf&amp;lt;/code&amp;gt; для возможности использования отдельных конфигураций под каждое веб-приложение:&lt;br /&gt;
&lt;br /&gt;
 http {&lt;br /&gt;
     types_hash_max_size 4096;&lt;br /&gt;
     server_names_hash_bucket_size 128;&lt;br /&gt;
     &lt;br /&gt;
     include sites-enabled/*;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Устаревшие секции ==&lt;br /&gt;
&lt;br /&gt;
Тут приведены устаревшие части настройки системы. Если systemd-boot теперь устанавливается в &amp;lt;code&amp;gt;/efi&amp;lt;/code&amp;gt;, то за автоматическое монтирование отвечает systemd, т.к. при создании разделов мы использовали метки Discoverable Partitions Specification (DPS).&lt;br /&gt;
&lt;br /&gt;
=== Установка загрузчика systemd-boot ===&lt;br /&gt;
Для копирования исполняемого файла загрузчика на EFI-раздел и добавления загрузочной записи в прошивку материнской платы можно воспользоваться инструментом из состава systemd: &amp;lt;code&amp;gt;bootctl --path=/boot install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если требуется, сторонние [[Список полезных команд Linux|загрузочные записи можно очистить]].&lt;br /&gt;
&lt;br /&gt;
Теперь берем UUID swap&#039;а и раздела монтируемого по корневому пути. (&#039;&#039;эту часть нужно улучшить, чтобы UUID был сохранён в переменную&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 ls -l /dev/disk/by-partuuid/ | grep &#039;sd[a-z][1-3]&#039;&lt;br /&gt;
 echo -e &#039;title\t\tArch Linux Kernel\nlinux\t\t/vmlinuz-linux\ninitrd\t\t/intel-ucode.img\ninitrd\t\t/initramfs-linux.img\noptions\t\troot=PARTUUID=55d7a752-7da7-4a8f-aae7-a90b63614d83 rw resume=PARTUUID=4af468e0-0c92-4dab-9a21-738fd95875d3&#039; &amp;gt;&amp;gt; /boot/loader/entries/arch.conf&lt;br /&gt;
 sudo sed  -i &#039;1i default @saved&#039; /boot/loader/loader.conf # systemd-boot будет запоминать последнюю выбранную загрузочную запись&lt;br /&gt;
&lt;br /&gt;
Завершаем работу в &#039;&#039;&#039;chroot&#039;&#039;&#039; окружении и перезагружаем компьютер для продолжения настройки системы.&lt;br /&gt;
&lt;br /&gt;
 exit&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===  Настройка fstab  ===&lt;br /&gt;
&lt;br /&gt;
 sudo genfstab -U /mnt/install &amp;gt;&amp;gt; /mnt/install/etc/fstab&lt;br /&gt;
Теперь требуется проверить и отредактировать &amp;lt;code&amp;gt;/mnt/install/etc/fstab&amp;lt;/code&amp;gt; перед следующим этапом.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 # Static information about the filesystems.&lt;br /&gt;
 # See fstab(5) for details.&lt;br /&gt;
 &lt;br /&gt;
 # &amp;lt;file system&amp;gt; &amp;lt;dir&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;&lt;br /&gt;
 # /dev/nvme0n1p3&lt;br /&gt;
 UUID=68b6d3fa-3dd1-4c2d-acd4-8956a89d7c53       /               ext4            rw,relatime     0 1&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p1&lt;br /&gt;
 UUID=CFA0-CC07          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro       0 2&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p2&lt;br /&gt;
 UUID=c9e25512-cc2d-45cf-a95e-e4cfc6dfb116       none            swap            defaults        0 0&lt;br /&gt;
Файловые системы vfat и ext4 требуют дополнительной опции &amp;lt;code&amp;gt;discard&amp;lt;/code&amp;gt; при использовании SSD накопителя:&lt;br /&gt;
 # /dev/sdX3&lt;br /&gt;
 UUID=6b0d06c4-ca05-427d-83d4-b3978595f6bb	/         	ext4      	rw,relatime,discard	0 1&lt;br /&gt;
&lt;br /&gt;
== Смотрите также ==&lt;br /&gt;
&lt;br /&gt;
* [https://walian.co.uk/arch-install-with-secure-boot-btrfs-tpm2-luks-encryption-unified-kernel-images.html Arch Install with Secure Boot, btrfs, TPM2 LUKS encryption, Unified Kernel Images. Walian&#039;s Tech/Linux Blog] - Пример полной установки Arch Linux с Secure Boot, btrfs, TPM2 LUKS шифрованием, Unified Kernel Images.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Windows&amp;diff=188</id>
		<title>Полезные команды Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Windows&amp;diff=188"/>
		<updated>2026-04-22T12:46:49Z</updated>

		<summary type="html">&lt;p&gt;Comminux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Руководство по приложениям для Windows.&lt;br /&gt;
&lt;br /&gt;
== Команды Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chcp 65001&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить страницу кода активной консоли на &amp;lt;code&amp;gt;utf-8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Scoop ===&lt;br /&gt;
Обновить установленные приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scoop update *&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить кэш и установщики.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scoop cleanup * -g -k&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== WinGet (Windows Package Manager) ===&lt;br /&gt;
&lt;br /&gt;
WinGet - встроенный в Windows пакетный менеджер. Следующая команда позволит обновить все установленные и зарегистрированные в репозитории WinGet приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;winget upgrade --all&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=187</id>
		<title>Полезные команды Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_Linux&amp;diff=187"/>
		<updated>2026-04-08T08:23:54Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* Ветвление */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.&lt;br /&gt;
&lt;br /&gt;
== Файловые операции ==&lt;br /&gt;
=== Базовые команды ===&lt;br /&gt;
&lt;br /&gt;
Создать символическую ссылку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /original/path/to/file /path/to/symlink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Общие команды ===&lt;br /&gt;
&lt;br /&gt;
Запустить команду pwd -P в текущем каталоге и в поддиректориях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;find . -type d -exec sh -c &#039;cd -P -- &amp;quot;{}&amp;quot; &amp;amp;&amp;amp; pwd -P&#039; \;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переименовать кириллические файлы в каталоге&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;find -mindepth 1 -exec sh -c &#039;mv &amp;quot;$1&amp;quot; &amp;quot;$(echo &amp;quot;$1&amp;quot; | iconv -f cp1252 -t cp850 | iconv -f cp866 )&amp;quot;&#039; sh {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Права доступа ===&lt;br /&gt;
Изменить владельца и группу для файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown username:usergroup file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать режима доступа файла или папки в восьмеричной системе счисления Октал. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat -c %a file.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оценка использования пространства накопителя ===&lt;br /&gt;
Общий отчёт об использовании пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;df -h /&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Информация об использовании файлами и директориями пространства файловой системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -h file.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;du -ahx . | sort -rh | head -10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование накопителя ===&lt;br /&gt;
Низкоуровневое форматирование накопителя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Принудительно обновить таблицу разделов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo partprobe&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Архивы ===&lt;br /&gt;
==== Создание ====&lt;br /&gt;
Создать tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив и исключить добавление отдельного файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --exclude=&#039;file3&#039; -cf archive.tar file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cf site1.tar -C /var/www/ site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Gzip сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -czf archive.tar.gz file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать tar архив с Bz2 сжатием.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -cjf archive.tar.bz2 file1 file2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Просмотр содержимого ====&lt;br /&gt;
Посмотреть содержимое tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -tf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip -l Архив.zip | grep -aEv &#039;^Archive:&#039; | iconv -f iso8859-1 -t cp850 | iconv -f cp866&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Распаковка ====&lt;br /&gt;
Распаковать tar архив в текущую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Распаковать tar архив в требуемую директорию.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -xf archive.tar -C ~/folder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Другие возможные tar команды собраны здесь:&lt;br /&gt;
&lt;br /&gt;
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/&lt;br /&gt;
&lt;br /&gt;
==== Модификация архива ====&lt;br /&gt;
&lt;br /&gt;
Добавить новый файл в tar архив.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar -rvf archive.tar newfile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл из tar архива.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;tar --delete -f archive.tar file1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Portable Document Format (PDF) ===&lt;br /&gt;
Склеить несколько pdf файлов в один.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разрезать pdf по листам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;pdftoppm Input.pdf outputname -png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изображения ===&lt;br /&gt;
==== ExifTool ====&lt;br /&gt;
Прочитать EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool 1.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все EXIF атрибуты.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;exiftool -all= 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ImageMagick ====&lt;br /&gt;
Изменить размер изображения&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 3.jpg -resize 128x128 1.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перевернуть изображение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 4.jpg -rotate 90 2.jpg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 5.jpg Result.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;convert 6.jpg -background white -page a4 Output.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SANE ====&lt;br /&gt;
Получить изображение со сканера или МФУ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scanimage --format=png --output-file test.png --progress&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Видео ===&lt;br /&gt;
==== FFmpeg ====&lt;br /&gt;
Конвертировать аудиодорожку видео в формат MP3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i filename.mp4 filename.mp3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сделать копию видео в формате mp4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -i example.mkv -c copy example.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров (Создание хардсаба).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;02.ass&amp;quot; -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ffmpeg -i &amp;quot;Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv&amp;quot; -vf subtitles=&amp;quot;03.ass&amp;quot; -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вырезать отрезок видео в выбранном диапазоне времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MKVToolNix ====&lt;br /&gt;
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== yt-dlp ====&lt;br /&gt;
&lt;br /&gt;
Cкачать плейлист YT с названием плейлиста в качестве имени папки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;yt-dlp -f &amp;quot;bestvideo[height&amp;lt;=1080]+bestaudio/best[height&amp;lt;=1080]&amp;quot; --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /&amp;quot;path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s&amp;quot; --embed-chapters https://youtube.com/playlist?list=xyz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сетевые команды ==&lt;br /&gt;
Отобразить информацию о сетевых соединениях.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;netstat -na&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импорт OpenVPN профиля в NetworkManager.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nmcli connection import type openvpn file ~/VPNs/name.ovpn&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Послать Wake-on-LAN пакет на удаленную машину.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wol 00:00:00:00:00:00 -h example.com -p 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оптимизированная передача изображения с удаленного X сервера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo grep -r &#039;&amp;quot;-&amp;quot; &amp;quot;-&amp;quot;&#039; /var/log/nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.&lt;br /&gt;
&lt;br /&gt;
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget -r -k -l 2 -p -E -nc http://site.com/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка файрвола ===&lt;br /&gt;
&lt;br /&gt;
==== UFW - Uncomplicated Firewall ====&lt;br /&gt;
Используется по умолчанию в Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Отобразить список активных правил в файрволе UFW.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw status numbered&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 7-е правило.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw delete 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw insert 1 deny from 52.185.71.28 to any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Базы данных ==&lt;br /&gt;
&lt;br /&gt;
==== MariaDB ====&lt;br /&gt;
Подключиться к серверу MariaDB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u root -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Экспортировать базу данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb-dump -u username -p database_name &amp;gt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Импортировать базу данных из резервной копии. Если при импорте будет возникать ошибка &amp;lt;code&amp;gt;ERROR at line 1: Unknown command &#039;\-&#039;.&amp;lt;/code&amp;gt;, то требуется дополнительное действие: https://habr.com/ru/articles/824490/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mariadb -u username -p new_database &amp;lt; data-dump.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Виртуализация ==&lt;br /&gt;
=== Контейнеры ===&lt;br /&gt;
==== Docker ====&lt;br /&gt;
Собрать новый образ из Dockerfile, расположенного в текущей директории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker buildx build --platform=linux/amd64 .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новый контейнер в фоне и дать ему определенное имя.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список всех контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить список загруженных или собранных образов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Открыть bash сессию в запущенном контейнере&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker exec -it container_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker run -it image_id bash&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнер с данными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm container_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker container rm $(docker ps -a -q --filter &amp;quot;ancestor=containrrr/watchtower&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить образ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi image_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все неактивные образы из системы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker rmi $(docker images -q)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать пути к файловым системам используемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker inspect $(sudo docker ps -qa) |  jq -r &#039;map([.Name, .GraphDriver.Data.MergedDir]) | .[] | &amp;quot;\(.[0])\t\(.[1])&amp;quot;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo docker system prune -a -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить политику перезапуска для существующего контейнера.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker update --restart unless-stopped open-webui&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание компьютера ==&lt;br /&gt;
=== Очистка кэша ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ccache -C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить ccache кэш.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;trizen -Scc&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить trizen кэш.&lt;br /&gt;
&lt;br /&gt;
== Пакетные менеджеры ==&lt;br /&gt;
=== Composer ===&lt;br /&gt;
Создать новый проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer create-project laravel/laravel example-site&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить необходимые зависимости в существующий проект.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запустить скрипт dev, определенный в composer.json проекта.&lt;br /&gt;
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;composer run dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pacman  ===&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm /var/lib/pacman/db.lck&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить файл блокировки базы данных pacman.&lt;br /&gt;
&lt;br /&gt;
== Системы сборки ==&lt;br /&gt;
=== Scons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scons -c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить scons кэш.&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
=== Android Debug Bridge (adb) ===&lt;br /&gt;
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adb backup -noapk com.unciv.app -f unciv-data.ab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bash ==&lt;br /&gt;
=== Служебные символы ===&lt;br /&gt;
Запуск скрипта через эквивалент команды &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt;. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через &amp;lt;code&amp;gt;echo&amp;lt;/code&amp;gt; и регулярные выражения ($).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;. environment.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EFI - менеджер загрузки ==&lt;br /&gt;
=== efibootmgr ===&lt;br /&gt;
==== Восстановление загрузочной записи ====&lt;br /&gt;
Обычно восстановление загрузочной записи загрузчика &#039;&#039;&#039;systemd-boot&#039;&#039;&#039; требуется после обновления прошивки (BIOS) материнской платы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -c -d /dev/sdX -p Y -l &amp;quot;\EFI\systemd\systemd-bootx64.efi&amp;quot; -L &amp;quot;Linux Boot Manager&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Очистка и сортировка загрузочных записей ====&lt;br /&gt;
Отобразить очередь загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить 4-ую запись из очереди загрузки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -b 4 -B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить порядок загрузки. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;efibootmgr -o 0,1,2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
=== Работа с репозиториями ===&lt;br /&gt;
Инициализировать структуру Git репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить файл README.md в индекс существующего репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git add README.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осуществить коммит изменений с выбранным заголовком.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git commit -m &#039;Initial commit&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавить удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote add origin &amp;lt;GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -u origin main&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать адреса удаленных репозиториев.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote -v&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес удаленного репозитория.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git remote set-url origin &amp;lt;NEW_GIT_URL_HERE&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ветвление ===&lt;br /&gt;
Создать новую ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключиться на требуемую ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создать новую ветвь и переключиться на неё в одной команде.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git checkout -b branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить локальную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git branch -d branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить удаленную ветку.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push -d origin branch_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузить удаленную ветку в новую для этого локальную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch gitea master:fork&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git push gitea fork:master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch origin pull/103781/head:pr-103781&lt;br /&gt;
git checkout pr-103781&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалить все ветви, которых больше нет на удалённом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git fetch --prune&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Инициализация, получение и извлечение всех существующих вложенных подмодулей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bare репозиторий ===&lt;br /&gt;
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для конвертации bare репозитория в &amp;quot;нормальное&amp;quot; состояние, требуется выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git config core.bare false&lt;br /&gt;
mkdir .git&lt;br /&gt;
mv * .git/&lt;br /&gt;
git reset --hard&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SOPS ===&lt;br /&gt;
SOPS - простой и удобный инструмент для управления секретами.&lt;br /&gt;
&lt;br /&gt;
Зашифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расшифровать файл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP &amp;quot;public key: \K(.*)&amp;quot;) --in-place ./secret.yaml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd ==&lt;br /&gt;
=== journalctl ===&lt;br /&gt;
&amp;lt;code&amp;gt;sudo journalctl -u act_runner.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Показать все сообщения для определенного сервиса.&lt;br /&gt;
&lt;br /&gt;
== X11-сервер ==&lt;br /&gt;
Включение возможности изменения раскладки клавиатуры через Alt + Shift.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;setxkbmap -layout us,ru -option grp:alt_shift_toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xrandr --output eDP1 --dpi 135.09&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удаленно запустить приложение на основном дисплее.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY=:0 anydesk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=186</id>
		<title>Установка и первичная настройка дистрибутива Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=186"/>
		<updated>2026-04-05T14:50:05Z</updated>

		<summary type="html">&lt;p&gt;Comminux: /* Завершение настройки базовой системы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данной статье описана типичная установка Arch Linux&#039;а с указанием специфичных различий в конфигурациях для разных компьютеров и рабочих окружений.&lt;br /&gt;
&lt;br /&gt;
== Подготовка к установке ==&lt;br /&gt;
&lt;br /&gt;
=== ssh ===&lt;br /&gt;
Если установка будет производится посредством &#039;&#039;&#039;ssh&#039;&#039;&#039; соединения с другого ПК, то перед подключением нужно задать пароль для &#039;&#039;&#039;root&#039;&#039;&#039; пользователя.&lt;br /&gt;
&lt;br /&gt;
=== Доступ в сеть ===&lt;br /&gt;
Для подключения к сети через LAN достаточно только активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер: &amp;lt;code&amp;gt;systemctl start dhcpcd.service&amp;lt;/code&amp;gt;. Чтобы настроить Wi-FI соединение нужно воспользоваться интерактивной консолью клиента &#039;&#039;&#039;iwctl&#039;&#039;&#039; для демона &#039;&#039;&#039;iwd&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Потребуется проверить идентификатор беспроводного адаптера сети Wi-Fi: &amp;lt;code&amp;gt;[iwd]# device list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Просканируем радио эфир на наличие нужной точки доступа: &amp;lt;code&amp;gt;[iwd]# station wlan0 scan&amp;lt;/code&amp;gt;&lt;br /&gt;
# Т.к. &#039;&#039;&#039;iwctl&#039;&#039;&#039; поддерживает автозаполнение ввода через клавишу tab, то можно выбрать нужную сеть после ввода первых букв её названия: &amp;lt;code&amp;gt;[iwd]# station wlan0 connect &amp;quot;Make Wi-Fi Great Again!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После подключения к точке доступа потребуется активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер.&lt;br /&gt;
&lt;br /&gt;
=== gdisk (создание gpt метки и разметка файловой системы) ===&lt;br /&gt;
 sudo gdisk /dev/nvme0n1 # или /dev/sda для SATA накопителя&lt;br /&gt;
 x&lt;br /&gt;
 l&lt;br /&gt;
 8&lt;br /&gt;
 d&lt;br /&gt;
 m&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +1G&lt;br /&gt;
 ef00&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +24G&lt;br /&gt;
 8200&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 8304&lt;br /&gt;
 w&lt;br /&gt;
 Y&lt;br /&gt;
&lt;br /&gt;
=== Создание и монтирование файловых систем ===&lt;br /&gt;
&lt;br /&gt;
Данный раздел будет разделен на обычную установку и с использованием LUKS для шифрования разделов.&lt;br /&gt;
&lt;br /&gt;
==== Обычные разделы ====&lt;br /&gt;
&lt;br /&gt;
 sudo mkfs.vfat -F32 -n EFI /dev/nvme0n1p1 # или /dev/sda1 для SATA накопителя&lt;br /&gt;
 sudo mkswap /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkfs.ext4 -b 4096 -m 0 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo swapon /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install&lt;br /&gt;
 sudo mount /dev/nvme0n1p3 /mnt/install/ # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install/boot&lt;br /&gt;
 sudo mount /dev/nvme0n1p1 /mnt/install/boot/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&lt;br /&gt;
==== LUKS разделы ====&lt;br /&gt;
&lt;br /&gt;
Для настройки шифрования необходимо инициализировать и открыть LUKS разделы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cryptsetup luksFormat --type luks2 /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksFormat --type luks2 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
cryptsetup --allow-discards --persistent luksOpen /dev/nvme0n1p3 root&lt;br /&gt;
sudo mkswap -L swap /dev/mapper/swap&lt;br /&gt;
sudo swapon /dev/mapper/swap&lt;br /&gt;
sudo mkfs.ext4 -E discard -b 4096 -m 0 -L root /dev/mapper/root&lt;br /&gt;
mount /dev/mapper/root /mnt/install&lt;br /&gt;
sudo mkdir -v /mnt/install/efi&lt;br /&gt;
sudo mount /dev/nvme0n1p1 /mnt/install/efi/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка базовой части системы ===&lt;br /&gt;
&lt;br /&gt;
Настроим список российских зеркал для Pacman:&lt;br /&gt;
&amp;lt;pre&amp;gt;reflector --country RU --age 24 --protocol https --sort rate --save /etc/pacman.d/mirrorlist&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 sudo pacstrap /mnt/install/ arch-install-scripts base base-devel bash-completion beep ccache cmake cryptsetup dosfstools git git-lfs go go-tools gptfdisk hdparm htop jre-openjdk linux linux-firmware lvm2 man-db mariadb neovim net-tools networkmanager networkmanager-openvpn ntfs-3g openssh openvpn p7zip parted pdftk pipewire pipewire-alsa pipewire-pulse python-pynvim rsync sbctl screen sudo tmux tree unzip usbutils util-linux vifm wget wireplumber wol xdg-user-dirs yt-dlp zip&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;В зависимости от производителя процессора, требуется поставить дополнительный пакет с обновлением микрокода:&#039;&#039;&#039; &amp;lt;code&amp;gt;intel-ucode&amp;lt;/code&amp;gt; &#039;&#039;&#039;или&#039;&#039;&#039; &amp;lt;code&amp;gt;amd-ucode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка базовой системы ==&lt;br /&gt;
=== Начальный этап настройки ===&lt;br /&gt;
Минимальный набор требуемых настроек для последующей настройки системы после перезагрузки.&lt;br /&gt;
 arch-chroot /mnt/install&lt;br /&gt;
 ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime&lt;br /&gt;
 sed -i &amp;quot;s/#en_US.UTF-8/en_US.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 sed -i &amp;quot;s/#ru_RU.UTF-8/ru_RU.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 locale-gen&lt;br /&gt;
 echo LANG=ru_RU.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
 echo -e &amp;quot;KEYMAP=ruwin_alt_sh-UTF-8\nFONT=cyr-sun16&amp;quot; &amp;gt; /etc/vconsole.conf&lt;br /&gt;
 export myhostname= # Создаём переменную с именем будущего хоста&lt;br /&gt;
 echo $myhostname &amp;gt; /etc/hostname&lt;br /&gt;
 echo -e &amp;quot;#\n#&amp;lt;ip-address&amp;gt;\t&amp;lt;hostname.domain.org&amp;gt;\t&amp;lt;hostname&amp;gt;\n127.0.0.1\t$myhostname.lan\t\tlocalhost $myhostname\n::1\t\t$myhostname.lan\t\tlocalhost $myhostname&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
 mkinitcpio -P&lt;br /&gt;
 sed -i &amp;quot;s/# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/&amp;quot; /etc/sudoers&lt;br /&gt;
 sed -i -e &#039;s/#Color/Color/g&#039; -e &#039;/#\[multilib\]/{N;s/#\[multilib\]\n#Include/\[multilib\]\nInclude/}&#039; /etc/pacman.conf # Включает Color и multilib&lt;br /&gt;
 systemctl enable systemd-resolved systemd-timesyncd NetworkManager sshd systemd-timesyncd&lt;br /&gt;
 systemctl mask systemd-networkd&lt;br /&gt;
&lt;br /&gt;
Создание основного пользователя:&lt;br /&gt;
&lt;br /&gt;
 useradd -m -G wheel archie&lt;br /&gt;
 passwd archie&lt;br /&gt;
&lt;br /&gt;
=== Unified Kernel Images ===&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;quiet rw&amp;quot; &amp;gt; /etc/kernel/cmdline&lt;br /&gt;
mkdir -p /efi/EFI/Linux&lt;br /&gt;
sed -i &#039;s/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block filesystems fsck)/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole sd-encrypt block filesystems fsck)/g&#039; /etc/mkinitcpio.conf&lt;br /&gt;
sed -i \&lt;br /&gt;
-e &amp;quot;s|PRESETS=(&#039;default&#039;)|#PRESETS=(&#039;default&#039;)|g&amp;quot; \&lt;br /&gt;
-e &amp;quot;s|#PRESETS=(&#039;default&#039; &#039;fallback&#039;)|PRESETS=(&#039;default&#039; &#039;fallback&#039;)|g&amp;quot; \&lt;br /&gt;
-e &#039;s|#default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_options=&amp;quot;-S autodetect&amp;quot;|fallback_options=&amp;quot;-S autodetect&amp;quot;|g&#039; \&lt;br /&gt;
/etc/mkinitcpio.d/linux.preset&lt;br /&gt;
mkinitcpio -P&lt;br /&gt;
bootctl install --esp-path=/efi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure Boot ===&lt;br /&gt;
&lt;br /&gt;
В первую очередь необходимо в BIOS сбросить все ключи и настройки Secure Boot и выключить его. Указанная команда позволит проверить наличие статуса Setup Mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbctl status&lt;br /&gt;
Installed:  ✓ sbctl is installed&lt;br /&gt;
Setup Mode: ✗ Enabled&lt;br /&gt;
Secure Boot:    ✗ Disabled&lt;br /&gt;
Vendor Keys:    none&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать персональные ключи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl create-keys&lt;br /&gt;
sudo sbctl enroll-keys -m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подпишем efi файлы и переустановим ядро Linux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux-fallback.efi&lt;br /&gt;
sudo pacman -S linux&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TPM2 разблокировка ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo systemd-cryptenroll /dev/gpt-auto-root-luks --recovery-key&lt;br /&gt;
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7  /dev/gpt-auto-root-luks --tpm2-with-pin=yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Swap раздел не был разблокирован на этапе загрузки, то необходимо это сделать сейчас:&lt;br /&gt;
&lt;br /&gt;
 sudo cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
&lt;br /&gt;
Добавим ключ для Swap раздела в TPM2.&lt;br /&gt;
&lt;br /&gt;
 sudo systemd-cryptenroll --tpm2-device auto /dev/disk/by-designator/swap-luks&lt;br /&gt;
&lt;br /&gt;
=== Завершение настройки базовой системы ===&lt;br /&gt;
Trizen менеджер пакетов для AUR: облегченная оболочка pacman и помощник AUR.&lt;br /&gt;
 cd /tmp&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://aur.archlinux.org/trizen.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd trizen&lt;br /&gt;
 makepkg -si&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и подготовка графического окружения для рабочих станции ==&lt;br /&gt;
&lt;br /&gt;
=== Установка требуемых пакетов и приложений ===&lt;br /&gt;
 pacman -S alacritty android-tools android-udev blender code filezilla gimp godot gvfs inkscape keepassxc lib32-ncurses libreoffice-fresh libreoffice-fresh-ru libva-utils mesa-demos mpv nextcloud-client noto-fonts noto-fonts-cjk noto-fonts-emoji qbittorrent steam telegram-desktop tesseract tesseract-data-eng tesseract-data-rus vlc&lt;br /&gt;
 trizen -S --noedit android-studio anydesk-bin assistant google-chrome-dev gtk2-patched-filechooser-icon-view webcord&lt;br /&gt;
&lt;br /&gt;
==== KDE ====&lt;br /&gt;
 pacman -S ark audiocd-kio dolphin dolphin-plugins ffmpegthumbs filelight icoutils kdegraphics-thumbnailers kdf kimageformats kio-admin kompare plasma resvg&lt;br /&gt;
 systemd enable plasmalogin.service&lt;br /&gt;
&lt;br /&gt;
После запуска KDE необходимо настроить раскладки клавиатуры, DPI.&lt;br /&gt;
&lt;br /&gt;
==== Sway (устарело, требуется обновление части) ====&lt;br /&gt;
 sudo pacman -S gdm sway&lt;br /&gt;
 trizen -S libdisplay-info-git rofi-lbonn-wayland-git slurp waybar xdg-desktop-portal-wlr --noedit&lt;br /&gt;
 sudo systemctl enable --now gdm&lt;br /&gt;
&lt;br /&gt;
=== Настройка путей и монтирования в домашнем каталоге ===&lt;br /&gt;
Тут необходимо решить проблему с тем, что русскоязычные папки уже могут быть созданы.&lt;br /&gt;
&lt;br /&gt;
 mkdir -pv /home/$USER/{Desktop,Databases,Downloads,Documents,Pictures,Public,Sounds,Templates,VPNs}&lt;br /&gt;
 mkdir -v /home/$USER/{Music,Videos,Work/Builds/ArchLinux} # Для устройства с одним накопителем&lt;br /&gt;
 ln -s ~/.local/share/Steam ~/Steam&lt;br /&gt;
&lt;br /&gt;
Если основной накопитель имеет малый размер и имеется возможность установки второго, то последний можно монтировать через &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; и создать симлинки на основной папки.&lt;br /&gt;
&lt;br /&gt;
 ln -s /mnt/storage/Music/ ~/Music&lt;br /&gt;
 ln -s /mnt/storage/Videos/ ~/Videos&lt;br /&gt;
 ln -s /mnt/storage/Work/ ~/Work&lt;br /&gt;
&lt;br /&gt;
=== Импортирование конфигурации ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://git.tmon8.ru/comminux/dotfiles.git&amp;lt;/nowiki&amp;gt; ~/Work/dotfiles&lt;br /&gt;
 cd ~/Work/dotfiles&lt;br /&gt;
 git checkout branch # Выбираем нужную ветку за основу&lt;br /&gt;
 mv .git/ ~/&lt;br /&gt;
 cp -r * /home/$USER/&lt;br /&gt;
 cp -r .* /home/$USER/&lt;br /&gt;
 cd ~&lt;br /&gt;
 rm -rf ~/Work/dotfiles&lt;br /&gt;
 sudo cp ~/.usr/bin/* /bin/&lt;br /&gt;
 chromexup&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные настройки и решения ===&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/Tk-Glitch/PKGBUILDS&amp;lt;/nowiki&amp;gt; ~/Work/Builds/ArchLinux/Tk-Glitch-PKGBUILDS&lt;br /&gt;
&lt;br /&gt;
=== Исправление ошибки &amp;quot;Not authorized to perform operation&amp;quot; при попытке монтирования дополнительного накопителя. ===&lt;br /&gt;
&lt;br /&gt;
Создаём это polkit правило в &amp;lt;code&amp;gt;/etc/polkit-1/rules.d/00-mount-internal.rules&amp;lt;/code&amp;gt;:&lt;br /&gt;
 polkit.addRule(function(action, subject) {&lt;br /&gt;
    if ((action.id == &amp;quot;org.freedesktop.udisks2.filesystem-mount-system&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
       subject.local &amp;amp;&amp;amp; subject.active &amp;amp;&amp;amp; subject.isInGroup(&amp;quot;storage&amp;quot;)))&lt;br /&gt;
       {&lt;br /&gt;
          return polkit.Result.YES;&lt;br /&gt;
       }&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
И добавляем нашего пользователя в группу &#039;&#039;&#039;storage&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# sudo usermod -aG storage $USER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Устаревшая секция ===&lt;br /&gt;
&lt;br /&gt;
 sudo pacman -S android-tools android-udev baobab chromium filezilla gimp gnu-netcat gvfs inkscape keepassxc lib32-ncurses libreoffice-fresh libreoffice-fresh-ru libva-utils mesa-demos minetest mpv neofetch nextcloud-client nomacs noto-fonts noto-fonts-cjk noto-fonts-emoji pavucontrol pcmanfm-qt pipewire-jack qbittorrent qt5-translations qt6-translations qutebrowser steam steam-native-runtime telegram-desktop tesseract tesseract-data-eng tesseract-data-rus ttf-liberation wine-gecko wine-mono winetricks&lt;br /&gt;
Для компьютера на базе графического процессора от Intel: &amp;lt;code&amp;gt;sudo pacman -S intel-media-driver powertop xf86-video-intel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для компьютера на базе графического процессора от AMD: &amp;lt;code&amp;gt;sudo pacman -S lib32-vulkan-radeon libva-mesa-driver vulkan-radeon xf86-video-amdgpu&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перечень Vulkan драйверов: &amp;lt;nowiki&amp;gt;https://wiki.archlinux.org/title/Vulkan&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для настройки тачпада ноутбука: &amp;lt;code&amp;gt;xorg-xinput&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 trizen -S android-studio anydesk-bin chromexup evhz-git godot lib32-gconf undistract-me-git webcord --noedit&lt;br /&gt;
 echo -e &amp;quot;source /usr/share/undistract-me/long-running.bash\nnotify_when_long_running_commands_finish_install&amp;quot; &amp;gt;&amp;gt; ~\.bashrc&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и настройка серверной станции ==&lt;br /&gt;
&lt;br /&gt;
=== Основные программы ===&lt;br /&gt;
 sudo pacman -Suy certbot-nginx composer cups ffmpeg gitea libreoffice-fresh mediawiki nextcloud nginx php-fpm php-gd php-imagick php-intl php-sodium qbittorrent-nox sane vlc vsftpd youtube-dl&lt;br /&gt;
 trizen -S gerbera minetest-git samsung-unified-driver steamcmd --noedit&lt;br /&gt;
&lt;br /&gt;
=== Настройка принтера ===&lt;br /&gt;
Несмотря на то, что &#039;&#039;&#039;cups&#039;&#039;&#039; предоставляет юнит &#039;&#039;&#039;cups.socket&#039;&#039;&#039; для запуска веб-сервера печати по запросу, лучше всего запускать сервис печати при запуске хоста, т.к. иногда задания печати могут быть пропущены и не войти в очередь для отработки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable cups.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка MariaDB и NGINX ===&lt;br /&gt;
 sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql&lt;br /&gt;
 sudo systemctl start mariadb.service&lt;br /&gt;
 sudo mysql_secure_installation&lt;br /&gt;
 sudo systemctl enable mariadb.service&lt;br /&gt;
 sudo systemctl enable vsftpd.service # Не актуально.&lt;br /&gt;
 sudo systemctl enable php-fpm.service&lt;br /&gt;
 sudo systemctl enable nginx.service&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-available&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-enabled&lt;br /&gt;
&lt;br /&gt;
Также потребуется добавить опцию sites-enabled/*; в конец блока http в файле &amp;lt;code&amp;gt;/etc/nginx/nginx.conf&amp;lt;/code&amp;gt; для возможности использования отдельных конфигураций под каждое веб-приложение:&lt;br /&gt;
&lt;br /&gt;
 http {&lt;br /&gt;
     types_hash_max_size 4096;&lt;br /&gt;
     server_names_hash_bucket_size 128;&lt;br /&gt;
     &lt;br /&gt;
     include sites-enabled/*;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Устаревшие секции ==&lt;br /&gt;
&lt;br /&gt;
Тут приведены устаревшие части настройки системы. Если systemd-boot теперь устанавливается в &amp;lt;code&amp;gt;/efi&amp;lt;/code&amp;gt;, то за автоматическое монтирование отвечает systemd, т.к. при создании разделов мы использовали метки Discoverable Partitions Specification (DPS).&lt;br /&gt;
&lt;br /&gt;
=== Установка загрузчика systemd-boot ===&lt;br /&gt;
Для копирования исполняемого файла загрузчика на EFI-раздел и добавления загрузочной записи в прошивку материнской платы можно воспользоваться инструментом из состава systemd: &amp;lt;code&amp;gt;bootctl --path=/boot install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если требуется, сторонние [[Список полезных команд Linux|загрузочные записи можно очистить]].&lt;br /&gt;
&lt;br /&gt;
Теперь берем UUID swap&#039;а и раздела монтируемого по корневому пути. (&#039;&#039;эту часть нужно улучшить, чтобы UUID был сохранён в переменную&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 ls -l /dev/disk/by-partuuid/ | grep &#039;sd[a-z][1-3]&#039;&lt;br /&gt;
 echo -e &#039;title\t\tArch Linux Kernel\nlinux\t\t/vmlinuz-linux\ninitrd\t\t/intel-ucode.img\ninitrd\t\t/initramfs-linux.img\noptions\t\troot=PARTUUID=55d7a752-7da7-4a8f-aae7-a90b63614d83 rw resume=PARTUUID=4af468e0-0c92-4dab-9a21-738fd95875d3&#039; &amp;gt;&amp;gt; /boot/loader/entries/arch.conf&lt;br /&gt;
 sed -i &amp;quot;s/#timeout 3/timeout 3/&amp;quot; /etc/sudoers&lt;br /&gt;
 sudo sed  -i &#039;1i default @saved&#039; /boot/loader/loader.conf # systemd-boot будет запоминать последнюю выбранную загрузочную запись&lt;br /&gt;
&lt;br /&gt;
Завершаем работу в &#039;&#039;&#039;chroot&#039;&#039;&#039; окружении и перезагружаем компьютер для продолжения настройки системы.&lt;br /&gt;
&lt;br /&gt;
 exit&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===  Настройка fstab  ===&lt;br /&gt;
&lt;br /&gt;
 sudo genfstab -U /mnt/install &amp;gt;&amp;gt; /mnt/install/etc/fstab&lt;br /&gt;
Теперь требуется проверить и отредактировать &amp;lt;code&amp;gt;/mnt/install/etc/fstab&amp;lt;/code&amp;gt; перед следующим этапом.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 # Static information about the filesystems.&lt;br /&gt;
 # See fstab(5) for details.&lt;br /&gt;
 &lt;br /&gt;
 # &amp;lt;file system&amp;gt; &amp;lt;dir&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;&lt;br /&gt;
 # /dev/nvme0n1p3&lt;br /&gt;
 UUID=68b6d3fa-3dd1-4c2d-acd4-8956a89d7c53       /               ext4            rw,relatime     0 1&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p1&lt;br /&gt;
 UUID=CFA0-CC07          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro       0 2&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p2&lt;br /&gt;
 UUID=c9e25512-cc2d-45cf-a95e-e4cfc6dfb116       none            swap            defaults        0 0&lt;br /&gt;
Файловые системы vfat и ext4 требуют дополнительной опции &amp;lt;code&amp;gt;discard&amp;lt;/code&amp;gt; при использовании SSD накопителя:&lt;br /&gt;
 # /dev/sdX3&lt;br /&gt;
 UUID=6b0d06c4-ca05-427d-83d4-b3978595f6bb	/         	ext4      	rw,relatime,discard	0 1&lt;br /&gt;
&lt;br /&gt;
== Смотрите также ==&lt;br /&gt;
&lt;br /&gt;
* [https://walian.co.uk/arch-install-with-secure-boot-btrfs-tpm2-luks-encryption-unified-kernel-images.html Arch Install with Secure Boot, btrfs, TPM2 LUKS encryption, Unified Kernel Images. Walian&#039;s Tech/Linux Blog] - Пример полной установки Arch Linux с Secure Boot, btrfs, TPM2 LUKS шифрованием, Unified Kernel Images.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=185</id>
		<title>Установка и первичная настройка дистрибутива Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=185"/>
		<updated>2026-04-05T13:45:36Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Отсортированы пакеты&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данной статье описана типичная установка Arch Linux&#039;а с указанием специфичных различий в конфигурациях для разных компьютеров и рабочих окружений.&lt;br /&gt;
&lt;br /&gt;
== Подготовка к установке ==&lt;br /&gt;
&lt;br /&gt;
=== ssh ===&lt;br /&gt;
Если установка будет производится посредством &#039;&#039;&#039;ssh&#039;&#039;&#039; соединения с другого ПК, то перед подключением нужно задать пароль для &#039;&#039;&#039;root&#039;&#039;&#039; пользователя.&lt;br /&gt;
&lt;br /&gt;
=== Доступ в сеть ===&lt;br /&gt;
Для подключения к сети через LAN достаточно только активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер: &amp;lt;code&amp;gt;systemctl start dhcpcd.service&amp;lt;/code&amp;gt;. Чтобы настроить Wi-FI соединение нужно воспользоваться интерактивной консолью клиента &#039;&#039;&#039;iwctl&#039;&#039;&#039; для демона &#039;&#039;&#039;iwd&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Потребуется проверить идентификатор беспроводного адаптера сети Wi-Fi: &amp;lt;code&amp;gt;[iwd]# device list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Просканируем радио эфир на наличие нужной точки доступа: &amp;lt;code&amp;gt;[iwd]# station wlan0 scan&amp;lt;/code&amp;gt;&lt;br /&gt;
# Т.к. &#039;&#039;&#039;iwctl&#039;&#039;&#039; поддерживает автозаполнение ввода через клавишу tab, то можно выбрать нужную сеть после ввода первых букв её названия: &amp;lt;code&amp;gt;[iwd]# station wlan0 connect &amp;quot;Make Wi-Fi Great Again!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После подключения к точке доступа потребуется активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер.&lt;br /&gt;
&lt;br /&gt;
=== gdisk (создание gpt метки и разметка файловой системы) ===&lt;br /&gt;
 sudo gdisk /dev/nvme0n1 # или /dev/sda для SATA накопителя&lt;br /&gt;
 x&lt;br /&gt;
 l&lt;br /&gt;
 8&lt;br /&gt;
 d&lt;br /&gt;
 m&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +1G&lt;br /&gt;
 ef00&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +24G&lt;br /&gt;
 8200&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 8304&lt;br /&gt;
 w&lt;br /&gt;
 Y&lt;br /&gt;
&lt;br /&gt;
=== Создание и монтирование файловых систем ===&lt;br /&gt;
&lt;br /&gt;
Данный раздел будет разделен на обычную установку и с использованием LUKS для шифрования разделов.&lt;br /&gt;
&lt;br /&gt;
==== Обычные разделы ====&lt;br /&gt;
&lt;br /&gt;
 sudo mkfs.vfat -F32 -n EFI /dev/nvme0n1p1 # или /dev/sda1 для SATA накопителя&lt;br /&gt;
 sudo mkswap /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkfs.ext4 -b 4096 -m 0 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo swapon /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install&lt;br /&gt;
 sudo mount /dev/nvme0n1p3 /mnt/install/ # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install/boot&lt;br /&gt;
 sudo mount /dev/nvme0n1p1 /mnt/install/boot/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&lt;br /&gt;
==== LUKS разделы ====&lt;br /&gt;
&lt;br /&gt;
Для настройки шифрования необходимо инициализировать и открыть LUKS разделы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cryptsetup luksFormat --type luks2 /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksFormat --type luks2 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
cryptsetup --allow-discards --persistent luksOpen /dev/nvme0n1p3 root&lt;br /&gt;
sudo mkswap -L swap /dev/mapper/swap&lt;br /&gt;
sudo swapon /dev/mapper/swap&lt;br /&gt;
sudo mkfs.ext4 -E discard -b 4096 -m 0 -L root /dev/mapper/root&lt;br /&gt;
mount /dev/mapper/root /mnt/install&lt;br /&gt;
sudo mkdir -v /mnt/install/efi&lt;br /&gt;
sudo mount /dev/nvme0n1p1 /mnt/install/efi/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка базовой части системы ===&lt;br /&gt;
&lt;br /&gt;
Настроим список российских зеркал для Pacman:&lt;br /&gt;
&amp;lt;pre&amp;gt;reflector --country RU --age 24 --protocol https --sort rate --save /etc/pacman.d/mirrorlist&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 sudo pacstrap /mnt/install/ arch-install-scripts base base-devel bash-completion beep ccache cmake cryptsetup dosfstools git git-lfs go go-tools gptfdisk hdparm htop jre-openjdk linux linux-firmware lvm2 man-db mariadb neovim net-tools networkmanager networkmanager-openvpn ntfs-3g openssh openvpn p7zip parted pdftk pipewire pipewire-alsa pipewire-pulse python-pynvim rsync sbctl screen sudo tmux tree unzip usbutils util-linux vifm wget wireplumber wol xdg-user-dirs yt-dlp zip&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;В зависимости от производителя процессора, требуется поставить дополнительный пакет с обновлением микрокода:&#039;&#039;&#039; &amp;lt;code&amp;gt;intel-ucode&amp;lt;/code&amp;gt; &#039;&#039;&#039;или&#039;&#039;&#039; &amp;lt;code&amp;gt;amd-ucode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка базовой системы ==&lt;br /&gt;
=== Начальный этап настройки ===&lt;br /&gt;
Минимальный набор требуемых настроек для последующей настройки системы после перезагрузки.&lt;br /&gt;
 arch-chroot /mnt/install&lt;br /&gt;
 ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime&lt;br /&gt;
 sed -i &amp;quot;s/#en_US.UTF-8/en_US.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 sed -i &amp;quot;s/#ru_RU.UTF-8/ru_RU.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 locale-gen&lt;br /&gt;
 echo LANG=ru_RU.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
 echo -e &amp;quot;KEYMAP=ruwin_alt_sh-UTF-8\nFONT=cyr-sun16&amp;quot; &amp;gt; /etc/vconsole.conf&lt;br /&gt;
 export myhostname= # Создаём переменную с именем будущего хоста&lt;br /&gt;
 echo $myhostname &amp;gt; /etc/hostname&lt;br /&gt;
 echo -e &amp;quot;#\n#&amp;lt;ip-address&amp;gt;\t&amp;lt;hostname.domain.org&amp;gt;\t&amp;lt;hostname&amp;gt;\n127.0.0.1\t$myhostname.lan\t\tlocalhost $myhostname\n::1\t\t$myhostname.lan\t\tlocalhost $myhostname&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
 mkinitcpio -P&lt;br /&gt;
 sed -i &amp;quot;s/# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/&amp;quot; /etc/sudoers&lt;br /&gt;
 sed -i -e &#039;s/#Color/Color/g&#039; -e &#039;/#\[multilib\]/{N;s/#\[multilib\]\n#Include/\[multilib\]\nInclude/}&#039; /etc/pacman.conf # Включает Color и multilib&lt;br /&gt;
 systemctl enable systemd-resolved systemd-timesyncd NetworkManager sshd systemd-timesyncd&lt;br /&gt;
 systemctl mask systemd-networkd&lt;br /&gt;
&lt;br /&gt;
Создание основного пользователя:&lt;br /&gt;
&lt;br /&gt;
 useradd -m -G wheel archie&lt;br /&gt;
 passwd archie&lt;br /&gt;
&lt;br /&gt;
=== Unified Kernel Images ===&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;quiet rw&amp;quot; &amp;gt; /etc/kernel/cmdline&lt;br /&gt;
mkdir -p /efi/EFI/Linux&lt;br /&gt;
sed -i &#039;s/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block filesystems fsck)/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole sd-encrypt block filesystems fsck)/g&#039; /etc/mkinitcpio.conf&lt;br /&gt;
sed -i \&lt;br /&gt;
-e &amp;quot;s|PRESETS=(&#039;default&#039;)|#PRESETS=(&#039;default&#039;)|g&amp;quot; \&lt;br /&gt;
-e &amp;quot;s|#PRESETS=(&#039;default&#039; &#039;fallback&#039;)|PRESETS=(&#039;default&#039; &#039;fallback&#039;)|g&amp;quot; \&lt;br /&gt;
-e &#039;s|#default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_options=&amp;quot;-S autodetect&amp;quot;|fallback_options=&amp;quot;-S autodetect&amp;quot;|g&#039; \&lt;br /&gt;
/etc/mkinitcpio.d/linux.preset&lt;br /&gt;
mkinitcpio -P&lt;br /&gt;
bootctl install --esp-path=/efi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure Boot ===&lt;br /&gt;
&lt;br /&gt;
В первую очередь необходимо в BIOS сбросить все ключи и настройки Secure Boot и выключить его. Указанная команда позволит проверить наличие статуса Setup Mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbctl status&lt;br /&gt;
Installed:  ✓ sbctl is installed&lt;br /&gt;
Setup Mode: ✗ Enabled&lt;br /&gt;
Secure Boot:    ✗ Disabled&lt;br /&gt;
Vendor Keys:    none&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать персональные ключи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl create-keys&lt;br /&gt;
sudo sbctl enroll-keys -m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подпишем efi файлы и переустановим ядро Linux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux-fallback.efi&lt;br /&gt;
sudo pacman -S linux&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TPM2 разблокировка ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo systemd-cryptenroll /dev/gpt-auto-root-luks --recovery-key&lt;br /&gt;
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7  /dev/gpt-auto-root-luks --tpm2-with-pin=yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Swap раздел не был разблокирован на этапе загрузки, то необходимо это сделать сейчас:&lt;br /&gt;
&lt;br /&gt;
 sudo cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
&lt;br /&gt;
Добавим ключ для Swap раздела в TPM2.&lt;br /&gt;
&lt;br /&gt;
 sudo systemd-cryptenroll --tpm2-device auto /dev/disk/by-designator/swap-luks&lt;br /&gt;
&lt;br /&gt;
=== Завершения настройки базовой системы ===&lt;br /&gt;
Trizen менеджер пакетов для AUR: облегченная оболочка pacman и помощник AUR.&lt;br /&gt;
 cd /tmp&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://aur.archlinux.org/trizen.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd trizen&lt;br /&gt;
 makepkg -si&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и подготовка графического окружения для рабочих станции ==&lt;br /&gt;
&lt;br /&gt;
=== Установка требуемых пакетов и приложений ===&lt;br /&gt;
 pacman -S alacritty android-tools android-udev blender code filezilla gimp godot gvfs inkscape keepassxc lib32-ncurses libreoffice-fresh libreoffice-fresh-ru libva-utils mesa-demos mpv nextcloud-client noto-fonts noto-fonts-cjk noto-fonts-emoji qbittorrent steam telegram-desktop tesseract tesseract-data-eng tesseract-data-rus vlc&lt;br /&gt;
 trizen -S --noedit android-studio anydesk-bin assistant google-chrome-dev gtk2-patched-filechooser-icon-view webcord&lt;br /&gt;
&lt;br /&gt;
==== KDE ====&lt;br /&gt;
 pacman -S ark audiocd-kio dolphin dolphin-plugins ffmpegthumbs filelight icoutils kdegraphics-thumbnailers kdf kimageformats kio-admin kompare plasma resvg&lt;br /&gt;
 systemd enable plasmalogin.service&lt;br /&gt;
&lt;br /&gt;
После запуска KDE необходимо настроить раскладки клавиатуры, DPI.&lt;br /&gt;
&lt;br /&gt;
==== Sway (устарело, требуется обновление части) ====&lt;br /&gt;
 sudo pacman -S gdm sway&lt;br /&gt;
 trizen -S libdisplay-info-git rofi-lbonn-wayland-git slurp waybar xdg-desktop-portal-wlr --noedit&lt;br /&gt;
 sudo systemctl enable --now gdm&lt;br /&gt;
&lt;br /&gt;
=== Настройка путей и монтирования в домашнем каталоге ===&lt;br /&gt;
Тут необходимо решить проблему с тем, что русскоязычные папки уже могут быть созданы.&lt;br /&gt;
&lt;br /&gt;
 mkdir -pv /home/$USER/{Desktop,Databases,Downloads,Documents,Pictures,Public,Sounds,Templates,VPNs}&lt;br /&gt;
 mkdir -v /home/$USER/{Music,Videos,Work/Builds/ArchLinux} # Для устройства с одним накопителем&lt;br /&gt;
 ln -s ~/.local/share/Steam ~/Steam&lt;br /&gt;
&lt;br /&gt;
Если основной накопитель имеет малый размер и имеется возможность установки второго, то последний можно монтировать через &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; и создать симлинки на основной папки.&lt;br /&gt;
&lt;br /&gt;
 ln -s /mnt/storage/Music/ ~/Music&lt;br /&gt;
 ln -s /mnt/storage/Videos/ ~/Videos&lt;br /&gt;
 ln -s /mnt/storage/Work/ ~/Work&lt;br /&gt;
&lt;br /&gt;
=== Импортирование конфигурации ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://git.tmon8.ru/comminux/dotfiles.git&amp;lt;/nowiki&amp;gt; ~/Work/dotfiles&lt;br /&gt;
 cd ~/Work/dotfiles&lt;br /&gt;
 git checkout branch # Выбираем нужную ветку за основу&lt;br /&gt;
 mv .git/ ~/&lt;br /&gt;
 cp -r * /home/$USER/&lt;br /&gt;
 cp -r .* /home/$USER/&lt;br /&gt;
 cd ~&lt;br /&gt;
 rm -rf ~/Work/dotfiles&lt;br /&gt;
 sudo cp ~/.usr/bin/* /bin/&lt;br /&gt;
 chromexup&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные настройки и решения ===&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/Tk-Glitch/PKGBUILDS&amp;lt;/nowiki&amp;gt; ~/Work/Builds/ArchLinux/Tk-Glitch-PKGBUILDS&lt;br /&gt;
&lt;br /&gt;
=== Исправление ошибки &amp;quot;Not authorized to perform operation&amp;quot; при попытке монтирования дополнительного накопителя. ===&lt;br /&gt;
&lt;br /&gt;
Создаём это polkit правило в &amp;lt;code&amp;gt;/etc/polkit-1/rules.d/00-mount-internal.rules&amp;lt;/code&amp;gt;:&lt;br /&gt;
 polkit.addRule(function(action, subject) {&lt;br /&gt;
    if ((action.id == &amp;quot;org.freedesktop.udisks2.filesystem-mount-system&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
       subject.local &amp;amp;&amp;amp; subject.active &amp;amp;&amp;amp; subject.isInGroup(&amp;quot;storage&amp;quot;)))&lt;br /&gt;
       {&lt;br /&gt;
          return polkit.Result.YES;&lt;br /&gt;
       }&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
И добавляем нашего пользователя в группу &#039;&#039;&#039;storage&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# sudo usermod -aG storage $USER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Устаревшая секция ===&lt;br /&gt;
&lt;br /&gt;
 sudo pacman -S android-tools android-udev baobab chromium filezilla gimp gnu-netcat gvfs inkscape keepassxc lib32-ncurses libreoffice-fresh libreoffice-fresh-ru libva-utils mesa-demos minetest mpv neofetch nextcloud-client nomacs noto-fonts noto-fonts-cjk noto-fonts-emoji pavucontrol pcmanfm-qt pipewire-jack qbittorrent qt5-translations qt6-translations qutebrowser steam steam-native-runtime telegram-desktop tesseract tesseract-data-eng tesseract-data-rus ttf-liberation wine-gecko wine-mono winetricks&lt;br /&gt;
Для компьютера на базе графического процессора от Intel: &amp;lt;code&amp;gt;sudo pacman -S intel-media-driver powertop xf86-video-intel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для компьютера на базе графического процессора от AMD: &amp;lt;code&amp;gt;sudo pacman -S lib32-vulkan-radeon libva-mesa-driver vulkan-radeon xf86-video-amdgpu&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перечень Vulkan драйверов: &amp;lt;nowiki&amp;gt;https://wiki.archlinux.org/title/Vulkan&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для настройки тачпада ноутбука: &amp;lt;code&amp;gt;xorg-xinput&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 trizen -S android-studio anydesk-bin chromexup evhz-git godot lib32-gconf undistract-me-git webcord --noedit&lt;br /&gt;
 echo -e &amp;quot;source /usr/share/undistract-me/long-running.bash\nnotify_when_long_running_commands_finish_install&amp;quot; &amp;gt;&amp;gt; ~\.bashrc&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и настройка серверной станции ==&lt;br /&gt;
&lt;br /&gt;
=== Основные программы ===&lt;br /&gt;
 sudo pacman -Suy certbot-nginx composer cups ffmpeg gitea libreoffice-fresh mediawiki nextcloud nginx php-fpm php-gd php-imagick php-intl php-sodium qbittorrent-nox sane vlc vsftpd youtube-dl&lt;br /&gt;
 trizen -S gerbera minetest-git samsung-unified-driver steamcmd --noedit&lt;br /&gt;
&lt;br /&gt;
=== Настройка принтера ===&lt;br /&gt;
Несмотря на то, что &#039;&#039;&#039;cups&#039;&#039;&#039; предоставляет юнит &#039;&#039;&#039;cups.socket&#039;&#039;&#039; для запуска веб-сервера печати по запросу, лучше всего запускать сервис печати при запуске хоста, т.к. иногда задания печати могут быть пропущены и не войти в очередь для отработки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable cups.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка MariaDB и NGINX ===&lt;br /&gt;
 sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql&lt;br /&gt;
 sudo systemctl start mariadb.service&lt;br /&gt;
 sudo mysql_secure_installation&lt;br /&gt;
 sudo systemctl enable mariadb.service&lt;br /&gt;
 sudo systemctl enable vsftpd.service # Не актуально.&lt;br /&gt;
 sudo systemctl enable php-fpm.service&lt;br /&gt;
 sudo systemctl enable nginx.service&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-available&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-enabled&lt;br /&gt;
&lt;br /&gt;
Также потребуется добавить опцию sites-enabled/*; в конец блока http в файле &amp;lt;code&amp;gt;/etc/nginx/nginx.conf&amp;lt;/code&amp;gt; для возможности использования отдельных конфигураций под каждое веб-приложение:&lt;br /&gt;
&lt;br /&gt;
 http {&lt;br /&gt;
     types_hash_max_size 4096;&lt;br /&gt;
     server_names_hash_bucket_size 128;&lt;br /&gt;
     &lt;br /&gt;
     include sites-enabled/*;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Устаревшие секции ==&lt;br /&gt;
&lt;br /&gt;
Тут приведены устаревшие части настройки системы. Если systemd-boot теперь устанавливается в &amp;lt;code&amp;gt;/efi&amp;lt;/code&amp;gt;, то за автоматическое монтирование отвечает systemd, т.к. при создании разделов мы использовали метки Discoverable Partitions Specification (DPS).&lt;br /&gt;
&lt;br /&gt;
=== Установка загрузчика systemd-boot ===&lt;br /&gt;
Для копирования исполняемого файла загрузчика на EFI-раздел и добавления загрузочной записи в прошивку материнской платы можно воспользоваться инструментом из состава systemd: &amp;lt;code&amp;gt;bootctl --path=/boot install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если требуется, сторонние [[Список полезных команд Linux|загрузочные записи можно очистить]].&lt;br /&gt;
&lt;br /&gt;
Теперь берем UUID swap&#039;а и раздела монтируемого по корневому пути. (&#039;&#039;эту часть нужно улучшить, чтобы UUID был сохранён в переменную&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 ls -l /dev/disk/by-partuuid/ | grep &#039;sd[a-z][1-3]&#039;&lt;br /&gt;
 echo -e &#039;title\t\tArch Linux Kernel\nlinux\t\t/vmlinuz-linux\ninitrd\t\t/intel-ucode.img\ninitrd\t\t/initramfs-linux.img\noptions\t\troot=PARTUUID=55d7a752-7da7-4a8f-aae7-a90b63614d83 rw resume=PARTUUID=4af468e0-0c92-4dab-9a21-738fd95875d3&#039; &amp;gt;&amp;gt; /boot/loader/entries/arch.conf&lt;br /&gt;
 sed -i &amp;quot;s/#timeout 3/timeout 3/&amp;quot; /etc/sudoers&lt;br /&gt;
 sudo sed  -i &#039;1i default @saved&#039; /boot/loader/loader.conf # systemd-boot будет запоминать последнюю выбранную загрузочную запись&lt;br /&gt;
&lt;br /&gt;
Завершаем работу в &#039;&#039;&#039;chroot&#039;&#039;&#039; окружении и перезагружаем компьютер для продолжения настройки системы.&lt;br /&gt;
&lt;br /&gt;
 exit&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===  Настройка fstab  ===&lt;br /&gt;
&lt;br /&gt;
 sudo genfstab -U /mnt/install &amp;gt;&amp;gt; /mnt/install/etc/fstab&lt;br /&gt;
Теперь требуется проверить и отредактировать &amp;lt;code&amp;gt;/mnt/install/etc/fstab&amp;lt;/code&amp;gt; перед следующим этапом.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 # Static information about the filesystems.&lt;br /&gt;
 # See fstab(5) for details.&lt;br /&gt;
 &lt;br /&gt;
 # &amp;lt;file system&amp;gt; &amp;lt;dir&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;&lt;br /&gt;
 # /dev/nvme0n1p3&lt;br /&gt;
 UUID=68b6d3fa-3dd1-4c2d-acd4-8956a89d7c53       /               ext4            rw,relatime     0 1&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p1&lt;br /&gt;
 UUID=CFA0-CC07          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro       0 2&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p2&lt;br /&gt;
 UUID=c9e25512-cc2d-45cf-a95e-e4cfc6dfb116       none            swap            defaults        0 0&lt;br /&gt;
Файловые системы vfat и ext4 требуют дополнительной опции &amp;lt;code&amp;gt;discard&amp;lt;/code&amp;gt; при использовании SSD накопителя:&lt;br /&gt;
 # /dev/sdX3&lt;br /&gt;
 UUID=6b0d06c4-ca05-427d-83d4-b3978595f6bb	/         	ext4      	rw,relatime,discard	0 1&lt;br /&gt;
&lt;br /&gt;
== Смотрите также ==&lt;br /&gt;
&lt;br /&gt;
* [https://walian.co.uk/arch-install-with-secure-boot-btrfs-tpm2-luks-encryption-unified-kernel-images.html Arch Install with Secure Boot, btrfs, TPM2 LUKS encryption, Unified Kernel Images. Walian&#039;s Tech/Linux Blog] - Пример полной установки Arch Linux с Secure Boot, btrfs, TPM2 LUKS шифрованием, Unified Kernel Images.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=184</id>
		<title>Установка и первичная настройка дистрибутива Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=184"/>
		<updated>2026-04-05T13:10:32Z</updated>

		<summary type="html">&lt;p&gt;Comminux: TPM2 обновление&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данной статье описана типичная установка Arch Linux&#039;а с указанием специфичных различий в конфигурациях для разных компьютеров и рабочих окружений.&lt;br /&gt;
&lt;br /&gt;
== Подготовка к установке ==&lt;br /&gt;
&lt;br /&gt;
=== ssh ===&lt;br /&gt;
Если установка будет производится посредством &#039;&#039;&#039;ssh&#039;&#039;&#039; соединения с другого ПК, то перед подключением нужно задать пароль для &#039;&#039;&#039;root&#039;&#039;&#039; пользователя.&lt;br /&gt;
&lt;br /&gt;
=== Доступ в сеть ===&lt;br /&gt;
Для подключения к сети через LAN достаточно только активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер: &amp;lt;code&amp;gt;systemctl start dhcpcd.service&amp;lt;/code&amp;gt;. Чтобы настроить Wi-FI соединение нужно воспользоваться интерактивной консолью клиента &#039;&#039;&#039;iwctl&#039;&#039;&#039; для демона &#039;&#039;&#039;iwd&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Потребуется проверить идентификатор беспроводного адаптера сети Wi-Fi: &amp;lt;code&amp;gt;[iwd]# device list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Просканируем радио эфир на наличие нужной точки доступа: &amp;lt;code&amp;gt;[iwd]# station wlan0 scan&amp;lt;/code&amp;gt;&lt;br /&gt;
# Т.к. &#039;&#039;&#039;iwctl&#039;&#039;&#039; поддерживает автозаполнение ввода через клавишу tab, то можно выбрать нужную сеть после ввода первых букв её названия: &amp;lt;code&amp;gt;[iwd]# station wlan0 connect &amp;quot;Make Wi-Fi Great Again!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После подключения к точке доступа потребуется активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер.&lt;br /&gt;
&lt;br /&gt;
=== gdisk (создание gpt метки и разметка файловой системы) ===&lt;br /&gt;
 sudo gdisk /dev/nvme0n1 # или /dev/sda для SATA накопителя&lt;br /&gt;
 x&lt;br /&gt;
 l&lt;br /&gt;
 8&lt;br /&gt;
 d&lt;br /&gt;
 m&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +1G&lt;br /&gt;
 ef00&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +24G&lt;br /&gt;
 8200&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 8304&lt;br /&gt;
 w&lt;br /&gt;
 Y&lt;br /&gt;
&lt;br /&gt;
=== Создание и монтирование файловых систем ===&lt;br /&gt;
&lt;br /&gt;
Данный раздел будет разделен на обычную установку и с использованием LUKS для шифрования разделов.&lt;br /&gt;
&lt;br /&gt;
==== Обычные разделы ====&lt;br /&gt;
&lt;br /&gt;
 sudo mkfs.vfat -F32 -n EFI /dev/nvme0n1p1 # или /dev/sda1 для SATA накопителя&lt;br /&gt;
 sudo mkswap /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkfs.ext4 -b 4096 -m 0 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo swapon /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install&lt;br /&gt;
 sudo mount /dev/nvme0n1p3 /mnt/install/ # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install/boot&lt;br /&gt;
 sudo mount /dev/nvme0n1p1 /mnt/install/boot/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&lt;br /&gt;
==== LUKS разделы ====&lt;br /&gt;
&lt;br /&gt;
Для настройки шифрования необходимо инициализировать и открыть LUKS разделы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cryptsetup luksFormat --type luks2 /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksFormat --type luks2 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
cryptsetup --allow-discards --persistent luksOpen /dev/nvme0n1p3 root&lt;br /&gt;
sudo mkswap -L swap /dev/mapper/swap&lt;br /&gt;
sudo swapon /dev/mapper/swap&lt;br /&gt;
sudo mkfs.ext4 -E discard -b 4096 -m 0 -L root /dev/mapper/root&lt;br /&gt;
mount /dev/mapper/root /mnt/install&lt;br /&gt;
sudo mkdir -v /mnt/install/efi&lt;br /&gt;
sudo mount /dev/nvme0n1p1 /mnt/install/efi/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка базовой части системы ===&lt;br /&gt;
&lt;br /&gt;
Настроим список российских зеркал для Pacman:&lt;br /&gt;
&amp;lt;pre&amp;gt;reflector --country RU --age 24 --protocol https --sort rate --save /etc/pacman.d/mirrorlist&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 sudo pacstrap /mnt/install/ arch-install-scripts base base-devel bash-completion beep ccache cmake cryptsetup dosfstools git git-lfs go go-tools gptfdisk hdparm htop jre-openjdk linux linux-firmware lvm2 man-db mariadb neovim net-tools networkmanager networkmanager-openvpn ntfs-3g openssh openvpn p7zip parted pdftk pipewire pipewire-alsa pipewire-pulse python-pynvim rsync sbctl screen sudo tmux tree unzip usbutils util-linux vifm wget wireplumber wol xdg-user-dirs yt-dlp zip&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;В зависимости от производителя процессора, требуется поставить дополнительный пакет с обновлением микрокода:&#039;&#039;&#039; &amp;lt;code&amp;gt;intel-ucode&amp;lt;/code&amp;gt; &#039;&#039;&#039;или&#039;&#039;&#039; &amp;lt;code&amp;gt;amd-ucode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка базовой системы ==&lt;br /&gt;
=== Начальный этап настройки ===&lt;br /&gt;
Минимальный набор требуемых настроек для последующей настройки системы после перезагрузки.&lt;br /&gt;
 arch-chroot /mnt/install&lt;br /&gt;
 ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime&lt;br /&gt;
 sed -i &amp;quot;s/#en_US.UTF-8/en_US.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 sed -i &amp;quot;s/#ru_RU.UTF-8/ru_RU.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 locale-gen&lt;br /&gt;
 echo LANG=ru_RU.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
 echo -e &amp;quot;KEYMAP=ruwin_alt_sh-UTF-8\nFONT=cyr-sun16&amp;quot; &amp;gt; /etc/vconsole.conf&lt;br /&gt;
 export myhostname= # Создаём переменную с именем будущего хоста&lt;br /&gt;
 echo $myhostname &amp;gt; /etc/hostname&lt;br /&gt;
 echo -e &amp;quot;#\n#&amp;lt;ip-address&amp;gt;\t&amp;lt;hostname.domain.org&amp;gt;\t&amp;lt;hostname&amp;gt;\n127.0.0.1\t$myhostname.lan\t\tlocalhost $myhostname\n::1\t\t$myhostname.lan\t\tlocalhost $myhostname&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
 mkinitcpio -P&lt;br /&gt;
 sed -i &amp;quot;s/# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/&amp;quot; /etc/sudoers&lt;br /&gt;
 sed -i -e &#039;s/#Color/Color/g&#039; -e &#039;/#\[multilib\]/{N;s/#\[multilib\]\n#Include/\[multilib\]\nInclude/}&#039; /etc/pacman.conf # Включает Color и multilib&lt;br /&gt;
 systemctl enable systemd-resolved systemd-timesyncd NetworkManager sshd systemd-timesyncd&lt;br /&gt;
 systemctl mask systemd-networkd&lt;br /&gt;
&lt;br /&gt;
Создание основного пользователя:&lt;br /&gt;
&lt;br /&gt;
 useradd -m -G wheel archie&lt;br /&gt;
 passwd archie&lt;br /&gt;
&lt;br /&gt;
=== Unified Kernel Images ===&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;quiet rw&amp;quot; &amp;gt; /etc/kernel/cmdline&lt;br /&gt;
mkdir -p /efi/EFI/Linux&lt;br /&gt;
sed -i &#039;s/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block filesystems fsck)/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole sd-encrypt block filesystems fsck)/g&#039; /etc/mkinitcpio.conf&lt;br /&gt;
sed -i \&lt;br /&gt;
-e &amp;quot;s|PRESETS=(&#039;default&#039;)|#PRESETS=(&#039;default&#039;)|g&amp;quot; \&lt;br /&gt;
-e &amp;quot;s|#PRESETS=(&#039;default&#039; &#039;fallback&#039;)|PRESETS=(&#039;default&#039; &#039;fallback&#039;)|g&amp;quot; \&lt;br /&gt;
-e &#039;s|#default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_options=&amp;quot;-S autodetect&amp;quot;|fallback_options=&amp;quot;-S autodetect&amp;quot;|g&#039; \&lt;br /&gt;
/etc/mkinitcpio.d/linux.preset&lt;br /&gt;
mkinitcpio -P&lt;br /&gt;
bootctl install --esp-path=/efi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure Boot ===&lt;br /&gt;
&lt;br /&gt;
В первую очередь необходимо в BIOS сбросить все ключи и настройки Secure Boot и выключить его. Указанная команда позволит проверить наличие статуса Setup Mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbctl status&lt;br /&gt;
Installed:  ✓ sbctl is installed&lt;br /&gt;
Setup Mode: ✗ Enabled&lt;br /&gt;
Secure Boot:    ✗ Disabled&lt;br /&gt;
Vendor Keys:    none&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать персональные ключи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl create-keys&lt;br /&gt;
sudo sbctl enroll-keys -m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подпишем efi файлы и переустановим ядро Linux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux-fallback.efi&lt;br /&gt;
sudo pacman -S linux&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TPM2 разблокировка ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo systemd-cryptenroll /dev/gpt-auto-root-luks --recovery-key&lt;br /&gt;
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7  /dev/gpt-auto-root-luks --tpm2-with-pin=yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Swap раздел не был разблокирован на этапе загрузки, то необходимо это сделать сейчас:&lt;br /&gt;
&lt;br /&gt;
 sudo cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
&lt;br /&gt;
Добавим ключ для Swap раздела в TPM2.&lt;br /&gt;
&lt;br /&gt;
 sudo systemd-cryptenroll --tpm2-device auto /dev/disk/by-designator/swap-luks&lt;br /&gt;
&lt;br /&gt;
=== Завершения настройки базовой системы ===&lt;br /&gt;
Trizen менеджер пакетов для AUR: облегченная оболочка pacman и помощник AUR.&lt;br /&gt;
 cd /tmp&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://aur.archlinux.org/trizen.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd trizen&lt;br /&gt;
 makepkg -si&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и подготовка графического окружения для рабочих станции ==&lt;br /&gt;
&lt;br /&gt;
=== Установка требуемых пакетов и приложений ===&lt;br /&gt;
 pacman -S alacritty nextcloud-client android-tools android-udev filezilla gimp godot gvfs inkscape keepassxc libreoffice-fresh lib32-ncurses libreoffice-fresh-ru libva-utils mesa-demos mpv noto-fonts noto-fonts-cjk noto-fonts-emoji qbittorrent steam telegram-desktop tesseract tesseract-data-eng tesseract-data-rus blender code vlc&lt;br /&gt;
 trizen -S --noedit google-chrome-dev android-studio anydesk-bin webcord gtk2-patched-filechooser-icon-view assistant&lt;br /&gt;
&lt;br /&gt;
==== KDE ====&lt;br /&gt;
 pacman -S plasma dolphin ark audiocd-kio dolphin-plugins kio-admin kompare ffmpegthumbs icoutils kdegraphics-thumbnailers kimageformats resvg filelight kdf&lt;br /&gt;
 systemd enable plasmalogin.service&lt;br /&gt;
&lt;br /&gt;
После запуска KDE необходимо настроить раскладки клавиатуры, DPI.&lt;br /&gt;
&lt;br /&gt;
==== Sway (устарело, требуется обновление части) ====&lt;br /&gt;
 sudo pacman -S gdm sway&lt;br /&gt;
 trizen -S libdisplay-info-git waybar rofi-lbonn-wayland-git xdg-desktop-portal-wlr slurp --noedit&lt;br /&gt;
 sudo systemctl enable --now gdm&lt;br /&gt;
&lt;br /&gt;
=== Настройка путей и монтирования в домашнем каталоге ===&lt;br /&gt;
Тут необходимо решить проблему с тем, что русскоязычные папки уже могут быть созданы.&lt;br /&gt;
&lt;br /&gt;
 mkdir -pv /home/$USER/{Desktop,Databases,Downloads,Documents,Pictures,Public,Sounds,Templates,VPNs}&lt;br /&gt;
 mkdir -v /home/$USER/{Music,Videos,Work/Builds/ArchLinux} # Для устройства с одним накопителем&lt;br /&gt;
 ln -s ~/.local/share/Steam ~/Steam&lt;br /&gt;
&lt;br /&gt;
Если основной накопитель имеет малый размер и имеется возможность установки второго, то последний можно монтировать через &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; и создать симлинки на основной папки.&lt;br /&gt;
&lt;br /&gt;
 ln -s /mnt/storage/Music/ ~/Music&lt;br /&gt;
 ln -s /mnt/storage/Videos/ ~/Videos&lt;br /&gt;
 ln -s /mnt/storage/Work/ ~/Work&lt;br /&gt;
&lt;br /&gt;
=== Импортирование конфигурации ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://git.tmon8.ru/comminux/dotfiles.git&amp;lt;/nowiki&amp;gt; ~/Work/dotfiles&lt;br /&gt;
 cd ~/Work/dotfiles&lt;br /&gt;
 git checkout branch # Выбираем нужную ветку за основу&lt;br /&gt;
 mv .git/ ~/&lt;br /&gt;
 cp -r * /home/$USER/&lt;br /&gt;
 cp -r .* /home/$USER/&lt;br /&gt;
 cd ~&lt;br /&gt;
 rm -rf ~/Work/dotfiles&lt;br /&gt;
 sudo cp ~/.usr/bin/* /bin/&lt;br /&gt;
 chromexup&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные настройки и решения ===&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/Tk-Glitch/PKGBUILDS&amp;lt;/nowiki&amp;gt; ~/Work/Builds/ArchLinux/Tk-Glitch-PKGBUILDS&lt;br /&gt;
&lt;br /&gt;
=== Исправление ошибки &amp;quot;Not authorized to perform operation&amp;quot; при попытке монтирования дополнительного накопителя. ===&lt;br /&gt;
&lt;br /&gt;
Создаём это polkit правило в &amp;lt;code&amp;gt;/etc/polkit-1/rules.d/00-mount-internal.rules&amp;lt;/code&amp;gt;:&lt;br /&gt;
 polkit.addRule(function(action, subject) {&lt;br /&gt;
    if ((action.id == &amp;quot;org.freedesktop.udisks2.filesystem-mount-system&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
       subject.local &amp;amp;&amp;amp; subject.active &amp;amp;&amp;amp; subject.isInGroup(&amp;quot;storage&amp;quot;)))&lt;br /&gt;
       {&lt;br /&gt;
          return polkit.Result.YES;&lt;br /&gt;
       }&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
И добавляем нашего пользователя в группу &#039;&#039;&#039;storage&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# sudo usermod -aG storage $USER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Устаревшая секция ===&lt;br /&gt;
&lt;br /&gt;
 sudo pacman -S android-tools android-udev baobab chromium filezilla gimp gnu-netcat gvfs inkscape keepassxc libreoffice-fresh lib32-ncurses libreoffice-fresh-ru libva-utils minetest mesa-demos mpv neofetch nextcloud-client nomacs noto-fonts noto-fonts-cjk noto-fonts-emoji pavucontrol pcmanfm-qt pipewire-jack qbittorrent qt5-translations qt6-translations qutebrowser steam steam-native-runtime telegram-desktop tesseract tesseract-data-eng tesseract-data-rus ttf-liberation winetricks wine-gecko wine-mono&lt;br /&gt;
Для компьютера на базе графического процессора от Intel: &amp;lt;code&amp;gt;sudo pacman -S intel-media-driver powertop xf86-video-intel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для компьютера на базе графического процессора от AMD: &amp;lt;code&amp;gt;sudo pacman -S vulkan-radeon lib32-vulkan-radeon libva-mesa-driver xf86-video-amdgpu&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перечень Vulkan драйверов: &amp;lt;nowiki&amp;gt;https://wiki.archlinux.org/title/Vulkan&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для настройки тачпада ноутбука: &amp;lt;code&amp;gt;xorg-xinput&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 trizen -S android-studio anydesk-bin chromexup webcord evhz-git godot lib32-gconf undistract-me-git --noedit&lt;br /&gt;
 echo -e &amp;quot;source /usr/share/undistract-me/long-running.bash\nnotify_when_long_running_commands_finish_install&amp;quot; &amp;gt;&amp;gt; ~\.bashrc&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и настройка серверной станции ==&lt;br /&gt;
&lt;br /&gt;
=== Основные программы ===&lt;br /&gt;
 sudo pacman -Suy certbot-nginx composer cups ffmpeg gitea libreoffice-fresh mediawiki nextcloud nginx php-fpm php-gd php-imagick php-intl php-sodium qbittorrent-nox sane vlc vsftpd youtube-dl&lt;br /&gt;
 trizen -S gerbera samsung-unified-driver steamcmd minetest-git --noedit&lt;br /&gt;
&lt;br /&gt;
=== Настройка принтера ===&lt;br /&gt;
Несмотря на то, что &#039;&#039;&#039;cups&#039;&#039;&#039; предоставляет юнит &#039;&#039;&#039;cups.socket&#039;&#039;&#039; для запуска веб-сервера печати по запросу, лучше всего запускать сервис печати при запуске хоста, т.к. иногда задания печати могут быть пропущены и не войти в очередь для отработки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable cups.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка MariaDB и NGINX ===&lt;br /&gt;
 sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql&lt;br /&gt;
 sudo systemctl start mariadb.service&lt;br /&gt;
 sudo mysql_secure_installation&lt;br /&gt;
 sudo systemctl enable mariadb.service&lt;br /&gt;
 sudo systemctl enable vsftpd.service # Не актуально.&lt;br /&gt;
 sudo systemctl enable php-fpm.service&lt;br /&gt;
 sudo systemctl enable nginx.service&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-available&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-enabled&lt;br /&gt;
&lt;br /&gt;
Также потребуется добавить опцию sites-enabled/*; в конец блока http в файле &amp;lt;code&amp;gt;/etc/nginx/nginx.conf&amp;lt;/code&amp;gt; для возможности использования отдельных конфигураций под каждое веб-приложение:&lt;br /&gt;
&lt;br /&gt;
 http {&lt;br /&gt;
     types_hash_max_size 4096;&lt;br /&gt;
     server_names_hash_bucket_size 128;&lt;br /&gt;
     &lt;br /&gt;
     include sites-enabled/*;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Устаревшие секции ==&lt;br /&gt;
&lt;br /&gt;
Тут приведены устаревшие части настройки системы. Если systemd-boot теперь устанавливается в &amp;lt;code&amp;gt;/efi&amp;lt;/code&amp;gt;, то за автоматическое монтирование отвечает systemd, т.к. при создании разделов мы использовали метки Discoverable Partitions Specification (DPS).&lt;br /&gt;
&lt;br /&gt;
=== Установка загрузчика systemd-boot ===&lt;br /&gt;
Для копирования исполняемого файла загрузчика на EFI-раздел и добавления загрузочной записи в прошивку материнской платы можно воспользоваться инструментом из состава systemd: &amp;lt;code&amp;gt;bootctl --path=/boot install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если требуется, сторонние [[Список полезных команд Linux|загрузочные записи можно очистить]].&lt;br /&gt;
&lt;br /&gt;
Теперь берем UUID swap&#039;а и раздела монтируемого по корневому пути. (&#039;&#039;эту часть нужно улучшить, чтобы UUID был сохранён в переменную&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 ls -l /dev/disk/by-partuuid/ | grep &#039;sd[a-z][1-3]&#039;&lt;br /&gt;
 echo -e &#039;title\t\tArch Linux Kernel\nlinux\t\t/vmlinuz-linux\ninitrd\t\t/intel-ucode.img\ninitrd\t\t/initramfs-linux.img\noptions\t\troot=PARTUUID=55d7a752-7da7-4a8f-aae7-a90b63614d83 rw resume=PARTUUID=4af468e0-0c92-4dab-9a21-738fd95875d3&#039; &amp;gt;&amp;gt; /boot/loader/entries/arch.conf&lt;br /&gt;
 sed -i &amp;quot;s/#timeout 3/timeout 3/&amp;quot; /etc/sudoers&lt;br /&gt;
 sudo sed  -i &#039;1i default @saved&#039; /boot/loader/loader.conf # systemd-boot будет запоминать последнюю выбранную загрузочную запись&lt;br /&gt;
&lt;br /&gt;
Завершаем работу в &#039;&#039;&#039;chroot&#039;&#039;&#039; окружении и перезагружаем компьютер для продолжения настройки системы.&lt;br /&gt;
&lt;br /&gt;
 exit&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===  Настройка fstab  ===&lt;br /&gt;
&lt;br /&gt;
 sudo genfstab -U /mnt/install &amp;gt;&amp;gt; /mnt/install/etc/fstab&lt;br /&gt;
Теперь требуется проверить и отредактировать &amp;lt;code&amp;gt;/mnt/install/etc/fstab&amp;lt;/code&amp;gt; перед следующим этапом.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 # Static information about the filesystems.&lt;br /&gt;
 # See fstab(5) for details.&lt;br /&gt;
 &lt;br /&gt;
 # &amp;lt;file system&amp;gt; &amp;lt;dir&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;&lt;br /&gt;
 # /dev/nvme0n1p3&lt;br /&gt;
 UUID=68b6d3fa-3dd1-4c2d-acd4-8956a89d7c53       /               ext4            rw,relatime     0 1&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p1&lt;br /&gt;
 UUID=CFA0-CC07          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro       0 2&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p2&lt;br /&gt;
 UUID=c9e25512-cc2d-45cf-a95e-e4cfc6dfb116       none            swap            defaults        0 0&lt;br /&gt;
Файловые системы vfat и ext4 требуют дополнительной опции &amp;lt;code&amp;gt;discard&amp;lt;/code&amp;gt; при использовании SSD накопителя:&lt;br /&gt;
 # /dev/sdX3&lt;br /&gt;
 UUID=6b0d06c4-ca05-427d-83d4-b3978595f6bb	/         	ext4      	rw,relatime,discard	0 1&lt;br /&gt;
&lt;br /&gt;
== Смотрите также ==&lt;br /&gt;
&lt;br /&gt;
* [https://walian.co.uk/arch-install-with-secure-boot-btrfs-tpm2-luks-encryption-unified-kernel-images.html Arch Install with Secure Boot, btrfs, TPM2 LUKS encryption, Unified Kernel Images. Walian&#039;s Tech/Linux Blog] - Пример полной установки Arch Linux с Secure Boot, btrfs, TPM2 LUKS шифрованием, Unified Kernel Images.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=183</id>
		<title>Установка и первичная настройка дистрибутива Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=183"/>
		<updated>2026-04-05T12:49:40Z</updated>

		<summary type="html">&lt;p&gt;Comminux: TPM2 обновление&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данной статье описана типичная установка Arch Linux&#039;а с указанием специфичных различий в конфигурациях для разных компьютеров и рабочих окружений.&lt;br /&gt;
&lt;br /&gt;
== Подготовка к установке ==&lt;br /&gt;
&lt;br /&gt;
=== ssh ===&lt;br /&gt;
Если установка будет производится посредством &#039;&#039;&#039;ssh&#039;&#039;&#039; соединения с другого ПК, то перед подключением нужно задать пароль для &#039;&#039;&#039;root&#039;&#039;&#039; пользователя.&lt;br /&gt;
&lt;br /&gt;
=== Доступ в сеть ===&lt;br /&gt;
Для подключения к сети через LAN достаточно только активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер: &amp;lt;code&amp;gt;systemctl start dhcpcd.service&amp;lt;/code&amp;gt;. Чтобы настроить Wi-FI соединение нужно воспользоваться интерактивной консолью клиента &#039;&#039;&#039;iwctl&#039;&#039;&#039; для демона &#039;&#039;&#039;iwd&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Потребуется проверить идентификатор беспроводного адаптера сети Wi-Fi: &amp;lt;code&amp;gt;[iwd]# device list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Просканируем радио эфир на наличие нужной точки доступа: &amp;lt;code&amp;gt;[iwd]# station wlan0 scan&amp;lt;/code&amp;gt;&lt;br /&gt;
# Т.к. &#039;&#039;&#039;iwctl&#039;&#039;&#039; поддерживает автозаполнение ввода через клавишу tab, то можно выбрать нужную сеть после ввода первых букв её названия: &amp;lt;code&amp;gt;[iwd]# station wlan0 connect &amp;quot;Make Wi-Fi Great Again!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После подключения к точке доступа потребуется активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер.&lt;br /&gt;
&lt;br /&gt;
=== gdisk (создание gpt метки и разметка файловой системы) ===&lt;br /&gt;
 sudo gdisk /dev/nvme0n1 # или /dev/sda для SATA накопителя&lt;br /&gt;
 x&lt;br /&gt;
 l&lt;br /&gt;
 8&lt;br /&gt;
 d&lt;br /&gt;
 m&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +1G&lt;br /&gt;
 ef00&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +24G&lt;br /&gt;
 8200&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 8304&lt;br /&gt;
 w&lt;br /&gt;
 Y&lt;br /&gt;
&lt;br /&gt;
=== Создание и монтирование файловых систем ===&lt;br /&gt;
&lt;br /&gt;
Данный раздел будет разделен на обычную установку и с использованием LUKS для шифрования разделов.&lt;br /&gt;
&lt;br /&gt;
==== Обычные разделы ====&lt;br /&gt;
&lt;br /&gt;
 sudo mkfs.vfat -F32 -n EFI /dev/nvme0n1p1 # или /dev/sda1 для SATA накопителя&lt;br /&gt;
 sudo mkswap /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkfs.ext4 -b 4096 -m 0 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo swapon /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install&lt;br /&gt;
 sudo mount /dev/nvme0n1p3 /mnt/install/ # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install/boot&lt;br /&gt;
 sudo mount /dev/nvme0n1p1 /mnt/install/boot/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&lt;br /&gt;
==== LUKS разделы ====&lt;br /&gt;
&lt;br /&gt;
Для настройки шифрования необходимо инициализировать и открыть LUKS разделы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cryptsetup luksFormat --type luks2 /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksFormat --type luks2 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
cryptsetup --allow-discards --persistent luksOpen /dev/nvme0n1p3 root&lt;br /&gt;
sudo mkswap -L swap /dev/mapper/swap&lt;br /&gt;
sudo swapon /dev/mapper/swap&lt;br /&gt;
sudo mkfs.ext4 -E discard -b 4096 -m 0 -L root /dev/mapper/root&lt;br /&gt;
mount /dev/mapper/root /mnt/install&lt;br /&gt;
sudo mkdir -v /mnt/install/efi&lt;br /&gt;
sudo mount /dev/nvme0n1p1 /mnt/install/efi/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка базовой части системы ===&lt;br /&gt;
&lt;br /&gt;
Настроим список российских зеркал для Pacman:&lt;br /&gt;
&amp;lt;pre&amp;gt;reflector --country RU --age 24 --protocol https --sort rate --save /etc/pacman.d/mirrorlist&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 sudo pacstrap /mnt/install/ arch-install-scripts base base-devel bash-completion beep ccache cmake cryptsetup dosfstools git git-lfs go go-tools gptfdisk hdparm htop jre-openjdk linux linux-firmware lvm2 man-db mariadb neovim net-tools networkmanager networkmanager-openvpn ntfs-3g openssh openvpn p7zip parted pdftk pipewire pipewire-alsa pipewire-pulse python-pynvim rsync sbctl screen sudo tmux tree unzip usbutils util-linux vifm wget wireplumber wol xdg-user-dirs yt-dlp zip&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;В зависимости от производителя процессора, требуется поставить дополнительный пакет с обновлением микрокода:&#039;&#039;&#039; &amp;lt;code&amp;gt;intel-ucode&amp;lt;/code&amp;gt; &#039;&#039;&#039;или&#039;&#039;&#039; &amp;lt;code&amp;gt;amd-ucode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка базовой системы ==&lt;br /&gt;
=== Начальный этап настройки ===&lt;br /&gt;
Минимальный набор требуемых настроек для последующей настройки системы после перезагрузки.&lt;br /&gt;
 arch-chroot /mnt/install&lt;br /&gt;
 ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime&lt;br /&gt;
 sed -i &amp;quot;s/#en_US.UTF-8/en_US.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 sed -i &amp;quot;s/#ru_RU.UTF-8/ru_RU.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 locale-gen&lt;br /&gt;
 echo LANG=ru_RU.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
 echo -e &amp;quot;KEYMAP=ruwin_alt_sh-UTF-8\nFONT=cyr-sun16&amp;quot; &amp;gt; /etc/vconsole.conf&lt;br /&gt;
 export myhostname= # Создаём переменную с именем будущего хоста&lt;br /&gt;
 echo $myhostname &amp;gt; /etc/hostname&lt;br /&gt;
 echo -e &amp;quot;#\n#&amp;lt;ip-address&amp;gt;\t&amp;lt;hostname.domain.org&amp;gt;\t&amp;lt;hostname&amp;gt;\n127.0.0.1\t$myhostname.lan\t\tlocalhost $myhostname\n::1\t\t$myhostname.lan\t\tlocalhost $myhostname&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
 mkinitcpio -P&lt;br /&gt;
 sed -i &amp;quot;s/# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/&amp;quot; /etc/sudoers&lt;br /&gt;
 sed -i -e &#039;s/#Color/Color/g&#039; -e &#039;/#\[multilib\]/{N;s/#\[multilib\]\n#Include/\[multilib\]\nInclude/}&#039; /etc/pacman.conf # Включает Color и multilib&lt;br /&gt;
 systemctl enable systemd-resolved systemd-timesyncd NetworkManager sshd systemd-timesyncd&lt;br /&gt;
 systemctl mask systemd-networkd&lt;br /&gt;
&lt;br /&gt;
Создание основного пользователя:&lt;br /&gt;
&lt;br /&gt;
 useradd -m -G wheel archie&lt;br /&gt;
 passwd archie&lt;br /&gt;
&lt;br /&gt;
=== Unified Kernel Images ===&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;quiet rw&amp;quot; &amp;gt; /etc/kernel/cmdline&lt;br /&gt;
mkdir -p /efi/EFI/Linux&lt;br /&gt;
sed -i &#039;s/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block filesystems fsck)/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole sd-encrypt block filesystems fsck)/g&#039; /etc/mkinitcpio.conf&lt;br /&gt;
sed -i \&lt;br /&gt;
-e &amp;quot;s|PRESETS=(&#039;default&#039;)|#PRESETS=(&#039;default&#039;)|g&amp;quot; \&lt;br /&gt;
-e &amp;quot;s|#PRESETS=(&#039;default&#039; &#039;fallback&#039;)|PRESETS=(&#039;default&#039; &#039;fallback&#039;)|g&amp;quot; \&lt;br /&gt;
-e &#039;s|#default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_options=&amp;quot;-S autodetect&amp;quot;|fallback_options=&amp;quot;-S autodetect&amp;quot;|g&#039; \&lt;br /&gt;
/etc/mkinitcpio.d/linux.preset&lt;br /&gt;
mkinitcpio -P&lt;br /&gt;
bootctl install --esp-path=/efi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure Boot ===&lt;br /&gt;
&lt;br /&gt;
В первую очередь необходимо в BIOS сбросить все ключи и настройки Secure Boot и выключить его. Указанная команда позволит проверить наличие статуса Setup Mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbctl status&lt;br /&gt;
Installed:  ✓ sbctl is installed&lt;br /&gt;
Setup Mode: ✗ Enabled&lt;br /&gt;
Secure Boot:    ✗ Disabled&lt;br /&gt;
Vendor Keys:    none&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать персональные ключи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl create-keys&lt;br /&gt;
sudo sbctl enroll-keys -m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подпишем efi файлы и переустановим ядро Linux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux-fallback.efi&lt;br /&gt;
sudo pacman -S linux&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TPM2 разблокировка ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sudo systemd-cryptenroll /dev/gpt-auto-root-luks --recovery-key&lt;br /&gt;
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7  /dev/gpt-auto-root-luks --tpm2-with-pin=yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Завершения настройки базовой системы ===&lt;br /&gt;
Trizen менеджер пакетов для AUR: облегченная оболочка pacman и помощник AUR.&lt;br /&gt;
 cd /tmp&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://aur.archlinux.org/trizen.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd trizen&lt;br /&gt;
 makepkg -si&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и подготовка графического окружения для рабочих станции ==&lt;br /&gt;
&lt;br /&gt;
=== Установка требуемых пакетов и приложений ===&lt;br /&gt;
 pacman -S alacritty nextcloud-client android-tools android-udev filezilla gimp godot gvfs inkscape keepassxc libreoffice-fresh lib32-ncurses libreoffice-fresh-ru libva-utils mesa-demos mpv noto-fonts noto-fonts-cjk noto-fonts-emoji qbittorrent steam telegram-desktop tesseract tesseract-data-eng tesseract-data-rus blender code vlc&lt;br /&gt;
 trizen -S --noedit google-chrome-dev android-studio anydesk-bin webcord gtk2-patched-filechooser-icon-view assistant&lt;br /&gt;
&lt;br /&gt;
==== KDE ====&lt;br /&gt;
 pacman -S plasma dolphin ark audiocd-kio dolphin-plugins kio-admin kompare ffmpegthumbs icoutils kdegraphics-thumbnailers kimageformats resvg filelight kdf&lt;br /&gt;
 systemd enable plasmalogin.service&lt;br /&gt;
&lt;br /&gt;
После запуска KDE необходимо настроить раскладки клавиатуры, DPI.&lt;br /&gt;
&lt;br /&gt;
==== Sway (устарело, требуется обновление части) ====&lt;br /&gt;
 sudo pacman -S gdm sway&lt;br /&gt;
 trizen -S libdisplay-info-git waybar rofi-lbonn-wayland-git xdg-desktop-portal-wlr slurp --noedit&lt;br /&gt;
 sudo systemctl enable --now gdm&lt;br /&gt;
&lt;br /&gt;
=== Настройка путей и монтирования в домашнем каталоге ===&lt;br /&gt;
Тут необходимо решить проблему с тем, что русскоязычные папки уже могут быть созданы.&lt;br /&gt;
&lt;br /&gt;
 mkdir -pv /home/$USER/{Desktop,Databases,Downloads,Documents,Pictures,Public,Sounds,Templates,VPNs}&lt;br /&gt;
 mkdir -v /home/$USER/{Music,Videos,Work/Builds/ArchLinux} # Для устройства с одним накопителем&lt;br /&gt;
 ln -s ~/.local/share/Steam ~/Steam&lt;br /&gt;
&lt;br /&gt;
Если основной накопитель имеет малый размер и имеется возможность установки второго, то последний можно монтировать через &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; и создать симлинки на основной папки.&lt;br /&gt;
&lt;br /&gt;
 ln -s /mnt/storage/Music/ ~/Music&lt;br /&gt;
 ln -s /mnt/storage/Videos/ ~/Videos&lt;br /&gt;
 ln -s /mnt/storage/Work/ ~/Work&lt;br /&gt;
&lt;br /&gt;
=== Импортирование конфигурации ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://git.tmon8.ru/comminux/dotfiles.git&amp;lt;/nowiki&amp;gt; ~/Work/dotfiles&lt;br /&gt;
 cd ~/Work/dotfiles&lt;br /&gt;
 git checkout branch # Выбираем нужную ветку за основу&lt;br /&gt;
 mv .git/ ~/&lt;br /&gt;
 cp -r * /home/$USER/&lt;br /&gt;
 cp -r .* /home/$USER/&lt;br /&gt;
 cd ~&lt;br /&gt;
 rm -rf ~/Work/dotfiles&lt;br /&gt;
 sudo cp ~/.usr/bin/* /bin/&lt;br /&gt;
 chromexup&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные настройки и решения ===&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/Tk-Glitch/PKGBUILDS&amp;lt;/nowiki&amp;gt; ~/Work/Builds/ArchLinux/Tk-Glitch-PKGBUILDS&lt;br /&gt;
&lt;br /&gt;
=== Исправление ошибки &amp;quot;Not authorized to perform operation&amp;quot; при попытке монтирования дополнительного накопителя. ===&lt;br /&gt;
&lt;br /&gt;
Создаём это polkit правило в &amp;lt;code&amp;gt;/etc/polkit-1/rules.d/00-mount-internal.rules&amp;lt;/code&amp;gt;:&lt;br /&gt;
 polkit.addRule(function(action, subject) {&lt;br /&gt;
    if ((action.id == &amp;quot;org.freedesktop.udisks2.filesystem-mount-system&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
       subject.local &amp;amp;&amp;amp; subject.active &amp;amp;&amp;amp; subject.isInGroup(&amp;quot;storage&amp;quot;)))&lt;br /&gt;
       {&lt;br /&gt;
          return polkit.Result.YES;&lt;br /&gt;
       }&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
И добавляем нашего пользователя в группу &#039;&#039;&#039;storage&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# sudo usermod -aG storage $USER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Устаревшая секция ===&lt;br /&gt;
&lt;br /&gt;
 sudo pacman -S android-tools android-udev baobab chromium filezilla gimp gnu-netcat gvfs inkscape keepassxc libreoffice-fresh lib32-ncurses libreoffice-fresh-ru libva-utils minetest mesa-demos mpv neofetch nextcloud-client nomacs noto-fonts noto-fonts-cjk noto-fonts-emoji pavucontrol pcmanfm-qt pipewire-jack qbittorrent qt5-translations qt6-translations qutebrowser steam steam-native-runtime telegram-desktop tesseract tesseract-data-eng tesseract-data-rus ttf-liberation winetricks wine-gecko wine-mono&lt;br /&gt;
Для компьютера на базе графического процессора от Intel: &amp;lt;code&amp;gt;sudo pacman -S intel-media-driver powertop xf86-video-intel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для компьютера на базе графического процессора от AMD: &amp;lt;code&amp;gt;sudo pacman -S vulkan-radeon lib32-vulkan-radeon libva-mesa-driver xf86-video-amdgpu&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перечень Vulkan драйверов: &amp;lt;nowiki&amp;gt;https://wiki.archlinux.org/title/Vulkan&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для настройки тачпада ноутбука: &amp;lt;code&amp;gt;xorg-xinput&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 trizen -S android-studio anydesk-bin chromexup webcord evhz-git godot lib32-gconf undistract-me-git --noedit&lt;br /&gt;
 echo -e &amp;quot;source /usr/share/undistract-me/long-running.bash\nnotify_when_long_running_commands_finish_install&amp;quot; &amp;gt;&amp;gt; ~\.bashrc&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и настройка серверной станции ==&lt;br /&gt;
&lt;br /&gt;
=== Основные программы ===&lt;br /&gt;
 sudo pacman -Suy certbot-nginx composer cups ffmpeg gitea libreoffice-fresh mediawiki nextcloud nginx php-fpm php-gd php-imagick php-intl php-sodium qbittorrent-nox sane vlc vsftpd youtube-dl&lt;br /&gt;
 trizen -S gerbera samsung-unified-driver steamcmd minetest-git --noedit&lt;br /&gt;
&lt;br /&gt;
=== Настройка принтера ===&lt;br /&gt;
Несмотря на то, что &#039;&#039;&#039;cups&#039;&#039;&#039; предоставляет юнит &#039;&#039;&#039;cups.socket&#039;&#039;&#039; для запуска веб-сервера печати по запросу, лучше всего запускать сервис печати при запуске хоста, т.к. иногда задания печати могут быть пропущены и не войти в очередь для отработки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable cups.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка MariaDB и NGINX ===&lt;br /&gt;
 sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql&lt;br /&gt;
 sudo systemctl start mariadb.service&lt;br /&gt;
 sudo mysql_secure_installation&lt;br /&gt;
 sudo systemctl enable mariadb.service&lt;br /&gt;
 sudo systemctl enable vsftpd.service # Не актуально.&lt;br /&gt;
 sudo systemctl enable php-fpm.service&lt;br /&gt;
 sudo systemctl enable nginx.service&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-available&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-enabled&lt;br /&gt;
&lt;br /&gt;
Также потребуется добавить опцию sites-enabled/*; в конец блока http в файле &amp;lt;code&amp;gt;/etc/nginx/nginx.conf&amp;lt;/code&amp;gt; для возможности использования отдельных конфигураций под каждое веб-приложение:&lt;br /&gt;
&lt;br /&gt;
 http {&lt;br /&gt;
     types_hash_max_size 4096;&lt;br /&gt;
     server_names_hash_bucket_size 128;&lt;br /&gt;
     &lt;br /&gt;
     include sites-enabled/*;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Устаревшие секции ==&lt;br /&gt;
&lt;br /&gt;
Тут приведены устаревшие части настройки системы. Если systemd-boot теперь устанавливается в &amp;lt;code&amp;gt;/efi&amp;lt;/code&amp;gt;, то за автоматическое монтирование отвечает systemd, т.к. при создании разделов мы использовали метки Discoverable Partitions Specification (DPS).&lt;br /&gt;
&lt;br /&gt;
=== Установка загрузчика systemd-boot ===&lt;br /&gt;
Для копирования исполняемого файла загрузчика на EFI-раздел и добавления загрузочной записи в прошивку материнской платы можно воспользоваться инструментом из состава systemd: &amp;lt;code&amp;gt;bootctl --path=/boot install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если требуется, сторонние [[Список полезных команд Linux|загрузочные записи можно очистить]].&lt;br /&gt;
&lt;br /&gt;
Теперь берем UUID swap&#039;а и раздела монтируемого по корневому пути. (&#039;&#039;эту часть нужно улучшить, чтобы UUID был сохранён в переменную&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 ls -l /dev/disk/by-partuuid/ | grep &#039;sd[a-z][1-3]&#039;&lt;br /&gt;
 echo -e &#039;title\t\tArch Linux Kernel\nlinux\t\t/vmlinuz-linux\ninitrd\t\t/intel-ucode.img\ninitrd\t\t/initramfs-linux.img\noptions\t\troot=PARTUUID=55d7a752-7da7-4a8f-aae7-a90b63614d83 rw resume=PARTUUID=4af468e0-0c92-4dab-9a21-738fd95875d3&#039; &amp;gt;&amp;gt; /boot/loader/entries/arch.conf&lt;br /&gt;
 sed -i &amp;quot;s/#timeout 3/timeout 3/&amp;quot; /etc/sudoers&lt;br /&gt;
 sudo sed  -i &#039;1i default @saved&#039; /boot/loader/loader.conf # systemd-boot будет запоминать последнюю выбранную загрузочную запись&lt;br /&gt;
&lt;br /&gt;
Завершаем работу в &#039;&#039;&#039;chroot&#039;&#039;&#039; окружении и перезагружаем компьютер для продолжения настройки системы.&lt;br /&gt;
&lt;br /&gt;
 exit&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===  Настройка fstab  ===&lt;br /&gt;
&lt;br /&gt;
 sudo genfstab -U /mnt/install &amp;gt;&amp;gt; /mnt/install/etc/fstab&lt;br /&gt;
Теперь требуется проверить и отредактировать &amp;lt;code&amp;gt;/mnt/install/etc/fstab&amp;lt;/code&amp;gt; перед следующим этапом.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 # Static information about the filesystems.&lt;br /&gt;
 # See fstab(5) for details.&lt;br /&gt;
 &lt;br /&gt;
 # &amp;lt;file system&amp;gt; &amp;lt;dir&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;&lt;br /&gt;
 # /dev/nvme0n1p3&lt;br /&gt;
 UUID=68b6d3fa-3dd1-4c2d-acd4-8956a89d7c53       /               ext4            rw,relatime     0 1&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p1&lt;br /&gt;
 UUID=CFA0-CC07          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro       0 2&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p2&lt;br /&gt;
 UUID=c9e25512-cc2d-45cf-a95e-e4cfc6dfb116       none            swap            defaults        0 0&lt;br /&gt;
Файловые системы vfat и ext4 требуют дополнительной опции &amp;lt;code&amp;gt;discard&amp;lt;/code&amp;gt; при использовании SSD накопителя:&lt;br /&gt;
 # /dev/sdX3&lt;br /&gt;
 UUID=6b0d06c4-ca05-427d-83d4-b3978595f6bb	/         	ext4      	rw,relatime,discard	0 1&lt;br /&gt;
&lt;br /&gt;
== Смотрите также ==&lt;br /&gt;
&lt;br /&gt;
* [https://walian.co.uk/arch-install-with-secure-boot-btrfs-tpm2-luks-encryption-unified-kernel-images.html Arch Install with Secure Boot, btrfs, TPM2 LUKS encryption, Unified Kernel Images. Walian&#039;s Tech/Linux Blog] - Пример полной установки Arch Linux с Secure Boot, btrfs, TPM2 LUKS шифрованием, Unified Kernel Images.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=182</id>
		<title>Установка и первичная настройка дистрибутива Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=182"/>
		<updated>2026-04-05T12:43:59Z</updated>

		<summary type="html">&lt;p&gt;Comminux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данной статье описана типичная установка Arch Linux&#039;а с указанием специфичных различий в конфигурациях для разных компьютеров и рабочих окружений.&lt;br /&gt;
&lt;br /&gt;
== Подготовка к установке ==&lt;br /&gt;
&lt;br /&gt;
=== ssh ===&lt;br /&gt;
Если установка будет производится посредством &#039;&#039;&#039;ssh&#039;&#039;&#039; соединения с другого ПК, то перед подключением нужно задать пароль для &#039;&#039;&#039;root&#039;&#039;&#039; пользователя.&lt;br /&gt;
&lt;br /&gt;
=== Доступ в сеть ===&lt;br /&gt;
Для подключения к сети через LAN достаточно только активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер: &amp;lt;code&amp;gt;systemctl start dhcpcd.service&amp;lt;/code&amp;gt;. Чтобы настроить Wi-FI соединение нужно воспользоваться интерактивной консолью клиента &#039;&#039;&#039;iwctl&#039;&#039;&#039; для демона &#039;&#039;&#039;iwd&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Потребуется проверить идентификатор беспроводного адаптера сети Wi-Fi: &amp;lt;code&amp;gt;[iwd]# device list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Просканируем радио эфир на наличие нужной точки доступа: &amp;lt;code&amp;gt;[iwd]# station wlan0 scan&amp;lt;/code&amp;gt;&lt;br /&gt;
# Т.к. &#039;&#039;&#039;iwctl&#039;&#039;&#039; поддерживает автозаполнение ввода через клавишу tab, то можно выбрать нужную сеть после ввода первых букв её названия: &amp;lt;code&amp;gt;[iwd]# station wlan0 connect &amp;quot;Make Wi-Fi Great Again!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После подключения к точке доступа потребуется активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер.&lt;br /&gt;
&lt;br /&gt;
=== gdisk (создание gpt метки и разметка файловой системы) ===&lt;br /&gt;
 sudo gdisk /dev/nvme0n1 # или /dev/sda для SATA накопителя&lt;br /&gt;
 x&lt;br /&gt;
 l&lt;br /&gt;
 8&lt;br /&gt;
 d&lt;br /&gt;
 m&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +1G&lt;br /&gt;
 ef00&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +24G&lt;br /&gt;
 8200&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 8304&lt;br /&gt;
 w&lt;br /&gt;
 Y&lt;br /&gt;
&lt;br /&gt;
=== Создание и монтирование файловых систем ===&lt;br /&gt;
&lt;br /&gt;
Данный раздел будет разделен на обычную установку и с использованием LUKS для шифрования разделов.&lt;br /&gt;
&lt;br /&gt;
==== Обычные разделы ====&lt;br /&gt;
&lt;br /&gt;
 sudo mkfs.vfat -F32 -n EFI /dev/nvme0n1p1 # или /dev/sda1 для SATA накопителя&lt;br /&gt;
 sudo mkswap /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkfs.ext4 -b 4096 -m 0 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo swapon /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install&lt;br /&gt;
 sudo mount /dev/nvme0n1p3 /mnt/install/ # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install/boot&lt;br /&gt;
 sudo mount /dev/nvme0n1p1 /mnt/install/boot/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&lt;br /&gt;
==== LUKS разделы ====&lt;br /&gt;
&lt;br /&gt;
Для настройки шифрования необходимо инициализировать и открыть LUKS разделы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cryptsetup luksFormat --type luks2 /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksFormat --type luks2 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
cryptsetup --allow-discards --persistent luksOpen /dev/nvme0n1p3 root&lt;br /&gt;
sudo mkswap -L swap /dev/mapper/swap&lt;br /&gt;
sudo swapon /dev/mapper/swap&lt;br /&gt;
sudo mkfs.ext4 -E discard -b 4096 -m 0 -L root /dev/mapper/root&lt;br /&gt;
mount /dev/mapper/root /mnt/install&lt;br /&gt;
sudo mkdir -v /mnt/install/efi&lt;br /&gt;
sudo mount /dev/nvme0n1p1 /mnt/install/efi/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка базовой части системы ===&lt;br /&gt;
&lt;br /&gt;
Настроим список российских зеркал для Pacman:&lt;br /&gt;
&amp;lt;pre&amp;gt;reflector --country RU --age 24 --protocol https --sort rate --save /etc/pacman.d/mirrorlist&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 sudo pacstrap /mnt/install/ arch-install-scripts base base-devel bash-completion beep ccache cmake cryptsetup dosfstools git git-lfs go go-tools gptfdisk hdparm htop jre-openjdk linux linux-firmware lvm2 man-db mariadb neovim net-tools networkmanager networkmanager-openvpn ntfs-3g openssh openvpn p7zip parted pdftk pipewire pipewire-alsa pipewire-pulse python-pynvim rsync sbctl screen sudo tmux tree unzip usbutils util-linux vifm wget wireplumber wol xdg-user-dirs yt-dlp zip&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;В зависимости от производителя процессора, требуется поставить дополнительный пакет с обновлением микрокода:&#039;&#039;&#039; &amp;lt;code&amp;gt;intel-ucode&amp;lt;/code&amp;gt; &#039;&#039;&#039;или&#039;&#039;&#039; &amp;lt;code&amp;gt;amd-ucode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка базовой системы ==&lt;br /&gt;
=== Начальный этап настройки ===&lt;br /&gt;
Минимальный набор требуемых настроек для последующей настройки системы после перезагрузки.&lt;br /&gt;
 arch-chroot /mnt/install&lt;br /&gt;
 ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime&lt;br /&gt;
 sed -i &amp;quot;s/#en_US.UTF-8/en_US.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 sed -i &amp;quot;s/#ru_RU.UTF-8/ru_RU.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 locale-gen&lt;br /&gt;
 echo LANG=ru_RU.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
 echo -e &amp;quot;KEYMAP=ruwin_alt_sh-UTF-8\nFONT=cyr-sun16&amp;quot; &amp;gt; /etc/vconsole.conf&lt;br /&gt;
 export myhostname= # Создаём переменную с именем будущего хоста&lt;br /&gt;
 echo $myhostname &amp;gt; /etc/hostname&lt;br /&gt;
 echo -e &amp;quot;#\n#&amp;lt;ip-address&amp;gt;\t&amp;lt;hostname.domain.org&amp;gt;\t&amp;lt;hostname&amp;gt;\n127.0.0.1\t$myhostname.lan\t\tlocalhost $myhostname\n::1\t\t$myhostname.lan\t\tlocalhost $myhostname&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
 mkinitcpio -P&lt;br /&gt;
 sed -i &amp;quot;s/# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/&amp;quot; /etc/sudoers&lt;br /&gt;
 sed -i -e &#039;s/#Color/Color/g&#039; -e &#039;/#\[multilib\]/{N;s/#\[multilib\]\n#Include/\[multilib\]\nInclude/}&#039; /etc/pacman.conf # Включает Color и multilib&lt;br /&gt;
 systemctl enable systemd-resolved systemd-timesyncd NetworkManager sshd systemd-timesyncd&lt;br /&gt;
 systemctl mask systemd-networkd&lt;br /&gt;
&lt;br /&gt;
Создание основного пользователя:&lt;br /&gt;
&lt;br /&gt;
 useradd -m -G wheel archie&lt;br /&gt;
 passwd archie&lt;br /&gt;
&lt;br /&gt;
=== Unified Kernel Images ===&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;quiet rw&amp;quot; &amp;gt; /etc/kernel/cmdline&lt;br /&gt;
mkdir -p /efi/EFI/Linux&lt;br /&gt;
sed -i &#039;s/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block filesystems fsck)/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole sd-encrypt block filesystems fsck)/g&#039; /etc/mkinitcpio.conf&lt;br /&gt;
sed -i \&lt;br /&gt;
-e &amp;quot;s|PRESETS=(&#039;default&#039;)|#PRESETS=(&#039;default&#039;)|g&amp;quot; \&lt;br /&gt;
-e &amp;quot;s|#PRESETS=(&#039;default&#039; &#039;fallback&#039;)|PRESETS=(&#039;default&#039; &#039;fallback&#039;)|g&amp;quot; \&lt;br /&gt;
-e &#039;s|#default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_options=&amp;quot;-S autodetect&amp;quot;|fallback_options=&amp;quot;-S autodetect&amp;quot;|g&#039; \&lt;br /&gt;
/etc/mkinitcpio.d/linux.preset&lt;br /&gt;
mkinitcpio -P&lt;br /&gt;
bootctl install --esp-path=/efi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure Boot ===&lt;br /&gt;
&lt;br /&gt;
В первую очередь необходимо в BIOS сбросить все ключи и настройки Secure Boot и выключить его. Указанная команда позволит проверить наличие статуса Setup Mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbctl status&lt;br /&gt;
Installed:  ✓ sbctl is installed&lt;br /&gt;
Setup Mode: ✗ Enabled&lt;br /&gt;
Secure Boot:    ✗ Disabled&lt;br /&gt;
Vendor Keys:    none&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать персональные ключи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl create-keys&lt;br /&gt;
sudo sbctl enroll-keys -m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подпишем efi файлы и переустановим ядро Linux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux-fallback.efi&lt;br /&gt;
sudo pacman -S linux&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TPM2 разблокировка ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sudo systemd-cryptenroll /dev/gpt-auto-root-luks --recovery-key&lt;br /&gt;
Keep this key safe. Keep it hidden. Moving on, we&#039;ll now enroll our system firmware and Secure Boot state. Normally, this would allow our TPM to unlock our encrypted drive, as long as the state hasn&#039;t changed. If you&#039;re particularly paranoid, you can add --tpm2-with-pin=yes, so we get prompted for a PIN code on boot.&lt;br /&gt;
&lt;br /&gt;
$ sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7  /dev/gpt-auto-root-luks&lt;br /&gt;
Now we need to reboot and test this. If all goes well, we should be able to unlock our encrypted root partition with just a PIN code.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Завершения настройки базовой системы ===&lt;br /&gt;
Trizen менеджер пакетов для AUR: облегченная оболочка pacman и помощник AUR.&lt;br /&gt;
 cd /tmp&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://aur.archlinux.org/trizen.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd trizen&lt;br /&gt;
 makepkg -si&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и подготовка графического окружения для рабочих станции ==&lt;br /&gt;
&lt;br /&gt;
=== Установка требуемых пакетов и приложений ===&lt;br /&gt;
 pacman -S alacritty nextcloud-client android-tools android-udev filezilla gimp godot gvfs inkscape keepassxc libreoffice-fresh lib32-ncurses libreoffice-fresh-ru libva-utils mesa-demos mpv noto-fonts noto-fonts-cjk noto-fonts-emoji qbittorrent steam telegram-desktop tesseract tesseract-data-eng tesseract-data-rus blender code vlc&lt;br /&gt;
 trizen -S --noedit google-chrome-dev android-studio anydesk-bin webcord gtk2-patched-filechooser-icon-view assistant&lt;br /&gt;
&lt;br /&gt;
==== KDE ====&lt;br /&gt;
 pacman -S plasma dolphin ark audiocd-kio dolphin-plugins kio-admin kompare ffmpegthumbs icoutils kdegraphics-thumbnailers kimageformats resvg filelight kdf&lt;br /&gt;
 systemd enable plasmalogin.service&lt;br /&gt;
&lt;br /&gt;
После запуска KDE необходимо настроить раскладки клавиатуры, DPI.&lt;br /&gt;
&lt;br /&gt;
==== Sway (устарело, требуется обновление части) ====&lt;br /&gt;
 sudo pacman -S gdm sway&lt;br /&gt;
 trizen -S libdisplay-info-git waybar rofi-lbonn-wayland-git xdg-desktop-portal-wlr slurp --noedit&lt;br /&gt;
 sudo systemctl enable --now gdm&lt;br /&gt;
&lt;br /&gt;
=== Настройка путей и монтирования в домашнем каталоге ===&lt;br /&gt;
Тут необходимо решить проблему с тем, что русскоязычные папки уже могут быть созданы.&lt;br /&gt;
&lt;br /&gt;
 mkdir -pv /home/$USER/{Desktop,Databases,Downloads,Documents,Pictures,Public,Sounds,Templates,VPNs}&lt;br /&gt;
 mkdir -v /home/$USER/{Music,Videos,Work/Builds/ArchLinux} # Для устройства с одним накопителем&lt;br /&gt;
 ln -s ~/.local/share/Steam ~/Steam&lt;br /&gt;
&lt;br /&gt;
Если основной накопитель имеет малый размер и имеется возможность установки второго, то последний можно монтировать через &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; и создать симлинки на основной папки.&lt;br /&gt;
&lt;br /&gt;
 ln -s /mnt/storage/Music/ ~/Music&lt;br /&gt;
 ln -s /mnt/storage/Videos/ ~/Videos&lt;br /&gt;
 ln -s /mnt/storage/Work/ ~/Work&lt;br /&gt;
&lt;br /&gt;
=== Импортирование конфигурации ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://git.tmon8.ru/comminux/dotfiles.git&amp;lt;/nowiki&amp;gt; ~/Work/dotfiles&lt;br /&gt;
 cd ~/Work/dotfiles&lt;br /&gt;
 git checkout branch # Выбираем нужную ветку за основу&lt;br /&gt;
 mv .git/ ~/&lt;br /&gt;
 cp -r * /home/$USER/&lt;br /&gt;
 cp -r .* /home/$USER/&lt;br /&gt;
 cd ~&lt;br /&gt;
 rm -rf ~/Work/dotfiles&lt;br /&gt;
 sudo cp ~/.usr/bin/* /bin/&lt;br /&gt;
 chromexup&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные настройки и решения ===&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/Tk-Glitch/PKGBUILDS&amp;lt;/nowiki&amp;gt; ~/Work/Builds/ArchLinux/Tk-Glitch-PKGBUILDS&lt;br /&gt;
&lt;br /&gt;
=== Исправление ошибки &amp;quot;Not authorized to perform operation&amp;quot; при попытке монтирования дополнительного накопителя. ===&lt;br /&gt;
&lt;br /&gt;
Создаём это polkit правило в &amp;lt;code&amp;gt;/etc/polkit-1/rules.d/00-mount-internal.rules&amp;lt;/code&amp;gt;:&lt;br /&gt;
 polkit.addRule(function(action, subject) {&lt;br /&gt;
    if ((action.id == &amp;quot;org.freedesktop.udisks2.filesystem-mount-system&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
       subject.local &amp;amp;&amp;amp; subject.active &amp;amp;&amp;amp; subject.isInGroup(&amp;quot;storage&amp;quot;)))&lt;br /&gt;
       {&lt;br /&gt;
          return polkit.Result.YES;&lt;br /&gt;
       }&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
И добавляем нашего пользователя в группу &#039;&#039;&#039;storage&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# sudo usermod -aG storage $USER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Устаревшая секция ===&lt;br /&gt;
&lt;br /&gt;
 sudo pacman -S android-tools android-udev baobab chromium filezilla gimp gnu-netcat gvfs inkscape keepassxc libreoffice-fresh lib32-ncurses libreoffice-fresh-ru libva-utils minetest mesa-demos mpv neofetch nextcloud-client nomacs noto-fonts noto-fonts-cjk noto-fonts-emoji pavucontrol pcmanfm-qt pipewire-jack qbittorrent qt5-translations qt6-translations qutebrowser steam steam-native-runtime telegram-desktop tesseract tesseract-data-eng tesseract-data-rus ttf-liberation winetricks wine-gecko wine-mono&lt;br /&gt;
Для компьютера на базе графического процессора от Intel: &amp;lt;code&amp;gt;sudo pacman -S intel-media-driver powertop xf86-video-intel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для компьютера на базе графического процессора от AMD: &amp;lt;code&amp;gt;sudo pacman -S vulkan-radeon lib32-vulkan-radeon libva-mesa-driver xf86-video-amdgpu&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перечень Vulkan драйверов: &amp;lt;nowiki&amp;gt;https://wiki.archlinux.org/title/Vulkan&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для настройки тачпада ноутбука: &amp;lt;code&amp;gt;xorg-xinput&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 trizen -S android-studio anydesk-bin chromexup webcord evhz-git godot lib32-gconf undistract-me-git --noedit&lt;br /&gt;
 echo -e &amp;quot;source /usr/share/undistract-me/long-running.bash\nnotify_when_long_running_commands_finish_install&amp;quot; &amp;gt;&amp;gt; ~\.bashrc&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и настройка серверной станции ==&lt;br /&gt;
&lt;br /&gt;
=== Основные программы ===&lt;br /&gt;
 sudo pacman -Suy certbot-nginx composer cups ffmpeg gitea libreoffice-fresh mediawiki nextcloud nginx php-fpm php-gd php-imagick php-intl php-sodium qbittorrent-nox sane vlc vsftpd youtube-dl&lt;br /&gt;
 trizen -S gerbera samsung-unified-driver steamcmd minetest-git --noedit&lt;br /&gt;
&lt;br /&gt;
=== Настройка принтера ===&lt;br /&gt;
Несмотря на то, что &#039;&#039;&#039;cups&#039;&#039;&#039; предоставляет юнит &#039;&#039;&#039;cups.socket&#039;&#039;&#039; для запуска веб-сервера печати по запросу, лучше всего запускать сервис печати при запуске хоста, т.к. иногда задания печати могут быть пропущены и не войти в очередь для отработки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable cups.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка MariaDB и NGINX ===&lt;br /&gt;
 sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql&lt;br /&gt;
 sudo systemctl start mariadb.service&lt;br /&gt;
 sudo mysql_secure_installation&lt;br /&gt;
 sudo systemctl enable mariadb.service&lt;br /&gt;
 sudo systemctl enable vsftpd.service # Не актуально.&lt;br /&gt;
 sudo systemctl enable php-fpm.service&lt;br /&gt;
 sudo systemctl enable nginx.service&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-available&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-enabled&lt;br /&gt;
&lt;br /&gt;
Также потребуется добавить опцию sites-enabled/*; в конец блока http в файле &amp;lt;code&amp;gt;/etc/nginx/nginx.conf&amp;lt;/code&amp;gt; для возможности использования отдельных конфигураций под каждое веб-приложение:&lt;br /&gt;
&lt;br /&gt;
 http {&lt;br /&gt;
     types_hash_max_size 4096;&lt;br /&gt;
     server_names_hash_bucket_size 128;&lt;br /&gt;
     &lt;br /&gt;
     include sites-enabled/*;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Устаревшие секции ==&lt;br /&gt;
&lt;br /&gt;
Тут приведены устаревшие части настройки системы. Если systemd-boot теперь устанавливается в &amp;lt;code&amp;gt;/efi&amp;lt;/code&amp;gt;, то за автоматическое монтирование отвечает systemd, т.к. при создании разделов мы использовали метки Discoverable Partitions Specification (DPS).&lt;br /&gt;
&lt;br /&gt;
=== Установка загрузчика systemd-boot ===&lt;br /&gt;
Для копирования исполняемого файла загрузчика на EFI-раздел и добавления загрузочной записи в прошивку материнской платы можно воспользоваться инструментом из состава systemd: &amp;lt;code&amp;gt;bootctl --path=/boot install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если требуется, сторонние [[Список полезных команд Linux|загрузочные записи можно очистить]].&lt;br /&gt;
&lt;br /&gt;
Теперь берем UUID swap&#039;а и раздела монтируемого по корневому пути. (&#039;&#039;эту часть нужно улучшить, чтобы UUID был сохранён в переменную&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 ls -l /dev/disk/by-partuuid/ | grep &#039;sd[a-z][1-3]&#039;&lt;br /&gt;
 echo -e &#039;title\t\tArch Linux Kernel\nlinux\t\t/vmlinuz-linux\ninitrd\t\t/intel-ucode.img\ninitrd\t\t/initramfs-linux.img\noptions\t\troot=PARTUUID=55d7a752-7da7-4a8f-aae7-a90b63614d83 rw resume=PARTUUID=4af468e0-0c92-4dab-9a21-738fd95875d3&#039; &amp;gt;&amp;gt; /boot/loader/entries/arch.conf&lt;br /&gt;
 sed -i &amp;quot;s/#timeout 3/timeout 3/&amp;quot; /etc/sudoers&lt;br /&gt;
 sudo sed  -i &#039;1i default @saved&#039; /boot/loader/loader.conf # systemd-boot будет запоминать последнюю выбранную загрузочную запись&lt;br /&gt;
&lt;br /&gt;
Завершаем работу в &#039;&#039;&#039;chroot&#039;&#039;&#039; окружении и перезагружаем компьютер для продолжения настройки системы.&lt;br /&gt;
&lt;br /&gt;
 exit&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
===  Настройка fstab  ===&lt;br /&gt;
&lt;br /&gt;
 sudo genfstab -U /mnt/install &amp;gt;&amp;gt; /mnt/install/etc/fstab&lt;br /&gt;
Теперь требуется проверить и отредактировать &amp;lt;code&amp;gt;/mnt/install/etc/fstab&amp;lt;/code&amp;gt; перед следующим этапом.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 # Static information about the filesystems.&lt;br /&gt;
 # See fstab(5) for details.&lt;br /&gt;
 &lt;br /&gt;
 # &amp;lt;file system&amp;gt; &amp;lt;dir&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;&lt;br /&gt;
 # /dev/nvme0n1p3&lt;br /&gt;
 UUID=68b6d3fa-3dd1-4c2d-acd4-8956a89d7c53       /               ext4            rw,relatime     0 1&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p1&lt;br /&gt;
 UUID=CFA0-CC07          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro       0 2&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p2&lt;br /&gt;
 UUID=c9e25512-cc2d-45cf-a95e-e4cfc6dfb116       none            swap            defaults        0 0&lt;br /&gt;
Файловые системы vfat и ext4 требуют дополнительной опции &amp;lt;code&amp;gt;discard&amp;lt;/code&amp;gt; при использовании SSD накопителя:&lt;br /&gt;
 # /dev/sdX3&lt;br /&gt;
 UUID=6b0d06c4-ca05-427d-83d4-b3978595f6bb	/         	ext4      	rw,relatime,discard	0 1&lt;br /&gt;
&lt;br /&gt;
== Смотрите также ==&lt;br /&gt;
&lt;br /&gt;
* [https://walian.co.uk/arch-install-with-secure-boot-btrfs-tpm2-luks-encryption-unified-kernel-images.html Arch Install with Secure Boot, btrfs, TPM2 LUKS encryption, Unified Kernel Images. Walian&#039;s Tech/Linux Blog] - Пример полной установки Arch Linux с Secure Boot, btrfs, TPM2 LUKS шифрованием, Unified Kernel Images.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=181</id>
		<title>Установка и первичная настройка дистрибутива Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=181"/>
		<updated>2026-04-05T12:33:15Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Монтирование второго накопителя&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данной статье описана типичная установка Arch Linux&#039;а с указанием специфичных различий в конфигурациях для разных компьютеров и рабочих окружений.&lt;br /&gt;
&lt;br /&gt;
== Подготовка к установке ==&lt;br /&gt;
&lt;br /&gt;
=== ssh ===&lt;br /&gt;
Если установка будет производится посредством &#039;&#039;&#039;ssh&#039;&#039;&#039; соединения с другого ПК, то перед подключением нужно задать пароль для &#039;&#039;&#039;root&#039;&#039;&#039; пользователя.&lt;br /&gt;
&lt;br /&gt;
=== Доступ в сеть ===&lt;br /&gt;
Для подключения к сети через LAN достаточно только активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер: &amp;lt;code&amp;gt;systemctl start dhcpcd.service&amp;lt;/code&amp;gt;. Чтобы настроить Wi-FI соединение нужно воспользоваться интерактивной консолью клиента &#039;&#039;&#039;iwctl&#039;&#039;&#039; для демона &#039;&#039;&#039;iwd&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Потребуется проверить идентификатор беспроводного адаптера сети Wi-Fi: &amp;lt;code&amp;gt;[iwd]# device list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Просканируем радио эфир на наличие нужной точки доступа: &amp;lt;code&amp;gt;[iwd]# station wlan0 scan&amp;lt;/code&amp;gt;&lt;br /&gt;
# Т.к. &#039;&#039;&#039;iwctl&#039;&#039;&#039; поддерживает автозаполнение ввода через клавишу tab, то можно выбрать нужную сеть после ввода первых букв её названия: &amp;lt;code&amp;gt;[iwd]# station wlan0 connect &amp;quot;Make Wi-Fi Great Again!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После подключения к точке доступа потребуется активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер.&lt;br /&gt;
&lt;br /&gt;
=== gdisk (создание gpt метки и разметка файловой системы) ===&lt;br /&gt;
 sudo gdisk /dev/nvme0n1 # или /dev/sda для SATA накопителя&lt;br /&gt;
 x&lt;br /&gt;
 l&lt;br /&gt;
 8&lt;br /&gt;
 d&lt;br /&gt;
 m&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +1G&lt;br /&gt;
 ef00&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +24G&lt;br /&gt;
 8200&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 8304&lt;br /&gt;
 w&lt;br /&gt;
 Y&lt;br /&gt;
&lt;br /&gt;
=== Создание и монтирование файловых систем ===&lt;br /&gt;
&lt;br /&gt;
Данный раздел будет разделен на обычную установку и с использованием LUKS для шифрования разделов.&lt;br /&gt;
&lt;br /&gt;
==== Обычные разделы ====&lt;br /&gt;
&lt;br /&gt;
 sudo mkfs.vfat -F32 -n EFI /dev/nvme0n1p1 # или /dev/sda1 для SATA накопителя&lt;br /&gt;
 sudo mkswap /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkfs.ext4 -b 4096 -m 0 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo swapon /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install&lt;br /&gt;
 sudo mount /dev/nvme0n1p3 /mnt/install/ # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install/boot&lt;br /&gt;
 sudo mount /dev/nvme0n1p1 /mnt/install/boot/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&lt;br /&gt;
==== LUKS разделы ====&lt;br /&gt;
&lt;br /&gt;
Для настройки шифрования необходимо инициализировать и открыть LUKS разделы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cryptsetup luksFormat --type luks2 /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksFormat --type luks2 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
cryptsetup --allow-discards --persistent luksOpen /dev/nvme0n1p3 root&lt;br /&gt;
sudo mkswap -L swap /dev/mapper/swap&lt;br /&gt;
sudo swapon /dev/mapper/swap&lt;br /&gt;
sudo mkfs.ext4 -E discard -b 4096 -m 0 -L root /dev/mapper/root&lt;br /&gt;
mount /dev/mapper/root /mnt/install&lt;br /&gt;
sudo mkdir -v /mnt/install/efi&lt;br /&gt;
sudo mount /dev/nvme0n1p1 /mnt/install/efi/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка базовой части системы ===&lt;br /&gt;
&lt;br /&gt;
Настроим список российских зеркал для Pacman:&lt;br /&gt;
&amp;lt;pre&amp;gt;reflector --country RU --age 24 --protocol https --sort rate --save /etc/pacman.d/mirrorlist&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 sudo pacstrap /mnt/install/ arch-install-scripts base base-devel bash-completion beep ccache cmake cryptsetup dosfstools git git-lfs go go-tools gptfdisk hdparm htop jre-openjdk linux linux-firmware lvm2 man-db mariadb neovim net-tools networkmanager networkmanager-openvpn ntfs-3g openssh openvpn p7zip parted pdftk pipewire pipewire-alsa pipewire-pulse python-pynvim rsync sbctl screen sudo tmux tree unzip usbutils util-linux vifm wget wireplumber wol xdg-user-dirs yt-dlp zip&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;В зависимости от производителя процессора, требуется поставить дополнительный пакет с обновлением микрокода:&#039;&#039;&#039; &amp;lt;code&amp;gt;intel-ucode&amp;lt;/code&amp;gt; &#039;&#039;&#039;или&#039;&#039;&#039; &amp;lt;code&amp;gt;amd-ucode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка базовой системы ==&lt;br /&gt;
=== Начальный этап настройки ===&lt;br /&gt;
Минимальный набор требуемых настроек для последующей настройки системы после перезагрузки.&lt;br /&gt;
 arch-chroot /mnt/install&lt;br /&gt;
 ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime&lt;br /&gt;
 sed -i &amp;quot;s/#en_US.UTF-8/en_US.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 sed -i &amp;quot;s/#ru_RU.UTF-8/ru_RU.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 locale-gen&lt;br /&gt;
 echo LANG=ru_RU.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
 echo -e &amp;quot;KEYMAP=ruwin_alt_sh-UTF-8\nFONT=cyr-sun16&amp;quot; &amp;gt; /etc/vconsole.conf&lt;br /&gt;
 export myhostname= # Создаём переменную с именем будущего хоста&lt;br /&gt;
 echo $myhostname &amp;gt; /etc/hostname&lt;br /&gt;
 echo -e &amp;quot;#\n#&amp;lt;ip-address&amp;gt;\t&amp;lt;hostname.domain.org&amp;gt;\t&amp;lt;hostname&amp;gt;\n127.0.0.1\t$myhostname.lan\t\tlocalhost $myhostname\n::1\t\t$myhostname.lan\t\tlocalhost $myhostname&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
 mkinitcpio -P&lt;br /&gt;
 sed -i &amp;quot;s/# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/&amp;quot; /etc/sudoers&lt;br /&gt;
 sed -i -e &#039;s/#Color/Color/g&#039; -e &#039;/#\[multilib\]/{N;s/#\[multilib\]\n#Include/\[multilib\]\nInclude/}&#039; /etc/pacman.conf # Включает Color и multilib&lt;br /&gt;
 systemctl enable systemd-resolved systemd-timesyncd NetworkManager sshd systemd-timesyncd&lt;br /&gt;
 systemctl mask systemd-networkd&lt;br /&gt;
&lt;br /&gt;
Создание основного пользователя:&lt;br /&gt;
&lt;br /&gt;
 useradd -m -G wheel archie&lt;br /&gt;
 passwd archie&lt;br /&gt;
&lt;br /&gt;
=== Unified Kernel Images ===&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;quiet rw&amp;quot; &amp;gt; /etc/kernel/cmdline&lt;br /&gt;
mkdir -p /efi/EFI/Linux&lt;br /&gt;
sed -i &#039;s/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block filesystems fsck)/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole sd-encrypt block filesystems fsck)/g&#039; /etc/mkinitcpio.conf&lt;br /&gt;
sed -i \&lt;br /&gt;
-e &amp;quot;s|PRESETS=(&#039;default&#039;)|#PRESETS=(&#039;default&#039;)|g&amp;quot; \&lt;br /&gt;
-e &amp;quot;s|#PRESETS=(&#039;default&#039; &#039;fallback&#039;)|PRESETS=(&#039;default&#039; &#039;fallback&#039;)|g&amp;quot; \&lt;br /&gt;
-e &#039;s|#default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_options=&amp;quot;-S autodetect&amp;quot;|fallback_options=&amp;quot;-S autodetect&amp;quot;|g&#039; \&lt;br /&gt;
/etc/mkinitcpio.d/linux.preset&lt;br /&gt;
mkinitcpio -P&lt;br /&gt;
bootctl install --esp-path=/efi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure Boot ===&lt;br /&gt;
&lt;br /&gt;
В первую очередь необходимо в BIOS сбросить все ключи и настройки Secure Boot и выключить его. Указанная команда позволит проверить наличие статуса Setup Mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbctl status&lt;br /&gt;
Installed:  ✓ sbctl is installed&lt;br /&gt;
Setup Mode: ✗ Enabled&lt;br /&gt;
Secure Boot:    ✗ Disabled&lt;br /&gt;
Vendor Keys:    none&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать персональные ключи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl create-keys&lt;br /&gt;
sudo sbctl enroll-keys -m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подпишем efi файлы и переустановим ядро Linux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux-fallback.efi&lt;br /&gt;
sudo pacman -S linux&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TPM2 разблокировка ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sudo systemd-cryptenroll /dev/gpt-auto-root-luks --recovery-key&lt;br /&gt;
Keep this key safe. Keep it hidden. Moving on, we&#039;ll now enroll our system firmware and Secure Boot state. Normally, this would allow our TPM to unlock our encrypted drive, as long as the state hasn&#039;t changed. If you&#039;re particularly paranoid, you can add --tpm2-with-pin=yes, so we get prompted for a PIN code on boot.&lt;br /&gt;
&lt;br /&gt;
$ sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7  /dev/gpt-auto-root-luks&lt;br /&gt;
Now we need to reboot and test this. If all goes well, we should be able to unlock our encrypted root partition with just a PIN code.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Завершения настройки базовой системы ===&lt;br /&gt;
Trizen менеджер пакетов для AUR: облегченная оболочка pacman и помощник AUR.&lt;br /&gt;
 cd /tmp&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://aur.archlinux.org/trizen.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd trizen&lt;br /&gt;
 makepkg -si&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и подготовка графического окружения для рабочих станции ==&lt;br /&gt;
&lt;br /&gt;
=== Установка требуемых пакетов и приложений ===&lt;br /&gt;
 pacman -S alacritty nextcloud-client android-tools android-udev filezilla gimp godot gvfs inkscape keepassxc libreoffice-fresh lib32-ncurses libreoffice-fresh-ru libva-utils mesa-demos mpv noto-fonts noto-fonts-cjk noto-fonts-emoji qbittorrent steam telegram-desktop tesseract tesseract-data-eng tesseract-data-rus blender code vlc&lt;br /&gt;
 trizen -S --noedit google-chrome-dev android-studio anydesk-bin webcord gtk2-patched-filechooser-icon-view assistant&lt;br /&gt;
&lt;br /&gt;
==== KDE ====&lt;br /&gt;
 pacman -S plasma dolphin ark audiocd-kio dolphin-plugins kio-admin kompare ffmpegthumbs icoutils kdegraphics-thumbnailers kimageformats resvg filelight kdf&lt;br /&gt;
 systemd enable plasmalogin.service&lt;br /&gt;
&lt;br /&gt;
После запуска KDE необходимо настроить раскладки клавиатуры, DPI.&lt;br /&gt;
&lt;br /&gt;
==== Sway (устарело, требуется обновление части) ====&lt;br /&gt;
 sudo pacman -S gdm sway&lt;br /&gt;
 trizen -S libdisplay-info-git waybar rofi-lbonn-wayland-git xdg-desktop-portal-wlr slurp --noedit&lt;br /&gt;
 sudo systemctl enable --now gdm&lt;br /&gt;
&lt;br /&gt;
=== Настройка путей и монтирования в домашнем каталоге ===&lt;br /&gt;
Тут необходимо решить проблему с тем, что русскоязычные папки уже могут быть созданы.&lt;br /&gt;
&lt;br /&gt;
 mkdir -pv /home/$USER/{Desktop,Databases,Downloads,Documents,Pictures,Public,Sounds,Templates,VPNs}&lt;br /&gt;
 mkdir -v /home/$USER/{Music,Videos,Work/Builds/ArchLinux} # Для устройства с одним накопителем&lt;br /&gt;
 ln -s ~/.local/share/Steam ~/Steam&lt;br /&gt;
&lt;br /&gt;
Если основной накопитель имеет малый размер и имеется возможность установки второго, то последний можно монтировать через &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; и создать симлинки на основной папки.&lt;br /&gt;
&lt;br /&gt;
 ln -s /mnt/storage/Music/ ~/Music&lt;br /&gt;
 ln -s /mnt/storage/Videos/ ~/Videos&lt;br /&gt;
 ln -s /mnt/storage/Work/ ~/Work&lt;br /&gt;
&lt;br /&gt;
=== Импортирование конфигурации ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://git.tmon8.ru/comminux/dotfiles.git&amp;lt;/nowiki&amp;gt; ~/Work/dotfiles&lt;br /&gt;
 cd ~/Work/dotfiles&lt;br /&gt;
 git checkout branch # Выбираем нужную ветку за основу&lt;br /&gt;
 mv .git/ ~/&lt;br /&gt;
 cp -r * /home/$USER/&lt;br /&gt;
 cp -r .* /home/$USER/&lt;br /&gt;
 cd ~&lt;br /&gt;
 rm -rf ~/Work/dotfiles&lt;br /&gt;
 sudo cp ~/.usr/bin/* /bin/&lt;br /&gt;
 chromexup&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные настройки и решения ===&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/Tk-Glitch/PKGBUILDS&amp;lt;/nowiki&amp;gt; ~/Work/Builds/ArchLinux/Tk-Glitch-PKGBUILDS&lt;br /&gt;
&lt;br /&gt;
=== Исправление ошибки &amp;quot;Not authorized to perform operation&amp;quot; при попытке монтирования дополнительного накопителя. ===&lt;br /&gt;
&lt;br /&gt;
Создаём это polkit правило в &amp;lt;code&amp;gt;/etc/polkit-1/rules.d/00-mount-internal.rules&amp;lt;/code&amp;gt;:&lt;br /&gt;
 polkit.addRule(function(action, subject) {&lt;br /&gt;
    if ((action.id == &amp;quot;org.freedesktop.udisks2.filesystem-mount-system&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
       subject.local &amp;amp;&amp;amp; subject.active &amp;amp;&amp;amp; subject.isInGroup(&amp;quot;storage&amp;quot;)))&lt;br /&gt;
       {&lt;br /&gt;
          return polkit.Result.YES;&lt;br /&gt;
       }&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
И добавляем нашего пользователя в группу &#039;&#039;&#039;storage&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# sudo usermod -aG storage $USER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Устаревшая секция ===&lt;br /&gt;
&lt;br /&gt;
 sudo pacman -S android-tools android-udev baobab chromium filezilla gimp gnu-netcat gvfs inkscape keepassxc libreoffice-fresh lib32-ncurses libreoffice-fresh-ru libva-utils minetest mesa-demos mpv neofetch nextcloud-client nomacs noto-fonts noto-fonts-cjk noto-fonts-emoji pavucontrol pcmanfm-qt pipewire-jack qbittorrent qt5-translations qt6-translations qutebrowser steam steam-native-runtime telegram-desktop tesseract tesseract-data-eng tesseract-data-rus ttf-liberation winetricks wine-gecko wine-mono&lt;br /&gt;
Для компьютера на базе графического процессора от Intel: &amp;lt;code&amp;gt;sudo pacman -S intel-media-driver powertop xf86-video-intel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для компьютера на базе графического процессора от AMD: &amp;lt;code&amp;gt;sudo pacman -S vulkan-radeon lib32-vulkan-radeon libva-mesa-driver xf86-video-amdgpu&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перечень Vulkan драйверов: &amp;lt;nowiki&amp;gt;https://wiki.archlinux.org/title/Vulkan&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для настройки тачпада ноутбука: &amp;lt;code&amp;gt;xorg-xinput&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 trizen -S android-studio anydesk-bin chromexup webcord evhz-git godot lib32-gconf undistract-me-git --noedit&lt;br /&gt;
 echo -e &amp;quot;source /usr/share/undistract-me/long-running.bash\nnotify_when_long_running_commands_finish_install&amp;quot; &amp;gt;&amp;gt; ~\.bashrc&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и настройка серверной станции ==&lt;br /&gt;
&lt;br /&gt;
=== Основные программы ===&lt;br /&gt;
 sudo pacman -Suy certbot-nginx composer cups ffmpeg gitea libreoffice-fresh mediawiki nextcloud nginx php-fpm php-gd php-imagick php-intl php-sodium qbittorrent-nox sane vlc vsftpd youtube-dl&lt;br /&gt;
 trizen -S gerbera samsung-unified-driver steamcmd minetest-git --noedit&lt;br /&gt;
&lt;br /&gt;
=== Настройка принтера ===&lt;br /&gt;
Несмотря на то, что &#039;&#039;&#039;cups&#039;&#039;&#039; предоставляет юнит &#039;&#039;&#039;cups.socket&#039;&#039;&#039; для запуска веб-сервера печати по запросу, лучше всего запускать сервис печати при запуске хоста, т.к. иногда задания печати могут быть пропущены и не войти в очередь для отработки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable cups.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка MariaDB и NGINX ===&lt;br /&gt;
 sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql&lt;br /&gt;
 sudo systemctl start mariadb.service&lt;br /&gt;
 sudo mysql_secure_installation&lt;br /&gt;
 sudo systemctl enable mariadb.service&lt;br /&gt;
 sudo systemctl enable vsftpd.service # Не актуально.&lt;br /&gt;
 sudo systemctl enable php-fpm.service&lt;br /&gt;
 sudo systemctl enable nginx.service&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-available&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-enabled&lt;br /&gt;
&lt;br /&gt;
Также потребуется добавить опцию sites-enabled/*; в конец блока http в файле &amp;lt;code&amp;gt;/etc/nginx/nginx.conf&amp;lt;/code&amp;gt; для возможности использования отдельных конфигураций под каждое веб-приложение:&lt;br /&gt;
&lt;br /&gt;
 http {&lt;br /&gt;
     types_hash_max_size 4096;&lt;br /&gt;
     server_names_hash_bucket_size 128;&lt;br /&gt;
     &lt;br /&gt;
     include sites-enabled/*;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Устаревшие секции ==&lt;br /&gt;
&lt;br /&gt;
Тут приведены устаревшие части настройки системы. Если systemd-boot теперь устанавливается в &amp;lt;code&amp;gt;/efi&amp;lt;/code&amp;gt;, то за автоматическое монтирование отвечает systemd, т.к. при создании разделов мы использовали метки Discoverable Partitions Specification (DPS).&lt;br /&gt;
&lt;br /&gt;
=== Установка загрузчика systemd-boot ===&lt;br /&gt;
Для копирования исполняемого файла загрузчика на EFI-раздел и добавления загрузочной записи в прошивку материнской платы можно воспользоваться инструментом из состава systemd: &amp;lt;code&amp;gt;bootctl --path=/boot install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если требуется, сторонние [[Список полезных команд Linux|загрузочные записи можно очистить]].&lt;br /&gt;
&lt;br /&gt;
Теперь берем UUID swap&#039;а и раздела монтируемого по корневому пути. (&#039;&#039;эту часть нужно улучшить, чтобы UUID был сохранён в переменную&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 ls -l /dev/disk/by-partuuid/ | grep &#039;sd[a-z][1-3]&#039;&lt;br /&gt;
 echo -e &#039;title\t\tArch Linux Kernel\nlinux\t\t/vmlinuz-linux\ninitrd\t\t/intel-ucode.img\ninitrd\t\t/initramfs-linux.img\noptions\t\troot=PARTUUID=55d7a752-7da7-4a8f-aae7-a90b63614d83 rw resume=PARTUUID=4af468e0-0c92-4dab-9a21-738fd95875d3&#039; &amp;gt;&amp;gt; /boot/loader/entries/arch.conf&lt;br /&gt;
 sed -i &amp;quot;s/#timeout 3/timeout 3/&amp;quot; /etc/sudoers&lt;br /&gt;
 sudo sed  -i &#039;1i default @saved&#039; /boot/loader/loader.conf # systemd-boot будет запоминать последнюю выбранную загрузочную запись&lt;br /&gt;
&lt;br /&gt;
Завершаем работу в &#039;&#039;&#039;chroot&#039;&#039;&#039; окружении и перезагружаем компьютер для продолжения настройки системы.&lt;br /&gt;
&lt;br /&gt;
 exit&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Настройка fstab  ===&lt;br /&gt;
&lt;br /&gt;
 sudo genfstab -U /mnt/install &amp;gt;&amp;gt; /mnt/install/etc/fstab&lt;br /&gt;
Теперь требуется проверить и отредактировать &amp;lt;code&amp;gt;/mnt/install/etc/fstab&amp;lt;/code&amp;gt; перед следующим этапом.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 # Static information about the filesystems.&lt;br /&gt;
 # See fstab(5) for details.&lt;br /&gt;
 &lt;br /&gt;
 # &amp;lt;file system&amp;gt; &amp;lt;dir&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;&lt;br /&gt;
 # /dev/nvme0n1p3&lt;br /&gt;
 UUID=68b6d3fa-3dd1-4c2d-acd4-8956a89d7c53       /               ext4            rw,relatime     0 1&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p1&lt;br /&gt;
 UUID=CFA0-CC07          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro       0 2&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p2&lt;br /&gt;
 UUID=c9e25512-cc2d-45cf-a95e-e4cfc6dfb116       none            swap            defaults        0 0&lt;br /&gt;
Файловые системы vfat и ext4 требуют дополнительной опции &amp;lt;code&amp;gt;discard&amp;lt;/code&amp;gt; при использовании SSD накопителя:&lt;br /&gt;
 # /dev/sdX3&lt;br /&gt;
 UUID=6b0d06c4-ca05-427d-83d4-b3978595f6bb	/         	ext4      	rw,relatime,discard	0 1&lt;br /&gt;
&lt;br /&gt;
== Смотрите также ==&lt;br /&gt;
&lt;br /&gt;
* [https://walian.co.uk/arch-install-with-secure-boot-btrfs-tpm2-luks-encryption-unified-kernel-images.html Arch Install with Secure Boot, btrfs, TPM2 LUKS encryption, Unified Kernel Images. Walian&#039;s Tech/Linux Blog] - Пример полной установки Arch Linux с Secure Boot, btrfs, TPM2 LUKS шифрованием, Unified Kernel Images.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
	<entry>
		<id>https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=180</id>
		<title>Установка и первичная настройка дистрибутива Arch Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tmon8.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0_Arch_Linux&amp;diff=180"/>
		<updated>2026-04-05T12:15:09Z</updated>

		<summary type="html">&lt;p&gt;Comminux: Добавлена секция для TPM2 разблокировки&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В данной статье описана типичная установка Arch Linux&#039;а с указанием специфичных различий в конфигурациях для разных компьютеров и рабочих окружений.&lt;br /&gt;
&lt;br /&gt;
== Подготовка к установке ==&lt;br /&gt;
&lt;br /&gt;
=== ssh ===&lt;br /&gt;
Если установка будет производится посредством &#039;&#039;&#039;ssh&#039;&#039;&#039; соединения с другого ПК, то перед подключением нужно задать пароль для &#039;&#039;&#039;root&#039;&#039;&#039; пользователя.&lt;br /&gt;
&lt;br /&gt;
=== Доступ в сеть ===&lt;br /&gt;
Для подключения к сети через LAN достаточно только активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер: &amp;lt;code&amp;gt;systemctl start dhcpcd.service&amp;lt;/code&amp;gt;. Чтобы настроить Wi-FI соединение нужно воспользоваться интерактивной консолью клиента &#039;&#039;&#039;iwctl&#039;&#039;&#039; для демона &#039;&#039;&#039;iwd&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
# Потребуется проверить идентификатор беспроводного адаптера сети Wi-Fi: &amp;lt;code&amp;gt;[iwd]# device list&amp;lt;/code&amp;gt;&lt;br /&gt;
# Просканируем радио эфир на наличие нужной точки доступа: &amp;lt;code&amp;gt;[iwd]# station wlan0 scan&amp;lt;/code&amp;gt;&lt;br /&gt;
# Т.к. &#039;&#039;&#039;iwctl&#039;&#039;&#039; поддерживает автозаполнение ввода через клавишу tab, то можно выбрать нужную сеть после ввода первых букв её названия: &amp;lt;code&amp;gt;[iwd]# station wlan0 connect &amp;quot;Make Wi-Fi Great Again!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После подключения к точке доступа потребуется активировать &#039;&#039;&#039;dhcpcd&#039;&#039;&#039; сервер.&lt;br /&gt;
&lt;br /&gt;
=== gdisk (создание gpt метки и разметка файловой системы) ===&lt;br /&gt;
 sudo gdisk /dev/nvme0n1 # или /dev/sda для SATA накопителя&lt;br /&gt;
 x&lt;br /&gt;
 l&lt;br /&gt;
 8&lt;br /&gt;
 d&lt;br /&gt;
 m&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +1G&lt;br /&gt;
 ef00&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 +24G&lt;br /&gt;
 8200&lt;br /&gt;
 n&lt;br /&gt;
 ⏎&lt;br /&gt;
 ⏎&lt;br /&gt;
 8304&lt;br /&gt;
 w&lt;br /&gt;
 Y&lt;br /&gt;
&lt;br /&gt;
=== Создание и монтирование файловых систем ===&lt;br /&gt;
&lt;br /&gt;
Данный раздел будет разделен на обычную установку и с использованием LUKS для шифрования разделов.&lt;br /&gt;
&lt;br /&gt;
==== Обычные разделы ====&lt;br /&gt;
&lt;br /&gt;
 sudo mkfs.vfat -F32 -n EFI /dev/nvme0n1p1 # или /dev/sda1 для SATA накопителя&lt;br /&gt;
 sudo mkswap /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkfs.ext4 -b 4096 -m 0 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo swapon /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install&lt;br /&gt;
 sudo mount /dev/nvme0n1p3 /mnt/install/ # или /dev/sda3 для SATA накопителя&lt;br /&gt;
 sudo mkdir -v /mnt/install/boot&lt;br /&gt;
 sudo mount /dev/nvme0n1p1 /mnt/install/boot/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&lt;br /&gt;
==== LUKS разделы ====&lt;br /&gt;
&lt;br /&gt;
Для настройки шифрования необходимо инициализировать и открыть LUKS разделы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cryptsetup luksFormat --type luks2 /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksFormat --type luks2 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя&lt;br /&gt;
YES&lt;br /&gt;
Требуется ввести пароль&lt;br /&gt;
cryptsetup luksOpen /dev/nvme0n1p2 swap&lt;br /&gt;
cryptsetup --allow-discards --persistent luksOpen /dev/nvme0n1p3 root&lt;br /&gt;
sudo mkswap -L swap /dev/mapper/swap&lt;br /&gt;
sudo swapon /dev/mapper/swap&lt;br /&gt;
sudo mkfs.ext4 -E discard -b 4096 -m 0 -L root /dev/mapper/root&lt;br /&gt;
mount /dev/mapper/root /mnt/install&lt;br /&gt;
sudo mkdir -v /mnt/install/efi&lt;br /&gt;
sudo mount /dev/nvme0n1p1 /mnt/install/efi/ # или /dev/sda2 для SATA накопителя&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка базовой части системы ===&lt;br /&gt;
&lt;br /&gt;
Настроим список российских зеркал для Pacman:&lt;br /&gt;
&amp;lt;pre&amp;gt;reflector --country RU --age 24 --protocol https --sort rate --save /etc/pacman.d/mirrorlist&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 sudo pacstrap /mnt/install/ arch-install-scripts base base-devel bash-completion beep ccache cmake cryptsetup dosfstools git git-lfs go go-tools gptfdisk hdparm htop jre-openjdk linux linux-firmware lvm2 man-db mariadb neovim net-tools networkmanager networkmanager-openvpn ntfs-3g openssh openvpn p7zip parted pdftk pipewire pipewire-alsa pipewire-pulse python-pynvim rsync sbctl screen sudo tmux tree unzip usbutils util-linux vifm wget wireplumber wol xdg-user-dirs yt-dlp zip&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;В зависимости от производителя процессора, требуется поставить дополнительный пакет с обновлением микрокода:&#039;&#039;&#039; &amp;lt;code&amp;gt;intel-ucode&amp;lt;/code&amp;gt; &#039;&#039;&#039;или&#039;&#039;&#039; &amp;lt;code&amp;gt;amd-ucode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка базовой системы ==&lt;br /&gt;
=== Начальный этап настройки ===&lt;br /&gt;
Минимальный набор требуемых настроек для последующей настройки системы после перезагрузки.&lt;br /&gt;
 arch-chroot /mnt/install&lt;br /&gt;
 ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime&lt;br /&gt;
 sed -i &amp;quot;s/#en_US.UTF-8/en_US.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 sed -i &amp;quot;s/#ru_RU.UTF-8/ru_RU.UTF-8/&amp;quot; /etc/locale.gen&lt;br /&gt;
 locale-gen&lt;br /&gt;
 echo LANG=ru_RU.UTF-8 &amp;gt; /etc/locale.conf&lt;br /&gt;
 echo -e &amp;quot;KEYMAP=ruwin_alt_sh-UTF-8\nFONT=cyr-sun16&amp;quot; &amp;gt; /etc/vconsole.conf&lt;br /&gt;
 export myhostname= # Создаём переменную с именем будущего хоста&lt;br /&gt;
 echo $myhostname &amp;gt; /etc/hostname&lt;br /&gt;
 echo -e &amp;quot;#\n#&amp;lt;ip-address&amp;gt;\t&amp;lt;hostname.domain.org&amp;gt;\t&amp;lt;hostname&amp;gt;\n127.0.0.1\t$myhostname.lan\t\tlocalhost $myhostname\n::1\t\t$myhostname.lan\t\tlocalhost $myhostname&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
 mkinitcpio -P&lt;br /&gt;
 sed -i &amp;quot;s/# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/&amp;quot; /etc/sudoers&lt;br /&gt;
 sed -i -e &#039;s/#Color/Color/g&#039; -e &#039;/#\[multilib\]/{N;s/#\[multilib\]\n#Include/\[multilib\]\nInclude/}&#039; /etc/pacman.conf # Включает Color и multilib&lt;br /&gt;
 systemctl enable systemd-resolved systemd-timesyncd NetworkManager sshd systemd-timesyncd&lt;br /&gt;
 systemctl mask systemd-networkd&lt;br /&gt;
&lt;br /&gt;
Создание основного пользователя:&lt;br /&gt;
&lt;br /&gt;
 useradd -m -G wheel archie&lt;br /&gt;
 passwd archie&lt;br /&gt;
&lt;br /&gt;
=== Unified Kernel Images ===&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;quiet rw&amp;quot; &amp;gt; /etc/kernel/cmdline&lt;br /&gt;
mkdir -p /efi/EFI/Linux&lt;br /&gt;
sed -i &#039;s/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block filesystems fsck)/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole sd-encrypt block filesystems fsck)/g&#039; /etc/mkinitcpio.conf&lt;br /&gt;
sed -i \&lt;br /&gt;
-e &amp;quot;s|PRESETS=(&#039;default&#039;)|#PRESETS=(&#039;default&#039;)|g&amp;quot; \&lt;br /&gt;
-e &amp;quot;s|#PRESETS=(&#039;default&#039; &#039;fallback&#039;)|PRESETS=(&#039;default&#039; &#039;fallback&#039;)|g&amp;quot; \&lt;br /&gt;
-e &#039;s|#default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|default_uki=&amp;quot;/efi/EFI/Linux/arch-linux.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|default_options=&amp;quot;--splash /usr/share/systemd/bootctl/splash-arch.bmp&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|fallback_uki=&amp;quot;/efi/EFI/Linux/arch-linux-fallback.efi&amp;quot;|g&#039; \&lt;br /&gt;
-e &#039;s|#fallback_options=&amp;quot;-S autodetect&amp;quot;|fallback_options=&amp;quot;-S autodetect&amp;quot;|g&#039; \&lt;br /&gt;
/etc/mkinitcpio.d/linux.preset&lt;br /&gt;
mkinitcpio -P&lt;br /&gt;
bootctl install --esp-path=/efi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure Boot ===&lt;br /&gt;
&lt;br /&gt;
В первую очередь необходимо в BIOS сбросить все ключи и настройки Secure Boot и выключить его. Указанная команда позволит проверить наличие статуса Setup Mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sbctl status&lt;br /&gt;
Installed:  ✓ sbctl is installed&lt;br /&gt;
Setup Mode: ✗ Enabled&lt;br /&gt;
Secure Boot:    ✗ Disabled&lt;br /&gt;
Vendor Keys:    none&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно создать персональные ключи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl create-keys&lt;br /&gt;
sudo sbctl enroll-keys -m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подпишем efi файлы и переустановим ядро Linux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/BOOT/BOOTX64.EFI&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux.efi&lt;br /&gt;
sudo sbctl sign -s /efi/EFI/Linux/arch-linux-fallback.efi&lt;br /&gt;
sudo pacman -S linux&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TPM2 разблокировка ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sudo systemd-cryptenroll /dev/gpt-auto-root-luks --recovery-key&lt;br /&gt;
Keep this key safe. Keep it hidden. Moving on, we&#039;ll now enroll our system firmware and Secure Boot state. Normally, this would allow our TPM to unlock our encrypted drive, as long as the state hasn&#039;t changed. If you&#039;re particularly paranoid, you can add --tpm2-with-pin=yes, so we get prompted for a PIN code on boot.&lt;br /&gt;
&lt;br /&gt;
$ sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7  /dev/gpt-auto-root-luks&lt;br /&gt;
Now we need to reboot and test this. If all goes well, we should be able to unlock our encrypted root partition with just a PIN code.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Завершения настройки базовой системы ===&lt;br /&gt;
Trizen менеджер пакетов для AUR: облегченная оболочка pacman и помощник AUR.&lt;br /&gt;
 cd /tmp&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://aur.archlinux.org/trizen.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd trizen&lt;br /&gt;
 makepkg -si&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и подготовка графического окружения для рабочих станции ==&lt;br /&gt;
&lt;br /&gt;
=== Установка требуемых пакетов и приложений ===&lt;br /&gt;
 pacman -S alacritty nextcloud-client android-tools android-udev filezilla gimp godot gvfs inkscape keepassxc libreoffice-fresh lib32-ncurses libreoffice-fresh-ru libva-utils mesa-demos mpv noto-fonts noto-fonts-cjk noto-fonts-emoji qbittorrent steam telegram-desktop tesseract tesseract-data-eng tesseract-data-rus blender code vlc&lt;br /&gt;
 trizen -S --noedit google-chrome-dev android-studio anydesk-bin webcord gtk2-patched-filechooser-icon-view assistant&lt;br /&gt;
&lt;br /&gt;
==== KDE ====&lt;br /&gt;
 pacman -S plasma dolphin ark audiocd-kio dolphin-plugins kio-admin kompare ffmpegthumbs icoutils kdegraphics-thumbnailers kimageformats resvg filelight kdf&lt;br /&gt;
 systemd enable plasmalogin.service&lt;br /&gt;
&lt;br /&gt;
После запуска KDE необходимо настроить раскладки клавиатуры, DPI.&lt;br /&gt;
&lt;br /&gt;
==== Sway (устарело, требуется обновление части) ====&lt;br /&gt;
 sudo pacman -S gdm sway&lt;br /&gt;
 trizen -S libdisplay-info-git waybar rofi-lbonn-wayland-git xdg-desktop-portal-wlr slurp --noedit&lt;br /&gt;
 sudo systemctl enable --now gdm&lt;br /&gt;
&lt;br /&gt;
=== Настройка путей и монтирования в домашнем каталоге ===&lt;br /&gt;
Тут необходимо решить проблему с тем, что русскоязычные папки уже могут быть созданы.&lt;br /&gt;
&lt;br /&gt;
 mkdir -pv /home/$USER/{Desktop,Databases,Downloads,Documents,Pictures,Public,Sounds,Templates,VPNs,Work/Builds/ArchLinux}&lt;br /&gt;
 mkdir -v /home/$USER/{Music,Videos} # Для нетбука или ноутбука&lt;br /&gt;
 ln -s ~/.local/share/Steam ~/Steam&lt;br /&gt;
&lt;br /&gt;
=== Импортирование конфигурации ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://git.tmon8.ru/comminux/dotfiles.git&amp;lt;/nowiki&amp;gt; ~/Work/dotfiles&lt;br /&gt;
 cd ~/Work/dotfiles&lt;br /&gt;
 git checkout branch # Выбираем нужную ветку за основу&lt;br /&gt;
 mv .git/ ~/&lt;br /&gt;
 cp -r * /home/$USER/&lt;br /&gt;
 cp -r .* /home/$USER/&lt;br /&gt;
 cd ~&lt;br /&gt;
 rm -rf ~/Work/dotfiles&lt;br /&gt;
 sudo cp ~/.usr/bin/* /bin/&lt;br /&gt;
 chromexup&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные настройки и решения ===&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/Tk-Glitch/PKGBUILDS&amp;lt;/nowiki&amp;gt; ~/Work/Builds/ArchLinux/Tk-Glitch-PKGBUILDS&lt;br /&gt;
&lt;br /&gt;
=== Исправление ошибки &amp;quot;Not authorized to perform operation&amp;quot; при попытке монтирования дополнительного накопителя. ===&lt;br /&gt;
&lt;br /&gt;
Создаём это polkit правило в &amp;lt;code&amp;gt;/etc/polkit-1/rules.d/00-mount-internal.rules&amp;lt;/code&amp;gt;:&lt;br /&gt;
 polkit.addRule(function(action, subject) {&lt;br /&gt;
    if ((action.id == &amp;quot;org.freedesktop.udisks2.filesystem-mount-system&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
       subject.local &amp;amp;&amp;amp; subject.active &amp;amp;&amp;amp; subject.isInGroup(&amp;quot;storage&amp;quot;)))&lt;br /&gt;
       {&lt;br /&gt;
          return polkit.Result.YES;&lt;br /&gt;
       }&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
И добавляем нашего пользователя в группу &#039;&#039;&#039;storage&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# sudo usermod -aG storage $USER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Устаревшая секция ===&lt;br /&gt;
&lt;br /&gt;
 sudo pacman -S android-tools android-udev baobab chromium filezilla gimp gnu-netcat gvfs inkscape keepassxc libreoffice-fresh lib32-ncurses libreoffice-fresh-ru libva-utils minetest mesa-demos mpv neofetch nextcloud-client nomacs noto-fonts noto-fonts-cjk noto-fonts-emoji pavucontrol pcmanfm-qt pipewire-jack qbittorrent qt5-translations qt6-translations qutebrowser steam steam-native-runtime telegram-desktop tesseract tesseract-data-eng tesseract-data-rus ttf-liberation winetricks wine-gecko wine-mono&lt;br /&gt;
Для компьютера на базе графического процессора от Intel: &amp;lt;code&amp;gt;sudo pacman -S intel-media-driver powertop xf86-video-intel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для компьютера на базе графического процессора от AMD: &amp;lt;code&amp;gt;sudo pacman -S vulkan-radeon lib32-vulkan-radeon libva-mesa-driver xf86-video-amdgpu&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перечень Vulkan драйверов: &amp;lt;nowiki&amp;gt;https://wiki.archlinux.org/title/Vulkan&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для настройки тачпада ноутбука: &amp;lt;code&amp;gt;xorg-xinput&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 trizen -S android-studio anydesk-bin chromexup webcord evhz-git godot lib32-gconf undistract-me-git --noedit&lt;br /&gt;
 echo -e &amp;quot;source /usr/share/undistract-me/long-running.bash\nnotify_when_long_running_commands_finish_install&amp;quot; &amp;gt;&amp;gt; ~\.bashrc&lt;br /&gt;
&lt;br /&gt;
== Установка дополнительных компонентов и настройка серверной станции ==&lt;br /&gt;
&lt;br /&gt;
=== Основные программы ===&lt;br /&gt;
 sudo pacman -Suy certbot-nginx composer cups ffmpeg gitea libreoffice-fresh mediawiki nextcloud nginx php-fpm php-gd php-imagick php-intl php-sodium qbittorrent-nox sane vlc vsftpd youtube-dl&lt;br /&gt;
 trizen -S gerbera samsung-unified-driver steamcmd minetest-git --noedit&lt;br /&gt;
&lt;br /&gt;
=== Настройка принтера ===&lt;br /&gt;
Несмотря на то, что &#039;&#039;&#039;cups&#039;&#039;&#039; предоставляет юнит &#039;&#039;&#039;cups.socket&#039;&#039;&#039; для запуска веб-сервера печати по запросу, лучше всего запускать сервис печати при запуске хоста, т.к. иногда задания печати могут быть пропущены и не войти в очередь для отработки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl enable cups.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка MariaDB и NGINX ===&lt;br /&gt;
 sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql&lt;br /&gt;
 sudo systemctl start mariadb.service&lt;br /&gt;
 sudo mysql_secure_installation&lt;br /&gt;
 sudo systemctl enable mariadb.service&lt;br /&gt;
 sudo systemctl enable vsftpd.service # Не актуально.&lt;br /&gt;
 sudo systemctl enable php-fpm.service&lt;br /&gt;
 sudo systemctl enable nginx.service&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-available&lt;br /&gt;
 sudo mkdir /etc/nginx/sites-enabled&lt;br /&gt;
&lt;br /&gt;
Также потребуется добавить опцию sites-enabled/*; в конец блока http в файле &amp;lt;code&amp;gt;/etc/nginx/nginx.conf&amp;lt;/code&amp;gt; для возможности использования отдельных конфигураций под каждое веб-приложение:&lt;br /&gt;
&lt;br /&gt;
 http {&lt;br /&gt;
     types_hash_max_size 4096;&lt;br /&gt;
     server_names_hash_bucket_size 128;&lt;br /&gt;
     &lt;br /&gt;
     include sites-enabled/*;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Устаревшие секции ==&lt;br /&gt;
&lt;br /&gt;
Тут приведены устаревшие части настройки системы. Если systemd-boot теперь устанавливается в &amp;lt;code&amp;gt;/efi&amp;lt;/code&amp;gt;, то за автоматическое монтирование отвечает systemd, т.к. при создании разделов мы использовали метки Discoverable Partitions Specification (DPS).&lt;br /&gt;
&lt;br /&gt;
=== Установка загрузчика systemd-boot ===&lt;br /&gt;
Для копирования исполняемого файла загрузчика на EFI-раздел и добавления загрузочной записи в прошивку материнской платы можно воспользоваться инструментом из состава systemd: &amp;lt;code&amp;gt;bootctl --path=/boot install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если требуется, сторонние [[Список полезных команд Linux|загрузочные записи можно очистить]].&lt;br /&gt;
&lt;br /&gt;
Теперь берем UUID swap&#039;а и раздела монтируемого по корневому пути. (&#039;&#039;эту часть нужно улучшить, чтобы UUID был сохранён в переменную&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
 ls -l /dev/disk/by-partuuid/ | grep &#039;sd[a-z][1-3]&#039;&lt;br /&gt;
 echo -e &#039;title\t\tArch Linux Kernel\nlinux\t\t/vmlinuz-linux\ninitrd\t\t/intel-ucode.img\ninitrd\t\t/initramfs-linux.img\noptions\t\troot=PARTUUID=55d7a752-7da7-4a8f-aae7-a90b63614d83 rw resume=PARTUUID=4af468e0-0c92-4dab-9a21-738fd95875d3&#039; &amp;gt;&amp;gt; /boot/loader/entries/arch.conf&lt;br /&gt;
 sed -i &amp;quot;s/#timeout 3/timeout 3/&amp;quot; /etc/sudoers&lt;br /&gt;
 sudo sed  -i &#039;1i default @saved&#039; /boot/loader/loader.conf # systemd-boot будет запоминать последнюю выбранную загрузочную запись&lt;br /&gt;
&lt;br /&gt;
Завершаем работу в &#039;&#039;&#039;chroot&#039;&#039;&#039; окружении и перезагружаем компьютер для продолжения настройки системы.&lt;br /&gt;
&lt;br /&gt;
 exit&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Настройка fstab  ===&lt;br /&gt;
&lt;br /&gt;
 sudo genfstab -U /mnt/install &amp;gt;&amp;gt; /mnt/install/etc/fstab&lt;br /&gt;
Теперь требуется проверить и отредактировать &amp;lt;code&amp;gt;/mnt/install/etc/fstab&amp;lt;/code&amp;gt; перед следующим этапом.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 # Static information about the filesystems.&lt;br /&gt;
 # See fstab(5) for details.&lt;br /&gt;
 &lt;br /&gt;
 # &amp;lt;file system&amp;gt; &amp;lt;dir&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;&lt;br /&gt;
 # /dev/nvme0n1p3&lt;br /&gt;
 UUID=68b6d3fa-3dd1-4c2d-acd4-8956a89d7c53       /               ext4            rw,relatime     0 1&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p1&lt;br /&gt;
 UUID=CFA0-CC07          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro       0 2&lt;br /&gt;
 &lt;br /&gt;
 # /dev/nvme0n1p2&lt;br /&gt;
 UUID=c9e25512-cc2d-45cf-a95e-e4cfc6dfb116       none            swap            defaults        0 0&lt;br /&gt;
Файловые системы vfat и ext4 требуют дополнительной опции &amp;lt;code&amp;gt;discard&amp;lt;/code&amp;gt; при использовании SSD накопителя:&lt;br /&gt;
 # /dev/sdX3&lt;br /&gt;
 UUID=6b0d06c4-ca05-427d-83d4-b3978595f6bb	/         	ext4      	rw,relatime,discard	0 1&lt;br /&gt;
&lt;br /&gt;
== Смотрите также ==&lt;br /&gt;
&lt;br /&gt;
* [https://walian.co.uk/arch-install-with-secure-boot-btrfs-tpm2-luks-encryption-unified-kernel-images.html Arch Install with Secure Boot, btrfs, TPM2 LUKS encryption, Unified Kernel Images. Walian&#039;s Tech/Linux Blog] - Пример полной установки Arch Linux с Secure Boot, btrfs, TPM2 LUKS шифрованием, Unified Kernel Images.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Руководства]]&lt;/div&gt;</summary>
		<author><name>Comminux</name></author>
	</entry>
</feed>