1. Linux命令行打印利器:lpr命令完全指南
作为Linux系统管理员,我每天都要处理各种打印任务。图形界面虽然直观,但在服务器环境或批量操作时,命令行打印才是最高效的选择。lpr命令就是这样一个被严重低估的打印工具 - 它看起来简单,实则暗藏玄机。今天我就来分享这个命令的深度用法,以及我在企业级打印管理中积累的实战经验。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. lpr命令基础解析
2.1 命令语法与核心参数
lpr命令的基本语法结构如下:
bash复制lpr [选项] [文件名]
最常用的几个参数组合:
-P指定打印机(关键参数)-#设置打印份数-o设置打印选项-J设置作业名称-T设置标题页文本
比如要打印3份report.pdf到财务部的打印机:
bash复制lpr -P Finance-Printer -# 3 -J "Q3 Financial Report" report.pdf
注意:如果系统只有一台默认打印机,可以省略-P参数。通过
lpstat -p命令可以查看所有可用打印机。
2.2 打印队列管理
lpr命令提交的打印作业会进入CUPS打印队列。几个关键的管理命令:
lpq查看当前打印队列lprm取消打印作业(需要作业ID)lpstat -o查看所有打印机的作业状态
取消特定作业的示例:
bash复制$ lpq
Finance-Printer is ready
Rank Owner Job File(s) Total Size
active alice 42 quarterly.pdf 102400 bytes
1st bob 43 annual.pdf 204800 bytes
$ lprm 43
3. 高级打印配置技巧
3.1 打印选项深度配置
通过-o参数可以设置丰富的打印选项:
bash复制lpr -o media=A4 -o sides=two-sided-long-edge -o fit-to-page presentation.pdf
常用打印选项:
| 选项 | 值示例 | 说明 |
|---|---|---|
| media | A4,Letter,Legal | 纸张类型 |
| sides | one-sided, two-sided-long-edge | 单双面打印 |
| orientation-requested | 4(横向),3(纵向) | 打印方向 |
| page-ranges | 1-3,5,7-9 | 页码范围 |
| fit-to-page | true | 缩放适应页面 |
3.2 打印作业优先级设置
在繁忙的办公环境中,紧急打印可以通过作业优先级插队:
bash复制lpr -H 1 -J "Urgent Document" emergency.doc # 最高优先级
lpr -H 50 -J "Low Priority" draft.txt # 低优先级
优先级范围1-100,默认50。数值越小优先级越高。
4. 企业级打印方案实战
4.1 批量打印自动化脚本
这是我常用的批量打印脚本模板:
bash复制#!/bin/bash
PRINTER="Department-Printer"
COPIES=1
PRIORITY=50
for file in /reports/*.pdf; do
filename=$(basename "$file")
jobname="${filename%.*}"
lpr -P "$PRINTER" -# $COPIES -H $PRIORITY -J "$jobname" "$file"
echo "[$(date)] Submitted $file to $PRINTER" >> /var/log/print_jobs.log
done
可以通过crontab设置定时打印任务:
bash复制0 2 * * * /usr/local/bin/nightly_report_print.sh
4.2 打印监控与统计
使用这个命令组合获取打印统计:
bash复制lpstat -p -l | grep -E "^printer" | awk '{print $2}' | while read printer; do
count=$(lpstat -o "$printer" | wc -l)
echo "$printer: $count jobs pending"
done
5. 常见问题排查指南
5.1 打印机状态检查流程
当打印任务没有正常输出时,按这个顺序排查:
- 检查打印机物理连接和电源
- 验证CUPS服务状态:
systemctl status cups - 测试打印机是否接受作业:
echo "Test" | lpr -P printer-name - 查看CUPS错误日志:
tail -f /var/log/cups/error_log
5.2 典型错误解决方案
问题1:lpr: Unsupported format 'application/pdf'
解决方法:
bash复制sudo apt install printer-driver-cups-pdf # Debian/Ubuntu
sudo yum install cups-pdf # RHEL/CentOS
问题2:lpr: The printer is not available
检查步骤:
- 确认打印机名称正确:
lpstat -p - 检查打印机是否启用:
cupsenable printer-name - 验证打印机驱动:
lpinfo -m | grep -i "driver"
6. 安全打印最佳实践
6.1 打印作业加密
对于敏感文档,可以使用加密打印:
bash复制gpg -c confidential.doc | lpr -P Secure-Printer
接收方需要输入密码才能打印。
6.2 打印日志审计
启用详细打印日志记录:
bash复制sudo cupsctl --debug-logging
sudo cupsctl --access-log-level=config
日志位置:
- /var/log/cups/access_log
- /var/log/cups/page_log
7. 跨平台打印方案
7.1 Windows共享打印机连接
连接Windows共享打印机步骤:
bash复制sudo lpadmin -p WinPrinter -v smb://windows-pc/SharedPrinter -m drv:///sample.drv/generic.ppd -E
7.2 云打印集成
通过Google Cloud Print连接(虽然服务已停止,但替代方案):
bash复制sudo lpadmin -p CloudPrinter -v ipp://printers.google.com/printers/your-printer-id -m everywhere -E
8. 性能优化技巧
8.1 打印队列调优
修改/etc/cups/cupsd.conf中的关键参数:
code复制MaxJobs 100 # 最大作业数
MaxJobsPerUser 50 # 每个用户最大作业数
JobTimeout 300 # 作业超时(秒)
8.2 内存缓存设置
对于大文件打印,增加内存缓存:
bash复制sudo sysctl -w vm.dirty_ratio=20
sudo sysctl -w vm.dirty_background_ratio=10
9. 替代工具与扩展方案
9.1 lp命令对比
lp是lpr的替代命令,语法更现代:
bash复制lp -d printer-name -n 3 -o media=A4 file.pdf
主要区别:
- lp直接支持PDF(多数现代系统)
- 错误信息更详细
- 支持更多现代打印选项
9.2 打印到文件
生成PDF输出:
bash复制lp -d CUPS-PDF -o outputorder=reverse document.txt
输出文件通常在~/PDF/目录下。
10. 实用脚本集合
10.1 双面打印自动检测
这个脚本自动检测打印机是否支持双面打印:
bash复制#!/bin/bash
printer=$1
if lpoptions -p "$printer" | grep -q "Duplex: DuplexNoTumble"; then
echo "Enabling duplex printing"
lpr -P "$printer" -o sides=two-sided-long-edge "$2"
else
echo "Duplex not supported, printing single-sided"
lpr -P "$printer" "$2"
fi
10.2 打印服务器负载监控
实时监控脚本:
bash复制watch -n 5 'echo "==== Print Queue ===="; lpstat -o; echo ""; echo "==== Printer Status ===="; lpstat -p'
在企业环境中,我建议将这些命令封装成Web界面或监控系统集成。通过简单的Shell脚本和lpr命令的组合,可以实现复杂的打印工作流管理 - 这正是Linux哲学的完美体现:小而专的工具,通过组合创造无限可能
