分类 Linux 下的文章

编译thrift的php扩展

php的版本5.4.2

cd /usr/local/src/thrift-0.8.0/lib/php/src/ext/thrift_protocol/
phpize
./configure
make && make install

在php5.4下面上面的编译会出错,直接修改php_thrift_protocol.cpp文件的95行,将function_entry替换为zend_function_entry,然后重新编译就好了。

* warning 就先不考虑了。

编译安装gcc-4.7.1

cd /usr/local/src/
wget http://ftp.gnu.org/gnu/gcc/gcc-4.7.1/gcc-4.7.1.tar.gz
tar zxf gcc-4.7.1.tar.gz
cd gcc-4.7.1
./contrib/download_prerequisites
./configure --prefix=/usr/local/gcc
make && make install
# 介个编译时间有点长,得慢慢等...

Centos硬盘读写速度测试

老看到網上有在前面加time的,而且還用兩個數字除一下,於是我就覺得蛋疼,你說明明顯示出了結果,爲什麼還要自己再算一邊呢?後來才知道是linux4下是不會有速度結果出來的,於是你知道的,”轉載就轉載了,尼瑪動過腦子沒?還把有結果的貼在文章裏面,自己甩自己嘴巴啊。“

PS:最近喜歡上繁體字了,木有辦法啊!

# 測試寫文件的速度:
sync;dd if=/dev/zero of=/tmp/1GB.file bs=1024 count=1000000
# 測試讀文件的速度:
sync;dd if=/tmp/1GB.file of=/dev/null bs=1024 count=1000000


# 測試10次寫文件的速度(有無執行sync的區別比較大):
for i in {1..10}
do
sync
dd if=/dev/zero of=/tmp/1GB.file bs=1024 count=1000000
done

# 測試10次讀文件的速度(有無執行sync沒多大的區別):
for i in {1..10}
do
sync
dd if=/tmp/1GB.file of=/dev/null bs=1024 count=1000000
done


# 由於dd命令結果是顯示在錯誤輸出的上的,若需要進一步處理數據,則需要將結果重定向:
sync;dd if=/dev/zero of=/tmp/1GB.file bs=1024 count=1000000 2>&1 | grep "copied"
sync;dd if=/tmp/1GB.file of=/dev/null bs=1024 count=1000000 2>&1 | grep "copied"

bash杂记2

不显示终端的输入(stty)

echo "Please enter your password:"
stty -echo
read PASSWORD
stty echo
# 输出刚才输入的内容
echo $PASSWORD

交互式选择(select)

# 江山和美人,你更喜欢那个?
echo "Which do you prefer?"
select result in "beauty" "land"
do
	break
done
echo $result

得到当前脚本的绝对路径

echo $(cd "$(dirname "$0")"; pwd)

CentOS登录信息显示IP

# 备份
cp /etc/issue /etc/issue_standard

创建脚本文件

在脚本文件中写入以下内容。

#!/bin/bash
cat /etc/issue_standard >/etc/issue
/sbin/ifconfig eth0 |grep "inet addr"|sed 's/^.* addr://g' |sed 's/Bcast.*$//g' >>/etc/issue
echo "" >>/etc/issue

增加可执行权限,加入开机启动。

2012-10-08补充

由于只有开机启动的时候写IP信息的话,登录后改过IP,再退出登录的时候就会有问题(显示的还是原来的IP)。

# 网卡启用前执行
/sbin/ifup-pre-local
# 网卡被启用后执行
/etc/sysconfig/network-scripts/ifup-post
# 网卡启用后,最后执行
/sbin/ifup-local
# 网卡被禁用后执行
/etc/sysconfig/network-scripts/ifdown-post

sed之打点计数器

将第二行的dns nameserver注释掉

sed -r '/nameserver/{
     x;
     s/^/./;
     /^\.{1}$/x;
     /^\.{2,}$/{x;s/^/; /};
     }' /etc/resolv.conf

RPM打包spec文件

Summary:   Account6000
Name:      ac6000
Version:   1.0.1
Release:   1
License:   GPL
Group:     System
Source:    account.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
Url:       http://www.inote.cc/
Packager:  WangZhicheng
Prefix:    %{_prefix}
Prefix:    %{_sysconfdir}

%description
Account6000.

%prep
%setup -c
%install
install -d $RPM_BUILD_ROOT
/bin/cp -af * $RPM_BUILD_ROOT

%clean
rm -rf $RPM_BUILD_ROOT
rm -rf $RPM_BUILD_DIR/%{name}-%{version}

%files
%defattr(-,root,root)
/var/www/html/account
/usr/*
/etc/*

install段,是将tar.gz包解压到RPM_BUILD_DIR目录的,而file段拷贝的时候是从RPM_BUILD_ROOT目录拷贝的,所以在install段的时候要将解压到RPM_BUILD_DIR下的文件拷贝到RPM_BUILD_ROOT目录下。

CentOS6安装webkit2png

增加源

/etc/yum.repos.d/CentOS-ATrpms.repo

#ATrpms
[atrpms]
name= CentOS-$releasever - ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/testing
gpgcheck=1
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
enabled=1

shell:

rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms

安装依赖包

yum -y install qt47 qt47-devel qt47-webkit qt47-webkit-devel gcc gcc-c++
yum -y install xauth

安装SIP

cd /usr/local/src
wget http://www.riverbankcomputing.co.uk/static/Downloads/sip4/sip-4.13.1.tar.gz
tar vzxf sip-4.13.1.tar.gz
cd sip-4.13.1
python configure.py
make && make install

安装Imaging

cd /usr/local/src
wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
tar -zxvf Imaging-1.1.7.tar.gz
cd Imaging-1.1.7
python setup.py install

安装PyQt

cd /usr/local/src
wget http://www.riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-x11-gpl-4.9.tar.gz
tar vzxf PyQt-x11-gpl-4.9.tar.gz
cd PyQt-x11-gpl-4.9
python configure.py -q /usr/lib64/qt47/bin/qmake-qt47
make && make install

webkit2png下载和使用

http://github.com/AdamN/python-webkit2png/

./webkit2png.py -x 1024 768 -g 1024 0 http://box.inote.cc -o ibox.png

安装中文字体

yum -y install wqy-zenhei-fonts.noarch

redis安装配置

安装

http://redis.io/download 这儿有,不多说。要注意的一点,redis没有make install;所以安装包直接放在/usr/local/redis目录下就好了。

配置

cd /usr/local/redis
cp redis.conf /etc/redis.conf
cd /usr/local/redis/src
ln -s redis-cli /usr/bin/redis-cli
ln -s redis-server /usr/bin/redis-server

对配置文件进行修改

daemonize yes
logfile /dev/null
# 设置最大内存
maxmemory 

开机启动脚本

#!/bin/bash
source /etc/init.d/functions
BIN=/usr/bin
CONFIG=/etc/redis.conf
PIDFILE=/var/run/redis.pid

[ -r "$SYSCONFIG" ] && source "$SYSCONFIG"

RETVAL=0
prog="redis-server"
desc="Redis Server"

start() {
	if [ -e $PIDFILE ];then
		 echo "$desc already running...."
		 exit 1
	fi
	echo -n $"Starting $desc: "
	daemon $BIN/$prog $CONFIG
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
	return $RETVAL
}

stop() {
	echo -n $"Stop $desc: "
	killproc $prog
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog $PIDFILE
	return $RETVAL
}

restart() {
	stop
	start
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		restart
		;;
	condrestart)
		[ -e /var/lock/subsys/$prog ] && restart
		RETVAL=$?
		;;
	status)
		status $prog
		RETVAL=$?
		;;
	*)
		echo $"Usage: $0 {start|stop|restart|condrestart|status}"
		RETVAL=1
esac
exit $RETVAL

存为redis文件,放到/etc/init.d/redis, chmod +x redis

[同步]mysql双向同步

条件

服务器1(CentOS6.0x32 Mysql5.5.18)
IP: 192.168.1.2
服务器2(CentOS6.0x64 Mysql5.5.18)
IP: 192.168.1.3

修改配置文件

修改 服务器2 上的/etc/my.cnf文件

server-id=2

重启mysql

service mysqld restart

启动

以下都是进入mysql后,执行的语句:

#服务器1 上执行
grant select,replication slave on *.* to 'sync'@'192.168.1.3' identified by 'your password';
flush privileges;
show master status;
#记下File和Position的值 log1

#服务器2 上执行
grant select,replication slave on *.* to 'sync'@'192.168.1.2' identified by 'your password';
flush privileges;
show master status;
#记下File和Position的值 log2

#服务器1 上执行(问号分别替换为刚才log2里面记下的两个值)
change master to master_host='192.168.1.3',master_user='sync', master_password='your password', master_log_file='?', master_log_pos=?;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
slave start;
show slave status;

#服务器2 上执行(问号分别替换为刚才log1里面记下的两个值)
change master to master_host='192.168.1.2',master_user='sync', master_password='your password', master_log_file='?', master_log_pos=?;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
slave start;
show slave status;

于是,同步就搞定了!

nginx负载均衡配置

配置文件

以下代码仅作示例,仅仅是把动态页面均衡到各个server上。

upstream myServer {
    server 127.0.0.1:81; 
    server 127.0.0.2:81 down; 
    server 127.0.0.3:81 weight=1; 
    server 127.0.0.4:81 backup; 
}
server {
  listen 127.0.0.1:80;
  server_name type.so www.type.so;
  access_log /var/log/httpd/domains/type.so.log combined;
  
  location / {
	try_files $uri @backend;
  }
  
  location ~* \.(jpeg|jpg|gif|png|bmp|ico|js|css|swf)$ {
	root /var/www/html/type.so;
        expires 7d;
	try_files $uri @backend;
  }
  location ~ .*\.(htaccess|htpasswd|mdb)?$ {
    deny all;
  }
  
  location @backend {
    internal;
    proxy_pass http://myServer;
    include proxy.inc;
  }
}

svn杂记

chmod +x hooks/pre-commit

svn强制要求填写注释

./hooks/pre-commit

REPOS="$1"
TXN="$2"

SVNLOOK=/usr/bin/svnlook

LOGMSG=`$SVNLOOK log -t $TXN $REPOS | wc -m`
if [ "$LOGMSG" -lt 48 ]
then
	echo "\n至少输入4个汉字" >&2
	exit 1
fi
exit 0

svn自动加版本号

enable-auto-props = yes
[auto-props]
*.php = svn:keywords=Date Author Id Revision HeadURL
*.css = svn:keywords=Date Author Id Revision HeadURL
*.html = svn:keywords=Date Author Id Revision HeadURL
*.js = svn:keywords=Date Author Id Revision HeadURL

svn同步到web目录

svn co file:///var/www/svn/sandbox /var/www/html/
#./hooks/pre-commit
svn up /var/www/html/

bash杂记

带有颜色的echo

设置颜色的格式: \e[背景色;前景色;高亮m\e[0m

\e或\033
背景色:0 透明(使用终端颜色), 40 黑, 41 红, 42 绿, 43 黄, 44 蓝 45 紫, 46 青绿, 47白(灰)
前景色:30 黑 31 红, 32 绿, 33 黄, 34 蓝, 35 紫, 36 青绿, 37 白(灰)
高亮:高亮是1,不高亮是0。(m后面紧跟字符串)

#红色的helloworld
echo -e '\033[0;31;1mhelloworld\033[0m'

screen命令

在SSH断开的情况下,服务器端继续执行程序。

screen -S test
#输入要执行的命令,enter
#Ctrl + a + d保存screen
#查看所有screen
screen -ls
#恢复screen
screen -r test
#退出screen
exit

crontab命令

crontab [-u 用户名] [-elr]
#crontab -e
#分  时  日  月  周    [用户]  command
#每分钟执行一次第一个参数可以写成样 1-59 或者 */1
# .---------------- minute (0 - 59) 
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ... 
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat 
# |  |  |  |  |
# *  *  *  *  *  command to be executed

crontab中的环境变量问题

有时候crontab执行脚本获取不到想要的结果,而直接在ssh里执行的时候是正常的,就是环境变量的问题,在要执行的脚本中加入下面两行。

. /etc/profile
. ~/.bash_profile

计算程序运行时间

time ./test

linux文件压缩解压

.tar
解包: tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
---------------------------------------------
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
---------------------------------------------
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
.tar.bz
解压:tar jxvf FileName.tar.bz
---------------------------------------------
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
---------------------------------------------
.tgz
解压:tar zxvf FileName.tgz
.tar.tgz
解压:tar zxvf FileName.tar.tgz
压缩:tar zcvf FileName.tar.tgz FileName
---------------------------------------------
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName

设置开机启动

vi /etc/rc.d/rc.local

SCP命令

scp -r root@type.so:/var/www/html/ -P 22 /var/www/html/

rpm

# 导出文件
rpm2cpio file.rpm | cpio -div
# 查看rpm包列表内容
rpm -qpl file.rpm

修改时区

cp /usr/share/zoneinfo/Shanghai /etc/localtime
hwclock -w
# crontab重启必须的,不然设定的动作将会按照老的时间来
service crond restart