Shell Script mktemp, каков наилучший способ создания временного именованного канала?

Я знаю, что лучше создавать временные файлы с помощью mktemp , но как насчет названных каналов?

У меня есть идея, я уверен, что это сработает, но мне бы очень понравилось мнение экспертов.

Я предпочитаю, чтобы все было как можно лучше, чем POSIX, но Linux приемлемо. Избегание башизмов – это мои единственные жесткие критерии, которые я пишу в dash .

5 Solutions collect form web for “Shell Script mktemp, каков наилучший способ создания временного именованного канала?”

 tmppipe=$(mktemp -u) mkfifo -m 600 "$tmppipe" 

В отличие от обычного создания файла, который подвержен захвату существующим файлом или символической ссылкой, создание канала имени через mkfifo или базовую функцию либо создает новый файл в указанном месте, либо не выполняется. Что-то вроде : >foo небезопасно, потому что если злоумышленник может предсказать вывод mktemp то злоумышленник может создать целевой файл для себя. Но mkfifo foo потерпит неудачу в таком сценарии.

Если вам нужна полная мобильность POSIX, mkfifo -m 600 /tmp/myfifo безопасен против угона, но склонен к отказу в обслуживании; без доступа к сильному генератору имен случайных файлов, вам нужно будет управлять повторными попытками.

Если вам не нужны тонкие проблемы безопасности во временных файлах, вы можете следовать простому правилу: создать частный каталог и сохранить все там.

 tmpdir=$(mktemp -d) trap 'rm -rf "$tmpdir"' EXIT INT TERM HUP mkfifo "$tmpdir/pipe" 

Более безопасная альтернатива – использовать mktemp для безопасного создания каталога, затем поместить свой именованный канал в этот каталог, сделать rm -R $dir чтобы избавиться от него в конце.

Используйте опцию «сухой ход»:

 mkfifo $(mktemp -ut pipe.XXX) 

Вы можете использовать mktemp для создания временного файла, затем удалить его и создать именованный канал с тем же именем.

Например:

 TMPPIPE=$(mktemp -t pipe.XXX) && { rm -f $TMPPIPE mkfifo $TMPPIPE } 

Используйте mkfifo или mknod в Unix, где двумя отдельными процессами можно получить доступ к каналу по имени – один процесс может открыть его как читателя, а другой – как писателя.

 mkfifo my_pipe gzip -9 -c < my_pipe > out.gz cat file > my_pipe 

Именованный канал можно удалить так же, как любой файл:

 rm my_pipe mkfifo --mode=0666 /tmp/namedPipe gzip --stdout -d file.gz > /tmp/namedPipe 

NamedPipe можно использовать обычный файл только для чтения.

http://www.linuxjournal.com/article/2156

  • Безопасно читать пароль из замещения процесса?
  • Именованные трубы: несколько экспериментов приводят к путанице
  • Как узнать, заполнен ли буфер буфера?
  • Как захватить stdout запущенного процесса, перенаправленного на / dev / null
  • Все линии не перемещаются по трубе?
  • В tcsh как я могу добавить «cd» к выходу канала?
  • Почему я не могу передать `pwd`` open` на macOS?
  • Сочетание эхо, трубы и кошки
  • Как закрыть трубу FIFO?
  • Обработать каждую строку вывода из `ping` немедленно в конвейере
  • измеритель скорости трубы с машиносчитываемым выходом
  • Как конвейер знает, когда останавливать
  • Interesting Posts

    gnuwin bash Если файл .txt содержит строковый файл-копию

    Как вы указываете установленные метапакеты в Arch Linux?

    Как я могу добавить тег к началу нескольких файлов?

    SSH – требуется только аутентификатор Google из-за пределов локальной сети

    sed добавляется после строки, содержащей несколько неупорядоченных строк

    Несколько аргументов с использованием xargs.

    Поддерживает ли сортировка сортировку файла на месте, например `sed –in-place`?

    Как заставить «экран» очистить терминал после команд типа `htop`

    Настройка цвета Git Bash

    «Запасной» диск в массиве RAID-массива 2-disk mdadm?

    Получить список индексов каждого элемента в списке, как если бы он отсортирован

    Как настроить несколько скрытых сервисов Tor на одном хосте?

    Есть ли в Linux файловая поисковая система, такая как «Все»?

    Документация для vifm?

    Почему я могу подключиться к IP-интерфейсу сетевого интерфейса (на сервере с несколькими сетевыми интерфейсами) при удалении сетевого кабеля?

    Linux и Unix - лучшая ОС в мире.