真正地隐藏QQ
在单位您可能也需要使用QQ,但并不是每个单位都会同意使用QQ的,抛去技术上的封锁不说,上司监视的目光也是很危险的,怎么办呢?别着急,我有办法!
①首先,点击桌面上的QQ图标,在在线状态下用鼠标右键点击系统托盘中的QQ图标,在弹出菜单中选择“系统参数”,此时,会出现“QQ参数设置”对话框,找到“参数设置”选项卡,去掉其中的“在任务栏显示图标”复选框前面的“√”,确定后托盘中的小企鹅图标就立刻消失了。由此实现第一步隐藏。
②接着,取消“自动弹出信息”前面的“√”,然后将“设置提取消息热键”中的“使用热键”打上“√”,现在你可以使用默认热键“CTRL+ALT+Z”,也可以自定义热键。这样就可以用热键来激活QQ了。哦,对了,请顺手将“好友上站通知”前面的“√”也去掉。
③然后,打开QQ后把显示好友在线的显示屏拖到显示器的四个边角中的任一个,由此实现了第二步隐藏!
④最后,在“QQ参数设置”对话框中点击“声音设置”标签,在“声音开关”中选择“关闭声音”,免得BOSS听到声音。
⑤经过上面的一番设置,基本可达到了“无声无息”的效果,应该可以满足你的要求了吧?
右击任务栏的qq图标然后点击—→设置选项然后选择—→系统设置一项—→点基本设置—→然后在任务栏里方块的勾去掉再任务栏显示图标—→左右确定!OK.很简单。
1、右击托盘QQ图标—→设置—→系统设置—→基本设置—→去掉勾选:再任务栏显示图标—→确定!
2、在QQ上面有三个图表,一个“-”,一个“+”,还有一个“×”,点击“+”—→界面隐藏,然后最小化,就显示不出来了,要用的时候用“Ctrl+Alt+z”就出来了
安装所需软件
sendmail.8.12.10.tar.gz http://www.sendmail.org/
cyrus-sasl-2.1.18.tar.gz http://asg.web.cmu.edu/cyrus/
安装步骤
1、先安装cyrus-sasl-2.1.18.tar.gz,sendmail安装时要用到sasl(简单认证和安全层协议)的库文件的头文件。
解压缩:
# tar -zxvf cyrus-sasl-2.1.18.tar.gz
编译:
进入刚解压的源码目录,运行以下命令完成安装。
#./configure --prefix=/usr/local/sasl2 --enable-login
一定要加--enable-login,因为SASL2默认不支持login这种验证方式,而OUTLOOK是通过login来进行SMTP验证的。
#make # 编译
#make install # 安装
完成以上linux程序安装三步曲之后,就可以开始配置和测试了。
2、配置SASL
为了把SASL应用于sendmail认证,还需进行一些配置工作。sendmail会到/usr/lib目录下去找SASL2库,而我们是把程序安装在 /usr/local/sasl2中,为什么不把软件安装在/usr/lib目录呢?这主要是为了好管理自已安装的软件啦。所以我们要在/usr/lib 目录下做一个链接:
# cd /usr/lib
# ln -s /usr/local/sasl2/lib/* .
ok,接着要在/var/目录下建一个目录给saslauthd进程存在临时数据。
# cd /var
# mkdir state
# cd state
# mkdir saslauthd
注:如果没有这些目录,运行saslauthd时,会提示出错。
ok, 接着为确保CYRUS-SASL2函数库知道怎样验证所收来的SASL认证请求,必须创建一个SASL的配置文件来把MTA程序定义成一个SASL 应用。配置文件名为Sendmail.conf(注意是大写的S),位于/usr/lib/sasl2目录中,也就是 /usr/local/sasl2/lib/sasl2这个目录,记得上面新建的链接了吗?在该文件中你定义你希望使用的认证数据库方法,以下这个例子使用saslauthd来验证认证请求。
# cd /usr/lib/sasl2
# echo 'pwcheck_method: saslauthd' > Sendmail.conf
3、测试
ok,现在可以运行saslauthd了,并进行测试。
# cd /usr/local/sasl2/sbin
# ./saslauthd -a shadow
用shadow的用户和密码进行验证
# ./testsaslauthd -u userid -p password
0: OK "Success."
如果出现以上信息,就说明saslauthd正常运行了。testsaslauthd程序默认是没有编译的,你需要在源码目录树的saslauthd子目录中运行 # make testsaslauthd命令生成。
4、sasl2安装完成后,就要开始安装sendmail了。
先解压sendmail源码。
# tar -zxvf sendmail.8.12.10.tar.gz
如果要sendmail支持SASL,需要修改源码的位置配置文件site.config.m4。site.config.m4位于源码目录树的devtools/Site。文件中应包含以下行:
PREPENDDEF(`confMAPDEF', `-DMAP_REGEX')
APPENDDEF(`confENVDEF', `-DTCPWRAPPERS -DSASL=2')
APPENDDEF(`conf_sendmail_LIBS', `-lwrap -lsasl2')
APPENDDEF(`confLIBDIRS', `-L/usr/local/sasl2/lib')
APPENDDEF(`confINCDIRS', `-I/usr/local/sasl2/include')
第一行配置正则表达式相关内容
第二、三行配置表示在sendmail程序中支持sasl2和tcp_wrapper(可通过hosts.allow和hosts.deny控制访问)
第四、五行配置指出sasl2的库文件和头文件的位置。
ok,接着在编译前要建立一些用户和目录,并确保有正确的权限。
sendmail必须有一个set-group-id(默认是smmsp组)的程序来在一个组可写的目录中查询排队邮件。所以我们要建立一个smmsp用户和组。并建立如下目录并设置相应的权限,具体设置要求可查询源码目录树下sendmail/SECURITY文档。
# groupadd smmsp
# useradd smmsp -d /var/spool/clientmqueue -s /dev/null
# mkdir /var/spool/clientmqueue
# chown -R smmsp:smmsp /var/spool/clientmqueue
# chmod -R 770 /var/spool/clientmqueue
# mkdir /etc/mail
# mkdir /var/spool/mqueue
# chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
# chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
ok,接下来就可以进入源码目录树开始编译了。
# ./Build -c
-c选项能删除上次编译产生的文件。
# ./Build install
编译完成后就可以进行安装。
5、sendmail配置
要sendmail 正常运行,还需配置几个文件,首先最重要的就是sendmail.cf 文件了。它在源码目录树下的cf/cf目录下有很多例子可参考。你可以拷贝使用。由于sendmail.cf中的语法很复杂,所以不建议手工修改。我们可以以sendmail.mc文档配合sendmail-cf目录下的宏通过m4预处理器自动生成。m4预处理器用来从一组宏文件中创建sendmail配置文件。宏文件作为输入被读进来。宏被展开,然后写到一个输出文件。sendmail-cf目录一般放在/usr/share目录下。其实 sendmail-cf目录的内容和源码目录树下的cf目录的内容是一样的,所以,为了保证sendmail-cf目录的内容与安装版本同步,要把源码目录树下的cf目录的内容拷贝到/usr/share/sendmail-cf目录。
sendmail.mc配置文档内容如下:
divert(-1)
include(`/usr/share/sendmail-cf/m4/cf.m4')
VERSIONID(`linux setup for Red Hat Linux')dnl
OSTYPE(`linux')
dnl Uncomment and edit the following line if your mail needs to be sent out
dnl through an external mail server:
dnl define(`SMART_HOST',`smtp.your.provider')
define(`confDEF_USER_ID',``8:12'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
dnl define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/mail/aliases')dnl
define(`STATUS_FILE', `/etc/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')
dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
define(`confTO_IDENT', `0')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnl The '-t' option will retry delivery if e.g. the user runs over his quota.
sendmail.8.12.10.tar.gz http://www.sendmail.org/
cyrus-sasl-2.1.18.tar.gz http://asg.web.cmu.edu/cyrus/
安装步骤
1、先安装cyrus-sasl-2.1.18.tar.gz,sendmail安装时要用到sasl(简单认证和安全层协议)的库文件的头文件。
解压缩:
# tar -zxvf cyrus-sasl-2.1.18.tar.gz
编译:
进入刚解压的源码目录,运行以下命令完成安装。
#./configure --prefix=/usr/local/sasl2 --enable-login
一定要加--enable-login,因为SASL2默认不支持login这种验证方式,而OUTLOOK是通过login来进行SMTP验证的。
#make # 编译
#make install # 安装
完成以上linux程序安装三步曲之后,就可以开始配置和测试了。
2、配置SASL
为了把SASL应用于sendmail认证,还需进行一些配置工作。sendmail会到/usr/lib目录下去找SASL2库,而我们是把程序安装在 /usr/local/sasl2中,为什么不把软件安装在/usr/lib目录呢?这主要是为了好管理自已安装的软件啦。所以我们要在/usr/lib 目录下做一个链接:
# cd /usr/lib
# ln -s /usr/local/sasl2/lib/* .
ok,接着要在/var/目录下建一个目录给saslauthd进程存在临时数据。
# cd /var
# mkdir state
# cd state
# mkdir saslauthd
注:如果没有这些目录,运行saslauthd时,会提示出错。
ok, 接着为确保CYRUS-SASL2函数库知道怎样验证所收来的SASL认证请求,必须创建一个SASL的配置文件来把MTA程序定义成一个SASL 应用。配置文件名为Sendmail.conf(注意是大写的S),位于/usr/lib/sasl2目录中,也就是 /usr/local/sasl2/lib/sasl2这个目录,记得上面新建的链接了吗?在该文件中你定义你希望使用的认证数据库方法,以下这个例子使用saslauthd来验证认证请求。
# cd /usr/lib/sasl2
# echo 'pwcheck_method: saslauthd' > Sendmail.conf
3、测试
ok,现在可以运行saslauthd了,并进行测试。
# cd /usr/local/sasl2/sbin
# ./saslauthd -a shadow
用shadow的用户和密码进行验证
# ./testsaslauthd -u userid -p password
0: OK "Success."
如果出现以上信息,就说明saslauthd正常运行了。testsaslauthd程序默认是没有编译的,你需要在源码目录树的saslauthd子目录中运行 # make testsaslauthd命令生成。
4、sasl2安装完成后,就要开始安装sendmail了。
先解压sendmail源码。
# tar -zxvf sendmail.8.12.10.tar.gz
如果要sendmail支持SASL,需要修改源码的位置配置文件site.config.m4。site.config.m4位于源码目录树的devtools/Site。文件中应包含以下行:
PREPENDDEF(`confMAPDEF', `-DMAP_REGEX')
APPENDDEF(`confENVDEF', `-DTCPWRAPPERS -DSASL=2')
APPENDDEF(`conf_sendmail_LIBS', `-lwrap -lsasl2')
APPENDDEF(`confLIBDIRS', `-L/usr/local/sasl2/lib')
APPENDDEF(`confINCDIRS', `-I/usr/local/sasl2/include')
第一行配置正则表达式相关内容
第二、三行配置表示在sendmail程序中支持sasl2和tcp_wrapper(可通过hosts.allow和hosts.deny控制访问)
第四、五行配置指出sasl2的库文件和头文件的位置。
ok,接着在编译前要建立一些用户和目录,并确保有正确的权限。
sendmail必须有一个set-group-id(默认是smmsp组)的程序来在一个组可写的目录中查询排队邮件。所以我们要建立一个smmsp用户和组。并建立如下目录并设置相应的权限,具体设置要求可查询源码目录树下sendmail/SECURITY文档。
# groupadd smmsp
# useradd smmsp -d /var/spool/clientmqueue -s /dev/null
# mkdir /var/spool/clientmqueue
# chown -R smmsp:smmsp /var/spool/clientmqueue
# chmod -R 770 /var/spool/clientmqueue
# mkdir /etc/mail
# mkdir /var/spool/mqueue
# chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
# chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
ok,接下来就可以进入源码目录树开始编译了。
# ./Build -c
-c选项能删除上次编译产生的文件。
# ./Build install
编译完成后就可以进行安装。
5、sendmail配置
要sendmail 正常运行,还需配置几个文件,首先最重要的就是sendmail.cf 文件了。它在源码目录树下的cf/cf目录下有很多例子可参考。你可以拷贝使用。由于sendmail.cf中的语法很复杂,所以不建议手工修改。我们可以以sendmail.mc文档配合sendmail-cf目录下的宏通过m4预处理器自动生成。m4预处理器用来从一组宏文件中创建sendmail配置文件。宏文件作为输入被读进来。宏被展开,然后写到一个输出文件。sendmail-cf目录一般放在/usr/share目录下。其实 sendmail-cf目录的内容和源码目录树下的cf目录的内容是一样的,所以,为了保证sendmail-cf目录的内容与安装版本同步,要把源码目录树下的cf目录的内容拷贝到/usr/share/sendmail-cf目录。
sendmail.mc配置文档内容如下:
divert(-1)
include(`/usr/share/sendmail-cf/m4/cf.m4')
VERSIONID(`linux setup for Red Hat Linux')dnl
OSTYPE(`linux')
dnl Uncomment and edit the following line if your mail needs to be sent out
dnl through an external mail server:
dnl define(`SMART_HOST',`smtp.your.provider')
define(`confDEF_USER_ID',``8:12'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
dnl define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/mail/aliases')dnl
define(`STATUS_FILE', `/etc/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')
dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
define(`confTO_IDENT', `0')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnl The '-t' option will retry delivery if e.g. the user runs over his quota.
请参阅 Ubuntu简介
请参阅 添加其他软件库
请参阅 安装Codecs
请参阅 安装DVDPlayback
sudo apt-get install mplayer
sudo apt-get install mplayer-fonts
sudo apt-get install mozilla-mplayer
sudo cp /etc/mplayer/mplayer.conf /etc/mplayer/mplayer.conf_backup
sudo gedit /etc/mplayer/mplayer.conf
找出下面这一行
...
vo=x11, # To specify default video driver (see -vo help for
...
以下面这一行取代
vo=xv, # To specify default video driver (see -vo help for
安装 w32codecs解码器(用于播放wmv、rmvb等常见windows平台下的多媒体文件;假设你已经添加了ubuntu-cn源)。
$ sudo apt-get install w32codecs
你也可以自己到Mplayer网站下载最新的解码包,网址是 http://www.mplayerhq.hu/design7/dload.html 选择其中“Binary Codec Packages”标题下的“linux x86 ...”, 如Linux x86 20061022, 下载後解压到 /usr/lib/win32/ 即可。
* 配置中文字幕显示(可选)
cd ; mkdir .mplayer
ln -sf /usr/share/fonts/truetype/arphic/uming.ttf .mplayer/subfont.ttf
gedit .mplayer/gui.conf
sub_cp = "GBK"
font_text_scale = "4.000000"
font_osd_scale = "4.000000"
sub_fuzziness=2
mplayer皮肤的安装:假设下载回来的是名字是skin_name.tar.bz2的压缩包:(以下操作以在Nautilus文件管理器下操作为主)
解压缩下载回来的tar.bz2包,得到skin_name这个文件夹。接下来把这个文件夹剪切到自己home目录下的 .mplayer/skins下,此目录为隐藏属性需要ctrl+h键才能看到。#mplayer皮肤列表中将显示为the_other_name
1. 请参阅 刷新GNOME面板
2. 应用程序 -> 影音 -> MPlayer
3. 重启Firefox使mozilla-mplayer插件生效
请参阅 添加其他软件库
请参阅 安装Codecs
请参阅 安装DVDPlayback
sudo apt-get install mplayer
sudo apt-get install mplayer-fonts
sudo apt-get install mozilla-mplayer
sudo cp /etc/mplayer/mplayer.conf /etc/mplayer/mplayer.conf_backup
sudo gedit /etc/mplayer/mplayer.conf
找出下面这一行
...
vo=x11, # To specify default video driver (see -vo help for
...
以下面这一行取代
vo=xv, # To specify default video driver (see -vo help for
安装 w32codecs解码器(用于播放wmv、rmvb等常见windows平台下的多媒体文件;假设你已经添加了ubuntu-cn源)。
$ sudo apt-get install w32codecs
你也可以自己到Mplayer网站下载最新的解码包,网址是 http://www.mplayerhq.hu/design7/dload.html 选择其中“Binary Codec Packages”标题下的“linux x86 ...”, 如Linux x86 20061022, 下载後解压到 /usr/lib/win32/ 即可。
* 配置中文字幕显示(可选)
cd ; mkdir .mplayer
ln -sf /usr/share/fonts/truetype/arphic/uming.ttf .mplayer/subfont.ttf
gedit .mplayer/gui.conf
sub_cp = "GBK"
font_text_scale = "4.000000"
font_osd_scale = "4.000000"
sub_fuzziness=2
mplayer皮肤的安装:假设下载回来的是名字是skin_name.tar.bz2的压缩包:(以下操作以在Nautilus文件管理器下操作为主)
解压缩下载回来的tar.bz2包,得到skin_name这个文件夹。接下来把这个文件夹剪切到自己home目录下的 .mplayer/skins下,此目录为隐藏属性需要ctrl+h键才能看到。#mplayer皮肤列表中将显示为the_other_name
1. 请参阅 刷新GNOME面板
2. 应用程序 -> 影音 -> MPlayer
3. 重启Firefox使mozilla-mplayer插件生效
由于工作 ,很少上QQ,用 msn,也 是对自己的严格管理
cat cpp.txt | awk -F " " '{print $2}' | awk -F "|" '{print "cat "$1"|grep WebMailTmpl >>/tmp/" $1}'
ls -lsa | grep sample | awk '{print $10}' | awk -F ".s" '{print "mv " $1 ".sample "$1}'|sh
==> actions.cpp <==
WebMailTmpl(tmpl,"actions");
==> addjunk.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"addjunk");
==> autoavset.cpp <==
WebMailTmpl(tmpl, "autoavset");
==> changeusrpsw.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"changeusrpsw");
==> chkmsgs.cpp <==
if(folder=="new") WebMailTmpl(tmpl,"chkmsgs_new");
else if(folder=="tmp") WebMailTmpl(tmpl,"chkmsgs_tmp");
else if(folder=="out") WebMailTmpl(tmpl,"chkmsgs_out");
else if(folder=="cur") WebMailTmpl(tmpl,"chkmsgs_cur");
else if(folder=="sinajunk") WebMailTmpl(tmpl,"chkmsgs_junk");
else WebMailTmpl(tmpl,"chkmsgs");
==> chknewmsgs.cpp <==
WebMailTmpl(tmpl,"chknewmsgs");
==> compose.cpp <==
WebMailTmpl(tmpl,"mordcompose");
WebMailTmpl(tmpl,"compose");
==> favorite.cpp <==
WebMailTmpl(tmpl,"favorite");
==> fax.cpp <==
WebMailTmpl(tmpl,"send_ok");
==> folder.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"folder_add");
CTmpl tmpl;WebMailTmpl(tmpl,"folder_add");
CTmpl tmpl;WebMailTmpl(tmpl,"folder_list");
==> folderfunc.cpp <==
// modi global WebMailTmpl
==> global.cpp <==
void WebMailTmpl(CTmpl& tmpl,LPCSTR tmplname) {
WebMailTmpl(tmpl,"alert");
WebMailTmpl(tmpl,"alert2");
==> junkmail.cpp <==
WebMailTmpl(tmpl, "junkmail");
==> mail.cpp <==
WebMailTmpl(tmpl,"sinamail");
==> mailboxinfo.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"mailboxinfo");
==> mailfilter.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"mailfilter");
==> mailrv.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"mailrv");
==> mailwarn.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"warn");
==> pop.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"pop_add");
CTmpl tmpl;WebMailTmpl(tmpl,"pop_add");
CTmpl tmpl;WebMailTmpl(tmpl,"pop_list");
==> prof.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"profile");
==> rdMail.cpp <==
WebMailTmpl(tmpl, tmplfn);
==> redirect.cpp <==
==> refuse.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"refuse");
==> reply.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"reply");
==> scompose.cpp <==
WebMailTmpl(tmpl,"smordcompose");
WebMailTmpl(tmpl,"scompose");
==> search.cpp <==
WebMailTmpl(tmpl,"search_result");
WebMailTmpl(tmpl,"search");
==> sendmsg.cpp <==
WebMailTmpl(tmpl,"draft_save");
WebMailTmpl(tmpl,"send_ok");
==> setautocc.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"setautocc");
==> sizeandfilter.cpp <==
==> srdMail.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"smail_body");
==> ssendmsg.cpp <==
WebMailTmpl(tmpl,"send_ok");
==> ssetting.cpp <==
WebMailTmpl(tmpl,"ssetting");
ls -lsa | grep sample | awk '{print $10}' | awk -F ".s" '{print "mv " $1 ".sample "$1}'|sh
==> actions.cpp <==
WebMailTmpl(tmpl,"actions");
==> addjunk.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"addjunk");
==> autoavset.cpp <==
WebMailTmpl(tmpl, "autoavset");
==> changeusrpsw.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"changeusrpsw");
==> chkmsgs.cpp <==
if(folder=="new") WebMailTmpl(tmpl,"chkmsgs_new");
else if(folder=="tmp") WebMailTmpl(tmpl,"chkmsgs_tmp");
else if(folder=="out") WebMailTmpl(tmpl,"chkmsgs_out");
else if(folder=="cur") WebMailTmpl(tmpl,"chkmsgs_cur");
else if(folder=="sinajunk") WebMailTmpl(tmpl,"chkmsgs_junk");
else WebMailTmpl(tmpl,"chkmsgs");
==> chknewmsgs.cpp <==
WebMailTmpl(tmpl,"chknewmsgs");
==> compose.cpp <==
WebMailTmpl(tmpl,"mordcompose");
WebMailTmpl(tmpl,"compose");
==> favorite.cpp <==
WebMailTmpl(tmpl,"favorite");
==> fax.cpp <==
WebMailTmpl(tmpl,"send_ok");
==> folder.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"folder_add");
CTmpl tmpl;WebMailTmpl(tmpl,"folder_add");
CTmpl tmpl;WebMailTmpl(tmpl,"folder_list");
==> folderfunc.cpp <==
// modi global WebMailTmpl
==> global.cpp <==
void WebMailTmpl(CTmpl& tmpl,LPCSTR tmplname) {
WebMailTmpl(tmpl,"alert");
WebMailTmpl(tmpl,"alert2");
==> junkmail.cpp <==
WebMailTmpl(tmpl, "junkmail");
==> mail.cpp <==
WebMailTmpl(tmpl,"sinamail");
==> mailboxinfo.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"mailboxinfo");
==> mailfilter.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"mailfilter");
==> mailrv.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"mailrv");
==> mailwarn.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"warn");
==> pop.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"pop_add");
CTmpl tmpl;WebMailTmpl(tmpl,"pop_add");
CTmpl tmpl;WebMailTmpl(tmpl,"pop_list");
==> prof.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"profile");
==> rdMail.cpp <==
WebMailTmpl(tmpl, tmplfn);
==> redirect.cpp <==
==> refuse.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"refuse");
==> reply.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"reply");
==> scompose.cpp <==
WebMailTmpl(tmpl,"smordcompose");
WebMailTmpl(tmpl,"scompose");
==> search.cpp <==
WebMailTmpl(tmpl,"search_result");
WebMailTmpl(tmpl,"search");
==> sendmsg.cpp <==
WebMailTmpl(tmpl,"draft_save");
WebMailTmpl(tmpl,"send_ok");
==> setautocc.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"setautocc");
==> sizeandfilter.cpp <==
==> srdMail.cpp <==
CTmpl tmpl;WebMailTmpl(tmpl,"smail_body");
==> ssendmsg.cpp <==
WebMailTmpl(tmpl,"send_ok");
==> ssetting.cpp <==
WebMailTmpl(tmpl,"ssetting");
1. 安装Mysql
2. 安装Apache
3. 安装PHP
4. 配置httpd.conf
5. 启动/停止apache
1. 安装Mysql
================
《MySQL Reference Manual》手册中提供了标准安装方法,详见"MySQL Reference Manual -> 2. Installing MySQL -> 2.7. Installing MySQL on Other Unix-Like Systems"
1.1 二进制版本的安装方法
# created by wandering 2005/04/09
--------------------------
#
# 目前的Mysql都是编译好的二进制代码,configure后可直接使用,且无需初始化数据库
# 默认情况,我把安装文件放在/usr/src目录中,把应用安装到/usr/local目录中
#
shell> 先创建mysql用户和mysql组
shell> cd /usr/local
shell> tar zxvf mysql-standard-4.1.11-unknown-freebsd4.7-i386.tar.gz
shell> ln -s ./mysql-standard-4.1.11-unknown-freebsd4.7-i386 ./mysql
shell> cd mysql
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
shell> /usr/local/mysql/bin/mysqld_safe --user=root &
shell> echo "/usr/local/mysql/bin/mysqld_safe &" >> /etc/rc.local
OK,Mysql已安装完毕。
1.2 源代码版本的编译安装方法
# added by wandering 2005/12/28
-----------------------------
有时我们也需要编译安装, 最近我在FreeBSD6.0上安装Mysql时, 发现Mysql的二进制版本最高只支持FreeBSD5.3, 经测试, 二进制的安装方法没有成功. 只好手工编译安装了.
安装之前一定要仔细看看INSTALL-SOURCE这个文件, 非常之有用啊!!!
shell> pw group add mysql
shell> pw user add -n mysql -d /usr/local/mysql -s /usr/sbin/nologin
shell> tar zxvf mysql-5.0.18
shell> cd mysql-5.0.18
shell> ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> mkdir data
shell> bin/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
shell> echo "/usr/local/mysql/bin/mysqld_safe &" >> /etc/rc.local
OK, 可以用了.
用netstat命令可以看到服务器3306端口处于监听状态。
/usr/local/mysql/bin/mysqladmin -u root -p password
enter password:
# 修改root口令,root初始密码为空,所以直接回车就可以了
测试一下新的密码:
mysql -u root -p mysql
enter password:
*注意: 有的时候在一些系统上, mysql要求必须要有mysql.host表存在, 才能正常启动mysql服务进程. 只好把别的机子上的mysql.host的三个文件拷贝过来才能解决. 奇怪!
2. 安装Apache
===============
*注意: 建议先安装perl, 再安装apache.
# tar zxvf httpd-2.2.0.tar.gz
# cd httpd-2.2.0
# ./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=all --enable-rewrite=shared --enable-speling=shared && make && make install
#
**注: 其中--enable-so选项是配置Apache以共享后安装的模块
3. 安装PHP
============
步骤:
3.1 安装gd-2.0.33.tar.gz
3.2 安装libxml2-2.6.27.tar.gz
3.3 安装libiconv-1.9.2.tar.gz
3.4 安装php
3.1 安装gd
------------
gd需要以下模块:
. zlib-1.2.3.tar.gz
. libpng-1.2.8-config.tar.gz
. freetype-2.1.10.tar.gz (可选装)
. xpm-3.4k.tar.gz (可选装)
. jpegsrc.v6b.tar.gz (可选装)
3.1.1 安装zlib
-----------------
# tar zxvf zlib-1.2.3.tar.gz
# cd zlib-1.2.3
# ./configure && make && make install
默认情况zlib被安装到/usr/local/include/
http://directory.fsf.org/zlib.html
http://www.zlib.net/
3.1.2 安装libpng
----------------
# tar zxvf libpng-1.2.12.tar.gz
# cd libpng-1.2.12
# ./configure && make && make install
默认情况libpng被安装到/usr/local/include/libpng/
http://www.libpng.org/pub/png/libpng.html
3.1.3 安装gd
--------------
# tar zxvf gd-2.0.33.tar.gz
# cd gd-2.0.33
# cp /usr/local/include/png.h .
# cp /usr/local/include/pngconf.h .
# ./configure && make && make install
#
*** 我遇到过gd_png.c找不到png库文件的情况, 这时要手工把png.h和pngconf.h两个文件拷贝到gd_png.c所在目录就可以了. ***
默认情况gd被安装到/usr/local/include/
http://www.boutell.com/gd/
3.2 安装libxml2
-----------------
# tar zxvf libxml2-2.6.26.tar.gz
# cd libxml2-2.6.26
# ./configure && make && make install
#
http://xmlsoft.org/
3.3 安装libiconv
-------------------
# tar zxvf libiconv-1.9.2.tar.gz
# cd libiconv-1.9.2
# ./configure && make && make install
#
http://www.gnu.org/software/libiconv/
3.4 安装PHP
--------------
# tar zvxf php-5.1.4.tar.gz
# cd php-5.1.4
# vi /usr/local/apache/bin/apxs
将"#!/replace/with/path/to/perl/interpreter -w"替换为"#!/usr/bin/perl -w"
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs --with-libxml-dir=/usr/local/include/libxml2/libxml --enable-mbstring --with-gd --with-zlib
# make
# make install
# cp php.ini-dist /usr/local/php/lib/php.ini
# vi /usr/local/php/lib/php.ini
php.ini配置:
1、找到;default_charset = "iso-8859-1", 在下面添加default_charset = "gb2312"
2、配置max_execution_time,它的意思为“Maximum execution time of each script, in seconds”,经常需要长时间数据操作或去处的页面应该进行适当调整,这里我设置为300秒。
这是在redhat下编译的一个配置实例:
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs --with-libxml-dir=/usr/local/include/libxml2/libxml --with-iconv-dir=/usr/local --enable-mbstring --with-gd --enable-gd-native-ttf --with-jpeg-dir=/usr --with-png-dir=/usr/local --with-zlib-dir=/usr/local --with-ttf=/usr/local --with-freetype-dir=/usr/local
*** 注: 在configure过程中, 可能会遇到下面的错误! Sorry, I cannot run apxs. ***
configure: error: Sorry, I cannot run apxs. Either you need to install Perl or you need to pass the absolute path of apxs by using --with-apxs=/absolute/path/to/apxs
网上有很多介绍解决方法的, 但最经典的只有Darrell Brogdon在2001/03/15写的<
我之所以说这么多, 只是想说明目前我看到的方法, 没有能够真正解决这个问题的.
OK, 下面我说明一下我是如何解决这个问题的:
首先, 通过错误提示, 我们得知"I cannot run apxs". 我一直以为是apxs安装有问题, 但找了很久仍未得到合理的解释和解决方法.
于是我直接运行"/usr/local/apache/bin/apxs"这个脚本, 得到下面的错误提示:
bash: ./apxs: /replace/with/path/to/perl/interpreter: bad interpreter: No such file or directory
哦, 给人的感觉很像仍然是apxs程序有问题, 但问题在哪里呢? "interpreter"是什么呢? interpreter是"解释程序"!
嗯, 看来我们接近答案了, 运行"head -1 /usr/local/apache/bin/apxs"得到下面内容:
#!/replace/with/path/to/perl/interpreter -w
天啊, 这里没有指明正确的perl执行程序的位置! 原来这就才是真正的问题原因所在!!!
把这一行更改为"#!/usr/bin/perl -w". 再运行php的configure, 一切正常!
至此, 问题已解决.
*** Sorry, I cannot run apxs. ***
4. 配置httpd.conf
====================
4.1 找到ServerName , 将 替换为本机的域名
------------------------------------------
ServerName freebsd6.local:80
4.2 找到"DirectoryIndex index.html", 在"index.html"后面加入"index.php"
------------------------------------------------------------------------
DirectoryIndex index.html index.php
4.3 找到
-------------------------------------------------------------------------------
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
4.4 找到
-----------------------------------------------------------------------------
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
4.5 找到
------------------------------------------------------------------------------
AllowOverride None
Options None
Order allow,deny
Allow from all
4.6 找到
----------------------------------------------------------------
Alias /it "/data1/apache/htdocs/it"
Alias /it_old "/data1/apache/htdocs/it_old"
ScriptAlias /perl/ "/data1/apache/htdocs/perl/"
5. 启动/停止apache
=====================
/usr/local/apache/bin/apachectl start
/usr/local/apache/bin/apachectl stop
**注: 要确保主机名能够正常被解析为本机的IP地址.
*** 在执行"/usr/local/apache/bin/apachectl start"的时候可能会出现下面错误提示:
[Fri Dec 30 09:35:01 2005] [warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter
解决方法:
step 1
-------
编辑/etc/hosts和/etc/rc.conf, 配置主机域名. 例如:
shell> cat /etc/hosts
127.0.0.1 localhost
192.168.177.130 freebsd6 freebsd6.local
shell> cat /etc/rc.conf
hostname="freebsd6.local"
...
step 2
-------
on FreeBSD, you need to add a kernelmodule
kldload accf_http
grep accf /boot/defaults/loader.conf
accf_data_load="NO" # Wait for data accept filter
accf_http_load="NO" # Wait for full HTTP request accept filter
add the second to /boot/loader.conf with 'YES' to enable this permenately.
-----------------------------------------------------------------------------
# 2005/04/09 16:00 - 2005/04/10 13:16 Created by Wandering
# 2005/12/29 23:28 Modified by Wandering
# 2006/03/12 19:31 Modified by Wandering
# 2006/03/18 00:45 Modified by Wandering
# 2006/07/17 23:56 Modified by Wandering
附录:
*Apache 2.0的DSO功能简要说明:
-------------------------------
编译并安装已发布的Apache模块,比如编译mod_foo.c为mod_foo.so的DSO模块:
$ ./configure --prefix=/path/to/install --enable-foo=shared
$ make install
编译并安装第三方Apache模块, 比如编译mod_foo.c为mod_foo.so的DSO模块:
$ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared
$ make install
配置Apache以共享后安装的模块:
$ ./configure --enable-so
$ make install
用apxs在Apache源代码树以外编译并安装第三方Apache模块,比如编译mod_foo.c为mod_foo.so的DSO模块:
$ cd /path/to/3rdparty
$ apxs -c mod_foo.c
$ apxs -i -a -n foo mod_foo.la
共享模块编译完毕以后,都必须在httpd.conf中用LoadModule指令使Apache激活该模块。
看到朋友们在Unix/Linux上装mysql有点麻烦,我也好不容易装完了,所以就来讲件,也许能帮帮大家的忙. 我使用的操作系统是FreeBSD5.2.1,如果别的操作系统安装方法也许不一样,请酌情处理.
安装FreeBSD就不讲了,只要稍微定制一下就可以了,过程我就不说了,我用的FreeBSD版本是5.2.1,应该是现在比较新的版本,以后就不知道了 :) .
一. 安装MySQL
我使用的的Mysql是4.0.20,源代码版,你也可以使用RPM包或者二进制版,安装方法可能不一样,请参考其它文章.
先下载Mysql2.0.20的源代码版,地址: http://dev.mysql.com/downloads/mysql/4.0.html
把它下到/usr/local/src目录下,如果没有该目录,就自己建一个.下载回来的包名字叫 mysql-4.0.20.tar.gz,然后我们把它解压出来:
# tar -zxvf mysql-4.0.20.tar.gz
解压后生成mysql-4.0.20目录,我们进入该目录:
# cd mysql-4.0.20
进入后就开始配置mysql了,配置过程中我们要给mysql设置一个安装目录,我们设置在 /usr/local/mysql 下,以为把文件放到一个地方比较容易管理,如果你还想获得更多的配置信息,使用 ./configure --help:
# ./configure --prefix=/usr/local/mysql
然后等几秒钟,配置完成后就编译源代码:
# make
这个编译的过程比较长,如果机器比较慢的话,可能要近二十分种 ( PS:我的机器是很普通的机器,所有用了差不多15,6分种 :( ) .
编译完成后就安装:
# make install
等上几秒钟,安装完成.下面就到了最关键的部分了,为什么老安装不成功,(PS:至少我是安装了N次,N > 10 ,呵呵),问题关键就在这里,访问mysql要一个专门的用户,而且必须给相应的访问权限,这里我们就设置root和mysql有权限访问.
我们先建立一个mysql和mysql用户来访问mysql:
# pw groupadd mysql #建立mysql组
# pw useradd mysql -g mysql #建立mysql用户并且加入到mysql组中
建立用户后我们就初始化表 (注意:必须先执行本步骤后才能进行以下步骤)
# ./scripts/mysql_install_db --user=mysql #初试化表并且规定用mysql用户来访问
初始化表以后就开始给mysql和root用户设定访问权限, 我们先到安装mysql的目录:
# cd /usr/local/mysql
然后设置权限
# chown -R root . #设定root能访问/usr/local/mysql
# chown -R mysql var #设定mysql用户能访问/usr/local/mysql/var ,里面存的是mysql的数据库文件
# chown -R mysql var/. #设定mysql用户能访问/usr/local/mysql/var下的所有文件
# chown -R mysql var/mysql/. #设定mysql用户能访问/usr/local/mysql/var/mysql下的所有文件
# chgrp -R mysql . #设定mysql组能够访问/usr/local/mysql
设置完成后,基本上就装好了,好了,我们运行一下我们的mysql:
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
如果没有问题的话,应该会出现类似这样的提示:
[1] 42264
# Starting mysqld daemon with databases from /usr/local/mysql/var
这就证明你安装成功了,如果出现:
[1] 42264
# Starting mysqld daemon with databases from /usr/local/mysql/var
040818 10:53:45 mysqld ended
则证明你的mysql运行不来,请查看错误日志: /usr/local/mysql/var/*.err 然后确定安装是否成功,如果没有成功,请检查上面的步骤是否正确.
安装完成后,能够通过 /usr/local/mysql/bin/mysql 来连接mysql进行管理,如果你装了apache并且能够解析php的话,也能使用phpMyadmin来管理你的mysql,记得装完后使用 mysql或者mysqladmin来修改root的密码,这里我们就不说了,请参考相关的文章.
控制mysql就通过 /usr/local/mysql/libexec/mysqld 来控制启动或者停止mysql:
# /usr/local/mysql/libexec/mysqld start #启动mysql
# /usr/local/mysql/libexec/mysqld stop #停止mysql
# /usr/local/mysql/libexec/mysqld restart #重启mysql
为了每次系统重启后都能运行mysql,可以写一个脚本放到 /usr/local/etc/rc.d目录下,用来运行mysql,我们写一个脚本mysql_start.sh
#! /bin/sh
/usr/local/mysql/bin/mysqld_safe&
然后保存到/usr/local/etc/rc.d目录下,那么以后reboot系统后都能启动mysql了.
二. 安装Apache
安装Apache要简单点,我这里安装的Apache版本是 httpd-2.0.50,去下载压缩包: http://httpd.apache.org/download.cgi.
下载回来的包叫做 httpd-2.0.50.tar.gz 我们放在 /usr/local/src目录下.
首先进入目录后解压缩:
# cd /usr/local/src
# tar -zxvf httpd-2.0.50.tar.gz
然后就会得到 httpd-2.0.50目录,我们进入目录
# cd httpd-2.0.50
首先配置:
# ./configure \
? --prefix=/usr/local/apache \ #我们要把Apache安装在那个目录,我们这里装在 /usr/local/apache下
? --enable-shared=max \
? --enable-module=rewrite \
? --enable-module=so
执行上面的命令,如果没有错误信息,证明配置成功,然后进行编译:
# make
一两分钟就编译完了,然后进行安装:
# make install
安装完成后,Apache就存放在 /usr/local/apache目录下了, bin是执行文件的目录,conf是配置文件目录,htdocs是网页的主目录,logs是日志目录.
Apache通过 bin/apachectl或者bin/httpd来控制启动或者停止.
# /usr/local/apache/bin/httpd -k start #启动apache
# /usr/local/apache/bin/httpd -k stop #停止apache
# /usr/local/apache/bin/httpd -k restart #重启apache
然后你可以通过 http://localhost 来测试apache是否安装成功,如果出现apache的页面则安装成功,否则请检查上面的步骤.
三. 安装PHP
我们使用的PHP版本是4.3.8,先去下载: http://www.php.net/downloads.php, 下回来的包叫做 php-4.3.8.tar.gz, 放到/usr/local/src目录下.
首先进入该目录后解压缩:
# cd /usr/local/src
# tar -zxvf php-4.3.8.tar.gz
解压后进入目录:
# cd php-4.3.8
进行配置,这一步比较关键,一定要设置好,特别是要考虑到你要支持什么,比如GD库,xml,mysql等等,如果想知道详细的配置,执行 ./configure --help来获得:
# ./configure \
? --with-apxs2=/usr/local/apache/bin/apxs \
? --disable-debug \ #关闭php内部调试
? --enable-safe-mode \ #打开php的安全模式
? --enable-trans-sid \
? --with-xml \ #支持xml
? --with-mysql \ #支持mysql
? --enable-short-tags \ #支持PHP的短标记
? --with-gd \ #支持GD库
? --with-zlib \ #支持zlib
? --with-jpeg \
? --with-png \
? --enable-memory-limit \
? --disable-posix \
? --with-config-file-path=/usr/local/lib
如果上面的配置没有错误的话,那么应该最后会显示感谢使用PHP等字样,那么证明配置成功,如果上面的配置选项不支持的话,会提示错误.
比如你没有安装mysql,那么--with-mysql就无法使用,所以一定要注意对应选项系统是否能够支持,如果出现错误,那么就先安装对应的程序,或者去掉相关选项.
配置之后就进行编译:
# make
编译成功后出现"Build complete."字样,那么就可以进行安装了:
# make install
安装完成后把/usr/local/src/php-4.3.8/php.ini-dist复制到/usr/local/lib/,并重命名为php.ini
# cp /usr/local/src/php-4.3.8/php.ini-dist /usr/local/lib/php.ini
基本到这里PHP就安装成功了,如果中间出现错误,除了在配置的时候没有选对选项之后一般都不出现错误.
四. 整合Apache+PHP
为了让Apache能够直接解析php,我们还要进行一些配置.
首先进入apache的配置文件目录:
# cd /usr/local/apache/conf
然后用vi打开配置文件httpd.conf:
# vi httpd.conf
在httpd.conf文件中,添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
应该将以上两句添加在其他AddType之后。
确保文件中有以下一句话,没有就自己添加在所有LoadModule之后。
LoadModule php4_module modules/libphp4.so
好了,在vi中使用":wq"保存httpd.conf文件,退出vi。启动apache server:
# /usr/local/apache/bin/httpd start
现在apache就能够运行php了,写个文件测试一下,在/usr/local/apache/htdocs目录下,新建一个phpinfo.php文件,
文件中只有一行代码:
phpinfo(); ?>
保存此文件, 在你的浏览器中输入http://localhost/phpinfo.php,你应该看到PHP的系统信息。
如果出现错误,比如提示你下灾phpinfo.php,那么apache就是还无法解析php文件,那么请仔细检查以上的操作是否正确.
好,到这里,基本上Mysql+Apache+PHP安装完成,那么就能做Web服务器了,比如传个论坛,
同时提醒可以传个phpMyadmin去管理你的mysql,现在最新版本是phpMyadmin2.6-beta
安装FreeBSD就不讲了,只要稍微定制一下就可以了,过程我就不说了,我用的FreeBSD版本是5.2.1,应该是现在比较新的版本,以后就不知道了 :) .
一. 安装MySQL
我使用的的Mysql是4.0.20,源代码版,你也可以使用RPM包或者二进制版,安装方法可能不一样,请参考其它文章.
先下载Mysql2.0.20的源代码版,地址: http://dev.mysql.com/downloads/mysql/4.0.html
把它下到/usr/local/src目录下,如果没有该目录,就自己建一个.下载回来的包名字叫 mysql-4.0.20.tar.gz,然后我们把它解压出来:
# tar -zxvf mysql-4.0.20.tar.gz
解压后生成mysql-4.0.20目录,我们进入该目录:
# cd mysql-4.0.20
进入后就开始配置mysql了,配置过程中我们要给mysql设置一个安装目录,我们设置在 /usr/local/mysql 下,以为把文件放到一个地方比较容易管理,如果你还想获得更多的配置信息,使用 ./configure --help:
# ./configure --prefix=/usr/local/mysql
然后等几秒钟,配置完成后就编译源代码:
# make
这个编译的过程比较长,如果机器比较慢的话,可能要近二十分种 ( PS:我的机器是很普通的机器,所有用了差不多15,6分种 :( ) .
编译完成后就安装:
# make install
等上几秒钟,安装完成.下面就到了最关键的部分了,为什么老安装不成功,(PS:至少我是安装了N次,N > 10 ,呵呵),问题关键就在这里,访问mysql要一个专门的用户,而且必须给相应的访问权限,这里我们就设置root和mysql有权限访问.
我们先建立一个mysql和mysql用户来访问mysql:
# pw groupadd mysql #建立mysql组
# pw useradd mysql -g mysql #建立mysql用户并且加入到mysql组中
建立用户后我们就初始化表 (注意:必须先执行本步骤后才能进行以下步骤)
# ./scripts/mysql_install_db --user=mysql #初试化表并且规定用mysql用户来访问
初始化表以后就开始给mysql和root用户设定访问权限, 我们先到安装mysql的目录:
# cd /usr/local/mysql
然后设置权限
# chown -R root . #设定root能访问/usr/local/mysql
# chown -R mysql var #设定mysql用户能访问/usr/local/mysql/var ,里面存的是mysql的数据库文件
# chown -R mysql var/. #设定mysql用户能访问/usr/local/mysql/var下的所有文件
# chown -R mysql var/mysql/. #设定mysql用户能访问/usr/local/mysql/var/mysql下的所有文件
# chgrp -R mysql . #设定mysql组能够访问/usr/local/mysql
设置完成后,基本上就装好了,好了,我们运行一下我们的mysql:
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
如果没有问题的话,应该会出现类似这样的提示:
[1] 42264
# Starting mysqld daemon with databases from /usr/local/mysql/var
这就证明你安装成功了,如果出现:
[1] 42264
# Starting mysqld daemon with databases from /usr/local/mysql/var
040818 10:53:45 mysqld ended
则证明你的mysql运行不来,请查看错误日志: /usr/local/mysql/var/*.err 然后确定安装是否成功,如果没有成功,请检查上面的步骤是否正确.
安装完成后,能够通过 /usr/local/mysql/bin/mysql 来连接mysql进行管理,如果你装了apache并且能够解析php的话,也能使用phpMyadmin来管理你的mysql,记得装完后使用 mysql或者mysqladmin来修改root的密码,这里我们就不说了,请参考相关的文章.
控制mysql就通过 /usr/local/mysql/libexec/mysqld 来控制启动或者停止mysql:
# /usr/local/mysql/libexec/mysqld start #启动mysql
# /usr/local/mysql/libexec/mysqld stop #停止mysql
# /usr/local/mysql/libexec/mysqld restart #重启mysql
为了每次系统重启后都能运行mysql,可以写一个脚本放到 /usr/local/etc/rc.d目录下,用来运行mysql,我们写一个脚本mysql_start.sh
#! /bin/sh
/usr/local/mysql/bin/mysqld_safe&
然后保存到/usr/local/etc/rc.d目录下,那么以后reboot系统后都能启动mysql了.
二. 安装Apache
安装Apache要简单点,我这里安装的Apache版本是 httpd-2.0.50,去下载压缩包: http://httpd.apache.org/download.cgi.
下载回来的包叫做 httpd-2.0.50.tar.gz 我们放在 /usr/local/src目录下.
首先进入目录后解压缩:
# cd /usr/local/src
# tar -zxvf httpd-2.0.50.tar.gz
然后就会得到 httpd-2.0.50目录,我们进入目录
# cd httpd-2.0.50
首先配置:
# ./configure \
? --prefix=/usr/local/apache \ #我们要把Apache安装在那个目录,我们这里装在 /usr/local/apache下
? --enable-shared=max \
? --enable-module=rewrite \
? --enable-module=so
执行上面的命令,如果没有错误信息,证明配置成功,然后进行编译:
# make
一两分钟就编译完了,然后进行安装:
# make install
安装完成后,Apache就存放在 /usr/local/apache目录下了, bin是执行文件的目录,conf是配置文件目录,htdocs是网页的主目录,logs是日志目录.
Apache通过 bin/apachectl或者bin/httpd来控制启动或者停止.
# /usr/local/apache/bin/httpd -k start #启动apache
# /usr/local/apache/bin/httpd -k stop #停止apache
# /usr/local/apache/bin/httpd -k restart #重启apache
然后你可以通过 http://localhost 来测试apache是否安装成功,如果出现apache的页面则安装成功,否则请检查上面的步骤.
三. 安装PHP
我们使用的PHP版本是4.3.8,先去下载: http://www.php.net/downloads.php, 下回来的包叫做 php-4.3.8.tar.gz, 放到/usr/local/src目录下.
首先进入该目录后解压缩:
# cd /usr/local/src
# tar -zxvf php-4.3.8.tar.gz
解压后进入目录:
# cd php-4.3.8
进行配置,这一步比较关键,一定要设置好,特别是要考虑到你要支持什么,比如GD库,xml,mysql等等,如果想知道详细的配置,执行 ./configure --help来获得:
# ./configure \
? --with-apxs2=/usr/local/apache/bin/apxs \
? --disable-debug \ #关闭php内部调试
? --enable-safe-mode \ #打开php的安全模式
? --enable-trans-sid \
? --with-xml \ #支持xml
? --with-mysql \ #支持mysql
? --enable-short-tags \ #支持PHP的短标记
? --with-gd \ #支持GD库
? --with-zlib \ #支持zlib
? --with-jpeg \
? --with-png \
? --enable-memory-limit \
? --disable-posix \
? --with-config-file-path=/usr/local/lib
如果上面的配置没有错误的话,那么应该最后会显示感谢使用PHP等字样,那么证明配置成功,如果上面的配置选项不支持的话,会提示错误.
比如你没有安装mysql,那么--with-mysql就无法使用,所以一定要注意对应选项系统是否能够支持,如果出现错误,那么就先安装对应的程序,或者去掉相关选项.
配置之后就进行编译:
# make
编译成功后出现"Build complete."字样,那么就可以进行安装了:
# make install
安装完成后把/usr/local/src/php-4.3.8/php.ini-dist复制到/usr/local/lib/,并重命名为php.ini
# cp /usr/local/src/php-4.3.8/php.ini-dist /usr/local/lib/php.ini
基本到这里PHP就安装成功了,如果中间出现错误,除了在配置的时候没有选对选项之后一般都不出现错误.
四. 整合Apache+PHP
为了让Apache能够直接解析php,我们还要进行一些配置.
首先进入apache的配置文件目录:
# cd /usr/local/apache/conf
然后用vi打开配置文件httpd.conf:
# vi httpd.conf
在httpd.conf文件中,添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
应该将以上两句添加在其他AddType之后。
确保文件中有以下一句话,没有就自己添加在所有LoadModule之后。
LoadModule php4_module modules/libphp4.so
好了,在vi中使用":wq"保存httpd.conf文件,退出vi。启动apache server:
# /usr/local/apache/bin/httpd start
现在apache就能够运行php了,写个文件测试一下,在/usr/local/apache/htdocs目录下,新建一个phpinfo.php文件,
文件中只有一行代码:
phpinfo(); ?>
保存此文件, 在你的浏览器中输入http://localhost/phpinfo.php,你应该看到PHP的系统信息。
如果出现错误,比如提示你下灾phpinfo.php,那么apache就是还无法解析php文件,那么请仔细检查以上的操作是否正确.
好,到这里,基本上Mysql+Apache+PHP安装完成,那么就能做Web服务器了,比如传个论坛,
同时提醒可以传个phpMyadmin去管理你的mysql,现在最新版本是phpMyadmin2.6-beta
http://dev.mysql.com/downloads/mysql/5.0.html

C/C++编写CGI程序之form处理
1. GET
2. POST
3. 结束
我们有一张web
test.html
1. GET
首先我们来获取GET方式的form
在环境变量QUERY_STRING里面,存储着GET提交的字符串
cgi-get.c
编译后,复制到cgi-bin目录下,名为test-get.cgi,确保apache用户拥有执行权限
然后登陆test.html,填写dorainm和linux测试get提交方式,获得
name=dorainm&pswd=linux
2. POST
POST是通过标准输入来获取form提交的字符串的
环境变量CONTENT_LENGTH里面,存储着POST提交的字符串的长度
看 test-post.c 的源码
同样,编译后复制到cgi-bin目录下,名为test-post.cgi
测试以POST方式提交guaicat和gnu,可以看到
name=guaicat&pswd=gnu
3. 结束
今天头非常痛,文字描述比较少,大家看代码
哪天有时间写个C++的CGI的类或者C语言CGI库吧
1. GET
2. POST
3. 结束
我们有一张web
test.html
<html>
<head>
<title>form test</title>
</head>
<body>
<form method="get" name="test-get" action="./cgi-bin/test-get.cgi">
<input name="name"><input name="pswd"><input type=submit value="get">
</form>
<br><br>
<form method="post" name="test-post" action="./cgi-bin/test-post.cgi">
<input name="name"><input name="pswd"><input type=submit value="post">
</form>
</body>
</html>
<head>
<title>form test</title>
</head>
<body>
<form method="get" name="test-get" action="./cgi-bin/test-get.cgi">
<input name="name"><input name="pswd"><input type=submit value="get">
</form>
<br><br>
<form method="post" name="test-post" action="./cgi-bin/test-post.cgi">
<input name="name"><input name="pswd"><input type=submit value="post">
</form>
</body>
</html>
1. GET
首先我们来获取GET方式的form
在环境变量QUERY_STRING里面,存储着GET提交的字符串
cgi-get.c
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
fprintf( stdout, "Content-type:text/html\n\n");
fprintf( stdout, "<html><title>get</title>\n");
if( getenv("QUERY_STRING" ) )
{
fprintf( stdout, getenv("QUERY_STRING" ) );
}
else
{
fprintf( stdout, "(NULL)\n" );
}
fprintf( stdout, "</html>\n" );
return 0;
};
#include <stdlib.h>
int main( void )
{
fprintf( stdout, "Content-type:text/html\n\n");
fprintf( stdout, "<html><title>get</title>\n");
if( getenv("QUERY_STRING" ) )
{
fprintf( stdout, getenv("QUERY_STRING" ) );
}
else
{
fprintf( stdout, "(NULL)\n" );
}
fprintf( stdout, "</html>\n" );
return 0;
};
编译后,复制到cgi-bin目录下,名为test-get.cgi,确保apache用户拥有执行权限
然后登陆test.html,填写dorainm和linux测试get提交方式,获得
name=dorainm&pswd=linux
2. POST
POST是通过标准输入来获取form提交的字符串的
环境变量CONTENT_LENGTH里面,存储着POST提交的字符串的长度
看 test-post.c 的源码
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
int i, n;
fprintf( stdout, "Content-type:text/html\n\n" );
fprintf( stdout, "<html><title>post</title>" );
if( getenv("CONTENT_LENGTH") )
{
n = atoi( getenv("CONTENT_LENGTH") );
}
else
{
n = 0;
fprintf( stdout, "(NULL)" );
}
for( i=0; i<n; i++ )
{
fputc( getc(stdin), stdout );
}
fprintf( stdout, "\n</html>\n" );
return 0;
}
#include <stdlib.h>
int main( void )
{
int i, n;
fprintf( stdout, "Content-type:text/html\n\n" );
fprintf( stdout, "<html><title>post</title>" );
if( getenv("CONTENT_LENGTH") )
{
n = atoi( getenv("CONTENT_LENGTH") );
}
else
{
n = 0;
fprintf( stdout, "(NULL)" );
}
for( i=0; i<n; i++ )
{
fputc( getc(stdin), stdout );
}
fprintf( stdout, "\n</html>\n" );
return 0;
}
同样,编译后复制到cgi-bin目录下,名为test-post.cgi
测试以POST方式提交guaicat和gnu,可以看到
name=guaicat&pswd=gnu
3. 结束
今天头非常痛,文字描述比较少,大家看代码
哪天有时间写个C++的CGI的类或者C语言CGI库吧
1 Vinton Cerf :号称互联网之父,TCIP/IP协议和互联网架构的合作设计者。他05年10月3日开始正式为Google工作,职位为"首席互联网传布官"。
2 Joshua Bloch :号称java教父,《Effective Java》《JAVA PUZZLE》的作者,JSR175标准的leader,J2SE 1.5的主要开发人员之一。
3 Guido Van Rossum: Python之父。Google把Python用的炉火纯青,有了Python之父的加盟,肯定如虎添翼了。
4 Andrew Morton: linux的二号人物。其在google的工作仍是继续维护linux2.6内核
5 Mark Lucovsky: Windows核心设计师。不晓得碰到了Morton会不会吵起来 :-)
6 Bram Moolenaar:Vim的作者
7 Darin Fisher :Mozilla项目主力开发者
8 Sean Egan: Gaim开发团队的leader
9 Greg Stein: Apache项目主要开发者,Apache基金会主席
10 Udi Manber: Amazon的A9搜索团队总监
11 Rob Pike,Plan 9 OS主力开发者
12 Adam Bosworth: BEA的首席架构师
13 Larry Brilliant: 网络先驱大慈善家,负责google.org
14 Andy Hertzfeld:曾经是Macintosh研发团队核心成员
15 Louis Monier:Internet搜索的发明者,eBay的前开发总监
16 Adndrew W Moore :卡内基美隆大学资讯与机器人工程学的教授,他将负责Google在匹兹堡新创立的实验室
17 Alan Davidson:Centre for Democracy & Technology的协理,他负责处理处理google与美国政府的关系
18 Ben Goodger:Firefox的主要设计者
//(已由Google 加入微软) 19 Danny Thorpe, Delphi开发者,原Borland首席科学家
20 Alexander Limi, plone创始人
21 David Presotto, plan 9创始人
2 Joshua Bloch :号称java教父,《Effective Java》《JAVA PUZZLE》的作者,JSR175标准的leader,J2SE 1.5的主要开发人员之一。
3 Guido Van Rossum: Python之父。Google把Python用的炉火纯青,有了Python之父的加盟,肯定如虎添翼了。
4 Andrew Morton: linux的二号人物。其在google的工作仍是继续维护linux2.6内核
5 Mark Lucovsky: Windows核心设计师。不晓得碰到了Morton会不会吵起来 :-)
6 Bram Moolenaar:Vim的作者
7 Darin Fisher :Mozilla项目主力开发者
8 Sean Egan: Gaim开发团队的leader
9 Greg Stein: Apache项目主要开发者,Apache基金会主席
10 Udi Manber: Amazon的A9搜索团队总监
11 Rob Pike,Plan 9 OS主力开发者
12 Adam Bosworth: BEA的首席架构师
13 Larry Brilliant: 网络先驱大慈善家,负责google.org
14 Andy Hertzfeld:曾经是Macintosh研发团队核心成员
15 Louis Monier:Internet搜索的发明者,eBay的前开发总监
16 Adndrew W Moore :卡内基美隆大学资讯与机器人工程学的教授,他将负责Google在匹兹堡新创立的实验室
17 Alan Davidson:Centre for Democracy & Technology的协理,他负责处理处理google与美国政府的关系
18 Ben Goodger:Firefox的主要设计者
//(已由Google 加入微软) 19 Danny Thorpe, Delphi开发者,原Borland首席科学家
20 Alexander Limi, plone创始人
21 David Presotto, plan 9创始人
shell特有变量
$ # 传递到脚本的参数个数$ * 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$ $ 脚本运行的当前进程I D号
$ ! 后台运行的最后一个进程的进程I D号
$ @ 与$ #相同,但是使用时加引号,并在引号中返回每个参数
$ - 显示s h e l l使用的当前选项,与s e t命令功能相同
$ ? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
使用/etc/init.d/funtction里的函数来进行进程的启动,状态,停止。
开机自动打开NUMLOCK
for t in `seq 1 8`
do
setleds -D +num
$t>/dev/null
done
参数 -D 才能改变default flags
当然如果把num换成caps,scroll就能改变capslock、scrolllock的状态注:man setleds
在SHELL程序中实现‘按任意键继续’
#!/bin/sh
get_char()
{
SAVEDSTTY=`stty -g`
stty -echo
stty raw
dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -raw
stty echo
stty $SAVEDSTTY
}
echo "Press any key to continue..."
char=`get_char` 注:man stty
如何批量杀掉进程
ps -ef |grep java |grep -v grep |awk '{print $2}' |xargs kill -9
批量启动进程
#! /bin/sh
if [ $# -lt "4" ]
then
echo usage: process port username_start username_stop
fi
name=$1
i=$3
j=$4
port=$2
while(( i < j ))
do
$name $port user$i arg1 arg2 &
((i++))
((port++))
done
$ # 传递到脚本的参数个数$ * 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$ $ 脚本运行的当前进程I D号
$ ! 后台运行的最后一个进程的进程I D号
$ @ 与$ #相同,但是使用时加引号,并在引号中返回每个参数
$ - 显示s h e l l使用的当前选项,与s e t命令功能相同
$ ? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
使用/etc/init.d/funtction里的函数来进行进程的启动,状态,停止。
开机自动打开NUMLOCK
for t in `seq 1 8`
do
setleds -D +num
$t>/dev/null
done
参数 -D 才能改变default flags
当然如果把num换成caps,scroll就能改变capslock、scrolllock的状态注:man setleds
在SHELL程序中实现‘按任意键继续’
#!/bin/sh
get_char()
{
SAVEDSTTY=`stty -g`
stty -echo
stty raw
dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -raw
stty echo
stty $SAVEDSTTY
}
echo "Press any key to continue..."
char=`get_char` 注:man stty
如何批量杀掉进程
ps -ef |grep java |grep -v grep |awk '{print $2}' |xargs kill -9
批量启动进程
#! /bin/sh
if [ $# -lt "4" ]
then
echo usage: process port username_start username_stop
fi
name=$1
i=$3
j=$4
port=$2
while(( i < j ))
do
$name $port user$i arg1 arg2 &
((i++))
((port++))
done
“破解就这么难吗?对面商铺上周就已经开始卖能打电话的iPhone手机了,你怎么到现在还做不出来?”北京中关村科贸电子城,经营着两家手机专卖店的杨老板大声训斥着技术人员李书(化名)。
面对老板的斥责,李书只是揉了下布满血丝的眼睛,又把头埋在了电脑前。
他已经在电脑前坐了快一个星期了。由于苹果公司对只在美国发售的iphone手机采取了极其严格的验证机制,小李刚拿到崭新的iphone时几乎就是一块废铁——不能听音乐,不能发送短信,甚至都不能拨打电话。在他整整一周的努力后,iPhone的多数功能被破解,部分菜单也已被翻译成了中文,但时至今日,最关键的打电话功能依然没有破解。
此前,由于李书声称很快就可以完成破解工作,杨老板就提前在淘宝网上公布了预订破解版iPhone的时间。但随着破解受阻,他却只能眼睁睁地看着一个个预订客户流失到别人那里。
“我们这行,时间就是金钱。上周,第一批破解的iPhone手机每台都卖到了8000元以上,贵的甚至卖到了一万元左右,每台的利润都超过了4000元。为了能够让他快点破解,我花了一万多元买下了两台iPhone手机和全套的破解设备给他使用。但是没想到他那么没用,花了一周时间都搞不定,现在手机的价钱已经降到6000多元,再过几天就真的没什么赚头了。”面对记者,杨老板依然余怒未息。
而提起破解的过程,李书则是一脸的委屈。“我此前从来没有遇见过那么难破解的手机。”他告诉记者,尽管网上已经有了各种破解的视频教程,但他发现在实际操作中,破解的过程要比这些教程中所说的复杂得多。
“到目前为止,我还没听说有谁能将iPhone完全破解,目前市面上所谓的破解版本都或多或少存在问题。”李书说道。
尽管如此,种种迹象依然显示,一旦iPhone拨/接电话和收发短信等主要功能得以成功破解,这款划时代的手机将有望成为中国今年水货市场最璀璨的“明星”。
疯狂的iPhone
自从iPod播放器风靡全球之后,人们对于苹果产品的崇拜进入了癫狂的状态,其新近推出的iPhone手机当然也不例外。
从诞生之日起,iPhone这部被分析师誉为“时尚最佳工业设计之一”的手机、多媒体播放器和无线上网设备的综合体就承载了太多的赞誉,吸引了太多的眼球。
6月29日,美国东部时间18点整,一位顾客走进了纽约第五大街的苹果专卖店,在苹果公司职员的掌声中接过了iPhone公开发售的第一台手机。为了争得这个第一,他已经在门口风餐露宿了4天之久。而在此后的几个小时内,苹果公司的合作商AT&T的1800多家零售店中的所有iPhone就被抢购一空。
眼见一机难求,不少消费者不得不转而求助于互联网。在拍卖网站eBay上,不少原价599美元的iPhone被人标上了1000美元以上的高价,但购买者却依然趋之若鹜。据一项统计数据显示,在48小时内,iPhone的销量就突破了27万台。
而在大洋彼岸的中国,虽然iPhone尚没有进入中国的时间表,但是水货正在让iPhone手机如《越狱》般成为当下最热的话题。
在上市短短一周后,使用黑客手段激活iphone的方法就在互联网上流传开来,被激活的iPhone可以使用除了拨打/接听电话和收发短信外的所有功能。公开这个方法的正是以破解DVD分区和苹果iTunes音乐销售网站数字版权管理(DRM)程序而知名的黑客“DVD乔恩”。
尽管受到了国内粉丝极大的关注,但由于没有电话功能的iPhone只相当于一个宽屏的iPod,近万元的价格还是让绝大多数人望而却步。
“问的人络绎不绝,但很多都是随便问问,我们真正卖出去的货只有两台。”一位手机店店主告诉记者。
7月29日:iPhone松绑日
直到7月29日,一部视频的出现让这一切都完全改变了。
在YouTube网站,一位名为“ozbimmer”的澳大利亚黑客贴出了一段演示自己破解iPhone全过程的视频。从视频中可以看出,经他破解后的iPhone可以拨打电话,但不能接收电话或者发送/接收短信。
尽管迫于压力,他很快便删除了这段视频并拒绝接受任何采访,但这段视频已经随着互联网流遍全球,并被认为是全球黑客在破解iPhone上取得的最大突破。
“我在听说这个消息后马上就联系供货商订货了。” 杨老板告诉记者。
但他的动作已经慢了一拍。
当他打电话到供货商那里的时候,对方的回答却是——断货。着急的杨老板不得不和对方软磨硬泡,看在多年合作的关系上,供货商才发了两台容量4GB的iPhone给他。“8GB的绝对没有了。”对方斩钉截铁地说道。
据记者不完全统计,自从电话功能被破解以来,iPhone在中国的销量已经翻了数倍。仅以科贸电子城为例,卖掉5台以上iPhone的商家就至少有两家,据商家透露,每台iPhone的利润至少都在1000元以上。随着iPhone的火热,各种相关的破解工具一时也是“洛阳纸贵”。
在目前,全世界破解iPhone电话功能的手段都大同小异。简单来说,就是通过穷举法等技术手段获取AT&T和当地运营商SIM卡中的信息后,将其融合到一张新的IC卡上。通过这样的处理,这张IC卡就能够在使用本地运营商的网络同时 “瞒过” iPhone的鉴别程序。
在这个复杂的流程中有两样东西十分关键。一样是写卡器,另一样是一种被俗称为877卡的IC卡。随着iPhone的火热,这些破解工具一时之间也变得炙手可热起来。
“877卡100元1张,你不买过两天就没了。”在淘宝上,一位卖家语气强硬地告诉记者。而杨老板一周前在此订购的价格仅仅是30元。
据了解,由于需求量较小,这种IC卡已经停产多时。而随着iphone破解的火热,许多商家都在大量购入以备不时之需,这就导致了此类IC卡价格的疯涨。
记者于截稿前获悉,iPhone在中国的隐秘流行甚至惊动了IC卡产业链的上游,台湾一些IC卡厂商已经接到了国内的订单,即将恢复对877卡的生产。
热潮下的隐忧
面对这场来势汹汹的iPhone热潮,一些专家却表现得忧心忡忡,并对国内狂热的消费者提出了警告。
“首先,不管购买还是销售水货手机都是违法行为,任何交易环节中出现问题,消费者都是得不到法律保护的。”法律专家告诉记者。
不仅于此,机器本身的风险同样让消费者无法回避。
“手机为了破解电话功能,许多人将自己的的SIM卡邮寄给了商家,简直就是开门揖盗。”一位业内人士向记者透露,许多消费者根本没有意识到,自己的这种做法有着极大的风险。
“商家在获得SIM卡后可以轻易克隆一张一模一样的卡进行盗打,由此产生的话费则都将由消费者承担。”他担忧地表示。
记者了解到,事实上在iPhone流行之前,877卡的一个主要的非法用途就是克隆SIM卡并盗打他人电话。而拥有破解技术的商家对克隆SIM卡的技术更是驾轻就熟,而买家对此则几乎没有任何有效的防范手段。
此外由于违反了使用条款,经过破解的iPhone也无法享受到苹果方面的保修服务。尽管不少商家拍胸脯保证将为买家提供半年或一年的保修,但这种保证的真实性却令人怀疑。
“我们可没能力提供保修,你手机坏了总不能让我们出钱帮你修啊。”杨老板说道。他认为,网上许多所谓能提供一年保修的商家不是对相关规定一无所知就是有意进行欺骗。
面对老板的斥责,李书只是揉了下布满血丝的眼睛,又把头埋在了电脑前。
他已经在电脑前坐了快一个星期了。由于苹果公司对只在美国发售的iphone手机采取了极其严格的验证机制,小李刚拿到崭新的iphone时几乎就是一块废铁——不能听音乐,不能发送短信,甚至都不能拨打电话。在他整整一周的努力后,iPhone的多数功能被破解,部分菜单也已被翻译成了中文,但时至今日,最关键的打电话功能依然没有破解。
此前,由于李书声称很快就可以完成破解工作,杨老板就提前在淘宝网上公布了预订破解版iPhone的时间。但随着破解受阻,他却只能眼睁睁地看着一个个预订客户流失到别人那里。
“我们这行,时间就是金钱。上周,第一批破解的iPhone手机每台都卖到了8000元以上,贵的甚至卖到了一万元左右,每台的利润都超过了4000元。为了能够让他快点破解,我花了一万多元买下了两台iPhone手机和全套的破解设备给他使用。但是没想到他那么没用,花了一周时间都搞不定,现在手机的价钱已经降到6000多元,再过几天就真的没什么赚头了。”面对记者,杨老板依然余怒未息。
而提起破解的过程,李书则是一脸的委屈。“我此前从来没有遇见过那么难破解的手机。”他告诉记者,尽管网上已经有了各种破解的视频教程,但他发现在实际操作中,破解的过程要比这些教程中所说的复杂得多。
“到目前为止,我还没听说有谁能将iPhone完全破解,目前市面上所谓的破解版本都或多或少存在问题。”李书说道。
尽管如此,种种迹象依然显示,一旦iPhone拨/接电话和收发短信等主要功能得以成功破解,这款划时代的手机将有望成为中国今年水货市场最璀璨的“明星”。
疯狂的iPhone
自从iPod播放器风靡全球之后,人们对于苹果产品的崇拜进入了癫狂的状态,其新近推出的iPhone手机当然也不例外。
从诞生之日起,iPhone这部被分析师誉为“时尚最佳工业设计之一”的手机、多媒体播放器和无线上网设备的综合体就承载了太多的赞誉,吸引了太多的眼球。
6月29日,美国东部时间18点整,一位顾客走进了纽约第五大街的苹果专卖店,在苹果公司职员的掌声中接过了iPhone公开发售的第一台手机。为了争得这个第一,他已经在门口风餐露宿了4天之久。而在此后的几个小时内,苹果公司的合作商AT&T的1800多家零售店中的所有iPhone就被抢购一空。
眼见一机难求,不少消费者不得不转而求助于互联网。在拍卖网站eBay上,不少原价599美元的iPhone被人标上了1000美元以上的高价,但购买者却依然趋之若鹜。据一项统计数据显示,在48小时内,iPhone的销量就突破了27万台。
而在大洋彼岸的中国,虽然iPhone尚没有进入中国的时间表,但是水货正在让iPhone手机如《越狱》般成为当下最热的话题。
在上市短短一周后,使用黑客手段激活iphone的方法就在互联网上流传开来,被激活的iPhone可以使用除了拨打/接听电话和收发短信外的所有功能。公开这个方法的正是以破解DVD分区和苹果iTunes音乐销售网站数字版权管理(DRM)程序而知名的黑客“DVD乔恩”。
尽管受到了国内粉丝极大的关注,但由于没有电话功能的iPhone只相当于一个宽屏的iPod,近万元的价格还是让绝大多数人望而却步。
“问的人络绎不绝,但很多都是随便问问,我们真正卖出去的货只有两台。”一位手机店店主告诉记者。
7月29日:iPhone松绑日
直到7月29日,一部视频的出现让这一切都完全改变了。
在YouTube网站,一位名为“ozbimmer”的澳大利亚黑客贴出了一段演示自己破解iPhone全过程的视频。从视频中可以看出,经他破解后的iPhone可以拨打电话,但不能接收电话或者发送/接收短信。
尽管迫于压力,他很快便删除了这段视频并拒绝接受任何采访,但这段视频已经随着互联网流遍全球,并被认为是全球黑客在破解iPhone上取得的最大突破。
“我在听说这个消息后马上就联系供货商订货了。” 杨老板告诉记者。
但他的动作已经慢了一拍。
当他打电话到供货商那里的时候,对方的回答却是——断货。着急的杨老板不得不和对方软磨硬泡,看在多年合作的关系上,供货商才发了两台容量4GB的iPhone给他。“8GB的绝对没有了。”对方斩钉截铁地说道。
据记者不完全统计,自从电话功能被破解以来,iPhone在中国的销量已经翻了数倍。仅以科贸电子城为例,卖掉5台以上iPhone的商家就至少有两家,据商家透露,每台iPhone的利润至少都在1000元以上。随着iPhone的火热,各种相关的破解工具一时也是“洛阳纸贵”。
在目前,全世界破解iPhone电话功能的手段都大同小异。简单来说,就是通过穷举法等技术手段获取AT&T和当地运营商SIM卡中的信息后,将其融合到一张新的IC卡上。通过这样的处理,这张IC卡就能够在使用本地运营商的网络同时 “瞒过” iPhone的鉴别程序。
在这个复杂的流程中有两样东西十分关键。一样是写卡器,另一样是一种被俗称为877卡的IC卡。随着iPhone的火热,这些破解工具一时之间也变得炙手可热起来。
“877卡100元1张,你不买过两天就没了。”在淘宝上,一位卖家语气强硬地告诉记者。而杨老板一周前在此订购的价格仅仅是30元。
据了解,由于需求量较小,这种IC卡已经停产多时。而随着iphone破解的火热,许多商家都在大量购入以备不时之需,这就导致了此类IC卡价格的疯涨。
记者于截稿前获悉,iPhone在中国的隐秘流行甚至惊动了IC卡产业链的上游,台湾一些IC卡厂商已经接到了国内的订单,即将恢复对877卡的生产。
热潮下的隐忧
面对这场来势汹汹的iPhone热潮,一些专家却表现得忧心忡忡,并对国内狂热的消费者提出了警告。
“首先,不管购买还是销售水货手机都是违法行为,任何交易环节中出现问题,消费者都是得不到法律保护的。”法律专家告诉记者。
不仅于此,机器本身的风险同样让消费者无法回避。
“手机为了破解电话功能,许多人将自己的的SIM卡邮寄给了商家,简直就是开门揖盗。”一位业内人士向记者透露,许多消费者根本没有意识到,自己的这种做法有着极大的风险。
“商家在获得SIM卡后可以轻易克隆一张一模一样的卡进行盗打,由此产生的话费则都将由消费者承担。”他担忧地表示。
记者了解到,事实上在iPhone流行之前,877卡的一个主要的非法用途就是克隆SIM卡并盗打他人电话。而拥有破解技术的商家对克隆SIM卡的技术更是驾轻就熟,而买家对此则几乎没有任何有效的防范手段。
此外由于违反了使用条款,经过破解的iPhone也无法享受到苹果方面的保修服务。尽管不少商家拍胸脯保证将为买家提供半年或一年的保修,但这种保证的真实性却令人怀疑。
“我们可没能力提供保修,你手机坏了总不能让我们出钱帮你修啊。”杨老板说道。他认为,网上许多所谓能提供一年保修的商家不是对相关规定一无所知就是有意进行欺骗。
周未嘛 上了好久的班一直周未没有时间休息,这周未好不容易有一个休息的时间,刚才同学准备去网下游,没有想到本人没有带身份证,不能上网,其实在家也能上网,我们那包月,但是出来就是图个玩,就我没有身份证了,与是就到网上游来了,真是没有想到,玩了会游戏就无聊,突然看到一个片叫伊莎贝拉,想到宁在网上和我聊天时说她喜欢那个片的主题曲,与是我就看了会。。。。剧情还是非常生活化的。。。
故事以回归前的澳门为背景,讲述了一个警察被身边所有人抛弃、处于人生最彷徨的时候,突然遇到一个曾经被自己遗弃的人--自己的“女儿”。他很后悔当初自己做的事,想做出补偿。这个片子有别于彭浩翔以往的喜剧风格,讲述出家庭伦理关系以及人与人之间的感情故事。也许观众所感会正如彭浩翔所说,人常常会做错事,但做错了就没有办法重来,没有办法弥补;可是突然有一天,好像时光倒流般,你有机会为自己的错误作出弥补了,你又能牺牲多少东西来补偿?
故事以回归前的澳门为背景,讲述了一个警察被身边所有人抛弃、处于人生最彷徨的时候,突然遇到一个曾经被自己遗弃的人--自己的“女儿”。他很后悔当初自己做的事,想做出补偿。这个片子有别于彭浩翔以往的喜剧风格,讲述出家庭伦理关系以及人与人之间的感情故事。也许观众所感会正如彭浩翔所说,人常常会做错事,但做错了就没有办法重来,没有办法弥补;可是突然有一天,好像时光倒流般,你有机会为自己的错误作出弥补了,你又能牺牲多少东西来补偿?
利用hdparm提速硬盘
hdparm -X66 -d1 -m16 -c1 /dev/hda
-X66 ATA33=66, ATA66=68,此参数需谨慎设定,不懂最好不要用。
-d1 开启dma
-m16 设定MultSect为MaxMultSect
-c1 将操作模式设定为 32-bits
测试性能:hdparm -tT /dev/hda
保存设置:hdparm -k1 /dev/hda
查看设置:hdparm [-i] /dev/hda
不过好像保存设置不起作用,干脆写入到/etc/hdparm.conf文件得了,hdparm.conf中,hdparm命令的每一个参数都有一个对应的option,并且有详细的说明和例子,参照着写就可以了,这才是一劳永逸的办法。
/dev/hda {
dma = on
io32_support = 1
mult_sect_io = 16
#transfer_mode = 66
}
这四个选项分别对应上面说明的四个参数,基本上也是最常用的。
rpm形式的安装包转换为deb形式
alien xxx.rpm
Linux下有什么数据库设计工具或者建模工具么?
有的人使用wine模拟运行PowerDesigner,但似乎效果不怎么好。如果使用的是Mysql数据库,除了phpMyAdmin可用之外,还有DBDesigner,以及mysql官方的workbench(尚未正式发布)。据说DBDesigner也支持Oracle。参考1,参考2。
《DBDesigner的安装》
如何才能浏览中文的pdf文件?
不管是evince,或者是epdfview,默认安装都无法查看中文pdf文件的,会有乱码,解决方法:
distro:ubuntu linux dapper
1 sudo apt-get install evince
2 sudo apt-get install xpdf-chinese-simplified
3 你需要一个中文字体,simsun,fireflysun皆可。
cd /usr/share/fonts
sudo ln -s < 你的字体存放的路径> < 字体名>.ttf //记住一定是.ttf!!!不能是*.ttc,或是别的什么。我开始就挂在这里了
比如:sudo ln -s /media/hda1/windows/fonts/simsun.ttc simsun.ttf
//我开始就挂在这里了
4 打开/etc/xpdf/xpdfrc-chinese-simplefied
将displayCIDFontTT改为
displayCIDFontTT Adobe-GB1 /usr/share/fonts/simsun.ttf
即可!
5 现在你的xpdf,evince都能显示中文了!
关闭IPV6
修改/etc/modprobe.d/aliases文件,增加:
alias net-pf-10 ipv6 off
alias net-pf-10 off
alias ipv6 off
注释掉:
#alias net-pf-10 ipv6
再新建一个/etc/modprobe.d/bad_list文件,内容为:
alias net-pf-10 off
然后重启。
挂载fat32移动硬盘分区,不乱码,可读写
mount /dev/sda1 /media/sda1 -t vfat -o iocharset=utf8,rw,umask=0
umount /media/sda1;
挂载网上邻居共享的ntfs分区,中文不乱码,普通用户可读写
mount -o username=test,password=pass,iocharset=utf8,codepage=cp936,dmask=777,fmask=777 //xjl/f /media/share/xjl-f;
iocharset用utf-8不行,必须是utf8,codepage用936也不行,必须是cp936。
-t smbfs可以不写,自动识别。其他参数在前在后也没关系。
dmask和fmask如果不指定,那么root以外的用户就只能读取或者执行(r+x)。
;
文章引用自:
hdparm -X66 -d1 -m16 -c1 /dev/hda
-X66 ATA33=66, ATA66=68,此参数需谨慎设定,不懂最好不要用。
-d1 开启dma
-m16 设定MultSect为MaxMultSect
-c1 将操作模式设定为 32-bits
测试性能:hdparm -tT /dev/hda
保存设置:hdparm -k1 /dev/hda
查看设置:hdparm [-i] /dev/hda
不过好像保存设置不起作用,干脆写入到/etc/hdparm.conf文件得了,hdparm.conf中,hdparm命令的每一个参数都有一个对应的option,并且有详细的说明和例子,参照着写就可以了,这才是一劳永逸的办法。
/dev/hda {
dma = on
io32_support = 1
mult_sect_io = 16
#transfer_mode = 66
}
这四个选项分别对应上面说明的四个参数,基本上也是最常用的。
rpm形式的安装包转换为deb形式
alien xxx.rpm
Linux下有什么数据库设计工具或者建模工具么?
有的人使用wine模拟运行PowerDesigner,但似乎效果不怎么好。如果使用的是Mysql数据库,除了phpMyAdmin可用之外,还有DBDesigner,以及mysql官方的workbench(尚未正式发布)。据说DBDesigner也支持Oracle。参考1,参考2。
《DBDesigner的安装》
如何才能浏览中文的pdf文件?
不管是evince,或者是epdfview,默认安装都无法查看中文pdf文件的,会有乱码,解决方法:
distro:ubuntu linux dapper
1 sudo apt-get install evince
2 sudo apt-get install xpdf-chinese-simplified
3 你需要一个中文字体,simsun,fireflysun皆可。
cd /usr/share/fonts
sudo ln -s < 你的字体存放的路径> < 字体名>.ttf //记住一定是.ttf!!!不能是*.ttc,或是别的什么。我开始就挂在这里了
比如:sudo ln -s /media/hda1/windows/fonts/simsun.ttc simsun.ttf
//我开始就挂在这里了
4 打开/etc/xpdf/xpdfrc-chinese-simplefied
将displayCIDFontTT改为
displayCIDFontTT Adobe-GB1 /usr/share/fonts/simsun.ttf
即可!
5 现在你的xpdf,evince都能显示中文了!
关闭IPV6
修改/etc/modprobe.d/aliases文件,增加:
alias net-pf-10 ipv6 off
alias net-pf-10 off
alias ipv6 off
注释掉:
#alias net-pf-10 ipv6
再新建一个/etc/modprobe.d/bad_list文件,内容为:
alias net-pf-10 off
然后重启。
挂载fat32移动硬盘分区,不乱码,可读写
mount /dev/sda1 /media/sda1 -t vfat -o iocharset=utf8,rw,umask=0
umount /media/sda1;
挂载网上邻居共享的ntfs分区,中文不乱码,普通用户可读写
mount -o username=test,password=pass,iocharset=utf8,codepage=cp936,dmask=777,fmask=777 //xjl/f /media/share/xjl-f;
iocharset用utf-8不行,必须是utf8,codepage用936也不行,必须是cp936。
-t smbfs可以不写,自动识别。其他参数在前在后也没关系。
dmask和fmask如果不指定,那么root以外的用户就只能读取或者执行(r+x)。
;
文章引用自:
限制进程CPU占用率的问题,给出了一个shell脚本代码如下:
renice +10 `ps aux | awk '{ if ($3 > 0.8 && id -u $1 > 500) print $2}'`
其中用到ps获取进程信息,其实
ps中%CPU一列的意义是进程实际占有CPU时间和它存活时间的比值,这个值能反应进程对CPU的消耗,但不能准确反应进程所占CPU时间占整个系统CPU的百分比。
而top输出中的%CPU这一列正是进程所占CPU时间占整个系统CPU的百分比,用于限制进程CPU占用率更加合理,同时%MEM一列还反应了进程占用内存的百分比,可以用于限制进程内存占用率。
shell脚本代码如下:
#!/bin/sh
PIDS=`top -bn 1 | grep "^ *[1-9]" | awk '{ if($9 > 50 || $10 > 25 && id -u $2 > 500) print $1}'`
for PID in $PIDS
do
renice +10 $PID
echo "renice +10 $PID"
done
可以将这个脚本放到cron中运行,比如每分钟检查一次,只需以root身份添加crontab项:
#crontab -e
* * * * * limit.sh
以后每个一分钟就会检查一次,调整占用50%以上CPU或25%内存的进程的nice值,从而使这样的进程优先级变低,被调度的机会减少,同时会向root发邮件提示该进程被调整过。
不过,限制内存使用最好还是用PAM,RedHat可以在/etc/security/limits.conf中设置。
本页内容为:linux上限制用户进程数、cpu占用率、内存使用率等,该文章本站转载自网络,如有侵权请告之,我们将会及时将其删除,其正文内容如下:
edit /etc/pam.d/login
#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so shadow nullok use_authtok
session required /lib/security/pam_pwdb.so
session required /lib/security/pam_limits.so
you have to add the last two lines
edit /etc/security/limits.conf
可带参数:
issue=filename:指定其他配置文件,而不是缺省的/etc/issue.
noesc:不对配置文件中的转移字符进行解释。
配置文件说明:
debug:将调试信息写入日志
conf=filename:指定配置文件
配置文件说明:该配置文件每一行(一个条目)的语法如下:
在这里
可以是
用户名
用户组名,采用@group的语法
通配符*,表示任何
可以是
soft-表示软限制,可以超过该限制
hard-表示硬限制,有root设定,内核执行,不可以超过该限制
可以是
core-core文件大小 (KB)
data-最大数据大小(KB)
fsize-最大文件大小(KB)
memlock-最大可用内存空间(KB)
nofile-最大可以打开的文件数量
rss-最大可驻留空间(KB)
stack-最大堆栈空间(KB)
cpu-最大CPU使用时间(MIN)
nproc-最大运行进程数
as-地址空间限制
参考:http://blog.sina.com.cn/s/blog_53689eaf0101b5xd.html
renice +10 `ps aux | awk '{ if ($3 > 0.8 && id -u $1 > 500) print $2}'`
其中用到ps获取进程信息,其实
ps中%CPU一列的意义是进程实际占有CPU时间和它存活时间的比值,这个值能反应进程对CPU的消耗,但不能准确反应进程所占CPU时间占整个系统CPU的百分比。
而top输出中的%CPU这一列正是进程所占CPU时间占整个系统CPU的百分比,用于限制进程CPU占用率更加合理,同时%MEM一列还反应了进程占用内存的百分比,可以用于限制进程内存占用率。
shell脚本代码如下:
#!/bin/sh
PIDS=`top -bn 1 | grep "^ *[1-9]" | awk '{ if($9 > 50 || $10 > 25 && id -u $2 > 500) print $1}'`
for PID in $PIDS
do
renice +10 $PID
echo "renice +10 $PID"
done
可以将这个脚本放到cron中运行,比如每分钟检查一次,只需以root身份添加crontab项:
#crontab -e
* * * * * limit.sh
以后每个一分钟就会检查一次,调整占用50%以上CPU或25%内存的进程的nice值,从而使这样的进程优先级变低,被调度的机会减少,同时会向root发邮件提示该进程被调整过。
不过,限制内存使用最好还是用PAM,RedHat可以在/etc/security/limits.conf中设置。
本页内容为:linux上限制用户进程数、cpu占用率、内存使用率等,该文章本站转载自网络,如有侵权请告之,我们将会及时将其删除,其正文内容如下:
edit /etc/pam.d/login
#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so shadow nullok use_authtok
session required /lib/security/pam_pwdb.so
session required /lib/security/pam_limits.so
you have to add the last two lines
edit /etc/security/limits.conf
可带参数:
issue=filename:指定其他配置文件,而不是缺省的/etc/issue.
noesc:不对配置文件中的转移字符进行解释。
配置文件说明:
debug:将调试信息写入日志
conf=filename:指定配置文件
配置文件说明:该配置文件每一行(一个条目)的语法如下:
在这里
可以是
用户名
用户组名,采用@group的语法
通配符*,表示任何
可以是
soft-表示软限制,可以超过该限制
hard-表示硬限制,有root设定,内核执行,不可以超过该限制
可以是
core-core文件大小 (KB)
data-最大数据大小(KB)
fsize-最大文件大小(KB)
memlock-最大可用内存空间(KB)
nofile-最大可以打开的文件数量
rss-最大可驻留空间(KB)
stack-最大堆栈空间(KB)
cpu-最大CPU使用时间(MIN)
nproc-最大运行进程数
as-地址空间限制
参考:http://blog.sina.com.cn/s/blog_53689eaf0101b5xd.html