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

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.

  1. tar -czv /opt -f /backup/opt.tgz:
    • tar архивирует каталог /opt
    • -c (create) указывает на создание нового архива
    • -z (zip) сжимает архив в формате gzip
    • -v (verbose) включает вывод подробной информации о процессе
    • -f (file) указывает путь к целевому файлу /backup/opt.tgz.
  2. > /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

Описание:

  1. Группировка команд в скобках ()

    • Используется для объединения нескольких команд в один поток вывода (stdout и stderr). Команды выполняются в отдельном процессе – подоболочке.
    • Это позволяет передать весь stdout сразу в пайп (| wc -l).
  2. echo "stdout line 1"

    • Выводит строку "stdout line 1" в stdout.
  3. echo "stderr line 1" >&2

    • >&2 перенаправляет вывод этой команды в stderr, а не в stdout.
    • Это ключевой момент: stderr не передается по пайпу, поэтому wc -l его не увидит.
  4. echo "stdout line 2"

    • Выводит строку "stdout line 2" в stdout.
  5. Пайп | wc -l

    • Пайп (|) передает только stdout предыдущей команды в wc -l.
    • wc -l считает количество строк во входных данных, но игнорирует stderr, потому что он не передается по |.
Предыдущий
Проверить
Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии