1. Примеры команды find
Поиск .txt файлов в /home
find /home -name "*.txt"
Рекурсивно ищет все файлы с расширением .txt в каталоге /home и всех подкаталогах.
Поиск только обычных файлов
find /path/to/search -type f
find /path/to/search -type d
Поиск по размеру и расширению
find /path/to/search -name "*.txt" -size +1M
Найдёт все .txt файлы размером больше 1 мегабайта.
Поиск по дате изменения
# Изменено за последние 5 дней
find /path/to/search -mtime -5
# Комбинированный запрос: < 5 дней, .txt, > 15кБ
find /home/ -mtime -5 -name "*.txt" -size +15k 2>/dev/null
Удаление найденных файлов
# Удалить .old файлы
find -type f -name "*.old" -delete
# Удалить файлы старше 7 дней
find /path/to/search -type f -mtime +7 -delete
Выполнить действие с файлами (-exec)
# Установить права 644 для всех обычных файлов
find /path/to/search -type f -exec chmod 644 {} \;
# Скопировать все .txt из /root/ в /home
find /root/ -type f -name "*.txt" -exec cp {} /home \;
2. Примеры команды locate
Обновить базу и найти файл
sudo updatedb
locate myfile.txt
locate *.jpg
Поиск в определённом каталоге
locate -r '/path/to/directory/*\.txt$'
Флаг -r — регулярное выражение вместо glob-шаблона.
3. Цикл for
Базовый цикл по диапазону
for i in {1..5}
do
echo "Number: $i"
done
Выводит: Number: 1, Number: 2, ..., Number: 5
Цикл по файлам директории
for FILE in /var/log/*.log
do
echo "File: $FILE"
done
Практический скрипт из лекции: создание файлов по дате
Файл: create_files_by_date.sh
# create_files_by_date.sh
#!/bin/bash
#
DATE=`date '+%d-%m-%y'`
#echo $DATE
for i in {1..5}
do
date +'%H-%M-%S' > File-$i.txt
sleep 5
done
mkdir -p $DATE
cp File*.txt $DATE
#cd $DATE
for FILE in $DATE/*
do
cat $FILE
done
Скрипт:
- Сохраняет текущую дату в переменную
DATE - Создаёт 5 файлов
File-1.txt...File-5.txt, записывая в каждый текущее время - Ждёт 5 секунд между созданиями (
sleep 5), чтобы время в файлах различалось - Создаёт директорию с именем текущей даты
- Копирует все файлы в эту директорию
- Выводит содержимое каждого файла через
cat
4. Цикл while
Цикл со счётчиком
counter=1
while [ $counter -le 5 ]
do
echo "Counter: $counter"
((counter++))
done
Счётчик начинается с 1, цикл выполняется пока $counter <= 5. После каждой итерации счётчик увеличивается на 1.
Бесконечный цикл (однострочник)
while true; do echo "Alive" && sleep 1; done
Выводит "Alive" каждую секунду. Остановить: Ctrl+C. Полезно для мониторинга или ожидания события.
Скрипт с циклом while
Файл: while_counter.sh
# while_counter.sh
#!/bin/bash
counter=1
while [ $counter -le 5 ]
do
echo "Iteration: $counter"
((counter++))
done
echo "Done!"
5. Скрипт ДЗ: myfirstbashscript.sh
Пример скрипта для домашнего задания (подробное описание в homework.html):
Файл: myfirstbashscript.sh
# myfirstbashscript.sh
#!/bin/bash
USER=Andrew
date
echo "hello $USER!"
pwd
ps -ef | grep bioset | grep -v grep | wc -l
ls -la /etc/passwd | awk '{print $1}'
Строки объяснены:
USER=Andrew— переменная с именем (не системная$USER)date— вывести текущую дату и времяecho "hello $USER!"— приветствие с именем из переменнойpwd— показать, из какой директории работает скриптps -ef | grep bioset | grep -v grep | wc -l— подсчитать процессы bioset (без строки самого grep)ls -la /etc/passwd | awk '{print $1}'— вывести права файла /etc/passwd (первый столбец)