打印

前言

  1. 前面几章讲述了文本的操纵,现在是时候讨论如何将文本输出到纸张上了,本章将会介绍一些用于打印文件以及控制打印机操作的命令行工具。
  2. 本章会讨论如下命令:
  • pr: 转换文本文件,从而进行打印操作
  • lpr: 打印文件
  • lp: 打印文件 (System V)
  • a2ps: 格式化文件,以在 PostScript 打印机上打印
  • lpstat: 显示打印机状态信息。
  • lpq: 显示打印机队列状态。
  • lprm: 取消打印任务
  • cancel: 取消打印任务 (System V)

打印操作简史

  1. 在充分理解类 UNIX 操作系统的打印特性之前,我们必须首先了解一些打印操作的的发展史。
  2. 类 UNIX 系统的打印操作可以追溯到操作系统的起源,那个时期,打印机及其使用方法与现在有很大区别。
  3. 打印操作简史如下:
  • 灰暗时期的打印
  • 基于字符的打印机
  • 图形化打印机
  • Linux 方式的打印

准备打印文件

基本介绍

  1. 作为命令行用户,我们多数还是倾向于打印文本文件,虽然其他的数据形式也可以打印。

pr - 将文本文件转换为打印文件

  1. pr 基本介绍
  • 前面章节略微介绍了 pr 的相关知识,本节将讨论其与打印操作联合使用时用到的一些参数选项。
  1. 常见的 pr 选项
选项 功能描述
+first[:last] 输出一个从 first 开始以 last 结束的页范围
-columns 将页的内容分成指定的 columns 列
-a 默认情况下,多列输出是垂直列出的。通过增加 -a 选项,内容便是水平列出
-d 隔行打印输出
-D format 用 format 格式来格式化页眉的显示时期。可以查看日期命令的 man 手册页以了解格式字符串的描述。
-f 使用换页符而不是回车符作为页与页之间的分隔符
-h header 在页眉的中间部分,使用 header 替代正在处理的文件名
-l length 将页的长度设为 length 。默认是 66 行
-n 对行进行编号
-o offset 创建一个有 offset 字符宽的左页边距
-w width 设定页面宽度为 width,默认是 72 个字符
  1. pr 案例
  • pr 通常用于管道传输的过滤器。
  • 下面例子生成 /usr/bin 文件夹下的目录列表,并且 pr 将其格式化为分页的、三列的输出。
    1
    [me@linuxbox ~]$ ls /usr/bin | pr -3 -w 65 | head

向打印机发送打印任务

基本介绍

  1. CUPS 打印组件支持两种打印方式,它们都是类 UNIX 系统过去使用过的。
  2. 一种方法叫做 Berkeley 或 LPD ,运用的是 lpr 命令;另一种方法叫做 SysV (来源于 UNIX 的 System V 版本) ,运用的是 lp 命令。这两个命令大致做着相同的事情,用户可以根据个人喜好选择使用。

lpr - 打印文件

  1. lpr 基本介绍
  • lpr 命令可以将文件传送至打印机,同时由于其支持标准输入,所以也可用于管道传输。
  • 例如,要打印上述的多列目录列表,我们可以进行如下操作:
    1
    [me@linuxbox ~]$ ls /usr/bin | pr -3 | lpr
  • 该报告将被送至系统默认的打印机。如果想将文件发送至不同的打印机,可以使用 -P 选项,示例如下:
    1
    lpr -P printer_name
  • 此处 printer_name 是指目标打印机的名称。可以用下面的命令行查看系统打印机列表。
    1
    [me@linuxbox ~]$ lpstat -a
  1. 常用的 lpr 选项
选项 功能描述
-#number 打印 number 份副本
-p 每一页都将包括日期、时间、工作名称和页码的页眉用阴影打印出来。这中所谓的优质打印可以用于打印文本文件
-P printer 指定用于打印输出的打印机名。如果未指定打印机,那就是用系统默认的打印机
-r 打印结束后删除文件。此选项适用于那些产生临时打印文件输出文件的程序

lp - 打印文件

  1. lp 基本介绍
  • 与 lpr 类似,lp 命令既支持文件输入也支持标准输入。它与 lpr 的不同之处在于它有一个不同 (稍微复杂点) 的参数选项设置。
  1. lp 常用的选项
