Linux 根目录结构详解
1. 什么是 Linux 根目录
Linux 文件系统从一个唯一的顶层目录开始:
text
/
这个目录称为:
text
根目录
root directory
Linux 不像 Windows 那样主要使用:
text
C:\
D:\
E:\
在 Linux 中,所有磁盘、分区、移动硬盘、网络文件系统和设备,最终都会挂载到 / 下面的某个目录。
例如:
text
/
├── home
├── usr
├── etc
├── var
├── opt
└── mnt
需要注意:
/是整个文件系统的根目录。/root是管理员root用户的个人主目录。/和/root不是同一个目录。
2. Linux 根目录结构总览
常见根目录如下:
text
/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin
├── snap
├── srv
├── sys
├── tmp
├── usr
└── var
不同 Linux 发行版可能略有差异,并不是每个系统都一定包含所有目录。
3. 各目录详细说明
/bin
名称来源
text
bin = binary
这里的 binary 指可执行程序,而不只是狭义上的"二进制数据"。
主要用途
存放系统最基础、最常用的普通命令。
传统上,即使 /usr 尚未挂载,系统也应能够使用 /bin 中的基础命令。
常见命令
text
bash
cat
chmod
cp
date
echo
grep
ls
mkdir
mv
pwd
rm
sed
sh
现代 Linux 中的变化
许多现代系统已经将 /bin 合并到 /usr/bin。
检查方法:
bash
ls -ld /bin
readlink -f /bin
可能看到:
text
/bin -> usr/bin
这表示 /bin 实际上是 /usr/bin 的符号链接。
是否可以修改
不建议手动删除、移动或覆盖其中的文件,否则可能导致系统命令失效。
/sbin
名称来源
text
sbin = system binary
也可理解为:
text
system administration binaries
主要用途
存放系统管理、磁盘维护、网络配置和启动修复相关命令。
常见命令
text
fdisk
fsck
halt
ifconfig
ip
mkfs
reboot
shutdown
swapon
useradd
具体命令可能因发行版不同而变化。
与 /bin 的区别
text
/bin 普通用户经常使用的基础命令
/sbin 系统管理员使用的系统管理命令
普通用户可以看到或运行部分 /sbin 命令,但涉及系统修改时通常需要管理员权限。
例如:
bash
sudo fdisk -l
现代 Linux 中的变化
很多系统中:
text
/sbin -> /usr/sbin
可以使用:
bash
readlink -f /sbin
查看实际位置。
/boot
名称来源
text
boot = 系统启动
主要用途
存放 Linux 启动所需文件。
常见内容
text
vmlinuz-...
initrd.img-...
initramfs-...
grub/
System.map-...
config-...
其中:
vmlinuz:Linux 内核文件。initrd或initramfs:启动早期使用的临时根文件系统。grub:GRUB 启动加载器的配置和相关文件。
是否可以修改
不要随意删除 /boot 中的文件。
错误删除内核或 GRUB 文件可能导致系统无法启动。
/dev
名称来源
text
dev = device
主要用途
存放设备文件。
Linux 将许多硬件和虚拟设备表示为文件。
常见内容
text
/dev/sda
/dev/sda1
/dev/nvme0n1
/dev/tty
/dev/null
/dev/zero
/dev/random
/dev/urandom
常见设备说明
text
/dev/sda 第一块 SATA/SCSI 磁盘
/dev/sda1 第一块磁盘的第一个分区
/dev/nvme0n1 第一块 NVMe 磁盘
/dev/tty 当前终端设备
/dev/null 丢弃所有写入内容
/dev/zero 持续产生零字节
/dev/random 随机数据设备
例如:
bash
echo "test" > /dev/null
输出会被直接丢弃。
重要特点
/dev 中多数内容并不是普通磁盘文件,而是内核和设备管理系统创建的特殊设备节点。
是否可以修改
不要随意删除或向不熟悉的设备文件写数据,尤其是磁盘设备:
text
/dev/sda
/dev/nvme0n1
错误操作可能破坏磁盘数据。
/etc
名称来源
etc 的历史来源存在不同解释。
常见理解包括:
text
etcetera
即"其他杂项"。
现代 Linux 中更适合把它理解为:
text
系统级配置文件目录
主要用途
存放整个系统使用的配置文件。
常见内容
text
/etc/passwd
/etc/group
/etc/hosts
/etc/hostname
/etc/fstab
/etc/ssh/
/etc/systemd/
/etc/profile
/etc/bash.bashrc
/etc/apt/
重要文件说明
text
/etc/passwd 用户账户基本信息
/etc/group 用户组信息
/etc/hosts 主机名与 IP 的本地映射
/etc/hostname 系统主机名
/etc/fstab 开机自动挂载配置
/etc/ssh/ SSH 服务配置
/etc/profile 系统级登录 Shell 配置
/etc 与用户配置的区别
系统级配置通常在:
text
/etc
当前用户自己的配置通常在:
text
/home/用户名
例如:
text
/etc/bash.bashrc 所有用户的 Bash 配置
/home/liu/.bashrc 用户 liu 自己的 Bash 配置
是否可以修改
可以修改,但系统级配置通常需要管理员权限,并且修改前建议备份。
例如:
bash
sudo cp /etc/fstab /etc/fstab.bak
/home
名称来源
text
home = 用户的家目录
主要用途
存放普通用户的个人文件和用户级配置。
目录示例
text
/home/alice
/home/bob
/home/ud202482025
用户 ud202482025 的主目录通常是:
text
/home/ud202482025
也可简写为:
text
~
例如:
bash
cd ~
等价于:
bash
cd /home/ud202482025
常见内容
text
Documents/
Downloads/
Desktop/
projects/
.conda/
.cache/
.config/
.local/
.bashrc
.profile
.ssh/
以 . 开头的文件或目录通常是隐藏配置文件。
查看隐藏文件:
bash
ls -la ~
是否可以修改
这是普通用户最主要的工作区域,一般可以自由创建、修改和删除自己的文件。
/root
名称来源
text
root 用户的 home 目录
主要用途
存放超级管理员 root 用户的个人文件和配置。
注意区别
text
/ 整个文件系统的根目录
/root root 管理员用户的个人目录
普通用户通常没有权限进入:
bash
cd /root
为什么不放在 /home/root
即使 /home 位于单独分区且未挂载,管理员仍可能需要访问自己的主目录进行系统修复,所以传统上将 root 的主目录直接放在:
text
/root
/lib
名称来源
text
lib = library
主要用途
存放基础命令和系统启动所需的共享库。
常见内容
text
libc.so
ld-linux.so
内核模块
动态链接库
Linux 程序经常依赖共享库。
例如:
bash
ldd /bin/ls
可以查看 ls 命令依赖的共享库。
现代 Linux 中的变化
许多系统中:
text
/lib -> /usr/lib
是否可以修改
不要手动删除或覆盖其中的库文件,否则可能造成大量程序无法启动。
/lib64
名称来源
text
64-bit library
主要用途
在部分 64 位 Linux 系统中,存放 64 位基础共享库和动态链接器。
例如:
text
/lib64/ld-linux-x86-64.so.2
不同发行版的组织方式不同,有些系统中 /lib64 也可能是符号链接。
/usr
名称来源
历史上通常与:
text
user
有关。
但现代 Linux 中,不应把 /usr 理解为"某个用户自己的目录"。
普通用户的个人文件应存放在:
text
/home/用户名
现代 /usr 更适合理解为:
text
系统的大部分用户空间程序、库、文档和共享资源
主要用途
存放操作系统的大多数程序和只读资源。
常见子目录
text
/usr/bin
/usr/sbin
/usr/lib
/usr/lib64
/usr/include
/usr/share
/usr/local
/usr/src
/usr/bin
存放大多数普通用户命令。
例如:
text
python3
git
gcc
vim
awk
find
ssh
查看某个命令的位置:
bash
which git
type -a git
/usr/sbin
存放系统管理类命令。
例如:
text
sshd
cron
useradd
apache2
实际内容因发行版而异。
/usr/lib
存放程序使用的库、模块和内部支持文件。
例如:
text
/usr/lib/python3/
/usr/lib/systemd/
/usr/lib/x86_64-linux-gnu/
/usr/include
存放 C/C++ 等开发使用的头文件。
例如:
text
stdio.h
stdlib.h
pthread.h
编译软件时经常使用。
/usr/share
存放与 CPU 架构无关的共享数据。
常见内容:
text
/usr/share/doc
/usr/share/man
/usr/share/icons
/usr/share/fonts
/usr/share/locale
包括:
- 帮助文档
- man 手册
- 图标
- 字体
- 多语言翻译文件
/usr/src
存放源代码或内核头文件。
例如:
text
/usr/src/linux-headers-...
/usr/local
名称来源
text
local = 当前这台机器本地安装的内容
主要用途
存放系统管理员手动安装的软件。
它通常不由系统的主要包管理器直接管理。
常见目录
text
/usr/local/bin
/usr/local/sbin
/usr/local/lib
/usr/local/include
/usr/local/share
与 /usr 的区别
text
/usr 发行版或系统包管理器安装的软件
/usr/local 当前机器管理员手动安装的软件
例如,Ubuntu 使用 apt 安装的程序通常进入:
text
/usr/bin
/usr/lib
而源码编译后执行:
bash
sudo make install
程序通常进入:
text
/usr/local/bin
/usr/local/lib
PATH 优先级
通常:
text
/usr/local/bin
会排在:
text
/usr/bin
前面。
因此本机手动安装的同名软件可以优先于系统版本。
/opt
名称来源
text
opt = optional
主要用途
存放可选的、附加的、相对独立的第三方软件。
常见例子
text
/opt/conda
/opt/cuda
/opt/matlab
/opt/google
/opt/microsoft
某个大型软件常常完整放在一个独立目录中:
text
/opt/软件名
例如:
text
/opt/conda/bin
/opt/conda/lib
/opt/conda/envs
与 /usr/local 的区别
两者都可用于额外软件,但常见习惯是:
text
/usr/local 按 Linux 标准目录拆分安装的软件
/opt 每个软件作为一个完整独立目录安装
例如:
text
/usr/local/bin/tool
/usr/local/lib/tool/
与:
text
/opt/tool/bin/
/opt/tool/lib/
你的服务器示例
text
/opt/conda/bin
通常表示管理员安装的共享 Conda。
这和个人目录中的:
text
/home/ud202482025/anaconda3
不是同一个安装。
/var
名称来源
text
var = variable
主要用途
存放运行过程中经常变化的数据。
常见子目录
text
/var/log
/var/cache
/var/lib
/var/spool
/var/tmp
/var/run
/var/www
/var/log
存放系统和服务日志。
例如:
text
/var/log/syslog
/var/log/auth.log
/var/log/kern.log
/var/log/nginx/
查看日志常用:
bash
less /var/log/syslog
journalctl
/var/cache
存放应用缓存。
缓存通常可以重新生成,但不要在不了解用途时随意删除。
例如:
text
/var/cache/apt
/var/lib
存放程序运行状态和持久数据。
例如:
text
/var/lib/docker
/var/lib/mysql
/var/lib/postgresql
/var/lib/dpkg
它可能包含数据库、包管理器状态、容器数据等重要内容。
/var/spool
存放等待处理的队列数据。
例如:
text
邮件队列
打印任务
定时任务
/var/tmp
存放临时文件。
与 /tmp 相比,/var/tmp 中的文件通常预期保留更久,重启后不一定被删除。
/var/www
常用于存放 Web 服务器网站文件。
例如:
text
/var/www/html
不过网站目录也可以由管理员配置到其他位置。
/tmp
名称来源
text
tmp = temporary
主要用途
存放临时文件。
系统和应用程序都可能在这里创建短期文件。
重要特点
- 通常所有用户都可以写入。
- 一般设置了特殊的 sticky bit 权限。
- 系统重启后内容可能被清理。
- 不适合存放重要文件。
查看权限:
bash
ls -ld /tmp
常见结果:
text
drwxrwxrwt
最后的 t 表示 sticky bit。
它意味着用户虽然都能在 /tmp 创建文件,但通常只能删除自己的文件。
/var/tmp 与 /tmp 的区别
text
/tmp 短期临时文件,可能在重启时清理
/var/tmp 较长期临时文件,通常重启后仍保留
实际清理规则由系统配置决定。
/proc
名称来源
text
proc = process
主要用途
这是内核提供的虚拟文件系统,用于展示进程和系统运行信息。
它通常不是真正存储在磁盘上的普通文件。
常见内容
text
/proc/cpuinfo
/proc/meminfo
/proc/version
/proc/uptime
/proc/mounts
/proc/1234/
数字目录表示进程 PID。
例如:
text
/proc/1234
表示 PID 为 1234 的进程信息。
常用命令
查看 CPU:
bash
cat /proc/cpuinfo
查看内存:
bash
cat /proc/meminfo
查看当前 Shell 的进程信息:
bash
ls /proc/$$
其中 $$ 表示当前 Shell 的 PID。
是否可以修改
部分 /proc 文件可由管理员写入,用于临时修改内核参数,但不应在不了解含义时操作。
/sys
名称来源
text
sys = system
主要用途
这是另一个内核虚拟文件系统,主要展示:
- 设备
- 驱动
- 内核对象
- 总线
- 电源状态
- 硬件属性
常见内容
text
/sys/class
/sys/devices
/sys/block
/sys/bus
/sys/module
例如:
text
/sys/class/net
可以查看网络接口。
/sys 与 /proc 的区别
简化理解:
text
/proc 更偏向进程和传统内核运行信息
/sys 更偏向设备、驱动和结构化内核对象
二者都主要是虚拟文件系统。
/run
名称来源
text
run = 运行时数据
主要用途
存放系统本次启动期间的运行时状态信息。
常见内容
text
/run/user/
/run/lock/
/run/systemd/
/run/sshd.pid
可能包括:
- PID 文件
- Socket 文件
- 服务状态
- 登录会话信息
- 临时锁文件
重要特点
/run 通常位于内存文件系统中,系统重启后内容会消失。
/mnt
名称来源
text
mnt = mount
主要用途
传统上用于管理员临时挂载文件系统。
例如:
bash
sudo mount /dev/sdb1 /mnt
挂载后,该磁盘内容可以通过:
text
/mnt
访问。
也可以创建子目录:
text
/mnt/data
/mnt/backup
适用场景
- 临时挂载磁盘
- 挂载网络文件系统
- 系统维护
- 数据恢复
/media
名称来源
text
media = removable media
主要用途
通常用于自动挂载移动设备。
例如:
text
USB 移动硬盘
U 盘
光盘
SD 卡
常见挂载位置:
text
/media/用户名/设备名
例如:
text
/media/alice/USB_DISK
/mnt 与 /media 的区别
text
/mnt 管理员手动或临时挂载
/media 桌面系统自动挂载移动设备
这只是常见约定,不是绝对限制。
/srv
名称来源
text
srv = service
主要用途
存放系统对外提供服务的数据。
例如:
text
/srv/www
/srv/ftp
/srv/git
适用于:
- Web 服务
- FTP 服务
- Git 服务
- 文件共享服务
实际系统中,很多服务也会把数据放在 /var/lib 或 /var/www,因此 /srv 不一定被广泛使用。
/snap
名称来源
来自 Ubuntu 等系统使用的 Snap 软件包格式。
主要用途
存放 Snap 软件包挂载点或相关数据。
例如:
text
/snap/core/
/snap/code/
/snap/firefox/
Snap 软件通常以只读压缩镜像方式挂载。
用户自己的 Snap 数据可能位于:
text
~/snap
/lost+found
主要用途
常见于 ext2、ext3、ext4 等文件系统的根目录。
文件系统检查工具 fsck 在修复文件系统时,如果找到失去目录关联但仍存在的数据块,可能将恢复出的文件放入:
text
lost+found
注意
- 每个 ext 文件系统都可能有自己的
lost+found。 - 不要把它当作普通垃圾箱。
- 正常情况下它通常是空的。
- 进入时可能需要管理员权限。
4. 常见目录之间的关系
4.1 /bin、/usr/bin、/usr/local/bin、/opt/.../bin
可以这样理解:
text
/bin
基础命令,现代系统中常链接到 /usr/bin
/usr/bin
由操作系统或包管理器安装的大多数普通命令
/usr/local/bin
本机管理员手动安装的普通命令
/opt/软件名/bin
某个独立第三方软件自己的命令
例如同时存在:
text
/usr/bin/python3
/usr/local/bin/python3
/opt/conda/bin/python
/home/user/miniconda3/bin/python
实际输入 python 时使用哪一个,由 PATH 的顺序决定。
4.2 /sbin、/usr/sbin、/usr/local/sbin
text
/sbin
基础系统管理命令,现代系统中常链接到 /usr/sbin
/usr/sbin
系统包管理器安装的管理命令
/usr/local/sbin
本机管理员手动安装的管理命令
4.3 /lib、/usr/lib、/usr/local/lib
text
/lib
基础启动和基础命令所需库,现代系统中常链接到 /usr/lib
/usr/lib
系统软件使用的库和模块
/usr/local/lib
管理员手动安装软件使用的库
4.4 /home 与 /root
text
/home/用户名 普通用户的个人目录
/root root 管理员的个人目录
例如:
text
/home/ud202482025
/root
4.5 /tmp、/var/tmp、/run
text
/tmp
短期临时文件
/var/tmp
可能需要跨重启保留一段时间的临时文件
/run
仅当前启动周期有效的运行状态数据
4.6 /mnt 与 /media
text
/mnt
通常用于手动或临时挂载
/media
通常用于自动挂载 U 盘等移动介质
4.7 /opt 与 /usr/local
text
/opt
一个软件通常完整放在一个独立目录中
/usr/local
软件按 bin、lib、share 等标准目录拆分安装
示例:
text
/opt/tool/bin/tool
/opt/tool/lib/libtool.so
对比:
text
/usr/local/bin/tool
/usr/local/lib/libtool.so
5. PATH 与这些目录的关系
PATH 是 Shell 查找可执行命令的目录列表。
查看原始 PATH:
bash
echo "$PATH"
逐行显示:
bash
printf '%s\n' "${PATH//:/$'\n'}"
带编号显示:
bash
printf '%s\n' "${PATH//:/$'\n'}" | nl
例如:
text
1 /opt/conda/bin
2 /usr/local/bin
3 /usr/bin
4 /bin
输入:
bash
python
Shell 会依次检查:
text
/opt/conda/bin/python
/usr/local/bin/python
/usr/bin/python
/bin/python
找到第一个存在且可执行的文件后就停止。
查看命令实际来自哪里
bash
which python
更完整:
bash
type -a python
查看符号链接最终指向:
bash
readlink -f "$(which python)"
查看文件类型:
bash
file "$(which python)"
6. 哪些目录普通用户通常可以修改
通常可以自由修改
text
/home/你的用户名
/tmp 中属于你自己的文件
例如:
text
/home/ud202482025
通常需要管理员权限
text
/etc
/usr
/opt
/var
/root
/boot
普通用户没有写权限时会出现:
text
Permission denied
不要为了绕过权限随意使用 sudo chmod -R 777。
不应随意修改
以下目录尤其需要谨慎:
text
/boot
/dev
/proc
/sys
/lib
/lib64
/usr/lib
/etc
/var/lib
错误操作可能导致:
- 系统无法启动
- 服务无法运行
- 软件包损坏
- 数据库损坏
- 磁盘数据丢失
- 安全权限失效
7. 查看根目录的实用命令
查看根目录内容
bash
ls /
详细显示:
bash
ls -lah /
查看目录大小
bash
sudo du -sh /* 2>/dev/null
普通用户无法读取的目录会被忽略。
查看当前用户主目录:
bash
du -sh ~/*
包括隐藏目录:
bash
du -sh ~/.??* ~/* 2>/dev/null
查看文件系统挂载情况
bash
findmnt
或者:
bash
mount
查看磁盘空间
bash
df -h
查看文件系统类型:
bash
df -Th
查看某个目录属于哪个分区
bash
df -h /home
df -h /opt
df -h /tmp
判断目录是否是符号链接
bash
ls -ld /bin /sbin /lib
查看最终位置:
bash
readlink -f /bin
readlink -f /sbin
readlink -f /lib
查看目录权限和所有者
bash
ls -ld /opt
ls -ld /usr/local
ls -ld /home/ud202482025
示例输出:
text
drwxr-xr-x 10 root root 4096 Jul 5 10:00 /opt
其中:
text
root root
分别表示所有者和所属用户组。
8. 服务器环境中的常见情况
在学校、实验室或计算集群服务器上,经常会看到:
text
/opt/conda
/opt/R
/opt/cuda
/usr/local/cuda
/home/用户名
/data
/work
/scratch
其中:
text
/opt
通常存放管理员安装的软件。
text
/home/用户名
通常存放用户代码、配置和小型文件。
text
/data
/work
/scratch
通常是服务器管理员额外创建的数据盘或高速临时盘,它们不一定属于 Linux 标准目录。
需要根据服务器说明判断用途。
常见约定:
text
/home 容量较小,适合代码和配置
/data 长期数据
/work 项目工作目录
/scratch 高速临时计算数据,可能定期清理
这些约定不是所有服务器都相同。
9. 一张表快速总结
| 目录 | 名称来源 | 主要用途 | 常见内容 |
|---|---|---|---|
/ |
root | 整个文件系统起点 | 所有目录 |
/bin |
binary | 基础普通命令 | ls、cp、bash |
/sbin |
system binary | 基础系统管理命令 | fsck、reboot |
/boot |
boot | 启动文件 | 内核、GRUB、initramfs |
/dev |
device | 设备文件 | 磁盘、终端、随机设备 |
/etc |
历史上常解释为 etcetera | 系统配置 | SSH、用户、网络配置 |
/home |
home | 普通用户主目录 | 用户文件和配置 |
/root |
root home | root 用户主目录 | root 的个人文件 |
/lib |
library | 基础共享库 | 动态库、内核模块 |
/lib64 |
64-bit library | 64 位基础库 | 64 位动态链接器 |
/usr |
历史上与 user 有关 | 大部分系统程序和资源 | bin、lib、share |
/usr/local |
local | 管理员手动安装软件 | bin、lib、share |
/opt |
optional | 独立第三方软件 | Conda、CUDA、MATLAB |
/var |
variable | 经常变化的数据 | 日志、缓存、数据库 |
/tmp |
temporary | 短期临时文件 | 应用临时数据 |
/proc |
process | 进程和内核运行信息 | CPU、内存、PID |
/sys |
system | 设备和内核对象 | 驱动、总线、硬件 |
/run |
runtime | 当前启动周期的运行数据 | PID、Socket、状态 |
/mnt |
mount | 手动临时挂载 | 磁盘、网络盘 |
/media |
media | 自动挂载移动设备 | U 盘、光盘 |
/srv |
service | 服务对外提供的数据 | Web、FTP、Git |
/snap |
Snap | Snap 软件挂载和数据 | Snap 应用 |
/lost+found |
文件系统恢复目录 | 保存 fsck 恢复的数据 | 孤立文件 |
10. 最核心的记忆方法
可以按下面的方式记忆:
text
/bin、/sbin
基础命令和系统管理命令
/usr
系统安装的大多数程序、库和共享资源
/usr/local
本机管理员手动安装的软件
/opt
独立放置的第三方大型软件
/etc
系统配置
/home
普通用户自己的文件
/root
root 用户自己的文件
/var
不断变化的数据
/tmp
临时文件
/dev
设备
/proc、/sys
内核提供的虚拟系统信息
/boot
启动相关文件
/mnt、/media
挂载磁盘和移动设备
对于普通用户而言,最常接触的是:
text
/home/用户名
/usr/bin
/usr/local/bin
/opt
/tmp
/etc
在服务器上使用 Conda、R、Python 时,最重要的是分清:
text
/opt/conda
通常是管理员或系统提供的 Conda,而:
text
/home/用户名/anaconda3
/home/用户名/miniconda3
/home/用户名/conda_envs
通常是用户自己安装或创建的 Conda 与环境。
最终运行哪个程序,主要由:
text
PATH
以及当前激活的 Conda 环境共同决定。