检查端口占用

lsof -i:[port]

netstat -anp |grep [port]

监控网络客户TCP连接数

netstat -anp | grep tcp |wc -l

获取某进程中运行中的线程数量

ls /proc/[PID]/task | wc -l

输出进程内存的状况,分析线程堆栈

pmap

统计文档容量

du -sh [目录|文件|正则]
例如:查看日志文件大小,从而判定日志是否被入侵者清理掉。
du -sh /var/log/*

查看文件系统挂载点容量

df -h |grep /dev/

Linux排查大文件

cd [目录];

du -h --max-depth=1;

查看磁盘分区信息

root> # 查看挂载哪些磁盘
root> df -h |grep /dev/
root> # 选择其中一块磁盘
root> fdisk -l /dev/xvda2

列出系统中已被格式化的设备

blkid

查询 Ext 家族 superblock 信息

dumpe2fs [-bh] 设备文件名

有用的快捷键

服务器所有网卡带宽使用情况

iftop <-i [interface]>

查看内核日志

tail -f /var/log/messages

查看账号登录操作日志

tail -f /var/log/secure

统计服务器进程数量

ps -aux|wc -l

查看全部容器资源使用情况

docker stats $(docker ps -a --format="{{.Names}}")

统计cpu处理器数量

grep "model name" /proc/cpuinfo | wc -l

查询ip讯息

ifconfig eth0 | grep 'inet'

ifconfig eth0 | grep 'inet' | sed 's/.inet//g' | sed 's/netmask.$//g'

通过脚本设置密码

echo "999999" | passwd --stdin "justmine"

重启系统网络

/etc/init.d/network restart

查看主机启动了哪些网络服务

netstat -tulnp

备注:这个命令很有用,可以一目了然地看出主机开放了哪些端口,以及端口是否对整个Internete开放,占用的应用程序。

查看网络请求连接数,比如监听端口8083

netstat –nat | grep 8083

kubernetes 清理空的副本集(Replica Set)

#!/bin/bash

IFS=$'\n\n'

declare namespace="namespace"
for row in $(kubectl -n ${namespace} get rs)
do
# echo ${row}
declare name=$(echo "${row}"|awk '{print $1}')
declare desired=$(echo "${row}"|awk '{print $2}')
# echo "replica set: ${name}, desired: ${desired}"
if [ $((${desired})) == 0 ]; then
# echo ${name}
kubectl -n ${namespace} delete rs ${name}
fi
done

备注:替换成自己的namespace即可。

判断kubernetes是否准备就绪

以deployment为单位,准备就绪的条件为实例的当前数量、期望数量、最新数量相等,间隔10秒watch一次。可以将该脚本加入CI/D管道中。

#!/bin/bash

IFS=$'\n\n'

#1: ready, 0: not ready.
declare ready=0 while [ $((${ready})) == 0 ]
do
sleep 10s
echo ""
declare AllIsReady=1
for row in $(kubectl -n [namespace] get deployment)
do
echo ""
declare name=$(echo "${row}"|awk '{print $1}')
declare desired=$(echo "${row}"|awk '{print $2}')
declare current=$(echo "${row}"|awk '{print $3}')
declare uptodate=$(echo "${row}"|awk '{print $4}')
declare available=$(echo "${row}"|awk '{print $5}')
echo "deployment: ${name}, desired: ${desired}, current: ${current}, uptodate: ${uptodate}, available: ${available}"
if [ $((${desired})) == $((${current})) -a $((${current})) == $((${uptodate})) -a $((${uptodate})) == $((${available})) ]; then
echo "${name} has been ready.";
else
echo "${name} has been not ready.";
AllIsReady=0
fi
done if [ $((${AllIsReady})) == 1 ]; then
ready=1
fi
done

备注:替换成自己的namespace即可。其他的资源类型同理,大家可以举一反三。

Linux获取UUID

cat /proc/sys/kernel/random/uuid

mysql还原数据库,后台静默运行。

nohup mysql -S /home/mysql/port-3306/3306_mysql.sock -h[domain name] -P3306 -u[user name] -p[password] [database name] < [databaseBackupedsql file full path] >/dev/null 2>&1 &

docker 统计资源占用情况

docker system df

kubernetes 统计资源占用情况(CPU、内存)

kubectl top node

kubectl top pod --all-namespaces

备注:此命令需要先安装metrics_server

Linux 查看隐藏进程,使其现出原形。

echo "" > /etc/ld.so.preload

top

备注:排查隐藏的挖矿程序。

Linux配置SSH互信

客户机:192.168.1.113,服务器:192.168.13.110,用户:root。

目的

让客户机可以免密登录服务器。

步骤

1. 在客户机(192.168.1.113)上生成一对SSH密钥、公钥。

ssh-keygen -t rsa 或 ssh-keygen -b 4096 -t rsa

备注:-t表示密钥类型,-b表示密钥长度,默认1028。可以一路【回车】到底,也可以输入SSH密钥的加密密码,即pub_key。

2. 将SSH公钥上传到服务器(192.168.13.110)

ssh-copy-id root@192.168.13.110

备注:这一步需要输入服务器账户root的密码。

2.1. 异常处理

如果发生ERROR: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!等错误,执行命令:

ssh-keygen -R 192.168.13.110

然后再次执行命令ssh-copy-id root@192.168.13.110

注意:如果在步骤1输入了公钥Key,那么第一次SSH登录时,需要输入SSH密钥的加密密码

从Linux远程服务器下载和上传文件。

从服务器(192.168.1.110)下载指定文件(/home/mysql.tar.gz)到客户机指定目录(/home/mysql)。

scp root@192.168.1.110:/home/mysql.tar.gz /home/mysql

备注:输入服务器root用户密码开始下载。

客户机上传指定文件(/root/mysql.tar.gz)到服务器(192.168.1.110)的指定目录(/home/mysql)。

scp -r /root/mysql.tar.gz root@192.168.1.110:/home/mysql

备注:需要先配置SSH互信,参照上面【Linux配置SSH互信】配置即可。

linux shell脚本按长度获取本机指定端口范围内的可用端口数。

#!/bin/bash

IFS=$'\n\n'

function check_port() {
netstat -tlpn | grep "\b$1\b"
} function getAvailablePorts()
{
echo "port range[$1 $2], the size of available ports: $3"
declare ports=$(seq $3)
declare index=0
for((i=$1;i<$2;i++));
do
if check_port $i; then
echo "$i port has been occupied"
else
ports[$index]=$i
let index++
if [ $(($index)) == $(($3)) ]; then
break
fi
fi
done echo ${ports[*]}
} declare ports=$(getAvailablePorts 30000 32767 10)
echo "the available ports of kubernetes is: ${ports[*]}"

测试用例:按长度获取kubernetes noteport端口范围内的可用端口数。

调用其它shell文件脚本的函数

首先引入其他shell脚本文件,比如:. ./getAvailablePorts.sh。语法:. [filepath]。然后就可以像本地一样调用函数,比如:declare ports=$(getAvailablePorts 30000 32767 10)。

linux shell 解析json数组

示例

#!/bin/bash
IFS=$'\n\n' declare routes=$(curl -X GET http://127.0.0.1:81/services/light/routes)
echo $routes
declare JQ_EXEC=`which jq`
declare routeid=$(echo $routes | ${JQ_EXEC} .data[0].id | sed 's/\"//g')
echo ""
echo $routeid

单个对象属性

.[对象名],例如:.data。

Json数组某个对象属性值

.[对象名][下标].属性名,例如:.data[0].id。

利用kubernetes傻瓜式迁移elasticsearch数据。

apiVersion: apps/v1
kind: Deployment
metadata:
name: nodejs-hello-world
namespace: tools
spec:
selector:
matchLabels:
app: nodejs-hello-world
replicas: 1
template:
metadata:
labels:
app: nodejs-hello-world
spec:
containers:
- name: nodejs-hello-world
image: taskrabbit/elasticsearch-dump
imagePullPolicy: Always
ports:
- containerPort: 3000
args:
- "--input=http://192.168.1.123:9200"
- "--output=http://192.168.1.123:9200"
- "--type=data"

备注:input表示旧地址,output表示新地址;创建Deployment,将自动执行,全程无需参与,也不用安装nodejs的环境npm。

Linux shell脚本调试,即打印整个执行过程

sh -x [shell文件路径]

Linux shell curl 弹性http请求

# 允许整个操作花费的最大秒数。
declare maxTime=10
# 最大连接时间
declare maxConnectTime=2
# 重试次数
declare retryCount=5 # 示例
curl --request GET --connect-timeout $maxConnectTime --max-time $maxTime --retry $retryCount --url [API地址]

同步Linux服务器标准时间

yum install ntp -y;
ntpdate cn.pool.ntp.org;

Linux shell 转义Json

yum install jq -y;
cat [json file full name] | jq tostring

Dockerfile设置中国标准时区(CST)

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

kubernetes起一个临时的MySql客户端,通过内部dns直接访问MySql服务器,无需额外开放端口,如NodePort:

kubectl run mysql-client-cluster --image=mysql:5.7 -i -t --rm --restart=Never --\
mysql -h "server dns name" -P"端口" -u 用户名 -p'密码' -e "执行的sql语句"

备注:当测试部署到kubernetes中的mysql时,很有用。

查看MySql当前进程信息

show full processlist

linux shell function返回值

function pass_back_a_string() {
eval "$1='foo bar rab oof'"
} return_var=''
pass_back_a_string return_var
echo $return_var

备注:不要将eval写成echo,亲测可用,通过return \(?、\)()获取返回值都是不行的。

删除kafka消费组

bin/kafka-consumer-groups.sh --bootstrap-server <cluster-addr-list> --delete --group <group-name>
示例:
bin/kafka-consumer-groups.sh --bootstrap-server 182.168.1.12:4523,182.168.1.13:4524 --delete --group tianmao.production

备注:此命令只适用于新版kafka,删除前,先去zookeeper查询ls /consumers,没数据,即代表kafka未将消费组元数据存储到zookeeper;只有旧版本kafka消费组元数据会储存到zookeeper,删掉zookeeper对应的元数据即可。

Linux shell 删除内容第一行数据

# 比如:删除目录列表第一行total汇总信息
ls -l /root | awk 'NR>1'

Linux shell 字符串全部替换

function Replace()
{
declare input=$1
declare sourceExpr=$2
declare targetExpr=$3
declare output=${input//${sourceExpr}/${targetExpr}}
eval $4=${output}
}
# 例子
Replace "microservice-autodevopspipeline-v0" '-' '.' value
echo ${value}

Linux shell 字符串转小写

function ToLower()
{
declare input=$1
declare output=($(echo "${input}" | tr 'A-Z' 'a-z'))
eval $2=${output}
}
# 例子
ToLower "Microservice-Autodevopspipeline-V0" value
echo ${value}

Linux shell 动态变量取值

#!/bin/bash

function DynamicVariableValueOf()
{
declare prefix=$1
declare suffix=$2
eval "output=\$$prefix$suffix"
eval $3=${output}
}
# 例子
BasketPublishable="1"
DynamicVariableValueOf "Basket" "Publishable" value
echo ${value}

Linux shell 首字母大写

#!/bin/bash

function FirstCharUpperCase()
{
declare input=$1
declare output=($(echo ${input} | sed -e "s/\b\(.\)/\u\1/g"))
eval $2=${output}
} # 例子
FirstCharUpperCase "foo" value
echo ${value}

GitLab调试CI管道脚本

# 设置
CI_DEBUG_TRACE: "true"
# 开启Job调试参考脚本
staging-k8s-configmap_job:
stage: staging-k8s-configmap
variables:
CI_DEBUG_TRACE: "true"
......
# 开启全局调试
项目仓库 => setrings => ci/cd => Secret variables =>
添加变量:CI_DEBUG_TRACE: "true"

参考链接:https://docs.gitlab.com/ce/ci/variables/README.html

Linux shell 去掉第一行标题

# 设置
awk 'NR > 1'
# 例子
kubectl -n microservice-autodevopspipeline-v1 get rs|awk 'NR > 1'

RabbitMQ 添加管理员并授权

# 1. 添加用户
rabbitmqctl add_user username password # 2. 设置用户角色为管理员
rabbitmqctl set_user_tags username administrator # 3. 列举所有用户
rabbitmqctl list_users # 4. 授权
rabbitmqctl set_permissions -p / username '.*' '.*' '.*' # 5. 查看权限
## 指定用户
rabbitmqctl list_user_permissions username
## 所有用户
rabbitmqctl list_permissions # 6. 清除权限
rabbitmqctl clear_permissions [-p VHostPath] username

MySql 查看锁情况

# 锁的概况
select * from information_schema.innodb_locks;
# InnoDB整体状态,其中包括锁的情况。
show engine innodb status;
# 查看隔离级别
## 全局
select @@global.tx_isolation
## 本次会话
select @@tx_isolation;

kubernetes 几大组件排查及重启(仅限二进制服务形式安装参考)

## 调度
systemctl status kube-scheduler
systemctl restart kube-scheduler
## 网络
systemctl status kube-proxy
systemctl restart kube-proxy
## 代理办事人
systemctl status kubelet
systemctl restart kubelet
## 控制管理器
systemctl status kube-controller-manager
systemctl restart kube-controller-manager
## api-server
systemctl status kube-apiserver
systemctl restart kube-apiserver

Linux 查看机器最近成功和最后一次不成功的登录事件

lastlog

Linux 查看机器当前登录的全部用户

who

Linux 查看机器创建以来登陆过的用户

last

Linux 分析/var/log/secure

cat /var/log/secure | grep -i "accepted password"

Linux 查看文件被哪些进程所打开

lsof | grep /var/log/secure

kubernetes 平滑地启动一个应用

# 示例:
kubectl run busybox -it --image=busybox --restart=Never --rm

kubernetes 查询kube-proxy运行模式(ProxyMode:iptables)

# 在master主机执行命令
# Kube-proxy 通过一个 proxyMode endpoint 暴露它的模式
curl localhost:10249/proxyMode

kubernetes 获取yaml或json文件项值

# 获取服务nodeport
kubectl -n [命名空间] get -o jsonpath="{.spec.ports[0].nodePort}" services [服务名称]
# 获取node ip地址
kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }'

Linux修改网关、dns

# 文件
vi /etc/network/interfaces
# 重启
/etc/init.d/networking restart

MySql修改表结构,添加平滑检查(存在即添加,不存在则不受影响)

	/*============== 示例:订单表(orders)新增列(createtime) =====================*/
