###### tags: `МДК02.05 Организация администрирования операционных систем Linux` `Linux` # Лабораторная работа №2. Работа с командной строкой Linux. ### Тема: Знакомство с Linux. ##### Цель работы: Научиться: работать в командной строке. ##### Необходимые материалы: Пк с доступом в интернет. Виртуальные машины с Linux Debian и Ubuntu. ## Теоретическая часть ### Работа в командной строке **Студент должен уметь работать с командными оболочками и командами в командной строке** :::success Работа администратора с Linux заключается прежде всего в оперировании в командной строке. Командная строка, или консоль — это отдельная программируемая среда со своими настройками, возможностями и инструментами. Существует множество различных оболочек, в данном уроке рассматривается **bash**, используемая в большинстве современных ОС. ::: Увидеть название оболочки, используемой пользователем по умолчанию, можно в конце каждой строки файла `/etc/passwd` . Глобальные настройки командной строки находятся в файле `/etc/profile` , а настройки для каждого пользователя в файлах его домашней директории. При этом существует несколько вариантов расположения настроек, в зависимости от семейства ОС. В общем виде поиск настроек осуществляется в следующем порядке: ~/.bash_profile, ~/.bash_login , и ~/.profile (настройки берутся из первого обнаруженного файла). При работе в консоли используются следующие распространенные команды: ```bash! cat #вывод содержимого файла в консоль; cd #переход в каталог; ls #вывод содержимого каталога; echo #вывод текста в консоль; touch #обновление времени редактирования файла или создание нового пустого файла; uname #вывод имени ОС; ``` Консоль, как отдельная рабочая среда содержит свои переменные: переменные среды (глобальные переменные, использующиеся в ОС) и обычные переменные (работают в пределах запущенного сеанса консоли). Для просмотра переменных доступны команды: ```bash! env #вывод переменных среды; export #превращение переменной в переменную среды; unset #отключение переменной; ``` Для создания переменной используется простой синтаксис имя_переменной=значение_переменной. Для обращения к переменной указывается знак $, например: ```bash! X=12 #(задать переменной X значение 12); echo $X #(вывести значение переменной X); ``` Для выполнения команды в текущем каталоге (его можно узнать командой **pwd**), нужно указывать полный путь к команде (например, **/home/script**), если текущий каталог не перечислен в значениях переменной среды **PATH**. Для получения справочной информации доступны команды: ```bash! man #справка по команде; file #справка по файлу; whatis #справка по названию; history #вывод истории команд (список хранится в .bash_history); ``` Отдельно следует упомянуть команду **exec** , позволяющую выполнять команду за пределами текущей оболочки, сбрасывая права суперпользователя. ### Управление текстовым потоком **Студент должен уметь управлять и фильтровать текстовый поток.** :::success Множество файлов в Linux неудобны для восприятия без предварительного форматирования, кроме того процесс обработки текстовой информации часто требует ее форматирования, обрезания, сортировки и т.д. Linux предлагает широкий набор инструментов редактирования текстового вывода, при этом следует заметить что указанные инструменты не затрагивают исходный файл (или текстовый поток), а форматируют его, выдавая полученный результат в консоль или другой файл. ::: **Простой вывод текста (без корректировки содержимого):** Для вывода содержимого файла или объединения нескольких файлов на выводе используется команда cat , например: `сat 1.txt 2.txt > 3.txt` (передать содержимое двух файлов в третий); - Команда **join** объединяет строки нескольких файлов по общему полю и отправляет их на стандартный вывод. - Команда **less** загружает файл постепенно и также отправляет его на вывод (удобно для больших файлов). - Команда **nl** нумерует строки. - Команда **pr** показывает, как содержимое файла будет выглядеть при выводе его на печать. - Команда **paste** вставляет строки из одного файла в другой и отправляет результат на стандартный вывод. - Команда **head** показывает первые строки файла, а **tail** – последние. Например: `head –n 2 /var/log/syslog` (вывести первые две строчки файла); `tail –f /var/log/syslog` (показывать последние строки файла, отображая содержимое в реальный момент времени); - Команда **sort** может отсортировать содержимое файла по какому-нибудь признаку, например: `sort 1.txt` (отсортировать строки по алфавиту); - Команда **wc** позволяет посчитать количество символов и т.д. в текстовом потоке, например: `wc 1.txt` (посчитать количество строк, символов, слов); Вывод форматированного текста (с корректировкой содержимого): - Команда **cut** используется для обрезания содержимого файлов на выводе, например: `сut – c 2,3,4,5,10 1.txt` (показывать только символы на указанных позициях: 2,3,4,5,10); - Команда **expand** превращает символы табуляции в несколько пробелов, а **unexpand** наоборот – пробелы в символы табуляции. - Команда **fmt** предназначена для форматирования текста различными способами, например: `fmt 1.txt` (вывести содержимое файла в одну строку); `fmt –w 10 1.txt` (вывести содержимое файла в строки не больше 10 символов каждая); - Команда **od** предназначена для конвертации текста в другой формат, например: `od –c 1.txt` (отобразить в кодировке ASCI); - Команда **tr** предназначена для замены и удаления символов в текстовом потоке, например: `echo "HELLO " | tr – t L l` (заменить " L" на " l" в полученном на вводе тексте); - Команда **split** может разбить файла по каким-либо критериям, например: `split –l 2 1.txt` (разбить содержимое файла по две строчки); - Команда **uniq** предназначена для поиска повторяющихся строк, например: `uniq –u 1.txt` (показать только уникальные строки); - **Sed** – отдельный мощный инструмент, понимающий групповые символы, шаблоны и т.д. Будет рассмотрен немного подробнее в дальнейших урока. Работает, например, так: `sed –e 's/socks/people/' 1.txt` ( заменить в файле слово "socks" на «people"); ### Основные операции с файлами **Студент должен уметь управлять файлами и каталогами при помощи основных команд Linux** :::success Частой задачей администратора в Linux является работа с файлами и каталогами: создание, копирование, перемещение и удаление. Использование групповых символов вместе с инструментами консоли позволяют осуществлять эти действия с максимальной эффективностью. ::: Для создания директорий используется команда **mkdir имя_каталога**, для удаления пустого каталога - **rmdir имя_каталога**. Просмотр содержимого текущей директории – **ls**. Например: ```bash! ls –l #просмотреть содержимое текущего каталога; ls fol #посмотреть содержимого каталогов, имена которых начинаются с fol; ``` Для копирования используется команда cp что_копировать куда_копировать , например: **`cp –R Folder NewFolder`** - скопировать директорию "Folder" со всем содержимым в текущий каталог с именем новой директории "NewFolder"); Для переноса используется команда **mv** что_переносить куда_переносить , например: **`mv file.txt folder_1/`** (перенести " file.txt" в каталог " folder_1» в текущей директории); Для удаления используется команда **rm что_удалить**, например: **`rm –rf folder 1`** (удалить каталог folder_1 вместе с содержимым); Для создания пустого файла, или обновления метки доступа существующего, используется команда **touch имя_файла**, а для получения информации о файле – команда **file имя_файла**. Групповые символы, использующиеся при работе с текстовыми данными: ``` * – любое количество любых символов; ?_ – любой символ;_ ! – не (любой символ кроме указанных); [ac] – a или c; [a - c] – a , b , c ``` Например: ```bash! ls * #(вывести содержимое всех каталогов); ls ?at.txt #(вывести содержимое файла с именем: любая первая буква, остальная часть имени " at.txt"); ls *at.txt #(вывести содержимое файла с именем, оканчивающимся на " at.txt"); ls ![ab] #(вывести содержимое файла или каталога с именем, начинающимся с любых символов, кроме "a" и "b"); ``` Для поиска информации используется команда **find**, например: ```bash! find . -name "\A" #(искать в текущей директории объекты, имеющие в имени символ "A"); find /etc -size -5M #(искать в директории "/etc" объекты размером менее 5 Мб); find . – type l #(искать в текущей директории ссылки); ``` В среде Linux существует несколько распространённых архиваторов, использующихся для распаковки и упаковки объектов в единый файл: - **сpio** - двоичный архиватор, копирующий информацию в архив и обратно; - **dd** - копирование по блокам; - **gzip и gunzip** - утилита сжатия и восстановления файлов (контейнер одного файла); - **bzip2 и bunzip2** - утилита сжатия и восстановления файлов (контейнер одного файла); - **xz и unxz** - утилита сжатия и восстановления файлов (контейнер одного файла); - **tar** - архиватор (работает с набором файлов и каталогов). Например: - **`find . –name "*.txt" | cpio – o > ./ test. cpio`** (найти в текущей папке все файлы с расширением `".txt"` и упаковать их в архив `test.cpio`, расположив его на уровень выше текущей директории); - **`cpio -id < test . cpio`** (распаковать в текущий каталог архив `"test.cpio"`, создавая при необходимости структуру директорий); - **`dd if =/dev/sdb of = drive.img`** (скопировать носитель `/dev/sdb` в образ `drive.img` , располагающийся в текущей директории); - **`gzip drive.img`** (сжать образ `"drive.img"` до `"drive.img.gz"`, удалив исходный файл); - **`bunzip2 drive.img.bz2`** (распаковать архив `"drive.img.bz2"` в текущий каталог); - **`unxz drive.img.xz`** (распаковать архив " `drive.img.xz`" в текущий каталог); - **`tar cvf arch.tar folder`** (упаковать каталог `folder` в архив `"arch.tar"`). - **`tar –xvf archive.tar `** (распаковать архив `archive.tar`). ### Потоки, конвейеры и перенаправления **Студент должен уметь управлять потоками для обработки текстовых данных** :::success Linux традиционно использует потоки для ввода, вывода и ошибок. Обычно ввод – это клавиатура или файлы, а вывод ошибок и результатов происходит в консоль. Но часто бывает нужно объединить последовательность команд в конвейер, или отправить результат в какой-нибудь файл. ::: Для того чтобы послать на ввод программы некоторые данные используется знак "<", например: **`wc < file 1. txt `** (использовать в качестве ввода для программы wc файл `file.txt`); Для того чтобы послать вывод программы куда-нибудь, кроме стандартного направления, используется знак ">", например: ```bash! ls > list.txt #(перезаписать содержимое файла list.txt результатом команды ls); ls >> list.txt #(дописать в файл list.txt результат команды ls); ``` Для ввода, вывода и ошибок используются следующие обозначения: - Stdin – стандартный ввод программы (обозначение "0"); - Stdout – стандартный вывод программы (обозначение "1"); - Stderr – стандартные ошибки программы (обозначение "2"); Например: ```bash! ls bob 2> error.txt ls bob > result .txt 2> error .txt ``` ### Управление процессами в Linux **Студент должен уметь создавать, отслеживать и завершать процессы** :::success Linux содержит в себе множество инструментов для управления запущенными процессами: от сортировки, отслеживания состояния и загрузки системы до перевода процессов в фоновый режим и обратно. ::: Посмотреть запущенные процессы в текущей консоли можно при помощи команды **jobs**. Для вывода всех запущенных в данный момент процессов (независимо от консоли) используется команда **ps** с различным набором ключей, например: ```bash! ps aux #(вывести процессы всех пользователей); ``` Можно вывести процессы в консоль, отображая иерархию из взаимосвязи командой pstree. Для отображения идентификаторов процессов по определенному критерию можно использовать команду pgrep, например: ```bash! pgrep -l -u root #(отобразить все процессы пользователя root) ``` Чтобы запустить процесс в фоновом режиме необходимо указать ключ &, например: ```bash! sleep 999 & #(запустить задачу sleep 999 в фоновом режиме); ``` Для перевода процесса из фонового режима в активный используется команда **fg** , обратно – **bg**. В качестве аргумента команды следует указать номер процесса (его можно увидеть на выводе команды **jobs**). Для того чтобы процесс продолжал выполняться после выхода пользователя из системы, его следует запускать командой nohup , например: ```bash! nohup sleep 1000 & #(запустить процесс "sleep 1000" в фоновом режиме, и выполнять его даже в случае выхода пользователя из системы); ``` Для остановки процесса используется команда **kill**, например: ```bash! kill 2625 #(выключить процесс с PID=2625); killall sleep #(выключить все процессы с именем sleep для текущего пользователя) ; ``` Для остановки процессов по указанному критерию можно использовать команду **pkill**, например: ```bash! pkill refox #(остановить процесс, в имени которого есть символы "refox"); ``` Для просмотра информации о работающих процессах в режиме реального времени используется диспетчер задача **top**. Используя его можно сортировать запущенные задачи по различным критериям и останавливать их (клавиша K) мягко (sigterm) и жестко (sigkill). Для отображения информации о времени работы системы и среднем времени загрузки АЧ используется команда **uptime**. Для отображения информации о загрузке ОЗУ и раздела подкачки используется команда **free**. Кроме того, Linux поддерживает работу с несколькими «экранами» при помощи команды **screen**. Она позволяет, в числе всего прочего, сворачивать запущенные приложения в консоли, в рамках той же консоли, например: ```bash! screen -S yandex ping ya.ru #(создать экран с именем yandex для команды ping); screen -ls #(показать свернутые экраны); screen -r yandex #(развернуть экран с именем yandex). ``` ### Пользователи и группы. **Студент должен уметь создавать пользователей а также группы пользователей. Менять домашний каталог пользователя, оболочку выполнения команд и тд.** #### Управление пользователями. Добавление пользователя осуществляется при помощи команды **useradd**. Пример использоания: ```bash! useradd vasyapupkin ``` **Параметры создания пользователя по умолчанию** Если при создании пользователя не указываются дополнительные ключи, то берутся настройки по умолчанию. Эти настройки вы можете посмотреть выполнив: **`useradd -D`** Результат будет примерно следующий: ```bash ! GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/sh SKEL=/etc/skel CREATE_MAIL_SPOOL=no ``` Чтобы менять параметры можно использовать ключи при создании пользователя: - **-b** Базовый каталог. Это каталог, в котором будет создана домашняя папка пользователя. По умолчанию /home - **-с** Комментарий. В нем вы можете напечатать любой текст. - **-d** Название домашнего каталога. По умолчанию название совпадает с именем создаваемого пользователя. - **-e** Дата, после которой пользователь будет отключен. Задается в формате ГГГГ-ММ-ДД. По умолчанию отключено. - **-f** Количество дней, которые должны пройти после устаревания пароля до блокировки пользователя, если пароль не будет изменен (период неактивности). Если значение равно 0, то запись блокируется сразу после устаревания пароля, при -1 - не блокируется. По умолчанию -1. - **-g** Первичная группа пользователя. Можно указывать как GID, так и имя группы. **Если параметр не задан будет создана новая группа название которой совпадает с именем пользователя**. - **-G** Список вторичных групп в которых будет находится создаваемый пользователь - **-k** Каталог шаблонов. Файлы и папки из этого каталога будут помещены в домашнюю папку пользователя. По умолчанию /etc/skel. - **-m** Ключ, указывающий, что необходимо создать домашнюю папку. **По умолчанию домашняя папка не создается.** - **-p** Зашифрованный пароль пользователя. **По умолчанию пароль не задается**, но учетная пользователь будет заблокирован до установки пароля - **-s** Оболочка, используемая пользователем. **По умолчанию /bin/sh**. - **-u** Вручную задать UID пользователю. **Что такое UID/GID?** :::info **UID** обозначает идентификатор пользователя. **UID** — это номер, назначенный каждому пользователю Linux. Это представление пользователя в ядре Linux. **UID** используется для идентификации пользователя в системе и для определения того, к каким системным ресурсам пользователь может получить доступ. Вот почему идентификатор пользователя должен быть уникальным. Вы можете найти **UID** в файле **/etc/passwd**. Это тот же файл, который можно использовать для составления списка всех пользователей в системе Linux. Обратите внимание, что в большинстве дистрибутивов Linux UID 1-500 обычно зарезервирован для системных пользователей. В Ubuntu и Fedora **UID для новых пользователей начинаются с 1000**. Например, если вы используете команду **useradd** или **adduser** для создания нового пользователя, он получит следующий доступный номер после 1000 в качестве своего UID. **GID** в свою очередь индефекатор группы в системе. ::: Если вас не устраивают такие настройки, вы можете поменять их выполнив: ```bash! useradd -D -s /bin/bash ``` где -s это ключ из таблицы выше. **Таким образом могут быть заданы параметры, определяемые только ключами: -b -e -f -g -s** **Изменение параметров пользователя** Изменение параметров пользователя происходит с помощью утилиты **usermod**. Пример использования: ```bash! usermod -c "Эта команда поменяет комментарий пользователю" vasyapupkin ``` **usermod использует те же опции, что и useradd.** **Изменение пароля** Изменить пароль пользователю можно при помощи утилиты **passwd**. ```bash! sudo passwd vasyapupkin ``` **passwd** может использоваться и обычным пользователем для смены пароля. Для этого пользователю надо ввести **passwd** и ввести старый и новый пароли. Основные ключи passwd: - **-d** Удалить пароль пользователю. После этого пароль будет пустым, и пользователь сможет входить в систему без предъявления пароля. - **-e** Сделать пароль устаревшим. Это заставит пользователя изменить пароль при следующем входе в систему. - **-i** Заблокировать учетную запись пользователя по прошествии указанного количества дней после устаревания пароля. - **-n** Минимальное количество дней между сменами пароля. - **-x** Максимальное количество дней, после которого необходимо обязательно сменить пароль. - **-l** Заблокировать учетную запись пользователя. - **-u** Разблокировать учетную запись пользователя. **Установка пустого пароля пользователя** Супер пользователь с помощью утилит командной строки **passwd** и **usermod** или путем редактирования файла **/etc/shadow** может удалить пароль пользователь, дав возможность входить в систему без указания пароля. ```bash! sudo passwd -d vasyapupkin #или sudo usermod -p "" vasyapupkin ``` Если учетная запись пользователя в этот момент была заблокирована командой **passwd -l**, то указанные выше команды так же снимут эту блокировку. :::info Установка пустого пароля может быть полезна как временное решение проблемы в ситуации, когда пользователь забыл свой пароль или не может его ввести из-за проблем с раскладкой клавиатуры. После этого имеет смысл принудить пользователя установить себе новый пароль при следующем входе в систему: ```bash! sudo passwd -e vasyapupkin ``` ::: **Удаление пользователя** Для того, чтобы удалить пользователя воспользуйтесь утилитой **userdel**. Пример использования: ```bash! sudo userdel vasyapupkin ``` **userdel** имеет всего два основных ключа: - **-f** Принудительно удалить пользователя, даже если он сейчас работает в системе. - **-r** Удалить домашний каталог пользователя. #### Управление группами **Создание группы** Утилита **groupadd** создаёт новую группу согласно указанным значениям командной строки и системным значениям по умолчанию. Пример использования: ```bash! sudo groupadd testgroup ``` Основные ключи: - **-g** Установить собственный GID. - **-p** Пароль группы. - **-r** Создать системную группу. **Изменение параметров группы** Сменить название группы, ее GID или пароль можно при помощи groupmod. Пример: ```bash! sudo groupmod -n newtestgroup testgroup #Имя группы изменено с testgroup на newtestgroup ``` Опции groupmod: - **-g** Установить другой GID. - **-n** Новое имя группы. - **-p** Изменить пароль группы. **Удаление группы** Удаление группы происходит так: ``` sudo groupdel testgroup ``` **groupdel** не имеет никаких дополнительных параметров. #### Файлы конфигурации Изменять параметры пользователей и групп можно не только при помощи специальных утилит, но и вручную. Все настройки хранятся в текстовых файлах. Описание каждого из них приведено ниже. В файле **/etc/passwd** хранится вся информация о пользователях кроме пароля. Одна строка из этого файла соответствует описанию одного пользователя. Примерное содержание строки таково: ```conf! vasyapupkin:x:1000:1000:VasyaPupkin:/home/vpupkin:/bin/bash ``` Строка состоит из нескольких полей, каждое из которых отделено от другого двоеточием. Значение каждого поля приведено ниже. - **vasyapupkin** Имя пользователя для входа в систему. - **x** Необязательный зашифрованный пароль. - **1000** Числовой идентификатор пользователя (UID). - **1000** Числовой идентификатор группы (GID). - **Vasya Pupkin** Поле комментария - **/home/vpupkin** Домашний каталог пользователя. - **/bin/bash** Оболочка пользователя. Второе и последнее поля необязательные и могут не иметь значения. В **/etc/group**, как очевидно из названия хранится информация о группах. Она записана в аналогичном **/etc/passwd** виде: ```conf! vasyapupkin:x:1000:vasyapupkin,petya ``` - **vasyapupkin** Название группы - **x** Необязательный зашифрованный пароль. - **1000** Числовой идентификатор группы (GID). - **vasyapupkin,petya** Список пользователей, находящихся в группе. В этом файле второе и четвертое поля могут быть пустыми. Файл **/etc/shadow** хранит в себе пароли, по этому права, установленные на этот файл, не дают считать его простому пользователю. Пример одной из записей из этого файла: ```conf! vasyapupkin:$6$Yvp9VO2s$VfI0t.o754QB3HcvVbz5hlOafmO.LaHXwfavJHniHNzq/bCI3AEo562hhiWLoBSqxLy7RJJNm3fwz.sdhEhHL0:15803:0:99999:7::: ``` Здесь: - **vasyapupkin** Имя пользователя для входа в систему. - **`$6$Yvp9VO2s$VfI0t.o754QB3HcvVbz5hlOafmO.LaHXwfavJHniHNzq/bCI3AEo562hhiWLoBSqxLy7RJJNm3fwz.sdhEhHL0`** Необязательный зашифрованный пароль. - **15803** Дата последней смены пароля. - **0** Минимальный срок действия пароля. - **99999** Максимальный срок действия пароля. - **7** Период предупреждения о пароле. Далее есть два не заданных параметра можете заметить по количеству **`:::`**: - Период неактивности пароля. - Дата истечения срока действия учётной записи. ### Права доступа к файлам **Студет должен разбираться в правах доступа к файлам.** У каждого файла в Linux есть у два владельца: **пользователь и группа**. Чтобы вывести список файлов и увидить права и владельцов фала выполните команду **`ls -l`**: ![](https://i.imgur.com/X6ZDLuZ.png) Для того чтобы изменить владельцов файла используеться утилита **chown** пример: ```bash! chown erik 1.txt # Изменит владельца файла 1.txt на пользователя erik chown .root 2.txt # Измменит владельца файла 2.txt на группу root. chown erik:root 3.txt # Изменит владельцов файла 3.txt на пользователя erik и группу root. ``` Пользователь, который создает файл, автоматически становится владельцем этого файла, а основная группа этого пользователя автоматически становится владельцем этого файла. Обычно это группа, которая указана в файле **/etc/passwd** в качестве основной группы пользователя. Однако если пользователь является членом нескольких групп, он может изменить эффективную основную группу. Для задания прав на файл может использоваться символьное обозначение: ![image alt](https://i.imgur.com/fHwWUVH.png) Либо числовое: ![image alt](https://i.imgur.com/1OLWBXj.png) У файла есть три субьекта которым выдаються права: - Права для пользователя файла - Права для группы пользователей файла - Права для всех тех кому файл не принадлежит - остальные. Это выглядит следующим образом: ![](https://i.imgur.com/UYY0YfU.png) Для того чтобы менять права на файл используеться команда **chmod** примеры: ```bash! chmod u+rwx g+x o-rwx 1.txt # Добавит пользователю файла права на (чтение запись выполнение), группе файла добавит права на выполнение и всем остальным запретит доступ к файлу в любом виде. chmod 710 1.txt # Заменит текущие права на полный доступ к файлу пользователю файла, заменит права группе на только выполнение и остальным полностью запретит выполнять какие-либо операции с файлом. ``` ### Настройка сетевых интерфейсов **Студент должен уметь настраивать сетевые интерфейсы в основных debian подобных операционных системах Linux.** #### (ifupdown) Настройка сетевых интерфейсов в Debian. Сетевые параметры в OC Debian задаються с помощью networking через конфигурацию файла: `/etc/network/interfaces`. Чтобы настроить сетевой интерфейс нужно знать его название для этого можно использовать команду **ip a** в примере название интерфейс **eth0**. Основные параметры задаються следующим образом: ```conf!= auto eth0 iface eth0 inet static address 192.168.1.35 gateway 192.168.1.1 netmask 255.255.255.0 ``` - auto указанный интерфейс необходимо запускать автоматически при загрузке системы - iface интерфейс eth0 находится в диапазоне адресов IPv4 со статическим ip - address статический ip адрес - gateway шлюз по-умолчанию - netmask маска сети Для того чтобы обновить сетевые настройки после изменения файла нужно перезагрузить сетевую службу: ```bash! systemctl restart networking.service ``` Для того чтобы интерфейс получал ip адресс по dhcp нужно в конфиге указать следующие: ```conf! auto eth0 iface eth0 inet dhcp ``` После необходимо перезагрузить сетевую службу и запросить ip адрес у dhcp сервера. ```bash! systemctl restart networking.service dhclient -v eth0 ``` #### (netplan) Настройка сетевых интерфейсов в Ubuntu. Начиная с релиза Ubuntu 17.10, для управления конфигурацией сети используется утилита **Netplan**. Раньше для этих целей применялся скрипт ifupdown, конфигурационные файлы которого находились в папке /etc/network/interfaces. Вы можете найти новые файлы конфигурации в /etc/netplan/*.yaml. Сервер Ubuntu генерирует конфигурационный файл Netplan для system-networkd под названием 01-netcfg.yaml, а рабочий стол Ubuntu генерирует конфигурационный файл Netplan для Network-Manager под названием 01-network-manager-all.yaml. Если у вас несколько интерфейсов, используйте 02-network-manager-all.yaml для второго интерфейса. Netplan применяет конфигурацию в числовом порядке. Это означает, что 01 файл будет применен раньше 02 файла. Теперь перейдем к конфигурации сети. Чтобы настроить статическую или динамическую IP-адресацию в Ubuntu, выполните следующие шаги: Сначала найдите имя активного сетевого интерфейса, который вы хотите настроить. Для этого выполните следующую команду: ```bash! ip a ``` Файл конфигурации Netplan по умолчанию находится в каталоге /etc/netplan. Вы можете найти его с помощью следующей команды: ```bash! ls /etc/netplan/ ``` Чтобы просмотреть содержимое файла сетевой конфигурации Netplan, выполните следующую команду: ```bash! cat /etc/netplan/*.yaml ``` Теперь вам нужно открыть файл конфигурации в любом редакторе: ``` nano /etc/netplan/*.yaml ``` Обновите файл конфигурации в соответствии с вашими сетевыми потребностями. Для статической IP-адресации добавьте IP-адрес, шлюз, информацию DNS, а для динамической IP-адресации нет необходимости добавлять эту информацию, так как она будет получена от DHCP-сервера. Для редактирования файла конфигурации используйте следующий синтаксис. ```netplan network: Version: 2 Renderer: NetworkManager/ networkd ethernets: DEVICE_NAME: Dhcp4: yes/no Addresses: [IP_ADDRESS/NETMASK] Gateway: GATEWAY Nameservers: Addresses: [NAMESERVER_1, NAMESERVER_2] ``` Где - DEVICE_NAME - Имя интерфейса. - Dhcp4 - да или нет в зависимости от динамической или статической IP-адресации - Addresses - IP-адрес устройства в префиксной нотации. Не используйте маску сети. - Gateway - IP-адрес шлюза для подключения к внешней сети. - Nameservers - Адреса серверов имен DNS. :::danger Обратите внимание, что файлы YAML довольно строго относятся к отступам. Используйте для отступов пробелы, а не табуляцию. В противном случае вы столкнетесь с ошибкой. ::: #### Настройка статического IP-адреса в Ubuntu Чтобы вручную настроить IP-адрес, используйте приведенный выше синтаксис конфигурационного файла и добавьте IP-адрес, шлюз и информацию о DNS-сервере. Здесь вы можете увидеть пример конфигурации для статической IP-адресации: ```netplan network: version: 2 renderer: NetworkManager ethernets: ens33: dhcp4: false addresses: - 192.168.1.25/24 nameservers: addresses: - 192.168.1.1 gateway4: 192.168.1.1 ``` Так же возможен вариант с перечислением, визуально он проще воспринимается: ```netplan network: version: 2 renderer: NetworkManager ethernets: ens33: dhcp4: false addresses: [192.168.122.250/24] nameservers: addresses: [192.168.122.1,192.168.122.2] gateway4: 192.168.122.1 ``` #### Настройка динамического IP-адреса в Ubuntu Чтобы получить IP-адресацию от DHCP-сервера, используйте тот же вышеприведенный синтаксис конфигурационного файла. Но не добавляйте IP-адрес, шлюз и информацию о DNS-сервере. Здесь вы можете увидеть пример конфигурации для динамической IP-адресации: ```netplan network: version: 2 renderer: NetworkManager ethernets: ens33: dhcp4: true ``` После завершения настройки статического или динамического IP, сохраните и выйдите из файла конфигурации. #### Тестирование конфигурации Прежде чем применять какие-либо изменения, мы протестируем конфигурационный файл. Выполните следующую команду от имени sudo для тестирования конфигурации: ```bash! netplan try ``` Если проблем нет, то будет выдано сообщение о принятии конфигурации. Если конфигурационный файл не пройдет проверку, он будет возвращен к предыдущей рабочей конфигурации #### Применение конфигурации Теперь примените новые конфигурации, выполнив следующую команду от имени sudo: ``` netplan apply ``` Если вы видите какую-либо ошибку, попробуйте выполнить отладку, чтобы выяснить проблему. Чтобы запустить отладку, выполните следующую команду от имени sudo: ``` netplan -d apply ``` #### Перезапуск сетевой службы После успешного применения всех конфигураций перезапустите службу Network-Manager, выполнив следующую команду: ```bash! systemctl restart network-manager ``` Если вы используете Ubuntu Server, вместо этого выполните следующую команду: ```bash! systemctl restart system-networkd ``` #### Вернуть в Ubuntu ifupdown Сперва отключим netplan в загрузчики grub: ```bash! sudo nano /etc/default/grub ``` И приводим строку `GRUB_CMDLINE_LINUX` к следующему виду: ```bash!= GRUB_CMDLINE_LINUX="netcfg/do_not_use_netplan=true" ``` После этого обновляем параметры grub. ```bash! sudo update-grub ``` Устанавливаем сервис networking, для этого нам необходимо установить пакет ifupdown: ```bash! sudo apt update sudo apt install ifupdown ``` Редактируем / создаем файл /etc/network/interfaces. Удаляем конфиг netplan. ```bash sudo rm -rf /etc/netplan/*.ymal ``` После чего перезагружаем систему: ```bash sudo reboot ``` ## Практическая часть 1. Создайте директорию при название используйте свою фамилию. 2. Перейдите в созданную директорию и создайте 3 файла 1-2-3.txt. 3. Использую перенаправления вывода запишите в файл 1.txt информацию о содержимом корневого каталога. 4. Выведите содержимое файла 1.txt в консоль. 5. Используя команду echo выведите в консоль сообщение «Привет Linux» 6. Запишите в файл 2.txt сообщение «Я учу Linux» не используюя текстовый редактор. 7. Откройте файл 2.txt в текстовом редакторе nano. Запишите на новой строке «Редактор nano - это круто». 8. Запишите содержимое фала 1.txt и 2.txt в файл 3.txt не используя редактор. 9. Создайте пустой файл history. Запишите в этот файл историю выполненных ранее команд без использования редактора. 10. Выведите в консоль содержимое директории. 11. Выведите в консоль содержимое файла history c нумерацией строк. 12. Выведите в консоль с помощью команд первую и последнюю строку файла history. 13. Создайте файл .secret. Выведите в консоль содержимое директории так чтобы увидеть этот файл. 14. Выведите в консоль содержимое переменной среды. Зачем нужна переменная среды? 15. Посмотрите справку по команде ip. 16. Посмотрите настройки сетевых интерфейсов с помощью команды ip. 17. Выведите с помощью команды less содержимое журнала syslog. 18. Посчитайте количество символов в файле 3.txt используя команду. 19. Используя команду man прочитайте что делает команда sort. Отсортируйте файл history тремя разными способами. 20. Вывести содержимое файла 3.txt в одну строку. 21. Скопируйте файл 1.txt в домашнию директорию пользователя. 22. Переместите файл .secret в домашнию директорию пользователя. 23. Отыщите в созданной ранее директории файлы с расширением .txt и выведите их название в консоль одной командой. 24. Удалите файл 1.txt файл .secret в домашней директории пользователя. 25. Создайте архив с помощью утилиты tar из директории в которой находитесь. Переместите архив в домашний каталог пользователя. 26. Выведите все процессы в системе запущенные от всех пользователей. 27. Отобразите процессы запущенные от пользователя root. 28. Удалите ранее созданную директорию. 29. Восстановите директорию из созданного архива. 30. Запустите задачу sleep 120 в фоновом режиме. 31. Используя утилиту top найдите PID процесса sleep и убейте процесс. 32. Создайте 3 терминала с помощью screen, в одном из терминалов выполните команду history. Во втором терминале выполните любые 3 команды. В третьем терминале еще раз выполните history. Сделайте вывод. Выйдите из виртуальных терминалов. Закройте созданные терминалы. 33. Выполните команду ping до yandex.ru. 34. Созайте нового пользователя name_N (где name - ваше имя, а N номер по журналу). Оболочкой командной строки должен быть bash у пользователя должен быть задан пароль 123, также у пользователя долже быть домашний каталог в директории /home с названием test_user. 35. Создайте группу test_users. 36. Добавьте раннее созданного пользователя в группу test_users. 37. Перейдите в директорию созданного пользователя (при необходимости создайте ее). Скопируйте в эту директорию ранее созданный файл 3.txt с изменением названия на 3.txt.test. Залогиньтесь в системе под созданным ранее пользователем. Перейдите в домашний католог этого пользователя. Создайте файл 4.txt. Сравните права и владельцев обоих файлов. 38. Измените владельца файла 3.txt.test на нового пользователя. 39. Измените права доступа на файлы так чтобы их мог прочитать и изменить любой пользователь в системе. 40. Задайте статические настройки для сетевого интерфейса виртуальной машины ubuntu используя netplan. Проверьте наличие доступа в интернет. 41. Верните networking в ubuntu и настройте интерфейс так чтобы он получал ip от dhcp сервера. ## Контрольные вопросы 1. **С помощью каких команд можно создавать и удалять файлы?** 2. **С помощью какой команды можно перемещаться по директориям в Linux?** 3. **C помощью какой команды можно посмотреть содержимое директории?** 4. **Какими командами можно выводить содержимое файлов в консоль?** 5. **Какой командой можно искать файлы по какому-либо признаку?** 6. **Какой командой можно скопировать файл?** 7. **Какой командой можно переместить файл?** 8. **Как можно посмотреть процессы запущенные от пользователя root? А от всех пользователей?** 9. **Какие команды используются для создания архивов?** 10. **Какой командой можно посмотреть конфигурацию сетевых интерфейсов? Какой командой можно проверить жив ли хост?** 11. **Какой командой можно создавать виртуальные интерфейсы?** 12. **Что такое UID/GID?** 13. **Какими командами создаються пользователи и группы пользователей?** 14. **Как менять права на файл?** 15. **Как менять владельцев файла?** 16. **Что используеться для настройки сетевых интерфейсов в ubuntu?**