Основы Linux: от новичка до уверенного пользователя

Этот курс познакомит вас с операционной системой Linux, начиная с базовых команд терминала и заканчивая администрированием. Вы освоите работу с файловой системой, правами доступа, сетями и основами написания Bash-скриптов.

1. Введение в Linux и основы работы с командной строкой

Введение в Linux и основы работы с командной строкой

Операционная система Linux окружает нас повсюду, даже если это не всегда очевидно. На базе этого ядра работают серверы крупнейших корпораций, смартфоны с системой Android, умные телевизоры и бортовые компьютеры автомобилей. Главное отличие этой системы от привычных настольных решений заключается в открытом исходном коде (open-source) и модульной архитектуре.

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

> "Ожидайте, что вывод каждой программы станет входом для другой, еще неизвестной программы." > > Дуг Макилрой, один из создателей философии Unix

Почему профессионалы выбирают терминал

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

| Характеристика | Графический интерфейс (GUI) | Командная строка (CLI) | | :--- | :--- | :--- | | Потребление оперативной памяти | Высокое (от 1 до 4 ГБ для отрисовки окон) | Минимальное (от 5 до 20 МБ) | | Автоматизация рутинных задач | Сложная, требует сторонних программ-кликеров | Встроенная, команды легко объединяются в скрипты | | Удаленный доступ | Требует широкого канала связи, возможны задержки | Работает мгновенно даже при скорости интернета 64 Кбит/с | | Точность действий | Зависит от расположения кнопок, которые меняются после обновлений | Строгий синтаксис команд, который остается неизменным десятилетиями |

Представьте задачу: нужно создать 500 папок для хранения ежедневных отчетов. В графическом интерфейсе создание одной папки, клик правой кнопкой мыши и ввод названия занимает около 5 секунд. На 500 папок уйдет более 40 минут монотонной работы. В терминале эта же задача решается одной командой mkdir report_{1..500}, которая выполняется за 0,02 секунды.

Анатомия командной строки

При запуске терминала на экране появляется приглашение ко вводу (prompt). Оно информирует о готовности системы принимать команды и показывает текущий контекст пользователя.

!Структура приглашения командной строки в Linux

Стандартное приглашение выглядит следующим образом: user@server:~ — индикатор прав обычного пользователя. Если вместо него стоит знак #, это означает, что терминал запущен с правами суперпользователя (root*), имеющего абсолютный контроль над системой.

Базовая навигация по файловой системе

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

Для ориентации в этом пространстве используются три основные команды.

Команда pwd (Print Working Directory) выводит полный путь к папке, в которой вы сейчас находитесь. Это полезно, когда вы глубоко погрузились в структуру каталогов и хотите понять свое точное местоположение.

Команда ls (List) показывает содержимое текущей директории. У большинства команд есть флаги (или аргументы) — специальные опции, меняющие поведение программы. Они пишутся через дефис.

Флаг -l выводит список в виде подробной таблицы. Вы увидите права доступа, владельца, размер файла в байтах и дату последнего изменения. Например, если файл весит 4096 байт, это стандартный размер блока для пустой директории в файловой системе ext4.

Команда cd (Change Directory) позволяет перемещаться между папками.

