Отчёт по заданию 2.
Занятиe 2. Администрирование Linux.
Выполнил Бершауэр Владислав.
Практическая работа №1,2,3,4,5.
Ход работы:
## **Часть 2.1. Основы мониторинга OS Linux с помощью утилит df, du, free, iostat, mpstat, vmstat, w, htop.**
### 1. Команда df в linux
Утилита df поставляется по умолчанию во всех дистрибутивах Linux и имеет очень простой синтаксис. Фактически вы можете просто набрать df и уже получить результат, но чтобы сделать вывод более читаемым используются дополнительные опции. Вот основной синтаксис:
`$ df опции устройство`

Устройство указывать необязательно, но можно указать раздел диска, о котором мы хотим посмотреть информацию. А теперь рассмотрим основные опции утилиты:
- a, –all – отобразить все файловые системы, в том числе виртуальные, псевдо и недоступные;

- B – изменить размер одного блока перед выводом данных, например, можно использовать BM, чтобы вывести все данные в мегабайтах;

- h – выводить размеры в читаемом виде, в мегабайтах или гигабайтах;

- H – выводить все размеры в гигабайтах;

- i – выводить информацию об inode;

- k – выводить размеры в килобайтах;

- –output – использовать специальный формат вывода, если не задано, выводит все поля. Доступны такие варианты: ‘source’, ‘fstype’, ‘itotal’, ‘iused’, ‘iavail’, ‘ipcent’, ‘size’, ‘used’, ‘avail’, ‘pcent’, ‘file’ и ‘target’;

- P – использовать формат вывода POSIX;

- –total – выводить всю информацию про использованное и доступное место;

- t, –type – выводить информацию только про указанные файловые системы;

- x – выводить информацию обо всех, кроме указанных файловых систем;

- Теперь, после основных опций рассмотрим подробнее как примеры df linux.
**Посмотрим, что говорит справка. Результат выполнения df –help**
*Основные параметры:*
- a, –all. показать все файловые системы.
- h. Опция позволяет показать информацию более наглядной. Размеры выводятся в мегабайтах и гигабайтах.
- H. Размеры показываются в гигабайтах.
- k. Данная опция показывает на экране терминала размеры в килобайтах.
- t, –type. Выводит информацию только про указанную файловую систему.
- –total. Опция показывает всю информация о дисковом пространстве.
- Как пользоваться df
Чтобы посмотреть доступное пространство на всех примонтированных разделах и информацию о них достаточно набрать:
`df`

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

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

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

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

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

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

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

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

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

Вы также можете передать команде du несколько файлов и каталогов в качестве аргументов:

Если вы запустите du для файла или каталога, для которого у вас нет прав, вы получите что-то вроде «du: невозможно прочитать каталог». В этой ситуации вам нужно будет добавить к команде sudo .
**du много опций, я выделю только наиболее часто используемые.**
Параметр -a указывает du сообщать об использовании дискового пространства каждым файлом в каталоге.

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

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

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

Если вы хотите отобразить использование диска подкаталогами *n-уровня*, используйте параметр *--max-depth* и укажите уровень подкаталогов. Например, чтобы получить отчет о каталогах первого уровня, вы должны использовать:

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

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

**Использование du с другими командами**
Команду *du* можно комбинировать с другими командами с конвейерами.
Например, чтобы напечатать 5 самых больших каталогов внутри каталога */var* вы должны передать вывод du в команду sort чтобы отсортировать каталоги по их размеру, а затем передать результат в команду 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 также позволяет вам указать единицы измерения памяти. Допустимые варианты:
- 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 .

**Например, чтобы отобразить результат в мегабайтах, введите:**

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

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

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

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

Мы подождали несколько секунд, а затем открыли несколько вкладок браузера и получил доступ к некоторым закладкам. Стресс этих видов деятельности отмечен колебаниями объема производства. Обратите внимание, что эффект будет более выраженным при использовании выходного формата с меньшим округлением. В наших чисто демонстрационных целях это не нужно.
Если вы хотите постоянно отслеживать использование памяти командой free, но не хотите, чтобы ее вывод загромождал экран, вы можете использовать команду watch вместе с командой free.
Это покажет вам только один вывод для команды free, но этот вывод будет изменяться через регулярные промежутки времени.
`watch free -h`

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

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

