Posts Tagged ‘linux’

用RCS把httpd.conf版本管理起来

一月 17th, 2010

apache或者其他的配置文件经常会修改。每次改了什么有时候会忘掉。或者没有备份。
用RCS 版本控制系统,Revision Control System(很古老的UNIX应用程序)的ci,co来管理,很是方便。简单的就三个命令。
checkout出来httpd.conf
co -l httpd.conf
修改后,看看都修改了什么
rcsdiff httpd.conf
如果确认,并且好用,就checkin
ci -u -wjuhui httpd.conf
目录里会有一个 httpd.conf,v 文件,是文本文件,可以打开看看。

感谢asong。

Popularity: 2%

freebsd linux如何更换默认的shell

一月 13th, 2010

linux等的shell很多,一个人不太可能全部都熟悉。我用bash比较多。有个新的环境是csh。没有ctrl+r的功能,不爽。想改成bash。
安装bash的方法不谈。
查看一下当前的shell

[phpbird@host3 ~]$ echo $SHELL
/usr/local/bin/bash

当然,这是修改后的。
修改缺省的shell可以修改 /etc/passwd
这个文件是用:分割的多行文件,找到需要修改的用户。把最后一行的shell路径替换掉就可以。当然如果不让登录,就修改成一个不存在的shell。
如果改错了,就会麻烦点了。

还有一个是用命令来
chsh
很优雅的方法
chsh -s /path/to/shell {user-name}
我这里就是
chsh -s /usr/local/bin/bash juhui
不是root用户,需要输入密码。

Popularity: 2%

apache目录密码保护错误

一月 12th, 2010

apache的.htaccess有个可以保护目录的功能。当用户访问这个目录里资源的时候,会弹出对话框,让输入用户名和口令。在设置的时候有一些关必要条件。比如启用.htaccess文件等。
这2天在freebsd里面想这么做一次,但是遇到了问题,一直报错
configuration error: couldn’t check user. No user file?
后来经过调整,还有
configuration error: couldn’t check access. No groups file?

Invalid command ‘AuthUserFile’, perhaps misspelled or defined by a module not included in the server configuration
等错误信息。

后来经过n多个小时。。n>3,最后准备投降的时候,看到httpd.conf里面有一些注释掉名字里面有auth字样的module。一狠心,全去掉注释,好了!
又经过一番测试。
需要启用下面的三个module

  1. LoadModule authn_file_module libexec/apache22/mod_authn_file.so
  2. LoadModule authz_user_module libexec/apache22/mod_authz_user.so
  3. LoadModule auth_basic_module libexec/apache22/mod_auth_basic.so

当然我用的是
AuthType Basic
.htaccess的内容如下

  1. AuthType Basic
  2. AuthName "admin"
  3. AuthUserFile /usr/local/etc/apache22/.htpasswd
  4. Require user admin

Popularity: 2%

find grep perl配合查找替换内容

一月 5th, 2010

有时候需要对一个目录或者一批文件进行内容的替换。
可以用find配合sed或者perl来完成
查找当前目录下,把

  1. </title>

替换成

  1. </title><meta http-equiv="Content-Type" content="text\/html; charset=utf-8" />
  1. find ./ -type f -exec sed -i "s/<\/title>/<\/title><meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\" \/>/g" {} \;

上边是在linux,好像centos也可以,但是FreeBSD上不行,懒得查语法了。搞了个find+perl的版本
把abc换成def

  1. find ./ -type f | xargs perl -pi -e "s/abc/def/g"

FreeBSD不行,可能是shell不对。切换到bash,没报错了

Popularity: 2%

linux服务器上端口映射

九月 20th, 2008

不一定最好+正确,但是可用
1,清空原有规则,不是必须的。

#!/bin/sh
#accept-all policy
IPT=’/sbin/iptables’
$IPT -t nat -F
$IPT -t nat -X
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P INPUT ACCEPT
$IPT -t mangle -P FORWARD ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT
$IPT -t mangle -P POSTROUTING ACCEPT
$IPT -F
$IPT -X
$IPT -P FORWARD ACCEPT
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -t raw -F
$IPT -t raw -X
$IPT -t raw -P PREROUTING ACCEPT
$IPT -t raw -P OUTPUT ACCEPT

开始设置

/sbin/iptables -A INPUT -i eth0 -j ACCEPT
echo “1″ > /proc/sys/net/ipv4/ip_forward
#服务器公网ip
export AO=”6.1.1.3″
#服务器内网ip
export AI=”172.16.96.123″
#目标机器内网ip
export BI=”172.16.97.234″
#公网的端口
export PO=”7704″
#目标端口
export PI=”3389″

export AII=”eth1″

iptables -t nat -A PREROUTING -d $AO -p tcp –dport $PO -j DNAT –to-destination $BI:$PI
iptables -t nat -A POSTROUTING -d $BI -p tcp –dport $PI -j SNAT –to $AI
iptables -A FORWARD -o $AII -d $BI -p tcp –dport $PI -j ACCEPT
iptables -A FORWARD -i $AII -s $BI -p tcp –sport $PI -j ACCEPT

Popularity: 28%

linux查找特定文件里面包含特定字符的文件

五月 24th, 2008

find ./ -name ‘*.java’ -exec grep -i “ABCD” {} \; -print

在当前路径不区分大小写查找所有*.java的文件里面含有”ABCD”的内容行,并且print出来文件的路径。

Popularity: 31%

按文件扩展名grep字符串

二月 3rd, 2008

grep -r –include=*.php “customers_wb_list” ./

Popularity: 23%

清理svn的垃圾文件.svn文件夹

