人生理想,技术交流加Q:411239339

Day 02 Linux文件系统结构详解

浏览:10次阅读
没有评论

共计 2900 个字符,预计需要花费 8 分钟才能阅读完成。

用 Linux 的人,迟早会在终端里敲下 ls /,然后看到一堆目录名——binetchomeusrvar……第一反应大概是:这些都是什么东西?为什么不像 Windows 那样分个 C 盘 D 盘了事?

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

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

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

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

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

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

FHS:大家商量好的规矩

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

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

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

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

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

根目录下的核心成员

打开终端,执行 ls /,你大概会看到这些:

bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

一个一个说。

/bin/sbin:基础命令

/bin 放的是所有用户都能用的基础命令,比如 lscpmvcat。这些命令在系统启动早期(其他分区还没挂载时)就得能用。

/sbin 放的是系统管理命令,比如 fdiskiptablesreboot。普通用户一般没权限执行。

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

/etc:系统配置大本营

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

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

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

/home:用户的地盘

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

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

/root:超级用户的家

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

/usr:软件主阵地

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

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

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

/var:变化的数据

var 是 variable 的缩写,存放运行时会持续变化的数据:

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

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

/dev:设备文件

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

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

/proc/sys:虚拟文件系统

这两个目录里的内容不存在于硬盘上——它们是内核在内存中动态生成的。

/proc 暴露进程和内核信息。比如 /proc/1/ 是 PID 为 1 的进程的所有信息,/proc/meminfo 是内存使用状况。

/sys 暴露设备和驱动信息,结构比 /proc 更规整,是较新的接口。

这两个目录是系统监控和调优的利器。topfreelscpu 这些命令背后,读的都是这里的文件。

/tmp:临时文件

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

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

/boot:启动文件

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

/opt/srv/media/mnt

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

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

怎么把这些知识用起来

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

找配置文件 ——直接去 /etc 翻,不用满系统 find

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

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

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

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

正文完
创作不易,扫码加点动力
post-qrcode
 0
果较瘦
版权声明:本站原创文章,由 果较瘦 于2026-03-22发表,共计2900字。
转载说明:除特殊说明外本站文章皆由果较瘦原创发布,转载请注明出处。