Что такое linux в ноутбуке
Перейти к содержимому

Что такое linux в ноутбуке

  • автор:

Linux

Linux — это семейство операционных систем (ОС), работающих на основе одноименного ядра. Нет одной операционной системы Linux, как, например, Windows или MacOS. Есть множество дистрибутивов (набор файлов, необходимых для установки ПО), выполняющих конкретные задачи.

«IT-специалист с нуля» наш лучший курс для старта в IT

Краткая история создания Linux

Линус Торвальдс — первый разработчик и создатель Linux. Именно в честь него и была названа ОС. В 1991 году Линус начал работу над собственной ОС семейства Unix. Через три года появилась первая версия, доступная для скачивания. Но тогда она имела очень низкий спрос — ей пользовались буквально несколько человек.

Только через 10 лет ОС Linux получила широкое распространение. Сообщество программистов подхватило идею свободного ПО, специалисты стали помогать развивать проект.

Про логотип

Логотип и талисман Linux — пингвин Tux с желтыми лапами и клювом. В 1996 году разработчики ядра Linux решили выбрать талисман. Торвальдс обмолвился о том, что ему очень нравятся пингвины. Поэтому на логотипе ОС изображен пингвин.

Логотип Linux

Профессия / 8 месяцев
IT-специалист с нуля

Попробуйте 9 профессий за 2 месяца и выберите подходящую вам

vsrat_7 1 (1)

Где нужен Linux?

Веб-серверы

Дистрибутивы Linux практически полностью захватили рынок веб-серверов. Согласно рейтингу аналитического агентства W3Techs, на Linux-серверах развернуты 75,1% сайтов.

Мобильные устройства

ОС Android работает на ядре Linux, поэтому она используется и в мобильных устройствах.

Суперкомпьютеры

Это специализированные вычислительные машины, превосходящие по своим техническим параметрам и скорости вычислений многие обычные компьютеры. Они уникальны, для многих из них требуется особая ОС, способная решать конкретные задачи. Благодаря открытому исходному коду разработчики могут видоизменять ОС так, чтобы она работала и на таких машинах.

Читайте также Самые востребованные IT-профессии 2024 года

Игровые консоли

Linux занял свою нишу и в игровых консолях, но ориентированных на эту ОС игр пока не так много. Компания Steam работает над исправлением ситуации — разрабатывает операционную систему SteamOS. Она будет поставляться вместе с игровой консолью Steam Machine.

Устройства IoT и умная техника

Многие из них созданы на основе Linux. Так, компания Samsung разработала операционную систему Tize, LG — WebOS, а Panasonic и Philips используют FirefoxOS.

Авиация и транспорт

Во встроенных компьютерах Tesla и машинах с автопилотами Google используется операционная система Linux. ПО для отслеживания трафика в США аналогично разработано на этой ОС, а администрация авиации Америки перешла на нее еще в 2006 году.

Какие компоненты у дистрибутива Linux?

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

Ядро

Что это такое, как работает и зачем нужно? Это так называемая главная программа, основная часть ОС. Ядро выступает в качестве посредника между устройствами ПК (видеокартой, процессором, оперативной памятью и пр.) и его ПО. Для этого в коде есть драйверы устройств. Они загружаются в память или подключаются по мере необходимости ресурса определенного устройства. Ядра управляют устройствами, процессами и памятью, обрабатывают системные вызовы.

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

Какие есть виды ядер? Всего выделяют 3 типа: микроядра, монолитные и гибридные.

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

Плюсы:

  • теоретически высокая степень надежности (по сравнению с другими архитектурами);
  • низкое потребление памяти;
  • легкое подключение дополнительных частей ядра (модульность).

Минусы:

  • низкая скорость из-за постоянного переключения между отдельными частями;
  • доступность аппаратных средств только через драйверы.

Станьте веб-разработчиком и найдите стабильную работу на удаленке

  1. Монолитное ядро (monolithic)

Противоположность микроядра. В памяти ПК всегда размещен весь (либо практически весь) код ядра. Поэтому скорость его работы выше в сравнении с микроядром.

Плюсы:

  • прямой доступ к аппаратным средствам;
  • простой обмен данными между процессами;
  • более высокая скорость реакции процессов.

Минусы:

  • большой размер;
  • меньшая степень безопасности (по сравнению с микроядром);
  • занимает много оперативной памяти.

Комбинация элементов двух ранее описанных архитектур. Для ускорения работы запускает модули операционной системы в пространстве ядра.

Плюсы:

  • возможность выбора того, что будет функционировать в пространстве ядра и пользователя;
  • меньший физический размер (в сравнении монолитным ядром);
  • большая степень гибкости.

Минусы:

  • более медленная работа;
  • выпуск драйверов устройств только производителями.

Ядро Linux — монолитное, при этом оно заимствует некоторые идеи из микроядерной архитектуры. Это означает, что вся ОС функционирует в пространстве ядра, а драйвера устройств могут легко загружаться (или выгружаться) непосредственно при работе операционной системы.

ядро Linux

Железо аппаратное обеспечение ПК с его периферийными устройствами.

Ядро основной компонент ОС, взаимодействует с аппаратным обеспечением, выступает посредником между низкоуровневым железом и компонентами верхнего уровня.

Оболочка — интерфейс для взаимодействия между ядром ОС и пользователями, абстрагирует внутреннее устройство системы, получает команды от пользователей, запускает необходимые функции.

Утилиты — служебные программы, дающие пользователю большую часть функциональных возможностей System OS Linux. Виды утилит: sed, cat, date, vi и прочие.

Компиляторы — технические средства, преобразующие программный код в машинный.

Системные утилиты

Утилиты — вспомогательные компьютерные программы в составе общего ПО. Они нужны для выполнения типовых задач, связанных с работой оборудования и ОС. У Linux есть набор простых утилит. Они позволяют, например, редактировать данные, изменять расположение файлов.

Системные библиотеки

Системные библиотеки — это специальные программы, дающие доступ к функциям ядра. Для выполнения какой-либо задачи ядро вначале получает системный вызов, исходящий от приложений. Но у каждого ядра свой набор системных вызовов, и они должны понимать формат выполнения задачи. Поэтому программисты разработали стандартную библиотеку процедур, описывающую набор системных вызовов для конкретной ОС.

Утилиты разработки ПО

При помощи трех вышеперечисленных компонентов операционная система сможет запускаться и функционировать. Но для обновления и создания новых программ нужно иметь дополнительные библиотеки и инструменты — toolchain. Этот набор программ, инструментов и утилит поможет создавать рабочее приложение из исходных кодов.

Пользовательские программы

Они не считаются обязательными компонентами ОС. Нередко их пишут сами пользователи. Программы помогают задать конкретную работу. К таким утилитам относятся браузеры, офисные пакеты, инструменты графического дизайна, плееры и пр.

Плюсы Linux

  • Бесплатное использование. Использование большинства ОС Linux и большей части программ, основанных на ней, абсолютно бесплатно.
  • Открытыйисходный код системы/программы. Благодаря доступу к исходному коду можно изучать его, изменять, распространять, а также публиковать изменения в соответствии с лицензией.
  • Актуальность и производительность. По сравнению с Windows Linux не устаревает со временем. То есть, чтобы восстановить первоначальную производительность, не нужно будет регулярно чистить или переустанавливать ОС, запускать дефрагментацию.
  • Безопасность. Linux поддерживает разные параметры безопасности, защищающие от вирусов, замедлений, вредоносных программ, сбоев. Это основная причина популярности ОС среди разработчиков. Конечно, Linux — не на 100% безопасная ОС, но менее уязвимая, чем другие.
  • Универсальность. Linux поддерживает практически все популярные языки программирования: Java, C/C++, Python, Ruby, C# и другие. Менеджер пакетов поможет установить и обновить целые и отдельные части компонентов ПО. Благодаря поддержке SSH можно быстро управлять серверами.
  • Дистрибутивы. Многие организации модифицировали ОС Linux, выпустив собственные дистрибутивы. Перечисляем наиболее популярные: Debian, Ubuntu, Linux Mint, Arch Linux, MX Linux, Fedora, Manjaro, CentOS. Linux Mint и Ubuntu подойдут начинающим пользователям, а Arch Linux, Fedora и Debian — опытным разработчикам. Дистрибутив можно собрать и самостоятельно.
  • Установка ПО из централизованного места— репозитория. Это место, где хранятся данные. Благодаря этому можно установить несколько программ одним щелчком мыши. Можно забыть о поиске кряков, серийных ключей и программ в интернете — с Linux это точно не понадобится.

