第21章 系统设置工具(网络与打印机)与硬件检测

除了手动设置之外,其实系统提供了一个名为setup的命令给系统管理员使用!这个命令还能够设置网络呢。此外,我们也应该要知道如何在Linux下面连接打印机,否则一些数据怎么印出来?另外,如果你的主板支持 CPU 温度检测的话,我们还能够利用 lm_sensors这个软件功能来检测硬件的电压、风扇转速、CPU温度等信息。

21.1 CentOS 系统设置工具:setup

系统设置除了使用手动的方式编辑配置文件之外(例如/etc/inittab,/etc/fstab等),其实Red Hat 系统的 RHEL, CentOS 及 Fedora 还有提供一支综合程序来管理的,那就是 setup 这个命令的功能。老实说,setup 其实只有在 Red Hat 的系列才有,在其他的 Linux distributions 中并不存在,因此,鸟哥并没有很要求一定要学会它。只不过,setup还是挺好用的,所以我们还是来玩玩。

这个setup的处理方法非常简单,就是利用root的身份下达这个命令,如果你已经使用远程操作系统的话,记得最好切换一下语系成为英文语系(比较不会出现边框是乱码的情况),结果就会出现如图21-1所示的界面了。

figure_0624_0352

图21-1 setup 的命令允许界面示意图

如上图所示,那就是setup提供的各项系统设置功能。这个界面的使用方式其实在图中的最下面一行有说明了,可以利用[tab]按键在三个界面中切换,使用 Run Tool 可以开始设置该项目,使用 Quit可以离开setup命令。那么上面的主菜单部分有哪些功能呢?这些设置的基本功能是这样的:

Authentication configuration

这是与用户身份认证有关的设置,包括本机的账号与利用远程服务器提供的账号来登录本机等功能的设置。

Firewall configuration

简单设置防火墙与 SELinux 的启动模式(Disable,Enforcing, Permissive)。SELinux 请参考第17章的说明,防火墙则请参考服务器篇的解释了。这个地方的设置比较简单,有时候可能会让你自己搞不清楚设置值的意义。所以,还是手动处理比较妥当。

Keyboard configuration

就是键盘按键的对应表。注意,这个设置仅与 tty 接口有关,至于 X Window 则不是以这个为设置值。

Networkconfiguration

设置网络参数的地方,包括 IP, network, netmask, dns 等,不过,还需要看完服务器篇关于网络基础的介绍后,才能够比较了解设置值的意义。

System services

其实就是第 18 章提到的 ntsysv 的内容,即设置一些系统服务是否在开机时启动的地方。

Timezone configuration

安装的时候不是可以通过全世界地图挑选时区吗?这个就是在安装完毕后重新选择时区的地方。

X configuration

设置 X Window 相关的设置,例如分辨率等。我们会在第 24 章再提到 X Window 方面的基础知识。

下面我们就来大致介绍一下setup。除了网络IP的设置外,其余的部分鸟哥会很快带过去而已。毕竟setup仅是一个统整的工具,每个设置项目其实都牵涉到各自的基础功能,那些基础功能还得要持续摸索的。

21.1.1 用户身份验证设置

在按下了“Authentication configuration”选项后,会出现如图 21-2 所示的界面。

figure_0625_0353

图21-2 Setup 命令的用户身份认证机制

我们的Linux除了使用自己提供的用户密码验证机制之外,还能够使用其他外部身份验证服务器所提供的各项验证功能。上面图示左侧 User Information 的地方指的是:我们系统上的用户可以使用什么方式对外取得账户信息,也就是说,这部主机除了/etc/passwd 的账号之外,还能够使用其他的账号来登录系统的。我们支持的账号管理服务器主要有LDAP,NIS,Winbind等。

至于右侧的Authentication则是登录时需要提供的身份验证码(密码)所使用的机制。在默认的情况下,我们身份验证仅参考本机的/etc/passwd,/etc/shadow而已,而且使用MD5的密码验算机制,因此图21-2 右侧的部分仅会有最上方两个而已。事实上,这个部分的设置主要是修改了/etc/sysconfig/authconfig,同时还加入了各个服务器的客户端程序设置功能。

你一定会问,那么什么时候可以用到这个机制呢?思考一下,如果你的网络环境是计算机教室,你希望每个同学都能够有自己的账号来登录每台主机。此时,你会希望每台主机都帮同学创建同一个账号吗?那如果每一个同学都想要修改密码,那就糟了!因为每台主机都得要重新修改密码才行啊!这个时候账号管理服务器就很重要了。它的功能如图21-3所示。

figure_0625_0354

图21-3 身份管理服务器的功能示意图

如图21-3所示,我(vbird)想要登录某一台主机时,这部主机会向外要求账户信息,就是最上方那台服务器。此时,你只要在最上方的服务器上将该账号设置好,并且在每台主机都利用NIS或LDAP功能来指定身份查询的方向,那么 vbird 就能够使用同一组账号密码来登录每台主机了,这样管理是否很方便呢?因为只要管理一部服务器即可!我们在服务器篇谈到NIS时再来实践这个环境!

其实NIS与LDAP等,都是一种网络协议,我们可以通过网络协议来进行数据的传输。用户账户信息当然也能够通过这个机制来管理。有兴趣的朋友请继续阅读鸟哥写的服务器篇。

21.1.2 网络配置选项(手动设置IP 与自动获取)

网络其实是又可爱又麻烦的,如果你是网络管理员,那么你必须要了解局域网内的IP,gateway,netmask等参数,如果还想要连上Internet,那么就得要理解DNS代表的意义为何。如果你的单位想要拥有自己的域名,那么架设DNS服务器则是不可或缺的。总之,要设置网络服务器之前,你得要先理解网络基础就是了。没有人愿意自己的服务器老是被攻击或者是网络问题层出不穷。

但鸟哥这里的网络介绍仅止于当你是一部单机的Linux客户端,而非服务器!所以你的各项网络参数只要找到网络管理员,或者是找到你的 ISP(Internet Service Provider) ,向他询问网络参数的取得方式以及实际的网络参数即可。通常网络参数的取得方式有下面这几种:

1.手动配置固定IP

常见于学术网络的服务器设置、公司行号内的特定座位等。这种方式你必须要取得下面的几个参数才能够让你的Linux上网的:

IP;

子网掩码(netmask);

网关(gateway);

DNS主机的IP(通常会有两个,若记不住的话,硬背168.95.1.1即可)。

2.网络参数可自动获取

常见于路由器后端的主机,或者是利用电视线路的调制解调器(cable modem),或者是学校宿舍的网络环境等。这种网络参数取得方式就被称为DHCP,你啥事都不需要知道,只要知道设置上网方式为DHCP即可。

3.通过ADSL宽带拨号

不论你的 IP 是固定的还是每次拨号都不相同,只要是通过宽带调制解调器拨号上网的,就是使用这种方式。拨号上网虽然还是使用网卡连接到调制解调器上,不过,系统最终会产生一个替代调制解调器的网络接口(ppp0),那个ppp0也是一个物理网络接口。

了解了网络参数的取得方法后,你还得要知道一下我们通过什么硬件连上Internet的呢?其实就是网卡。目前的主流网卡为使用以太网络协议所开发出来的以太网卡(Ethernet),因此我们Linux就称这种网络接口为 ethN(N 为数字)。举例来说,鸟哥的这台测试机上面有一块以太网卡,因此鸟哥这部主机的网络接口就是eth0(第一张为0号开始)。

好了,那就让我们通过 setup 来设置网络。按下“Network Configuration”会出现如图 21-4 所示的界面。

图 21-4 中那个 eth1.bak 是系统报错的文件,因为这个程序会跑到/etc/sysconfig/ network-scripts/目录下找出文件名为ifcfg-ethN的文件内容来显示的。因为鸟哥仅有一张网卡,因此那个eth1不要理会它!直接点选eth0之后就会产生如图21-5所示的界面。

图21-5中那个Name与Device名称最好要相同,尽量不要修改它!这里的设置是这样的:

figure_0626_0355

图21-4 setup的网络接口选择示意图

figure_0626_0356

图21-5 网络接口的各项网络参数设置示意图

1.如果你是使用手动设置的话,“Use DHCP”一定不能勾选,然后将下面的Static IP, Netmask, Default gateway IP 设置值填上去即可。这三个设置值请联系你的网络管理员。

2.如果你是使用DHCP 的自动获取IP 方式,勾选“Use DHCP”后,将后面的三个设置清空,这样就设置好网络参数了;

如果你是使用 ADSL 拨号的话,那么上面的设置项目就不适用了。你得要使用 adsl-setup 来进行设置,然后再以adsl-start来启动ADSL拨号,详细的方法我们会在服务器篇再来介绍的。上面谈的都是 IP 的取得方式,并没有谈到主机名解析的部分(DNS)。只有手动设置才需要进行 DNS IP 的设置,使用dhcp及adsl-start都不需要进行下面的动作。假设你的IP为168.95.1.1时,那就得这样设置:

[root@www ~]# vim /etc/resolv.conf

nameserver 168.95.1.1

重点是 nameserver 后面加上你的 DNS IP 即可!一切设置都妥当之后,你还得要进行一个任务,那就是重新启动网络看看。重新启动网络的方法很简单,这样做即可:

[root@www ~]# /etc/init.d/network restart

Shutting down interface eth0:

Shutting down loopback interface:

Bringing up loopback interface:

Bringing up interface eth0:

由于网络涉及的范围相当广泛,还包括如何进行网络除错的工作等,鸟哥将这部分写在服务器篇了,所以这里不再多费唇舌。假设你现在已经连上Internet了,那么防火墙的设置则不可不知啊!下面就来谈谈。

