
Linux викторина №31-35: что делает команда/скрипт на изображении?
Полученные результаты

#1. Что делает команда на изображении выше?
Команда:
ps -eo ppid,pid,state,comm | awk '$3=="Z" {print $1}' | sort -u
Описание:
ps -eo user,ppid,pid,state,comm
Выводит список процессов с указанными колонками:
user
— владелец процессаppid
— родительский процесс (Parent Process ID)pid
— идентификатор процесса (Process ID).state
— состояние процессаcomm
— исполняемая команда
awk '$4=="Z" {print $3}'
Фильтрует процессы, у которых состояние (
state
, 4-й столбец) равно Z
(Zombie). Выводит только PID
(3-й столбец)
sort -nu
sort
— сортирует PID по возрастанию.-n
— числовая сортировка (иначе10
могло бы идти перед2
)-u
— удаляет дубликаты

#2. Что делает команда на изображении выше?
Команда:
{ crontab -l; echo "0 3 * * 0 tar -czv /opt -f /backup/opt.tgz > /backup/opt.log 2>&1"; } | crontab -
Описание:
Команда сначала выводит текущие задачи cron с помощью crontab -l
, затем добавляет новую задачу с помощью echo
, которая выполняет бэкап каталога /opt
.
tar -czv /opt -f /backup/opt.tgz
:tar
архивирует каталог/opt
-c
(create) указывает на создание нового архива-z
(zip) сжимает архив в форматеgzip
-v
(verbose) включает вывод подробной информации о процессе-f
(file) указывает путь к целевому файлу/backup/opt.tgz
.
> /backup/opt.log 2>&1
:- перенаправляет стандартный вывод (
stdout
) в файл/backup/opt.log
- перенаправляет стандартный поток ошибок (
stderr
) в тот же файл
- перенаправляет стандартный вывод (
Результат всей команды (вывод старых задач cron и новой – бэкапа) передаются крону на ввод crontab -
, что перезаписывает всю таблицу задач.
Новая задача выполняет бэкап каждое воскресенье в 3 часа утра (0 3 * * 0
).

#3. Что выведет скрипт на изображении выше?
Скрипт:
#!/bin/bash
list=(
"eth0 UP 192.168.1.110/24"
"eth1 DOWN 192.168.56.3/16"
"eth2 UP 10.13.1.144/24"
)
for i in "${list[@]}"; do
i1=$(echo "$i" | awk '{print $1}')
i2=$(echo "$i" | awk '{print $2}')
i3=$(echo "$i" | awk '{print $3}')
if [[ "$i3" =~ ^192\.168\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{1,2}$ ]]; then
echo "$i1 $i2"
fi
done
done
Описание:
Скрипт обрабатывает данные в массиве, содержащие интерфейс, статус и IP-адрес. Если IP-адрес принадлежит сети 192.168.0.0/16
, он выводит имя интерфейса и его статус. Используются for
, awk
и регулярное выражение.

Подразумевается наличие в системе файла auth.log
.
#4. Что выведет скрипт на изображении выше?
Скрипт:
#!/bin/bash
log_file="/var/log/auth.log"
today=$(date +"%F")
grep -a "$today" "$log_file" \
| grep 'ssh' \
| grep 'Failed password' \
| grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' \
| sort \
| uniq -c \
| sort -rn
Описание:
Скрипт анализирует лог-файл аутентификации (/var/log/auth.log
) и извлекает IP-адреса, с которых были неудачные попытки входа через SSH:
log_file="/var/log/auth.log"
– указывает путь к лог-файлу, содержащему записи аутентификации;today=$(date +"%F")
– генерирует строку с текущей датой в форматеYYYY-MM-DD
, чтобы анализировать только сегодняшние записи;grep -a "$today" "$log_file"
– фильтрует строки по текущей дате,-a
обрабатывает файл как текстовый (даже если он бинарный);grep 'ssh'
– оставляет только строки, относящиеся к SSH;grep 'Failed password'
– оставляет только строки с неудачными попытками входа;grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'
– извлекает IP-адреса из отфильтрованных строк;sort
– сортирует IP-адреса для последующего подсчёта;uniq -c
– подсчитывает количество повторений каждого IP-адреса;sort -rn
– сортирует результат по убыванию количества попыток входа.

#5. Какое количество строк посчитает команда wc -l?
Команда:
(echo "stdout line 1"; echo "stderr line 1" >&2; echo "stdout line 2") | wc -l
Описание:
-
Группировка команд в скобках
()
- Используется для объединения нескольких команд в один поток вывода (
stdout
иstderr
). Команды выполняются в отдельном процессе – подоболочке. - Это позволяет передать весь
stdout
сразу в пайп (| wc -l
).
- Используется для объединения нескольких команд в один поток вывода (
-
echo
"stdout
line
1"
- Выводит строку
"stdout line 1"
вstdout
.
- Выводит строку
-
echo "stderr line 1" >&2
>&2
перенаправляет вывод этой команды вstderr
, а не вstdout
.- Это ключевой момент:
stderr
не передается по пайпу, поэтомуwc -l
его не увидит.
-
echo "stdout line 2"
- Выводит строку
"stdout line 2"
вstdout
.
- Выводит строку
-
Пайп
| wc -l
- Пайп (
|
) передает толькоstdout
предыдущей команды вwc -l
. wc -l
считает количество строк во входных данных, но игнорируетstderr
, потому что он не передается по|
.
- Пайп (