【Linux命令大全】002.文件传输之lpr命令(实操篇)
✨ 本文为Linux系统文件传输命令的全面汇总与深度优化,结合图标、结构化排版与实用技巧,专为高级用户和系统管理员打造。
(关注不迷路哈!!!)
文章目录
- 【Linux命令大全】002.文件传输之lpr命令(实操篇)
- 一、功能与作用
- 二、基本用法
- 1. 打印单个文件
- 2. 指定打印机
- 3. 指定打印份数
- 4. 从标准输入打印
- 5. 设置打印作业名称
- 三、高级用法
- 1. 打印完成后删除原文件
- 2. 打印完成后发送邮件通知
- 3. 按原样打印文件
- 4. 设置打印机特定选项
- 5. 组合使用多个参数
- 6. 打印多个文件
- 7. 打印时不打印标题页
- 四、实际应用场景
- 1. 批量打印脚本
- 2. 打印服务器客户端配置
- 3. 定时打印任务
- 4. 打印质量控制
- 五、注意事项与最佳实践
- 1. 命令可用性
- 2. 与CUPS的兼容性
- 3. 打印机配置检查
- 4. 打印队列监控
- 5. 打印作业管理
- 6. 大文件处理
- 六、常见错误与解决方案
- 1. 命令未找到
- 2. 打印机不可用
- 3. 权限被拒绝
- 4. 打印作业卡住
- 5. 格式错误
- 七、总结
一、功能与作用
lpr命令是行式打印机请求工具(Line Printer Request),用于将文件发送到Linux系统中的打印队列进行打印。它是传统Unix打印系统(LPR/LPD)的核心组件之一,负责接收用户的打印请求并将文件传输到指定的打印机队列中。lpr命令支持多种文件格式,能够处理文本文件、PostScript文件、PDF文件等多种类型的文档,是Linux系统中最常用的打印命令之一。
参数详解
| 参数 | 说明 |
|---|---|
-P printer | 指定打印机名称 |
-# number | 指定打印份数,number为正整数 |
-C name | 设置打印任务名称 |
-J name | 设置作业名称 |
-T title | 设置文档标题 |
-l | 按原样打印文件,不进行过滤处理 |
-r | 打印完成后删除原文件 |
-m | 打印完成后发送邮件通知 |
-h | 打印时不打印标题页 |
-o option | 设置打印机特定选项,如双面打印等 |
-E | 加密连接到打印服务器(在CUPS中使用) |
二、基本用法
1. 打印单个文件
最基本的lpr命令用法是直接指定要打印的文件名:
# 打印单个文件lprdocument.txt这个命令会将document.txt文件发送到默认打印机的队列中等待打印。
2. 指定打印机
使用-P参数可以指定要使用的打印机:
# 指定打印机打印文件lpr-Plaserjet report.pdf3. 指定打印份数
使用-#参数可以指定打印的份数:
# 打印3份文件lpr-# 3 presentation.pptx4. 从标准输入打印
lpr命令还支持从标准输入接收内容进行打印:
# 从标准输入打印catnotes.txt|lpr# 打印命令输出ls-la|lpr5. 设置打印作业名称
使用-J参数可以设置打印作业的名称,便于在打印队列中识别:
# 设置打印作业名称lpr-J"Weekly Report"report.docx三、高级用法
1. 打印完成后删除原文件
使用-r参数可以在打印完成后自动删除原文件,适用于临时文件或不需要保留的文档:
# 打印完成后删除原文件lpr-rtemporary_report.txt2. 打印完成后发送邮件通知
使用-m参数可以在打印完成后发送邮件通知:
# 打印完成后发送邮件通知lpr-mimportant_document.pdf3. 按原样打印文件
使用-l参数可以指示打印机按文件的原样进行打印,不进行任何过滤或格式化处理,适用于已经预先格式化的文档:
# 按原样打印文件lpr-lpreformatted.ps4. 设置打印机特定选项
使用-o参数可以设置打印机特定的选项,如双面打印、页面大小等。具体可用的选项取决于打印机型号和驱动程序:
# 设置双面打印lpr-osides=two-sided-long-edge document.pdf# 设置页面大小为A4lpr-omedia=A4 report.docx# 设置打印质量lpr-oprint-quality=best photo.jpg5. 组合使用多个参数
可以根据需要组合使用多个参数,实现更复杂的打印需求:
# 打印2份文档,使用双面打印,发送到指定打印机,设置作业名称lpr-Pcolorjet -# 2 -o sides=two-sided-long-edge -J "Quarterly Budget" budget.pdf6. 打印多个文件
可以一次指定多个文件进行打印:
# 打印多个文件lprfile1.txt file2.txt file3.txt7. 打印时不打印标题页
使用-h参数可以在打印时不打印标题页,适用于不需要包含作业信息的场景:
# 不打印标题页lpr-hdocument.txt四、实际应用场景
1. 批量打印脚本
可以编写一个简单的脚本来批量打印多个文件:
#!/bin/bash# 批量打印脚本# 检查参数if[$#-lt1];thenecho"Usage:$0<file1> [file2] [file3] ..."exit1fi# 打印所有指定的文件forfilein"$@";doif[-f"$file"];thenecho"Printing$file..."lpr"$file"if[$?-eq0];thenecho" Done."elseecho" Failed to print$file."fielseecho"Warning:$fileis not a valid file. Skipping."fidone# 显示打印队列状态echo"\nCurrent print queue status:"lpd使用示例:
# 授予执行权限chmod+x batch_print.sh# 批量打印文件./batch_print.sh report1.pdf report2.pdf presentation.pptx2. 打印服务器客户端配置
可以编写一个脚本,帮助用户快速配置打印客户端并连接到指定的打印服务器:
#!/bin/bash# 配置LPR打印客户端# 检查参数if[$#-ne3];thenecho"Usage:$0<printer_name> <server_address> <queue_name>"echo"Example:$0laserjet printserver.example.com lp"exit1fiPRINTER_NAME=$1SERVER_ADDRESS=$2QUEUE_NAME=$3# 检查是否已安装lpr包if!command-vlpr&>/dev/null;thenecho"Installing lpr package..."if[-f/etc/debian_version];thensudoapt-getupdatesudoapt-getinstall-ylprelif[-f/etc/redhat-release];thensudoyuminstall-ylprfifi# 配置打印队列CONFIG_FILE="/etc/printcap"BACKUP_FILE="/etc/printcap.bak"# 备份现有配置if[-f"$CONFIG_FILE"];thensudocp"$CONFIG_FILE""$BACKUP_FILE"echo"Backed up current printcap to$BACKUP_FILE"fi# 添加新的打印机配置echo"Adding printer configuration to$CONFIG_FILE..."sudotee-a"$CONFIG_FILE">/dev/null<<EOL$PRINTER_NAME|Network Printer$PRINTER_NAME: :rm=$SERVER_ADDRESS: :rp=$QUEUE_NAME: :sd=/var/spool/lpd/$PRINTER_NAME: :lf=/var/log/lpd-errs: :mx#0: :sh: EOL# 创建spool目录echo"Creating spool directory..."sudomkdir-p/var/spool/lpd/$PRINTER_NAMEsudochowndaemon:daemon /var/spool/lpd/$PRINTER_NAMEsudochmod775/var/spool/lpd/$PRINTER_NAME# 重启lpd服务echo"Restarting lpd service..."sudokillalllpd2>/dev/nullsudolpd# 测试打印echo"Testing printer configuration..."echo"This is a test page from$HOSTNAME"|lpr-P$PRINTER_NAMEif[$?-eq0];thenecho"\nPrinter configuration completed successfully!"echo"You can now print to$PRINTER_NAMEusing: lpr -P$PRINTER_NAME<file>"elseecho"\nFailed to send test print job. Please check your configuration."fi3. 定时打印任务
可以使用cron和lpr命令设置定时打印任务,例如每天自动打印报表:
#!/bin/bash# 每日报表打印脚本REPORT_FILE="/path/to/daily_report.pdf"PRINTER_NAME="laserjet"LOG_FILE="/var/log/daily_print.log"# 检查报表文件是否存在if[!-f"$REPORT_FILE"];thenecho"[$(date)] Error: Report file$REPORT_FILEnot found.">>$LOG_FILEexit1fi# 发送打印请求lpr-P$PRINTER_NAME-J"Daily Report$(date+%Y-%m-%d)"$REPORT_FILEif[$?-eq0];thenecho"[$(date)] Successfully printed daily report.">>$LOG_FILEelseecho"[$(date)] Failed to print daily report.">>$LOG_FILE# 可以选择发送通知邮件echo"Daily report printing failed on$(hostname)"|mail-s"Print Job Failure"admin@example.comfi然后通过cron设置定时任务:
# 编辑crontab配置crontab-e# 添加以下行,每天早上9点执行打印任务09* * * /path/to/daily_report_print.sh4. 打印质量控制
可以编写一个脚本,根据文档类型自动设置合适的打印选项:
#!/bin/bash# 智能打印脚本 - 根据文件类型自动设置打印选项# 检查参数if[$#-lt1];thenecho"Usage:$0<file> [printer]"exit1fiFILE=$1PRINTER=${2:-default}# 获取文件类型FILE_TYPE=$(file-b"$FILE")# 根据文件类型设置打印选项case"$FILE_TYPE"in*PDF*)# PDF文件OPTIONS="-o fit-to-page"echo"Printing PDF file with fit-to-page option";;*PostScript*)# PostScript文件OPTIONS="-l"echo"Printing PostScript file as raw data";;*image*)# 图像文件OPTIONS="-o print-quality=best"echo"Printing image file with best quality";;*text*)# 文本文件OPTIONS="-o page-left=36 -o page-right=36 -o page-top=36 -o page-bottom=36"echo"Printing text file with margins";;*)# 其他文件类型OPTIONS=""echo"Printing unknown file type with default options";;esac# 执行打印命令if["$PRINTER"="default"];thenlpr$OPTIONS"$FILE"elselpr-P$PRINTER$OPTIONS"$FILE"fi# 检查打印是否成功if[$?-eq0];thenecho"Print job submitted successfully"elseecho"Failed to submit print job"exit1fi五、注意事项与最佳实践
1. 命令可用性
lpr命令在大多数Linux发行版中默认安装,但可能需要安装额外的软件包才能使用全部功能。如果系统上未找到该命令,请安装相应的软件包:
# 在Debian/Ubuntu系统上安装sudoapt-getupdatesudoapt-getinstall-ylpr# 在CentOS/RHEL系统上安装sudoyuminstall-ylpr2. 与CUPS的兼容性
现代Linux系统通常使用CUPS作为默认打印系统。CUPS提供了与传统LPR/LPD命令兼容的接口,但某些参数和行为可能有所不同。如果在使用lpr命令时遇到问题,可以尝试使用CUPS的原生命令lp:
# CUPS等效命令lp document.txt# 打印文件lp-dprinter_name document.txt# 指定打印机打印lp-n3document.txt# 打印3份3. 打印机配置检查
在使用lpr命令前,建议先检查系统上配置的打印机列表,确认要使用的打印机名称正确:
# 查看可用的打印机(LPR/LPD系统)lpq-a# 查看可用的打印机(CUPS系统)lpstat-p-d4. 打印队列监控
提交打印作业后,可以使用lpq命令监控打印队列状态,确认作业是否成功提交并了解打印进度:
# 查看打印队列状态lpq# 查看特定打印机的队列状态lpq-Pprinter_name5. 打印作业管理
如果需要取消已提交的打印作业,可以使用lprm命令:
# 取消当前用户的所有打印作业lprm-# 取消特定的打印作业lprmjob_id# 取消特定打印机上的特定作业sudolprm-Pprinter_name job_id6. 大文件处理
对于大型文档,建议在打印前进行适当的压缩或分割,以提高打印效率并减少系统资源占用:
# 压缩PDF文件后打印pdfcompress large_document.pdf compressed.pdflprcompressed.pdf# 分割大文件后逐部分打印split-l1000large_file.txt part_lprpart_*# 打印所有部分六、常见错误与解决方案
1. 命令未找到
问题现象:执行lpr命令时显示"command not found"错误。
解决方案:
- 确认是否安装了
lpr软件包 - 检查命令是否在系统PATH中
# 查找lpr命令位置whichlpr# 或find/-namelpr2>/dev/null# 安装lpr包(如果尚未安装)sudoapt-getinstalllpr# Debian/Ubuntusudoyuminstalllpr# CentOS/RHEL2. 打印机不可用
问题现象:执行lpr命令时显示"printer not available"或类似错误。
解决方案:
- 确认打印机名称是否正确
- 检查打印机是否已连接并处于就绪状态
- 验证打印服务是否正在运行
# 查看可用的打印机lpq-a# 检查打印服务状态systemctl status lpd# 对于LPR/LPD系统systemctl status cups# 对于CUPS系统3. 权限被拒绝
问题现象:执行lpr命令时显示"permission denied"错误。
解决方案:
- 确认当前用户有足够的权限使用打印机
- 检查打印队列的权限设置
- 验证文件权限是否允许读取要打印的文件
# 检查文件权限ls-ldocument.txt# 检查打印队列权限ls-la/var/spool/lpd/# 使用sudo尝试打印sudolprdocument.txt4. 打印作业卡住
问题现象:打印作业已提交到队列,但长时间未完成打印。
解决方案:
- 检查打印机是否有卡纸、缺纸等问题
- 查看打印队列状态,确认作业是否在队列中
- 尝试取消卡住的作业并重新提交
# 查看打印队列状态lpq# 取消卡住的作业lprmjob_id# 重启打印服务sudosystemctl restart lpd# 对于LPR/LPD系统sudosystemctl restart cups# 对于CUPS系统5. 格式错误
问题现象:打印出的文档格式不正确或乱码。
解决方案:
- 确认文件格式与打印机兼容
- 尝试使用
-l参数按原样打印 - 对于文本文件,可以尝试使用
a2ps等工具进行格式化后再打印
# 按原样打印文件lpr-ldocument.txt# 使用a2ps格式化文本文件后打印a2ps document.txt|lpr七、总结
lpr命令是Linux系统中用于提交打印作业的重要工具,通过它可以方便地将各种类型的文件发送到打印机进行打印。无论是普通用户还是系统管理员,掌握lpr命令的使用都能帮助提高打印资源的利用效率和管理水平。
在实际应用中,可以结合其他打印命令如lpq和lprm,以及编写简单的自动化脚本,实现更高效的打印工作流。同时,需要注意与现代CUPS打印系统的兼容性问题,以及在网络环境中的使用限制。通过合理配置和使用lpr命令,可以确保打印任务的顺利完成和打印资源的有效管理。