Минусы Linux

  • Сложности с освоением ОС. Интерфейс большей части версий Linux значительно отличается от привычных Windows и MacOS.

Интерфейс Linux

  • Консоль и терминал. Консоль позволяет управлять операционной системой через ввод текста. Там же высвечиваются ответы ОС. Терминал — это современный аналог консоли, он отображается в виде окна на фоне рабочего стола.

Терминал Linux

  • Требование прав доступа к файлам для работы части программ. Для пользователя это значит, что придется вводить пароль по несколько раз в сутки.
  • Малое количество совместимых игр и программ (по сравнению с Windows). Сегодня это одна из основных причин, почему пользователи не переходят на Linux.

Поддержка и помощь

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

  • Общие форумы Linux: форум Linux.Org.Ru, Linux Forum.
  • Для Ubuntu: web-сайты Ubuntu Forums и AskUbuntu.
  • Для других: ссылки на поддержку размещены на ресурсе дистрибутива.

Fullstack-разработчик на Python

Fullstack-разработчики могут в одиночку сделать IT-проект от архитектуры до интерфейса. Их навыки востребованы у работодателей, особенно в стартапах. Научитесь программировать на Python и JavaScript и создавайте сервисы с нуля.

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

В последние несколько лет все больше и больше людей ищут возможность войти в ИТ или поглубже изучить 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 (или GNU/Linux) – семейство Unix-подобных операционных систем на базе ядра Linux, включающих тот или иной набор утилит и программ проекта GNU. Linux-системы распространяются в виде различных дистрибутивов, имеющих свой набор системных и прикладных компонентов (как свободных, так и проприетарных).

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

Дистрибутив Linux — это операционная система, созданная на основе ядра Linux, которая включает в себя набор библиотек и утилит (пакетов), разработанных в рамках проекта GNU, а также систему управления пакетами (менеджер пакетов). В настоящее время существует более 500 различных дистрибутивов, разрабатываемых как при коммерческой поддержке (Red Hat / Fedora, SLED / OpenSUSE, Ubuntu и др.), так и исключительно усилиями добровольцев (Debian, Slackware, Gentoo, ArchLinux и др.).

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

  • RPM-based (используют формат пакетов .rpm)
    RedHat Enterprise Linux, CentOS, Fedora
  • DEB-based (используют формат пакетов .deb)
    Debian, Ubuntu, Astra Linux

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

Работа с Linux

Загрузка

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

  • BIOS / UEFI → MBR / GPT
    Выполняется код, заложенный производителем аппаратного обеспечения. Этот код проводит тестирование системы POST (Power On Self Test) и передает управление загрузчику в MBR (Master Boot Record) / GPT (GUID Partition Table)
  • MBR / GPT → GRUB2 (существуют и другие загрузчики)
    Загрузчик из MBR / GPT очень простой – он способен только найти на диске и запустить следующий загрузчик. Как правило это GRUB2, но существуют и другие загрузчики, например LILO (в настоящее время практически не используется)
  • GRUB2 → Kernel
    GRUB2 расположен на разделе жесткого диска в каталоге /boot. GRUB2 загружает ядро Linux (vmlinuz)
  • Kernel → Init
    Ядро запускает процесс инициализации операционной системы. Как правило это SystemD, но существуют и другие системы инициализации, например SystemV (в настоящее время практически не используется). Процесс инициализации запускает все остальные процессы в системе

Подключение

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

Подключиться к 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) почти всегда учитывается регистр, включая имена файлов и каталогов, команды, аргументы и опции.

SSH

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

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

  • Windows
    PuTTY – выбор новичка, PowerShell (команда ssh), Xshell – выбор автора, MobaXterm, mRemoteNG
  • Linux
    Terminal (команда ssh) – выбор новичка и автора, Asbru Connection Manager
  • MacOS
    Terminal (команда ssh) – выбор новичка и автора, Core Shell
  • SSH
  • Как подключиться по SSH
  • Лучшие SSH клиенты для Windows, Linux и MacOS

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

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

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

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

  • DEB (.deb)
    ОС – DEB-based, например Debian, Ubuntu, AstraLinux
    Система управления пакетами – DPKG (работает только с локальными пакетами)
    Пакетный менеджер – apt
  • RPM (.rpm)
    ОС – RPM-based, например RedHat Enterprise Linux, Fedora, CentOS
    Система управления пакетами – RPM (работает только с локальными пакетами)
    Пакетный менеджер – yum (в последних дистрибутивах заменен на dnf)
Практика

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

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

# руководство (справочная информация) man # просмотр справочной информации по утилите --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 являются файлами. Существуют следующие типы файлов:

  • Обычные файлы
    Символьные и двоичные данные (текст, картинки, программы и др.)
  • Каталог (директория) d
    Список ссылок на файлы или другие каталоги
  • Символьные ссылки l
    Ссылки на другие файлы по имени
  • Блочные устройства b, символьные устройства c
    Интерфейсы для взаимодействия с аппаратным обеспечением (диски, терминалы, клавиатуры, принтеры и др.). Когда происходит обращение к файлу устройства, ядро операционной системы передает запрос драйверу этого устройства
  • Сокеты s и каналы p
    Интерфейсы для взаимодействия процессов
Структура файловой системы

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

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

  • /bin (binaries) – исполняемые файлы самых необходимых утилит. Может быть символьной ссылкой на /usr/bin
  • /boot – файлы, необходимые для самого первого этапа загрузки – загрузки ядра (и обычно само ядро)
  • /dev (devices) – блочные и символьные файлы устройств (диски, терминалы, клавиатуры, принтеры и др.)
  • /etc (etcetera) – конфигурационные файлы системы и различных программ
  • /home – домашние каталоги пользователей для хранения «личных» файлов
  • /lib (libraries) – файлы библиотек (стандартных функций, необходимых многим программам), необходимых для работы утилит. Может быть символьной ссылкой на /usr/bin
  • /mnt (mount) – каталог для подключения файловых систем (съемных носителей и др.)
  • /opt (optional) – каталог для дополнительных программ (проприетарных драйверов, агентов мониторинга и др.)
  • /proc (process) – файлы в оперативной памяти, в которых содержится информация о выполняемых в системе процессах
  • /root – домашний каталог пользователя root
  • /sbin (system binaries) – файлы системных утилит, необходимые для загрузки, резервного копирования и восстановления системы. Может быть символьной ссылкой на /usr/sbin
  • /sys (system) – виртуальная файловая система sysfs, которая содержит информацию об аппаратном обеспечении (ЦПУ, ОЗУ, дисках, сетевых устройствах), драйверах, ядре системы и др.
  • /tmp – каталог для временных файлов, обычно зачищается при каждой загрузке системы
  • /usr – пользовательский каталог, который содержит каталоги исполняемых файлов и конфигурационных файлов
  • /var (variable) – файлы, создаваемые или используемые различными программами (логи, очереди, идентификаторы процессов, БД и др.)
Права доступа

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

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

  • права для владельца (u, user) – read, write, execution
  • права для группы владельца (g, group) – read, write, execution
  • права для остальных пользователей (o, other) – read, write, execution

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

  • Владельцы файлов и папок в Linux
  • Команда chmod в Linux