**Синтаксис iostat очень простой. Вам достаточно выполнить:**
`$ iostat опции устройство интервал`
Параметры устройство и интервал необязательные. Первый указывает по какому устройству показывать статистику, а второй, с каким интервалом обновлять данные. Давайте сначала рассмотрим опции программы, которые могут вам пригодится:
- с - отобразить только информацию об использовании процессора;

- d - отобразить только информацию об использовании устройств;

- h - выводить данные в отчёте в удобном для чтения формате;

- k - выводить статистику в килобайтах;

- m - выводить статистику в мегабайтах;

- o JSON - выводить статистику в формате JSON;

- p - вывести статистику по устройству и всех его разделам;

- x - вывести расширенную статистику;

- y - отображать статистику с момента запуска утилиты, а не системы;

- z - спрятать информацию о дисках, у которых нет активности.
-

Самый простой пример использования утилиты, это запустить её без параметров. Она выведет отчёт с со средней статистикой с момента включения системы до момента запуска программы:
`sudo iostat`

В первой части отчёта находится информация о загруженности процессора. Тут есть такие колонки:
- %user - процент использования процессора программами, запущенными на уровне пользователя;
- %nice - процент использования процессора программами запущенными тоже в пространстве пользователя, но только с изменённым приоритетом;
- %system - процент использования процессора ядром;
- %iowait - процент времени затраченного на ожидание завершения операций ввода/вывода;
- %steal - процент простоя виртуального процессора, пока гипервизор отдаёт мощность другому виртуальному процессору;
- %idle - процент времени пока процессор не занят ничем.
Если значение параметра %iowait слишком большое, то это может означать, что у вас проблема с производительностью диска и слишком много времени тратится на ожидание завершения ввода/вывода. Для устройств ввода/вывода тоже отображается ряд колонок с информацией. Разберемся что они означают:
- tps - означает количество запросов на чтение или запись к устройству в секунду;
- KB_read/s, MB_read/s - количество килобайт или мегабайт, прочитанных с устройства за секунду;
- KB_wrtn/s, MB_wrtn/s - количество килобайт или мегабайт записанных на устройство в секунду;
- KB_dscd/s, MB_dscd/s - скорость освобождения блоков данных на устройстве, килобайт или мегабайт в секунду;
- KB_read, MB_read - общее количество прочитанных данных с диска с момента загрузки системы;
- KB_wrtn, MB_wrtn - количество записанных данных с момента загрузки системы;
- KB_dscd, MB_dscd - количество освобождённых блоков на диске в результате выполнения операции trim в килобайтах или мегабайтах.
С чтением и записью, я думаю, что всё понятно. Освобождение блоков с данными с помощью операции trim или discard актуально для SSD дисков. Этой операцией файловая система сообщает какие блоки больше хранить физически не нужно и можно использовать для других целей. Утилита отображает с какой скоростью эти блоки освобождаются, а также сколько блоков или мегабайт данных было освобождено. Рассмотрим ещё несколько примеров. Для просмотра данных в удобном формате выполните:

Чтобы посмотреть данные по нужному устройству просто укажите это устройство:

Можно посмотреть статистику по каждому разделу устройства, тогда надо воспользоваться опцией -p:

Чтобы утилита автоматически обновляла данные каждую секунду просто добавьте интервал. Например:

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

