# **Практическая работа №2 OS Linux**
# Практическая работа №2.1. Основы мониторинга OS Linux с помощью утилит df, du, free, iostat, mpstat, vmstat, w, htop.
### **Цель работы:**
- Изучить работу утилит df, du, free, iostat, mpstat, vmstat, w, htop.
### **Задача:**
- Изучить работу всех утилит.
- Использовать при работе исключительно терминал.
### 1. Команда df в linux
Чтобы посмотреть доступное пространство на всех примонтированных разделах и информацию о них достаточно набрать:
`df`

Утилита отображает стандартный набор колонок, но понять в ее выводе что-то с первого раза сложно. Все данные выводятся в килобайтах. Теперь давайте попросим утилиту выводить данные в более читаемом формате:
`df -h`

Это самое популярное сочетание опций, потому что оно дает максимально понятную информацию и уже можно судить о том, что происходит на диске. Например, мы видим, что в домашней папке уже занято 87% места и, возможно, пора что-то удалить. Если задать опцию -a, вы можете получить информацию обо всех файловых системах известных ядру, которые были смонтированы:
`df -a`

Здесь отображается огромное количество виртуальных файловых систем ядра. Если вы хотите вывести только информацию про реальные файловые системы на жестком диске можно использовать опцию -x чтобы отфильтровать все tmpfs:
`df -x tmpfs`

Также можно отфильтровать две файловые системы:
`df -x devtmpfs -x tmpfs`

Или же указать файловую систему, которую нужно отображать:
`df -t ext4`

Также можно указать интересующий вас раздел, как вы видели в синтаксисе команды:
`df -h /dev/sda1`

С помощью опции -i вы можете посмотреть информацию про состояние inode в вашей файловой системе:
`df -hi /dev/sda1`

Вывести объем доступного пространства в каталоге:
`df -h /home`

Команда df – очень простой в освоении, но эффективный инструмент, позволяющий всегда быть в курсе использования дискового пространства в ваших системах.
### 2. Команда du в Linux
**Команда du** , сокращение от «использование диска», сообщает приблизительный объем дискового пространства, используемого данными файлами или каталогами. Это практически полезно для поиска файлов и каталогов, занимающих большие объемы дискового пространства.
`du [OPTIONS]... FILE...`
Если данный FILE является каталогом, du будет суммировать использование диска для каждого файла и подкаталога в этом каталоге. Если *FILE* не указан, *du* сообщит об использовании диска в текущем рабочем каталоге .
При выполнении без какой-либо опции du отображает использование диска для данного файла или каталога и каждого из его подкаталогов в байтах.
`du ~/Documents`
Вы также можете передать команде du несколько файлов и каталогов в качестве аргументов:
`du ~/Documents ~/Pictures ~/.zshrc`
Если вы запустите du для файла или каталога, для которого у вас нет прав, вы получите что-то вроде «du: невозможно прочитать каталог». В этой ситуации вам нужно будет добавить к команде sudo .
**du много опций, я выделю только наиболее часто используемые.**
Параметр -a указывает du сообщать об использовании дискового пространства каждым файлом в каталоге.
`du -a ~/Documents`

Обычно вы хотите отображать только пространство, занимаемое данным каталогом, в удобочитаемом формате. Для этого используйте параметр *-h* .
Например, чтобы получить общий размер */var/lib* и всех его подкаталогов, вы должны выполнить следующую команду:
`sudo du -h /var`

Мы используем sudo потому что большинство файлов и каталогов внутри каталога /var/lib принадлежат пользователю root и не доступны для чтения обычным пользователям.
Чтобы сообщить только общий размер указанного каталога, а не подкаталогов, используйте параметр *-s* :
```
sudo du -sh /var
```

Параметр *-c* указывает *du* сообщать общую сумму. Это полезно, когда вы хотите получить объединенный размер двух или более каталогов.
```
sudo du -csh /var/log /var/lib
```

