清风小荷塘改名了

特色

清风小荷塘改名了,从此不再叫清风小荷塘了。
自从07年定下这个名字,一直沿用至今。
现在的清风小荷塘,已不再是一个书生意气、单纯懵懂的少年了,变成了一个满脸胡渣的大叔。
一直想不到啥好的博客名字。就乱起一个吧。
麻烦友情链接里的朋友们,改一下我的链接名吧,谢谢。

生查子
宋·欧阳修
去年元夜时,花市灯如昼。
月上柳梢头,人约黄昏后。

今年元夜时,月与灯依旧。
不见去年人,泪湿春衫袖。

在OpenWrt/LEDE系统中处理JSON

在OpenWrt/LEDE系统中处理JSON的方法,这里记录一下。

假设有一个JSON文件

cat /etc/ss.json 
{
	"server": "8.8.8.8",
	"server_port": 443,
	"local_address": "0.0.0.0",
	"local_port": 7070,
	"password": "fuckgfang",
	"method": "aes_128_ctr",
	"timeout": "60",
	"protocol": "auth_aes128_sha1",
	"fast_open": false
}

处理方式1

$ jsonfilter -i /etc/ss.json -e "@.server"
8.8.8.8

$ CONF=/etc/ss.json
$ a=$(jsonfilter -i $CONF -e "@.server")
$ echo $a
8.8.8.8

继续阅读

(在Ubuntu 16.04 64bit系统下)编译LEDE系统mvebu架构的package

由于博主本人使用的路由器是Linksys wrt1200ac(基于mvebu架构的CPU), 本文演示了在Ubuntu16.04系统下交叉编译mvebu架构的OpenWrt软件包过程.

注意事项:
1, 本文基于Ubuntu16.04, 理论上Debian 8 64bit也可以操作本文
2, 由于在make过程中还会数次连接网络去下载依赖包, 建议在操作前确保自己的网络是可以穿墙的
3, OpenWrt的/tmp目录体积最大, 进行安装软件以前, 应该先把软件拷贝到此目录.

准备环境及下载源码

sudo apt-get install gawk libncurses5-dev libz-dev zlib1g-dev  git ccache

wget https://downloads.lede-project.org/releases/17.01.2/targets/mvebu/generic/lede-sdk-17.01.2-mvebu_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64.tar.xz

xz -d lede-sdk-17.01.2-mvebu_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64.tar.xz 

tar xvf lede-sdk-17.01.2-mvebu_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64.tar 

cd lede-sdk-17.01.2-mvebu_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64

安装基础软件包

./scripts/feeds update
./scripts/feeds install libpcre
./scripts/feeds install zlib    #如果是fedora等系统请使用dnf install zlib-devel
./scripts/feeds install libopenssl

继续阅读

Linux详细查看进程启动时间

Linux系统下查看进程启动时间和运行时间的命令

ps -o lstart -p PID         #根据PID来查询

ps -o lstart,etime -p PID   #根据PID来查询,打印出启动时间和已经运行的时间

ps -eO lstart | grep PROCESS    #根据进程名字查询

提示:
1, 大写的O表示preloaded,小写的o表示user-defined,e表示all processes
2, 如果查出来的时间是1-16:15:58, 则表示该运程运行了1天16小时15分钟
3, etime表示elapsed time, 即程序已经运行的时间

以下几个例子

$ ps -o lstart,etime -p 13062    #根据PID打印出启动时间和持续时间
                 STARTED     ELAPSED
Thu Sep 21 09:41:40 2017  1-01:50:35

$ ps -eo pid,lstart,etime | grep 13062    #打印出所有进程的PID,启动时间和持续时间
13062 Thu Sep 21 09:41:40 2017  1-01:51:54

$ ps -eOf | grep 13062
 7259  7259 Fri Sep 22 11:36:21 2017       00:01 S pts/0    00:00:00 grep 13062
13062 13062 Thu Sep 21 09:41:40 2017  1-01:54:42 S ?        1-15:50:04 /export/App/jd_search/searcher/server/bin/searcher_server

阿里云/京东云等进行端口转发

假设我们有个应用建立在国外的某个服务器上(如8.8.8.8:443端口上),现在希望使用阿里云/京东云等作为跳板来转发一下这个端口

