網路 路由 抓包 iptables 相關
# 檢視路由閘道器資訊
ip route
# ip 地址資訊
ip -4 -o addr
# tcpdump 指定網路卡檢視包資訊
tcpdump -i <interface>
# 檢視當前iptables的所有規則
iptables-save -c
複製程式碼
確認網路埠相關
# 持續 ping 並將結果記錄到日誌
ping api.jpush.cn | awk '{ print $0"\t" strftime("%Y-%m-%d %H:%M:%S",systime()) } ' >> /tmp/jiguang.log &`
# 檢視tcp連線狀態
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
# 查詢80埠請求數最高的前20個IP
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20`
複製程式碼
# master_vip
master_vip='10.47.162.19'
port='6443'
result=`echo quit | timeout --signal=9 2 telnet $master_vip $port 2>&1 | grep -w 'Connected'`
echo $result
status=`echo $result | grep -wc 'Connected'`
if [ $status -eq 1 ]; then
echo -e '\\n$master_vip $port connected OK\\n'
else
echo "$master_vip $port connected NG\!\!" 1> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)
fi
# sys-node flannel
sys_nodes='
10.47.113.176
10.47.113.248
'
port='8472'
for sys_node in $sys_nodes; do
result=`nc -v -u -z -w 3 $sys_node $port 2>&1 | grep -w ''Connected`
echo $result
status=`echo $result | grep -wc 'Connected'`
if [ $status -eq 1 ]; then
echo -e "\\n$sys_node $port connected OK\\n"
else
echo "$sys_node $port connected NG\!\!" 1> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)
fi
done
# etcd
etcd_ips='
10.47.113.19
10.47.113.23
10.47.113.120
'
port='2379'
for etcd_ip in $etcd_ips; do
result=`echo quit | timeout --signal=9 2 telnet $etcd_ip $port 2>&1 | grep -w 'Connected'`
echo $result
status=`echo $result | grep -wc 'Connected'`
if [ $status -eq 1 ]; then
echo -e "\\n$etcd_ip $port connected OK\\n"
else
echo "$etcd_ip $port connected NG\!\!" 1> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)
fi
done
# docker_registry_proxy
registry_proxy_vip='10.47.160.116'
ports='80 443 8080 9090'
for port in $ports; do
result=`echo quit | timeout --signal=9 2 telnet $registry_proxy_vip $port 2>&1 | grep -w 'Connected'`
echo $result
status=`echo $result | grep -wc 'Connected'`
if [ $status -eq 1 ]; then
echo -e "\\n$registry_proxy_vip $port connected OK\\n"
else
echo "$registry_proxy_vip $port connected NG\!\!" 1> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)
fi
done
複製程式碼
rpm、yum相關
# 查詢是否有安裝某個軟體
rpm -qa jen*
# 列出軟體的檔案內容
rpm -aql jenkins*
複製程式碼
查詢檔案相關
替換目錄中CR(\r\n)換行符為R(\n)換行符
$ find ./ -type f | xargs -n1 -I {} sed -i 's@\r@@g' {}
$ find ./ -maxdepth 1 -type f | xargs -n1 -I {} sed -i 's@\r@@g' {}
find與grep結合使用,從多個檔案中搜尋關鍵字並顯示檔名
$ find ./ -type f -print | xargs grep 'hoge'
排除某個目錄,排除多個指定目錄
# 排除多個目錄
$ find SRC-PATH -path 'IGNOR-PATH' -prune -o -path 'IGNOR-PATH2' -prune -o -print
# 另一種方式,使用!邏輯操作符
$ find SRC-PATH ! -path 'IGNOR-PATH*' ! -path 'IGNOR-PATH2*' -print
複製程式碼
程式資訊相關
# 找出當前系統記憶體使用量較高的程式
ps -aux | sort -rnk 4 | head -20
# 找出當前系統CPU使用量較高的程式
ps -aux | sort -rnk 3 | head -20
複製程式碼
停啟程式
#!/bin/bash
services=(
kubelet
kube-proxy
docker
flanneld
)
for service in ${services[@]} ; do
systemctl stop $service
done
services=(
flanneld
docker
kube-proxy
kubelet
)
for service in ${services[@]} ; do
systemctl start $service
done
複製程式碼
磁碟清理相關
因為/data/archive
是 NFS 網盤,整理本地硬碟的資料不需要包含進去,因此用du --excluede
來排除一邊不檢查此 FS。
alias dua="du --exclude=/data/archive --exclude=/hash -sh * |sort -hr"
重定向、管道相關
# 使用while read line語句,將程式標準錯誤stderr用紅色字型列印
COMMAND 2> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)
# 應用篇 用紅色字型列印
echo "$master_vip $port connected NG\!\!" 1> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)
複製程式碼
ansible相關
ansible 語法檢查
# 列出主機
$ ansible-playbook -i HOSTS_FILE --list-hosts PLAYBOOK_FILE
# 語法檢查
$ ansible-playbook --syntax-check PLAYBOOK_FILE
# 列出task
$ ansible-playbook -i HOSTS_FILE --list-tasks PLAYBOOK_FILE
# 檢查語法是否正確
$ ansible-playbook --check PLAYBOOK_FILE
複製程式碼
golang相關
# Mac 下編譯 Linux 和 Windows 64位可執行程式
$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
# Linux 下編譯 Mac 和 Windows 64位可執行程式
$ CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
# Windows 下編譯 Mac 和 Linux 64位可執行程式
$ SET CGO_ENABLED=0
$ SET GOOS=darwin
$ SET GOARCH=amd64
$ go build main.go
$ SET CGO_ENABLED=0
$ SET GOOS=linux
$ SET GOARCH=amd64
$ go build main.go
複製程式碼
GOOS:目標平臺的作業系統(darwin、freebsd、linux、windows) GOARCH:目標平臺的體系架構(386、amd64、arm) 交叉編譯不支援 CGO 所以要禁用它
上面的命令編譯 64 位可執行程式,你當然應該也會使用 386 編譯 32 位可執行程式 很多部落格都提到要先增加對其它平臺的支援,但是我跳過那一步,上面所列的命令也都能成功,且得到我想要的結果,可見那一步應該是非必須的,或是我所使用的 Go 版本已預設支援所有平臺。
helm 相關
cd /data/helm/all-chart/34a2b228-a5f7-4b17-ae67-b9aaf804073c/
cd palite-sharecloud-stg2_0.0.1
file_to_sed=`find ./ -type f -print | xargs grep 'palite-aggregate1.0.0' | awk -F: '{print $1}'`
echo $file_to_sed
app_name=`ls | sed -ne 's/-stg2//gp'`
app_name=$app_name'1.0.0'
echo $app_name
for file in `echo $file_to_sed`; do
sed -i "s/palite-aggregate1.0.0/$app_name/g" $file
done
file_to_sed=`find ./ -type f -print | xargs grep 'paliteaggregate' | awk -F: '{print $1}'`
app_name=`ls | sed -ne 's/-stg2//g; s/-//gp'`
for file in `echo $file_to_sed`; do
sed -i "s/paliteaggregate/$app_name/g" $file
done
file_to_sed=`find ./ -type f -print | xargs grep 'shb-dmz-stg-ae5a45f9' | awk -F: '{print $1}'`
for file in `echo $file_to_sed`; do
sed -i "s/shb-dmz-stg-ae5a45f9/shb-dmz-stg-f7847ac7/g" $file
done
複製程式碼
docker 相關
# build -t標記選項,在建立映象檔案的同時打標籤 . 為使用當前目錄下Dockerfile檔案為Dockerfile
docker build -t hub.yun.paic.com.cn/library/go-server:latest .
# run --expose 指定暴露埠,expose在應用上一般只是作為哪個埠提供哪個服務的提示,在宿主機上並不能訪問到此埠。
docker run --expose 9860 -t -i --rm hub.yun.paic.com.cn/library/go-server sh
# run -p 釋出埠,127.0.0.1:9860為宿主機埠。
docker run -p 127.0.0.1:9860:9860/tcp --rm hub.yun.paic.com.cn/library/go-server
# 列出所有映象
docker images -a
# 刪除映象
docker rmi Image Image
# 刪除所有不再被使用的資料(按照順序: 停止的容器,沒有容器使用的卷,沒有容器使用的映象)。如果要刪除從未被使用的資料,可以使用'-a'引數。
docker system prune
# 另外還有:
docker container prune
docker image prune
docker network prune
docker volume prune
複製程式碼
kubernetes 相關
# list pods
n_namespace=$(grep -iw namespace /root/.kube/config | cut -d':' -f2 | sed 's/^ *//g')
kubectl get pods --namespace=<namespace>
# get node show-label
kubectl get nodes --show-labels | sed -n '1p;/\<30\.4\.171\.24\>/p'
# create resource
# check yaml errors
kubectl create --dry-run --validate -f ./go-server.yaml
# use --record 來記錄resource被執行過的命令,命令會被記錄在resource的annotation的kubernetes.io/change-cause當中。
kubectl create -f ./go-server.yaml --record
# create configmap using file as content
kubectl create configmap nginx --namespace=shb-dmz-qiye-portal-stg-9d135f6b --from-file=./nginx.conf
# kill pod forcibly
kubectl -n shb-sf-stg-046a2940 delete pods sps-search-service-74fddcdfc-lbf7n --grace-period=0 --force
# watch log
kubectl logs -f --tail=100 traefik-ingress-lb-9qdhv -n kube-system
# enter container
kubectl exec falcon-caas-watcher-5d6b5874-wsdcw --namespace=kube-system -i -t -- bash -il
# copy content from container to host filesystem
kubectl cp itax-core-taxation-6857465f7f-jl7gb:/root/heap.hprof /tmp/itax-core-taxation_heap_30.4.171.20.hprof --namespace=shb-sf-stg-cf156ca8
# kubectl jsonpath
# 檢視當前叢集網路使用的所有子網 podCIDR
kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}'
# kubectl json
$ kubectl get no -o json \
| jq '.items[] | { node_ip: .metadata.labels."kubernetes.io/hostname", host_name: .metadata.labels.host_name, labels: .metadata.labels }' \
| grep -v -e 'beta.kubernetes.io/arch' -e 'beta.kubernetes.io/os' -e 'kubernetes.io/hostname'
# go-template
# write below to a file named 'nodes-taints.tmpl'
{{printf "%-50s %-12s\n" "Node" "Taint"}}
{{- range .items}}
{{- if $taint := (index .spec "taints") }}
{{- .metadata.name }}{{ "\t" }}
{{- range $taint }}
{{- .key }}={{ .value }}:{{ .effect }}{{ "\t" }}
{{- end }}
{{- "\n" }}
{{- end}}
{{- end}}
# then reference like this:
kubectl get nodes -o go-template-file="./nodes-taints.tmpl"
# you'll get output like so:
Node Taint
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal dedicate=etcd:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal dedicate=jenkins:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal dedicate=etcd:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal dedicate=containerlinux-canary-channel-workers:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal dedicate=jenkins:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal dedicate=etcd:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal dedicate=etcd:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal dedicate=etcd:NoSchedule
ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal dedicate=jenkins:NoSchedule
複製程式碼