Skip to content

05 文件也有上下级 - 目录与层级

一些疑问

  • / 根文件夹下的内容能删吗?
  • 刚装好的系统就有那么多文件,这些文件都是做什么的呀?
  • 为什么系统日志都在 /var/log 文件夹下,有什么讲究吗?

根目录文件夹

目录名称应放置文件的内容
/bin (binaries)基本用户命令,可在单用户模式下使用
/boot (boot)系统启动文件,如内核和启动菜单
/dev (devices)设备文件,代表系统中的硬件设备
/etc (etcetera)系统配置文件和启动脚本
/home (home)用户的个人主目录
/lib (libraries)系统共享库,供 /bin/sbin 命令使用
/lib64 (libraries 64)64 位系统共享库
/media (media)挂载点目录,用于可移动设备
/mnt (mount)手动挂载的文件系统临时挂载点
/opt (optional)第三方应用软件包
/proc (process)虚拟文件系统,提供进程和内核信息
/root (root)管理员的个人主目录
/run (run)系统启动后生成的运行时数据
/sbin (system binaries)系统管理命令,供管理员使用
/srv (service)服务数据目录,存放网络服务数据
/sys (system)提供内核与硬件之间的接口信息
/tmp (temporary)临时文件目录,所有用户均可访问
/usr (user)用户二级目录,存放应用程序和文件
/usr/bin (user binaries)用户安装的二级基本命令
/usr/lib (user libraries)用户共享库
/usr/local (user local)本地安装的软件和应用程序
/usr/sbin (user system binaries)系统管理员使用的非基本管理命令
/usr/share (user share)共享数据,如文档和帮助文件
/var (variable)动态数据,如日志文件和临时文件
/lost+found (lost and found)文件系统恢复区,存放丢失的文件碎片
bash
  ~ ls -liha /
total 76K
     2 dr-xr-xr-x.  20 root root 4.0K Sep 23 23:38 .
     2 dr-xr-xr-x.  20 root root 4.0K Sep 23 23:38 ..
131090 dr-xr-xr-x.   2 root root 4.0K Jun 25 22:23 afs
   724 -rw-r--r--    1 root root    0 Jul 23 09:11 .autorelabel
   837 lrwxrwxrwx    1 root root    7 Jun 25 22:23 bin -> usr/bin
131091 dr-xr-xr-x.   5 root root 4.0K Jul 23 11:25 boot
263502 drwxr-xr-x    2 root root 4.0K Feb  9  2022 data
     1 drwxr-xr-x   19 root root 3.1K Jun 25 22:23 dev
524290 drwxr-xr-x.  93 root root 4.0K Jul 31 16:07 etc
131092 drwxr-xr-x.   3 root root 4.0K Jun 25 22:23 home
   838 lrwxrwxrwx    1 root root    7 Jun 25 22:23 lib -> usr/lib
  1431 lrwxrwxrwx    1 root root    9 Jun 25 22:23 lib64 -> usr/lib64
    11 drwx------.   2 root root  16K Jan 20  2022 lost+found
131093 drwxr-xr-x.   2 root root 4.0K Jun 25 22:23 media
131094 drwxr-xr-x.   2 root root 4.0K Jun 25 22:23 mnt
131095 drwxr-xr-x.   2 root root 4.0K Jun 25 22:23 opt
     1 dr-xr-xr-x  189 root root    0 Jul 23 09:11 proc
393219 dr-xr-x---.   9 root root 4.0K Sep 23 23:38 root
     1 drwxr-xr-x   28 root root 1000 Sep 23 13:12 run
  1432 lrwxrwxrwx    1 root root    8 Jun 25 22:23 sbin -> usr/sbin
131096 drwxr-xr-x.   2 root root 4.0K Jun 25 22:23 srv
     1 dr-xr-xr-x   13 root root    0 Jul 23 11:22 sys