Если вы хотите отобразить использование диска подкаталогами *n-уровня*, используйте параметр *--max-depth* и укажите уровень подкаталогов. Например, чтобы получить отчет о каталогах первого уровня, вы должны использовать:
```
sudo du -h --max-depth=1 /var/lib
```

По умолчанию утилита *du* повторно использует дисковое пространство, используемое каталогом или файлом. Чтобы узнать очевидный размер файла, используйте переключатель *--apparent-size* . «Видимый размер» файла — это фактический объем данных в файле.
```
sudo du -sh --apparent-size /var/lib
```

du также позволяет использовать шаблон оболочки. Например, чтобы получить размер всех каталогов, начинающихся с «Do» в вашем домашнем каталоге, вы должны запустить:
```
sudo du -csh ~/Do*
```

**Использование du с другими командами**
Команду *du* можно комбинировать с другими командами с конвейерами.
Например, чтобы напечатать 5 самых больших каталогов внутри каталога */var* вы должны передать вывод du в команду sort чтобы отсортировать каталоги по их размеру, а затем передать результат в команду head которая распечатает только 5 верхних каталогов:
```
sudo du -h /var/ | sort -rh | head -5
```

**Выводы**
К настоящему моменту вы должны хорошо понимать, как использовать команду *du* .
В отличие от *df* который выводит информацию об использовании диска смонтированными файловыми системами , команда *du* дает вам оценку дискового пространства, используемого данными файлами или каталогами.
### 3. Команда free в Linux
Сколько свободной оперативной памяти доступно в моей системе Linux? Достаточно ли свободной памяти для установки и запуска новых приложений?
В системах Linux вы можете использовать команду free чтобы получить подробный отчет об использовании памяти системой.
Команда free предоставляет информацию об общем объеме физической памяти и памяти подкачки , а также о свободной и используемой памяти.
**Содержание**
- Как использовать команду free
- Отображение использования памяти в удобочитаемом формате
- Отображение использования памяти в других показателях
- Отображение итоговых значений столбца
- Непрерывно печатать результат
- Как использовать команду free
Синтаксис free команды следующий:
`free [OPTIONS]`
При использовании без какой-либо опции команда free будет отображать информацию о памяти и подкачке в килобайтах. 1 килобайт (КиБ) равен 1024 байтам.
**free**
Вывод будет включать три строки, заголовок, одну строку для памяти и одну для свопа:

В более старых версиях Linux вывод может немного отличаться.
Вот что означает каждый столбец:
- total — это число представляет общий объем памяти, который может быть использован приложениями.
- used — Используемая память. Он рассчитывается как: used = total - free - buffers - cache
- бесплатно — Свободная / неиспользуемая память.
- общий — этот столбец можно игнорировать, поскольку он не имеет значения. Это здесь только для обратной совместимости.
- buff / cache — объединенная память, используемая буферами ядра, а также страничным кешем и блоками. Эта память может быть освобождена в любое время, если это необходимо приложениям.
Если вы хотите, чтобы буферы и кеш отображались в двух отдельных столбцах, используйте параметр -w .
Доступно — оценка объема памяти, доступного для запуска новых приложений без подкачки.
По умолчанию команда free показывает информацию о памяти в килобайтах. Чтобы просмотреть информацию в удобочитаемом формате (обычно в мегабайтах и гигабайтах), используйте параметр **-h :**
```
free -h
```

Отображение использования памяти в других показателях
Команда free также позволяет вам указать единицы измерения памяти. Допустимые варианты:
- b , --bytes — отображать вывод в байтах.
- -kilo — отображать вывод в килобайтах (1 КБ = 1000 байт).
- -mega — отображать вывод в мегабайтах.
- -giga — Показать вывод в гигабайтах.
- -tera — Показать вывод в терабайтах.
- k , --kibi — Показать вывод в килобайтах. (1 КБ = 1024 байта). Это единица измерения по умолчанию.
- m , --mebi — Показать вывод в мегабайтах.
- g , --gibi — Показать вывод в гигабайтах.
- -tebi — отображать вывод в теробайтах.
- -peti — Показать вывод в перобайтах.
- -si — вместо 1024 используйте --mebi --si 1000. Например, --mebi --si равно --mega .
**Например, чтобы отобразить результат в мегабайтах, введите:**
```
free --mega
```