drop procedure if exists schema_change;
delimiter ';;'
create procedure schema_change() begin if not exists (select * from information_schema.columns where table_name = 'orders' and column_name = 'createtime') then
alter table orders add column `createtime` tinyint(1) DEFAULT '0' COMMENT '创建时间';
end if; end;; delimiter ';'
call schema_change();
drop procedure if exists schema_change;

MySql flush hosts

如果同一个ip(host)在短时间内产生大量错误数据库连接,达到阈值max_connection_errors时,MySql将阻塞新建立的连接,解决方法如下:

# 连接Mysql数据库执行如下命令:
## 方法一 (治标)
show variables like '%max_connection_errors%';
set global max_connect_errors = 新阈值;
## 方法二(治本)
mysqladmin -u usename -p'password' -h host -Pport flush-hosts;

MySql 查看日志

# 开启日志
SET global general_log = 1;
SET global log_output = 'table'; # 查看日志
SELECT * FROM mysql.general_log ORDER BY event_time DESC LIMIT 100; # 停止日志(日志对性能影响较大,生产环境除排查问题外,不建议开启)
SET global general_log = 0;

(PostgreSQ) 切换/选择数据库架构模式 - switch/select scheme

select [scheme name]

PgSql创建、删除、查看索引。

select * from pg_indexes where tablename='表名';
DROP INDEX {数据库架构}.{索引名称};
CREATE UNIQUE INDEX {索引名称}ON {数据库架构}.{表} USING btree (列,列);

