乐趣区

关于linux:性能工具之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)显示,如果参数是 -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 参数,列出的文件将是最小而不是最大文件。

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

退出移动版