Linux викторина №26-30: что делает команда/скрипт на изображении?
Полученные результаты
#1. Что делает команда на изображении выше?
Команда:
for i in *.txt; do mv "$i" "${i%.txt}.bak"; done
Описание:
Цикл for
перебирает все файлы с расширением .txt
в текущей директории. Символ %
в ${i%.txt}
удаляет .txt
из имени файла, а mv
переименовывает его в .bak
, сохраняя остальную часть имени.
#2. Что делает команда на изображении выше?
Команда:
ss -tuln | awk '{print $5}' | grep -Eo ':[0-9]+$' | sort -t: -k2 -n -u
Описание: Команда выводит уникальные номера портов из активных TCP/UDP соединений. ss -tuln
показывает соединения, awk
извлекает адреса, grep
фильтрует порты, sort
сортирует и удаляет дубликаты.
- ss:
-t
– отображает TCP-соединения,-u
– отображает UDP-соединения,-l
– показывает только прослушивающие сокеты,-n
– выводит адреса и порты в числовом формате - awk:
'{print $5}'
– выводит пятый столбец (адреса и порты) - grep:
-E
– использует расширенные регулярные выражения,-o
– выводит только совпадения (в данном случае порты) - sort:
-t:
– задает разделитель полей как двоеточие,-k2
– сортирует по второму полю (номер порта),-n
– сортирует числовые значения,-u
– удаляет дубликаты
#3. Что делают команды на изображении выше?
Команда №1
iptables -A INPUT -p icmp --icmp-type echo-request -m recent --set --name PING_LIST
Команда №2
iptables -A INPUT -p icmp --icmp-type echo-request -m recent --update --seconds 10 --hitcount 5 --name PING_LIST -j DROP
Описание: эти команды добавляют правила фаервола в Linux, которые ограничивают частоту ICMP-запросов (ping). Первая команда добавляет IP-адрес каждого ICMP-запроса типа echo-request
в список recent
с именем PING_LIST
. Вторая команда проверяет, был ли IP в списке и отправил ли более 5 запросов за последние 10 секунд (--update --seconds 10 --hitcount 5
). Если проверка выполняется, дальнейшие запросы блокируются (DROP
). После отсутствия запросов в течение 10 сек. запросы вновь принимаются.
#4. Что выведет скрипт на изображении выше, запущенный от обычного пользователя?
Скрипт:
#!/bin/bash
set -e
BACKUP_DIR="backups"
mkdir -p "$BACKUP_DIR"
ssh user@remote-server "tar -czf - /var/www" > "$backups/www_backup_$(date +%F).tar.gz"
echo "Backup created: $BACKUP_DIR/www_backup_$(date +%F).tar.gz"
Описание: скрипт должен создать резервную копию директории /var/www
с удалённого сервера, но завершается ошибкой Permission denied:
set -e
: заставляет скрипт завершиться с ошибкой, если любая команда внутри скрипта возвращает ненулевой код завершения;
BACKUP_DIR="backups"
: устанавливается путь к локальной директории;mkdir -p "$BACKUP_DIR"
: в текущей директории создаёт директорию с именемbackups
, опция-p
позволяет не выводить ошибку, если каталог уже существует;ssh user@remote-server "tar -czf - /var/www"
: подключается по SSH к удалённому серверу (user@remote-server
) и запускает командуtar
, чтобы создать архив с каталога/var/www
, параметры-czf -
означают, что архив будет сжат, а данные выводиться в стандартный поток;> "$backups/www_backup_$(date +%F).tar.gz"
: пытается перенаправить поток в локальный файл по пути$backups/www_backup_$(date +%F).tar.gz
, но т.к. переменной $backups не существует (ее значение пустая строка), то скрипт попытается выполнить запись по пути/www_backup_$(date +%F).tar.gz
и завершится ошибкой Permission denied, т.к. обычные пользователи не могут создавать файлы в корне файловой системы;echo "Backup created: $BACKUP_DIR/www_backup_$(date +%F).tar.gz"
: эта команда выводит сообщение о том, что резервная копия была создана, и указывает путь к файлу, но т.к. предыдущая команда завершилась ошибкой из-за установленного параметраset -e
, то скрипт прекратит свою работу и проигнорирует остальной код.
#5. Что выведет скрипт на изображении выше?
Скрипт:
#!/bin/bash
set -e
file="/tmp/file.txt"
echo "Simple text with error word" > "$file"
grep -qi "ERROR" "$file" && echo "$file contains errors" || echo "$file is clean"
Описание:
set -e
— устанавливает режим работы скрипта, при котором он прекратит работу в случае любой ошибки в процессе выполненияfile="/tmp/file.txt"
— определяет переменнуюfile
, которая содержит путь к файлу/tmp/file.txt
echo "Simple text with error word" > "$file"
— записывает строку “Simple text with error word” в файл, указанный в переменнойfile
.grep -qi "ERROR" "$file" && echo "$file contains errors" || echo "$file is clean"
— ищет слово error игнорируя регистр (-i, –ignore-case) в файле, указанном в переменнойfile
и если находит, выводит сообщение о наличии ошибок, в ином случае сообщает, что файл чист