Docker快速清理方案

# 删除所有停止的容器
docker container prune;
# 删除所有停止的资源(容器、镜像、IO)
docker system prune -af;

排查PostgreSQL高CPU的Sql语句

命令:top;
键盘操作:shift+p,根据CPU排序
命令:psql -U [用户名] -d [数据库] -p[端口] -h [主机]
键盘操作:shift+insert,输入密码
命令:SELECT procpid, START, now() - START AS lap, current_query FROM ( SELECT backendid, pg_stat_get_backend_pid (S.backendid) AS procpid,
pg_stat_get_backend_activity_start (S.backendid) AS START,pg_stat_get_backend_activity (S.backendid) AS current_query FROM (SELECT
pg_stat_get_backend_idset () AS backendid) AS S) AS S WHERE current_query <> '<IDLE>' and procpid=[CPU高的PgSql进程号] ORDER BY lap DESC;

备注:进程号可能会频繁变动,请快速处理。

最新文章

  1. Cordova - 常用的插件汇总(附插件的安装、查询、更新、删除等命令)
  2. 用sass画蜗牛
  3. Java socket 多线程编程 示例
  4. --hdu 1231 最大连续子序列(动态规划)
  5. bzoj1059: [ZJOI2007]矩阵游戏
  6. hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值
  7. An easy way to syncTime using C#
  8. springCloud四:熔断器ribbon--Hystrix
  9. Web常见漏洞修复建议
  10. .eslintrc文件配置
  11. caffe boost cuda __float128 undefined
  12. 9、socket.io,websocket 前后端实时通信,(聊天室的实现)
  13. &lt;时间的玫瑰&gt;读书笔记
  14. python 利用turtle库绘制五角星
  15. Linux(CentOS)安装JDK(.tar.gz)并配置
  16. MySQL学习笔记:like和regexp的区别
  17. 线程互斥,mutex
  18. 三.jQuery源码解析之jQuery的框架图
  19. Vue SPA应用中使用Layer的iframe 弹出层,并且传值
  20. using namespace cv

热门文章

  1. springboot中使用分页,文件上传,jquery的具体步骤(持续更新)
  2. 测试驱动开发 TDD
  3. JAVA 第一张 使用记事本编写代码
  4. win10更新失败——适用于Windows 10 Version 1709 的03累积更新,适合基于x64系统(KB4088776)更新失败
  5. Stack和Vector源码分析
  6. 0510JS流程语句
  7. ElasticSearch本地调测环境构建
  8. CDH简易离线部署文档
  9. .NET开发设计模式-获取某个接口下面所有的派生类
  10. Python_将指定文件夹中的文件压缩至已有压缩包