补充说明
mkfifo 是 coreutils 提供的命令,用于创建命名管道文件。命名管道在文件系统中有一个路径,但数据只存在于内核缓冲区,读写双方必须同时打开才能通信,常用于 shell 脚本中的进程间通信。
默认权限受 umask 影响,可用 -m 指定(如 -m 600)。向没有读端的 FIFO 写入会阻塞,直到有进程打开读取;反之亦然。
FIFO 不占磁盘空间,重启后仍存在(除非位于 tmpfs 上)。删除用 rm,不影响已经打开它的进程。
语法
mkfifo [选项] 名称...
选项
-m, --mode <模式>:设置权限,如600、u=rw,g=r-Z:设置 SELinux 安全上下文--help:显示帮助--version:显示版本
实例
# 创建一个命名管道
mkfifo /tmp/myfifo
# 指定权限
mkfifo -m 600 /tmp/private.fifo
# 一个终端写入(会阻塞直到有人读)
echo "hello" > /tmp/myfifo
# 另一个终端读取
cat /tmp/myfifo
# 通过 FIFO 传输 tar 流
mkfifo /tmp/backup.fifo
tar cf - /data > /tmp/backup.fifo &
ssh host 'cat > backup.tar' < /tmp/backup.fifo