iptables delete some rules form a chain

以下两条命令均可用

iptables -t nat -L PREROUTING --line-numbers | grep RULE_NAME | cut -d" " -f 1 | xargs iptables -t nat -D PREROUTING

for i in $(iptables -t nat -nvL PREROUTING --line-numbers | grep RULE_NAME | grep ^[0-9] | awk '{ print $1 }' | tac); do iptables -t nat -D PREROUTING $i; done

How to run a crontab job every X seconds

如果你有一个job, 需要每隔5秒运行一次.

以下写法是错误的

* * * * * sleep 5; /bin/cmd

如果使用这种写法, 会导致在每分钟的第0秒开始, sleep 5秒以后, 再运行/bin/cmd, 然尔运行完就结束了, 不会每隔5秒运行一次.

正确写法1

* * * * * for i in {1..12}; do /bin/cmd; sleep 5; done

正确写法2

* * * * * REMAIN=60 INC=5 ; while ; do /bin/cmd; sleep $INC; REMAIN=$(($REMAIN - $INC)); done

正确写法3

* * * * * /bin/cmd
* * * * * sleep 5; /bin/cmd
* * * * * sleep 10; /bin/cmd
* * * * * sleep 15; /bin/cmd
......
* * * * * sleep 55; /bin/cmd

可以使用systemctl status cron.service -l命令看看cron服务的状态以及最新日志.

参考: How to run a cronjob every X seconds in cron

Linux get DevName of a directory

Linux系统下, 获得某一个子目录(例如/data/home/release )对应的DevName(如sdb等). 现在的情况是

有些机器是这样的

Filesystem      Size  Used Avail Use% Mounted on
......
/dev/sda5       1.6T  343G  1.2T  23% /data

而有些机器是这样的

Filesystem      Size  Used Avail Use% Mounted on
......
/dev/sda5       1.6T  343G  1.2T  23% /data
/dev/sdb        488M   56M  408M  12% /data/home/release

解决办法

part=`df -P /data/home/release | awk 'END{print $1}'`    #得到一个诸如/dev/sda3的字符串
devname=${part:5:3}             #切割上面的字符串,从第5位开始,取3位
echo $devname

在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,cmd    #打印出所有进程(-e)的PID,启动时间
3428 Mon Nov  6 20:55:20 2017 /sbin/udevd -d
3495 Mon Nov  6 20:55:22 2017 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
3508 Mon Nov  6 20:55:22 2017 /usr/sbin/nscd
3532 Mon Nov  6 20:55:29 2017 /usr/sbin/snmpd -LS 2 d -Lf /dev/null -p /var/run/snmpd.pid -a
3548 Mon Nov  6 20:55:29 2017 /usr/sbin/sshd
3557 Mon Nov  6 20:55:29 2017 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
3568 Mon Nov  6 20:55:29 2017 crond


#依次打印出某进程的pid,uid,user,启动时间,持续时间,占用CPU时间(cputime),以及cmd
$ ps -eo pid,euid,euser,lstart,etime,cputime,cmd | grep searcher_server
 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