正在加载...
分页: 97/186 第一页 上页 92 93 94 95 96 97 98 99 100 101 下页 最后页 [ 显示模式: 摘要 | 列表 ]

对Shell 脚本加密

[ 2009/04/06 17:24 | by selboo ]
shc是一个加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件.

用shell脚本对系统进行自动化维护,简单,便捷而且可移植性好.

但shell脚本是可读写的,很有可能会泄露敏感信息,如用户名,密码,路径,IP等.

同样,在shell脚本运行时会也泄露敏感信息.

shc是一个加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件.

这就很好的解决了上述问题.

shc 安装  
yum -y install shc

使用方法:

shc -r -f script-name 注意:要有-r选项, -f 后跟要加密的脚本名.

运行后会生成两个文件,script-name.x 和 script-name.x.c

script-name.x是加密后的可执行的二进制文件.

./script-name 即可运行.

script-name.x.c是生成script-name.x的原文件(c语言)
Tags: ,
一、PHP加速器介绍

      PHP加速器是一个为了提高PHP执行效率,从而缓存起PHP的操作码,这样PHP后面执行就不用解析转换了,可以直接调用PHP操作码,这样速度上就提高了不少。

      Apache中使用mod_php的请求、响应执行流程:

1、Apache接收请求。
2、Apache传递请求给mod_php。
3、mod_php定位磁盘文件,并加载到内存中。
4、mod_php编译源代码成为opcode树。
5、mod_php执行opcode树。

      PHP加速器相应的就是第四步,它的目的就是防止PHP每次请求都重复编译PHP代码,因为在高访问量的网站上,大量的编译往往没有执行速度快呢?所以这里面有个瓶颈就是PHP的重复编译既影响了速度又加载了服务器负载,为了解决此问题,PHP加速器就这样诞生了。

二、PHP加速器安装与配置

1、安装配置APC

      APC全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”,它是PHP PECL中的一个扩展,好像是facebook在使用它,下面开始安装(ubuntu环境):      

01.$wget http://pecl.php.net/get/APC-3.0.19.tgz
$tar xvzf APC-3.0.19.tgz
$cd APC-3.0.19/APC-3.0.19
$/usr/local/php/bin/phpize
$./configure –enable-apc –enable-apc-mmap –with-php-config=/usr/local/php/bin/php-config
$make
$sudo make install


下面我们再配置APC,因为我的PECL扩展路径改变了,所以我得移动下编译好的文件:


$sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/apc.so /usr/local/php/lib/php/extensions/PECL


      然后我们再编辑php.ini文件进行配置,请把下面的代码加入到php.ini中即可:

extension_dir = "/usr/local/php/lib/php/extensions/PECL"
extension = apc.so
; APC
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64
apc.optimization = 1
apc.num_files_hint = 0
apc.ttl = 0
apc.gc_ttl = 3600
apc.cache_by_default = on


      这样重启apache就会在phpinfo()信息中显示。

2、安装配置eAccelerator

      eAccelerator的前身其实是truck-mmcache,因为开发truk-mmcache的人被Zend给招安了,所以开发eAccelerator的人继承了truk-mmcache的一些特性,设计出eAccelerator加速器。安装如下:

01.$wget http://jaist.dl.sourceforge.net/sourceforge/eaccelerator/eaccelerator-0.9.5.tar.bz2
02.$tar -jxf eaccelerator-0.9.5.tar.bz2
03.$cd eaccelerator-0.9.5
04.$/usr/local/php/bin/phpize
05.$./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php/bin/php-config
06.$make
07.$sudo make install
08.$sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so /usr/local/php/lib/php/extensions/PECL


      将下面代码加入php.ini文件中


01.extension = eaccelerator.so
02.; eAccelerator
03.eaccelerator.shm_size = "16"
04.eaccelerator.cache_dir = "/tmp/eaccelerator"
05.eaccelerator.enable = "1"
06.eaccelerator.optimizer = "1"
07.eaccelerator.check_mtime = "1"
08.eaccelerator.debug = "0"
09.eaccelerator.filter = ""
10.eaccelerator.shm_max = "0"
11.eaccelerator.shm_ttl = "0"
12.eaccelerator.prune_period = "0"
13.eaccelerator.shm_only = "0"
14.eaccelerator.compress = "1"
15.eaccelerator.compress_level = "9"
      

      创建缓存目录,重启apache

01.$sudo mkdir /tmp/eaccelerator
02.$sudo chmod 777 /tmp/eaccelerator
03.$sudo /usr/local/apache/apachectl restart


      在phpinfo()检查是否安装成功.

3、安装配置XCache

      XCache作为国人自己开发的东西,做小菜鸟的我也感到骄傲,而且XCache无论在速度还是性能上都做的不错。下面就赶紧让我们品尝它吧!


01.$wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
02.$tar xvzf xcache-1.2.2.tar.gz
03.$cd xcache-1.2.2
04.$/usr/local/php/bin/phpize
05.$./configure –enable-xcache –enable-xcache-coverager –with-php-config=/usr/local/php/php-config
06.$make
07.$sudo make install
08.$sudo mv /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so /usr/local/php/lib/php/extensions/PECL


      在php.ini添加配置信息:


01.extension = xcache.so
02.; xcache
03.xcache.admin.user = "admin"
04.xcache.admin.pass = "(执行) echo ’(你的密码)’|md5sum(得出的密文)"
05.;
06.xcache.size = 24M
07.xcache.shm_scheme = "mmap"
08.xcache.count = 2
09.xcache.slots = 8k
10.xcache.ttl = 0
11.xcache.gc_interval = 0
12.
13.xcache.var_size = 8M
14.xcache.var_count = 1
15.xcache.var_slots = 8k
16.xcache.var_ttl = 0
17.xcache.var_maxttl = 0
18.xcache.var_gc_interval = 300
19.xcache.test = Off
20.xcache.readonly_protection = On
21.xcache.mmap_path = "/tmp/xcache"
22.xcache.coredump_directory = ""
23.xcache.cacher = On
24.xcache.stat = On
25.xcache.optimizer = Off
26.;
27.xcache.coverager = On
28.xcache.coveragedump_directory = ""


      创建缓存目录,重启apache


01.$sudo mkdir /tmp/xcache
02.$sudo chmod 777 /tmp/xcache
03.$sudo /usr/local/apache/bin/apachectl restart


      去查看phpinfo()信息吧!

三、PHP加速器测试

1、测试环境

硬件:   AMD Athlon 64 X2 Dual Core Processor 4400+ @ 2.2GHz  CPU,  2GB 内存. 160GB SATA 硬盘
软件:   Linux Ubuntu server Gutsy 7.10, Apache 2.2.4, MySQL 5.0.45 和 PHP 5.2.3
测试指令:  ab -c5 -n3000 http://example.com/    
(我们使用的是Apache Benchmark (ab) 工具,并发连接为5,3000次请求)

2、测试结果

无任何加速器:


01.Document Path:          /
02.Document Length:        21757 bytes
03.Concurrency Level:      5
04.Time taken for tests:   288.255212 seconds
05.Complete requests:      3000
06.Failed requests:        0
07.Write errors:           0
08.Total transferred:      66777000 bytes
09.HTML transferred:       65271000 bytes
10.Requests per second:    10.41 [#/sec] (mean)
11.Time per request:       480.425 [ms] (mean)
12.Time per request:       96.085 [ms] (mean, across all concurrent requests)
13.Transfer rate:          226.23 [Kbytes/sec] received
14.Connection Times (ms)
15.min  mean[+/-sd] median   max
16.Connect:        0    0   0.5      0      19
17.Processing:   181  479 186.0    444    1822
18.Waiting:      166  461 184.7    427    1708
19.Total:        181  479 186.0    444    1822
20.Percentage of the requests served within a certain time (ms)
21.50%    444
22.66%    525
23.75%    577
24.80%    619
25.90%    732
26.95%    819
27.98%    946
28.99%   1012
29.100%   1822 (longest request)  
    

APC加速器:


01.Document Path:          /
02.Document Length:        21757 bytes
03.Concurrency Level:      5
04.Time taken for tests:   98.530068 seconds
05.Complete requests:      3000
06.Failed requests:        0
07.Write errors:           0
08.Total transferred:      66777000 bytes
09.HTML transferred:       65271000 bytes
10.Requests per second:    30.45 [#/sec] (mean)
11.Time per request:       164.217 [ms] (mean)
12.Time per request:       32.843 [ms] (mean, across all concurrent requests)
13.Transfer rate:          661.84 [Kbytes/sec] received
14.Connection Times (ms)
15.min  mean[+/-sd] median   max
16.Connect:        0    0   0.0      0       2
17.Processing:    58  163  71.2    155    2452
18.Waiting:       53  158  69.6    150    2329
19.Total:         58  163  71.2    155    2452
20.Percentage of the requests served within a certain time (ms)
21.50%    155
22.66%    178
23.75%    193
24.80%    204
25.90%    235
26.95%    258
27.98%    285
28.99%    302
29.100%   2452 (longest request)  


eAccelerator加速器:


01.Document Path:          /
02.Document Length:        21757 bytes
03.Concurrency Level:      5
04.Time taken for tests:   95.983986 seconds
05.Complete requests:      3000
06.Failed requests:        0
07.Write errors:           0
08.Total transferred:      66777000 bytes
09.HTML transferred:       65271000 bytes
10.Requests per second:    31.26 [#/sec] (mean)
11.Time per request:       159.973 [ms] (mean)
12.Time per request:       31.995 [ms] (mean, across all concurrent requests)
13.Transfer rate:          679.39 [Kbytes/sec] received
14.Connection Times (ms)
15.min  mean[+/-sd] median   max
16.Connect:        0    0   0.1      0       3
17.Processing:    57  159  91.3    148    3830
18.Waiting:       50  152  89.8    142    3704
19.Total:         57  159  91.3    148    3830
20.Percentage of the requests served within a certain time (ms)
21.50%    148
22.66%    174
23.75%    193
24.80%    205
25.90%    239
26.95%    263
27.98%    289
28.99%    309
29.100%   3830 (longest request)


      XCache加速器:


01.Document Path:          /
02.Document Length:        21757 bytes
03.Concurrency Level:      5
04.Time taken for tests:   99.76300 seconds
05.Complete requests:      3000
06.Failed requests:        0
07.Write errors:           0
08.Total transferred:      66777000 bytes
09.HTML transferred:       65271000 bytes
10.Requests per second:    30.28 [#/sec] (mean)
11.Time per request:       165.127 [ms] (mean)
12.Time per request:       33.025 [ms] (mean, across all concurrent requests)
13.Transfer rate:          658.19 [Kbytes/sec] received
14.Connection Times (ms)
15.min  mean[+/-sd] median   max
16.Connect:        0    0   0.0      0       2
17.Processing:    59  164  83.4    155    3367
18.Waiting:       52  156  66.4    148    1802
19.Total:         59  164  83.4    155    3367
20.Percentage of the requests served within a certain time (ms)
21.50%    155
22.66%    178
23.75%    196
24.80%    206
25.90%    237
26.95%    263
27.98%    287
28.99%    305
29.100%   3367 (longest request)  


3、结果摘要

请求时间(秒) 单次请求时间(毫秒) 最大内存占用(MB) 最小内存占用(MB)
None  10.41            96.08                  24                              24
APC 30.45               32.84                  21                              21
eAccelerator 31.26   31.99                  23                              18
XCache 30.28          33.02                  29                              19

四、PHP加速器比较结果总结

     1、通过测试得出eAccelerator在请求时间和内存占用综合方面是最好的。
     2、通过测试得出使用加速器比无加速器在请求时间快了3倍左右。
     3、通过各个官方观察,XCache是更新最快的,这也说明最有发展的。

      以上是总结结果,你也许会问我到底用那个加速器好呢?我只能告诉你,首先,用一定比不用好,其次每个加速器还有一些可以调优的参数,所以要根据你的系统环境而定,然后,我个人觉得你可以详细研究下eAccelerator和XCache,这两款潜力还是很大的,最后我从比较专业的测试网站搞了一张结果图:
点击在新窗口中浏览此图片

Linux 服务介绍

[ 2009/04/04 03:15 | by selboo ]
服务列表(按字母顺序排列)
服务名  必需(是/否)  用途描述  注解
acon  否  语言支持  特别支持左手书写语言:阿拉伯语,波斯语和希伯莱语
acpi  否  电源管理  手提电脑电池电扇监控器
acpid  否  监听精灵进程  此进程监听并分配内核中的acpi事件
adsl  否  内部ADSL开关控制  只有你的计算机内部有互联网连接adsl开关时才用到此服务
alsa  否  高级Linux声音构件  这个单独的声音系统实际包含在内核中
anacron  否  周期命令调度程序  一个任务调度工具
apmd  否  电源管理  手提电脑电源管理
apmiser  否  电源管理  另一手提电脑电池延长器
arpwatch  否  以太网IP地址配对监控器  用主机名监控并记录远程IP地址
atd  否  周期命令调度程序  一个任务调度工具
autofs  否  自动安装服务  几个命令服务文件系统自动安装之一.一些此类服务专门针对发行配套软件,如果你使用的发行配套软件拥有自己的自动安装系统,不要用这一个.
bluetooth  否  蓝牙技术核心  用于所有蓝牙服务
bootparamd  否  导入服务  以前导入无盘客户端/瘦客户端的方法.最新型的方法为零配置系统(zeroconf system).
canna  否  日语转换引擎  
capi4linux  否  基本CAPI子系统  
cpqarrayd  否  硬件服务  康柏独立冗余磁盘阵列(Raid Array)监控器
cpufreq  否  硬件服务  控查并配置CPU频率精灵程序模块
cpufreqd  否  硬件服务  此服务自动衡量CPU频率来减少过热情况.在超频时有用.
crond  是  周期命令调度程序  一个任务调度工具
Cups-lpd  否  使旧式Lunux或商业Unix系统连接到打印主机上.  只有在允许旧式系统访问打印机时才有用
cups  是  公共Unix打印系统  进行打印的必要功能
cvs  否  并发版本系统  用于管理多用户文档
devfsd  否  系统维护  此服务只清除动态桌面目录,除非你的系统经常崩溃,否则不需要此服务.
dhcpd  否  DHCP服务器  你的网络足够大,使用静态IP很麻烦吗?此项服务对你的网络进行DHCP IP配置,方便网络应用.
diald  否  拨号网络智能自动拨号器  此服务一经请求,即连接上网络.你一旦输入电子邮件,点击发送,它就自动连接,发送电邮并断开.
dkms  否  DKMS自安装导入  发行配套软件专用工具,用于OEM类型安装.它允许管理员密码的最初导入设置以及常规应用的用户名密码,系统的最后配置.
dm  是  显示管理器  X服务器的核心,使用图形用户界面(GUI)时必需.
dnbc  否  数字网络绑定Chrooter  这是一个简单的bash脚本,它将一个BIND服务器放入一个chroot牢笼中.安装BIND,发布脚本并重启.
Drakxtools-http  否  小型服务管理服务器  远程系统管理的发行配套软件专用工具.
dund  否  蓝牙拨号网络  
fam  否  文件系统变更监控器  文件系统所有改变的记录器
finger  否  数据远程访问  此服务允许你远程访问用户登录日期,最后登录日期与时间.用于不在办公室时监控雇员的工作习惯,主要的安全违反,因为你正有效地在线发布公司机密数据.
freshclam  是  ClamAV更新器  用于自动更新ClamAV
gpm  是  鼠标  鼠标驱动器控制台模式
haldaemon  否  硬件监控系统  此服务监控硬件改变,为你改变新的或更改过的硬件.
harddrake  否  硬件服务  发行配套软件专用硬件探测与配置
heartbeat  否  高可用性服务  此服务旨在增加重要服务与服务器的优先级
hidd  否  蓝牙H.I.D.服务器  
hplip  否  惠普Linux打印与成像  旧版惠普整成产品供应驱动器
hpoj  否  Pital?init,惠普办公喷墨打印机驱动器  惠普办公喷墨打印机旧式驱动器.新式驱动器包含在打印机的打印驱动器内.
httpd  否  Apache网络服务器  在系统上应用此服务有两个原因,一是要用它作为网络服务器,二是用它作为网址开发器.如果没有此二项,则不必安装Apache.
hylafax?server  否  企业传真机?调制调解器服务  此服务仅用于1类与2类传真机.如果你想用hylafax通过调制调解器发送传真,必须运行此服务.它并不是唯一有效的传真工具.
ibod  否  按需ISDN MPPP带宽  与拨号网络一同使用,按需连接到网络.
identd  否  TCP连接鉴定  
imaps  否  安全IMAP服务器  
imaps  否  IMAP服务器  
iplog  否  用主机名或远程主机记录TCP,UDP,ICMP.  有用的网络监控工具
ipop2  否  POP2邮件服务器  
ipop3  否  POP3邮件服务器  
ipsec  否  加密与验证通信  KLIPS为内核一半,PLUTO为用户空间一半.在远程访问情况下十分有用.
iptables  是  基于Packet过滤防火墙内核  所有优秀的Linux防火墙都基于此项服务
ipvsadmin  否  Linux核心IP虚拟服务器  最早的Linux网络系统之一,已不常用.
irda  否  红外线设备界面  以前的无线设备支持
keytable  是  键盘映射  此服务明确告诉系统你正在使用哪种键盘
kheader  否  导入服务  此服务自动重建内核头导入
lads  否  登录异常探测系统  跟踪登录企图并警告入侵企图的工具
laptop mode  否  电源管理  减少电力耗费,延长手提电脑电池寿命的工具
leafnode  否  X? INETD NNTP服务  
lisa  否  局域网信息服务器  
lmsensors  否  硬件健康监控器  此服务要求系统主板支持并有合适的监控系统,如CPU温度与电压监控器.
mailman  否  GUN邮件列表管理器  常用的邮件列表工具,带Python编写的管理网络界面.它允许列表成员发送邮件并回复邮件到同一个地址进行交流.它还可用于向那些发送请求的用户传送新闻时讯/产品更新.
mandi  否  交互式防火墙  允许暂时无线访问系统的专用服务,将为当前任务开放iptables防火墙,仅用于无线设备访问.在用户许可情况下才可使用,不能自动使用.
mdadm  否  软阵列监控服务  这也是一个用于上述软件阵列栏的管理工具
mdnsresponder  否  零配置DNS配置工具  
messagebus  是  事件监控服务  此服务在必要时向所有用户发送广播信息,如服务器将要重启.
mon  是  系统监控精灵进程  许多系统服务要求此服务来运行
mysqld  否  MySQL服务器  如果你不需要这个数据库,不要打开它.
named  否  绑定(BIND)服务器  这就是声名狼藉的名称服务器
netplugd  否  网卡精灵进程  此服务监控网络界面,根据信号关闭或启动它,主要用于不经常连接的手提电脑.
network  是  网络  此服务打开网卡,或为调制调解器供电.
nfs  否  网络文件共享  此服务使用户访问NFS共享文件,为NFS系统客户机所必需.
nfsfs  否  网络文件共享服务器  只有在网络服务器上才被激活
nfslock  否  NFS文件锁定  只有在使用NFS网络/文件共享功能时,此服务才被激活.
nifd  否  Howl 客户端  此服务为零配置网络/系统提供ipv4链接本地服务
nscd  否  密码与群查找服务  此服务用于减慢N.I.S/Y.P.nist,ldap和hesiod之类的服务.专门为这些服务提供更长的中断时间.
ntpd  否  NTP服务器的第4版  
numlock  否  数字锁定键灯光控制  此服务保持数字锁定键的激活状态,打开键盘上的数字键区.
Oki4daemon  否  OKI4和兼容win打印机的兼容性精灵进程  只有在你有这些打印机时才可用
pand  否  蓝牙个人区域网络  用于基于网络的家庭区域蓝牙技术
partmon  是  分区监控  此服务跟踪安装分区上的剩余空间.大多数文件系统浏览器使用它来计算指定分区上的剩余空间.
pcmcia  否  个人电脑内存卡国际协会  
pg_autovacum  否  PostgreSQL维护  此服务自动运行PostgreSQL所需的空间(vacuum)来减少磁盘空间,从数据库中拖动临时表格,并删除PostgreSQL建立的临时文件.
pop3s  否  安全POP3服务  POP3 SSL服务器
portmap  否  RPC支持  支持那些应用rpc的罕有的应用软件
postgresql  否  Postgresql数据库引擎  只有在运行或开发Postgresql数据库驱动应用软件时才用到此服务
postfix  否  电子邮件服务器  与sendmail兼容的电子邮件服务器,比sendmail更新,也变得比sendmail更通用.
pptp  否  PPP断电服务  PPP频道断电服务,UPS打开时使用,以避免电源返回系统时出现文件锁定问题.
prelude  否  IDS  入侵探测系统
psacct  否  进程计算  活动进程追踪器,实际上是资源的浪费.
rawdevices  是  分配raw设备,阻止其使用  DVDS,oracle DBMS等需要此服务
rsync  否  远程同步  使指定目录树上的文件远程同步的服务器,常用于维护镜象地址,也在备份时用于保持公司文件为最新状态.
saned  否  网络扫描仪  从网络上的任何工作站提供扫描仪访问
shorwall  是  防火墙  一个非常优秀的IPTables防火墙
smartd  否  自我监控服务  用于智能设备的OS访问,此服务允许Linux告诉你是否设备将要变坏,但这要依靠设备的精确智能特性.
smb  否  Samba网络服务  此服务提供samba服务,实现Windows网络兼容性.
snmpd  否  简单的网络管理协议  用于小型(家庭办公室)网络
sound  否  声音系统  此为Linux声音系统的核心,适用于桌面系统,在服务器上则是资源的浪费.
squid  否  高速缓存工具  用于高速缓存网络页面及DNS登录
ssh?xinetd  否  X?inetd OpenSSH服务器  OpenSSH的按需运行版本
sshd  否  OpenSSH服务器  如果你需要SSH访问你的系统时才开启此服务,将不会使用x?inetd版本.
subversion  否  并发版本系统  CVS的新型替代品
swat  否  Samba网络管理工具  基于Samba管理的网络
syslog  是  系统登录  一项必要的服务,控制整个系统上的所有登录.
tmdns  否  多点传送DNS响应器  用于零配置环境
ultrabayed  否  ThinkPad工具  此服务为你的IBM ThindPad探测ultrabay,并在适当情况下启动/关闭IDE接口.
upsd  否  NUT精灵进程及驱动器  一个不间断地电源监控及报告工具,此服务向中心地址报告,产生关于UPS统计的数据库.
upsmon  否  UPS监控工具  此服务监控UPS的状况,在其运行低下时关系系统.
vncserver  否  虚拟网络计算服务器  在项目中应用VNC时非常有用
Webmin  否  远程管理工具  发行配套软件Agnostic远程管理工具.在机器不能总是直接访问,如网络服务器集群时有用.
winbind  否  Samba名称服务器  Samba网络运行所必需.此服务将用户与群数据从windows网络映射到Linux工作站中.
wine  否  Wine并非竞争者  此服务使MS Windows可在Linux上执行,WINE是商业产品Crossover Office的限制版本.
wlan  否  控制精灵进程  由于服务通常由init进程控制,此控制服务不常用.
x?inetd  是  监控并控制其它服务器的服务器  这是一项必需的服务,它实际上减少了服务器上CPU的负载.如果你需要SSH,ftp等但并不总是需要,x?inetd版本将在请求,甚至是远程需求时启动它们.此服务让它们生效,但如果它们一天/周只使用几次的话,又释放了时钟周期.
xfs  是  X字体服务器  你任何时间需要使用图形用户界面(GUI),就需要此服务.
ypbind  否  SUN的YP服务器名称服务器  此服务用于基于GLIBC的NIS/YP网络服务
Tags: ,
优化前
[codes=sql]select count(distinct v_yjhm)
  from (select v_yjhm
          from zjjk_t_yssj_o_his a
         where n_yjzl > 0
           and d_sjrq between to_date('20070301', 'yyyymmdd') and
               to_date('20070401
Tags: , ,

mknod

[ 2009/03/31 21:14 | by selboo ]
mknod -m 666 /dev/null c 1 3
mknod - make block or character special files
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
    option 有用的就是 -m 了
    name   自定义
    type   有 b 和 c 还有 p
    主设备号
    次设备号

主设备号是由/usr/src/linux/include/linux/major.h定义的,如下定义了一个DOC设备:
#define IGEL_FLASH_MAJOR 62

假如有一个命令mknod doc b 62 0 :
其中的doc为定义的名字,b指块设备,0指的是整个DOC。如果把0换为1,则1指的是DOC的第一个分区。2是第2个,依次类推。

至于mknod console c 5 1 的意思也很相似:
console是设备的名字
c指字符设备
5是该设备在major.h中定义的标记
1是第一个子设备

mknod console c 5 1
console为设备文件名,自己随便取
c是指字符型设备 (可选b,块设备)
5是主设备号 /dev/devices里面记录现有的设备
找个没有用的就可以了
1是次设备号,当你要给两个同样的设备上一个驱动的时候就要分了,从0开始,1就是第二个了


设备文件

对于每种硬件设备,系统内核有相应的设备驱动程序负责对它的处理。而在Unix中,使用设备文件的方式来表示硬件设备,每种设备驱动程序都被抽象为设备文件的形式,这样就给应用程序一个一致的文件界面,方便应用程序和操作系统之间的通信。

习惯上,所有的设备文件都放置在/dev目录下。

$ ls -l /dev/rfd0 /dev/fd0
brw-r-----  9 root  operator    2,   0 Nov 12 13:32 /dev/fd0
crw-r-----  9 root  operator    9,   0 Nov 12 13:32 /dev/rfd0

在上面的列表中可以看到原来显示文件大小的地方,现在改为显示两个用逗号分隔的数字。这是系统用来表示设备的两个重要的序号,第一个为主设备号(major number),用来表示设备使用的硬件驱动程序在系统中的序号;第二个为从设备号(minor number),硬件驱动程序使用它来区分不同的设备和判断如何进行处理。FreeBSD下主设备号用8位表示,而从设备号用24位来表示。事实上设备文件的名字并不重要,重要的是这两个设备号,操作系统使用它确定硬件驱动程序,并与硬件驱动程序进行通信。

1) 磁盘和块设备文件
在Unix下将设备分为两种,块设备和字符设备,其中块设备主要用于随机存取的目的,磁盘为这一类设备的代表,而字符设备用于顺序存取的目的,例如磁带或终端设备就属于这个类别。

磁盘设备的命名方式在前一章中提到过,磁盘设备由磁盘名、磁盘的序号、分区的序号、以及FreeBSD子分区的序号来表示,例如在设备 wd0s1a中,wd为驱动程序,此后为设备序号,0表示为这个驱动程序的第一个设备,Unix习惯上从0开始计数,第三部分的分区序号为s1,注意这里为第一个分区,因为s1是从1开始向下排列的,与一般Unix的习惯不同,这是因为分区的概念是一个DOS概念,因此这里也使用与DOS相对应的顺序,最后一个a为FreeBSD子分区的顺序,每个UFS基本分区可以有8个子分区,这8个分区按照习惯用于不同的目的,例如wd0s1a用于根文件系统, wd0s1b用做交换分区,使用wd0s1c表示整个硬盘分区wd0s1。因此可以将fd0c用于对整个软盘fd0进行存取,wcd0c用于对整个光盘 wcd0进行存取等。

传统名字,例如wd0a,可以用于表示第一个UFS分区上的a子分区,如wd0s1a。一般一个硬盘上只有一个UFS分区,因此可以直接使用传统名字标识磁盘分区。

在使用ls命令列表时,系统使用c(character)标识一个字符设备文件,使用b(block)标识块设备文件。

$ ls -l /dev/*wd0s1

crw-r-----  1 root  operator    3, 131072 Oct 31 19:59 /dev/rwd0s1

brw-r-----  1 root  operator    0, 131072 Oct 31 19:59 /dev/wd0s1

虽然硬盘设备为块设备,用于随机存取的目的。但它也可以被顺序存取,这种方式称为raw方式。使用raw方式存取硬盘,就需要一个对应的字符类型的设备文件,对应wd0s1硬盘设备的字符类型硬盘设备为rwd0s1,设备名中第一个字母使用r表示对硬盘的raw方式顺序存取。

由于设备文件就代表了整个设备,就可以使用FreeBSD的标准命令以raw方式直接操作设备文件,从而直接访问硬件设备。利用这种方式,能完成很多有用的工作,但是这种方式也非常危险,例如对硬盘设备文件的操作失误会破坏整个硬盘的数据。幸好大部分直接访问设备的操作都为读取相应数据的操作,而不需要写入磁盘设备。

当某个设备不可使用,则其对应的设备文件也不能正常访问,因此直接访问设备文件可以判断对应的设备是否真正正常。例如,判断连接到第一个串口, ttyd0上的鼠标是否正常工作,使用命令 “cat
但是如果存在其他的程序接管了这个设备,有可能就不能得到正确的结果。例如系统运行了moused,由moused控制了鼠标端口,那么”cat
cat或其他命令,没有控制具体接收到数据的多少,更有效的系统工具是dd,它能精确输入输出一定数量的数据。例如:

# dd if=/dev/rwd0 of=mbr count=1 bs=512

这将以512字节为单位,读取硬盘wd0上一个单位的数据,保存到名字为mbr的文件中,通常这是硬盘wd0上的主引导扇区。

2) 设备文件的创建
通常情况下,安装系统时已经创建了常用的设备文件,可以直接访问这些设备文件来访问设备。但在用户重新定制内核,并添加了新硬件驱动程序之后,新驱动程序对应的设备文件就可能不存在。在FreeBSD中,最常见的例子就是在内核中增加声卡的驱动程序时,就需要创建相应设备文件。

创建设备文件的基本方式是使用mknod,但是必须知道该设备的正确设备号才可以。另一种简单的方式是使用/dev目录下的shell程序 MAKEDEV来完成,MAKEDEV实质上就是记录了很多设备的名字与其设备号之间的关系的程序,因此它能使用正确的设备号来创建设备。首先进入 /dev目录,然后再执行MAKEDEV。

# cd /dev
# sh MAKEDEV snd0

MAKEDEV将使用设备名作参数创建设备文件,同时也创建这个设备文件依赖的其他相关设备文件。MAKEDEV的参数,并不一定为创建的设备文件名。例如建立 “MAKEDEV vty8” 将建立ttyv0到ttyv7共8个设备文件,使用 “MAKEDEV wd1s1a” 命令,将建立 wd1、wd1s1、wd1s2等,以及wd1s1a、wd1s1b等设备文件。也可以使用all做MAKEDEV的参数,这将首先清除/dev目录下的所有设备文件,然后MAKEDEV创建所有预设的设备文件。一般情况下这将创建足够多的设备文件,其中的大部分设备文件在具体的系统中不会用得到。

如果对一个系统中没有(或者即使有但内核没有支持或探测到)的设备对应的设备文件进行操作,则系统返回Device not configured的错误信息。

MAKEDEV将使用mknod和对应设备的正确参数,包括字符或块设备、主设备号和从设备号来建立相应的设备文件。管理员也可以直接使用 mknod创建设备文件,但这就必须将这些设备参数统统指定正确才行。因此除非对系统中的硬件驱动程序特别熟悉,一般不直接使用mknod来创建设备文件。
分页: 97/186 第一页 上页 92 93 94 95 96 97 98 99 100 101 下页 最后页 [ 显示模式: 摘要 | 列表 ]