linux 服务器清理

server/2025/1/12 5:19:47/

起因

服务器报错:no space left on device
翻译:设备上没有剩余空间

解决方法

清理数据,这里有个点要注意,
对于重要文件,一定要备份。

步骤

1 首先,需要确定哪个分区或目录占用了大量空间。

df -h

执行结果示例:

Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           799M  1.3M  798M   1% /run
/dev/sda1        50G   45G  3.1G  94% /
tmpfs           3.9G  4.0K  3.9G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda5       200G  120G   71G  63% /home
tmpfs           799M   48K  799M   1% /run/user/1000

结果说明

Filesystem:显示文件系统的名称。这可以是物理硬盘分区(如/dev/sda1)、逻辑卷、网络挂载点(如NFSSMB共享)或其他类型的文件系统。
Size:显示文件系统的总大小,以人类可读的格式(如G表示GigabytesM表示Megabytes)显示。
Used:显示已使用的空间大小。
Avail:显示可用的空间大小。
Use%:显示已使用空间的百分比。
Mounted on:显示文件系统挂载的挂载点,即文件系统中的哪个目录或路径与该文件系统相关联。
在上面的示例中:
/dev/sda1 分区是根文件系统(/),总大小为50GB,已使用45GB,剩余3.1GB,使用率为94%/dev/sda5 分区挂载在/home目录,总大小为200GB,已使用120GB,剩余71GB,使用率为63%。
tmpfs 是一种基于内存的临时文件系统,用于存储临时文件,它的大小和已用空间会根据系统负载和配置而变化。
udev 和其他设备相关的文件系统(如/dev/shm)通常用于系统内部目的,普通用户不需要过多关注。

具体需要关注哪个分区要看你的应用启动的时候会在哪个分区输出日志或生成数据文件。也就是说应用部署在哪个分区,就需要关注哪个分区。哪个分区的路径你要产生数据你就需要关注哪个分区。或者如果是初学者可以简单的看Use%这列,看哪个比较接近百分百,就去看那一行对应的Mounted on列,也就是服务器路径,清理这个路径里面的内容。
到这里我们要知道的信息是我需要清理哪个路径下面的内容。

2.找到对应的分区或者目录之后要进一步确认要清理的目录

这里面我推荐的命令是

du -ah / | sort -rh | head -n 10

这个命令如果权限不够可以尝试加sudo。

执行结果示例:

100G    /
50G     /home
45G     /home/user
20G     /var
15G     /var/log
10G     /usr
8.0G    /opt
6.0G    /lib
5.0G    /tmp
4.5G    /home/user/Documents

结果说明

du -ah /:du是“disk usage”的缩写,用于估算文件和目录的磁盘使用情况。-a选项表示“all”,即包括目录中的所有文件和子目录。-h选项表示“human-readable”,即以人类可读的格式(如KMG)显示磁盘使用情况。/表示根目录,即检查整个文件系统的磁盘使用情况。
|:管道符号,用于将前一个命令的输出作为后一个命令的输入。
sort -rh:sort用于对输入进行排序。-r选项表示“reverse”,即逆序排序(从大到小)。-h选项表示“human-numeric-sort”,即按照人类可读的数字格式进行排序(如能够正确识别并比较KMG等单位)。
head -n 10:head用于显示输入的前几行。-n 10表示显示前10行。
在上面的示例中:
/(根目录)占用了100G的磁盘空间(这个数字可能包括了挂载在根目录下的其他文件系统的空间,具体取决于系统配置)。
/home目录占用了50G。
/home/user目录占用了45G,是/home目录下的一个子目录。
接下来的几行显示了其他占用较多磁盘空间的目录,如/var/var/log、/usr等。

可以看到目录的占用的磁盘空间大小是一个递进的关系。简单来说如果/home/user占用了很多磁盘空间,那么它的上级目录/home也一定占据了很多的磁盘空间,并且只多不少。
通常du -ah / | sort -rh | head -n 10看前十行就够了,当然对于比较复杂的情况也可以看更大的范围。

3清理目录,删除文件

1.清理某个路径下所有文件的命令
要清理(即删除)某个路径下的所有文件和子目录,可以使用rm -rf命令。但请务必小心,因为这个命令会递归地删除指定路径下的所有内容,并且不会提示确认。一定要对重要文件备份备份再备份。

