Шифрование файлов в FreeBSD

Шифрование файлов в FreeBSD

Шифрование по алгоритму AES с помощью OpenSSL

Для шифрования/расшифрования файла в FreeBSD можно свободно воспользоваться пакеджем OpenSSL. В приведенных примерах для шифрования будет использоваться алгоритм AES с шифроключем длинной 256 бит.

Зашифровать файл:

$ openssl enc -e -aes-256-cbc -salt -in имя_файла -out имя_файла.enc

Примечание:
Для ввода пароля в командной строке можно использовать ключ «-k» ["openssl enc -e -aes-256-cbc -salt -k "пароль" -in имя_файла -out имя_файла.enc"].
Для увеличения криптостойкости алгоритма шифрования используется ключ «-salt» для примешивания случайной «соли», данный ключ включен по умолчанию.

Расшифровать файл:

$ openssl enc -e -aes-256-cbc -in имя_файла.enc -out имя_файла

Для шифрования/расшифрования директорий в FreeBSD сперва необходимо заархивировать её в «*.tar.bz2″.

Зашифровать директорию:

$ tar -cvjf имя_архива.tar.bz2 </путь/к/папке>
$ openssl enc -e -aes-256-cbc -salt -in имя_архива.tar.bz2 -out имя_файла.tar.bz2.enc

Расшифровать директорию:

$ openssl enc -e -aes-256-cbc -in имя_файла.tar.bz2.enc -out имя_архива.tar.bz2
$ tar -xvjf имя_архива.tar.bz2 -C </путь/к/папке>

Шифрование по алгоритму BlowFish с помощью OpenSSL

Для шифрования/расшифрования файла в FreeBSD по алгоритму BlowFish в режиме CBC нужно выполнить следующие команды.

Зашифровать файл:

$ openssl enc -e -bf-cbc -salt -in имя_файла -out имя_файла.enc.bf_cbc

Расшифровать файл:

$ openssl enc -d -bf-cbc -in имя_файла.enc.bf_cbc -out имя_файла

Тэги: [FreeBSD, BSD, BlowFish, шифрование, OpenSSL]

Решение Задачи о четырех красках

Решение Задачи о четырех красках

1. Условие

Дано: карта со странами.

Требуется: раскрасить страны в наименьшее количество цветов (красок).

Гипотеза: любую карту можно раскрасить, используя не более 4 (четырех) различных цветов (красок).

Требуется: доказать или опровергнуть данную гипотезу.

2. План доказательства

  1. Условие;
  2. План доказательства;
  3. Формализация условия;
  4. Главная идея доказательства;
  5. Доказательство;

3. Формализация условия

Опр.: Страной называется связанная область (фигура) на плоскости ограниченная не самопересекающимися замкнутыми кривыми, которые называются границами Страны.

Опр.: Границей Страны называется объединение кривых ограничиваемых данную страну.

Примечание: Количество замкнутых кривых, их длина и площадь области (страны) должны быть конечными величинами.

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

Опр.: Картой называется ограниченная не самопересекающимися замкнутыми кривыми связанная область (фигура) на плоскости, с разбиением на неперекрывающиеся (непересекающиеся) области называемые Странами.

Примечание: Для решения данной задачи ситуация, когда карта не имеет ни одной страны (пустая карта) непринципиальна, но чисто теоретически это вполне может быть.
Поскольку сама карта также является областью (как и страна) с расположенными на ней странами, то и соответственно все примечания, относящиеся к определению страны, будут в полной мере относиться и к определению карты.
Конечно, у карты, как и у страны, есть своя граница, которой является объединение кривых ограничиваемых карту, но в данном тексте это будет мало применимо.

Примечание (к определению терминов Карта и Страна): Из практических соображений, само понятие страны, равно как и понятие карты в контексте отдельном друг от друга мало применимы. Далее по тексту правильно следщует читать термин страна (или страны) на карте вместо термина страна (или страны) и термин карта со странами вместо термина карта.

Опр.: Соседними Странами на карте называютя Страны, имеющие общий участок границы.

Примечание: Точка не является общей границей при решении данной задачи. Общая граница всегда должна быть кривой.

Опр.: Раскраской Карты является такая пометка каждой Страны из множества пометок M, такая что любые (или каждые) две соседние страны на карте имеют разные пометки.

Примечание: Проще говоря, для раскраски карты со странами необходимо поставить в соответствие каждой стране один элемент из множества M, таким образом, чтобы соседние страны не имели одинакового (одного) элемента (или по-другому имели разные элементы) из множества M. При этом раскраска карты со странами в наименьшее количество цветов подразумевает использование соответственно наименьшего количества элементов из множества M.
Термин Пометка используется в теории графов. О чём более подробно написано ниже.

Опр.: Графом G(V,E) называется совокупность двух конечных множеств — непустого множества V (множества вершин) и множества E двухэлементных подмножеств множества V (E — множество ребер).

Опр.: Если задана функция F: V -> M и/или F: E -> M, то множество M называется множеством Пометок, а граф называется Помеченным (или Нагруженным). В качестве множества пометок обычно используются буквы или целые числа. Если функция F инъективна, то есть разные вершины (рёбра) имеют разные пометки, то граф называется Нумерованным.

4. Главная идея доказательства

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

Проблемы раскраски карты на глобусе и плоскости эквивалентны.
Действительно, в случае карты на сфере можно вырезать кусок внутренней области какой-либо страны; продырявленную сферу можно деформировать (растянуть) в плоскую область — представим, что карта сделана из тонкой резины. На плоской карте отверстие превратится в «океан», омывающий со всех сторон одну страну. Разумеется, длины границ, их форма, размеры стран подвергнутся при растяжении значительным изменениям, но сетка границ останется, добавится лишь растянутая граница прорезанного отверстия, внешняя граница океана. Её можно убрать, то есть раскрасить океан так же, как и окруженную им страну. Такие деформации стран и их границ, очевидно, не меняют задачи раскраски. Ниже рассматривается плоская карта.

Примечание: Вообще говоря данная ситуация скорее исключение чем правило, ведь в действительности не всякая карта на поверхности объёмной фигуры (тела) может быть сведена к плоской карте. Например, на поверхности тора можно нарисовать полный граф с пятью вершинами K5, и как следствие, карту, которую можно раскрасить в пять или более цветов, но данную карту нельзя свести к плоской карте, используя любую деформацию, как для сферы.
Задача о раскраске карты на любой поверхности более сложная и общая, чем раскраска плоской карты.
Из практических соображений изначально необходимо было раскрасить карту на сфере, и нам, можно сказать, немного повезло, что данные карты целиком переводятся в разряд более простых, то есть плоских карт.