**Отображение итоговых значений столбца**
Чтобы отобразить строку, показывающую итоги столбца, используйте параметр -t . Это дает вам сумму памяти и свопа в столбцах total, used и free.
`free -h -t`

**Непрерывно печатать результат**
Чтобы постоянно отображать информацию о памяти на экране, вызовите free с параметром -s ( --seconds ), за которым следует число, определяющее задержку.
Например, чтобы распечатывать информацию о памяти каждые пять секунд, вы должны выполнить:
`free -s 5`

free команда будет продолжать отображать результат, пока вы не нажмете CTRL+C Это похоже на поведение команды watch .
Чтобы отображать результат определенное количество раз, используйте параметр -c ( --count ). В примере ниже команда выведет результат десять раз:
`free -s 5 -c 3`

### 3.1 Команда free в Linux с примерами
Автоматизируйте команду free и запускайте ее непрерывно или периодически
Еще одна отличная особенность – возможность автоматизировать команду. Есть два варианта, которые помогают нам настроить этот инструмент:
Есть параметр ‘-s’, которая запускает команду free в течение заданного интервала секунд, пока пользователь не закроет программу (^ + C).
Существует также «-c», который можно использовать отдельно или в сочетании с параметром секунд. Если вы введете только «-c» и целое число (n), команда будет запускаться n раз. По умолчанию используются интервалы в одну секунду.
Допустим, вы хотите открыть серию приложений и посмотреть, как влияет ваша память. Для тестового вывода мы будем использовать читаемый человеком формат, используя степени 1000 (Gb) вместо 1024 (GiB). Мы собираемся записать в течение 20 секунд, чтобы проанализировать воздействие. Мы собираем данные каждые 5 секунд, и будем делать это за 4 цикла. Вот этот пример, отформатированный для командной строки и ее вывода:
```free -h --si -s 5 -c 4```

Это покажет вам только один вывод для команды free, но этот вывод будет изменяться через регулярные промежутки времени.
`watch free -h`

### 4. iostat
Процесс установки iostat очень прост. iostat является частью пакета sysstat, который можно установить на вашей соответствующей системе одной из команд ниже:
Ubuntu / Debian
`sudo apt install sysstat`

**Запуск IOSTAT**
IOSTAT инструмент, который доступен через команду iostat. Введите эту команду, чтобы увидеть, как она работает:
`iostat`

**Синтаксис iostat очень простой. Вам достаточно выполнить:**
`$ iostat опции устройство интервал`
Параметры устройство и интервал необязательные. Первый указывает по какому устройству показывать статистику, а второй, с каким интервалом обновлять данные. Давайте сначала рассмотрим опции программы, которые могут вам пригодится:
- с - отобразить только информацию об использовании процессора;
- d - отобразить только информацию об использовании устройств;
- h - выводить данные в отчёте в удобном для чтения формате;
- k - выводить статистику в килобайтах;
- m - выводить статистику в мегабайтах;
- o JSON - выводить статистику в формате JSON;
- p - вывести статистику по устройству и всех его разделам;
- x - вывести расширенную статистику;
- y - отображать статистику с момента запуска утилиты, а не системы;
- z - спрятать информацию о дисках, у которых нет активности.
Самый простой пример использования утилиты, это запустить её без параметров. Она выведет отчёт с со средней статистикой с момента включения системы до момента запуска программы:
`sudo iostat`

В первой части отчёта находится информация о загруженности процессора.Для просмотра данных в удобном формате выполните:
`sudo iostat -h`

Чтобы посмотреть данные по нужному устройству просто укажите это устройство:
`sudo iostat /dev/nvme0n1`