393218 drwxrwxrwt.   9 root root 4.0K Sep 23 23:38 tmp
393220 drwxr-xr-x.  12 root root 4.0K Jul 23 11:22 usr
131075 drwxr-xr-x.  19 root root 4.0K Jul 23 11:22 var
  • /bin/sbin/lib/lib64 实际上只是指向 /usr 目录中的相应子目录的符号链接。这种做法的目的是简化文件系统结构,使所有的用户二进制文件和库文件都集中在 /usr 目录中,方便管理和维护。

    • /bin -> /usr/bin
    • /sbin -> /usr/sbin
    • /lib -> /usr/lib
    • /lib64 -> /usr/lib64
  • total 76K 出现在使用 ls -liha 命令时,它显示的是该目录下所有文件的元数据(文件名、权限、链接数等)所占用的空间大小。这并不是目录内所有文件实际内容的大小总和,而是该目录的结构(包括文件条目等)在磁盘上的空间占用。

    ls 命令的输出中,这一数字仅反映目录本身的元数据的大小(在这里是 76KB),而不包括目录中实际文件的大小。所以如果想查看某个文件夹及其所有内容的总大小,可以使用 du 命令,比如 du -sh /,这才会显示目录及其文件内容的实际大小。

  • 在 Linux 文件系统中,每个目录都有一个"硬链接数",它表示的是与该目录相关的文件或子目录的引用数。对于一个目录而言,硬链接数等于该目录中所有子目录的数量加上 2:

    • 一个硬链接指向目录自身(目录的 .)。
    • 另一个硬链接指向其父目录(目录的 ..)。

    例如,假如一个目录下有 3 个子目录,则该目录的硬链接数为 5(3 个子目录 + 2)。硬链接数不包含普通文件,只计算子目录的数量。

    通过 ls -l 命令可以看到硬链接数。例如在你的输出中,/root 目录的硬链接数为 9,意味着它下方有 7 个子目录,加上它自己和其父目录的链接,总计为 9。

常用的一些文件夹

文件夹路径用途备注
/usr/bin系统中存放可执行二进制文件的目录,通常包含用户可以直接使用的命令和应用程序。如果自行编译了二进制文件,可以将其放在 /usr/local/bin/opt/bin,避免与系统的二进制文件冲突。
/var/log存放系统日志文件的目录。系统日志、应用日志、安全日志等一般都存储在这个文件夹下,比如 /var/log/messages/var/log/syslog/var/log/secure 等。日志分析与故障排查时常用。
/usr/lib存放二进制文件的依赖库。若自行编译了库文件,可以放在 /usr/local/lib,这是为自定义或非系统库预留的目录,避免覆盖系统库。
/etc/sysconfig/network-scripts这是 CentOS 和 RHEL 系统中存放网络配置文件的目录。常见的网络配置文件如 ifcfg-eth0 等,用于配置网络接口的参数,如 IP 地址、网关等。
/sys/module存放与内核模块相关的配置和参数。在性能调优时,可以通过该目录查看或修改加载的内核模块的参数,如 modprobe 命令加载的模块信息。
/sys/devices/system该目录包含多个与系统设备相关的子文件夹,比如 cpumemoryclocksource 等。这些子文件夹用于查看和调整系统的性能参数。常用于性能调优。
/proc/tmp用于存放与各个进程相关的虚拟文件系统信息。在性能调优中,常通过 /proc 下的子文件夹(如 /proc/cpuinfo/proc/meminfo 等)来获取关于系统硬件和进程的详细信息。
/tmp存放临时文件的目录,系统和用户的临时数据文件通常存放在这里。该目录中的文件可能会在系统重启时被清理。

查看文件夹大小 du

  • du 是 Linux 系统中的一个命令,用于估计文件和目录的磁盘使用情况,并递归统计子目录的空间占用情况。
  • du 是 "disk usage" 的缩写。通过 du 命令,用户可以查看文件或目录占用了多少磁盘空间,这对于磁盘空间管理和清理非常有用。
bash
du [选项] [文件/目录]

TIP

  • du 命令默认会递归地计算目录及其子目录的大小,因此对于大型目录结构,可能需要一些时间来完成计算。
  • 使用 -h 选项可以更直观地查看文件和目录的大小,而不需要手动计算字节数。
  • du 命令的输出可以帮助用户识别哪些文件或目录占用了大量的磁盘空间,从而进行清理或优化。

常用选项

选项描述
-h, --human-readable以人类可读的格式显示大小(例如,KB、MB、GB)。
-s, --summarize仅显示指定目录的总大小,而不显示其子目录的详细信息。
-a, --all显示所有文件的大小,而不仅仅是目录。
-c, --total显示所有指定文件或目录的总大小。
-b, --bytes以字节为单位显示大小。
-k, --kilobytes以 KB 为单位显示大小。
-m, --megabytes以 MB 为单位显示大小。
-x, --one-file-system忽略不同文件系统的目录。
--max-depth=N仅显示指定深度的目录大小。

常用选项

  • -hhuman-readable):以人类可读的格式(如 KB、MB、GB)显示大小。

    bash
      ~ du -h
    4.0K    ./dir1
    12K     ./dir2
    36K     .
  • -ssummarize):只显示指定目录或文件的总使用量,而不是递归显示每个子目录的使用量。

    bash
      ~ du -sh /home
    3.5G    /home
  • -aall):统计所有文件和目录的磁盘使用量,而不仅仅是目录。

    bash
      ~ du -ah
    4.0K    ./dir1
    12K     ./dir2/file1.txt
    36K     ./dir3
  • -ctotal):在结果最后显示总计值。

    bash
      ~ du -ch /var/log
    12K     /var/log/apache2
    4.0K    /var/log/nginx
    16K     total
  • --max-depth=N:限制显示的目录层级深度,N 表示要显示的最大层级。例如,--max-depth=1 只显示当前目录的直接子目录。

    bash
      ~ du -h --max-depth=1 /home
    1.5G    /home/user1
    2.0G    /home/user2
    3.5G    /home
  • -xone filesystem):仅统计与起始目录位于同一文件系统中的文件和目录,忽略其他挂载点。

    bash
      ~ du -x /mnt
  • -Ldereference):统计符号链接指向的文件大小,而不是符号链接本身。

    bash
      ~ du -L /path/to/symlink

常见应用场景

  1. 查看当前目录及其子目录的磁盘使用情况

    bash
    du -h # 显示当前目录及其所有子目录的大小,并以人类可读的格式显示
  2. 统计某个目录的总大小

    bash
    du -sh # 显示当前目录的总大小,并以人类可读的格式显示
    du -sh /home # 显示 /home 目录的总大小,并以人类可读的格式显示
  3. 查看某个目录中文件的大小以及总计

    bash
    du -ah # 显示当前目录及其所有子目录中每个文件和目录的大小
    du -ahc /var/log # 显示 /var/log 目录及其所有子目录中每个文件和目录的大小,并在最后一行显示总和
  4. 限制显示深度
    如果要快速查看目录的总大小而不关心其中子目录的详细内容:

    bash
    du -h --max-depth=2 # 显示当前目录及其前两层子目录的大小
    du -h --max-depth=1 /home # 显示 /home 目录及其前一层子目录的大小
  5. 查看当前目录及其子目录的详细大小

    bash
    du -h # 显示当前目录及其所有子目录的大小,并以人类可读的格式显示
  6. 查看当前目录的总大小并显示总和

    bash
    du -csh

dudf 的区别

  • du:统计的是文件和目录实际占用的磁盘空间,可以用于分析某个文件或目录的空间使用情况。适合查找哪个目录或文件占用了较多空间。
  • dfdisk free):显示文件系统的整体磁盘使用情况,展示磁盘的总容量、已用空间、可用空间等。适合查看整个磁盘的使用状况。