Author: jpuyy

  • npm-nodejs包管理器

    npm — node package manager

    全局安装nodejs包

    npm -g install net-ping

    查看已经安装的nodejs应用

    npm ls -g installed

    创建项目过程,首先创建一个目录 mvc-express ,进入后输入

     npm init

    回答一些问题创建项目

    This utility will walk you through creating a package.json file.
    It only covers the most common items, and tries to guess sane defaults.
    
    See `npm help json` for definitive documentation on these fields
    and exactly what they do.
    
    Use `npm install  --save` afterwards to install a package and
    save it as a dependency in the package.json file.
    
    Press ^C at any time to quit.
    name: (mvc-express) 
    version: (0.0.0) 0.0.1
    description: my try of express
    entry point: (app.js) 
    test command: npm test
    git repository: 
    keywords: 
    author: jpuyy
    license: (ISC) 
    About to write to /private/var/forge/node/mvc-express/package.json:
    
    {
      "name": "mvc-express",
      "version": "0.0.1",
      "description": "my try of express",
      "main": "app.js",
      "scripts": {
        "test": "npm test"
      },
      "author": "jpuyy",
      "license": "ISC"
    }
    
    
    Is this ok? (yes) yes
    

    接下来我要安装一些包时,使用 npm install –save ,会自动加入到 package.json 中

    npm install express --save

    清理缓存
    npm cache clean

    检查
    npm audit fix

  • macOS 操作技巧

    清除dns缓存

    Mac OS X 10.7 & 10.8 & 10.9

    sudo killall -HUP mDNSResponder
    

    在粘贴到备忘录的时候文字带样式很难看,无格式粘贴的快捷键为四个按键

     Option Shift ⌘ V

    finder与terminal互相切换

    由finder当前路径打开terminal,使用Go2shell

    在terminal路径下打开finder, 使用 open . 或pwd获取当前路径,然后按 Shift ⌘ G输入路径。

    显示桌面

    ⌘ F3

    在 terminal 中将显示结果复制到剪切板 “pbcopy” (pasteboard copy)

    ls | pbcopy

    将剪切板中的内容输出到一个文件中

    pbpaste > file.log

    将标准输出的内容显示在一个文件中

    ls index.php| open -fe

    查看哪个程序打开 80 端口

    lsof -n -i4TCP:80 | grep LISTEN

    把 Screenshots 的区域截图设置习惯的快捷键
    Copy picture of selected area to the clipboard: command + control + A
    Screenshot and recording options: command + control + S

    Finder 显示隐藏文件?
    Command + Shift + . 点

    打字的时候删除一个单词(OneNote)
    Ctrl + Backspace

    Command + F1 切换是镜像还是扩展屏

  • nginx echo模块

    http://wiki.nginx.org/HttpEchoModule

    我这里在ubuntu下使用nginx,

    查看nginx版本,nginx -V

    nginx version: nginx/1.1.19

    确保有nginx-echo模块

    –add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-echo

    接下来在ip.jpuyy.com中添加配置,返回客户端ip,同时在http头中也加返回客户端ip

    server {
            listen       80;
            server_name  ip.jpuyy.com;
    
            location / {
                root /usr/share/nginx/jpuyy.com;
                index ip.html;
                add_header X-Client-IP $remote_addr;
                echo $remote_addr;
            }
    
    }
    

    获取自己的ip地址

    ➜  curl ip.jpuyy.com

    183.195.128.xx

    ➜  curl -I ip.jpuyy.com

    HTTP/1.1 200 OK

    Server: nginx/1.1.19

    Date: Sat, 23 Aug 2014 05:24:03 GMT

    Content-Type: application/octet-stream

    Connection: keep-alive

    X-Client-IP: 183.195.128.xx

    curl -I ip.jpuyy.com | grep X-Client |sed ‘s/ //’ | cut -d: -f2

  • redis操作笔记

    设置key jpuyy

    127.0.0.1:6379> set jpuyy [email protected]
     OK

    选择数据库,查看数据库存量

    127.0.0.1:6379[1]> select 0
    OK
    127.0.0.1:6379> DBSIZE
    (integer) 1000004
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> DBSIZE
    (integer) 0

    把某个key移动到另外的一个库,如库2

    127.0.0.1:6379> MOVE key_85544 2
    (integer) 1
    127.0.0.1:6379> select 2
    OK
    127.0.0.1:6379[2]> get key_85544
    "value_85544"
    127.0.0.1:6379[2]> select 0
    OK
    127.0.0.1:6379> get key_85544
    (nil)

    判断jpuyy是否存在

    127.0.0.1:6379> EXISTS jpuyy
    (integer) 1

    对key设置超时时间,前提是此key已经存在

    127.0.0.1:6379> EXPIRE jpuyy 10
    (integer) 1

    对不存在的key设置超时会返回0

    127.0.0.1:6379> EXPIRE jpuyynoexist 10
    (integer) 0

    查看一个key的生存时间

    127.0.0.1:6379> TTL key_749100
    (integer) 188

    不存在的key会返回-2

    127.0.0.1:6379> TTL key_749100134
    (integer) -2

    永久化一个key

    127.0.0.1:6379> PERSIST key_749100
    (integer) 1

    永久化的key查看过期时间会返回-1

    127.0.0.1:6379> TTL key_749100
    (integer) -1

    永久存储一个key

    取出所有的key(或部分key),生产环境绝对不能使用

    127.0.0.1:6379> keys *
    127.0.0.1:6379> KEYS key_749*

    返回一个随机的key

    127.0.0.1:6379> RANDOMKEY

    如果key的value很大,可以通过命令行输出,-n 表示 select 1

    redis-cli -n 1 -h 192.168.1.69 get g.node.match.live.key.26097 > ~/a

    删除key

    127.0.0.1:6379> del key_673907
    (integer) 1
    127.0.0.1:6379> get key_673907
    (nil)

    info命令可以查看redis运行的各种信息

    CONFIG GET *   可以查看当前生效的值

    CONFIG GET *memory*
    1) "maxmemory"
    2) "32212254720"

    config set 可以查看设置配置,不用重启即可生效

    危险动作

    清空当前db

    flushdb

    清空所有db

    flushall

    停止服务

    127.0.0.1:6379> SHUTDOWN
  • mysql参数配置

    [root@mail ~]# cat /etc/my.cnf
    [mysql]
    prompt = “(\u@\h)[\d]> ”
    no_auto_rehash
    default_character_set = utf8 #指定客户端连接字符集,等同set names utf8. <character_set_client, character_set_connection, character_set_results>。

    [mysqld]
    socket = /tmp/mysql.sock #mysql sock文件存放目录(该目录可以改动,但必需可以让mysql有写权限)
    user = mysql #启动mysql数据库的用户
    port = 3306 #mysql守护进程启动时监听的端口
    skip_external_locking #避免mysql外部锁定,减少出错机率增强稳定性(mysql5.5配置)
    skip_name_resolve #启动时和运行时跳过域名查询(mysql5.5不能用)
    query_cache_type = 1 #0或OFF(禁止使用缓存);1或ON(充许使用缓存,SELECT SQL_NO_CACHE查询语句除外);2或DEMAND(仅对SELECT SQL_CACH查询语句启动缓存)
    query_cache_limit = 8M #最大缓存结果大小
    query_cache_min_res_unit = 4k
    query_cache_size = 512M #查询缓存大小
    read_buffer_size = 2M #select时所能使用的缓冲区大小,每连接独享。
    read_rnd_buffer_size = 16M #order by | group by所使用的排序缓存大小,每连接独享。
    open_files_limit = 102400 #MySQL文件描述符限制
    sort_buffer_size = 4M #order by | group by,每连接独享。
    join_buffer_size = 2M #外链缓冲大小,每连接独享。
    key_buffer = 1G
    key_buffer_size = 1G
    table_cache = 2048 #为所有线程打开表的数量,同时须修改文件描述符默认大小。增加些值可有效避免频繁打开表产生的开销。
    max_connections = 2048 #最大允许多少个tcp进程连接
    back_log = 1000 #指定可能的连接数,当MySQL主线程在很短的时间内接收到非常多的请求时,该参数生效。达到该参数阀值会短暂停止响应新的请求(推置值 connection x 2)。
    max_connect_errors = 102400 #mysql实例在大量发时,而mysql本身处理不过来,就会产生最大连接错误,当达到设定值后会死锁实例,新的连接将无法进来,而老的连接正常。mysql有相应的自动timeout机制来控制将最大连接错误回滚成0。
    wait_timeout = 3600 #断开空闲时间超过此值的连接
    interactive_timeout = 3600 #服务器在关闭之前在一个交互连接上等待的秒数(一个交互的客户端被定义为对mysql_real_connect()使用CLIENT_INTERACTIVE选项的客户),默认为28800
    tmp_table_size = 512M #临时表大小
    slow_query_log = True #记录慢查询,对SQL优化很有帮助
    slow_launch_time = 1 #设置执行时间多长的查询为慢查询, 默认单位为秒(s)
    server_id = 61 #服务器id 主从时必需设置
    binlog_ignore_db = mysql,test
    log_bin = /data0/db-binlog/hupu.com/default/mysql-bin #打开binlog日志
    log_bin_index = /data0/db-binlog/hupu.com/default/mysql-bin.index #binlog 索引文件
    binlog_format = MIXED #binlog格式[STATEMENT(基于语句)|ROW(基于行)|MIXED(混合模式)]
    binlog_cache_size = 4M #binlog 缓存大小,调节该值大小可避免使用文件
    max_binlog_cache_size = 8M #默认4GB,限制缓存多语句事务的缓冲区总大小,当某个事务大于该值,将会失败并回滚
    max_binlog_size = 512M #指定binlog文件最大容量,超过些值会自动回滚binlog
    expire_logs_days = 60 #binlog保存最近7天的文件
    bulk_insert_buffer_size = 64M #insert … select … ,insert …(..),(..),(..) ,load data infile 有较大的加速效果, 针对每线程
    myisam_sort_buffer_size = 512M #myisam引擎排序缓冲大小,即MyISAM表发生变化时重新排序所需的缓冲区大小
    myisam_max_sort_file_size = 1G #myisam引擎最大允许排序文件大小
    myisam_repair_threads = 1 #mysql修复线程数
    myisam_recover #启动MySQL时自动修复损坏索引的表
    myisam_sort_buffer_size = 512M #表恢复时使用的缓冲区大小
    max_heap_table_size = 200M
    max_allowed_packet = 2G #导入时指定单表最大文件
    thread_concurrency = 8 #最大的并发连接线程数,取CPU的核心数x2,超线程CPU再x2
    thread_cache_size = 1024 #每个thread cache 池可以最多缓存多少个线程
    thread_stack = 192K #每个线程被创建时分配的内存空间大小

    innodb_support_xa = False #开启或关闭Innodb分布式事务. 如未使用分布式事务, 强列建议关闭. 减少磁盘刷新次数.
    innodb_additional_mem_pool_size = 8M #存储数据目录信息和其它内部数据结构的内存池大小, 表越多需要的内存也越多.默认为1MB
    innodb_buffer_pool_size = 2G #Innodb 表缓存池大小
    innodb_file_io_threads = 4 #innodb io线程数,默认为4个. 在unix类系统中设置大于4的值是没有意义的.windows则不同.
    innodb_thread_concurrency = 0 #innodb 并发线程数.设置值大于0时,innodb每次接MySQL线程调用时都将进一次并发性检测,看是否大于些值.如果show innodb status 中发现大量”waiting in InnoDB queue ” 则可将值设成0.让系统自已控制
    innodb_flush_log_at_trx_commit = 2 #innodb日志写入磁盘设置,0 : 每秒一次 ,1:每个事务完成时提交, 2:每次提交但不对日志写回磁盘操作,刷到磁盘上还是每秒一次.不受事务结束引响. 当设置为0时任何导至mysqld进程的崩溃都会删除前一秒的事务日志,当设为2时,只有操作系统崩溃或掉电才会删除最后一秒的事务.(当然磁盘回写也会导至事务的丢失,而这是磁盘的默认选项). 该选项默认值为 1.
    innodb_log_buffer_size = 8M #innodb log缓存大小,默认为1MB. 频繁写入时才修改此值到8MB或以上,因每秒(跟据innodb_flush_log_at_trx_commit值决定刷新缓存到磁盘的时间间隙)会被刷一次到磁盘. 不建议加很大
    innodb_log_files_in_group = 3
    innodb_max_dirty_pages_pct = 80
    innodb_lock_wait_timeout = 60 #Innodb引擎表死锁时等待的时间, 超出此时间事务还未执行成功, 此事务将回滚. 跟据需要设置些参数
    innodb_file_per_table = 1 #为每个innodb 表单独创建文件存放. 默认所有innodb表全部存放在ibdata1
    innodb_open_files = 1024 #Innodb 一次最多可以打开多少表,默认为300,最少值为10. 些选项跟innodb_file_per_table是多表还是单表存放innodb文件相关
    innodb_read_io_threads = 8 #Innodb 读取磁盘io线程数,默认为4. 如果磁盘性能OK, 可以加大些值来提高性能。
    innodb_write_io_threads = 4 #Innodb 写入磁盘io线程数,默认为4. 如果磁盘性能OK, 可以加大些值来提高性能。
    innodb_io_capacity = 200 #Innodb 刷新脏页到磁盘,指每秒刷新200个脏页,此值为默认。写密集型DB需加大此值。
    innodb_max_dirty_pages_pct = 80 #加快innodb脏页刷新频率减少恢得利 时间,也可保证磁盘的IP负载。值为百分比,默认90%
    innodb_adaptive_flushing = True #自适应刷新脏页,
    big_tables = True #MySQL 大表支持

    [mysqldump]
    quick
    max_allowed_packet = 2G #导出时指定单表最大文件

  • awk使用方法

    awk算是一门很强大的语言,这里只有常用的一些命令

    awk 的特性

    • awk 能按行,列读取文件
    • 和其他语言一样,有变量,条件,循环
    • 有计算和字符串操作
    • 可以生成格式化的输出

    语法要注意

    awk '/search pattern1/ {Actions}
         /search pattern2/ {Actions}' file
    • search 可以是正则表达式
    • action 为要执行的动作
    • 程序中间要用单引号引起来

    匹配符

    ~ 匹配
    !~ 不匹配

    特殊变量
    NF 字段个数
    NR 记录个数(行数)
    FS filed separator

    awk取出指定行,如第20行

    cat /etc/hosts | awk 'NR==20'

    awk取出偶数行

    awk 'NR % 2 == 0' /etc/passwd

    awk取出有3列的行

    cat /etc/hosts | awk 'NF==3'

    打印出指定列

    cat /etc/hosts | awk '{print $2}'

    打印出最后一列,列的长度参差不齐,也是打印最后一列

    cat /etc/hosts | awk '{print $NF}'

    利用求余数的方法取出某文件的随机一行

    countline=`cat swapfile | wc -l`
     awk "NR==$(($RANDOM%$countline))" swapfile

    指定分隔符为=号

    awk -F '=' '{print $2}'

    分析日志中 请求的 host 是 my.jpuyy.com 且 状态是200

    tail -n 10  nginx_access.log | awk -F' '  '$2=="my.jpuyy.com" && $10==200 {print $10}'

    $0代表了全部,打印全部 {print $0}

    tail -n 10  nginx_access.log | awk -F' '  '$2=="my.jpuyy.com" && $10==200 {print $0}'

    打印每一个filed

    echo '11,13,15,61,3' | awk -F ',' '{for (i=1; i<=NF; i++) print $i}'

    打印时与字会串拼接,用双引号引起来

    echo '11,13,15,61,3' | awk -F ',' '{for (i=1; i<=NF; i++) print "192.168.1."$i}'

    awk 与 grep 等价命令

    cat my.log | grep error
    等同于
    awk '$0 ~ "error" {print $0}' my.log

    使用 printf 打印指定格式
    下面是取出 nginx log 中 GET 请求,把其中 $3, $9 以 , 分隔,并加上换行输出到 csv 中

    cat nginx_access.log-20160410 | awk '$8=="GET" {printf "%s,%s\n", $3,$9}' >> nginx_access.log-20160410.csv

    把指定列做加法,如最后一列

    awk '{sum+=$NF} END {print sum}'

    把最后一列踢除掉

    awk '{$NF=""; print $0}' file

    全部变为大写

    awk '{print tolower($0)}'

    全部变为小写

    awk '{print toupper($0)}'

    统计目录大小,包含 G 的目录

    du -sh * | awk '$1 ~ /G/ { print }'
    

    打印 hostname 前三个字符

    hostname  | awk '{print substr($0,1,3)}'
    hostname | cut -c 1-3
    echo ${HOSTNAME:0:3}
    

    奇数行和偶数行合并

    awk 'NR%2==0 {print p" "$0;} NR%2 {p=$0;}'