常用命令
大约 15 分钟约 4386 字...
k8s
资源
kubectl cluster-info # 显示集群端点和服务信息
kubectl get nodes -n <ns> # 查看节点列表
kubectl get pods -n <ns># 查看Pod列表
kubectl get svc -n <ns># 查看Service列表
kubectl get deployments -n <ns> # 查看Deployment列表
kubectl get ingress -n <ns> # 查看Ingress列表
kubectl get ep -n <ns> # 查看Endpoint列表
kubectl get pv,pvc -n <ns> # 查看持久卷和持久卷声明
kubectl describe pod <name> # 查看Pod详细信息
kubectl describe node <name> # 查看节点详细信息
kubectl describe endpoints <name> # 查看EP详细信息
# 创建资源
kubectl apply -f <yaml_file> # 通过YAML文件创建/更新资源
kubectl create deployment <name> --image=<image> # 创建Deployment
kubectl expose deployment <name> --port=80 --type=NodePort # 创建Service
# 删除资源
kubectl delete -f <yaml_file> # 删除YAML定义的资源
kubectl delete pod,svc <name1,name2> # 删除Pod和Service
kubectl delete deployment <name> # 删除Deployment
# 合并秘钥
cat xxx_public.crt xxx_chain.crt > xxx.crt
# 创建秘钥
kb create secret tls xxx-tls-ingress-secret --cert=xxx.crt --key=xxx.key
# 查看秘钥
kb get secret xxx-tls-ingress-secret -o yaml
调试
kubectl logs <pod_name> # 查看Pod日志
kubectl logs -f <pod_name> # 实时跟踪日志
kubectl exec -it <pod_name> -- sh # 进入Pod容器
kubectl exec <pod_name> -- cat /etc/hosts # 执行容器内命令
#测试容器是否能连通coral-mysql、coral-redis
kb exec -it config-6ddc78c679-d6r2x -- nc -zv coral-mysql 3306
kb exec -it config-6ddc78c679-d6r2x -- nc -zv coral-redis 6379
# DNS解析
kb exec -it config-6ddc78c679-d6r2x -- nslookup coral-ck
# 网络是否通
kb exec -it config-6ddc78c679-d6r2x -- nc -zv coral-ck 8123
# EP的状态
kb describe ep coral-ck
# 验证端口是否通
nc -zv 目标域名 3306
helm
资源
# config
hl upgrade config --set deploy.image.tag=v1.3.7_lch /data/estate-field-lch-deploy/estate-chart -f /data/estate-field-lch-deploy/service/platform/coral-config-service.yaml --install
调试
#验证chart是否遵循最佳实践的首选工具。
helm lint
# 在本地测试渲染chart模板。
helm template --debug
# 我们已经看到过这个技巧了,这是让服务器渲染模板的好方法,然后返回生成的清单文件。
helm install --dry-run --debug
# 这是查看安装在服务器上的模板的好方法。
helm get manifest
探活设置
service:
type: ClusterIP
serports:
- name: http
port: 8301
targetport: 8301
#健康检查
readinessProbe:
enabled: true
check:
httpGet:
path: "/actuator/health"
port: 8301
periodSeconds: 30
timeoutSeconds: 3
initialDelaySeconds: 60
successThreshold: 1
failureThreshold: 8
livenessProbe:
enabled: true
check:
httpGet:
path: "/actuator/health"
port: 8301
periodSeconds: 30
timeoutSeconds: 3
initialDelaySeconds: 60
successThreshold: 1
failureThreshold: 8
探针配置详解
就绪探针(readinessProbe)
就绪探针用于判断容器是否已经准备好接收外部请求。当探测成功时,Kubernetes 才会将流量转发给该容器所在的 Pod。
enabled: true:启用就绪探针功能。
httpGet:通过 HTTP 请求进行探测。
path: "/actuator/health":探测路径,Spring Boot 应用通常会暴露 /actuator/health 端点用于健康检查。
port: 8301:容器内服务监听的端口。
periodSeconds: 30:每 30 秒执行一次探测。
timeoutSeconds: 3:探测请求超时时间为 3 秒。
initialDelaySeconds: 60:容器启动后 60 秒才开始执行第一次探测,避免在应用启动过程中误判。
successThreshold: 1:连续 1 次探测成功即认为容器就绪。
failureThreshold: 8:连续 8 次探测失败才认为容器未就绪。
存活探针(livenessProbe)
存活探针用于判断容器是否仍在正常运行。如果探测失败,Kubernetes 会重启容器。
enabled: true:启用存活探针功能。
httpGet:通过 HTTP 请求进行探测。
path: "/actuator/health":探测路径,与就绪探针相同。
port: 8301:容器内服务监听的端口。
periodSeconds: 30:每 30 秒执行一次探测。
timeoutSeconds: 3:探测请求超时时间为 3 秒。
initialDelaySeconds: 60:容器启动后 60 秒才开始执行第一次探测。
successThreshold: 1:连续 1 次探测成功即认为容器存活。
failureThreshold: 8:连续 8 次探测失败才认为容器需要重启。
redis
验证连通性
sudo yum install epel-release
sudo yum install redis
redis-cli -h xxx -p 6379 -a "password"
rabbitmq
# 验证服务状态
systemctl status rabbitmq-server
# 停止服务
systemctl stop rabbitmq-server
# 启动服务
systemctl start rabbitmq-server
# 查看日志
journalctl -u rabbitmq-server -n 50 --no-pager
jdk
jstat命令--通常做优化使用
jstat查看jvm里面Eden区、S区、老年代的内存情况,以及YGC和FGC的执行次数和耗时
S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU:Eden区容量和使用量 ,单位KB
OC、OU:年老代容量和使用量 ,单位KB
MC、MU:永久代容量和使用量 ,单位KB
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间,单位是秒
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间,单位是秒
GCT:垃圾回收消耗总时间,单位是秒
# 每1秒输出一次,共输出10次
# 注意对准每一列,显示结果可能会错列
jstat -gc <pid> 1s 10