九月 6th, 2007

有时候把svn的代码传到服务器,会不小心传上svn的系统文件,这些文件都是用于版本控制的,在生产环境,总有点不爽。在linux下可以用一个命令删除,命令如下:
find . -name .svn | xargs rm -rf

上述命令要在代码所在目录运行哦。

svn的版本控制,也会有类似问题,方法类似,换一下名字,如下:

find . -name .cvs | xargs rm -rf

Popularity: 23%

在linux下安装activepython2.5 setuptools ClientCookie

六月 1st, 2007

activepython

http://www.activestate.com/products/activepython/

是ActiveState Software的一个python的分发包,带了一些python的扩展.
setuptools

http://cheeseshop.python.org/pypi/setuptools

是一个python的包,它可以简化python包的下载,build,安装升级和卸载
ClientCookie

http://wwwsearch.sourceforge.net/ClientCookie/

是一个python对cookie功能的扩展,从HTTP::Cookies而来。作者说以后不会再发布单独的模块,已经集成到了mechanize里面。

下载上述软件
wget http://downloads.activestate.com/ActivePython/linux/2.5/ActivePython-2.5.1.1-linux-x86.tar.gz
wget http://wwwsearch.sourceforge.net/ClientCookie/src/ClientCookie-1.3.0.tar.gz
wget http://cheeseshop.python.org/packages/2.5/s/setuptools/setuptools-0.6c6-py2.5.egg

先安装ActivePython
tar zxvf ActivePython-2.5.1.1-linux-x86.tar.gz
cd ActivePython-2.5.1.1-linux-x86
./install.sh
输入安装的目录,我输入了/usr/local/python25/
装好后看一下

[jym@jym jym]$ /usr/local/python25/bin/python
ActivePython 2.5.1.1 (ActiveState Software Inc.) based on
Python 2.5.1 (r251:54863, May  1 2007, 17:48:28)
[GCC 2.95.3 20010315 (SuSE)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
%3E%3E%3E%20

本来应该直接安装ClientCookie的,安装过程中要使用setuptools,它应该自动下载,安装的,但是由于ClientCookie用的url不对,用的是

http://cheeseshop.python.org/packages/2.5/s/setuptools/setuptools-0.6a11-py2.5.egg

所以不能自动下载,只好手工下载,安装
安装
setuptools
在setuptools-0.6c6-py2.5.egg所在的目录运行

ln -s  /usr/local/python25/bin/python2.5 python2.5
PATH=.:$PATH 
sh setuptools-0.6c6-py2.5.egg
rm python2.5

安装ClientCookie

tar zxvf ClientCookie-1.3.0.tar.gz
cd ClientCookie-1.3.0
/usr/local/python25/bin/python setup.py build
/usr/local/python25/bin/python setup.py install

至此,activepython2.5+setuptools+ClientCookie在linux的安装已经完成,ClientCookie的简单使用等俺下一篇再说:D
BTW:祝大家6.1快乐!

Popularity: 23%

apache child pid exit signal File size limit exceeded error

五月 25th, 2007

一个正常使用的网站,LAMP架构,突然打不开了,但是另外一个二级域名的网站,在同一台服务器上可以打开,静态文件也可以打开,因为出故障前有段时间程序没有更新,程序错误的可能性不大。
telnet 到网站的80端口,也可以打开,现象很奇怪。
重起了apache,没用,mysql用命令行也可以使用,没问题,一时没了方向。
于是tail了apache的log,一个是正常的web log,一个是error_log。
观察之后,发现了异常现象,apache的error_log一直输出错误信息如下:

[Thu May 24 23:11:27 2007] [notice] child pid 23406 exit signal File size limit exceeded (25)
[Thu May 24 23:12:01 2007] [notice] child pid 23544 exit signal File size limit exceeded (25)
[Thu May 24 23:12:47 2007] [notice] child pid 23633 exit signal File size limit exceeded (25)
[Thu May 24 23:12:53 2007] [notice] child pid 22799 exit signal File size limit exceeded (25)

说有文件大小超过了限制。
google了一下,说是超过了apache 2G的文件限制,试用find命令在系统里面查找超大的文件

find / -size +1000000k

查找到2个文件,一个是

/xxx/xxx/page_parse_time.log
/xxx/yyy/support-popbytes_log

第一个文件page_parse_time.log的大小在2G左右,压缩备份后,

> /xxx/xxx/page_parse_time.log

,问题解决。
page_parse_time.log的文件内容是程序记录sql query的log以及执行时间的log,每个页面请求都会写上一些数据,这么超过2G也不奇怪了。

上次还遇到过一次mysql数据条数过多,的问题
报错信息如下:

LOGSQL Insert Failed: insert into adodb_logsql (created,sql0,sql1,params,tracer,timer) values( NOW(),?,?,?,?,?) The table 'adodb_logsql' is full

经查

mysql> select count(*) from adodb_logsql ;
 +----------+
|
count(*) |
 +----------+
|
33127244 |
+----------+

3千万,,,可能是有点大了,最后truncate了这个表,问题解决
可是最后查mysql的文档,关于Scalability and Limits部分没有说mysql最多可以存多少条记录,估计跟表的类型也相关。原文说的是
Handles large databases. We use MySQL Server with databases that contain 50 million records. We also know of users who use MySQL Server with 60,000 tables and about 5,000,000,000 rows.
只是不知道它说的50 million是一个database里面的所有记录还是所有表的记录加起来。后边的应该是所有60,000个表加起来的数据量。
————————
结论,必要的日志是需要的,但是要控制大小,有循环机制,或者有监控机制,切记,切记。

Popularity: 35%