本章介绍如何通过查找未使用的文件和大型目录来优化磁盘空间。
有关与管理磁盘使用关联的过程信息,请参见管理磁盘使用(任务图)。
任务 |
说明 |
参考 |
---|---|---|
显示有关文件和磁盘空间的信息。 |
使用 df 命令显示有关磁盘空间使用情况的信息。 | |
显示文件的大小。 |
使用带有 -lh 选项的 ls 命令显示有关文件大小的信息。 | |
查找大文件。 |
使用 ls -s 命令可按大小对文件进行降序排序。 | |
查找超过指定大小限制的文件。 |
使用带有 -size 选项和指定的大小限制值的 find 命令来查找并显示超过指定大小的文件的名称。 | |
显示目录、子目录和文件的大小。 |
使用 du 命令显示一个或多个目录、子目录和文件的大小。 | |
显示本地 UFS 文件系统的拥有权。 |
使用 quot -a 命令显示文件的拥有权。 | |
列出最新的文件。 |
使用 ls -t 命令先显示最新创建或更改的文件。 | |
查找并删除旧文件或非活动文件。 |
使用带有 -atime 和 -mtime 选项的 find 命令查找在指定天数内未访问的文件。可以使用 rm `cat filename' 命令来删除这些文件。 | |
清除临时目录。 |
查找临时目录,然后使用 rm -r * 命令删除整个目录。 | |
查找并删除核心转储文件。 |
使用 find . -name core -exec rm {} \; 命令查找并删除核心转储文件。 | |
删除故障转储文件。 |
使用 rm * 命令删除 /var/crash/ 目录中的故障转储文件。 |
命令 |
说明 |
手册页 |
---|---|---|
df |
报告空闲磁盘块和文件的数量 | |
du |
概述分配给每个子目录的磁盘空间 | |
find -size |
根据 -size 选项指定的大小递归搜索目录 | |
ls -lh |
以 1024 幂的形式列出文件大小 |
使用 df 命令可显示有关磁盘空间使用情况的信息。
$ df [directory] [-h] [-t] |
没有任何选项时,该命令将列出所有已安装文件系统及其设备名称、使用的 512 字节块的数量以及文件数量。
指定要检查其文件系统的目录。
以 1024 幂的形式显示磁盘空间。
显示块总数以及用于所有已安装文件系统的块数。
在以下示例中,所列的所有文件系统都是本地挂载的,但 /usr/dist 除外。
$ df / (/dev/dsk/c0t0d0s0 ): 101294 blocks 105480 files /devices (/devices ): 0 blocks 0 files /system/contract (ctfs ): 0 blocks 2147483578 files /proc (proc ): 0 blocks 1871 files /etc/mnttab (mnttab ): 0 blocks 0 files /etc/svc/volatile (swap ): 992704 blocks 16964 files /system/object (objfs ): 0 blocks 2147483530 files /usr (/dev/dsk/c0t0d0s6 ): 503774 blocks 299189 files /dev/fd (fd ): 0 blocks 0 files /var/run (swap ): 992704 blocks 16964 files /tmp (swap ): 992704 blocks 16964 files /opt (/dev/dsk/c0t0d0s5 ): 23914 blocks 6947 files /export/home (/dev/dsk/c0t0d0s7 ): 16810 blocks 7160 files |
在以下示例中,以 1024 字节为单位显示具有 UFS 根文件系统的系统的文件系统信息。
$ df -h Filesystem size used avail capacity Mounted on /dev/dsk/c0t0d0s0 249M 200M 25M 90% / /devices 0K 0K 0K 0% /devices ctfs 0K 0K 0K 0% /system/contract proc 0K 0K 0K 0% /proc mnttab 0K 0K 0K 0% /etc/mnttab swap 485M 376K 485M 1% /etc/svc/volatile objfs 0K 0K 0K 0% /system/object /dev/dsk/c0t0d0s6 3.2G 2.9G 214M 94% /usr fd 0K 0K 0K 0% /dev/fd swap 485M 40K 485M 1% /var/run swap 485M 40K 485M 1% /tmp /dev/dsk/c0t0d0s5 13M 1.7M 10M 15% /opt /dev/dsk/c0t0d0s7 9.2M 1.0M 7.3M 13% /export/home |
尽管 /proc 和 /tmp 是本地文件系统,但却不是 UFS 文件系统。/proc 是 PROCFS 文件系统,/var/run 和 /tmp 是 TMPFS 文件系统,/etc/mnttab 是 MNTFS 文件系统。
在以下示例中,以 1024 字节为单位显示具有 Oracle Solaris ZFS 根文件系统的系统的文件系统信息。
Filesystem size used avail capacity Mounted on rpool/ROOT/s1008be 67G 4.6G 58G 8% / /devices 0K 0K 0K 0% /devices ctfs 0K 0K 0K 0% /system/contract proc 0K 0K 0K 0% /proc mnttab 0K 0K 0K 0% /etc/mnttab swap 1.9G 1.5M 1.9G 1% /etc/svc/volatile objfs 0K 0K 0K 0% /system/object sharefs 0K 0K 0K 0% /etc/dfs/sharetab /platform/sun4u-us3/lib/libc_psr/libc_psr_hwcap1.so.1 63G 4.6G 58G 8% /platform/sun4u-us3/lib/libc_psr.so.1 /platform/sun4u-us3/lib/sparcv9/libc_psr/libc_psr_hwcap1.so.1 63G 4.6G 58G 8% /platform/sun4u-us3/lib/sparcv9/libc_psr.so.1 fd 0K 0K 0K 0% /dev/fd rpool/ROOT/s1008be/var 67G 73M 58G 1% /var swap 1.9G 32K 1.9G 1% /tmp swap 1.9G 40K 1.9G 1% /var/run rpool/export 67G 20K 58G 1% /export rpool/export/home 67G 18K 58G 1% /export/home |
以下示例显示所有已挂载文件系统、设备名称、使用的 512 字节块的总数以及文件数量的列表。每个两行项的第二行都显示文件系统分配的总块数和总文件数。
$ df -t / (/dev/dsk/c0t0d0s0 ): 101294 blocks 105480 files total: 509932 blocks 129024 files /devices (/devices ): 0 blocks 0 files total: 0 blocks 113 files /system/contract (ctfs ): 0 blocks 2147483578 files total: 0 blocks 69 files /proc (proc ): 0 blocks 1871 files total: 0 blocks 1916 files /etc/mnttab (mnttab ): 0 blocks 0 files total: 0 blocks 1 files /etc/svc/volatile (swap ): 992608 blocks 16964 files total: 993360 blocks 17025 files /system/object (objfs ): 0 blocks 2147483530 files total: 0 blocks 117 files /usr (/dev/dsk/c0t0d0s6 ): 503774 blocks 299189 files total: 6650604 blocks 420480 files /dev/fd (fd ): 0 blocks 0 files total: 0 blocks 31 files /var/run (swap ): 992608 blocks 16964 files total: 992688 blocks 17025 files /tmp (swap ): 992608 blocks 16964 files total: 992688 blocks 17025 files /opt (/dev/dsk/c0t0d0s5 ): 23914 blocks 6947 files total: 27404 blocks 7168 files /export/home (/dev/dsk/c0t0d0s7 ): 16810 blocks 7160 files total: 18900 blocks 7168 files |
使用 ls 命令可以检查文件的大小并对文件排序。使用 find 命令可以查找超过大小限制的文件。有关更多信息,请参见 ls(1) 和 find(1) 手册页。
如果 /var 目录中的空间不足,请不要象征性地将 /var 目录链接至文件系统中具有更多磁盘空间的目录。这种做法即使作为一种临时措施,也会导致某些守护进程和实用程序出现问题。
显示文件的大小。
$ ls [-lh] [-s] |
以长格式显示文件和目录的列表,以字节为单位显示大小。(请参见下面的示例。)
文件或目录大小大于 1024 字节时,请以 KB、MB、GB 或 TB 来表示文件大小和目录大小。此选项还可以修改 -o、-n、-@ 和 -g 选项显示的输出,以使用新格式显示文件或目录大小。有关更多信息,请参见 ls(1) 手册页。
显示文件和目录(以块为单位)的列表。
以下示例表明,lastlog 和 messages 文件比 /var/adm 目录中的其他文件大。
$ cd /var/adm $ ls -lh total 148 drwxrwxr-x 5 adm adm 512 Nov 26 09:39 acct/ -rw------- 1 uucp bin 0 Nov 26 09:25 aculog drwxr-xr-x 2 adm adm 512 Nov 26 09:25 exacct/ -r--r--r-- 1 root other 342K Nov 26 13:56 lastlog drwxr-xr-x 2 adm adm 512 Nov 26 09:25 log/ -rw-r--r-- 1 root root 20K Nov 26 13:55 messages drwxr-xr-x 2 adm adm 512 Nov 26 09:25 passwd/ drwxrwxr-x 2 adm sys 512 Nov 26 09:39 sa/ drwxr-xr-x 2 root sys 512 Nov 26 09:49 sm.bin/ -rw-rw-rw- 1 root bin 0 Nov 26 09:25 spellhist drwxr-xr-x 2 root sys 512 Nov 26 09:25 streams/ -rw-r--r-- 1 root bin 3.3K Nov 26 13:56 utmpx -rw-r--r-- 1 root root 0 Nov 26 10:17 vold.log -rw-r--r-- 1 adm adm 19K Nov 26 13:56 wtmpx |
$ cd /var/lp/logs $ ls -s total 2 0 lpsched 2 lpsched.1 |
如果文件的字符或列不同,请使用以下命令按块大小从大到小的顺序对文件列表进行排序。
$ ls -l | sort +4rn | more |
请注意,此命令按照第四个字段中的字符(从左侧开始)对列表中的文件排序。
如果文件的字符或列相同,请使用以下命令按块大小从大到小的顺序对文件列表进行排序。
$ ls -s | sort -nr | more |
请注意,此命令从最左侧的字符开始对列表中的文件排序。
$ cd /var/adm $ ls -l | sort +4rn | more -r--r--r-- 1 root root 4568368 Oct 17 08:36 lastlog -rw-r--r-- 1 adm adm 697040 Oct 17 12:30 pacct.9 -rw-r--r-- 1 adm adm 280520 Oct 17 13:05 pacct.2 -rw-r--r-- 1 adm adm 277360 Oct 17 12:55 pacct.4 -rw-r--r-- 1 adm adm 264080 Oct 17 12:45 pacct.6 -rw-r--r-- 1 adm adm 255840 Oct 17 12:40 pacct.7 -rw-r--r-- 1 adm adm 254120 Oct 17 13:10 pacct.1 -rw-r--r-- 1 adm adm 250360 Oct 17 12:25 pacct.10 -rw-r--r-- 1 adm adm 248880 Oct 17 13:00 pacct.3 -rw-r--r-- 1 adm adm 247200 Oct 17 12:35 pacct.8 -rw-r--r-- 1 adm adm 246720 Oct 17 13:15 pacct.0 -rw-r--r-- 1 adm adm 245920 Oct 17 12:50 pacct.5 -rw-r--r-- 1 root root 190229 Oct 5 03:02 messages.1 -rw-r--r-- 1 adm adm 156800 Oct 17 13:17 pacct -rw-r--r-- 1 adm adm 129084 Oct 17 08:36 wtmpx |
在以下示例中,lastlog 和 messages 文件是 /var/adm 目录中最大的文件。
$ cd /var/adm $ ls -s | sort -nr | more 48 lastlog 30 messages 24 wtmpx 18 pacct 8 utmpx 2 vold.log 2 sulog 2 sm.bin/ 2 sa/ 2 passwd/ 2 pacct1 2 log/ 2 acct/ 0 spellhist 0 aculog total 144 |
要查找并显示超过指定大小的文件的名称,请使用 find 命令。
$ find directory -size +nnn |
标识要搜索的目录。
512 字节块的数量。将列出超过此大小的文件。
以下示例显示如何在当前工作目录中查找大于 400 块的文件。-print 选项显示 find 命令的输出。
$ find . -size +400 -print ./Howto/howto.doc ./Howto/howto.doc.backup ./Howto/howtotest.doc ./Routine/routineBackupconcepts.doc ./Routine/routineIntro.doc ./Routine/routineTroublefsck.doc ./.record ./Mail/pagination ./Config/configPrintadmin.doc ./Config/configPrintsetup.doc ./Config/configMailappx.doc ./Config/configMailconcepts.doc ./snapshot.rs |
可以使用 du 命令及选项显示目录的大小。此外,还可以使用 quot 命令来查找本地 UFS 文件系统中的用户帐户所使用的磁盘空间量。有关这些命令的更多信息,请参见 du(1) 和 quot(1M) 手册页。
使用 du 命令显示一个或多个目录、子目录和文件的大小。以 512 字节块为单位显示大小。
$ du [-as] [directory ...] |
显示您指定的每个目录的大小,其中包括目录下的每个子目录。
显示每个文件和子目录的大小,以及指定目录中包含的总块数。
显示指定目录中包含的总块数。
以 1024 字节块为单位显示每个目录的大小。
以 1000 字节块为单位显示每个目录的大小。
标识要检查的一个或多个目录。命令行语法中的多个目录以空格分隔。
以下示例显示两个目录的大小。
$ du -s /var/adm /var/spool/lp 130 /var/adm 40 /var/spool/lp |
以下示例显示两个目录的大小,其中包括每个目录下的所有子目录和文件的大小。还显示每个目录中包含的总块数。
$ du /var/adm /var/spool/lp 2 /var/adm/exacct 2 /var/adm/log 2 /var/adm/streams 2 /var/adm/acct/fiscal 2 /var/adm/acct/nite 2 /var/adm/acct/sum 8 /var/adm/acct 2 /var/adm/sa 2 /var/adm/sm.bin 258 /var/adm 4 /var/spool/lp/admins 2 /var/spool/lp/requests/printing.... 4 /var/spool/lp/requests 4 /var/spool/lp/system 2 /var/spool/lp/fifos 24 /var/spool/lp |
以下示例以 1024 字节块为单位显示目录大小。
$ du -h /usr/share/audio 796K /usr/share/audio/samples/au 797K /usr/share/audio/samples 798K /usr/share/audio |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
显示用户、目录或文件系统以及使用的 1024 字节块数。
# quot [-a] [filesystem ...] |
列出每个已挂载 UFS 文件系统的所有用户以及所用的 1024 字节块数。
标识 UFS 文件系统。将显示该文件系统的用户以及所用块数。
quot 命令仅适用于本地 UFS 文件系统。
在以下示例中,将显示根 (/) 文件系统的用户。在后续的示例中,将显示所有已安装 UFS 文件系统的用户。
# quot / /dev/rdsk/c0t0d0s0: 43340 root 3142 rimmer 47 uucp 35 lp 30 adm 4 bin 4 daemon |
# quot -a /dev/rdsk/c0t0d0s0 (/): 43340 root 3150 rimmer 47 uucp 35 lp 30 adm 4 bin 4 daemon /dev/rdsk/c0t0d0s6 (/usr): 460651 root 206632 bin 791 uucp 46 lp 4 daemon 1 adm /dev/rdsk/c0t0d0s7 (/export/home): 9 root |
清理负载较大的文件系统的工作包括查找并删除最近未使用的文件。使用 ls 或 find 命令可以查找未使用的文件。有关更多信息,请参见 ls(1) 和 find(1) 手册页。
节省磁盘空间的其他方法包括清空临时目录(例如 /var/tmp 或 /var/spool 中的目录)以及删除 core 文件和故障转储文件。有关故障转储文件的更多信息,请参阅第 17 章。
以下示例显示如何使用 ls -tl 命令在 /var/adm 目录中查找最近创建或更改的文件。sulog 文件是最近创建或编辑的文件。
$ ls -tl /var/adm total 134 -rw------- 1 root root 315 Sep 24 14:00 sulog -r--r--r-- 1 root other 350700 Sep 22 11:04 lastlog -rw-r--r-- 1 root bin 4464 Sep 22 11:04 utmpx -rw-r--r-- 1 adm adm 20088 Sep 22 11:04 wtmpx -rw-r--r-- 1 root other 0 Sep 19 03:10 messages -rw-r--r-- 1 root other 0 Sep 12 03:10 messages.0 -rw-r--r-- 1 root root 11510 Sep 10 16:13 messages.1 -rw-r--r-- 1 root root 0 Sep 10 16:12 vold.log drwxr-xr-x 2 root sys 512 Sep 10 15:33 sm.bin drwxrwxr-x 5 adm adm 512 Sep 10 15:19 acct drwxrwxr-x 2 adm sys 512 Sep 10 15:19 sa -rw------- 1 uucp bin 0 Sep 10 15:17 aculog -rw-rw-rw- 1 root bin 0 Sep 10 15:17 spellhist drwxr-xr-x 2 adm adm 512 Sep 10 15:17 log drwxr-xr-x 2 adm adm 512 Sep 10 15:17 passwd |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
查找在指定的天数内未被访问的文件并在一个文件中列出这些文件。
# find directory -type f[-atime +nnn] [-mtime +nnn] -print > filename & |
标识要搜索的目录。还会搜索此目录下面的子目录。
查找在您指定的天数内 (nnn) 未被访问的文件。
查找在您指定的天数内 (nnn) 未被修改的文件。
标识包含非活动文件列表的文件。
# rm `cat filename` |
其中 filename 标识在前面的步骤中创建的文件。此文件包含非活动文件的列表。
以下示例显示 /var/adm 目录及子目录中在过去 60 天内未被访问的文件。/var/tmp/deadfiles 文件包含非活动文件的列表。rm 命令将删除这些非活动文件。
# find /var/adm -type f -atime +60 -print > /var/tmp/deadfiles & # more /var/tmp/deadfiles /var/adm/aculog /var/adm/spellhist /var/adm/wtmpx /var/adm/sa/sa13 /var/adm/sa/sa27 /var/adm/sa/sa11 /var/adm/sa/sa23 /var/adm/sulog /var/adm/vold.log /var/adm/messages.1 /var/adm/messages.2 /var/adm/messages.3 # rm `cat /var/tmp/deadfiles` # |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
转到要清除的目录。
# cd directory |
完成步骤 3 之前,请确保您处于正确的目录中。步骤 3 将删除当前目录中的所有文件。
删除当前目录中的文件和子目录。
# rm -r * |
更改到包含不必要、临时或旧子目录和文件的其他目录。
通过重复步骤 3 删除这些子目录和文件。
以下示例显示如何清除 mywork 目录以及如何验证是否已删除所有文件和子目录。
# cd mywork # ls filea.000 fileb.000 filec.001 # rm -r * # ls # |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
转到要搜索 core 文件的目录。
# find . -name core -exec rm {} \; |
以下示例显示如何使用 find 命令查找并删除 jones 用户帐户的 core 文件。
# cd /home/jones # find . -name core -exec rm {} \; |
故障转储文件可能会很大。如果允许系统存储这些文件,除非必要,否则不要使其保留太长时间。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
转到存储故障转储文件的目录。
# cd /var/crash/system |
其中 system 标识创建了故障转储文件的系统。
完成步骤 3 之前,请确保您处于正确的目录中。步骤 3 将删除当前目录中的所有文件。
删除故障转储文件。
# rm * |
验证是否已删除故障转储文件。
# ls |
以下示例显示如何从系统 venus 中删除故障转储文件,以及如何验证是否已删除故障转储文件。
# cd /var/crash/venus # rm * # ls |