linux lpq命令

Linux lpq命令用于显示打印队列中作业的状态信息,是CUPS打印系统中的重要管理工具。

提示: lpq命令通常与lpr(提交打印作业)和lprm(删除打印作业)命令配合使用,构成完整的打印作业管理工具集。

语法格式

lpq [选项] [作业号] [用户名]

常用选项

选项 说明
-E 强制加密连接到服务器
-P 打印机 指定打印机名称
-a 显示所有打印队列
-l 显示详细信息
+间隔 定期刷新显示(单位:秒)
-U 用户名 指定要查看的用户名
--help 显示帮助信息

使用示例

示例1:查看默认打印队列

# 查看默认打印队列状态
lpq

# 输出示例:
# Rank   Owner   Job     File(s)                         Total Size
# active alice   123     report.pdf                      102400 bytes
# 1st    bob     124     document.txt                    20480 bytes
# 2nd    charlie 125     image.jpg                       512000 bytes

示例2:查看特定打印机的队列

# 查看指定打印机的队列
lpq -P HP_LaserJet

# 查看所有打印机的队列
lpq -a

# 输出示例:
# HP_LaserJet is ready and printing
# Rank   Owner   Job     File(s)                         Total Size
# active alice   456     presentation.pdf                2048000 bytes

示例3:显示详细信息

# 显示队列的详细信息
lpq -l

# 输出示例:
# HP_LaserJet: ready
# alice: 1st                        [job 456 localhost]
#         presentation.pdf          2048000 bytes
#         Fri Dec 15 14:30:00 2023
# bob: 2nd                          [job 457 localhost]
#         invoice.pdf               512000 bytes
#         Fri Dec 15 14:35:00 2023

示例4:定期刷新显示队列状态

# 每5秒刷新一次队列状态
lpq +5

# 每2秒刷新一次特定打印机状态
lpq -P Office_Printer +2

# 按Ctrl+C停止刷新

示例5:查看特定用户的打印作业

# 查看alice用户的打印作业
lpq -U alice

# 结合打印机指定和用户过滤
lpq -P Color_Printer -U bob

示例6:查看特定作业的详细信息

# 查看作业号123的详细信息
lpq 123

# 输出示例:
# Job 123 is currently being printed
# Owner: alice
# File: annual_report.pdf
# Size: 5120000 bytes
# Submitted: Fri Dec 15 14:25:00 2023

示例7:在实际工作流程中的应用

# 1. 提交打印作业
lpr -P Office_Printer document.pdf

# 2. 立即查看作业状态
lpq -P Office_Printer

# 3. 如果需要取消作业,获取作业号
# 假设lpq显示作业号为789

# 4. 取消错误的打印作业
lprm 789

# 5. 重新提交正确的文档
lpr -P Office_Printer corrected_document.pdf

# 6. 监控打印进度
lpq -P Office_Printer +3

示例8:在脚本中自动化检查

#!/bin/bash
# 监控打印队列的脚本

PRINTER="HP_LaserJet"
CHECK_INTERVAL=10  # 检查间隔(秒)
MAX_JOBS=5         # 最大允许作业数

while true; do
    # 获取当前作业数量
    JOB_COUNT=$(lpq -P "$PRINTER" | grep -c '^[0-9]')

    echo "$(date): 打印机 $PRINTER 队列中有 $JOB_COUNT 个作业"

    if [ "$JOB_COUNT" -gt "$MAX_JOBS" ]; then
        echo "警告:队列作业数超过 $MAX_JOBS,发送通知..."
        # 这里可以添加发送邮件或其他通知的代码
    fi

    # 显示前3个作业的详细信息
    lpq -P "$PRINTER" | head -5

    sleep "$CHECK_INTERVAL"
done

示例9:高级队列分析

# 分析打印队列中的文件类型
lpq -l | grep "File:" | awk '{print $2}' | awk -F. '{print $NF}' | sort | uniq -c

# 计算队列中所有作业的总大小
lpq -l | grep "bytes" | awk '{sum += $NF} END {print "总大小: " sum/1024 " KB"}'

# 查找等待时间最长的作业
lpq -l | grep "Submitted:" | sort -k2

lpq输出字段说明

字段 说明 示例
Rank 作业在队列中的位置
active: 正在打印
1st, 2nd, 3rd...: 等待顺序
active, 1st, 2nd
Owner 提交作业的用户名 alice, bob, charlie
Job 作业编号(用于lprm命令) 123, 456, 789
File(s) 打印的文件名 document.pdf, report.txt
Total Size 作业总大小(字节) 102400 bytes
Status 作业状态(在详细信息中) processing, waiting, completed
Submitted 提交时间(在详细信息中) Fri Dec 15 14:30:00 2023
注意:
  • lpq命令需要CUPS服务正在运行
  • 不同Linux发行版的输出格式可能略有差异
  • 作业编号是唯一的,用于标识特定的打印作业
  • 使用+间隔选项时,按Ctrl+C可以停止刷新
  • 如果没有作业,lpq会显示"no entries"或"队列为空"
  • 网络打印机可能需要额外时间更新状态信息
  • 某些打印机驱动程序可能不报告详细的状态信息

常见状态信息解释

  • ready - 打印机就绪,可以接收作业
  • printing - 正在打印作业
  • waiting - 作业在队列中等待
  • processing - 正在处理作业
  • stopped - 打印机已停止
  • idle - 打印机空闲
  • offline - 打印机离线
  • error - 打印机错误

故障排除

问题:lpq无输出

可能原因: CUPS服务未运行

解决: 启动CUPS服务

sudo systemctl start cups
lpq
问题:打印机状态为"stopped"

解决: 启用打印机

cupsenable 打印机名
cupsaccept 打印机名
问题:作业长时间停留在队列中

解决: 清除队列并重新提交

# 删除所有作业
lprm -
# 重启打印服务
sudo systemctl restart cups
问题:无法查看特定打印机的队列

解决: 检查打印机名称是否正确

# 列出所有可用打印机
lpstat -p -d
# 使用正确的打印机名称
lpq -P 正确打印机名

相关命令

  • lpr - 提交打印作业
  • lprm - 删除打印作业
  • lpstat - 显示打印机状态信息
  • lp - System V风格的打印命令
  • cancel - 取消打印作业
  • lpadmin - 打印机管理工具