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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【2月更文挑战第8天】性能工具之15个常用的Linux文件系统命令

前言

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

1.检查可用空间

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

$ 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

2.计算目录大小

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

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

3.清理文件

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

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

~# >/var/log/syslog

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

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

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

4.计算目录中的文件数量

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

5.文件系统中查找大文件

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

~# 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)显示,如果参数是 -hsort -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 参数,列出的文件将是最小而不是最大文件。

7.计算指定文件大小

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

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

8.查找范围内的大文件

例如,文件大小超过 100MB

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

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

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

9.列出最近修改的文件

~# 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 表示必须显示隐藏文件

10.查找旧文件(一)

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

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

11.查找旧文件(二)

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

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

12.查找空文件

以下命令允许你查找当前目录中大小为 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

13.打包及压缩目录内容

有时将目录中的所有日志文件打包到单个压缩的 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节所述。

14.回收站中查找文件

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

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

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

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

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

15.查找重复文件

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

~$ 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
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1天前
|
Linux Shell 数据安全/隐私保护
|
2天前
|
域名解析 网络协议 安全
|
9天前
|
监控 Linux Shell
|
8天前
|
运维 监控 网络协议
|
2天前
|
人工智能 安全 Linux
|
3天前
|
缓存 监控 Linux
Linux性能分析利器:全面掌握perf工具
【10月更文挑战第18天】 在Linux系统中,性能分析是确保软件运行效率的关键步骤。`perf`工具,作为Linux内核自带的性能分析工具,为开发者提供了强大的性能监控和分析能力。本文将全面介绍`perf`工具的使用,帮助你成为性能优化的高手。
23 1
|
3天前
|
缓存 监控 Linux
掌握Linux性能分析:深入探索perf工具
【10月更文挑战第26天】
10 1
|
9天前
|
Linux 开发工具 Perl
Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
【10月更文挑战第20天】Linux命令替换目录下所有文件里有"\n"的字符为""如何操作?
26 4
|
6月前
|
存储 监控 安全
《Linux 简易速速上手小册》第6章: 磁盘管理与文件系统(2024 最新版)
《Linux 简易速速上手小册》第6章: 磁盘管理与文件系统(2024 最新版)
63 1
|
3月前
|
存储 监控 Linux