POSTMAP(1) POSTMAP(1)
名称
postmap - Postfix 查找表管理工具
概要
postmap [-bfFhimnNoprsuUvw] [-c config_dir] [-d key] [-q key]
[file_type:]file_name ...
描述
postmap(1) 命令用于创建、查询或更新一个或多个 Postfix 查找表。
如果目标文件不存在,则会创建与源文件具有相同组权限和其他读取权限的新文件。
在表更新过程中,系统会推迟信号传递,并对整个表施加独占的咨询锁,以避免其他进程访问时出现意外情况。
输入文件格式
查找表输入文件的格式如下:
o 表项格式为:
key 空格 value
o 空行和仅包含空格的行会被忽略,以 "#" 开头的行也会被忽略。
o 逻辑行以非空格文本开头。以空格开头的行视为逻辑行的续行。
key 和 value 会按原样处理,但会去除首尾的空格。从 Postfix 3.2 开始,可以通过用双引号 `"' 包裹键名来支持查找键中的空格。在双引号内,可以使用反斜杠 `\' 来转义双引号 `"' 和反斜杠本身。
使用 -F 选项时,value 必须指定一个或多个以逗号和/或空格分隔的文件名。postmap(1) 会将这些文件的内容连接起来(文件间插入换行符),并存储 base64 编码的结果而非原始值。
当 key 包含电子邮件地址信息时,如果本地部分需要符合 RFC 5322 规范,则应使用双引号包裹。例如,包含 ";" 的本地部分,或以 "." 开头或结尾的本地部分。
默认情况下,查找键会被转换为小写以实现不区分大小写的查找。从 Postfix 2.3 开始,这种大小写转换仅适用于键值为固定大小写字符串的表类型,如 btree:、dbm: 或 hash:。在早期版本中,即使是支持混合大小写匹配的表类型(如 regexp: 和 pcre:)也会进行大小写转换,这会导致 $number 替换时丢失信息。
命令行参数
-b 启用消息正文查询模式。当使用 "-q -" 从标准输入读取查找键时,将输入视为 RFC 5322 格式的电子邮件。每行正文内容都会成为一个查找键。
默认情况下,-b 选项从第一个非头部行开始生成查找键,直到消息结束。要模拟 body_checks(5) 处理,需配合 -m 选项启用 MIME 解析。这样 -b 选项就不会为附件 MIME 头和 message/* 头生成正文样式的查找键。
注意:当 "smtputf8_enable = yes" 时,-b 选项会禁用查询键和查找结果的 UTF-8 语法检查。可使用 -U 选项强制进行 UTF-8 语法检查。
此功能在 Postfix 2.6 及更高版本中可用。
-c config_dir
从指定目录而非默认配置目录读取 main.cf 配置文件。
-d key
在指定映射中搜索 key 并从每个映射中删除一个条目。找到请求的信息时退出状态为零。
如果指定键值为 -,则从标准输入流读取键值。当至少找到一个请求的键时退出状态为零。
-f 在创建或查询表时不将查找键转换为小写。
在 Postfix 2.3 及更高版本中,此选项对正则表达式表无效,因为正则表达式表通过模式附加标志来控制大小写转换。
-F 查询或列出映射表时,对每个值进行 base64 解码。从源文件创建映射表时,将每个值视为文件名列表,连接这些文件的内容,并存储 base64 编码的结果而非原始值(详见输入文件格式)。
此功能在 Postfix 3.4 及更高版本中可用。
-h 启用消息头查询模式。当使用 "-q -" 从标准输入读取查找键时,将输入视为 RFC 5322 格式的电子邮件。每个逻辑头行都会成为一个查找键,多行头则成为一个包含一个或多个换行符的查找键。
默认情况下,-h 选项会生成查找键直到第一个非头部行。要模拟 header_checks(5) 处理,需配合 -m 选项启用 MIME 解析。这样 -h 选项也会为附件 MIME 头和 message/* 头生成头部样式的查找键。
注意:当 "smtputf8_enable = yes" 时,-b 选项会禁用查询键和查找结果的 UTF-8 语法检查。可使用 -U 选项强制进行 UTF-8 语法检查。
此功能在 Postfix 2.6 及更高版本中可用。
-i 增量模式。从标准输入读取条目,不截断现有数据库。默认情况下,postmap(1) 会从 file_name 中的条目创建新数据库。
-m 配合 "-b" 和 "-h" 选项启用 MIME 解析。
此功能在 Postfix 2.6 及更高版本中可用。
-N 包含终止查找键和值的空字符。默认情况下,postmap(1) 会遵循主机操作系统的默认行为。
-n 不包含终止查找键和值的空字符。默认情况下,postmap(1) 会遵循主机操作系统的默认行为。
-o 处理非 root 用户拥有的输入文件时不释放 root 权限。默认情况下,postmap(1) 会放弃 root 权限并以源文件所有者的身份运行。
-p 创建新文件时不继承输入文件的访问权限,而是使用默认权限(模式 0644)创建。
-q key
在指定映射中搜索 key 并将找到的第一个值写入标准输出。找到请求的信息时退出状态为零。
注意:此操作仅执行指定键的单一查询,不会像 access(5)、canonical(5)、transport(5)、virtual(5) 等 Postfix 表驱动功能那样对键的子串进行迭代查询。
如果指定键值为 -,则从标准输入流读取键值,并为每个找到的键输出一行 key value。当至少找到一个请求的键时退出状态为零。
-r 更新表时不提示现有条目的更新尝试,直接执行更新。
-s 检索所有数据库元素,并为每个元素输出一行 key value。元素按数据库顺序而非原始输入顺序显示。
此功能在 Postfix 2.2 及更高版本中可用,但并非所有数据库类型都支持。
-u 禁用 UTF-8 支持。当 "smtputf8_enable = yes" 时默认启用 UTF-8 支持,要求键和值都是有效的 UTF-8 字符串。
-U 当 "smtputf8_enable = yes" 时,强制对 -b 和 -h 选项进行 UTF-8 语法检查。
-v 启用详细日志记录用于调试。多个 -v 选项会增加详细程度。
-w 更新表时不提示现有条目的更新尝试,直接忽略这些尝试。
参数:
file_type
数据库类型。使用 "postconf -m" 命令可查看支持的类型。
postmap(1) 命令可查询任何支持的文件类型,但只能创建以下文件类型:
btree 输出文件为 btree 文件,名为 file_name.db。适用于支持 db 数据库的系统。
cdb 输出文件为单个文件,名为 file_name.cdb。适用于支持 cdb 数据库的系统。
dbm 输出为两个文件,名为 file_name.pag 和 file_name.dir。适用于支持 dbm 数据库的系统。
fail 始终返回失败的查找表。表名仅用于日志记录,此表用于简化 Postfix 错误测试。
hash 输出文件为哈希文件,名为 file_name.db。适用于支持 db 数据库的系统。
lmdb 输出为基于 btree 的文件,名为 file_name.lmdb。lmdb 支持不同进程的并发读写,与其他基于文件的表不同。适用于支持 lmdb 数据库的系统。
sdbm 输出为两个文件,名为 file_name.pag 和 file_name.dir。适用于支持 sdbm 数据库的系统。
未指定 file_type 时,使用 default_database_type 配置参数指定的数据库类型。
file_name
重建数据库时查找表源文件的名称。
诊断
问题会记录到标准错误流和 syslogd(8) 或 postlogd(8)。无输出表示未发现问题。重复条目会被跳过并标记警告。
postmap(1) 在成功时(包括成功的 "postmap -q" 查询)以零退出状态终止,失败时以非零退出状态终止。
环境
MAIL_CONFIG
包含 Postfix 配置文件的目录。
MAIL_VERBOSE
启用详细日志记录用于调试。
配置参数
以下 main.cf 参数与此程序特别相关。下文仅提供参数摘要,详见 postconf(5)。
berkeley_db_create_buffer_size (16777216)
创建 Berkeley DB 哈希或 btree 表的程序的每表 I/O 缓冲区大小。
berkeley_db_read_buffer_size (131072)
读取 Berkeley DB 哈希或 btree 表的程序的每表 I/O 缓冲区大小。
config_directory (参见 'postconf -d' 输出)
Postfix main.cf 和 master.cf 配置文件的默认位置。
default_database_type (参见 'postconf -d' 输出)
newaliases(1)、postalias(1) 和 postmap(1) 命令使用的默认数据库类型。
import_environment (参见 'postconf -d' 输出)
特权 Postfix 进程从非 Postfix 父进程导入的环境变量列表,或 name=value 形式的环境覆盖。
smtputf8_enable (yes)
为 RFC 6531、RFC 6532 和 RFC 6533 描述的协议启用初步 SMTPUTF8 支持。
syslog_facility (mail)
Postfix 日志的 syslog 设施。
syslog_name (参见 'postconf -d' 输出)
在 syslog 记录中进程名前添加的前缀,例如 "smtpd" 变为 "prefix/smtpd"。
Postfix 2.11 及更高版本可用:
lmdb_map_size (16777216)
OpenLDAP LMDB 数据库的初始大小限制(字节)。
参见
postalias(1),创建/更新/查询别名数据库
postconf(1),支持的数据库类型
postconf(5),配置参数
postlogd(8),Postfix 日志记录
syslogd(8),系统日志记录
自述文件
DATABASE_README,Postfix 查找表概述
许可
本软件必须随附 Secure Mailer 许可证。
作者
Wietse Venema
IBM T.J. Watson 研究中心
邮政信箱 704
美国纽约州约克城高地,邮编 10598
Wietse Venema
Google 公司
纽约第八大道 111 号
美国纽约州纽约市,邮编 10011
POSTMAP(1)