21.1.3 防火墙设置

防火墙的认识是非常困难的,因为你必须要有很强的网络基础概念才行。CentOS 提供的这个简单的设置其实有时候反而会让我们困扰不已。基本上,这里仅是介绍你可以这样做,但并不代表你必须这样做。所以,有兴趣的还是得要再继续钻研网络技术。好了,在按下 Firewall configuration 后,会出现如图21-6所示的界面。

figure_0627_0357

图21-6 进入防火墙设置示意图

图21-6中主要出现两个部分,一个是关于SELinux的部分,一个则是防火墙的部分。SELinux我们在第 17 章介绍过了,这里不再浪费篇幅。请依据你的需求设置 Enforcing,Permissive 或 Disabled 。(当然最好还是务必要启动 SELinux 。)

防火墙的部分,由于我们安装时建议不要启动防火墙,因此上图你会看到“Disabled”的部分被选择了。但是由于现在你的系统已经上网了 (假设已经上网了),那么你务必要启动防火墙来管理网络才好。由于默认你的防火墙会开放远程主机对你的登录联机,因此最好使用Customize(客户设置)来改变设置比较好!按下“Customize”会出现图21-7所示界面。

figure_0628_0358

图21-7 设置防火墙抵挡机制的示意图

这个地方不是三言两语讲得完的!包括信任设备以及允许进入的服务器数据包,很是麻烦。基本上,你只要这样想就好了:

Trusted Devices:这是信任设备,如果你有两块网卡,一块是 eth0(对内),一块是 eth1(对外),假设是eth1,那么如果你想要让eth0的进出数据包都是为信任,那么这里就可以将eth0勾选。不过,要非常非常注意,接到外部网络(Internet)的那块网卡千万不能勾选,否则大家就都能够通过那块网卡连到你的主机上!在默认的情况中,这里都不要选择任何接口。

MASQUERADE Devices:这个是“数据包伪装”的功能,即是进行路由器的功能。如果你的 Linux主机是作为类似路由器的功能,那么对外那张网卡就得要启动MASQUERADE才行!因为我们尚未谈到网络服务器,因此这里可千万不要随意选择。

Allowincoming:这里提到的就是各个服务的内部选项,举例来说,你的 Linux 有提供 WWW 服务,又希望大家都能够来查阅,那么这个时候就可以在WWW那个选项前面勾选。你要注意到的是,默认Linux都会开放ssh这个服务(如上图),记得先将它取消勾选,因为这个ssh现在很容易被攻击。所以不要开放人家使用这个服务连接到你的主机上。

基本上,这个操作仅是新建/etc/sysconfig/iptables这个文件而已。而这个文件默认是不存在的(因为我们没有启动防火墙啊)。这里你先有个概念即可,因为,我们将来会介绍以 shell script 的方式建立属于你自己的防火墙系统,细节我们会在服务器篇慢慢介绍的啊!

如果你已经有网络了,记得在这个选项的设置中,在图 21-6 中选择防火墙为“Enable”的状态,按下“Customize”进入图21-7当中取消ssh的勾选,最后再回到21-6当中按下“OK”来启动Linux客户端的防火墙设置。这样你的系统就具有最起码的防火墙功能。

21.1.4 键盘形式设置

某些情况下面你的键盘可能会发生一些对应错误的情况,举例来说,使用的键盘并非常见的 104按键导致很多英文对应不起来。此时你可以使用 setup 来修改!按下“Keyboard configuration”会出现如图21-8所示的界面。

figure_0628_0359

图21-8 键盘形式选择

其实这个文件就仅会修改/etc/sysconfig/keyboard,很简单的设置选项。

21.1.5 系统服务的启动与否设置

我们在第 18 章谈过系统服务的启动与关闭,当时介绍过 ntsysv 吧?没错,这个 System services的项目就是会调用ntsysv这支程序来处理服务的设置。详细的设置请回第18章参考。这里不再浪费篇幅。

21.1.6 系统时钟的时区设置

我们知道地球是圆的,所以想要看王建民在纽约投球都得要三更半夜才有办法看得到!这也就是说,其实在同一个时间点全世界的时钟指的时间都不相同啊!我们的Linux是支持多国语系的国际化操作系统,所以你可以将这台主机拿到任何地方且不需要修改系统时钟,因为系统会主动依据你提供的时区来变化时间的。当你将笔记本电脑带到美国纽约并且想要更改成为美国时间时,可以按下“Timezone configuration”的选项,如图 21-9 所示。

figure_0629_0360

图21-9 setup 的时区选择

如图21-9所示,你在上半部界面中,可以使用箭头来选择正确的位置,然后再用[tab]键移动到[OK]按钮即可。时区的设置,其实就是找出与/etc/sysconfig/clock有关的设置选项而已。实际上,上面图示出现的界面就与/usr/share/zoneinfo/目录内的数据有关而已。

21.1.7 X 窗口界面分辨率设置

X Window System 我们会在第 24 章再来详细说明,这里仅是告知一下,如果你想要更改你的 X窗口界面的分辨率时,就可以使用这个选项了。不过要注意的是,这个选项的执行不可以使用类似ssh协议联机后,在远程主机上执行这个设置选项。因为这个选项的执行会产生一个新的X终端机在tty7或tty8上面,因此,你如果使用远程联机机制的话,会看不到界面的,理解吗?

在你选择了“X配置”之后,就会出现如图21-10所示界面。其中硬件及设置两个页面较常被更改。先来瞧瞧图示吧!如图21-10所示,由于窗口分辨率的范围与屏幕的支持有关,因此你必须要先处理屏幕的更新频率后才能够修改窗口分辨率。所以我们会先处理“硬件”部分,鸟哥的屏幕是旧式的 4∶3 传统屏幕,所以选择 1024 x 768,如果你的屏幕是宽屏,那么请自行挑选适当的分辨率吧!处理完毕后就能够开始设置窗口分辨率了,如图21-11所示。

此时会出现可调整的分辨率。整理整理就能够显示出你想要的窗口分辨率。其实这些设置都是修改/etc/X11/xorg.conf这个配置文件。等到了第24章时,我们再来详细谈谈这玩意。至于关于X方面的日志文件则在/var/log/Xorg.0.log中。

鸟哥个人认为,这个setup的工具是很好用的。只是,如果能够完全清楚整个系统架构的话,再来玩这个小程序会比较好。另外,原本的旧版CentOS还有提供打印机的设置功能,不过由于新版的数据已经转由CUPS负责打印,而打印可以使用浏览器界面来显示,因此就取消了这个setup的组件。下面我们就来玩玩如何简单设置你的打印机!

figure_0630_0361

图21-10 setup的 X分辨率设置之一

figure_0630_0362

图21-11 setup的 X分辨率设置之二

21.2 利用CUPS 设置Linux 打印机

打印机对于日常生活来说很重要。尤其我们的 Linux 主机如果将来还要作为 Printing server 的话,那么自然就得要先新建好打印机的连接。在本章里面我们仅谈论一下如何让你的Linux可以连接到打印机,让你的Linux可以顺利将文件数据打印出来。现在就来谈谈!

21.2.1 Linux 的打印组件(打印操作、队列、服务与打印机)

硬件支持度

要谈论 Linux 的打印,首先就得要知道 Linux 下面整个打印的行为是怎样的一个流程呢?而且也得要了解一下你的硬件是否支持打印作业!在硬件部分,你必须要在 BIOS 中将打印机的支持启动才行!不过,这大概都属于旧式打印机才需要的操作。为什么呢?因为现在打印机大部分都是USB或者是网络打印机了,根本不需要使用25针串行端口的支持!

为什么会谈到 25 针串行端口以及 BIOS 的支持呢?这是因为鸟哥曾经发生过一件糗事。由于鸟哥常用旧型主机的关系,所以总喜欢先在 BIOS 里面将没用到的设备选项全部取消 (disable),所以没有接打印机的情况下,当然连打印机的串行端口 (Parallel) 也关闭了。没想到后来为了测试打印机的连接取得一台旧式打印机,要命啊!连续测试两天的时间却无法顺利打印出正确的文件信息!最后才想到可能是 BIOS 内部的问题。进入BIOS 将打印机支持启动成为 EPP/SPP 之后,俺的 Linux 就能够顺利识别打印机并进行打印。真想哭啊! 不是感动得想哭,是气得想哭!

除了主机本身的支持之外,你的打印机也必须要能够支持Linux才行!其实并不是Linux的问题。而是打印机制造商必须要能够提供给Linux用的驱动程序,这样你的Linux才能够使用该型号的打印机。老实说,鸟哥是HP打印机的爱好者,因为HP打印机对Linux的支持非常好!但是另一品牌的L开头的打印机总是很慢或者不推出给Linux用的驱动程序,所以该品牌的打印机很难安装在Linux主机上!真困扰。

因为鸟哥过去所在的研究室大多购买 HP 的打印机,所以测试打印机时完全没有出现任何问题。但是某天在家里使用鸟嫂购买的某L开头品牌的打印机时,连忙了三天却都无法连接到该打印机来顺利输出。最终查询 Linux 打印机支持网站,才发现该型号的打印机根本没有推出给 Linux 用的驱动程序,所以就无法顺利使用该打印机,最终鸟哥就放弃该测试了。唉!真浪费时间!

那到底你该如何确认你的打印机有否支持Linux呢?或者是,如果你想要购买新的打印机时,如何查询该打印机能否在Linux上面安装呢?很简单,直接到下面的网站去查询一下即可!

http://www.linuxfoundation.org/en/OpenPrinting

