Ops: 高效组合命令集合

简介

本篇博客收集一些常用的复杂命令组合,这些命令组合能够高效的定位、分析、处理一些问题,希望对需要的小伙伴有所帮助。

命令集合

批量备份文件

将名称为config.xml的文件查找出来,并在原目录备份

find /var/lib/jenkins/jobs -name config.xml | xargs -t -I '{}' /usr/bin/cp '{}' '{}.bak'

删除最后一行

将名称为config.xml的文件查找出来,并将该文件的最后一行删除

find /var/lib/jenkins/jobs -name config.xml | xargs -t -I '{}' sed -i '$d' {}

追加内容到指定文件

将名称为config.xml的文件查找出来,并将/data/scripts/post文件内容

find /var/lib/jenkins/jobs -name config.xml -exec bash -c "cat /data/scripts/post >> {}" ;

压缩文件同时排除某些文件

tar -zcvf marketdata.tar.gz marketdata/ --exclude 20190323*

一个文件内容插入到另一个文件

将test文本的内容插入到demo的第6行

sed -i '6 r test' demo
如果不知道行号,但是知道模式可以用

sed -i '/regex/ r test' demo # regex是正则表达式

如下文本 zimu.txt

aaaaa
#bbbbbb
cccccc
dddddd

用sed在aaa前加#注释

sed 's/^aaa/#&/' zimu.txt # &的意思是匹配任意字符(就是说未知数,啥都行) 这条命令是 替换以aaa开头的

用sed取消bbb前面的注释

sed 's/^#(bbb)/1/' zimu.txt #1的意思 就类似于 前面的 (bbb) 1就是复制这个位置的内容 如果有 第二个 那么久2就是复制第二个位置的内容

sed 可以在匹配的模式之前(i)或之后(a)增加一行或多行;在匹配的模式之前(i):

# sed -e ‘/123/ asolongg’ a.txt
1234569
solongg
abcABCabc
# sed -e ‘/123/ isolongg’ a.txt
solongg
1234569
abcABCabc

不换行输出时间

echo -n `date +%Y-%m%d-%H:%M-`

打印分隔符

for i in `seq 1 $COLUMNS`; do echo -n "+"; done

循环输出docker信息

docker ps | awk -F' ' '{print $NF}' | xargs -I {} bash -c "docker top {}"
docker ps | awk -F' ' '{print $NF}' | xargs -t -I '{}' docker top '{}'

批量替换文本

替换当前目录下文本中文本
sed -ig 's/text1/text2/g' ./*

测试TCP或UDP连接

nc -v 192.168.30.100 1200
nc -uv 192.168.30.100 1200

查看该目录下文件夹大小

du -sh ./* | sort -nr

统计显示网络连接状态的个数

netstat -ant | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

统计单个ip 80端口连接数量并排序,取前30名

netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n30

杀掉服务

ps -ef |grep CtpTradeServe |grep -v grep | awk '{print $2}'|xargs kill -9

命令行ip查询:

UNIX/Linux: #curl cip.cc  
Windows: >telnet cip.cc  
 >ftp cip.cc  
命令行查询(纯ip):  
UNIX/Linux: #curl ip.cip.cc  

监控到某一网站的网络状况

curl -o /dev/null -s -w %{http_code}-%{time_namelookup}-%{time_redirect}-%{time_pretransfer}-%{time_connect}-%{time_starttransfer}-%{time_total}-%{speed_download}"
" https://www.glinux.top  

ping监控

#!/bin/bash
while true; do
echo -n `date` "---> ">> /root/ping.txt; (ping 172.31.65.241 -c 1 -W 1|grep "from">> /root/ping.txt)  && (echo -n "" >> /root/ping.txt) || (echo "Fail.">> /root/ping.txt)
sleep 1
done

web ip访问日志统计

tail -n 1000000 www.glinux.top-access.log|grep '06/Sep/2018:08:'|awk '{print $1}'| sort |uniq -c|sort -nr
grep -r 11/Oct/2018:04: ./www*.glinux.top-access.log | awk '{print $1}'| sort |uniq -c|sort -nr

cnetos 7查看服务报错日志

journalctl -u 服务名

wget请求网页,功能类似curl,请求数据不保存为文件,直接cosole输出

wget -O - -q https://www.glinux.top/index.html

docker容器含有默认命令,重写默认命令,快速启动,退出销毁容器命令

docker run --name temp --rm -it --network host --entrypoint "" nervos/ckb:v0.22.0-rc3 bash
docker run -v `pwd`:/root/.celo --entrypoint /bin/sh -it us.gcr.io/celo-testnet/celo-node:alfajores -c "geth account new"

iptables 端口转发

# 放行转发流量(默认安装docker,会关闭到eth0的转发)
iptables -A FORWARD -o eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# 放行指定端口的转发流量
iptables -A FORWARD  -p tcp --dport 3000 -j ACCEPT
# 添加nat 转发,访问本主机2000端口会转发到172.16.131.35 的3000端口(:3000不加,默认会按dport 转发端口)
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2000 -j DNAT --to 172.16.131.35:3000
# 设置地址伪装,通过eth0转发出到172.16.131.35的流量会伪装原地址为本机(保证正常通信)
iptables -t nat -A POSTROUTING -d 172.16.131.35/32 -o eth0 -j MASQUERADE
# 端口重定向
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 18888 -j REDIRECT --to 8888

iptables 删除条目

查看iptables nat记录条目
iptables -L -n -t nat --line-number
删除iptables 条目
iptables -t nat -D PREROUTING 1
iptables -t nat -D POSTROUTING 20

tcpdump 使用

tcpdump -i eth0 tcp dst port 80 -nn -vvv #抓目的端口是80, 协议和端口数字化显示
tcpdump -i eth0 host 192.9.205.111 #抓取和该主机的通信
tcpdump -i eth0 -nn src host 192.9.205.111 # 抓取源为该主机的通信, 并数字化
tcpdump -i eth0 -nn  host 192.9.205.111 and 125.118.218.177 #仅抓他们两个的通信
tcpdump -i eth0 -nn  host 192.9.205.111 and (125.118.218.177 or 192.9.205.115) #抓取该主机和这两个IP的通信
tcpdump -i eth0 -nn -A tcp port 80 #抓取tcp 80的通信
tcpdump -i eth0 -nn -XX tcp port 80 #抓取通信, 并以ASCII显示链路层
tcpdump -i eth0 -nn -vv -XX tcp port 80 #更详细信息

nc 使用

# 测试端口是否通畅
~# nc -vz 172.31.44.178 30503
Connection to 172.31.44.178 30503 port [tcp/*] succeeded!
~# nc -vz 172.31.44.178 30504
nc: connect to 172.31.44.178 port 30504 (tcp) failed: Connection refused

使用iptables-persistent持久化iptables规则

sudo apt-get install iptables-persistent
# Ubuntu 14.04
sudo /etc/init.d/iptables-persistent save
sudo /etc/init.d/iptables-persistent reload
# Ubuntu 16.04
sudo netfilter-persistent save
sudo netfilter-persistent reload
# 规则保存位置

批量干掉一个进程

pgrep nginx |xargs -I '{}' kill '{}'

获取commit 和 commit time

# 可以连起来做容器Tag
➜  ansible git:(master) git log --pretty=format:"%ad" --date=short  | head -1
2020-06-17
➜  ansible git:(master) git rev-parse --short HEAD
9f9f8e5

流量查看工具

nethogs eth0

参考文档

sed命令:

jq命令:

curl命令:

使用iptables-persistent持久化iptables规则:

原文地址:https://www.cnblogs.com/William-Guozi/p/ops-command.html