Blog

  • debian svn的commit邮件提醒

    最基础简单的配置

    设置全部在/var/svnroot/工程/hooks/里面进行

    如我的是/var/svnroot/nginxsub/hooks/

    准备好三个文件

    mailer.conf //邮件设置文件
    post-commit
    mailer.py

    其中post-commit mailer.py是可执行文件,依据经验,必然主要改mailer.conf 即可

    三个文件得到的方式

    cp /usr/share/subversion/hook-scripts/mailer/mailer.conf.example /var/svnroot/nginxsub/hooks/mailer.conf
    yes | cp post-commit.tmpl post-commit
    cp /usr/share/subversion/hook-scripts/mailer/mailer.py /var/svnroot/nginxsub/hooks

    好,先修改一下post-commit 确定好mailer.py 和 mailer.conf的位置

    "$REPOS"/hooks/mailer.py commit "$REPOS" $REV "$REPOS"/hooks/mailer.conf

    修改mailer.conf

    因为debian自带exim4为MTA 则在21 行处

    mail_command = /usr/sbin/exim4

    在174行处收件人地址

    to_addr [email protected]

    此时更改过版本将会第一时间发到你的邮箱里

    当然还有好多高级用法,下次学习实践了再更新

  • linux at命令实例一则

    明天学校早上8点停电

    办公室有debian的机器,但是现在还在使用,既然都接到了通知,让它断电是不合情理的

    计划明天早3点关机,现在22点钟

    于是执行命令

    # at now +5 hours
     warning: commands will be executed using /bin/sh
     at> /sbin/shutdown -h +0
     at> <EOT>
    job 1 at Fri Aug 26 03:06:00 2011

    那个EOF是组合键 ctrl+d

    at -l 或 atq查看要执行的任务和时间

    # at -l
     1       Fri Aug 26 03:06:00 2011 a root

     

    显示任务1的详细脚本,执行

    # at -c 1
     #!/bin/sh
     # atrun uid=0 gid=0
     # mail root 0
     umask 22
     SSH_CLIENT=10.49.180.5\ 1738\ 22; export SSH_CLIENT
     SSH_TTY=/dev/pts/5; export SSH_TTY
     USER=root; export USER
     LS_COLORS=no=00:fi=00:di=01\;34:ln=01\;36:pi=40\;33:so=01\;35:do=01\;35:bd=40\;33\;01:cd=40\;33\;01:or=40\;31\;01:su=37\;41:sg=30\;43:tw=30\;42:ow=34\;42:st=37\;44:ex=01\;32:\*.tar=01\;31:\*.tgz=01\;31:\*.svgz=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.bz2=01\;31:\*.bz=01\;31:\*.tbz2=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.rar=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=01\;31:\*.jpg=01\;35:\*.jpeg=01\;35:\*.gif=01\;35:\*.bmp=01\;35:\*.pbm=01\;35:\*.pgm=01\;35:\*.ppm=01\;35:\*.tga=01\;35:\*.xbm=01\;35:\*.xpm=01\;35:\*.tif=01\;35:\*.tiff=01\;35:\*.png=01\;35:\*.svg=01\;35:\*.mng=01\;35:\*.pcx=01\;35:\*.mov=01\;35:\*.mpg=01\;35:\*.mpeg=01\;35:\*.m2v=01\;35:\*.mkv=01\;35:\*.ogm=01\;35:\*.mp4=01\;35:\*.m4v=01\;35:\*.mp4v=01\;35:\*.vob=01\;35:\*.qt=01\;35:\*.nuv=01\;35:\*.wmv=01\;35:\*.asf=01\;35:\*.rm=01\;35:\*.rmvb=01\;35:\*.flc=01\;35:\*.avi=01\;35:\*.fli=01\;35:\*.gl=01\;35:\*.dl=01\;35:\*.xcf=01\;35:\*.xwd=01\;35:\*.yuv=01\;35:\*.aac=00\;36:\*.au=00\;36:\*.flac=00\;36:\*.mid=00\;36:\*.midi=00\;36:\*.mka=00\;36:\*.mp3=00\;36:\*.mpc=00\;36:\*.ogg=00\;36:\*.ra=00\;36:\*.wav=00\;36:; export LS_COLORS
     MAIL=/var/mail/root; export MAIL
     PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; export PATH
     PWD=/root; export PWD
     LANG=zh_CN.UTF-8; export LANG
     PS1=\\h:\\w\\\$\ ; export PS1
     SHLVL=1; export SHLVL
     HOME=/root; export HOME
     LANGUAGE=zh_CN:zh; export LANGUAGE
     LS_OPTIONS=--color=auto; export LS_OPTIONS
     LOGNAME=root; export LOGNAME
     SSH_CONNECTION=10.49.180.5\ 1738\ xxx.xxx.xxx.xxx(ip地址)\ 22; export SSH_CONNECTION
     cd /root || {
     echo 'Execution directory inaccessible' >&2
     exit 1
     }
     /sbin/shutdown -h +0

    如果具体哪一天的话

    at 21:00 08/15/2012

    atrm 删除队列中的作业

    查看上次关机时间

    cat /var/log/messages | grep shutting
  • Gmail快捷键

    键盘快捷键

    通过键盘快捷键,您的手无需离开键盘而使用鼠标进行操作,从而帮助您节约时间。您需要有标准 101/102 键或自然 PS/2 键盘才能使用快捷键。

    要启用或停用这些区分大小写的快捷键,请点击设置,然后选择键盘快捷键旁边的选项。

     

    快捷键 定义 操作
    c 撰写 可让您撰写新邮件。<Shift> + c 可让您在新窗口中撰写邮件。
    / 搜索 将光标放在搜索框中。
    k 移至上一个会话 打开上一个会话或将光标移至上一个会话。您可以按 <Enter> 展开会话。
    j 移至下一个会话 打开下一个会话或将光标移至下一个会话。您可以按 <Enter> 展开会话。
    n 下一封邮件 将光标移至下一封邮件。您可以按 <Enter> 展开或折叠邮件(仅适用于“会话视图”)。
    p 上一封邮件 将光标移至上一封邮件。您可以按 <Enter> 展开或折叠邮件(仅适用于“会话视图”)。
    o 或 <Enter> 打开 打开您的会话。如果您位于“会话视图”中,此操作还可以展开或折叠邮件。
    u 返回到会话列表 刷新页面,并返回到收件箱或会话列表。
    e 存档 将所有视图中的会话存档。
    m 忽略 将会话存档,除直接发送或抄送给您的邮件外,以后所有的邮件均跳过收件箱。了解详情
    x 选择会话 自动检查并选择会话,以便您可以进行存档、应用标签,或从下拉菜单中选择一项操作以应用到该会话。
    s 对邮件或会话加注星标 对邮件或会话添加或删除星标。您可以通过星标为邮件或会话提供一个特殊的状态。
    + 标记为重要 通过标记被错误归类的邮件,帮助 Gmail 了解哪些是您的重要邮件(优先收件箱特有)。
    标记为不重要 通过标记被错误归类的邮件,帮助 Gmail 了解哪些是您不重要的邮件(优先收件箱特有)。
    ! 列为垃圾邮件 将邮件标记为垃圾邮件,并将其从会话列表中删除。
    r 回复 对邮件发件人进行回复。<Shift> + r 可让您在新窗口中回复邮件(仅适用于“会话视图”)。
    a 全部回复 回复所有邮件收件人。<Shift> +a 可让您在新窗口中回复所有邮件收件人(仅适用于“会话视图”)。
    f 转发 转发邮件。<Shift> + f 可让您在新窗口中转发邮件(仅适用于“会话视图”)。
    <Esc> 离开输入字段 将光标从当前输入字段中移除。
    <Ctrl> + s 保存草稿 在您撰写邮件时,将当前文本另存为草稿。按住 <Ctrl> 键的同时按下 s,在使用此快捷键时确保光标在以下其中一个文本字段中:撰写窗格,或任何“收件人”、“抄送”、“密送”或“主题”字段。
    # 删除 将会话移至“已删除邮件”。
    l 标签 打开“标签”菜单,以对会话添加标签。
    v 移至 将会话从“收件箱”移至其他标签:“垃圾邮件”或“已删除邮件”。
    <Shift> + i 标记为已读 将邮件标记为“已读”,并跳至下一封邮件。
    <Shift> + u 标记为未读 将邮件标记为“未读”,以便您稍后可以返回至该邮件。
    [ 存档,然后移至上一个会话 将会话存档,然后移至上一个会话。
    ] 存档,然后移至下一个会话 将会话存档,然后移至下一个会话。
    z 撤消 如果可能,撤消上一个操作(适用于带有“撤消”链接的操作)。
    <Shift> + n 更新当前会话 在有新邮件时,更新当前会话。
    q 将光标移至聊天搜索 将光标直接移至聊天搜索框。
    y 从当前视图中删除* 自动删除当前视图中的邮件或会话。

    • 在“收件箱”中,“y”表示存档
    • 在“已加星标”中,“y”表示取消星标
    • 在“已删除邮件”中,“y”表示移至收件箱
    • 在任何标签中,“y”表示删除标签

    *如果您是在“垃圾邮件”、“已发邮件”或“所有邮件”中,则“y”没有任何作用。

    . 显示更多操作 显示“更多操作”下拉菜单。
    <Ctrl> + <向下箭头> 打开“聊天”中的选项
    • <Ctrl> + <向下箭头> 可从聊天窗口中的编辑字段中移出,以选择“视频及更多”菜单
    • 下一步,按 <Tab> 可选择表情符菜单
    • 按 <Enter> 可打开所选菜单
    ? 显示键盘快捷键帮助 显示您所在任何页面中的键盘快捷键帮助菜单。
    k 将联系人上移 在联系人列表中将光标上移
    j 将联系人下移 在联系人列表中将光标下移
    o 或 <Enter> 打开 打开光标旁边的联系人。
    u 返回到联系人列表视图 刷新页面,然后返回到联系人列表。
    e 从当前群组中删除 从当前显示的群组中删除所选联系人。
    x 选择联系人 检查并选择联系人,以便您可以更改群组成员资格或从下拉菜单中选择一项操作以应用到此联系人。
    <Esc> 离开输入字段 将光标从当前输入中移除
    # 删除 永久删除联系人
    l 群组成员资格 打开群组按钮可以对联系人进行分组
    z 撤消 如果可能,撤消上一个操作(适用于带有“撤消”链接的操作)
    . 显示更多操作 显示“更多操作”下拉菜单。

    组合键 – 使用以下组合键可在 Gmail 中进行导航。

    快捷键 定义 操作
    先按 <Tab>,然后按 <Enter> 发送邮件 撰写完邮件之后,使用此组合键可自动发送邮件(Windows 上的 Internet Explorer 和 Firefox 中支持此功能)。
    先按 y,然后按 o 存档,然后移至下一个会话 将会话存档,然后移至下一个会话。
    先按 g,然后按 a 转到“所有邮件” 可让您转到“所有邮件”,即您发送或接收的(以及尚未删除的)所有邮件的存储站点。
    先按 g,然后按 s 转到“已加星标” 可让您转到已加星标的所有会话。
    先按 g,然后按 c 转到“通讯录” 可让您转到通讯录
    先按 g,然后按 d 转到“草稿” 可让您转到已保存的所有草稿。
    先按 g,然后按 l 转到“标签” 可让您转到“标签:”运算符已填写的搜索框。
    先按 g,然后按 i 转到“收件箱” 可让您返回到收件箱。
    先按 g,然后按 t 转到“已发邮件” 可让您转到您已发送的所有邮件。
    先按 *,然后按 a 全选 选择所有邮件。
    先按 *,然后按 n 全部不选 取消选择所有邮件。
    先按 *,然后按 r 选择已读邮件 选择所有已读邮件。
    先按 *,然后按 u 选择未读邮件 选择所有未读邮件。
    先按 *,然后按 s 选择已加星标的邮件 选择所有已加星标的邮件。
    先按 *,然后按 t 选择未加星标的邮件 选择所有未加星标的邮件。

    筛选技巧:

    in:sent 发件箱
    label:unread 未读
    label:inbox 收件箱
    

    发现 in 和 label 是一样的

  • JavaScript学习摘抄

    在看从图书馆借的JavaScript学习指南 (美) Shelley Powers著

    javascript语言精粹

    JavaScript

    JavaScript 是一种解释性语言(就是说,代码执行不进行预编译)

    两个正斜杠是 JavaScript 的注释符号,它会阻止 JavaScript 编译器对这一行的编译。

    多行注释以 /* 开头,以 */ 结尾。

    多用单行注释,不容易出错

    当页面载入时,会执行位于 body 部分的 JavaScript。

    当被调用时,位于 head 部分的 JavaScript 才会被执行。

    代码块以左花括号开始,以右花括号结束。

    代码块的作用是一并地执行语句序列。

    通过 var 语句来声明 JavaScript 变量,并且为局部变量

    变量是区分大小写的

    变量不要和javascript的关键字冲突

    多用匈牙利命名法

    多用小驼峰式命名法(lower camel case):第一个单字以小写字母开始;第二个单字的首字母大写,例如:firstName、lastName。

     

    首字母大写通常表示为类

     

    什么是cookie?

    cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。

    坚持养成用分号结束的好习惯

    布尔值不需要引号,加引号”false”和不加false意义完全不同

    自已用起来方便的注释块

    /*

    author:jpuyy.com date:

    for use:
    modified by xx at date
    version:
    history:

    */

    Ajax程序库jQuery

     

  • div+css学习中要注意的地方

    理念:
    CSS 允许你对布局进行完全地控制
    CSS能达到你想要的效果。例:关闭圆点是 CSS 的最基本的能力。它有能力使列表看起来和普通文本没有两样,也可以使列表看起来像图形导航栏,具有完整的反转效果。
    加强用html进行结构化,使用列表元素来标记列表,这样在所有设备里都会认为他是列表。
    XHTML 和 CSS 也会被误用和滥用,有时可能还不如html,思维要考虑如何用它们产生更有效的代码,要不只会是新垃圾代替旧垃圾。
    为你的网页减肥,尽量做到,就像没有女人会讨厌自已太瘦
    在W3C的描述中我们可以找到理解 div 元素的关键,“一种添加结构的通用机制。”

    使用 em 来设置字体大小

    如果要避免在 Internet Explorer 中无法调整文本的问题,许多开发者使用 em 单位代替 pixels。
    W3C 推荐使用 em 尺寸单位。1em 等于当前的字体尺寸。如果一个元素的 font-size 为 16 像素,那么对于该元素,1em 就等于 16 像素。在设置字体大小时,em 的值会相对于父元素的字体大小改变。

    以上段标记的css代码:

    如果要避免…………………小改变。

     

     

    font属性里可以将所有的写在一起,如
    p.ex2
    {
    font:italic bold 12px/20px arial,sans-serif;
    }
    10px/20px分别是字的大小和行间距,这样就可以不用line-height来设置了

    outline和border
    border在outline的里面
    边框外是外边距,边框内是内边距

    css 模型

    padding 上 右 下 左;
    当说到width时,实际上说的是内容的宽度,而不算内边距,外边距
    如果边框样式为 none,即边框根本不存在,那么边框就不可能有宽度,因此边框宽度自动设置为 0
    外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。

    使用id选择器要注意:
    一个html文档只能出现一次
    id=””中不能有空格
    id区分大小写
    id的规则

    id 值必须以字母或者下划线开始;不能以数字开始。虽然 W3C 验证不会捕获这个错误,但是 XML 解析器会的。同时,如果你将 id 与 JavaScript 在表单中配合使用,那么 id 名称和值必须是合法的 JavaScript 变量。空格和连字号,特别是连字号,是不被允许的。不仅如此,将下划线用于 class 或者 id 名都不是个好主意,这是由于在 CSS2.0(以及某些浏览器)中的限制。

    后代选择器会选所有的符合的元素
    子元素选择器会先挨着的元素,如选的不挨着,则无效

  • curl实战

    取得头信息

    curl --head 127.0.0.1
    curl -I 127.0.0.1

    取得http状态码(加-I只加载头信息,速度更快)
    -w后加变量,获取很多与请求相关的额外信息显示在屏幕上,如%{http_code}显示状态码,%{time_total} 响应时间, %{size_download}页面大小, %{content_type} 页面类型

    curl -s -o /dev/null -w "%{http_code}" http://jpuyy.com
    curl -s -o /dev/null -I -w "%{http_code}" http://jpuyy.com

    如果有一批url需要判断状态码,写入url_http_status.txt中,脚本如下:

    #!/bin/bash
    for i in `cat url_http_status.txt`
    do
    STATUS_CODE=`curl -o /dev/null -s -w %{http_code} $i`
    echo -e "$i:\t$STATUS_CODE"
    done

    使用安静模式

    --silent

    curl 跟踪 301跳转,使用参数 -L

    ➜  ~  curl -I http://www.jpuyy.com -L
    HTTP/1.1 301 Moved Permanently
    Server: nginx/1.0.15
    Date: Sun, 09 Nov 2014 10:40:15 GMT
    Content-Type: text/html; charset=UTF-8
    Connection: keep-alive
    X-Powered-By: PHP/5.3.3
    X-CF-Powered-By: WP 1.3.14
    X-Pingback: http://jpuyy.com/xmlrpc.php
    Location: http://jpuyy.com/
    
    HTTP/1.1 200 OK
    Server: nginx/1.0.15
    Date: Sun, 09 Nov 2014 10:40:16 GMT
    Content-Type: text/html; charset=UTF-8
    Connection: keep-alive
    Vary: Accept-Encoding
    X-Powered-By: PHP/5.3.3
    X-CF-Powered-By: WP 1.3.14
    X-Pingback: http://jpuyy.com/xmlrpc.php
    

    取得多个子域名信息

    curl http://site.{one,two,three}.com
    如:curl http://{bbs,ftp,nic}.cczu.edu.cn

    下载file1.txt-file100.txt

    ftp://ftp.numericals.com/file[1-100].txt
    ftp://ftp.numericals.com/file[001-100].txt (with leading zeros)
    ftp://ftp.letters.com/file[a-z].txt
    http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
    http://www.numericals.com/file[1-100:10].txt 10,20.....txt

    关于cookies

    The file specified with -b/–cookie is only used as input.No cookies will be stored in the file.

    用于读入

    To store cookies, use the -c/–cookie-jar option or you could even save the HTTP headers to a file using -D/–dump-header!

    curl --cookie "desktop=1;key2=value2" -v -o /dev/null http://jpuyy.com/

    curl伪造头信息

    curl --header "X-Forwarded-For:8.8.8.8" --header "Accept-Language: en" http://www.jpuyy.com

    curl模拟指定浏览器

    curl -A "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0" [URL]

    curl模拟指定的referer

    curl [URL] -e http://www.aavv.com
    或使用 --referer

    curl使用压缩

    curl -I "http://www.hao123.com" --compressed
    curl -I -H "Accept-Encoding: gzip, deflate" "http://www.hao123.com"

    curl执行post提交

    curl http://localhost:8000/wrap -d text=kadj+kdsj+kasdfj+kaslfdj+jkdasljf+skdfjal-yyyyksdjf-kasjd

    curl 带账号,basic 认证

    -u, --user <user:password>
    
    curl -L -i --user myuser:mypass http://abc.example.com/manage
    

    curl https出现错误

    curl -sS https://getcomposer.org/installer
    curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
    error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
    More details here: http://curl.haxx.se/docs/sslcerts.html

    解决办法:
    http://curl.haxx.se/docs/caextract.html 下载 ca-bundle.crt到 /etc/pki/tls/certs/ca-bundle.crt

    curl 指定代理服务器

    curl http://jpuyy.com -x 211.61.47.19:80

    指定 socks5 代理服务器

    curl --socks5 127.0.0.1:1081 jpuyy.com/ip.php

    更多案例:http://www.thegeekstuff.com/2012/04/curl-examples/

    下载 github release tar.gz 包

    curl -L -O https://github.com/ansible/ansible/archive/v2.1.0.0-0.2.rc2.tar.gz

    获取 token,先准备一个认证文件 auth.json

    {
    "username":"jpuyy",
    "password":"pass"
    }
    

    发送请求

    curl -v -XPOST info.mysite.com/api/auth/token -d @auth.json -H 'Content-Type: application/json'
    

    根据认证的 token 放在 header 访问

    curl info.mysite.com/api/config/web.gui-H "Authorization: FuZzA2In0..."

    curl 返回 000 状态码表示超时

    curl 测试 websocket

    curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: echo.websocket.org" -H "Origin: http://www.websocket.org" http://echo.websocket.org

    curl 下载断点重连

    curl -O -C - http://jpuyy.com/a.txt
    

    curl 自己指定域名的解析

    --resolve [DOMAIN]:[PORT]:[IP]
    curl https://jpuyy.com --resolve jpuyy.com:443:192.168.1.66
    

    curl 重复请求 100次

    curl 'https://jpuyy.com/abc?[1-100]'