Linus 大神早前已经说了 Linux 内核的版本号太长了,在 2.6.39 内核后直接跳上了 3.0 内核,并且已经发布了新的版本。但是 Fedora 某部分维护者似乎有所不甘。
不甘的原因是他们不想 Fedora 15 整个生命周期都只能使用 2.6.38 内核,而无法享受 3.0 内核带来的。但是如果直接使用 3.0 内核,因为版本号的问题可能会出现兼容性问题,而且工程量大。于是维护者们就把 3.0 内核的版本号更改为 2.6.40 内核。本质上 2.6.40 内核和 3.0 内核没有任何区别。
2.6.40 内核暂时还有一小部分兼容性的 Bug,稍后会逐一解决。短期内将会推送到 updates-testing 以供测试。此内核只会特供 Fedora 15 使用。Fedora 16 和已经指向至 Fedora 17 的 Rawhide 将会使用 3.x 内核。
来源:http://www.oschina.net/news/20189/fedora-15-linux-kernel-2-6-40
不甘的原因是他们不想 Fedora 15 整个生命周期都只能使用 2.6.38 内核,而无法享受 3.0 内核带来的。但是如果直接使用 3.0 内核,因为版本号的问题可能会出现兼容性问题,而且工程量大。于是维护者们就把 3.0 内核的版本号更改为 2.6.40 内核。本质上 2.6.40 内核和 3.0 内核没有任何区别。
2.6.40 内核暂时还有一小部分兼容性的 Bug,稍后会逐一解决。短期内将会推送到 updates-testing 以供测试。此内核只会特供 Fedora 15 使用。Fedora 16 和已经指向至 Fedora 17 的 Rawhide 将会使用 3.x 内核。
来源:http://www.oschina.net/news/20189/fedora-15-linux-kernel-2-6-40
学习linux也有一段时间了,之前都用着ubuntu8.04,这两天安装了suse10.3,发觉内核才是2.6.22.19。于是就动手了....
百度。google 但发觉suse升级内核的很少,所以就写出这篇东西来,给朋友们一个参考!!也请老鸟们指点指点!!
1.首先查看内核版本
linux-lguj:/home/sheng # uname -a
Linux linux-lguj 2.6.22.19-0.1-default #1 SMP 2008-10-14 22:17:43 +0200 i686 i686 i386 GNU/Linux
2.安装编译工具
GCC-C++
make
ncurses
ncurses-devel
下载你想要的内核
3.我下载的是kernel-2.6.26 下载地址http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2
然后解压/usr/src下untar这个包.
tar -xjfv linux-2.6.25.tar.bz2
4. 配置内核
cd /usr/src/linux-2.6.25
make mrproper(删除一些stable的文件,针对刚download下来的包这一步没必要)
make menuconfig(图形化配置你的新内核模块)
5.编译安装
make (晕死,我的死烂机子要2个小时阿,真的等到我头晕)
make modules_install
make install(系统将会把vmlinuz和System.map复制到/boot目录下同时修改grub)
然后重启你的计算机reboot
6.删除你不想要的久内核
先查看一下 rpm -qa|grep kernel
kernel-default-2.6.22.19-0.1(依赖包microcode,得先删除microcode)
linux-kernel-headers-2.6.22-19
kernel-source-2.6.22.19-0.1
然后
rpm -e kernel-default-2.6.22.19-0.1
rpm -e kernel-source-2.6.22.19-0.1
7.重新安装 kernel-source(为一会安装nvidia驱动做好准备)
到http://rpm.pbone.net/index.php3/stat/4/idpl/9639299/com/kernel-source-2.6.26-8.16.i586.rpm.html下载
然后安装。ok
百度。google 但发觉suse升级内核的很少,所以就写出这篇东西来,给朋友们一个参考!!也请老鸟们指点指点!!
1.首先查看内核版本
linux-lguj:/home/sheng # uname -a
Linux linux-lguj 2.6.22.19-0.1-default #1 SMP 2008-10-14 22:17:43 +0200 i686 i686 i386 GNU/Linux
2.安装编译工具
GCC-C++
make
ncurses
ncurses-devel
下载你想要的内核
3.我下载的是kernel-2.6.26 下载地址http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2
然后解压/usr/src下untar这个包.
tar -xjfv linux-2.6.25.tar.bz2
4. 配置内核
cd /usr/src/linux-2.6.25
make mrproper(删除一些stable的文件,针对刚download下来的包这一步没必要)
make menuconfig(图形化配置你的新内核模块)
5.编译安装
make (晕死,我的死烂机子要2个小时阿,真的等到我头晕)
make modules_install
make install(系统将会把vmlinuz和System.map复制到/boot目录下同时修改grub)
然后重启你的计算机reboot
6.删除你不想要的久内核
先查看一下 rpm -qa|grep kernel
kernel-default-2.6.22.19-0.1(依赖包microcode,得先删除microcode)
linux-kernel-headers-2.6.22-19
kernel-source-2.6.22.19-0.1
然后
rpm -e kernel-default-2.6.22.19-0.1
rpm -e kernel-source-2.6.22.19-0.1
7.重新安装 kernel-source(为一会安装nvidia驱动做好准备)
到http://rpm.pbone.net/index.php3/stat/4/idpl/9639299/com/kernel-source-2.6.26-8.16.i586.rpm.html下载
然后安装。ok
背景:我的vps服务器是centos6.4的,后想升级到最新版本,会不会提高点性能,于是作下升级,并成功升级。
对任何较早的CentOS6.x的版本,在命令行中使用yum update命令,您可以轻松地升级到CentOS6.5。升级之前,我建议大家将重要文件,数据库,配置文件等备份下。
# yum update
升级过程可能需要长达-15-30分钟取决于您的网络速度。一旦升级过程完成后,运行以下命令来验证您的系统版本。
# cat /etc/redhat-release
CentOS release 6.5 (Final)
接下来,运行yum list updates;命令可以列出更新所有可用的列表。
# yum list updates
我们推荐大家通过重新安装运行,而不是尝试从CentOS的4.x或5.x的CentOS的就地升级
另一个查看版本的办法:
[root@localhost /]# lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.7 (Final)
Release: 6.7
Codename: Final
升级前:
升级后:
阅读全文
对任何较早的CentOS6.x的版本,在命令行中使用yum update命令,您可以轻松地升级到CentOS6.5。升级之前,我建议大家将重要文件,数据库,配置文件等备份下。
# yum update
升级过程可能需要长达-15-30分钟取决于您的网络速度。一旦升级过程完成后,运行以下命令来验证您的系统版本。
# cat /etc/redhat-release
CentOS release 6.5 (Final)
接下来,运行yum list updates;命令可以列出更新所有可用的列表。
# yum list updates
我们推荐大家通过重新安装运行,而不是尝试从CentOS的4.x或5.x的CentOS的就地升级
另一个查看版本的办法:
[root@localhost /]# lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.7 (Final)
Release: 6.7
Codename: Final
升级前:
升级后:

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.13.tgz
安装篇:https://www.cnblogs.com/l12138h/p/16293153.html
启停:
1)启动:
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf
2)停止:
[root@ml_test_bj_szq_10_169_70_54 bin]# ./mongo
MongoDB shell version v4.0.4
> use admin
switched to db admin
> db.shutdownServer();
server should be down...
2020-05-15T10:40:12.625+0800 I NETWORK [js] trying reconnect to 127.0.0.1:27017 failed
2020-05-15T10:40:12.625+0800 I NETWORK [js] reconnect 127.0.0.1:27017 failed failed
ss -lnt #成功停止无27017端口了。
源码安装:http://www.blogjava.net/xiaomage234/archive/2012/07/18/383403.html
MONGO_URL=mongodb://localhost:27017 meteor
db.players.find().limit(100);
db.players.update({"_id":"177ffc27-608b-4807-923c-6ea57f17ce11"}, {"name" : "Ada Lovelace", "score" : 2000});
http://www.mongovue.com/downloads/ GUI
http://rockmongo.com/?action=downloads
mongoDB非正常关闭后无法启动问题
servers don't have journaling enabled by default. Please use --journal if you want durability:
解决方法:
1、删除%MONGO_HOME%/db下的.lock文件
2、输入命令 mongod --repair
3、重启mongoDB
-----------------------------------------------------------------------------------------------------------------------
post ={"title":"My Blog Post","content":"Here's my blog post","date":new Date()}
db.blog.insert(post)
以上是插入示例。
shell中的基本操作
1.创建
post ={"title":"My Blog Post","content":"Here's my blog post","date":new Date()}
db.blog.insert(post)
2.读取
db.blog.find() 会返回集合blog里面所有的文档
db.blog.findOne() 只会查一个文档(更多详细看第四章)
3.更新
update 至少需要2个参数、
1.更新文档的限定条件
2.新文档
post.comments = []
db.blog.update("title":"My Blog Post",post)
4.删除
db.blog.remove("title","My Blog Post")
5.使用窍门
help 获取帮助
查看函数
db.foo.update
如何得到 foo-bar 集合
db.getCollection("foo-bar")
属性和目标集合同名时
db.getCollection("version")
访问子集
x.y 和 x['y']两种都可以 要学活灵活应用
6.数据类型
null {"x":null}
boolean(true 和 false) {"x":true}
64位浮点数 {"x",3}
字符串 {"x":"foobar"}
对象id {"x":ObjectId()}
日期 {"x" : new Date()}
正则表达式 {"x":/foobar/i}
代码 {"x": function(){/*....*/}}
未定义{"x":undefined}
数组 {"x":["a","b","c"]}
内嵌文档 {"x":{"foo":"bar"}}
对象Id 在不同的机器上 每次生成都会保持不同
编译安装:http://blog.chinaunix.net/uid-26922865-id-3400712.html
直接安装:
1、安装MongoDB
curl -o http://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.0.tgz
tar -zxvf mongodb-linux-i686-2.0.0
2、启动MongoDB
./bin/mongod -dbpath=../data
./bin/mongo
3、实际操作
这个是Ok的,通过RockMongo客户端后,用户名:admin 密码:admin登录。
需要验证,实践些问题,用下面去掉:--auth这个。
这个能启动,且可以终端登
安装篇:https://www.cnblogs.com/l12138h/p/16293153.html
启停:
1)启动:
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf
2)停止:
[root@ml_test_bj_szq_10_169_70_54 bin]# ./mongo
MongoDB shell version v4.0.4
> use admin
switched to db admin
> db.shutdownServer();
server should be down...
2020-05-15T10:40:12.625+0800 I NETWORK [js] trying reconnect to 127.0.0.1:27017 failed
2020-05-15T10:40:12.625+0800 I NETWORK [js] reconnect 127.0.0.1:27017 failed failed
ss -lnt #成功停止无27017端口了。
源码安装:http://www.blogjava.net/xiaomage234/archive/2012/07/18/383403.html
MONGO_URL=mongodb://localhost:27017 meteor
db.players.find().limit(100);
db.players.update({"_id":"177ffc27-608b-4807-923c-6ea57f17ce11"}, {"name" : "Ada Lovelace", "score" : 2000});
http://www.mongovue.com/downloads/ GUI
http://rockmongo.com/?action=downloads
mongoDB非正常关闭后无法启动问题
servers don't have journaling enabled by default. Please use --journal if you want durability:
解决方法:
1、删除%MONGO_HOME%/db下的.lock文件
2、输入命令 mongod --repair
3、重启mongoDB
-----------------------------------------------------------------------------------------------------------------------
post ={"title":"My Blog Post","content":"Here's my blog post","date":new Date()}
db.blog.insert(post)
以上是插入示例。
shell中的基本操作
1.创建
post ={"title":"My Blog Post","content":"Here's my blog post","date":new Date()}
db.blog.insert(post)
2.读取
db.blog.find() 会返回集合blog里面所有的文档
db.blog.findOne() 只会查一个文档(更多详细看第四章)
3.更新
update 至少需要2个参数、
1.更新文档的限定条件
2.新文档
post.comments = []
db.blog.update("title":"My Blog Post",post)
4.删除
db.blog.remove("title","My Blog Post")
5.使用窍门
help 获取帮助
查看函数
db.foo.update
如何得到 foo-bar 集合
db.getCollection("foo-bar")
属性和目标集合同名时
db.getCollection("version")
访问子集
x.y 和 x['y']两种都可以 要学活灵活应用
6.数据类型
null {"x":null}
boolean(true 和 false) {"x":true}
64位浮点数 {"x",3}
字符串 {"x":"foobar"}
对象id {"x":ObjectId()}
日期 {"x" : new Date()}
正则表达式 {"x":/foobar/i}
代码 {"x": function(){/*....*/}}
未定义{"x":undefined}
数组 {"x":["a","b","c"]}
内嵌文档 {"x":{"foo":"bar"}}
对象Id 在不同的机器上 每次生成都会保持不同
编译安装:http://blog.chinaunix.net/uid-26922865-id-3400712.html
直接安装:
1、安装MongoDB
curl -o http://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.0.tgz
tar -zxvf mongodb-linux-i686-2.0.0
2、启动MongoDB
./bin/mongod -dbpath=../data
./bin/mongo
3、实际操作
这个是Ok的,通过RockMongo客户端后,用户名:admin 密码:admin登录。
需要验证,实践些问题,用下面去掉:--auth这个。
这个能启动,且可以终端登
实践来自,后加上PHP数据库长连接mysql_pconnect的细节:
http://my.oschina.net/louxin/blog/95436
apache的prefork模式(进程池),它不能保证每次客户端的请求都是在同一个进程,所以你不知道我的长连接该如何保持?
下面就从另一个角度来讲这个长连接通过一个keepalive来实现,这样就让apache保持住了到mysql的连接句柄。
对,其实都是伪连接,因为Mysql有一个默认值是38000吧?记不清了,就是长连接到这个时间后,Mysql就会断开的,你再:sutomysqliping....因为:超过 wait_timeout ,msyql就会主动断开,php 需要再进行长连接。
php的mysql持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之。这到底是为啥么。近距离观察后发现,这家伙也不容易啊,要看apache的脸色,还得听mysql指挥。
阅读全文
http://my.oschina.net/louxin/blog/95436
apache的prefork模式(进程池),它不能保证每次客户端的请求都是在同一个进程,所以你不知道我的长连接该如何保持?
下面就从另一个角度来讲这个长连接通过一个keepalive来实现,这样就让apache保持住了到mysql的连接句柄。
对,其实都是伪连接,因为Mysql有一个默认值是38000吧?记不清了,就是长连接到这个时间后,Mysql就会断开的,你再:sutomysqliping....因为:超过 wait_timeout ,msyql就会主动断开,php 需要再进行长连接。
php的mysql持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之。这到底是为啥么。近距离观察后发现,这家伙也不容易啊,要看apache的脸色,还得听mysql指挥。

