# Лабораторная работа 1. Работа с консолью в Linux.

Цель<br>

Получение базовых навыков при работе с консолью в операционной системе Linux (CentOS 7).<br>

Задачи
1) Подключиться к виртуальной машине в RESDS Dashboard.
2) Выполнить базовые действия с файлами и папками.
3) Установить пакет wget.
4) Научиться работать с переменными окружения.
5) Создать нового пользователя и подключиться к нему. Поменять shell у пользователя.
6) Изучить работу с текстом в Bash.

Схема виртуального стенда

<div drawio-diagram="139"><img src="https://docs.resds.ru/uploads/images/drawio/2022-02/TqfZulUuWLW6zPxp-drawing-3-1645731066.png"></div>

Для работы с облачной платформой необходимо прочитать [инструкцию](https://docs.resds.ru/books/obshchie-instruktsii/page/podklyuchenie-k-oblachnoy-platforme-resds).

Переключиться на проект [GROUP]:[team]-lab:1-2.
Подключиться к `labnode`, логин - `labuser`, пароль - `labpass1!`

#### Задание 1. Работа с файловой системой.

1.	Создать директорию task01. Перейти в неё.
```sh
mkdir task01
cd task01
```
2.	Создать в домашнем каталоге текстовый файл user при помощи текстового редактора `vi`, и заполнить его произвольными символами. 
```sh
vi user
```
3.	Скопировать файл `user` в новый файл с именем `root`.
```sh
cp user root
```
4.	Посмотреть права доступа на файлы можно с помощью команды:
```sh
ls -l
```
5.	Задать владельца root и группу root на файл root. (sudo позволяет выполнять команды от `root`; ввести пароль в диалоговом окне, при этом символы отображаться не будут; пароль - `labpass1!`)
```sh
sudo chown root:root root
```
6.	Переименовать (т.е. переместить с новым именем) файл `user` в файл `lock`.
```sh
mv user lock
```
7.	На файл root поставить доступ на чтение и запись группе и владельцу остальным только на чтение.
```sh
sudo chmod 664 root
```
8.	На файл lock поставить доступ на чтение владельцу, группе и остальным пользователям убрать доступ на чтение запись и исполнение.
```sh
chmod 600 lock
```
9.	Вывести содержимое файла root в терминал.
```sh
cat root
```
10.	Отредактировать файл root случайным образом и вывести его содержимое в консоль.
```sh
sudo vi root 
cat root
```
11.	Удалить каталог task01.
```sh
cd
sudo rm -rf task01
```


#### Задание 2. Установка пакетов.
Для установки, удаления, обновления пакетов в ОС CentOS 7 используется утилита yum (аббр. Yellowdog Updater, Modified). 
В процессе установки/обновления/удаления пакетов нужно будет подтвердить установку новых версий, нажав `y`. Или же использовать флаг `-y`.

Для установки/удаления пакетов существуют команды:
```sh
sudo yum install -y package_name
sudo yum remove -y package_name
```
В качестве примера необходимо установить программу для скачивания файлов по web-протоколам - `wget`.
```sh
sudo yum install wget
```
Можно проверить версию установленного пакета:
```sh
wget –-version
```

#### Задание 3. Создание пользователей.

Создать нового пользователя newuser с паролем `newpass1!`. Сделать его администратором.
```sh
sudo adduser newuser
sudo passwd newuser # Ввести пароль newpass1!, при этом пароль отображаться не будет
sudo usermod -aG wheel newuser # Добавить пользователя newuser в группу wheel, что даст ему права на исполнение команд с sudo
```
Для того, чтобы выполнять команды от имени пользователя `newuser`, необходимо сменить текущее окружение на окружение пользователя newuser командой - `su`. При этом нужно будет ввести пароль пользователя `newuser`.
```sh
su - newuser
```

Имя пользователя изменилось с `labuser` на `newuser`. Также, имя пользователя хранится в переменной окружения `$USER`. Просмотреть значение переменной можно с помощью команды `echo`.
```sh
echo $USER
```
Чтобы узнать, в каких группах состоит текущий пользователь, используется команда `groups`. В данном случае это должны быть группы `newuser` и `wheel`.
```sh
groups
```

Для выхода из оболочки используется команда `exit`. При этом выход идет в оболочку, запущенную пользователем `labuser`. 
```sh
exit
```

Теперь нужно сменить оболочку, запускаемую по умолчанию при входе пользователя `newuser`. Чтобы узнать список доступных в системе оболочек, используется следующая команда:
```sh
cat /etc/shells
```
Сейчас должна быть запущена оболочка `/bin/bash`. Чтобы узнать, какая оболочка запущена сейчас, можно вывести на экран значение переменной `$0`.
```sh
echo $0
```

Чтобы просто запустить оболочку, достаточно просто набрать путь к ней.  Запустить оболочку - `sh`, и вывести на экран переменную - `$0`. После выйти обратно в `bash`.
```sh
/bin/sh
echo $0
exit
```

Чтобы сменить оболочку по умолчанию для пользователя, можно отредактировать файл `/etc/passwd`, либо можно использовать утилиту `usermod`. Необходимо посмотреть, какая оболочка сейчас является оболочкой по умолчанию для пользователя `newuser`, сменить её на `/bin/sh`, и проверить изменения.

```sh
sudo grep newuser /etc/passwd # grep - программа для поиска по тексту. В данном случае, выведет все строки, содержащие newuser. 
sudo usermod --shell /bin/sh newuser
sudo grep newuser /etc/passwd # Данная команда произведет поиск по файлу 
                              # /etc/passwd, и отобразит в консоли все 
                              # строки, в которых присутствует слово
                              # newuser. В этой же строке будет указано,
                              # какая оболочка используется данным
                              # пользователем
```
Теперь необходимо переключиться в режим работы от имени пользователя `newuser`, и проверить, какая оболочка используется. После выйти из этого режима, и удалить пользователя.
```sh
su - newuser
echo $0
exit
sudo userdel -r newuser # флаг r используется, когда вы хотите удалить также домашний каталог пользователя.
```

#### Задание 4. Работа с текстом в bash.
Для практики нужно воспользоваться текстовым файлом, специально созданным для выполнения задания - таблица подключений OpenVPN, состоящая из имени клиента, IP адреса, MAC адреса устройства и внешнего IP, с которого клиент подключился. Необходимо загрузить файл, воспользовавшись специальной утилитой  s3cmd, загружающего файлы с облачного хранилища, работающему по специальному протоколу s3(simple storage server):
```sh
sudo yum install s3cmd -y
sudo yum upgrade -y
cd ~ 
cp /var/lib/cloud/s3cfg .s3cfg
s3cmd get s3://lab1/clients.txt ~/
```
Вывести содержимое файла в консоль (Тут для удобства можно пользоваться встроенными в консоль горячими клавишами: Ctrl+L - Очистить содержимое консоли, Shift+PgUp - Прокрутить консоль вверх, Shift+PgDn - Прокрутить консоль вниз).
```sh
cat ~/clients.txt
```
Для того, чтобы вывести строки, содержащие подстроку, можно использовать grep. Необходимо вывести информацию о клиенте под номером 24 (grep - регистрозависимый, Client24 начинается с заглавной буквы).
```sh
grep Client24 ~/clients.txt
```
В результате исполнения команды должна быть выведена одна строка. Если было несколько строк, содержащих подстроку Client24, то в результате выведется несколько строк. Далее необходимо ввести команду:
```sh
grep Client2 ~/clients.txt
```
Необходимо попробовать понять, сколько будет выведено строк и почему именно они. 

Помимо обычных строк grep поддерживает также регулярные выражения. При этом регулярные выражения должны экранироваться символом \. С помощью регулярных выражений можно задать абсолютно любой паттерн. Относительно простой - вывести всех клиентов, имя которых заканчивается на 4. Точка в выражении означает любой символ.
```sh
grep Client\.4 ~/clients.txt
```
grep также умеет работать с пайплайном (вертикальная черта). С помощью пайплайна можно передавать вывод от одной программы другой, по принципу конвейера. Например, можно вывести текст через cat, и передать этот вывод на вход команды grep, для его обработки этой командой.
```sh
cat ~/clients.txt  |  grep Client\.4
```
Пайплайнов может быть несколько. Так, например, воспользовавшись программой AWK можно вывести только имя клиента и его внешний адрес - то есть первый и четвертый столбцы. (Внимание на пробел в двойных кавычках между номерами столбцов. Это разделитель, который будет между столбцами в конечном результате. Пробел можно заменить на любой другой символ, например, на дефис -, или символ табуляции \t. Можно попробовать это сделать)
```bash
cat ~/clients.txt  |  grep Client\.4 | awk ‘{print $1” “$4}’
```
AWK также поддерживает функции в своем синтаксисе. Например, чтобы вывести имя клиента и MAC, при этом чтобы MAC печатался заглавными буквами, нужно использовать следующую конструкцию.
```bash
cat ~/clients.txt  |  grep Client\.4 | awk ‘{print $1” “toupper($3)}’
```
Далее необходимо вывести MAC адрес, чтобы он был разделён не двоеточиями, а дефисами, тогда можно воспользоваться sed. Нужно лишь задать параметры для замены. После этого результат можно вывести не в консоль, а в новый файл (набирать в одну строку):
```sh
cat ~/clients.txt  |  grep Client\.4 | awk ‘{print $1” “toupper($3)}’ | sed -r ‘s/:/-/g’ > newfile.txt
```