Вопрос или проблема
На моем компьютере работает ядро Linux и bash, я проведу технический эксперимент.
У меня есть файл, file.dat
, размер = 1.048.576 байт
.
Я добавлю в определенные места в file.dat
некоторый нерегулярный (от 1 до 8 байт) случайный данные из /dev/random
.
Как это сделать и как удалить случайные данные позже?
Под определенными местами я имею в виду ряд Фибоначчи, я нашел некоторые скрипты для генерации этих чисел:
#!/bin/bash
clear
echo "Программа для нахождения ряда Фибоначчи"
echo "Сколько чисел должно быть сгенерировано?"
read n
x=0
y=1
i=2
echo "Ряд Фибоначчи до $n элементов :"
echo "$x"
echo "$y"
while [ $i -lt $n ]
do
i=`expr $i + 1 `
z=`expr $x + $y `
echo "$z"
x=$y
y=$z
done
Другой:
# Читаем значение n от пользователя
echo -n "Введите количество элементов: "
read n
# Инициализируем переменные
a=0
b=1
# Печатаем первые два элемента
echo -n "$a $b "
# Генерируем ряд Фибоначчи
for (( i=2; i<$n; i++ ))
do
c=$((a + b))
echo -n "$c "
a=$b
b=$c
done
echo
Ряд Фибоначчи указывает, где иногда добавлять от 1 до 8 байт с случайными данными.
Я знаю, что это увеличивает размер файла file.dat
до более чем 1.048.576 байт, но именно этого я и ищу.
Есть идеи, как это сделать?
Ответ или решение
Чтобы добавить случайные данные в определенные места в файле file.dat
, который имеет размер 1.048.576 байт, и сделать это с использованием чисел Фибоначчи для определения мест вставки, вы можете использовать следующий подход. Мы сначала сгенерируем последовательность чисел Фибоначчи, а затем будем использовать их для вставки случайных данных из /dev/random
. Также я предоставлю инструкцию по удалению этих данных.
Шаг 1: Генерация чисел Фибоначчи
Вы можете использовать следующий скрипт для генерации первых n
чисел Фибоначчи:
#!/bin/bash
echo -n "Введите количество членов: "
read n
a=0
b=1
indices=()
# Записываем индексы Фибоначчи в массив
for (( i=0; i<n; i++ )); do
indices+=("$a")
c=$((a + b))
a=$b
b=$c
done
echo "Индексы для вставки: ${indices[@]}"
Шаг 2: Добавление случайных данных в файл
После того как вы получили индексы, вы можете использовать следующий скрипт для вставки случайных данных.
#!/bin/bash
# Устанавливаем размер файла и количество членов Фибоначчи
file="file.dat"
size_file=$(stat -c%s "$file")
n=20 # Настройте количество членов Фибоначчи, если необходимо
# Генерируем индексы Фибоначчи
a=0
b=1
indices=()
for (( i=0; i<n; i++ )); do
indices+=("$a")
c=$((a + b))
a=$b
b=$c
done
# Добавляем случайные данные
for index in "${indices[@]}"; do
if ((index < size_file)); then
rand_size=$((RANDOM % 8 + 1)) # Генерируем случайный размер от 1 до 8
dd if=/dev/random bs=1 count=$rand_size | dd of="$file" bs=1 seek=$index conv=notrunc
fi
done
Шаг 3: Удаление случайных данных
Удаление случайных данных, вставленных в файл, может быть сложно, поскольку вам необходимо установить заранее, где именно были вставлены данные. Один из подходов заключается в использовании резервного файла для хранения оригинальных данных. Ниже приведен простой способ сохранить резервную копию и восстановить файл:
# Создаем резервную копию файла перед внесением изменений
cp file.dat file_backup.dat
# После вставки данных
# Чтобы восстановить оригинальный файл
mv file_backup.dat file.dat
Заключение
Теперь у вас есть два сценария: один для добавления случайных данных в определенные позиции в файле согласно числам Фибоначчи, и другой для восстановления оригинала после внесения изменений. Не забывайте всегда делать резервные копии важных файлов перед их изменением.