Linux磁盘满了怎么清理,大文件查找命令

前言

网站突然打不开了?SSH连不上了?一查磁盘100%满了!本文讲怎么查找大文件、清理磁盘空间。

一、查看磁盘使用情况

df命令

df -h

输出:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   38G  2.0G  95% /

看什么:

  • Use%:使用率,超过90%就要注意了
  • Avail:可用空间

查看当前目录占用

du -sh

二、查找大文件

查找大于100M的文件

find / -type f -size +100M 2>/dev/null

解释:

  • /:从根目录开始找
  • -type f:只找文件
  • -size +100M:大于100M
  • 2>/dev/null:忽略错误信息

查找大于1G的文件

find / -type f -size +1G 2>/dev/null

按大小排序

find / -type f -size +100M 2>/dev/null | xargs du -h | sort -rh

三、查找大目录

查看各目录大小

du -sh /*

一级一级往下找

du -sh /var/*
du -sh /var/log/*
du -sh /var/lib/*

查看前10大目录

du -sh /* | sort -rh | head -10

四、常见大文件位置

1. 日志文件

/var/log/
/var/log/messages
/var/log/nginx/
/var/log/mysql/

2. 临时文件

/tmp/
/var/tmp/

3. 邮件

/var/spool/mail/

4. 数据库文件

/var/lib/mysql/

5. Docker镜像

/var/lib/docker/

6. 上传文件

/www/wwwroot/
/var/www/html/

五、清理方法

清理日志文件

方法1:清空文件

> /var/log/messages

方法2:删除旧日志

find /var/log -name "*.log" -mtime +30 -delete

删除30天前的日志。

清理yum缓存

yum clean all

清理Docker

docker system prune -a

清理临时文件

rm -rf /tmp/*

注意: 正在用的文件别删。

清理旧内核

package-cleanup --oldkernels --count=1

六、查看文件被谁占用

问题: 删了文件但磁盘没释放?

原因: 有进程还在写这个文件。

查看被删除但还被占用的文件

lsof | grep deleted

重启相关进程

systemctl restart nginx

七、常见坑

坑1:删了文件但空间没释放

原因: 进程还在写这个文件。

解决: 重启进程,或者用> 文件名清空。

坑2:日志一直涨

解决: 配置logrotate日志切割。

坑3:Docker占了很多空间

docker system df

清理:

docker system prune -a

八、自动清理脚本

写个脚本定期清理:

#!/bin/bash
# 清理30天前的日志
find /var/log -name "*.log" -mtime +30 -delete
# 清理yum缓存
yum clean all
# 清理Docker
docker system prune -f

加到crontab:

0 3 * * * /bin/bash /root/clean.sh

总结

记住:

  1. 用df -h看磁盘使用率
  2. 用du -sh /*看哪个目录大
  3. 用find / -size +100M找大文件
  4. 先看日志,再看Docker,再看临时文件
  5. 删文件前确认不用了
  6. 删了没释放就重启进程

最常用:

df -h
du -sh /*
find / -type f -size +100M 2>/dev/null

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-9 07:52 

Linux查看端口被占用,lsof和netstat命令

前言

启动服务的时候报"Address already in use"?想知道某个端口被哪个进程占了?Linux查看端口占用最常用的就是lsof和netstat命令,本文讲清楚。

一、为什么要查端口

  • 启动服务报端口被占
  • 看某个服务有没有启动
  • 排查安全问题,看有没有可疑端口

二、lsof命令

查看某个端口被哪个进程占用

lsof -i:端口号

例子: 查80端口

lsof -i:80

输出:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1234  root    6u  IPv4  12345      0t0  TCP *:http (LISTEN)

看什么:

  • COMMAND:进程名(nginx)
  • PID:进程ID(1234)
  • USER:运行用户(root)

查看所有TCP端口

lsof -i tcp

查看所有UDP端口

lsof -i udp

杀掉占用端口的进程

kill -9 $(lsof -ti:80)

三、netstat命令

查看某个端口

netstat -tlnp | grep 端口号

例子: 查80端口

netstat -tlnp | grep :80

输出:

tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  1234/nginx

看什么:

  • 最后一列:进程ID/进程名(1234/nginx)

参数解释

参数 含义
-t TCP端口
-l 只看监听中的
-n 显示数字,不解析域名
-p 显示进程名和PID

查看所有监听端口

netstat -tlnp

四、ss命令(推荐)

ss是netstat的升级版,更快。

查看某个端口

ss -tlnp | grep 端口号

例子:

ss -tlnp | grep :80

查看所有监听端口

ss -tlnp

五、三种命令对比

命令 优点 缺点
lsof 信息全,能看文件 慢
netstat 经典,大家都用 慢
ss 最快,推荐 新命令

推荐: 用ss,最快。

六、常见场景

场景1:启动Nginx报端口被占

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

排查:

lsof -i:80

解决: 杀掉占用的进程

kill -9 进程ID

场景2:看MySQL有没有启动

ss -tlnp | grep 3306

有输出就是启动了。

场景3:看SSH端口

ss -tlnp | grep sshd

七、常见坑

坑1:没加sudo看不到进程

普通用户只能看自己的进程,看不到别人的。

解决: 加sudo

sudo lsof -i:80
sudo netstat -tlnp

坑2:netstat命令找不到

CentOS7最小化安装没有netstat。

安装:

yum install -y net-tools

坑3:lsof命令找不到

安装:

yum install -y lsof

八、常用命令汇总

# 查80端口被谁占了
lsof -i:80
netstat -tlnp | grep :80
ss -tlnp | grep :80

# 看所有监听端口
netstat -tlnp
ss -tlnp

# 杀掉占用80端口的进程
kill -9 $(lsof -ti:80)

总结

记住:

  1. 查端口用 lsof -i:端口号
  2. 或者用 ss -tlnp | grep 端口号
  3. 看最后一列就是进程名和PID
  4. 杀掉用 kill -9 进程ID
  5. 推荐用ss,最快

最常用:

ss -tlnp | grep :80

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-9 07:48 

Linux查看系统负载,uptime和w命令详解

前言

服务器卡不卡,先看负载。Linux看系统负载最常用的就是uptime和w命令,一行输出就能看到系统跑了多久、现在有多少人登录、负载高不高。本文讲怎么看这些信息。

一、uptime命令

直接敲

uptime

输出:

 07:39:01 up 35 days,  2:15,  2 users,  load average: 0.08, 0.03, 0.00

逐个解释

字段 含义
07:39:01 当前时间
up 35 days, 2:15 系统运行了35天2小时15分
2 users 当前有2个用户登录
load average: 0.08, 0.03, 0.00 系统负载,分别是1分钟、5分钟、15分钟

负载怎么看

load average三个数:

  • 第一个:最近1分钟的平均负载
  • 第二个:最近5分钟的平均负载
  • 第三个:最近15分钟的平均负载

判断标准:

负载值 状态
0.00-0.70 正常
0.70-1.00 注意一下
1.00-2.00 有点高
2.00以上 很高了,要排查

注意: 负载和CPU核数有关。比如4核CPU,负载4.00才是满。

看CPU核数

nproc
# 4

或者:

cat /proc/cpuinfo | grep processor | wc -l
# 4

判断: 负载小于CPU核数就是正常的。

二、w命令

直接敲

w

输出:

 07:39:01 up 35 days,  2:15,  2 users,  load average: 0.08, 0.03, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    1.2.3.4          07:35    5.00s  0.03s  0.00s w
www      pts/1    5.6.7.8          07:30    8:12   0.01s  0.01s -bash

逐个解释

第一行和uptime一样。

下面是登录用户列表:

字段 含义
USER 用户名
TTY 终端类型(pts/0表示远程连接)
FROM 从哪个IP登录的
LOGIN@ 登录时间
IDLE 空闲时间
JCPU 整个终端所有进程用的CPU时间
PCPU 当前进程用的CPU时间
WHAT 当前在跑什么命令

三、其他查看命令

who命令

看谁登录了:

who

输出:

root     pts/0        2026-10-09 07:35 (1.2.3.4)
www      pts/1        2026-10-09 07:30 (5.6.7.8)

last命令

看登录历史:

last

输出最近登录的记录。

lastb命令

看失败的登录:

lastb

四、负载高了怎么排查

第一步:看CPU

top

按P按CPU排序,看哪个进程占CPU多。

第二步:看内存

free -h

看内存够不够,有没有用swap。

第三步:看磁盘

df -h

看磁盘满了没。

第四步:看IO

iostat

看磁盘IO高不高。

五、常见坑

坑1:负载高不代表CPU高

负载包括:

  • 正在用CPU的进程
  • 等着CPU的进程
  • 等着磁盘IO的进程

可能是磁盘IO高,CPU不高,但负载也高。

坑2:负载和核数对比

1核CPU,负载1.0就是满了。
4核CPU,负载4.0才是满了。

别光看数字,要看CPU核数。

坑3:三个负载数的区别

  • 1分钟高,5分钟、15分钟不高:可能是突然有个进程跑了一下
  • 15分钟都高:说明系统一直很忙

总结

记住:

  1. uptime 看系统运行时间和负载
  2. w 看谁登录了、在干嘛
  3. 负载三个数:1分钟、5分钟、15分钟
  4. 负载要和CPU核数对比
  5. 负载高了用top、free、df、iostat排查

最常用:

uptime    # 看负载
w         # 看谁在登录
top       # 看哪个进程占CPU

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-9 07:39 

Linux 查看内存使用

Linux 查看内存使用

服务器内存不够用的时候,得知道谁在吃内存。

1. free 命令

最常用的查看内存命令:

free -h

输出说明:

  • total: 总内存
  • used: 已用内存
  • free: 空闲内存
  • shared: 共享内存
  • buff/cache: 缓存
  • available: 可用内存

注意: 不要只看 free,要看 available。Linux 会用空闲内存做缓存,这是好事。

2. top 命令

实时查看内存占用:

top

常用操作:

  • 按 M 按内存排序
  • 按 P 按CPU排序
  • 按 q 退出

重点看:

  • %MEM:进程内存占用百分比
  • RES:进程实际占用物理内存

3. ps 命令

查看进程内存占用:

# 按内存占用排序,前10
ps aux --sort=-%mem | head -10

输出说明:

  • USER:进程用户
  • %MEM:内存占用
  • RSS:实际物理内存(KB)
  • COMMAND:进程命令

4. vmstat 命令

查看整体内存和CPU:

# 每秒刷新一次
vmstat 1

重点列:

  • swpd:交换分区使用
  • free:空闲内存
  • buff:缓冲区
  • cache:缓存
  • si:换入内存
  • so:换出内存

注意: si 和 so 大于0说明内存不够,在用swap。

5. /proc/meminfo

查看详细内存信息:

cat /proc/meminfo

重点看:

  • MemTotal:总内存
  • MemFree:空闲内存
  • MemAvailable:可用内存
  • Buffers:缓冲区
  • Cached:缓存
  • SwapTotal:交换分区总量
  • SwapFree:交换分区空闲

6. 缓存说明

Linux 内存缓存机制:

  • 空闲内存用来做文件缓存
  • 程序需要时会自动释放
  • cached 高不是坏事
  • available 才是真正可用的

7. 内存不够怎么办

1)找出吃内存的进程

ps aux --sort=-%mem | head

2)重启大内存进程

  • 确认是哪个进程
  • 重启释放内存

3)清理缓存

# 清理页面缓存
echo 1 > /proc/sys/vm/drop_caches

# 清理目录项和inode
echo 2 > /proc/sys/vm/drop_caches

# 全部清理
echo 3 > /proc/sys/vm/drop_caches

4)加交换分区

  • 临时方案,治标不治本
  • 最好加物理内存

8. 常用组合命令

# 查看内存占用前5的进程
ps aux --sort=-%mem | head -6

# 查看swap使用最多的进程
for i in $(ls /proc | grep -E '^[0-9]+'); do
    awk '/VmSwap/{print $2/1024 " MB", $0}' /proc/$i/status 2>/dev/null
done | sort -nr | head

9. 监控建议

1)设置内存告警

  • 超过80%告警
  • 及时处理

2)定期检查

  • 每天看一次内存
  • 发现异常及时处理

3)不要盲目清缓存

  • 缓存是好事
  • 清缓存会降低性能

总结

Linux 查看内存使用要点:

  • free -h 看整体内存
  • top 按M看内存占用
  • ps aux 排序找大进程
  • vmstat 看swap使用
  • /proc/meminfo 看详细信息
  • 不要只看 free,要看 available
  • cached 高是好事
  • 内存不够先找大进程
  • 清缓存要谨慎
  • 最好加物理内存

学会看内存,服务器问题就好排查了。


emer 发布于  2026-10-9 07:29 

Linux 查看磁盘空间

Linux 查看磁盘空间

服务器磁盘满了怎么办?这些命令帮你快速排查。

1. df 查看整体磁盘

基本用法

# 查看磁盘使用情况
df

# 人性化显示(带M、G单位)
df -h

常用参数

  • -h: 人性化显示大小
  • -T: 显示文件系统类型
  • -i: 查看 inode 使用情况
# 常用组合
df -hT

输出说明:

  • Filesystem: 磁盘分区
  • Size: 总大小
  • Used: 已用
  • Avail: 可用
  • Use%: 使用率
  • Mounted on: 挂载点

2. du 查看目录大小

查看当前目录大小

# 当前目录总大小
du -sh

# 查看指定目录
du -sh /var/log

查看子目录大小

# 查看当前目录下每个子目录大小
du -sh *

# 按大小排序
du -sh * | sort -rh

常用参数

  • -s: 只显示总计
  • -h: 人性化显示
  • --max-depth=1: 只看一层
# 查看根目录下各目录大小
du -sh /* --max-depth=1

3. 查找大文件

查找大于100M的文件

find / -type f -size +100M -exec ls -lh {} \;

查找最近修改的大文件

find /var -type f -size +50M -mtime -7

4. 常见排查场景

1)磁盘满了

# 先看哪个分区满了
df -h

# 找到大目录
du -sh /* | sort -rh

2)日志占空间

# 查看日志目录大小
du -sh /var/log

# 清空大日志文件
> /var/log/large.log

3)inode满了

# 查看inode使用
df -i

5. 清理磁盘

清理日志文件

# 清空文件(不删除文件)
> /var/log/messages

# 删除旧日志
rm /var/log/*.old

清理缓存

# 清理包缓存
yum clean all

清理 Docker 没用的镜像

docker system prune -a

总结

Linux 查看磁盘空间要点:

  • df -h 查看整体磁盘使用
  • du -sh 查看目录大小
  • find 查找大文件
  • 磁盘满了先看分区,再找大目录
  • 日志文件要定期清理
  • 注意 inode 也可能满
  • 用 sort -rh 按大小排序

运维排查磁盘问题,这些命令天天用。


emer 发布于  2026-10-9 07:21 

Linux 查看系统日志

Linux 查看系统日志

排查问题先看日志,这些命令要记住。

1. 系统日志位置

/var/log/messages    # 系统主日志
/var/log/syslog      # Debian/Ubuntu 系统日志
/var/log/boot.log    # 启动日志
/var/log/cron        # 定时任务日志
/var/log/secure      # 安全日志(登录、sudo等)
/var/log/nginx/      # Nginx 日志
/var/log/httpd/      # Apache 日志
/var/log/mysql/      # MySQL 日志

2. 基本查看命令

cat:查看全部

cat /var/log/messages

tail:看末尾几行(最常用)

# 看最后10行
tail /var/log/messages

# 看最后20行
tail -n 20 /var/log/messages

# 实时跟踪日志(最常用)
tail -f /var/log/messages

head:看开头几行

head -n 10 /var/log/messages

3. 搜索日志

grep:搜索关键词

# 搜索错误信息
grep "error" /var/log/messages

# 不区分大小写
grep -i "error" /var/log/messages

# 显示行号
grep -n "error" /var/log/messages

# 反向匹配(不包含error)
grep -v "debug" /var/log/messages

结合管道

# 实时日志里搜索错误
tail -f /var/log/messages | grep "error"

# 搜索最近的nginx错误
tail -n 1000 /var/log/nginx/error.log | grep "500"

4. journalctl 查看 systemd 日志

# 查看全部日志
journalctl

# 看最后100行
journalctl -n 100

# 实时跟踪
journalctl -f

# 按服务查看
journalctl -u nginx

# 按时间查看
journalctl --since "1 hour ago"
journalctl --since "2024-01-01" --until "2024-01-02"

5. 常用排查场景

1)服务器登录失败

grep "Failed password" /var/log/secure

2)服务起不来

systemctl status nginx
journalctl -u nginx -n 50

3)磁盘满了

df -h
du -sh /var/log/*

4)定时任务没执行

cat /var/log/cron

6. 日志清理

手动删除大日志

# 查看日志大小
du -sh /var/log/*

# 清空日志(不删除文件)
> /var/log/messages

# 删除旧日志
rm /var/log/messages.1

logrotate 自动切割

  • Linux 自带日志切割工具
  • 配置文件在 /etc/logrotate.conf
  • 一般不用管,自动轮转

总结

Linux 查看日志要点:

  • 日志都在 /var/log/ 目录
  • tail -f 实时看日志最常用
  • grep 搜索关键词
  • journalctl 查 systemd 服务日志
  • 排查问题先看错误日志
  • 日志太大要及时清理
  • 系统自动轮转不用手动管

运维排查,看日志是第一步。


emer 发布于  2026-10-9 07:16 

Linux 文件权限详解

Linux 文件权限详解

Linux 权限是基础,搞不懂经常出问题。

1. 查看权限

ls -l

输出:

-rw-r--r-- 1 root root 1000 Oct 8 10:00 test.txt

2. 权限含义

第一位:文件类型

    • 普通文件
  • d 目录
  • l 软链接

后面9位:分3组

  • 第1组:所有者权限
  • 第2组:所属组权限
  • 第3组:其他人权限

3个字母:

  • r 读(4)
  • w 写(2)
  • x 执行(1)

比如 rw-r--r--:

  • 所有者:读写(6)
  • 组:只读(4)
  • 其他人:只读(4)

3. 修改权限 chmod

数字方式:

# 所有者读写执行,组读执行,其他人读执行
chmod 755 test.sh

# 所有人只读
chmod 444 test.txt

字母方式:

# 给所有者加执行权限
chmod u+x test.sh

# 给组加写权限
chmod g+w test.txt

# 去掉其他人的读权限
chmod o-r test.txt

4. 修改所有者 chown

# 修改所有者
chown www:www test.txt

# 递归修改目录
chown -R www:www /www/wwwroot

5. 常用权限

  • 目录:755(所有者读写执行,其他人读执行)
  • 普通文件:644(所有者读写,其他人只读)
  • 脚本文件:755

6. 常见问题

1)网站打不开:

  • 检查目录权限是不是 755
  • 检查文件权限是不是 644
  • 检查所有者是不是 www

2)上传不了文件:

  • 检查目录有没有写权限

3)脚本执行不了:

  • 检查有没有执行权限

总结

Linux 文件权限要点:

  • r=4, w=2, x=1
  • chmod 修改权限
  • chown 修改所有者
  • 目录 755,文件 644
  • 权限不对经常出问题

做运维,权限一定要搞懂。


emer 发布于  2026-10-8 07:26 

Linux 防火墙配置详解

Linux 防火墙配置详解

服务器安全第一步就是防火墙,学会配置很重要。

1. firewalld(CentOS 7+)

查看状态:

systemctl status firewalld

开启/关闭:

# 开启
systemctl start firewalld

# 关闭
systemctl stop firewalld

# 开机自启
systemctl enable firewalld

2. 开放端口

开放单个端口:

firewall-cmd --zone=public --add-port=80/tcp --permanent

开放多个端口:

firewall-cmd --zone=public --add-port=80-90/tcp --permanent

重新加载生效:

firewall-cmd --reload

3. 查看端口

# 查看所有开放端口
firewall-cmd --list-ports

# 查看某个端口是否开放
firewall-cmd --query-port=80/tcp

4. 关闭端口

firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --reload

5. iptables(旧版)

查看规则:

iptables -L -n

开放端口:

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

保存规则:

service iptables save

6. 常用端口

# 常用端口
22      SSH
80      HTTP
443     HTTPS
3306    MySQL
6379    Redis
8080    Tomcat

7. 常见问题

1)端口开了还是访问不了:

  • 检查云服务商安全组
  • 检查服务器内部防火墙

2)远程连接不上:

  • 检查 22 端口是否开放
  • 检查 sshd 是否启动

总结

Linux 防火墙要点:

  • firewalld 管理端口
  • --permanent 永久生效
  • --reload 重新加载
  • 记得开放安全组
  • 常用端口按需开放

做运维,防火墙是基本功。


emer 发布于  2026-10-8 07:22 

MySQL忘记root密码重置(Linux环境)

MySQL root密码忘了进不去数据库?别慌,按下面步骤操作,5分钟就能重置。

1. 先停止MySQL服务

systemctl stop mysqld

CentOS 7 默认是这个命令,如果是 mariadb 就改成 systemctl stop mariadb。

2. 跳过权限验证启动MySQL

mysqld_safe --skip-grant-tables &

这一步会跳过密码验证,直接进入MySQL,不需要输密码。

3. 无密码登录MySQL

mysql -u root

现在直接就能进去了,不需要密码。

4. 重置root密码

USE mysql;

-- MySQL 5.7 及以上版本
UPDATE user SET authentication_string = PASSWORD('你的新密码') WHERE User = 'root';

-- 如果是 MySQL 5.6 及以下版本
UPDATE user SET password = PASSWORD('你的新密码') WHERE User = 'root';

FLUSH PRIVILEGES;

EXIT;

把 你的新密码 换成你想设置的新密码,注意密码强度。

5. 重启MySQL服务

systemctl start mysqld

6. 用新密码登录测试

mysql -u root -p

输入刚才设置的新密码,能登录就成功了。

常见坑

坑1:mysqld_safe 找不到
有些系统用的是 mysqld,试试:

mysqld --skip-grant-tables &

坑2:改完密码登录还是不行
一定要执行 FLUSH PRIVILEGES;,不然不生效。

坑3:密码太简单报错
MySQL 有密码强度要求,新密码最好是字母+数字+符号,8位以上。

坑4:MySQL 8.0 版本
MySQL 8.0 改密码的语法不一样:

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-8 07:16 

Linux 查看系统资源

Linux 查看系统资源

服务器卡了慢了,得知道哪个进程占资源多。整理常用的查看命令。

1. 查看内存使用

# 查看内存使用情况
free -h

# 持续查看
free -h 1

输出说明:

  • total:总内存
  • used:已使用
  • free:空闲
  • buff/cache:缓存
  • available:可用

2. 查看 CPU 负载

# 查看 CPU 信息
top

# 按 q 退出

top 常用快捷键:

  • P:按 CPU 排序
  • M:按内存排序
  • 1:查看每个核心

3. 查看磁盘使用

# 查看磁盘空间
df -h

# 查看目录大小
du -sh /www/

# 查看当前目录下每个文件大小
du -sh *

4. 查看进程

# 查看所有进程
ps aux

# 查看 PHP 进程
ps aux | grep php

# 查看端口占用
netstat -tlnp

5. 查看系统信息

# 查看系统版本
cat /etc/os-release

# 查看内核版本
uname -a

# 查看 CPU 核心数
nproc

# 查看内存大小
cat /proc/meminfo | head -5

6. 查找大文件

# 查找大于100M的文件
find / -type f -size +100M

# 查找最近7天修改的文件
find /www -type f -mtime -7

7. 常用场景

网站卡了:

  1. top 看 CPU 和内存
  2. df -h 看磁盘满没满
  3. 看日志

内存不够用:

  1. free -h 看内存
  2. top 按 M 排序找占内存大的进程

总结

常用命令记这几个:

  • 内存:free -h
  • CPU:top
  • 磁盘:df -h / du -sh
  • 进程:ps aux
  • 端口:netstat

做运维这些命令天天用,必须熟。


emer 发布于  2026-10-8 07:07 

Linux 防火墙配置详解

Linux 防火墙配置详解

服务器安全第一关就是防火墙,配置错了就远程连不上了,这篇讲常用配置。

1. firewalld(CentOS7 默认)

查看状态:

# 查看防火墙状态
firewall-cmd --state

# 查看开放的端口
firewall-cmd --list-ports

# 查看开放的服务
firewall-cmd --list-services

开放端口:

# 开放 80 端口
firewall-cmd --permanent --add-port=80/tcp

# 开放 443 端口
firewall-cmd --permanent --add-port=443/tcp

# 开放多个端口范围
firewall-cmd --permanent --add-port=8000-9000/tcp

# 重载生效
firewall-cmd --reload

关闭端口:

# 关闭 80 端口
firewall-cmd --permanent --remove-port=80/tcp

# 重载
firewall-cmd --reload

开放服务:

# 开放 nginx 服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

# 重载
firewall-cmd --reload

2. iptables(老系统常用)

查看规则:

iptables -L -n

开放端口:

# 开放 22 端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 开放 80 端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 保存规则
service iptables save

3. 常用安全配置

只允许指定 IP 访问 SSH:

# 只允许 192.168.1.100 访问 22 端口
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port protocol='tcp' port='22' accept"

# 拒绝其他所有 IP
firewall-cmd --permanent --remove-service=ssh

firewall-cmd --reload

4. 常用端口说明

端口 服务
22 SSH 远程连接
80 HTTP 网站
443 HTTPS 网站
3306 MySQL 数据库
6379 Redis 缓存
8080 应用服务

5. 常见问题

1)SSH 连不上了:

  • 检查防火墙是不是把 22 端口关了
  • 用控制台登录服务器重新开放

2)网站打不开:

  • 检查 80/443 端口开了没
  • 重载防火墙生效

3)数据库连不上:

  • 3306 端口别对公网开放
  • 只允许本地或指定 IP 访问

总结

防火墙配置记住三点:

  • 先开 22 端口,不然自己都连不上
  • 网站开 80 和 443
  • 数据库别对外网开放

安全第一,别图省事直接关防火墙。


emer 发布于  2026-10-7 07:16 

Linux查看系统运行级别,multi-user.target详解

前言

经常听到别人说"运行级别 3"、"运行级别 5",这是什么意思?CentOS7 之后用 systemd 代替了老的 SysVinit,运行级别也变成了 target。本文讲一下怎么查看和切换系统运行级别。

老的运行级别(SysVinit)

老系统(CentOS6 之前)用数字表示运行级别:

级别 含义
0 关机
1 单用户模式(救援模式)
2 多用户模式(无 NFS)
3 完全多用户模式(命令行,服务器常用)
4 未使用
5 图形界面模式
6 重启

新的 target(systemd)

CentOS7 之后用 target 代替了数字运行级别:

target 对应老级别 含义
poweroff.target 0 关机
rescue.target 1 救援模式
multi-user.target 3 命令行模式(服务器常用)
graphical.target 5 图形界面模式
reboot.target 6 重启

查看当前运行级别

systemctl 命令

systemctl get-default

输出:

multi-user.target

就是当前默认的运行级别是命令行模式。

老命令(还能用)

runlevel

输出类似:

N 3

第一个是上次运行级别(N 表示没有),第二个是当前运行级别。

切换运行级别

临时切换(重启后恢复)

systemctl isolate 目标target

比如从图形界面切到命令行:

systemctl isolate multi-user.target

或者从命令行切到图形界面:

systemctl isolate graphical.target

永久切换(重启后生效)

systemctl set-default 目标target

比如默认启动到命令行模式:

systemctl set-default multi-user.target

默认启动到图形界面:

systemctl set-default graphical.target

常用操作

进入救援模式

系统出问题了进不去?进救援模式:

systemctl rescue

进入紧急模式

更底层的救援模式:

systemctl emergency

关机

systemctl poweroff

或者:

systemctl halt

重启

systemctl reboot

常见坑

坑1:图形界面切命令行后黑屏

执行了 isolate multi-user.target,屏幕黑了。

原因: 这是正常的,切到命令行模式就是黑屏,只有终端提示符。

解决: 输入用户名密码登录就行。

坑2:设置了 multi-user.target 但还是进图形界面

执行了 set-default multi-user.target,但重启后还是进图形界面。

原因: 可能有多个桌面管理器在抢着启动。

解决: 确认一下:

systemctl get-default

应该显示 multi-user.target。如果不对,再执行一次。

坑3:把运行级别设成 0 或 6 了

不小心设成了 poweroff.target 或 reboot.target。

后果: 一开就关机或者一开就重启,无限循环。

解决: 进救援模式改回来。

总结

命令 作用
systemctl get-default 查看当前默认运行级别
systemctl set-default multi-user.target 设置为命令行模式
systemctl set-default graphical.target 设置为图形界面模式
systemctl isolate multi-user.target 临时切到命令行
systemctl isolate graphical.target 临时切到图形界面
runlevel 老命令查看运行级别

服务器一般用 multi-user.target(命令行模式),更省资源、更稳定。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 08:05 

Linux查看端口被哪个进程占用,lsof命令

前言

启动服务的时候提示 "Address already in use",端口被占了,但不知道被哪个进程占了?这时候就需要用 lsof 或者 netstat 命令来查一下。本文讲一下怎么用。

lsof 命令

安装

CentOS 最小化安装可能没有 lsof:

yum install -y lsof

查看某个端口被哪个进程占用

lsof -i:端口号

比如看 80 端口被谁占了:

lsof -i:80

输出类似:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1234  root    6u  IPv4  12345      0t0  TCP *:http (LISTEN)

重点看:

  • PID:进程号
  • COMMAND:进程名

知道了 PID 之后,想杀掉就用 kill PID。

查看所有正在监听的端口

lsof -i -P -n | grep LISTEN

输出所有处于监听状态的端口和对应的进程。

netstat 命令

安装

来自 net-tools 包:

yum install -y net-tools

查看端口被哪个进程占用

netstat -tlnp | grep 端口号

比如看 80 端口:

netstat -tlnp | grep :80

输出类似:

tcp   0   0 0.0.0.0:80   0.0.0.0:*   LISTEN   1234/nginx

最后一列就是 PID/进程名。

参数解释

参数 含义
-t 显示 TCP 连接
-l 只显示监听状态的
-n 显示数字,不解析域名
-p 显示进程名和 PID

查看所有监听端口

netstat -tlnp

fuser 命令

查看端口被哪个进程占用

fuser 端口号/tcp

比如:

fuser 80/tcp

输出:

80/tcp:              1234

直接显示 PID,简单粗暴。

杀掉占用端口的进程

fuser -k 80/tcp

直接把占用 80 端口的进程杀掉。

常见场景

场景1:启动 Nginx 提示端口被占

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

查一下:

lsof -i:80

发现是旧的 nginx 进程没杀掉,直接杀:

kill 1234

或者:

fuser -k 80/tcp

场景2:3306 端口不知道被谁占了

lsof -i:3306

发现是 MySQL 进程,正常的。

场景3:找出所有被占用的端口

netstat -tlnp

列出所有正在监听的端口。

常见坑

坑1:lsof 命令找不到

执行 lsof 提示 command not found。

原因: 没装 lsof 包。

解决:

yum install -y lsof

坑2:普通用户看不到其他用户的进程

用普通用户执行 lsof,看不到 root 的进程。

原因: 权限不够。

解决: 加 sudo 或者切 root:

sudo lsof -i:80

坑3:端口明明没被占但提示被占

服务明明没启动,但启动时提示端口被占。

原因: 可能有 TIME_WAIT 状态的连接还没释放。

解决: 等一会儿再试,或者改端口。

坑4:杀了进程端口还是没释放

杀掉进程了,但端口还是显示被占。

原因: 进程还在退出中,等几秒就好了。

总结

命令 作用
lsof -i:端口号 查看端口被哪个进程占用
netstat -tlnp \| grep :端口号 用 netstat 查端口
fuser 端口号/tcp 查看端口对应的 PID
fuser -k 端口号/tcp 杀掉占用端口的进程

最常用的就是 lsof -i:端口号,一眼就能看到进程名和 PID。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 08:02 

Linux上传下载文件,rz和sz命令使用

前言

经常需要从本地电脑上传文件到服务器,或者把服务器上的文件下载到本地。除了用 FTP 工具,还有更简单的 rz 和 sz 命令,直接在终端里就能操作。本文讲一下怎么用。

安装 lrzsz

rz 和 sz 命令来自 lrzsz 包,CentOS 最小化安装可能没有:

yum install -y lrzsz

Ubuntu 的话:

apt install -y lrzsz

rz 上传文件(从本地上传到服务器)

基本用法

直接输入:

rz

执行后会弹出一个文件选择窗口,选你要上传的文件,点确定就开始上传了。

注意: 文件会上传到你当前所在的目录。

指定文件名

上传后直接改成指定名字:

rz -y 新文件名

-y 是覆盖同名文件。

上传多个文件

执行 rz 之后在文件选择窗口可以按住 Ctrl 多选。

sz 下载文件(从服务器下载到本地)

下载单个文件

sz 文件名

比如下载 index.html:

sz index.html

执行后会弹出保存窗口,选保存位置就开始下载了。

下载多个文件

sz 文件1 文件2 文件3

比如:

sz a.txt b.txt c.txt

下载整个目录(先打包)

sz 不能直接下载目录,要先打包:

tar -zcvf backup.tar.gz /var/www/html
sz backup.tar.gz

常见使用场景

场景1:上传配置文件

# 先进入要上传的目录
cd /etc/nginx/conf.d/

# 上传
rz

选本地的 nginx 配置文件,上传完就直接放到这个目录了。

场景2:下载日志文件

# 进入日志目录
cd /var/log/nginx/

# 下载访问日志
sz access.log

场景3:上传压缩包

本地把项目打包成 zip,然后:

cd /var/www/html/
rz

选本地的项目 zip 文件,上传完再解压。

常见坑

坑1:rz 命令找不到

执行 rz 提示 command not found。

原因: 没装 lrzsz 包。

解决:

yum install -y lrzsz

坑2:上传的文件不知道去哪了

执行了 rz,但不知道文件上传到哪了。

原因: 文件上传到你当前所在的目录。

解决: 上传前先 pwd 看一下当前目录在哪。

坑3:用了某些 SSH 工具不支持 rz/sz

有些 SSH 客户端(比如 Windows 自带的 cmd)不支持 rz/sz。

原因: rz/sz 需要终端支持 ZModem 协议。

解决: 用支持的 SSH 工具,比如 Xshell、SecureCRT、FinalShell、MobaXterm。

坑4:大文件上传慢

上传几百 M 的文件特别慢。

原因: rz/sz 走的是 SSH 通道,速度不快。

解决: 大文件用 SFTP 或者专门的传输工具(FileZilla)更快。

坑5:上传的文件是乱码

上传完中文文件名变成乱码。

原因: 编码问题。

解决: 用英文文件名,或者先打包成 zip 再上传。

总结

命令 作用
rz 从本地上传文件到服务器
sz 文件名 从服务器下载文件到本地

前提: 要先装 lrzsz 包,而且 SSH 工具要支持 ZModem 协议。

小文件用 rz/sz 很方便,大文件还是用 SFTP 吧。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 08:01 

Linux查看所有服务,systemctl命令大全

前言

CentOS7 之后用 systemctl 管理服务,代替了老的 service 和 chkconfig 命令。本文把常用的 systemctl 命令都整理出来,新手照着用就行。

查看服务

查看所有服务

systemctl list-units --type=service

列出所有正在运行的服务。

查看所有服务(包括没运行的)

systemctl list-unit-files --type=service

查看正在运行的服务

systemctl list-units --type=service --state=running

查看某个服务状态

systemctl status 服务名

比如看 nginx 状态:

systemctl status nginx

输出会显示服务是否在运行、PID、内存占用、最近日志等。

启动和停止服务

启动服务

systemctl start 服务名

比如:

systemctl start nginx

停止服务

systemctl stop 服务名

比如:

systemctl stop nginx

重启服务

systemctl restart 服务名

比如:

systemctl restart nginx

重载配置(不重启)

修改了配置文件后,用 reload 重载,不用重启:

systemctl reload 服务名

比如:

systemctl reload nginx

平滑重启(reload 不行就用这个)

systemctl reload-or-restart 服务名

设置开机自启

开启开机自启

systemctl enable 服务名

比如:

systemctl enable nginx

关闭开机自启

systemctl disable 服务名

比如:

systemctl disable nginx

查看是否开机自启

systemctl is-enabled 服务名

输出 enabled 就是开机自启,disabled 就是不是。

其他常用操作

查看服务是否在运行

systemctl is-active 服务名

输出 active 就是在运行,inactive 就是没运行。

查看服务日志

journalctl -u 服务名

比如看 nginx 日志:

journalctl -u nginx

实时看服务日志

journalctl -u 服务名 -f

和 tail -f 一样,实时输出最新日志。

查看服务开机自启状态

systemctl list-unit-files --type=service | grep enabled

列出所有开机自启的服务。

常见服务名

服务名 对应服务
nginx Nginx 网页服务
httpd Apache 网页服务
mysqld MySQL 数据库
firewalld 防火墙
crond 定时任务
sshd SSH 远程连接
php-fpm PHP 解析
redis Redis 缓存

常见坑

坑1:服务名写错了

执行 systemctl 报错 Unit xxx.service could not be found。

原因: 服务名写错了。

解决: 先列一下所有服务,找到正确的服务名:

systemctl list-unit-files --type=service | grep 关键词

坑2:启动了服务但还是访问不了

服务显示 active,但外部还是访问不了。

原因: 防火墙没开端口,或者服务本身配置错了。

解决: 先看防火墙开了没,再看服务日志:

journalctl -u 服务名

坑3:开机自启了但重启后没起来

设置了 enable,但重启后服务还是没启动。

原因: 服务配置有问题,启动失败了。

解决: 看日志找原因:

journalctl -u 服务名

坑4:用了老命令 service

执行 service nginx start 能用,但不推荐了。

原因: 这是老命令,新系统都用 systemctl。

解决: 换成 systemctl start nginx。

总结

操作 命令
查看所有服务 systemctl list-units --type=service
查看服务状态 systemctl status 服务名
启动服务 systemctl start 服务名
停止服务 systemctl stop 服务名
重启服务 systemctl restart 服务名
重载配置 systemctl reload 服务名
开机自启 systemctl enable 服务名
关闭开机自启 systemctl disable 服务名
查看日志 journalctl -u 服务名

systemctl 就这几个常用命令,记住就够用了。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 07:59 

Linux怎么修改主机名,永久生效方法

前言

新装好的服务器默认主机名是 localhost 或者一串乱七八糟的字符,不好区分。怎么改成自己想要的名字,而且重启后还生效?本文讲一下。

查看当前主机名

先看看现在主机名是什么:

hostname

输出类似:

localhost.localdomain

修改主机名的方法

方法一:hostnamectl(推荐,CentOS7+)

这是最方便的方法,一条命令永久生效:

hostnamectl set-hostname 新主机名

比如改成 web-server:

hostnamectl set-hostname web-server

注意: 主机名只能用小写字母、数字、横杠(-),不能用下划线、中文、空格。

方法二:修改配置文件

编辑 /etc/hostname 文件:

vi /etc/hostname

把里面的内容改成新的主机名,保存退出。

然后重启生效:

reboot

或者不重启,手动让它生效:

hostname 新主机名

方法三:临时修改

只改当前运行时的主机名,重启后就恢复:

hostname 新主机名

注意: 这个只是临时生效,重启后还是原来的。

修改后验证

重新登录一下 SSH,或者执行:

bash

让当前 shell 生效,然后看:

hostname

应该显示新的主机名了。

同时修改 hosts

有些服务(比如 MySQL)会用到主机名,最好同时把 /etc/hosts 也改一下:

vi /etc/hosts

找到类似这一行:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

在后面加上新主机名:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 web-server

保存退出。

常见坑

坑1:改了主机名但命令行没变

执行了 hostnamectl set-hostname,但命令行前面还是显示旧的。

原因: 当前 shell 会话没刷新。

解决: 退出重新登录 SSH,或者执行 bash 开个新 shell。

坑2:重启后又变回原来的

改了主机名,重启之后又变回去了。

原因: 只执行了 hostname 新名字(临时修改),没改配置文件。

解决: 用 hostnamectl set-hostname 新名字 永久修改。

坑3:主机名有大写或者下划线

主机名用了大写字母或者下划线,有些服务报错。

原因: 主机名规范要求只能用小写字母、数字、横杠。

正确写法: web-server-01
错误写法: Web_Server_01

坑4:改了主机名导致服务连不上

改了主机名之后,某些服务连不上数据库或者其他服务。

原因: 那些服务里配置的还是旧主机名。

解决: 把相关服务的配置里的主机名也改过来,或者同时改 /etc/hosts 做映射。

总结

方法 命令 是否永久
hostnamectl hostnamectl set-hostname 新名字 是(推荐)
修改 /etc/hostname 编辑文件后重启 是
hostname hostname 新名字 否(临时)

推荐用 hostnamectl set-hostname,一条命令搞定,永久生效。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 07:58 

Linux查看网卡信息,ip addr和ifconfig命令

前言

想知道服务器有几块网卡、IP 地址是多少、MAC 地址是多少?Linux 下有两个常用命令:ip addr 和 ifconfig。本文讲一下它们的用法和区别。

ip addr 命令(推荐)

现在新的 Linux 系统都推荐用 ip 命令,功能比 ifconfig 更强大。

查看所有网卡信息

ip addr

或者简写:

ip a

输出类似:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever

输出解释

字段 含义
lo 本地回环网卡
eth0 物理网卡名称
state UP 网卡状态是开启的
link/ether MAC 地址
inet IP 地址
/24 子网掩码(255.255.255.0)

只看 IP 地址

不想看那么多信息,只看 IP:

ip addr show eth0 | grep inet

或者更简洁:

ip a s eth0

只看 IPv4 地址

ip -4 addr

查看网卡统计信息

ip -s link

能看到收发包、丢包等统计信息。

ifconfig 命令(老命令)

ifconfig 是老命令,来自 net-tools 包,现在慢慢被淘汰了,但很多老用户还是习惯用。

安装

CentOS 最小化安装可能没有:

yum install -y net-tools

查看所有网卡

ifconfig

输出类似:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        ether 00:16:3e:12:34:56  txqueuelen 1000  (Ethernet)
        RX packets 12345  bytes 1234567 (1.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6789  bytes 987654 (987.6 KB)
        TX errors 0  dropped 0  overruns 0  carrier 0

只看某个网卡

ifconfig eth0

查看 lo 网卡

ifconfig 默认不显示 lo(回环网卡),要看的话加 -a:

ifconfig -a

ip 和 ifconfig 的区别

对比项 ip addr ifconfig
新老 新命令,推荐 老命令,逐步淘汰
包 iproute2 包(默认装) net-tools 包(要单独装)
功能 更强大 基本够用
输出 信息更全 简洁

其他常用命令

查看路由表

ip route

或者老命令:

route -n

查看 DNS 配置

cat /etc/resolv.conf

查看网卡连接状态

cat /sys/class/net/eth0/carrier

输出 1 表示网线插着,0 表示没插。

查看网卡速率

ethtool eth0 | grep Speed

常见坑

坑1:ifconfig 命令找不到

执行 ifconfig 提示 command not found。

原因: CentOS7 最小化安装不带 net-tools 包。

解决:

yum install -y net-tools

或者直接用 ip addr,不用装包。

坑2:网卡名不是 eth0

新系统网卡名可能是 ens33、ens33、enp0s3 之类的。

原因: CentOS7 用了新的网卡命名规则。

解决: 先 ip addr 看一下实际网卡名是什么,然后替换。

坑3:IP 地址不对

看到的 IP 地址和你预期的不一样。

原因: 可能有多个网卡,或者是云服务器的内网 IP,不是公网 IP。

解决: 先 ip addr 看所有网卡,确认哪个是你要的。

坑4:网卡 down 了

网卡状态是 DOWN,连不上网。

解决: 手动开启:

ip link set eth0 up

或者:

ifconfig eth0 up

总结

命令 作用
ip addr 查看所有网卡信息(推荐)
ip a 简写
ip a s eth0 只看 eth0 网卡
ifconfig 老命令查看网卡
ifconfig eth0 只看 eth0
ip route 查看路由表

现在都推荐用 ip addr,功能更全,还不用额外装包。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 07:54 

Linux查看历史命令,history命令使用技巧

前言

在服务器上敲了很多命令,突然想找之前执行过的某条命令,怎么办?history 命令就能帮你查看历史命令。本文讲一下 history 的常用用法和技巧。

基本用法

查看历史命令

history

输出会列出你执行过的所有命令,每条前面有个编号,比如:

  100  yum install -y wget
  101  systemctl restart nginx
  102  df -h

执行第 N 条历史命令

用 !编号 直接执行:

!101

就会重新执行第 101 条命令。

执行上一条命令

几种方式都行:

!!

或者按向上方向键,再回车。

搜索历史命令

输入开头几个字母,然后按 Ctrl + R:

(reverse-i-search)`sys': systemctl restart nginx

会搜索你输入过的包含这个关键词的历史命令,找到之后回车执行。

再按一次 Ctrl + R 会继续往前找下一个匹配的。

常用技巧

只看最近 N 条

history 10

只看最近 10 条命令。

搜索历史命令里的关键词

history | grep 关键词

比如找所有包含 nginx 的命令:

history | grep nginx

执行最近一条以某个关键词开头的命令

!关键词

比如最近一条以 yum 开头的命令:

!yum

会直接执行最近一次输入的 yum 开头的命令。

替换上一条命令里的内容

比如上一条命令是 cp file1.txt file2.txt,想改成 mv file1.txt file2.txt:

^cp^mv

这样就把上一条命令里的 cp 替换成 mv 再执行。

清空历史命令

清空当前会话的历史

history -c

注意:这个只是清空当前内存里的历史,还没写入文件。

清空历史文件

history -w

把当前内存里的历史写入文件(覆盖掉旧的)。

彻底清空

history -c
history -w

两步一起执行,彻底清空所有历史命令。

删除某一条历史命令

history -d 编号

比如删除第 100 条:

history -d 100

历史命令保存在哪

历史命令默认保存在:

~/.bash_history

每个用户都有自己的 .bash_history 文件。

查看历史文件

cat ~/.bash_history

修改历史记录条数

默认记录 1000 条,可以改:

echo "HISTSIZE=10000" >> /etc/profile
echo "HISTFILESIZE=10000" >> /etc/profile
source /etc/profile

改成记录 10000 条。

常见坑

坑1:history 看不到刚执行的命令

刚执行完的命令,history 里没有。

原因: 历史命令是在退出会话的时候才写入文件的,当前会话的历史在内存里。

解决: 执行 history 就能看到当前会话的所有命令,包括刚执行的。

坑2:history -c 清不干净

执行了 history -c,但重新登录后又出来了。

原因: 只清了内存,没清文件。

解决: 还要执行 history -w 写入文件。

坑3:别人 history 能看到我输的密码

不小心在命令行里输了密码,比如 mysql -uroot -p123456,history 里就有了。

解决:

  1. 执行完之后赶紧删掉那条历史:history -d 编号
  2. 以后输密码不要直接写在命令里,用交互式输入:mysql -uroot -p,然后回车再输密码

坑4:多开几个终端,历史命令对不上

开了多个 SSH 窗口,在这个窗口执行的命令,另一个窗口 history 里看不到。

原因: 每个终端会话有自己的内存历史,退出时才写入文件。

解决: 这是正常现象,不用纠结。

总结

命令 作用
history 查看历史命令
history 10 只看最近 10 条
!101 执行第 101 条历史命令
!! 执行上一条命令
!yum 执行最近一条 yum 开头的命令
history \| grep nginx 搜索包含 nginx 的历史命令
history -c 清空当前会话历史
Ctrl + R 搜索历史命令

日常用得最多的就是 Ctrl + R 搜索 和 history | grep,效率很高。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 07:51 

Linux压缩解压命令大全,tar、zip、unzip用法

前言

服务器上经常需要压缩文件或者解压上传的压缩包,tar、zip、unzip 这些命令怎么用?本文把最常用的压缩解压命令都整理出来,一次讲清楚。

tar 命令(最常用)

tar 是 Linux 下最常用的打包压缩工具,支持 gzip、bzip2、xz 等多种压缩格式。

参数速记

参数 含义
-c 创建新的打包文件
-x 解压
-z 用 gzip 压缩(.tar.gz)
-j 用 bzip2 压缩(.tar.bz2)
-J 用 xz 压缩(.tar.xz)
-v 显示过程
-f 指定文件名(必须放最后)

压缩成 .tar.gz

最常用的,把目录打包成 tar.gz:

tar -zcvf 打包名.tar.gz 要打包的目录

比如把 /var/www/html 打包成 backup.tar.gz:

tar -zcvf backup.tar.gz /var/www/html

解压 .tar.gz

tar -zxvf 文件名.tar.gz

比如:

tar -zxvf backup.tar.gz

解压到指定目录

加 -C 参数:

tar -zxvf backup.tar.gz -C /目标目录

比如解压到 /tmp 目录:

tar -zxvf backup.tar.gz -C /tmp

只看不解压

tar -ztvf 文件名.tar.gz

列出压缩包里的文件列表,不解压。

.tar.bz2 格式

比 gzip 压缩率更高,但更慢:

# 压缩
tar -jcvf backup.tar.bz2 /var/www/html

# 解压
tar -jxvf backup.tar.bz2

.tar.xz 格式

压缩率最高,最慢:

# 压缩
tar -Jcvf backup.tar.xz /var/www/html

# 解压
tar -Jxvf backup.tar.xz

zip 和 unzip

安装

CentOS 最小化安装可能没有 zip/unzip:

yum install -y zip unzip

压缩成 zip

zip -r 打包名.zip 要打包的目录

比如:

zip -r backup.zip /var/www/html

-r 是递归,把目录下所有文件都打进去。

解压 zip

unzip 文件名.zip

比如:

unzip backup.zip

解压到指定目录

unzip 文件名.zip -d /目标目录

比如解压到 /tmp:

unzip backup.zip -d /tmp

只看不解压

unzip -l 文件名.zip

列出 zip 包里的文件列表。

解压到指定目录并覆盖

unzip -o 文件名.zip -d /目标目录

-o 是覆盖,不提示。

其他压缩格式

gz 格式(单文件压缩)

# 压缩
gzip 文件名

# 解压
gunzip 文件名.gz

bz2 格式

# 压缩
bzip2 文件名

# 解压
bunzip2 文件名.bz2

常见坑

坑1:解压后目录结构不对

解压完发现多套了一层目录。

原因: 打包的时候是带路径打的。

解决: 解压前先看一下压缩包里的结构:

tar -ztvf 文件名.tar.gz

或者 zip 用:

unzip -l 文件名.zip

坑2:解压时磁盘空间不足

解压到一半报错 No space left on device。

原因: 磁盘满了。

解决: 先看一下磁盘空间:

df -h

清理空间后再解压。

坑3:tar 参数顺序不对

执行 tar 报错。

原因: -f 参数必须放最后,后面紧跟文件名。

正确写法: tar -zcvf backup.tar.gz /目录
错误写法: tar -fzc backup.tar.gz /目录

坑4:zip 命令找不到

执行 zip 提示 command not found。

原因: 没装 zip 包。

解决:

yum install -y zip unzip

总结

格式 压缩命令 解压命令
.tar.gz tar -zcvf 名.tar.gz 目录 tar -zxvf 名.tar.gz
.tar.bz2 tar -jcvf 名.tar.bz2 目录 tar -jxvf 名.tar.bz2
.zip zip -r 名.zip 目录 unzip 名.zip
.gz gzip 文件名 gunzip 文件名.gz

最常用的就是 tar -zcvf 压缩 和 tar -zxvf 解压,记住这两个就够用了。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 07:50 

Linux查看系统启动时间,uptime命令详解

前言

想知道服务器从上次开机到现在跑了多久?或者想看系统负载?uptime 命令一行就能搞定。本文详细讲一下这个命令的用法。

uptime 命令

基本用法

直接输入:

uptime

输出类似:

 07:49:21 up  2:15,  1 user,  load average: 0.00, 0.01, 0.05

输出解释

字段 含义
07:49:21 当前系统时间
up 2:15 系统已经运行了 2 小时 15 分钟
1 user 当前有 1 个用户登录
load average: 0.00, 0.01, 0.05 1分钟、5分钟、15分钟的平均负载

常用参数

显示漂亮一点

uptime -p

输出类似:

up 2 hours, 15 minutes

显示系统启动时间

uptime -s

输出类似:

2026-10-06 05:34:21

这就是系统上次启动的具体时间。

查看系统启动时间的其他方法

who 命令

who -b

输出类似:

system boot  2026-10-06 05:34

last 命令

last reboot | head -5

列出最近几次重启记录:

reboot   system boot  3.10.0-1160.el7. Fri Oct  6 05:34 - 07:49  (02:15)
reboot   system boot  3.10.0-1160.el7. Thu Oct  5 09:12 - 22:00  (12:47)

systemd-analyze

systemd-analyze

显示系统启动花了多长时间:

Startup finished in 1.234s (kernel) + 2.345s (initrd) + 10.123s (userspace) = 13.702s

负载(load average)怎么看

uptime 最后三个数字是负载,很多人不知道怎么判断高不高。

三个数字的含义

  • 第一个:1 分钟平均负载
  • 第二个:5 分钟平均负载
  • 第三个:15 分钟平均负载

怎么判断高不高

负载和 CPU 核心数有关:

  • 负载 < CPU核心数:正常
  • 负载 ≈ CPU核心数:刚好饱和
  • 负载 > CPU核心数:过载了

查看 CPU 核心数

nproc

输出就是核心数。

比如你的服务器是 4 核 CPU:

  • 负载 1.0:很闲
  • 负载 4.0:刚好跑满
  • 负载 8.0:过载了

常见坑

坑1:负载高但 CPU 不高

负载很高,但 top 看 CPU 使用率不高。

原因: 可能是 I/O 等待高(磁盘读写慢),或者有大量进程在排队。

解决: 用 top 看 %wa 列(I/O 等待),如果高就是磁盘问题。

坑2:up 时间不对

uptime 显示的运行时间和你印象中的不一样。

原因: 系统可能自动重启过,或者你记错了。

解决: 用 last reboot 看历史重启记录。

坑3:1 user 不对

uptime 显示只有 1 个用户,但你明明看到好几个人登录。

原因: 显示的是登录会话数,不是用户数。同一个用户开多个 SSH 连接会算多个会话。

解决: 用 w 命令看详细的在线用户。

总结

命令 作用
uptime 看运行时间和负载
uptime -p 漂亮格式显示运行时间
uptime -s 显示系统启动时间
who -b 看系统启动时间
last reboot 看历史重启记录
nproc 看 CPU 核心数

日常运维用 uptime 一行就能看个大概,很方便。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 07:49 
'); })();