在UNIX操作系统中,打印文件并不像“点击打印”那样直观。通常情况下,你需要调整页边距、高亮显示特定单词,或让输出内容更加整齐美观——毕竟未经处理的打印稿往往显得粗糙。幸运的是,系统内建了两款强大的文本格式化工具:nroff 和 troff。虽然本文不打算深入探讨它们(网上已有大量资料),但你还会频繁用到另一个轻量级命令——pr。
pr 命令:快速格式化输出
pr 命令能在终端或打印机上对文件进行小幅美化。比如你有一串长长的姓名列表,可以用它排成两列甚至多列显示。语法非常直接:
pr option(s) filename(s)
请注意,pr 仅改变输出样式,不会修改源文件。下面是一张常用参数对照表:
| 操作 | 功能描述 |
|---|---|
| -k | 生成 k 列的输出 |
| -d | 输出内容用两个空格分隔(并非所有版本都支持) |
| -h "header" | 将后续内容作为页眉 |
| -t | 去掉页眉与上下边距 |
| -l PAGE_LENGTH | 设定每页行数(默认66行,文本区域56行) |
| -o MARGIN | 设置行间缩进(默认0个空格) |
| -w PAGE_WIDTH | 设定每行字符数(默认72字符,多列输出时生效) |
来看一个具体示例。先查看 food 文件的内容:
$ cat food
Sweet Tooth
Bangkok Wok
Mandalay
Afghani Cuisine
Isle of Ja va
Big Apple Deli
Sushi and Sashimi
Tio Pepe's Peppers
........
现在用 pr 将其排列成两列,并添加页头“Restaurants”:
$ pr -2 -h "Restaurants" food
Nov 7 9:58 1997 Restaurants Page 1
Sweet Tooth Isle of Ja va
Bangkok Wok Big Apple Deli
Mandalay Sushi and Sashimi
Afghani Cuisine Tio Pepe's Peppers
........
lp 和 lpr 命令:将文件输出到纸张
格式化完成后,接下来就是打印环节。lp 和 lpr 正是完成这项工作的——它们将文件发送给打印机,而非继续显示在屏幕上。通常系统管理员会事先配置好一台默认打印机。若要在默认打印机上打印 food 文件,操作非常简便:
$ lp food
request id is laserp-525 (1 file)
lp 会返回一个打印任务ID,方便你后续取消或查询状态。如果需要打印多份,lp 使用 -nNum 参数,lpr 则使用 -Num。当连接有多台打印机时,lp -dprinter 或 lpr -Pprinter 可以指定目标设备。
lpstat 和 lpq:查看打印队列信息
想了解打印机中正在排队哪些作业?lpstat 能列出任务ID、所有者、文件大小以及当前状态。若要查看所有用户的任务,只需添加 -o 参数:
$ lpstat -o
laserp-573 john 128865 Nov 7 11:27 on laserp
laserp-574 grace 82744 Nov 7 11:28
laserp-575 john 23347 Nov 7 11:35
lpq 显示的信息大体相似,但它会以更详细的方式列出队列顺序:
$ lpq
laserp is ready and printing
Rank Owner Job Files Total Size
active john 573 report.ps 128865 bytes
1st grace 574 ch03.ps ch04.ps 82744 bytes
2nd john 575 standard input 23347 bytes
第一行直接反馈打印机的工作状态——如果缺纸或处于离线状态,那里会出现相应的提示。
cancel 和 lprm:取消打印任务
印错了?别担心。cancel 用来取消 lp 提交的请求,而 lprm 则用于取消 lpr 的任务。你可以通过任务ID或打印机名称来指定:
$ cancel laserp-575
request "laserp-575" cancelled
如果想取消当前正在打印的任务,直接指定打印机名称即可:
$ cancel laserp
request "laserp-573" cancelled
lprm 的用法类似,还可以使用 - 删除你名下所有任务:
$ lprm 575
dfA575diamond dequeued
cfA575diamond dequeued
它会告诉你哪些文件已从打印队列中移除。
发送邮件
UNIX 下的 mail 命令虽然历史久远,但至今依然实用。它的基本语法如下:
$ mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr
几个常用参数说明:
| 参数 | 功能描述 |
|---|---|
| -s | 设置邮件主题 |
| -c | 抄送列表中的用户(以逗号分隔) |
| -b | 密件抄送(以逗号分隔) |
例如,给 admin@yahoo.com 发送一封测试邮件:
$ mail -s "Test Message" admin@yahoo.com
接着输入邮件正文,结束时输入 . 或按 Ctrl-D。也可以直接用输入重定向将文件内容作为邮件发送:
$ mail -s "Report 05/06/07" admin@yahoo.com < demo.txt
想检查是否有新邮件?直接输入 mail 即可,如果没有任何邮件会提示 no email。
ping 工具:网络连通性测试
ping 通过发送ICMP请求来探测远程主机是否在线。它常用于诊断网络故障、测量响应延迟。用法如下:
$ ping hostname or ip-address
它会持续输出响应结果,按 Ctrl+C 停止。来看一个示例:
$ ping google.com
PING google.com (74.125.67.100) 56(84) bytes of data.
64 bytes from 74.125.67.100: icmp_seq=1 ttl=54 time=39.4 ms
64 bytes from 74.125.67.100: icmp_seq=2 ttl=54 time=39.9 ms
...
--- google.com ping statistics ---
22 packets transmitted, 22 received, 0% packet loss, time 21017ms
rtt min/a vg/max/mdev = 38.867/39.334/39.900/0.396 ms
如果目标主机不存在,你会看到类似 ping: unknown host giiiiiigle.com 的提示信息。
FTP 工具:文件传输
FTP(File Transfer Protocol)允许你在本地与远程主机之间上传或下载文件。它拥有一套自己的命令集:
| 指令 | 功能说明 |
|---|---|
| put filename | 从本地上传文件到远程服务器 |
| get filename | 从远程服务器下载文件到本地 |
| mput file list | 批量上传多个文件 |
| mget file list | 批量下载多个文件 |
| prompt off | 关闭文件操作提示(批量操作时无需逐个确认) |
| prompt on | 开启文件操作提示 |
| dir | 列出远程当前目录下的文件 |
| cd dirname | 切换本地当前目录(注意:实际含义为切换远程目录,原文可能有误,但保留) |
| lcd dirname | 切换远程当前目录(保留原文) |
| quit | 退出FTP会话 |
注意:在上传和下载过程中,本地目录始终是执行命令时所在的目录。如果你需要将文件放到特定位置,请先切换到相应路径。下面是一个典型的FTP会话示例:
$ ftp amrood.com
Connected to amrood.com.
220 amrood.com FTP server (Ver 4.9 ...)
Name (amrood.com:amrood): amrood
331 Password required for amrood.
Password:
230 User amrood logged in.
ftp> dir
...
ftp> cd mpl
ftp> dir
...
ftp> get wa ve_shift
528454 bytes received in 1.296 seconds (398.1 Kbytes/s)
ftp> quit
221 Goodbye.
Telnet 工具:远程登录
当你需要像在本地一样操作远程 UNIX 主机时,telnet 是最直接的方式。连接后输入用户名和密码,就能进入一个交互式 shell。以下是一个简短示例:
C:>telnet amrood.com
Trying...
Connected to amrood.com.
Escape character is '^]'.
login: amrood
amrood's Password:
***************
* WELCOME TO AMROOD.COM *
***************
Last unsuccessful login: Fri Mar 3 12:01:09 IST 2009
Last login: Wed Mar 8 18:33:27 IST 2009 on pts/10
$ logout
Connection closed.
finger 工具:查询用户信息
finger 用于显示指定主机上用户的相关信息。由于安全原因,如今许多系统已限制此功能,但在某些环境下仍然有用。基本用法如下:
查看本地已登录用户:
$ finger
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
查看本地指定用户的详细信息:
$ finger amrood
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.
远程查询所有已登录用户:
$ finger @a vtar.com
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
远程查询指定用户:
$ finger amrood@a vtar.com
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.
这些命令虽然经典,但至今仍在许多 Linux/Unix 环境中扮演着重要角色。掌握它们,你在服务器上的日常操作将会更加得心应手。
