一、"print"在Linux中的多重含义
Linux的"print"命令实际涉及三类截然不同的东西:
- /usr/bin/print:Debian/Ubuntu下mailcap机制提供的命令,会根据文件类型自动选择程序进行打印,实践中很少直接使用
- print内建命令 :仅存在于ksh和zsh的内建命令,用于输出文本(类似echo/printf),bash中不可用
- 真正的打印命令 :即lp(System V风格)和lpr(BSD风格),这才是用户需要的核心命令
💡 当你想要"在Linux命令行打印文件",实际应使用lp或lpr,而非名为"print"的命令。
二、系统环境准备
2.1 安装打印系统
绝大多数Linux发行版已预装lp和lpr。若缺失,安装CUPS(通用Unix打印系统)即可:
| 发行版 | 安装命令 |
|---|---|
| Ubuntu/Debian | sudo apt install cups |
| Fedora/RHEL | sudo dnf install cups |
| Manjaro/Arch | sudo pacman -S cups |
安装后需启动CUPS服务:sudo systemctl start cups
2.2 检查打印机配置
打印前先确认打印机状态:
| 命令 | 用途 | 示例 |
|---|---|---|
| lpstat -p | 列出已配置的打印机 | 显示所有打印机及状态 |
| lpstat -d | 查看默认打印机 | 若无默认需手动设置 |
| lpoptions | 查看打印机的支持选项 | lpoptions -p 打印机名 |
若没有默认打印机,可通过以下命令设置:
bash
export PRINTER=你的打印机名 #临时生效
lpoptions -d 你的打印机名 #永久生效
2.3 文件格式说明
lp/lpr不能直接发送任意类型文件 到打印机。打印机通常只理解PostScript(.ps)或PDF格式。因此,打印Word文档等文件前,需先转换为支持的格式------这也就是为什么普通用户更多使用GUI应用程序(如LibreOffice)打印,因为应用程序会自行完成格式转换。
三、基础打印命令:lp vs lpr
Linux历史上存在两套打印命令风格:System V体系(以lp为代表)和BSD体系(以lpr为代表)。当前主流的CUPS系统同时支持两者,绝大多数场景下它们可以互换使用。
3.1 lp命令------System V风格
基本语法 :
bash
lp [选项] [文件名]
| 参数 | 含义 | 示例 |
|---|---|---|
| -d printer | 指定打印机 | lp -d myprinter file.txt |
| -n num | 打印份数 | lp -n 5 file.txt 打印5份 |
| -P pages | 指定页码范围 | lp -P 1-3 file.txt |
| -t title | 作业标题 | lp -t "Report" file.txt |
| -o option | 打印机特定选项 | lp -o media=A4 file.txt |
| -m | 完成后发送邮件 | lp -m file.txt |
| -H | 指定打印时间 | lp -H 08:00 file.txt(延迟到8点) |
| -U username | 指定用户名 | lp -U john file.txt |
| -E | 强制加密连接 | lp -E file.txt |
3.2 lpr命令------BSD风格
基本语法 :
bash
lpr [选项] [文件名]
| 参数 | 含义 | 示例 |
|---|---|---|
| -P printer | 指定打印机 | lpr -P myprinter file.txt |
| -# num | 打印份数 | lpr -# 3 file.txt 打印3份 |
| -T title | 作业标题 | lpr -T "Report" file.txt |
| -o option | 打印机特定选项 | lpr -o media=A4 file.txt |
| -r | 打印后删除原文件 | lpr -r file.txt |
| -h | 不打印标题页 | lpr -h file.txt |
| -m | 完成后发送邮件 | lpr -m file.txt |
3.3 标准输入(stdin)用法
两者均支持从管道接收数据,方便脚本集成:
bash
echo "Hello, World!" | lp #一行内容直接打印
ls -l | lpr #打印目录列表
cat *.txt | lpr -P myprinter #合并多个文件并打印
四、打印选项详解
4.1 页面与布局控制
通过-o参数(lp和lpr均支持)控制打印外观:
| 选项 | 功能 | 示例 |
|---|---|---|
| media=A4 / media=Letter | 纸张大小 | -o media=A4 |
| orientation-requested=Portrait | 纵向 | -o orientation-requested=Portrait |
| orientation-requested=Landscape | 横向 | -o orientation-requested=Landscape |
| fit-to-page | 自适应缩放 | -o fit-to-page |
| color=black-and-white | 黑白打印 | -o color=black-and-white |
| sides=one-sided | 单面打印 | -o sides=one-sided |
| sides=two-sided-long-edge | 双面(长边装订) | -o sides=two-sided-long-edge |
| sides=two-sided-short-edge | 双面(短边装订) | -o sides=two-sided-short-edge |
| page-ranges=1-5 | 打印指定页 | -o page-ranges=1-3 |
| job-name="My Document" | 作业命名 | -o job-name="Report" |
4.2 打印机依赖选项
不同打印机的选项集不同,使用lpoptions -l查看当前打印机支持的具体选项。
五、完整示例
5.1 打印文本文件
bash
#使用默认打印机打印
lp document.txt
#或
lpr document.txt
5.2 指定打印机打印
bash
# lp风格
lp -d HP_LaserJet document.pdf
# lpr风格
lpr -P HP_LaserJet document.pdf