运维_常用操作


目录:

传输模块

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  # 生成日期(用于记录工作日常)