# 阿里云服务器维护总结 – 临时文件清理维护

> 作者：zning（https://ning.ae） · 发布：2015/04/11 13:44 下午 (UTC+8) · 原文：https://zning.me/14860142483080.html

本文将给大家介绍linux tmpwatch命令。

**什么是tmpwatch命令？**

tmpwatch  –  removes  files  which haven’t been accessed for a period of time

如上所言，删除指定的目录中一段时间未访问的文件。一般对于/tmp下的文件或日志文件。

**参数**：

-a或–all 　删除任何类型的文件。

-m或–mtime   根据文件被更改时间

-c或–ctime     根据文件更改状态时间

-M或–dirtime  根据文件夹被更改时间

-f或–force 　强制删除文件或目录，其效果类似rm指令的”-f”参数。

-l  不删除符号链接

-U或–exclude-user=用户名或uid  排除某用户的文件

-x 或–exclude=path 排除某路径

-X 或–exclude-pattern=pattern 排除某规则下的路径

-q或–quiet 　不显示指令执行过程。

-v或–verbose 　详细显示指令执行过程。

-test 　仅作测试，并不真的删除文件或目录。

另外对于运维人员我要强调一下-d或–nodirs选项， 某些运维人员可能在日志文件夹中创建了子目录，默认子目录也会被删除的，使用-d参数可以避免。

**实例**：

[root@GoGo var]# tmpwatch  -afv 5 /tmp

removing directory /tmp/.esd-500 if empty

removing directory /tmp/pulse-RhVqbteZQHEU if empty

removing directory /tmp/orbit-goface if empty

removing directory /tmp/pulse-ZqCSfKwcdrK4 if empty

removing directory /tmp/orbit-gdm if empty

removing file /tmp/yum.log

另外linux系统会定期删除tmp目录中的内容。原理就是使用了**tmpwatch**。

#vi /etc/cron.daily/tmpwatch

|  

`#! /bin/sh`

`flags=-umc`

`/usr/sbin/tmpwatch` `"$flags"` `-x` `/tmp/``.X11-unix -x` `/tmp/``.XIM-unix \`

`-x` `/tmp/``.font-unix -x` `/tmp/``.ICE-unix -x` `/tmp/``.Test-unix \`

`-X` `'/tmp/hsperfdata_*'` `10d` `/tmp`

`/usr/sbin/tmpwatch` `"$flags"` `30d` `/var/tmp`

`for` `d` `in` `/var/``{cache``/man``,catman}/{``cat``?,X11R6``/cat``?,``local``/cat``?};` `do`

`if` `[ -d` `"$d"` `];` `then`

`/usr/sbin/tmpwatch` `"$flags"` `-f 30d` `"$d"`

`fi`

`done`

 |

计划任务中有一个tmpwatch，每隔30d定期清除，当然您也可以定制时间。

time_in=`date +”%y/%m/%d %H:%M:%S”`
echo “Tmp_Watch_dirs.sh start at $time_in”

#deal those dirs should not recur to their subdirs

if [ -d “/data0/vshare/logs” ]
then
exclude_dir=`ls -l /data0/vshare/logs/|grep ^d|awk ‘BEGIN{S=””;} {s=sprintf(“%s /data0/vshare/logs/%s”,s,$9);} END{print s;}’`
/usr/sbin/tmpwatch -c 1440 -v -x $exclude_dir /data0/vshare/logs
else
echo “/data0/vshare/logs is not exist or not a dir”
fi

#deal those dirs should recur to their subdirs

if [ -d “/data0/vshare/logs” ]
then
/usr/sbin/tmpwatch -c 1440 -v /data0/vshare/logs/vblog1
else
echo “/data0/vshare/logs/vblog1 is not exist or not a dir”
fi

time_out=`date +”%y/%m/%d %H:%M:%S”`
echo “Tmp_Watch_dirs.sh finish at $time_out”
echo “—————————————————————————”
echo “”

exit 0

文章索引 [[隐藏](https://www.zning.net.cn/tech/3267.htm#)]

* [tmp目录删除和tmpwatch命令的使用](https://www.zning.net.cn/tech/3267.htm#tmptmpwatch)
* [tmp目录删除和tmpwatch命令的使用](https://www.zning.net.cn/tech/3267.htm#tmptmpwatch-2)

* [关于Linux系统清理/tmp/文件夹，你可能想知道的](https://www.zning.net.cn/tech/3267.htm#linuxtmp)
    * * [在RHEL\CentOS\Fedora\系统中(本次实验是在RHEL6中进行的)](https://www.zning.net.cn/tech/3267.htm#rhelcentosfedorarhel6)
        * [在Debian\Ubuntu系统中（Ubuntu10.10为实验环境）](https://www.zning.net.cn/tech/3267.htm#debianubuntuubuntu1010)
* [tmp是什么文件？Linux系统清理/tmp/文件夹的原理](https://www.zning.net.cn/tech/3267.htm#tmplinuxtmp)
* [阿里云系统盘满了，清理过程](https://www.zning.net.cn/tech/3267.htm#i)

## tmp目录删除和tmpwatch命令的使用

[@more@]

## tmp目录删除和tmpwatch命令的使用

文章来源:http://cjs0550.blog.hexun.com/30760600_d.html

tmp目录里面的文件，会在一定的时间之后被删除掉，删除是通过

# cat /etc/cron.daily/tmpwatch
/usr/sbin/tmpwatch -x /tmp/.X11-unix -x /tmp/.XIM-unix -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix 240 /tmp
/usr/sbin/tmpwatch 720 /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d “$d” ]; then
/usr/sbin/tmpwatch -f 720 $d
fi
done
来删除，从上面的代码可以看到tmp目录里面的文件，会在240小时不用之后被删除掉。

其中最重要的命令是tmpwatch，下面是此命令的具体使用方法：

linux tmp 文件清理
系统使用时间长后会产生临时文件（/tmp下），需要清理。但清理的时候不推荐使用rm -rf。这样有时会引起程序的僵死。推荐使用tmpwatch命令来进行清理。关于tmpwatch的说明如下：名称 : tmpwatch
版本 : 2.8.4
发布号 : 5
所属组 : 系统环境/基础 源码包: tmpwatch-2.8.4-5.src.rpm
大小 : 13273 许可类型: GPL
摘要 : 根据文件被访问的时间来删除文件的工具。

简介 :
tmpwatch 工具从指定的目录中递归地搜索，并删除在指定时间段内没有被访问的文件。tmpwatch 一般被用来清扫那些用来临时驻留文件的目录(譬如，/tmp)tmpwatch 忽略符号链接，它不会切换文件系统，而且只删除空目录和常规文件。

**语 法：tmpwatch [-afqv][–test][超期时间][目录…]**
补充说明：执行tmpwatch指令可删除不必要的暂存文件，您可以设置文件超期时间，单位以小时计算。参数：
-a或–all 　删除任何类型的文件。
-f或–force 　强制删除文件或目录，其效果类似rm指令的”-f”参数。
-q或–quiet 　不显示指令执行过程。
-v或–verbose 　详细显示指令执行过程。
-test 　仅作测试，并不真的删除文件或目录

实例： sudo /usr/sbin/tmpwatch -afv 3 /tmp （清除/tmp下三小时以内没有使用的文件，并将结果输出）。

效果：
[yyc@localhost ~]$ sudo /usr/sbin/tmpwatch -afv 3 /tmp
removing file /tmp/mapping-yyc
removing file /tmp/orbit-yyc/linc-814-0-1bf6199e48d6e
removing file /tmp/orbit-yyc/linc-7ee-0-74c6cf6b5c2c6
removing file /tmp/orbit-yyc/linc-7fd-0-3ae286a04fa21
removing file /tmp/orbit-yyc/linc-854-0-4e3c22c96ddf
removing file /tmp/orbit-yyc/linc-798-0-1c90b9a4739a7
removing file /tmp/orbit-yyc/linc-7e9-0-56828c5c66be1
removing file /tmp/orbit-yyc/linc-815-0-1e0f6f36a2ee3
removing file /tmp/orbit-yyc/bonobo-activation-server-ior
removing file /tmp/orbit-yyc/linc-850-0-5c3b9d5470bfc
removing file /tmp/orbit-yyc/linc-803-0-5ee49981d2cee

# 关于Linux系统清理/tmp/文件夹，你可能想知道的

我们知道，在Linux系统中/tmp文件夹里面的文件会被清空，至于多长时间被清空，如何清空的，可能大家知识的就不多了，所以，今天我们就来剖析一个这两个问题。

### 在RHEL\CentOS\Fedora\系统中(本次实验是在RHEL6中进行的)

先来看看tmpwatch这个命令，他的作用就是删除一段时间内不使用的文件（removes files which haven’t been accessed for a period of time）。具体的用法就不多说了，有兴趣的自行研究。我们主要看看和这个命令相关的计划任务文件。
他就是/etc/cron.daily/tmpwatch，我们可以看一下这个文件里面的内容
#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch “$flags” -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
-X ‘/tmp/hsperfdata_*’ 10d /tmp
/usr/sbin/tmpwatch “$flags” 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d “$d” ]; then
/usr/sbin/tmpwatch “$flags” -f 30d “$d”
fi
done

这个脚本大家仔细分析一下就明白了，第一行相当于一个标记（参数），第二行就是针对/tmp目录里面排除的目录，第三行，这是对这个/tmp目录的清理，下面的是针对其他目录的清理，就不说了。

我们就来看/usr/sbin/tmpwatch “$flags” 30d /var/tmp这一行，关键的是这个30d，就是30天的意思，这个就决定了30天清理/tmp下不访问的文件。如果说，你想一天一清理的话，就把这个30d改成1d。这个你懂的……哈哈！

但有个问题需要注意，如果你设置更短的时间来清理的话，比如说是30分钟、10秒等等，你可以在这个文件中设置，但你会发现重新电脑，他不清理/tmp文件夹里面的内容，这是为什么呢？这就是tmpwatch他所在的位置决定的，他的上层目录是/etc/cron.daily/，而这个目录是第天执行一次计划任务，所以说，你设置了比一天更短的时间，他就不起作用了。这下明白了吧。
**所以结论是：在RHEL6中，系统自动清理/tmp文件夹的默认时限是30天**

### 在Debian\Ubuntu系统中（Ubuntu10.10为实验环境）

在Ubuntu系统中，在/tmp文件夹里面的内容，每次开机都会被清空，如果不想让他自动清理的话，只需要更改rcS文件中的TMPTIME的值。
我们看如何来修改
sudo vi /etc/default/rcS
把
TMPTIME=0
修改成
TMPTIME=-1或者是无限大
改成这样的话，系统在重新启动的时候就不会清理你的/tmp目录了。
依些类推，如果说要限制多少时间来更改的话，就可以改成相应的数字（本人没有测试，我是这么理解的）

**所以结论是：在Ubuntu中，系统自动清理/tmp文件夹的时限默认每次启动**

# tmp是什么文件？Linux系统清理/tmp/文件夹的原理

**.tmp 文件**大部分都是因为不正常关机、或死机后所留下的文件，这些临时的暂存盘，在你重新开机后，已经没有任何的用途，可以放心删除。大家在使用Windows操作系统的时候，可能会经常在C盘根目录发现一些后缀名为TMP的文件，还会在Windows目录里发现一个TEMP的目录，TMP文件是各种软件或系统产生的临时文件，也就是常说的垃圾文件。Windows产生的临时文件，本质上和[虚拟内存](http://www.cr173.com/k/xunnc/)没什么两样，只不过临时文件比虚拟内存更具有针对性，单独为某个程序服务而已。而它的专一性导致了许多新手对他望而生畏，不删占据空间，删了又怕导致程序无法运行。

Windows 在长年累月的使用之下，在 Windows\Temp 里一定会多出很多的「垃圾」，其实这 Temp 里的所有的文件、或文件夹都是可以删除的，有空不妨常常清理下这个 Temp 文件夹，但是要留意一下，我指的是删除 Temp 里的东西（Temp 文件夹还是保留的），不是要你把整个 Temp 连文件夹一起删掉。 当你在删除 Temp 里面的文件的时候，你可能会遇到「存取拒绝」的错误讯息，不要紧，这是很正常的。

因为某些是目前的暂存盘，Windows还正在使用中，你跳过出现存取拒绝讯息的文件，继续删除其它的文件即可. 一般来说，你当前运行着大型的工具软件的时候，都不应该去碰临时文件，比如[Photoshop](http://www.cr173.com/k/ps/)会在处理图形时候产生巨大的临时文件，如果你认为这不是你创建的文件企图删除，可能会导致Photoshop死机。你当前没有运行程序的话，发现的临时文件都可以删除，以免它们天长日久堆积如山，占据磁盘空间还是小事，关键是它们又多又散乱，会给磁盘扫描整理带来时间上的无谓消耗，也可能会造成文件分配表混乱，导致文件交叉链接的错误。但是不能所有的临时文件都一概而论。 比如，C盘根目录的TEMP目录，是很多工具程序临时文件的指向目录，没有这个目录的话，临时文件无法创建，这些工具软件就很可能会出错，所以要删除的话，只应该清空里面的临时文件垃圾，而不能把TEMP这个目录都干掉了；Windows里通常也有一个TEMP文件，是系统默认的临时文件的放置地方，也不建议连目录都删除了，定期清空里面的垃圾即可。

**关于Linux[系统清理](http://www.cr173.com/k/xitql/)/tmp/文件夹的原理**

我们知道，在Linux系统中/tmp文件夹里面的文件会被清空，至于多长时间被清空，如何清空的，可能大家知识的就不多了。

**在RHEL\CentOS\Fedora\系统中(本次实验是在RHEL6中进行的)**
先来看看tmpwatch这个命令，他的作用就是删除一段时间内不使用的文件（removes files which haven’t been accessed for a period of time）。具体的用法就不多说了，有兴趣的自行研究。我们主要看看和这个命令相关的计划任务文件。
他就是/etc/cron.daily/tmpwatch，我们可以看一下这个文件里面的内容
#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch “$flags” -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
-X ‘/tmp/hsperfdata_*’ 10d /tmp
/usr/sbin/tmpwatch “$flags” 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d “$d” ]; then
/usr/sbin/tmpwatch “$flags” -f 30d “$d”
fi
done

这个脚本大家仔细分析一下就明白了，第一行相当于一个标记（参数），第二行就是针对/tmp目录里面排除的目录，第三行，这是对这个/tmp目录的清理，下面的是针对其他目录的清理，就不说了。

我们就来看/usr/sbin/tmpwatch “$flags” 30d /var/tmp这一行，关键的是这个30d，就是30天的意思，这个就决定了30天清理/tmp下不访问的文件。如果说，你想一天一清理的话，就把这个30d改成1d。

但有个问题需要注意，如果你设置更短的时间来清理的话，比如说是30分钟、10秒等等，你可以在这个文件中设置，但你会发现重新电脑，他不清理/tmp文件夹里面的内容，这是为什么呢？这就是tmpwatch他所在的位置决定的，他的上层目录是/etc/cron.daily/，而这个目录是第天执行一次计划任务，所以说，你设置了比一天更短的时间，他就不起作用了。这下明白了吧。
**所以结论是：在RHEL6中，系统自动清理/tmp文件夹的默认时限是30天**

在Debian\Ubuntu系统中（Ubuntu10.10为实验环境）
在Ubuntu系统中，在/tmp文件夹里面的内容，每次开机都会被清空，如果不想让他自动清理的话，只需要更改rcS文件中的TMPTIME的值。
我们看如何来修改
sudo vi /etc/default/rcS
把
TMPTIME=0
修改成
TMPTIME=-1或者是无限大
改成这样的话，系统在重新启动的时候就不会清理你的/tmp目录了。
依些类推，如果说要限制多少时间来更改的话，就可以改成相应的数字（本人没有测试，我是这么理解的）

**所以结论是：在Ubuntu中，系统自动清理/tmp文件夹的时限默认每次启动**

# 阿里云系统盘满了，清理过程

用阿里云云主机，最近发现系统的20G，还剩余不足500M啦。感觉速度都受影响了。

通过du –max-depth=1 -h命令一级一级查找，发现是mysql的日志文件太多了，用了10多个G。

通过如下命令：

[root@aliyunxxx mysql]# /usr/local/mysql/bin/mysql -u root -p

Enter password: （输入密码）

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 6011890

Server version: 5.1.60-log Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> reset master; (清除日志文件)

Query OK, 0 rows affected (8.51 sec)

OK啦。
