VIcacti
һ����ظ��
http://www.cacti.net/downloads/
cactiͨ��ҳ����ͼ�λ���ʽչʾrrdtool��������Ļ�ͼ������cacti����Ҳ���ø��ӵ�rrdtool�����ˣ��������rrdtool������÷�����֪������cacti��ѡ������壬�����rrdtool������÷��Ϳɾ�ȷ����cacti�ˣ���
����һ����������rrdtool create������ݿ��ļ���cactiͨ��ҳ��������ֵ����DS����ݴ���ȡ�ã��㱣���Ὣrrdtool create����Զ���ɣ�
���ܶ��������Ե�ִ���ܹ�ȡ����ݵ������cacti�û��°�ȡ��ݵ�������������ƻ���������ȡ�ص���ݱ�����.rrd�ļ��У���һƪ��ͨ��ű����ϵ���.rrd�д���ݣ���
����������rrdtool��ͼ��չʾ
��cacti֧��ģ�壨�ñ����Ѷ���õ����Դ������rrd�ļ��Ķ��巽ʽ��ȡ����ݵķ�ʽ��ͼ��չʾ�ķ�ʽ����cacti֧�ֲ�����ƣ��в����������û��������������չcacti���ܣ�����tholdΪcacti�ṩ�������ܣ�Ĭ��cactiֻ��ͼ��չʾ��������������thold�Ϳ�ʵ��
cacti��php��������ҳ��������LAMP��LNMPƽ̨�����DZ��밲װphp�Ļ�Ҫ����--enable-sockets������LAMPƽ̨��LNMPƽ̨������cacti��cactiƽʱ������ֻ�����û�����ҳʱ��չʾ
cacti���Ӹ�server״̬���������������û�����鿴������cacti���õĻ������û���Ȩ������ƣ��й���Ա�û����ܴ���ͼ�κͲ鿴ͼ�Σ�����ͨ�û������鿴ͼ�Σ�ֻ�ܼ�ز������ã�
cacti�ṩ����ģ�壺
ͼ��ģ�壨����ͼ������λ��Ƶģ���
���ģ�壨������λ�ȡ��ݣ��������ĸ�.rrd�ļ��У���
����ģ�壨��Ҫ����100̨server��ÿ��server�ϼ��ӵ�ָ�겻һ��Ҫ���ӵ�server��������ͬ��ָ�궨��Ϊģ�壬�綼Ҫ��ص�ָ����CPU���ڴ桢���̵�ʹ���ʣ���ģ������Щ������һ���ɼ�ض��������������������ģ���ǹ��������ģ���ͼ��ģ�壬��ֱ��Ӧ�õ�ij���������������Լ��ӣ�ʡ��һ�����Ķ��壩
cactiҪָ����rrdtool��ȡ��ݣ�cacti��ȡ��ݵķ�ʽ��
script��
SNMP����ȡԶ��server����ݣ���
ssh����ȡԶ��server����ݣ���Զ��server�Ϸ�һ�ű������нű��������ȡ�أ�Ҫʹ�Զ����У�Ҫ���û�����Կ����֤��
cacti�û�ȡ��ݵ����������Ե�ִ�У���ͨ��rrdtoolupdate������.rrd�ļ��У�ȡ����ݡ�������ݣ���ͨ�����ģ�嶨�彫ȡ�õ������α������������ڲ�ͬ���������Ҫ��ij����ݻ�ͼ�������ģ�����ڶ�Ӧ�������������ܹ�ȡ����ݲ�������cacti�����ϣ��������ģ�嶨��cacti�����������ϻ�õ���ݱ��������ĸ�ʽ�ķ��������ӵ�ָ�겻һ��չʾ�����ݾͲ�һ��ͼ��ģ��ʵ�ֿ��ٵ���ij�������ϣ����������֪��ȥ��Щ����ļ��л�ȡʲô��ľۺϺ����������ݣ���ͨ��ʲô��ķ�ʽչʾ
cacti����ǿ���ڿ�Դ��ط��������У��ܶ���ҵ�������cacti���϶��ο����ģ�cacti���?����ȡ��ݣ�Ҳ��������ݣ���չʾ��ݣ����Ķ���rrdtool��cactiֻ���ṩ�˹����ܶ��ѣ�cacti֧���û�������������Ĺ��?�ܣ����cacti�Լ�����ϢҪ����������Ҫ�õ�mysql������cacti����LAMPƽ̨��LNMPƽ̨�����е���ҳ����
������װʹ�ã�
[root@www ~]# uname -a
Linux www.magedu.com 2.6.32-358.el6.x86_64#1 SMP Tue Jan 29 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@www ~]# yum groupinstall "Desktop platform" "Development tools"
[root@www ~]# yum -y install httpd mysql mysql-server mysql-devel libxml2-devel mysql-connector-odbc perl-DBD-Mysql unixODBC php php-mysql php-pdo
[root@www ~]# yum -y install net-snmp net-snmp-utils net-snmp-libs lm_sensors
[root@www ~]# tar xf cgilib-0.5.tar.gz
[root@www ~]# cd cgilib-0.5
[root@www cgilib-0.5]# make
[root@www cgilib-0.5]# cp libcgi.a /usr/local/lib
[root@www cgilib-0.5]# cp cgi.h /usr/include
[root@www cgilib-0.5]# yum -y install libart_lgpl-devel
[root@www cgilib-0.5]# yum -y install pango-devel* cairo-devel*
[root@www cgilib-0.5]# cd
[root@www ~]# tar xf rrdtool-1.4.5.tar.gz
[root@www ~]# cd rrdtool-1.4.5
[root@www rrdtool-1.4.5]# ./configure --prefix=/usr/local
[root@www rrdtool-1.4.5]# make && make install
[root@www ~]# tar xf cacti-0.8.8a.tar.gz -C /var/www/html/
[root@www ~]# ln -sv /var/www/html/cacti-0.8.8a/ /var/www/html/cacti
"/var/www/html/cacti"-> "/var/www/html/cacti-0.8.8a/"
[root@www ~]# ls /var/www/html
cacti cacti-0.8.8a
cacti-0.8.8a.tar.gz��0.8.8�д���bug��0.8.8֮ǰ�����а汾Ĭ�϶����������ܣ���Ҫ���ⰲװ�����ܣ�0.8.8a����汾�Ժ�IJ���Ѽ��ɣ�������ⰲװ�����ܣ�
cactiĬ��ʹ�õ���ҳλ�ã�/var/www/html/cacti-->http://192.168.41.131/cacti
cacti�ϵĴ��������������/var/www/html/cacti/�����·������
�������õ�cactiĿ¼��/var/www/html/cacti-->http://cacti.magedu.com����ʹ��Ĭ�ϵ�http://cacti.magedu.com/cacti���·��������Ҫ��ʹ�ø�·��ֱ�ӷ��ʣ�Ҫ��cacti��Ĭ��·����Ϊ$url_path = ��/��������cacti��ҳ������ʹ��
[root@www ~]# vim /etc/httpd/conf/httpd.conf
#DocumentRoot "/var/www/html"
DirectoryIndex index.php index.html index.html.var
<VirtualHost *:80>
DocumentRoot /var/www/html/cacti
ServerName cacti.magedu.com
<Directory "/var/www/html/cacti">
Options none
AllowOverride none
Allow from all
</Directory>
ErrorLog logs/cacti-error_log
CustomLog logs/cacti-access_log common
</VirtualHost>
[root@www ~]# service httpd start
�������� httpd�� [ȷ��]
[root@www cacti]# service mysqld start
�������� mysqld�� [ȷ��]
[root@www cacti]# ls��cacti.sql��cacti���õ�����ݿ⣬�������������䣬��û��ָ����ݿ����䣻rra/Ŀ¼�DZ���.rrd�ļ��ģ�rra/��log/����cactiuser����ݷ��ʣ�resource/ģ����ԴĿ¼��
[root@www cacti]# mysqladmin create cacti
[root@www cacti]# mysql cacti < cacti.sql
[root@www cacti]# mysql -e "GRANT ALL ON cacti.* TO 'cactiuser'@localhost IDENTIFIED BY 'cactiuser'"
[root@www cacti]# mysqladmin flush-privileges
[root@www cacti]# mysql -ucactiuser -p
Enter password:
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cacti |
| test |
+--------------------+
3 rows in set (0.01 sec)
mysql> \q
Bye
[root@www cacti]# cd include/
[root@www include]# vim config.php
$url_path = "/";
[root@www include]# cd ..
[root@www cacti]# chown -R root:root ./
[root@www cacti]# chown -R cactiuser:cactiuser rra/ log/
���win��hosts�ļ���C:\Windows\System32\drivers\etc\hosts��
����http://cacti.magedu.com
Ĭ���ʺ������Ϊadmin����һ�ε�¼Ҫ����
��ͼ��
console�����еı༭���ö��ڴ�ѡ��£���
graph����ص�����״̬ͼ�Σ���
Collection Method������ռ��Ķ��壬����ռ�������cactiҪ�ܻ�ȡ��ݲ���rrdtool���棬�����ͨ�����ַ�������ȥ��ȡ��ݣ����������֣���ݲ�ѯ��Data Queries����������뷽����Data Input Methods��ͨ���������ű���
ע��Data Queries��һЩ���ȶ���õ�xml��ʽ������ռ��������Ƚ������ű���֯��xml��ʽ�ĵ�������ij���ض����豸����Ҫ�ռ���ݵĸ���ܶ࣬��8�ڵ�router��ÿ���ڽ������ݣ������ݰ�ĸ����ͳ���������С����Ҫ����ܶ�DS��
�ű�ֻ��ָ����λ�ȡ��ݣ����һ�ȡ������ݾ������Ҫ���涨�ĸ�ʽ�������TAG:data TAG:data�ÿո�����Ķ�����������������input:30 output:40���ű�д���Ҫ��������Ҫ˵������ʲô��ݶ��ٸ������ű�ÿ���ʱ��ִ��һ������cacti����
��cacti����һ��Ĭ�ϵ������Ե�����ƻ�����poller.phpʵ�֣���Ѷ���õ����е���ݲ�ѯ������������뷽����ȷ��Ҫ�ռ���ݵģ�ÿ��һ��ʱ��ִ��һ�Σ�poller.phpָ���Ŷ���õĽű�������poller.php��php��д���ܲ�ǿ��ֻ֧�ֵ��̣߳�Ϊ�ֲ����ȱ�ݣ�cacti�ٷ����ṩ��һ������spine�������滻poller.php�ij��ֲ�ʽ���ɴӶ���������ռ���ݣ��ڴ��ģ������һ��Ҫ��spine
[root@www ~]# echo '*/5 * * * * /usr/bin/php /var/www/html/cacti/poller.php &> /dev/null' > /var/spool/cron/cactiuser����#crontab �Cu cactiuser �Ce��
[root@www ~]# su cactiuser
[cactiuser@www root]$ crontab -l
*/5 * * * * /usr/bin/php/var/www/html/cacti/poller.php &> /dev/null
[cactiuser@www ~]$ /usr/bin/php /var/www/html/cacti/poller.php������ʱ��?����php.ini��
PHP Warning: date(): It is not safe to rely on thesystem's timezone settings. You are *required* to use the date.timezone settingor the date_default_timezone_set() function. In case you used any of thosemethods and you are still getting this warning, you most likely misspelled thetimezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' insteadin /var/www/html/cacti-0.8.8a/include/global_arrays.php on line 676
[root@www ~]# vim /etc/php.ini
date.timezone = Asia/Shanghai
[root@www ~]# su - cactiuser
[cactiuser@www ~]$ /usr/bin/php /var/www/html/cacti/poller.php
[root@www ~]# cd /var/www/html
[root@www html]# cd cacti
[root@www cacti]# cd log
[root@www log]# ls
cacti.log
[root@www log]# tail cacti.log
����
03/07/2016 12:17:43 PM - POLLER: Poller[0]WARNING: Cron is out of sync with the Poller Interval! The Poller Interval is '300' seconds, with amaximum of a '300' second Cron, but 4393662 seconds have passed since the lastpoll!
03/07/2016 12:17:43 PM - SYSTEM STATS:Time:0.1108 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2DataSources:0 RRDsProcessed:0
[root@www log]# ls ../rra
Management��
Graph Management
Graph Trees������صĶ�����ࣩ
Data Sources������ݻ�ȡ����������ģ��Ӧ�õ�ij�������ϣ�������DS���������ݣ������еĶ������ΪDevices��Associated Graph Templates�ṩ��ݣ���Localhost �CProcesses�ؼ���Data Source Fields��<path_rra>��cacti���ñ������ð�װĿ¼��rra/λ�ã���Turn On Data Source Debug Modeģ���Զ���ɵ������Data InputMethods���Data Templates���嵽ij�������Ͼ��γ����������е�DS��
Devices�����ص�������Ҫ���Զ������һ��������Ӵ��localhostĬ��statusΪunknown��SNMP Options��SNMP VersionѡVersion2-->save��Associated Graph Templates��Associated DataQueries��
Collection Methods��
Data Queries
Data Input Methods������ռ����������ж�Ӧ�����ģ�壬��ʾ����ռ�������α��棩
Templates��
Graph Templates
Host Templates����datatemplates��graph templates����Ӧ�õ�һ�������ϣ�
Data Templates��������δӽű��н�����ݣ�������������ζ�Ӧ��һ����������DS�ϣ�
Configuration��
Settings��General��SNMP Version��Version2��SNMPCommunity��public��poller������poller�߳���ֻ����һ��������spine��ɵ�N���̣߳�save��
[root@www ~]# cd /var/www/html/cacti/rra
[root@www rra]# ls
localhost_load_1min_5.rrd localhost_mem_buffers_3.rrd localhost_mem_swap_4.rrd localhost_proc_7.rrd localhost_users_6.rrd
[root@www rra]# rrdtool fetch -r 300 localhost_mem_buffers_3.rrd AVERAGE
����
1457329200: -nan
1457329500: -nan
1457329800: 5.6497300633e+03
1457330100: 5.1016000000e+03
1457330400: 4.2497066667e+03
1457330700: 9.5143733333e+03
1457331000: -nan
[root@www rra]# date +%s���鿴��ǰʱ��㣬�����һ��ʱ���Ƚϣ�
1457330739
collection methods-->data input methods
templates-->data templates
management-->data sources
templates-->graph templates
����1��
�Լ���������ռ�����-->�����������ģ��-->�����ģ�����������-->�ṩͼ��ģ��-->����Ӧ�õ��ض���������ʵ���ض��ļ�ع���
[root@www rra]# vim /etc/snmp/snmpd.conf
view systemview included .1.3.6.1.2.1.6
[root@www rra]# service snmpd restart
ֹͣ snmpd�� [ȷ��]
�������� snmpd�� [ȷ��]
[root@www rra]# snmpnetstat -v 2c -c public -Can localhost
Active Internet (tcp) Connections(including servers)
Proto Local Address Remote Address (state)
tcp *.22 *.* LISTEN
tcp *.111 *.* LISTEN
tcp *.3306 *.* LISTEN
tcp *.51205 *.* LISTEN
tcp 127.0.0.1.25 *.* LISTEN
tcp 127.0.0.1.199 *.* LISTEN
tcp 127.0.0.1.631 *.* LISTEN
tcp 127.0.0.1.6010 *.* LISTEN
tcp 192.168.41.135.22 192.168.41.1.2374 ESTABLISHED
Active Internet (udp) Connections
Proto Local Address
udp *.*
[root@www rra]# vim tcpconn.sh
-------------------script start-------------
#/bin/bash
#
#$1:hostname or IP
#$2:snmp community
SNMPNETSTAT=/usr/bin/snmpnetstat
ESTABLISHED=`$SNMPNETSTAT -v 2c -c $2 -Can -Cp tcp $1 | grep -i 'established' | wc -l`
echo -n "established:$ESTABLISHED"
-------------------script end--------------------
[root@www rra]# chmod +x tcpconn.sh
[root@www rra]# cp tcpconn.sh ../scripts/
[root@www rra]# cd ../scripts
[root@www scripts]# ls
3com_cable_modem.pl loadavg_multi.pl query_host_partitions.php ss_host_cpu.php unix_processes.pl webhits.pl
diskfree.pl loadavg.pl query_unix_partitions.pl ss_host_disk.php unix_tcp_connections.pl
diskfree.sh ping.pl sql.php ss_sql.php unix_users.pl
linux_memory.pl query_host_cpu.php ss_fping.php tcpconn.sh weatherbug.pl
console-->data input methods-->add
name��SNMP �C Tcp connections��
input type��ѡscript/command��
input string��/bin/bash <path_cacti>/scripts/tcpconn.sh <hostname> <snmp_community>��
-->create
input fields-->add
field��hostname��
friendly name��Hostname or IP��
special type code��hostname��
-->create
input fields-->add
field��snmp_community��
friendly name��SNMP Community��
special type code��snmp_community��
-->create
output fields-->add
field��established��
friendly name��TCP Established��
update rrd file��V��
-->create
-->save
collection methods-->data input methods-->��Tcp connections
templates-->data templates-->add
name��SNMP �C Tcpconnections��
data source�У�name��|host_description|- Tcp connections����data input method��ѡSNMP �C Tcp connections����associated rra��s��ȡ��ѡ�е�hourly����step��300����data source active��V��
data source item��internaldata source name��tcpestablished����minimum value��0����maximum value��65535����data source type��gauge����heartbeat��600��
-->create
management-->data sources-->add
selected data template��ѡSNMP �C Tcp connections��
host��ѡlocalhost��
-->create
data source path��<path_rra>/localhost_tcpestablished_1.rrd��
-->save
templates-->graph templates-->add
name��SNMP �C tcp connections��
title��|host_description| -tcp connections��
image format��PNG��
vertical label��tcpconnections��
-->create
graph template items-->add
data source��ѡSNMP �C Tcp connections �C (tcpestablished)��
color����ѡһ��
consolidation function��AVERAGE��
text format��Established��
-->create
graph item inputs
-->save
management-->graph management-->ѡlocalhost-->add
selected graph template��ѡSNMP �C Tcpconnections��
host��localhost��
-->create
date source[tcpestablished]��localhost �CTcp connections (tcpestablished)��
--save
ѡ�graphs
ѡ�console
templates-->graph templates-->SNMP �CTcp connections-->graph template items-->add
color����
graph item type��GPRINT��
consolidation function��LAST��
text format��current:��
-->create
graph template items-->add
graph item type��GPRINT��
consolidation function��AVERAGAE��
text format��Average:��
-->create
graph template items-->add
graph item type��GPRINT��
consolidation function��MAX��
text format��Max:��
-->create
[root@www rra]# ls
localhost_load_1min_5.rrd localhost_mem_swap_4.rrd localhost_tcpestablished_1.rrd tcpconn.sh
localhost_mem_buffers_3.rrd localhost_proc_7.rrd localhost_users_6.rrd
[root@www rra]# rrdtool fetch localhost_tcpestablished_1.rrd AVERAGE
[root@www rra]# date +%s
1457345360
[root@www rra]# ab -c 100 -n 10000 http://localhost/index.html
[root@cacti cacti]# service httpd status
httpd (pid 1790) ��������...
[root@cacti cacti]# service mysqld status
mysqld (pid 1910) ��������...
[root@cacti cacti]# service snmpd status��ȷ��snmpd���������ܼ�ص�������ݣ�
snmpd (pid 2601) ��������...
����server������״̬����established,timewait,synreceived
����2��
[root@cacti cacti]# vim scripts/tcpconn.sh
-------------script start---------------
#/bin/bash
#
#$1:hostname or IP
#$2:snmp community
SNMPNETSTAT=/usr/bin/snmpnetstat
TEMPFILE=`mktemp /tmp/$1_tcpconn.XXXXXXXX`
$SNMPNETSTAT -v 2c -c $2 -Can -Cp tcp $1> $TEMPFILE
ESTABLISHED=`grep -i"ESTABLISHED" $TEMPFILE | wc -l`
TIMEWAIT=`grep -i "TIMEWAIT"$TEMPFILE | wc -l`
SYNRECEIVED=`grep -i"SYNRECEIVED" $TEMPFILE | wc -l`
echo -n "established:$ESTABLISHEDtimewait:$TIMEWAIT synreceived:$SYNRECEIVED"
-----------------script end-------------------
collection methods-->data inputmethods-->add
name��SNMP �C Tcp 3con��
input type��script/command��
input string��/bin/bash <path_cacti>/scripts/tcpconn.sh <hostname> <snmp_community>��
-->create
input fields-->add
field��ѡhostname��
friendly name��Hostname��
special type code��hostname��
-->create
input fields-->add
field��ѡsnmp_community��
friendly name��Snmpcommunity��
special type code��snmp_community��
-->create
output fields-->add
field��established��
friendly name��Tcp established��
update rrd file��V��
-->create
output fields-->add
field��timeout��
friendly name��Tcp timeout��
update rrd file��V��
-->create
output fileds-->add
field��synreceived��
friendly name��Tcp synreceived��
update rrd file��V��
-->create
-->save
templates-->data templates-->add
name��SNMP �C Tcp 3con��
data source-->name��|host_description|- Tcp 3con��
data input method��ѡSNMP �C Tcp3c��
associated rra��s��ȡ��1hourly��
data source item-->internal data sourcename��tcpestablished��
maximum value��65535��
data source type��gauge��
output field��ѡestablished �C Tcpestablished��
-->save
data source item-->new
internal data source name��tcptimeout��
maximum value��65535��
output field��ѡtimeout �C Tcptimeout��
-->save
internal data source name��tcpsynreceived��
maximum value��65535��
output field��ѡsynreceived �C Tcpsynreceived��
-->save
management-->data source-->ѡlocalhost-->add
selected data template��ѡSNMP - Tcp3c��
host��localhost��
-->create
data source path��<path_rra>/localhost_tcp3con_1.rrd��
templates-->graph templates-->add
name��SNMP �C Tcp 3con��
title��|host_description| -Tcp 3con��
vertical label��tcp3con��
-->create
graph template items-->add
data source��ѡSNMP �C Tcp 3con �C(tcpestablished)��
color����ѡһ�֣�
graph item type��LINE2��
consolidation function��AVERAGE��
text format��Established��
-->create
graph template items��add
data source��ѡSNMP �C Tcp 3con �C(tcpestablished)��
color����
graph item type��GPRINT��
consolidation function��LAST��
test format��Current:��
-->create
graph template items��add
data source��ѡSNMP �C Tcp 3con �C(tcpestablished)��
color����
graph item type��GPRINT��
consolidation function��AVERAGE��
text format��Average:��
--create
graph template items��add
data source��ѡSNMP �C Tcp 3con �C(tcpestablished)��
color����
graph item type��GPRINT��
consolidation function��MAX��
text format��Maximum:��
--create
tcptimeout��tcpsynreceived�ظ����ϲ���
management-->graph management-->add
selected graph template��ѡSNMP �C Tcp3con��
host��localhost��
-->create
data source[tcpestablished]��ѡLocalhost �CTcp 3c (tcpestablished)��
data source[tcpsynreceived]��ѡLocalhost �CTcp 3c (tcpsynreceived)��
data source [tcptimeout]��ѡLocalhost �CTcp 3c (tcptimeout)��
-->save
�����ִ�����turn on graph debug mode-->ERROR: opening '/var/www/html/cacti-0.8.8a/rra/localhost_tcp3con_1.rrd':No such file or directory����management-->data sources-->turn on data source debugmode-->����ʾ������ɵ������cactiuser�������������ִ�м���
import/export-->export templates-->graph template to exportѡ��Ҫ������ͼ��ģ��-->export
configuration-->plugin management
[root@cacti ~]# tar xf thold-0.4.3.tar.gz-C /var/www/html/cacti/plugins/
[root@cacti ~]# tar xf settings-0.5.tar.gz-C /var/www/html/cacti/plugins/
[root@cacti ~]# cd !$
cd /var/www/html/cacti/plugins/
[root@cacti plugins]# ls
index.php settings thold
[root@cacti plugins]# cd ..
[root@cacti cacti]# vim include/config.php������cactiҪ����plugin���ܣ�
$plugin
configuration-->plugin management
�㰲װ-->�ٵ����û���һ��ѡ�thold
forums.cacti.net-->scripts and templates�����ڶ��ģ�壬��mysql-cacti-template��cacti-memcached-template��tcp-connections��cactiWMI-0.0.6��cacti�IJ�����ͨ��WMI�ӿڼ��win�ĸ���ָ�꣩��npc-2.0.1����nagios��cacti�����һ��Ĺ��ߣ�
book��cacti 0.8 beginner��s��cacti 0.8network monitoring��OReilly Essential SNMP 2nd Edition��
���ij��� ��Linux��ά���ѵ�ѧϰ�ʼ��� ���ͣ�����ر����˳���http://jowin.blog.51cto.com/10090021/1750140