冒险岛079

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1|回复: 0

Day 02 Linux文件系统结构详解

[复制链接]

606

主题

13

回帖

1940

积分

管理员

积分
1940
发表于 3 小时前 | 显示全部楼层 |阅读模式
用 Linux 的人,迟早会在终端里敲下
  1. ls /
复制代码
,然后看到一堆目录名——
  1. bin
复制代码
  1. etc
复制代码
  1. home
复制代码
  1. usr
复制代码
  1. var
复制代码
……第一反应大概是:这些都是什么东西?为什么不像 Windows 那样分个 C 盘 D 盘了事?

这篇文章就来把 Linux 的目录树从根到叶捋一遍。读完你会知道每个核心目录装的是什么、为什么这么设计,以及那句经典的"一切皆文件"到底意味着什么。

先说设计哲学:一切皆文件

在 Linux 的世界观里,硬盘是文件,键盘是文件,网络接口是文件,甚至正在跑的进程信息也是文件。

这不是比喻,是字面意思。你可以用
  1. cat
复制代码
读取
  1. /proc/cpuinfo
复制代码
获取 CPU 信息,可以往
  1. /dev/null
复制代码
里写数据把它丢弃,可以通过
  1. /dev/sda
复制代码
直接操作整块硬盘。

这套设计带来一个巨大的好处:你只需要掌握一套读写文件的接口(open/read/write/close),就能跟系统里几乎所有资源打交道。 不需要为硬件、进程、网络分别学一套 API。

理解了这一点,再看目录结构就不会觉得奇怪了——那些目录不只是"放文件的文件夹",它们是整个操作系统的骨架。

FHS:大家商量好的规矩

早期各家 Linux 发行版各搞各的目录布局,软件开发者苦不堪言——你的配置文件到底放
  1. /etc
复制代码
还是
  1. /usr/etc
复制代码


于是社区搞出了 FHS(Filesystem Hierarchy Standard,文件系统层次标准),本质上是一份约定:什么类型的文件该放在哪里。目前主流发行版(Debian、Ubuntu、Fedora、Arch 等)基本都遵守这套标准,虽然细节上各有微调。

FHS 把目录按两个维度划分:

| | 静态数据(不常变) | 动态数据(经常变) |
|---|---|---|
| 可共享(多台主机共用) |
  1. /usr
复制代码
  1. /opt
复制代码
|
  1. /var/mail
复制代码
  1. /var/spool
复制代码
|
| 不可共享(仅本机使用) |
  1. /etc
复制代码
  1. /boot
复制代码
|
  1. /var/run
复制代码
  1. /var/lock
复制代码
|

这个分类方式不用死记,但它能帮你理解"为什么这个文件放在这里而不是那里"。

根目录下的核心成员

打开终端,执行
  1. ls /
复制代码
,你大概会看到这些:
  1. bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
复制代码

一个一个说。

  1. /bin
复制代码
  1. /sbin
复制代码
:基础命令

  1. /bin
复制代码
放的是所有用户都能用的基础命令,比如
  1. ls
复制代码
  1. cp
复制代码
  1. mv
复制代码
  1. cat
复制代码
。这些命令在系统启动早期(其他分区还没挂载时)就得能用。
  1. /sbin
复制代码
放的是系统管理命令,比如
  1. fdisk
复制代码
  1. iptables
复制代码
  1. reboot
复制代码
。普通用户一般没权限执行。

坦白说,现在很多发行版已经把
  1. /bin
复制代码
做成了指向
  1. /usr/bin
复制代码
的软链接,
  1. /sbin
复制代码
同理。但理解它们的原始设计意图还是有价值的。

  1. /etc
复制代码
:系统配置大本营


