Category: Linux

  • nginx rewrite规则|静态目录重写

    静态目录重写

    location /static/ {
    root /var/www/application/blog;
    if (-f $request_filename) {
    rewrite ^/static/(.*)$  /static/$1 break;
    }

    判断文件或目录是否存在,不存在返回到首页

    if (!-e $request_filename) {
     #rewrite ^/(.*)$ /blog/index.php last;
     #表示完成rewrite,url不变,而permanent是301重定向,会跳到主页url
     rewrite ^/(.*)$ /blog/index.php permanent;
     }

    禁止直接访问uploads目录

    location ~ ^/blog/wp-content/uploads/ {
            deny all;
            break;
    }

    图片防盗链

    location ~* \.(gif|jpg|jpeg)$ {
    valid_referers none blocked www.jpuyy.com jpuyy.com;
    if ($invalid_referer) {
    rewrite ^/(.*) http://www.jpuyy.com;
    }
    }

    302跳转HTTP/1.1 302 Moved Temporarily

     rewrite ^/$ http://2014.jpuyy.com redirect; 

    301跳转HTTP/1.1 301 Moved Permanently

     rewrite ^/2014/?$ /abc/index.php permanent;

    :)EOT

  • nginx配置文件分布式写法

    前提是通过编译安装的nginx

    首先创建好要使用的目录

    mkdir sites-available sites-enabled

    在nginx.conf里写http{}里加上一句

    include sites-enabled/*;

    先在sites-available里写好要用使用的配置文件,每一个配置文件写一个server{}

    如:

    server {
            listen       80;
            server_name  jpuyy.com;
    
            #charset koi8-r;
            root /var/www/jpuyy/jpuyy.com;
    
            location / {
    
                root /var/www/jpuyy/jpuyy.com;
                index  index.html index.htm index.php;
            }
    
            log_format jpuyy.com.logs '$remote_addr -$remote_user[$time_local]"$request" '
                                    '$status $body_bytes_sent "$http_referer" '
                                    '"$http_user_agent" $http_x_forard_for';
            access_log /usr/local/nginx/logs/jpuyy.com.log jpuyy.com.logs;
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            #error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/jpuyy/jpuyy.com/$fastcgi_script_name;
                include        fastcgi_params;
            }
    
            location /RPC2 {
              include scgi_params;
              scgi_pass localhost:5000;
            }
    
    }

    然后进入sites-enabled

    ln -s ../sites-available/jpuyy.com.conf

    :)EOT

  • SecureCRT的端口转发功能

    SecureCRT的端口转发功能很实用

    会话选项 -> 端口转发 -> 添加

    那么勾选使用socks 4 或 5 动态转发到本地的如图端口

    就可以安安心心的使用ssh了(可替代MyenTunnel)

    好多需要proxy的程序也能用了

    只需输入 127.0.0.1:port 就可以了

    有vps就是好

    :)EOT

  • linux下date命令实例

    date命令在linux很重要,属于基础命令之一,date命令的功能是显示和设置系统日期和时间。

    显示当前日期

    #date

    显示结果后面会跟上如下标准时间,注意换算

    CST:中国标准时间(China Standard Time),为GMT时间+8

    UTC:协调世界时,又称世界标准时间,简称UTC,从英文国际时间/法文协调时间”Universal Time/Temps Cordonné”而来。中国大陆、香港、澳门、台湾、蒙古国、新加坡、马来西亚、菲律宾、澳洲西部的时间与UTC的时差均为+8,也就是UTC+8。

    GMT:格林尼治标准时间(旧译格林威治平均时间或格林威治标准时间;英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。

    date命令的一般格式为: date [选项] 显示时间格式(以+开头,后面接格式,+与%中间没有空格)

    date 选项及其含意:

    -d datestring, –date datestring 显示由datestring描述的日期
    -s datestring, –set datestring 设置datestr 描述的日期
    -u, –universal 显示或设置通用时间时间域
    -R, –rfc-2822 显示当前时区

    date 时间格式参数(注意大小写):

    %H 小时(00..23)
    %I 小时(01..12)
    %k 小时(0..23)
    %M 分(00..59)
    %p 显示出AM或PM
    %r 时间(hh:mm:ss AM或PM),12小时
    %s 从1970年1月1日00:00:00到目前经历的秒数,可以用来算时间差
    %S 秒(00..59)
    %F YYYY-mm-dd格式的完整日期(Full date),同%Y-%m-%d
    %T 时间(24小时制)(hh:mm:ss)
    %X 显示时间的格式(%H:%M:%S)
    %Z 时区 日期域
    %a 星期几的简称( Sun..Sat)
    %A 星期几的全称( Sunday..Saturday)
    %b 月的简称(Jan..Dec)
    %B 月的全称(January..December)
    %c 日期 星期和时间( Mon Nov 8 14:12:46 CST 1999)
    %d 一个月的第几天(01..31)
    %D 日期(mm/dd/yy)
    %h 和%b选项相同
    %j 一年的第几天(001..366)
    %m 月(01..12)
    %w 一个星期的第几天(0代表星期天)
    %W 一年的第几个星期(00..53,星期一为第一天)
    %x 显示日期的格式(mm/dd/yy)
    %y 年的最后两个数字( 1999则是99)
    %Y 年(例如:1970,1996等)

    需要特别说明的是,只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间。

    显示我们中国人比较喜欢的格式

    date +%Y/%m/%d"  "%H:%M:%S
    2012/11/14  08:42:48

    下列环境变量将会影响到 date 命令的执行效果。
    LANG 确定在 LC_ALL 和相应的环境变量(以 LC_ 开头)都不指定语言环境的时候将要使用的缺省语言环境。
    LC_ALL 确定用于覆盖由 LANG 或任何以 LC_ 开头的环境变量设置的任何语言环境类别值的语言环境。
    LC_CTYPE 确定文本数据的字节序列解释为字符时使用的语言环境(例如参数中单对多字节字符)。
    LC_MESSAGES 决定写信息应使用的语言。
    LC_TIME 确定由 date 写入的日期和时间字符串的内容。
    NLSPATH 为处理 LC_MESSAGES 决定消息目录的位置。
    TZ 指定时间和日期使用的时区,除非指定了 -u 选项。如果未设置 TZ 变量且未指定 -u 标志,则使用非指定的系统缺省时区。

    使用示例——设置篇:

    设置当前时间,只有root权限才能设置,其他只能查看。

    设置成20061010,这样会把只有日期的话,时刻会为00:00:00

    #date -s 20061010

    设置具体时刻,不对日期做更改

    #date -s 12:23:23

    设置全部日期和时刻

    #date -s "12:12:23 2006-10-10"

    将时间与internet同步并写入bios请查看:http://jpuyy.com/2011/10/change-time-zone-and-use-ntpdate.html

    使用示例——显示篇:

    用指定的格式显示时间。在man date的-d选项中,说明了显示的是后面描述的时间,并不一定是当前时间。

    -d, –date=STRING
    display time described by STRING, not `now’

    下面几个实例灵活的运用了参数,显示出想要的时间效果。
    显示明天

    # date -d next-day +%Y%m%d
     或:# date -d tomorrow +%Y%m%d

    显示昨天

     # date -d last-day +%Y%m%d
     或:# date -d yesterday +%Y%m%d
     或:# date -d "1 days ago" +%Y%m%d

    显示上个月:

     # date -d last-month +%Y%m

    显示下个月:

     # date -d next-month +%Y%m

    显示明年:

     # date -d next-year +%Y

    可以看出要显示某天/周/月/年之前或之后,可直接用类似于下面的命令;x用数字代替,如果需要几年前的直接写正数,如果要几年后的日期直接写负数即可;

    date -d "x days ago" +%Y%m%d
    date -d "x weeks ago" +%Y%m%d
    date -d "x months ago" +%Y%m%d
    date -d "x years ago" +%Y%m%d

    拿到 timestamp 转化成 datetime

    date -d @1457431246

    datetime 转换为 timestamp

    date -d '2017-08-16' "+%s"

    常用

    date +%F_%H-%M-%S
    2021-09-13_22-58-56
    date +%F_%T
    2022-03-26_11:53:20
    
  • 用dropbox备份vps上的数据

    详细使用方法:
    http://wiki.dropbox.com/TipsAndTricks/TextBasedLinuxInstall#Runningonsystemstartup

    1.安装

    登陆SSH后,

    wget -O dropbox.tar.gz http://www.dropbox.com/download?plat=lnx.x86

    这个是32位的,64位就这样

    wget -O dropbox.tar.gz http://www.dropbox.com/download?plat=lnx.x86_64

    解压

    tar xzvf dropbox.tar.gz

    2.运行

     ~/.dropbox-dist/dropboxd &

    注:首次运行,会频繁出现一串URL地址,说你没有绑定,这时不要退出,复制下url,到浏览器中打开输入用户名密码后绑定,绑定完成后,SSH界面上会出现欢迎登陆的文字描述

    3.备份

    将备份的文件夹,映射到Dropbox文件夹从而自动同步备份。

    cd ~/Dropbox
    ln -s /home/wwwroot

    如上示例中,将wwwroot文件夹的映射到Dropbox,从而备份wwwroot文件夹里所有内容。

    4.结束运行

    killall dropbox

    5.定时同步备份

    dropbox运行所需要的内存很大,所以并不适合小内存的VPS一直开着,那么我们也可以建立一个计划任务来让dropbox定时运行,再定时关闭。

    建立dropbox.sh脚本,内容如下

    #!/bin/sh
    start() {
    echo starting dropbox
    /root/.dropbox-dist/dropboxd &
    }
    stop() {
    echo stoping dropbox
    pkill dropbox
    }
    case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart)
    stop
    start
    ;;
    esac

    脚本下载:http://www.ezencart.com/wp-content/demo/dropbox.sh

    修改权限

    chmod 755 /root/dropbox.sh

    建立计划任务:

    crontab -e

    添加如下内容

      0 4 * * * sh /root/dropbox.sh restart
     0 6 * * * sh /root/dropbox.sh stop

    这样dropbox就会自动在每天4点运行,6点关闭。

    6.删除dropbox方法

     rm -rf .dropbox .dropbox-dist  Dropbox dropbox.tar.gz dbmakefakelib.py dbreadconfig.py

    转载:http://www.laogeng.org/archives/1204.html

  • svn基本命令 svn help

    查看了svn help对基本命令进行详述

    root@debian:~# svn help

    用法: svn <subcommand> [options] [args]Subversion 命令行客户端,版本 1.6.17。

    使用“svn help <subcommand>” 显示子命令的帮助信息。

    使用“svn –version”查看程序的版本号和版本库访问模块,或者使用“svn –version –quiet”只查看程序的版本号。

    大多数的子命令可接受文件或目录参数,对目录进行递归处理。

    如果没有指定参数,默认对当前目录(包含当前目录)递归处理。

    可用的子命令(记得先切到工作副本):

    svn add

    svn blame (praise, annotate, ann)

    cat  查看某文件过去一个版本的内容,如

    svn cat --r 2 meizi.txt

    svn changelist (cl)

    svn checkout (co) 检出命令

    svn co file:///opt/svnroot/dev-a/

    检出具体版本

    svn co -r 250 file:///opt/svnroot/dev-a/

    svn cleanup

    svn commit (ci)

    svn copy (cp)

    svn delete (del, remove, rm)   删除某个文件

    svn del filename

    svn diff (di)

    svn export

    svn help (?, h)

    svn import

    svn info查看当前副本的版本信息

    # svn info
    路径: .
    URL: https://abc.com/svn/dev/trunk
    版本库根: https://abc.com:808/svn/dev
    版本库 UUID: db3333b9-a35c-4fsc-a3bb-9c2ee82ebb56
    版本: 235
    节点种类: 目录
    调度: 正常
    最后修改的作者: jpuyy
    最后修改的版本: 235
    最后修改的时间: 2012-09-29 13:19:18 +0800 (一, 2012-09-29)

    svn list (ls) 可以在不下载文件的时候查看目录,查看远程目录的时候也很好用,如:

    svn list svn://jpuyy.com:3690/projectA

    svn lock

    svn log
    用法:svn log filename 某个文件的版本信息,如果不加

    svn merge

    svn mergeinfo

    svn mkdir

    svn mkdir file:///var/svnroot/nginxsub/testdir -m "试试创建目录"

    move (mv, rename, ren)

    svn propdel (pdel, pd)

    svn propedit (pedit, pe)

    svn propget (pget, pg)

    svn proplist (plist, pl)

    svn propset (pset, ps)

    svn resolve

    svn resolved

    svn revert

    status (stat, st)
    用法:svn status
    如果文件状态为? 则用命令:svn add filename //filename为具体的文件名
    如果文件状态为M 表示这个文件被修改了

    svn switch (sw)

    svn unlock

    svn update (up)