开启端口转发

vim /etc/sysctl.conf
将 net.ipv4.ip_forward=0
修改成 net.ipv4.ip_forward=1

编辑后使用命令让配置马上生效
sysctl -p

相同端口的转发(将阿里云的443端口转发到8.8.8.8的443端口)

iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 8.8.8.8
iptables -t nat -A PREROUTING -p udp --dport 443 -j DNAT --to-destination 8.8.8.8

iptables -t nat -A POSTROUTING -p udp -d 8.8.8.8 --dport 443 -j SNAT --to-source 192.168.0.3
iptables -t nat -A POSTROUTING -p tcp -d 8.8.8.8 --dport 443 -j SNAT --to-source 192.168.0.3

请注意:一般来说,阿里云/京东云有个内网IP和公网IP,我们假设这里的192.168.0.3是阿里云/京东云的内网IP,这里不能写公网IP

不同端口的转发(将阿里云的5270端口转发到8.8.8.8的443端口)

iptables -t nat -A PREROUTING -p udp --dport 5270 -j DNAT --to-destination 8.8.8.8:443
iptables -t nat -A PREROUTING -p udp --dport 5270 -j DNAT --to-destination 8.8.8.8:443

iptables -t nat -A POSTROUTING -p udp -d 8.8.8.8 --dport 443 -j SNAT --to-source 192.168.0.3
iptables -t nat -A POSTROUTING -p tcp -d 8.8.8.8 --dport 443 -j SNAT --to-source 192.168.0.3

awk命令之条件判断

在《运维实例:批量统计分区占用情况,并形成Excel报表》这篇文章里,我们用到了一条awk命令

$ df -hT
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda1      ext4    20G  4.9G   14G  27% /
tmpfs          tmpfs  127G     0  127G   0% /dev/shm
/dev/sda3      ext4   515G   45G  445G  10% /export
/dev/sdb       ext4   1.1T  476G  570G  46% /export/Data/jd_search

$ df -hT | grep /export | egrep -v '(bigtable)' | awk '{ print $5, $7 }'
445G /export
570G /export/Data/jd_search

$ df -hT | grep /export | egrep -v '(bigtable)' | awk 'END{ if(NR=1) print $5, $7; else if(NR=2 && $7=="/export/Data/jd_search") print $5, $7}'
570G /export/Data/jd_search

下面这条awk大意就是,如果有/export/Data/jd_search分区,则返回这个分区的剩余空间,否则就返回/export分区的剩余空间。

先说说这个END
在Unix awk中两个特别的表达式,BEGIN和END,这两者都可用于pattern中(参考前面的awk语法),提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。
任何在BEGIN之后列出的操作(在{}内)将在Unix awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。

所以,下方命令可以用来统计文件的行数

$ awk 'END{print NR}' test1.sh

注意,这条命令里,如果没有END这个参数,则NR并不会输出行数。为什么,下面介绍一下NR。 继续阅读

运维实例:批量统计分区占用情况,并形成Excel报表

假设有一天,你有一个任务,要统计线上所有服务器的/export分区占用情况,比如下面这一台服务器:

$ df -hT
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda1      ext4    20G  5.2G   13G  29% /
tmpfs          tmpfs  127G     0  127G   0% /dev/shm
/dev/sda3      ext4   514G  279G  209G  58% /export
/dev/sdb1      ext4   1.1T  518G  526G  50% /export/Data/jd_search

像这样一台服务器,除了有个/export分区,还有个/export/Data/jd_search(只有一部分机器有这个分区),现在要统计这2个分区的占用情况,并且最终形成Excel报表,要怎么操作呢?

1,使用批量脚本获得所有机器的/export分区占用情况
#准备远程机器列表

$ vim ip_list
10.191.172.201
10.190.143.38
10.187.110.4
10.190.49.237
10.190.198.192
10.190.163.211

使用ansible将本机的key推送到所有机器上,实现从本机免密码登陆到所有机器

$ vim deploy_ssh_key.yml   #准备push ssh-key
- hosts: all
  gather_facts: no
 
  tasks:
  - name: install ssh key
    authorized_key: user=root
                    key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" 
                    state=present

继续阅读

Page 1 of 148123456...102030...Last »