【Linux命令大全】002.文件传输之lpr命令(实操篇)

【Linux命令大全】002.文件传输之lpr命令(实操篇)

✨ 本文为Linux系统文件传输命令的全面汇总与深度优化,结合图标、结构化排版与实用技巧,专为高级用户和系统管理员打造。

(关注不迷路哈!!!)

文章目录

  • 【Linux命令大全】002.文件传输之lpr命令(实操篇)
    • 一、功能与作用
    • 二、基本用法
      • [1. 打印单个文件](#1. 打印单个文件)
      • [2. 指定打印机](#2. 指定打印机)
      • [3. 指定打印份数](#3. 指定打印份数)
      • [4. 从标准输入打印](#4. 从标准输入打印)
      • [5. 设置打印作业名称](#5. 设置打印作业名称)
    • 三、高级用法
      • [1. 打印完成后删除原文件](#1. 打印完成后删除原文件)
      • [2. 打印完成后发送邮件通知](#2. 打印完成后发送邮件通知)
      • [3. 按原样打印文件](#3. 按原样打印文件)
      • [4. 设置打印机特定选项](#4. 设置打印机特定选项)
      • [5. 组合使用多个参数](#5. 组合使用多个参数)
      • [6. 打印多个文件](#6. 打印多个文件)
      • [7. 打印时不打印标题页](#7. 打印时不打印标题页)
    • 四、实际应用场景
      • [1. 批量打印脚本](#1. 批量打印脚本)
      • [2. 打印服务器客户端配置](#2. 打印服务器客户端配置)
      • [3. 定时打印任务](#3. 定时打印任务)
      • [4. 打印质量控制](#4. 打印质量控制)
    • 五、注意事项与最佳实践
      • [1. 命令可用性](#1. 命令可用性)
      • [2. 与CUPS的兼容性](#2. 与CUPS的兼容性)
      • [3. 打印机配置检查](#3. 打印机配置检查)
      • [4. 打印队列监控](#4. 打印队列监控)
      • [5. 打印作业管理](#5. 打印作业管理)
      • [6. 大文件处理](#6. 大文件处理)
    • 六、常见错误与解决方案
      • [1. 命令未找到](#1. 命令未找到)
      • [2. 打印机不可用](#2. 打印机不可用)
      • [3. 权限被拒绝](#3. 权限被拒绝)
      • [4. 打印作业卡住](#4. 打印作业卡住)
      • [5. 格式错误](#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命令用法是直接指定要打印的文件名:

bash 复制代码
# 打印单个文件
lpr document.txt

这个命令会将document.txt文件发送到默认打印机的队列中等待打印。

2. 指定打印机

使用-P参数可以指定要使用的打印机:

bash 复制代码
# 指定打印机打印文件
lpr -P laserjet report.pdf

3. 指定打印份数

使用-#参数可以指定打印的份数:

bash 复制代码
# 打印3份文件
lpr -# 3 presentation.pptx

4. 从标准输入打印

lpr命令还支持从标准输入接收内容进行打印:

bash 复制代码
# 从标准输入打印
cat notes.txt | lpr

# 打印命令输出
ls -la | lpr

5. 设置打印作业名称

使用-J参数可以设置打印作业的名称,便于在打印队列中识别:

bash 复制代码
# 设置打印作业名称
lpr -J "Weekly Report" report.docx

三、高级用法

1. 打印完成后删除原文件

使用-r参数可以在打印完成后自动删除原文件,适用于临时文件或不需要保留的文档:

bash 复制代码
# 打印完成后删除原文件
lpr -r temporary_report.txt

2. 打印完成后发送邮件通知

使用-m参数可以在打印完成后发送邮件通知:

bash 复制代码
# 打印完成后发送邮件通知
lpr -m important_document.pdf

3. 按原样打印文件

使用-l参数可以指示打印机按文件的原样进行打印,不进行任何过滤或格式化处理,适用于已经预先格式化的文档:

bash 复制代码
# 按原样打印文件
lpr -l preformatted.ps

4. 设置打印机特定选项

使用-o参数可以设置打印机特定的选项,如双面打印、页面大小等。具体可用的选项取决于打印机型号和驱动程序:

bash 复制代码
# 设置双面打印
lpr -o sides=two-sided-long-edge document.pdf

# 设置页面大小为A4
lpr -o media=A4 report.docx

# 设置打印质量
lpr -o print-quality=best photo.jpg

5. 组合使用多个参数

可以根据需要组合使用多个参数,实现更复杂的打印需求:

bash 复制代码
# 打印2份文档,使用双面打印,发送到指定打印机,设置作业名称
lpr -P colorjet -# 2 -o sides=two-sided-long-edge -J "Quarterly Budget" budget.pdf

6. 打印多个文件

可以一次指定多个文件进行打印:

bash 复制代码
# 打印多个文件
lpr file1.txt file2.txt file3.txt

7. 打印时不打印标题页

使用-h参数可以在打印时不打印标题页,适用于不需要包含作业信息的场景:

bash 复制代码
# 不打印标题页
lpr -h document.txt

四、实际应用场景

1. 批量打印脚本

可以编写一个简单的脚本来批量打印多个文件:

bash 复制代码
#!/bin/bash
# 批量打印脚本

# 检查参数
if [ $# -lt 1 ]; then
  echo "Usage: $0 <file1> [file2] [file3] ..."
  exit 1
fi

# 打印所有指定的文件
for file in "$@"; do
  if [ -f "$file" ]; then
    echo "Printing $file..."
    lpr "$file"
    if [ $? -eq 0 ]; then
      echo "  Done."
    else
      echo "  Failed to print $file."
    fi
  else
    echo "Warning: $file is not a valid file. Skipping."
  fi
done

# 显示打印队列状态
echo "\nCurrent print queue status:"
lpd

使用示例:

bash 复制代码
# 授予执行权限
chmod +x batch_print.sh

# 批量打印文件
./batch_print.sh report1.pdf report2.pdf presentation.pptx

2. 打印服务器客户端配置

可以编写一个脚本,帮助用户快速配置打印客户端并连接到指定的打印服务器:

bash 复制代码
#!/bin/bash
# 配置LPR打印客户端

# 检查参数
if [ $# -ne 3 ]; then
  echo "Usage: $0 <printer_name> <server_address> <queue_name>"
  echo "Example: $0 laserjet printserver.example.com lp"
  exit 1
fi

PRINTER_NAME=$1
SERVER_ADDRESS=$2
QUEUE_NAME=$3

# 检查是否已安装lpr包
if ! command -v lpr &> /dev/null; then
  echo "Installing lpr package..."
  if [ -f /etc/debian_version ]; then
    sudo apt-get update
    sudo apt-get install -y lpr
  elif [ -f /etc/redhat-release ]; then
    sudo yum install -y lpr
  fi
fi

# 配置打印队列
CONFIG_FILE="/etc/printcap"
BACKUP_FILE="/etc/printcap.bak"

# 备份现有配置
if [ -f "$CONFIG_FILE" ]; then
  sudo cp "$CONFIG_FILE" "$BACKUP_FILE"
  echo "Backed up current printcap to $BACKUP_FILE"
fi

# 添加新的打印机配置
echo "Adding printer configuration to $CONFIG_FILE..."
sudo tee -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..."
sudo mkdir -p /var/spool/lpd/$PRINTER_NAME
sudo chown daemon:daemon /var/spool/lpd/$PRINTER_NAME
sudo chmod 775 /var/spool/lpd/$PRINTER_NAME

# 重启lpd服务
echo "Restarting lpd service..."
sudo killall lpd 2>/dev/null
sudo lpd

# 测试打印
echo "Testing printer configuration..."
echo "This is a test page from $HOSTNAME" | lpr -P $PRINTER_NAME

if [ $? -eq 0 ]; then
  echo "\nPrinter configuration completed successfully!"
  echo "You can now print to $PRINTER_NAME using: lpr -P $PRINTER_NAME <file>"
else
  echo "\nFailed to send test print job. Please check your configuration."
fi

3. 定时打印任务

可以使用cron和lpr命令设置定时打印任务,例如每天自动打印报表:

bash 复制代码
#!/bin/bash
# 每日报表打印脚本
REPORT_FILE="/path/to/daily_report.pdf"
PRINTER_NAME="laserjet"
LOG_FILE="/var/log/daily_print.log"

# 检查报表文件是否存在
if [ ! -f "$REPORT_FILE" ]; then
  echo "[$(date)] Error: Report file $REPORT_FILE not found." >> $LOG_FILE
  exit 1
fi

# 发送打印请求
lpr -P $PRINTER_NAME -J "Daily Report $(date +%Y-%m-%d)" $REPORT_FILE

if [ $? -eq 0 ]; then
  echo "[$(date)] Successfully printed daily report." >> $LOG_FILE
else
  echo "[$(date)] Failed to print daily report." >> $LOG_FILE
  # 可以选择发送通知邮件
  echo "Daily report printing failed on $(hostname)" | mail -s "Print Job Failure" admin@example.com
fi

然后通过cron设置定时任务:

bash 复制代码
# 编辑crontab配置
crontab -e

# 添加以下行,每天早上9点执行打印任务
0 9 * * * /path/to/daily_report_print.sh

4. 打印质量控制

可以编写一个脚本,根据文档类型自动设置合适的打印选项:

bash 复制代码
#!/bin/bash
# 智能打印脚本 - 根据文件类型自动设置打印选项

# 检查参数
if [ $# -lt 1 ]; then
  echo "Usage: $0 <file> [printer]"
  exit 1
fi

FILE=$1
PRINTER=${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" ]; then
  lpr $OPTIONS "$FILE"
else
  lpr -P $PRINTER $OPTIONS "$FILE"
fi

# 检查打印是否成功
if [ $? -eq 0 ]; then
  echo "Print job submitted successfully"
else
  echo "Failed to submit print job"
  exit 1
fi

五、注意事项与最佳实践

1. 命令可用性

lpr命令在大多数Linux发行版中默认安装,但可能需要安装额外的软件包才能使用全部功能。如果系统上未找到该命令,请安装相应的软件包:

bash 复制代码
# 在Debian/Ubuntu系统上安装
sudo apt-get update
sudo apt-get install -y lpr

# 在CentOS/RHEL系统上安装
sudo yum install -y lpr

2. 与CUPS的兼容性

现代Linux系统通常使用CUPS作为默认打印系统。CUPS提供了与传统LPR/LPD命令兼容的接口,但某些参数和行为可能有所不同。如果在使用lpr命令时遇到问题,可以尝试使用CUPS的原生命令lp

bash 复制代码
# CUPS等效命令
lp document.txt  # 打印文件
lp -d printer_name document.txt  # 指定打印机打印
lp -n 3 document.txt  # 打印3份

3. 打印机配置检查

在使用lpr命令前,建议先检查系统上配置的打印机列表,确认要使用的打印机名称正确:

bash 复制代码
# 查看可用的打印机(LPR/LPD系统)
lpq -a

# 查看可用的打印机(CUPS系统)
lpstat -p -d

4. 打印队列监控

提交打印作业后,可以使用lpq命令监控打印队列状态,确认作业是否成功提交并了解打印进度:

bash 复制代码
# 查看打印队列状态
lpq

# 查看特定打印机的队列状态
lpq -P printer_name

5. 打印作业管理

如果需要取消已提交的打印作业,可以使用lprm命令:

bash 复制代码
# 取消当前用户的所有打印作业
lprm -

# 取消特定的打印作业
lprm job_id

# 取消特定打印机上的特定作业
sudo lprm -P printer_name job_id

6. 大文件处理

对于大型文档,建议在打印前进行适当的压缩或分割,以提高打印效率并减少系统资源占用:

bash 复制代码
# 压缩PDF文件后打印
pdfcompress large_document.pdf compressed.pdf
lpr compressed.pdf

# 分割大文件后逐部分打印
split -l 1000 large_file.txt part_
lpr part_*  # 打印所有部分

六、常见错误与解决方案

1. 命令未找到

问题现象 :执行lpr命令时显示"command not found"错误。

解决方案

  • 确认是否安装了lpr软件包
  • 检查命令是否在系统PATH中
bash 复制代码
# 查找lpr命令位置
which lpr
# 或
find / -name lpr 2>/dev/null

# 安装lpr包(如果尚未安装)
sudo apt-get install lpr  # Debian/Ubuntu
sudo yum install lpr      # CentOS/RHEL

2. 打印机不可用

问题现象 :执行lpr命令时显示"printer not available"或类似错误。

解决方案

  • 确认打印机名称是否正确
  • 检查打印机是否已连接并处于就绪状态
  • 验证打印服务是否正在运行
bash 复制代码
# 查看可用的打印机
lpq -a

# 检查打印服务状态
systemctl status lpd  # 对于LPR/LPD系统
systemctl status cups  # 对于CUPS系统

3. 权限被拒绝

问题现象 :执行lpr命令时显示"permission denied"错误。

解决方案

  • 确认当前用户有足够的权限使用打印机
  • 检查打印队列的权限设置
  • 验证文件权限是否允许读取要打印的文件
bash 复制代码
# 检查文件权限
ls -l document.txt

# 检查打印队列权限
ls -la /var/spool/lpd/

# 使用sudo尝试打印
sudo lpr document.txt

4. 打印作业卡住

问题现象:打印作业已提交到队列,但长时间未完成打印。

解决方案

  • 检查打印机是否有卡纸、缺纸等问题
  • 查看打印队列状态,确认作业是否在队列中
  • 尝试取消卡住的作业并重新提交
bash 复制代码
# 查看打印队列状态
lpq

# 取消卡住的作业
lprm job_id

# 重启打印服务
sudo systemctl restart lpd  # 对于LPR/LPD系统
sudo systemctl restart cups  # 对于CUPS系统

5. 格式错误

问题现象:打印出的文档格式不正确或乱码。

解决方案

  • 确认文件格式与打印机兼容
  • 尝试使用-l参数按原样打印
  • 对于文本文件,可以尝试使用a2ps等工具进行格式化后再打印
bash 复制代码
# 按原样打印文件
lpr -l document.txt

# 使用a2ps格式化文本文件后打印
a2ps document.txt | lpr

七、总结

lpr命令是Linux系统中用于提交打印作业的重要工具,通过它可以方便地将各种类型的文件发送到打印机进行打印。无论是普通用户还是系统管理员,掌握lpr命令的使用都能帮助提高打印资源的利用效率和管理水平。

在实际应用中,可以结合其他打印命令如lpqlprm,以及编写简单的自动化脚本,实现更高效的打印工作流。同时,需要注意与现代CUPS打印系统的兼容性问题,以及在网络环境中的使用限制。通过合理配置和使用lpr命令,可以确保打印任务的顺利完成和打印资源的有效管理。

相关推荐
最后一个bug1 天前
为什么linux内存要分DMA区域,常规区域和高端内存区域?
linux·服务器·开发语言·系统架构·计算机外设
qq_447429411 天前
Qwen Code CanUseTool 实现分析
linux·运维·服务器
The Sheep 20231 天前
可视化命中测试
java·服务器·前端
wadesir1 天前
Ubuntu系统安装Miniconda完整指南
linux·运维·ubuntu
开开心心就好1 天前
右键菜单管理工具,添加程序自定义名称位置
linux·运维·服务器·ci/cd·docker·pdf·1024程序员节
qq_310658511 天前
webrtc源码走读(六)核心引擎层——安全模块
服务器·c++·音视频·webrtc
上学的小垃圾1 天前
基于Centos9部署OpenVP*
网络·网络协议·网络安全·信息与通信
qq_310658511 天前
webrtc源码走读(七)核心引擎层——Qos模块
服务器·c++·音视频·webrtc
Red丶哞1 天前
Docker 部署 File Browser 文件管理系统
运维·docker·容器