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, где будет еще больше полезной информации.