选项 说明
-d printer 设置目标打印机为 printer 。如果未指定 -d 选项,将会使用系统默认的打印机
-n number 打印 number 份副本
-o landscape 将输出设置为横向
-o fitplot 根据页面大小缩放文件,这在打印诸如 JPEG 文件时非常有用
-o scaling=number 设定文件缩放比例为 number 。如果该值为 100 ,则正好填充一页纸;如果该值小于 100 ,那么一页纸将填不满;如果该值大于 100 ,则打印内容将打印在多个页面上
-o cpi=number 设置每英寸输出字符数位 number。默认是 10
-o lpi=number 设置每英寸输出指定 number 的行。默认是 6
-P pages 指定页列表。页的表达形式可以为用逗号隔开的页列表或是 - 表示的页范围。
  1. lp 案例
  • 我们重新生成目录清单
    1
    [me@linuxbox ~]$ ls /usr/bin | pr -4 -w 90 -l 88 | lp -o page-left=36 -o cpi=12 -o lpi=8
  • 该管道使用了比默认规格更小的字体从而得到了一个 4 列列表。每行增加的字符数是的一页纸能够容纳更多列。

监测和控制打印任务

基本介绍

  1. 与 UNIX 打印系统类似,CUPS 也是以处理来自多用户的多项打印任务而设计的。
  2. 每个打印机都有一个打印队列,打印任务排列其中等待被送至打印机打印。
  3. CUPS 提供了几个用于管理打印机状态和打印队列命令行的程序。
  4. 与 lpr 和 lp 程序类似,这些管理程序都是以 Berkeley 和 System V 打印系统相应的程序为原型的。

lpstat - 显示打印系统状态

  1. lpstat 基本介绍
  • lpstat 程序可以确定系统中打印机的名称和可用性。
  • 例如,假定一台打印系统,既有物理打印设备,也有 PDF 虚拟打印机,那么便可以用下面的命令行检查它们各自的状态。
    1
    [me@linuxbox ~]$ lpstat -a
  • 更进一步,我们可以用下面的方式得到更具体的打印系统配置描述。
    1
    [me@linuxbox ~]$ lpstat -s
  1. lpstat 常用选项
选项 功能描述
-a[printer…] 显示 printer 打印机的打印队列状态,请注意,该状态显示的是打印队列接受打印任务的能力,而不是物理打印机的状态。如果未指定打印机,所有的打印队列都会显示出来
-d 显示系统默认的打印机名
-p[]printer… 显示指定的 printer 状态。如果未指定打印机,所有的打印机都会显示出来
-r 显示打印服务器的状态
-s 显示状态汇总报告
-t 显示一个完整的状态报告

lpq - 显示打印队列状态

  1. lpq 基本介绍
  • 我们可以使用 lpq 程序查看一个打印队列的状态,该程序可以查看打印机队列状态以及所包含的打印任务。
  • 如下为系统默认的打印机 printer 的一个空队列。
    1
    2
    3
    [me@linuxbox ~]$ lpq
    printer is ready
    no entries
  • 如果事先并未指定打印机 (使用 -P 选项) ,系统便会显示默认的打印机。
  • 如果向打印机发送打印任务,然后查看打印队列,便会看到如下列表。
    1
    2
    3
    4
    5
    6
    [me@linuxbox ~]$ ls *.txt | pr -3 | lp
    request id is printer-603 (1 file(s))
    [me@linuxbox ~]$ lpq
    printer is ready and printing
    Rank Owner Job File(s) Total Size
    active me 603 (stdin) 1024 bytes

lprm 与 cancel - 删除打印任务

  1. lprm 与 cancel 基本介绍
  • CUPS 提供了两个用于终止打印任务并将它们从打印队列中移除的程序。其中一个就是 Berkeley 类型的 lprm ,另外一个是 System V 的 cancel 。
  • 它们在所支持的参数选项上有稍许不同,但基本上实现的是同样的功能。
  • 以上面的例子中使用的打印任务为例,将该打印任务终止并移除,可以使用如下命令行。
    1
    2
    3
    4
    [me@linuxbox ~]$ cancel 603
    [me@linuxbox ~]$ lpq
    printer is ready
    no entries

参考文章

  • 转载:Linux 命令行大全