tmppipe=$(mktemp -u) mkfifo -m 600 "$tmppipe"
В отличие от регулярного создания файла, которое подвержено тому, чтобы быть угнанным существующим файлом или символьной ссылкой, созданием канала имени через
mkfifo
или базовая функция или создает новый файл в указанном месте или сбоях. Что-то как: >foo
небезопасно потому что, если взломщик может предсказать выводmktemp
затем взломщик может создать конечный файл для себя. Ноmkfifo foo
перестал бы работать в таком сценарии.Если Вам нужна полная мобильность POSIX,
mkfifo -m 600 /tmp/myfifo
безопасно против угона, но подвержен отказу в обслуживании; без доступа к сильному случайному генератору имени файла необходимо было бы справиться с попытками повторной попытки.Если Вы не заботитесь о тонких проблемах безопасности вокруг временных файлов, можно следовать простому правилу: создайте частный каталог и сохраните все там.
tmpdir= cleanup () { if [ -n "$tmpdir" ] ; then rm -rf "$tmpdir"; fi if [ -n "$1" ]; then kill -$1 $$; fi } tmpdir=$(mktemp -d) trap 'cleanup' EXIT trap 'cleanup HUP' HUP trap 'cleanup TERM' TERM trap 'cleanup INT' INT mkfifo "$tmpdir/pipe"
Несколько примечаний на основе моего опыта:
testdisk
в соответствии с Linux, но если они перестали работать, Windows chkdisk
может помочь. Если Вам установили Windows под виртуальной машиной, можно преобразовать необработанное изображение, полученное из ddrescue
к формату, поддерживаемому той виртуальной машиной (такой как VDI
или VMDK
), добавьте его к VM и загрузите Windows в режиме командной строки для фиксации файловой системы. При использовании VirtualBox команда для преобразования такого изображения VBoxManage convertfromraw <filename> <outputfile>
дополнительно с --format VDI|VMDK|VHD
получить указанный выходной формат.Это может или не может относиться к Вашему случаю, но одной мерой последнего средства является "прием морозильника". Посмотрите Восстановление данных из поврежденного жесткого диска: "морозильник обманывает" для обсуждения метода.