分析结果
1.Young GC的触发频率和每次耗时:总共执行了478次年轻代回收,总共耗时13.675秒
2.Full GC的触发时机和耗时:总共执行了5次老年代回收,总共耗时1.908秒
3.新生代对象增长速率:EU这一列观察,10秒增加了895-726=169M空间,
nginx
#检查 Nginx 服务的状态
systemctl status nginx
#重启命令
systemctl restart nginx
#重新加载配置文件
systemctl reload nginx
# 重启Nginx
sbin/nginx -s reload
proxy_pass配置加不加斜杠

linux
便捷
1.配置命令行的自动补全及快捷命令:
# 编辑 bash 的配置文件(具体编辑内容见下方描述)
vim ~/.bashrc
# 使配置文件生效
source .bashrc
# kubectl 快捷命令
alias kb='kubectl --namespace=gt-gc'
# kubectl 自动补全
source <(kubectl completion bash)
# helm 快捷命令
alias hl='helm --namespace=gt-gc'
# helm 自动补全
source <(helm completion bash)
#解决 CentOS 7 仓库失效问题
# 下载阿里云的CentOS 7仓库配置
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清理yum缓存
yum clean all
# 重建缓存(获取新仓库信息)
yum makecache
资源
# 查看 CPU 核心数
nproc
#查看磁盘及分区,type是disk的就是物理磁盘
lsblk
# 查看内存
free -h
# 查看当前目录内存占用
du -sh ./*
# 查看root目录内存占用
du -sh /root/*
# 检查 swap
swapon --show
挂载
以下是在 Linux 系统中挂载新磁盘分区的步骤(以 Ubuntu/Debian 为例,其他发行版类似):
步骤 1:检查新磁盘
首先确认新磁盘是否被系统识别,使用以下命令列出所有磁盘:
lsblk
输出类似:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
└─sda1 8:1 0 500G 0 part /
sdb 8:16 0 1.5T 0 disk # 假设这是新磁盘
步骤 2:创建分区(如果需要)
如果新磁盘未分区,使用fdisk或parted创建分区(以sdb为例):
sudo fdisk /dev/sdb
在交互界面中:
输入n创建新分区;
选择分区类型(默认主分区p);
按默认值设置分区大小(或自定义);
输入w保存退出。
完成后,新分区会显示为sdb1(或其他编号)。
步骤 3:格式化分区
将新分区格式化为ext4文件系统(常用且稳定):
sudo mkfs.ext4 /dev/sdb1
注意:格式化会清除分区所有数据,确保磁盘为空或已备份数据。
步骤 4:临时挂载分区(测试用)
将新分区临时挂载到/data/minio:
sudo mount /dev/sdb1 /data/minio
验证挂载是否成功:
df -h | grep /data/minio
输出应显示/dev/sdb1挂载到/data/minio。
步骤 5:永久挂载(开机自动挂载)
为了避免重启后挂载失效,需要配置/etc/fstab文件:
- 先获取新分区的 UUID(唯一标识符):
sudo blkid /dev/sdb1
输出类似:
/dev/sdb1: UUID="12345678-1234-5678-1234-567812345678" TYPE="ext4"
- 编辑/etc/fstab:
sudo nano /etc/fstab
- 在文件末尾添加一行(替换为实际 UUID):
UUID=12345678-1234-5678-1234-567812345678 /data/minio ext4 defaults 0 2
- defaults:默认挂载选项(包括读写权限);
- 最后两个数字0 2:表示不备份该分区,且在系统启动时检查磁盘。
步骤 6:验证永久挂载配置
重新加载fstab配置并检查是否生效:
sudo mount -a # 重新挂载所有fstab中的分区
df -h | grep /data/minio # 确认挂载成功
网络
# 查看公网ip
curl ifconfig.me
# 查看已经开放的端口
firewall-cmd --list-ports
# 启动防火墙
systemctl start firewalld
#重启firewall
firewall-cmd --reload
#停止firewall
systemctl stop firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.service
# 开启端口
firewall-cmd --zone=public --add-port=7099/tcp --add-port=7091/tcp --add-port=7094/tcp --add-port=7090/tcp --add-port=7036/tcp --permanent
firewall-cmd --zone=public --add-port=9109/tcp --permanent
firewall-cmd --zone=public --add-port=83/tcp --permanent --add-port=82/tcp --permanent --add-port=84/tcp --permanent
firewall-cmd --remove-port=82/tcp --remove-port=83/tcp --remove-port=84/tcp
# IP层 ping,检查源机器与目标机器之间的网络连接在 IP 层是可达的
# 1.如果能正常收到应答,说明网络层连通性基本没问题,但还需进一步排查上层应用的情况。
# 2.如果收不到应答,比如目标机器防火墙屏蔽了 ICMP 报文、网络设备故障、IP 地址配置错误等。
ping 192.168.1.100
#查看目标服务器上对应服务是否正常启动
telnet ip 端口
nc -zv ip 端口
#确认服务是否监听了该端口 2181,5672,9092,9200,12345,8123
netstat -tulnp | grep 12345
netstat -tulpn | grep -E ":2181|:5672|:9092|:9200|:12345|:8123"
# 应用层 curl ,在确认网络层连通性基本没问题(如通过 ping 测试)之后,用于进一步排查目标服务功能是否可访问,以及判断服务是否存在问题(如是否未正确部署、配置错误、业务逻辑错误等)
curl -I http://192.168.1.100:8080
#查看ip地址
ifconfig
ip addr
定时

crontab -l #查看定时任务
文件
#文件追加大小
dd if=/dev/zero bs=1M count=200 >> xxx.log
# 查看文件,按q退出,f向下翻,b向上翻,G跳到末尾,g跳到开头,/关键字搜索,n向下搜,N向上搜
less <文件名>
-N 显示行号
-p 定位到关键字
# 查找指定目录下包含3306的文件,显示文件目录和行数
grep -rn "3306" /data/conf/
# 执行history命令,!后跟着history命令的编号
history
!编号
# 查看前后history第x行前后多少行的命令
# tree命令查看文件层级
sudo yum install tree
tree
#查看机器时间
date
#校准服务器时间
sudo yum install ntp
sudo systemctl start ntpd
#清空文件内容
命令行模式输入
1,$d
#从/目录 查找 "linux"文件
find / -name linux
# sed,流编辑器,能够对文本进行替换、删除、插入等操作;格式为 s/原字符串/替换字符串/修饰符
# 把 server.conf 文件里全部的 aaa 替换成 xxxx.estate-pc.svc.cluster.local
sed -i 's/aaa/xxxx.estate-pc.svc.cluster.local/g' server.conf
#解压.zip文件
unzip ***.zip
# 压缩
zip -r 压缩包名称.zip 要压缩的目录
#查找出包含error字符串的日志行
zgrep 'error' your_log_file.log.gz
zgrep -B 50 -A 50 '2025-09-01 00:00:16.667' your_log_file.log.gz
# 解压日志、搜索包含关键字代码、再搜索时间范围内前后50行日志
gunzip spring.log.2024-11-29.0.gz
grep "审批通过结束,开始更新订单流程状态" spring.log.2024-11-29.*
grep -B 50 -A 50 "2024-11-29 15:05:21.062" spring.log.2024-11-29.0
#解压压缩包
tar zxvf xxx.tar.gz
#查看内存/监控服务器内存资源利用情况
free -h
#排查因磁盘空间不足导致的应用程序故障等场景
# 快速了解各文件系统的总容量、已用空间、可用空间及挂载点等信息
df -h
du -h /data/logs/* | sort -hr
# disk usage 磁盘使用情况 -summarize -human-readable
# 会以人类可读的格式输出当前目录总共占用的磁盘空间大小
du -sh
#仅显示当前目录下所有子目录本身的信息,而不展示子目录内文件的信息
ll -d */
# 按照文件大小 从小到大,按可读方式排列
ll -hSr
#vi命令跳到最后一行
输入:$ 按Enter
进程
#关机
init 0
#查看8080端口上的进程活动,可以看到进程pid
netstat -tulnp | grep 8080
#根据名字找进程:过滤出nginx进程、pid号对应的进程
ps -ef | grep nginx
ps -ef | grep pid号
nginx
linux查看nginx启动路径
1.查找nginx的pid
[root@wskh xpe]# netstat -anop | grep 0.0.0.0:80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2320/nginx: master off (0.00/0/0)
2.查找指定pid正在运行服务的启动路径
[root@wskh xpe]# ll /proc/2320/exe
lrwxrwxrwx 1 root root 0 11月 16 11:29 /proc/2320/exe -> /usr/local/nginx/sbin/nginx
3.查找nginx启动使用的配置文件
[root@wskh xpe]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
docker
启动、登录、内存占用
#启动
service docker start
systemctl start docker
#登录镜像仓库
docker login -u name -p password xxxx.aliyuncs.com
#查看信息
docker info
docker -v
#查看容器内存占用
docker stats
镜像
# 制作镜像,注意最后的.代表Dockerfile上下文
docker build -t 新镜像名字:TAG .
#根据仓库名列出部分镜像
docker image ls tomcat
#查看本地所有镜像的所有镜像id
docker images -q
#导入镜像
docker load -i nginx.tar
#导出镜像
docker save 镜像名:Tag -o 镜像名-tag.tar
# 查看docker 占用空间
docker system df
# 删除没有任何容器使用的镜像、构建缓存
docker system prune -a
#拉取镜像
docker pull 镜像名[:Tag]
#给镜像打Tag
docker tag 镜像名:Tag
容器
# 前端nginx安装tree
apk add tree
apk add telnet
#运行容器
docker run -d -p 8081:8080 --name=tomcat_tuyb tomcat:8.0
-d 后台运行服务
-p 8081:8080 端口映射,宿主机的8081端口映射到容器内服务的8080端口
--name 指定服务名称(不能重复)
-it 运行时直接进入容器,比如centos镜像系统
-v 数据卷挂载,宿主机绝对路径1:容器内路径1
#强制删除容器,可以删除运行中的容器
docker rm -f 容器名
# 查看容器内的进程
docker top 容器名或容器id
#查看容器细节(WorkingDir工作目录、ip地址)
docker inspect 容器名或容器id
#复制宿主机文件到容器内,反过来一样
docker cp /etc/hosts 容器名或容器id:/opt
docker cp 容器名或容器id:/opt /etc/hosts
#实时查看容器后200行日志
docker logs --tail 200 -f <container_name>
docker logs -fn 200 3435
# 查看容器的指定列,id 镜像 和 状态
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}"
#关闭所有启动容器
docker stop $(docker ps -q)
网络
network_mode: host模式port映射无用
network_mode: host 的情况下,docker-compose 里不需要再用 ports 映射,因为 host 模式已经共享网络了,ports 配置会被忽略吗?其实在 host 模式下,ports 配置是无效的,因为不需要映射,直接使用宿主机的端口。所以用户的配置里 ports 可以去掉,不过这不影响,因为 host 模式下 ports 会被忽略。
注意:修改docker-compose.yaml的network_mode后 ,要重启nginx
Docker 默认创建以下三种网络类型之一:
bridge(默认网络):
- 容器通过虚拟网桥连接,彼此隔离但可通过 IP 通信。
- 适用于单机多容器间的通信。
- `host:
- 容器直接使用主机的网络栈(IP 和端口),无网络隔离。
- 适用于需要高性能网络的场景。
none:
- 容器无网络连接,仅能进行本地进程间通信(IPC)。
- 适用于对网络隔离要求极高的场景。
# 列出所有网络
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
abc123 bridge bridge local
def456 host host local
ghi789 none null local
# 查看自定义网络信息,主要看IPAM的Subnet为分配给网络的 IP 地址段
$ docker network inspect <网络名称或 ID>
[
{
"Name": "my-network",
"Id": "def789...",
"Created": "2023-10-02T10:30:00.000000Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.100.0/24",
"Gateway": "192.168.100.1"
}
]
},
...
]
#删除网络
$ docker network rm <网络名称或 ID>
mysql
-- 清空名为 `users` 的表中所有数据
TRUNCATE TABLE users;
-- 修改A表的A字段为VARCHAR(500)类型
ALTER TABLE tableA MODIFY COLUMN columnA VARCHAR(500);
# Threads_connected:表示当前与 MySQL 服务器建立的活动连接数,也就是当前正在使用的连接数量
SHOW STATUS LIKE 'Threads%';
# 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';
git命令
# git撤销远端的commit
git reset --soft HEAD~1
git push -f origin master
python
anaconda命令
#查看虚拟环境
conda env list
# 创建虚拟环境(一定要指定python版本,才能虚拟环境被pycharm选中)
conda create -n xxxxx(名字) python=3.10
# 删除虚拟环境
conda remove -n xxxxx(名字) --all
#进入虚拟环境
conda activate xxxxx(名字)
# 退出虚拟环境
conda deactivate
pycharm使用虚拟环境

pip命令
# 更新 pip 本身
pip install --upgrade pip
# 输出项目的依赖版本到requirements.txt文件
pip freeze > requirements.txt
kpl项目
服务器
#一、字体相关
https://www.cnblogs.com/somebottle/p/18564830/matplotlib_with_cjk_chars
抓包
https://www.cnblogs.com/yttbk/p/8609720.html
项目运行
cd /home/kpl
docker build -t kpl_service:1.8 .
docker run -e TOKEN=aaa -d -p 5000:5000 kpl_service:1.8
http://ip:5000/
<head>
<meta charset="UTF-8"/>
<title>股票概念分析</title>
<!-- 引入 Vue、Axios、ECharts -->
<script src="./js/vue.min.js"></script>
<script src="./js/axios.min.js"></script>
<script src="./js/echarts.min.js"></script>
<!-- 引入 Element-UI -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<script src="./js/index.js"></script>
<style>
.clearfix:before, .clearfix:after {
display: table;
content: "";
}
.clearfix:after {
clear: both;
}
.fr {
float: right;
}
</style>
</head>
Powered by Waline v2.14.8