Можно посмотреть статистику по каждому разделу устройства, тогда надо воспользоваться опцией -p:
`sudo iostat -p /dev/nvme0n1`
![Uploading file..._3s17wrrlf]()
Чтобы утилита автоматически обновляла данные каждую секунду просто добавьте интервал. Например:
`sudo iostat -p /dev/nvme0n1 1`

Если вы не хотите чтобы утилита суммировала все данные с момента запуска операционной системы, то можно использовать опцию -y. Но работает она только если задан интервал:
`sudo iostat -y -p /dev/nvme0n1 1`

### 4.1 Профилирование нагрузки на файловую систему с помощью iostat
Для начала разумно сохранить df -hl для того чтобы понимать о каких разделах идет речь.
```
df -hl
```

### 5. mpstat
### 5.1 Отображение всей информации
Опция «-А», показывает всю информацию, которая может быть отображена с помощью команды mpstat, как показано ниже. Это действительно эквивалентно команде «-I ALL -u -P mpstat ALL» команды:
`mpstat -A`

### 5.2 Показать статистику CPU индивидуального процессора (или) ядра
Параметр «-P ALL», покажет все индивидуальные процессоры или ядра вместе со статистикой:
`mpstat -P ALL`

### 5.3 Для отображения статистически о конкретном CPU или ядре, используйте опцию «-P», как показано ниже:
`mpstat -P 0`

### 5.4 Можно выполнить «mpstat -V» чтобы показать версию утилиты:

### 5.5 Дополнительные опции

### 6. vmstat
В первую очередь нужно вызвать команду vmstat,

**vmstat -a**
(active/inactive memory) - активная/неактивная память

**vmstat -f**
(number of forks since boot) - количество вилок с момента загрузки

**vmstat -d**
(disk statistics) - статистика диска

**vmstat -D**
(summarize disk statistics) - (общая статистика диска)

**vmstat --help**

vmstat 1 - 60 - через какое количество секунд выводить информацию

### 7. Утилита/команда " w "
Выводит краткую сводку о работающих в системе в данный момент пользователях (залогиненных пользователях), а также о том, какие процессы у них запущены

В таблице для каждого пользователя выводятся следующие поля:
```
USER — имя пользователя.
TTY — название терминала.
FROM — название удаленного компьютера или IP-адрес.
LOGIN — время входа в систему.
IDLE — время бездействия.
JCPU — время, использованное всеми процессами, подключенными к tty. Оно не включает завершенные фоновые задания, но включает фоновые задания, работающие в данный момент.
PCPU — время, использованное текущим процессом, который указан в поле WHAT.
WHAT — текущий процесс (командная строка текущего процесса).
```
- h
Не выводить заголовок у таблицы.

- u
Игнорировать имена пользователей при определении времени текущего процесса и времени CPU.

- s
Использовать сокращенный формат вывода. Не выводить колонки JCPU и PCPU.

- f
Включить или выключить вывод поля from, которое соответствует имени удаленного хоста (remote hostname). В зависимости от дистрибутива Linux (версии утилиты w), поле from может выводиться или не выводиться по умолчанию.

- i
Выводить в поле from IP-адрес вместо имени хоста (hostname), если это возможно.

- o
Выводить информацию в старом формате. Время, которое меньше 1 минуты, не выводится.

- V
Вывести версию утилиты w.

### 8. Утилита htop

**Как установить htop**
`sudo apt install htop`

**Как просмотреть все процессы в Linux**
Команду htop можно запускать как с правами обычного пользователя:
`htop`

Так и с привилегиями суперпользователя, для этого используйте sudo:
`sudo htop`
*Чтобы программа выводила новые данные раз в 5 секунд:*`sudo htop -d 50`

**Как вывести процессы в виде дерева**
*Для вывода процессов в виде дерева используйте опцию -t:*`sudo htop -t`

