系统管理指南:高级管理

第 6 章 管理磁盘使用(任务)

本章介绍如何通过查找未使用的文件和大型目录来优化磁盘空间。

有关与管理磁盘使用关联的过程信息,请参见管理磁盘使用(任务图)

管理磁盘使用(任务图)

任务 

说明 

参考 

显示有关文件和磁盘空间的信息。 

使用 df 命令显示有关磁盘空间使用情况的信息。

如何显示有关文件和磁盘空间的信息

显示文件的大小。 

使用带有 -lh 选项的 ls 命令显示有关文件大小的信息。

如何显示文件大小

查找大文件。 

使用 ls -s 命令可按大小对文件进行降序排序。

如何查找大文件

查找超过指定大小限制的文件。 

使用带有 -size 选项和指定的大小限制值的 find 命令来查找并显示超过指定大小的文件的名称。

如何查找超过指定大小限制的文件

显示目录、子目录和文件的大小。 

使用 du 命令显示一个或多个目录、子目录和文件的大小。

如何显示目录、子目录和文件的大小

显示本地 UFS 文件系统的拥有权。 

使用 quot -a 命令显示文件的拥有权。

如何显示本地 UFS 文件系统的用户拥有权

列出最新的文件。 

使用 ls -t 命令先显示最新创建或更改的文件。

如何列出最新文件

查找并删除旧文件或非活动文件。 

使用带有 -atime-mtime 选项的 find 命令查找在指定天数内未访问的文件。可以使用 rm `cat filename' 命令来删除这些文件。

如何查找并删除旧文件或非活动文件

清除临时目录。 

查找临时目录,然后使用 rm -r * 命令删除整个目录。

如何清除临时目录

查找并删除核心转储文件。 

使用 find . -name core -exec rm {} \; 命令查找并删除核心转储文件。

如何查找并删除 core 文件

删除故障转储文件。 

使用 rm * 命令删除 /var/crash/ 目录中的故障转储文件。

如何删除故障转储文件

显示有关文件和磁盘空间的信息

此表概括说明了可用于显示有关文件大小和磁盘空间信息的命令。

命令 

说明 

手册页 

df

报告空闲磁盘块和文件的数量 

df(1M)

du

概述分配给每个子目录的磁盘空间 

du(1)

find -size

根据 -size 选项指定的大小递归搜索目录

find(1)

ls -lh

以 1024 幂的形式列出文件大小 

ls(1)

Procedure如何显示有关文件和磁盘空间的信息

  1. 使用 df 命令可显示有关磁盘空间使用情况的信息。


    $ df [directory]  [-h] [-t]
    df

    没有任何选项时,该命令将列出所有已安装文件系统及其设备名称、使用的 512 字节块的数量以及文件数量。

    directory

    指定要检查其文件系统的目录。

    -h

    以 1024 幂的形式显示磁盘空间。

    -t

    显示块总数以及用于所有已安装文件系统的块数。


示例 6–1 显示有关文件大小和磁盘空间的信息

在以下示例中,所列的所有文件系统都是本地挂载的,但 /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


示例 6–2 以 1024 字节为单位显示具有 UFS 根文件系统的系统的文件大小信息

在以下示例中,以 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 文件系统。



示例 6–3 以 1024 字节为单位显示具有 ZFS 根文件系统的系统的文件大小信息

在以下示例中,以 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


示例 6–4 显示文件系统分配的总块数和总文件数

以下示例显示所有已挂载文件系统、设备名称、使用的 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 目录链接至文件系统中具有更多磁盘空间的目录。这种做法即使作为一种临时措施,也会导致某些守护进程和实用程序出现问题。


Procedure如何显示文件大小

  1. 转到要检查的文件所在的目录。

  2. 显示文件的大小。


    $ ls [-lh] [-s]
    -l

    以长格式显示文件和目录的列表,以字节为单位显示大小。(请参见下面的示例。)

    -h

    文件或目录大小大于 1024 字节时,请以 KB、MB、GB 或 TB 来表示文件大小和目录大小。此选项还可以修改 -o-n-@-g 选项显示的输出,以使用新格式显示文件或目录大小。有关更多信息,请参见 ls(1) 手册页。

    -s

    显示文件和目录(以块为单位)的列表。


示例 6–5 显示文件大小

以下示例表明,lastlogmessages 文件比 /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

以下示例显示 lpsched.1 文件使用了两个块。


$ cd /var/lp/logs
$ ls -s
total 2            0 lpsched       2 lpsched.1

Procedure如何查找大文件

  1. 转到要搜索的目录。

  2. 以块为单位按从大到小的顺序显示文件大小。

    • 如果文件的字符或列不同,请使用以下命令按块大小从大到小的顺序对文件列表进行排序。


      $ ls -l | sort +4rn | more
      

      请注意,此命令按照第四个字段中的字符(从左侧开始)对列表中的文件排序。

    • 如果文件的字符或列相同,请使用以下命令按块大小从大到小的顺序对文件列表进行排序。


      $ ls -s | sort -nr | more
      

      请注意,此命令从最左侧的字符开始对列表中的文件排序。


示例 6–6 查找大文件(按第五个字段的字符排序)


$ 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


示例 6–7 查找大文件(按最左侧的字符排序)

在以下示例中,lastlogmessages 文件是 /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

Procedure如何查找超过指定大小限制的文件

  1. 要查找并显示超过指定大小的文件的名称,请使用 find 命令。


    $ find directory -size +nnn 
    
    directory

    标识要搜索的目录。

    -size +nnn

    512 字节块的数量。将列出超过此大小的文件。


示例 6–8 查找超过指定大小限制的文件

以下示例显示如何在当前工作目录中查找大于 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) 手册页。

Procedure如何显示目录、子目录和文件的大小

  1. 使用 du 命令显示一个或多个目录、子目录和文件的大小。以 512 字节块为单位显示大小。


    $ du [-as] [directory ...]
    du

    显示您指定的每个目录的大小,其中包括目录下的每个子目录。

    -a

    显示每个文件和子目录的大小,以及指定目录中包含的总块数。

    -s

    显示指定目录中包含的总块数。

    -h

    以 1024 字节块为单位显示每个目录的大小。

    -H

    以 1000 字节块为单位显示每个目录的大小。

    [directory ...]

    标识要检查的一个或多个目录。命令行语法中的多个目录以空格分隔。


示例 6–9 显示目录、子目录和文件的大小

以下示例显示两个目录的大小。


$ 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

Procedure如何显示本地 UFS 文件系统的用户拥有权

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 显示用户、目录或文件系统以及使用的 1024 字节块数。


    # quot [-a] [filesystem ...]
    -a

    列出每个已挂载 UFS 文件系统的所有用户以及所用的 1024 字节块数。

    filesystem

    标识 UFS 文件系统。将显示该文件系统的用户以及所用块数。


    注 –

    quot 命令仅适用于本地 UFS 文件系统。



示例 6–10 显示本地 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

查找并删除旧文件或非活动文件

清理负载较大的文件系统的工作包括查找并删除最近未使用的文件。使用 lsfind 命令可以查找未使用的文件。有关更多信息,请参见 ls(1)find(1) 手册页。

节省磁盘空间的其他方法包括清空临时目录(例如 /var/tmp/var/spool 中的目录)以及删除 core 文件和故障转储文件。有关故障转储文件的更多信息,请参阅第 17 章

Procedure如何列出最新文件

  1. 使用 ls -t 命令列出文件,首先会显示最近创建或更改的文件。


    $ ls -t [directory]
    -t

    先按最近的时间标记对文件排序。

    directory

    标识要搜索的目录。


示例 6–11 列出最新文件

以下示例显示如何使用 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

Procedure如何查找并删除旧文件或非活动文件

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 查找在指定的天数内未被访问的文件并在一个文件中列出这些文件。


    # find directory -type f[-atime +nnn] [-mtime +nnn] -print > filename &
    directory

    标识要搜索的目录。还会搜索此目录下面的子目录。

    -atime +nnn

    查找在您指定的天数内 (nnn) 未被访问的文件。

    -mtime +nnn

    查找在您指定的天数内 (nnn) 未被修改的文件。

    filename

    标识包含非活动文件列表的文件。

  3. 删除在前面的步骤中列出的非活动文件。


    # rm `cat filename`
    

    其中 filename 标识在前面的步骤中创建的文件。此文件包含非活动文件的列表。


示例 6–12 查找并删除旧文件或非活动文件

以下示例显示 /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`
#