Опр.: Полным графом с n вершинами (или коротко полным n-графом или n-полным графом) называется такой граф, у которого каждые (или любые) две вершины соединены ребром. Такой граф принято обозначать Kn, где n — количество вершин полного графа.

Опр.: Граф называется плоским (или планарным), если вершины являются точками плоскости, а рёбра — ломаными линиями (составленными из отрезков) в этой же плоскости, имеющими своими концами вершины, непересекающимися между собой и невключающими других вершин, кроме своих концов.

Опр.: Подграфом называется граф G|(V|,E|), где V| ⊆ V и/или E| ⊆ E.

Примечание: Отметим, что в плоском графе не допускаются петли (ребро, имеющие началом и концом одну и ту же вершину).

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

Примечание: На самом деле задача о раскраске плоской карты это всего лишь вершина айсберга задач о раскраске, ведь раскрашивать можно не только плоские фигуры, но и отрезки (ребра графа), и объемные фигуры (тела) и даже n-мерные фигуры. Причем n-мерные фигуры можно раскрашивать на поверхности n+k-мерной фигуры, также как грани в многограннике. Более того, вся сложность данного класса задач о раскраске заключается скорее в определении свойств графов, получаемых при переходе к эквивалентной задачи, то есть непосредственно от карты к графу. На данный момент мы знаем, какие классы подграфов не должен содержать планарный граф, но для более изысканных графов доказательство аналогичное Теореме Понтрягина-Куратовского может быть на порядок сложнее.

Теорема Кёнига о двудольном графе

Формулировка: В графе все циклы четные тогда и только тогда, когда граф является двудольным.

Опр.: Двудольный Граф — это Граф, все вершины которого разбиты на две доли (части или непересекающиеся подмножества множества вершин V V1 V2 которые удовлетворяют условиям: V1 ∩ V2 = ∅ и V1 ∪ V2 = V), а ребра проходят только между вершинами из разных доль.

Опр.: Ребром (или кликой 2) в графе называется подграф K2.

Опр.: Говорят, что в графе вершина инцидентна ребру или наоборот, если данная вершина является подграфом данного ребра.

Опр.: Говорят, что в графе две вершины смежные, если они соеденины ребром.

Опр.: Говорят, что в графе два ребра смежные, если у них есть общая вершина.

Опр.: Маршрутом (путем) в графе называется чередующаяся последовательность вершин и ребер v0,e1,v1,e2,v2, … ,ek,vk, где элементы vi из множества вершин V графа, а ei из множества ребер E графа, в которой любые два соседних элемента Инцидентны.

Опр.: Если v0 = vk, то Маршрут Замкнут, иначе Открыт.

Опр.: Если все ребра различны, то Маршрут называется Цепью.

Опр.: Если все вершины (а значит и ребра) различны, то Маршрут называется Простой Цепью.

Опр.: Замкнутая Цепь называется Циклом.

Опр.: Замкнутая Простая Цепь называется Простым Циклом.

Опр.: Граф без циклов называется Ацикличным.

Опр.: Связанный граф без циклов называется Деревом.

Доказательство теоремы Кёнига

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

Необходимость. Если граф несвязаный, то проведем доказательство отдельно для каждой компоненты. Пусть граф связаный и все циклы в нем четные. Выделим произвольную вершину v0 и найдем произвольные цепи между v0 и всеми остальными вершинами (например, самые короткие алгоритмом Дейкстра). Если одна цепь (v0,vi) нечетной длины, то и любая цепь (v0,vi) нечетная, иначе бы эти цепи образовали нечетный цикл. Аналогично, если (v0,vi) — четная, то и любая (v0,vi) — четная. Разобъем вершины на две доли: в одну войдет вершина v0 и все, находящиеся от v0 на четном расстоянии; в другую долю поместим все вершины, находящиеся от v0 на нечетном расстоянии. Если вершины u1 и u2 принадлежат одной доле, то между ними не может быть ребра, иначе это ребро вместе с цепями (v0,u1) и (v0,u2) образовали бы нечетный цикл. Ч.т.д.

Примечание: Поскольку данная теорема доказана, то можно изменить условие теоремы на равносильное, чтобы показать суть теоремы. Смысл данной теоремы сводится к тому, что для определения двудольности графа необходимо и достаточноопределить двудольность определенных классов подграфов, которые в данном случае являются циклами. То есть если в графе все циклы являются двудольными, то и сам граф тоже является двудольным. Также заметим, что циклы графа вполне однозначно могут быть раскрашены в два цвета при заданной начальной раскраске любого подграфа цикла K2 (полного графа с двумя вершинами), в случае если данный цикл двудольный. Подробнее об эквивалентности задач раскраски и дольности смотреть в Лемме №1 ниже.

5. Доказательство

Опр.: N-дольный Граф — это Граф, все вершины которого разбиты на n доль (частей или непересекающихся подмножест множества вершин V V1,V2, … ,Vn, которые удовлетворяют условиям: Vi ∩ Vj = ∅, 1 ≤ i,j ≤ n, i ≠ j и V1 ∪ V2 ∪ … ∪ Vn = V), а ребра проходят только между вершинами из разных доль.

Лемма №1: Задача раскраски графа в наименьшее количество цветов и задача определения наименьшей дольности графа являются эквивалентными. И действительно, пусть дан граф, у которого наименьшее количество доль равно n, тогда данный граф можно раскрасить в наименьшее количество цветов также равное n (то есть вершины в каждой доли можно раскрасить в один цвет, поскольку они не являются смежными). В противном случае, если раскраска в наименьшее количество цветов возможна, то есть в n-k цветов, где n,k ∈ N, тогда вершины данного графа можно разбить на доли в соответствии с цветами (вершины, раскрашенные в одинаковые цвета можно поместить в одну долю, а в разные цвета соответственно в разные доли). Поскольку вершины, раскрашенные в одинаковые цвета не смежные, то ребер между вершинами в одной доли не будет. И так как количество доль в графе уменьшилось на k, то это будет противоречить начальному условию, что данный граф емеет наименьшее количество доль равное n. В обратную сторону эквивалентность этих задач доказывается также легко, и не стоит пристального внимания.

