Linux查找大文件
作为后端开发者,了解 linux 的一些简单操作还是很有必要的,因为不是所有的地方都会有服务器运维的人员的,这个时候就需要自己来了。 今天就简单的聊一下,当磁盘爆满时,我们如果找到占用空间大的文件。
其实很多时候,你需要了解的当前系统下存在哪些大文件,如果超多 1G 或者 100M 的文件;那么如何把这些大文件搜索出来呢? find . -type f -size +800M
但是上面的命令,我们只能看到超过 800M 大小的文件名称,但是对文件的详细信息一无所知。 find . -type f -size +800M -print0 | xargs -0 ls -l
当我们只需要找到超过 800M 的文件,并显示查找出来的文件的具体大小的时候,可以用下面命令: find . -type f -size +800M -print0 | xargs -0 du -h
如果我们需要对查找的结果按照文件的大小排序,那么可以使用下面命令 find . -type f -size +800M -print0 | xargs -0 du -h | sort -nr
如何查找 Linux 下的大目录
有的时候我们需要看下那个目录占用的总空间大, 我们用 ls -alh 只能看到当前一层的大小,我们可以用 du 来实现, 这里有一个--max-depth 的参数,就是只输出一层记录。 du -h --max-depth=1
如果想要排序可以加上 sort -n 的参数。
扩展知识说明
find 扩展说明
# 在某个路径下查找文件。在/etc下查找'*.log'的文件
find /etc -name '*.log'
# 扩展:列出某个路径下所有的文件,包括子目录
find /etc -name '*'
# find 使用正则表达式
find ./ -name '[a-z][0-9].log'
find ./ -type d(f)
find ./ -size +800M
find -print0 和 xargs -0 原理及用法
find -print0 表示在 find 的每一个结果之后加一个 NULL 字符,而不是默认加一个换行符。find 默认在每一个结果后面加一个'\n', 所以输出结果是一行一行的,当使用-print0 之后, 就变成一行了。
然后 xargs -0 表示 xargs 用 NULL 来作为分隔符。这样前后搭配就不会出现空格和换行符的错误。选择 null 作为分隔符,是因为一般编程语言把 NULL 作为字符串结束的标志,所以文件不可能以 NULL 结尾,这样确保万无一失。
比如下面这种情况的话,就很好的说明问题。
find ./ -name '*.log' | xargs rm
像是这样子的话,如果文件里面有空格,比如说file a.log
这样 xargs 就会把文件名分开,分别是 file 和 a.txt,这样子就会出问题。
rm: .//file: No such file or directory
rm: b.log: No such file or directory