这可能是你最常打交道的目录之一。 几乎所有系统级的配置文件都住在这里:

    1. /etc/fstab
    复制代码
    ——磁盘挂载配置
    1. /etc/hosts
    复制代码
    ——本地域名解析
    1. /etc/passwd
    复制代码
    1. /etc/shadow
    复制代码
    ——用户账户信息
    1. /etc/nginx/
    复制代码
    1. /etc/ssh/
    复制代码
    ——各种服务的配置目录

    有个好习惯:改配置之前先备份原文件。一句
    1. cp nginx.conf nginx.conf.bak
    复制代码
    能在关键时刻救命。

    1. /home
    复制代码
    :用户的地盘


    每个普通用户在
    1. /home
    复制代码
    下都有一个以用户名命名的目录。你的文档、下载、桌面配置、
    1. .bashrc
    复制代码
    都在这里。

    服务器上做权限管理时,
    1. /home
    复制代码
    的重要性更明显——不同用户的数据物理隔离,互不干扰。

    1. /root
    复制代码
    :超级用户的家


    root 用户的家目录不在
    1. /home/root
    复制代码
    ,而是单独放在
    1. /root
    复制代码
    。原因很实际:
    1. /home
    复制代码
    可能挂载在单独的分区上,万一那个分区挂了,root 用户照样需要能登录系统修问题。

    1. /usr
    复制代码
    :软件主阵地


    这是整个系统里体积最大的目录之一。名字来源是 "Unix System Resources"(不是 "user",很多人搞混)。

    1. /usr/bin
    复制代码
    ——大部分用户命令
    1. /usr/lib
    复制代码
    ——库文件
    1. /usr/share
    复制代码
    ——架构无关的共享数据(文档、图标、字体等)
    1. /usr/local
    复制代码
    ——你手动编译安装的软件的默认去处

    怎么理解
    1. /usr
    复制代码
    和根目录下
    1. /bin
    复制代码
    的关系?简单说:根目录下的是"急救包"(系统启动必需),
    1. /usr
    复制代码
    下的是"完整工具箱"(系统完全启动后才需要)。

    1. /var
    复制代码
    :变化的数据

    1. var
    复制代码
    是 variable 的缩写,存放运行时会持续变化的数据:

    1. /var/log
    复制代码
    ——系统日志,排查问题的第一站
    1. /var/cache
    复制代码
    ——应用缓存
    1. /var/lib
    复制代码
    ——程序运行时的状态数据(比如数据库文件)
    1. /var/tmp
    复制代码
    ——需要跨重启保留的临时文件

    服务器运维中,
    1. /var/log
    复制代码
    吃满磁盘是常见事故。设置日志轮转(logrotate)是基本功。

    1. /dev
    复制代码
    :设备文件


    这里体现了"一切皆文件"的设计。每个硬件设备在
    1. /dev
    复制代码
    下都有对应的文件:

    1. /dev/sda
    复制代码
    ——第一块硬盘
    1. /dev/tty
    复制代码
    ——终端设备
    1. /dev/null
    复制代码
    ——黑洞,写进去的数据全部消失
    1. /dev/zero
    复制代码
    ——无限产出零字节,常用于创建空文件
    1. # 创建一个 1GB 的空文件
    2. dd if=/dev/zero of=testfile bs=1M count=1024
    复制代码

    1. /proc
    复制代码
    1. /sys
    复制代码
    :虚拟文件系统


    这两个目录里的内容不存在于硬盘上——它们是内核在内存中动态生成的。
    1. /proc
    复制代码
    暴露进程和内核信息。比如
    1. /proc/1/
    复制代码
    是 PID 为 1 的进程的所有信息,
    1. /proc/meminfo
    复制代码
    是内存使用状况。
    1. /sys
    复制代码
    暴露设备和驱动信息,结构比
    1. /proc
    复制代码
    更规整,是较新的接口。

    这两个目录是系统监控和调优的利器。
    1. top
    复制代码
    1. free
    复制代码
    1. lscpu
    复制代码
    这些命令背后,读的都是这里的文件。

    1. /tmp
    复制代码
    :临时文件


    谁都能往里写,重启后通常会被清空。程序运行时的临时数据扔这里。

    需要注意的是,正因为权限开放,
    1. /tmp
    复制代码
    也是安全审计的重点区域。

    1. /boot
    复制代码
    :启动文件


    内核文件(vmlinuz)、初始化内存盘(initramfs)和 GRUB 引导器的配置都在这里。普通使用中几乎不需要动它,但升级内核时会自动更新这个目录。

    1. /opt
    复制代码
    1. /srv
    复制代码
    1. /media
    复制代码
    1. /mnt
    复制代码


    这几个用得相对少,简单提一下:

    1. /opt
    复制代码
    ——第三方大型软件的安装位置(比如 Google Chrome、JetBrains IDE)
    1. /srv
    复制代码
    ——服务相关数据(Web 服务器的站点文件等),实际中很多人用
    1. /var/www
    复制代码
    代替
    1. /media
    复制代码
    ——自动挂载的移动设备(U 盘、光盘)
    1. /mnt
    复制代码
    ——手动临时挂载点

    怎么把这些知识用起来

    知道目录结构不是为了考试,而是让你在实际操作中少走弯路:

    找配置文件——直接去
    1. /etc
    复制代码
    翻,不用满系统
    1. find
    复制代码


    排查问题——先看
    1. /var/log
    复制代码
    下的日志,大部分故障线索都在那儿。

    清理磁盘空间——
    1. du -sh /var/log/*
    复制代码
    看看日志占了多少,
    1. /tmp
    复制代码
    1. /var/cache
    复制代码
    也是常见的空间杀手。

    安装软件——包管理器装的在
    1. /usr
    复制代码
    ,手动编译的约定放
    1. /usr/local
    复制代码
    ,第三方商业软件放
    1. /opt
    复制代码
    。别往
    1. /bin
    复制代码
    里随便塞东西。

    说到底,Linux 的目录结构是几十年实践经验的沉淀。它不是某个人拍脑袋想出来的,而是无数运维事故和开发者争论后达成的共识。刚开始觉得复杂很正常,用着用着你会发现——它确实比"什么都往 C 盘扔"合理得多。
  • 您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    果子博客
    扫码关注微信公众号

    Archiver|手机版|小黑屋|风叶林

    GMT+8, 2026-3-22 04:04 , Processed in 0.131490 second(s), 19 queries .

    Powered by 风叶林

    © 2001-2026 Discuz! Team.

    快速回复 返回顶部 返回列表