深度解析 lpr 命令:Linux/macOS 下的打印瑞士军刀
在 Linux 和 macOS 系统中,lpr(Line Printer Remote)命令是一个强大而实用的工具,它允许用户从命令行发送文件到打印队列。虽然现在图形界面的打印选项更为常见,但 lpr 在脚本、自动化任务以及需要精确控制打印行为的场景中依然扮演着不可或缺的角色。
lpr 是什么?
lpr 是 CUPS (Common Unix Printing System) 打印系统的一部分,它负责将指定的文件发送到打印假脱机(spool)目录,然后由打印守护进程(通常是 lpd 或 CUPS 自身)处理并将内容发送到实际的打印机。简单来说,它就是命令行下的"打印"按钮。
为什么你需要了解 lpr?
- 自动化和脚本编写:在批处理、自动化报告生成或服务器端打印任务中,
lpr可以轻松集成到 shell 脚本中,实现无人值守的打印。 - 远程打印:尽管名称中带有 "Remote",但现代 CUPS 环境下,
lpr主要用于本地打印。不过,其背后的协议(LPD)确实支持网络打印。 - 精确控制:
lpr提供了多种选项,允许你精确控制打印机选择、份数、纸张大小等。 - 诊断和故障排除:了解
lpr有助于你理解打印流程,并在打印出现问题时进行诊断。
lpr 的基本用法
最简单的 lpr 命令就是将一个文件发送到默认打印机:
1lpr filename.txt
如果 filename.txt 是一个文本文件,它将被直接打印。如果文件是 PostScript 或 PDF 格式,CUPS 会自动处理并将其发送到打印机。
常用选项
lpr 提供了丰富的选项来定制打印行为:
-P printer_name:指定打印机
指定要使用的打印机。这是最常用的选项之一。
1lpr -P MyOfficePrinter document.pdf
如何查看打印机名称?
使用 lpstat -p 命令可以列出所有可用的打印机及其名称:
1lpstat -p
-# num_copies:指定打印份数
1lpr -# 3 report.docx
-o option=value:指定打印选项
指定各种打印选项。这些选项通常与打印机驱动程序相关,非常强大和灵活。以下是一些常见示例:
纸张大小 (Page Size)
1lpr -o media=A4 document.pdf
常见值:Letter, Legal, A4, A3 等。
双面打印 (Duplex/Two-Sided)
1lpr -o Duplex=DuplexNoTumble document.pdf # 长边翻转 2lpr -o Duplex=DuplexTumble document.pdf # 短边翻转
常见值:DuplexNoTumble (长边翻转), DuplexTumble (短边翻转), None (单面)。
每页打印的页数 (N-up)
将多页内容缩小打印到一张纸上。
1lpr -o number-up=2 document.pdf # 每页打印2版
打印质量 (Quality)
1lpr -o print-quality=draft document.pdf
常见值:draft, normal, high。
彩色/黑白 (Color/Grayscale)
1lpr -o ColorModel=Grayscale document.pdf # 强制黑白
常见值:Color, Grayscale。
如何获取更多 option=value 选项?
使用 lpoptions -p printer_name -l 命令可以列出特定打印机支持的所有选项及其可能的值。
1lpoptions -p MyOfficePrinter -l
-r:打印后删除文件
在打印完成后删除原始文件。请谨慎使用此选项,因为它会永久删除你的文件!
-m:打印完成通知
打印完成后发送邮件通知用户。
示例:一个实际的打印脚本片段
假设你有一个需要每天自动打印销售报告的场景:
1#!/bin/bash 2 3REPORT_FILE="/var/reports/daily_sales_$(date +%Y%m%d).pdf" 4PRINTER="WarehousePrinter" 5 6# 检查报告文件是否存在 7if [ ! -f "$REPORT_FILE" ]; then 8 echo "错误: 报告文件 $REPORT_FILE 不存在。" 9 exit 1 10fi 11 12echo "正在发送报告 $REPORT_FILE 到打印机 $PRINTER ..." 13 14lpr -P "$PRINTER" -o media=A4 -o Duplex=DuplexNoTumble "$REPORT_FILE" 15 16if [ $? -eq 0 ]; then 17 echo "报告已成功发送到打印队列。" 18else 19 echo "错误: 发送报告失败。" 20fi
总结
lpr 命令虽然是命令行工具,但其功能强大且灵活。通过理解其基本用法和各种选项,你可以在 Linux 和 macOS 环境下更高效地管理和自动化你的打印任务。下次当你需要从终端打印文件时,不妨尝试一下这个"老牌"但依然充满活力的工具!
cd ..