yjiang's cake

使用shell统计某单词出现的次数

昨天朋友发来一面试题:使用shell统计某单词出现的次数

以hill为例,当时的想法是

cat a.txt | grep '\bhill\b' | sed -e 's/\ /\n/' | wc -l

当时考虑的比较简单,且没有把grep命令参数了解清除,导致写出了如下繁琐且很不完善的统计命令;想法是grep出所有单词以后再把空格替换为换行来统计,如果是双引号或者其他符号夹着某个单词就统计错误了.

今天写后台,想看一下某个接口出现的次数,看到grep -o可以只显示过滤出来的单词并换行

cat a.txt | grep -o '\bhill\b' | wc -l     # grep -o 只显示匹配的部分
cat a.txt | grep -w hill | wc -l           # grep -w 匹配某个单词

这就简单了..还是命令掌握不熟练

ubuntu使用PPA源

安装add-apt-repository

sudo apt-get install software-properties-common python-software-properties

添加源

sudo add-apt-repository ppa:user/ppa-name

国内源

python

http://pypi.douban.com/
http://mirrors.aliyun.com/pypi/simple/

system

http://mirrors.aliyun.com/

输出服务器资源消耗脚本 -- monitor

目的

虽然有功能强大的 Nagios, 但我想让服务器尽可能的只运行必须的服务, Nagios大材小用了

实现功能

  • 免登陆快速查看多台服务器总体资源消耗

server端(shell)

#!/bin/bash
function check_ip(){
    #使用`/sbin/ifconfig`防止ssh远程执行时找不到变量
    echo IP  $(/sbin/ifconfig eth1 | grep "inet " | awk '{print $2}')
}

function check_cpu(){
    echo CPU  1m:$(uptime | awk '{print $10}')%  5m:$(uptime | awk '{print $11}')% 15m:$(uptime | awk '{print $12}')%
}

function check_mem(){
    echo Mem  total: $(free -m | grep Mem | awk '{print $2}')M,  used: $(free -m | grep 'Mem:' | awk '{print $3-$6-$7}')M 
}

function check_disk(){
    echo Disk sda2 total:$(df -lh | grep sda2 | awk '{print $2}'), used: $(df -lh | grep sda2 | awk '{print $3}')\($(df -lh | grep sda2 | awk '{print $5}')\)
    echo Disk opt total:$(df -lh | grep opt | awk '{print $2}'), used: $(df -lh | grep opt | awk '{print $3}')\($(df -lh | grep opt | awk '{print $5}')\)
}

echo "======================================"
check_ip
check_mem
check_cpu
check_disk
echo "======================================"

存为 /usr/local/bin/monitor_server, 并 ``chmod+x monitor_server

client端(python)

#!/usr/bin/python
#-*-coding:utf8-*-
import paramiko                                                                                                                                                                                                   

class rsm(): #remote_server_monitor
    def __init__(self, ip, title):
        self.ip = ip
        self.title = title
        self.port = 22
        self.username = "username"
        self.password = "password"
        self.command = "monitor"

    def ssh(self):
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(self.ip, self.port, self.username, self.password)
        stdin, stdout, stderr = client.exec_command("monitor")
        print self.title
        print ''.join(stdout.readlines())
        client.close()

redis = rsm('192.168.0.1', 'redis')
redis.ssh()

api = rsm('192.168.0.2', 'mongo')
api.ssh()

存为 /usr/local/bin/monitor_client, 并 ``chmod+x monitor_client

//todo

  • 只能算是个demo,如果有时间想加个web界面及把信息存入数据库,好作为历史参考
  • check_ip 百分比
  • 邮件发送

比webbench结果更详细的压力测试工具 -- siege

<h4>使用同webbench一样简单</h4>

aptitude install siege #安装
siege -c 100 --time=10S http://yjiang.cn/  #使用
siege -c 100 -0time=10S "http://yjiang.cn/login.php POST username=foo&passwd=bar" #post

<h4>详细的测试结果</h4>

<p>QQ图片20140529102633</p>

Copyright © 2016 yjiang's cake

返回顶部