在 Linux 系统上面侦测、维护、变更硬件的方法
除了手动设置之外,其实系统提供了一个名为 setup 的指令给系统管理员使用喔!这个指令还能够设置网络呢。 此外,我们也应该要知道如何在 Linux 底下连接打印机吧!否则一些数据怎么印出来? 另外,如果你的主板支持 CPU 温度侦测的话,我们还能够利用 lm_sensors 这个软件功能来侦测硬件的电压、风扇转速、 CPU 温度等信息呢!
系统设置除了使用手动的方式编辑设置档之外 (例如 /etc/inittab, /etc/fstab 等),其实在 Red Hat 系统的 RHEL, CentOS 及 Fedora 还有提供一支综合程序来管理的,那就是 setup 这个指令的功能啰!老实说, setup 其实只有在 Red Hat 的系列才有, 在其他的 Linux distributions 并不存在,因此,鸟哥并没有很要求一定要学会这家伙的。 只不过,setup 还是挺好用的,所以我们还是来玩玩吧!
这个 setup 的处理方法非常的简单,就是利用 root 的身份下达这个指令,如果你已经使用远程操作系统的话, 记得最好切换一下语系成为英文语系 (比较不会出现边框是乱码的情况) ,结果就会出现如下的画面了。
如上图所示,那就是 setup 提供的各项系统设置功能。这个画面的使用方式其实在图中的最底下一行有说明了, 可以利用 [tab] 按键在三个画面中切换,使用 Run Tool 可以开始设置该项目,使用 Quit 可以离开 setup 指令。 那么上面的主菜单部分有哪些功能呢?这些设置的基本功能是这样的:
底下我们就来约略的介绍一下这些玩意儿吧!除了网络 IP 的设置外,其余的部分鸟哥会很快的带过去而已。 毕竟 setup 仅是一个统整的工具,每个设置项目其实都牵涉到各自的基础功能,那些基础功能还得要持续摸索的...
在按下了『 Authentication configuration 』项目后,会出现如下画面:
我们的 Linux 除了使用自己提供的用户密码验证机制之外,还能够使用其他外部身份验证服务器所提供的各项验证功能喔。 在上面图标的左侧 User Information 的地方指的是:我们系统上的用户可以使用什么方式对外取得帐号信息, 也就是说,这部主机除了 /etc/passwd 的帐号之外,还能够使用其他的帐号来登录系统的。我们支持的帐号管理服务器主要有 LDAP, NIS, Winbind 等。
至于右侧的 Authentication 则是登录时需要提供的身份验证码 (密码) 所使用的机制为何。 在缺省的情况下,我们身份验证仅参考本机的 /etc/passwd, /etc/shadow 而已,而且使用 MD5 的密码验算机制, 因此上图右侧的部分仅会有最上方两个而已。事实上,这个部分的设置主要是修改了 /etc/sysconfig/authconfig ,同时还加入了各个服务器的用户端程序设置功能哩。
你一定会问,那么什么时候可以用到这个机制呢?思考一下,如果你的网络环境是电脑教室, 你希望每个同学都能够有自己的帐号来登录每部主机。此时,你会希望每部主机都帮同学创建同一个帐号吗? 那如果每一个同学都想要修改密码,那就糟了!因为每部主机都得要重新修改密码才行啊!这个时候帐号管理服务器就很重要了。 他的功能有点像底下这样:
如上图所示,我 vbird 想要登录某一部主机时,这部主机会向外要求帐号信息,就是最上方那部服务器。 此时,你只要在最上方的服务器上将该帐号设置好,并且在每部主机都利用 NIS 或 LDAP 功能来指定身份查找的方向, 那么 vbird 就能够使用同一组帐号密码来登录每部主机了,这样管理是否很方便呢?因为只要管理一部服务器即可嘛! 我们在服务器篇谈到 NIS 时再来实作这个环境喔!
网络其实是又可爱又麻烦的玩意儿,如果你是网络管理员,那么你必须要了解局域网路内的 IP, gateway, netmask 等参数,如果还想要连上 Internet ,那么就得要理解 DNS 代表的意义为何。如果你的单位想要拥有自己的网域名称, 那么架设 DNS 服务器则是不可或缺的。总之,要设置网络服务器之前,你得要先理解网络基础就是了! 没有人愿意自己的服务器老是被攻击或者是网络问题层出不穷吧!^_^
但鸟哥这里的网络介绍仅止于当你是一部单机的 Linux 用户端,而非服务器!所以你的各项网络参数只要找到网络管理员, 或者是找到你的 ISP (Internet Service Provider) ,向他询问网络参数的取得方式以及实际的网络参数即可。 通常网络参数的取得方式在台湾常见的有底下这几种:
了解了网络参数的取得方法后,你还得要知道一下我们通过啥硬件连上 Internet 的呢?其实就是网络卡嘛。 目前的主流网卡为使用以太网路协定所开发出来的以太网卡 (Ethernet),因此我们 Linux 就称呼这种网络接口为 ethN (N 为数字)。 举例来说,鸟哥的这部测试机上面有一张以太网卡,因此鸟哥这部主机的网络接口就是 eth0 啰 (第一张为 0 号开始)。
好了,那就让我们通过 setup 来设置网络吧!按下『 Network Configuration 』会出现如下画面:
上图中那个 eth1.bak 是系统捉错的文件,因为这个程序会跑到 /etc/sysconfig/network-scripts/ 目录下找出文件名为 ifcfg-ethN 的文件内容来显示的。因为鸟哥仅有一张网卡,因此那个 eth1 不要理会他!直接点击 eth0 之后就会产生如下的画面:
上图中那个 Name 与 Device 名称最好要相同,尽量不要修改他!这里的设置是这样的:
如果你是使用 ADSL 拨接的话,那么上面的设置项目就不适用了。 你得要使用 (1)adsl-setup 来进行设置,然后再以 (2)adsl-start 来启动 ADSL 拨接, 详细的方法我们会在服务器篇再来介绍的。上面谈的都是 IP 的取得方式,并没有谈到主机名称解析的部分 (DNS)。 只有手动设置者才需要进行 DNS IP 的设置,使用 dhcp 及 adsl-start 者都不需要进行底下的动作啦! 假设你的 DNS 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: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
由于网络涉及的范围相当的广泛,还包括如何进行网络调试的工作等,鸟哥将这部份写在服务器篇了,所以这里不再多费唇舌。 假设你现在已经连上 Internet 了,那么防火墙的设置则不可不知啊!底下就来谈谈。
防火墙的认识是非常困难的,因为你必须要有很强的网络基础概念才行。CentOS 提供的这个简单的设置其实有时候反而会让我们困扰不已。基本上,这里仅是介绍『你可以这样做』,但并不代表『你必须这样做』! 所以,有兴趣的还是得要再继续钻研网络技术喔! ^_^。好了,在按下 Firewall configuration 后,会出现如下画面:
上图中主要出现两个部分,一个是关于 SELinux 的部分,一个则是防火墙的部分。SELinux 我们在第十七章介绍过了,这里不再浪费篇幅。 请依据你的需求设置 Enforcing, Permissive 或 Disabled 吧!(当然最好还是务必要启动 SELinux 啦!)
防火墙的部分,由于我们安装时建议不要启动防火墙, 因此上图你会看到『 Disabled 』的部分被选择了。但是由于现在你的系统已经上网了 (假设已经上网了), 那么你务必要启动防火墙来管理网络才好。由于缺省你的防火墙会开放远程主机对你的登录连接, 因此最好使用 Customize (客户设置) 来改变设置比较好喔!按下『 Customize 』会出现如下图标:
这个地方不是三言两语讲的完的!包括信任设备,以及允许进入的服务器封包~很是麻烦。基本上,你只要这样想就好了:
基本上,这个动作仅是在创建 /etc/sysconfig/iptables 这个文件而已。 而这个文件缺省是不存在的 (因为我们没有启动防火墙啊!) 。这里你先有个概念即可,因为,我们未来会介绍以 shell script 的方式创建属于您自己的防火墙系统,细节我们会在服务器篇慢慢作介绍的啊!
如果你已经有网络了,记得在这个项目的设置中,于图 1.3.1 选择防火墙为『 Enable 』的状态,按下『 Customize 』进入图 1.3.2 当中取消 ssh 的勾选,最后再回到 1.3.1 当中按下『 OK 』来启动 Linux 用户端的防火墙设置吧! 这样你的系统就具有最起码的防火墙功能啰! ^_^
某些情况底下你的键盘可能会发生一些对应错误的情况,举例来说,使用的键盘并非台湾常见的 104 按键导致很多英文对应不起来。 此时你可以使用 setup 来修改喔!按下『 Keyboard configuration 』会出现如下的画面:
其实这个文件就仅会修改 /etc/sysconfig/keyboard 啦!很简单的设置项目。
我们在第十八章谈过系统服务的启动与关闭, 当时介绍过 ntsysv 吧?没错~这个 System services 的项目就是会调用出 ntsysv 这支程序来处理服务的设置啦!详细的设置请回第十八章参考吧!这里不再浪费篇幅啰! 因为....鸟哥实在太会碎碎念了,再加上图标,唔!好占篇幅~ @_@
我们知道地球是圆的,所以想要看王建民在纽约投球都得要三更半夜才有办法看的到!这也就是说, 其实在同一个时间点全世界的时钟指的时间都不相同啊!我们的 Linux 是支持多国语系的国际化操作系统, 所以你可以将这部主机拿到任何地方且不需要修改系统时钟,因为系统会主动的依据你提供的时区来变化时间的。 当你将笔记本电脑带到美国纽约并且想要变更成为美国时间时,可以按下『 Timezone configuration 』的项目:
如上图所示,你在上半部画面中,可以使用键盘方向键来选择正确的位置,然后再用 [tab] 移动到 [OK] 即可! 时区的设置,其实就是找出与 /etc/sysconfig/clock 有关的设置项目而已。实际上,上面图标出现的咚咚,就与 /usr/share/zoneinfo/ 目录内的数据有关而已。
X Window System 我们会在第二十四章再来详细说明,这里仅是告知一下, 如果你想要变更你的 X 窗口接口的分辨率时,就可以使用这个项目了。不过要注意的是,这个项目的运行不可以使用类似 ssh 通信协定连接后,在远程主机上运行这个设置项目。因为这个项目的运行会产生一个新的 X 终端机在 tty7 或 tty8 上头, 因此,你如果使用远程连接机制的话,会看不到画面的啦!理解乎?
在你点击了『 X configuration 』之后,就会出现如下的图样。其中以硬件及设置两个页面较常被变更。 先来瞧瞧图标吧:
如上所示,由于窗口分辨率的范围与屏幕的支持有关,因此你必须要先处理屏幕的更新频率后才能够修改窗口分辨率。 所以我们会先处理『硬件』部分,鸟哥的屏幕是旧式的 4:3 传统屏幕,所以选择 1024x768 ,如果你的屏幕是新型的宽屏幕, 那么请自行挑选适当的分辨率吧。处理完毕后就能够开始设置窗口分辨率了,如下所示:
如上图所示,此时会出现可调整的分辨率啦!整理整理就能够显示出你想要的窗口分辨率。 其实这些设置都是修改 /etc/X11/xorg.conf 这个设置档啦!等到了第二十四章时,我们再来详细的谈谈这玩意吧! 至于关于 X 方面的注册表则在 /var/log/Xorg.0.log 啰!
鸟哥个人认为,这个 setup 的工具是很好用的~只是,如果能够完全清楚整个系统架构的话, 再来玩这个小程序会比较好啦! ^_^。另外,原本的旧版 CentOS 还有提供打印机的设置功能,不过由于新版的数据已经转由 CUPS 负责打印, 而打印可以使用浏览器接口来显示,因此就取消了这个 setup 的组件啦!底下我们就来玩玩如何简单的设置你的打印机吧!
打印机对于日常生活来说,很重要吧!呵呵~没错啊!尤其我们的 Linux 主机如果未来还要作为 Printing server 的话,那么自然就得要先创建好打印机的连接啦!在本章里面我们仅谈论一下如何让你的 Linux 可以连接到打印机, 让你的 Linux 可以顺利的将文档数据打印出来啦!现在就来谈谈先!
要谈论 Linux 的打印,首先就得要知道 Linux 底下整个打印的行为是怎样的一个流程呢?而且, 也得要了解一下你的硬件是否支持打印工作嘛!在硬件部分,你必须要在 BIOS 将打印机的支持启动才行! 不过,这大概都属于旧式打印机才需要的动作啦!为啥呢?因为现在打印机大部分都是 USB 或者是网络打印机了, 根本不需要使用 25 针串口的支持!
除了主机本身的支持之外,你的打印机也必须要能够支持 Linux 才行!其实并不是 Linux 的问题啦!而是打印机制造商必须要能够提供给 Linux 用的驱动程序,这样你的 Linux 才能够使用该型号的打印机。 老实说,鸟哥是 HP 打印机的爱好者,因为 HP 打印机对 Linux 的支持非常好!但是另一牌的 L 开头的打印机总是很慢或者不推出给 Linux 用的驱动程序,所以该牌的打印机很难安装在 Linux 主机上!真困扰。
那到底你该如何确认你的打印机有支持 Linux 呢?或者是,如果你想要购买新的打印机时, 如何查找该打印机能否在 Linux 上面安装呢?很简单,直接到底下的网站去查找一下即可喔!
举例来说,鸟哥现在的研究室有一部 HP 的 LaserJet P2015dn 打印机,我想要知道这部打印机对 Linux 的支持度好不好, 那就先进入上述的网站链接,出现如下的画面:
在如上画面中请按下『 Printers 』来观察打印机的特色吧!会出现如下画面:
在上图中填入正确的厂牌 (HP) 以及正确的打印机型号 (LaserJet P2015dn) 后,请按下『 Show 』那个按钮, 该网站就会从数据库内捉出支持度的情况给你看,如下图所示:
在显示的画面中,你最要注意的是那个企鹅数量啦!如果达到 3 只,那就代表支持度是非常完美的。 两支企鹅是可接受的范围内。如果是小于一只企鹅时,那么该打印机对 Linux 的支持可能就是比较差的喔! 还好,鸟哥这部含有网络功能的打印机还有两只企鹅的支持,等一下应该能够顺利安装到俺的 Linux 测试机上吧!
你有没有发现,在打印机还没有启动电源的情况底下,其实我们还是可以通过软件来将某个任务栏印出来的, 只是该项工作就会被放入到等待的环境中 (队列) 。为什么会这样呢?这是因为整个打印的行为被区分为许多部分, 每个部分都可以单独存在的啦!我们将整个部分绘制成下图来瞧瞧:
我们大概可以将上图区分为几个部分来说明:
如果你的打印机具有网络卡,那么你当然可以使用网络连接到你的打印机上面啰!不过,这种打印机提供什么服务呢? 也就是说,你可以使用什么连接协定来连上打印机呢?常见的打印机连接分享方式有底下这些:
CentOS 5.x 缺省提供的就是 CUPS 的 IPP 协定喔!而且 CUPS 缺省开机就启动了, 因此,你可以随时随地的以 Web 接口设置自己的打印机呢!真是非常方便! 那如果你的打印机是通过线材 (USB/串口) 连上主机的呢?那就得要考虑底下的连接接口啰!
事实上,管理 Linux 的打印机是非常简单的一件事情,因为你只要启动 CUPS 之后,再以浏览器接口来管理即可。 不过,在缺省的情况底下,要进行浏览器接口的管理动作时,你必须要:
如果你想要在局域网路内将打印机的控制权挪出来给其他用户管理时,就得要修改 CUPS 的设置了。 在这里,我们先以本机的方式来处理打印机的连接喔!首先,鸟哥以具有网络卡的打印机 HP LaserJet P2015dn 这部为例 (因为鸟哥也只有这部打印机具有网卡啊!),这部打印机的 IP 为 192.168.201.253,而鸟哥 Linux 测试机 IP 为 192.168.201.250。然后,你可以这样做:
如果想要加入 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 的支持吧!
再来查看看你的主机是否已经启动了 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 服务端口口, 因此就得要加上冒号 (:) 来指定端口口连接!顺利的话,应该可以出现如下画面:
主画面主要可以分为上下两个按钮列来说明,其中又以下方的按钮列为常见的操作项目。我们会用到的按钮大概就是:
不啰唆,赶紧来添加打印机看看!按下『 Add Printer 』项目吧:
上面图标中,最重要的其实是那个『 Name 』的项目,那就是你打印机的队列名称!未来所有打印的工作都是放在该名称底下排队的! 鸟哥的这个打印机名称比较复杂啦!你可以取个比较简单的名字,以后比较容易使用指令列软件来打印啦! 至于位置 (Location) 与描述 (Description) 都是这个打印机的说明,可写可不写!写完后按下『 continue 』吧!
接下来则是选择这个打印机队列所连接的打印机提供什么服务的打印功能?你可以看到前一小节我们使用 nmap 的时候就发现 port 9100 就是 HP JetDirect ,因此我们可以选择上图的第一个项目。 由于这部打印机也提供 port 515 的 LPD 服务,因此你也可以选择上图的『 LPD/LPR Host or Printer 』项目。 不过,在这里鸟哥选择的是第一项啦!选择完毕后再按下『 Continue 』进入打印机的实体位置项目,如下图:
上图有提供很多范例,我们由于使用到 port 9100 ,因此使用的就是 socket:// 那个范例使用的状态。 填写正确的位置后,接下来按下『 Continue 』来继续选择打印机的型号吧!
如上图所示,我们选择的是 HP 的厂牌!厂牌选择完毕后会出现如下图的型号选择:
但上图中我们并没有看到 P2015dn 这部打印机的型号!那怎办?没关系,可以连接到 http://www.linuxfoundation.org/en/OpenPrinting 网站下载适当的驱动程序后, 按下上图中的『浏览』按钮来选择该文件即可。不过,从该网站的介绍中,可以发现鸟哥的这部打印机似乎使用缺省的 Postscript 驱动程序即可,该网站也没有提供这部打印机的驱动程序啊!那怎办?没关系,在 /usr/share/cups/model/ 目录下就有缺省的驱动程序啦!所以请按下『浏览』来处理一下!
如上图所示,选择正确的驱动程序,然后再按下『打开』按钮,最后按下『 Add Printer 』按钮就可以进入管理员密码输入画面:
到此为止我们的打印机设置就 OK 了!如果你回到 CUPS 的进站画面,并且点击 Printers 之后,就会出现如下的打印机画面:
上面画面中的按钮都看的懂吧?其中比较重要的是那个『 Set As Default 』项目, 那就是设置为『缺省打印机』,当你产生打印工作后,该工作缺省就会丢给这个 hp_lj_p2015dn 的队列来处理的意思喔。 接下来,当然就是按下『 Print Test Page 』看看能否打印出正确的画面啰!如果可以顺利的打印,恭喜您! 打印机设置成功!
上一小节提到的是网络打印机,那如果你的打印机是一般普通的具有 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 之后再按下『Manage Printers』会出现如下画面:
由上图我们可以发现 CUPS 已经捉到了打印机了!连驱动程序都安装妥当!这是怎么回事啊? 这是因为 CentOS 提供了 HAL 的机制来处理 PnP 设备的缘故。关于 HAL 的机制我们会在下一小节再来讨论。 不过由于这个设备使用的是 HAL 提供的设备文件名,我们如果想要使用 /dev/usb/lp0 来作为打印机的输出文件名的话, 那么就自己来创建一个打印机的队列吧!同样的在 CUPS 画面中按下『 Add Printer 』来添加一个打印机:
如上图所示,你要指定的是那个有 #1 的位置,那就是我们的第一个 USB 插槽位置喔!
如上图所示,最后就会多出一个名为 deskjet_f380 的打印机名称,接下来当然就是『 Print Test Page 』测试看看能否打印啰。 如果能够打印得出来,那就是设置妥当了。所以说, USB 打印机的设置要简单太多啰! ^_^
想像一个状况,你仅有 USB 打印机安装在 Linux 上头,整个办公室或实验室里面仅有这部打印机。 虽然你可以加装打印服务器来使 USB 打印机变成网络打印机,但总是得多花钱啊! 有没有办法可以让你的本机打印机变成网络打印机呢?有的,那就是修改 CUPS 的设置即可。如何修改呢? 我们还是通过 CUSP 的浏览器接口来处理即可喔!选择『Administration』会出现如下画面(在画面的最右边):
如上图所示,在箭头指定的地方进行勾选即可。勾选完毕后按下『 Change Settings 』就能够让你的 CUPS 变成打印服务器! 而你原本的打印机就会成为:『ipp://你的IP:631/printers/打印机队列名称』,举例来说,鸟哥这部 Laserjet p2015dn 在网络上看到的就会是:『ipp://192.168.201.250/printers/hp_lj_p2015dn』的名称啊! 你可以在其他用户端电脑上面以这个 URI 来进行连接哩!
事实上我们刚刚在上面所进行的各项动作大多是在修改 /etc/cups/ 里面的几个文件而已啊!几个重要的文件为:
既然只是改了这几个设置档,你当然也可以使用 vim 去编辑,不过,因为涉及硬件连接的问题, 因此还是建议使用 web 接口来进行修改啦。不过,某些时候如果你没有浏览器接口时,那么使用终端机接口的指令来修改也是可以的。 我们底下只以鸟哥办公室拥有的这一部 HP P2015dn 的激光打印机来作为范例喔!
首先你必须要前往打印机网站下载你的打印机驱动程序定义档。鸟哥之前已经查找过,这部打印机使用缺省的 PPD 文件即可。 所以鸟哥这部打印机的驱动程序定义档基本上在: /usr/share/cups/model/postscript.ppd.gz 。 如果你有自己下载自己打印机的驱动程序时,请将你下载的文件放置到 /usr/share/cups/model/ 目录下, 因为后续要操作的指令会到此目录中找寻驱动程序定义档喔!
接下来请确定你的 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 的样式喔!这个地方也请先记录下来。
指令设置/删除打印机的方式就是通过 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 用的打印机定义档!
设置完打印机后,来观察一下目前的打印机状态吧!底下的 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 就能够看的清楚啰~接下来,让我们开始来使用打印指令产生打印工作吧!
如果你没有浏览器或者是说,你没有图形接口的软件时,可以通过 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 :就是打印的份数啊! # 1. 打印出 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
我们已经有产生三个工作,但是第一个工作有顺利的打印 (打印机是打开的),因此还有两个工作尚未完成才对! 那我们如何知道还有哪些打印工作在队列内呢?可以使用底下的指令来观察喔!
[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 的号码啦! # 1. 将使用 lpq 看到的第 11 号打印工作取消! [root@www ~]# lprm 11 [root@www ~]# lpq -a Rank Owner Job File(s) Total Size active root 10 (stdin) 1024 bytes # 瞧!只剩下一个工作而已啰!
整个指令模式处理打印机的任务大约到此为止,其他的,还是使用 Web 接口去管理比较方便啦!
假设你目前的 CentOS 主机上面接着一台 USB 接口的打印机,这台 USB 接口的打印机是 Samsung 的 ML-1210 打印机, 请问,您可以如何安装这部打印机?
[root@www ~]# lpadmin -p samsung -v usb:/dev/usb/lp0 \ > -m Samsung-ML-1210-gdi.ppd -E
另外,如果老是看到屏幕前面显示:『 Printer not connected; will retry in 30 seconds...』, 很有可能是因为我们的设备代号输入错误,请使用『 lpstat -t 』查阅一下是否正确的设置好了? 基本上,安装一部 Linux 有支持的打印机,真的是快速啦!
『工欲善其事,必先利其器』,这是一句大家耳熟能详的古人名言,在我们的信息设备上面也是一样的啊! 如同前面小节谈到的,如果你的打印机本身就没有提供给 Linux 系统用的驱动程序,那么我们就不要浪费时间在该打印机设备上了。 同理可证,如果我们想要好好的使用 Linux 安装在自己的主机上面,那么主机上面的硬件信息最好还是能够了解一下的好。 现在一般主板也都有提供 CPU 电压与温度的侦测,那我们也能够通过 lm_sensors 这个软件来取得该数据喔! 底下就让我们来玩玩吧!
现在我们知道系统硬件是由操作系统内核所管理的,由第二十章的开机流程分析中,我们也知道 Linux kernel 在开机时就能够侦测主机硬件并加载适当的模块来驱动硬件了。 而内核所侦测到的各项硬件设备,后来就会被记录在 /proc 与 /sys 当中了。 包括 /proc/cpuinfo, /proc/partitions, /proc/interrupts 等等。 更多的 /proc 内容介绍,先回到第十七章的进程管理瞧一瞧先!
那除了直接调用出 /proc 底下的文件内容之外,其实 Linux 有提供几个简单的指令来将内核所侦测到的硬件叫出来的~ 常见的指令有底下这些:
lspci, lsusb, iostat 是本章新谈到的指令,尤其如果你想要知道主板与各周边相关设备时,那个 lspci 真是不可多得的好工具!而如果你想要知道目前 USB 插槽的使用情况以及侦测到的 USB 设备, 那个 lsusb 则好用到爆!至于 iostat 则是一个即时分析软件,与 vmstat 有异曲同工之妙! 既然本节是想要使用 lm_sensors 分析各组件的温度与电压,那么这几个指令得要来使用看看才行啊! ^_^
基本上,想要知道你 Linux 主机的硬件配备,最好的方法还是直接拆开机壳去察看上面的信息 (这也是为何第零章会谈计概啊)! 如果环境因素导致您无法直接拆开主机的话,那么直接 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 后面接的那个怪东西每个设备的总线、插槽与相关函数功能啦!那个是我们硬件侦测所得到的数据啰! 你可以对照底下这个文件来了解该串数据的意义:
其实那个就是 PCI 的标准 ID 与厂牌名称的对应表啦! 此外,刚刚我们使用 lspci 时,其实所有的数据都是由 /proc/bus/pci/ 目录下的数据所取出的呢!了解了吧! ^_^
刚刚谈到的是 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 的东西,你也可以自行去查找一下喔!更多信息我们留待下一小节再来讨论吧!
刚刚那个 lspci 找到的是目前主机上面的硬件配备,那么整部机器的保存设备, 主要是硬盘对吧!请问,您硬盘由开机到现在,已经访问多少数据呢?这个时候就得要 iostat 这个指令的帮忙了! 不过,缺省 CentOS 并没有安装这个软件,因此你必须要先安装他才行!如果你已经有网络了, 那么使用『 yum install sysstat 』先来安装此软件吧!否则无法进行如下的测试喔!
[root@www ~]# iostat [-c|-d] [-k|-m] [-t] [间隔秒数] [侦测次数] 选项与参数: -c :仅显示 CPU 的状态; -d :仅显示保存设备的状态,不可与 -c 一起用; -k :缺省显示的是 block ,这里可以改成 K bytes 的大小来显示; -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 可以约略的了解到目前系统的状态啊! 还有目前的主机硬件数据呢!知道这些信息后,我们就可以来玩一些比较不一样的东西啰! ^_^
在现在的电脑里面,你或许真的无法想像没有 USB 接口设备的主机~ 因为不论我们的键盘、鼠标、打印机、扫描仪、U盘等等,几乎都是使用到 USB 来作为传输的接口的。 所谓这 USB (Universal Serial Bus) 最早是在 1994 年被发展出来,到 1996 年前后发展出 version 1.0 ,当时的速度大约在 12Mbit/second,到了 2000 年发展出 version 2.0 ,这一版的速度则提高到 480Mbit/second, 这也是目前使用最广泛的一个速度。2008 年则发布 USB 3.0,这一版的速度比 2.0 要快十倍喔! 不过目前市面上的产品还是非常的少见。(注2)
USB 有很多的优点啦,包括他是可以延伸的,每个 USB port 都可以最多接到 127 个设备! 速度又快,又具有 Plug and Play (随插即用) 的优点,所以近期以来被用来作为携带式设备的主要数据传输接口呢!
目前 USB 1.1版本的控制器主要有两种规格,分别是:
由于我们的 Linux 会将这两种 USB 的驱动程序加载,因此不论你的 USB 是使用哪种芯片,我们的 Linux 都可以顺利的侦测到并且正确的驱动的啦!至于 USB 2.0 在 Linux 上都以 Enhanced 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 ....(底下省略)....
我们之前谈过 USB 的磁盘代号是: /dev/sd[a-p] 之类的,类似 SCSI 硬盘的代号, 这是因为 USB 的磁盘设备使用 SCSI 相关的设备代号,因此,如果您要使用 USB U盘的话,嘿嘿!那么您的 Linux 主机就得要支持 SCSI 设备才行~
此外,为了让 USB 磁盘设备顺利的被使用,因此,有时候还得要启动 usb-storage 模块才行~ 所以啰,光是有 USB 的 uhci 模块还不行,还得要配合 usb-storage 啦~ 而一般 USB 的设备都会被主动的侦测,内核也会主动的加载 USB 设备的驱动模块, 所以你应该不需要手动加载 usb-storage 才是。不过,如果老是无法驱动时,那么不妨手动加载 usb-storage 试看看。
顺利加载各个需要的模块之后,直接下达 fdisk -l 应该就可以看到您的 USB U盘的设备代号才是!一般来说,如果是第一个 USB 磁盘设备的话, 应该可以看到一个名为 /dev/sda1 的设备,使用 mount 将他挂载起来即可啊!
在这里要强调的是,如果你是使用类似笔记本电脑的 2.5 吋硬盘作为随身硬盘的话,由于他就是硬盘的规格, 因此你可以看到一个完整的 /dev/sda 之类的磁盘信息,你也可以进行额外的分割。但如果是快闪碟的话, 快闪碟并不是传统的硬盘,他并不是使用磁盘读取头与磁盘盘来记录数据,因此你只能使用 /dev/sda1 之类的文件名来挂载, 理论上是无法进行额外分割的喔!这部份要特别强调一下。
要驱动 USB 打印机也很简单啊!只要做好 USB 打印机的设备代号即可!反正我们的 usb 模块已经加载了嘛! 目前的 CentOS 5.x 会主动的帮我们创建打印机的设备文件名,所以底下的动作我们根本不需要进行。 不过如果你的 Linux 是较老式的系统,那可能得要使用 mknod 来创建起 USB 打印机才行。 通过内核设备代码(注3)的查找,我们知道 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 设备要驱动的话, 请参考底下这一篇的内容啊!
玩电脑硬件的朋友们一定都听过所谓的『超频』这玩意儿,所谓的『超频』就是让系统原有的运作时脉增加, 让 CPU/PCI/VGA 前端总线速度提升到非正规的频率,以取得较高的电脑性能。 这在早期对於单价还是很贵的电脑来说,可以让我们花比较少的钱去获得比较高性能的电脑哩! 不过,超频要注意的地方可不少,包括电压不可高出 CPU 的负荷、CPU 风扇必须要强有力, 避免因为温度过高导致系统当机等等。
不过现今的电脑速度已经够快了,我们的 Linux 主机也实在不建议您超频,因为整体性能可能增加不了多少, 但是却会让您的主机寿命减少、系统不稳定呢!而由早期超频的『技术培养』过程当中,我们知道『CPU 的温度、系统的相关电压』 是影响主机是否稳定的一项重要指针喔!所以啰,如果能够随时掌握温度、电压, 其实对于系统还是有一定程度的监控啦。
其实各大主要主板商与芯片组,都会有温度、电压的侦测器在主机内,这个我们可以在主板操作手册或者是在 BIOS 内的『 Monitor 』项目找到相关的温度、电压数据。在 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 缺省开机会启动即可!此时你可以重新 reboot , # 或者运行上述的 modprobe 之后,在进行底下的侦测啰!
侦测的指令就是 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 来进行网页绘图~ 这部分网络上面文章就比较多一点,也可以先参考鸟哥的一篇旧文章:
从上面的介绍中,我们不难发现目前新的 Linux distributions 大多能够类似窗口操作系统,就是能够即时的侦测随插即用硬件! 例如 USB 接口的各项硬件设备等等。那我们也知道其实所有的硬件都是文件,这些设备文件必须要使用 mknod 才能创建的! 那到底 (1)硬件如何侦测与 (2)设备文件如何主动创建呢?这就与 udev 及 HAL 这两个东西有关了。
事实上,系统所有的硬件应该都是给内核管理的,但我们知道操作系统在内存内是受保护的,用户根本无权使用操作系统内核。 为了解决这个问题于是有 udev 的产生。这个 udev 是个用户层级软件,他可以让用户自行处理 /dev 底下的设备! 如此一来就能够解决一般用户在使用类似 USB 时,需要额外硬件的问题。(注4)
但我们如何知道系统上面多了个硬件呢?这时候就得要硬件抽象层 (Hardware Abstraction Layer, HAL) 的辅助了。 HAL 可以将系统目前的所有硬件进行快照,并持续查看这个快照的内容(注5)。如果有新的 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 # 看起来,文件名确实恢复正常啰!