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

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

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

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

  • Как принудительно установить set -o pipefail при сбое первой команды в трубе
  • Как закрыть трубу FIFO?
  • как использовать только определенные адреса в подсети для traceroute?
  • Как я могу выйти из системы меньше, не покидая исходный процесс?
  • Как сохранить трубку (|) в переменной?
  • Автоматизация труб?
  • Загрузите файл и канал в несколько команд
  • Печать stderr только в том случае, если в stdout ничего не записано, иначе распечатайте только stdout, отбрасывая stderr
  • 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

    Interesting Posts

    Команда Bash, чтобы определить, какая строка в группе строк является префиксом другой строки

    Как установить / удалить / обновить пакеты .rpm в Red Hat?

    Выполнить скрипт оболочки через crontab

    Разрешения для файлов при передаче на другой сервер

    Можно ли увидеть сообщения, отображаемые при загрузке сервера с удаленного компьютера?

    установленное приложение сохраняет открытый порт

    Панель задач, близкая, минимизирующая, максимизирующая и т. Д. Исчезла на циннамоне Linux

    Как получить информацию о заблокированных учетных записях

    Проблема с кодировкой url в debian sources.list

    Предупреждение! Корневой диск не существует после элементарной установки

    Заурус и картографические клавиатуры

    как установить monodevelop с добавлением d-языка на Mint 12

    Логистика копирования большого количества файлов scp-сервера на сервер. Как определить прогресс?

    Когда я настраиваю почтовый сервер с помощью Postfix, как мне настроить его для использования моего доменного имени?

    Midnight Commander отображает диалог «Отменить выбор», когда я нажимаю F4 для редактирования файла

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