✅ Решения заданий урока 15

К оглавлению урока

⚡ Решения коротко

# Задание 1
find /var/log -name "*.log"
find /tmp -type f
find /home -type f -size +1M -mtime -7
find . -name "*.txt" 2>/dev/null

# Задание 2
sudo updatedb
locate passwd
locate *.conf

# Задание 3
for i in {1..10}; do echo "Number: $i"; done

# Задание 4
counter=1; while [ $counter -le 5 ]; do echo $counter; ((counter++)); done

Решение задания 1: find

1. .log файлы в /var/log

find /var/log -name "*.log"

2. Обычные файлы в /tmp

find /tmp -type f

-type f означает только обычные файлы (не директории, не символические ссылки).

3. Файлы > 1МБ, изменённые за 7 дней

find /home -type f -size +1M -mtime -7

Комбинация критериев: -size +1M (больше 1 МБ) и -mtime -7 (изменены менее 7 дней назад).

4. .txt файлы без вывода ошибок

find . -name "*.txt" 2>/dev/null

2>/dev/null перенаправляет сообщения об ошибках (отказ в доступе и т.д.) в никуда.

5. Копирование найденных файлов

mkdir -p /tmp/backup
find /root/ -type f -name "*.txt" -exec cp {} /tmp/backup \;

Сначала создаём целевую директорию, затем копируем каждый найденный файл.

Решение задания 2: locate

1. Обновить базу

sudo updatedb

2. Найти passwd

locate passwd

Быстро найдёт все файлы и пути, содержащие слово "passwd".

3. Найти .conf файлы

locate *.conf

4. Поиск .txt в /etc с -r

locate -r '/etc/*\.txt$'

Регулярное выражение: /etc/ — начинается с этого пути; *\.txt$ — заканчивается на .txt.

Решение задания 3: цикл for

1. Числа 1..10

for i in {1..10}
do
    echo "Number: $i"
done

Или в одну строку: for i in {1..10}; do echo "Number: $i"; done

2. Строка "Iteration: N"

for i in {1..10}; do echo "Iteration: $i"; done

3. Список .txt файлов

for FILE in *.txt
do
    echo "Found: $FILE"
done

Если .txt файлов нет, переменная $FILE будет содержать литерал *.txt.

Решение задания 4: цикл while

1. Числа 1..5

counter=1
while [ $counter -le 5 ]
do
    echo "Counter: $counter"
    ((counter++))
done

2. Бесконечный цикл, 2 секунды

while true; do echo "Alive" && sleep 2; done

Остановить: Ctrl+C

Решение задания 5: разбор скрипта из лекции

  1. Что в переменной DATE?
    Текущая дата в формате "день-месяц-год", например 22-11-24. Синтаксис `` `date '+%d-%m-%y'` `` — старый способ подстановки вывода команды (эквивалент $(date '+%d-%m-%y')).
  2. Что делает первый for?
    Создаёт 5 файлов File-1.txt ... File-5.txt. В каждый записывает текущее время в формате час-минута-секунда (перенаправление > File-$i.txt).
  3. Зачем sleep 5?
    Чтобы между созданиями файлов проходило 5 секунд и время в файлах различалось — иначе все файлы получат одинаковое время.
  4. Что делает второй for?
    Перебирает все файлы в директории $DATE и выводит их содержимое через cat.
  5. Зачем mkdir -p?
    Флаг -p не выдаёт ошибку, если директория уже существует. Без этого флага повторный запуск скрипта завершится с ошибкой "mkdir: cannot create directory: File exists".