awk 获取 Linux下的ip地址
Unix/LinuxC技术 jackxiang 2011-9-15 15:54
法一:
法二:
由于不同系统中ifconfig返回信息的格式有一定差别,故分开讨论:
Linux:
FreeBSD/OpenBSD:
Solaris:
三段代码的原理类似,都是先获取含有IP的行,再去掉含有127.0.0.1的行。最后获取IP所在的列
参考:http://linux-wiki.cn/wiki/Shell%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8DIP%E5%9C%B0%E5%9D%80
法二:
由于不同系统中ifconfig返回信息的格式有一定差别,故分开讨论:
Linux:
FreeBSD/OpenBSD:
Solaris:
三段代码的原理类似,都是先获取含有IP的行,再去掉含有127.0.0.1的行。最后获取IP所在的列
参考:http://linux-wiki.cn/wiki/Shell%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8DIP%E5%9C%B0%E5%9D%80
[个人原创]zend studio 8.01 使用PHPDoc
Php/Js/Shell/Go jackxiang 2011-9-15 14:34
右键单击该项目,从中您希望PHPDoc生成和选择Generate PHP Doc 或Project | Generate PHPDoc 或按Alt+D,该PHPDoc生成对话框将打开。
以后直接这样做:右键单击该项目,按Alt+D,后面就可以选择项目进行生成PHPDoc.
---
C:\Documents and Settings\jackxiang\Zend\workspaces\DefaultWorkspace\doc
生成文档HTML位置如下:
file:///C:/Documents%20and%20Settings/jackxiang/Zend/workspaces/DefaultWorkspace/doc/index.html
以后直接这样做:右键单击该项目,按Alt+D,后面就可以选择项目进行生成PHPDoc.
---
C:\Documents and Settings\jackxiang\Zend\workspaces\DefaultWorkspace\doc
生成文档HTML位置如下:
file:///C:/Documents%20and%20Settings/jackxiang/Zend/workspaces/DefaultWorkspace/doc/index.html
如今网站的图片越来越多在访问量大的时候 带宽也遇到一定的瓶颈 我们可以把一些不是经常更新的静态图片或css一类的东东缓存到访问者的本地机器上 在apache和nginx中配置静态图片本地缓存的操作步骤如下:
apache:
nginx:
来源:http://loosky.net/?p=1856
背景:有时在nginx的前端再搭一个squit的缓存机器,为此会看到:X-Cache HIT web-cache-10421
(squid中的X-Cache和X-Cache-Lookup的意义)
http://tiandirensoon.iteye.com/blog/1282530
nginx的cache使用两例:
建议将CAHCE部分添加HEADER信息,方便分析是否真的缓存:
add_header X-Cache HIT-LT;
添加的内容:
add_header X-Cache HIT-LinuxTone;
nginx的cache功能可以把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,配置灵活,功能好不亚于squid。
下载:
wget http://labs.frickle.com/files/ngx_cache_purge-1.1.tar.gz
wget http://nginx.org/download/nginx-0.8.44.tar.gz
编译:
./configure \
"--user=www" \
"--group=www" \
"--add-module=../ngx_cache_purge-1.1" \
"--prefix=/usr/local/nginx/" \
"--with-http_stub_status_module" \
"--with-http_ssl_module" \
"--with-md5=/usr/lib" \
"--with-sha1=/usr/lib"
来自:http://bbs.linuxtone.org/thread-6875-1-1.html
apache:
nginx:
来源:http://loosky.net/?p=1856
背景:有时在nginx的前端再搭一个squit的缓存机器,为此会看到:X-Cache HIT web-cache-10421
(squid中的X-Cache和X-Cache-Lookup的意义)
http://tiandirensoon.iteye.com/blog/1282530
nginx的cache使用两例:
建议将CAHCE部分添加HEADER信息,方便分析是否真的缓存:
add_header X-Cache HIT-LT;
添加的内容:
add_header X-Cache HIT-LinuxTone;
nginx的cache功能可以把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,配置灵活,功能好不亚于squid。
下载:
wget http://labs.frickle.com/files/ngx_cache_purge-1.1.tar.gz
wget http://nginx.org/download/nginx-0.8.44.tar.gz
编译:
./configure \
"--user=www" \
"--group=www" \
"--add-module=../ngx_cache_purge-1.1" \
"--prefix=/usr/local/nginx/" \
"--with-http_stub_status_module" \
"--with-http_ssl_module" \
"--with-md5=/usr/lib" \
"--with-sha1=/usr/lib"
来自:http://bbs.linuxtone.org/thread-6875-1-1.html
[个人原创]Apache多虚拟机配置下如何通过直接输入IP后确定指向哪个域名的方法,以及实践中发现apache加上虚拟主机后,用ip访问并不是指向刚安好Apache时的默认Web目录的解决办法。
Php/Js/Shell/Go jackxiang 2011-9-15 10:15
通过测试和在PHP高级群里询问得知默认指向了我的一个虚拟机的网站,但是我们往往配置是这样的:
这个*.conf不知Apache去指向哪个虚拟主机了,于是,就在上面加了一个,成这样了:
经测试,直接输入IP访问时就是指向了/usr/local/apache2/htdocs 目录了,呵呵。
PHP高级群里有兄弟问:
要放在所有的VirtualHost前面吧?
答:
放后面也没关系。
一样的,我试了。
---------------------再次实践总结----------------------------
再次配置时,发现用apache的虚拟主机挂了好几个域名。 然后几天遇到的问题是如果直接用ip访问,或者用了一个未配置的域名的访问,那么刷出来的页面竟然不是apache的欢迎页,而是虚拟主机配置中的第一个域名。
原因分析并实践Ok如下:
apache网站解释为当一个请求到达的时候,服务器会首先检查它是否使用了一个能和
NameVirtualHost相匹配的IP地址。如果能够匹配, 它就会查找每个与这个IP地址相对应的
配置段, 并尝试找出一个ServerName或ServerAlias配置项与请求的主机名相同的。如果
找到了,它就会使用这个服务器的配置。 否则,将使用符合这个IP地址的第一个列出的虚拟主机。
其实这个时候,比如用ip直接访问,IE浏览器会提示他已经超出访问范围了。。
解决这个的问题的方案是添加下面的配置到虚拟机主机配置文件中(也就是如果有虚拟机后Apache不会去默认的那个DocumentRoot "d:/wamp/www/" 里,如果用IP访问Apache而是会去找第一个虚拟机的DocumentRoot ),要想在配置虚拟域名后还能指向当前的默认的那个DocumentRoot ,则在虚拟机配置的第一个加上一个指向默认的那个DocumentRoot目录的虚拟机配置即可)。
如下配置:
===========================================================================
apache 设置禁止IP直接访问:
刚好相反的对防止用IP访问到网站的方法,附录:
1.建一个虚拟机提示错误
apache虚拟主机默认情况下ip地址方式访问对应第一个虚拟主机,所以我们可以先建一个指向错误页面的虚拟主机,达到禁止用ip访问网页的目的。
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
</VirtualHost>
echo "请不要用IP访问" >/usr/local/apache2.2.22/htdocs/index.html
2.直接限制访问
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
<Directory />
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
注意:在配置虚拟主机的时候,因为http.conf默认配置了默认主机,所以可以将http.conf里面配置主机的部分全部注释掉,所有主机都在http_vhost.conf里面配置。
这个*.conf不知Apache去指向哪个虚拟主机了,于是,就在上面加了一个,成这样了:
经测试,直接输入IP访问时就是指向了/usr/local/apache2/htdocs 目录了,呵呵。
PHP高级群里有兄弟问:
要放在所有的VirtualHost前面吧?
答:
放后面也没关系。
一样的,我试了。
---------------------再次实践总结----------------------------
再次配置时,发现用apache的虚拟主机挂了好几个域名。 然后几天遇到的问题是如果直接用ip访问,或者用了一个未配置的域名的访问,那么刷出来的页面竟然不是apache的欢迎页,而是虚拟主机配置中的第一个域名。
原因分析并实践Ok如下:
apache网站解释为当一个请求到达的时候,服务器会首先检查它是否使用了一个能和
NameVirtualHost相匹配的IP地址。如果能够匹配, 它就会查找每个与这个IP地址相对应的
配置段, 并尝试找出一个ServerName或ServerAlias配置项与请求的主机名相同的。如果
找到了,它就会使用这个服务器的配置。 否则,将使用符合这个IP地址的第一个列出的虚拟主机。
其实这个时候,比如用ip直接访问,IE浏览器会提示他已经超出访问范围了。。
解决这个的问题的方案是添加下面的配置到虚拟机主机配置文件中(也就是如果有虚拟机后Apache不会去默认的那个DocumentRoot "d:/wamp/www/" 里,如果用IP访问Apache而是会去找第一个虚拟机的DocumentRoot ),要想在配置虚拟域名后还能指向当前的默认的那个DocumentRoot ,则在虚拟机配置的第一个加上一个指向默认的那个DocumentRoot目录的虚拟机配置即可)。
如下配置:
===========================================================================
apache 设置禁止IP直接访问:
刚好相反的对防止用IP访问到网站的方法,附录:
1.建一个虚拟机提示错误
apache虚拟主机默认情况下ip地址方式访问对应第一个虚拟主机,所以我们可以先建一个指向错误页面的虚拟主机,达到禁止用ip访问网页的目的。
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
</VirtualHost>
echo "请不要用IP访问" >/usr/local/apache2.2.22/htdocs/index.html
2.直接限制访问
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
<Directory />
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
注意:在配置虚拟主机的时候,因为http.conf默认配置了默认主机,所以可以将http.conf里面配置主机的部分全部注释掉,所有主机都在http_vhost.conf里面配置。
[个人原创]Linux中的rpm编译依赖问题及如何对rpm包查询其依赖其它rpm的命令,/usr/bin/ld: cannot find -l* 错误的解决方法……
Unix/LinuxC技术 jackxiang 2011-9-12 19:07
rpm -qR cnginx-1.4.7-1.x86_64
openssl-devel
pcre-devel
libpcre.so.0()(64bit)
......
Linux中往往是这样子的,一对的,例如:
有一个真的包,也就是有so包,往往还有一个:libxslt-devel-1.1.17-2.el5_2.2包,它的作用就是把libxslt-1.1.17-2.el5_2.2的相关配置放到Linux默认编译能找得到的位置,如:
这样的错误,说是找不到这个xslt-config这个文件,而你一看,libxslt-1.1.17-2.el5_2.2安装了,就是找不到,然后,你用命令:
发现xslt-config 不在这个包里面,而实际呢?
在这个包里呢?所以要多关注:devel这样的rpm喔。
扯远了一点儿,还是继续说吧,碰到这个问题大概可以用这个方法去解决(我碰到几个都是这样搞定的):
譬如:
解决方法:
其实有可能是你自己的Mysql安装后没有把它放入到那个默认的lib目录中即可,如下:
/usr/lib中去,如下:
openssl-devel
pcre-devel
libpcre.so.0()(64bit)
......
Linux中往往是这样子的,一对的,例如:
有一个真的包,也就是有so包,往往还有一个:libxslt-devel-1.1.17-2.el5_2.2包,它的作用就是把libxslt-1.1.17-2.el5_2.2的相关配置放到Linux默认编译能找得到的位置,如:
这样的错误,说是找不到这个xslt-config这个文件,而你一看,libxslt-1.1.17-2.el5_2.2安装了,就是找不到,然后,你用命令:
发现xslt-config 不在这个包里面,而实际呢?
在这个包里呢?所以要多关注:devel这样的rpm喔。
扯远了一点儿,还是继续说吧,碰到这个问题大概可以用这个方法去解决(我碰到几个都是这样搞定的):
譬如:
解决方法:
其实有可能是你自己的Mysql安装后没有把它放入到那个默认的lib目录中即可,如下:
/usr/lib中去,如下:
[个人原创]配置并查看 Nginx 的工作状态
Unix/LinuxC技术 jackxiang 2011-9-11 12:40
先说我的简单配置:
访问:
http://status.jackxiang.com/
然后看是怎么配置和相关模块,及参数含义,如下:
http_stub_ status这个模块能够获取Nginx自上次启动以来的工作状态 此模块非核心模块,需要在编译的时候手动添加编译参数 --with-http_stub_ status _module ,配置说明:
指令
stub_status
stub_status
语法: stub_status on
默认值: None
作用域: location
创建一个 location 区域启用 stub_status
"stub status" 模块返回的状态信息跟 mathopd's 的状态信息很相似. 返回的状态信息如下:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106active connections -- 对后端发起的活动连接数
server accepts handled requests -- nginx 总共处理了 16630948 个连接, 成功创建 16630948 次握手 (证明中间没有失败的), 总共处理了 31070465 个请求 (平均每次握手处理了 1.8个数据请求)
reading -- nginx 读取到客户端的Header信息数
writing -- nginx 返回给客户端的Header信息数
waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing), 意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接
访问:
http://status.jackxiang.com/
然后看是怎么配置和相关模块,及参数含义,如下:
http_stub_ status这个模块能够获取Nginx自上次启动以来的工作状态 此模块非核心模块,需要在编译的时候手动添加编译参数 --with-http_stub_ status _module ,配置说明:
指令
stub_status
stub_status
语法: stub_status on
默认值: None
作用域: location
创建一个 location 区域启用 stub_status
"stub status" 模块返回的状态信息跟 mathopd's 的状态信息很相似. 返回的状态信息如下:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106active connections -- 对后端发起的活动连接数
server accepts handled requests -- nginx 总共处理了 16630948 个连接, 成功创建 16630948 次握手 (证明中间没有失败的), 总共处理了 31070465 个请求 (平均每次握手处理了 1.8个数据请求)
reading -- nginx 读取到客户端的Header信息数
writing -- nginx 返回给客户端的Header信息数
waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing), 意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接
php json_encode函数不支持BIGINT的问题
新浪微博的32位id,twitter的id过大超过BIGINT也遇到类似的问题,发现是php的json_decode函数不支持62位的BIGINT, 溢出所致.
php好像不分类型但它也依赖于CPU位数,但mysql bigint 范围 -9223372036854775808 到 9223372036854775807
在新的php(5.4版本) json_decode里倒是有一个开关”JSON_BIGINT_AS_STRING”开关,可以使json_decode默认把BITINT当成string处理.
而我们的实际情况是,更新php的版本的速度不会有那么快.而且大部分情况下,咱们也控制不了具体使用哪个php版本,只好采取一个折中
办法:
把微博API返回的json字符串预处理一下,然后再调用json_decode.
也就是把
换成string的类型:
代码片段如下,希望对和我类似情况的人有用.
截取部分实验了一把,如下:
运行如下:
Json中id这个给转成了sting,输出正常,而e这个json的键值,给当成了浮点数,输出为:
通过var_dump查其类型分别如下:
参考:http://drupal.org/node/985544
新浪微博的32位id,twitter的id过大超过BIGINT也遇到类似的问题,发现是php的json_decode函数不支持62位的BIGINT, 溢出所致.
php好像不分类型但它也依赖于CPU位数,但mysql bigint 范围 -9223372036854775808 到 9223372036854775807
在新的php(5.4版本) json_decode里倒是有一个开关”JSON_BIGINT_AS_STRING”开关,可以使json_decode默认把BITINT当成string处理.
而我们的实际情况是,更新php的版本的速度不会有那么快.而且大部分情况下,咱们也控制不了具体使用哪个php版本,只好采取一个折中
办法:
把微博API返回的json字符串预处理一下,然后再调用json_decode.
也就是把
换成string的类型:
代码片段如下,希望对和我类似情况的人有用.
截取部分实验了一把,如下:
运行如下:
Json中id这个给转成了sting,输出正常,而e这个json的键值,给当成了浮点数,输出为:
通过var_dump查其类型分别如下:
参考:http://drupal.org/node/985544
[个人原创]运营习惯之差点无小事,Linux下Rm操作误删除根问题及习惯问题。
Unix/LinuxC技术 jackxiang 2011-9-8 11:28
在Linux下给你权限小了呢?你说在原有目录下部分文件是root创建的,或者其他兄弟用root角色创建的或者拷贝过来的,无法用小帐号删除,你说要root方便,于是你sudo -s 也好,su root也好成了root,爽了吧,于是你开始整了,如下:
root在终端上执行rm -rf ./命令。一时疏忽,错把目录./ 打成/,虽然及时发现,按下ctrl+c中断命令执行,但已过去几秒钟,开发机上的部分文件已经被删除。
这时系统还是照常运行,但已经是微稳了,于是某一天,那一天,一个测试人员测试一紧急项目,发现该机器的页面打开很慢,直接对apache多次重启后,情况依旧,看似很专业的vmstat查看系统资源时,没有发现异常,只因时间已晚,调试心情急切,一时冲动,输入了重启的命令。造成了服务器无法重启,挂了,这到底是谁的错,好像有个歌曲有点像:)
其实,这根源就是只差一点造成的,习惯决定,忘记了,但有一个好的操作习惯会避免这些问题的发生或者把范围缩小。
我的一点Linux下rm小习惯,如下,可以参考下,有更好的更好:
1.rm时要养成心中多一点的习惯:
rm -Rf ./. 平衡点
当你看到这个时,你敢马上删除吗?不会,这就可能得到避免了
rm -Rf /. 不平衡
2.再就是常用PWD来探测:进入目录中并PWD确定无误后再删除
以减少把跟给干掉一部分了,这样留下隐患,万一有人重启就挂。
3.就是修改那个rm -Rf 这个玩意把它通过alias(别名)整个搞成一个移动而不是真删除
万一整出问题到移动的文件夹找回,这个rm -Rf 就相当于 mv folder /tmpfolder.
4.实在是没有法子了张宴兄弟好像介绍一个可以磁盘恢复的软件,看能否找回,但看是
简单,好像也很难搞。URL:http://blog.s135.com/linux_ext3_undelete/
5.系统启动后自动运行脚本,使其终端这样显示,随时知道你的位置,类似于PWD:
root@116.255.139.240:/data0/proxy_temp_dir# ,这个脚本忘记放哪儿了...
在 root 目录下,生成一个 .bashrc 文件
来源:补上,来自Scottjiang兄弟,Thanks。
最后,一个小心的操作,以及习惯的养成,才是国防之根本。
root在终端上执行rm -rf ./命令。一时疏忽,错把目录./ 打成/,虽然及时发现,按下ctrl+c中断命令执行,但已过去几秒钟,开发机上的部分文件已经被删除。
这时系统还是照常运行,但已经是微稳了,于是某一天,那一天,一个测试人员测试一紧急项目,发现该机器的页面打开很慢,直接对apache多次重启后,情况依旧,看似很专业的vmstat查看系统资源时,没有发现异常,只因时间已晚,调试心情急切,一时冲动,输入了重启的命令。造成了服务器无法重启,挂了,这到底是谁的错,好像有个歌曲有点像:)
其实,这根源就是只差一点造成的,习惯决定,忘记了,但有一个好的操作习惯会避免这些问题的发生或者把范围缩小。
我的一点Linux下rm小习惯,如下,可以参考下,有更好的更好:
1.rm时要养成心中多一点的习惯:
rm -Rf ./. 平衡点
当你看到这个时,你敢马上删除吗?不会,这就可能得到避免了
rm -Rf /. 不平衡
2.再就是常用PWD来探测:进入目录中并PWD确定无误后再删除
以减少把跟给干掉一部分了,这样留下隐患,万一有人重启就挂。
3.就是修改那个rm -Rf 这个玩意把它通过alias(别名)整个搞成一个移动而不是真删除
万一整出问题到移动的文件夹找回,这个rm -Rf 就相当于 mv folder /tmpfolder.
4.实在是没有法子了张宴兄弟好像介绍一个可以磁盘恢复的软件,看能否找回,但看是
简单,好像也很难搞。URL:http://blog.s135.com/linux_ext3_undelete/
5.系统启动后自动运行脚本,使其终端这样显示,随时知道你的位置,类似于PWD:
root@116.255.139.240:/data0/proxy_temp_dir# ,这个脚本忘记放哪儿了...
在 root 目录下,生成一个 .bashrc 文件
来源:补上,来自Scottjiang兄弟,Thanks。
最后,一个小心的操作,以及习惯的养成,才是国防之根本。
[朝花夕拾]smarty 打开报错提示(错误提示)并调试查看所有变量,smarty 调试打印数组及显示变量。直接查看编译结果看是否有smarty模板编译缓存。
Php/Js/Shell/Go jackxiang 2011-9-7 20:39
一,调试模式查看所有变量和数组
1、设置配置文件中的 debuging的值为true。即开始调试(设置完这一步,一般情况下在浏览页面的时候就可以看到一个弹窗了,里面有在这个页面里的所有smarty变量。如果没有弹出看下一步)。
2、在模版里输入{debug},就可以看到这个模版里的变量了。
如果要关闭掉调试控制台,设置变量 $debugging 为 false 就可以了。
不同的情况那个debug是不一样的,实际中特别注意要$tpl->caching = false;不能缓存时看全部DB输出的变量:
在模板中是这样:
在smarty编译后的模板里是这样的:
要想能真正报错其实践的结论是,三个都打开:
1.error_reporting(E_ALL);打开,否则有错容易报不出来:
2.$tpl->debugging = true;
3.在输出页面里加入调试变量:
二,非调试模式下查看变量和数组,也就是从弹出框中所有变量只看一部分,以方便调试。
1、Smarty下如何查看数组:
如果你在使用smarty时,想查看某变量的内容,而又不想打开smarty debug,或smarty debug的输出不能满足你的要求,可以这样用。
如果是查看数组,应当
我自己试了下是这样:
会输出到页面里,不是弹出框。
注意:这里用@是来保证把变量当做一个整体对待,否则会遍历这个array.
查看变量:
2、Smarty下如何调试数组,无论这个:$tpl-> debugging = TRUE; 或者:False都可以:
比如要调试数组$array
实践如下:
调试变量就
偶的实践:
请注意:数组都有一个@,呵呵。
阅读全文
1、设置配置文件中的 debuging的值为true。即开始调试(设置完这一步,一般情况下在浏览页面的时候就可以看到一个弹窗了,里面有在这个页面里的所有smarty变量。如果没有弹出看下一步)。
2、在模版里输入{debug},就可以看到这个模版里的变量了。
如果要关闭掉调试控制台,设置变量 $debugging 为 false 就可以了。
不同的情况那个debug是不一样的,实际中特别注意要$tpl->caching = false;不能缓存时看全部DB输出的变量:
在模板中是这样:
在smarty编译后的模板里是这样的:
要想能真正报错其实践的结论是,三个都打开:
1.error_reporting(E_ALL);打开,否则有错容易报不出来:
2.$tpl->debugging = true;
3.在输出页面里加入调试变量:
二,非调试模式下查看变量和数组,也就是从弹出框中所有变量只看一部分,以方便调试。
1、Smarty下如何查看数组:
如果你在使用smarty时,想查看某变量的内容,而又不想打开smarty debug,或smarty debug的输出不能满足你的要求,可以这样用。
如果是查看数组,应当
我自己试了下是这样:
会输出到页面里,不是弹出框。
注意:这里用@是来保证把变量当做一个整体对待,否则会遍历这个array.
查看变量:
2、Smarty下如何调试数组,无论这个:$tpl-> debugging = TRUE; 或者:False都可以:
比如要调试数组$array
实践如下:
调试变量就
偶的实践:
请注意:数组都有一个@,呵呵。

