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

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

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

  • Как повысить производительность рабочего стола в Linux?
  • Bash названная труба - Atomic Reading
  • как ssh обнаруживает имена хостов в сети?
  • Перезапустить приложение после завершения
  • Как запустить сценарий оболочки из любого места
  • Использование параметров в скрипте
  • Я предпочитаю, чтобы все было как можно лучше, чем POSIX, но Linux приемлемо. Избегание башизмов – это мои единственные жесткие критерии, которые я пишу в dash .

  • Какие приложения для редактирования видео доступны в Linux?
  • Каким будет пакет RHEL, соответствующий встроенному в Ubuntu?
  • Как Node.js / модуль кластера передает новые соединения из процесса master / parent, дочерних процессов?
  • Что-то запутанное в отношении «su -» и «su»
  • Экран заставки KDE не исчезает
  • установить opencv-2.4-9 на centos 6.5 с поддержкой cuda 5.5
  • 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

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