1.巡检
磁盘使用率 df -h
查看文件目录使用 du -sh *
内存使用率 free -h
CPU空闲率 sar -u 1 5
网络连接数(tcp连接数) netstat -alntp|grep tcp|wc -l
查看指定目录所在磁盘逻辑卷的使用率
df -h /data
2.>重定向到文件(覆盖),>>追加到文件
tee重定向到文件并显示命令结果,tee -a追加;如:df -h | tee -a 1.txt
cat >> 1.txt 输入的内容追加到1.txt, ctrl+d保存
3.显示光标 : echo -e "\033[?25h"
隐藏光标 : echo -e "\033[?25l"
4.改名字
mv /home/mingyiiot/SRC_GD_D_wlwczpt_user_20221010.txt /home/mingyiiot/SRC_GD_D_wlwczpt_user_20221011.txt
谨慎使用 mv:跨文件系统移动大文件或大量文件时,会比较耗时并占用额外的磁盘I/O。对于重要数据,如果条件允许,可以先尝试复制(cp)验证数据完整性后再删除原文件。
跨文件系统移动的本质:理解跨文件系统移动实际上是复制后删除,这很重要。如果移动过程被中断(如断电),可能会导致数据不一致或文件损坏。
drwxr-xr-x 2 root root
注:
1)d是指这是文件,同理,l是软连接,c是字符设备,-是文件
2)rwx r-x r-x 表示所属用户,用户组,其他用户的权限,r4,w2,x1 目录最高权限是777,文件最高权限是666(默认,因为默认文件不可执行)
3)2是指这里有两个连接
4)root root 用户 用户组
5.获取日期
dat=$(date "+%Y%m%d")
6、定时(后台不挂断执行脚本)
crontab -e
00 11 * * * nohup sh /home/mingyiiot/wlw_user.sh > /home/mingyiiot/wlw_user.log 2>&1 &
重启
systemctl restart cron / systemctl restart crond
7.安装lftp
yum -y install lftp
8.服务器中文乱码
xshell,右击服务器,属性,终端,编码utf-8
9.
2>&1解释:
将标准错误(2)重定向到标准输出(&1),
标准输出(&1)再被重定向输入到watch.log文件中
最后的&:
后台执行
10.明文脚本加密
gzexe test.sh
chmod +x test.sh
gzexe -d test.sh 解密
chmod +x和chmod a+x等价,都是为所有用户添加执行权限
11.grep多个或条件
grep -E "CHANGED|stdout"
12.查看文件编码格式
vi进文件
:set fileencoding
:set fileencoding=utf-8 修改
13.tar命令
打包
tar -cvf test.tar test
-c:表示创建归档文件包,将文件打包到新的归档文件中
-v:在解包/打包过程中,它会显示正在提取的文件名
-f:后面接要解包/打包的文件
压缩
tar -zcvf test.tar.gz test
-z:表示使用 gzip压缩 .tar.gz 或 .tgz 文件
-j:以bz2方式压缩 tar.bz2
-J:以xz方式压缩 tar.xz
zip test.zip *.txt
解包
tar -xvf test.tar -C /tmp/ # 将 test.tar归档包里的文件解包到tmp目录里
-x 解包
tar -C /tmp/ -xvf test.tar test1 # 只解包test.tar归档包里的test1文件,解包到tmp目录
tar -xvf test.tar --exclude=test1 # 除了test1都解包
解压
tar -zxvf xxx.tar.gz
-z:表示解压使用 gzip压缩的文件
unzip test.zip
查看归档文件但不解包
tar -tvf test.tar
将找到的文件全部压缩到一起
find . -name "*.deb" | xargs tar -zcPf test_deb.tar.gz
14.创建链接,方便统一管理目录
ln -sv /opt/soft/xxxxxxx /usr/local/prometheus
15.防火墙
设置开机启用/禁用防火墙:
systemctl enable/disable firewalld.service
启动/关闭防火墙:
systemctl start/stop firewalld
检查防火墙状态:
systemctl status firewalld
查看防火墙状态:
firewall-cmd --state
重新加载配置:
firewall-cmd --reload
查看开放的端口:
firewall-cmd --list-ports
开启防火墙端口:
firewall-cmd --zone=public --add-port=22/tcp --permanent
命令含义:
–zone #作用域
–add-port=9200/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
注意:添加端口后,必须用命令
firewall-cmd --reload
重新加载一遍才会生效
关闭防火墙端口:
firewall-cmd --zone=public --remove-port=8001/tcp --permanent
firewall-cmd --zone=public --remove-port=443/tcp --permanent
firewall-cmd --zone=public --remove-port=22088/tcp --permanent
允许特定IP访问某个端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.238.24.233" port protocol="tcp" port="63001" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="132.120.15.16" port protocol="tcp" port="5432" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.18.200.73" port protocol="tcp" port="22088" accept"
允许某个IP访问所有端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.15.0.164/27" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="132.120.15.16" accept"
firewall-cmd --reload
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="10.18.200.73" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="132.120.15.16" port protocol="tcp" port="5432" accept"
清空规则:
systemctl stop firewalld && \
rm -rf /etc/firewalld/zones/* && \
rm -rf /etc/firewalld/services/* && \
rm -rf /etc/firewalld/direct.xml && \
systemctl start firewalld && \
firewall-cmd --reload && \
firewall-cmd --list-all-zones
16.配置免密
(1)你免密登录别人
生成私钥
ssh-keygen -t rsa -P ""
私钥公钥位置:私钥文件名默认是id_rsa,详见/etc/ssh/ssh_config的IdentityFile
/root/.ssh/id_rsa
/root/.ssh/id_rsa.pub
分发公钥到要免密登录的机 默认端口22,-p指定端口
ssh-copy-id root@114.132.54.82 -p 22
或者:
将你的~/.ssh/id_rsa.pub的内容复制到目标主机的~/.ssh/authorized_keys最后一行
然后chmod 600 ~/.ssh/authorized_keys
远程发送命令测试
ssh root@114.132.54.82 -p 22 "df -h"
注意:
免密登录的服务器发生变化时(如重装系统),要清理旧纪录,重新把你的公钥发送到那台服务器的用户目录下.ssh/authorized_keys
ssh-keygen -f "/root/.ssh/known_hosts" -R "114.132.54.82"
(2)别人免密登录你
生成私钥
ssh-keygen -t ed25519 -f id_ed25519_root
-t:指定加密格式
-f:指定文件名
注意私钥id_ed25519_root,公钥id_ed25519_root.pub
生成的公钥.pub放入要免密登录的用户的目录的
cat id_ed25519_root.pub >> /root/.ssh/authorized_keys
私钥放入用户机(客户端),xshell选择密钥登录
17.linux卸载软件
yum list installed |grep grafana # 先查出来全名
yum remove grafana-enterprise.x86_64 # 卸载
18.测网速speedtest安装
先检查有没有安装python
yum install speedtest-cli -y
speedtest-cli
19.sed全局替换
sed -i 's/14.157.105.182/14.157.105.253/g' nginx.conf
sed -i 's/14.150.68.162/14.157.107.187 ;\n allow 120.230.63.144 ;\n allow 219.137.94.91/g' nginx.conf
20.iptables放通ip
service iptables status #iptables状态
vim /etc/sysconfig/iptables #修改配置
-A INPUT -s 211.96.23.33 -j ACCEPT
service iptables restart #重启防火墙
service iptables stop
cd /etc/sysconfig
source iptables-config
21.查看iptables规则
iptables -nL
22.检测网络是否可达
traceroute 132.96.39.51
23.修改hostname
hostnamectl set-hostname 主机名
# 查看静态主机名
hostnamectl status
24.查看端口占用情况
lsof -i:端口号
lsof -i -P
列出指定进程所打开的文件
lsof -c grafana
查看哪些进程占用了该文件
lsof grafana.db
25.修改环境变量
vim /etc/profile
# 立刻生效
source /etc/profile
26.查看linux版本
cat /proc/version
cat /etc/redhat-release
hostnamectl
uname -a
27.核查openssl支持的tls版本
openssl ciphers -v | awk '{print $2}' | sort | uniq
或
openssl s_client -help 2>&1 > /dev/null | egrep "\-(ssl|tls)[^a-z]"
28.nginx未开ssl模块
报错:the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:38
解决:
cd /opt/soft/nginx-1.22.1
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
29.查cpu内核
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
31.查看systemctl启动日志
journalctl -u minio.service
32.安装rz sz命令
yum -y install lrzsz
33.远程传输文件
本地-->远程
scp -P 22089 /data/nginx/conf/nginx.conf root@192.168.1.199:/data/
scp -P 22088 /data/riversec_prod/edr/install-linux.bin riversec_prod@10.15.0.175:/home/riversec_prod/
scp -P 22 install-linux.bin root@220.199.6.27:/root/
远程-->本地
scp -P 22 root@192.168.1.199:/etc/shadow /data/shadow199
因目标主机发生更改导致scp失败
vim /root/.ssh/known_hosts
删除留下的记录,重新scp一次
34.去除行尾^M
%s/\r//g
%s/;/;/g
%s/opt/data\/opt/g
35.挂载
mount /dev/vdb /data/
设置自动挂盘:
blkid #查磁盘uuid以及格式
/dev/sdb: UUID="d8ca36f3-f629-4ee4-9580-35847580f10c" BLOCK_SIZE="4096" TYPE="ext4"
/dev/mapper/test--vg--1-test--lv1: UUID="e5aa706e-0d11-4fee-a995-8118a63d84f6" BLOCK_SIZE="4096" TYPE="ext4"
/dev/mapper/ubuntu--vg-ubuntu--lv: UUID="8081a149-8bb3-4b7e-a6f9-f360e14a4342" BLOCK_SIZE="4096" TYPE="ext4"
vim /etc/fstab #配置自动挂盘
UUID=ff11909b-115c-4af4-ba82-dea470019199 /iMedical ext4 defaults 0 0
配置完刷新:systemctl daemon-reload
配置完挂载并检查:mount -a
主要,格式化为ext4格式,后面也要整为ext4格式
推荐的挂载选项组合:
UUID=xxx /test ext4 defaults,noatime,nodiratime,errors=remount-ro 0 0
注:
defaults 默认选项,相当于:rw,suid,dev,exec,auto,nouser,async
noatime 不更新文件的访问时间,提升I/O性能
nodiratime 不更新目录的访问时间,提升性能
errors=remount-ro 文件系统错误时以只读方式重新挂载
最后字段建议用0 0 非系统分区用0 0即可
查看
df -h /data
36.运行shell脚本发现'/r'command not found
:set ff=unix
37.格式化磁盘:
mkfs.ext4 /dev/vdb2
查看挂载盘
fdisk -l
查看所有盘状态
lsblk
把盘变成物理卷
pvcreate /dev/vdb
查看所有物理卷
pvscan
pvdisplay
删除物理卷 pvremove /dev/vdb
创建卷组-将物理盘vdc加入到卷组
vgcreate test-vg-1 /dev/vdc
查看卷组
vgdisplay test-vg-1
往卷组添加物理卷
vgextend test-vg-1 /dev/vdb
删除卷组
vgremove test-vg-1
激活所有卷组中的所有逻辑卷
vgchange -ay
创建逻辑卷
lvcreate -L 70G -n test-lv1 test-vg-1
查看
ls /dev/test-vg-1/test-lv1
格式化逻辑卷
mkfs.ext4 /dev/test-vg-1/test-lv1
挂载
mount /dev/test-vg-1/test-lv1 /data
拓展逻辑卷
lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
或:
lvresize -L +20G -n /dev/test-vg-1/test-lv1
调整逻辑卷上挂载的的文件系统
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
或
xfs_growfs /dev/mapper/ubuntu--vg-ubuntu--lv
注:
1. lvextend命令用于扩展逻辑卷的大小。lvresize能用于拓展或者缩小
2. -l +100%FREE选项告诉lvextend使用剩余的全部可用空间扩展逻辑卷。
3. /dev/mapper/ubuntu--vg-ubuntu--lv指定要扩展的逻辑卷的路径
4. resize2fs命令用于调整ext2、ext3或ext4文件系统的大小。
xfs_growfs适配不高,建议用resize2fs
删除逻辑卷
lvremove /dev/test-vg-1/test-lv1
38.数据库导出语句:
mysqldump -u zlzt -p gdltdb > zqzs.sql
39.抓包命令
tcpdump -i 网卡 tcp port 端口
抓包示例
在8.218.92.230长ping端口:
while true; do tcping 106.55.188.11 22; sleep 5; done
或:tcping -i 5 106.55.188.11 22
或长ping ping -i 5 106.55.188.11
在106.55.188.11抓包:
tcpdump -i any src host 8.218.92.230 and dst port 22
检测任何网卡对来自8.218.92.230对本机22端口的访问
tcpdump -i any host 43.139.4.46 and port 22
# 截获所有从center发向sp-1节点且经过网卡ens33的包
tcpdump -i ens33 src host center and dst sp-1
# 截获所有从5000端口收发的有关192.168.126.141
tcpdump -i ens33 tcp port 5000 and host 192.168.126.141
# 对本机的UDP端口进行监控
tcpdump udp port 123 -i ens33
新建用户
useradd zqzs
passwd zqzs
你可以把用户添加到wheel组,以使它可以使用su命令成为root用户。
添加方法为:usermod -G wheel zqzs
查看账号详情
id zqzs
配置只允许wheel用户组的账号能提权root
vim /etc/pam.d/su
auth required pam_wheel.so use_uid
编辑sshd配置文件(vim /etc/ssh/sshd_config)。
在文件末尾添加以下行:
AllowUsers zqzs
重启sshd
systemctl restart sshd
配置成不可修改
chattr -i /etc/gshadow
chattr -i /etc/passwd
chattr -i /etc/group
chattr -i /etc/shadow
配置成仅不可删除
chattr +a /etc/shadow
低权账号切换root失败,查看日志
tailf -n 20 /var/log/secure
ln -s /lib64/security/pam_tally2.so /lib64/security/pam_tally.so
mysql导出数据库命令
mysqldump -u root -p --all-databases > all_databases.sql
vim小技巧:
撤回:u
恢复撤回:ctrl+r
替换:r
复制:yy
黏贴:p
多行输入:
ctrl+v,然后通过方向键选中多行,输入大写的i,然后输入你想输入的,然后按Esc键,完成多行输入。
多行删除:
ctrl+v,然后通过方向键选中多行,输入d,完成删除
粘贴模式,用于复制大量内容:
:set paste 然后再进入编辑模式粘贴
查找nghttp2包下载路径
repoquery --location nghttp2
centos7.9配置yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
配置yum源后
yum clean all
yum makecache
yum repolist
安装epel源--第三方源包,先yum install主要是为了注册epel公钥
yum install epel-release -y
配置阿里云epel源
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
rm -f epel-testing.repo
刷新配置文件
source <配置文件全名>
查看所有的开机自启动服务
chkconfig --list
chkconfig --del service_name #删除开机自启动的服务
chkconfig --add service_name #添加服务开机自启动
ip route add 10.236.26.33/32 via 10.119.155.1 dev eth2
ubuntu20.04安装jdk8
apt-get install openjdk-8-jdk -y
service服务配置目录
systemctl 服务文件通常在 /etc/systemd/system/ 或 /usr/lib/systemd/system/ 目录下
nmap扫描器
扫描域名:nmap --script http-headers www.fengyi.jie
扫描主机:nmap -sV 10.0.8.2 10.0.8.3
主动扫描:nmap -A 10.0.8.2
linux清理内存的cache
1.删除不必要的进程
2.清理缓存文件
清理页面缓存(page cache):
sync; echo 1 > /proc/sys/vm/drop_caches
清理dentries和inodes:
sync; echo 2 > /proc/sys/vm/drop_caches
清理页面缓存、dentries和inodes:
sync; echo 3 > /proc/sys/vm/drop_caches
rpm使用
安装
rpm -ivh Nessus-10.7.2-el7.x86_64.rpm
卸载
rpm -e Nessus-10.7.2-el7.x86_64
ssh登录缓慢
1. 禁用DNS解析
SSH在连接时会尝试反向解析客户端的IP地址。如果DNS设置不合理,或者DNS服务响应缓慢,这都可能造成登录延迟。我们可以在SSHD配置文件
(通常在 /etc/ssh/sshd_config)中将 UseDNS 设置为 no,以禁用这个功能。
vim /etc/ssh/sshd_config
UseDNS no
GSSAPIAuthentication no
2. 关闭GSSAPI认证
如果你的网络中没有使用Kerberos认证,那么GSSAPI认证可能会造成不必要的延迟。我们可以在SSHD配置文件中将 GSSAPIAuthentication 设置为 no,关闭这个功能。
整个linux都很慢
使用命令查看哪些进程占用的内存最多
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 10
查看读写io
iotop
ctrl+a移动到行首
ctrl+e移动到行尾
将程序进程交给systemctl管理
查看firewalld的service文件,以及获取本系统的service仓库路径
systemctl cat firewalld
在service仓库下新增该程序的service文件
以prometheus为例,主要,实际操作时把注释去掉
vim prometheus.service
[Unit]
Description=Prometheus service # 描述
After=network-online.target # 在network运行之后才运行这个
[Service]
Type=simple # 服务类型 - simple表示该服务将被视为在ExecStart命令启动后立即运行。
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --log.level=warn --storage.tsdb.path=/usr/local/prometheus/data/ # 当服务启动时要执行的命令,这里指定了Prometheus的可执行文件路径、配置文件、日志级别和存储路径。
Restart=on-failure # 如果服务失败,自动重启
ExecStop=/bin/kill -9 $MAINPID # stop时执行的
[Install]
WantedBy=multi-user.target # 指示当系统达到multi-user.target(多用户目标,即非图形化的多用户运行级别)时,该服务应该被启动。
重载配置
systemctl daemon-reload
检查状态
systemctl status prometheus
查看日志
journalctl -u prometheus.service
free -h解释
free:未被使用的内存
available:可被使用,可分配的内存,available=free+cache+buffer
cache:文件系统缓存
buffer:块缓存
shared:多个进程共享的内存
SReclaimable:可回收的内存,被需要时可释放,但不算可分配内存
负载:
影响负载值高低的因素:CPU核心数量,应用程序性能,io操作,系统资源(内存/磁盘)限制
判断高低标准,如果超过cpu核心数则为过高,如2核cpu,5分钟负载数值超过2
命令:top 在第一行后面可查看,分别是1分钟负载,5分钟负载,15分钟负载
sponge命令
主要功能是将标准输入的数据保存到一个临时文件中,等待所有输入都完成后,再将数据输出到标准输出
常用于处理管道中的数据,尤其是需要对大文件进行处理时,可以避免一次性读取整个文件导致的内存问题
而如果输入数据量较小,或者内存资源相对充足,那么使用 sponge 是一个方便且可靠的方式来处理输出内容,确保数据的完整性。
sh test.sh | sponge tcpsockets.prom
sponge命令在moreutils包,moreutils在epel-release
yum install moreutils -y
已安装epel-release,但是安装它下面的源包缺一直报找不到
办法:
yum remove -y epel-release
yum install -y epel-release
查看硬件信息
dmesg -T
查看系统日志
/var/log/messages
查看ssh连接方面的日志
/var/log/secure
opencloudos 安装mysql
yum -y install mysql-server
然后运行安全脚本
mysql_secure_installation
忽略ssl登录
mysql --ssl=false -h 192.168.1.188 -u root -p
查看文件的第一列
awk '{print $1}' /etc/hosts
ubuntu 配置不检测第1个网口是否成功启动
vim /etc/netplan/00-installer-config.yaml
enp1s0:
dhcp4: true
optional: true # 这表示该接口是可选的,如果未连接,系统将继续启动而不会等待该接口
swap
当内存使用过高时,系统会开始使用swap内存
但当内存使用量回落时,swap不会完全释放,需要手动
手动释放swap方法
同步,内存文件回刷给真正内存
sync
关闭swap,回收swap空间
swapoff -a
开启swap
swapon -a
ubuntu改默认编辑器
select-editor
选择--vim基础版本
/usr/bin/vim.basic
校准时间:
timedatectl set-timezone Asia/Shanghai
设置时间:
timedatectl set-time '2025-08-12 09:40:56'
yml文件校验器
yamllint alertmanager.yml
临时传送
python3 -m http.server 82
当前目录下的文件,其他主机都可以用wget的方式获取,建议内网获取,公网速度一般
配置pip国内镜像源
vim /etc/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
pip依赖告警:
Running pip as the 'root' user can result in broken permissions
分析:使用root用户使用pip,看你会破坏原有的环境依赖,从而影响到其他项目
解决办法:
1.用普通用户执行
2.创建虚拟环境,在里面安装依赖,各项目互不干扰
pip install virtualenv
virtualenv venv
激活虚拟环境:只有激活中才能使用虚拟环境的依赖,退出后则使用系统全局依赖
source venv/bin/activate
在将项目迁移到新的环境或开发机上时,可以使用 requirements.txt 文件来安装所有依赖
pip freeze > requirements.txt
退出:
deactivate
新环境中:使用 pip 安装 requirements.txt 中的所有依赖,方便迁移
pip install -r requirements.txt
监控磁盘异常
apt install sysstat -y
iostat -x 1
注意查看wait的数据:await,r_await,w_await
因为当磁盘出现坏道时,延迟会明显增高
查看登录服务器的ip
lastb -s -1d | awk '{ip[$3]++} END {for (i in ip) print ip[i], i}'| sort -n -k1,1
basename 只输出文件名,去除目录路径
basename /root/fengyi-ip.txt
find / -name "nginx.*" -exec basename {} \;
监听5000端口并等待连接
nc -l 5000
-v:显示详情;
-u:指定使用udp协议;
-t:指定使用tcp协议,默认值;
-w:连接超时时间;
-z:在作为客户端连接时,不发送任何数据;
使用nc完成文件的传输:
# 启动nc服务,监听5000端口,将接收到的数据全部写入test.txt中
nc -l 5000 > test.txt
在客户端上使用nc向节点的5000端口写入数据,从而实现文本传输:
nc 192.168.126.140 5000 < test.txt
多命令或,前面的命令执行失败才会执行后面的命令
grep "hello" test.txt || echo "hello" >> test.txt
多命令与,前面的命令执行成功才会执行后面的命令
grep "hello" test.txt || echo "hello" >> test.txt
查ip属于哪个城市
curl ipinfo.io/43.134.59.39
Linux常见日志文件:
/var/log/syslog:记录系统的通用日志信息,适用于大多数Linux发行版。
/var/log/messages:记录系统的通用日志信息,通常在Red Hat系的发行版中使用。
/var/log/auth.log:记录身份验证相关的日志信息,如登录尝试、sudo命令使用等。
/var/log/kern.log:记录内核相关的日志信息。
/var/log/dmesg:记录系统启动时的内核消息。
/var/log/boot.log:记录系统启动过程中的消息。
/var/log/cron.log:记录定时任务相关的日志信息。
/var/log/mail.log:记录邮件系统相关的日志信息。
/var/log/apache2/access.log和/var/log/apache2/error.log:记录Apache服务器的访问日志和错误日志。
/var/log/nginx/access.log和/var/log/nginx/error.log:记录Nginx服务器的访问日志和错误日志。
为当前用户添加环境变量:
编辑当前用户的 .bashrc 文件:
vim ~/.bashrc
在文件的末尾添加以下行:
export PATH=$PATH:/usr/sbin
使配置生效
source ~/.bashrc
取消export配置的变量
unset PATH 如:(unset http_proxy)
查看(二进制文件/命令)来自哪个包
rpm -qf `which vim`
快捷键:
ctrl +l 清屏
ctrl +u 删除整行命令
ctrl +w 删除一小段命令
ctrl +a 光标移动到命令头
ctrl +e 光标移动到命令尾
pycharm安装依赖报错时:
# 删除现有虚拟环境目录(根据实际路径调整)
del /s/q E:\python-workplace\websocket-server\venv
# 重新创建虚拟环境
python -m venv D:\python_project\pythonProject\venv
# 激活虚拟环境
D:\python_project\pythonProject\venv\Scripts\activate
# 查看系统运行时间
uptime
查看系统负载,登录系统的用户和持续登录时间
w
# 查看系统shell类型
echo $SHELL # centos使用的是bash,kali使用的是zsh,zsh比bash更强,且兼容bash
# 判断上一条命令是否执行成功
echo $?
查看一个时间段的日志:
sed -n '/时间点1/,/时间点2/p' 日志文件
sed -n '/2025\/02\/28 15:58:32/,/2025\/03\/13 18:33:24/p' error.log
sed -n '/2025\/02\/28/,/2025\/03\/13/p' error.log
升级openssh版本
yum update -y
yum update openssh -y
systemctl restart sshd
回退:
yum history list openssh 找到要回退的版本的id
yum history undo id
查看公网ip
curl ip.sb
curl 测试post请求
curl http://www.example.com/api -d "参数"
get:
curl http://www.example.com/api&参数
ssh登录很慢
vim /etc/ssh/sshd_config
UseDNS no
GSSAPIAuthentication no
systemctl restart sshd
定时关机:马上关机,然后3600秒后开机
/usr/sbin/rtcwake -m off -s 3600
00 04 */30 * * nohup /usr/sbin/rtcwake -m off -s 3600 &
压测:
yum -y install httpd-tools
模拟10000次请求,并发量100
ab -n 10000 -c 100 http://192.168.1.108/
-n: 在测试会话中所执行的请求个数。默认时,仅执行一个请求。
-c: 一次产生的请求个数。默认是一次一个。
忘记root密码,去本机重启进入boot选择模式,设置单用户模式single。
注:centos6及以下和centos7以上的进入single模式不一样,且centos7进入需要改可写状态,且要关闭selinux
无法卸载挂载盘
原因:有进程占用
方案一:杀死占用进程
fuser -vm /dev/vda1
-v:详细模式,显示指定文件进程信息。
-m:指定挂载点或设备文件。会寻找挂载点,然后以挂载点的范畴显示
-k:杀死占用文件的进程(慎用!)。
lsof /dev/vda1
方案二:强行卸载
umount -f
inode号:
定义:每个文件或目录在创建时会被分配一个唯一的 inode 号,用于记录文件的元信息(如权限、大小、所有者等),但 不包含文件名。
文件名通过目录项(directory entry)关联到 inode 号,用户通过文件名访问文件时,系统会先找到对应的 inode,再通过 inode 访问实际数据。
唯一性:每个 inode 在同一个文件系统内唯一,但不同文件系统可能有重复的 inode 号。
与文件名分离:重命名或移动文件时,inode 号不变;删除文件时,inode 会被释放(硬链接计数归零后)。
空间限制:文件系统的 inode 总数是固定的(格式化时决定),用尽后即使磁盘有空间也无法创建新文件(可通过 df -i查看 inode 使用情况)
ls -i 文件名 # 显示文件名和 inode 号
stat 文件名 # 显示文件的详细 inode 信息
df -i # 显示各文件系统的 inode 使用情况
nginx优化
user nginx nginx; # 用户为nginx,组为nginx
# 在http块中添加或修改
http {
server_tokens off; # 关闭显示Nginx版本号
client_max_body_size 100M; # 允许客户端上传的最大文件大小,默认为1m,可根据需要调整,在http、server或location块中调整
limit_req_zone $binary_remote_addr zone=reqperip:10m rate=10r/s; # 定义限制区域,键为客户端IP,分配10m内存空间,允许每秒10个请求
limit_req_zone $server_name zone=reqperserver:10m rate=100r/s; # 按服务器名限制总速率
limit_conn_zone $binary_remote_addr zone=connperip:10m; # 定义限制区域,键为客户端IP,分配10m内存空间
limit_conn_zone $server_name zone=connperserver:10m; # 按服务器名限制总连接数
gzip on; # 开启gzip压缩
gzip_vary on; # 响应头中添加Vary: Accept-Encoding,告知代理服务器缓存多种版本的资源
gzip_min_length 1k; # 只压缩大于1KB的文件
gzip_comp_level 6; # 压缩级别(1-9),6是常用级别,权衡压缩比和CPU开销
gzip_buffers 4 16k; # 压缩缓冲区大小
gzip_proxied any; # 对所有代理请求都启用压缩
gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss image/svg+xml; # 指定压缩的文件类型
# 在server或location块中应用
server {
listen 443 ssl http2; # 监听443端口,启用SSL和HTTP/2
server_name yourdomain.com;
ssl_certificate /path/to/your/server.crt; # SSL证书文件
ssl_certificate_key /path/to/your/server.key; # SSL私钥文件
ssl_protocols TLSv1.2 TLSv1.3; # 启用安全协议版本,禁用旧的不安全协议
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256; # 指定加密套件,推荐使用强加密套件
ssl_prefer_server_ciphers on; # 优先使用服务器端的加密套件
ssl_session_cache shared:SSL:10m; # 配置SSL会话缓存,提高性能
ssl_session_timeout 10m; # SSL会话超时时间
location / {
limit_req zone=reqperip burst=20 nodelay; # 应用限制,burst是突发请求队列大小,nodelay表示对突发请求也立即处理但可能返回503
limit_conn connperip 10; # 限制每个IP同时最多10个连接
limit_conn connperserver 1000; # 限制该服务器总连接数不超过1000
...
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { # 匹配常见静态文件
valid_referers none blocked *.yourdomain.com yourdomain.com; # 定义有效的来源域名,none表示直接访问,blocked指没有referer信息或值被防火墙修改
if ($invalid_referer) { # 如果来源不在上述列表
return 403; # 返回403禁止访问
# 或者重写到一张警告图片 rewrite ^ /images/forbidden.png;
}
root /path/to/your/static/files;
expires 30d; # 设置浏览器缓存时间
}
# 还可以根据需求配置其他location,比如对特定目录的访问限制
location /admin/ {
allow 192.168.1.0/24; # 只允许特定IP段访问
deny all; # 拒绝其他所有
auth_basic "Restricted Area"; # 基础认证
auth_basic_user_file /etc/nginx/conf.d/htpasswd;
}
}
...
}
对未格式化的块设备(如 /dev/sdb1)-创建文件系统(格式化)
mke2fs
如:
mke2fs -t ext4 /dev/sdb1
对已创建但可能出问题的文件系统检查并修复
fsck
如:
fsck -y /dev/sdb1
如何查看系统的资源限制
ulimit -a
查找大文件
find /data -size +524M
找到修改30天以上的文件并删除
find 目录 -ctime +30
#c:表示属性被修改过
#a:表示文件被访问过
#m:表示内容被修改过
#time:按天查找
#min:按分钟查找
find ./ -name application-local.yaml -exec grep -l 'jdbc:mysql://127.0.0.1:3306' {} +
1.{} + 的作用:find会先找出当前目录及其子目录下所有名为 application-local.yaml的文件,然后将这些文件的路径作为一个列表,一次性传递给 grep命令。
2.-exec ... {} + 的作用:对 find找到的每个文件执行后续命令(grep)。
3.grep -l 'jdbc:mysql://127.0.0.1:3306' 的作用:在文件中搜索字符串 jdbc:mysql://127.0.0.1:3306,并只打印包含该字符串的文件名。
4.-l(小写 L):仅输出匹配的文件名,而非具体匹配行。
find ./ -name application-local.yaml -print0 | xargs -0 sed -i 's|jdbc:mysql://127.0.0.1:3306|jdbc:mysql://10.0.8.2:3306|g'
-print0:关键选项 - 用空字符(null character \0)而不是换行符作为文件路径的分隔符
为什么需要 -print0?
默认情况下,find用换行符分隔文件名
但如果文件名包含空格、换行等特殊字符,会导致解析错误
-print0使用空字符分隔,可以安全处理任何特殊字符的文件名
xargs -0
xargs:将标准输入的数据转换为后面命令的参数
-0:与 find -print0配对使用,告诉 xargs用空字符作为输入分隔符
xargs的工作机制:
读取 find传来的文件路径列表
将这些路径作为参数传递给 sed命令
自动处理参数数量,避免"参数列表过长"的错误
找到删除的文件对应的进程号
lsof | grep deleted
docker缩容
# 更新运行中容器的CPU限制
docker update --cpus 1 <container_name>
# 更新运行中容器的内存限制
docker update --memory 512m <container_name>
maven 构建服务:
mvn clean package -Dmaven.test.skip=true
在项目下查看项目所有的tag
git tag
这里使用指定版本的tag:
git checkout v2.1.0\(jdk17/21\)
查看服务器目前多少打开了多少个终端窗口
tty # /dev/pts/1 1表示第二个,即使0终端已经关闭了,他还是1
echo 你好啊 > /dev/pts/2 # 将 你好啊 发送给第三个终端,能发送证明目标终端窗口正在使用
时间同步
ntpdate ntp.aliyun.com # 同步阿里云的ntp时间服务器
date "+%F %T" # 查看时间 %F日期,%T时间。结果:2025-10-30 23:11:30
显示程序/进程的pid
pgrep top # 查找top进程的pid
yum查找命令工具所在包
yum provides */ifconfig
时间同步
# 1. 安装chrony时间同步服务(比ntpdate更稳定,开机自启,自动同步)
yum install -y chrony
# 2. 启动chronyd服务+设置开机自启
systemctl start chronyd && systemctl enable chronyd
# 3. 强制同步一次时间
chronyc -a makestep
# 4. 验证同步状态(显示同步成功即可)
chronyc tracking
静态ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
ONBOOT=yes #/不配yes开机不会开启网卡
IPADDR=192.168.10.129
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
DNS1=114.114.114.114
DNS2=8.8.8.8