[个人原创]用Fiddler2进行简单的并发及安全测试,用Filddler来模拟一次或者多次不同的浏览器页面请求的方法
Php/Js/Shell/Go jackxiang 2011-9-7 11:38
Fiddler 2对Flex开发和联调很有用,因为Flash Player的某些HTTP请求调的不是浏览器的HTTP接口,而是自己实现的,这类请求用httpwatch/firebug下是观察不到的。这类请求 就是文件上传请求(Flash Player按照RFC1867规范自行发的请求)。
背景:在我们的开发测试中,往往是一些表单的提交,还时常带着Cookie,Session的后台验证才能提交,而我们最关心的还是提交,而不是前面的验证,在实际中往往浏览器提交一次后,再回来做二次测试时,其HTML数据控件已经没有了,得再次输入数据,这给我们带来了很大的不方便,为此,我们常常用的FireBug这样的插件也不能满足我们的需求,在这样的背景下催生出一个叫Filddler2的工具,能带给我们惊喜,也就是解决了这个问题,可以让我们自己对后台做多次调试,其模拟了Http协议的Cookie,Session表单数据提交,带来了方便,步骤如下:
(1)启动Filddler程序后,找到一个需要再做一次的URL连接, Firefox调试确保Filddler2界面左下角是:
Capturing | All Processes | 空[这儿是可以阻塞的地方] | 通过个数是空[会显示捕获个数]。
确保是让其在做下面模拟的URL时让其阻塞,后我们再放开,就再次模拟人为进交一次,这里带Session,Cookie等,给我们带
来了实实在在的方便。
(2)打开Firefox后,工具>选项>网络>设置>手动配置代理勾选上>Http代理:127.0.0.1>端口:8888
(3)看步骤1中有All Processes 空[这儿是可以阻塞的地方],点可以阻塞的地方让其出现黑色T的红色背景框即可。
(4)点击Fiddler面板上某个需要再次调试的URL,右键-》Replay -》Reissue Requests,如直接点它,会自动出现一个一样的连接。
如果按住Shift按扭再点Reissue Requests,会出现输入框让你输入要模拟多少次,这儿可以用来做简单的并发测试滴,我们就模拟一次。
(5)然后,看第4步,就是放开我们的那个阻塞的按钮,也就是然后取掉断点状态。
(6)点击软件上的“Resume All”,释放被拦截的请求,此时30多条记录就会并发向后台请求。
新版本V4里找不到Resume All按钮了,直接在第3步里的下面命令行里输入 : g or go Resume all breakpointed sessions g 也成。
(7)此时,观察我们待测试的页面,会自动弹出窗口,提示语句,SQL等等。
可能出现的问题,如8888端口被占用会配置了代理后,Firefox访问页面出现访问不了,如何排查如下:
如果Windows中查看Fiddler的8888端口是否开启或者被其它程序占用的简单方法。
还不明白,可以参考:http://jackxiang.com/post/735/ 如何通过端口看是哪个程序占用的方法。
我对自己的博客修改文章做了下实验是Ok的,如下:
1)自己先用Firefox保存一下自己写的这篇博文,并把这个保存的URL给找出来,http://jackxiang.com/admin.php,删除Fiddler的其他
的URL。
2)用其他浏览器修改一个博文的文字和1保存时的不一样。
3)直接跳过到上面第4步,再Replay一次,也就是不用柱塞,直接再提交一次,后返回200
4)看DB,发现我的博文又给修改回1步骤时的文字了,模拟成功,Yeah。
最后,还是上一张图吧,除开Firefox设置代理外,都放一块,有兴趣可以摸索摸索:
阅读全文
背景:在我们的开发测试中,往往是一些表单的提交,还时常带着Cookie,Session的后台验证才能提交,而我们最关心的还是提交,而不是前面的验证,在实际中往往浏览器提交一次后,再回来做二次测试时,其HTML数据控件已经没有了,得再次输入数据,这给我们带来了很大的不方便,为此,我们常常用的FireBug这样的插件也不能满足我们的需求,在这样的背景下催生出一个叫Filddler2的工具,能带给我们惊喜,也就是解决了这个问题,可以让我们自己对后台做多次调试,其模拟了Http协议的Cookie,Session表单数据提交,带来了方便,步骤如下:
(1)启动Filddler程序后,找到一个需要再做一次的URL连接, Firefox调试确保Filddler2界面左下角是:
Capturing | All Processes | 空[这儿是可以阻塞的地方] | 通过个数是空[会显示捕获个数]。
确保是让其在做下面模拟的URL时让其阻塞,后我们再放开,就再次模拟人为进交一次,这里带Session,Cookie等,给我们带
来了实实在在的方便。
(2)打开Firefox后,工具>选项>网络>设置>手动配置代理勾选上>Http代理:127.0.0.1>端口:8888
(3)看步骤1中有All Processes 空[这儿是可以阻塞的地方],点可以阻塞的地方让其出现黑色T的红色背景框即可。
(4)点击Fiddler面板上某个需要再次调试的URL,右键-》Replay -》Reissue Requests,如直接点它,会自动出现一个一样的连接。
如果按住Shift按扭再点Reissue Requests,会出现输入框让你输入要模拟多少次,这儿可以用来做简单的并发测试滴,我们就模拟一次。
(5)然后,看第4步,就是放开我们的那个阻塞的按钮,也就是然后取掉断点状态。
(6)点击软件上的“Resume All”,释放被拦截的请求,此时30多条记录就会并发向后台请求。
新版本V4里找不到Resume All按钮了,直接在第3步里的下面命令行里输入 : g or go Resume all breakpointed sessions g 也成。
(7)此时,观察我们待测试的页面,会自动弹出窗口,提示语句,SQL等等。
可能出现的问题,如8888端口被占用会配置了代理后,Firefox访问页面出现访问不了,如何排查如下:
如果Windows中查看Fiddler的8888端口是否开启或者被其它程序占用的简单方法。
还不明白,可以参考:http://jackxiang.com/post/735/ 如何通过端口看是哪个程序占用的方法。
我对自己的博客修改文章做了下实验是Ok的,如下:
1)自己先用Firefox保存一下自己写的这篇博文,并把这个保存的URL给找出来,http://jackxiang.com/admin.php,删除Fiddler的其他
的URL。
2)用其他浏览器修改一个博文的文字和1保存时的不一样。
3)直接跳过到上面第4步,再Replay一次,也就是不用柱塞,直接再提交一次,后返回200
4)看DB,发现我的博文又给修改回1步骤时的文字了,模拟成功,Yeah。
最后,还是上一张图吧,除开Firefox设置代理外,都放一块,有兴趣可以摸索摸索:
