Основы Linux (обзор с практическим уклоном)

ARTICLES 16.03.22 16.03.22 248
Бесплатные курсына главную сниппетов

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

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

Что такое Linux?

История и определение

В 1969 году в дочернем подразделении компании AT&T – Bell Laboratories – была выпущена операционная система Unix, которая стала основной для большого количества операционных систем того времени. UNIX была проприетарной системой, лицензия на нее стоила порядка 40 000 долларов. Таким образом, позволить себе ее покупку могли только крупные компании. Это послужило толчком для старта в 1983 году проекта GNU – GNU is Not Unix. Его основоположник, Ричард Столлман, объявил целью проекта создание свободно распространяемой операционной системы. Чуть позже Столлманом был написан знаменитый манифест GNU, который стал основой для лицензии GPL (GNU General Public License), актуальной и по сей день. К началу 1990-х годов в рамках проекта GNU было написано большинство компонентов ОС – оболочка bash, компиляторы, отладчик, текстовый редактор и др. Не хватало лишь ядра операционной системы.

В 1991 году Линус Торвальдс, будучи студентом финского университета, увлекся идеей написания ядра операционной системы для своего персонального компьютера с процессором Intel. Вдохновлением и прототипом для будущего Linux стала совместимая с Unix операционная система для персональных компьютеров Minix. Уже в августе 1991 года было написано ядро операционной системы, в нее были портированы оболочка bash и компилятор gсс из проекта GNU. По признанию самого Линуса, изначально это было не более, чем хобби, однако проект оказался весьма востребованным, к нему начали присоединяться разработчики со всего мира. Дополненная массой программ, разработанных в рамках проекта GNU, ОС Linux стала пригодна для практического использования. При этом ядро системы распространялось под лицензией GNU General Public License, что гарантировало свободное распространение кода ядра системы. 

Читать подробнее: История Linux. Вкратце о главном

Итак, сегодня Linux (или GNU/Linux) – семейство Unix-подобных операционных систем на базе ядра Linux, включающих тот или иной набор утилит и программ проекта GNU. Linux-системы распространяются в виде различных дистрибутивов, имеющих свой набор системных и прикладных компонентов (как свободных, так и проприетарных).

Серверные дистрибутивы

Дистрибутив Linux — это операционная система, созданная на основе ядра Linux, которая включает в себя набор библиотек и утилит (пакетов), разработанных в рамках проекта GNU, а также систему управления пакетами (менеджер пакетов). В настоящее время существует более 500 различных дистрибутивов, разрабатываемых как при коммерческой поддержке (Red Hat / FedoraSLED / OpenSUSEUbuntu и др.), так и исключительно усилиями добровольцев (DebianSlackwareGentooArchLinux и др.). 

Дистрибутивы делятся на несколько типов в зависимости от базового дистрибутива и системы управления пакетами. Вот несколько примеров наиболее популярных серверых дистрибутивов двух типов:

Стоит отметить, что существует великое множество различных дистрибутивов на любой вкус и цвет. Их невозможно даже сосчитать, так как практически каждый представитель сообщества может собрать свой собственный дистрибутив на основе ядра Linux.

Работа с Linux

Загрузка

Алгоритм включения сервера и загрузки Linux в большинстве случаев выглядит следующим образом:

Читать подробнее: Алгоритм загрузки Linux (BIOS / UEFI)

Подключение

Командная оболочка

Подключиться к Linux для управления можно в интерфейсе командной строки (command-line interface, CLI) или в графическом интерфейсе (graphical user interface, GUI). При работе с серверной инфраструктурой в подавляющем числе случаев GUI отсутствует и взаимодействие с сервером осуществляется в CLI. При входе пользователя на сервер в CLI запускается командная оболочка (в GUI командную оболочку можно запустить через эмулятор, например Terminal). Командная оболочка (shell) – это программа, которая принимает команды с клавиатуры и передает их операционной системе для выполнения. Наиболее распространенной командной оболочкой в Linux является GNU bash (Bourne Again SHell). bash основывается на другой легковесной оболочке-предшественнике – sh (Bourne sh), созданной Стефеном Борном.

Команды можно выполнять с помощью командной строки, указав имя двоичного (бинарного, bin) исполняемого файла или сценария. По умолчанию в Linux много команд, которые позволяют перемещаться по файловой системе, устанавливать ПО, конфигурировать его и выполнять другие действия. Каждая запущенная команда является отдельным процессом. Важно отметить, что в Linux (в отличие от Windows) почти всегда учитывается регистр, включая имена файлов и каталогов, команды, аргументы и опции.

Читать подробнее: Основы работы с терминалом Linux

SSH

Подключаться к Linux и работать с командной оболочкой можно локально (например включив ПК дома или подойдя к серверу в центре обработки данных), однако гораздо чаще работать с системой требуется удаленно. Для этого необходимо настроить SSH и подключаться через него. SSH (Secure SHell) – это протокол, позволяющий производить удаленное управление операционной системой и туннелирование TCP-соединений (например, для копирования файлов). SSH основан на клиент-серверной архитектуре, которая организует защищенное (зашифрованное) соединение поверх небезопасных каналов связи. Серверная часть устанавливается на удаленном сервере, а клиентская на компьютере, с которого осуществляется подключение.

