一、Linux 目录树是什么?

Linux 系统的所有文件和目录都从根目录 / 开始,形成一个倒挂的树状结构。与 Windows 的“盘符”(C:、D:)不同,Linux 里一切皆文件,硬件设备、进程信息、内核参数都以文件形式挂载在某个目录下。

对我而言,理解目录架构的意义在于:拿到一台新服务器,不用问别人也能快速找到配置文件、日志文件、程序安装位置。另外,明白各目录的用途后,备份和清理磁盘时也能心中有数——知道哪些目录不能乱动,哪些目录可以放心删缓存。

核心原则:Linux 目录结构遵循 FHS(Filesystem Hierarchy Standard) 标准,大部分发行版(Ubuntu、CentOS、Debian)都基本一致。

二、根目录 / 与一级子目录概览

根目录 / 下挂载着系统运行所需的所有子目录。常用的有:

/     # 根目录
├── etc      # 系统配置
├── usr      # 用户程序与共享资源
├── bin      # 基础命令(实际链接到 /usr/bin)
├── sbin     # 系统管理命令(实际链接到 /usr/sbin)
├── home     # 普通用户家目录
├── root     # 管理员家目录
├── var      # 变化数据(日志、缓存)
├── tmp      # 临时文件
├── opt      # 第三方软件
├── dev      # 设备文件
├── proc     # 进程与内核信息(虚拟文件系统)
├── sys      # 内核与硬件信息(虚拟文件系统)
├── mnt      # 手动挂载点
├── media    # 自动挂载点(光盘、U盘)
└── boot     # 引导文件

查看目录结构可以使用 ls -l /tree /(需安装 tree 包)。

注意:现代 Linux 发行版中,/bin/sbin/lib 通常是指向 /usr/bin/usr/sbin/usr/lib 的符号链接。这是为了简化系统布局,但核心概念不变。

三、各目录详解

1. /etc — 配置中心

/etc 存放系统和服务的配置文件。绝大多数软件的全局配置都在这里,修改后通常需要重启服务或重新加载。

重要子文件/子目录