Во многих случаях решению задачи способствует введение новых терминов. Единственное что необходимо для доказательства теоремы о n-дольном графе это соблюдать аналогию с теоремой Кенига. Как уже было описано выше, в примечании к теореме Кенига, для проверки графа на двудольность было необходимо и достаточно проверить лишь определённые классы подграфов (в теореме Кенига данные классы подграфов являются циклами), которые в случае положительного результата проверки можно однозначно раскрасить в два цвета при заданной начальной раскраске K2 подграфа. И так по аналогии с теоремой Кенига нам необходимо придумать некие классы подграфов после проверки, которых можно будет судить о n-дольности графа в целом. Также можно предположить, что данные классы пдграфов в случае положительного результата проверки на n-дольность будут однозначно раскрашивать в n-цветов и состоять из Kn. Попробуем развить данное предположение в описанной ниже терминологии.

Опр.: Если элементами множества E являются не обязательно двухэлементные, а любые подмножества множества V, то такие элементы множества E называются Гипердугами, а Граф называется Гиперграфом.

Опр.: Ребром, состоящим из Kn, просто Kn-ребром или Ребром Kn (или кликой n или гипердугой n) в Графе называется подграф Kn.

Опр.: Говорят, что в Графе вершина инциндентна ребру Kn (клика) или наоборот, если данная вершина является подграфом данного ребра Kn.

Опр.: Говорят, что в Графе ребро Kn (клика) инциндентно ребру Kn+1 (клике) или наоборот, если данная ребро Kn (клика) является подграфом данного ребра Kn+1 (клике).

Опр.: Говорят, что в Графе два Ребра Kn (клики) смежные, если у них есть общее Ребро Kn-1 (клика).

Опр.: Маршрутом Kn (Путем Kn) Графа называется чередующаяся последовательность ребер Kn и ребер Kn+1 kn,0,kn+1,1,kn,1,kn+1,2,kn,2, … ,kn+1,l,kn,l, где элементы kn,i из множества Ребер Kn Графа, а kn+1,i из множества ребер Kn+1 Графа, в которой любые два соседних элемента Инцидентны.

Опр.: Если kn,0 ∩ kn,l ≠ ∅ (пересечение множества вершин из начального ребра Маршрута Kn и конечного ребра Маршрута Kn не пустое), то Маршрут Kn Замкнут, иначе Открыт.

Опр.: Если все наборы Ребер Kn+1 различны, то Маршрут Kn называется Цепью Kn.

Опр.: Если все наборы Ребер Kn различны (а значит и наборы Ребер Kn+1), то Маршрут Kn называется Простой Цепью Kn.

Опр.: Замкнутая Цепь Kn называется Циклом Kn.

Опр.: Замкнутая Простая Цепь Kn называется Простым Циклом Kn.

Опр.: Граф без Циклов Kn называется Ацикличным относительно Kn.

Опр.: Связанный Граф без Циклов Kn называется Деревом Kn.

Опр.: Сведением (или Склеиванием) Вершин Графа называется такая операция над исходным Графом, при котором Вершины v1,v2, … ,vn удаляются из Графа вместе с инцидентными ребрами, а вместо них появляется вершина с названием <<v1,v2, … ,vn>>, которая соединяется ребрами с бывшими смежными вершинами для удаленных вершин v1,v2, … ,vn.

Рисунок №1. Альбом: Задача о 4 красках

Примечание: В приведенном примере граф состоит из открытых маршрутов K3. При этом каждые/любые два соседних (смежных) ребра K3 имеют общий подграф — ребро K2. Более того, каждая/любая вершина в ребре K3 соединена ровно с двумя вершинами из соседнего ребра K3. По аналогии можно создать подобные примеры для графов, состоящих из маршрутов K4, K5, …, Kn. Также заметим, что раз данный подграф состоит только из открытых маршрутов K3, то его можно однозначно раскрасить, используя наименьшее три цвета при заданной начальной раскраски одного из его ребер K3. И как следствие означает, что данный граф является трех-дольным, то есть разбивается наименьшее на три доли. Можно провести аналогию данного графа с деревом, также по аналогии можно дать название данному графу как дерево K3. Более подробно это будет описано при доказательстве теоремы о n-дольности графа.

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

По поводу операции склеивания вершин в графе, название склеенной вершины (то есть добавленной вместо удаленных вершин) является строкой, в которой через запятую перечисляются названия удаленных вершин, делается это только ради удобства. Поскольку данная операция будет применятся для склеивания вершин окрашенных в одинаковые цвета, чтобы не потерять информацию об изначальных вершинах их удобнее запоминать в названии новой созданной вершине в ходе операции преобравзования над графом. К тому же в определении графа нет явных указаний и ограничений на именование вершин графа. Правда, из практических соображений, принято вершины нумеровать натуральными числами. Таким образом, при выполнении операции склеивания над вершинами, раскрашенными в один цвет, с названиями <<4>>, <<7>>, <<47>> и <<13,1>> получаем новую вершину с названием <<4,7,47,13,1>>, а оперируемые вершины удаляем. Тогда новую вершину можно раскрасить в заданный цвет, не беспокоясь о том, что в последствии преобразований графа мы забудем в какой цвет нужно раскрасить вершины исходного графа.

Теорема о n-дольном графе

Формулировка: В графе все маршруты Kn сводятся к ребру Kn тогда и только тогда, когда граф является n-дольным.

Примечание: В формулировке теоремы используется термин «сводятся» для краткости. Если более подробноостановиться на этом, то под этим терминомподразумевается следующая операция над графом. Поскольку необходимо проверить граф на n-дольность, то соответственно находим в заданном графе клику kn и раскрашиваем вершины данной клики kn в n разых цветов произвольным образом. Далее поскольку данная клика kn входит в подграф маршрута Kn, то соответственно можно раскрасить и данный маршрут в n цветов единственным способом. Это можно добиться последовательным раскрашиванием вершин из данного маршрута Kn граничащих с n-1 вершиной с разными цветами в оставшийся цвет. Теперь к вершинам с одинаковыми цветами применим операцию сведения. В результате получим либо новое ребро Kn, либо новый маршрут Kn, либо петлю. В случае получения нового маршрута Kn необходимо заново произвести операцию сведения для текущего маршрута Kn. Из того, что количество вершин в исходном графе конечно, получим в результате операции сведения маршрута Kn либо ребро Kn (тогда говорят, что маршрут Kn сводится к ребру Kn), либо петлю (тогда говорят, что маршрут Kn не сводится к ребру Kn). Применив данную операцию сведения для каждого маршрута Kn в данном графе в результате получим либо одиночные ребра Kn (тогда говорят, что граф сводится к ребрам Kn или что все маршруты Kn сводятся к ребру Kn), либо петлю (тогда говорят, что граф не сводится к ребрам Kn или что есть маршруты Kn, которые не сводятся к ребру Kn).