Практика

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

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

# руководство (справочная информация) man # просмотр справочной информации по утилите --help # просмотр справочной информации по утилите # навигация ls -la # просмотр содержимого каталога (в том числе прав доступа) cd # переход в каталог # каталоги mkdir # создание каталога rmdir # удаление пустого каталога rm -rf # удаление каталога с файлами # файлы cat # вывод файла в консоль less # постраничный вывод файла tail # вывод последних строк («хвоста») файла vi # редактиврование файла текстовым редактором vi nano # редактирование файла текстовым редактором nano cp  # копирование файла в каталог mv  # перемещение файла в каталог (для переименования переместите файл в тот же каталог) rm # удаление файла rm -rf /* # удаление всех файлов в каталоге # права доступа chown  # установить пользователя владельцем каталога chown :  # установить владельца и группу владельца каталога chmod 644 # установить права доступа rw- r-- r-- (чтение и запись для владельца, чтение для группы владельца, чтение для остальных пользователей) сhmod 740 # установить права доступа rwx r-- --- (чтение, запись и исполнение для владельца, чтение для группы владельца) chmod u+w # добавить владельцу право на запись файла

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

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

Процессы

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

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

  • Выполнение (R, Running)
    Выполнение или ожидание ЦПУ для выполнения
  • Сон (S, Sleep)
    Прерываемое программно ожидание
  • Непрерываемый сон (D, Direct)
    Ожидание «прямого» сигнала от аппаратной части для прерывания
  • Приостановлен (T, Tracing)
    Отладка
  • Зомби (Z, Zombie)
    Выполнение завершено, однако ресурсы не освобождены

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

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

Практика

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

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

# руководство (справочная информация) man # просмотр справочной информации по утилите --help # просмотр справочной информации по утилите # процессы top sudo ps aux sudo kill -9 # убийство процесса по PID sudo killall -s 9 # убийство всех процессов по имени # утилиты для мониторинга использования ресурсов htop # использование ресурсов по процессам (может потребоваться установка пакета htop) nmon # использование процессора по ядрам, памяти, дисков и др. (может потребоваться установка пакета nmon) iostat # использование процессора в среднем по ядрам и чтение/запись по дискам # ЦПУ lscpu # общая информация cat /proc/cpuinfo # подробная информация # ОЗУ cat /proc/meminfo # общая информация и потребление free -h # удобное представление на основе данных из файла meminfo ps aux --sort -rss # использование памяти по процессам # диски lsblk # общая информация df -h # просмотр занятного места по разделам du -сh # просмотр занятого места в каталоге # сеть /sys/class/net//speed # просмотр максимальной скорости интерфейса

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

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

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

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

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

  • Запуск служб при старте системы (по возможности параллельно) по различным таргетам (target, аналог уровней загрузки в SystemV)
    Обеспечивается обратная совместимость с системами инициализации SystemV и LSB
  • Контроль состояния запущенных служб
  • Управление устройствами, входом в систему, сетевыми подключениями, ведение журнала событий
  • Интерфейсы для реализации функциональных возможностей ядра – cgroups, autofs, kdbus
  • Набор утилит для управления системой – systemctl, journalctl и др.

Что такое systemd unit?

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

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

  • Unit
    Description (краткое описание), After (ожидание запуска), Requires (обязательная зависимость) и др.
  • Service
    Type (тип) – по умолчанию Simple, ExecStart (команда для запуска), ExecStop (команда для остановки) и др.
  • Install
    WantedBy (таргет или уровень запуска, на котором юнит должен запуститься)

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

  • /etc/systemd/system – юниты, создаваемые администраторами
  • /usr/lib/systemd/system – юниты из установленых пакетов
  • /run/systemd/system – юниты, создаваемые во время работы системы (в runtime)

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

  • Применение systemd: только самое главное
  • Понимание systemd юнитов
  • Примеры systemd unit – NGINX, Apache
Практика

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

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

# руководство (справочная информация) man # просмотр справочной информации по утилите --help # просмотр справочной информации по утилите # просмотр юнитов systemctl # список юнитов (это псевдоним команды systemctl list-units) systemctl --type=service # юниты типа сервисы systemct | grep # юниты, содержащие ключевое слово (полезно для быстрого поиска) systemctl cat # описание юнита # управление юнитами systemctl status # статус (состояние) юнита sudo systemctl daemon-reload # перезагрузка конфигурационных файлов в systemd sudo systemctl enable # включение сервиса в автозагрузку sudo systemctl disable # отключение сервиса из автозагрузки sudo systemctl start # запуск sudo systemctl stop # остановка # журналы логов journalctl -u # чтение логов по юниту journalctl -u --since today # чтение логов по юниту со смены дня 

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

Сеть

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

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

# руководство (справочная информация) man # просмотр справочной информации по утилите --help # просмотр справочной информации по утилите # просмотр сетевых настроек сервера ip a # IP адреса ip n # ARP таблица cat /etc/resolv.conf # конфигурация DNS sudo netstat -tulpn # открытые порты sudo ss -tulpn # открытые порты (молодежный вариант) # диагностика сетевых проблем nslookup # проверка разрешения DNS имени ping # отправка ICMP пакетов до хоста traceroute # трассировка до хоста UDP пакетами telnet  # проверка доступности TCP порта на хосте nmap # сетевое сканирование хоста nmap -p T:  # проверка доступности TCP порта на хосте (молодежный вариант) nmap -p U:  # проверка доступности UDP порта на хосте (молодежный вариант)

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

Все статьи серии:

  1. Основы Linux (обзор с практическим уклоном)
  2. Основы виртуализации (обзор)
  3. Основы контейнеризации (обзор Docker и Podman)
  4. Основы мониторинга (обзор Prometheus и Grafana)

Что такое Linux? Статья-шпаргалка для новичков

Салют! Это статья — попытка систематизировать некие базовые знания об Linux’ах, которая может быть полезна для продвинутых пользователей, разработчиков и админов Windows, которые еще не имели (или имели крайне небольшой и отрывочный) опыт работы с Linux системами и не знают, с чего начать, однако хотят попробовать — сами, или по причине производственной необходимости. Каждый пункт содержит не исчёрпывающие сведения, а лишь отправные пункты для дальнейшего изучения (гуглежа) материала.

  1. Linux Kernel aka Ядро
  2. GNU Core Utilities (coreutils)
  3. Bash — интерпретатор командной строки
  4. Системы управления пакетами и пакетные менеджеры
  5. Init systems — системы инициализации
  6. systemd
  7. Ваш первый вход на сервер
  8. Управляем пользователями
  9. Сети
  10. FHS — Filesystem Hierarchy Standard — навигация в файловых системах Linux
  11. Window system / display server — сервер экранов
  12. Полезные ссылки и список литературы для изучения

Если интересно — прыгайте под кат

А что такое Linux?

Под именем Linux сегодня люди понимают одну из двух вещей:

  1. Операционные Системы на базе GNU/Linux, или, как их по-другому называют, дистрибутивы. Наиболее популярные RedHat/CentOS, Debian, Ubuntu и другие. Маленькая часть из них была представлена на КДПВ 🙂
  2. Ядро Linux и, опционально, набор программ GNU coreutils.

Несколько слов об ядре.

Давайте я расскажу вам чуть больше о GNU/Linux ядре.

Первое, вы должны знать, что все ядра ОС бывают трех типов:

  • микроядро;
  • монолит (Linux);
  • гибрид (OS X, Windows 7).

Основная разница между монолитным и микроядром в том, что микроядра включают только:

  • IPC (систему межпроцессного взаимодействия), управление памятью, планировщик и диспетчер.

В то время как монолитные ядра также включают в себя:

  • Файловую систему (системы), драйвера, VFS (в случае с Linux kernel).

