Теория
- Изучение базовых сущностей Linux.
Практика
- Освоение SSH, процесса установки ПО и работы с консолью Linux.
Данное руководство предоставляет краткую информацию, необходимую для выполнения задач семинара.
После прохождения семинара студенту необходимо составить отчет, в котором будет подробно изложена теоретическая и практическая часть работы.
Подключиться к 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
Подключаться к 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
На заре развития 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 <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 # удаление кэша пакетов
Все объекты в 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
в восьмеричной и десятичной системах счисления.
На практике пользователю необходимо осуществлять навигацию по системе, просматривать, создавать, редактировать и удалять файлы, настраивать права доступа.
Ниже приведены несколько примеров наиболее часто используемых команд:
# руководство (справочная информация)
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), который используется ядром для управления процессом до завершения программы или команды, с которой он связан.
Процесс может находиться в следующих статусах:
-
Выполнение (R, Running) Выполнение или ожидание ЦПУ для выполнения
-
Сон (S, Sleep) Прерываемое программно ожидание
-
Непрерываемый сон (D, Direct) Ожидание «прямого» сигнала от аппаратной части для прерывания
-
Приостановлен (T, Tracing) Отладка
-
Зомби (Z, Zombie) Выполнение завершено, однако ресурсы не освобождены
Почти любой процесс (кроме процесса в статусе D) может быть принудительно прерван администратором в случае необходимости («убит»). Это не всегда безопасно, однако возможно.
Запущенные процессы требуют использования аппаратных ресурсов сервера – ЦПУ, ОЗУ, дисков, сетевых интерфейсов.
На практике пользователю необходимо просматривать списки процессов и останавливать процессы, а также просматривать имеющиеся и потребляемые ресурсы сервера в системе.
Ниже приведены несколько примеров наиболее часто используемых команд:
# руководство (справочная информация)
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 – это программный комплекс, состоящий из системных компонентов Linux. Основным компонентом является система инициализации системы SystemD. Ядро Linux запускает процесс systemd, который, в свою очередь, запускает все остальные процессы системы.
SystemD предоставляет следующий функционал:
- Запуск служб при старте системы (по возможности параллельно)
- Контроль состояния запущенных служб
- Управление устройствами, входом в систему, сетевыми подключениями, ведение журнала событий
- Набор утилит для управления системой – systemctl, journalctl и др.
Ниже приведены несколько примеров наиболее часто используемых команд:
# руководство (справочная информация)
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 <utility> # просмотр справочной информации по утилите
<utility> --help # просмотр справочной информации по утилите
# просмотр сетевых настроек сервера
ip a # IP адреса
sudo netstat -tulpn # открытые порты
sudo ss -tulpn # открытые порты
# диагностика сетевых проблем
nslookup <hostname> # проверка разрешения DNS имени
ping <host> # отправка ICMP пакетов до хоста
traceroute <host> # трассировка до хоста UDP пакетами
nmap <host> # сетевое сканирование хоста
nmap -p T:<port> <host> # проверка доступности TCP порта на хосте
nmap -p U:<port> <host> # проверка доступности UDP порта на хосте
Источник: https://habr.com/ru/articles/655275/
Что нужно сделать
- Запустите консоль.
- Последовательно повторите представленные команды:
-
- просмотр содержимого текущего каталога (ls, попробуйте опции l, a, h);
-
- перемещение между каталогами (cd, попробуйте переход в домашний каталог, в каталог на уровень выше, к предыдущему каталогу), просмотр текущего пути (pwd);
-
- создание каталога для проекта (mkdir);
-
- вывод содержимого файла на экран (cat), поиск текста в файле (grep), вывод последних или первых строк файла (tail, head, more);
-
- копирование и перемещение файлов, директорий (mv);
-
- использование справки и руководств по командам (man, help, -h, –help);
-
- выполнение команды от имени суперпользователя (sudo).
Используйте удобные сочетания клавиш (Tab, стрелки вверх/вниз, Ctrl + C, Ctrl + R, Ctrl + A, Ctrl + E, Ctrl + D, Ctrl + L, Ctrl + Shift + C, Ctrl + Shift + V).
По каждому пункту сделайте скриншот результата работы команды и прикрепите его к отчёту.
Откройте новую сессию терминала в изолирированном окружении, а именно, в docker контейнере:
docker run -it --rm ubuntu:22.04 /bin/bash
Внутри docker контейнера установите ROS2 Humble (ros-humble-ros-base) согласно инструкции: https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html
По каждому пункту сделайте скриншот результата и прикрепите его к отчёту.
Важно! При завершении сессии (закрытии терминала) содержимое докер контейнера и весь прогресс по установке удалится!
Подключиться к соседу с помощью SSH.
Использование команды ssh
изучить самостоятельно, с помощью команды man ssh
.
Попросите соседа узнать свое имя пользователя, пароль и IP адрес ПК с помощью консольных команд.
По результатам создается отчет в свободной форме и отсылается на почту преподавателя: [email protected]
35 баллов
. Оформленный отчет
СВОИМИ СЛОВАМИ по каждому пункту:
- CLI/GUI
- SSH
- файловая система Linux
- процессы
- Установка программ в Linux. Отличие от Windows?
- systemd
- отличие TCP от UDP
45 баллов
. Успешно выполненные практические задания
Показать результат преподавателю. Отразить в отчете.
54 балла
. Docker
Изучить основную концепцию docker и описать в отчете. Что такое образ и контейнер? Как создаются образы? В чем отличие docker от виртуальной машины ?