打印文件和发送邮件作为 Linux 的基本实用程序。具体包括pr、lp、lpr、lpstat、lpq、lprm和mail等命令,本文主要介绍相关命令的使用,以及相关的示例。

1、打印文件

在Linux系统上打印文件之前,需要重新格式化它,以调整页边距,突出显示一些单词,等等。大多数文件也可以在不重新格式化的情况下打印,但原始打印输出可能不突出主题。

许多版本的Linux都包含两种功能强大的文本格式化程序,即nrofftroff

1)pr命令

r命令对终端屏幕或打印机上的文件进行少量格式化。例如,如果文件中有一长串名称,可以在屏幕上将其格式化为两列或更多列。

具体语法如下:

pr 选项 文件名

注意pr只在屏幕上或打印副本上改变文件的格式;不会修改原始文件。

下面是pr选项的说明:

  +首页[:末页], --pages=首页[:末页]
            在指定的首页/末页处开始/停止打印
  -列数, --columns=列数
            输出指定的列数。如果指定了-a 选项,则从上到下列印。
            程序会自动在每一页均衡每列占用的行数。
  -a, --across        设置每列从上到下输出,配合"-列数"选项一起使用
  -c, --show-control-chars
            使用头标(^G)和八进制反斜杠标记
  -d, --double-space    加倍输出空白区域(不是在所有pr版本都支持)
  -D, --date-format=格式
            使用遵循指定格式的页眉日期
  -e[字符[宽度]], --expand-tabs[=字符[宽度]]
            扩展输入的字符(制表符) 到制表符宽度(8)
  -F, -f, --form-feed    使用出纸页页标代替新行作为页面间的分隔符
            (使用-F 选项时报头为3 行,不使用时为5 行)
  -h, --header=页眉    在页眉中使用居中的指定字符代替文件名
            -h "" 输出一个空行,不要使用 -h""
  -i[字符[宽度]], --output-tabs[=字符[宽度]]
            使用指定字符(或制表符)代替空格不足到指定制表符宽度(默认8)
  -J, --join-lines    合并整个行,关闭-W 选项的行截断,不使用栏调整,使用
                --sep-string[=字符串] 设置分隔符
  -l, --length=页长
            使用指定页长的行数(默认66)
            (默认文本行数为56,当启用-F 时为 63)
  -m, --merge        在同一行显示所有文件,每个文件占用一栏,分割行,但是当
            使用-J 时将行合并到完整长度
  -n[分隔符[位数]], --number-lines[=分隔符[位数]]
            显示行号,使用指定(默认5) 位数,后接分隔符(默认TAB)
            默认从输入文件的第一行开始计数
  -N, --first-line-number=数字
            从首页的首行以指定数字开始计数(参看"+首页")
  -o, --indent=缩进量
            将每行缩进(默认0)个空格,不影响-w 或-W 参数,
            缩进亮的值将被加入页面宽度
  -r, --no-file-warnings
            当文件无法打开时忽略警告
  -s[CHAR], --separator[=CHAR]
            由单个字符分隔各列,未附加-w 时默认为制表符,否则为空。
            另外除非-w 选项被指定,否则"-s[CHAR]"会屏蔽三个列相关
            的截行选项(-COLUMN|-a -COLUMN|-m)
  -S字符串, --sep-string[=字符串]
            使用指定的字符串分栏,不使用-S 则使用默认的制表符
            TAB 作为分隔符,与-J 和空格一起使用(等于-S" ")对
            分栏选项无影响
  -t, --omit-header    忽略页眉和页脚
  -T, --omit-pagination
            按照输入文件中的设置忽略页眉和页脚并除去所有分页记号
  -v, --show-nonprinting
            使用八进制反斜杠标记
  -w, --width=页面宽度
            为多栏页面输出将设置为指定的字符数(默认72),
            仅当-s[char] 选项不启用时有效(即保持默认值 72)。
  -W, --page-width=页宽
            总是将页宽设置为指定的(默认72)字符数,
            除非-J 选项启用总是截断行,此参数与-S 或-s 冲突
      --help        显示此帮助信息并退出
      --version        显示版本信息并退出

