Лучше использовать программу, которая не выделяет много памяти для выполнения задачи. Однако есть проблема с генерацией случайных чисел: если вам нужны полностью случайные числа, вам нужно использовать «хороший» источник случайных чисел, например / dev / urandom.
Я думаю эта программа на языке C может помочь вам с этой задачей. Он генерирует числа на ходу и с тремя указанными вами аргументами: start int, end int и их количество для генерации. Итак, чтобы сгенерировать 100 целых значений в диапазоне (0..200), вы выполните:
./mkrnd 0 200 100
Вероятно, вам понадобится перенаправление в файл, поэтому сделайте
./mkrnd 0 200 100 >randomints.txt
Компиляция проста, просто выполните gcc mkrnd.c -o mkrnd
(или я могу скомпилировать его для вас).
Считается, что это достаточно быстро, но все равно потребуются часы для работы, я думаю. Для меня на Athlon64 5000 +:
% time null ./mkrnd 0 1000000000 10000000
real 0m33.471s
user 0m0.000s
sys 0m0.000s
Удалите #if 0 ... #endif, чтобы он получал случайные целые числа из / dev / urandom (возможно, медленнее).
А насчет требований к памяти: в системе musl требуется только 4K RSS во время всего ее выполнения.
РЕДАКТИРОВАТЬ: Замена gettimeofday на clock_gettime дает удвоенную скорость.
При вводе выборки:
find /tmp -lname '/net/*'
В более общем случае скажите find
исследовать каждую локальную файловую систему, но оставаться в каждой файловой системе:
find $(lsblk --list --noheadings --output MOUNTPOINT | grep /) -xdev -lname '/net/*'
В более общем случае попросите find
выполнить поиск в локальных файловых системах, как описано выше, но составьте список возможных целей NFS:
readarray -t nfsmounts < <(awk '$3 ~ /^nfs/ { print $2 }' < /proc/mounts)
excludes=()
excludes+=("(")
excludes+=(" -lname ${nfsmounts[0]}")
for((i=1;i < ${#nfsmounts[@]}; i++))
do
excludes+=( " -o -lname '${nfsmounts[i]}/*'")
done
excludes+=(")")
find $(lsblk --list --noheadings --output MOUNTPOINT | grep /) -xdev ${excludes[@]}
Другая альтернатива начальному списку файловых систем :parse /proc/filesystems для типов файловых систем, которые неnodev
:
find $( for type in $(awk '$1 != "nodev"' /proc/filesystems); do mount -l -t "$type" | awk '{print $3}'; done ) \
-xdev -lname '/net/*'