Ядро Линукса занимается:

  • Управлением процессами.
  • Управлением памятью.
  • Взаимодействием с устройствами (через драйвера).
  • Системными вызовами и безопасностью.

Все программы, запускаемые пользователем, работают в так называемом пользовательском пространстве (user space). Эти программы взаимодействуют с ядром через интерфейс системных вызовов (system call interface, SCI). Также, Ядро ограничивает доступ к ЦПУ, памяти для пользовательских программ, в то время как код из ядра имеет неограниченным доступ к ресурсам компьютера. Все пользовательские программы взаимодействуют с друг другом при помощи межпроцессной коммуникации (interprocess communication, IPC)

Так же, несмотря на то, что большинство считает Ядро монолитным, оно использует модули. Модули могут быть встроенными или подгружаемыми. Последние могут быть включены или выключены во время работы ОС. Больше про модули можно прочесть на АрчВики

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

GNU Core Utilities (coreutils)

GNU Core Utilities (coreutils) — набор программ, системных утилит, которые есть почти на всех GNU/Linux сборках. Он включают в себя:

довольно много утилит

  • chmod — изменяет разрешения на файлах;
  • chown — изменяет владельца файла и его группу;
  • chroot — изменяет корневую (root) директорию;
  • cp — копирует файлы и директории;
  • dd — копирует, конвертирует файлы;
  • df — показывает свободное место на файловой системе;
  • du — показывает занятое место на файловой системе;
  • ln — создаёт ссылки;
  • ls — показывает содержимое директории;
  • mkdir — создает директорию;
  • mv — перемещает (переименовывает) файлы;
  • rm — удаляет файлы;
  • rmdir — удаляет пустые директории;
  • touch — изменяет таймметку на или создает пустой файл;
  • basename — выводит имя файла без пути до него, если указано, удаляет расширение файла;
  • cat — выводит содержимое файла в терминал (стандартный вывод);
  • comm — сравнивает построчно два файла;
  • cut — выводит только определенные части строк из файла в терминал;
  • dirname — оставляет только путь, удаляя имя файла из его полного пути;
  • echo — выводит в терминал строку текста;
  • expand, unexpand — конвертирует табы в пробелы и обратно;
  • false — возвращает ошибочный статус выхода из приложения;
  • fmt — форматтер текста;
  • fold — разбивает строчку на сегменты фиксированной ширины;
  • head — выводит первую строку файла;
  • join — соединяет две строки из разных файлов по общему полю;
  • md5sum — считает MD5 хэш;
  • paste — соединяет строки файлов;
  • pr — конвертирует файлы для печати;
  • seq — выводит числовые последовательности;
  • sleep — приоставналивает выполнение на указанное время;
  • sort — сортирует строки текстовых файлов;
  • split — разделяет файл на части;
  • tail — выводит последнюю часть файла;
  • tee — отправляет вывод в разные файлы;
  • test — проверяет типы файлов и сравнивает значения;
  • tr — переводит или удаляет символы;
  • true — возвращает успешный статус выхода;
  • uniq — удаляет повторяющиеся строки в отсортированном файле;
  • wc — выводит количество байт, слов и строк в файле;
  • yes — выводит одну и ту же строчку;
  • date — выводит или устанавливает текущую дату и время;
  • env — выводит или изменяет текущие параметры окружения (environment);
  • groups — выводит группы, в которых пользователей состоит;
  • hostname — выводит или устанавливает имя компьютера;
  • id — выводит uid/gid пользователя;
  • nice — изменяет приоритет планировщика;
  • pwd — — выводит текущую директорию (полный путь);
  • su — позволяет вам получить id другого пользователя (переключиться в него). Чуть больше особенностей su в Debian;
  • uname — выводит системную информацию;
  • who — выводит список всех пользователей, которые сейчас залогинены в системе in;
  • whoami — выводит текущий id пользователя.

Также туда входят следующие утилиты:

chgrp, cksum, csplit, dir, dircolors, expr, factor, hostid, install, link, logname, mkfifo, mknod, nl, nohup, od, pathchk, pinky, printenv, printf, ptx, shred, stty, sum, sync, tac, tsort, tty, unlink, users, vdir

Мои коллеги очень просили добавить меня следующее: вы всегда можете получить справку, напечатав `man name_of_the_tool`. Альтернативный вариант, чтобы получить справку, который является более-менее стандартным для всех CLI (command line interface) утилит, это `name_of_the_tool —help`. Наконец, еще один вариант, где найти документацию на команду, это впечатать `info name_of_the_tool`.

Теперь, когда мы уже чуть-чуть знаем об ядре, системных утилитах, нам нужно познакомиться еще с несколькими моментами, и мы сможем начать работать с нашей машиной под управлением GNU/Linux, и начать, пожалуй, стоит со среды, в которой выполняются все вышеуказанные программы — в командной строке Bash.

Bash — интерпретатор командной строки

Теперь я хочу вам рассказать о командной строке в Linux. Командная строка — это интерфейс для ввода команд, а Bash — оболочка (shell) и интерпретатор команд. Большинство людей знакомы с command.com в DOS, Windows или более новым и продвинутым PowerShell, то вот сюрприз о Linux’e: их здесь много. Целое семейство разных интерпретаторов. Некоторые из них проще, другие сложнее, какие-то имеют маленький размер, и так далее. Факт в том, что если вы будете работать с Linux серверами, вы будете работать с одним из них.

Bash является оболочкой по умолчанию в Linux дистрибутивах на протяжении многих лет, и используется в RHEL/CentOS, Oracle Linux и так далее. Но у него есть популярные альтернативы: Dash (Debian, Ubuntu), zsh, и другие. Они все в целом похожи друг на друга, потому что поддерживают стандарт POSIX, но имеют небольшие отличия в деталях.

Bash — Bourne Again Shell, имя которого является игрой слов на тему Bourne — born (рожденный). Борн — фамилия автора оригинальной командной строки Bourne shell (1979) или просто shell для Version 7 Unix. Первая версия Bash была написана Брайаном Фоксом, и вышла в свет в 1989, как одна из попыток заменить проприетарный Bourne Shell открытым продуктом. В свою очередь, Bash, сохраняя совместимость с оригинальным интерпретатором, принёс много новых фич, а также взял некоторые идеи из других проектов. Так, команда `history` была “позаимствована” из проектов csh и ksh.

Системы управления пакетами

В то время как в Windows, вы обычно идёте на какой-то сайт, скачиваете exe файл программы или инсталлятора, копируете или устанавливаете его, в Linux системах, обычно это делается по-другому. Хотя да, вы всё ещё можете скачать файл и установить его, но это считается наименее популярным методом установки.

Наиболее популярный — установка с помощью системы управления пакетами.

Любая из них делает следующее:

  1. Устанавливает пакеты (программы), включая их зависимости.
  2. Обновляет их.
  3. Деинсталлирует их.

Почему я отдельно указал на установку зависимостей? Дело в том, что пока Windows программы обычно хранят их зависимости в той же папке, что и программа (\*.dll файлы, к примеру), в Linux системах зависимости устанавливаются в общую для всех программ директорию с целью последующего переиспользования данных зависимостей и библиотек. Обычно, \*.so — расширение файлов библиотек в Linux.

Конечно, с появлением платформы .Net Framework, проблема значительно облегчилась и тем самым сократилось количество необходимых зависимостей, но, тем не менее, это то, как это работает в Windows.

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

Существуют две наиболее популярные системы управления пакетами для GNU/Linux.

Первая называется Yum (или DNF). В ней используется пакетный менеджер RPM (RPM Package Manager). Используется в следующих дистрах:

  • RedHat Enterprise Linux/CentOS
  • Fedora
  • Oracle Enterprise Linux
  • SUSE/OpenSUSE (опционально, а родной — zypper)

Вторая — Apt. В качестве пакетного менеджера использует dpkg. Наиболее популярные дистрибутивы с ней:

Slackware, Arch используют свои собственные пакетные менеджеры: slackpkg и pacman.

Каждая Linux система, которая идет с предустановленной системой управления пакетами, содержит преднастроенные Интернет-репозитории (или, как иначе говорят, репы — такой вот жаргонизм). Так же, системный администратор может легко добавить свои собственные репозитории.

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

rpm -i filename.rpm

Это установит пакет в RHEL/CentOS, Fedora, Oracle Linux, SUSE/OpenSUSE

однако, лучше все же сделать вот так:
dnf install https://mirror.yandex.ru/epel/9/Everything/x86_64/Packages/e/epel-release-9-3.el9.noarch.rpm
dnf install ./skype.rpm
— спасибо aim

dpkg -i filename.deb

однако, лучше все же сделать вот так:
apt install ./filename.deb — спасибо WASD1

Это установит пакет в Debian, Ubuntu, Linux Mint

Еще одна возможность для пользователей ПК. В последнее время, часть разработчиков софта для конечных пользователей решила использовать дистрибутиво-независимые пакетные менеджеры. Для этого, все зависимости упаковываются в один файл. Наиболее популярные варианты: Snap, Flatpak, AppImage. Первые два предлагают возможность обновление установленного через них ПО с помощью загрузки обновлений из их репозиториев, AppImage не имеет такой возможности. Snap идёт предустановленным в Ubuntu, начиная с 16.04 LTS.

Система инициалиазации

Другая подсистема, которая не является частью Ядра, но является второй по значимости после него — это init система, которая используется для инициализации пользовательского пространства (user space) и управлением пользовательских процессов.

Здесь есть несколько альтернатив, давайте обозначим наиболее популярные из них:

  • SysVinit (sysvinit, sysv, или просто ‘init’) — прямой потомок (порт) системы инициализации из ОС UNIX’ System V. Был наиболее популярной системой инициализации на протяжении 20+ лет (1991-2011).
  • Upstart — первая хорошая попытка заменить SysVinit, которая исправляла его недостатки, но позже популярность этого решения сошла на нет. Первоначально разработана Canonical в 2006. Сегодня единственная ОС (хоть и не GNU/Linux), которая его использует, это Chrome OS.
  • OpenRC — легковесный, простой аналог sysvinit. Используется в Gentoo Linux, Alpine Linux, и некоторых других легких дистрибутивах.
  • systemd — сегодняшнее решение в большинстве Linux дистрибах.

Особняком стоит Slackware, популярный дистрибутив, который использует собственное BSD-подобное решение в качестве системы инициализации.

В Линуксе, все процессы имеют номер (Process ID, PID). При загрузке ядро инициализирует все внутренние структуры и запускает первый пользовательский (user space) процесс с PID 1 — как правило, это система инициализации. Она же является родителем для любых пользовательских процессов. Кстати, полезная штука — в Linux отображаются не только PID собственно процесса, но и его родителя. Посмотреть родителей можно так:
ps -efj

Так случается, что в процессе завершения процессов, иногда остаются процессы, у которых не осталось родителя (технически, их родителем становится init) — такие процессы называются осиротевшими (orphaned processes) и указывают на возможное наличие проблем на данной системе. Другой момент, с которым тоже, возможно, придется столкнуться — это процессы, которые отображаются с состоянием Terminated (завершены). Такие процессы, в свою очередь, называются зомби -процессами (zombie-processes).

systemd

Скорее всего, вы будете работать с этой системой инициализации. Самое главное, пожалуй, с чего стоит начать знакомство, это с утилит systemctl и journalctl. У первой довольной простой синтаксис
systemctl command service . К примеру, systemctl status networking покажет текущее состояние демона (службы) сетевых интерфейсов. systemctl restart mysql перезагрузит демона сервера MySQL. stop/start сделают остановку или запуск указанного демона.

Для отладки придётся часто заглядывать в журнал и искать там ошибки,
journalctl -xe .

С помощью systemd можно сделать из обычной программы программу-сервис.

Больше о systemd можно прочесть здесь: en.wikipedia.org/wiki/Systemd

Ваш первый вход на Linux сервер

Конечно, вы можете подключиться к серверу с помощью клавиатуры, мышки и монитора. Но обычно большинство людей подключаются к серверам удаленно. Для этих целей служит сервис (демон) sshd (ssh daemon, или ssh server). Он слушает 22 TCP порт. Позволяет подключаться как с логином-паролем, так и с помощью ключей. Настройки входа зависят от конкретной инсталляции.

В 10-ку, с определенного момента, встроен ssh клиент. Для более старых версий Windows есть клиент Putty — маленький, простой, бесплатный клиент для входа на удаленные Linux сервера. Должен отметить, что Putty не мог входить по обычной паре ключей и нуждался в ключе в формате ppk — здесь инструкция, как сконвертировать ключ в нужный формат.

Если вы хотите настроить вход по ключу, вам надо сгенерировать пару ключей (приватный и публичный), вписать содержимое публичного ключа на удаленном сервере в файл authorized_keys, который расположен в папке ~/.ssh . ~ — обозначает домашнюю директорию пользователя, ‘.’ — что файл или папка — скрытые. Если папка не существует, её нужно создать командой mkdir .ssh , перейти в неё командой cd .ssh , далее создать файл vi authorized_keys . Важный момент — чтобы выйти из текстового редактора vi, нажмите esc , потом впечатайте :wq (выйти с записью). После этого нужно установить корректные разрешения на этот файл с помощью команды chmod 0600 authorized_keys . Где 0600 обозначает, что пользователю-владельцу разрешено читать (4) и изменять (2) — а потому, в сумме, 6 — этот файл, пользователям из его группы (0) и другим пользователям (0) не разрешено ничего с этим файлом.
А еще есть «человеческий» метод: ssh-copy-id

Кроме того, система разрешений еще может указывать на исполняемость файла (1). Так, к примеру, пользователь может разрешить другим пользователям запускать какой-то файл, и тогда права будут 0755 — себе полные права (4+2+1), остальные пользователи могут считать (4) и запустить (1) исполняемый файл.

Часто разрешения представлены в текстовой форме. Так, rwx значит 7, rw- значит 6, r-x значит 5, and so on. К примеру, r—r—r— значит 444 — файл только для чтения для всех пользователей, включая владельца.

Управление пользователями

В большинстве случаев новый сервер будет выдан с рутовой учетной записью (пользователем root), которая является суперпользователем (“админом” в терминах Линукс систем). Однако, очень рекомендуется не использовать root пользователя в ежедневной работе. Для этого, вам нужно научиться управлять пользователями. Это довольно просто и логично:

  • useradd — создает нового пользователя, ключ -d позволяет указать домашнюю директорию;
  • usermod — изменяет пользователя;
  • userdel -r — удаляет пользователя и его домашнюю папку;
  • passwd $username — меняет пароль пользователя.

Есть команда chage (-l) , которая позволяет установить (посмотреть) срок истечения пароля, а также есть опция для блокировки пользователя целиком или только для входа в систему (поведение и точная команда зависит от дистра)

Сети

Раньше, наиболее популярным пакетом с сетевыми утилитами был net-tools. Он предоставлял такие утилиты как ifconfig (просмотр сетевых интерфейсов), netstat (просмотр сетевых соединений), и другие полезные утилиты.

Но всё течет, всё меняется, и теперь пакет net-tools не установлен по умолчанию, будучи замененным на более современный пакет iproute2.

Так, ifconfig был заменен на ip addr , ip link , ip -s ;
arp заменен на ip n ,
iptunnel на ip tunnel , iwconfig на iw , nameif на ip link .
netstat заменен на ss ,
netstat -r на ip route ,
netstat -i на ip -s link ,
netstat -g на ip maddr .