Существует два способа указать путь:

  • Абсолютный путь всегда начинается с корневого каталога /. Пример: cd /home/user/documents. Он работает одинаково, независимо от того, где вы находитесь сейчас.
  • Относительный путь отсчитывается от вашей текущей папки. Если вы уже находитесь в /home/user, то для перехода в документы достаточно написать cd documents.
  • Управление файлами и каталогами

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

    Создание новой пустой папки выполняется командой mkdir (Make Directory).

    Для создания пустого текстового файла используется команда touch. Изначально она была придумана для обновления времени последнего изменения файла, но если файла не существует, утилита создаст его с нулевым размером.

    Копирование данных осуществляется командой cp (Copy). Сначала указывается что копировать, а затем — куда.

    Если размер исходного файла составляет 15 МБ, после выполнения команды на диске будет занято 30 МБ, так как создается точная независимая копия.

    Перемещение или переименование выполняется командой mv (Move). В Linux переименование файла технически является его перемещением в ту же самую папку, но под другим именем.

    Удаление файлов происходит с помощью rm (Remove). Важно помнить, что в командной строке нет "Корзины". Удаленные таким образом файлы восстановить крайне сложно.

    Для удаления целой папки вместе со всем ее содержимым необходимо добавить флаг рекурсивного удаления -r: rm -r project_data.

    Перенаправление потоков данных

    Возвращаясь к философии Unix, важно понимать концепцию стандартных потоков. Каждая программа в Linux по умолчанию имеет три канала связи с внешним миром: Стандартный ввод (stdin*) — то, откуда программа получает данные (обычно клавиатура). Стандартный вывод (stdout*) — куда программа отправляет успешный результат (обычно экран терминала). Стандартная ошибка (stderr*) — куда отправляются сообщения о сбоях.

    Эти потоки можно перенаправлять с помощью специальных символов. Символ > позволяет перехватить вывод программы и записать его в файл, а не выводить на экран.

    Команда echo просто печатает переданный ей текст. Но благодаря символу > этот текст не появится на экране, а будет записан в файл hello.txt. Если файл не существовал, он будет создан. Если существовал — его старое содержимое будет полностью стерто и заменено новым.

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

    Если размер файла hello.txt после первой команды составлял 35 байт, то после второй команды он увеличится примерно до 65 байт, так как новая строка добавится в конец.

    Права доступа: основа безопасности

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

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

  • Чтение (Read, r) — позволяет просматривать содержимое файла или список файлов в каталоге.
  • Запись (Write, w) — разрешает изменять файл или создавать/удалять файлы внутри каталога.
  • Выполнение (Execute, x) — дает право запускать файл как программу или переходить в каталог с помощью команды cd.
  • Когда вы выполняете команду ls -l, первый столбец вывода показывает именно эти права. Например, строка -rw-r--r-- означает, что владелец файла может его читать и изменять (rw-), а все остальные пользователи системы — только читать (r--). Попытка обычного пользователя изменить системный файл, к которому у него нет прав на запись, приведет к ошибке Permission denied (Доступ запрещен).

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

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

    Автодополнение (Tab) Клавиша Tab — главный помощник в терминале. Если вы начнете вводить название файла или команды и нажмете Tab, система автоматически допишет оставшуюся часть. Если вариантов несколько, двойное нажатие Tab выведет список всех совпадений. Это исключает опечатки и ускоряет работу в десятки раз.

    История команд Все введенные ранее команды сохраняются в памяти. Нажимая стрелку «Вверх» на клавиатуре, вы можете пролистывать историю своих действий. Это избавляет от необходимости заново печатать сложные конструкции.

    Чтение документации Запомнить все флаги для каждой команды невозможно. Для получения справки по любой утилите используется команда man (Manual).

    Эта команда откроет подробное руководство пользователя, где описаны все возможные параметры, принципы работы и примеры использования утилиты ls. Для выхода из режима чтения справки достаточно нажать клавишу q.

    2. Файловая система Linux и управление правами доступа

    Файловая система Linux и управление правами доступа

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

    > "В UNIX всё является файлом: если что-то не является файлом, значит, это процесс." > > Один из базовых принципов философии UNIX

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

    Иерархия файловой системы (FHS)

    В отличие от систем Windows, где каждый физический или логический диск имеет свою букву (C:, D:), в Linux существует единое дерево каталогов. Оно начинается с корневого каталога, который обозначается одиночным символом /.

    !Иерархия файловой системы Linux

    Все физические диски, флешки и сетевые хранилища монтируются (подключаются) как папки внутри этого единого дерева. Стандарт иерархии файловой системы (Filesystem Hierarchy Standard) строго регламентирует, где должны храниться те или иные данные.

    | Каталог | Назначение | Пример использования | | :--- | :--- | :--- | | /bin | Базовые системные утилиты | Здесь лежат исполняемые файлы команд ls, cp, mkdir | | /etc | Глобальные конфигурационные файлы | Настройки веб-сервера, базы данных или сетевых интерфейсов | | /home | Домашние директории пользователей | Личные документы, загрузки и настройки пользователя user хранятся в /home/user | | /var | Изменяемые данные (переменные) | Логи системы, базы данных, кэш. Если лог-файл вырастет до 5 ГБ, он будет занимать место именно здесь | | /tmp | Временные файлы | Данные, которые удаляются при каждой перезагрузке сервера |

    Представьте, что вы устанавливаете новую программу. В графической ОС она обычно устанавливается в одну папку (например, Program Files). В Linux исполняемый файл программы отправится в /bin, ее настройки — в /etc, а логи работы — в /var/log. Это обеспечивает строгий порядок и предсказуемость.

    Пользователи и группы

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

    Каждый процесс и файл в системе привязан к конкретному владельцу (пользователю) и группе владельцев.

    Существует особый пользователь — суперпользователь (root). Он обладает абсолютной властью над системой: может читать любые файлы, удалять системные каталоги и изменять любые настройки. Обычные пользователи имеют ограниченные права и могут свободно распоряжаться только файлами внутри своей домашней директории.

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

    Анатомия прав доступа

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

    * Чтение (Read, r) * Запись (Write, w) * Выполнение (Execute, x)

    Важно понимать, что эти права работают по-разному для обычных файлов и для каталогов (папок).

  • Для файла право на чтение позволяет просматривать его содержимое (например, текст скрипта). Право на запись разрешает изменять или очищать файл. Право на выполнение позволяет запустить этот файл как программу.
  • Для каталога право на чтение позволяет увидеть список файлов внутри него (команда ls). Право на запись позволяет создавать, удалять и переименовывать файлы внутри этой папки. Право на выполнение позволяет войти в этот каталог (команда cd) и обращаться к файлам внутри него.
  • Если у вас есть права на чтение папки, но нет прав на выполнение, вы увидите список файлов, но не сможете прочитать их содержимое, даже если сами файлы разрешают чтение.

    Восьмеричная система прав (Octal Notation)

    При просмотре списка файлов командой ls -l права отображаются в виде строки символов, например -rwxr-xr--. Эта строка разбивается на три блока по три символа:

  • Права владельца файла (в данном случае rwx — полные права).
  • Права группы (r-x — чтение и выполнение, без записи).
  • Права всех остальных пользователей системы (r-- — только чтение).
  • !Схема прав доступа в восьмеричном формате

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

    * (чтение) * (запись) * (выполнение)

    Чтобы получить итоговое значение для блока, числа просто складываются.

    Например, если мы хотим дать владельцу полные права (), группе — чтение и выполнение (), а остальным — только чтение (), мы получим комбинацию 754.

    Если файл содержит конфиденциальные данные (например, пароли от базы данных), логично разрешить доступ только владельцу. В этом случае права будут для владельца, и нули для остальных. Итоговый код: 600.

    Управление правами и владельцами

    Для изменения прав доступа используется утилита chmod (Change Mode). Она принимает числовой код прав и имя файла.

    После выполнения этой команды владелец сможет читать и редактировать файл (6), а группа и все остальные пользователи — только читать (4 и 4). Это стандартные безопасные права для большинства текстовых файлов на веб-серверах.

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

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

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

    В этом примере владельцем архива размером 150 МБ стал пользователь www-data (под которым обычно работает веб-сервер), а группой-владельцем — developers. Теперь веб-сервер имеет полный контроль над файлом, а разработчики смогут взаимодействовать с ним в рамках групповых прав.

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