Linux: как создать самоудаляющиеся файлы
Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.
В этой статье разберемся, как создавать самоудаляющиеся файлы — файлы, которые будут удалены автоматически по истечении определённого количества минут или в указанную дату. Возникает риторический вопрос — зачем это нужно? Т.к. вопрос риторический, ответа на него в этой статье вы не найдете.
Создание команды
В Linux нет встроенной команды для создания самоудаляющихся файлов, поэтому мы её создадим.
Создадим скрипт и сохраним его как sdelete.sh
#!/bin/bash
# Check if the correct number of arguments is provided
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <filename> <time>"
echo "Example: $0 /path/to/your/file 'now + 5 minutes'"
echo "Example: $0 /path/to/your/file '12:30 PM tomorrow'"
exit 1
fi
# Assign arguments to variables
filename=$1
time=$2
# Check if the filename is a full path
if [[ "$filename" != /* ]]; then
echo "Error: Filename must be a full path."
exit 1
fi
# Create the file
touch "$filename"
if [ $? -eq 0 ]; then
echo "File '$filename' created."
else
echo "Error: Failed to create file '$filename'."
exit 1
fi
# Schedule the file for deletion using 'at'
echo "rm \"$filename\"" | at "$time"
if [ $? -eq 0 ]; then
echo "File '$filename' is scheduled for deletion at $time."
else
echo "Error: Failed to schedule deletion with 'at' command."
exit 1
fiСделаем его исполняемым с помощью chmod
chmod +x sdelete.sh
Тестирование
Проведем несколько тестов, чтобы убедиться, что скрипт работает.
Создание и удаление файла через определенное количество минут
$ ./sdelete.sh ~/hello.txt 'now +1 minute' File '/home/administrator/hello.txt' created. warning: commands will be executed using /bin/sh job 6 at Thu Jul 25 17:18:00 2024 File '/home/administrator/hello.txt' is scheduled for deletion at now +1 minute. $ ls -l | grep -i hello -rw-rw-r-- 1 administrator administrator 0 Jul 25 17:17 hello.txt
Проверив через минуту, мы можем убедиться, что hello.txt не существует.
Создание и удаление файла по заданной временной метке
Также мы можем определить временную метку как параметр, по достижении которого файл будет удален, например, в 17:50
$ ./sdelete.sh ~/hello.txt '17:50' File '/home/administrator/hello.txt' created. warning: commands will be executed using /bin/sh job 7 at Thu Jul 25 17:50:00 2024 File '/home/administrator/hello.txt' is scheduled for deletion at 17:50.
Как это работает?
Скрипт использует at команду. В Linux at команда используется для планирования выполнения команд в будущем. Она считывает команды из стандартного ввода или из указанного файла и выполняет их в указанное время.
Вот несколько простых примеров использования команды at:
Запланируйте задачу на будущее
echo "ls -l /tmp" | at now + 1 minute
Запланируйте запуск команды в определенное время
echo "echo 'Hello, World!'" | at 10:30 AM
Запланируйте запуск команды на определенную дату и время
echo "shutdown -h now" | at 11:59 PM 12/31/2024
Заключение
Самоудаляющиеся файлы, возможно, не всегда полезны, но, надеюсь, вы найдете им применение.
На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.