# Катенин Владимир - OS Linux Basic. Занятие 2. Администрирование Linux
[toc]
## Практическая работа №2.1 Работа в командной строке
### 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`

Получить информацию обо всех файловых системах известных ядру, которые были смонтированы:
`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`

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

Вы также можете передать команде du несколько файлов и каталогов в качестве аргументов:
`du ~/Documents ~/Pictures ~/.zshrc`

Параметр -a указывает du сообщать об использовании дискового пространства каждым файлом в каталоге.
`du -a ~/Documents`

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

Чтобы сообщить только общий размер указанного каталога, а не подкаталогов, используйте параметр -s:
`sudo du -sh`

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

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

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

По умолчанию команда free показывает информацию о памяти в килобайтах. Чтобы просмотреть информацию в удобочитаемом формате (обычно в мегабайтах и гигабайтах), используйте параметр -h:

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

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

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

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

`free -h --si -s 5 -c 4`

`watch free -h`

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

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

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

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

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

Чтобы утилита автоматически обновляла данные каждую секунду, просто добавьте интервал. Например:
`sudo iostat -p /dev/sda1 1`

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

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

Хорошо будет, если физическое устройство разбито на разные логические разделы для каждого компонента. Этим мы сможем оценить профиль использования системы ввода-вывода для каждого разнесенного компонента.
**Наблюдение**
В отличии от других утилит iostat не очень приспособлен для логирования с учетом времени. Ну ничего, awk в помощь.
**Строчка для получения лог файла:**
`iostat -xk -t 10 | awk '// {print strftime("%Y-%m-%d %H:%M:%S"),$0}' >> iostat.log &`
**Ввод нашего лога будет примерно таким**:
`iostat -xk -t 10 | awk '// {print strftime("%Y-%m-%d %H:%M:%S"),$0}`

---
### 5. mpstat
Утилита mpstat для мониторинга производительности Unix/Linux
mpstat — отчет о использовании процессоров. Команда mpstat пишет в стандартный вывод на экран о каждом имеющемся процессоре, 0-й процессор будет выведен на первое место. Параметр «interval» определяет количество времени в секундах между каждым отчетом. Значение 0 (или без параметров) показывает статистику о процессорах и отчетность будет представляться с момента запуска системы (загрузки).
Опция «-А», показывает всю информацию, которая может быть отображена с помощью команды mpstat, как показано ниже. Это действительно эквивалентно команде «-I ALL -u -P mpstat ALL» команды:
`mpstat -A`

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

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

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

Дополнительные опции
`mpstat --help`

---
### 6. vmstat
В первую очередь нужно вызвать команду vmstat, которая предоставляет краткую информацию о различных ресурсах системы и связанных с ними неполадках, приводящих к снижению производительности.
Отчет команды vmstat содержит статистическую информацию о нитях ядра, находящихся в очереди выполнения и ожидающих запуска, а также об оперативной памяти, подкачке, дисках, прерываниях, системных вызовах, переключении контекста и работе процессора. В информации о процессоре указывается доля времени, в течение которой процессор работал в пользовательском режиме, системном режиме, простаивал и ожидал завершения операции дискового ввода-вывода.
Для получения информации о работе процессора удобнее использовать команду vmstat, а не iostat, так как ее построчный вывод проще анализировать, а в случае, когда к системе подключено много дисков, ее вывод намного менее объемный. Приведенный ниже пример иллюстрирует применение vmstat для обнаружения программ, которые потребляют слишком много ресурсов CPU.
`vmstat`
`vmstat -a`
`vmstat -f`
`vmstat -d`

`vmstat -D`

`vmstat --help`

`vmstat 1`

---
### 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 используя менеджер пакетов для вашего дистрибутива.
В Debian, Linux Mint, Ubuntu, Kali Linux и их производных выполните:
`sudo apt install htop`

**Как просмотреть все процессы в Linux**
Команду htop можно запускать как с правами обычного пользователя:
`htop`
Так и с привилегиями суперпользователя, для этого используйте sudo:
`sudo htop`
Права суперпользвоателя нужны только для некоторых действий: для изменения приоритета (nice) процессов, для закрытия процессов других пользователей.

**Как ускорить или замедлить частоту обновления htop**
Для установки времени обновления htop используйте опцию -d после которой укажите время обновления в десятой части секунд.
*Например, чтобы программа обновляла окно каждую 1/10 секунды:*`sudo htop -d 1`

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

---
## Практическая работа №2.2 Установка и настройка сервера SSH в Linux
### 1. Установка пакетов SSH
Как уже говорилось система ssh в Linux-системах распространяется в виде составного метапакета, поэтому для установки всех требуемых утилит ssh нужно выполнить всего одну команду:
**В Ubuntu**
`sudo apt-get install ssh`

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

### 2. Настройка SSH
Настройки демона хранятся в файле `/etc/ssh/sshd_config`. Посмотреть его можно командой
`cat /etc/ssh/sshd_config`

Изменяем файл конфига в соответствии с задачей
>Port 2123
>AddressFamily inet
>ListenAddress 192.168.56.101:2123
>ListenAddress 192.168.56.101:2124
>
>PermitRootLogin no
>PubkeyAuthentication yes
>AuthorizedKeysFile etc/ssh/authorized_keys
>
>PasswordAuthentication yes
>PermitEmptyPasswords no