Лемма №2. Пусть дан граф, задача заключается в том, чтобы определить на какое наименьшее количество доль его можно разбить. Соответственно, если в графе есть максимальная клика Kn, то данный граф разбить на меньшее чем n доль не получится. Поскольку по принципу Дирихле при любой разбивке на меньшее чем n доль две или более вершины максимальной клики Kn окажутся в одной доле, а так как эти вершины принадлежат подграфу Kn, то между ними должно быть ребро, чего не может быть в одной доле по определению n-дольного графа.

Примечание: Поскольку нам необходимо разбить граф на наименьшее количество доль, то применять данную теорему бессмысленно для маршрутов Kn, где n меньше чем у максимальной клике в графе. Другими словами, если дан граф, в котором заведомо известно, что максимальная клика равна 10 (K10), то бессмысленно в этом графе искать маршруты K2, K3, …, K9, поскольку данные маршруты не будут сводится к соответствующим ребрам и соответственно теорема будет давать отридцательный ответ на вопрос 2-, 3-, …, 9-дольности данного графа. Такого же результата можно добиться просто применив Лемму №2 и сразу же приступив к проверке графа на 10-дольность.

Для сравнения, если в данной формулировке теоремы о n-дольном графе заменить условие для двудольного графа, то получим: «В графе все маршруты сводятся к ребру тогда и только тогда, когда граф является двудольным». И действительно, открытые маршруты всегда будут сводится к ребру, а циклы только в случае четности количества их ребер, что в точности соответствует условию теоремы Кенига.

Доказательство теоремы о n-дольном графе

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

Необходимость. Пусть в графе все маршруты Kn сводятся к ребру Kn. Тогда сведем все эти маршруты Kn к ребрам Kn. Далее поскольку после проделанной операции над графом все маршруты Kn преобразовались в ребра Kn, то в полученном графе не найдется ни одной вершины (непринадлежащей ребру Kn) соединенной сразу с n-1 вершиной одного ребра Kn, поскольку такая вершина входила бы в маршрут Kn, который мы должны были бы свести к ребру Kn. На данном этапе мы уже свели часть вершин данного графа, осталось свести оставшиеся вершины изначально непринадлежащие маршрутам Kn.

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

Поступим следующим образом, до каждой вершины невходящей в ребра Kn достроим маршрут Kn.

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

Итак, возьмем вершину, непринадлежащую ребрам Kn, и добавим ребра из данной вершины к вершинам любого ребра Kn.

Если мы докажем, что граф с добавленными ребрами является n-дольным, то и исходный граф также будет являтся n-дольным.

Итак, после добавления новых ребер выбранная вершина будет соединена маршрутом Kn с ребром Kn, следовательно, данную вершину можно свести к данному ребру Kn. После сведения данная вершина окажется в ребре Kn, и нам необходимо проверить, не стали ли смежные вершины для сведенной нами вершиныпрепятствовать дальнейшей работе.

Рассмотрим все смежные вершины, поскольку до преобразования (сведения вершины с ребром Kn, но после сведения маршрутов Kn к ребру Kn) они могли быть смежными наибольшее только n-2 вершинами с любым из ребер Kn, так как не входили в маршрут Kn, то после преобразования вершины могли стать смежными с n-1 вершиной из ребра Kn и как следствие образовывать маршрут Kn. Тогда сделаем сведение к данному ребру Kn для данных вершин. Получим картину, соответствующую графу со сведенными маршрутами Kn. В итоге будет уменьшаться количество вершин в графе, пока не закончатся вершины, непринадлежащие ребрам Kn.

Теперь по аналогии, данные ребра Kn соединить маршрутом Kn, и свести все к одному ребру Kn.

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

Примечание: Данная теорема интересна только с точки зрения теории, и мало применима на практике. Ведь фактически для определения наименьшей дольности графа сперва необходимо найти наибольшую клику, что само по себе имеет сложность NP. Но с другой стороны лучше иметь хоть что-то, чем ничего. К тому же из данной теоремы можно сделать одно очень интересное следствие, которое будет непосредственно способствовать решению задачи о четырех красках.

Следствие №1: Граф с наибольшей кликой n имеет наименьшее либо n-доль, либо (n+1) доль.

Доказательство: Поскольку в графе есть наибольшая клика n (Kn), то граф необходимо проверить по теореме о n-дольности. В случае положительного результата граф имеет наименеьшее n-доль. В случае отридцательного результата, поскольку в графе нет маршрутов Kn+1, то соответственно до каждой вершины можно достроить маршрут Kn+1, используя алгоритм, описанный в теоремео n-дольности, который будет сводиться к ребру Kn+1. Таким образом, граф будет наименьшее (n+1)-дольным. Ч.т.д.

Примечание: На самом деле теорему Кёнига правильнее формулировать так:
В графе нет нечетных циклов тогда и только тогда, когда граф является двудольным.

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

Соответственно и формулировку теоремы о n-дольности необходимо скорректировать по аналогии следующим образом:
В графе нет маршрутов Kn, которые не сводятся к ребру Kn тогда и только тогда, когда граф является n-дольным.

Применим данную теорему о n-дольности к задаче о 4-х красках.

Задача о 4-х красках

Поскольку планарный граф, к раскраске которого сводится раскраска плоской карты не содержит клики K5, то данный граф по следствию из теоремы о n-дольнсти можно раскрасить либо в 5, либо в 4 цвета. Для того чтобы доказать возможность раскраски в четыре цвета для любого планарного графа, необходимо доказать, что все маршруты K4 планарных графов сводятся к ребру K4.

Итак, рассмотрим полный граф K4, маршрут K4 и дерево K4 на плокости.

Для начала рассмотрим единственное возможное изображение полного графа K4 на плоскости:

Рисунок №2. Альбом: Задача о 4 красках

И маршрута K4:

Рисунок №3. Альбом: Задача о 4 красках

Решение: Заметим, что в графе K4 на плоскости имеется центральная вершина, которая не может граничить ни с какой вершиной вне треугольника, иначе будет нарушение условия планарности. Тогда до всех вершин, находящихся внутри треугольника достроим маршрут K4. В итоге получим нечто наподобие Рисунка №3. Теперь начнем сводить данный маршрут K4, начиная с самой центральной вершины, поскольку данная вершина не смежна вершинам не из данного треугольника, то при сведении получение петли исключается полностью. Следовательно, в планарном графе все маршруты K4 сводятся к ребру K4, что как следствие означает 4-дольность всех планарных графов и возможность их раскраски в наименьшее количество цветов, используя максимум 4 цвета. Ч.т.д.

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

Тэги:
[задача, теорема, доказательство]

Настройка торрент-клиента rTorrent в FreeBSD

Настройка торрент-клиента rTorrent в FreeBSD

Установка

Установка из пакеджей:

# pkg_add -r rtorrent

Установка из портов:

// Узнаём где находится порт rTorrent
# whereis rtorrent

// Переходим в директорию порта rTorrent
# cd /usr/ports/net-p2p/rtorrent

// Компилируем и устанавливкаем rTorrent
# make install clean

Конфигурация

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

$ cp /usr/local/share/examples/rtorrent/rtorrent.rc /home/_имя_пользователя_/.rtorrent.rc

.rtorrent.rc

# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.

# Maximum and minimum number of peers to connect to per torrent.
#min_peers = 40
#max_peers = 100

# Same as above but for seeding completed torrents (-1 = same as downloading)
# Устанавливает значение минимального и максимального количества пиров
# в раздаваемом (сидируемом) торренте, по умолчанию -1, то есть неограничено.
#min_peers_seed = 10
#max_peers_seed = 50

# Maximum number of simultanious uploads per torrent.
#max_uploads = 15

# Global upload and download rate in KiB. "0" for unlimited.
# Определяет скорость скачивания в Кб/с. Значение "0" - отключает ограничение по скорости.
#download_rate = 0
# Определяет скорость раздачи в Кб/с. Значение "0" - отключает ограничение по скорости.
#upload_rate = 0

# Default directory to save the downloaded torrents.
# Опция указывает директорию по умолчанию для сохранения закачаных файлов.
#directory = ./
directory = /mnt/disk1/_torrent

# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
# Опция позволяет сохранять текущее состояние (прогресс) ваших загрузок.
# Рекомендуется создать директорию с названием ".session"
#session = ./session
session = /home/opencoder/.rtorrent_session

# Watch a directory for new torrents, and stop those that have been
# deleted.
# Опция наблюдает за определенными директориями на наличие новых торрент-файлов.
# Сохранение торрент-файла в эту директорию, автоматически начнет загрузку.
#schedule = watch_directory,5,5,load_start=./watch/*.torrent
#schedule = untied_directory,5,5,stop_untied=

# rTorrent каждые 20 секунд проверяет этот каталог на новые *.torrent файлы
# и если они есть то ставит их на закачку
schedule = watch_directory,20,20,"load_start=/mnt/disk1/_my/torrent/*.torrent,d.set_directory=/mnt/disk1/_torrent"
# Для другой директории аналогично
schedule = watch_directory_2,20,20,"load_start=/home/opencoder/Downloads/*.torrent,d.set_directory=/home/opencoder/Downloads"

schedule = untied_directory,2000,2000,stop_untied=
schedule = untied_directory_2,2000,2000,stop_untied=


# Close torrents when diskspace is low.
#schedule = low_diskspace,5,60,close_low_diskspace=100M

# Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
#schedule = ratio,60,60,"stop_on_ratio=200,200M,2000"

# The ip address reported to the tracker.
#ip = 127.0.0.1
#ip = rakshasa.no

# The ip address the listening socket and outgoing connections is
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no

# Port range to use for listening.
# Параметр задает порт(ы) для прослушивания.
# Рекомендуется использовать порт, который больше чем 49152.
#port_range = 6890-6999
port_range = 6890-6999

# Start opening ports at a random position within the port range.
# Включить использование случайного номера порта для прослушивания rTorrent.
# Лучше не использовать случайный порт.
#port_random = no
port_random = no

# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
# Опция выполняет проверку хэш-кода, когда загрузка завершена.
# При запуске, она проверяет на наличие ошибок завершенные (загруженные)
# файлы.
#check_hash = no
check_hash = yes

# Set whetever the client should try to connect to UDP trackers.
# Использовать UDP протокол.
# Полезно для открытых торрент-трекеров для минимизации количества запросов к трекеру.
#use_udp_trackers = yes
use_udp_trackers = yes

# Alternative calls to bind and ip that should handle dynamic ip's.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa

# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
# Параметр включает или отключает шифрование.
# Очень важно включить эту опцию, не только для Вас, но так же для Ваших коллег (пиров).
# Некоторым пользователям нужно скрыть использование своей пропускной 
# способности от их интернет-провайдера.
# allow_incoming - принимать зашифрованные входящие соединения.
# try_outgoing - шифрование исходящих соединений.
# require - запретить незашифрованные обращения.
# require_RC4 - также запретить передачу текста после первичного зашифрованного установления связи
# enable_retry - если первоначальное исходящее установление связи окажется неудачным, повторить с 
# шифрованием, если оно было отключено, и без, если шифрование использовалось.
# prefer_plaintext - использовать текст если пир предлагает выбор между открытым текстом и 
# шифрованием RC4, иначе будет использоваться RC4. 
# encryption = allow_incoming,enable_retry,prefer_plaintext
encryption = allow_incoming,try_outgoing,enable_retry

# Enable DHT support for trackerless torrents or when all trackers are down.
# May be set to "disable" (completely disable DHT), "off" (do not start DHT),
# "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
# The default is "off". For DHT to work, a session directory must be defined.
# 
# Опция включает поддержку DHT.
# Значение DHT по умолчанию "off".
# DHT распространен среди открытых трекеров и позволяет клиенту получить больше пиров.
# Для правильной работы DHT каталог сеансов "session" должен быть определен.
# dht = auto
dht = auto

# UDP port to use for DHT. 
# 
# dht_port = 6881
dht_port = 6881

# Enable peer exchange (for torrents not marked private)
#
# peer_exchange = yes
peer_exchange = yes

