## Введение **Предварительные требования:** * Желательно свободно пользоваться любой операционной системой (Windows, Linux и т.д.). * Ожидается базовое понимание принципов работы операционных систем. *** ### **Что вы получите от этого курса** Курс разделён на три части: * **Первая часть** посвящена фундаментальным понятиям операционной системы Linux. Мы рассмотрим архитектуру Linux, различные дистрибутивы и области применения системы. Также разберём различия между графическим интерфейсом (GUI) и командной строкой (CLI). * **Во второй части** мы изучим базовые команды Linux. Основное внимание будет уделено навигации по файловой системе, просмотру и управлению файлами, перенаправлению ввода/вывода и т.д. * **В третьей части** рассматриваются основы администрирования Linux-систем. Это включает типичные повседневные задачи, выполняемые системными администраторами: управление пользователями и группами, настройка прав доступа к файлам, мониторинг производительности, работа с логами и другое. Во второй и третьей части будут приведены примеры для лучшего понимания материала. *** ### **Что не входит в курс** * Продвинутые команды Linux и написание скриптов на Bash не рассматриваются. * Внутреннее устройство Linux (Linux internals) также не входит в рамки курса. *** ### **Содержание курса** В рамках курса рассматриваются следующие темы: ### **Содержание курса** ### **Введение в Linux** * Что такое операционные системы на базе Linux * Популярные дистрибутивы Linux * Области применения Linux * Архитектура Linux * Графический интерфейс пользователя (GUI) и интерфейс командной строки (CLI) *** ### **Основы командной строки** * Настройка лабораторной среды * Что такое команда * Организация файловой системы * Навигация по файловой системе * Работа с файлами * Просмотр файлов * Команда `echo` * Команды обработки текста * Перенаправление ввода/вывода (I/O Redirection) *** ### **Администрирование Linux-систем** * Настройка лабораторной среды * Управление пользователями и группами * Получение прав суперпользователя * Права доступа к файлам * Команда `ssh` * Управление пакетами * Управление процессами * Управление памятью * Демоны и `systemd` * Логирование и работа с логами *** ### **Заключение** * Применение знаний в роли SRE * Полезные курсы и обучающие материалы ### **Что такое операционные системы Linux** Большинство из нас знакомо с операционной системой Windows, которая используется более чем на 75% персональных компьютеров. Операционные системы Windows построены на ядре Windows NT. **Ядро** — это важнейшая часть любой операционной системы. Оно выполняет ключевые функции, такие как управление процессами, управление памятью, управление файловой системой и т.д. Операционные системы на базе Linux построены на **ядре Linux**. Операционная система, основанная на Linux, включает в себя: * ядро Linux * графический (GUI) или командный (CLI) интерфейс * системные библиотеки * системные утилиты Ядро Linux было независимо разработано и опубликовано Линусом Торвальдсом. Оно является **свободным и открытым программным обеспечением** (см. [репозиторий на GitHub](https://github.com/torvalds/linux)). Важно понимать, что **Linux — это ядро**, а не полноценная операционная система. Чтобы создать полноценную ОС, ядро Linux объединяется с компонентами **GNU**. В результате мы получаем полноценную систему, часто называемую **GNU/Linux**. **GNU** — это большой набор свободного программного обеспечения: компилятор, отладчик, библиотека C и другие инструменты. (См. также: *Linux and the GNU System*) История Linux: [https://en.wikipedia.org/wiki/History_of_Linux](https://en.wikipedia.org/wiki/History_of_Linux) ### **Популярные дистрибутивы Linux** **Дистрибутив Linux (или просто «дистро») — это операционная система**, основанная на ядре Linux и использующая систему управления пакетами. **Система управления пакетами** — это набор инструментов, которые позволяют устанавливать, обновлять, настраивать и удалять программное обеспечение в рамках операционной системы. Программы обычно адаптируются под конкретный дистрибутив и упаковываются в специфичный для него формат. Эти пакеты доступны через **репозитории**, характерные для каждого дистрибутива. Установка и управление пакетами осуществляется через **менеджер пакетов**. ### Наиболее популярные дистрибутивы Linux: * **Fedora** * **Ubuntu** * **Debian** * **CentOS** * **Red Hat Enterprise Linux (RHEL)** * **SUSE** * **Arch Linux** | Формат пакетов | Дистрибутивы | Менеджер пакетов | | -------------- | ------------ | ---------------- | | Debian style (`.deb`) | Debian, Ubuntu | APT | | Red Hat style (`.rpm`) | Fedora, CentOS, Red Hat Enterprise Linux | YUM | Архитектура Linux Архитектура Linux.png * Ядро Linux имеет **монолитную архитектуру** — это значит, что все основные функции (управление памятью, процессами, устройствами и т.д.) выполняются в одном пространстве — пространстве ядра. * Взаимодействие с пространством ядра осуществляется с помощью **системных вызовов** (*system calls*). * **Код ядра** может выполняться **только в режиме ядра** (*kernel mode*), в то время как обычные пользовательские программы работают в **пользовательском режиме** (*user mode*). * Для взаимодействия с аппаратным обеспечением используются **драйверы устройств** (*device drivers*). ### **Области применения операционных систем Linux** Операционные системы на базе ядра Linux широко применяются в различных сферах: * **Персональные компьютеры** * **Серверы** * **Мобильные устройства** — Android основан на Linux * **Встраиваемые устройства** — часы, телевизоры, светофоры и пр. * **Спутники** * **Сетевое оборудование** — маршрутизаторы, коммутаторы и др. *** ### **Графический интерфейс (GUI) против командной строки (CLI)** Пользователь взаимодействует с компьютером через **интерфейс пользователя**. Он может быть двух типов: * **Графический интерфейс (GUI)** — предоставляет графические элементы (иконки, окна и изображения), с помощью которых пользователь взаимодействует с системой. Например, при запуске приложения двойным щелчком по иконке вы используете GUI. Такой способ взаимодействия считается интуитивно понятным. * **Интерфейс командной строки (CLI)** — взаимодействие осуществляется через ввод команд вручную. Пользователь вводит команды в терминале, и система выполняет их. Новичкам, привыкшим к GUI, может быть сложно начать работу с CLI, так как нужно знать конкретные команды для выполнения операций. *** ### **Shell и терминал: в чём разница** * **Shell (оболочка)** — это программа, принимающая команды пользователя и передающая их операционной системе для выполнения. Это один из типов интерфейса CLI. Один из самых популярных shell в Linux — **Bash**, также широко используются **zsh**, **ksh**, **tcsh** и другие. * **Терминал** — это программа, которая открывает окно и позволяет взаимодействовать с оболочкой. Примеры популярных терминалов: **GNOME Terminal**, **xterm**, **Konsole** и т.д. В повседневной речи пользователи Linux часто используют термины **shell**, **терминал**, **консоль**,**prompt** и т.п. как взаимозаменяемые — по сути, все они означают способ ввода команд в систему.