rm -rf /home/tomcact/logs/*

注意:将/path/to/directory/替换为您要清理的实际路径。使用*表示删除该目录下的所有文件和子目录。如果您只想删除文件而保留子目录,可以使用find命令结合-type f选项:

find /home/tomcact/logs/ -type f -exec rm -f {} \;

2.删除某个特定的文件

rm /home/tomcact/logs/catalina.out

上面rm加文件路径是可以直接删除某个文件,但是对于calalina.out通常不会这样处理。直接删除打印日志会有问题。一般用下面的方法把文件置空。

> /opt/tomcat/logs/catalina.out

这个命令会打开 /opt/tomcat/logs/catalina.out 文件,并将其内容清空。如果文件不存在,这个命令会创建一个空文件。但是,请注意,如果 Tomcat 正在向该文件写入日志,这个操作可能会导致一些日志丢失(即那些尚未写入磁盘但在 Tomcat 内部缓冲区中的日志)。
或者

truncate -s 0 /opt/tomcat/logs/catalina.out

truncate 命令用于调整文件的大小。使用 -s 0 选项可以将文件大小设置为0,从而清空文件内容。与 > 操作符类似,如果文件不存在,truncate 命令通常会报错(除非使用了特定的选项来允许创建文件)。但是,truncate 通常被认为在处理大文件时比 > 更高效,因为它不需要实际地读取或写入文件内容。

3.删除某一类文件
删除Tomcat日志路径下所有以.log结尾的文件

find /home/tomcact/logs/ -name "*.log" -exec rm -f {} \;

http://www.ppmy.cn/server/157266.html

相关文章

Go 项目开发实战-用户Token的刷新、踢人下线和防盗检测

上一节我们说了Token的自解释性生成算法、Token信息的在服务端的存储以及客户端携带Token请求API时服务端的Token认证逻辑。 这节我们继续讲Token的刷新和主动踢人下线 ‍ ‍ 首先Token为啥刷新呢?很简单为了安全性用户AccessToken的时效性会相对较短,保…

设计模式 行为型 模板方法模式(Template Method Pattern)与 常见技术框架应用 解析

模板方法模式(Template Method Pattern)是软件设计模式中的一种行为设计模式。它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重定义算法的某些特定步骤。 假设我们在制作不同…

android studio使用DataBinding

DataBinding 是谷歌官方发布的在android上对MVVM设计模式的一个实现框架,其作用是实现数据绑定。 Android DataBinding主要实现了View和ViewModel的双向绑定,包括用户的响应。并且实现了自动更新。 DataBinding优点: 1.大量减少Act…

RabbitMQ如何实现队列持久化

RabbitMQ的持久化机制是一种确保数据在RabbitMQ服务重启或异常情况下不会丢失的重要特性。在生产环境中,消息代理的稳定性和可靠性至关重要,而队列持久化正是实现这一目标的关键手段之一。以下将详细介绍RabbitMQ如何实现队列持久化。 一、RabbitMQ持久…

零基础入门Erlang

1.Erlang介绍 Index - Erlang/OTP Erlang是一种通用的面向并发的编程语言 Erlang是一个结构化,动态类型编程语言,内建并行计算支持 使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的 1.1 为什么选择Erlang 需要处理大量…

Java100道面试题

1.JVM内存结构 1. 方法区(Method Area) 方法区是JVM内存结构的一部分,用于存放类的相关信息,包括: 类的结构(字段、方法、常量池等)。字段和方法的描述,如名称、类型、访问修饰符…

PHP相关问题练习

题目&#xff1a; <?php highlight_file(__FILE__); error_reporting(0); $val1 $_GET[val1]; $val2 $_GET[val2]; $val3 $_GET[val3]; $val4 $_GET[val4]; $val5 (string)$_POST[val5]; $val6 (string)$_POST[val6]; $val7 (string)$_POST[val7]; if( $val1 $val2…

ue5玩家角色添加武器。切换武器位置,手上武器放到背上。演示一下人体插槽和武器的连接。仅仅演示,实际项目不是这么用的

把第一人称资源包导进来 这就是我们枪的骨骼网格体 我们找到这个骨骼 右手添加插槽 取个名字 因为武器上也有动画&#xff0c;所有武器单独写个蓝图类 新建一个蓝图类 BP_Weapon 把枪的蓝图拖到人的静态网格体下&#xff0c;成为一个部分 选中BP_Weapon的父类套接字…