Существует много клиентов для удаленного подключения к серверу по SSH. Вот несколько примеров для различных операционных систем:

Читать подробнее: 

Установка программ (утилит) пакетным менеджером

Зачем нужны пакетные менеджеры?

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

Существует несколько форматов пакетов, однако наибольшее распространение получили .deb и .rpm. Рассмотрим операционные системы и менеджеры пакетов для данных форматов:

Читать подробнее: Популярные пакетные менеджеры Linux

Практика

На практике пользователю необходимо уметь взаимодействовать с пакетными менеджерами – устанавливать и удалять пакеты.

Ниже приведены несколько примеров команд:

# руководство (справочная информация)
    man <utility> # просмотр справочной информации по утилите
    <utility> --help # просмотр справочной информации по утилите

    # менеджер пакетов apt (.deb)
    sudo apt install nano # установка пакета
    sudo apt remove nano # удаление пакета
    sudo apt autoclean # удаление кэша пакетов

    # менеджер пакетов yum (.rpm) - для dnf команды полностью аналогичны
    sudo yum install nano # установка пакета
    sudo yum remove nano # удаление пакета
    sudo yum clean all # удаление кэша пакетов

При необходимости уточняйте описание утилит и ключей выполнения в Интернете или в руководстве man.

Структура файловой системы и работа с файлами

Типы файлов

Все объекты в Linux являются файлами. Существуют следующие типы файлов:

Читать подробнее: Типы файлов в Linux

Структура файловой системы

Структура файловой системы представляет собой дерево, корнем которой является каталог /.

Рассмотрим подробно структуру и назначение каталогов:

Читать подробнее: Структура файловой системы Linux

Права доступа

В Linux права доступа к файлам (в том числе к каталогам) задаются для трех видов пользователей – владельца, группы владельца и остальных. Также есть три типа доступа к файлу – чтение r (Read), запись w (Write) и исполнение x (eXecution), которые задаются для каждого из видов пользователей. Прочерк - означает отсутствие доступа.

Таким образом, права доступа к файлу выглядят следующим образом:

Пример: rwx r-- --- означает, что у владельца есть права на все, у группы владельца доступ только на чтение, а у остальных доступа нет. В двоичной системе счисления эти права выглядят как три группы цифр – 111 100 000, что равносильно трем цифрам 7 4 0 в восьмеричной и десятичной системах счисления.

Читать подробнее: 

Практика

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

Ниже приведены несколько примеров наиболее часто используемых команд:

