Linux系统目录结构

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(可执行程序)。
  • 存放所有用户都能用的、最基础的命令对应的可执行文件。
  • 例如:lscpmvcatechobash 等。

系统在“单用户模式”或修复时,通常也要能用到 /bin,所以这里放的是维持基本操作必不可少的命令。

3.2 示例

# 列出 /bin 下的部分内容(很多,这里只示例)
ls /bin

# 看看 ls 这个命令实际是哪个文件
which ls
# 可能输出:/usr/bin/ls   (有些发行版会把 /bin 链接到 /usr/bin)

# 直接执行 /bin 里的程序(若存在)
/bin/ls -l

四、/sbin —— 系统管理命令

4.1 是什么?

  • s 可以理解为 systemsbin = 系统用的 binary。
  • 存放系统管理、维护用的命令,多数需要 root 权限。
  • 例如:fdisk(分区)、ifconfig(网络)、shutdownreboot 等。

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 -hdu -sh 目录
不要乱删乱改 //bin/sbin/lib/boot/etc(改前备份)

二十三、简单练习建议

  1. 在终端执行 ls /,对照本文逐个目录看一遍。
  2. cdls 进入 /etc/home/usr/var/log 看看实际内容。
  3. ~ 下建目录、放文件,再用 pwdls -l 观察路径和权限。
  4. cat /proc/cpuinfocat /proc/meminfo 看看“虚拟目录”里是什么。

熟悉了“树形结构 + 每个目录的用途”,以后找配置、找日志、装软件都会更清晰。
建议把本文和 Linux简介.md 一起看,先懂整体再懂目录,效果更好。


文档以常见 Linux 发行版(如 Ubuntu)为准;部分路径在不同发行版中可能略有差异(如 /lib 与 /usr/lib 的合并方式),但整体结构一致。

发表评论