在使用pr之前,准备一个示例文件,内容如下,

$ cat artcle
cjavapy Python
Java JavaScript
Linux
Levi Zhong
Code of Java
C C++ CSharp
Linux VPS Docker
Levi Zhong's PC
........

使用pr命令创建一个标题为cjavapy的两列的内容:

$ pr -2 -h "cjavapy" artcle
2021-09-23 16:41                     cjavapy                      Page 1
cjavapy Python                      Code of Java
Java JavaScript                     C C++ CSharp
Linux                               Linux VPS Docker
Levi Zhong                          Levi Zhong's PC
........

2)lp和lpr命令

命令lp或lpr是将文件打印到纸上,而不是屏幕显示。一旦使用pr命令进行格式化后,可以使用这些命令中的任何一个在连接到计算机的打印机上打印你的文件。

系统管理员应该已经设置了默认打印机。要在默认打印机上打印名为artcle的文件,请使用lp或lpr命令,

例如,

$ lp artcle
request id is laserp-525 (1 file)

lp命令显示一个ID,可以使用该ID取消打印作业或检查其状态。

如果使用lp命令,可以使用-nNum选项打印副本的Num数量。除了命令lpr外,还可以使用-Num进行相同的操作。

如果有多个打印机连接到共享网络,那么可以使用-dprinter选项和lp命令来选择打印机,同样,也可以使用-Pprinter选项和lpr命令来选择打印机。这里的打印机是打印机名。

3)lpstat和lpq命令

lpstat命令显示打印机队列中的内容:请求id、所有者、文件大小、发送作业进行打印的时间以及请求的状态。

如果想查看除自己的请求之外的所有输出请求,请使用lpstat -o。请求按照打印的顺序显示,

例如,

$ lpstat -o
laserp-573  levi  128865  Nov 11  11:22  on laserp
laserp-574  kvm    82744  Nov 11  11:24
laserp-575  levi   23347  Nov 11  11:32

lpq输出信息与lpstat -o稍有不同,

例如,

$ lpq
laserp is ready and printing
Rank   Owner      Job  Files                  Total Size
active levi       573  report.ps              102283 bytes
1st    kvm        574  file1.ps file2.ps       72132 bytes
2nd    levi       575  standard input         134598 bytes

注意:第一行显示打印机状态。如果打印机被禁用或纸张耗尽,可能会在第一行看到不同的消息。

4)cancel和lprm命令

cancel命令终止来自lp命令的打印请求。lprm命令用来终止所有lpr请求。可以指定请求的ID(由lplpq显示)或打印机的名称。

例如,

$ cancel laserp-575
request "laserp-575" cancelled

要取消当前正在打印的请求,无论其ID是什么,只需输入cancel和打印机名称

例如,

$ cancel laserp
request "laserp-573" cancelled

如果自己创建的打印任务,lprm命令将取消打印任务。否则,可以使用作业号作为参数,或者使用破折号(-)删除所有任务,

例如,

lprm命令告诉从打印机队列中删除的实际文件名。

2、发送邮件

可以使用Linux mail命令发送和接收邮件。发送电子邮件的语法如下,

$ mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr

以下是与邮件命令 -s 相关的重要选项:

选项

说明

-s

通过该命令来指定主题。

-c

 cc 抄送邮件地址。

-b

bcc密送邮件地址。

下面是一个发送测试邮件到admin@163.com的示例:

$ mail -s "Test Message" admin@yahoo.com 

例如,

mailtest@hotmail.com
Subject : mail test
:
键入信文内容
: :

按下Ctrl+D 键或.键结束正文。

连按两次Ctrl+C键则中断工作,不送此信件。

可以使用重定向<操作符发送完整的文件内容,如下所示,

$ mail -s "My Email Demo" admin@163.com < demo.txt 

要在Linux系统中检查收到的电子邮件,只需按如下方式输入电子邮件:

$ mail
no email