#
# Do not modify the following parameters unless you know what you're doing.
#

# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10

# Interval between attempts to check the hash, in milliseconds.
#hash_interval = 100

# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#hash_max_tries = 10


# Лог-файл
# log.execute = /home/opencoder/rtorrent.log
log.execute = /home/opencoder/rtorrent.log

Управление с клавиаруры


Ctrl-q

- Выход из приложения.


Ctrl-s

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


Ctrl-d

- Остановка активной загрузки или удаление остановленной загрузки.


Ctrl-k

- Остановить и закрыть файлы активной загрузки.


Ctrl-r

- Инициировать хэш-проверку торрента. Без запуска загрузки/отдачи.


Ctrl-o

- Изменить директорию на загрузку (торрент должен быть закрыт).


<- (влево)

- Возврат к предыдущему экрану.


-> (вправо)

- Переход к следующему экрану.


Backspace/Enter

- Добавляет указанный *.torrent.


a | s | d

- Регулировка увеличения глобальной скорости отдачи на 1|5|50 КБ/с


A | S | D

- Регулировка увеличения глобальной скорости загрузки на 1|5|50 КБ/с


z | x | c

- Регулировка уменьшения глобальной скорости отдачи на 1|5|50 КБ/с


Z | X | C

- Регулировка уменьшения глобальной скорости загрузки на 1|5|50 КБ/с

Совет

Удобнее всего использовать rTorrent с консольным мультиплексором tmux.