路径说明
/etc/skel/新建普通用户时,复制该目录内容到用户家目录作为初始配置(如 .bashrc
/etc/profile系统级 shell 启动脚本,登录时执行,设置环境变量
/etc/bashrc系统级 bash 配置(部分发行版叫 /etc/bash.bashrc
/etc/profile.d/存放独立脚本,登录 shell 会自动执行该目录下的 .sh 文件
/etc/ssh/SSH 服务配置文件目录(sshd_configssh_config
/etc/passwd用户数据库,每行一个用户,不含密码
/etc/shadow用户密码哈希(只有 root 可读)
/etc/group组数据库
/etc/gshadow组密码和组安全信息
/etc/fstab文件系统挂载表,定义开机自动挂载的分区
/etc/hostname主机名配置
/etc/hosts静态主机名解析(类似 DNS 的本地记录)
/etc/network//etc/sysconfig/network-scripts/网络接口配置
/etc/apt/(Debian/Ubuntu)或 /etc/yum.repos.d/(CentOS)软件源配置

注意事项:千万不要随意修改 /etc/passwd/etc/shadow 的权限,否则可能导致无法登录。备份配置文件是个好习惯:cp /etc/xxx /etc/xxx.bak

2. /home — 普通用户的家

每个普通用户在 /home 下拥有一个同名目录,例如 /home/alice。用户自己的文档、代码、下载、桌面、配置文件(以 . 开头的隐藏文件)都在这里。

/home/
├── alice/
│   ├── .bashrc
│   ├── .ssh/
│   └── Documents/
└── bob/
    └── ...

个人习惯:备份用户数据时,只需要备份 /home 目录(以及 /etc 里的系统配置)。重装系统后,把备份解压回去就能恢复大部分环境。

3. /root — 管理员的家

root 用户的家目录不在 /home/root,而是直接在根下 /root。这是出于安全考虑:普通用户默认无法访问 /root

sudo ls -la /root

4. /usr — 用户系统资源

/usr只读的共享数据,存放大部分用户命令、库文件、文档。它是系统的主要程序存储区。

路径说明
/usr/bin普通用户可用的命令程序(如 lsgrepvim
/usr/sbin系统管理命令(如 fdisksystemctl),普通用户可能无法执行
/usr/local本地管理员手动编译或安装的软件,默认路径优先级高,全局可用
/usr/lib库文件(类似 Windows 的 DLL)
/usr/share架构无关的共享数据:man 手册、字体、图标、时区信息等

个人习惯:自己编译安装的软件一律放到 /usr/local 下,方便管理和卸载。通过 --prefix=/usr/local 指定安装目录。

踩坑记录:不要手动删除 /usr/bin/usr/lib 里的系统文件,会导致系统崩溃。卸载软件应该用包管理器(apt removeyum remove)。

5. /var — 变化的数据

/var 存放系统运行过程中不断变化的数据,比如日志、缓存、队列、数据库文件、打印队列等。

路径说明
/var/log系统和服务日志文件(如 syslogauth.lognginx/
/var/cache应用程序缓存(如 apt 的软件包缓存)
/var/tmp/tmp 更持久的临时文件,系统重启后不会自动清理
/var/lib软件运行时的状态数据(如数据库文件、docker 镜像)
/var/mail用户邮件队列
/var/run系统启动以来的进程 PID 文件(有些发行版放在 /run

踩坑记录/var/log 如果长时间不清理,可能被日志撑爆导致系统异常。建议配置 logrotate 自动轮转。我每个月跑一次 du -sh /var/log/* 检查大文件。

6. /tmp — 临时垃圾区

所有用户都可读写的临时空间,用于存放程序运行产生的临时文件。重启后通常会被清理(有些发行版设置 tmpfs,重启即失)。

# 查看 /tmp 挂载类型
df -h /tmp

安全提示:不要在 /tmp 存放敏感数据,因为任何用户都能访问。创建临时文件建议使用 mktemp 命令,避免文件名冲突。

7. /opt — 第三方大型软件

/opt 用于安装可选的、大型的、独立的第三方软件包,每个软件通常放在自己的子目录下(如 /opt/google/chrome)。

/usr/local 的区别:

  • /usr/local 通常放手动编译的、符合系统层级结构的小工具。
  • /opt 放二进制分发的大软件(如 Oracle JDK、TeamViewer),它们自带目录结构,不分散到 /usr/bin 等目录。

个人习惯:从官网下载的 .tar.gz 解压后,如果需要全局使用,我放在 /opt/软件名,然后软链 /opt/软件名/bin/usr/local/bin

8. /dev — 设备入口

/dev 包含设备文件,Linux 通过它们访问硬件。常见的有:

设备文件说明
/dev/sda第一块 SCSI/SATA 硬盘
/dev/sda1硬盘的第一个分区
/dev/nvme0n1NVMe 固态硬盘
/dev/tty当前终端
/dev/null黑洞,写入即丢弃
/dev/random随机数生成器

踩坑记录:直接读写 /dev/sda 可以绕过文件系统操作磁盘,但非常危险。不小心执行 dd if=/dev/zero of=/dev/sda 会清空整个硬盘。

9. /proc/sys — 内核与硬件虚拟窗口

这两个目录是虚拟文件系统,内容存在于内存中,反映内核和硬件状态。

  • /proc:进程信息和内核参数。例如 /proc/cpuinfo 查看 CPU 信息,/proc/meminfo 查看内存,/proc/<pid>/ 查看某个进程详情。
  • /sys:更结构化的内核对象,用于管理设备和驱动。例如 /sys/class/net/ 查看网卡。
cat /proc/version      # 查看内核版本
cat /proc/uptime       # 系统运行时间
ls /proc/$$/           # 查看当前 shell 进程的信息

个人习惯:当需要查 CPU 型号、内存大小、磁盘分区时,我第一反应是去 /proc/sys 找,而不是装额外的工具。

10. /mnt/media — 挂载点

  • /mnt:传统的手动临时挂载点,比如挂载网络共享、ISO 文件、测试分区。
  • /media:自动挂载点,用于插入 USB 硬盘、光盘时系统自动挂载到此目录下(由桌面环境或 udisks 管理)。
# 手动挂载 ISO 到 /mnt
sudo mount -o loop ubuntu.iso /mnt

11. /boot — 引导区

存放 Linux 内核、initrd(初始 RAM 磁盘)和引导加载程序(GRUB)的文件。

ls /boot/
# vmlinuz-5.4.0-xx-generic   # 内核
# initrd.img-5.4.0-xx        # 初始内存盘
# grub/                       # GRUB 配置目录

四、常用命令速查

操作命令
查看目录树ls -R /tree / -L 2
查看磁盘使用情况df -h
查看目录大小du -sh /var/log
查找配置文件find /etc -name "*.conf"
查看某个命令的位置which lswhereis vim
查看文件系统类型lsblk -f

五、个人最佳实践总结

  1. 永远知道你在哪个目录:执行 pwd 确认路径,特别是 rm 之前。
  2. 备份时优先考虑/etc(配置)、/home(用户数据)、/var/lib(服务状态,如数据库)。
  3. 清理空间时安全删除/var/log/*.log(旧日志)、/tmp/*/var/cache/apt/archives/*.deb(已安装的包缓存)。
  4. 不要动的目录/dev/proc/sys/boot(除非你知道在做什么)。
  5. 新手友好提示:修改系统配置前先备份,修改后测试,万一失败还能恢复。

六、速查表(Linux 目录架构)

目录用途是否可清理
/etc配置文件❌ 不建议
/home用户数据⚠️ 按用户清理
/rootroot 家目录⚠️ 谨慎
/usr系统程序❌ 不要动
/var/log日志文件✅ 可清理旧日志
/var/cache缓存✅ 可清理
/var/tmp持久临时文件✅ 可清理
/tmp临时文件✅ 系统自动清理
/opt第三方软件⚠️ 卸载软件时可删
/boot内核与引导⚠️ 只删旧内核
/dev设备文件❌ 不要动
/proc/sys内核信息❌ 虚拟文件系统

作者

884705373@qq.com

相关文章

QLoRA微调原理详解:与LoRA的性能与内存对比

引言:为什么大模型微调需要QLoRA? 在深...

读出全部

关于Norm的解析

可以说,如果没有残差连接和 Layer No...

读出全部

从 SGD 到 AdamW 的优化器

写在前面 在上一篇文章中,我们讨论了如何用数...

读出全部