2022-02-27 20:42:24 +03:00
# Backend cheats
2022-02-27 19:02:50 +03:00
2022-02-27 22:42:30 +03:00
Данный репозиторий представляет собой наглядную шпаргалку по основным темам в области Backend-разработки. Весь материал разбит на темы и подтемы. Структура материала состоит из 3 частей:
2022-02-28 08:31:20 +03:00
- **Визуальная часть** - различные изображения/таблицы для лучшего понимания (может отсутствовать). В с е рисунки и таблицы сделаны с нуля, специально для этого репозитория.
2022-02-27 22:42:30 +03:00
- **Краткое описание** - очень краткая выжимка информации, позволяющая понять лишь основную суть.
2022-02-28 20:57:46 +03:00
- **Ссылки на источники** - ресурсы, где можно найти полную информацию по конкретному вопросу. По возможности мы стараемся указывать максимально авторитетные источники, либо же те, которые предоставляют информацию максимально простым и понятным языком.
2022-02-27 22:42:30 +03:00
2022-03-02 20:04:29 +03:00
Изучать материал можно последовательно шаг за шагом.
2022-03-08 20:47:27 +03:00
> 🛠 Репозиторий находится в стадии активной разработки, поэтому постоянно обновляется и дополняется
2022-03-08 20:48:17 +03:00
2022-03-08 20:47:27 +03:00
> 🤝 Если вы хотите помочь проекту, не стесняйтесь присылать свои пулл реквесты
2022-03-08 20:48:17 +03:00
2022-03-08 20:47:27 +03:00
> 📝 The translation into English will be start after all the main topics have been completed
2022-03-02 20:38:33 +03:00
< p > < a name = "top" > < / a > < / p >
2022-03-02 20:04:29 +03:00
2022-02-27 22:42:30 +03:00
## Содержание
2022-03-01 13:04:49 +03:00
- [1. Сеть и интернет ](#сеть-и-интернет )
- [Как устроен интернет ](#как-устроен-интернет )
- [Браузеры и как они работают ](#браузеры-и-как-они-работают )
- [Что такое DNS ](#что-такое-dns )
- [Что такое доменное имя ](#что-такое-доменное-имя )
- [Хостинг ](#хостинг )
2022-03-02 20:04:29 +03:00
- [Cте к протоколов TCP/IP ](#cте к-протоколов-tcpip )
2022-03-01 13:04:49 +03:00
- [Проблемы сети ](#проблемы-сети )
- [IPv4 и IPv6 ](#ipv4-и-ipv6 )
- [Трассировка маршрутов ](#трассировка-маршрутов )
2022-03-02 20:38:33 +03:00
- [2. Операционные системы ](#операционные-системы )
2022-03-03 12:25:55 +03:00
- [Как работают О С ](#как-работают-о с )
- [Управление процессами ](#управление-процессами )
- [Потоки и параллелизм ](#потоки-и-параллелизм )
- [Управление памятью ](#управление-памятью )
- [Межпроцессорное взаимодействие ](#межпроцессорное-взаимодействие )
- [Ввод и вывод (I/O) ](#ввод-и-вывод-io )
- [Основы POSIX ](#основы-posix )
2022-03-08 20:33:04 +03:00
- [3. Основы Linux ](#основы-linux )
- [Работа с терминалом ](#работа-с -терминалом )
- [Менеджер пакетов ](#менеджер-пакетов )
- [Скрипты Bash ](#скрипты-bash )
- [Пользователи ](#пользователи )
2022-03-10 17:53:46 +03:00
- [Права доступа ](#права-доступа )
2022-03-08 20:33:04 +03:00
- [Работа с процессами ](#работа-с -процессами )
- [Работа с SSH ](#работа-с -ssh )
- [Планировщик задач ](#планировщик-задач )
- [Системные логи ](#системные-логи )
- [Проблемы Linux ](#проблемы-linux )
2022-03-01 13:04:49 +03:00
2022-02-27 19:02:50 +03:00
## Сеть и интернет
2022-02-28 20:57:46 +03:00
**Интернет** - это всемирная система объединяющая компьютерные сети с о всего мира в единую сеть для хранения/передачи информации. Изначально Интернет разрабатывался для нужд военных. Н о вскоре он стал внедряться в учреждения образования (университеты), а затем е г о смогли использовать частные компании, которые начали организовывать сети провайдеров, предоставляющие услуги доступа в Интернет обычным гражданам. К началу 2020 года количество пользователей в сети Интернет перевалило за 4.5 млрд человек.
2022-02-27 20:42:24 +03:00
2022-03-03 13:33:25 +03:00
[Интернет — Википедия ](https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82 )
2022-02-27 20:44:17 +03:00
2022-03-03 13:33:25 +03:00
[История Интернета — Википедия ](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 )
2022-02-27 20:42:24 +03:00
2022-02-28 08:31:20 +03:00
- ### Как устроен Интернет
2022-02-27 19:02:50 +03:00
2022-02-28 17:24:28 +03:00
< p align = "center" >
2022-03-02 20:04:29 +03:00
< img src = "./files/network-internet/Internet.png" alt = "Internet" / >
2022-02-28 17:24:28 +03:00
< / p >
2022-03-02 20:04:29 +03:00
Ваш компьютер никогда не был связан с Интернетом напрямую. Он видит только свою локальную сеть, в которую проводным (Ethernet) или беспроводным (Wi-Fi, Bluetooth) путем подключены другие устройства.
2022-02-27 20:42:24 +03:00
2022-03-03 12:25:55 +03:00
Для связи с Интернетом в вашей локальной сети находиться специальный мини-компьютер - **маршрутизатор** . Далее этот маршрутизатор связывает вас с интернет-провайдером, который в свою очередь связан с другими провайдерами более высокого уровня. Таким образом, ваше сообщение, пройдя транзитом через сеть нескольких провайдеров, достигнет сеть назначения.
2022-02-27 20:42:24 +03:00
2022-02-28 20:57:46 +03:00
`Хост` _(host - принимающий)_ - любое устройство, которое находится в какой-либо сети.
2022-03-01 10:17:11 +03:00
2022-02-28 20:57:46 +03:00
`Сервер` _(serve - обслуживать)_ - специальный компьютер в сети, который обслуживает запросы поступающие от других компьютеров.
2022-02-27 20:42:24 +03:00
[Как работает Интернет - MDN (mozilla.org) ](https://developer.mozilla.org/ru/docs/Learn/Common_questions/How_does_the_Internet_work )
2022-02-27 20:44:17 +03:00
2022-02-27 20:42:24 +03:00
[Основы программирования. Как работают сети? - YouTube ](https://www.youtube.com/watch?v=k_0BAtyaDio&ab_channel=Winderton )
2022-02-28 20:57:46 +03:00
[Хост — что это такое и как он работает ](https://anisim.org/articles/host/ )
2022-03-03 13:33:25 +03:00
[Сервер — Википедия ](<https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 )>)
2022-02-28 20:57:46 +03:00
[Что такое сервер и как он работает ](https://timeweb.com/ru/community/articles/chto-takoe-server-i-kak-on-rabotaet )
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-02-27 22:43:49 +03:00
- ### Браузеры и как они работают
2022-02-27 19:02:50 +03:00
2022-02-28 17:24:28 +03:00
< p align = "center" >
2022-03-02 20:04:29 +03:00
< img src = "./files/network-internet/Browser.png" alt = "Browser" / >
2022-02-28 17:24:28 +03:00
< / p >
2022-02-28 20:57:46 +03:00
Браузер - это клиент, с помощью которого можно отправлять запросы на сервер для получения файлов, которые впоследствии используются для отрисовки web-страниц. Большинство пользователей используют именно браузеры для работы в сети Интернет.
2022-02-27 20:42:24 +03:00
2022-02-28 20:57:46 +03:00
[Как работают браузеры — MDN (mozilla.org) ](https://developer.mozilla.org/ru/docs/Web/Performance/How_browsers_work )
2022-02-27 20:42:24 +03:00
2022-03-03 13:33:25 +03:00
[Браузер — Википедия ](https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80 )
2022-02-27 19:02:50 +03:00
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-02-28 17:24:28 +03:00
- ### Что такое DNS
2022-02-27 20:42:24 +03:00
2022-02-28 08:31:20 +03:00
< p align = "center" >
2022-03-02 20:04:29 +03:00
< img src = "./files/network-internet/dns.png" alt = "DNS" / >
2022-02-28 08:31:20 +03:00
< / p >
2022-02-27 20:42:24 +03:00
2022-03-01 14:52:13 +03:00
**DNS (Domain Name System)** - это децентрализованная система именования адресов в Интернете, которая позволяет создавать удобные для человека буквеные наименования (доменные имена) соответствующие числовым IP-адресам, которые используются компьютерами.
2022-02-28 17:24:28 +03:00
2022-03-01 14:52:13 +03:00
`IP-адрес` - уникальный идентификатор устройства находящегося в какой-либо сети.
2022-02-28 20:57:46 +03:00
2022-03-03 13:33:25 +03:00
[Система доменных имен DNS — YouTube ](https://www.youtube.com/watch?v=B0J0c0KLtbQ&ab_channel=AndreySozykin )
2022-02-27 20:44:17 +03:00
2022-03-08 20:17:40 +03:00
[DNS — Википедия ](https://ru.wikipedia.org/wiki/DNS )
2022-02-27 20:42:24 +03:00
2022-02-28 20:57:46 +03:00
[IP адрес — HackWare.ru ](https://hackware.ru/?p=11589 )
2022-03-03 13:33:25 +03:00
[IP-адрес — Википедия ](https://ru.wikipedia.org/wiki/IP-%D0%B0%D0%B4%D1%80%D0%B5%D1%81 )
2022-02-28 20:57:46 +03:00
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-02-27 22:43:49 +03:00
- ### Что такое доменное имя
2022-02-27 19:02:50 +03:00
2022-02-28 17:24:28 +03:00
< p align = "center" >
2022-03-02 20:04:29 +03:00
< img src = "./files/network-internet/Domain.png" alt = "Domain" / >
2022-02-28 17:24:28 +03:00
< / p >
2022-03-01 10:17:11 +03:00
Доменные имена представляют собой человеко-читаемые адреса веб-серверов, доступных в Интернете. Они состоят из частей (уровней) разделенных между собой точкой. Каждая из этих частей предоставляет специфическую информацию о доменном имени. Например страну, название сервиса, локализацию и т.д.
2022-02-28 17:24:28 +03:00
[Что такое доменные имена - MDN (mozilla.org) ](https://developer.mozilla.org/ru/docs/Learn/Common_questions/What_is_a_domain_name )
2022-03-01 13:04:49 +03:00
[Как работают домены ](https://temoto.github.io/a/kak-rabotayut-domeny.html )
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-02-27 22:43:49 +03:00
- ### Хостинг
2022-02-27 19:02:50 +03:00
2022-03-01 10:17:11 +03:00
< p align = "center" >
2022-03-02 20:04:29 +03:00
< img src = "./files/network-internet/Hosting.png" alt = "Hosting" / >
2022-03-01 10:17:11 +03:00
< / p >
2022-02-28 20:57:46 +03:00
**Хостинг** _(hosting)_ - специальная услуга, предоставляемая хостинг-провайдерами, которая позволяет арендовать пространство на сервере (который круглосуточно подключён к сети Интернет), где могут храниться ваши данные и файлы. Существуют различные варианты хостинга, где вы можете использовать не только дисковое пространство сервера, но и так же процессорную мощность для работы ваших сетевых приложений.
2022-03-01 14:52:13 +03:00
[Хостинг: варианты, сравнения, пользовательская статистика — habr.com ](https://habr.com/ru/company/ruvds/blog/443522/ )
2022-02-28 20:57:46 +03:00
2022-03-08 20:17:40 +03:00
[Хостинг: что это, зачем и как выбрать – vc.ru ](https://vc.ru/services/74241-hosting-chto-eto-zachem-i-kak-vybrat )
2022-02-28 20:57:46 +03:00
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 14:52:13 +03:00
- ### Cте к протоколов TCP/IP
2022-02-27 19:02:50 +03:00
2022-03-01 14:52:13 +03:00
< p align = "center" >
2022-03-02 20:04:29 +03:00
< img src = "./files/network-internet/tcp-ip.png" alt = "TCP/IP" / >
2022-03-01 14:52:13 +03:00
< / p >
**Стек TCP/IP** - это модель (набор правил), которая описывает способ передачи данных от источника информации к получателю.
2022-03-02 20:04:29 +03:00
`Протокол` - это всего лишь набор правил, документ, фиксирующий договорённость. В частности в стеке TCP/IP протоколы описывают правила взаимодействия между уровнями / в пределах одного уровня.
2022-03-01 14:52:13 +03:00
2022-03-02 20:38:33 +03:00
> Н а начальном этапе не стоит сильно погружаться в эту тему, но иметь общее представление, как ваши данные проходят через все уровни протоколов, будет полезно.
2022-03-01 14:52:13 +03:00
< p align = "center" >
2022-03-02 20:04:29 +03:00
< img src = "./files/network-internet/tcp.png" alt = "TCP" / >
2022-03-01 14:52:13 +03:00
< / p >
2022-03-02 20:04:29 +03:00
`TCP` - это протокол обеспечивающий надежную передачу данных. TCP гарантирует доставку данных и сохранение порядка следования сообщений. Н о это сказывается на скорости передачи. Данный протокол используется там, где потеря информации недопустима, например для отправки почты.
2022-03-01 14:52:13 +03:00
< p align = "center" >
2022-03-02 20:04:29 +03:00
< img src = "./files/network-internet/udp.png" alt = "UDP" / >
2022-03-01 14:52:13 +03:00
< / p >
2022-03-02 20:04:29 +03:00
`UDP` - это простой протокол с быстрой передачей данных. Он не использует механизмов для гарантирования доставки и порядка следования данных. Используется, например в онлайн-играх, где частичная потеря пакетов не критична, но скорость передачи данных имеет гораздо более важное значение. Так же, запросы к DNS-серверам происходят через UDP протокол.
2022-03-01 14:52:13 +03:00
2022-03-11 10:40:10 +03:00
`MAC-адрес` - уникальный идентификатор, назначенный сетевому адаптеру какого-либо устройства.
2022-03-01 14:52:13 +03:00
[Модель и стек протоколов 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 )
2022-03-08 20:17:40 +03:00
[TCP/IP — Википедия ](https://ru.wikipedia.org/wiki/TCP/IP )
2022-03-01 14:52:13 +03:00
[Всё, что вы хотели знать о М А С адресе — habr.com ](https://habr.com/ru/post/483670/ )
2022-02-27 19:02:50 +03:00
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-02-27 22:43:49 +03:00
- ### Проблемы сети
2022-02-27 19:02:50 +03:00
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-02-27 22:43:49 +03:00
- ### IPv4 и IPv6
2022-02-27 19:02:50 +03:00
2022-03-01 10:17:11 +03:00
< p align = "center" >
2022-03-02 20:04:29 +03:00
< img src = "./files/network-internet/IPv4-IPv6.png" alt = "IPv4-IPv6" / >
2022-03-01 10:17:11 +03:00
< / p >
2022-03-01 13:04:49 +03:00
IPv4 и IPv6 соответственно 4 и 6 версии IP-адреса. IPv4 разработана в 1981 году и ограничивает адресное пространство около 4.3 млрд (2^32) возможными уникальными адресами. Н о с о временем распределение адресного пространства стало происходить значительно более быстрыми темпами, что вынудило создание новой версии IP-адреса для хранения большего количества адресов. IPv6 способен обеспечить более 300 млн IP-адресов на каждого жителя Земли.
2022-03-01 10:17:11 +03:00
2022-03-03 13:33:25 +03:00
[IPv4 — Википедия ](https://ru.wikipedia.org/wiki/IPv4 )
2022-03-01 10:17:11 +03:00
2022-03-03 13:33:25 +03:00
[IPv6 — Википедия ](https://ru.wikipedia.org/wiki/IPv6 )
2022-03-01 10:17:11 +03:00
2022-03-08 20:17:40 +03:00
[Протоколы 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/ )
2022-03-01 10:17:11 +03:00
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-02-27 22:43:49 +03:00
- ### Трассировка маршрутов
2022-02-27 19:02:50 +03:00
2022-02-28 20:57:46 +03:00
< p align = "center" >
2022-03-02 20:04:29 +03:00
< img src = "./files/network-internet/Traceroute.png" alt = "Traceroute" / >
2022-02-28 20:57:46 +03:00
< / p >
**Трассировка маршрута** - процедура, позволяющая отследить по каким узлам, с какими IP адресами, передаётся отправленный вами пакет прежде чем он достигнет точки назначения. Трассировка может применяться для выявления связанных с работой компьютерной сети проблем, а также для исследования/анализа сети.
2022-03-03 13:33:25 +03:00
[Трассировка сетевого маршрута — hackware.ru ](https://hackware.ru/?p=9210#12 )
2022-02-28 17:24:28 +03:00
2022-03-03 13:33:25 +03:00
[Traceroute — Википедия ](https://ru.wikipedia.org/wiki/Traceroute )
2022-02-28 17:24:28 +03:00
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
## Операционные системы
2022-03-08 20:17:40 +03:00
Операционная система (О С ) – это комплексная программная система, которая предназначена для управления ресурсами компьютера.
Н а данном этапе нет необходимости в детальном изучении устройства и принципов работы О С . Достаточно лишь общего понимания, как в целом функционирует вся эта система, чтобы для вас это не было каким-то черным ящиком.
2022-03-01 13:04:49 +03:00
- ### Как работают О С
2022-03-03 13:33:25 +03:00
[Что такое операционная система и как она работает – 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 )
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Управление процессами
2022-03-08 20:17:40 +03:00
[Процесс – Википедия ](<https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0 )>)
[Процессы и потоки ](https://learnc.info/c/processes_and_threads.html )
2022-03-03 13:33:25 +03:00
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Потоки и параллелизм
2022-03-08 20:17:40 +03:00
[Поток выполнения – Википедия ](https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F )
[Параллелизм против многопоточности против асинхронного программирования: разъяснение – habr.com ](https://habr.com/ru/post/337528/ )
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Управление памятью
2022-03-08 20:17:40 +03:00
[Управление памятью в О С ](https://bestprogrammer.ru/izuchenie/upravlenie-pamyatyu-v-operatsionnoj-sisteme )
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Межпроцессорное взаимодействие
2022-03-08 20:17:40 +03:00
[Межпроцессное взаимодействие – Википедия ](https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BD%D0%BE%D0%B5_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5 )
[IPC: основы межпроцессного взаимодействия ](https://www.rsdn.org/article/baseserv/ipc.xml )
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Ввод и вывод (I/O)
2022-03-08 20:17:40 +03:00
[Ввод и вывод – Википедия ](https://ru.wikipedia.org/wiki/%D0%92%D0%B2%D0%BE%D0%B4-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4 )
[Основные методы ввода-вывода (I/O) – tproger.ru ](https://tproger.ru/translations/diversity-of-input-output-io/ )
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Основы POSIX
2022-03-08 20:17:40 +03:00
[POSIX – Википедия ](https://ru.wikipedia.org/wiki/POSIX )
2022-03-02 20:38:33 +03:00
2022-03-08 20:17:40 +03:00
[Что такое POSIX ](http://citforum.ru/operating_systems/articles/posix.shtml )
2022-03-01 13:04:49 +03:00
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
## Основы Linux
2022-03-02 20:04:29 +03:00
Операционные системы на базе ядра Linux это стандарт в мире серверной разработки, поскольку большинство серверов работают именно на таких О С . Использовать Linux на серверах выгодно, ведь он рапространяется бесплатно.
Существует огромное количество дистрибутивов (сборок с набором предустановленного ПО) Linux на любой вкус и цвет. Одним из самых популярных является Ubuntu. Именно с него можно начать своё погружение в серверную разработку.
[Установить Ubuntu ](https://ubuntu.com/download/desktop ) можно на отдельный ПК или ноутбук. Если такой возможности нет, можно воспользоваться специальной программой [Virtual Box ](https://www.virtualbox.org/wiki/Downloads ), в которой можно [запускать другие О С ](https://lumpics.ru/how-install-ubuntu-on-virtualbox-virtual-machine/ ) поверх основной. Так же можно запустить [Docker ](https://www.docker.com/products/docker-desktop ) [контейнер с образом Ubuntu ](https://losst.ru/zapusk-kontejnera-docker ) (Docker - это отдельная тема, которая рассматривается в этом репозитории).
После этого можно быстро пройти [вводный курс по Linux и Bash ](https://younglinux.info/bash/linux ).
2022-03-01 13:04:49 +03:00
- ### Работа с терминалом
2022-03-04 22:58:23 +03:00
Необходимо уметь работать с терминалом (консолью). Это предоставляет вам доступ ко всем возможностям О С , в отличии от графического интерфейса, функционал которого существенного ограничен.
2022-03-03 12:25:55 +03:00
```bash
2022-03-10 17:53:46 +03:00
### ОСНОВНЫЕ КОМАНДЫ ДЛЯ РАБОТЫ С ФАЙЛОВОЙ СИСТЕМОЙ
2022-03-03 12:25:55 +03:00
ls # просмотр содержимого директории
2022-03-08 20:17:40 +03:00
cd < путь > # переход в указанный каталог
2022-03-04 22:58:23 +03:00
cd .. # переход на уровень выше (в родительский каталог)
2022-03-08 20:17:40 +03:00
touch < файл > # создание файла
cat > < файл > # ввод текста в файл из консоли (перезапись)
cat >> < файл > # ввод текста в конец файла (добавление)
cat/more/less < файл > # просмотр содержимого файла
head/tail < файл > # просмотр первых/последних строк файла
2022-03-03 12:25:55 +03:00
pwd # путь к текущей директории
2022-03-08 20:17:40 +03:00
mkdir < имя > # создать директорию
2022-03-10 17:53:46 +03:00
rmdir < имя > # удалить директорию
2022-03-08 20:17:40 +03:00
cp < файл > < путь > # копировать файл или директорию
2022-03-10 17:53:46 +03:00
mv < файл > < путь > # перемещение или переименование
2022-03-08 20:17:40 +03:00
rm < файл > # удаление файла или директории
2022-03-10 17:53:46 +03:00
find < строка > # поиск в файловой системе
du < файл > # вывод размера файла или каталога
2022-03-03 12:25:55 +03:00
2022-03-05 23:13:13 +03:00
### ДОКУМЕНТАЦИЯ
2022-03-03 12:25:55 +03:00
man < на зва ние _ко ма нды > # Позволяет посмотреть руководство по любой команде.
2022-03-04 22:58:23 +03:00
apropos < слово > # Поиск команды с описанием имеющим указанное слово
man -k < слово > # Аналогично команде выше
whatis < на зва ние _ко ма нды > # Краткое описание команды
2022-03-03 12:25:55 +03:00
### ПРАВА СУПЕРПОЛЬЗОВАТЕЛЯ
sudo < команда > # выполняет команду с правами суперпользователя
```
2022-03-03 13:33:25 +03:00
[Основные linux-команды для новичка – habr.com ](https://habr.com/ru/post/501442/ )
2022-03-03 12:25:55 +03:00
[44 команды Linux которые вы должны знать – losst.ru ](https://losst.ru/42-komandy-linux-kotorye-vy-dolzhny-znat )
2022-03-03 13:33:25 +03:00
2022-03-03 12:25:55 +03:00
[Ubuntu cheatsheet – GitHub ](https://github.com/JREAM/ubuntu-cheatsheet/blob/master/README.md )
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-03 12:25:55 +03:00
- ### Менеджер пакетов
2022-03-04 22:58:23 +03:00
Встроенный менеджер пакетов APT позволяет устанавливать новые программы из сети с помощью терминала.
2022-03-03 12:25:55 +03:00
2022-03-04 22:58:23 +03:00
```bash
2022-03-10 17:53:46 +03:00
### ОСНОВНЫЕ КОМАНДЫ ДЛЯ РАБОТЫ С APT
2022-03-08 20:17:40 +03:00
apt install < имя_па ке та > # установить пакет
apt remove < имя_па ке та > # удалить пакет, но оставить конфигурацию
apt purge < имя_па ке та > # удалить пакет вместе с конфигурацией
2022-03-03 12:25:55 +03:00
apt update # обновление информации о новых версиях пакетов
apt upgrade # обновление пакетов, установленных в системе
apt list --installed # список установленных в системе пакетов
apt list --upgradable # список пакетов, которые требуют обновления
apt search < имя > # поиск пакетов по имени в сети
2022-03-08 20:17:40 +03:00
apt show < имя_па ке та > # информация о пакете
2022-03-03 12:25:55 +03:00
```
[Как пользоваться apt – losst.ru ](https://losst.ru/kak-polzovatsya-apt )
[Использование APT. Команды apt и apt-get – pingvinus.ru ](https://pingvinus.ru/note/apt )
2022-03-01 13:04:49 +03:00
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Скрипты Bash
2022-03-04 22:58:23 +03:00
С помощью скриптов (сценариев) можно автоматизировать последовательный ввод любого количества команд. В Bash можно создавать различные условия (разветвления), циклы, таймеры и т.д. для выполнения всевозможных действий связанных с вводом в консоль.
[Шпаргалка оп Bash – quickref.me ](https://quickref.me/bash )
[Шпаргалка оп Bash – learnxinyminutes.com ](https://learnxinyminutes.com/docs/ru-ru/bash-ru/ )
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Пользователи
2022-03-11 10:40:10 +03:00
```bash
### РАБОТА С ПОЛЬЗОВАТЕЛЯМИ
useradd < имя > [ключи] # создать нового пользователя
passwd < имя > # установить пароль пользователю
usermod < имя > [ключи] # редактировать пользователя
usermod -L < имя > # заблокировать пользователя
usermod -U < имя > # разблокировать пользователя
userdel < имя > [ключи] # удалить пользователя
### РАБОТА С ГРУППАМИ
groupadd < группа > [ключи] # создать группу
groupmod < группа > [опции] # редактировать группу
groupdel < группа > [опции] # удалить группу
usermod -a -G < группы ( через запятую ) > < пользователь > # добивить пользователя в группы
gpasswd --delete < пользователь > < группы ( через запятую ) > # удалить пользователя из групп
```
```js
// СИСТЕМНЫЕ ФАЙЛЫ С ИНФОРМАЦИЕЙ О ПОЛЬЗОВАТЕЛЯХ
"/etc/passwd"; // файл паролей, содержащий основную информацию о пользователях
"/etc/shadow"; // файл теневых шифрованных паролей, содержащий зашифрованные пароли
"/etc/group"; // файл групп, содержащий основную информацию о группах и принадлежащих этим группам пользователях
"/etc/gshadow"; // файл теневых групп, содержащий шифрованные пароли групп
```
[Пользователи в Linux – добавление, изменение, удаление ](https://host-consult.ru/polzovateli-v-linux/ )
[Группы и пользователи в Linux ](https://sysadminium.ru/groups_and_users_in_linux/ )
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-10 17:53:46 +03:00
- ### Права доступа
< p align = "center" >
< img src = "./files/linux/chmod.png" alt = "chmod" / >
< / p >
2022-03-11 10:40:10 +03:00
Так как под одной О С могут работать несколько разных пользователи, то соответственно у каждого такого пользователя будет своё личное файловое пространство. Отсюда вытекает, что у любого файла в Linux должны быть специальные атрибуты – права на доступ. Эти атрибуты должны сообщать, кто имеет право работать c тем или иным файлом.
2022-03-10 17:53:46 +03:00
[Права доступа в Linux – younglinux.info ](https://younglinux.info/bash/rwx )
[Команда chmod – изменение прав доступа – younglinux.info ](https://younglinux.info/bash/chmod )
2022-03-01 13:04:49 +03:00
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-04 22:58:23 +03:00
- ### Работа с процессами
```bash
2022-03-11 10:40:10 +03:00
### ОСНОВНЫЕ КОМАНДЫ ДЛЯ РАБОТЫ С ПРОЦЕССАМИ
2022-03-04 22:58:23 +03:00
ps # вывести 'снимок' процессов всех пользователей
top # диспетчер задач в реальном времени
< команда > & # запуск процесса в фоновом режиме, то есть не занимая консоль
jobs # список запущенных в фоновом режиме процессов
fg < номер > # вернуть процесс обратно в активный режим по е г о номеру
bg < номер > # запуск остановленного процесса в фоновый режим
kill < id процесса > # завершить процесс по id
killall < программа > # завершить все процессы связанные с одной программой
```
[Работа с процессами в Linux – YouTube ](https://www.youtube.com/watch?v=Y4W_rJStNSA )
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Работа с SSH
2022-03-08 20:17:40 +03:00
Служба SSH позволяет получить удаленный доступ к терминалу другого компьютера. В случае с персональным компьютером, это может понадобиться для срочного решения какой-либо проблемы, а в случае с сервером это вообще очень распространенная практика.
```bash
2022-03-11 10:40:10 +03:00
### ОСНОВНЫЕ КОМАНДЫ SSH
2022-03-08 20:17:40 +03:00
apt install openssh-server # установка SSH (хотя он почти везде идёт из коробки)
service ssh start # запуск SSH
2022-03-10 17:53:46 +03:00
service ssh stop # остановка SSH
2022-03-08 20:17:40 +03:00
ssh -p < Порт > user@remotehost # подключенние к удаленному ПК через SSH
ssh-keygen -t rsa # генерация RSA-ключа для беспарольного входа
ssh-copy-id -i ~/.ssh/id_rsa user@remotehost # копирования ключа на удаленную машину
```
[Как пользоваться SSH – losst.ru ](https://losst.ru/kak-polzovatsya-ssh )
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Планировщик задач
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Системные логи
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-03-01 13:04:49 +03:00
- ### Проблемы Linux
2022-03-02 20:38:33 +03:00
< div align = "right" > < a href = "#top" > Содержание ⬆️< / a > < / div >
2022-02-27 19:02:50 +03:00
## Общие знания
2022-02-27 22:43:49 +03:00
- ### Структуры данных
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Хэш-таблицы
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Очередь и стек
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Связанные списки
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Двусвязные списки
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- ### Форматы хранения данных
2022-02-27 19:02:50 +03:00
2022-03-01 13:04:49 +03:00
- #### Текстовые
2022-02-27 19:02:50 +03:00
2022-03-01 13:04:49 +03:00
JSON, YAML, XML
2022-02-27 19:02:50 +03:00
2022-03-01 13:04:49 +03:00
- #### Бинарные
2022-02-27 19:02:50 +03:00
2022-03-01 13:04:49 +03:00
Message Pack, BSON, ProtoBuf
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- ### Криптография
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Хэши и хеш-функции
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Цифровые подписи
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Соль для подписей
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Коллизия хэшей
2022-02-27 19:02:50 +03:00
## Язык программирования
2022-02-28 08:31:20 +03:00
Выберите для изучения один из языков _(спсиок составлен по моему личному мнению)_ :
2022-02-27 19:02:50 +03:00
- [Go ](https://github.com/avelino/awesome-go )
- [JavaScript (Node.js) ](https://github.com/sindresorhus/awesome-nodejs )
- [Python ](https://github.com/vinta/awesome-python )
2022-02-27 22:43:49 +03:00
* ### Базовые знания
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Примитивные типы данных
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Функции
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Н а б о р , массив, хеш-таблица, кортеж
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Объекты/классы/структуры, прототипы/интерфейсы/миксины
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Ссылки, указатели
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Область видимости переменных
2022-02-27 19:02:50 +03:00
2022-02-28 08:31:20 +03:00
- #### Сборщик мусора
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Преобразование типов
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Слабая/сильная типизация в коде
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Битовые операции
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- #### Обработка ошибок
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
* ### Распараллеливание
2022-02-27 19:02:50 +03:00
2022-02-28 08:31:20 +03:00
- #### Процессы
2022-02-27 19:02:50 +03:00
2022-02-28 08:31:20 +03:00
- #### Потоки
2022-02-27 19:02:50 +03:00
2022-02-28 08:31:20 +03:00
- #### КоРутины
2022-02-27 19:02:50 +03:00
2022-02-28 08:31:20 +03:00
- #### Проблемы распараллеливания
2022-02-27 19:02:50 +03:00
2022-02-28 08:31:20 +03:00
- #### Атомарные операции
2022-02-27 19:02:50 +03:00
2022-02-28 08:31:20 +03:00
- #### Блокировки
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
* ### Пакетный менеджер
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
* ### Отладчик
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
* ### Запуск HTTP-сервера
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
* ### Кэширование
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
* ### Шаблонизация
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
* ### Ввод / Вывод (IO)
2022-02-27 19:02:50 +03:00
2022-03-01 14:52:13 +03:00
## Протокол HTTP
- ### Формат протокола
- ### Методы HTTP-запросов
- ### Коды ответов
- ### Заголовки
- ### Cookie
- ### CORS
- ### CSP
- ### Безопасность (HTTPS)
- ### Различия HTTP 1.0 и HTTP 1.1
- ### HTTP 2
- ### HTTP 3
- ### Откладка сети в Chrome Dev Tools
- ### Работа с HTTP через терминал
- ### WebSockets
- ### API форматы
- ### Web сервера
- #### NGNX
- #### Apache httpd
2022-02-27 19:02:50 +03:00
## Базовое ПО
2022-02-27 22:43:49 +03:00
- ### Система контроля версий Git
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- ### Контейнеризация и Docker
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- ### Postman / Insomnia
2022-02-27 19:02:50 +03:00
## Базы данных
2022-02-27 22:43:49 +03:00
- ### Реляционные базы данных
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- ### Документоориентированные базы данных
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- ### Redis
2022-02-27 19:02:50 +03:00
2022-02-27 22:43:49 +03:00
- ### Проблемы баз данных
2022-02-27 19:02:50 +03:00
## Дополнительные материалы и источники
- [Backend Developer Roadmap: Learn to become a modern backend developer ](https://roadmap.sh/backend )
- [bzick/oh-my-backend: Backend Roadmap (from Junior to Senior) ](https://github.com/bzick/oh-my-backend )
- [zhashkevych/awesome-backend: 🚀 A curated and opinionated list of resources (English & Russian) for Backend developers ](https://github.com/zhashkevych/awesome-backend )
2022-03-01 13:04:49 +03:00
- [УЧЕБНЫЙ К У Р С : Компьютерные сети ](https://www.asozykin.ru/courses/networks_online )
2022-03-02 20:04:29 +03:00
< div align = "center" > Made with ♥ < / div >
2022-03-02 20:38:33 +03:00
< div align = "center" > < a href = "https://github.com/cheatsnake/backend-cheats/blob/master/LICENSE" > LICENSE< / a > 2022.< / div >