Источник:
ВикиУчебник [http://ru.wikibooks.org/wiki/RTorrent]
ArchLinux wiki[https://wiki.archlinux.org/index.php/RTorrent_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)]

Тэги:
[FreeBSD, BSD, rTorrent, torrent, торрент]

Работа с консольным мультиплексором tmux в FreeBSD

Работа с консольным мультиплексором tmux в FreeBSD

Описание и установка

tmux (the terminal multiplexer) — эта утилита предоставляет доступ сразу к нескольким терминалам в рамках одного окна (терминальный оконный менеджер или консольный мультиплексор). Изначально задумывалась как аналог/альтернатива утилиты screen под более свободной BSD-лицензией.

Установка из пакеджей:

# pkg_add -r tmux

Установка из портов:

// узнаем где находится порт tmux
$ whereis tmux
tmux: /usr/ports/sysutils/tmux

// переходим в директорию '/usr/ports/sysutils/tmux'
$ cd /usr/ports/sysutils/tmux

// компилируем и устанавливаем
# make install clean

Команды управления tmux

Работа с сессиями(session):


Ctrl-b d

- Отключение от сессии, перевести tmux в фоновый режим.

Чтобы вернуть сессию после ее ‘Ctrl-b d’ отключения набираем в терминале:

$ tmux attach


Ctrl-b ?

- Просмотр всех сочетаний клавиш и справка по командам.


Ctrl-b L

- Перейти на предыдуще-открытую сессию.


Ctrl-b s

- Выбрать сессию.


Ctrl-b D

- Выбрать сессию(client) от которой отключиться (detach).


Ctrl-b f

- Найти окно.


Ctrl-b $

- Переименовать текущую сессию.


Ctrl-b :

- Командная строка.


Ctrl-b t

- Часики :).


Ctrl-b ~

- Показать сообщения от tmux.


Ctrl-b r

- Обновить клиент.


Ctrl-d

- Закрытие текущей сессии.

Список сессий:

$ tmux ls

Подключение к конкретной сессии:

$ tmux attach -t 1

Работа с окнами(window):


Ctrl-b c

- Открытие нового окна.


Ctrl-b l

- Вернутся на предыдущее выбранное окно.


Ctrl-b n

- Переместится на следующее окно.


Ctrl-b p

- Переместится на предыдущее окно.


Ctrl-b w

- Выбрать окно из списка.


Ctrl-b ‘

- Задать индекс окна на которой перейти.


Ctrl-b 0



Ctrl-b 9

- Выбрать окно под соответствующим номером.


Ctrl-b .

- Изменить номер окна.


Ctrl-b ,

- Переименовать текущее окно.


Ctrl-b &

- Закрытие окна (или просто набрать ‘exit’ в терминале).


Ctrl-b i

- Показать информацию о текущем окне.

Работа с фреймами, панелями (pane):


Ctrl-b %

- Разделить окно на панели по вертикали.


Ctrl-b «

- Разделить окно на панели по горизонтали.


Ctrl-b <пробел>

- Листать «слои».


Ctrl-b ;

- Перейти на предыдуще-активную панель.


Ctrl-b <стрелка_вверх>
,

Ctrl-b <стрелка_вниз>
,

Ctrl-b <стрелка_влево>
,

Ctrl-b <стрелка_вправо>

- Перемещение между созданными фреймами.


Ctrl-b Ctrl-<стрелка_вверх>
,

Ctrl-b Ctrl-<стрелка_вниз>
,

Ctrl-b Ctrl-<стрелка_влево>
,

Ctrl-b Ctrl-<стрелка_вправо>

- Изменить размеры фрейма (одно нажатие — 1 шаг).


Ctrl-b Meta-<стрелка_вверх>
,

Ctrl-b Meta-<стрелка_вниз>
,

Ctrl-b Meta-<стрелка_влево>
,

Ctrl-b Meta-<стрелка_вправо>

- Изменить размеры фрейма (одно нажатие — 5 шагов).

Комментарии: // Meta = Alt = Esc


Ctrl-b Ctrl-o

- Поменять содержимое в текущих панелях по кругу.


Ctrl-b {

- Переместить фрейм вверх, вправо.


Ctrl-b }

- Переместить фрейм вниз, влево.


Ctrl-b Meta-o

- Вернуть предыдущее расположение панелей.


Ctrl-b Meta-1



Ctrl-b Meta-5

- Выстроить панели в один из указанных расположений: even-horizontal, even-vertical, main-horizontal, main-vertical, или tiled.


Ctrl-b x

- Убрать панель (или можно просто набрать ‘exit’).


Ctrl-b o

- Переместится на следующую панель.


Ctrl-b {

- Поменять панели справа-налево.


Ctrl-b }

- Поменять панели слева-направо.


Ctrl-b q

- Покажет номера панелей.

Буфера (buffer):


Ctrl-b [

- Перейти в режим копирования или перемещение по истории фрейма.


Ctrl-b PageUp

- Перейти в режим копирования и подняться на 1 PageUp страницу.


Ctrl-b q

- Выход из режима копирования, скроллинга.


Ctrl-b ]

- Вставить содержимое буфера обмена.


Ctrl-b #

- Список всех буферов обмена.

Для копирования:

Ctrl-[



<стрелка_вверх, стрелка_вниз, стрелка_влево, стрелка_вправо>

- перемещаемся к нужному фрагменту,


<пробел>

- для пометки начала копирования,


<стрелка_вправо>

- для выделения текста для копирования,


<Enter>

- для пометки конца копирования.

Для вставки:

Ctrl-=

- выбираем из буфера.

Тэги: [BSD, FreeBSD, OpenBSD, tmux, терминал, консоль]

Работа с продвинутым текстовым редактором nvi [аналог vim под BSD-лицензией]

Работа с продвинутым текстовым редактором nvi [аналог vim под BSD-лицензией]

nvi (vim) — это открытый и свободный текстовый редактор с возможностями превосходящими многие другие редакторы. Правда, есть один минус — интерфейс редактора не интуитивен, поэтому для работы с ним нужно некоторое время потратить на изучение команд, горячих клавиш и т.п. Основным же плюсом редактирования в nvi (vim) является высокая эффективность работы с текстом.

Режимы работы редактора nvi (vim)

nvi (vim) имеет всего 4 режима работы:

1. «Обычный/командный режим» — перемещение по файлу, стирание текста и другие редактирующие функции.
Переход в него из любого другого режима:

ESC
,
иногда 2 раза;

Ctrl-[

2. «Режим ввода» — ввод текста. Заметьте, что стирание и ввод текста происходит в двух разных режимах.
Переход в него из «Обычного/командного режима»:

i
,

Insert

3. «Режим последней строки» — Команды (операции с файлом, поиск и замена, настройка редактора…).
Переход в него из «Обычного/командного режима»:

:

3.1. «Режим поиска» — ввод поискового запроса.
Переход в него из «Обычного/командного режима»:

/

4. «Визуальный режим» — режим выделения текста.
Переход в него из «Обычного/командного режима»:

v

Перемещение по файлу

Для перехода в «Обычный режим» из любого другого режима нужно нажать:


ESC

- иногда 2 раза.

Перемещение по стрелкам:

<стрелка_вверх>

или

k
,

<стрелка_вниз>

или

j
,

<стрелка_влево>

или

h
,

<стрелка_вправо>

или

l


0

- ("ноль")В начало текущей строки.


^

- В начало текущей строки (к первому непробельному символу).


$

- В конец текущей строки.


w

- На слово вправо.


b

- На слово влево.


W

- До пробела вправо.


B

- До пробела влево.


}

- Абзац вниз.


{

- Абзац вверх.


Ctrl-f

- На страницу (экран) вниз.


Ctrl-b

- На страницу (экран) верх.


gg

- Перейти в начало файла.


G

- Перейти в конец файла.


fx

- Передвинуть курсор вперед (forward) к следующему вхождению символа 'x' в текущей строке.


;

- Повторить последнюю команду f, которю вы ввели


tx

- Тоже что и 'fx', но при этом курсор устаналивается прямо перед символом, а не на сам символ.


Fx

- Передвинуть курсор назад (backward) к спредыдущему вхождению символа 'x' в текущей строке.


/<текст><Enter>

- Перейти к <текст>.


?<текст><Enter>

- Перейти к <текст>, но искать назад.


n

- Повторить поиск.


N

- Повторить поиск назад.


[[

- В начало функции.


"

- К месту выполнения команды '[['.

Редактирование файла

Для перехода в режим редактирования («Режим ввода») нужно нажать на клавишу:

i
.

Переход обратно в «Обычный режим» нужно нажать:

ESC

- иногда 2 раза.


i

- Перейти в режим ввода с текущей позиции.


I

- Переместиться в начало строки и перейти в режим ввода.


a

- Перейти в режим ввода после курсора.


А

- Переместиться в конец строки и перейти в режим ввода.


o

- Перейти в режим ввода с новой строки под курсором.


O

- Перейти в режим ввода с новой строки над курсором.


R

- Перейти в режим ввода с забиванием текста.


r

- Заменить один символ


x

- Удалить символ под курсором.


X

- Удалить символ влево (удалить символ перед курсором).


d

- Удаляет символы с текущего положения курсора до положения после ввода команды перемещения.

Пример:
dw - удаляет символы с текущего до конца слова;
diw - удаляет слово под курсором.


с

- Команда аналогичная 'd', но после удаление переходит в режим ввода. Очень удобная альтернатива команде 'R'.


dd

- Удалить текущую строку (вырезать).


d<число>d

- Стирание числа строк начиная с текущей.


yy

- Копирование текущей строки в неименованный буфер.


y<число>y

- Копирование числа строк начиная с текущей в неименованный буфер.


p

- Вставка содержимого неименнованного буфера под курсором.


P

- Вставка содержимого неименнованного буфера перед курсором.


J

- Слияние текущей строки со следующей


u

- Отмена последней команды.


U

- Отмена всех последних изменений в строке.

Повтор последней команды:

Ctrl-r;

или

:redo

Запись/выход

Для перехода в «Командный режим» необходимо, находясь в «Обычном режиме» ввести символ:

:
.

Для выхода из «Командного режима» в «Обычном режиме» необходимо нажать клавишу:

Esc
.


ZQ
,

:q!

- Выйти без сохранения.


ZZ
,

:wq
,

:x

- Записать файл и выйти (если файл не изменяли, то записываться он не будет).


:w<Enter>

- Записать файл.


:sav <имя_файла><Enter>
,

:w <имя_файла><Enter>

- Сохранить как...


:q<Enter>

- Выйти из редактора (если не редактировали файл).


:q!<Enter>

- Выйти из файла, не сохраняя изменения.


:qa!<Enter>

- Выйти из всех файла, не сохраняя изменения.

Дополнительные возможности


^G

- Показать информацию о файле.


:<number>
,

<number>G

- Перейти на строку с номером <number>.

Отобразить слева нумерацию строк:

:set number

Спрятать нумерацию строк:

:set nonumber

Переносить длинные строки:

:set wrap

Не переносить длинные строки:

:set nowrap

Включить/выключить подсветку синтаксиса:

:sy[ntax] on/off

Задать цветовую тему:

:colorscheme <name>

//Комментарии: <name> - имя темы, TAB работает как авто-дополнение.

Список возможной помощи (:viusage, :exusage):

:h или :help

Привести концы строк в файле к виду dos или unix соответственно:

:set fileformat=dos
:set fileformat=unix

Задать размер табуляции в 4 пробела:

:set tabstop=4
:set expandtab

Конвертация кодировки файла:

:set fenc=cp1251<Enter>
:set fenc=koi8-r<Enter>
:set fenc=ibm866<Enter>
:set fenc=utf-8<Enter>

Смена кодировки (возможна до внесения изменений в редактируемый файл. т.е. сразу после открытия):

:e ++enc=cp1251<Enter&gt
:e ++enc=koi8-r<Enter&gt
:e ++enc=ibm866<Enter&gt
:e ++enc=utf-8<Enter&gt

Визуальный режим

Режим предназначен для выделения блока текста и дальнейшей работы с ним.

  1. Пометка начала блока с помощью 'v', 'V' или 'Ctrl-V'. Блок помечается с того символа на котором находится курсор (по умолчанию).
  2. Перемещение курсора в конец необходимого блока. Последний символ также будет включен в выделенный блок.
  3. Вызов необходимой команды.
  • 'v' - команда предназначена для выделения текста посимвольно. Символы до и после курсора в строке не будут входить в выделение. Необходима в первую очередь для копирования участков текста в строке.
  • 'V' — для выделения текста построчно.
  • 'Ctrl-V' — для выделения прямоугольного участка текста. Удобна в случае редактирования структурированного текста.

Конвертация кодировки файла

  • Текущая используемая в Vim кодировка задается переменной encoding (enc).
  • Кодировка отображения задается переменной termencoding (tenc).
  • Кодировка сохранения файла задается переменной fileencoding (fenc).

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

Задаем текущую кодировку cp1251:

:e ++enc=cp1251

Текст конвертируется и nvi (vim) отобразит изменения, если они произошли. Исходный файл не изменился.

Задаем кодировку сохранения файла utf-8:

:set fileencoding=utf-8

Задаем формат переводов строки (dos, unix или mac):

:set fileformat=unix

Сохраняем файл и выходим:

:wq

Тэги: [BSD, FreeBSD, OpenBSD, nvi, vim, редактор, текст, текстовый редактор, программа]

Конвертация аудио файлов в командной строке в FreeBSD

Конвертация аудио файлов в командной строке в FreeBSD

Конвертирование в открытый формат Ogg Vorbis [сжатие с потерями качества звука]

Для этого нам понадобится утилита vorbis-tools.

vorbis-tools — этот пакет включает инструменты для работы с Ogg Vorbis:

  • oggenc — энкодер,
  • ogg123 — плейер командной строки для Ogg Vorbis и FLAC,
  • ogginfo — показывает информацию о файлах Ogg,
  • oggdec — декодер,
  • vcut — утилита для разрезания файлов Ogg,
  • vorbiscomment — редактор комментариев для Ogg.

Установка vorbis-tools из пакеджа:

# pkg_add -r vorbis-tools

Установка vorbis-tools из портов:

# whereis vorbis-tools
// Скажет где находится порт
vorbis-tools: /usr/ports/audio/vorbis-tools
# cd /usr/ports/audio/vorbis-tools
# make install clean

Конвертирование FLAC в Ogg Vorbis:

$ oggenc -q 8 *.flac
$ oggenc -q 8 input.flac -o output.ogg

Конвертирование в открытый формат FLAC (Free Lossless Audio Codec) [сжатие без потерь качества звука]

Для этого нам понадобится утилита flac, shnconv и mac.

flac — этот пакет включает инструменты для работы с FLAC:

  • flac — энкодер/декодер,
  • metaflac — для работы с метаданными FLAC.

shntool — это утилита для обработки файлов WAV:

  • shnconv — конвертор из wav-файлов,
  • shnsplit — разрезание wav-файлов.

mac -декодер mac для формата APE.

Установка flac из пакеджа:

# pkg_add -r flac

Установка flac из портов:

# whereis flac
// Скажет где находится порт
flac: /usr/ports/audio/flac
# cd /usr/ports/audio/flac
# make install clean

Установка shntool из пакеджа:

# pkg_add -r shntool

Установка shntool из портов:

# whereis shntool
// Скажет где находится порт
shntool: /usr/ports/audio/shntool
# cd /usr/ports/audio/shntool
# make install clean

Установка mac из пакеджа:

# pkg_add -r mac

Установка mac из портов:

# whereis mac
// Скажет где находится порт
mac: /usr/ports/audio/mac
# cd /usr/ports/audio/mac
# make install clean

Конвертирование APE в FLAC:

$ shnconv -o flac *.ape

Разрезание FLAC с использованием файлов CUE

Для этого нам понадобится утилита cuebreakpoints.

cuetools — инструменты, используемые для работы с файлами CUE:

  • cuebreakpoints — утилита для разрезания lossless аудио файлов с использованием информации в *.cue-файле.

Установка cuetools из пакеджа:

# pkg_add -r cuetools

Установка cuetools из портов:

# whereis cuetools
// Скажет где находится порт
cuetools: /usr/ports/audio/cuetools
# cd /usr/ports/audio/cuetools
# make install clean

Разрезание FLAC с использованием файлов CUE

cuebreakpoints cue_file.cue | shnsplit -t "%n - %t" audio_file.flac

или

shnsplit -o flac -f cue_file.cue -t "%n - %t" audio_file.flac

Тэги: [BSD, FreeBSD, flac, ogg Vorbis, ogg, аудио, конвертация]

.xinitrc

.xinitrc

# Установка UTF-8 локали
export LANG='ru_RU.UTF-8'
export LC_ALL='ru_RU.UTF-8'
export PATH="$PATH:/usr/local/kde4/bin"

# Установка разрешения экрана и частоты
xrandr -s 1280x1024 -r 75 &
# отключаем скринсейвер и dpms (энергосберегающий режим)
xset s off -dpms &

# Установка переключения раскладки клавиатуры
setxkbmap -layout 'us,ru' -option 'grp:caps_toggle,grp_led:caps' &

# Установка обоев рабочего стола
feh --bg-scale /mnt/disk0/wallpapers/freebsd.jpg &

# Запуск WM wmii
exec wmii

Тэги:
[xinitrc, FreeBSD, BSD]