2015年3月

shell脚本中的 test 和 [ ] 测试命令

在编写shell脚本中,经常会做一些测试,比如: 文件是否存在、2个整数或字符串是否相等,这时候就会使用test命令或者是[ ],test命令是可以被[]替代,总结一下其用法:

在使用[ ]语法时,注意以下:

在[ ]中 最好以空格分割
在[ ]中 最好以双引号括起来、
在[ ]中 最好都以单或双引号括起来

文件判断相关

关于某个文件名的“文件类型”判断,如test -e filename 表示存在否

-e该文件名是否存在(常用)
-f该文件名存在且为文件(file)
-d该文件名存在且为一个目录
-b该文件名存在且为一个block device设备
-c该文件名且为一个character device设备
-S该文件名存在且为一个socket文件
-p该文件名存在且为一个FIFO(pipe)文件
-L该文件名存在且为一个链接文件
-e该文件名是否存在(常用)

- 阅读剩余部分 -

shell大括号参数扩展

假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt

字符串截取按分隔符截取

* ${file#*/}截取第一个/右边的字符串 dir1/dir2/dir3/my.file.txt
* ${file##*/}截取最后一个/右边的字符串 my.file.txt
* ${file%/*}截取最后一个/左边的字符串 /dir1/dir2/dir3
* ${file%%/*}截取第一个/左边的字符串 (空值)

总结

* #语法为 # * separator 截取separator右边的字符串
* %语法为 % separator *截取separator左边的字符串
* 一个#或%表示贪婪截取
* 两个#或%标示非贪婪截取

- 阅读剩余部分 -

nginx获取客户端真实IP地址

假设公司网站架构为 client ---->nginx 负载均衡--->varnish 缓存---->nginx( web)----->tomcat 请问如何从 nginx(web)这一层的访问日志日志中获取以下信息:请求发起的客户端 IP 以及经过的 nginx 负载均衡和 varnish 缓存的服务器 IP,看以下架构图:

564ad1a4-a17d-4a40-8ddb-488184b9e3c3.jpg

在nginx-web服务器安装nginx的时候需要把 --with-http_realip_module 该模块编译进去,该模块是用来从前端服务器发来的头部信息中,获取到客户端的真实IP地址

- 阅读剩余部分 -

FastDFS + Nginx 反向代理缓存 安装与配置

操作系统 CentOS release 6.5 (Final) 64

nginx相关软件

nginx-1.4.7 下载地址: http://nginx.org/en/download.html#
nginx清除缓存模块 ngx_cache_purge-2.1 http://labs.frickle.com/nginx_ngx_cache_purge/
pcre-8.36 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz
zlib库 http://zlib.net/zlib-1.2.8.tar.gz

FastDFS相关软件

FastDFS_v5.04
http://sourceforge.net/projects/fastdfs/files

FastDFS Nginx Module 1.16
http://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/

libfastcommon
https://github.com/happyfish100/libfastcommon.git

拓扑图

2dd42041-2aba-4a82-8a6b-b48dac7c0e86.jpg

- 阅读剩余部分 -

Perl来获取Linux文件的3个时间

利用Perl来获取Linux文件的3个时间


#!/usr/bin/perl

($atime,$mtime,$ctime) = &getFileAMCTime($_); 传进来一个文件名
print "Atime:$atime Mtime:$mtime Ctime:$ctime\n";

#获取文件的atime,mtime,ctime
sub getFileAMCTime {
     $filename = shift @_;
     my ($atime,$mtime ,$ctime) = (stat ($filename))[8,9,10];
     $atime = &getTime($atime);
     $mtime = &getTime($mtime);
     $ctime = &getTime($ctime);

     #将日期时间格式转换为比较友好的格式
     sub getTime {
          my $time = shift @_;
          my($sec,$min,$hour,$day,$mon,$year) = (localtime $time)[0..5];
          $time = sprintf "%4d-%02d-%02d %2d:%02d:%02d",$year + 1900,$mon + 1,$day,$hour,$min,$sec;
          return $time;
     }
     return $atime,$mtime,$ctime;
}