Вы когда-нибудь задумывались о том, как создать файл, который исчезнет через определенное время? Такая функция может оказаться полезной в различных сценариях: от автоматизации рутинных задач до обеспечения безопасности данных. В этой статье я поделюсь с вами простым, но эффективным способом создания самоудаляющихся файлов в Linux. Я покажу, как написать bash-скрипт, который не только создает файл, но и планирует его удаление в заданное время или через определенный промежуток времени.
Еще по теме: Автоматическое удаление файла после выполнения
Зачем это нужно? В моем случае я хотел создать механизм, не позволяющий скрипту отправлять почту с системными событиями, если последнее письмо было отправлено менее часа назад. Но вы наверняка найдете и другое применение.
Скрипт для самоудаления файла Linux
В Linux нет встроенной команды для создания самоудаляющихся файлов, поэтому мы создадим ее сами. Это проще, чем кажется.
Создайте следующий скрипт и сохраните его как sdelete.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#!/bin/bash # Проверяем правильность количества аргументов if [ "$#" -ne 2 ]; then echo "Usage: $0 <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 # Присваиваем аргументы переменным filename=$1 time=$2 # Проверяем, является ли имя файла полным путем if [[ "$filename" != /* ]]; then echo "Error: Filename must be a full path." exit 1 fi # Создаем файл touch "$filename" if [ $? -eq 0 ]; then echo "File '$filename' created." else echo "Error: Failed to create file '$filename'." exit 1 fi # Планируем удаление файла с помощью 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</time> |
Сделайте скрипт исполняемым:
1 2 3 4 5 6 7 8 |
$ ./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 больше не существует.
Создание и удаление файла в определенное время:
1 2 3 4 5 |
$ ./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, она используется для планирования выполнения команд в будущем. Она читает команды из стандартного ввода или указанного файла и выполняет их в заданное время.
Примеры использования
Вот несколько простых примеров использования команды at.
Запланировать задачу на будущее:
1 |
echo "ls -l /tmp" | at now + 1 minute |
Запланировать выполнение команды в определенное время:
1 |
echo "echo 'Hello, World!'" | at 10:30 AM |
Запланировать выполнение команды в определенную дату и время:
1 |
echo "shutdown -h now" | at 11:59 PM 12/31/2024 |
В заключение хочу отметить, что создание самоудаляющихся файлов — это не только интересный эксперимент, но и полезный инструмент для различных сценариев автоматизации. Он может стать отличным дополнением к вашему арсеналу средств управления файлами и автоматизации, независимо от того, являетесь ли вы системным администратором, разработчиком или просто энтузиастом Linux.
ПОЛЕЗНЫЕ ССЫЛКИ:
Спасибо за статью, но я не вижу разницы между запуском этого скрипта и выполнением самой команды.
Я имею в виду ввод ./sdelete.sh ~/x.txt ‘now + 1 minute’
По сравнению с просто набором: echo «rm ~/x.txt» | at now + 1 minute.
И то, и другое — примерно одно и то же.
Представь себе любой скрипт, rm видимо выбран из-за простоты использования.