传输模块
git
git submodule foreach git pull origin main # 拉取子模块所有分支
git rm -r --cached [指定文件] # 将指定文件从代码管理中移除但不删除文件
git reset --hard [hash值] # hash值通过git log确定
git log --graph --pretty=oneline --abbrev-commit # 查看分支合并情况
将文件传至远程服务器
rsync -avz -e "ssh -i [密钥] -p [port]" [file] root@[ip]:/[dir] # 指定端口和密钥,将文件传至指定服务器
# docker镜像远程仓库
docker login -u [user] -p [password] [URL]
打包/解压命令
# 将/opt/server/apache-tomcat-8.5.32/webapps目录下的文件打包为tomcat_20221020.tar.gz并存放至/root
tar zcvf /root/tomcat_20221020.tar.gz /opt/server/apache-tomcat-8.5.32/webapps # z参数表示压缩,所以需要打包成.gz后缀的压缩包
tar tvf /root/tomcat_20221020.tar.gz #查看/root/tomcat_20221020.tar.gz包下的所有文档 #解压见下
tar zxvf /root/tomcat_20221020.tar.gz -C /root/ #解压/root/tomcat_20221020.tar.gz里的文件至/root目录
密钥
ssh-keygen -t rsa # 创建类型为rsa的密钥
#添加公钥信息进ssh认证(/root/.ssh/authorized_keys)
ssh-copy-id -i ~/.ssh/id_rsa.pub -p <ssh端口> root@<IP Address> #将公钥传输到<IP Address> 的root用户指定<ssh端口>端口
将任务挂入后台运行(例如rsync)
rsync -avzP [user]@[ip]:/rsync/CentOS-7-x86_64-Everything-1908.iso /root/ #-P参数断点续传
#ctrl + z挂起任务
jobs
[1]+ Stopped scp -r /u01/media/Disk1/ 192.168.1.31:/u01/media/
bg %1 #将[1]任务放入后台
jobs
[1]+ Running scp -r Disk1/ 192.168.1.31:/u01/media/ &
MD5检验
md5sum * > md5 #获取该目录中所有文件的MD5值并输出到md5文件中
md5sun -c md5 #检查
应用模块
防火墙
firewalld
CentOS7 防火墙(firewall)的操作命令 - leoxuan - 博客园 (cnblogs.com)
firewall-cmd --list-ports #查看
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="6379" accept" #设置6379端口号只允许192.168.142.166地址访问
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="6379" accept" #删除规则
firewall-cmd --zone=public --permanent --add-port=3306/tcp #开放3306的tcp端口,--permanent代表永久生效
firewall-cmd --zone=public --permanent --add-port=8000-8010/tcp #开放一段端口
firewall-cmd --zone=public --permanent --remove-port=3306/tcp #关闭端口
firewall-cmd --reload #重载防火墙
iptables
yum install -y iptables-services #下载iptables服务
vi /etc/sysconfig/iptables #编辑iptables的配置文件
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT #允许8080端口通过防火墙(示范)
-A INPUT -s 120.230.120.0/24 -p tcp --dport 3012 -j ACCEPT #允许120.230.120.0网段通过3012端口访问(真实情况) #注意防火墙语句不要在加载文件的最后面,这样会导致防火墙启动失败,正确操作应该是在默认22端口的规则下面
-A INPUT -j DROP #在COMMIT前面添加上该行,拒绝所有包
/etc/init.d/iptables restart #重启防火墙使配置生效
service iptables restart #重启防火墙使配置生效(两条命令皆可)
iptables -F #清空防火墙
iptables -nL #查看防火墙规则是否生效
iptables-save #按照命名的方式打印iptables的内容
MySQL
修改密码
mysql> update mysql.user set password=PASSWORD('123456') where user='root' and host='%';
mysql> ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql> FLUSH PRIVILEGES;
备份 & 恢复
mysqldump -h127.0.0.1 -P3306 -uroot -p123456 -A > personnel.sql # mysql全备
mysqldump -uroot -p123456 --databases personnel > personnel.sql # 备份指定库(personne)
mysqldump -uroot -p123456 --databases personnel --ignore-table=personnel.alarmandfault --set-gtid-purged=OFF > personnel.sql # 备注忽略指定表的指定库(特殊情况下需要设置gtid=OFF)
mysql> create database personnel; # 恢复库前需要创建库
mysql -uroot -p123456 -o personnel < personnel_v1.sql #从全备中恢复名为personnel的库
mysql> source personnel_v1.sql # use 到指定库后再恢复数据
mysqlcheck -uroot -p123456 --auto-repair -o NetvistaCloud #检查并恢复指定数据库
MongoDB
创建初始用户
需要注意,mongodb在容器化部署的时候需要加上--auth来禁止不通过密码来登录,且需要创建admin管理用户。
rs:PRIMARY> use admin #进入到adimn用户(使用该用户才能创建管理员用户)
db.createUser({
user: "root",
pwd: "xxx",
roles: [ { role: "root", db: "admin" } ]
}) # role中的角色可以更改,相当于权限,只读/读写/root都可 ⭐创建管理员用户
db.auth('root','xxx') # 验证用户,返回1,则存在
db.createUser({
user: "user_electric",
pwd: "xxx",
roles: [ { role: "dbAdmin", db: "electric" },{ role: "dbAdmin", db: "anfang" },{ role: "dbAdmin", db: "security" } ]
})
备份 & 恢复
# 对于备份库使用mongodump,对于备份表使用mongoexport,两种备份方式二选一即可。注意,对于跨版本恢复不推荐使用mongodump
# mongodump备份
mongodump -u'xxx' -p'xxx' -d electric -h [host] --port [port] --authenticationDatabase admin -o /backup
# mongodump备份只能用mongorestore恢复
mongorestore -u'xxx' -p'xxx' --port [port] --authenticationDatabase admin -d electric /backup/electric/
# mongoexport备份
mongoexport -u'xxx' -p'xxx' --port [port] --authenticationDatabase admin -d electric -c charging_pile -o /backup/charging_pile.json # 导出指定表
mongoexport -u'xxx' -p'xxx' --port [port] --authenticationDatabase admin -d electric -c eboxData -q '{"deviceCode":{"$in":["LDA20600000000002A1D","LDA20600000000002769"]},"heartbeat_date":{"$gt":"2022-05-13 23:59:59"}}' -o /backup/eboxData.json # 可以指定表的查询语句进行导出
# mongoexport备份只能用mongoimport恢复
mongoimport -u'xxx' -p'xxx' --port [port] --authenticationDatabase admin -d electric -c charging_pile /backup/charging_pile.json
运维模块
系统状态
yum update # 软件更新,修复漏洞(可能导致个别服务例如docker重启,有些服务需要输入额外的命令以启动服务,例如Redis_Sentinel)
lsb_release -a #查看系统版本
cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l #查看物理CPU的个数
cat /proc/cpuinfo| grep "cpu cores"| uniq #查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "processor"| wc -l #查看逻辑CPU的个数
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head # 获取CPU占用最多的10个进程
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head # 获取内存占用最多的10个进程
du -h --max-depth=1 # 查看深度为1的存储
iostat -x 1 # 每秒查看IO状态
iotop -o # yum install -y sysstat,查看正在进行读写操作的进程
htop # yum install -y
hotp
vmstat
top命令详解
top - 16:51:44 up 229 days, 5:54, 1 user, load average: 0.98, 1.02, 1.08
Tasks: 411 total, 1 running, 410 sleeping, 0 stopped, 0 zombie
Cpu(s): 8.2%us, 0.3%sy, 0.0%ni, 91.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32867208k total, 32362696k used, 504512k free, 81152k buffers
Swap: 16383996k total, 9051700k used, 7332296k free, 914704k cached
第一行说明:当前时间16:51:44,系统已经运行了229天5小时54分钟(在这期间没有重启过),当前有1个用户登录系统,load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况(load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了)
第二行说明:任务(进程),系统现在共有411个进程,其中处于运行中的有1个,410个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
第三行说明:CPU状态,us用户空间占用CPU百分比(用户所使用的进程,真正用的到的CPU);sy内核空间占用百分比(资源调配相关;过高可能中病毒了);ni改变过优先级的进程;id空闲CPU百分比;waIO等待占用(磁盘到内存速度慢;IO慢;数据量大;内存小;等待锁);hi硬中断;si软中断;
第四行说明:内存状态,物理内存总量(31.34G);使用中的内存总量(30.86G);空间内存总量(492M);缓存的内寸量(79.25M)
第五行说明:swap交换分区,交换区总量(15.62G);使用的交换区总量(8.63G);空闲交换区总量(6.99G);缓冲的交换区总量(893.26M)
shell脚本
#!/bin/bash
# Author: daihaorui
# Mobile: 13738756428
# Date: 2022-01-20
# Description: Back up the NACOS database
# Version: v1
date=`date +%Y%m%d` # 以20220923的格式输出日期,常用作备份变量
date +%s #查看当前UNIX时间戳,date -d @`date +%s` +"%Y-%m-%d %H:%M:%S":傻瓜操作
date -d @1623768286 +"%Y-%m-%d %H:%M:%S" #将UNIX时间戳转换为时间格式
日志排错
journalctl -xefu [service]
/usr/bin/find /usr/local/wlhiot/mount/nfsdata/nfspv03/electric/log -mtime +2 | xargs rm -rf # 删除指定时间之前的文件,清除日志
软链接
ln -s [真正文件或目录] [软链接的文件或目录]
开机自启
ll /etc/init.d/ #做个软链接,将权限更改为755
lrwxrwxrwx. 1 root root 25 6月 21 13:17 4A_connect.sh -> /home/root1/4A_connect.sh
cat /etc/init.d/4A_connect.sh
#!/bin/bash
#chkconfig: 2345 99 99 #使systemctl识别需要添加上该行
chkconfig --add start_service.sh #让chk能够管理该脚本
配置systemcyl控制
cat /usr/lib/systemd/system/gerrit.service
[Unit]
Description=gerrit
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/wlhiot/gerrit/bin/gerrit.sh start # 下列三行是核心
ExecReload=/usr/local/wlhiot/gerrit/bin/gerrit.sh restart
ExecStop=/usr/local/wlhiot/gerrit/bin/gerrit.sh stop
[Install]
WantedBy=multi-user.target
创建用户
useradd haorui_dai
echo "a13738756428" | passwd -- stdin haorui_dai
userdel -r haorui_dai # 彻底删除用户
配置sudo su切换root用户
grep -vE "#|^$" /etc/sudoers # 最后一行添加如下两行,[user]替换成实际用户
[user]ALL=(ALL)ALL
[user]ALL=(ALL) NOPASSWD: ALL
vi /etc/profile # 设置用户登陆超时时间(10分钟无活动自动退出ssh)
# 在HISTSIZE=1000下面增加一行
TMOUT=600
定时任务
# 每周05:00删除所有虚悬镜像 & 服务器时间同步
0 5 * * 1 docker images | grep none | awk '{print $3}' | xargs docker rmi >/dev/null 2>&1
# 每周5点进行服务器时间同步
0 5 * * 1 /usr/sbin/ntpdate cn.pool.ntp.org
# 每日01:00删除ebox项目3天前的日志
0 1 * * * /usr/bin/find /usr/local/wlhiot/mount/nfsdata/nfspv03/electric/log -mtime +2 | xargs rm -rf
三剑客命令
# 去除所有空行显示
cat grafana.yaml | grep -vE "#|^$" -v表示反转
# 整行替换
sed "/app.kubernetes.io\/random/c\ \ \ \ \ \ \ \ app.kubernetes.io\/random: '$RANDOM'" ebox.yaml -n # 将"app.kubernetes.io/random"替换成" app.kubernetes.io/random: '117'"
# 忽略空行及注释输出文件所有内容
grep -vE "#|^$" /etc/nginx/nginx.conf
# 寻找包含kill的日志,可能由于内存不足自动Kill容器
grep -i kill /var/log/messages
测试
curl icanhazip.com #查看本机公网地址
nslookup URL #测试一个域名解析到的地址
echo 2022-04-{01..31} > date.txt && sed 's# #\n#g' date.txt -i && cat date.txt && rm -rf date.txt # 生成日期(用于记录工作日常)