Archive for the ‘linux’ Category

rsync对隐藏文件和指定文件的排除处理

星期一, 二月 6th, 2012

在进行异地镜像时,rsync对隐藏文件的处理往往会出现一些问题,隐藏文件一般是系统文件,所以会牵扯到linux权限问题,从而导致rsync同步出错。
解决这个问题的办法是,在客户端通过exclude参数对指定文件或文件夹进行排除。

例如要排除备份目录下的以.开头的文件,可以用这样的命令:

rsync -azP --delete bak@www.baidu.com::htdocs --exclude=.[a-z0-9]* /opt/bakroot/rsyncwww --password-file=/etc/rsync.passwd

排除备份目录下的abc文件夹:

rsync -azP --delete bak@www.baidu.com::htdocs --exclude=abc /opt/bakroot/rsyncwww --password-file=/etc/rsync.passwd

也可以同时排除多个文件夹:

rsync -azP --delete bak@www.baidu.com::htdocs --exclude=abc --exclude=cba /opt/bakroot/rsyncwww --password-file=/etc/rsync.passwd

也可以用 –exclude-from 来指定用来排除的文件列表:

rsync -azP --delete bak@www.baidu.com::htdocs --exclude-from=exclude.list /opt/bakroot/rsyncwww --password-file=/etc/rsync.passwd

此时的exclude.list文件的内容为:

abc
[0-9]*
abc/.[a-z0-9]*
.
svn

注意两点:
1.以上列表会延伸至子目录。
2.以上单条命令或是文件包含,都支持通配符。

==================================

另外对于软硬链接的文件或目录,在使用rsync命令的时候一定要加上大写L参数,才能对相应目录进行备份。否则只是备份了一个指针,没有内容。命令如是:

rsync -azPL --delete bak@www.baidu.com::htdocs /opt/bakroot/rsyncwww --password-file=/etc/rsync.passwd

linux下内存占用统计的正确方法

星期三, 十一月 16th, 2011

我们在linux下查看内存使用情况的时候往往会用:free -m 命令。得到的结果如下:

显示内存占用为3823。我们根据经验会有这样的结论,系统启动后,随着时间的增加,快则几分钟,慢则几个小时,linux的内存占用会接近90%。如果真是这样,那是很恐怖的,但事实并非如此。真正计算linux内存占用的方法是:used – buffers – cached。如上图,内存占用实际为:3823 – 339 – 2951 = 532M。原因是linux下系统缓存的使用会内存优先,当应用程序需要内存时,会自动扔掉缓存给应用程序。

为了方便可以写个bash程序命名mem,内容如下:

#!/bin/sh
echo Mem Used: $(free -m | grep 'Mem:' | awk '{print $3-$6-$7}')M

然后增加可执行权限,mv到/usr/bin/里面。这样以后要想查看内存使用情况,直接在shell中执行mem命令即可。

node.js与nginx并发对比

星期六, 七月 30th, 2011

其实没什么要写,主要是对node.js这个东东有点兴趣,从原理上讲,异步的并发应该会比nginx的工人模式要好很多,于是有兴趣做了一下并发测试。
nginx安装后default配置;node.js安装后仅用httpmoudle启用socket监听80返回字符串。
分别用webench进行100/500/600/900线程进行压力测试。测试数据未做详细纪录,略去。
测试结果:
并发能力:node.js基本与nginx持平
cpu占用:node.js高于nginx
mem占用:node.js略高于nginx
此结果不能表明太多问题,相信如果有服务端业务逻辑加入后,node的优势可能会明显。
个人总结:
node适用小型/单一的任务型应用,具备高效率的特性,例如计数器/访问足迹/comment等高并发ajax操作,结合缓存/nosql和队列是个不错的选择;但做完整项目可能略显复杂,容易导致控制流倒置。

bash tips

星期三, 七月 27th, 2011

linux bash下忽略大小写,输入一个字母按上下方向键提示以字母开始的历史命令,这个相当给力。同时适用mac os。实在是程序员/码农居家旅行必备⋯⋯

vim ~/.inputrc

输入:

set match-hidden-files off
set show-all-if-ambiguous on
set completion-ignore-case on
"ep": history-search-backward
"e[A": history-search-backward
"e[B": history-search-forward

nginx目录访问密码保护

星期四, 五月 26th, 2011

有时候需求这样:某个域名,或域名下的某个目录,需要访问时输入指定的用户名和密码。nginx可以做到,而且一点不比apache差。

77   server
78   {
79     listen 80;
80     server_name  www.test.com;
81     index index.html index.htm index.php;
82     root  /opt/htdocs;
83
84     location / {
85         auth_basic "welcome to www.abcd.com:";
86         auth_basic_user_file htpasswd;
87         gzip off;
88     }
89   }

注意gzip需要关闭,因为会把动态文件解析成静态。
然后需要建立密码文件在conf目录下,名字叫htpasswd,命令如下:

htpasswd -bdc /opt/nginx/conf/htpasswd abcd 123456

这里的htpasswd为linux下建立pwd的工具,很多参数。上面命令建立一个abcd的用户,密码为123456。
重启nginx,访问该域名即弹出http验证框,错误则提示401。

linux中出现”there are stopped jobs”的解决方案

星期二, 五月 24th, 2011

往往是因为有没有正常运行的任务列表导致终端无法退出。解决方案如下:

[root@DB ~]# exit
exit
There are stopped jobs.
[root@DB ~]# jobs
[1]Stopped                 python  (wd: /usr/bin)
[root@DB ~]# kill %1
[root@DB ~]# jobs
[1]Terminated              python  (wd: /usr/bin)
[root@DB ~]# exit

linux下实现自动增量备份

星期一, 四月 25th, 2011

需求:一台服务器上内容,每天定时备份到远程容灾服务器。为了节省空间和提高传输效率,使用增量备份。
扩展需求:两台服务器实时单向、双向同步某目录下的所有数据。

环境:cent os 5(5.4 5.5 5.6测试通过),系统自带rsync。
1.安装rsync(已经安装可以忽略)

wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
tar xvfz rsync-3.0.7.tar.gz
cd rsync-3.0.7
./
configure --prefix=/usr/local/rsync
make && make install

2.配置rsync,创建一个rsyncd.conf文件。

vim /etc/rsyncd.conf

输入以下内容:

uid=nobody
gid=nobody
max connections=36000
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
[htdocs]
comment= backup htdocs
path=/opt/htdocs/view
ignore errors
read only = yes
host allow = *
host deny=*
secrets file=/etc/rsyncd.passwd
auth users=bakccad

修改:

vim /etc/rsyncd.passwd

输入:

username:13577531

执行:

chmod 600 /etc/rsyncd.conf
chmod 600 /etc/rsyncd.passwd

3.启动rsync以服务器端方式:

/usr/local/rsync/bin/rsync --daemon

客户端:
客户端无需安装,只需编辑密码文件输入密码:

vim /etc/rsyncd.passwd

输入:

13577531

执行:

chmod 600 /etc/rsyncd.passwd

客户端执行以下命令即可完成服务器端到本地的同步:

rsync -azP --delete bakccad@1.2.3.4::htdocs /opt/bakroot/rsyncwww/view --password-file=/etc/rsync.passwd

这里命令中htdocs为服务器端配置的名称。后面路径为保存到的路径。后面是密码文件所在,密码文件只需有密码即可(客户机如果使用user:passwd的形式反而会出现错误)。

vsftpd出现“553 Could not create file”的解决办法

星期四, 三月 31st, 2011

vsftpd出现的553 Could not create file,包括503错误,都是权限问题导致的。
这里就要说到linux蛋疼的selinux,如无必要,最好关闭之:
vim /etc/selinux/config
修改:selinux=disabled
关闭了selinux,vsftpd就正常了。
ps:查看linux32位还是64位:file /bin/ls

更改linux主机名的正确方法

星期四, 三月 31st, 2011

ssh上服务器后,会显示如下:
[root@uh700047 ~]#
类似的编号,很是影响心情,如何才能改掉@后面的内容呢?
答案是:
1. vim /etc/hosts 加入如下:
127.0.0.1 www.abc.com
2.vim /etc/sysconfig/network
尾行(一定要是尾行)加入:
HOSTNAME www

reboot, done.

关于在 cent os + mrtg 的正确安装方法

星期二, 三月 29th, 2011

why mrtg? 显然因为cacti配置麻烦,环境配置繁琐。
安装方法如下:
yum install net-snmp net-snmp-utils mrtg
恩,安装好了。
接着生成配置文件:
==========================================
vim /etc/snmp/snmpd.conf
把第89行前面的注释符号#去掉,变成
view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc

在62行进行修改:将
access notConfigGroup “” any noauth exact systemview none none
改为
access notConfigGroup “” any noauth exact mib2 none none
===============================================
/usr/bin/cfgmaker public@localhost > /etc/mrtg/mrtg.cfg
接着配置:
vim /etc/mrtg/mrtg.cfg
输入以下:

6 HtmlDir: /opt/mrtg
7 ImageDir: /opt/mrtg
8 LogDir: /var/lib/mrtg
9 ThreshDir: /var/lib/mrtg
10 Target[rl]: 2:public@localhost
11 MaxBytes[rl]: 1250000
12
13 Title[rl]: 流量监测系统
14 Xsize[rl]: 600
15 Options[rl]: gauge, nopercent, growright

再配置crontab:
crontab -e
输入:
*/5 * * * * env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg
代表每5分钟收集一次数据显示。
done

以上配置方法在cent os 5.5 64位rhel5.5的64位分别成功。