### 4.1 Профилирование нагрузки на файловую систему с помощью iostat
Зачастую работа «в поле» требует сбора и анализа информации на сайте заказчика в условиях наличия крайне скудного списка утилит. В частности собрать информацию об использовании системы ввода-вывода в течении дня.
В статье я попробую показать, как располагая только iostat и gnuplot можно попробовать провести анализ системы и какие выводы можно сделать.
Я не претендую на доскональное владение предметом и точное использование терминов. Более того, я постараюсь говорить «обычным» языком и не бросаться терминами.
Все описанное ниже есть плод опыта, ошибок, гугления, курения манов и прочая
**Небольшой ликбез**
В терминах оценки производительности системы ввода-вывода в части хранения, есть несколько характеристик:
Пропускная способность (байт в секунду) — максимальная линейная скорость с которой устройство пишет или читает один, но очень большой файл.
IOPS (операций в секунду) — число запросов, отправленных на устройство. Это скорость работы с большим числом мелких файлов.
Время обработки (миллисекунд) — время за которое в среднем обрабатывается запрос на ввод-вывод включая ожидание в очереди, причем наиболее характерно именно ожидание, ибо оно зависит от загрузки, а не собственно размера запроса. Чем выше это время, тем «тормознутее» отзыв системы на запрос приложения, но остальные приложения в принципе не затрагиваются.
Загрузка (проценты) — оценка загруженности системы на ввод-вывод. При значениях близких к 100% система «встает», в том числе все приложения. Процессора уходят в iowait, а процессы, желающие ввода-вывода — в `[Disk]` Sleep
При этом нужно понимать, что ни один из этих параметров не может дать полноценный профиль использования файловой системы. Сложно увидеть и оценить «чистую» работу файловой подсистемы, хотя бы из-за того, что в стеке ее работы присутствуют различные кеши: буфер диска, кеш RAID контроллера, системный кеш. Соответственно более менее экстраполируемые цифры могут быть получены только вблизи от пиковой нагрузки. А тема правильного тестирования систем хранения, сравнения и оценки результатов это вообще поле не паханое и можно писать диссертации.
**Базовые характеристики**
Так как измерять абсолютные цифры вообще дело не очень благодарное, я предпочитаю оценивать их значение опираясь на какой то базис, и после этого уже оперировать какими то относительными мерками. Причем опыт работы с СУБД намекает, что сравнивать стоит не значения, а их порядки.
За такой базис я для себя принял следующие цифры:
Средний серверный жесткий диск 10 тысяч оборотов в секунду, подключенный по SAS к путному RAID контроллеру (с кешем на батарейке):
имеет пропускную способность около 300 Мегабайт в секунду при последовательном доступе
выдает порядка 150 iops (в попугаях)
при времени обработки запросов порядка 10 мс
Если все это живет в RAID то соответственно в зависимости от типа рейда цифры множатся или делятся на число дисков. Например: 4 диска в RAID 1+0 должны показать половину суммарных iops всех четырех дисков.
Если тесты показывают, что система работает, выдавая примерно эти цифры, значит никто при тестировании не «нажал», никаких чудес нет и можно работать дальше. Иначе стоит сначала разобраться что с железом (может RAID восстанавливается или винт сыпется).
В основном результаты тестирования я использую для оценки эффективности работы с системой хранения и влияние настроек СУБД и нашего софта, на то как они её используют, а так же быстрой диагностики наличия проблем с СУБД.
**Измерения**
**Подготовка**
Для начала разумно сохранить df -hl для того чтобы понимать о каких разделах идет речь.

Кстати, полезно еще помнить на каком из разделов располагается swap.
Хорошо будет, если физическое устройство разбито на разные логические разделы для каждого компонента. Этим мы сможем оценить профиль использования системы ввода-вывода для каждого разнесенного компонента.
**Наблюдение**
В отличии от других утилит iostat не очень приспособлен для логирования с учетом времени. Ну ничего, awk в помощь.
**Строчка для получения лог файла:**

Естественно, запускать это надо в скрине.
Следует обратить внимание на параметр -t 10. Это интервал, за который усредняются значения и вычисляются «средние» в секундах.
Если значение будет слишком мало — будут на графике лишние пики и выбросы. Если слишком велико — существенных пиков заметно не будет. По моему интервал 3-10 секунд оптимальный.
**Ввод нашего лога будет примерно таким**:

Первый блок это измерения за период работы с момента старта. Остальные за время указанный интервал.
Запускаем это логгирование на некий интервал (например пару суток, а потом просим прислать лог.
**Анализ**
Ну что по таким цифрам можно сказать?
В первую очередь обратим внимание на последнюю колонку *%util*. Хотя бы потому, что большое значение этого параметра (90%-100%) для пользователя выглядит как «сервер висит». У нас sda загружен менее чем на 9%. Нормально. Причем в основном разделом *sda7(SQL)*.
**Далее параметры записи/чтения:**
пропускная способность колонки rkB/s, wkB/s. Пишем 219 KБ/с
iops колонки r/s, w/s — 10,5 запросов в секунду
время обработки запроса: await — 156 ms, из них собственно выполнение svctm 8 ms
О чем это говорит:
Диск не загружен, числа не большие. Но запросы стоит в очереди 200ms время приемлемое, но при «первом шухере расколется», сама подсистема паршивенькая. Хотя однозначно сказать нельзя? ибо опять таки диск не сильно грузится вот и не торопятся данные отправлять из очереди.
Что еще полезно: rrqm/s, wrqm/s это собственно число запросов, которые приложения попросили выполнить, но система смогла их объединить в блоки в среднем по avgrq-sz байт.
Данные цифры помогут оптимизировать работу приложения:
Если вы откроете 100500 файлов, начнете произвольно прыгать по открытым файлам и заниматься прочими излишествами, выкушаете кеш системы — r/s,w/s начнут стремиться к rrqm/s и wrqm/s, и avgrq-sz падать. Это ситуация чистого Random Access — самый медленный сценарий использования диска.
А если все будет последовательно, то стремиться они будут к единичке (а лучше к нолику), а avgrq-sz расти. Единственный запрос за интервал — это чистой воды Sequential Access — самый быстрый сценарий использования диска.
Понятно, что всегда последовательной работы добиться трудно, а часто и невозможно, но сопоставляя эти цифры — можно оценить улучшило или ухудшило изменение логики работы с диском нагрузку на него.
### 5. mpstat
Утилита mpstat для мониторинга производительности Unix/Linux
mpstat — отчет о использовании процессоров. Команда mpstat пишет в стандартный вывод на экран о каждом имеющемся процессоре, 0-й процессор будет выведен на первое место. Параметр «interval» определяет количество времени в секундах между каждым отчетом. Значение 0 (или без параметров) показывает статистику о процессорах и отчетность будет представляться с момента запуска системы (загрузки).
### 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 содержит статистическую информацию о нитях ядра, находящихся в очереди выполнения и ожидающих запуска, а также об оперативной памяти, подкачке, дисках, прерываниях, системных вызовах, переключении контекста и работе процессора. В информации о процессоре указывается доля времени, в течение которой процессор работал в пользовательском режиме, системном режиме, простаивал и ожидал завершения операции дискового ввода-вывода.
Для получения информации о работе процессора удобнее использовать команду vmstat, а не iostat, так как ее построчный вывод проще анализировать, а в случае, когда к системе подключено много дисков, ее вывод намного менее объемный. Приведенный ниже пример иллюстрирует применение vmstat для обнаружения программ, которые потребляют слишком много ресурсов CPU.
**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**
Установите пакет с именем htop используя менеджер пакетов для вашего дистрибутива.

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

Так и с привилегиями суперпользователя, для этого используйте sudo:
`sudo htop`
Права суперпользвоателя нужны только для некоторых действий: для изменения приоритета (nice) процессов, для закрытия процессов других пользователей.
**Как и в случае с программой top, окно разделено на два основных раздела:**
```
обобщённая информация о системе
подробная информация о процессах
область с информацией о системе
```
**В самом верху показана нагрузка на каждое ядро центрального процессора (цифры от 1 до 12).**`
```
Mem — это общее количество оперативной памяти и используемая память.
Task — обобщённая статистика по процессам
Swp — уровень занятости файла подкачки (если он есть)
Load average — средняя загрузка центрального процессора
Uptime — время работы операционной системы с момента последней загрузки
```
**Теперь перейдём к области с информацией о запущенных процессах**.
***Значение столбцов htop***
Программа htop выводит следующие столбцы:
*PID*
Идентификатор процесса.
*USER*
Имя пользователя владельца процесса или ID если имя не может быть определено.
*PRI*
Приоритет — внутренний приоритет ядра для процесса, обычно это просто значение nice плюс двадцать. Отличается для процессов имеющих приоритет выполнения real-time.
*NI*
NICE значение процесса от 19 (низкий приоритет) до -20 (высокий приоритет). Более высокое значение означает, что процесс «приятный» для других и позволяет им иметь более высокий приоритет выполнения.
*VIRT*
Размер виртуальной памяти процесса (M_SIZE).
*RES*
Размер резидентного набора (text + data + stack) процесса (т.е. размер используемой физической памяти процесса, M_RESIDENT).
*SHR*
Размер общих страниц процесса (M_SHARE).
*S*
STATE, состояние процесса, может быть:
```
S для спящих (в простое)
R для запущенных
D для сна диска (бесперебойный)
Z для зомби (ожидает родитель считает его статус выхода)
T для отслеживания или приостановки (т. е. от SIGTSTP)
W для подкачки
```
*CPU%*
Процент процессорного времени, которое процесс использует в данный момент.
*MEM%*
Процент памяти, используемой процессом в данный момент (в зависимости от размера резидентной памяти процесса, см. M_RESIDENT выше).
*TIME+*
Время, измеренное в часах, указывает на то, сколько процесс провёл в пользовательском и системном времени.
*Command*
Полная командная строка процесса (то есть имя программы и аргументы).
**Как ускорить или замедлить частоту обновления htop**
Для установки времени обновления htop используйте опцию -d после которой укажите время обновления в десятой части секунд.
*Например, чтобы программа обновляла окно каждую 1/10 секунды:*`sudo htop -d 1`

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

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

## **Часть 2.2. Установка и настройка сервера SSH в Linux**
## 1. Установка пакетов SSH
Как уже говорилось система ssh в Linux-системах распространяется в виде составного метапакета, поэтому для установки всех требуемых утилит ssh нужно выполнить всего одну команду:

*После чего начнется процесс установки*
Как видно, менеджер пакетов сам распознает все зависимые и связанные пакеты и установит их. Также, по завершению установки, автоматически будет запущен SSH-сервер в режиме демона. Это можно проверить командой:
`$ systemctl status sshd`
или:
`$ service sshd status` даст тот же вывод. Теперь сервер работает с базовыми настройками по-умолчанию.

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



В первую очередь следует обратить внимание на следующие параметры: Port, AddressFamily, ListenAddress. Первый глобально задаёт номер порта, через который будет работать соединение и если оставить его стандартным, т. е. 22, то велика вероятность, что он будет слишком часто сканироваться роботами.
**Примечание:** для задания активации параметра необходимо раскомментировать соответствующую строку — убрать символ «#» в её начале.
Второй параметр задаёт семейство используемых IP-адресов — IPv4 и IPv6. Если, к примеру, используются только адреса IPv4, то очень рекомендуется установить для параметра
- AddressFamily значение inet:
- AddressFamily inet
- Для адресов семейства IPv6 используется значение inet6.
**Параметр ListenAddress позволяет задавать порты для отдельных сетевых интерфейсов:**
- ListenAddress 10.24.205.75:2123
- ListenAddress 10.24.205.76:2124
Поскольку реализация openSSH позволяет работать с протоколами SSH1 и SSH2, то разумно отключить использование SSH1, т. к. эта версия является устаревшей. Работа по SSH1 крайне не рекомендуется: Protocol 2
- Очень полезным является параметр, позволяющий проводить авторизацию и шифрование трафика с помощью специальных SSH-ключей:
`PubkeyAuthentication yes`
- Следует заметить, что в таком случае серверу необходимо явно указывать, где хранятся открытые ключи пользователей. Это может быть как один общий файл для хранения ключей всех пользователей (обычно это файл `etc/.ssh/authorized_keys`), так и отдельные для каждого пользователя ключи. Второй вариант предпочтительнее в силу удобства администрирования и повышения безопасности:
`AuthorizedKeysFile etc/ssh/authorized_keys # Для общего файлаAuthorizedKeysFile %h/.ssh/authorized_keys # Файл -> пользователь`
- Во втором варианте благодаря шаблону автоподстановки с маской «%h» будет использоваться домашний каталог пользователя.
**Важно также отключать парольный доступ:**
`PasswordAuthentication no`
- Или же, в случае, если всё-таки необходимо использовать доступ по паролю, то обязательно нужно отключать авторизацию по пустому паролю:
`PermitEmptyPasswords no`
- Для указания разрешённых или запрещённых пользователей и групп служат директивы DenyUsers, AllowUsers, DenyGroups, и AllowGroups. Значениями для них являются списки имён, разделяемых пробелами, например:
```
DenyUsers fred john
AllowGroups root clients administrators
```
- Следует также отключать root-доступ:
`PermitRootLogin no`
- Иногда, когда следует задавать мультисерверную конфигурацию, очень удобно использовать алиасы (Aliases), что позволяет настроить сразу несколько режимов доступа (с разными хостами, портами и т. д.) и использовать их, указывая при этом конкретный алиас:
`$ ssh alias_name`
Настройки для алиасов хранятся либо глобально в `/etc/ssh/ssh_config`, либо раздельно для пользователей в `~/.ssh/config`. Здесь нужно не спутать с `ssh_config!` Пример:
```
Host your_alias
Port your_ssh_port
HostName 0.0.0.0 # IP или имя хоста
User your_user_name
```
**Для применения сделанных настроек необходим перезапуск SSH-сервера:**
`$ systemctl restart sshd`
**или:**
`$ service sshd restart`

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

При этом утилита ssh запросит (в зависимости от настроек сервера) **логин, пароль** или парольную фразу для разблокировки приватного ключа пользователя.
В случае авторизации по ключу, должна быть предварительно сгенерирована пара SSH-ключей — открытый, который хранится на стороне сервера, обычно в файле `.ssh/authorized_keys` в домашнем каталоге пользователя, и закрытый — используется для авторизации клиента и хранится, как правило, в каталоге `.ssh/` домашней директории пользователя. Открытый ключ представляет собой «цифровой слепок» закрытого ключа благодаря которому сервер «знает», кто «свой», а кто «чужой».
## 4. Для генерации ключей используется утилита ssh-keygen:
`$ ssh-keygen`

Утилита предложит выбрать расположение ключей (лучше всё оставить по-умолчанию), обычно это каталог `~/.ssh/,` ввести парольную фразу для закрытого ключа. После чего будут сгенерированы открытый ключ `id_rsa.pub` и закрытый `— id_rsa`. Теперь нужно скопировать открытый ключ, т. е. «слепок» закрытого на сервер. Проще всего этого можно добиться командой:
`ssh-copy-id -i ~/.ssh/id_rsa.pub user_name@host_name`

Теперь можно выполнить подключение командой ssh и запустить защищённый сеанс удалённого управления.
Важно заметить, что использование сгенерированных `openSSH`-ключей несовместимо с PPK-форматом, используемым по-умолчанию в таких комплексах как PuTTY. Поэтому необходимо конвертировать имеющиеся `openSSH`-ключи в формат PPK. Удобнее всего это делать с помощью утилиты **PuTTY – puttygen.exe.**



## **Часть 2.3. "Установка и настройка SSH-authorized_keys"**
Исходя из теории, сначала создается ключ, экспортируется на хост назначения, или сервер, после чего можно зайти на этот сервер без пароля, по ключу. Но с этим не все так гладко. Я пробовал сделать все указанные шаги с Linux --> Windows, но не получилось:
Генерация ключа:

Экспорт:

Попытка подключится:


На скриншоте видно, что SSH требует пароль, а это не подходит под условия задачи. В чем проблема - не знаю, не смог выяснить или решить.
Если делать все тоже самое но на самой Linux, все впорядке:

Конфиг был следующий:

На windows ключ просто не записывался в файл:

Попытка подключения, со следующим конфигом:


Говоря о выполнении поставленной задачи, это получилось, но с debian.
Использовался тот же сгенерированный (на скриншоте ранее) ключ:

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

**По ядру linux можно понять следующее:**
**uname -a**

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

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

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

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

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

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

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

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

**Базовый сбор информации может происходить не только вручную

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

*где*
**Основные опции:**
- c, --create — создать архив;
- a, --auto-compress — дополнительно сжать архив с компрессором который автоматически определить по расширению архива. Если имя архива заканчивается на *.tar.gz то с помощью GZip, если *.tar.xz то с помощью XZ, *.tar.zst для Zstandard и.т.п;
- r, --append — добавить файлы в конец существующего архива;
- x, --extract, --get — извлечь файлы из архива;
- f, --file — указать имя архива;
- t, --list — отобразить список файлов и папок в архиве;
- v, --verbose — выводить список обработанных файлов.
затем давайте проверим контрольную сумму с сайта и то, что мы скачали

Контрольные суммы различны из-за разных версий утилиты.
**далее переходим в директорию lynis**

**далее запускаем утилиту lynis**



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

**Перенаправлять файлы лучше через стандартный report утилиты:**
### 3. Проверка целостностей пакетов
**Как проверить целостность системы, что никто не поменял, есть способа проверить**
dpkg — это программное обеспечение, являющееся основой системы управления пакетами в Debian и ряде других операционных систем, основанных на Debian, например Ubuntu. dpkg используется для установки, удаления, и получения информации о .deb пакетах.
**dpkg** является довольно низкоуровневой утилитой. Существуют более высокоуровневые утилиты, например APT, которые могут загружать пакеты из сетевого репозитория и отслеживать зависимости между пакетами. Конечным пользователям следует использовать утилиты с более дружественным интерфейсом, такие как Aptitude или Synaptic, предоставляющие лёгкий способ просмотра списка пакетов, их описания и зависимостей.
**debsums** служит, в первую очередь, для нахождения изменённых администратором файлов установленных в системе пакетов или повреждённых файлов из-за некачественного носителя и в какой-то мере используется в качестве инструмента обеспечения безопасности.
[https://parallel.uran.ru/book/export/html/472](https://parallel.uran.ru/book/export/html/472)
для просмотра пакетов в системе
```
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
```

но он будет более загадачным
Если кто-то смог проникнуть в систему и что-то деал в ней нам поможет команда 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** - это специальные переменные, определенные оболочкой и используемые программами во время выполнения.
Переменными окружения в операционных системах на базе ядра Linux называются те переменные, которые содержат текстовую информацию, используемую другими программами во время запуска. Обычно они включают общие системные параметры как графической, так и командной оболочки, данные о настройках пользователя, расположении определенных файлов и многое другое. Значения таких переменных указываются, например, цифрами, символами, путями к директориям или файлам. Благодаря этому множество приложений быстро получают доступ к определенным настройкам, а также появляется возможность для пользователя изменять или создавать новые опции.
**Cамые важные параметры** - бы рассказать о разделении их на классы. Такое группирование определяется следующим образом:
- Системные переменные. Эти опции загружаются сразу же при старте операционной системы, хранятся в определенных конфигурационных файлах (речь о них будет идти ниже), а также доступны для всех пользователей и всей ОС в целом. Обычно такие параметры считаются самыми главными и часто используемыми во время старта самых различных приложений.
- Пользовательские переменные. Каждый пользователь имеет свою домашнюю директорию, где хранятся все важные объекты, к их числу относятся и конфигурационные файлы пользовательских переменных. Из их названия уже понятно, что применяются они под конкретного юзера в то время, когда он авторизован через локальный «Терминал». Действуют они и при удаленном соединении.
- Локальные переменные. Существуют параметры, применяемые только в рамках одной сессии. При ее завершении они будут навсегда удалены и для повторного старта все придется создавать вручную. Они не сохраняются в отдельных файлах, а создаются, редактируются и удаляются при помощи соответствующих консольных команд.
**Конфигурационные файлы для пользовательских и системных переменных**
Два из трех классов переменных Linux хранятся в отдельных файлах, где собраны общие конфигурации и дополнительные параметры. Каждый такой объект загружается только при подходящих условиях и используется для разных целей. Отдельно бы хотелось выделить такие элементы:
- /ETC/PROFILE — один из системных файлов. Доступен для всех пользователей и всей системы даже при удаленном входе. Единственное ограничение для него — параметры не принимаются при открытии стандартного «Терминала», то есть в этом расположении никакие значения из этой конфигурации работать не будут.
- /ETC/ENVIRONMENT — более широкий аналог предыдущей конфигурации. Он функционирует на системном уровне, имеет те же опции, что и предыдущий файл, но теперь без каких-либо ограничений даже при удаленном подключении.
- /ETC/BASH.BASHRC — файл только для локального использования, при удаленной сессии или соединении через интернет функционировать он не будет. Выполняется для каждого юзера отдельно при создании новой терминальной сессии.
- .BASHRC— относится к конкретному юзеру, хранится в его домашней директории и выполняется каждый раз при новом запуске терминала.
- .BASH_PROFILE — то же, что .BASHRC, только для удаленного взаимодействия, например, при использовании SSH.
### 1. Просмотр списка системных переменных окружения
Вы можете без проблем самостоятельно просмотреть все присутствующие в Linux системные и пользовательские переменные и их понятия с помощью всего лишь одной команды, которая отобразит список. Для этого потребуется выполнить всего несколько простых действий через стандартную консоль.
Пропишем команду 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`

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