Linux 系统目录结构详解(新手详细版)
本文档面向零基础新手,从“Linux 里文件都在哪”讲起,逐个介绍根目录下的主要目录、用途和常用操作,并配有大量示例。
一、核心概念:一棵树、一个根
1.1 和 Windows 的区别
在 Windows 里,你可能习惯:
- C 盘:系统
- D 盘:软件或资料
- E 盘:其他
每个“盘”是平级的,没有统一的“顶点”。
在 Linux 里:
- 没有 C 盘、D 盘 这种概念(除非你手动挂载多块硬盘,但逻辑上仍是一棵树)。
- 所有文件和目录都在一棵树上。
- 这棵树的根只有一个,叫做 根目录,用
/表示。
可以理解为:整个系统就是一个大文件夹,这个大文件夹的名字就是 /。
1.2 根目录长什么样?
在终端输入:
ls /
你可能会看到类似(不同发行版略有差异):
bin boot dev etc home lib lib32 lib64 libx32 lost+found media mnt opt proc root run sbin snap srv sys tmp usr var
这些就是直接挂在根目录 / 下面的一级目录。下面我们会一个一个讲。
1.3 路径:绝对路径 和 相对路径
- 绝对路径:从根目录
/开始写,例如/home/zhangsan/Documents。 - 相对路径:从当前目录开始写,例如
Documents、../Downloads。
示例:
# 假设当前在 /home/zhangsan
pwd
# 输出:/home/zhangsan
# 绝对路径:无论当前在哪,都能唯一确定位置
cd /home/zhangsan/Documents
# 相对路径:相对于当前目录
cd Documents # 进入当前目录下的 Documents
cd .. # 进入上一级,即 /home
cd ../lisi/Desktop # 进入“上一级的 lisi 的 Desktop”
特殊符号:
| 符号 | 含义 | 示例 |
|---|---|---|
/ |
根目录,或路径分隔符 | /、/home/user |
~ |
当前用户的主目录 | cd ~ 等价于 cd /home/当前用户名 |
. |
当前目录 | ./myfile 表示当前目录下的 myfile |
.. |
上一级目录 | cd .. |
二、根目录下一级目录总览
先有一个整体印象(表格中的“是否可随意改”指日常使用中是否建议新手随便删改):
| 目录 | 常见用途简述 | 是否可随意改 |
|---|---|---|
/bin |
基础用户命令(如 ls、cp) | 否 |
/sbin |
系统管理命令(如 fdisk) | 否 |
/boot |
内核、启动相关文件 | 否 |
/dev |
设备文件(硬盘、键盘等) | 否 |
/etc |
系统与软件配置文件 | 谨慎 |
/home |
普通用户主目录 | 可放个人文件 |
/lib、/lib64 等 |
系统库文件 | 否 |
/media |
可移动介质挂载点(U 盘等) | 一般自动 |
/mnt |
临时挂载点 | 可挂载,少删改 |
/opt |
第三方可选软件 | 可安装软件 |
/proc |
内核/进程信息(虚拟) | 只读查看 |
/root |
管理员 root 的主目录 | 仅 root |
/run |
运行时数据(虚拟/临时) | 否 |
/srv |
服务数据(如网站文件) | 按需 |
/sys |
内核/设备信息(虚拟) | 只读查看 |
/tmp |
临时文件 | 可放临时文件 |
/usr |
用户级程序、库、文档 | 否 |
/var |
可变数据(日志、缓存等) | 谨慎 |
下面按目录逐个细讲,并配示例。
三、/bin —— 基础用户命令
3.1 是什么?
- bin 来自 binary(可执行程序)。
- 存放所有用户都能用的、最基础的命令对应的可执行文件。
- 例如:
ls、cp、mv、cat、echo、bash等。
系统在“单用户模式”或修复时,通常也要能用到 /bin,所以这里放的是维持基本操作必不可少的命令。
3.2 示例
# 列出 /bin 下的部分内容(很多,这里只示例)
ls /bin
# 看看 ls 这个命令实际是哪个文件
which ls
# 可能输出:/usr/bin/ls (有些发行版会把 /bin 链接到 /usr/bin)
# 直接执行 /bin 里的程序(若存在)
/bin/ls -l
四、/sbin —— 系统管理命令
4.1 是什么?
- s 可以理解为 system,sbin = 系统用的 binary。
- 存放系统管理、维护用的命令,多数需要 root 权限。
- 例如:
fdisk(分区)、ifconfig(网络)、shutdown、reboot等。
4.2 示例
# 列出 /sbin 下的内容(需要 root 的命令居多)
ls /sbin
# 普通用户直接执行可能提示权限不够
sudo /sbin/reboot # 重启(慎用)
五、/boot —— 启动相关
5.1 是什么?
- 存放启动时需要的文件:
- 内核(vmlinuz-xxx)
- 初始化内存盘(initrd、initramfs)
- 引导程序(如 GRUB)的配置和模块
删改或填满 /boot 可能导致无法启动,所以不要在这里随便删文件或放个人文件。
5.2 示例
# 查看 /boot 里有什么
ls /boot
# 典型内容示例(名称因发行版而异):
# vmlinuz-5.15.0-xxx initrd.img-5.15.0-xxx grub config-5.15.0-xxx
六、/dev —— 设备文件
6.1 是什么?
- dev = device(设备)。
- 这里的“文件”不代表普通数据,而是代表设备:
- 硬盘、分区
- 键盘、鼠标
- 终端(tty)
- 随机数生成器
- 读写这些“文件”会作用到真实设备上,所以不要随便写,尤其是块设备。
6.2 常见设备名示例
| 名称 | 含义 |
|---|---|
/dev/sda |
第一块 SATA/SCSI 硬盘(整块盘) |
/dev/sda1 |
第一块硬盘的第一个分区 |
/dev/nvme0n1 |
第一块 NVMe 固态硬盘 |
/dev/tty |
当前终端 |
/dev/null |
“黑洞”,写入的数据会被丢弃 |
/dev/zero |
读出时得到无限个 0 |
6.3 示例
# 列出块设备(硬盘、分区等)
ls /dev/sd*
# 或
lsblk
# 把输出“扔进黑洞”(常用于只想看命令是否有报错)
ls / > /dev/null
# 用 /dev/zero 生成一个 1MB 的填零文件(慎用,会占空间)
dd if=/dev/zero of=zeros.bin bs=1M count=1
七、/etc —— 配置文件
7.1 是什么?
- etc 传统上表示 et cetera(“等等”),在 Linux 里约定俗成用来放配置文件。
- 系统和很多软件的配置都在这里:
- 用户账号、密码(shadow 等)
- 网络配置
- 服务开关与参数
- 软件配置(如 nginx、ssh)
改错可能导致服务无法启动或无法登录,所以改前先备份,不要乱删。
7.2 常见子目录与文件示例
| 路径或文件 | 含义示例 |
|---|---|
/etc/passwd |
用户账号信息(不含密码) |
/etc/shadow |
密码哈希(仅 root 可读) |
/etc/hostname |
主机名 |
/etc/hosts |
主机名与 IP 对应(本地解析) |
/etc/apt/ |
apt 源、配置(Debian/Ubuntu) |
/etc/ssh/sshd_config |
SSH 服务配置 |
/etc/nginx/ |
Nginx 配置目录 |
7.3 示例
# 查看主机名
cat /etc/hostname
# 查看当前用户在 passwd 里的一行
grep "$USER" /etc/passwd
# 列出 apt 相关配置(Ubuntu/Debian)
ls /etc/apt/
八、/home —— 用户主目录
8.1 是什么?
- 每个普通用户通常有一个同名目录:
/home/用户名。 - 这里用来放该用户的个人文件:文档、下载、桌面、脚本等。
- 类似 Windows 的
C:Users用户名。
注意:root 的主目录不在 /home,而在 /root。
8.2 示例
# 进入当前用户主目录(三种写法等价)
cd ~
cd $HOME
cd /home/你的用户名
# 列出主目录下的常见文件夹
ls ~
# 例如:Desktop Documents Downloads Music Pictures Videos
# 在主目录下创建目录并进入
mkdir -p ~/myproject
cd ~/myproject
pwd
# 输出:/home/你的用户名/myproject
九、/lib、/lib32、/lib64、/libx32 —— 系统库
9.1 是什么?
- lib = library(库)。
- 存放系统运行和 /bin、/sbin 里的程序所依赖的共享库(.so 文件)。
- 不同架构或 ABI 会分开:
/lib、/lib64:64 位系统上常见/lib32:32 位兼容库/libx32:x32 ABI 库
不要删除或随意改,否则可能导致命令无法运行甚至系统起不来。
9.2 示例
# 查看 /lib 下部分内容(库文件一般以 .so 结尾)
ls /lib/*.so* | head -5
# 查看某命令依赖哪些库(示例:ls)
ldd $(which ls)
十、/media —— 可移动介质挂载点
10.1 是什么?
- 很多发行版会自动把 U 盘、光盘、SD 卡等挂载到
/media/用户名/下的子目录。 - 插入 U 盘后,可能会出现
/media/zhangsan/USB_DISK这样的路径,里面的内容就是 U 盘里的文件。
10.2 示例
# 插入 U 盘后查看
ls /media/$USER
# 进入 U 盘(名称以实际为准)
cd /media/$USER/你的U盘卷标名
ls
十一、/mnt —— 临时挂载点
11.1 是什么?
- mnt = mount(挂载)。
- 传统上用来临时挂载一块硬盘、网络共享等。
- 和
/media的区别:/media多用于可移动介质且常由系统自动挂载;/mnt更偏“手动、临时”。
11.2 示例
# 查看 /mnt 下是否有挂载
ls /mnt
# 手动挂载示例(需要 root,且设备名、挂载点要按你实际情况改)
# sudo mount /dev/sdb1 /mnt
# 用完后卸载:sudo umount /mnt
十二、/opt —— 可选第三方软件
12.1 是什么?
- opt = optional(可选)。
- 用来安装第三方、可选的、通常不通过系统包管理器安装的软件。
- 例如:某些商业软件、自己解压的 IDE、按官方文档“解压到 /opt”的软件。
12.2 示例
# 查看 /opt 里安装了哪些软件
ls /opt
# 例如可能看到:google xxx-ide some-app
十三、/proc —— 进程与系统信息(虚拟)
13.1 是什么?
- proc = process(进程)。
- 这是一个虚拟文件系统:里面的“文件”不是存在硬盘上,而是内核动态生成的。
- 读这些“文件”可以看到:
- 进程信息(每个进程一个目录
/proc/进程ID) - CPU、内存、内核参数等系统信息
- 进程信息(每个进程一个目录
只读查看即可,不要随意写入。
13.2 常见内容示例
| 路径 | 含义示例 |
|---|---|
/proc/cpuinfo |
CPU 信息 |
/proc/meminfo |
内存信息 |
/proc/version |
内核版本 |
/proc/self |
当前进程自己的信息(符号链接) |
/proc/12345 |
进程 ID 为 12345 的进程信息 |
13.3 示例
# 查看 CPU 信息
cat /proc/cpuinfo | head -20
# 查看内存信息
cat /proc/meminfo | head -5
# 查看内核版本
cat /proc/version
# 查看当前 shell 的进程 ID
echo $$
# 然后可:ls /proc/刚才输出的数字/
十四、/root —— 管理员主目录
14.1 是什么?
- root 用户(超级管理员)的主目录,不是“根目录
/”。 - 路径是
/root,不要和根目录/混淆。 - 普通用户没有权限进入
/root(除非授权)。
14.2 示例
# 普通用户执行可能提示权限不够
ls /root
# 以 root 身份查看(例如通过 sudo)
sudo ls /root
十五、/run —— 运行时数据(虚拟/临时)
15.1 是什么?
- 存放本次启动以来的运行时数据:进程 ID 文件、套接字、锁文件等。
- 多为虚拟文件系统或临时文件,重启后清空。
- 不要用来放需要持久保存的文件。
15.2 示例
# 查看 /run 下的内容
ls /run
# 可能看到:user systemd udev lock pid ...
十六、/srv —— 服务数据
16.1 是什么?
- srv = service(服务)。
- 约定俗成用来放本机提供的服务所依赖的数据,例如:
- Web 网站文件
- FTP 文件
- 版本库
很多发行版默认是空的,由管理员按需创建子目录使用。
16.2 示例
# 查看是否已有服务数据目录
ls /srv
# 若自己搭网站,可能创建:/srv/www 或 /srv/nginx
十七、/sys —— 内核与设备信息(虚拟)
17.1 是什么?
- sys = system。
- 也是一个虚拟文件系统,暴露内核、设备、驱动等的信息和部分可调参数。
- 用于查看硬件、电源管理、模块等,一般只读,改错可能影响系统稳定性。
17.2 示例
# 查看块设备信息
ls /sys/block
# 查看某块硬盘的队列等信息(名称以实际为准)
ls /sys/block/sda/
十八、/tmp —— 临时文件
18.1 是什么?
- tmp = temporary(临时)。
- 供所有用户和程序放临时文件。
- 系统可能定期清理或重启后清空,不要在这里放重要、需长期保留的文件。
18.2 示例
# 在 /tmp 下创建自己的临时目录
mkdir -p /tmp/my_temp_work
cd /tmp/my_temp_work
touch test.txt
ls
# 用完可删除
rm -rf /tmp/my_temp_work
十九、/usr —— 用户级程序与只读数据
19.1 是什么?
- usr 早期有 “user” 或 “Unix System Resources” 等说法,现在可以理解为系统安装的、用户级的程序、库、头文件、文档等。
- 内容一般是只读的(安装/升级软件时由包管理器改)。
- 很多发行版把
/bin、/lib等符号链接到/usr下的对应目录(如/usr/bin、/usr/lib),所以“命令在 /bin”和“在 /usr/bin”常是一回事。
19.2 /usr 下常见子目录
| 目录 | 含义示例 |
|---|---|
/usr/bin |
用户命令(大量日常命令在这里) |
/usr/sbin |
系统管理命令 |
/usr/lib |
库文件 |
/usr/share |
架构无关的共享数据(文档、图标、时区等) |
/usr/include |
头文件(C/C++ 开发用) |
/usr/local |
本机本地安装的软件(自己编译或脚本安装的) |
/usr/src |
源码(部分发行版放内核源码 here) |
19.3 示例
# 查看有多少个可执行命令
ls /usr/bin | wc -l
# 查某个命令的位置
which vim
# 可能:/usr/bin/vim
# 查看 /usr/share 里有哪些共享数据
ls /usr/share | head -20
二十、/var —— 可变数据
20.1 是什么?
- var = variable(可变)。
- 存放会随时间增长或经常变化的数据,例如:
- 日志:
/var/log - 缓存:
/var/cache - 数据库文件、网站运行数据、邮件队列等
- 日志:
日志和缓存会占空间,排查问题或做清理时经常和 /var 打交道。
20.2 常见子目录
| 目录 | 含义示例 |
|---|---|
/var/log |
系统与软件日志 |
/var/cache |
缓存 |
/var/lib |
程序使用的可变数据(如数据库文件) |
/var/tmp |
临时文件(比 /tmp 更持久,重启可能保留) |
/var/spool |
队列数据(打印、邮件等) |
20.3 示例
# 查看日志目录
ls /var/log
# 查看系统日志末尾几行
sudo tail -20 /var/log/syslog
# 查看当前磁盘占用(/var 常会变大)
df -h /var
二十一、一张图串起来(逻辑关系)
可以这样记(箭头表示“包含/下属”):
/ (根)
├── bin, sbin → 基础命令、系统命令
├── boot → 启动
├── dev → 设备文件
├── etc → 配置
├── home → 普通用户主目录(/home/用户名)
├── lib, lib64 等 → 系统库
├── media, mnt → 挂载点
├── opt → 可选第三方软件
├── proc, run, sys → 虚拟/运行时(不要当普通目录存文件)
├── root → root 用户主目录
├── srv → 服务数据
├── tmp → 临时文件
├── usr → 用户级程序、库、文档(核心“软件区”)
└── var → 日志、缓存等可变数据
二十二、新手常用操作小结
| 需求 | 建议目录或命令 |
|---|---|
| 放个人文件、项目 | ~/ 或 /home/你的用户名/ |
| 临时试验、临时文件 | /tmp(用完可删) |
| 查配置在哪 | 多数在 /etc 下 |
| 查日志 | /var/log |
| 查命令在哪 | which 命令名;多在 /usr/bin 或 /bin |
| 查磁盘占用 | df -h、du -sh 目录 |
| 不要乱删乱改 | /、/bin、/sbin、/lib、/boot、/etc(改前备份) |
二十三、简单练习建议
- 在终端执行
ls /,对照本文逐个目录看一遍。 - 用
cd和ls进入/etc、/home、/usr、/var/log看看实际内容。 - 在
~下建目录、放文件,再用pwd、ls -l观察路径和权限。 - 用
cat /proc/cpuinfo、cat /proc/meminfo看看“虚拟目录”里是什么。
熟悉了“树形结构 + 每个目录的用途”,以后找配置、找日志、装软件都会更清晰。
建议把本文和 Linux简介.md 一起看,先懂整体再懂目录,效果更好。
文档以常见 Linux 发行版(如 Ubuntu)为准;部分路径在不同发行版中可能略有差异(如 /lib 与 /usr/lib 的合并方式),但整体结构一致。