linux如何删除目录:空目录用rmdir非空目录用rm-rf
刚接触服务器运维那会,最折磨人的基础操作就是linux如何删除目录,总以为这是零难度的基础指令,随便敲两下就能搞定,结果反复踩坑,要么命令报错删不掉,要么差点误删系统文件,闹出不少乌龙。
最开始只死记了一个rmdir命令,不管什么目录都直接套用。那天整理本地测试环境的文件夹,有一个存放临时测试数据的目录,里面嵌套了三层子文件夹,还塞满了各类日志和缓存文件,随手输入rmdir命令回车,终端直接弹出提示,显示目录不为空,操作失败。
特别鸡肋的体验。
当时完全摸不着头脑,不知道问题出在哪,甚至傻乎乎的去修改文件夹权限,以为是权限不足导致无法删除,反复切换root用户权限,重新输入命令,得到的还是一模一样的报错。折腾了二十多分钟,愣是没删掉这个目录,只能暂时搁置,整个工作进度都被这点小事卡住了。
后来才搞明白,rmdir的使用场景极其单一,它只针对纯粹的空目录生效,只要目录内部存在任意文件、子目录,这个命令就会直接失效,这是系统自带的基础防护机制,就是为了避免新手无脑删除带内容的文件夹,误丢失数据。那段时间为了删非空目录,只能用最笨的办法,一层层点开目录,手动删除里面所有文件,清空全部子文件夹,把主目录彻底掏空之后,再用rmdir完成删除,繁琐又低效,稍微复杂点的多层目录,就要耗费好久时间。
真正改变操作习惯,是一次磁盘空间爆满的紧急情况。测试服务器磁盘告警,一个老旧的项目备份目录占用了大量空间,里面的文件层级杂乱,手动清空根本来不及。身边运维的同事随口提了一句,不用这么麻烦,直接用rm -rf命令就行。抱着试试看的心态,输入指令回车,短短一秒钟,整个多层嵌套、塞满文件的目录就被彻底清除,瞬间腾出了十几个G的空间。
rm -rf两个参数各司其职,适配所有目录删除场景。-r代表递归删除,能够自动遍历目录内所有层级的子文件和子目录,逐层完成清理工作,不用手动逐层清空;-f是强制删除参数,会自动忽略无效文件的报错提示、跳过权限确认弹窗,直接执行删除操作。也正是这两个参数的组合,让它成为了删除非空目录的核心指令,不管目录内容多杂乱,都能一次性清理干净。
这个命令绝对不能盲目乱用。
之前一次粗心操作,在根目录路径下误输入了删除指令,差点清空系统关键目录,还好及时终止了操作,不然直接导致服务器崩溃,后续修复要耗费大半天的时间。慢慢摸透规律后,操作就有了明确的区分,日常清理空目录,直接用rmdir,稳妥安全,没有任何误删风险;遇到带内容、多层嵌套的复杂目录,就用rm -rf,高效省事。
现在每次敲删除指令,指尖都会下意识停顿半秒,盯着终端的路径确认一遍,才会按下回车。