举例来说,鸟哥现在的研究室有一部 HP 的 LaserJet P2 015dn 打印机,我想要知道这部打印机对Linux的支持度好不好,那就先进入上述的网站链接,出现如图21-12的界面。

figure_0631_0363

图21-12 打印机支持网站的主界面

在如上界面中请按下“Printers”来查看打印机的特性,会出现如图21-13所示的界面。

figure_0632_0364

图21-13 选择打印机示意图

在上图中填入正确的品牌(HP)以及正确的打印机型号(LaserJet P2 015dn)后,请按下“Show”那个按钮,该网站就会从数据库内搜索支持度的情况给你看,如图21-14所示。

figure_0632_0365

图21-14 鸟哥的打印机对Linux 的支持度

在显示的界面中,你最要注意的是那个企鹅数量。如果达到3只,那就代表支持度是非常完美的。两支企鹅是可接受的范围内。如果是小于一只企鹅时,那么该打印机对Linux的支持可能就是比较差的!还好,鸟哥这台含有网络功能的打印机还有两只企鹅的支持,等一下应该能够顺利安装到我的Linux测试机上。

打印组件

你有没有发现,在打印机还没有启动电源的情况下面,其实我们还是可以通过软件来将某个任务打印出来的,只是该项任务就会被放入到等待的环境中(队列),为什么会这样呢?这是因为整个打印的行为被区分为许多部分,每个部分都可以单独存在的。我们将整个部分绘制成图21-15来瞧瞧。

figure_0632_0366

图21-15 打印行为的各组件示意图

我们大概可以将上图区分为几个部分来说明:

打印操作

例如 Open Office 这类较大型的办公室软件中,可以利用内置的程序产生打印的操作。我们也可以使用类似lpr这类命令行程序来直接打印某个文件。打印软件产生的打印操作就是产生一个打印的工作(job),这个打印操作就会进入排队等待(队列,queue)的环境中,等待打印服务来进行输出。

打印队列

这是放置打印作业的重要项目!这个打印队列与打印服务有关。一般来说,打印队列会以打印机的名字来命名,让大家知道你的打印作业将要使用哪部打印机输出之故。当打印作业放置到队列后,就开始等待打印服务的取用与输出了。

打印服务

就是实际负责沟通队列内的打印操作与打印机的服务。打印服务其实就是将队列内的打印操作的数据转成打印机认识的格式后,直接交给打印机来输出而已。但是打印服务必须要与打印机交互,因此它就得要连上打印机与驱动打印机才行。目前常见的打印服务有 CUPS 与LPRng,不过以CUPS为主流。

一般我们说的打印机驱动程序其实就是将打印作业的数据转成打印机格式。而目前常见的打印机格式为使用Postscript的打印格式,Linux默认的CUPS本身就支持这种打印格式,因此,只要你购买的打印机有支持postscript,那么安装起来应该是很轻松的才是。我们在上面提到的打印机支持网站中,里面的驱动程序很多就是 postscript 打印机描述文件(Postscript Printer Description [5])。

那万一没有 PPD 文件呢?没关系,我们可以通过打印机厂商提供的其他定义文件(例如Ghostscript)来解释打印操作的数据,让打印机认识该格式后,就能够顺利打印了!这也就是说,其实打印机驱动程序就是将数据转成打印机认识的格式后,就能够加以输出了。而常见的格式为Postscript及Ghostscript。

那么这些打印的PPD驱动程序文件放在哪里呢?其实就放在/usr/share/cups/model/下面。CentOS 已经提供一些默认的驱动程序了,如果想要取得更新的 PPD 驱动程序文件,请参考上面的打印机网站,从那上面来下载即可。若想要直接下载全部的 PPD 文件,可以参考链接:http://www.linuxprinting.org/download/PPD/。

为什么需要打印队列 (queue) 呢?因为打印机只能够给单一任务进行打印,没办法像 CPU 可以交替运行的! 所以打印操作就得要排队等待打印机的打印,而打印机得要将前一份任务栏印完毕后才能够打印下一份工作,否则如果是交错打印,那印出的东西不就混杂在一起了?这样说了解吗?

21.2.2 CUPS 支持的联机模式

如果你的打印机具有网卡,那么你当然可以使用网络联网到你的打印机上面。不过,这种打印机提供什么服务呢?也就是说,你可以使用什么连接协议来连上打印机呢?常见的打印机联机模式有下面这些:

socket

数据通过 internet socket(端口)来传送,一般为 port 9100 或 35。如果想要进行数据的传输与打印,可以通过在浏览器上面输入 socket://host-printer:9 100/来进行。不过,这种模式不常用就是了。

LPD(Line Pritner Daemon)

LPD是较早之前的打印服务,刚才上面提到的LPRng就是使用这种方式的联机。LPD主要是利用串行端口来达成打印的需求,打印机名称就是 LPT1/LPT2 等。目前还是可以在比较早期的 Linux distributions 中看到这种打印方式。

IPP(Internet Printing Protocol)

这是目前比较流行的打印机打印协议,我们的CUPS默认也是支持这种协议啊!当启动IPP时,打印机会启动 port 631,打印的数据就是通过这个端口来进行传送的。另外,如果你的打印机或者 Linux 主机启动了 ipp 之后,嘿嘿!你可以直接使用浏览器输入ipp://printer_IP /printername,或者是 http:/printer_IP:631 就能够直接在线处理打印机的设置了!方便得很啊!

SMB(Server Message Block)

它就是网络上的邻居。协议使用的是smb://user:password@host/printer。

CentOS 5.x 默认提供的就是 CUPS 的 IPP 协议,而且 CUPS 默认开机就启动了,因此,你可以随时随地以 Web 接口设置自己的打印机。真是非常方便!那如果你的打印机是通过数据线(USB/串行端口)连上主机的呢?那就得要考虑下面的连接接口。

parallel:串行端口啊,就是25针那种玩意!它是连接到/dev/lp[0-2]等设备。在CUPS里面的设备使用格式为:parallel:/dev/lp0/。

USB:越来越常见的USB打印机啊!CUPS使用的格式为:usb:/dev/usb/lp0。

21.2.3 以Web 界面管理网络打印机

事实上,管理Linux的打印机是非常简单的一件事情,因为你只要启动CUPS之后,再以浏览器接口来管理即可。不过,在默认的情况下面,要进行浏览器界面的管理操作时,你必须要:

启动CUPS 这个服务(/etc/init.d/cups start);

具有root的权限(需要root的密码来设置);

默认仅能在本机(localhost)管理,无法使用远程联网连到此Linux管理。

如果你想要在局域网内将打印机的控制权移交给其他用户管理时,就得要修改CUPS的设置了。在这里,我们先以本机的方式来处理打印机的联机!首先,鸟哥以具有网卡的打印机 HP LaserJetP2 015dn 这台为例 (因为鸟哥也只有这台打印机具有网卡啊),这台打印机的 IP 为192.168.201.253,而鸟哥Linux测试机IP为192.168.201.250。然后,你可以这样做:

确认打印机存在且支持CUPS认可的相关协议

如果想要加入 CUPS的网络打印机,那么你的打印机当然就得要支持 CUPS认可的通讯协议。如何确定呢?首先,你必须要依照你打印机所提供的手册去设置好 IP,以鸟哥上面的环境来说,我的打印机IP为192.168.201.253,因此我可以这样确定该打印机是否存在:

1. 先确定 IP 是否正确:

[root@www ~]# ping -c 3 192.168.201.253

PING 192.168.201.253 (192.168.201.253) 56(84) bytes of data.

64 bytes from 192.168.201.253: icmp_seq=1 ttl=255 time=0.464 ms

64 bytes from 192.168.201.253: icmp_seq=2 ttl=255 time=0.313 ms

64 bytes from 192.168.201.253: icmp_seq=3 ttl=255 time=0.356 ms

—- 192.168.201.253 ping statistics —-

3 packets transmitted, 3 received, 0% packet loss, time 2000ms

rtt min/avg/max/mdev = 0.313/0.377/0.464/0.067 ms

重点是有没有出现响应的时间参数,即是 time 那个字段!

2. 使用 nmap 测试打印机有没有出现打印相关的服务接口:

[root@www ~]# nmap 192.168.201.253

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-05-27 22:07 CST

Interesting ports on 192.168.201.253:

Not shown: 1676 closed ports

PORT STATE SERVICE

80/tcp open http

139/tcp open netbios-ssn

515/tcp open printer

9100/tcp open jetdirect

MAC Address: 00:18:FE:9E:4C:58 (Unknown)

Nmap finished: 1 IP address (1 host up) scanned in 3.875 seconds

鸟哥这台打印机仅支持 LPD 服务 (515) 以及 HP 独家的服务 (9100)

这样就确定我的打印机实际存在,且这台打印机仅支持 HP 独家的网络服务(port 9100)以及旧版的LPD服务而已,这个信息很重要,因为等一下我们使用CUPS联机时,就得要使用这个LPD的服务。另外,请特别留意一下,那个nmap是个可以扫描主机端口的软件(port scan),它默认并没有安装到 CentOS 上,但是你可以使用“yum install nmap”来安装它。请注意,因为这个软件可以是恶意攻击的,因此千万不要用来查看别人的主机,否则恐怕会有违法之虞!

接下来,让我们来了解一下,系统有没有CUPS的支持。

查询你Linux主机是否启动CUPS服务

再来查看看你的主机是否已经启动了CUPS呢?使用netstat这个命令看看:

[root@www ~]# netstat -tlunp | grep 631

tcp 0 0 127.0.0.1:631 0.0.0.0:*  LISTEN 4231/cupsd

udp 0 0 0.0.0.0:631  0.0.0.0:*    4231/cupsd

