学习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设置代理外,都放一块,有兴趣可以摸索摸索:阅读全文
[人个原创]使用Linux的rsync命令实现: 网站镜像和代码分发及备份
Unix/LinuxC技术 jackxiang 2011-9-6 15:45
启动rsyncd的命令行:
理解:从{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
阅读全文
理解:从{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
阅读全文