# Backend cheats Данный репозиторий представляет собой наглядную шпаргалку по основным темам в области Backend-разработки. Весь материал разбит на темы и подтемы. Структура материала состоит из 3 частей: - **Визуальная часть** - различные изображения/таблицы для лучшего понимания (может отсутствовать). Все рисунки и таблицы сделаны с нуля, специально для этого репозитория. - **Краткое описание** - очень краткая выжимка информации, позволяющая понять лишь основную суть. - **Ссылки на источники** - ресурсы, где можно найти полную информацию по конкретному вопросу. По возможности мы стараемся указывать максимально авторитетные источники, либо же те, которые предоставляют информацию максимально простым и понятным языком. Изучать материал можно последовательно шаг за шагом. > 🛠 Репозиторий находится в стадии активной разработки, поэтому постоянно обновляется и дополняется > 🤝 Если вы хотите помочь проекту, не стесняйтесь присылать свои пулл реквесты > 📝 The translation into English will be start after all the main topics have been completed
## Содержание - [1. Сеть и интернет](#сеть-и-интернет) - [Как устроен интернет](#как-устроен-интернет) - [Браузеры и как они работают](#браузеры-и-как-они-работают) - [Что такое DNS](#что-такое-dns) - [Что такое доменное имя](#что-такое-доменное-имя) - [Хостинг](#хостинг) - [Cтек протоколов TCP/IP](#cтек-протоколов-tcpip) - [Проблемы сети](#проблемы-сети) - [IPv4 и IPv6](#ipv4-и-ipv6) - [Трассировка маршрутов](#трассировка-маршрутов) - [2. Операционные системы](#операционные-системы) - [Как работают ОС](#как-работают-ос) - [Управление процессами](#управление-процессами) - [Потоки и параллелизм](#потоки-и-параллелизм) - [Управление памятью](#управление-памятью) - [Межпроцессорное взаимодействие](#межпроцессорное-взаимодействие) - [Ввод и вывод (I/O)](#ввод-и-вывод-io) - [Основы POSIX](#основы-posix) - [3. Основы Linux](#основы-linux) - [Работа с терминалом](#работа-с-терминалом) - [Менеджер пакетов](#менеджер-пакетов) - [Скрипты Bash](#скрипты-bash) - [Пользователи](#пользователи) - [Права доступа](#права-доступа) - [Работа с процессами](#работа-с-процессами) - [Работа с SSH](#работа-с-ssh) - [Планировщик задач](#планировщик-задач) - [Системные логи](#системные-логи) - [Проблемы Linux](#проблемы-linux) ## Сеть и интернет **Интернет** - это всемирная система объединяющая компьютерные сети со всего мира в единую сеть для хранения/передачи информации. Изначально Интернет разрабатывался для нужд военных. Но вскоре он стал внедряться в учреждения образования (университеты), а затем его смогли использовать частные компании, которые начали организовывать сети провайдеров, предоставляющие услуги доступа в Интернет обычным гражданам. К началу 2020 года количество пользователей в сети Интернет перевалило за 4.5 млрд человек. [Интернет — Википедия](https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82) [История Интернета — Википедия](https://ru.wikipedia.org/wiki/%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0) - ### Как устроен ИнтернетВаш компьютер никогда не был связан с Интернетом напрямую. Он видит только свою локальную сеть, в которую проводным (Ethernet) или беспроводным (Wi-Fi, Bluetooth) путем подключены другие устройства. Для связи с Интернетом в вашей локальной сети находиться специальный мини-компьютер - **маршрутизатор**. Далее этот маршрутизатор связывает вас с интернет-провайдером, который в свою очередь связан с другими провайдерами более высокого уровня. Таким образом, ваше сообщение, пройдя транзитом через сеть нескольких провайдеров, достигнет сеть назначения. `Хост` _(host - принимающий)_ - любое устройство, которое находится в какой-либо сети. `Сервер` _(serve - обслуживать)_ - специальный компьютер в сети, который обслуживает запросы поступающие от других компьютеров. [Как работает Интернет - MDN (mozilla.org)](https://developer.mozilla.org/ru/docs/Learn/Common_questions/How_does_the_Internet_work) [Основы программирования. Как работают сети? - YouTube](https://www.youtube.com/watch?v=k_0BAtyaDio&ab_channel=Winderton) [Хост — что это такое и как он работает](https://anisim.org/articles/host/) [Сервер — Википедия](
Браузер - это клиент, с помощью которого можно отправлять запросы на сервер для получения файлов, которые впоследствии используются для отрисовки web-страниц. Большинство пользователей используют именно браузеры для работы в сети Интернет. [Как работают браузеры — MDN (mozilla.org)](https://developer.mozilla.org/ru/docs/Web/Performance/How_browsers_work) [Браузер — Википедия](https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80) - ### Что такое DNS
**DNS (Domain Name System)** - это децентрализованная система именования адресов в Интернете, которая позволяет создавать удобные для человека буквеные наименования (доменные имена) соответствующие числовым IP-адресам, которые используются компьютерами. `IP-адрес` - уникальный идентификатор устройства находящегося в какой-либо сети. [Система доменных имен DNS — YouTube](https://www.youtube.com/watch?v=B0J0c0KLtbQ&ab_channel=AndreySozykin) [DNS — Википедия](https://ru.wikipedia.org/wiki/DNS) [IP адрес — HackWare.ru](https://hackware.ru/?p=11589) [IP-адрес — Википедия](https://ru.wikipedia.org/wiki/IP-%D0%B0%D0%B4%D1%80%D0%B5%D1%81) - ### Что такое доменное имя
Доменные имена представляют собой человеко-читаемые адреса веб-серверов, доступных в Интернете. Они состоят из частей (уровней) разделенных между собой точкой. Каждая из этих частей предоставляет специфическую информацию о доменном имени. Например страну, название сервиса, локализацию и т.д. [Что такое доменные имена - MDN (mozilla.org)](https://developer.mozilla.org/ru/docs/Learn/Common_questions/What_is_a_domain_name) [Как работают домены](https://temoto.github.io/a/kak-rabotayut-domeny.html) - ### Хостинг
**Хостинг** _(hosting)_ - специальная услуга, предоставляемая хостинг-провайдерами, которая позволяет арендовать пространство на сервере (который круглосуточно подключён к сети Интернет), где могут храниться ваши данные и файлы. Существуют различные варианты хостинга, где вы можете использовать не только дисковое пространство сервера, но и так же процессорную мощность для работы ваших сетевых приложений. [Хостинг: варианты, сравнения, пользовательская статистика — habr.com](https://habr.com/ru/company/ruvds/blog/443522/) [Хостинг: что это, зачем и как выбрать – vc.ru](https://vc.ru/services/74241-hosting-chto-eto-zachem-i-kak-vybrat) - ### Cтек протоколов TCP/IP
**Стек TCP/IP** - это модель (набор правил), которая описывает способ передачи данных от источника информации к получателю. `Протокол` - это всего лишь набор правил, документ, фиксирующий договорённость. В частности в стеке TCP/IP протоколы описывают правила взаимодействия между уровнями / в пределах одного уровня. > На начальном этапе не стоит сильно погружаться в эту тему, но иметь общее представление, как ваши данные проходят через все уровни протоколов, будет полезно.
`TCP` - это протокол обеспечивающий надежную передачу данных. TCP гарантирует доставку данных и сохранение порядка следования сообщений. Но это сказывается на скорости передачи. Данный протокол используется там, где потеря информации недопустима, например для отправки почты.
`UDP` - это простой протокол с быстрой передачей данных. Он не использует механизмов для гарантирования доставки и порядка следования данных. Используется, например в онлайн-играх, где частичная потеря пакетов не критична, но скорость передачи данных имеет гораздо более важное значение. Так же, запросы к DNS-серверам происходят через UDP протокол. `MAC-адрес` - уникальный идентификатор, назначенный сетевому адаптеру какого-либо устройства. [Модель и стек протоколов TCP/IP — YouTube](https://www.youtube.com/watch?v=UZo4ffQ-aAc&list=PLtPJ9lKvJ4oiNMvYbOzCmWy6cRzYAh9B1&index=8&ab_channel=AndreySozykin) [Протокол TCP — YouTube](https://www.youtube.com/watch?v=CKUOb4htnB4&ab_channel=AndreySozykin) [Протокол UDP — YouTube](https://www.youtube.com/watch?v=GBrLfZvRrd8&ab_channel=AndreySozykin) [TCP/IP — Википедия](https://ru.wikipedia.org/wiki/TCP/IP) [Всё, что вы хотели знать о МАС адресе — habr.com](https://habr.com/ru/post/483670/) - ### Проблемы сети [Лаги, джиттер и потеря пакетов: откуда берутся проблемы с неткодом и как их решать – habr.com](https://habr.com/ru/company/pixonic/blog/559780/) [Время ожидания (latency) – MDN (mozilla.org)](https://developer.mozilla.org/ru/docs/Web/Performance/Understanding_latency) [Как находить проблемы с интернетом и кто виноват ч.1 – habr.com](https://habr.com/ru/post/530324/) [Как находить проблемы с интернетом и кто виноват ч.2 – habr.com](https://habr.com/ru/post/531082/) - ### IPv4 и IPv6
IPv4 и IPv6 соответственно 4 и 6 версии IP-адреса. IPv4 разработана в 1981 году и ограничивает адресное пространство около 4.3 млрд (2^32) возможными уникальными адресами. Но со временем распределение адресного пространства стало происходить значительно более быстрыми темпами, что вынудило создание новой версии IP-адреса для хранения большего количества адресов. IPv6 способен обеспечить более 300 млн IP-адресов на каждого жителя Земли. [IPv4 — Википедия](https://ru.wikipedia.org/wiki/IPv4) [IPv6 — Википедия](https://ru.wikipedia.org/wiki/IPv6) [Протоколы IPv4 и IPv6. В чем разница и что лучше?](https://bezopasnik.info/%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B-ipv4-%D0%B8-ipv6-%D0%B2-%D1%87%D0%B5%D0%BC-%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0-%D0%B8-%D1%87%D1%82%D0%BE-%D0%BB%D1%83%D1%87%D1%88%D0%B5/) - ### Трассировка маршрутов
**Трассировка маршрута** - процедура, позволяющая отследить по каким узлам, с какими IP адресами, передаётся отправленный вами пакет прежде чем он достигнет точки назначения. Трассировка может применяться для выявления связанных с работой компьютерной сети проблем, а также для исследования/анализа сети. [Трассировка сетевого маршрута — hackware.ru](https://hackware.ru/?p=9210#12) [Traceroute — Википедия](https://ru.wikipedia.org/wiki/Traceroute) ## Операционные системы Операционная система (ОС) – это комплексная программная система, которая предназначена для эффективного распределения вычислительных ресурсов компьютера. Благодаря операционным системам пользователи могут без всякого труда использовать компьютеры для решения различных задач. То есть людям не приходится иметь дело непосредственно с процессором, оперативной памятью или другими комплектующими ПК. На данном этапе нет необходимости в детальном изучении устройства и принципов работы ОС. Достаточно лишь общего понимания, как в целом функционирует вся эта система, чтобы для вас это не было каким-то чёрным ящиком. - ### Как работают ОС [Что такое операционная система и как она работает – YouTube](https://www.youtube.com/watch?v=hb9CTGSJm88&t) [Что такое операционная система и как она работает? - GitHub](https://github.com/Steindvart/My_study/blob/master/docs/source/OS/articles/what_is_os.rst) - ### Управление процессами [Процесс – Википедия](
Так как под одной ОС могут работать несколько разных пользователи, то соответственно у каждого такого пользователя будет своё личное файловое пространство. Отсюда вытекает, что у любого файла в Linux должны быть специальные атрибуты – права на доступ. Эти атрибуты должны сообщать, кто имеет право работать c тем или иным файлом. [Права доступа в Linux – younglinux.info](https://younglinux.info/bash/rwx) [Управление доступом в Linux](https://zinvapel.github.io/it/tools/2018/01/10/linux-users/) [Команда chmod – изменение прав доступа – younglinux.info](https://younglinux.info/bash/chmod) - ### Работа с процессами Процессы в Linux можно описать как контейнеры, в которых хранится вся информация о состоянии выполняемой программы. Если программа работает хорошо, то все нормально, но если она зависла и вам нужно восстановить её работу, тогда вам понадобиться навыки работы по управлению процессами. ```bash ### ОСНОВНЫЕ КОМАНДЫ ДЛЯ РАБОТЫ С ПРОЦЕССАМИ ps # вывести 'снимок' процессов всех пользователей top # диспетчер задач в реальном времени <команда> & # запуск процесса в фоновом режиме, то есть не занимая консоль jobs # список запущенных в фоновом режиме процессов fg <номер> # вернуть процесс обратно в активный режим по его номеру bg <номер> # запуск остановленного процесса в фоновый режим kill