Procedure如何清除临时目录

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 转到要清除的目录。


    # cd directory
    

    注意 – 注意 –

    完成步骤 3 之前,请确保您处于正确的目录中。步骤 3 将删除当前目录中的所有文件。


  3. 删除当前目录中的文件和子目录。


    # rm -r *
    
  4. 更改到包含不必要、临时或旧子目录和文件的其他目录。

  5. 通过重复步骤 3 删除这些子目录和文件。


示例 6–13 清除临时目录

以下示例显示如何清除 mywork 目录以及如何验证是否已删除所有文件和子目录。


# cd mywork
# ls
filea.000
fileb.000
filec.001
# rm -r *
# ls
#

Procedure如何查找并删除 core 文件

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 转到要搜索 core 文件的目录。

  3. 查找并删除此目录及其子目录中的所有 core 文件。


    # find . -name core -exec rm {} \;
    

示例 6–14 查找并删除 core 文件

以下示例显示如何使用 find 命令查找并删除 jones 用户帐户的 core 文件。


# cd /home/jones
# find . -name core -exec rm {} \;

Procedure如何删除故障转储文件

故障转储文件可能会很大。如果允许系统存储这些文件,除非必要,否则不要使其保留太长时间。

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 转到存储故障转储文件的目录。


    # cd /var/crash/system
    

    其中 system 标识创建了故障转储文件的系统。


    注意 – 注意 –

    完成步骤 3 之前,请确保您处于正确的目录中。步骤 3 将删除当前目录中的所有文件。


  3. 删除故障转储文件。


    # rm *
    
  4. 验证是否已删除故障转储文件。


    # ls
    

示例 6–15 删除故障转储文件

以下示例显示如何从系统 venus 中删除故障转储文件,以及如何验证是否已删除故障转储文件。


# cd /var/crash/venus
# rm *
# ls