summaryrefslogtreecommitdiffhomepage
path: root/ru-ru
diff options
context:
space:
mode:
authorBoris Verkhovskiy <boris.verk@gmail.com>2024-04-03 04:31:13 -0700
committerGitHub <noreply@github.com>2024-04-03 04:31:13 -0700
commitfbf132752b743d0f43c3395da0699bee53da22df (patch)
tree56da43c86e1aebd24e3913b405e21d6f2812e9a3 /ru-ru
parent247dc6e86c1421fa031e4b61c42c05ca6e09bfb0 (diff)
parentc166f2acb295627c5ae305a6dd517a27ca8fece6 (diff)
Merge branch 'master' into patch-1
Diffstat (limited to 'ru-ru')
-rw-r--r--ru-ru/asymptotic-notation-ru.html.markdown6
-rw-r--r--ru-ru/binary-search-ru.html.markdown2
-rw-r--r--ru-ru/c++-ru.html.markdown4
-rw-r--r--ru-ru/c-ru.html.markdown4
-rw-r--r--ru-ru/clojure-ru.html.markdown2
-rw-r--r--ru-ru/common-lisp-ru.html.markdown7
-rw-r--r--ru-ru/css-ru.html.markdown6
-rw-r--r--ru-ru/elixir-ru.html.markdown2
-rw-r--r--ru-ru/forth-ru.html.markdown4
-rw-r--r--ru-ru/go-ru.html.markdown10
-rw-r--r--ru-ru/haml-ru.html.markdown10
-rw-r--r--ru-ru/haskell-ru.html.markdown6
-rw-r--r--ru-ru/html-ru.html.markdown58
-rw-r--r--ru-ru/javascript-ru.html.markdown2
-rw-r--r--ru-ru/learnvisualbasic-ru.html.markdown2
-rw-r--r--ru-ru/linker-ru.html.markdown24
-rw-r--r--ru-ru/markdown-ru.html.markdown41
-rw-r--r--ru-ru/nim-ru.html.markdown2
-rw-r--r--ru-ru/php-ru.html.markdown22
-rw-r--r--ru-ru/pyqt-ru.html.markdown16
-rw-r--r--ru-ru/python-ru.html.markdown1
-rw-r--r--ru-ru/qt-ru.html.markdown4
-rw-r--r--ru-ru/rust-ru.html.markdown2
-rw-r--r--ru-ru/sql-ru.html.markdown4
-rw-r--r--ru-ru/tmux-ru.html.markdown2
-rw-r--r--ru-ru/typescript-ru.html.markdown4
-rw-r--r--ru-ru/vim-ru.html.markdown6
-rw-r--r--ru-ru/xml-ru.html.markdown2
-rw-r--r--ru-ru/yaml-ru.html.markdown10
-rw-r--r--ru-ru/zfs-ru.html.markdown406
30 files changed, 543 insertions, 128 deletions
diff --git a/ru-ru/asymptotic-notation-ru.html.markdown b/ru-ru/asymptotic-notation-ru.html.markdown
index 7fd02c47..cb276ec1 100644
--- a/ru-ru/asymptotic-notation-ru.html.markdown
+++ b/ru-ru/asymptotic-notation-ru.html.markdown
@@ -48,7 +48,7 @@ f(n) — время выполнения. Тогда для данного ал
С помощью О-символики можно оценить функцию или алгоритм
несколькими различными способами. Например, можно оценить алгоритм исходя
из нижней оценки, верхней оценки, тождественной оценки. Чаще всего встречается
-анализ на основе верхней оценки. Как правило не используется нижняя оценка,
+анализ на основе верхней оценки. Как правило, не используется нижняя оценка,
потому что она не подходит под планируемые условия. Отличный пример — алгоритмы
сортировки, особенно добавление элементов в древовидную структуру. Нижняя оценка
большинства таких алгоритмов может быть дана как одна операция. В то время как в
@@ -155,8 +155,8 @@ c (c > 0) и n<sub>0</sub> (n<sub>0</sub> > 0), такие, что `f(n)` >= `c
### Примечание
-Асимптотические оценки, сделаные при помощи О Большого и Омега Большого, могут
-как являться, так и не являться точными. Для того, чтобы обозначить, что границы не
+Асимптотические оценки, сделанные при помощи О Большого и Омега Большого, могут
+как являться, так и не являться точными. Для того чтобы обозначить, что границы не
являются асимптотически точными, используются записи О Малое и Омега Малое.
### О Малое
diff --git a/ru-ru/binary-search-ru.html.markdown b/ru-ru/binary-search-ru.html.markdown
index 9ed62cb8..ab1a1585 100644
--- a/ru-ru/binary-search-ru.html.markdown
+++ b/ru-ru/binary-search-ru.html.markdown
@@ -55,7 +55,7 @@ def search(arr, x):
### На заметку
-Существует и другая форма двоичного поиска, которая можеть быть полезна.
+Существует и другая форма двоичного поиска, которая может быть полезна.
## На почитать
diff --git a/ru-ru/c++-ru.html.markdown b/ru-ru/c++-ru.html.markdown
index 3acfafa3..43e9e6a3 100644
--- a/ru-ru/c++-ru.html.markdown
+++ b/ru-ru/c++-ru.html.markdown
@@ -1,5 +1,5 @@
---
-language: c++
+language: C++
filename: learncpp-ru.cpp
contributors:
- ["Steven Basart", "http://github.com/xksteven"]
@@ -17,7 +17,7 @@ C++ - компилируемый, статически типизированн
- "лучшая замена C"
- язык с поддержкой абстракции данных
-- язык с поддержкой объектно-ориентированого программирования
+- язык с поддержкой объектно-ориентированного программирования
- язык с поддержкой обобщенного программирования
Хотя его синтаксис может показаться более трудным или сложным для понимания, чем в более современных языках,
diff --git a/ru-ru/c-ru.html.markdown b/ru-ru/c-ru.html.markdown
index cc68d620..a146a76b 100644
--- a/ru-ru/c-ru.html.markdown
+++ b/ru-ru/c-ru.html.markdown
@@ -1,5 +1,5 @@
---
-language: c
+language: C
filename: learnc-ru.c
contributors:
- ["Adam Bard", "http://adambard.com/"]
@@ -476,7 +476,7 @@ void str_reverse_through_pointer(char *str_in) {
Если у вас появился вопрос, почитайте [compl.lang.c Frequently Asked Questions](http://c-faq.com).
Очень важно использовать правильные отступы и ставить пробелы в нужных местах.
-Читаемый код лучше чем красивый или быстрый код.
+Читаемый код лучше, чем красивый или быстрый код.
Чтобы научиться писать хороший код, почитайте [Linux kernel coding style](https://www.kernel.org/doc/Documentation/CodingStyle).
Также не забывайте, что [Google](http://google.com) и [Яндекс](http://yandex.ru) – ваши хорошие друзья.
diff --git a/ru-ru/clojure-ru.html.markdown b/ru-ru/clojure-ru.html.markdown
index 19233d23..66986fa0 100644
--- a/ru-ru/clojure-ru.html.markdown
+++ b/ru-ru/clojure-ru.html.markdown
@@ -421,7 +421,7 @@ Clojuredocs.org — сайт документации языка с пример
[http://clojuredocs.org/quickref/Clojure%20Core](http://clojuredocs.org/quickref/Clojure%20Core)
4Clojure — отличный способ закрепить навыки программирования на clojure, решая задачи вместе с коллегами со всего мира:
-[http://www.4clojure.com/](http://www.4clojure.com/)
+[https://4clojure.oxal.org/](https://4clojure.oxal.org/)
Clojure-doc.org (да, именно) неплохой перечень статей для начинающих:
[http://clojure-doc.org/](http://clojure-doc.org/)
diff --git a/ru-ru/common-lisp-ru.html.markdown b/ru-ru/common-lisp-ru.html.markdown
index d5f9bf0e..0490ee30 100644
--- a/ru-ru/common-lisp-ru.html.markdown
+++ b/ru-ru/common-lisp-ru.html.markdown
@@ -14,7 +14,8 @@ Common Lisp - мультипарадигменный язык программи
спектра задач.
Его частенько называют программируемым языком программирования.
-Идеальная отправная точка - книга [Common Lisp на практике (перевод)](http://lisper.ru/pcl/).
+Идеальная отправная точка - книга
+[Common Lisp на практике (перевод)](https://github.com/pcl-ru/pcl-ru/releases/download/v1.1/pcl-ru.pdf).
Ещё одна популярная книга [Land of Lisp](http://landoflisp.com/).
И одна из последних книг [Common Lisp Recipes](http://weitz.de/cl-recipes/) вобрала в себя лучшие
архитектурные решения на основе опыта коммерческой работки автора.
@@ -674,7 +675,7 @@ nil ; ложь; а ещё пустой список () тож
## Для чтения
На русском
-- [Practical Common Lisp](http://www.gigamonkeys.com/book/)
+- [Practical Common Lisp](https://github.com/pcl-ru/pcl-ru/releases/download/v1.1/pcl-ru.pdf)
На английском
- [Practical Common Lisp](http://www.gigamonkeys.com/book/)
@@ -685,7 +686,7 @@ nil ; ложь; а ещё пустой список () тож
На русском
-- [Lisper.ru](http://lisper.ru/)
+- [Сообщество в Telegram](https://t.me/lisp_forever)
На английском
diff --git a/ru-ru/css-ru.html.markdown b/ru-ru/css-ru.html.markdown
index e0e5e30b..b543bfeb 100644
--- a/ru-ru/css-ru.html.markdown
+++ b/ru-ru/css-ru.html.markdown
@@ -20,12 +20,12 @@ HTML элементы и определять их внешний вид.
**ВАЖНО:** Так как результатом применения CSS является изменение внешнего вида
элементов, постарайтесь использовать CSS-песочницы при изучении языка.
-Например [dabblet](http://dabblet.com/).
+Например, [dabblet](http://dabblet.com/).
В данной статье рассматриваются в первую очередь синтаксис и общие рекомендации.
```css
-/* Для комментариев используется слеш-астериск, как на этой строчке.
+/* Для комментариев используется слэш-астериск, как на этой строчке.
В CSS нет однострочных комментариев; все комментарии записываются таким способом */
/* ####################
@@ -104,7 +104,7 @@ div.some-parent.class-name {}
.i-am-any-before ~ .this-element {}
-/* Существуют псевдо-классы, позволяющие изменять внешний вид элемента
+/* Существуют псевдоклассы, позволяющие изменять внешний вид элемента
в зависимости от событий, произошедших с элементом */
/* например, когда курсор наведен на элемент */
diff --git a/ru-ru/elixir-ru.html.markdown b/ru-ru/elixir-ru.html.markdown
index c8c2c060..8dd48ba7 100644
--- a/ru-ru/elixir-ru.html.markdown
+++ b/ru-ru/elixir-ru.html.markdown
@@ -1,5 +1,5 @@
---
-language: elixir
+language: Elixir
contributors:
- ["Joao Marques", "http://github.com/mrshankly"]
- ["Dzianis Dashkevich", "https://github.com/dskecse"]
diff --git a/ru-ru/forth-ru.html.markdown b/ru-ru/forth-ru.html.markdown
index 2fc4ad7c..96fa0941 100644
--- a/ru-ru/forth-ru.html.markdown
+++ b/ru-ru/forth-ru.html.markdown
@@ -10,10 +10,10 @@ lang: ru-ru
Форт создан Чарлзом Муром в 70-е годы. Это императивный, стековый язык программирования и среда исполнения программ. Использовался в таких проектах как Open Firmware. Продолжает применятся в проектах. Применяется в НАСА.
-Внимание: эта материал использует реализацию Форта - Gforth, но большая часть написанного будет работать в других средах.
+Внимание: этот материал использует реализацию Форта - Gforth, но большая часть написанного будет работать в других средах.
-```
+```forth
\ Это комментарий
( Это тоже комментарий, но используется для предоределённых слов )
diff --git a/ru-ru/go-ru.html.markdown b/ru-ru/go-ru.html.markdown
index 37592258..22249a6e 100644
--- a/ru-ru/go-ru.html.markdown
+++ b/ru-ru/go-ru.html.markdown
@@ -29,7 +29,7 @@ Go - это язык общего назначения, целью которо
комментарий */
// Ключевое слово package присутствует в начале каждого файла.
-// Main это специальное имя, обозначающее исполняемый файл, нежели библиотеку.
+// main это специальное имя, обозначающее исполняемый файл, нежели библиотеку.
package main
// Import предназначен для указания зависимостей этого файла.
@@ -82,7 +82,7 @@ func learnTypes() {
// Символ не из ASCII. Исходный код Go в кодировке UTF-8.
g := 'Σ' // тип rune, это алиас для типа int32, содержит символ юникода.
- f := 3.14195 // float64, 64-х битное число с плавающей точкой (IEEE-754).
+ f := 3.14159 // float64, 64-х битное число с плавающей точкой (IEEE-754).
c := 3 + 4i // complex128, внутри себя содержит два float64.
// Синтаксис var с инициализациями.
@@ -334,12 +334,12 @@ func requestServer() {
## Что дальше
-Основа всех основ в Go это [официальный веб сайт](http://golang.org/).
+Основа всех основ в Go это [официальный веб сайт](https://go.dev/).
Там можно пройти туториал, поиграться с интерактивной средой Go и почитать
объёмную документацию.
Для живого ознакомления рекомендуется почитать исходные коды [стандартной
-библиотеки Go](http://golang.org/src/pkg/). Отлично задокументированная, она
+библиотеки Go](https://go.dev/src/). Отлично задокументированная, она
является лучшим источником для чтения и понимания Go, его стиля и идиом. Либо
-можно, кликнув на имени функции в [документации](http://golang.org/pkg/),
+можно, кликнув на имени функции в [документации](https://go.dev/pkg/),
перейти к ее исходным кодам.
diff --git a/ru-ru/haml-ru.html.markdown b/ru-ru/haml-ru.html.markdown
index c2f8852e..ed823496 100644
--- a/ru-ru/haml-ru.html.markdown
+++ b/ru-ru/haml-ru.html.markdown
@@ -39,7 +39,7 @@ $ haml input_file.haml output_file.html
/ Комментарии
/ -------------------------------------------
-/ Комментари начинается с символа косой черты.
+/ Комментарии начинается с символа косой черты.
/
Для написания многострочного комментария расположите ваш комментарий
@@ -94,7 +94,7 @@ $ haml input_file.haml output_file.html
/ выведет 'Да &amp; да'
/
- Чтобы выполнять Ruby-код без экранрования, можно использовать
+ Чтобы выполнять Ruby-код без экранирования, можно использовать
"восклицательный знак" и "равно" (!=)
%p
@@ -196,13 +196,13 @@ $ haml input_file.haml output_file.html
/ -------------------------------------------
/
- Фильтры передают связанный блок текста в соотвествующую
+ Фильтры передают связанный блок текста в соответствующую
фильтрующую программу и возвращают результат в Haml
Фильтр обозначается двоеточием и названием фильтра:
/ Markdown filter
:markdown
- # Заголовк
+ # Заголовок
Текст **внутри** *блока*
@@ -221,7 +221,7 @@ $ haml input_file.haml output_file.html
</script>
/
- Существует множество типов фильров (:markdown, :javascript, :coffee,
+ Существует множество типов фильтров (:markdown, :javascript, :coffee,
:css, :ruby и так далее). Вы можете определить собственный фильтр c
помощью Haml::Filters.
diff --git a/ru-ru/haskell-ru.html.markdown b/ru-ru/haskell-ru.html.markdown
index b1b8eb79..aada30c1 100644
--- a/ru-ru/haskell-ru.html.markdown
+++ b/ru-ru/haskell-ru.html.markdown
@@ -8,7 +8,7 @@ translators:
lang: ru-ru
---
-Haskell разрабатывался, как чистый функциональный язык программирования, применимый на практике. Язык известен благодаря своей системе типов, и "знаменит" благодаря монадам. [Меня][autor] же Haskell заставляет возвращаться к себе снова и снова именно своей элегантностью и [я][autor] получаю истинное удовольствие, программируя на Haskell.
+Haskell разрабатывался, как чистый функциональный язык программирования, применимый на практике. Язык известен благодаря своей системе типов, и "знаменит" благодаря монадам. [Меня][author] же Haskell заставляет возвращаться к себе снова и снова именно своей элегантностью и [я][author] получаю истинное удовольствие, программируя на Haskell.
```haskell
-- Однострочные комментарии начинаются с двух дефисов
@@ -172,7 +172,7 @@ fib x
первое определение, к образцу которого
"подойдет" набор аргументов -}
fib 1 = 1
-fib 2 = 2
+fib 2 = 1
fib x = fib (x - 1) + fib (x - 2)
-- Pattern matching для кортежей выглядит так
@@ -544,4 +544,4 @@ Haskell прост в установке, забирайте [здесь](http:/
[Learn you a Haskell](http://learnyouahaskell.com/) и
[Real World Haskell](http://book.realworldhaskell.org/).
-[autor]: http://adit.io имеется в виду автор оригинального текста Adit Bhargava *(примечание переводчика)*
+[author]: http://adit.io имеется в виду автор оригинального текста Adit Bhargava *(примечание переводчика)*
diff --git a/ru-ru/html-ru.html.markdown b/ru-ru/html-ru.html.markdown
index 120981b9..e18fb8a0 100644
--- a/ru-ru/html-ru.html.markdown
+++ b/ru-ru/html-ru.html.markdown
@@ -8,28 +8,28 @@ translators:
lang: ru-ru
---
-HTML расшифровывается как Hypertext Markup Language(гипертекстовый язык разметки).
-Это язык используют для написания страниц для World Wide Web(всемирной паутины).
-Это язык разметки позволяет писать веб-страниц с помощью кода, чтобы определять,
-как должны быть отображены текст и данные.
+HTML расшифровывается как Hypertext Markup Language (гипертекстовый язык разметки).
+Этот язык используют для написания страниц для World Wide Web (всемирной паутины).
+Этот язык разметки позволяет описать веб-страницу с помощью кода, чтобы определить,
+как на ней должны быть отображены текст и данные.
На самом деле, HTML файлы представляют собой простые текстовые файлы.
-Что такое разметка? Это способ организации данных страницы,
-путем открытия и закрытия тегов(помещая данные внутрь этих тегов).
-Эта разметка служит, чтобы придать значение тексту, который он окружает.
+Что такое разметка? Это способ организации данных страницы
+путем открытия и закрытия тегов и помещения данных внутрь этих тегов.
+Эта разметка служит, чтобы придать значение тексту, который она окружает.
Как и в других языках программирования, HTML имеет много версий. Здесь мы будем говорить о HTML5.
**Примечание:** Вы можете тестировать различные теги и элементы по мере продвижения
-через учебник на сайте, как [codepen](http://codepen.io/pen/) для того, чтобы увидеть
+через учебник на сайте [codepen](http://codepen.io/pen/) для того, чтобы увидеть
их влияние, понять, как они работают и ознакомиться с языком.
-В данной статье рассматривается в основном HTML синтаксис и некоторые полезные советы.
+В данной статье рассматривается в основном HTML-синтаксис и некоторые полезные советы.
```html
-<!-- Комментарии заключаются как эта лини\! -->
+<!-- Это комментарий. -->
<!-- #################### Теги #################### -->
-<!-- Ниже приведен пример HTML-файл, который мы будем анализировать. -->
+<!-- Ниже приведен пример HTML-файла, который мы будем анализировать. -->
<!doctype html>
<html>
@@ -39,7 +39,7 @@ HTML расшифровывается как Hypertext Markup Language(гипе
<body>
<h1>Привет, мир!</h1>
<a href = "http://codepen.io/anon/pen/xwjLbZ">
- Переходите сюда, чтоб посмотреть как это выглядит.
+ Переходите сюда, чтобы посмотреть, как это выглядит.
</a>
<p>Это параграф.</p>
<p>Это другой параграф.</p>
@@ -51,41 +51,41 @@ HTML расшифровывается как Hypertext Markup Language(гипе
</body>
</html>
-<!-- HTML-файл всегда начинается с указанием браузеру, что страница это HTML. -->
+<!-- HTML-файл всегда начинается с указания браузеру, что страница — это HTML. -->
<!doctype html>
-<!-- После этого, страница начинается с <html> тега. -->
+<!-- После этого страница начинается с <html> тега. -->
<html>
-<!-- страница будет закрыта в конце с помощью тега </html>. -->
+<!-- Страница будет закрыта в конце с помощью тега </html>. -->
</html>
<!-- Ничто не должно появиться после этого заключительного тега. -->
-<!-- Внутри (между открывающим и закрывающим тегами <html> </ html>), мы находим: -->
+<!-- Внутри (между открывающим и закрывающим тегами <html> </ html>) мы находим: -->
-<!-- Заголовок определяется <head> (it он должен быть закрыт </head>). -->
+<!-- Заголовок определяется <head> (и он должен быть закрыт </head>). -->
<!-- Заголовок содержит описание и дополнительную информацию, которая не отображается; это метаданные. -->
<head>
- <title>Мой сайт</title><!-- Тег <title> указывает браузеру заголовок, чтобы показать в строке заголовка названия и вкладки браузера окна. -->
+ <title>Мой сайт</title><!-- Тег <title> указывает браузеру заголовок, который следует показать в строке заголовка названия и вкладки браузера окна. -->
</head>
-<!-- После секция <head>, находится секция - <body> -->
-<!-- До этого момента, ничего описаное не будет отображаться в окне браузера. -->
-<!-- Мы должны наполнить <body> содержанием, которое будет отображаться. -->
+<!-- После секции <head>, находится секция - <body> -->
+<!-- До этого момента, ничего из описанного не будет отображаться в окне браузера. -->
+<!-- Мы должны наполнить <body> содержанием, которое будет отображаться. -->
<body>
<h1>Hello, world!</h1> <!-- Тег h1 создает заголовок. -->
- <!-- Так же существуют другие заголовки от имеющего большее значение <h1> по убыванию к <h6>. -->
- <a href = "http://codepen.io/anon/pen/xwjLbZ">Переходите сюда, чтоб посмотреть как это выглядит.</a>
- <!--гиперссылка на URL, заданнf атрибутом href="" -->
- <p>Это параграф.</p> <!-- Тег <p> позволяет нам добавдять текст на странице HTML. -->
+ <!-- Также существуют другие заголовки от имеющего большее значение <h1> до меньшего <h6>. -->
+ <a href = "http://codepen.io/anon/pen/xwjLbZ">Переходите сюда, чтобы посмотреть, как это выглядит.</a>
+ <!--гиперссылка на URL, заданная атрибутом href="" -->
+ <p>Это параграф.</p> <!-- Тег <p> позволяет нам добавлять текст на странице HTML. -->
<p>Это другой параграф.</p>
<ul> <!-- Тег <ul> создает маркированный список. -->
- <!-- Для того, чтобы иметь пронумерованный список лучше использовать <ol>
- тогда первый элемент будет иметь значение 1. для второго элемента, 2. и так далее. -->
- <li>Это элемент в не нумерованном списке (маркированный список)</li>
+ <!-- Для того, чтобы иметь пронумерованный список, лучше использовать <ol>
+ тогда первый элемент будет иметь значение 1., для второго элемента 2. и так далее. -->
+ <li>Это элемент в ненумерованном списке (маркированный список)</li>
<li>Это еще один элемент</li>
<li>И это последний пункт в списке</li>
</ul>
@@ -124,6 +124,6 @@ HTML файлы имеют окончание(расширение) `.html`.
## Узнать больше
-* [википедиа](https://ru.wikipedia.org/wiki/HTML)
+* [википедия](https://ru.wikipedia.org/wiki/HTML)
* [HTML учебник](https://developer.mozilla.org/ru/docs/Web/HTML)
* [htmlbook](http://htmlbook.ru/)
diff --git a/ru-ru/javascript-ru.html.markdown b/ru-ru/javascript-ru.html.markdown
index 4556b425..4c4fa503 100644
--- a/ru-ru/javascript-ru.html.markdown
+++ b/ru-ru/javascript-ru.html.markdown
@@ -504,7 +504,7 @@ if (Object.create === undefined) { // не перезаписываем мето
[Mozilla Developer Network](https://developer.mozilla.org/ru/docs/Web/JavaScript) —
предоставляет отличную документацию для JavaScript, как он используется в браузерах.
-Кроме того, это вики, поэтому, если вы знаете больше, вы можете помочь другим,
+Кроме того, это вики. Поэтому, если вы знаете больше, вы можете помочь другим,
делясь своими знаниями.
[JavaScript Garden](http://bonsaiden.github.io/JavaScript-Garden/ru/) — это
diff --git a/ru-ru/learnvisualbasic-ru.html.markdown b/ru-ru/learnvisualbasic-ru.html.markdown
index 72e1358c..6242fc42 100644
--- a/ru-ru/learnvisualbasic-ru.html.markdown
+++ b/ru-ru/learnvisualbasic-ru.html.markdown
@@ -8,7 +8,7 @@ filename: learnvisualbasic-ru.vb
lang: ru-ru
---
-```vbnet
+```visualbasic
Module Module1
Sub Main()
diff --git a/ru-ru/linker-ru.html.markdown b/ru-ru/linker-ru.html.markdown
index 7df29c23..14cfd229 100644
--- a/ru-ru/linker-ru.html.markdown
+++ b/ru-ru/linker-ru.html.markdown
@@ -34,11 +34,11 @@ lang: ru-ru
# Определяем точку входа в программу
ENTRY(Reset_Handler)
-# Определяем перемнную которая содержит адрес вершины стека
+# Определяем переменную которая содержит адрес вершины стека
_estack = 0x20020000;
-# Определяем перемнную которая содержит значение размера кучи
+# Определяем переменную которая содержит значение размера кучи
_Min_Heap_Size = 0x200;
-# Определяем перемнную которая содержит значение размера стека
+# Определяем переменную которая содержит значение размера стека
_Min_Stack_Size = 0x400;
# Описание карты памяти доступной для данного процессора
@@ -50,7 +50,7 @@ _Min_Stack_Size = 0x400;
# RAM - начинается с адреса 0x20000000 и занимает 128 Кбайт;
# CCMRAM - начинается с адреса 0x10000000и занимает 64 Кбайт;
# FLASH - начинается с адреса 0x8000000 занимает 1024 Кбайт;
-# Причем RAM память доступка для чтения, записи и исполнения.
+# Причем RAM память доступна для чтения, записи и исполнения.
# CCMRAM память доступна только на чтение и запись.
# FLASH память доступна на чтение и исполнение.
MEMORY
@@ -70,7 +70,7 @@ SECTIONS
. = ALIGN(4);
# Существует опция --gc-sections, которая позволяет собирать мусор из неиспользуемых
- # входных разделов. И если есть разделы, которые сборщик муссора не должен трогать,
+ # входных разделов. И если есть разделы, которые сборщик мусора не должен трогать,
# то их необходимо указать в качестве аргумента функции KEEP() (аналог ключевого слова
# volatile).
# Запись (*(.isr_vector)) означает разделы .isr_vector во всех объектных файлах. Т.к.
@@ -80,8 +80,8 @@ SECTIONS
# Выравниваем текущую позицию на границу 4-х байт.
. = ALIGN(4);
- # Выражение ">ОБЛАСТЬ_ПАМЯТИ" указывает в какую именно область памяти будет помещенна
- # данная секция. В нашем слущае секция .isr_vector будет размещена во FLASH памяти.
+ # Выражение ">ОБЛАСТЬ_ПАМЯТИ" указывает в какую именно область памяти будет помещена
+ # данная секция. В нашем случае секция .isr_vector будет размещена во FLASH памяти.
} >FLASH
# ИТОГО: Секция .isr_vector, которая содержит таблицу векторов прерываний выравнивается
@@ -125,7 +125,7 @@ SECTIONS
# Выравниваем текущую позицию на границу 4-х байт.
. = ALIGN(4);
- # Указываем, что в данной секции будут хранится области .rodataвсех
+ # Указываем, что в данной секции будут хранится области .rodata всех
# объектных файлов
*(.rodata)
*(.rodata*)
@@ -158,13 +158,13 @@ SECTIONS
_edata = .;
# Функция AT указывает на то, что данный сектор хранится в одной области памяти
- # (в нашем случае FLASH), а исполняться будет из другой обасти памяти (в нашем случае RAM).
- # Есть два типа адрессов:
- # * VMA (Virtual memory address) - это run-time адрес по которому уомпилятор ожидает
+ # (в нашем случае FLASH), а исполняться будет из другой области памяти (в нашем случае RAM).
+ # Есть два типа адресов:
+ # * VMA (Virtual memory address) - это run-time адрес по которому компилятор ожидает
# видеть данные.
# * LMA (Load memory address) - это адрес по которому линкер хранит данные.
- #Startup должен код скопировать секцию .data из адрессов LMA в адресса VMA.
+ #Startup должен код скопировать секцию .data из адресов LMA в адреса VMA.
} >RAM AT> FLASH
diff --git a/ru-ru/markdown-ru.html.markdown b/ru-ru/markdown-ru.html.markdown
index 579a9a20..4692e628 100644
--- a/ru-ru/markdown-ru.html.markdown
+++ b/ru-ru/markdown-ru.html.markdown
@@ -45,7 +45,7 @@ Markdown является надмножеством HTML, поэтому люб
HTML-элементов -->
```
-## Заголовки
+## Заголовки
HTML-элементы от <h1> до <h6> размечаются очень просто:
текст, который должен стать заголовком, предваряется
@@ -110,7 +110,7 @@ __И этот тоже.__
Для вставки принудительных переносов можно завершить абзац двумя дополнительными пробелами:
```md
-Эта строка завершается двумя пробелами (выделите, чтобы увидеть!).
+Эта строка завершается двумя пробелами (выделите, чтобы увидеть!).
Над этой строкой есть <br />!
```
@@ -208,7 +208,7 @@ __И этот тоже.__
```md
my_array.each do |item|
- puts item
+ puts item
end
```
@@ -223,12 +223,11 @@ __И этот тоже.__
В Github Flavored Markdown для блоков кода можно использовать
специальный синтаксис:
-<pre>
-<code class="highlight">&#x60;&#x60;&#x60;ruby
+```ruby
def foobar
- puts "Привет, мир!"
+ puts "Привет, мир!"
end
-&#x60;&#x60;&#x60;</code></pre>
+```
Во фрагменте, приведённом выше, отступ не требуется.
Кроме того, Github подсветит синтаксис языка, указанного после \`\`\`
@@ -255,6 +254,7 @@ end
```md
[Ссылка!](http://test.com/)
```
+
Также для ссылки можно указать всплывающую подсказку (`title`), используя
кавычки внутри круглых скобок:
@@ -269,11 +269,13 @@ end
Markdown также позволяет размечать ссылку в виде сноски:
-<pre><code class="highlight">&#x5b;<span class="nv">Щёлкните эту ссылку</span>][<span class="ss">link1</span>] для подробной информации!
-&#x5b;<span class="nv">Также посмотрите эту ссылку,</span>][<span class="ss">foobar</span>] если хотите.
+```md
+[Щёлкните эту ссылку][link1] для подробной информации!
+[Также посмотрите эту ссылку,][foobar] если хотите.
-&#x5b;<span class="nv">link1</span>]: <span class="sx">http://test.com/</span> <span class="nn">"Круто!"</span>
-&#x5b;<span class="nv">foobar</span>]: <span class="sx">http://foobar.biz/</span> <span class="nn">"Нормально!"</span></code></pre>
+[link1]: http://test.com/ "Круто!"
+[foobar]: http://foobar.biz/ "Нормально!"
+```
`Title` также может быть в одинарных кавычках или круглых скобках, а также
отсутствовать вовсе. Ссылки на сноски могут быть в любом месте документа,
@@ -281,9 +283,11 @@ Markdown также позволяет размечать ссылку в вид
Существует также неявное именование, когда ссылка является идентификатором.
-<pre><code class="highlight">&#x5b;<span class="nv">Это</span>][] ссылка.
+```md
+[Это][] ссылка.
-&#x5b;<span class="nv">это</span>]: <span class="sx">http://thisisalink.com/</span></code></pre>
+[это]: http://thisisalink.com/
+```
Правда, эта возможность не очень распространена.
@@ -294,11 +298,15 @@ Markdown также позволяет размечать ссылку в вид
```md
![Альтернативный текст для изображения](http://imgur.com/myimage.jpg "Подсказка")
```
-Изображения тоже могут быть оформлены, как сноски.
-<pre><code class="highlight">!&#x5b;<span class="nv">Это альтернативный текст.</span>][<span class="ss">myimage</span>]
+Изображения тоже могут быть оформлены как сноски.
+
+```md
+![Это альтернативный текст.][myimage]
+
+[myimage]: relative/urls/cool/image.jpg "Если нужна подсказка, её можно добавить"
+```
-&#x5b;<span class="nv">myimage</span>]: <span class="sx">relative/urls/cool/image.jpg</span> <span class="nn">"Если нужна подсказка, её можно добавить"</span></code></pre>
## Разное
### Автоссылки
@@ -341,6 +349,7 @@ Markdown также позволяет размечать ссылку в вид
| Выравнивание | Выравнивание | Выравнивание |
| влево | по центру | вправо |
```
+
Или более компактно
```md
diff --git a/ru-ru/nim-ru.html.markdown b/ru-ru/nim-ru.html.markdown
index 0e08f1bf..09784792 100644
--- a/ru-ru/nim-ru.html.markdown
+++ b/ru-ru/nim-ru.html.markdown
@@ -3,7 +3,7 @@ language: Nim
filename: learnNim-ru.nim
contributors:
- ["Jason J. Ayala P.", "http://JasonAyala.com"]
- - ["Dennis Felsing", "http://felsin9.de/nnis/"]
+ - ["Dennis Felsing", "https://dennis.felsing.org"]
translators:
- ["Nomadic", "https://github.com/n0madic"]
- ["dvska", "https://github.com/dvska"]
diff --git a/ru-ru/php-ru.html.markdown b/ru-ru/php-ru.html.markdown
index af77a9ca..4a508cfc 100644
--- a/ru-ru/php-ru.html.markdown
+++ b/ru-ru/php-ru.html.markdown
@@ -125,7 +125,7 @@ echo 'Multiple', 'Parameters', 'Valid'; // печатает 'MultipleParametersV
// и никогда не может быть изменена во время выполнения программы!
// Правильное имя константы начинается с буквы или символа подчеркивания
-// и содержит любое колличество букв, цифр или символов подчеркивания.
+// и содержит любое количество букв, цифр или символов подчеркивания.
define("FOO", "something");
// Доступ к константе возможен через прямое указание её имени без знака $
@@ -224,7 +224,7 @@ assert($c > $b); // больше
assert($a <= $b); // меньше или равно
assert($c >= $d); // больше или равно
-// Следующие утверждения истинны, если переменные имеют одинаковые тип.
+// Следующие утверждения истинны, если переменные имеют одинаковый тип.
assert($c === $d);
assert($a !== $d);
assert(1 == '1');
@@ -251,7 +251,7 @@ echo $string + $string; // => 2 (строка превращается в чис
$string = 'one';
echo $string + $string; // => 0
-// Приведение типов (type casting) может быть использовано для преобразование
+// Приведение типов (type casting) может быть использовано для преобразования
// переменной в другой тип
$boolean = (boolean) 1; // => true
@@ -458,7 +458,7 @@ include_once 'my-file.php';
require 'my-file.php';
require_once 'my-file.php';
-// Действует также как и include(), но если файл не удалось подключить,
+// Действует так же как и include(), но если файл не удалось подключить,
// функция выдает фатальную ошибку
// Содержимое файла my-include.php:
@@ -497,7 +497,7 @@ class MyClass
// Конструктор описывается с помощью __construct
public function __construct($instanceProp) {
- // Доступ к эземпляру класса с помощью $this
+ // Доступ к экземпляру класса с помощью $this
$this->instanceProp = $instanceProp;
}
@@ -661,7 +661,7 @@ $cls->myTraitMethod(); // Напечатает "I have MyTrait"
<?php
// По умолчанию, классы существуют в глобальном пространстве имен и могут быть
-// вызваны с обратным слешем.
+// вызваны с обратным слэшем.
$cls = new \MyClass();
@@ -762,7 +762,7 @@ echo "Current method is " . __METHOD__;
echo "Current namespace is " . __NAMESPACE__;
// Возвращает имя текущего трейта.
-// Возвращает только если испольщуется внутри трейта.
+// Возвращает только если используется внутри трейта.
echo "Current namespace is " . __TRAIT__;
@@ -771,7 +771,7 @@ echo "Current namespace is " . __TRAIT__;
*
*/
-// Простую обработку ошибок можно произвести спомощью try catch блока.
+// Простую обработку ошибок можно произвести с помощью try catch блока.
try {
// Выполняем что-то
@@ -779,7 +779,7 @@ try {
// Обработка исключения
}
-// При использовании try catch блока в области вилимости, стоит использовать
+// При использовании try catch блока в области видимости, стоит использовать
// следующий подход:
try {
@@ -788,7 +788,7 @@ try {
// Обработка исключения
}
-// Специальное(кастомное) исключение - exceptions
+// Специальное (кастомное) исключение - exceptions
class MyException extends Exception {}
@@ -797,7 +797,7 @@ try {
$condition = true;
if ($condition) {
- throw new MyException('Something just happend');
+ throw new MyException('Something just happened');
}
} catch (MyException $e) {
diff --git a/ru-ru/pyqt-ru.html.markdown b/ru-ru/pyqt-ru.html.markdown
index 24afc03d..a7e14c02 100644
--- a/ru-ru/pyqt-ru.html.markdown
+++ b/ru-ru/pyqt-ru.html.markdown
@@ -11,7 +11,7 @@ translators:
**Qt** - широко известный кросс-платформенный фреймворк для разработки программного обеспечения,
который может быть использован на различных софтварных и хардварных платформах без какого-либо
-изменения в коде. Данный фреймворк при этом обладает мощью и скоростью нативных приложений.
+изменения в коде. Данный фреймворк при этом обладает мощью и скоростью нативных приложений.
Qt и был изначально написан на *C++*.
Данный текст является адаптацией введения в Qt на C++ под авторством Алексея Ковальчука для pyqt.
@@ -20,7 +20,7 @@ Qt и был изначально написан на *C++*.
```python
def window():
- # Создайте объект приложения
+ # Создайте объект приложения
app = QtGui.QApplication(sys.argv)
# Создайте виджет, где будет находиться наш лейбл
w = QtGui.QWidget()
@@ -28,10 +28,10 @@ def window():
b = QtGui.QLabel(w)
# Задайте текст для лейбла
b.setText("Hello World!")
- # Задайте информация о размере и расположении
+ # Задайте информация о размере и расположении
w.setGeometry(100, 100, 200, 50)
b.move(50, 20)
- # Задайте заголовок окна
+ # Задайте заголовок окна
w.setWindowTitle("PyQt")
# Все ранее написанное выводится на экран
w.show()
@@ -43,11 +43,11 @@ if __name__ == '__main__':
```
-Для того, чтобы получить более продвинутые функции приложения в pyqt, нам необходимо
-обратить внимание на создание дополнительных элементов. Ниже представлено создание всплывающего диалогового окна, которое просит пользователя подтвердить его решение или предоставить какую-либо
+Для того чтобы получить более продвинутые функции приложения в pyqt, нам необходимо
+обратить внимание на создание дополнительных элементов. Ниже представлено создание всплывающего диалогового окна, которое просит пользователя подтвердить его решение или предоставить какую-либо
информацию.
-```Python
+```python
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
@@ -67,7 +67,7 @@ def window():
w.show()
sys.exit(app.exec_())
-Данная функция должна создавать диалоговое окно с кнопкой, которая ждет клика по себе
+Данная функция должна создавать диалоговое окно с кнопкой, которая ждет клика по себе
и затем завершает программу.
def showdialog():
diff --git a/ru-ru/python-ru.html.markdown b/ru-ru/python-ru.html.markdown
index e0e53b9c..e088593e 100644
--- a/ru-ru/python-ru.html.markdown
+++ b/ru-ru/python-ru.html.markdown
@@ -353,7 +353,6 @@ empty_set = set()
# Да, оно выглядит примерно как словарь. Ну извините, так уж вышло.
filled_set = {1, 2, 2, 3, 4} # => {1, 2, 3, 4}
-# Similar to keys of a dictionary, elements of a set have to be immutable.
# Как и ключи словаря, элементы множества должны быть неизменяемыми.
invalid_set = {[1], 1} # => Выбрасывает ошибку TypeError: unhashable type: 'list'
valid_set = {(1,), 1}
diff --git a/ru-ru/qt-ru.html.markdown b/ru-ru/qt-ru.html.markdown
index d0a70c9d..15e2c775 100644
--- a/ru-ru/qt-ru.html.markdown
+++ b/ru-ru/qt-ru.html.markdown
@@ -1,7 +1,7 @@
---
category: tool
tool: Qt Framework
-language: c++
+language: C++
filename: learnqt-ru.cpp
contributors:
- ["Aleksey Kholovchuk", "https://github.com/vortexxx192"]
@@ -80,7 +80,7 @@ int main(int argc, char *argv[]) {
```
Обратите внимание на метод *QObject::connect*. Этот метод соединяет *СИГНАЛЫ* одного объекта со *СЛОТАМИ* другого.
-**Сигналы** отправляются когда с объектами происходят отпределённые события, например, сигнал *нажатие* отправляется когда пользователь нажимает на объект типа QPushButton.
+**Сигналы** отправляются когда с объектами происходят определённые события, например, сигнал *нажатие* отправляется, когда пользователь нажимает на объект типа QPushButton.
**Слоты** это *действия*, которые могут быть выполнены в ответ на полученные сигналы.
diff --git a/ru-ru/rust-ru.html.markdown b/ru-ru/rust-ru.html.markdown
index d46d301c..a568ac37 100644
--- a/ru-ru/rust-ru.html.markdown
+++ b/ru-ru/rust-ru.html.markdown
@@ -1,5 +1,5 @@
---
-language: rust
+language: Rust
filename: learnrust-ru.rs
contributors:
diff --git a/ru-ru/sql-ru.html.markdown b/ru-ru/sql-ru.html.markdown
index 7353a175..c7ba0edb 100644
--- a/ru-ru/sql-ru.html.markdown
+++ b/ru-ru/sql-ru.html.markdown
@@ -24,7 +24,7 @@ lang: ru-ru
Некоторые команды ниже предполагают использование
[демонстрационного образца базы данных сотрудников от MySQL](https://dev.mysql.com/doc/employee/en/), доступного на [Github](https://github.com/datacharmer/test_db).
Следовательно, для повторения команд в локальном окружении он должен быть загружен.
-Файлы на github — это скрипты с командами, которые схожи с командами ниже,
+Файлы на github — это скрипты с командами, схожие с командами ниже,
которые создают и манипулируют таблицами и данными о сотрудниках вымышленной
компании. Синтаксис для запуска этих скриптов будет зависеть от используемой
вами реализации SQL. Обычно используется утилита, запускаемая из командной
@@ -50,7 +50,7 @@ SHOW DATABASES;
USE employees;
-- Выбрать все строки и колонки из таблицы «departments» (отделы) текущей базы.
--- В интерактивном режиме обыч но результат будет выведен на экран.
+-- В интерактивном режиме обычно результат будет выведен на экран.
SELECT * FROM departments;
-- Тот же запрос, что и выше, но выбор только колонок «dept_no» и «dept_name».
diff --git a/ru-ru/tmux-ru.html.markdown b/ru-ru/tmux-ru.html.markdown
index aa7545cc..643c48b0 100644
--- a/ru-ru/tmux-ru.html.markdown
+++ b/ru-ru/tmux-ru.html.markdown
@@ -249,4 +249,4 @@ set -g status-right "#[fg=green] | #[fg=white]#(tmux-mem-cpu-load)#[fg=green] |
[Archlinux Wiki](https://wiki.archlinux.org/index.php/Tmux)
-[Отображение CPU/MEM % в статусбаре](https://stackoverflow.com/questions/11558907/is-there-a-better-way-to-display-cpu-usage-in-tmux)
+[Отображение CPU/MEM % в статус баре](https://stackoverflow.com/questions/11558907/is-there-a-better-way-to-display-cpu-usage-in-tmux)
diff --git a/ru-ru/typescript-ru.html.markdown b/ru-ru/typescript-ru.html.markdown
index 09bbb2d1..ad931599 100644
--- a/ru-ru/typescript-ru.html.markdown
+++ b/ru-ru/typescript-ru.html.markdown
@@ -9,8 +9,8 @@ translators:
filename: learntypescript-ru.ts
---
-TypeScript — это язык программирования, целью которого является лёгкая разработка широкомасштабируемых JavaScript-приложений.
-TypeScript добавляет в Javascript общие концепции, такие, как классы, модули, интерфейсы, обобщённое программирование и (опционально) статическую типизацию.
+TypeScript — это язык программирования, целью которого является лёгкая разработка широко масштабируемых JavaScript-приложений.
+TypeScript добавляет в Javascript общие концепции, такие как классы, модули, интерфейсы, обобщённое программирование и (опционально) статическую типизацию.
Это надмножество языка JavaScript: весь JavaScript-код является валидным TypeScript-кодом, следовательно, может быть добавлен бесшовно в любой проект.
Компилятор TypeScript генерирует JavaScript-код.
diff --git a/ru-ru/vim-ru.html.markdown b/ru-ru/vim-ru.html.markdown
index f43f99eb..60b381e7 100644
--- a/ru-ru/vim-ru.html.markdown
+++ b/ru-ru/vim-ru.html.markdown
@@ -10,7 +10,7 @@ lang: ru-ru
---
[Vim](http://www.vim.org)
-(Vi IMproved) это клон полулярного текстового редактора для Unix. Он разработан
+(Vi IMproved) это клон популярного текстового редактора для Unix. Он разработан
с целью повышения скорости и продуктивности и повсеместно используется в
большинство Юникс-подобных систем. В нем имеется множество клавиатурных
сочетаний для быстрой навигации к определенным точкам в файле и быстрого
@@ -167,8 +167,8 @@ Vim можно рассматривать как набор команд в фо
## Макросы
Макросы это просто записываемые действия.
-Во время записи макросы запоминают **все** действия и команды до тех пор пока
-запись не будет остановлена.При вызове макрос применяет ту же самую последовательность
+Во время записи макросы запоминают **все** действия и команды до тех пор, пока
+запись не будет остановлена. При вызове макрос применяет ту же самую последовательность
действий и команд на выделенном тексте.
```
diff --git a/ru-ru/xml-ru.html.markdown b/ru-ru/xml-ru.html.markdown
index bf3f22b0..34e17b9b 100644
--- a/ru-ru/xml-ru.html.markdown
+++ b/ru-ru/xml-ru.html.markdown
@@ -15,7 +15,7 @@ XML - это язык разметки, предназначенный для х
* XML-Синтаксис
```xml
-<!-- Комментарии в XML выглядят вот так -->
+<!-- Это комментарий. -->
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
diff --git a/ru-ru/yaml-ru.html.markdown b/ru-ru/yaml-ru.html.markdown
index ddaed2b6..693848fc 100644
--- a/ru-ru/yaml-ru.html.markdown
+++ b/ru-ru/yaml-ru.html.markdown
@@ -12,7 +12,7 @@ lang: ru-ru
YAML как язык сериализации данных предназначен прежде всего для использования людьми.
Это строгое надмножество JSON с добавлением синтаксически значимых переносов строк и
-отступов как в Python. Тем не менее, в отличие от Python, YAML запрещает
+отступов как в Python. Тем не менее в отличие от Python, YAML запрещает
использование табов для отступов.
```yaml
@@ -53,7 +53,7 @@ literal_block: |
Любые строки с большим отступом сохраняют остатки своего отступа -
эта строка будет содержать дополнительно 4 пробела.
folded_style: >
- Весь блок этого тектса будет значением 'folded_style', но в данном случае
+ Весь блок этого текста будет значением 'folded_style', но в данном случае
все символы новой строки будут заменены пробелами.
Пустые строки будут преобразованы в перенос строки.
@@ -76,7 +76,7 @@ a_nested_map:
0.25: a float key
# Ключи также могут быть сложными, например многострочными.
-# Мы используем ? с последующим пробелом чтобы обозначить начало сложного ключа.
+# Мы используем ? с последующим пробелом, чтобы обозначить начало сложного ключа.
? |
Этот ключ
который содержит несколько строк
@@ -124,7 +124,7 @@ base: &base
name: Каждый будет иметь одинаковое имя
# Регулярное выражение << называется ключом объединения независимо от типа языка.
-# Он используется чтобы показать что все ключи одного или более словарей должны быть
+# Он используется, чтобы показать что все ключи одного или более словарей должны быть
# добавлены в текущий словарь.
foo: &foo
@@ -185,5 +185,5 @@ set2:
### Больше информации
-+ [YAML оффициальный вебсайт](http://yaml.org/)
++ [YAML официальный вебсайт](http://yaml.org/)
+ [YAML онлайн валидатор](http://www.yamllint.com/)
diff --git a/ru-ru/zfs-ru.html.markdown b/ru-ru/zfs-ru.html.markdown
new file mode 100644
index 00000000..46a3fbb5
--- /dev/null
+++ b/ru-ru/zfs-ru.html.markdown
@@ -0,0 +1,406 @@
+---
+category: tool
+tool: zfs
+contributors:
+ - ["sarlalian", "http://github.com/sarlalian"]
+ - ["A1EF", "https://github.com/A1EF"]
+filename: LearnZfs-ru.txt
+translators:
+ - ["A1EF", "https://github.com/A1EF"]
+lang: ru-ru
+---
+
+
+[ZFS](http://open-zfs.org/wiki/Main_Page)
+представляет собой переосмысление системы хранения данных, комбинирующее в едином инструменте
+традиционные файловые системы и системы управления томами. ZFS обладает некоторой специфичной
+терминологией, которая отличает её от более традиционных систем хранения данных, однако имеет
+отличный набор возможностей, акцентированных на удобстве использования системными администраторами.
+
+
+## Концепции ZFS
+
+### Виртуальные устройства
+
+Виртуальное устройство (VDEV) подобно устройству RAID, представляемого RAID-контроллером.
+Есть несколько типов виртуальных устройств (VDEV), которые предлагают различные преимущества,
+включая отказоустойчивость и скорость доступа. В основном виртуальные устройства (VDEV)
+предоставляют лучшую отказоустойчивость и безопасность, нежели RAID-контроллеры. Не рекомендуется
+использовать установку RAID с ZFS, поскольку ZFS рассчитывает непосредственно управлять дисками.
+
+Типы виртуальных устройств (VDEV)
+
+* mirror (поддерживается n-кратное зеркалирование)
+* raidz
+ * raidz1 (1-диск четности, аналог RAID 5)
+ * raidz2 (2-диска четности, аналог RAID 6)
+ * raidz3 (3-диска четности, нет имеет аналогичного RAID-массива)
+* disk
+* file (не рекомендовано для промышленного применения из-за добавления нежелательного промежуточного слоя иной файловой системы)
+
+Ваши данные распределяются среди всех виртуальных устройств (VDEV), представленных в пуле хранения,
+так что увеличив число виртуальных устройств (VDEV), вы увеличите количество IOPS.
+
+### Пулы хранения
+
+ZFS использует пулы хранения как абстракцию над нижним уровнем провайдера хранения (VDEV), позволяя вам отделить видимые пользователю
+файловые системы от физического их размещения.
+
+### ZFS датасеты
+
+ZFS датасеты подобны традиционным файловым системам, но имеют гораздо больше возможностей, обеспечивающих обилие преимуществ ZFS.
+Датасеты поддерживают [Copy on Write](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8), снапшоты, квоты, сжатие и дедубликацию.
+
+
+### Ограничения
+
+Один каталог может содержать до 2^48 файлов, каждый до 16 эксабайт. Один пул хранения может содержать до 256 зеттабайт (2^78) данных
+и может быть распределён по 2^64 устройствам. А один хост может иметь 2^64 пула хранения. Лимиты огромны.
+
+
+## Команды
+
+### Пулы хранения
+
+Действия:
+
+* Просмотр
+* Статус
+* Удаление
+* Получение/установка свойств
+
+Просмотр пулов
+
+```bash
+# Создание пула типа raidz
+$ zpool create zroot raidz1 gpt/zfs0 gpt/zfs1 gpt/zfs2
+
+# Просмотр пулов
+$ zpool list
+NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
+zroot 141G 106G 35.2G - 43% 75% 1.00x ONLINE -
+
+# Просмотр детализованной информации о конкретном пуле
+$ zpool list -v zroot
+NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
+zroot 141G 106G 35.2G - 43% 75% 1.00x ONLINE -
+ gptid/c92a5ccf-a5bb-11e4-a77d-001b2172c655 141G 106G 35.2G - 43% 75%
+```
+
+Статус пулов
+
+```bash
+# Получение информации о статусе пулов
+$ zpool status
+ pool: zroot
+ state: ONLINE
+ scan: scrub repaired 0 in 2h51m with 0 errors on Thu Oct 1 07:08:31 2015
+config:
+
+ NAME STATE READ WRITE CKSUM
+ zroot ONLINE 0 0 0
+ gptid/c92a5ccf-a5bb-11e4-a77d-001b2172c655 ONLINE 0 0 0
+
+errors: No known data errors
+
+# Скрабинг пула для исправления любых ошибок
+$ zpool scrub zroot
+$ zpool status -v zroot
+ pool: zroot
+ state: ONLINE
+ scan: scrub in progress since Thu Oct 15 16:59:14 2015
+ 39.1M scanned out of 106G at 1.45M/s, 20h47m to go
+ 0 repaired, 0.04% done
+config:
+
+ NAME STATE READ WRITE CKSUM
+ zroot ONLINE 0 0 0
+ gptid/c92a5ccf-a5bb-11e4-a77d-001b2172c655 ONLINE 0 0 0
+
+errors: No known data errors
+```
+
+Свойства пулов
+
+```bash
+
+# Получение свойств пула, свойства могут быть заданы пользователем или системой.
+$ zpool get all zroot
+NAME PROPERTY VALUE SOURCE
+zroot size 141G -
+zroot capacity 75% -
+zroot altroot - default
+zroot health ONLINE -
+...
+
+# Установка значения свойства пула
+$ zpool set comment="Storage of mah stuff" zroot
+$ zpool get comment
+NAME PROPERTY VALUE SOURCE
+tank comment - default
+zroot comment Storage of mah stuff local
+```
+
+Удаление пула
+
+```bash
+$ zpool destroy test
+```
+
+
+### Датасеты
+
+Действия:
+
+* Создание
+* Просмотр
+* Переименование
+* Удаление
+* Получение/установка свойств
+
+Создание датасетов
+
+```bash
+# Создание датасета
+$ zfs create zroot/root/data
+$ mount | grep data
+zroot/root/data on /data (zfs, local, nfsv4acls)
+
+# Создание дочернего датасета
+$ zfs create zroot/root/data/stuff
+$ mount | grep data
+zroot/root/data on /data (zfs, local, nfsv4acls)
+zroot/root/data/stuff on /data/stuff (zfs, local, nfsv4acls)
+
+
+# Создание тома
+$ zfs create -V zroot/win_vm
+$ zfs list zroot/win_vm
+NAME USED AVAIL REFER MOUNTPOINT
+zroot/win_vm 4.13G 17.9G 64K -
+```
+
+Просмотр датасетов
+
+```bash
+# Просмотр всех датасетов
+$ zfs list
+NAME USED AVAIL REFER MOUNTPOINT
+zroot 106G 30.8G 144K none
+zroot/ROOT 18.5G 30.8G 144K none
+zroot/ROOT/10.1 8K 30.8G 9.63G /
+zroot/ROOT/default 18.5G 30.8G 11.2G /
+zroot/backup 5.23G 30.8G 144K none
+zroot/home 288K 30.8G 144K none
+...
+
+# Просмотр конкретного датасета
+$ zfs list zroot/home
+NAME USED AVAIL REFER MOUNTPOINT
+zroot/home 288K 30.8G 144K none
+
+# Просмотр снапшотов
+$ zfs list -t snapshot
+zroot@daily-2015-10-15 0 - 144K -
+zroot/ROOT@daily-2015-10-15 0 - 144K -
+zroot/ROOT/default@daily-2015-10-15 0 - 24.2G -
+zroot/tmp@daily-2015-10-15 124K - 708M -
+zroot/usr@daily-2015-10-15 0 - 144K -
+zroot/home@daily-2015-10-15 0 - 11.9G -
+zroot/var@daily-2015-10-15 704K - 1.42G -
+zroot/var/log@daily-2015-10-15 192K - 828K -
+zroot/var/tmp@daily-2015-10-15 0 - 152K -
+```
+
+Переименование датасетов
+
+```bash
+$ zfs rename zroot/root/home zroot/root/old_home
+$ zfs rename zroot/root/new_home zroot/root/home
+```
+
+Удаление датасета
+
+```bash
+# Датасеты не могут быть удалены, если у них имеются какие-то снапшоты
+$ zfs destroy zroot/root/home
+```
+
+Получение / установка свойств датасета
+
+```bash
+# Получение всех свойств
+$ zfs get all zroot/usr/home
+NAME PROPERTY VALUE SOURCE
+zroot/home type filesystem -
+zroot/home creation Mon Oct 20 14:44 2014 -
+zroot/home used 11.9G -
+zroot/home available 94.1G -
+zroot/home referenced 11.9G -
+zroot/home mounted yes -
+...
+
+# Получения свойства для датасета
+$ zfs get compression zroot/usr/home
+NAME PROPERTY VALUE SOURCE
+zroot/home compression off default
+
+# Установка значения свойства на датасете
+$ zfs set compression=lz4 zroot/lamb
+
+# Получение значений выбранных свойств всех датасетов
+$ zfs list -o name,quota,reservation
+NAME QUOTA RESERV
+zroot none none
+zroot/ROOT none none
+zroot/ROOT/default none none
+zroot/tmp none none
+zroot/usr none none
+zroot/home none none
+zroot/var none none
+...
+```
+
+
+### Снапшоты
+
+ZFS снапшоты -- одна из очень важных особенностей zfs
+
+* Место, которое они занимают, равно разнице данных между файловой системой и её снапшотом
+* Время создания занимает считанные секунды
+* Восстановление настолько быстро, насколько позволяет вам запись данных
+* Они очень просты в автоматизации
+
+Действия:
+
+* Создание
+* Удаление
+* Переименование
+* Получение доступа к снапшотам
+* Отправка / Получение
+* Клонирование
+
+
+Создание снапшотов
+
+```bash
+# Создание снапшота единственного датасета
+zfs snapshot zroot/home/sarlalian@now
+
+# Создание снапшота для родительского и дочерних датасетов
+$ zfs snapshot -r zroot/home@now
+$ zfs list -t snapshot
+NAME USED AVAIL REFER MOUNTPOINT
+zroot/home@now 0 - 26K -
+zroot/home/sarlalian@now 0 - 259M -
+zroot/home/alice@now 0 - 156M -
+zroot/home/bob@now 0 - 156M -
+...
+```
+
+Удаление снапшотов
+
+```bash
+# Как удалить снапшот
+$ zfs destroy zroot/home/sarlalian@now
+
+# Удаление снапшота в родительском и дочерних датасетах
+$ zfs destroy -r zroot/home/sarlalian@now
+
+```
+
+Переименование снапшотов
+
+```bash
+# Переименование снапшота
+$ zfs rename zroot/home/sarlalian@now zroot/home/sarlalian@today
+$ zfs rename zroot/home/sarlalian@now today
+
+$ zfs rename -r zroot/home@now @yesterday
+```
+
+Получение доступа к спапшотам
+
+```bash
+# CD в каталог снапшота
+$ cd /home/.zfs/snapshot/
+```
+
+Отправка и получение
+
+```bash
+# Сохранение снапшота в файл
+$ zfs send zroot/home/sarlalian@now | gzip > backup_file.gz
+
+# Отправка снапшота в другой датасет
+$ zfs send zroot/home/sarlalian@now | zfs recv backups/home/sarlalian
+
+# Отправка снапшота на удаленный хост
+$ zfs send zroot/home/sarlalian@now | ssh root@backup_server 'zfs recv zroot/home/sarlalian'
+
+# Отправка полного датасета со снапшотами на новый хост
+$ zfs send -v -R zroot/home@now | ssh root@backup_server 'zfs recv zroot/home'
+```
+
+Клонирование снапшотов
+
+```bash
+# Клонирование снапшота
+$ zfs clone zroot/home/sarlalian@now zroot/home/sarlalian_new
+
+# Повышение клона, чтобы он больше не зависел от снапшота
+$ zfs promote zroot/home/sarlalian_new
+```
+
+### Собираем всё вместе
+
+Нижеследующий скрипт использует FreeBSD, jails и ZFS для автоматизации
+подготовки чистой копии стейджинговой базы mysql с живой реплики слейв-ноды.
+
+```bash
+#!/bin/sh
+
+echo "==== Остановка стейджингового сервера баз данных ===="
+jail -r staging
+
+echo "==== Очистка существующих стейджингового сервера и снапшота ===="
+zfs destroy -r zroot/jails/staging
+zfs destroy zroot/jails/slave@staging
+
+echo "==== Фиксация базы на слейве ===="
+echo "FLUSH TABLES WITH READ LOCK;" | /usr/local/bin/mysql -u root -pmyrootpassword -h slave
+
+echo "==== Сохранение снапшота файлов базы слейва как zroot/jails/slave@staging ===="
+zfs snapshot zroot/jails/slave@staging
+
+echo "==== Запуск слейв-ноды сервера баз данных ===="
+jail -c slave
+
+echo "==== Клонирование снапшота слейва на стейджинговый сервер ===="
+zfs clone zroot/jails/slave@staging zroot/jails/staging
+
+echo "==== Установка конфига стейджингово mysql ===="
+mv /jails/staging/usr/local/etc/my.cnf /jails/staging/usr/local/etc/my.cnf.slave
+cp /jails/staging/usr/local/etc/my.cnf.staging /jails/staging/usr/local/etc/my.cnf
+
+echo "==== Настройка стейджингового файла rc.conf ===="
+mv /jails/staging/etc/rc.conf.local /jails/staging/etc/rc.conf.slave
+mv /jails/staging/etc/rc.conf.staging /jails/staging/etc/rc.conf.local
+
+echo "==== Запуск стейджингово сервера баз данных ===="
+jail -c staging
+
+echo "==== Отключение синхронизации стейджинговой базы с мастером ===="
+echo "STOP SLAVE;" | /usr/local/bin/mysql -u root -pmyrootpassword -h staging
+echo "RESET SLAVE;" | /usr/local/bin/mysql -u root -pmyrootpassword -h staging
+```
+
+
+### Почитать дополнительно
+
+* [BSDNow's Crash Course on ZFS](http://www.bsdnow.tv/tutorials/zfs)
+* [FreeBSD Handbook on ZFS](https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/zfs.html)
+* [BSDNow's Crash Course on ZFS](http://www.bsdnow.tv/tutorials/zfs)
+* [Oracle's Tuning Guide](http://www.oracle.com/technetwork/articles/servers-storage-admin/sto-recommended-zfs-settings-1951715.html)
+* [OpenZFS Tuning Guide](http://open-zfs.org/wiki/Performance_tuning)
+* [FreeBSD ZFS Tuning Guide](https://wiki.freebsd.org/ZFSTuningGuide)