# Практическая работа №2.2
---
# Установка и настройка сервера SSH в Linux
### **Цель работы:**
- Научиться настраивать SSH-сервер, клиент.
### **Задача:**
- Установить, настроить SSH-сервер, клиент.
- Отключить доступ по root-пользователю.
- Сменить порт по умолчанию на любой другой.
- Подключиться к серверу linux c хостовой операционной системы через Putty**.**
## 1. Установка пакетов SSH
`$ sudo apt install ssh`

`$ systemctl status ssh`

или:
`$ service ssh status` даст тот же вывод. Теперь сервер работает с базовыми настройками по-умолчанию.

## 2. Настройка SSH
Режим работы SSH-сервера с настройками по-умолчанию хоть и является вполне работоспособным для небольших частных сетей, всё же нуждается в задании некоторых важных параметров для использования на высоконадёжных публичных серверах. Настройки демона хранятся в файле `/etc/ssh/sshd_config`. Посмотреть его можно командой
`cat /etc/ssh/sshd_config`


**Для применения сделанных настроек необходим перезапуск SSH-сервера:**
`$ systemctl restart ssh`

## 3. Настройка и использование клиента SSH
- Для подключения по к серверу используется команда:
`$ ssh user_name@host_name`

## 4. Для генерации ключей используется утилита ssh-keygen:
`$ ssh-keygen`

Копируем файл id_rsa, и конвертируем его в puttygen




Заходим в putty и выбираем наш созданный приватный ключ

Подключаемся к нашей машине по ssh

Вводим логин и парольную фразу

# Практическая работа №2.3
---
# Практическая работа "Установка и настройка SSH-authorized_keys"
### **Цель работы:**
- научиться настраивать SSH-authorized_keys.
- научиться работать с ключами SSH.
### **Задача:**
- Разобраться как работает доступ по ключам.
- Организовать аунтификацию к серверу linux через ключи.
- Организовать аунтификацию к серверу linux через ключи без пароля.
## 2. Создание ключей SSH
Первый шаг для настройки аутентификации ключей SSH на сервере заключается в том, чтобы сгенерировать пару ключей SSH на локальном компьютере.
Для этого мы можем использовать специальную утилиту ssh-keygen, которая входит в стандартный набор инструментов OpenSSH. По умолчанию она создает пару 2048-битных ключей RSA, что подходит для большинства сценариев использования.
Сгенерируйте на локальном компьютере пару ключей SSH, введя следующую команду:
`ssh-keygen`

## 3. Как скопировать открытый ключ на ваш сервер
Синтаксис выглядит следующим образом:
`ssh-copy-id username@remote_host`

**Теперь ваш ключ `id_rsa.pub` выгружен в удаленную учетную запись.**
## 4. Аутентификация на сервере с использованием ключей SSH
`ssh username@remote_host`
**Вводим парольную фразу**

**Подключаемся**

## 5. Отключение аутентификации с помощью пароля на сервере
`sudo nano /etc/ssh/sshd_config`


`PasswordAuthentication no`
`sudo service ssh restart`

Так же я создал алиас, чтобы подключаться к удалённой машине по хостовому имени

## 6. Пробуем подключиться к удалённой машине
Пробуем подключиться через алиас

Всё работает, после введённой команды для подключения, мы сразу подключаемся без пароля
# Практическая работа №2.4
---
## Практическая работа "Сбор информации о Linux и WGET"
### **Цель работы:**
- Научиться базовому сбору информации о Linux системах.
### **Задача:**
- Научитесь скачивать файлы с помощью утилиты wget.
- Научиться проверять пакеты на целостность.
### 1.Базовый сбор информации
Начнём со сбора информации о дистрибутивах
*cat /etc/release - информация о дистрибутиве и какая версия его*

```
Показать Kali-релизы
<https://www.kali.org/releases/>
```
```
Если смотреть дистрибутив debian можно обратить внимание, что тут как раз много веток пооддержек
<https://www.debian.org/index.ru.html>
```
**По ядру linux можно понять следующее:**
**uname -a**

**whoami**
Как следует из названия, команда whoami выводит имя пользователя для эффективного идентификатора пользователя. Другими словами, он отображает имя текущего вошедшего в систему пользователя.

гзешь
**Команда uptime покажет, когда и сколько система работала и соответственно, если она работала без перерыва 3 года, то злоумышлинник может воспользоваться старыми уязвимостями для получения доступа или внедрения кода.**

**Давайте посмотри права директории /home**

**Чтобы ограничить права другим пользователям делаем следующее
sudo chmod o-rx /home/kali**

*Давайте рассмотрим, почему нам надо изменять права. по умолчанию каждый из пользователей может попасть в директорию любого пользователя, т.е. пользователь kali может попасть в директорию любого пользователя.*
**ip neigh - показывает с какими компьютерами происходит обмен данными**

**sudo ss -tlnp - показывает какие сервисы и с какими портами запущены**

**sudo -l - позволяет нам понять, что есть в этом машинки и что пользователь может**

`в данном случае мы можем запускать любые команды от любого user`
### 2.Суидные файлы
**Suid**
*setuid и setgid являются флагами прав доступа в Unix, которые разрешают пользователям запускать исполняемые файлы с правами владельца или группы исполняемого файла. В Unix-подобных системах приложение запускается с правами пользователя, вызвавшего указанное приложение. Это обеспечивает дополнительную безопасность, так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю root.*
[https://ru.wikipedia.org/wiki/Suid](https://ru.wikipedia.org/wiki/Suid)
В системе могут быть различные закладки
`sudo find / -user root -perm -4000 -exec ls -ldb {} \\; 2> /dev/null`

**Базовый сбор информации может происходить не только вручную, давайте разберемся**
*давайте разберем как это делать: переходим по ссылке и затем скачиваем утилиту*
[https://cisofy.com/downloads/lynis/](https://cisofy.com/downloads/lynis/)
- *нам надо скопировать ссылку данной утилиты и скачать её с помощью wget например в директорию /tmp **
`wget <https://downloads.cisofy.com/lynis/lynis-3.0.6.tar.gz`>

**далее необходимо разаархивировать вводим следующее:**
tar xfv lynis-3.0.3.tar.gz

затем давайте проверим контрольную сумму с сайта и то, что мы скачали

`3005346e90339c18a4c626169c6f1d9fb8643bb0d0a049bcaf64b7ccb4fd272c`
*делается это следующей командой*
`sha256sum lynis-3.0.6.tar.gz`

**далее переходим в директорию lynis**
```
cd lynis
ls
```

**далее запускаем утилиту lynis**
`sudo ./lynis audit system`

*нажимаем Enter*

*Это вывод report-отчёт*

**ещё можно набрать команду** `./lynis show options`

**Перенаправлять файлы лучше через стандартный report утилиты:**
`/var/log/lynis-report.dat`


### 3. Проверка целостностей пакетов
для просмотра пакетов в системе
```
dpkg -l
```

для просмотра установленных утилит необходимо набрать следующую команду
```
dpkg -L coreutils
```
- она покажет все штатные утилиты

например рассмотрим утилиту /bin/dir
/bin/dir --help
которая позволяет нам работать по сути как ls

что будет если мы поменяем /bin/false на /bin/dir тем самым с имитируем подмену или правку кода программы
сделаем backup sudo mv /bin/dir /bin/dir.bak

вводим команду sudo cp /bin/false /bin/dir

теперь при запуске dir мы можем уыидеть, что ничего не будет происходить, кроме как если посмотреть логическую ложь, то будет ошибка
```
echo $?
```

соответственно, чтобы нам быстро проверить этот пакет мы можем выполнить команду
```
debsums
```
и если она не установленна, то необходимо её установить через команду
```
sudo apt install debsums
```

**debsums** служит, в первую очередь, для нахождения изменённых администратором файлов установленных в системе пакетов или повреждённых файлов из-за некачественного носителя и в какой-то мере используется в качестве инструмента обеспечения безопасности.
- debsums -a - Проверяет все файлы (включая конфигурационные, которые обычно располагаются слева)
- debsums -e - Проверяет только конфигурационные файлы пакетов
- debsums -с - Выводит список измененных на stdout файлов
- debsums -I - Отображает файлы, в которых отсутствует информация о md5sum
- debsums -s - Выводит только ошибки; при их отсутствии не производит никаких действий
debsums <название программного пакета> - Отображает пакеты, которые необходимо проверить с помощью debsums
- `debsums -ac coreutils` - запуск проверки
- `debsums -cs coreutils` - запуск проверки

можно также проверить утилитой
```
dpkg --verify coreutils
```

но он будет более загадачным
в RedHat используется немного подругому
- rpm -V openssh-server $ `rpm -q -dump openssh-server`
и находятся контрольные суммы тут `/var/lib/rpm/Packages`
- в Debian тут `/var/lib/dpkg/info/*.md5sums`
Если кто-то смог проникнуть в систему и что-то деал в ней нам поможет команда find
Например, если нам надо рассмотреть какой либо инцидент:
`sudo find / -printf "%T@;%Tc;%p\\n"`

можно указать через пробел, но тогда будет сложно работать с выводом данных:
`sudo find / -printf "%T@ %Tc %p\\n"`
```
-prinf - то где мы будем искать
%T@ - время ввиде числа
%Tc - время человека читаемое
%p\\n - путь до файла
```
Далее если надо сделать по одному конкретному пользователю необходиму следующие:
`sudo find /home/kali/ -printf "%T@;%Tc;%p\\n" > timeline.csv`

Затем желательно это отсортировать, например:
`head timeline.csv` сейчас никак не отсортированно
Но давайте отсортируем данный файл с помощью команды:
`sort -rn timeline.csv | less`
где флаг `-r` как раз будет указывать, что последнее изменение будет первым

**Мы можем видеть, что менялось и в какое время, что позволит увидеть все изменения.**
# Практическая работа №2.5
---
## Практическая работа "Переменные окружения в Linux .bashrc, .bash_profile и .bash_login"
### **Цель работы:**
- Научиться работать с переменным окружением в linux.
### **Задача:**
- Научиться работать c .bashrc, .bash_profile и .bash_login.
### 1. Просмотр списка системных переменных окружения
Пропишем команду sudo `apt-get install coreutils`, чтобы проверить наличие данной утилиты у вас в системе и сразу же установить ее при надобности.
*Процесс укажет какие добавлены новые файлы или их наличии в библиотеках.*

Теперь воспользуемся командой
```
Coreutils
```
, чтобы раскрыть список всех переменных окружения.
*Выражение до знака = — название переменной, а после — ее значение.*

### 1.1 Список основных системных и пользовательских переменных окружения.
**Обратить внимание хотелось бы на такие пункты:**
- DE. Полное название — Desktop Environment. Содержит имя текущего окружения рабочего стола. В операционных системах на ядре Linux используются различные графические оболочки, поэтому приложениям важно понимать, какая сейчас активна. В этом и помогает переменная DE. Пример ее значений — gnome, mint, kde и так далее.
- PATH — определяет список директорий, в которых происходит поиск различных исполняемых файлов. Например, при действии одной из команд по поиску и доступу к объектам они обращаются к этим папкам для быстрого поиска и передачи исполняемых файлов с указанными аргументами.
- SHELL — хранит в себе опцию активной командной оболочки. Такие оболочки позволяют пользователю самостоятельно прописывать определенные скрипты и запускать различные процессы с помощью синтаксисов. Самой популярной оболочкой считается bash. Список остальных распространенных команд для ознакомления вы найдете в другой нашей статье по следующей ссылке.
- HOME — здесь все достаточно просто. Данный параметр указывает путь к домашней папке активного юзера. У каждого юзера он разный и имеет вид: /home/user. Объяснение этому значению тоже легкое — эта переменная, например, используется программами для установления стандартного места расположения их файлов. Конечно, примеров существует еще огромное количество, но для ознакомления этого достаточно.
- BROWSER — содержит в себе команду для открытия веб-обозревателя. Именно эта переменная чаще всего и определяет браузер по умолчанию, а все остальные утилиты и ПО обращаются к указанной информации для открытия новых вкладок.
- PWD и OLDPWD. Все действия из консоли или графической оболочки происходят из определенного расположения в системе. Первый параметр отвечает за текущее нахождение, а второй показывает предыдущее. Соответственно, их значения меняются достаточно часто и хранятся как в пользовательских конфигурациях, так и в системных.
- TERM. Программ-терминалов для Linux существует большое количество. Упомянутая переменная хранит в себе информацию о названии активной консоли.
- RANDOM — содержит в себе скрипт, генерирующий каждый раз случайное число от 0 до 32767 при обращении к этой переменной. Такая опция позволяет другому софту обходиться без собственного генератора случайных чисел.
- EDITOR — отвечает за открытие редактора текстовых файлов. Например, по умолчанию вы можете встретить там путь /usr/bin/nano, но ничего вам не мешает изменить его на любой другой. За более сложные действия с тестом отвечает VISUAL и запускает, например, редактор vi.
- HOSTNAME — имя компьютера, а USER — имя текущей учетной записи.
### 2. Запуск команд с указанием нового значения переменной окружения
Можно самостоятельно на время изменить опцию любого параметра, чтобы запустить с ним определенную программу или выполнить любые другие действия. В таком случае в консоли вам будет достаточно прописать `env VAR=VALUE`, где `VAR` — название переменной, а `VALUE` — ее значение, например, путь к папке `/home/kali`.

*При следующем просмотре всех параметров через упомянутую выше команду `printenv` вы увидите, что указанное вами значение было изменено. Однако оно станет таким, как было по умолчанию, сразу же после следующего обращения к ней, а также функционирует только в пределах активного терминала.*
### 2.1 Установка и удаление локальных переменных окружения
Из проделанного выше вы уже знаете о том, что локальные параметры не сохраняются в файлах и активны только в рамках текущей сессии, а после ее завершения удаляются. Если вас интересует собственное создание и удаление таких опций, сделать нужно следующее:
Запустите «Терминал» и напишите команду `VAR=VALUE`, после чего нажмите на клавишу `Enter`. Как обычно, VAR — любое удобное название переменной одним словом, а `VALUE` — значение.
Проверьте действенность произведенных действий, введя `echo $TESTKALI`. Строчкой ниже вы должны получить опцию переменной.
Удаляется любой параметр командой `unset TESTKALI`.
Проверить удаление можно также через
```
echo $TESTKALI
```
(следующая строка должна быть пустой).

Таким нехитрым образом добавляются любые локальные параметры в неограниченном количестве.
### 2.2 Добавление и удаление пользовательских переменных
Рассмотрим классы переменных, которые хранятся в конфигурационных файлах, а из этого выплывает то, что придется редактировать сами файлы. Делается это с помощью любого стандартного текстового редактора.

*Пользовательскую конфигурацию можно редактировать через* `sudo nano .bashrc.`

*Обновление конфигурации произойдет после повторного старта файла, а делается это через* `source .bashrc.`
*Проверить активность переменной можно через ту же опцию* `echo $TESTKALI`.

**Что касается удаления параметров, то происходит оно тоже через конфигурационный файл. Достаточно полностью удалить строку или закомментировать ее, добавив в начале знак #.**
### 2.3 Создание и удаление системных переменных окружения
**Осталось только затронуть третий класс переменных — системные.**
Редактироваться для этого будет файл /ETC/PROFILE, который остается активным даже при удаленном подключении, например, через известный многим менеджер SSH. Открытие конфигурационного элемента осуществляется примерно так же, как и в предыдущем варианте:
введите `nano /etc/profile`

Внесём `TESTKALI2=/home/kali12345`

Сохраняем и выходим.
Пишем команду `source /etc/profile` - чтобы изменения вступили в силу.
Проверяем:
`echo $TESTKALI2=/home/kali12345`
