默认情况下,Apache服务器会列出网站目录中的文件及子目录,这对于用于发布站点的服务器来说是很不安全的,所以需要禁用,修改httpd.conf配置文件中的对应设置即可。
问题的现象:
如果你的网站目录下有一个xxx的文件夹,如果xxx文件夹下没有默认页面(index.*等),当用户使用URL:http://你的网址/a/ 访问你的网站的话,Apache会把xxx文件夹里的内容全列出来。
解决方法:
要禁止此功能,修改httpd.conf
找到下面这一句删除掉Indexes即可。
Options Indexes FollowSymLinks
上面这个是主的控制,后面有单个目录的控制。
而Nignx则是默认就不会列出这个,但是我现在想把一个二级域名指向的目录给列出来让大家下载,或者自己也要下载等的这样一个需求,于是要放开Apache或者Nginx对这个目录的列表,于是我查了下网络,最后做了尝试,发现这个目录其实还是要以Apache及Nginx的运行用户来进行设置这个目录可能让这个运行的用户可读才行,否则你就是配置对了也不能看到目录,会出现Denied这样的了情况,这个是要特别注意的,这次之所以有这个情况是因为我想把:/root/software上的软件给共享了,但这个root目录下的权限很高,但是我的apache和nginx都是以nobody.nogroup来运行的,所以配置对了也没有能列出来,老是说Denied,我还是分别列下我的Aapche和Nginx下的配置吧。
(1)Apache配置如下:
打开nginx.conf文件,在location server 或 http段中加入
autoindex on;
另外两个参数最好也加上去:
autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间
(2)Nginx显示目录配置实例:
问题的现象:
如果你的网站目录下有一个xxx的文件夹,如果xxx文件夹下没有默认页面(index.*等),当用户使用URL:http://你的网址/a/ 访问你的网站的话,Apache会把xxx文件夹里的内容全列出来。
解决方法:
要禁止此功能,修改httpd.conf
找到下面这一句删除掉Indexes即可。
Options Indexes FollowSymLinks
上面这个是主的控制,后面有单个目录的控制。
而Nignx则是默认就不会列出这个,但是我现在想把一个二级域名指向的目录给列出来让大家下载,或者自己也要下载等的这样一个需求,于是要放开Apache或者Nginx对这个目录的列表,于是我查了下网络,最后做了尝试,发现这个目录其实还是要以Apache及Nginx的运行用户来进行设置这个目录可能让这个运行的用户可读才行,否则你就是配置对了也不能看到目录,会出现Denied这样的了情况,这个是要特别注意的,这次之所以有这个情况是因为我想把:/root/software上的软件给共享了,但这个root目录下的权限很高,但是我的apache和nginx都是以nobody.nogroup来运行的,所以配置对了也没有能列出来,老是说Denied,我还是分别列下我的Aapche和Nginx下的配置吧。
(1)Apache配置如下:
打开nginx.conf文件,在location server 或 http段中加入
autoindex on;
另外两个参数最好也加上去:
autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间
(2)Nginx显示目录配置实例:
jQuery
主页:http://jquery.com/
设计思想
简洁的思想:几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性)。
优点
小,压缩后代码只有20多k(无压缩代码94k)。
Selector和DOM操作的方便
Chaining:总是返回一个jQuery对象,可以连续操作。
文档的完整,易用性(每个API都有完整的例子,这是其它框架现在不能比的),而且网上还有很多其它的文档,书籍。
应用的广泛,包括google code也使用了jQuery。
使用jQuery的站点:http://docs.jquery.com/Sites_Using_jQuery
核心的开发团队和核心人员:John Resig等。
简洁和简短的语法,容易记。
可扩展性:有大量用户开发的插件可供使用(http://jquery.com/plugins/)
jQuery UI(http://jquery.com/plugins/,基于jQuery,但和核心的jQuery是独立的),不断发展中。
友好和活跃的社区:google groups: http://docs.jquery.com/Discussion
事件处理有很多方便的方法,如click,而不是单一的addEvent之类的。
缺点
由于设计思想是追求高效和简洁,没有面向对象的扩展。设计思路和Mootools不一样。
CSS Selector的速度稍微有些慢(但是现在速度已经大幅提高)
Ext JS
主页:http://extjs.com/
设计思想
组件化,推进RIA(Rich Internet Application)的应用。
优点
强大的UI,而且性能不错,这是其最大的优点。
速度快,管是UI还是其它模块。
100%面向对象和组件化的思想,一致的语法,全局的命名空间。
文档的完整,规范,方便。
核心的开发团队,Jack Slocum等。
活跃的社区,迅速增加的用户量。
模块化实现,可扩展性强。
所有的组件(widgets)都可直接使用,而无需进行设置(当然,用户可以选择重新配置)。
缺点
稍复杂。
为重量级的框架(包含大量UI),体积大。如果导入ext-all.js,压缩后也有近500k。
ExtJs与jQuery比较
1.EXT体积大,jQuery更专注于简化最基础的开发工作.所以使用起来,也就感觉更像是使用原始的js进行开发一样
2.EXT界面美观,jQuery一般
3.EXT代码复用性强
4.EXT兼容性还是有点小问题,jQuery兼容性良好
5.EXT不易调试,
6.Ext使页面是只留下body,搜索引擎无法收录这样,不利于SEO排名
7.jQuery的事件绑定更强
Ext简化了很多工作,让开发更简洁,更方便,但也带来了很多麻烦,给我们留下了更小的选择空间,局域网里面我们可以使用EXT,但是在互联网上请优先jQuery
主页:http://jquery.com/
设计思想
简洁的思想:几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性)。
优点
小,压缩后代码只有20多k(无压缩代码94k)。
Selector和DOM操作的方便
Chaining:总是返回一个jQuery对象,可以连续操作。
文档的完整,易用性(每个API都有完整的例子,这是其它框架现在不能比的),而且网上还有很多其它的文档,书籍。
应用的广泛,包括google code也使用了jQuery。
使用jQuery的站点:http://docs.jquery.com/Sites_Using_jQuery
核心的开发团队和核心人员:John Resig等。
简洁和简短的语法,容易记。
可扩展性:有大量用户开发的插件可供使用(http://jquery.com/plugins/)
jQuery UI(http://jquery.com/plugins/,基于jQuery,但和核心的jQuery是独立的),不断发展中。
友好和活跃的社区:google groups: http://docs.jquery.com/Discussion
事件处理有很多方便的方法,如click,而不是单一的addEvent之类的。
缺点
由于设计思想是追求高效和简洁,没有面向对象的扩展。设计思路和Mootools不一样。
CSS Selector的速度稍微有些慢(但是现在速度已经大幅提高)
Ext JS
主页:http://extjs.com/
设计思想
组件化,推进RIA(Rich Internet Application)的应用。
优点
强大的UI,而且性能不错,这是其最大的优点。
速度快,管是UI还是其它模块。
100%面向对象和组件化的思想,一致的语法,全局的命名空间。
文档的完整,规范,方便。
核心的开发团队,Jack Slocum等。
活跃的社区,迅速增加的用户量。
模块化实现,可扩展性强。
所有的组件(widgets)都可直接使用,而无需进行设置(当然,用户可以选择重新配置)。
缺点
稍复杂。
为重量级的框架(包含大量UI),体积大。如果导入ext-all.js,压缩后也有近500k。
ExtJs与jQuery比较
1.EXT体积大,jQuery更专注于简化最基础的开发工作.所以使用起来,也就感觉更像是使用原始的js进行开发一样
2.EXT界面美观,jQuery一般
3.EXT代码复用性强
4.EXT兼容性还是有点小问题,jQuery兼容性良好
5.EXT不易调试,
6.Ext使页面是只留下body,搜索引擎无法收录这样,不利于SEO排名
7.jQuery的事件绑定更强
Ext简化了很多工作,让开发更简洁,更方便,但也带来了很多麻烦,给我们留下了更小的选择空间,局域网里面我们可以使用EXT,但是在互联网上请优先jQuery
我想很多人想知道 64bit 和 32bit 到底区别有多大,在买了VPS后,不知道是装 64bit 的还是装 32bit 的,不知道装 CentOS 还是 Debian
现在以我的实际使用经验来告诉你怎么选择
装 CentOS 还是 Debian ?
首要因素是要看你习惯使用哪一个,就装哪一个,至于资源占用,都差不多的
32bit 和 64bit 实际使用时,差别在哪里?
1. 内存占用的区别
CentOS 32bit 装好系统后的内存占用12MB,64bit 内存占用 19MB
再装 Nginx + PHP + MySQL 并启动后,内存占用相差100多MB
我配置的几个主要参数
Nginx 4 进程
php-fpm 10 进程
apc 64M
MySQL key_buffer 128M
2. 性能区别
CentOS 64bit 的性能要快于 32bit,性能相差大约 30%-50%,这里我说的性能差别指的是从客户端发起请求到接收所花费的时间,包括 php 脚本的执行时间,mysql 的查询时间,nginx 的输出时间
另外,64bit 不仅在性能上要好于 32bit,系统平均负载也要比 32bit 低,我试验了同样的站点,同样的VPS,同样的并发数,32bit 的系统平均负载为 0.9-1.2,而 64bit 的系统平均负载为 0.4-0.7
于此同时,站点运行时,32bit 内存占用 370-400MB, 而 64bit 内存占用 520-580MB
本文作者:http://www.21andy.com/
本文Url:http://www.21andy.com/blog/20101019/1982.html
3. 总结
如果你的 VPS 或服务器,内存大于等于1G,我强烈建议你安装 CentOS 64bit
512MB VPS 是比较尴尬的, 一般是 512MB 保证,超过这个内存范围,商家不保证你能稳定
如果你使用 64bit 内存不超,应该选 64bit
512MB 以下的,不用考虑,就 32bit
现在以我的实际使用经验来告诉你怎么选择
装 CentOS 还是 Debian ?
首要因素是要看你习惯使用哪一个,就装哪一个,至于资源占用,都差不多的
32bit 和 64bit 实际使用时,差别在哪里?
1. 内存占用的区别
CentOS 32bit 装好系统后的内存占用12MB,64bit 内存占用 19MB
再装 Nginx + PHP + MySQL 并启动后,内存占用相差100多MB
我配置的几个主要参数
Nginx 4 进程
php-fpm 10 进程
apc 64M
MySQL key_buffer 128M
2. 性能区别
CentOS 64bit 的性能要快于 32bit,性能相差大约 30%-50%,这里我说的性能差别指的是从客户端发起请求到接收所花费的时间,包括 php 脚本的执行时间,mysql 的查询时间,nginx 的输出时间
另外,64bit 不仅在性能上要好于 32bit,系统平均负载也要比 32bit 低,我试验了同样的站点,同样的VPS,同样的并发数,32bit 的系统平均负载为 0.9-1.2,而 64bit 的系统平均负载为 0.4-0.7
于此同时,站点运行时,32bit 内存占用 370-400MB, 而 64bit 内存占用 520-580MB
本文作者:http://www.21andy.com/
本文Url:http://www.21andy.com/blog/20101019/1982.html
3. 总结
如果你的 VPS 或服务器,内存大于等于1G,我强烈建议你安装 CentOS 64bit
512MB VPS 是比较尴尬的, 一般是 512MB 保证,超过这个内存范围,商家不保证你能稳定
如果你使用 64bit 内存不超,应该选 64bit
512MB 以下的,不用考虑,就 32bit
平时我们取得location的search的时候,往往都是要用location.search,然后根据取回的结果集再处理
1、先判断第一位是否是“?”,如果是则从?开始往后面处理
2、写程序以&开始分隔,当然得先用unescape,或者用那个urldecode(具体的名字不记得了)处理一下,把&之类的处理一下
3、以=分隔,这样才能可以取得一一对应的值。
现在方便了。jQuery有这样的插件了。。。。
原文来自:http://www.cssrain.cn/article.asp?id=1204
内容如下:
例如 当前你的URL是:
http://www.cssrain.cn/index.php?test=1&kk=2
如果想获取test,则可以引入插件后,
用如下方法获取:
var test = $.query.get('test');
如果参数有多个相同的名称 ,则可以这样:
var arr = $.query.get('testy');
输出: [ 值1 , 值2, 值3...]
如果要获取多个相同名称中的某一个,可以这样:
var arrayElement = $.query.get('testy[1]');
此插件不仅能获取参数,也能设置参数。
设置一个参数:
var newUrl = $.query.set("section", 5).toString();
输出 : "?section=5"
设置两个参数:
var newUrl = $.query.set("section", 5).set("action", "do").toString();
输出 : "?action=do§ion=5"
删除一个参数:
var oldQueryAgain = $.query.REMOVE("type");
清空所有参数:
var emptyQuery = $.query.empty();
复制所有参数:
var stillTheSame = $.query.copy();
插件地址:
http://plugins.jquery.com/project/query-object
http://plugins.jquery.com/files/jquery.query-2.1.7.js.txt
1、先判断第一位是否是“?”,如果是则从?开始往后面处理
2、写程序以&开始分隔,当然得先用unescape,或者用那个urldecode(具体的名字不记得了)处理一下,把&之类的处理一下
3、以=分隔,这样才能可以取得一一对应的值。
现在方便了。jQuery有这样的插件了。。。。
原文来自:http://www.cssrain.cn/article.asp?id=1204
内容如下:
例如 当前你的URL是:
http://www.cssrain.cn/index.php?test=1&kk=2
如果想获取test,则可以引入插件后,
用如下方法获取:
var test = $.query.get('test');
如果参数有多个相同的名称 ,则可以这样:
var arr = $.query.get('testy');
输出: [ 值1 , 值2, 值3...]
如果要获取多个相同名称中的某一个,可以这样:
var arrayElement = $.query.get('testy[1]');
此插件不仅能获取参数,也能设置参数。
设置一个参数:
var newUrl = $.query.set("section", 5).toString();
输出 : "?section=5"
设置两个参数:
var newUrl = $.query.set("section", 5).set("action", "do").toString();
输出 : "?action=do§ion=5"
删除一个参数:
var oldQueryAgain = $.query.REMOVE("type");
清空所有参数:
var emptyQuery = $.query.empty();
复制所有参数:
var stillTheSame = $.query.copy();
插件地址:
http://plugins.jquery.com/project/query-object
http://plugins.jquery.com/files/jquery.query-2.1.7.js.txt
当我们想将work copy的某个已修改的文件回退到之前的状态时,我们可以通过 svn reverte filename来实现。
实践下:
https://jackxiang.com/software/Web_Pro_Code/tech.jackxiang.com/trunk/
下面有一个index.html,我们修改一下这个文件,在这个文件里加入一行:Helo,World。
后,我们使用:右键,选择:Revert,勾选这个:index.html ,后:确定。再看这个文件,又回到了之前的状态。
其实,这个命令还有另外一个撤销功能 :
同样,我们也可以通过 svn revert 来撤销 svn add 和 svn delete的操作。
在working copy中增加一个index.php文件,通过 svn add 将其schedule到add操作queue中。svn status显示其状态为 A。
通过 svn revert 我们可以撤销该add操作。后通过svn status 可以看到,index.php的状态变为了 ?。
======================================================
也就说明:svn的命令行的revert命令只能回滚服务器到本地的,放弃下本地所做的修改,而不能回滚已经提交到服务器的上的。
我们就来实现这个把服务器上的版本给回滚到上N个版本吧,其实也很简单,只要把以前的版本merge到现在的版本上,这位老兄是这么搞的 :
方法一:
(1)命令行操作:
比如要把42回滚到38:
svn merge -r 42:38 http://my.repository.com/my/project/trunk
然后commit就行了
svn commit -m "Reverted to revision 38."
1)回滚:
D:\jackxiang.com>svn merge -r 42:38 ./.
--- 正在反向合并 r42,经由 r39,到 “.”:
D testAddFile.html
2)提交:
D:\jackxiang.com>svn commit . -m "message:merge test ..."
删除 testAddFile.html
提交后的版本为 49。【由41-->49版本了】
用:Beyond Compare对比:
1)checkOut一个38版本D:\jackxiang.com_38,后于49版本:D:\jackxiang.com
对比,发现,没有改动,即得证。
(2)界面鼠标来进行操作:
查看日志,后先择要回退的日志,后进行回退,revert to this version,好像这样容易产生冲突。【略过】
Merge two different trees:
From:https://jackxiang.com/software/Web_Pro_Code/tech.jackxiang.com/trunk
Revision:53
To:
From:https://jackxiang.com/software/Web_Pro_Code/tech.jackxiang.com/trunk
Revision:51
Merge options:
Working copy
按合并确定:
D:\jackxiang.com_38\helo.txt
后,这个文件给51版本的文件覆盖,后继而出现在这个文件的图标变红,后来再提交一次,和上面的命令行:
svn commit . -m "message:merge test ..."一样的,只是用小乌龟来操作罢了。
方法二:
svn文件提交了不可以再revert了,若想回退到之前的版本,可以先在本地update to Revision (更新至你想要的版本),然后将更新到的那个版本的文件拷贝到另一个地方,然后再更新 svn update 那个文件到最新版本,最后用之前拷贝出来的版本覆盖最新版本提交就可以了。
写来写去,不如抄了:
取消对代码的修改分为两种情况:
第一种情况:改动没有被提交(commit)。
这种情况下,使用svn revert就能取消之前的修改。
svn revert用法如下:
# svn revert [-R] something
其中something可以是(目录或文件的)相对路径也可以是绝对路径。
当something为单个文件时,直接svn revert something就行了;当something为目录时,需要加上参数-R(Recursive,递归),否则只会将something这个目录的改动。
在这种情况下也可以使用svn update命令来取消对之前的修改,但不建议使用。因为svn update会去连接仓库服务器,耗费时间。
注意:svn revert本身有固有的危险,因为它的目的是放弃未提交的修改。一旦你选择了恢复,Subversion没有方法找回未提交的修改。
第二种情况:改动已经被提交(commit)。
这种情况下,用svn merge命令来进行回滚。
回滚的操作过程如下:
1、保证我们拿到的是最新代码:
svn update
来自:http://blog.sina.com.cn/s/blog_5432f2730100vmz4.html
附录:
svn cleanup:
当Subversion改变你的工作拷贝(或是.svn中的任何信息),它会尽可能的小心,在修改任何事情之前,它把意图写到日志文件中去,然后执行log文件中的命令,并且执行过程中在工作拷贝的相关部分保存一个锁— 防止Subversion客户端在变更过程中访问工作拷贝。然后删掉日志文件,这与记帐试的文件系统架构类似。如果Subversion的操作中断了(举个例子:进程被杀死了,机器死掉了),日志文件会保存在硬盘上,通过重新执行日志文件,Subversion可以完成上一次开始的操作,你的工作拷贝可以回到一致的状态。
这就是svn cleanup所作的:它查找工作拷贝中的所有遗留的日志文件,删除进程中工作拷贝的锁。如果Subversion告诉你工作拷贝中的一部分已经“锁定”了,你就需要运行这个命令了。同样,svn status将会使用L 显示锁定的项目:
$ svn status
L somedir
M somedir/foo.c
$ svn cleanup
$ svn status
M somedir/foo.c
平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:
阅读全文
阅读全文
Xdebug安装配置:
修改PHP的配置文件:php.ini后,加入这个扩展:
FastCgi重启:PHP进程.
Apache常规:重启Apache。
问题的缘起,PHP打开错误,且安好了Xdebug,前几天还好好的 ,但是在Apache下依旧没有报错,返回空白,于是在Terminal下执行出现如下:
出现返回如下:
查了个Google网上说是某日志文件太大,估计是大于2G了,于是,从Php的日志文件查起,一看,果然有一个:
如此,查看一下大小:
果然太大了,于是删除。
其实还可以这样查的,用Awk遍历某个你认为日志的目录:
我的Vps下的Nignx目录日志扫描:
解决办法:先删除再说,后加入Crontab定时删除PHP的错误Log文件:
文件内容:
加入执行权限:
阅读全文
修改PHP的配置文件:php.ini后,加入这个扩展:
FastCgi重启:PHP进程.
Apache常规:重启Apache。
问题的缘起,PHP打开错误,且安好了Xdebug,前几天还好好的 ,但是在Apache下依旧没有报错,返回空白,于是在Terminal下执行出现如下:
出现返回如下:
查了个Google网上说是某日志文件太大,估计是大于2G了,于是,从Php的日志文件查起,一看,果然有一个:
如此,查看一下大小:
果然太大了,于是删除。
其实还可以这样查的,用Awk遍历某个你认为日志的目录:
我的Vps下的Nignx目录日志扫描:
解决办法:先删除再说,后加入Crontab定时删除PHP的错误Log文件:
文件内容:
加入执行权限:
阅读全文
自己安装了一个,得到CentOs6.0的内核版本号:
刻录需要超刻的方法:
打开Nero文件-选项-高级 启动DVD超刻 前面打勾,然后确定。数度选择4X,最后,提示刻录失败,其实已经好了。
Last:
自己刻录,自己安装,果然Ok啊,哈哈。
================================================================
centos 6.0已经正式发布了,做为一个大版本的第一个版本肯定有很多问题,RHEL 6.1早发布修补了很多问题,当然还有增强(或增加)了一些功能,所以真正重要生产服务器还是期待centos 6.1的发布,估计下个月底就会发布。
http://qaweb.dev.centos.org/qa/dashboard 预计下周会正式发布下载,且centos 5.7 发布也一样
2011-08-26
centos 5.7官方最新消息称最快7-10天内发布
centos 6.1不太顺利,估计要比5.7晚点
2011-09-01
centos 5.7已经发布了,开始同步外部镜像,估计这两天就可以下载
现在已经有部份镜像点有下载了:
http://ftp.twaren.net/Linux/CentOS/5.7/isos
http://centos.mirror.nexicom.net/5.7/isos/
更多的见:http://www.centos.org/modules/tinycontent/index.php?id=30
按照计划先推出CentOS 6,然后再进行CentOS 6.1的工作。centos。Karanbir表示CentOS 6将在未来的数个星期内发布,而之后的CentOS 6.1只需要几个星期的时间,centos ftp,因为目前CentOS 6的开发branch的自动化和测试流程已经基本完善。centos和rhel。
centos 6.1预15天左右可供下载,可能还得等,官方更新build包日志:http://qaweb.dev.centos.org/qa/blog ,感谢CentOS团队无私的奉献。
在centos 6.1发布之前,centos临时发布了CentOS 6.0 CR Repo,有需要的可以下载用于CENTOS 6.0,同时也说明centos 6.1可能会再次跳票(大家都习惯了吧!)
# yum install centos-release-cr
# yum update
详见:
https://www.centos.org/modules/newbb/viewtopic.php?topic_id=33458&forum=53
http://www.h-online.com/open/news/item/Advance-updates-for-CentOS-6-1-1350302.html
刻录需要超刻的方法:
打开Nero文件-选项-高级 启动DVD超刻 前面打勾,然后确定。数度选择4X,最后,提示刻录失败,其实已经好了。
Last:
自己刻录,自己安装,果然Ok啊,哈哈。
================================================================
centos 6.0已经正式发布了,做为一个大版本的第一个版本肯定有很多问题,RHEL 6.1早发布修补了很多问题,当然还有增强(或增加)了一些功能,所以真正重要生产服务器还是期待centos 6.1的发布,估计下个月底就会发布。
http://qaweb.dev.centos.org/qa/dashboard 预计下周会正式发布下载,且centos 5.7 发布也一样
2011-08-26
centos 5.7官方最新消息称最快7-10天内发布
centos 6.1不太顺利,估计要比5.7晚点
2011-09-01
centos 5.7已经发布了,开始同步外部镜像,估计这两天就可以下载
现在已经有部份镜像点有下载了:
http://ftp.twaren.net/Linux/CentOS/5.7/isos
http://centos.mirror.nexicom.net/5.7/isos/
更多的见:http://www.centos.org/modules/tinycontent/index.php?id=30
按照计划先推出CentOS 6,然后再进行CentOS 6.1的工作。centos。Karanbir表示CentOS 6将在未来的数个星期内发布,而之后的CentOS 6.1只需要几个星期的时间,centos ftp,因为目前CentOS 6的开发branch的自动化和测试流程已经基本完善。centos和rhel。
centos 6.1预15天左右可供下载,可能还得等,官方更新build包日志:http://qaweb.dev.centos.org/qa/blog ,感谢CentOS团队无私的奉献。
在centos 6.1发布之前,centos临时发布了CentOS 6.0 CR Repo,有需要的可以下载用于CENTOS 6.0,同时也说明centos 6.1可能会再次跳票(大家都习惯了吧!)
# yum install centos-release-cr
# yum update
详见:
https://www.centos.org/modules/newbb/viewtopic.php?topic_id=33458&forum=53
http://www.h-online.com/open/news/item/Advance-updates-for-CentOS-6-1-1350302.html
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
Linux系统需要事先安装GCC编译工具、ID连接器和make编译器,这里不讨论这个了,网上有很多这样的文章
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.2.tar.bz2
# tar xjvf linux-2.6.38.2.tar.bz2 -C /usr/src/
# cd /usr/src/linux-2.6.38.2
# make menuconfig (这里如果是在虚拟终端下执行的话,虚拟终端的大小要适当的调整,否则运行以后出现错误)
这里主要注意的地方是CONFIG_SYSFS_DEPRECATED_V2这个选项,一定要启用的,具体在General setup中,解释说是enable deprecated sysfs features to support old userspace tools
其他的比如支持windows的NTFS的选项可以自己去选择,最后选择完了以后,在退出的时候选择保存。
#make (这个时间比较长,好几个小时)
#make modules (编译模块)
#make modules_install (安装模块)
#cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.38.2
#cp System.map /boot/System.map-2.6.38.2
#mkinitrd /boot/initrd-2.6.38.2.img 2.6.38.2
好像mkinitrd有个BUG,make出来的initrd有重复的行,要去掉
#cp initrd-2.6.38.2.img /tmp/
#cd /tmp
#mkdir newinitrd
#cd newinitrd
#zcat ../initrd-2.6.38.2.img |cpio -id
#vim init
删掉其中重复的四行中的两行
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
# find . | cpio -c -o | gzip -9 >../initrd-2.6.38.2.img.new (重新打包)
#cp ../initrd-2.6.38.2.img.new /boot/initrd-2.6.38.2.img
#编辑grub的配置文件
title Linux New Kernel (2.6.38.2)
root (hd0,0)
kernel /vmlinuz-2.6.38.2 ro root=/dev/vg_1/lv_root
initrd /initrd-2.6.38.2.img
(这个是我的,你的可能不一样的)
#sync;sync
#reboot
选择新的内核…… OK,Good Luck.
来源:http://blog.csdn.net/imfinger/article/details/6385027
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.2.tar.bz2
# tar xjvf linux-2.6.38.2.tar.bz2 -C /usr/src/
# cd /usr/src/linux-2.6.38.2
# make menuconfig (这里如果是在虚拟终端下执行的话,虚拟终端的大小要适当的调整,否则运行以后出现错误)
这里主要注意的地方是CONFIG_SYSFS_DEPRECATED_V2这个选项,一定要启用的,具体在General setup中,解释说是enable deprecated sysfs features to support old userspace tools
其他的比如支持windows的NTFS的选项可以自己去选择,最后选择完了以后,在退出的时候选择保存。
#make (这个时间比较长,好几个小时)
#make modules (编译模块)
#make modules_install (安装模块)
#cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.38.2
#cp System.map /boot/System.map-2.6.38.2
#mkinitrd /boot/initrd-2.6.38.2.img 2.6.38.2
好像mkinitrd有个BUG,make出来的initrd有重复的行,要去掉
#cp initrd-2.6.38.2.img /tmp/
#cd /tmp
#mkdir newinitrd
#cd newinitrd
#zcat ../initrd-2.6.38.2.img |cpio -id
#vim init
删掉其中重复的四行中的两行
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
# find . | cpio -c -o | gzip -9 >../initrd-2.6.38.2.img.new (重新打包)
#cp ../initrd-2.6.38.2.img.new /boot/initrd-2.6.38.2.img
#编辑grub的配置文件
title Linux New Kernel (2.6.38.2)
root (hd0,0)
kernel /vmlinuz-2.6.38.2 ro root=/dev/vg_1/lv_root
initrd /initrd-2.6.38.2.img
(这个是我的,你的可能不一样的)
#sync;sync
#reboot
选择新的内核…… OK,Good Luck.
来源:http://blog.csdn.net/imfinger/article/details/6385027
RedHat Linux 的社区免费版本 CentOS 6.0 于7月11日正式发布。CentOS 6.0 基于上游的 RHEL 6.0 制作,同时基本包含了所有的上游软件包。CentOS 完全遵守上游供应商的再发行政策,并且以百分之百的软件兼容性为目标。
本文主题是『升级CentOS 5.6到CentOS 6.0』
预备命令
cat /etc/RedHat-release,查看版本
uname –a – 显示版本和内核信息
rpm –q kernel – 显示内核版本
yum –y update – 升级所有应用版本,更新CentOS到最新镜像版本
备份MySQL
首先备份MySQL,方法多种,下面介绍一种标准方法。
#1,导出MySQL数据库内容
mysqldump –u root –p password db_1 > db_1.sql
#2,导入备份内容到新的版本
mysqldump –u root –p password db_1 < db_1.sql
#3,相关命令查看运行的Mysql:
mysql –u root -p
列出所有已安装应用
yum list | grep installed > installed.txt
备份文件和相关配置
tar cvf /backup.tar /root /home /var /etc
在CentOS 6中解压文件
tar xf backup.tar
保留用户和组
备份下面重要文件:
/etc/passwd – 包含用户和主目录信息
/etc/shadow – 包括每个用户的密码信息
/etc/group – 每个用户组的信息
/etc/gshadow – 每个用户组密码信息
来源:
http://www.myhack58.com/Article/sort099/sort0102/2011/31404.htm
本文主题是『升级CentOS 5.6到CentOS 6.0』
预备命令
cat /etc/RedHat-release,查看版本
uname –a – 显示版本和内核信息
rpm –q kernel – 显示内核版本
yum –y update – 升级所有应用版本,更新CentOS到最新镜像版本
备份MySQL
首先备份MySQL,方法多种,下面介绍一种标准方法。
#1,导出MySQL数据库内容
mysqldump –u root –p password db_1 > db_1.sql
#2,导入备份内容到新的版本
mysqldump –u root –p password db_1 < db_1.sql
#3,相关命令查看运行的Mysql:
mysql –u root -p
列出所有已安装应用
yum list | grep installed > installed.txt
备份文件和相关配置
tar cvf /backup.tar /root /home /var /etc
在CentOS 6中解压文件
tar xf backup.tar
保留用户和组
备份下面重要文件:
/etc/passwd – 包含用户和主目录信息
/etc/shadow – 包括每个用户的密码信息
/etc/group – 每个用户组的信息
/etc/gshadow – 每个用户组密码信息
来源:
http://www.myhack58.com/Article/sort099/sort0102/2011/31404.htm
从家里洗衣机坏了说需求产生价值的三段论
今天,家里的洗衣机坏了,于是自己用螺丝刀拧开看原料来有两处,一处是定时器坏了,最重要的一处是,那个打开放水的闸门的线由于老化也坏了,
于是否,找了一个店家去修理下,我说明了大致情况,我看到的实际情形是:他从一坏乱七八糟的“垃圾”中找出了一根绳子,然后就带上工具来
修理了,一陈倒腾后,还带点测试性质的做了下放水开闸测试,也就是换上了从垃圾堆里整的绳,后面是修理定时器,后面我不想多讲,不是重点。
我想这是我能亲眼见到的一件让人感悟很深的事儿,是什么让垃圾中的一根绳的价值复燃,是什么让这个绳子的价值得以翻千倍增长,我想它
应该是人的需求,也就是我们常说的用户需求,它让一跟垃圾堆中的绳子产生了价值,而又是谁让其这根绳的价值增长如些多的倍数呢?我想它是
人, 是一个人在一定的时空产生的需求后,选用一件物体去解决,那人本身解决这个需求的一个过程,使其这根绳的价值得以翻倍,人对物的选择
来自人的需求是其内核,使其不光让物具有了价值而且使人做的某事有价值,于是物的本身的价值也被因它所处的位置后导致其价值放大在数千倍
的核心还是来始终自于用户需求。
其实,我们做互联网也是在满足用户需求,试问为什么你在家里写一行代码(我写代码的)和在给公司写代码时其价值也会有如此大的区别呢?
呵呵,其实你写的代码 就像那上面的一根绳,他很可能很快就会被和垃圾放在一类,不久就会扔掉,给公司写就不一样了,怎么不一样:它是解决
了一个用户(它可能是一个重要用户,或者它是一群用户)的需求,而给这个行业,这个社会带来了实实在在的价值,这才是它的根本所在,为此,
让我想起一个故事:
一个人开着豪车在路途中坏了,于是找了一个犹太人修理,那犹太人拿一铁锤左右瞧瞧,上下敲敲,最后使劲在车的某个部位敲了下,于是车好了。
最后,向那个兄弟 要价29美元,那开车人就问,为何你一锤子就要29美元?那人回答,一锤子1美元,知道在哪儿锤28美元,Thanks,这个故事很好。
回想们做互联网也好,做其它行业也好,都是在解决某个人,某类人的事儿的问题,而本质是人的问题,我们以小学作文的老三段来论述:
第一段: 某个人,但它不是一个人,它是有血有肉的一个人类中的人。哇哈,这个人就有其社会属性,阶层属性,但无论他是什么样的人,也就是
无论他有多么的附加属性,如:此人牛B,但他总会在人类生活中遇到这样那样的问题,不是吗?如果你能解决 (其你这个人也受你本人的时空和阶层的
限定,如你出生就喜欢开跑车对车性能熟悉,你可能解决车相关的问题。如果你是农民工,你可以解决住房问题,考,这住房问题确实不 大容易让农
民工解决哇,哭了。),那么恭喜你,你就有了一个成功的开始,至少你不会饿死,你可能有一份糊口的工作,但危机从从,步步惊心(最近电视剧名),
解决困扰他人的问题那只是第一步,而从中不只是 为了解决问题,而是更多的分析其内在的联系和存在问题的本质,你能有新的设计解决这个问题吗?等等。
第二段: 这时,你也混多了,技术也熟悉了,恍然发现无论你怎么想去贴近市场需求,但你也仅仅是这个行业中其中一个环节,你这时在这个行业中某
技术方面的剑法已经是驭剑而行,踏浪而来。但这仅仅是众多武功中的一种,但这仅仅是在解决一个人的安全问题,生存依旧困难,如果你能进入大企业
(其本质是解决一个大片人的需求,可能会好很多),说简单点:就像你用PHP说明你是在互联网圈中,但这远远不够,你不能凭借一种武功而让众人折服,得要有用户意识。
常言道不入虎穴,安得虎子,这时需要引入哲学的帮助,那就是深入基层,实事求是看简单,做难呐,相当难啊,我党也经常在这上面犯错,你说难不难。
这时的你可能意识到这些山头已经给人占了,感觉都给占了,于是想分清哪些是蓝海,哪些是红海,看到的都是红海。其实常常在互联网中会有这样的图片,如:
此处应有贴图:

层次不够,需要修炼,你会发现技术它是一种日常干活的工具,产品才是其服务的对象的时候,你会发现自己为何当时要搞技术,不直接搞产品哩,其实这种想法不对,
当你领悟到无论搞什么都一样时,你就快到第三个层次了,就是下面的第三段,你能真真做出某个产品来解决一大堆用户困扰的问题吗?能有海量服务的产品经验吗。
第三段: 第二段你发现产品经理很牛,但它也只是个产品,其实都是服从于核心需求,就像今天换灯时发现就一个外壳,里面是两个荧光灯,从技术上说很简单,但要整个
好的灯罩,这就是学问了,整个好的灯罩你以为就牛了,但再好的产品,没有一个好的推广营销到用户的手里,换成钱,这是价值的最后确定实现,且得到认可,
如只有产品,但是没有钱回来,虾扯蛋不说,估计产品也做不下去了,这时你得反省你这产品,是不是你给自己做的产品喔,只有无我,才能做出好产品呐。
你不是你,你不是用户,就像1+1不等于二那样的玄乎,这时,你还觉得产品牛B吗?觉得某个技术NewB吗?觉得某一个人牛B吗,其实都 一样,此时,我想你可以从1再到3,
恭喜你,你上道了。
其实,很多很多的老三段,我们的古人都做了总结和分析,如毛爷爷说的一句话,从群众中来,到群众中去,实事求是等,只有贴地飞行(低姿态飞行),才能不被敌人的雷达(用户警戒线)发现,
你说老美的飞机到中国来就发现它确实有这个功能,我倒! 所以产品做好不是件容易的事儿啊,比如今天偶的洗衣机坏了,就是这个产品的设计上没有做好造成的。所以,这是一个变革的社会。
这时的你这时真做出一个产品能符合用户在这个时空下的的预期吗?你能保证你的产品时时刻刻符合用户的需求吗?为什么我们的产品一直在升级,一直在做版本迭代,就是人TMD需求是时时刻刻在变。
所以,不要说产品都给人做完了,产品永远都是做不完的,所以,钱也是永远赚不完的,我想大抵应该是这样的罢,以人为本,和气生财。
在某个时间点上某个空间下,当你真能确信无疑的解决一群的用户(它可能是某个行业的,某个年龄段的,某个性别的)的问题,十拿九稳,那你就干吧?
Who r U Prepare to do其实就是老三段,过了这三段后的你就更需要像Like的广告一样:Just Do It,恭喜你,你领悟了,命运之神降临到你那儿,呵呵。
今天,家里的洗衣机坏了,于是自己用螺丝刀拧开看原料来有两处,一处是定时器坏了,最重要的一处是,那个打开放水的闸门的线由于老化也坏了,
于是否,找了一个店家去修理下,我说明了大致情况,我看到的实际情形是:他从一坏乱七八糟的“垃圾”中找出了一根绳子,然后就带上工具来
修理了,一陈倒腾后,还带点测试性质的做了下放水开闸测试,也就是换上了从垃圾堆里整的绳,后面是修理定时器,后面我不想多讲,不是重点。
我想这是我能亲眼见到的一件让人感悟很深的事儿,是什么让垃圾中的一根绳的价值复燃,是什么让这个绳子的价值得以翻千倍增长,我想它
应该是人的需求,也就是我们常说的用户需求,它让一跟垃圾堆中的绳子产生了价值,而又是谁让其这根绳的价值增长如些多的倍数呢?我想它是
人, 是一个人在一定的时空产生的需求后,选用一件物体去解决,那人本身解决这个需求的一个过程,使其这根绳的价值得以翻倍,人对物的选择
来自人的需求是其内核,使其不光让物具有了价值而且使人做的某事有价值,于是物的本身的价值也被因它所处的位置后导致其价值放大在数千倍
的核心还是来始终自于用户需求。
其实,我们做互联网也是在满足用户需求,试问为什么你在家里写一行代码(我写代码的)和在给公司写代码时其价值也会有如此大的区别呢?
呵呵,其实你写的代码 就像那上面的一根绳,他很可能很快就会被和垃圾放在一类,不久就会扔掉,给公司写就不一样了,怎么不一样:它是解决
了一个用户(它可能是一个重要用户,或者它是一群用户)的需求,而给这个行业,这个社会带来了实实在在的价值,这才是它的根本所在,为此,
让我想起一个故事:
一个人开着豪车在路途中坏了,于是找了一个犹太人修理,那犹太人拿一铁锤左右瞧瞧,上下敲敲,最后使劲在车的某个部位敲了下,于是车好了。
最后,向那个兄弟 要价29美元,那开车人就问,为何你一锤子就要29美元?那人回答,一锤子1美元,知道在哪儿锤28美元,Thanks,这个故事很好。
回想们做互联网也好,做其它行业也好,都是在解决某个人,某类人的事儿的问题,而本质是人的问题,我们以小学作文的老三段来论述:
第一段: 某个人,但它不是一个人,它是有血有肉的一个人类中的人。哇哈,这个人就有其社会属性,阶层属性,但无论他是什么样的人,也就是
无论他有多么的附加属性,如:此人牛B,但他总会在人类生活中遇到这样那样的问题,不是吗?如果你能解决 (其你这个人也受你本人的时空和阶层的
限定,如你出生就喜欢开跑车对车性能熟悉,你可能解决车相关的问题。如果你是农民工,你可以解决住房问题,考,这住房问题确实不 大容易让农
民工解决哇,哭了。),那么恭喜你,你就有了一个成功的开始,至少你不会饿死,你可能有一份糊口的工作,但危机从从,步步惊心(最近电视剧名),
解决困扰他人的问题那只是第一步,而从中不只是 为了解决问题,而是更多的分析其内在的联系和存在问题的本质,你能有新的设计解决这个问题吗?等等。
第二段: 这时,你也混多了,技术也熟悉了,恍然发现无论你怎么想去贴近市场需求,但你也仅仅是这个行业中其中一个环节,你这时在这个行业中某
技术方面的剑法已经是驭剑而行,踏浪而来。但这仅仅是众多武功中的一种,但这仅仅是在解决一个人的安全问题,生存依旧困难,如果你能进入大企业
(其本质是解决一个大片人的需求,可能会好很多),说简单点:就像你用PHP说明你是在互联网圈中,但这远远不够,你不能凭借一种武功而让众人折服,得要有用户意识。
常言道不入虎穴,安得虎子,这时需要引入哲学的帮助,那就是深入基层,实事求是看简单,做难呐,相当难啊,我党也经常在这上面犯错,你说难不难。
这时的你可能意识到这些山头已经给人占了,感觉都给占了,于是想分清哪些是蓝海,哪些是红海,看到的都是红海。其实常常在互联网中会有这样的图片,如:
此处应有贴图:
层次不够,需要修炼,你会发现技术它是一种日常干活的工具,产品才是其服务的对象的时候,你会发现自己为何当时要搞技术,不直接搞产品哩,其实这种想法不对,
当你领悟到无论搞什么都一样时,你就快到第三个层次了,就是下面的第三段,你能真真做出某个产品来解决一大堆用户困扰的问题吗?能有海量服务的产品经验吗。
第三段: 第二段你发现产品经理很牛,但它也只是个产品,其实都是服从于核心需求,就像今天换灯时发现就一个外壳,里面是两个荧光灯,从技术上说很简单,但要整个
好的灯罩,这就是学问了,整个好的灯罩你以为就牛了,但再好的产品,没有一个好的推广营销到用户的手里,换成钱,这是价值的最后确定实现,且得到认可,
如只有产品,但是没有钱回来,虾扯蛋不说,估计产品也做不下去了,这时你得反省你这产品,是不是你给自己做的产品喔,只有无我,才能做出好产品呐。
你不是你,你不是用户,就像1+1不等于二那样的玄乎,这时,你还觉得产品牛B吗?觉得某个技术NewB吗?觉得某一个人牛B吗,其实都 一样,此时,我想你可以从1再到3,
恭喜你,你上道了。
其实,很多很多的老三段,我们的古人都做了总结和分析,如毛爷爷说的一句话,从群众中来,到群众中去,实事求是等,只有贴地飞行(低姿态飞行),才能不被敌人的雷达(用户警戒线)发现,
你说老美的飞机到中国来就发现它确实有这个功能,我倒! 所以产品做好不是件容易的事儿啊,比如今天偶的洗衣机坏了,就是这个产品的设计上没有做好造成的。所以,这是一个变革的社会。
这时的你这时真做出一个产品能符合用户在这个时空下的的预期吗?你能保证你的产品时时刻刻符合用户的需求吗?为什么我们的产品一直在升级,一直在做版本迭代,就是人TMD需求是时时刻刻在变。
所以,不要说产品都给人做完了,产品永远都是做不完的,所以,钱也是永远赚不完的,我想大抵应该是这样的罢,以人为本,和气生财。
在某个时间点上某个空间下,当你真能确信无疑的解决一群的用户(它可能是某个行业的,某个年龄段的,某个性别的)的问题,十拿九稳,那你就干吧?
Who r U Prepare to do其实就是老三段,过了这三段后的你就更需要像Like的广告一样:Just Do It,恭喜你,你领悟了,命运之神降临到你那儿,呵呵。
php的mysql持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之。这到底是为啥么。近距离观察后发现,这家伙也不容易啊,要看apache的脸色,还得听mysql指挥。
阅读全文
阅读全文
法一:
法二:
由于不同系统中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
右键单击该项目,从中您希望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
apache:
nginx:
来源:http://loosky.net/?p=1856
通过测试和在PHP高级群里询问得知默认指向了我的一个虚拟机的网站,但是我们往往配置是这样的:
这个*.conf不知Apache去指向哪个虚拟主机了,于是,就在上面加了一个,成这样了:
经测试,直接输入IP访问时就是指向了/usr/local/apache2/htdocs 目录了,呵呵。
PHP高级群里有兄弟问:
要放在所有的VirtualHost前面吧?
答:
放后面也没关系。
一样的,我试了。
这个*.conf不知Apache去指向哪个虚拟主机了,于是,就在上面加了一个,成这样了:
经测试,直接输入IP访问时就是指向了/usr/local/apache2/htdocs 目录了,呵呵。
PHP高级群里有兄弟问:
要放在所有的VirtualHost前面吧?
答:
放后面也没关系。
一样的,我试了。
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中去,如下:
有一个真的包,也就是有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中去,如下:
先说我的简单配置:
访问:
http://status.justwinit.cn/
然后看是怎么配置和相关模块,及参数含义,如下:
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.justwinit.cn/
然后看是怎么配置和相关模块,及参数含义,如下:
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下给你权限小了呢?你说在原有目录下部分文件是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。
最后,一个小心的操作,以及习惯的养成,才是国防之根本。
一,调试模式查看所有变量和数组
1、设置配置文件中的 debuging的值为true。即开始调试(设置完这一步,一般情况下在浏览页面的时候就可以看到一个弹窗了,里面有在这个页面里的所有smarty变量。如果没有弹出看下一步)。
2、在模版里输入{debug},就可以看到这个模版里的变量了。
如果要关闭掉调试控制台,设置变量 $debugging 为 false 就可以了。
不同的情况那个debug是不一样的,实际中特别注意要$tpl->caching = false;不能缓存时看全部DB输出的变量:
在模板中是这样:
二,非调试模式下查看变量和数组,也就是从弹出框中所有变量只看一部分,以方便调试。
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输出的变量:
在模板中是这样:
二,非调试模式下查看变量和数组,也就是从弹出框中所有变量只看一部分,以方便调试。
1、Smarty下如何查看数组:
如果你在使用smarty时,想查看某变量的内容,而又不想打开smarty debug,或smarty debug的输出不能满足你的要求,可以这样用。
如果是查看数组,应当
我自己试了下是这样:
会输出到页面里,不是弹出框。
注意:这里用@是来保证把变量当做一个整体对待,否则会遍历这个array.
查看变量:
2、Smarty下如何调试数组,无论这个:$tpl-> debugging = TRUE; 或者:False都可以:
比如要调试数组$array
实践如下:
调试变量就
偶的实践:
请注意:数组都有一个@,呵呵。
阅读全文
背景:在我们的开发测试中,往往是一些表单的提交,还时常带着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多条记录就会并发向后台请求。
(7)此时,观察我们待测试的页面,会自动弹出窗口,提示语句,SQL等等。
可能出现的问题,如8888端口被占用会配置了代理后,Firefox访问页面出现访问不了,如何排查如下:
如果Windows中查看Fiddler的8888端口是否开启或者被其它程序占用的简单方法。
还不明白,可以参考:http://justwinit.cn/post/735/ 如何通过端口看是哪个程序占用的方法。
我对自己的博客修改文章做了下实验是Ok的,如下:
1)自己先用Firefox保存一下自己写的这篇博文,并把这个保存的URL给找出来,http://justwinit.cn/admin.php,删除Fiddler的其他
的URL。
2)用其他浏览器修改一个博文的文字和1保存时的不一样。
3)直接跳过到上面第4步,再Replay一次,也就是不用柱塞,直接再提交一次,后返回200
4)看DB,发现我的博文又给修改回1步骤时的文字了,模拟成功,Yeah。
最后,还是上一张图吧,除开Firefox设置代理外,都放一块,有兴趣可以摸索摸索:
阅读全文
(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多条记录就会并发向后台请求。
(7)此时,观察我们待测试的页面,会自动弹出窗口,提示语句,SQL等等。
可能出现的问题,如8888端口被占用会配置了代理后,Firefox访问页面出现访问不了,如何排查如下:
如果Windows中查看Fiddler的8888端口是否开启或者被其它程序占用的简单方法。
还不明白,可以参考:http://justwinit.cn/post/735/ 如何通过端口看是哪个程序占用的方法。
我对自己的博客修改文章做了下实验是Ok的,如下:
1)自己先用Firefox保存一下自己写的这篇博文,并把这个保存的URL给找出来,http://justwinit.cn/admin.php,删除Fiddler的其他
的URL。
2)用其他浏览器修改一个博文的文字和1保存时的不一样。
3)直接跳过到上面第4步,再Replay一次,也就是不用柱塞,直接再提交一次,后返回200
4)看DB,发现我的博文又给修改回1步骤时的文字了,模拟成功,Yeah。
最后,还是上一张图吧,除开Firefox设置代理外,都放一块,有兴趣可以摸索摸索:
阅读全文
理解:从{ip}这台机器上用root用户连接远程rsync服务器和本机需要同步的目录/usr/local/push_endsvr 同步,
并作限定速度为3000KB,不需要同步logs目录!
关键参数解释:
rsync --help|grep bwlimit
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
--progress show progress during transfer
--include=PATTERN don't exclude files matching PATTERN
--port=PORT specify double-colon alternate port number
实际测试情况如下:
里面是配置了从/root/elink这个目录向:/home/elink这个目录推送,后查看目录/home/elink的层次结构发现如下:
说明/root/elink/jackxiang.txt 中包含目录也给推送到了/home/elink下,形成/home/elink/elink/jackxiang.txt
阅读全文





下载文件 