Настройка и конфигурирование сетевых адаптеров имеет несколько «базовых» вариантов, поэтому лучше искать как это делается конкретно в вашем дистрибутиве (не забывая указывать его версию).
Так, к примеру, в RedHat настройки интерфейсов живут по адресу
/etc/sysconfig/network-scripts/ .
В относительно старых Ubuntu
/network/interfaces ,
а в новых всё делается через утилиту netplan, а сами конфиги можно найти здесь:
/etc/network/interfaces

В ряде систем (не везде) установлен NetworkManager, и тогда статические конфигурации могут быть найдены здесь:
/etc/NetworkManager/NetworkManager.conf
Проверить, установлен ли у вас NetworkManager можно следующим путём:
/usr/sbin/NetworkManager —version или nmcli —version

В завещании, меня просили упомянуть
Васю кхм, systemd-networkd. Исправился, упомянул.

Также стоит отметить про встроенный «файерволл» — в старых системах использовался iptables, который задавал правила для компонента ядра Netfilter; сейчас рекомендуется использовать утилиту ufw, надстройку над iptables, как обладающую более человекопонятным интерфейсом.

FHS — стандарт иерархии файловой системы (Filesystem Hierarchy Standard)

Я когда-то любил простоту Windows. A:\ для флоппика (да, я достаточно старый), C:\ для системы, и зачастую, единственный диск вообще (если нет, то D:\ для дистрибутивов игр, фото и видео), и, наконец, E:\ для CD-ROM. Всё просто!

А теперь я покажу минимальный минимум, который вам встретится в большинстве дистрбов, лол:

/
/boot — файлы загрузчика
/dev — файлы устройств
/root — домашняя папка для пользователя root (опционально). Может быть слинковано с /home/root
/etc — хранит конфигурацию машины
/home — корневая директория для “хомяков” пользователей
/lib — хранит важные общие библиотеки и модули ядра
/media — точка монтирования к извлекаемым накопителям
/mnt — точка монтирования для временно подключенных файловых систем (флешки, внешние диски, сетевые диски)
/usr — сюда попадает установленное пользователями ПО
/opt — сюда тоже попадает установленное пользователями ПО
/var — здесь хранятся вещи, которые не статичны. К примеру, логи /var/logs
/sbin — системные исполняемые файлы
/bin — общие (расшаренные) исполняемые файлы
/srv — для хранения данных сервисов (веб-серверов, к примеру)
/tmp — временный раздел, данные в нём могут быть удалены при перезагрузке сервера, выходе пользователя, остановки сервиса и так далее.

Большинство файлов могут быть поделены на четыре группы по двум признакам:
“Расшариваемые”-”Не расшариваемые” (“shareable”-”unshareable”).

“Расшариваемые’ файлы хранятся на одной машине и могут быть доступны с других. «Нерасшариваемые» — файлы, которые не предназначены для организации общего доступа.

“Статичные” — “Изменяемые (“static”-”variable”).

«Статичные» файлы включают в себя библиотеки, бинарники, документацию и тп, которые меняются только при участии системного администратора.

«Изменяемые» файлы это файлы, которые не статичны и могут быть изменены во время работы системы, пользователей или программ. К примеру, при организации резервного копирования, такие файлы нуждаются в более частом расписании бэкапов.

Понимание этого концепта облегчит понимание стандарта иерархии и организации файловой системы.

Кроме того, есть смысл сказать об inodes — файловых дескрипторов. Они содержат метаинформацию о создаваемых файлах, и, в некоторых инсталляциях, могут тупо закончиться, если вы пишете на диск много маленьких файлов (например, лог чата). При этом места свободного может быть много, но создать новые файлы вы не сможете. Проверить текущее состояние можно командой df -hTi .

Что хочется написать дополнительно — что если в Windows ФС по умолчанию — NTFS, то в Linux их гораздо больше, среди популярных стоит отметить — ext3, ext4, xfs, btrfs. Каждая используется в тех или иных дистрах, имеет свои преимущества и недостатки.

Window server/Display system

Хорошо, теперь, когда вы начитаны о командной строке, вы думаете — ага, именно поэтому Linux не популярен среди обычных пользователей! К счастью, не по этой причине. Linux имеет два популярных сервера дисплеев на текущий момент: X11 server (легаси, но все еще самая популярная опция) и Wayland. Последний находится в экспериментальном статусе уже около десяти лет. Поверх дисплей сервера устанавливаются десктопные окружения (Desktop Environments, DE), которых ну очень много. Самые популярные: Gnome, KDE, Unity, и другие. Если установлен дисплей сервер и десктопное окружение, то система выглядит почти как обычный ПК. С окошками, рабочим столом, панелью и прочим.

Полезные ссылки

  • wiki.archlinux.org — Вики дистрибутива Арч
  • wiki.gentoo.org/wiki/Main_Page — Вики дистрибутива Генту
  • codernet.ru/books/linux/Evi_Nemet_i_dr_Unix_i_Linux_Rukovodstvo_sistemnogo_administratora — Unix и Linux руководство системного администратора от Эви Немет
  • codernet.ru/books/linux/komandnaya_stroka_linux_polnoe_rukovodstvo — Командная строка Linux. Полное руководство. Уильям Шоттс
  • distrowatch.com/images/other/distro-family-tree.png — “дерево” дистрибутивов (чтобы оценить, насколько далеко зашла страсть к созданию новых дистрибутивов)

На эти книги (курсы) я ссылок не дам, но ищущий да найдет:

RH124: Red Hat System Administration I
RH134: Red Hat System Administration II
RH254: Red Hat System Administration III
RH342: Troubleshooting and Diagnostic
RH442: Performance Tuning

Причем, материалы курсов доступны и на русском языке.

www.linuxfromscratch.org — Собираем свой дистрибутив с нуля. Как водится, у него тоже есть форки, но это отличное пособие для того, чтобы понять, что делают мейнтейнеры дистрибутивов и разобраться в этой “кухне”.

P.S.: я не настоящий Linux админ и никогда им не был, поэтому, если вы найдете какие-то замечания — пишите, всё поправлю. Однако, когда я переходил с Windows на Linux (Ubuntu 12.04) и начинал разрабатывать в нём, мне подобной статьи не хватало.

  • Блог компании Timeweb Cloud
  • Системное администрирование
  • *nix
  • Серверное администрирование
  • Разработка под Linux

Что такое Linux: гайд по самой свободной операционной системе

Смеёмся в лицо опасности и делаем первый шаг к пониманию философии open source.

Иллюстрация: Оля Ежак для Skillbox Media

Марина Демидова

Марина Демидова

Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.

Даже если вы никогда не имели дела с Linux, дух этой системы присутствует почти во всём, чем вы пользуетесь ежедневно. Без Linux остановится работа серверов, банкоматов и платёжных терминалов, выйдут из строя почти все умные телевизоры, а также 70% смартфонов по всему миру.

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

Содержание

  • Что такое Linux
  • Как она создавалась
  • Для чего используется
  • Из каких элементов состоит
  • В чём её плюсы и минусы
  • Стоит ли переходить на Linux?

Что такое Linux

Технически Linux — это не единая система, а целое семейство систем на базе ядра Linux. Ядро — это главный программный модуль, который отвечает за базовые возможности системы, например работу с памятью и железом.

Фишка ядра Linux в том, что оно бесплатное и распространяется по лицензии open source. Это значит, что каждый разработчик может взять ядро и настроить по своему вкусу: добавить модули и программы, нарисовать любой интерфейс, внедрить продвинутые алгоритмы защиты и так далее.

Когда на основе ядра Linux собирают свою операционку, результат называют дистрибутивом. Дистрибутивов великое множество — по разным оценкам, около 600. Как правило, они решают какую-то конкретную задачу — например, Gentoo заточен на скорость, Ubuntu — на простоту и удобство, а Kali Linux сделан для инженеров по кибербезу.

Важно понимать, что, когда кто-то говорит «установить Linux», обычно имеется в виду установка какого-то дистрибутива на базе ядра Linux. Не существует отдельного образа Linux, который можно быстро залить на флешку и установить, — придётся гуглить различия разных сборок и выбирать, что ближе по духу. В этом главная прелесть философии Linux.

Окей, с дистрибутивами разобрались. Но кто же тогда создал само ядро?

Как появилась Linux

Создатель ядра Linux — легендарный финский разработчик Линус Торвальдс, один из крёстных отцов свободного ПО, истинный гик, технарь и бунтарь, выходец из семьи левых финских журналистов.

Будучи студентом Хельсинкского университета, Линус познакомился с книгой Эндрю Таненбаума «Проектирование и организация операционных систем», в которой была описана учебная система для студентов под названием Minix. Под влиянием книги Линус установил Minix на свой новый компьютер Intel 386 и… полностью в ней разочаровался:

  • По официальной версии — из-за ограничений лицензии Minix, которая была заточена на использование в учебных заведениях.
  • По рассказам однокурсников — из-за отсутствия терминала, с помощью которого Линус надеялся получить доступ к вузовскому компьютеру и изучать лекции прямо из дома (да, он был удалёнщиком ещё до того, как это стало мейнстримом).

Раздосадованный, Линус решил доработать систему самостоятельно — начав с терминала, он добавлял в систему новые и новые фишки, всё больше уходя от взаимодействия с Minix к работе с железом напрямую. Постепенно учебное пособие профессора Таненбаума на его компьютере эволюционировало во что-то похожее на современное ядро Linux.

25 августа 1991 года Линус Торвальдс выпустил первый пост о своей ОС в новостной группе comp.os.minix сети Usenet :

​​Привет всем, кто пользуется Minix. Сейчас я работаю над бесплатной операционной системой (просто хобби, не что-то серьёзное и профессиональное, как GNU) для компьютеров-клонов 386 (486) AT. Тружусь над системой уже с апреля, и что-то начинает получаться.

Хотелось бы узнать у вас, что люди любят и не любят в Minix, так как моя ОС чем-то похожа на неё. Любые предложения приветствуются, но не обещаю, что я их реализую.

Линус (torvalds@kruuna.helsinki.fi)

Сейчас дата размещения поста считается днём рождения Linux. Правда, тогда система называлась по-другому — freax. Это сочетание трёх слов: freaks (придурки), free (свобода) и Unix (система, на которой основаны Minix и Linux). Но мудрые товарищи Линуса настояли на более благозвучном названии Linux, заменив провокационную часть названия на имя основателя системы.

Три недели спустя Линус выкатил первую версию ядра Linux Kernel 0.01, ещё бесконечно сырую. Что важно, ядро вышло под общественной лицензией GNU GPL, что позволило разработчикам по всему миру участвовать в разработке и тестировании. Это решение резко подстегнуло темпы разработки — теперь над ядром работал уже не один человек, а целая команда энтузиастов. Такая модель развития проекта сохраняется и сегодня.

Главным фактором, тормозящим развитие Linux, было отсутствие приложений для полноценной работы. Тогда Линус совершил финт ушами и объединил усилия с другим культовым деятелем свободного ПО Ричардом Столлманом, автором проекта GNU, в арсенале которого была масса некоммерческих программ, но недоставало мощного и открытого ядра. Две операционки объединились, и их гибрид стал называться GNU/Linux.

Это была классическая ситуация win-win: в распоряжении Столлмана оказалось быстрое и Unix-совместимое ядро, а Торвальдс получил право использовать в Linux все наработки проекта GNU: командную оболочку Bash, графическую среду GNOME, текстовый редактор Emacs и другие. Правда, Линус выиграл от этого слияния всё же чуть больше: большинство людей называет системы на основе GNU/Linux просто Linux, игнорируя вклад Столлмана.

Несмотря на это, Ричард Столлман — личность поистине легендарная для всего computer science. О проектах и философии этого гениального безумца у нас выходил большой спецпроект с декорациями в духе космических аркад восьмидесятых.

В 1996-м вышла версия Linux 2.0 со множеством улучшений и расширенной поддержкой подключаемого железа. Тогда же у Linux появился фирменный талисман — пингвин Tux . Его нарисовал программист-дизайнер Ларри Юинг, который выиграл в конкурсе, объявленном самим Торвальдсом.

Постепенно популярность Linux росла: о молодой операционке с открытым исходным кодом писали крупные издания, включая Forbes и Dr. Dobb’s Journal. Появились организации, которые помогали её распространению и развитию: Linux International, Linux Expo, Linux World и другие.

Сейчас в проекте участвуют миллионы разработчиков по всему миру: одни контрибьютят в само ядро, другие пилят многочисленные форки и дистрибутивы Linux. Свои сборки на базе Linux делают и компании — можно вспомнить, например, российские Rosa и Astra Linux. В общем, дело дядюшки Торвальдса цветёт пышным цветом, да и сам он пока даже не думает о пенсии — разработка всех новых версий ядра проходит под его присмотром.

Где используется Linux

Linux используется во множестве областей — от медицины до машиностроения, от робототехники до платёжной инфраструктуры. Коротко перечислим основные сферы, где без этой операционки сегодня не обойтись.

Суперкомпьютеры. Благодаря гибкости и близости к железу Linux позволяет выжимать максимум из суперкомпьютеров. Все 500 машин из списка самых мощных суперкомпьютеров в мире работают под управлением Linux.

Веб-серверы. Linux используется практически на всех серверах в Сети. Согласно опросам агентства W3Techs, 82% веб-сайтов развёрнуты на машинах с установленным Linux- и Unix-системами. Остальные используют Windows.

Смартфоны. Операционная система Android, которая установлена на большинстве смартфонов в мире, работает на ядре Linux. Кстати, яблочная iOS, как и Android, — Unix-подобная система, так что не очень и далеко друг от друга они ушли в плане архитектуры.

Роутеры. Операционные системы, установленные в Wi-Fi-маршрутизаторах, также основаны на ядре Linux.

Умный дом. Linux используют многие устройства в умных домах: холодильники, телевизоры, стиральные машины. Например, прошивки для телевизоров Samsung, LG, Philips и Panasonic работают на базе ядра Linux.

Авиация и транспорт. Linux установлена на бортовых компьютерах автомобилей Tesla и в машинах с автопилотом от Google. Ещё Linux используется в авиации: большинство американских систем для отслеживания трафика самолётов разработано на базе Linux.

Из чего состоит Linux

Как и любая операционка, Linux — это посредник между софтом и железом компьютера. Вот её основные компоненты.

Ядро. Сердце любой операционной системы. Связывает программное и аппаратное обеспечение, распределяет ресурсы компьютера между процессами, запускает процессы ввода-вывода и передаёт их на выполнение центральному процессору. При запуске ОС ядро загружается первым и остаётся в оперативной памяти постоянно. В коде ядра содержатся драйверы, которые загружаются в память по мере необходимости.

Оболочка. Командная строка, которая позволяет пользователю взаимодействовать с ядром напрямую. Работает так: вы набираете команды для оболочки на специальном языке, она их интерпретирует и передаёт операционной системе, а та запускает нужные программы.

Самая популярная командная оболочка для Linux — Bash.

Утилиты. Программы, которые выполняют разные служебные задачи: одни обслуживают файловую систему и диски, другие нужны для ведения архивов данных, третьи занимаются диагностикой программ и оборудования.

Графика. Состоит из трёх главных компонентов:

  • Графический сервер — система для отрисовки элементов интерфейса: окон, кнопок и меню, а также для предоставления доступа к ним с помощью клавиатуры и мыши. Приложению не нужно думать о том, как отобразить графику, — всё это берёт на себя графический сервер.
  • Менеджер входа — тот самый экран, который спрашивает у вас логин, пароль и другие данные аутентификации перед входом в систему.

  • Среда рабочего стола. Всё, что вы видите на экране при работе с системой: файловый менеджер, окна, обои, статус-бары, панели задач и другие инструменты. Чаще всего в дистрибутивах Linux используется среда GNOME, пришедшая из вышеупомянутой GNU.

