性能工具之15个常用的Linux文件系统命令

网友投稿 808 2022-05-28

前言

检查可用空间

计算目录大小

清理文件

计算目录中的文件数量

文件系统中查找大文件

6.列出文件系统中最大文件

计算指定文件大小

查找范围内的大文件

列出最近修改的文件

查找旧文件(一)

查找旧文件(二)

查找空文件

打包及压缩目录内容

回收站中查找文件

查找重复文件

前言

检查可用空间

计算目录大小

清理文件

计算目录中的文件数量

性能工具之15个常用的Linux文件系统命令

文件系统中查找大文件

6.列出文件系统中最大文件

计算指定文件大小

查找范围内的大文件

列出最近修改的文件

查找旧文件(一)

查找旧文件(二)

查找空文件

打包及压缩目录内容

回收站中查找文件

查找重复文件

前言

测试人员最常见和繁琐的任务之一就是清理系统,比如防止磁盘空间出现不足。下面是我收集的一些常用的 Linux 文件系统相关命令。

检查可用空间

要查找服务器上所有文件系统上的可用空间,请执行以下命令:

$ df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/vda1 40G 32G 6.0G 84% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 2.0M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup tmpfs 379M 0 379M 0% /run/user/1001 tmpfs 379M 0 379M 0% /run/user/1000

对于特定的目录:

$ df -h /home 文件系统 容量 已用 可用 已用% 挂载点 /dev/vda1 40G 32G 6.0G 84% /

按占用顺序显示文件系统,可以知道的更全面:

~$ df -h | awk '{print $5 " " $6}' | sort -n | tail -5 22% / 23% /home 43% /var/datos 52% /usr 77% /boot

计算目录大小

-h 参数以友好的可读方式显示目录大小,以千字节、兆字节、千兆字节为单位

$ du -h -s /var/log 76M /var/log

清理文件

我们通常使用 rm 命令删除文件以释放空间。但是,我们无法删除文件是非常常见的,因为应用程序当时正在使用该文件,这对于无法停止的压测中系统上的日志文件最为常见。直接删除它们会产生有害影响,例如挂起应用程序,或者更温和但也不合适,因为这些文件的转储数据会被中断并且不再有用。

为了不改变应用程序行为并实现释放磁盘空间的目标,我们将清空文件而不是删除它们:

~# >/var/log/syslog

而后文件将是0字节大小。

如果需要使用单命令一次清空多个文件:

~# for I in `ls "/var/log/*.log"`;do >"$I";done

计算目录中的文件数量

$ ls -l /var/log | wc -l

文件系统中查找大文件

当你想清理空间的时候,此命令很有用,它会显示目录及子目录中的最大文件

~# du -k /var/log | sort -n | tail -5 36904 /var/log/audit 45780 /var/log/sa 4120792 /var/log/journal/f0f31005fb5a436d88e3c6cbf54e25aa 4120800 /var/log/journal 4207856 /var/log

TIPS:

文件大小必须以千字节(参数 -k)显示,如果参数是 -h ,sort -n命令不会按列表排序

tail -x 限制显示文件数,x 是数字,如果目录有数百或数千个文件,此参数就尤为重要了。

6.列出文件系统中最大文件

与上面类似,不过此命令不包括子目录

[root@7dgroup3 log]# ls -lSr | tail -5 -rw------- 1 root root 468120 12月 16 03:20 messages-20181216 -rw------- 1 root root 470853 12月 2 03:24 messages-20181202 -rw------- 1 root root 470862 12月 9 03:43 messages-20181209 -rw------- 1 root root 476536 12月 23 03:20 messages-20181223 -rw------- 1 root root 500087 12月 30 00:20 messages

如果删除 -r 参数,列出的文件将是最小而不是最大文件。

计算指定文件大小

如果想获取指定目录中.log 文件的总大小:

~$ du -ch /var/log/*.log | grep total 20M total

查找范围内的大文件

例如,文件大小超过 100MB

~$ find . -type f -size +100M -ls

或者在 100MB 到 1GB之间的那些文件

~$ find . -type f -size +100M -size -1G -ls

列出最近修改的文件

~# ls -larth /var/log | tail -5 -rw------- 1 root root 5.2K 12月 30 00:14 secure -rw-r--r-- 1 root root 0 12月 30 00:14 syslog drwxr-xr-x. 14 root root 4.0K 12月 30 00:14 . -rw------- 1 root root 118K 12月 30 00:30 cron -rw------- 1 root root 489K 12月 30 00:30 messages

参数 -a 表示必须显示隐藏文件

查找旧文件(一)

很多时候我们需要知道在给定时间间隔内修改的文件。在以下示例中,定位了超过90天的文件,以便找出不再使用的旧文件,可以安全地删除这些文件以释放空间。

〜#find / var / log - mtime + 90 - ls

〜#find / var / log - mtime + 90 - ls - exec rm {} \; 第一个命令仅定位文件,第二个命令还能删除它们。

查找旧文件(二)

与上面相同,另外一种情况,还考虑在指定时间间隔内已访问,修改或未修改的文件。

〜#find / var / log - atime + 90 - ls

查找空文件

以下命令允许你查找当前目录中大小为 0 字节的文件,即空文件。这在生成此文件的异常情况下非常有用,例如在文件系统 100% 已满并且应用程序尝试不成功地写入磁盘或异常应用程序行为之后。在这些情况下,清理是必要的,因为尽管这些空文件不占用磁盘空间,但如果大量创建0字节文件,它们可以使用所有可用的文件系统 inodes,这反过来导致不再创建文件。

~$ find . -type f -size 0b -ls

或者

~$ find . -type f -empty -ls

要了解文件系统中可用的可用 inode 数,请使用 df -i 命令。

~# df -i 文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点 /dev/vda1 2621440 704450 1916990 27% / devtmpfs 482468 331 482137 1% /dev tmpfs 485118 1 485117 1% /dev/shm tmpfs 485118 1041 484077 1% /run tmpfs 485118 16 485102 1% /sys/fs/cgroup tmpfs 485118 1 485117 1% /run/user/1001

打包及压缩目录内容

有时将目录中的所有日志文件打包到单个压缩的 tar 文件中以保留给定时间点的该目录的状态,然后安全地删除或清空所有这些文件以释放空间是有用的。

~# tar -zcvf var_log.`date +%Y%m%d`.tar.gz /var/log/*.log

上一个命令将所有日志文件压缩为扩展名为.tar.gz 的单个文件和当天的日期,以便将来容易找到。让我们看看如何节省空间,将此示例从 468 MB压缩到 35 MB:

~# du -ch /var/log/*.log | grep total 468M total ~# ls -lh var_log.20181230.tar.gz -rw-r--r-- 1 root root 35M sep 30 13:36 var_log.20181230.tar.gz

之后,我们可以继续清空所有日志文件,如第3节所述。

回收站中查找文件

通常当我们将文件发送到回收站时,它只是移动到主目录中的隐藏文件夹。但是存在一些应用程序使用它们自己的目录来存储垃圾,其名称是大写或小写的单词 trash 的组合,并结合一系列数字,例如 .Trash001,.trash-002 , . Trash_0003 等

此外,当安装来自外部硬盘驱动器或SD卡的文件系统时,回收站的名称可能因操作系统而异,导致无法识别,因此尽管垃圾箱已清空,但设备继续使用大量空间没有明显的理由。

因此,解决方案在于搜索系统中没有大小写差异的所有 * trash *子目录,并分析其内容以查看是否可以删除它(并不总是找到所有找到的项目都是垃圾)。

以下是必需的命令。它的执行可能非常耗时,因此你可能想要输入特定的文件系统或目录:

〜$ find / - iname “* trash *” - ls

查找重复文件

最后这是一个巨长的命令,允许你在目录下查找和删除重复文件,以避免不必要的冗余,这在消耗的磁盘空间方面可能非常昂贵。

~$ find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate | cut -f3-100 -d ' ' | tr '\n.' '\t.' | sed 's/\t\t/\n/g' | cut -f2-100 | tr '\t' '\n' | perl -i -pe 's/([ (){}-])/\\$1/g' | perl -i -pe 's/'\''/\\'\''/g' | xargs -pr rm -v

Linux 运维

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:gpg 密钥生成、导入、导出、自动输入密码
下一篇:《计算思维与算法入门》 —1.1.3 模式概括与抽象
相关文章