October 1

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