确实有启动631接口以及cupsd的服务。接下来,我们可以直接连上CUPS了!请打开浏览器,然后在地址栏输入“http://localhost:631”即可!因为浏览器要连接的并非正规的WWW服务接口,因此就得要加上冒号(:)来指定接口连接。顺利的话,应该可以出现如图21-16所示界面。

figure_0635_0367

图21-16 CUPS进站界面

主界面主要可以分为上下两个按钮列来说明,其中又以下方的按钮列为常见的操作选项。我们会用到的按钮大概就是:

Add Printer:添加打印机,就是从这个按钮开始的!

Manage Jobs:打印工作管理,如果有打印工作要取消的,这个就对了!

Manage Printers:管理打印机,包括是否启动或者是删除打印机等。

不 嗌唆,赶紧来添加打印机看看!按下“Add Printer ”选项吧!

figure_0635_0368

图21-17 CUPS添加打印机的界面示意图

上面图示中,最重要的其实是那个“Name”的选项,那就是你打印机的队列名称!将来所有打印的工作都是放在该名称下面排队的!鸟哥的这个打印机名称比较复杂。你可以取个比较简单的名字,以后比较容易使用命令行软件来打印。至于位置( Location )与描述(Description)都是这个打印机的说明,可写可不写!写完后按下“continue”。

接下来则是选择这个打印机队列所联网的打印机提供什么服务的打印功能,你可以看到前一小节我们使用nmap的时候就发现port 9100就是HP JetDirect,因此我们可以选择图21-18中的第一个项目。由于这台打印机也提供 port 515 的 LPD 服务,因此你也可以选择图中的“LPD/LPR Host or Printer”项目。不过,在这里鸟哥选择的是第一项。选择完毕后再按下“Continue”进入打印机的物理位置项目,如图21-19所示。

figure_0636_0369

图21-18 选择打印机所提供的服务项目

figure_0636_0370

图21-19 填写打印机的实际联机方式(要填正确)

其中提供了很多范例,我们由于使用到 port 9100,因此使用的就是 socket://那个范例使用的状态。填写正确的位置后,接下来按下“Continue”来继续选择打印机的型号。

如图21-20所示,我们选择的是HP的品牌。品牌选择完毕后会出现如图21-20所示的型号选择。

但图 21-21 中我们并没有看到 P2015dn 这台打印机的型号!那怎办?没关系,可以联机到http://www.linuxfoundation.org/en/OpenPrinting网站下载适当的驱动程序后,按下图中的“浏览”按钮来选择该文件即可。不过,从该网站的介绍中,可以发现鸟哥的这台打印机似乎使用默认的 Postscript 驱动程序即可,该网站也没有提供这部打印机的驱动程序啊!那怎办?没关系,在/usr/share/cups/model/目录下就有默认的驱动程序。所以请按下“浏览”来处理一下!

figure_0636_0371

图21-20 选择打印机的实际型号(驱动程序确认)

figure_0636_0372

图21-21 选择打印机的实际型号(驱动程序确认)

如图21-22所示,选择正确的驱动程序,然后再按下“打开”按钮,最后按下“AddPrinter”按钮就可以进入管理员密码输入界面。

到此为止我们的打印机设置就OK了!如果你回到CUPS的进站界面,并且点选Printers之后,就会出现如图21-22所示的打印机界面。

上面界面中的按钮都看得懂吧?其中比较重要的是那个“ Set As Default”项目,那就是设置为“默认打印机”,当你产生打印作业后,该工作默认就会丢给这个hp_lj_p2015dn的队列来处理的意思。接下来,当然就是按下“Print Test Page”看看能否打印出正确的界面。如果可以顺利打印,恭喜你!打印机设置成功!

figure_0637_0373

图21-22 选择驱动程序文件

figure_0637_0374

图21-23 输入管理员账号密码(默认用root)

figure_0637_0375

图21-24 打印机的控制界面

21.2.4 以Web 界面管理 USB 本地打印机

上一小节提到的是网络打印机,那如果你的打印机是一般普通的具有USB接口的打印机呢?由于打印机的设备文件名为/dev/usb/lp0 开始的名称,既然已经知道打印机名称了,那么我们先来注意看看USB是否识别该打印机,由于我们的Linux已经能够处理即插即用(PnP)的设备,因此直接执行ls去查看文件名是否存在即可:

[root@www ~]# ll /dev/usb/lp0

crw-rw—— 1 root lp 180, 0 Jun 1 22:32 /dev/usb/lp0

这个文件会被自动建立起来,你不需要手动建立这个文件!

老实说,除非你的 USB 打印机是非常冷门的机种,否则,我们的 CUPS 应该已经自动识别并且设置好该打印机。以鸟哥为例,鸟哥办公室的打印机为 HP Diskjet F380,如果使用列出 USB 设备的lsusb时,可以看到:

[root@www ~]# lsusb

Bus 001 Device 001: ID 03f0:5511 Hewlett-Packard Deskjet F300 series

Bus 002 Device 001: ID 0000:0000

Bus 002 Device 002: ID 0d62:a100 Darfon Electronics Corp. Benq Mouse

接下来,同样我们使用 CUPS的Web界面来设置一下这部打印机。在地址栏输入http://localhost:631之后再按下“ManagePrinters”会出现如图21-25所示界面。

由图21-25我们可以发现CUPS已经识别打印机了,连驱动程序都安装妥当!这是怎么回事啊?这是因为CentOS提供了HAL的机制来处理PnP设备的缘故。关于HAL的机制我们会在下一小节再来讨论。不过由于这个设备使用的是HAL提供的设备文件名,我们如果想要使用/dev/usb/lp0来作为打印机的输出文件名的话,那么就自己来新建一个打印机的队列。同样在 CUPS 界面中按下“AddPrinter”来添加一个打印机。

figure_0638_0376

图21-25 由HAL 机制顺利取得的USB 打印机

figure_0638_0377

图21-26 输入队列名称

如图21-27所示,你要指定的是那个有#1的位置,那就是我们的第一个USB插槽位置!

figure_0638_0378

图21-27 指向第一个 USB设备处

figure_0638_0379

图21-28 选择打印机的驱动程序

如图21-29所示,最后就会多出一个名为deskjet_f380的打印机名称,接下来当然就是用“Print Test Page”测试看看能否打印。如果能够打印得出来,那就是设置妥当了。所以说,USB 打印机的设置要简单得多。

figure_0638_0380

图21-29 最终结果

21.2.5 将Linux 本地打印机开放成为网络打印机

想象这么一个情况,你仅有USB打印机安装在Linux上面,整个办公室或实验室里面仅有这台打印机。虽然你可以加装打印服务器来使USB打印机变成网络打印机,但总是得多花钱啊!有没有办法可以让你的本地打印机变成网络打印机呢?有的,那就是修改 CUPS 的设置即可。如何修改呢?我们还是通过CUSP的浏览器界面来处理即可!选择“Administration”会出现如图21-30所示的界面。

figure_0639_0381

图21-30 勾选可让CUPS 成为打印服务器的功能

如图21-30所示,在箭头指定的地方进行勾选即可。勾选完毕后按下“Change Settings”就能够让你的CUPS变成打印服务器,而你原本的打印机就会成为“ipp://你的IP:631/printers/打印机队列名称”,举例来说,鸟哥这部 Laserjet p2 015dn 在网络上看到的就会是“ipp://192.168.201.250/printers/ hp_lj_p2 015dn”的名称啊!你可以在其他客户端计算机上面以这个URI来进行联网!

21.2.6 手动设置打印机

事实上我们刚才在上面所进行的各项动作大多是修改/etc/cups/里面的几个文件而已啊!几个重要的文件为:

/etc/cups/printers.conf:打印机的设置值,都写在这个文件中;

/etc/cups/cupsd.conf:CUPS的主要配置文件,包括作为服务器用途的设置;

