如何优雅地删除 Linux 中的垃圾文件教程视频_Linux入门知识

不知道大家是否也跟我一样,是一只要把的自己电脑文件安排的条理有序,把没用的文件会及时删掉的程序猿呢? 如果是的话,那么我们可以愉快地探讨下文章的内容。 如果不是的话,你也可以留下来凑凑热闹嘛(>-<)。下面要介绍的是今天的主角—— tmpwatch ,它能帮助我们递归删除在给定时间内没有访问的文件和空目录。当然,我们也可以使用 find 命令查找并删除超过

如何优雅地删除 Linux 中的垃圾文件教程视频

不知道大家是否也跟我一样,是一只要把的自己电脑文件安排的条理有序,把没用的文件会及时删掉的程序猿呢? 如果是的话,那么我们可以愉快地探讨下文章的内容。 如果不是的话,你也可以留下来凑凑热闹嘛(>-<)。

如何优雅地删除 Linux 中的垃圾文件教程视频_Linux入门知识

下面要介绍的是今天的主角—— tmpwatch ,它能帮助我们递归删除在给定时间内没有访问的文件和空目录。

当然,我们也可以使用 find 命令查找并删除超过 x 天未访问的文件,不过 tmpwatch 可以一步到位,何乐而不为?

tmpwatch 默认根据文件或目录的访问时间(access time)来决定删除哪些文件或目录。 除此之外,你还可以根据 inode 改变时间(inode change time)、修改时间(modification time)来进行操作。

通常, tmpwatch 用于删除 /tmp 目录下的文件,以及其它地方其他无用的文件,如旧的日志文件。

重要警告!!

不要在 / (根目录)中运行 tmpwatch!  

不要在 / (根目录)中运行 tmpwatch! !  

不要在 / (根目录)中运行 tmpwatch! ! ! (三遍警告!

^ – ^ )

/ 目录包含 Linux 系统运行所必需的重要文件,而 tmpwatch 并没有内置保护机制防止在 / 目录上运行,一旦那些重要的文件被删除了,后果不堪设想! 所以,小伙伴们在使用这个命令的时候一定要慎重!

安装 tmpwatch

大多数 Linux 发行版的默认存储库中都提供 tmpwatch 的安装:

在 Fedora 上:

$ sudo dnf install tmpwatch

在 CentOS 上:

$ sudo yum install tmpwatch

在 openSUSE 上:

$ sudo zypper install tmpwatch

在 Debian 及其衍生版本(如 Ubuntu )上, tmpwatch 又叫 tmpreaper :

$ sudo apt install tmpreaper

使用 tmpwatch/tmpreaper 删除指定时间内未访问的文件

tmpwatch 和 tmpreaper 的用法几乎相同,可以认为二者是一样的命令。 为了便于描述,本文以 tmpwatch 为例进行讲解,使用基于 Debian 系统的朋友可以将下面的 tmpwatch 改为 tmpreaper 。

1. 删除超过 X 天未访问的文件

例: 删除 /var/log/ 文件夹中超过 10 天未访问的所有文件和空目录

tmpwatch 10d /var/log/

2. 删除超过 X 天未修改的文件

前文提到, tmpwatch 默认根据访问时间来删除文件的,现在我们使用 -m 选项来根据文件的修改时间(modification time)来删除文件。

例: 删除 /var/log/ 文件夹中超过 10 天未修改的文件

tmpwatch -m 10d /var/log/

上面两个命令中的 d 是时间参数,具体如下:

  • d – 天数

  • h – 小时

  • m – 分钟

  • s – 秒数

默认时间参数是 小时 。 假如想删除过去 10 个小时未修改的文件,可以写成下面这种形式:

tmpwatch -m 10 /var/log/

3. 删除符号链接

可以使用 -s 选项删除符号链接:

tmpwatch -s 10 /var/log/

4. 删除所有文件(包括常规文件,符号链接和目录)

tmpwatch 不仅仅可以删普通文件,还可以删除一些特殊文件,比如符号链接、目录、管道文件等等。 这个情况下,需要使用 -a 选项:

tmpwatch -a 10 /var/log/

5. 删除时排除目录

如果不想删除某个目录,可以使用 –nodirs 选项,在删除时排除对该目录的删除:

tmpwatch -am 10 --nodirs /var/log/

6. 测试删除(不实际删除任何内容)

这里要再次强调,在对重要目录进行文件删除时,不要急着使用 tmpwatch 命令!不妨先看看命令运行之后删除的文件有哪些,不然删错了脑壳又疼了。。(养成一种好习惯!)

可以使用 -t 进入测试模式:

tmpwatch -t 30 /var/log/

CentOS 7 下输出:

removing file /var/log/wtmp
removing directory /var/log/ppp if empty
removing directory /var/log/tuned if empty
removing directory /var/log/anaconda if empty
removing file /var/log/dmesg.old
removing file /var/log/boot.log
removing file /var/log/dnf.librepo.log

基于 Debian 的系统下输出:

$ tmpreaper -t 30 /var/log/
(PID 1803) Pretending to clean up directory `/var/log/'.
(PID 1804) Pretending to clean up directory `apache2'.
Pretending to remove file `apache2/error.log'.
Pretending to remove file `apache2/access.log'.
Pretending to remove file `apache2/other_vhosts_access.log'.
(PID 1804) Back from recursing down `apache2'.
(PID 1804) Pretending to clean up directory `dbconfig-common'.
Pretending to remove file `dbconfig-common/dbc.log'.
(PID 1804) Back from recursing down `dbconfig-common'.
(PID 1804) Pretending to clean up directory `dist-upgrade'.
(PID 1804) Back from recursing down `dist-upgrade'.
(PID 1804) Pretending to clean up directory `lxd'.
(PID 1804) Back from recursing down `lxd'.
Pretending to remove file `/var/log//cloud-init.log'.
(PID 1804) Pretending to clean up directory `landscape'.
Pretending to remove file `landscape/sysinfo.log'.
(PID 1804) Back from recursing down `landscape'.
[...]

上面这个过程,其实并没有真正删除文件,只是进行模拟删除,告知你哪些文件会被删除。

在确保要删除的文件都是正确的时候,方可去掉 -t 选项再执行 tmpwatch 进行真正删除。

7. 强制删除

tmpwatch 默认不会删除当前用户没有写访问权的文件。 但是如果你必须要删除那些文件,可以使用 -f 选项进行强制删除:

tmpwatch -f 10h /var/log/

8. 删除时跳过某些文件

若想在删除时保留指定的文件,也就是说列入白名单,可以使用 –protect 选项。 假设我们要保留所有 txt 类型的文件:

tmpreaper --protect '*.txt' -t 10h /var/log/

输出结果:

(PID 2623) Pretending to clean up directory `/var/log/'.
(PID 2624) Pretending to clean up directory `apache2'.
Pretending to remove file `apache2/error.log'.
Pretending to remove file `apache2/access.log'.
Pretending to remove file `apache2/other_vhosts_access.log'.
(PID 2624) Back from recursing down `apache2'.
(PID 2624) Pretending to clean up directory `dbconfig-common'.
Pretending to remove file `dbconfig-common/dbc.log'.
(PID 2624) Back from recursing down `dbconfig-common'.
(PID 2624) Pretending to clean up directory `dist-upgrade'.
(PID 2624) Back from recursing down `dist-upgrade'.
Pretending to remove empty directory `dist-upgrade'.
Entry matching `--protect' pattern skipped. `ostechnix.txt'
(PID 2624) Pretending to clean up directory `lxd'.

设置 cron job 定期自动删除文件

(偷偷地告诉你, tmpwatch/tmpreaper 与 cron job 一起食用更佳哦。 )

进入 cron job 任务编辑窗口:

# crontab -e

添加一个周期任务:

0 1 * * * /usr/sbin/tmpwatch 30d /var/log/

上面的代码设置了 tmpwatch 每天凌晨 1 点运行,并删除 30 天之前的文件。

不了解 corn job 的小伙伴可以上网搜下它的初学者指南哈。

安装 tmpreaper 时,它会自动创建一个日常 cron job (/etc/cron.daily/Tmpreaper)。 它从 /etc/timereaper.conf 文件中读取配置并执行。 默认设置的是删除 7 天以前的文件,你可以通过修改 TMPREAPER.conf 文件中 “TMPREAPER_TIME=7d” 来更改这项设置。

写在最后

最后在提醒一下,在删除文件的时候一定要仔细检查好路径,以免数据丢失。

tmpwatch 和 tmpreaper 手册页:

$ man tmpwatch
$ man tmpreaper

本公众号全部博文已整理成一个目录,请在公众号里回复「 m 」获取!

连接:https://mp.weixin.qq.com/s/td94fPrTTUFMqCq4A0CsNg

海计划公众号
(0)
上一篇 2020/03/20 06:49
下一篇 2020/03/20 06:49

您可能感兴趣的内容

  • layui在form表单不回调的问题攻略教程_表单小白知识

    问题描述在使用layui进行ajax表单提交时,不回调,并且刷新了当前页面。解决在表单提交后添加 代码 return false;//监听提交
    form.on(‘submit(projectSave)’, function (data) {$.post(serverPath + ‘station/projcetapproval/save’, JSON.str

    2020/03/23
  • 开源众包入门教程_开源中国的众包平台,主要是以众包为主

    开源众包入门教程 官方网址:https://zb.oschina.net/ 简介描述:开源中国的众包平台,主要是以众包为主 共享经济下的软件众包、雇佣开发者的服务平台。打破地域限制…

    2020/03/11
  • 提高开发效率的 9 个工具菜鸟攻略_效率入门攻略

    互联网真是个神奇的地方,它不仅教你如何写代码,还提供了很多有用的工具,在开发的各个阶段帮你节约宝贵时间。本文将列出 9 个有用的在线工具,对任何开发人员而言,它们都会是得力助手(排名不分先后)。1. Can I Use如果你曾经想了解浏览器对 Web API(例如 local storage)的兼容性,那么 Can I Use 是个不错的选择。它为桌面版和移

    2020/03/20
  • Node.js使用Kafka-node模块实现生产者与消费者攻略教程_模块小白知识

    基于Node.js,采用Kafka-node模块实现生产者与消费者,我正在做一个的项目,我在自己的服务器上有一个Kafka生产者,并使用Kafka-Node作为我的应用程序的消费者。生产者代码/*** 生产者*/const kafka = require(‘kafka-node’);let conn = {‘kafkaHost’:’127.0.0.1:909

    2020/03/29
  • vue项目better-scroll使用注意点基础知识_项目使用指南

    1.应该在何时创建BScroll对象1)created : 中请求数据,ajax是异步的,这个时候可能mounted已经执行完了,也就是dom挂载完了,但数据还没请求回来,无法获取到内部元素(数据渲染出来的dom)高度. 无法渲染内部元素,无法滚动2)updated:数据发生改变时执行;数据改变,dom也要重新渲染,并执行updated,但无法保证是先dom

    2020/03/26
  • chalk小白帮助_修改控制台中字符串的样式

    chalk小白帮助 GitHub:https://github.com/chalk/chalk 简介描述:修改控制台中字符串的样式 chalk 包的作用是修改控制台中字符串的样式,…

    2020/03/06
  • Vue 中如何让 input 聚焦?教程视频_input使用帮助

    在做项目时,有时我们需要让 input 聚焦,为了让用户更好的使用。让 input 聚焦所有的浏览器都有一个内置的方法,让 input 聚焦。首先,我们需要获取元素。在原生 JS 中,我们可以使用下面方式来获取元素:
    const input = document.getElementById(

    2020/03/20
  • ES6常用的小技巧入门基础_技巧小白基础

    ES6中常用的小技巧,如果能在实际项目中能使用到,必定事半功倍:1. 强制要求参数ES6提供了默认参数值机制,允许你为参数设置默认值,防止在函数被调用时没有传入这些参数。在下面的例子中,我们写了一个required()函数作为参数a和b的默认值。这意味着如果a或b其中有一个参数没有在调用时传值,会默认required()函数,然后抛出错误。const req

    2020/03/29
  • 培训班出身的程序员为什么遭人嫌弃使用帮助_培训入门攻略

    这几年,由于it软件行业对人才的需求很大,很多传统行业也纷纷创办“互联网+”项目,加上app开发热潮,微信公众平台也催生了更多的就业岗位。于是it从业人员的薪水也随之水涨船高。同时it培训班也随雨后春笋般涌出,一个个打出的口号都很响。“0基础入学,三个月包就业”“毕业月入不过万,不收学费”“从前是你找工作,接下来是工作找你”真是人有多大胆,口号就有多不要脸。

    2020/03/20
  • js知识点分享使用说明_知识小白教程

    DateDtae() 和 new Date() 区别,Date() 函数不能带参数,属于静态方法new Date()*1 === new Date().getTime() === Date.now() // 获取时间戳
    new Date(y, m, 0).getDate() // 获取这个月有多少天,传入年份和月份
    new Date(y, m, 0).get

    2020/03/29
  • typeahead.js指南教程jquery input 搜索自动补全jQuery插件_插件小白基础

    jquery.typeahead.js是一款高级的自动补全jQuery插件。该自动补全插件提供超过50个配置选项和回调方法,用于完成自动补全功能,能够完成绝大部分表单自动补全的需求。使用方法在页面中引入jquery、jquery.typeahead.min.js和jquery.typeahead.min.css文件。
    <link rel="styleshee

    Web前端 2020/04/05
  • 微信小程序常用的几个UI组件库小白帮助_小程序小白教程

    1.WeUIWeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户的使用感知更加统一。包含button、cell、dialog、 progress、 toast、article、actionsheet、icon等各式元素。GitHub 地址:https://github.com/Tencent/weui

    2020/03/20
  • any-rule使用帮助_Js正则大全

    any-rule使用帮助 官方网址:https://any86.github.io/any-rule/ GitHub:https://github.com/any86/any-ru…

    2020/03/11
  • vue中使用ref获取dom对象使用帮助_dom新手入门

    前提条件本文适用于所有使用 Vue 的开发人, 包括初学者。在阅读本文之前,你应该具备一些前提条件:Node.js 10.x或更高版本。在终端或命令提示符下运行 node -v 来验证你的版本npm 6.7 或以上版本代码编辑器;我强烈推荐 Visual Studio Code把最新版本的 Vue 全局安装在你的机器上在你的计算机上安装 Vue CLI 3.

    2020/03/29
  • Js ajax状态码菜鸟攻略_码教程视频

    hr.readyState==4(ajax运行正常)xhr.status==200(后台运行正常)xhr.status==5xx(后台运行异常 联系后台代码人员) HTTP 状态码 ajax.status 1**:请求收到,继续处理 2**:操作成功收到,分析、接受 3**:完成此请求必须进一步处理 4**:请求包含一个错误语法或不能

    Web前端 2020/03/23
  • 程序员年龄大了怎么办?程序员年龄大了的出路小白指南_程序员入门基础

    在很多人的眼里,程序员都是吃青春饭的。尤其是国内更是这样认为,程序员年龄大了,体力越来越差,就不好找工作了,开始担心以后的出路。那么未来大龄程序员的出路在哪呢?还要不要继续从事编程工作呢?现在很多人选择一个行业都会考虑它的前景,需要不那么早的就被行业所淘汰。就编程这一行业而言,从业者的年龄是逐步年轻化,部分公司还会有年龄的限制,对于新的知识也是瞬息万变,需要

    2020/04/03