# руководство (справочная информация)
    man <utility> # просмотр справочной информации по утилите
    <utility> --help # просмотр справочной информации по утилите

    # навигация
    ls -la <dir> # просмотр содержимого каталога (в том числе прав доступа)
    cd <dir> # переход в каталог

    # каталоги
    mkdir <dir> # создание каталога
    rmdir <dir> # удаление пустого каталога
    rm -rf <dir> # удаление каталога с файлами

    # файлы
    cat <file> # вывод файла в консоль
    less <file> # постраничный вывод файла
    tail <file> # вывод последних строк («хвоста») файла
    vi <file> # редактиврование файла текстовым редактором vi
    nano <file> # редактирование файла текстовым редактором nano
    cp <file> <dir> # копирование файла в каталог
    mv <file> <dir> # перемещение файла в каталог (для переименования переместите файл в тот же каталог)
    rm <file> # удаление файла
    rm -rf <dir>/* # удаление всех файлов в каталоге

    # права доступа
    chown <user> <dir> # установить пользователя владельцем каталога
    chown <user>:<group> <dir> # установить владельца и группу владельца каталога
    chmod 644 <file> # установить права доступа rw- r-- r-- (чтение и запись для владельца, чтение для группы владельца, чтение для остальных пользователей)
    сhmod 740 <file> # установить права доступа rwx r-- --- (чтение, запись и исполнение для владельца, чтение для группы владельца)
    chmod u+w <file> # добавить владельцу право на запись файла

При необходимости уточняйте описание утилит и ключей выполнения в Интернете или в руководстве man.

Процессы и потребление ресурсов сервера

Процессы

Если предельно упростить, то процесс – это любая программа, которая выполняется в системе. В ходе работы с системой может быть запущено множество программ, которые, в свою очередь, могут запустить множество процессов. Простейший пример процесса – командная оболочка bash. Каждому процессу в Linux присваивается уникальный идентификатор процесса (PID), который используется ядром для управления процессом до завершения программы или команды, с которой он связан.

Процесс может находиться в следующих статусах:

Почти любой процесс (кроме процесса в статусе D) может быть принудительно прерван администратором в случае необходимости («убит»). Это не всегда безопасно, однако возможно.

Запущенные процессы требуют использования аппаратных ресурсов сервера – ЦПУ, ОЗУ, дисков, сетевых интерфейсов.

Читать подробнее: Процессы в Linux

Практика

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

Ниже приведены несколько примеров наиболее часто используемых команд:

# руководство (справочная информация)
    man <utility> # просмотр справочной информации по утилите
    <utility> --help # просмотр справочной информации по утилите

    # процессы
    top
    sudo ps aux
    sudo kill -9 <pid> # убийство процесса по PID
    sudo killall -s 9 <name> # убийство всех процессов по имени

    # утилиты для мониторинга использования ресурсов
    htop # использование ресурсов по процессам (может потребоваться установка пакета htop)
    nmon # использование процессора по ядрам, памяти, дисков и др. (может потребоваться установка пакета nmon)
    iostat # использование процессора в среднем по ядрам и чтение/запись по дискам

    # ЦПУ
    lscpu # общая информация
    cat /proc/cpuinfo # подробная информация

    # ОЗУ
    cat /proc/meminfo # общая информация и потребление
    free -h # удобное представление на основе данных из файла meminfo
    ps aux --sort -rss # использование памяти по процессам

    # диски
    lsblk # общая информация
    df -h # просмотр занятного места по разделам
    du -сh <dir> # просмотр занятого места в каталоге

    # сеть
    /sys/class/net/<interface>/speed # просмотр максимальной скорости интерфейса

При необходимости уточняйте описание утилит и ключей выполнения в Интернете или в руководстве man.

Программный комплекс systemd

Зачем нужен systemd?

SystemD – это программный комплекс, состоящий из системных компонентов Linux. Основным компонентом является система инициализации системы SystemD, которая пришла на смену SystemV в большинстве современных дистрибутивов. Ядро Linux запускает процесс systemd, который, в свою очередь, запускает все остальные процессы системы.

SystemD предоставляет следующий функционал:

Что такое systemd unit?

SystemD Unit – это обычный текстовый файл в стиле ini, который декларативно описывает информацию о службах .service, устройствах .device, целях запуска .target и других типах модулей systemd.

Описание юнита состоих из нескольких секций:

Файлы systemd unit располагаются в следующих каталогах:

Редактировать и создавать юниты можно с помощью текстового редактора (например vi или nano).

Читать подробнее:

Практика

На практике пользователю необходимо просматривать различные systemd unit, просматривать их содержимое и управлять сервисами, а также читать журналы логов.

Ниже приведены несколько примеров наиболее часто используемых команд:

# руководство (справочная информация)
    man <utility> # просмотр справочной информации по утилите
    <utility> --help # просмотр справочной информации по утилите

    # просмотр юнитов
    systemctl # список юнитов (это псевдоним команды systemctl list-units)
    systemctl --type=service # юниты типа сервисы
    systemct | grep <keyword> # юниты, содержащие ключевое слово (полезно для быстрого поиска)
    systemctl cat <unit> # описание юнита

    # управление юнитами
    systemctl status <unit> # статус (состояние) юнита
    sudo systemctl daemon-reload # перезагрузка конфигурационных файлов в systemd
    sudo systemctl enable <unit> # включение сервиса в автозагрузку
    sudo systemctl disable <unit> # отключение сервиса из автозагрузки
    sudo systemctl start <unit> # запуск
    sudo systemctl stop <unit> # остановка

    # журналы логов
    journalctl -u <unit> # чтение логов по юниту
    journalctl -u <unit> --since today # чтение логов по юниту со смены дня 

При необходимости уточняйте описание утилит и ключей выполнения в Интернете или в руководстве man.

Сеть

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

Ниже приведены несколько примеров наиболее часто используемых команд:

# руководство (справочная информация)
    man <utility> # просмотр справочной информации по утилите
    <utility> --help # просмотр справочной информации по утилите

    # просмотр сетевых настроек сервера
    ip a # IP адреса
    ip n # ARP таблица
    cat /etc/resolv.conf # конфигурация DNS
    sudo netstat -tulpn # открытые порты
    sudo ss -tulpn # открытые порты (молодежный вариант)

    # диагностика сетевых проблем
    nslookup <hostname> # проверка разрешения DNS имени
    ping <host> # отправка ICMP пакетов до хоста
    traceroute <host> # трассировка до хоста UDP пакетами
    telnet <host> <port> # проверка доступности TCP порта на хосте
    nmap <host> # сетевое сканирование хоста
    nmap -p T:<port> <host> # проверка доступности TCP порта на хосте (молодежный вариант)
    nmap -p U:<port> <host> # проверка доступности UDP порта на хосте (молодежный вариант)

При необходимости уточняйте описание утилит и ключей выполнения в Интернете или в руководстве man.

 

Linux. От новичка к профессионалуLinux. От новичка к профессионалу 672 страницы · 2018 · 4.53 MB · русский by Колисниченко Д.Н.
Linux глазами хакераLinux глазами хакера 418 страниц · 2019 · 59.54 MB · русский by Михаил Фленов
Внутреннее устройство LinuxВнутреннее устройство Linux 322 страницы · 2017 · 124.18 MB · русский by Дмитрий Кетов
 
на главную сниппетов
Курсы