/etc/cups/ppd/*.ppd:就是各个打印机的驱动程序(PPD配置文件)。

既然只是改了这几个配置文件,你当然也可以使用vim去编辑,不过,因为涉及硬件联机的问题,因此还是建议使用Web界面来进行修改啦。不过,某些时候如果你没有浏览器接口时,那么使用终端机接口的命令来修改也是可以的。我们下面只以鸟哥办公室拥有的这一部 HP P2015dn 的激光打印机来作为范例。

1.下载合适的PPD驱动程序定义文件

首先你必须要前往打印机网站下载你的打印机驱动程序定义文件。鸟哥之前已经查询过,这台打印机使用默认的 PPD 文件即可。所以鸟哥这部打印机的驱动程序定义文件基本上在/usr/share/cups/model/postscript.ppd.gz 中。如果你下载了打印机的驱动程序时,请将你下载的文件放置到/usr/share/cups/model/目录下,因为后续要操作的命令会到此目录中找寻驱动程序定义文件。

2.启动CUPS以及打印机

接下来请确定你的 CUPS是启动的,而且打印机也已经打开电源了。启动 CUPS的方法与检查是否启动CUPS的操作如下:

1. 重新启动 CUPS 的方法

[root@www ~]# /etc/init.d/cups restart

正在停止 cups:    [ 确定 ]

正在激活 cups:    [ 确定 ]

[root@www ~]# netstat -tlunp | grep 631

tcp 0 0 0.0.0.0:631  0.0.0.0:* LISTEN 4939/cupsd

tcp 0 0 :::631   :::*  LISTEN 4939/cupsd

udp 0 0 0.0.0.0:631  0.0.0.0:*    4939/cupsd

因为 CUPS 启动的网络服务端口就是 port 631 !所以确定是启动的!

2. 确认打印机提供的服务为何

[root@www ~]# nmap 192.168.201.253

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-06-03 00:43 CST

Interesting ports on 192.168.201.253:

Not shown: 1676 closed ports

PORT STATE SERVICE

80/tcp open http

139/tcp open netbios-ssn

515/tcp open printer

9100/tcp open jetdirect

再次强调,鸟哥这部打印机仅有提供 HP 自家的打印机协议 9100 端口!

从上面的输出可以很清楚地看到鸟哥的打印机与Linux上面的CUPS都有顺利运行中!其中还是要强调,你千万不要拿nmap去扫描别人的系统!很可怕的!而由于上面输出的结果,我们也知道鸟哥这部打印机在网络上的联网方式为“socket://192.168.201.253:9100”的样子,这个地方也请先记录下来。

3.使用lpadmin进行打印机的新建与删除

命令设置/删除打印机的方式就是通过lpadmin这个命令。这个命令的语法是这样的:

[root@www ~]# lpadmin [-p 自定义队列名] [-v URI] [-m PPD] [-E] <==建立打印机

[root@www ~]# lpadmin [-d 已存在的队列名] <==设置成为默认打印机

[root@www ~]# lpadmin [-x 已存在的队列名] <==删除此一打印机队列

选项与参数:

-p :后面接的就是打印机的队列名称,这个名称可自定义,但还是定为有意义较佳。

-v :后面接的就是设备的相关位置,常见的设备有:

串行端口 : parallel:/dev/lp0

USB : usb:/dev/usb/lp0

网络打印机 : ipp://192.168.201.253/

提供特殊插槽 : socket://192.168.201.253:9100

-m :后面接的通常就是 PPD 的定义文件,注意,要放置到 /usr/share/cups/model/ 下面!

-E :作为可接受 (accept) 此打印操作之意!

1. 先列出本机上面所有已经存在的打印机。

[root@www ~]# lpstat -a

Deskjet_F300_series accepting requests since Tue Jun 2 00:48:59 2009

deskjet_f380 accepting requests since Mon Jun 1 23:34:21 2009

hp_lj_p2015dn accepting requests since Tue Jun 2 00:22:31 2009

2. 删除所有已经存在的打印机。

[root@www ~]# lpadmin -x Deskjet_F300_series

[root@www ~]# lpadmin -x deskjet_f380

[root@www ~]# lpadmin -x hp_lj_p2015dn

[root@www ~]# lpstat -a

lpstat: No destinations added.

这样就确定没有任何存在的打印机。

3. 加入 hp_p2015 打印机,打印机参数如前面两小节所示:

[root@www ~]# lpadmin -p hp_p2015 -v socket://192.168.201.253:9100 \

> -m postscript.ppd.gz -E

4. 因为仅有一部打印机,因此让此打印机成为默认打印打印机

[root@www ~]# lpadmin -d hp_p2015

其实这个 lpadmin 命令只是更新/etc/cups/目录里面的两个数据而已,一个是/etc/cups/printers.conf,这个文件主要设定了打印机的相关设备、是否接受打印操作、打印机的队列名称、页面的限制等,反正就是整个打印机的设定就是了。至于这个打印机相关的 PPD 文件则是以打印机的队列名称链接到/etc/cups/ppd/目录下。不相信吗?让我们来瞧瞧printers.conf的文件内容!

[root@www ~]# cat /etc/cups/printers.conf

Printer configuration file for CUPS v1.2.4

Written by cupsd on 2009-06-03 01:06

<DefaultPrinter hp_p2015>   <==这就是打印机队列名称

Info hp_p2015

DeviceURI socket://192.168.201.253:9100 <==就是打印机所在的设备位置

State Idle

StateTime 1243962326

Accepting Yes

Shared Yes

JobSheets none none

QuotaPeriod 0

PageLimit 0

KLimit 0

OpPolicy default

ErrorPolicy stop-printer

</Printer>

[root@www ~]# ll /etc/cups/ppd

-rw-r—r— 1 root root 7714 Jun 3 01:05 hp_p2015.ppd

这就是刚才找到的,给 hp_p2015 用的打印机定义文件!

  1. 打印机状态的查看

设置完打印机后,来查看一下目前的打印机状态!下面的lpstat是个不错用的查看命令。

[root@www ~]# lpstat [-adprt]

参数:

-a :列出目前可以接受打印操作的打印机队列名称;

-d :列出目前系统的默认打印机 (未指定打印队列时默认输出的打印机);

-p :列出每部打印机目前的工作状态,包含工作的 ID;

-r :列出目前 CUPS 服务是否有在运作;

-t :列出目前打印系统中更为详细的信息说明,很适合查询!

1. 列出目前系统上面所有的打印机队列与接受工作与否的情形

[root@www ~]# lpstat -a

hp_p2015 accepting requests since Wed Jun 3 01:05:26 2009

表示有一部名为 hp_p2015 的打印机从 2009/6/3 开始接受打印操作之意!

2. 列出目前的“打印系统”状态,不只包括打印机而已。

[root@www ~]# lpstat -t

scheduler is running <==CUPS 这个服务有在运作的意思

system default destination: hp_p2015 <==默认的打印机为这一部 hp_2015

device for hp_p2015: socket://192.168.201.253:9100 <==这部打印机的设备地址

hp_p2015 accepting requests since Wed Jun 3 01:05:26 2009

printer hp_p2015 is idle. enabled since Wed Jun 3 01:05:26 2009

这部打印机目前是发呆 (Idle) 的状态,但可接受打印作业!

如果不清楚你的打印机状态,使用lpstat就能够看得清楚。接下来,让我们开始来使用打印命令产生打印操作。

5.利用lpr与lp来产生打印操作

如果你没有浏览器或者是你没有图形界面的软件时,可以通过lpr或者是lp这两个命令来打印某些文件或数据流重定向的东东。下面的测试会实际打印出数据来,因此,建议你可以先将打印机电源关闭,让CUPS可以接受打印队列的工作,却无法输出到打印机,这样也方便我们后续管理命令的查询!所以,请先将打印机的电源关闭!再来看看这两个命令如何操作。

[root@www ~]# lpr [-P printer队列] [-# 打印份数] -U [username] file

参数:

-P :若没有默认打印机 (default) 或者想要由不同打印机输出时,可用 -P 指定打印机

-# :如果这份文件你想要打印多个副本时,用这个 -# 加上份数就对了!

-U :有些打印机有限制可使用的用户账号,此时就得要使用这个参。

1. 指定 hp_p2015 这部打印机来打印 /etc/passwd 这个文件

[root@www ~]# lpr -P hp_p2015 /etc/passwd

2. 关闭打印机后,将 /root/ 下面的文件名输出到这部打印机

[root@www ~]# ll /root | lpr -P hp_p2015

要注意的是,因为鸟哥有指定默认打印机,因此上面的范例中即使没有加上 [-P hp_p2015] 这个参数时,依旧能够顺利打印。但如果你没有指定默认打印机,那么就一定要加上这个项目,否则 lpr 会不知到要将数据输出到哪里去!看完了 lpr ,再来聊聊 lp 这个命令的用法吧!

[root@www ~]# lp [-d printer队列] [-n 打印份数] file

参数:

-d :后面接的是打印机的队列名称。如果有多部打印机才需要指定;

-n :就是打印的份数。

打印出 2 份 /etc/issue 数据

[root@www ~]# lp -d hp_p2015 -n 2 /etc/issue

request id is hp_p2015-11 (1 file(s)) <==以 hp_p2015 来打印,工作号码为 11

6.打印作业的查看(lpq)与删除(lprm)

我们已经有产生三个工作,但是第一个工作可顺利打印(打印机是开启的),因此还有两个工作尚未完成才对!那我们如何知道还有哪些打印作业在队列内呢?可以使用下面的命令来查看!

[root@www ~]# lpq [-al] [-P 打印队列]

参数:

-a :列出所有打印机上面在队列当中的工作情况;

-l :用其他较长格式来输出打印的相关信息 (所有者与文件大小等等);

-P :后面接特定的打印机,与 -a 不同。

1. 显示出目前所有打印机的工作队列状况

[root@www ~]# lpq -a

Rank Owner Job File(s)   Total Size

active root 10 (stdin)   1024 bytes

1st root 11 issue    1024 bytes

上面的意思是,有 2 份工作,第一个工作为来自 stdin 的数据流,打印号码为 10 ,

整份打印数据占去 1024 bytes 。同理,第二份工作为文件,文件名为 issue。

2. 用更详细的信息显示打印作业

[root@www ~]# lpq -l -P hp_p2015

hp_p2015 is ready and printing

root: active    [job 10 localhost]

(stdin)     1024 bytes

root: 1st    [job 11 localhost]

2 copies of issue   1024 bytes

你可以看到,issue 会被打印两份!

如果这些打印操作你想要取消该怎么办呢?那就使用lprm。

[root@www ~]# lprm [-P printer队列] job_id

参数:

-P :后面直接指定某部打印机的某个工作号码。注意,那个 job_id

就是刚才我们使用 lpq 查看到的那个 Job 的号码。

将使用 lpq 看到的第 11 号打印操作取消!

[root@www ~]# lprm 11

[root@www ~]# lpq -a

Rank Owner Job File(s)   Total Size

active root 10 (stdin)   1024 bytes

瞧!只剩下一个工作而已。

整个命令模式处理打印机的任务大约到此为止,其他的还是使用Web接口去管理比较方便。

7.一个简单的练习

假设你目前的 CentOS 主机上面接着一台 USB 接口的打印机,这台 USB 接口的打印机是Samsung的ML-1210打印机,请问,你可以如何安装这部打印机?

1.先下载PPD定义文件,文件名为Samsung-ML-1210-gdi.ppd,保存到/usr/share/cups/model/当中;

2.加入打印机,使用下列方法:

[root@www ~]# lpadmin -p samsung -v usb:/dev/usb/lp0 \

> -m Samsung-ML-1210-gdi.ppd -E

3.开始用“lpr -P samsung /etc/passwd”测试练习一下,如果有东西打印出来,那就是 OK。

另外,如果老是看到屏幕前面显示“Printer not connected; will retry in 30 seconds…”,很有可能是因为我们的设备代号输入错误,请使用“ lpstat -t”查看一下是否正确设置好了?基本上,安装一部Linux支持的打印机真的是快速。

21.3 硬件数据收集与驱动及lm_sensors

“工欲善其事,必先利其器!”这是一句大家耳熟能详的古人名言,在我们的信息设备上面也是一样的。如同前面小节谈到的,如果你的打印机本身就没有提供给Linux系统用的驱动程序,那么我们就不要浪费时间在该打印机设备上了。同理可证,如果我们想要好好使Linux安装在自己的主机上面,那么主机上面的硬件信息最好还是能够了解一下好。现在一般主板也都有提供 CPU 电压与温度的检测,那我们也能够通过lm_sensors这个软件来取得该数据!下面就让我们来玩玩!

21.3.1 硬件信息的收集与分析

现在我们知道系统硬件是由操作系统内核所管理的,由第 20 章的开机流程分析中,我们也知道Linux kernel 在开机时就能够检测主机硬件并加载适当的模块来驱动硬件了。而内核所检测到的各项硬件设备后来就会被记录在/proc与/sys当中,包括/proc/cpuinfo,/proc/partitions,/proc/interrupts等等。更多的/proc内容介绍,先回到第17章的程序管理瞧一瞧先!

其实内核所检测到的硬件可能并非完全正确!因为它仅是使用最适当的模块来驱动这个硬件而已,所以有时候难免会误判 (虽然几率非常之低)!那你可能想要以最新最正确的模块来驱动你的硬件,此时,重新编译内核是一条可以实现的道路。不过,现在的 Linux系统并没有很建议你一定要重新编译内核就是了。

那除了直接调用出/proc下面的文件内容之外,其实Linux有提供几个简单的命令来将内核所检测到的硬件“呼”出来的,常见的命令有下面这些:

fdisk:第 8 章曾经谈过,可以使用 fdisk -l 将分区表列出;

hdparm:第8章谈过的,可查看硬盘的信息与测试读写速度;

dmesg:第17章谈过,查看内核运行过程当中所显示的各项信息记录;

vmstat:第17章谈过,可分析系统(CPU/RAM/IO)目前的状态;

lspci:列出整个PC系统的PCI接口设备!很有用的命令;

lsusb:列出目前系统上面各个USB端口的状态与连接的USB设备;

iostat:与vmstat类似,可实时列出整个CPU与接口设备的I/O状态。

lspci,lsusb,iostat是本章新谈到的命令,尤其如果你想要知道主板与各周边相关设备时,那个lspci真是不可多得的好工具!而如果你想要知道目前USB接口的使用情况以及检测到的USB设备,那个lsusb则很好用。至于iostat则是一个实时分析软件,与vmstat有异曲同工之妙。既然本节是想要使用lm_sensors分析各组件的温度与电压,那么这几个命令得要来使用看看才行啊!

基本上,想要知道你Linux主机的硬件配备,最好的方法还是直接拆开主机去察看上面的信息(这也是为何第0章会谈到计算机概论啊)!如果环境因素导致你无法直接拆开主机的话,那么直接用lspci是很棒的方法:

lspci

[root@www ~]# lspci [-vvn]

参数:

-v :显示更多的 PCI 接口设备的详细信息;

-vv :比 -v 还要更详细的信息;

-n :直接查看 PCI 的 ID 而不是厂商名称。

范例一:查看你系统内的 PCI 设备:

[root@www ~]# lspci

00:00.0 Host bridge: Silicon Integrated Systems [SiS] 630 Host (rev 30)

00:00.1 IDE interface: Silicon Integrated Systems [SiS] 5513 [IDE] (rev d0)

00:01.0 ISA bridge: Silicon Integrated Systems [SiS] SiS85C503/5513 (LPC Bridge)

00:01.2 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 07)

00:01.3 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 07)

00:01.4 Multimedia audio controller: Silicon Integrated Systems [SiS] SiS PCI Audio

Accelerator (rev 02)

00:02.0 PCI bridge: Silicon Integrated Systems [SiS] Virtual PCI-to-PCI bridge (AGP)

00:0e.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)

01:00.0 VGA compatible controller: Silicon Integrated Systems [SiS] 630/730 PCI/AGP

VGA Display Adapter (rev 21)

不必加任何的参数,就能够显示出目前主机上面的各个 PCI 接口的设备。

不必加上任何参数,就能够显示出目前的硬件配备。上面就是鸟哥的测试机所使用的主机配备。包括使用 SIS 这家公司推出的 630 主板芯片组,使用 USB 1.1 的控制器,内置 SIS 的声卡,使用内置的SIS的AGP显示适配器,以及网卡为螃蟹卡(型号为RTL-8139)。你瞧瞧!很清楚不是?

由于目前的主机配备实在太高档了,因此很多朋友学习Linux时,习惯以类似Virtualbox或VMWare等虚拟机进行模拟,此时你得要特别注意,你的硬件配备将是Virtualbox或VMWare模拟出来的,并不是原本的主机配备!实在是由于讨论区太多网友发问类似“我的螃蟹卡为何识别不到”等问题,询问后,才发现他使用VMWare仿真硬件。此时你就得要使用lspci去列出Linux内核捉到的硬件,而不是你原本的硬件。注意注意!

如果你还想要了解某个设备的详细信息时,可以加上-v 或-vv 来显示更多的信息!举例来说,鸟哥想要知道那个以太网卡更详细的信息时,可以使用如下的参数来处理:

[root@www ~]# lspci -s 00:0e.0 -vv

-s 后面接的那个怪东西表示每个设备的总线、插槽与相关函数功能。那个是我们硬件检测所得到的数据。你可以对照下面这个文件来了解该串数据的意义:

/usr/share/hwdata/pci.ids

其实那个就是PCI的标准ID与品牌名称的对应表。此外,刚才我们使用lspci时,其实所有的数据都是由/proc/bus/pci/目录下的数据所取出的。了解了吗?

lsusb

刚才谈到的是PCI接口设备,如果是想要知道系统接了多少个USB设备呢?那就使用lsusb。这个命令也是很简单的!

[root@www ~]# lsusb [-t]

参数:

-t :使用类似树状目录来显示各个 USB 端口的相关性

范例一:列出目前鸟哥的测试用主机 USB 各端口状态

[root@www ~]# lsusb

Bus 001 Device 001: ID 0000:0000

Bus 002 Device 001: ID 0000:0000

Bus 002 Device 002: ID 0d62:a100 Darfon Electronics Corp. Benq Mouse

如上所示,鸟哥的主机有两个 USB 控制器 (bus),而 Bus 002 接了一个设备,

该设备的 ID 是 0d62:a100,对应的厂商与产品为 Benq (明基)的鼠标。

确实非常清楚!其中比较有趣的就属那个 ID 号码与厂商型号对照了!那也是写入在/usr/share/hwdata/pci.ids的东西,你也可以自行去查询一下!更多信息我们留待下一小节再来讨论。

iostat

刚才那个lspci找到的是目前主机上面的硬件配备,那么整台机器的存储设备主要是硬盘。请问,你的硬盘由开机到现在已经存取了多少数据呢?这个时候就得要iostat这个命令的帮忙了!不过,默认CentOS并没有安装这个软件,因此你必须要先安装它才行!如果你已经联网了,那么使用“yum install sysstat”先来安装此软件,否则无法进行如下的测试。

[root@www ~]# iostat [-c|-d] [-k|-m] [-t] [间隔秒数] [检测次数]

参数:

-c :仅显示 CPU 的状态;

-d :仅显示存储设备的状态,不可与 -c 一起用;

-k :默认显示的是 block ,这里可以改成 KB 的大小来显示;

-m :与 -k 类似,只是以 MB 的单位来显示结果。

-t :显示日期出来;

范例一:显示一下目前整个系统的 CPU 与存储设备的状态

[root@www ~]# iostat

Linux 2.6.18-92.el5 (www.vbird.tsai) 06/03/2009

avg-cpu: %user %nice %system %iowait %steal %idle

0.35 0.31 0.25 0.03 0.00 99.06

Device:   tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

hda   0.29  3.46  4.01 1116645 1295796

瞧!上面数据总共分为上下两部分,上半部显示的是 CPU 的当前信息;

下面数据则是显示存储设备 /dev/hda 的相关数据,它的数据意义为:

tps :平均每秒钟的传送次数!与数据传输“次数”有关,非容量;

kB_read/s :开机到现在平均的读取单位;

kB_wrtn/s :开机到现在平均的写入单位;

kB_read :开机到现在总共读出来的文件单位;

kB_wrtn :开机到现在总共写入的文件单位。

范例二:每两秒钟检测一次,并且共检测三次存储设备

[root@www ~]# iostat -d 2 3

Linux 2.6.18-92.el5 (www.vbird.tsai) 06/03/2009

Device:   tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

hda   0.29  3.46  4.01 1116645 1296276

Device:   tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

hda   0.00  0.00  0.00  0  0

Device:   tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

hda   0.00  0.00  0.00  0  0

仔细看一下,如果是有检测次数的情况,那么第一次显示的是从开机到现在的数据,

第二次以后所显示的数据则代表两次检测之间的系统传输值。举例来说,上面的信息中,

第二次显示的数据则是两秒钟内(本例)系统的总传输量与平均值。

通过lspci及iostat可以大约了解到目前系统的状态,还有目前的主机硬件数据。知道这些信息后,我们就可以来玩一些比较不一样的东西。

21.3.2 驱动 USB 设备

在现在的计算机里面,你或许真的无法想象没有USB接口设备的主机,因为不论我们的键盘、鼠标、打印机、扫描仪、U 盘等,几乎都是使用到 USB 来作为传输的接口的。所谓这 USB(Universal Serial Bus)最早是在 1994 年被发展出来,到 1996 年前后发展出 version 1.0,当时的速度大约在 12Mbit/ s,到了 2000 年发展出 version 2.0,这一版的速度则提高到 480Mbit/s,这也是目前使用最广泛的一个速度。2008 年则发布 USB 3.0,这一版的速度比 2.0 要快 10 倍,不过目前市面上该产品还是非常少见 [6]

USB有很多的优点,包括它是可以扩展的,每个USB 接口都可以最多接到127个设备,速度快,又具有Plug and Play(即插即用)的优点,所以近期以来被用来作为携带式设备的主要数据传输接口。

关于USB的芯片版本

目前 USB 1.1 版本的控制器主要有两种规格,分别是:

OHCI(Open Host Controller Interface):主要由 Compaq 所开发,包括Compaq,SiS,ALi等厂商开发的芯片都使用这个模块;

UHCI(Universal Host Controller Interface):主要由Intel 所开发,包括Intel,VIA 等厂商开发的芯片都是使用这个模块。

由于我们的Linux会将这两种USB的驱动程序加载,因此不论你的USB是使用哪种芯片,我们的 Linux 都可以顺利检测到并且正确驱动的。至于 USB 2.0 在 Linux 上都以 Enahnced Host Controller Interface (EHCI)来驱动的。我们使用 lsmod 来找一下 hci 这个关键词看看鸟哥的测试主机驱动了多少USB模块了。

[root@www ~]# lsmod | grep hci

Module    Size Used by

uhci_hcd   25421 0

ohci_hcd   23261 0

ehci_hcd   33357 0

三个模块都有加载,再来找一下 ehci_hcd 的说明看看:

[root@www ~]# modinfo ehci_hcd

filename:  /lib/modules/2.6.18-92.el5/kernel/drivers/usb/host/ehci-hcd.ko

license:  GPL

author:  David Brownell

description: 10 Dec 2004 USB 2.0 'Enhanced' Host Controller (EHCI) Driver

srcversion: 006DD5CF82C35E943696BE7

….(下面省略)….

启动U盘

我们之前谈过 USB 的磁盘代号是/dev/sd[a-p]之类的,类似 SCSI 硬盘的代号,这是因为USB的磁盘设备使用SCSI相关的设备代号,因此,如果你要使用U盘的话,那么你的Linux主机就得要支持SCSI设备才行。

此外,为了让USB磁盘设备顺利被使用,因此,有时候还得要启动usb-storage模块才行。所以,光是有USB的uhci模块还不行,还得要配合usb-storage,而一般USB的设备都会被主动检测,内核也会主动加载 USB 设备的驱动模块,所以你应该不需要手动加载usb-storage才是。不过,如果老是无法驱动时,那么不妨手动加载usb-storage试看看。

顺利加载各个需要的模块之后,直接执行 fdisk -l 应该就可以看到你的 USBU 盘的设备代号才是。一般来说,如果是第一个 USB 磁盘设备的话,应该可以看到一个名为/dev/sda1的设备,使用mount将它挂载起来即可啊!

在这里要强调的是,如果你是使用类似笔记本电脑的2.5寸硬盘作为随身硬盘的话,由于它就是硬盘的规格,因此你可以看到一个完整的/dev/sda 之类的磁盘信息,你也可以进行额外的分区。但如果是闪存的话,闪存并不是传统的硬盘,它并不是使用磁盘读取头与磁盘来记录数据,因此你只能使用/dev/sda1之类的文件名来挂载,理论上是无法进行额外分区的!这部分要特别强调一下。

启动USB打印机

要驱动 USB 打印机也很简单啊!只要做好 USB 打印机的设备代号即可!反正我们的 usb模块已经加载了!目前的 CentOS 5.x 会主动帮我们新建打印机的设备文件名,所以下面的动作我们根本不需要进行。不过如果你的 Linux 是较老式的系统,那可能得要使用 mknod来新建起 USB 打印机才行。通过内核设备代码 [7]的查询,我们知道 USB 打印机的主要/次要设备代码为 180 /0~15,所以,新建的方法为:

假设你已经有 /dev/usb/lp0 ,那我们来尝试新建 /dev/usb/lp1 看看

[root@www ~]# mkdir -p /dev/usb

[root@www ~]# mknod /dev/usb/lp1 c 180 1

[root@www ~]# chown root:lp /dev/usb/lp1

[root@www ~]# chmod 660 /dev/usb/lp1

[root@www ~]# ls -l /dev/usb/lp1

crw-rw—— 1 root lp 180, 1 Jun 3 14:27 /dev/usb/lp1

[root@www ~]# echo "testing" > /dev/usb/lp1

在我们一般的生活当中,最常见的两种USB设备就是U盘与打印机了,所以鸟哥在这里仅就这两种设备来介绍启动的方法,如果你还有其他的USB设备要驱动的话,请参考下面这一篇的内容:

http://www.linux-usb.org/USB-guide/book1.html

21.3.3 使用lm_sensors 取得温度、电压等信息

玩计算机的朋友们一定都听过“超频”,所谓的“超频”就是让系统原有的工作频率增加,让CPU/PCI/VGA 前端总线速度提升到非正规的频率,以取得较高的计算机性能。这在早期对于单价还是很贵的计算机来说,可以让我们花比较少的钱去获得比较高性能的计算机。不过,超频要注意的地方可不少,包括电压不可高出CPU的负荷、CPU风扇必须要强有力以避免因为温度过高导致系统死机等。

不过现今的计算机速度已经够快了,我们的Linux主机也实在不建议你超频,因为整体性能可能增加不了多少,但是却会让你的主机寿命减少、系统不稳定。而由早期超频的经验可知,CPU的温度、系统的相关电压是影响主机是否稳定的一项重要指标。所以,如果能够随时掌握温度、电压,其实对于系统还是有一定程度的监控。

其实各大主要主板商与芯片组在主机内都会有温度、电压的检测器,这个我们可以在主板操作手册或者是在BIOS内的相关项目找到相关的温度、电压数据。在Windows系统当中,厂商有推出相关的软件来检测,那么在Linux当中呢?也是有啊!那就是lm_sensors这套好用的东西了!

目前较新的Linux distributions都默认会帮忙安装这套软件,但如果你的Linux是比较早期的版本,那么就只好请你自行前往http://www.lm-sensors.org/官方网站直接下载tarball并且安装它。

检测主板的型号

由于lm_sensors主要是依据主板芯片组的型号,带入相关的模块后,再检测其温度、电压的,如果该主板芯片组并不是lm_sensors所支持的模块,那自然就无法找出该芯片组的温压。所以,我们在使用lm_sensors之前,必须要确定主板是有提供温度、电压的,再来,必须要加载主板的驱动模块,然后才有办法使用lm_sensors来进行检测。

好消息是, lm_sensors 本来就提供给我们一个不错的主板芯片组检测程序,那就是sensors-detect 这个命令。检测到主板芯片组后,将该信息写入配置文件当中,就可以使用sensors命令直接读取目前的CPU、机壳、电源、风扇等的信息了!直接来做看看。

[root@www ~]# sensors-detect

sensors-detect revision 1.413 (2006/01/19 20:28:00)

….(中间省略)….

It is generally safe and recommended to accept the default answers to all

questions, unless you know what you're doing. <==就一直接受就对了!

We can start with probing for (PCI) I2C or SMBus adapters.

You do not need any special privileges for this.

Do you want to probe now? (YES/no): y

Probing for PCI bus adapters…

Use driver `i2c-sis630' for device 00:00.0: Silicon Integrated Systems SIS630

Probe succesfully concluded.

接下来的行为当中,反正你就一直按 Enter 就可以了!让它自动去检测!

To make the sensors modules behave correctly, add these lines to

/etc/modprobe.conf:

——cut here——

I2C module options

alias char-major-89 i2c-dev

——cut here——

To load everything that is needed, add this to some /etc/rc* file:

——cut here——

I2C adapter drivers

modprobe i2c-sis630

modprobe i2c-isa

I2C chip drivers

modprobe eeprom

modprobe it87

sleep 2 # optional

/usr/bin/sensors -s # recommended

——cut here——

Do you want to generate /etc/sysconfig/lm_sensors? (YES/no):

Copy prog/init/lm_sensors.init to /etc/rc.d/init.d/lm_sensors

for initialization at boot time.

上面就进行好型号的检测,并且主动新建了/etc/sysconfig/lm_sensors的参数配置文件。不过我们依旧需要进行一些额外的处理,包括让系统开机主动加载模块的功能。这样我们就能够直接使用lm_sensors来检测而不需要手动加载检测模块。你可以这样做:

[root@www ~]# vi /etc/modprobe.conf

alias char-major-89 i2c-dev

将刚才检测到的模块写入到这个文件当中!

[root@www ~]# vi /etc/rc.d/rc.local

I2C adapter drivers

modprobe i2c-sis630

modprobe i2c-isa

I2C chip drivers

modprobe eeprom

modprobe it87

sleep 2s

/usr/bin/sensors -s

[root@www ~]# chkconfig —list lm_sensors

lm_sensors 0:off 1:off 2:on 3:on 4:on 5:on 6:off

确定 lm_sensors 默认开机会启动即可!此时你可以重启,

或者执行上述的 modprobe 之后再进行下面的检测。

利用sensors检测温度、电压等硬件参数

检测的命令就是sensors啊!直接操作。

[root@www ~]# sensors

it87-isa-0290 <==使用到的模块功能!

Adapter: ISA adapter

VCore 1: +1.55 V (min = +1.42 V, max = +1.57 V)

VCore 2: +1.09 V (min = +2.40 V, max = +2.61 V) ALARM

+3.3V: +1.25 V (min = +3.14 V, max = +3.47 V) ALARM

+5V:  +2.69 V (min = +4.76 V, max = +5.24 V) ALARM

+12V: +5.82 V (min = +11.39 V, max = +12.61 V) ALARM

-12V: -17.05 V (min = -12.63 V, max = -11.41 V) ALARM

-5V:  -7.40 V (min = -5.26 V, max = -4.77 V) ALARM

Stdby: +2.07 V (min = +4.76 V, max = +5.24 V) ALARM

VBat: +0.40 V

fan1:  0 RPM (min = 0 RPM, div = 2)

fan2:  0 RPM (min = 3000 RPM, div = 2)  ALARM

fan3: 2689 RPM (min = 3000 RPM, div = 2)

M/B Temp: +33°C (low = +15°C, high = +40°C) sensor = diode

CPU Temp: +37°C (low = +15°C, high = +45°C) sensor = thermistor

Temp3:  -5°C (low = +15°C, high = +45°C) sensor = disabled

你可以发现一大堆的错误信息!没关系的!这是因为鸟哥的主板太旧,

导致 lm_sensors 误判,所以输出的结果就会有点差异!至少转速与温度是正常的。

基本上,只需要这样的步骤,你的主机就可以主动检测温度与电压,还有风扇转速等等信息。不过,事实上,由于主板设计的不同,所以检测的结果很有可能是有误差的。以鸟哥的情况来说,我所使用的主板型号是太旧了,lm_sensors 确实找到错误的信息啊!此时或许就需要进行调校了。调校的步骤很简单,先确定使用sensors显示的结果每个项目代表的意义(可以参考BIOS硬件检测结果的顺序来排列),然后进入/etc/sensors.conf进行修改即可。

如果想要以图表输出的话,那么不妨搭配 MRTG 来进行网页绘图。这部分网络上面的文章就比较多一点,也可以先参考鸟哥的一篇旧文章:

http://linux.vbird.org/linux_security/old/04mrtg.php

21.3.4 udev 与hal 简介

从上面的介绍中,我们不难发现目前新的Linuxdistributions大多能够类似窗口操作系统,就是能够实时检测即插即用硬件,例如 USB 接口的各项硬设备等。那我们也知道其实所有的硬件都是文件,这些设备文件必须要使用mknod才能创建的。那到底硬件如何检测与设备文件如何主动创建呢?这就与udev及HAL这两个东西有关了。

事实上,系统所有的硬件应该都是给内核管理的,但我们知道操作系统在内存内是受保护的,用户根本无权使用操作系统内核。为了解决这个问题于是有udev的产生。这个udev是个用户级软件,它可以让用户自行处理/dev 下面的设备,如此一来就能够解决一般用户在使用类似 USB 时需要额外硬件的问题 [8]

但我们如何知道系统上面多了个硬件呢?这时候就得要硬件抽象层(Hardware Abstraction Layer,HAL)的辅助了。HAL可以将系统目前的所有硬件进行快照,并持续检查这个快照的内容 [9]。如果有新的PnP硬件插入时,HAL就会发现目前的硬件与快照不同,此时就会通知udev进行新的设备的生成了。如此一来,两者的配合就能够让你的设备PnP。

目前这两个在 CentOS 上面都会是启动的,其中 udev 是在/etc/rc.d/rc.sysinit 启动后就启动了,而hal则是在/etc/init.d/haldaemon这个服务启动后才启动。让我们检查看看是否真的有启动啊!

[root@www ~]# pstree -p | egrep '(udevd|hal)'

|-hald(4814)—-hald-runner(4815)-+-hald-addon-acpi(4822)

|       |-hald-addon-keyb(4827)

|       `-hald-addon-stor(4837)

|-udevd(401)

确实有启动!一个是 udevd 一个是 hald 。

老实说,如果你已经启动了这两个家伙,那么其他的事不需要进行,交给这两个小玩意自己处理即可。但如果你想要多了解udev是如何进行设备的创建时,那么我们可以来玩玩下面的东东。

自定义设备名称进行设备创建

假设你想要将你的U盘取名为较有趣的设备,不想再使用类似/dev/sda1之类的名称时,可以怎么做呢?我们可以通过更改udev的规则(rule)来使用mknod创建不同名称的设备文件。举例来说,鸟哥这台测试机的硬盘使用为/dev/hda,因此第一个 USB 闪存设备应该是/dev/sda1才对!如果你的系统使用SATA磁盘,那么你的闪存可能就得要由/dev/sdb1开始编号起来了。

udev 创建设备文件的规则放置到/etc/udev/rules.d/目录下,在该目录下的文件可以依序进行处理的。以最简单的语法来看,在该目录下可以使用的变量与对应可以是:

KERNEL=="内核能够分析到的文件名",NAME="你要使用的设备文件名"

当然还有很多语法,不过这里我们先不介绍,有兴趣的查一下本文最后的链接去看看。假设鸟哥的/dev/sda1要取名字成为/dev/vbirdusb,你可以这样做:

1. 先在规则目录下添加一个文件,文件名设置为 99-vbirdusb.rules 好了

[root@www ~]# cd /etc/udev/rules.d/

[root@www rules.d]# vi 99-vbirdusb.rules

KERNEL=="sda1", NAME="vbirdusb"

上面这一行就足够。注意,文件名前的 /dev 不需要写入!

2. 插入一个U盘,然后检查看看:

[root@www rules.d]# ll /dev/sda* /dev/vbirdusb

brw-r——- 1 root disk 8, 0 Jun 3 16:43 /dev/sda

brw-r——- 1 root disk 8, 1 Jun 3 16:43 /dev/vbirdusb

唔! /dev/sda1 不见了,取而代之的是 /dev/vbirdusb 。

[root@www rules.d]# mount /dev/vbirdusb /mnt

[root@www rules.d]# df

Filesystem  1K-blocks Used Available Use% Mounted on

….(中间省略)….

/dev/vbirdusb  976064 192784 783280 20% /mnt

很有趣,设备名称被鸟哥改过了!

虽然这样很具有个性化的需求,不过总是不太可靠,万一哪天忘记自己进行了这些操作,偏偏用内核默认的文件名去处理时,会发生很多不明的错误啊!所以将刚才创建的数据反向删除回来。

1. 先卸载系统。

[root@www ~]# umount /dev/vbirdusb

2. 拔除U盘,并将规则文件删除!

[root@www ~]# rm /etc/udev/rules.d/99-vbirdusb.rules

3. 再插入U盘,测试一下文件名有没有恢复正常。

[root@www ~]# ll /dev/sda*

brw-r——- 1 root disk 8, 0 Jun 3 16:50 /dev/sda

brw-r——- 1 root disk 8, 1 Jun 3 16:50 /dev/sda1

看起来,文件名确实恢复正常。

21.4 重点回顾

CentOS 提供了好用的 setup 功能,可以帮忙设置认证方式、防火墙、键盘格式、网络、系统默认启动的服务、时区、X分辨率与硬件配置等。

因特网(Internet)就是TCP/IP,一般常见的取得IP的方法有手动直接设置、自动取得、拨号取得与cable宽带等方式。

主机的网络设置要成功,必须要有下面的数据:IP、Netmask、gateway 与 DNS 服务器等项目。

DNS服务器IP的指定,需写入/etc/resolv.conf这个文件中。

默认Linux的打印服务使用CUPS,更早之前则是使用lpd这个服务。

Linux支持的打印机网站查询:http://www.linuxfoundation.org/en/OpenPrinting。

打印组件主要有打印命令、打印操作、打印队列、打印服务、打印机。

网络打印机的格式主要有ipp、smb等类型。

CUPS可使用http://localhost:631来连接,然后使用浏览器界面来管理。

PPD指的是postscript打印定义文件,可视为打印机的驱动程序。

命令行管理打印机的方式主要通过 lpadmin,lpstat,lpq, lprm 等命令。至于产生打印操作的命令则为lpr,lp。

本章新增硬件信息的收集命令有lspci,lsusb,iostat等。

USB 的驱动模块主要有 OHCI 与 UHCI,至于 USB 2.0 则使用 EHCI。

lm_sensors可用来检测主板的温度、电压、风扇转速等功能。

动态管理硬件,通过用户层级的管理方式,主要通过udev与HAL的管理!

21.5 本章习题

简答题部分

如果你一定要创建一个不存在的打印机设备文件,例如/dev/usb/lp8,该如何处置?

如果你想要知道整个系统的周边硬件设备,可以使用哪个命令查询?

承上题,那么如果单纯只想要知道USB设备呢?又该如何查询?

试说明打印操作、打印队列、打印命令、打印服务与打印机之间的相关性。

说出三种以上目前常见的网络打印通信协议。

如何使用 lm_sensors 检测主机内的温度?详细说明整个步骤。

(挑战题)如果你的网络设置妥当了,但是却老是发现网络不通,你觉得应该如何进行测试?