Иногда, когда следует задавать мультисерверную конфигурацию, очень удобно использовать алиасы (Aliases), что позволяет настроить сразу несколько режимов доступа (с разными хостами, портами и т. д.) и использовать их, указывая при этом конкретный алиас:
`ssh alias_name`
Настройки для алиасов хранятся либо глобально в `/etc/ssh/ssh_config`, либо раздельно для пользователей в `~/.ssh/config`. Здесь нужно не спутать с `ssh_config!`

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

### 3. Настройка и использование клиента SSH
- Для подключения по к серверу используется команда:
`ssh user_name@host_name`
где **user_name** – имя пользователя в системе, **host_name** – имя узла, к которому производится подключение, например:
`$ ssh fred@fredwebserver`
При этом утилита 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.**
Генерируем пару

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


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

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


---
## Практическая работа №2.3 Установка и настройка SSH-authorized_keys
### 1. Как работают ключи SSH?
Сервер SSH может использовать много разных методов аутентификации клиентов. Наиболее простой метод — аутентификация с помощью пароля. Этот метод просто использовать, но он не является самым безопасным.
Хотя пароли отправляются на сервер в безопасном режиме, обычно они недостаточно сложные и длинные, чтобы обеспечить надежную защиту против упорных злоумышленников, совершающих многократные атаки. Вычислительная мощность современных систем и автоматизированные скрипты позволяют достаточно легко взломать учетную запись методом прямого подбора пароля. Хотя существуют и другие методы усиления мер безопасности (fail2ban и т. д.), ключи SSH показали себя надежной и безопасной альтернативой.
### 2. Создание ключей SSH
Первый шаг для настройки аутентификации ключей SSH на сервере заключается в том, чтобы сгенерировать пару ключей SSH на локальном компьютере.
Для этого мы можем использовать специальную утилиту ssh-keygen, которая входит в стандартный набор инструментов OpenSSH. По умолчанию она создает пару 2048-битных ключей RSA, что подходит для большинства сценариев использования.
Сгенерируйте на локальном компьютере пару ключей SSH, введя следующую команду:
`ssh-keygen`

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

### 4. Аутентификация на сервере с использованием ключей SSH
Если вы успешно выполнили одну из вышеописанных процедур, вы сможете войти на удаленный хост без пароля учетной записи для удаленного хоста.
Базовый процесс выглядит аналогично:
`ssh username@remote_host`

Если вы не указывали пароль для своего закрытого ключа, вы войдете в систему немедленно. Если вы указали парольную фразу для закрытого ключа при его создании, вам нужно будет ввести ее сейчас. После этого для вас будет создан новый сеанс подключения через оболочку с учетной записью на удаленной системе.
### 5. Отключение аутентификации с помощью пароля на сервере
Откройте файл конфигурации демона SSH:
`sudo nano /etc/ssh/sshd_config`
Найдите в файле директиву PasswordAuthentication. Она может быть помечена как комментарий. Удалите символ комментария в начале строки и установите значение «no». После этого вы потеряете возможность входа в систему через SSH с использованием паролей учетной записи:
`PasswordAuthentication no`

Сохраните файл и закройте его после завершения. Чтобы фактически активировать внесенные нами изменения, необходимо перезапустить службу.
На компьютерах под управлением Ubuntu или Debian можно использовать следующую команду:
`sudo service ssh restart`

Пробуем подключиться:

Теперь через Putty:

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

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

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

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

Посмотрим права директории `/home`

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

`ip neigh` - показывает с какими компьютерами происходит обмен данными

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

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

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

Скачаем утилиту с помощью wget
`wget https://downloads.cisofy.com/lynis/lynis-3.0.6.tar.gz`

`tar xfv lynis-3.0.6.tar.gz`

Проверим контрольную сумму с сайта и то, что мы скачали делается это следующей командой
`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 является довольно низкоуровневой утилитой. Существуют более высокоуровневые утилиты, например APT, которые могут загружать пакеты из сетевого репозитория и отслеживать зависимости между пакетами. Конечным пользователям следует использовать утилиты с более дружественным интерфейсом, такие как Aptitude или Synaptic, предоставляющие лёгкий способ просмотра списка пакетов, их описания и зависимостей.
Для просмотра пакетов в системе:
`dpkg -l`

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

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

Сделаем backup
`sudo mv /bin/dir /bin/dir.bak`
Введем команду `sudo cp /bin/false /bin/dir`

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

Соответственно, чтобы нам быстро проверить этот пакет, мы можем выполнить команду
`debsums`
Т.к. пакет не установлен, нам предлагается его установить, установим

**debsums** служит, в первую очередь, для нахождения изменённых администратором файлов установленных в системе пакетов или повреждённых файлов из-за некачественного носителя и в какой-то мере используется в качестве инструмента обеспечения безопасности.
- `debsums -ac coreutils`
- `debsums -cs coreutils`
Можно также проверить утилитой
`dpkg --verify coreutils`

Если кто-то смог проникнуть в систему и что-то делал в ней, нам поможет команда `find`
Например, если нам надо рассмотреть какой либо инцидент:
`sudo find / -printf "%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
### 1. Просмотр списка системных переменных окружения
Вы можете без проблем самостоятельно просмотреть все присутствующие в Linux системные и пользовательские переменные и их понятия с помощью всего лишь одной команды, которая отобразит список. Для этого потребуется выполнить всего несколько простых действий через стандартную консоль.
Пропишем команду sudo `apt-get install coreutils`, чтобы проверить наличие данной утилиты у вас в системе и сразу же установить ее при надобности.
*Процесс укажет какие добавлены новые файлы или их наличии в библиотеках.*

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

### 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`

---