Другая популярная среда — KDE — сильно напоминает Windows, а потому её часто выбирают пользователи, переезжающие с одной системы на другую.

Компиляторы. Преобразуют текст, написанный на «человеческих» языках программирования, в машинный код. Обычно компиляторы не входят в сборку из коробки — их устанавливают отдельно либо вместе со средой разработки.

Пользовательский софт. Всё, что нужно человеку для работы и чего нет в системе изначально: браузеры, мессенджеры, офисные программы, программы для работы с графикой и звуком и другие.

Дистрибутивы Linux

Как мы рассказали выше, Linux — это не единая система, а целая куча систем, предназначенных для решения разных задач. Одни появляются, другие исчезают, некоторые разделяются на отдельные проекты, а некоторые объединяются. Разработчики и компании создают дистрибутивы:

  • для научной работы — чтобы упростить работу сотрудников университетов и исследовательских лабораторий;
  • для безопасности — чтобы повысить защищённость систем на режимных объектах;
  • для скорости — чтобы повысить производительность серверов и вычислительных систем;
  • для простоты — чтобы обычные пользователи тоже могли наслаждаться бесплатным софтом и не кормить корпоративных боссов из Кремниевой долины 🙂

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

У нас есть большой путеводитель по дистрибутивам Linux для тех, кто решил переметнуться в стан линуксоидов. В этом разделе коротко перечислим самые популярные из них с описанием ключевых фишек.

Debian. Один из старейших и «базовых» дистрибутивов Linux, созданный 1993 году программистом Иэном Мёрдоком. На Debian основано множество других дистрибутивов: Linux Mint, Kali Linux, Ubuntu и другие.

Debian-based-системы отличаются высокой надёжностью, но сдержанны по отношению к экспериментам. Все новые пакеты проходят тщательное тестирование, прежде чем попасть в официальный репозиторий. Из-за этого вы вряд ли первым сможете наслаждаться новейшими фишками, зато будете уверены в стабильности системы.

Чистый Debian в основном используют на серверах, но это не значит, что он не подходит для пользователей. В системе есть графический интерфейс — более того, вы даже сможете выбрать оболочку по вкусу: GNOME, KDE, Xfce или LXDE.

Ubuntu. Популярный debian-based-дистрибутив «для дома», разработанный компанией Canonical. Благодаря простоте установки и дружелюбному интерфейсу хорошо подходит для самого широкого круга пользователей.

Установить и настроить Ubuntu не сложнее, чем Windows: в системе есть обширная база драйверов почти для любого железа. Многие из этих драйверов имеют коммерческую природу, из-за чего разработчиков Ubuntu часто клеймят отступниками от философии свободного ПО.

Fedora. Совместная разработка компании Red Hat и проекта Fedora Community. В отличие от Ubuntu, Fedora использует только свободное ПО, закрытые для изучения программы использовать запрещено — и это принципиальная позиция создателей. Все компоненты дистрибутива доступны для свободного использования, изменения и распространения.

OpenSUSE. Хороший вариант для тех, кто ищет компромисс между новизной и стабильностью: компоненты системы проходят тестирование, но не такое педантичное, как в Ubuntu. Из плюсов: большая библиотека встроенных драйверов и широкий выбор приложений в репозиториях.

Дистрибутив разрабатывает и поддерживает сообщество OpenSUSE в сотрудничестве с компанией SUSE Linux GmbH. Выпускается в двух версиях: для обычных и для корпоративных клиентов.

Gentoo. Позволяет гибко настраивать систему под своё железо. В Gentoo нет готовых программ, так как весь софт собирается из исходного кода. Сборка ориентирована прежде всего на опытных пользователей — говорят, чтобы правильно установить и настроить Gentoo, многие берут отпуск.

Фишка Gentoo в том, что программы компилируются прямо на компьютере пользователя, что улучшает производительность за счёт оптимизации для конкретного железа. Пользователь может даже выбирать, какие функции и зависимости программы будут включены или выключены при сборке.

Плюсы и минусы Linux

Для начала назовём достоинства этой операционной системы:

✅ Open source. Это означает, что ядра всех дистрибутивов, модули и программное обеспечение для работы под Linux имеют открытый исходный код. Каждый пользователь может изучать, модифицировать и распространять любую программу и само ядро. Он может опубликовать результаты своих работ в соответствии с лицензией.

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

✅ Безопасность. В мире Linux сильная культура безопасности. Авторы популярных дистрибутивов Linux регулярно выпускают обновления, которые исправляют уязвимости и обеспечивают безопасность системы. Также почти все сборки Linux включают средства для настройки сетевой безопасности: брандмауэры, фильтрацию пакетов и инструменты для обнаружения и предотвращения атак.

Нетребовательность к ресурсам. Многие дистрибутивы можно установить даже на старые компьютеры с маломощными процессорами и небольшим объёмом оперативной памяти. К таким дистрибутивам относятся, например, Tiny Core Linux, Puppy Linux, Slitaz и другие. А если в дистрибутиве нет графического окружения, его можно запустить хоть на самом древнем динозавре из девяностых 🙂

✅ Инструменты для разработчиков. Linux поддерживает множество компиляторов, интерпретаторов и других средств разработки. Например, для C и C++ в Linux есть компилятор GCC, для Python — CPython, для Ruby — JRuby. Также версии для Linux есть у большинства популярных IDE, включая Visual Studio, Sublime Text, Eclipse, IntelliJ IDEA и другие.

Удобная установка и менеджмент программ. Для этого в Linux есть менеджеры пакетов. Они позволяют управлять программными пакетами: устанавливать, обновлять и удалять их. Это, например: APT (для Debian и Ubuntu), YUM (для CentOS и Fedora), Pacman (для Arch Linux) и другие.

❌ Сложность освоения. Тем, кто привык работать на Windows и macOS, бывает сложно переходить на Linux. У неё другая философия, которая требует большего участия в настройке системы. Кроме того, нужно будет разобраться в менеджерах пакетов, репозиториях, политике безопасности и других вещах.

❌ Отсутствие некоторых популярных программ. Например, для Linux не разработаны Photoshop, Microsoft Office, AutoCAD и многое другое. Конечно, их можно запускать в виртуальной машине, а у многих программ есть аналоги, но это не подходит тем, кто хочет работать с неповторимыми оригиналами.

Сложности с драйверами. Да, в Linux есть драйверы почти для любого железа, включая процессоры и видеокарты, ОЗУ и периферию. Но ключевое слово — «почти». Бывает так, что производитель не стал заморачиваться с драйверами для Linux, а свободные разработчики ещё не успели до него добраться — и не факт, что вообще когда-нибудь доберутся.

Вполне вероятна ситуация, когда после установки системы не будет работать звук, тачпад или веб-камера и придётся несколько часов танцевать с бубном, чтобы найти нужный драйвер. И это в лучшем случае — в худшем вам придётся писать его самостоятельно.

«Сделай сам» — это вообще квинтэссенция философии Linux, если верить её создателю Линусу Торвальдсу 🙂

Стоит ли переходить на Linux

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

  • Софт. Если вы привыкли к Photoshop и к возможности в любой момент установить любую игру планеты, химии с Linux может и не возникнуть.
  • Опыт. Если вы никогда не имели дела с Linux, понадобится время, чтобы её освоить.
  • Драйверы. Не для всех устройств и комплектующих они есть.

Но если эти сложности вас не смущают и вы, как и Линус Торвальдс, любите смеяться в лицо опасности, скорее открывайте гайд по тому, как быстро, дёшево и без боли перейти с Windows на Linux, и добро пожаловать в сообщество!

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *