批量命名总结:
1、删除所有的 .bak 后缀:
rename 's/\.bak$//' *.bak
2、把 .jpe 文件后缀修改为 .jpg:
rename 's/\.jpe$/\.jpg/' *.jpe
3、把所有文件的文件名改为小写:
rename 'y/A-Z/a-z/' *
4、将 abcd.jpg 重命名为 abcd_efg.jpg:
for var in *.jpg; do mv "$var" "${var%.jpg}_efg.jpg"; done
5、将 abcd_efg.jpg 重命名为 abcd_lmn.jpg:
for var in *.jpg; do mv "$var" "${var%_efg.jpg}_lmn.jpg"; done
6、把文件名中所有小写字母改为大写字母:
for var in `ls`; do mv -f "$var" `echo "$var" |tr a-z A-Z`; done
7、把格式 *_?.jpg 的文件改为 *_0?.jpg:
for var in `ls *_?.jpg`; do mv "$var" `echo "$var" |awk -F '_' '{print $1 "_0" $2}'`; done
8、把文件名的前三个字母变为 vzomik:
for var in `ls`; do mv -f "$var" `echo "$var" |sed 's/^.../vzomik/'`; done
9、把文件名的后四个字母变为 vzomik:
for var in `ls`; do mv -f "$var" `echo "$var" |sed 's/....$/vzomik/'`; done
for循环总结:
1、 for((i=1;i<=10;i++));do echo $(expr $i \* 4);done
2、在shell中常用的是 for i in $(seq 10)
3、for i in `ls`
4、for i in ${arr[@]}
5、for i in $* ; do
6、for File in /proc/sys/net/ipv4/conf/*/accept_redirects; do
7、for i in f1 f2 f3 ;do
8、for i in *.txt
9、for i in $(ls *.txt)
for in语句与` `和$( )合用,利用` `或$( )的将多行合为一行的缺陷,实际是合为一个字符串数组
============ -_- ==============for num in $(seq 1 100)
10、LIST="rootfs usr data data2"
for d in $LIST; do
用for in语句自动对字符串按空格遍历的特性,对多个目录遍历
11、for i in {1..10}
12、for i in stringchar {1..10}
13、awk 'BEGIN{for(i=1; i<=10; i++) print i}'
注意:AWK中的for循环写法和C语言一样的
作者归档:SK
nginx对静态资源的优化设置
通过对一些静态资源简单的设置,例如设置静态资源的过期时间、以及压缩,可以减少网站的加载时间,同时也能减少服务器的带宽。
在nginx下对静态的过期时间设置为:
location ~* \.(ico|gif|bmp|jpg|jpeg|png|swf|js|css) {
root /var/www/netingcn.com;
expires 7d;
}
上述配置能对图片、flash、js、css文件设置了过期时间为7天,当用户在7天内再次访问网站时,大部分情况下都是直接使用本地的缓存,减少网络传输,从而加快了页面加载速度。
压缩的配置如下:
gzip on;
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_types text/plain application/x-javascript text/css;
对文本、js和css文件进行压缩,一般情况下,压缩后的大小是原始大小的25%,甚至更小。
mysql一些工具的说明
mysql一些工具的说明
1: mysqlauditamin
作用:主要用来监察审计日志,但mysql 服务器必须安装 或启用 Audit plugin ,不然这个命令使用不了
语法:mysqlauditadmin –server=username:passwd@hostname:port –show-options
2:mysqlauditgrep
作用:看字面意思应该是查找审计日志的你想要的内容,和linux 的grep 用途相似
语法:mysqlauditgrep [options] audit_log_file ,具体可以通过 mysqlauditgrep –help 查看
3:mysqldncompare
作用:可以用来比对2个数据库之间的差别,生产报告
语法:mysqldbcompare –server1=user:passwd@host1:port –server2=user:passwd@host2:port db1:db2
例如:
C:\Program Files\MySQL\MySQL Workbench 5.2 CE\utilities>mysqldbcompare.exe –server1=root:sbcenter@172.72.15.41 –server2=root:sbcenter@172.72.15.40 gjj:gjj
-a –changes-for=server2 –show-reverse -f tab
# server1 on 172.72.15.41: … connected.
# server2 on 172.72.15.40: … connected.
# Checking databases gjj on server1 and gjj on server2
#
# WARNING: Objects in server1.gjj but not in server2.gjj:
# TABLE: test1
#
# Defn Row Data
# Type Object Name Diff Count Check
# ————————————————————————-
# TABLE gjj_table pass pass SKIP
#
No primary key found.
# TABLE gjj_table1 pass pass SKIP
#
No primary key found.
# TABLE gjj_table2 pass pass SKIP
#
No primary key found.
# TABLE test pass FAIL SKIP
#
# Row counts are not the same among gjj.test and gjj.test.
#
No primary key found.
# Database consistency check failed.
#
# …done
C:\Program Files\MySQL\MySQL Workbench 5.2 CE\utilities>
这里有test 表中的行数不一致,还有server2中没定义test1 表!!
4:mysqlcopy
作用:在不同的mysql服务器之间复制数据库,在同服务器内复制数据库
语法:mysqldbcopy.exe –source=user:pass@host:port:socket –destination=user:pass@host:port:socket orig_db:new_db
例如:
C:\Program Files\MySQL\MySQL Workbench 5.2 CE\utilities>mysqldbcopy.exe –source=root:sbcenter@172.72.15.41 –destinatio
n=root:sbcenter@172.72.15.40 test_new:test_new_des
# Source on 172.72.15.41: … connected.
# Destination on 172.72.15.40: … connected.
# WARNING: A partial copy from a server that has GTIDs enabled will by default include the GTIDs of all transactions, ev
en those that changed suppressed parts of the database. If you don’t want to generate the GTID statement, use the –skip
-gtid option. To export all databases, use the –all option and do not specify a list of databases.
ERROR: The copy operation contains GTID statements that require the global gtid_executed system variable on the target t
o be empty (no value). The gtid_executed value must be reset by issuing a RESET MASTER command on the target prior to at
tempting the copy operation. Once the global gtid_executed value is cleared, you may retry the copy.
C:\Program Files\MySQL\MySQL Workbench 5.2 CE\utilities>mysqldbcopy.exe –source=root:sbcenter@172.72.15.41 –destinatio
n=root:sbcenter@172.72.15.40 test_new:test_new_des
# Source on 172.72.15.41: … connected.
# Destination on 172.72.15.40: … connected.
# WARNING: A partial copy from a server that has GTIDs enabled will by default include the GTIDs of all transactions, ev
en those that changed suppressed parts of the database. If you don’t want to generate the GTID statement, use the –skip
-gtid option. To export all databases, use the –all option and do not specify a list of databases.
# GTID operation: SET @MYSQLUTILS_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
# GTID operation: SET @@SESSION.SQL_LOG_BIN = 0;
# GTID operation: SET @@GLOBAL.GTID_PURGED = ’42077619-65AC-11E2-9484-000C290429AE:1-8,
E2F3ECB6-613B-11E2-B792-000C29E30F3D:1-135512′;
# Copying database test_new renamed as test_new_des
# Copying TABLE test_new.test1
# Copying data for TABLE test_new.test1
# GTID operation: SET @@SESSION.SQL_LOG_BIN = @MYSQLUTILS_TEMP_LOG_BIN;
#…done.
C:\Program Files\MySQL\MySQL Workbench 5.2 CE\utilities>
注意:当一开始执行mysqldbcopy的时候,需要在目标库上reset master 清空gtid,方可用此命令
5:mysqldbexport
作用:从数据库中导出元数据和数据,导出的格式可以是:sql,, CSV, TAB, Grid, Vertical
语法:mysqldbexport.exe –server=user:pass@host:port:socket db1, db2, db3
例如:
C:\Program Files\MySQL\MySQL Workbench 5.2 CE\utilities>mysqldbexport.exe –server=root:sbcenter@172.72.15.41 -e both test_new > c:\export.ext
其中 -e both 选项是导出数据和元数据
6:mysqldbimport
作用:和mysqldbexport 相反,把元数据和数据导入到数据库中
语法:mysqldbimport.exe –server=user:pass@host:port:socket db1.csv db2.sql db3.grid
例如:
C:\Program Files\MySQL\MySQL Workbench 5.2 CE\utilities>mysqldbimport.exe –server=root:sbcenter@172.72.15.40 -i both c:\export.txt
7:mysqldiff
作用:比较对象的定义,并输出报告,感觉是mysqldbcompare 的细分版
语法:mysqldiff.exe –server1=user:pass@host:port:socket –server2=user:pass@host:port:socket db1.object1:db2.object1 db3:db4
8:mysqldiskusage
作用:查看数据磁盘的使用情况
语法: mysqldiskusage.exe –server=user:pass@host:port:socket db1 –all
例如:
C:\Program Files\MySQL\MySQL Workbench 5.2 CE\utilities>mysqldiskusage.exe –server=root:sbcenter@172.72.15.41 gjj -all
# Source on 172.72.15.41: … connected.
NOTICE: Your user account does not have read access to the datadir. Data sizes will be calculated and actual file sizes
may be omitted. Some features may be unavailable.
# Database totals:
+———-+————-+
| db_name | total |
+———-+————-+
| gjj | 11,616,256 |
+———-+————-+
Total database disk usage = 11,616,256 bytes or 11.00 MB
# Log information.
# The general_log is turned off on the server.
# The slow_query_log is turned off on the server.
# log_error information is not accessible. Check your permissions.
# Binlog information not accessible. Check your permissions.
# Binlog information not accessible. Check your permissions.
# MyIsAM data file information is not accessible. Check your permissions.
#…done.
intel千兆网卡e1000e在centos6.3系统中断bug
一个客户的centos6.3 64bit网站服务器最近频繁断网。进入系统后我们查看系统日志发现如下错误提示:
Feb 24 14:53:51 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Reset adapter
Feb 24 14:54:02 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Error reading PHY register
Feb 24 14:54:02 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Error reading PHY register
Feb 24 14:54:02 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Error reading PHY register
Feb 24 14:54:02 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Error reading PHY register
Feb 24 14:54:02 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Error reading PHY register
Feb 24 14:54:02 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Error reading PHY register
Feb 24 14:54:02 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Error reading PHY register
Feb 24 14:54:02 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Error reading PHY register
Feb 24 14:54:17 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Error reading PHY register
Feb 24 14:54:17 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Error reading PHY register
Feb 24 14:54:17 sklinux.com kernel: e1000e 0000:06:00.0: eth0: Error reading PHY register
根据经验这个网卡驱动在centos6.x 64上的一个bug。
我们升级了e1000e的网卡驱动后故障消失。
最新驱动在这里:
http://sourceforge.net/projects/e1000/files/e1000e%20stable/
根据口味下载相应版本,然后编译。
大致过程是
wget http://xxx.tgz
tar xvzf xx.tgz
cd src && make && make install
rmmod e1000e && modprobe e1000e
即可!
升级后的版本:
# ethtool -i eth0
driver: e1000e
version: 1.9.5-k
firmware-version: 1.8-0
bus-info: 0000:06:00.0
# ethtool -i eth0
driver: e1000e
version: 2.0.0.1-NAPI
firmware-version: 1.8-0
bus-info: 0000:06:00.0
希望遇见centos6.x 或者cents5.x频繁断网的同学能借鉴。
祝大家元宵节快乐!!!
MySQL的limit查询优化
同样是取10条数据
select * from user limit 10000,10
select * from user limit 0,10
就不是一个数量级别的。
文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。
offset大的时候
select * from user limit 10000,10
多次运行,时间保持在0.0187左右
Select * From user Where vid >=(Select vid From user Order By vid limit 10000,1 ) limit 10
多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。
以后要注意改正自己的limit语句,优化一下MySQL了
Citrix XenDesktop桌面虚拟化
XenDesktop介绍
Citrix XenDesktop是一款Citrix公司一款桌面虚拟化的产品。Citrix是一家虚拟化服务的提供商,是Vmware的一个主要竞争对手。该公司提供了一整套的虚拟化解决方案,从底层的Xen server(相当于Vmware 的ESX Server)服务器虚拟化到XenDesktop桌面虚拟化(相当于Vmware的VDI)再到XenAPP应用程序的虚拟化(相当于微软的SoftGrid)。为企业提供了一整套的虚拟化解决方案。
简单的说XenDesktop就是在服务器端构建一个VDI(Virtual desktop Infrastructure)虚拟桌面架构,客户端可以随时随地通过网络来访问存在在服务器上的桌面系统。就像本地使用物理机一样。
这样做有几个好处:
1、可以降低企业环境中桌面维护成本,因为只要维护好服务器上的桌面镜像就可以了,不必在跑到物理机处做维护。
2、可以快速高效的分发新的桌面系统给员工。
3、员工不受物理位置的限制,随时可以链接到自己的桌面环境。
二、Citrix XenDesktop –桌面虚拟化


三、Citrix XenDesktop工作原理

1、用户请求获得桌面
2、用户通过DDC进行身份验证,DDC会查找最佳的桌面准备交付至用户
3、如果桌面处于关机、暂停状态,DDC会将此桌面进行”启动“
4、如果此桌面是vDISK桌面,DDC会以PEX-boot方式启动(前提为PVS已配置好vDISK镜像)
5、桌面启动后,桌面要向DDC进行注册。
6、注册成功后,用户即可与桌面进行ICA连接。
7、连接后用户将从DDC上获取相应的许可证及策略。
8、如果许可证可用,此时用户可以被登录到桌面。
9、基于用户绑定的策略,加载个人配置文件及可以访问的XenAPP上的应用程序
四、XenDesktop版本比较
![]() |
2013!
php53以后版本重启fpm的方法
php5.3以后源码中已经内嵌了 php-fpm,不用象以前的php版本一样专门打补丁了,只需要在configure的时候添加编译参数即可。
关于php-fpm的编译参数有 –enable-fpm –with-fpm-user=www –with-fpm-group=www –with-libevent-dir=libevent位置。
但是,php5.3以后的版本,下的php-fpm不再支持php-fpm以前具有的xx/sbin/php-fpm(start|stop|reload)等命令,需要使用信号控制:
master进程可以理解以下信号
INT, TERM 立刻终止
QUIT 平滑终止
USR1 重新打开日志文件
USR2 平滑重载所有worker进程并重新载入配置和二进制模块
示例:
php-fpm 关闭:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
php-fpm 重启:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
查看php-fpm进程数:
ps aux | grep -c php-fpm
或者这样:
ps axu|grep master|grep php|awk ‘{print $2}’|xargs kill -USR2
php5.4.11中原生的mysql支持
问:Mysqlnd是什么?
答:Mysqlnd,全称是 MySQL Native Driver,MySQL原生驱动,简单说它是一个PHP官方的MySQL数据库驱动。
问:搞这个库干什么?
答:我估计最重要的是版权问题,这个库是自己人码代码的,用的PHP License,所以不会用到原来的libmysql之类的,避免版权纠纷。大家都知道,PHP4中MySQL函数是作为默认支持的,最明显的在Windows下安装,是不需要有个libmysql.dll,后来PHP5就一直要这个dll,这个dll应该是MySQL官方提供的。PHP不爽,自己写个算了,嗯。因此有了Mysqlnd。
问:它和mysql、mysqli有啥区别?
答:这两个函数库默认调用的是MySQL客户端库(By default the MySQL database extensions are configured to use MySQL Client Library直译)的,这个时候Linux上是需要安装MySQL客户端(MySQL客户端是操作工具,MySQL客户端库是编译库文件比如*.h),但是用Mysqlnd好像不用了,只需要直接with绑定一下mysqlnd即可:
–with-mysql=mysqlnd \
–with-mysqli=mysqlnd \
–with-pdo-mysql=mysqlnd \
问:我还能不能使用mysql_*、mysqli_*函数?
答:看到以上编译PHP的选项,就知道mysqlnd和mysql、mysqli函数库的关系了。Mysqlnd是更底层的驱动支持。设置了使用Mysqlnd后,这些函数库就会使用Mysqlnd来调用MySQL的API了。简单说,mysql_*、mysqli_*照用不误啦,和这两组函数库没啥太大影响。只不过是底层的调用被换掉而已。虚惊一场!
问:我没看出有啥好处?
答:好处就是自己写的代码,爽,独占!另外就是不需要用MySQL官方提供的Client Library了,原生支持嘛,安装PHP的时候不需要再折腾MySQL了(否则configure的时候是要指定MySQL Client Library的path的。–with-mysql[=DIR])。另外估计就是底层的,性能上的改善。
PostgrepSQL一些常用操作
$ ./createuser -P -d -a -e admin
Enter password for new role:
Enter it again:
CREATE ROLE admin PASSWORD ‘md5adac7a79de00846615c9e82e44271065′ SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
$ ./psql
psql (9.2.1, server 8.2.17)
WARNING: psql version 9.2, server version 8.2.
Some psql features might not work.
Type “help” for help.
pgsql=# \du
List of roles
Role name | Attributes | Member of
———–+———————————–+———–
admin | Superuser, Create role, Create DB |
pgsql | Superuser, Create role, Create DB |
pgsql=# select * from pg_roles;
用户管理:
添加用户:
命令:createuser [-a] [-A] [-d] [-D] [-e] [-P] [-h 主机名] [-p port] 用户名
参数说明:
[-a]:允许创建其他用户,相当于创建一个超级用户;
[-A]:不允许此用户创建其他用户;
[-d]:允许此用户创建数据库;
[-D]:不允许此用户创建数据库;
[-e]:将执行过程显示到Shell上;
[-P]:创建用户时,同时设置密码;
[-h 主机名]:为某个主机上的Postgres创建用户;
[-p port]:与-h参数一同使用,指定主机的端口。
事实上,createuser只是对CREATE USER的封装。
A.不带参数的创建用户
createuser testuser
Shall the new user be allowed to create databases? (y/n) n ——–是否可以创建数据库:否
Shall the new user be allowed to create more new users? (y/n) n ———是否可以创建新用户:否
CREATE USER
注:不带数创建用户时,Postgres会询问此用户的权限,上面的例子创建了一个普通用户; 这等于CREATE USER testuser NOCREATEDB NOCREATEUSER;
B.为指定的主机和端口上创建用户
createuser -h 192.168.1.5 -p 5000 -D -A -e testuser
CREATE USER
注:这个命令为主机192.168.1.5的5000端口创建用户testuser, 此用户不可以创建数据库和其他用户。
C.创建超级用户
createuser -P -d -a -e testuser
Enter password for new user: testuser
Enter it again: testuser
CREATE USER
注:这个命令在本地创建一个超级用户(-a),可以创建数据库(-d), 同时要求设置密码。 这等于CREATE USER testuser PASSWORD ‘testuser’ CREATEDB CREATEUSER;
删除用户:
命令:dropuser [-i] [-h] [-p] [-e] 用户名
参数说明:
[ -i]:删除用户前,要求确认;
[-h 主机名]:删除某个主机上的Postgres用户;
[-p port]:与-h参数一同使用,指定主机的端口;
[-e]:将执行过程显示到Shell上。
事实上,dropuser只是对DROP USER的封装。
A.删除本地的Postgres用户
dropuser testuser
DROP USER
B.删除远程Postgres服务器上的用户
dropuser -h192.168.1.5 -p 5000 -i -e testuser
User “testuser” and any owned databases will be permanently deleted.
Are you sure? (y/n) y
DROP USER
注:此命令删除主机192.168.1.5(-h)的5000端口(-p)的用户testuser,并且需要确认(-i); 这等于DROP USER “testuser”;
创建删除数据库:
A.创建数据库
创建我的第一个数据库sk
postgres是支持SQL标准最高的关系型数据库管理系统,当然,它支持CREATE DATABASE命令创建数据库,在此基础上,还对此命令做了扩展,
增加了许多属性设置。
比如owner、template、ecoding、tablespace等。
那么,利用CREATE DATABASE创建sk数据库语句如下:
CREATE DATABASE sk ENCODING ‘LATIN1′ TEMPLATE template0 OWNER sk TABLESPACE skspace;
另外,postgres还提供的自己的方言来创建数据库createdb,同样支持多个属性设置。
比如–tablespace、–encoding、–owner、–template等。
那么,利用createdb创建sk数据库语句如下:
createdb sk –encoding LATIN1 –template template0 –owner sk –tablespace skspace;
事实上,createdb只是给create database命令做的一个外壳,目的是提高创建语句的便利性。
但作为我个人,还是喜欢使用CREATE DATABASE 命令来创建数据库。
B.删除数据库
删除我刚才创建的数据库sk:
dropdb sk
DROP DATABASE sk
1. 创建数据库
createdb -h ip -U user dbname. (ip 为目标机,本机可不要-h参数; user是登录数据库的角色)
2. 备份数据库
pg_dump -h ip -U user -E utf-8 dbname > mysql.bak(mysql.bak是备份文件名字)
3. 恢复数据库
psql -h ip -U user -d dbname -f mysql.bak
这里只是基本的参数,详细参数信息可用–help查看。

