Linux 基础:目录结构
一、Linux 系统目录结构:解密 “倒置树” 下的文件组织逻辑
Linux 与 Windows 的文件系统组织方式存在本质差异:Windows 以多盘符(如 C:\
、D:\
)划分存储区域,而 Linux 采用 “单根倒置树” 结构 —— 所有文件和目录都以 /
(根目录)为起点,如同大树的根系般向下延伸,任何存储设备(硬盘分区、U 盘、网络存储等)都需 “挂载” 到这棵 “树” 的某个目录下,才能被系统识别和访问。
1. 什么是 “挂载”?
简单来说,挂载是将存储设备与某个目录建立绑定关系的过程。当设备挂载后,访问这个目录就等同于访问设备内的文件。例如,将 U 盘挂载到 /media/usb
目录,打开 /media/usb
就能查看 U 盘中的文档、图片等内容。这种设计让 Linux 的文件系统结构更统一,避免了多盘符带来的路径混乱。
2. 查看根目录结构:一条命令入门
登录 Linux 系统后,只需在终端输入以下命令,即可查看根目录下的所有一级目录:
[Steven@linux ~]$ ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
这些目录各司其职,共同支撑 Linux 系统的正常运行。为了更直观理解其层级关系,可参考以下树状结构(核心目录简化展示):
/ (根目录)
├── bin # 基础用户命令
├── boot # 系统启动文件
├── dev # 设备文件
├── etc # 系统配置文件
├── home # 普通用户主目录
├── lib/lib64 # 系统库文件
├── media # 外部设备自动挂载点
├── mnt # 临时挂载点
├── opt # 可选软件安装目录
├── proc # 内核与进程信息(虚拟文件系统)
├── root # root用户主目录
├── run # 运行时临时文件
├── sbin # 超级用户管理命令
├── srv # 服务数据目录
├── sys # 硬件与内核信息(sysfs文件系统)
├── tmp # 临时文件
├── usr # 系统资源与应用
└── var # 动态变化数据
二、核心目录功能详解:从 “是什么” 到 “怎么用”
1. 根目录 /
:所有目录的 “祖先”
根目录是 Linux 文件系统的起点,系统启动后会优先挂载根分区,再从根目录挂载其他分区(如 /home
、/var
可能位于独立分区)。注意:根目录下的目录和文件需谨慎操作,误删或修改关键文件可能导致系统崩溃。
2. 基础命令与系统管理目录
2.1 /bin
:普通用户的 “命令工具箱”
-
功能:存放最基础的用户命令,所有用户(包括普通用户)都可执行,例如
ls
(查看目录)、cp
(复制文件)、mv
(移动 / 重命名)、cat
(查看文件内容)等。 -
特点:这些命令是系统启动后必需的,即使在 “单用户模式”(维护模式)下也能使用。
2.2 /sbin
:root 用户的 “管理专属区”
-
功能:存放系统管理命令,仅 root 用户(或通过
sudo
授权的普通用户)可执行,例如fdisk
(分区管理)、mount
(手动挂载设备)、shutdown
(关机 / 重启)、ifconfig
(网络配置,部分系统已被ip
命令替代)。 -
区别:与
/bin
的核心差异是 “权限”——/bin
面向所有用户,/sbin
面向系统管理员。
2.3 /usr/bin
与 /usr/sbin
:扩展命令库
-
usr/bin
:存放比/bin
更丰富的普通用户命令,例如git
(版本控制)、python
(Python 解释器)等,这些命令不是系统启动必需的,但日常使用频繁。 -
/usr/sbin
:存放扩展的系统管理命令,例如httpd
(Apache 服务管理)、crond
(定时任务服务)等,多用于服务配置和维护。
3. 系统配置目录 /etc
:“系统的说明书仓库”
-
功能:存放所有系统配置文件,几乎所有服务的配置都集中在这里,例如:
-
/etc/passwd
:用户账号信息(用户名、UID、主目录等); -
/etc/fstab
:系统开机自动挂载的分区配置,修改后需重启或执行mount -a
生效; -
/etc/ssh/sshd_config
:SSH 远程登录服务的配置文件(如端口号、登录权限); -
/etc/profile
:全局环境变量配置(对所有用户生效)。
-
-
注意:修改
/etc
下的配置文件前,建议先备份(如cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
),避免配置错误导致服务无法启动。
4. 用户主目录:“个人文件专属区”
4.1 /home
:普通用户的 “家”
-
功能:每个普通用户在
/home
下都有一个与用户名同名的目录(如用户 Steven 的主目录是/home/Steven
),用于存放个人文件、桌面配置、应用数据等。 -
权限:普通用户仅对自己的
/home/
用户名 目录有读写权限,无法直接修改其他用户的目录(除非授权)。
4.2 /root
:root 用户的 “专属家”
-
功能:root 用户(系统管理员)的主目录,不同于普通用户的
/home
路径,直接位于根目录下。 -
权限:root 用户对
/root
目录拥有完全控制权,且可访问系统所有目录,操作时需格外谨慎(如避免在/root
存放普通用户需要访问的文件)。
5. 系统启动与内核相关目录
5.1 /boot
:系统启动的 “关键钥匙”
-
功能:存放系统启动必需的文件,包括:
-
vmlinuz
:Linux 内核文件(系统启动时加载的核心程序); -
initrd
(或initramfs
):临时根文件系统,帮助内核在启动初期识别硬件; -
grub
(或grub2
):启动引导程序目录,负责选择启动的系统(如多系统共存时选择 Linux 或 Windows)。
-
-
注意:
/boot
目录占用空间较小(通常几十到几百 MB),建议单独分区,避免根分区满导致无法启动。
5.2 /lib
与 /lib64
:命令运行的 “依赖库”
-
功能:存放系统库文件,类似 Windows 的 .dll 文件,
/bin
、/sbin
、/usr/bin
中的命令运行时需依赖这些库。-
/lib
:32 位系统的库文件目录; -
/lib64
:64 位系统的库文件目录(64 位系统中同时存在/lib
和/lib64
,兼容 32 位程序)。
-
-
示例:若删除
/lib/libc.so.6
(C 语言标准库),几乎所有命令(如ls
、cp
)都会无法运行,因此严禁随意删除库文件。
6. 设备与虚拟文件系统目录
6.1 /dev
:“把设备当文件” 的核心
-
功能:存放设备文件,Linux 的核心设计理念之一是 “一切皆文件”,硬件设备也不例外,例如:
-
/dev/sda
:第一块 SATA 硬盘(sda1
表示该硬盘的第一个分区); -
/dev/null
:“黑洞” 设备,写入的数据会被丢弃(如echo "test" > /dev/null
可屏蔽输出); -
/dev/tty
:当前终端设备(在终端中输入tty
可查看当前终端路径); -
/dev/zero
:生成空数据的设备,常用于创建空白文件(如dd if=/dev/zero of=test.img bs=1M count=10
创建 10MB 空白镜像)。
-
6.2 /proc
:内核与进程的 “实时镜子”
-
功能:虚拟文件系统(不占用磁盘空间,数据存于内存),实时反映内核状态和进程信息,例如:
-
/proc/cpuinfo
:查看 CPU 信息(如核心数、型号); -
/proc/meminfo
:查看内存使用情况(如总内存、空闲内存); -
/proc/1234
:进程 ID 为 1234 的进程信息目录(cat /proc/1234/cmdline
可查看进程启动命令); -
/proc/version
:查看 Linux 内核版本。
-
6.3 /sys
:硬件与内核的 “交互接口”
-
功能:Linux 2.6 内核引入的 sysfs 虚拟文件系统,用于展示硬件设备的层级关系、内核参数配置等,例如:
-
/sys/class/net
:查看所有网络接口(如eth0
、wlan0
); -
/sys/block
:查看所有块设备(硬盘、U 盘等); -
/sys/devices
:查看系统识别的所有硬件设备。
-
-
用途:主要用于系统开发和硬件调试,普通用户日常使用较少。
7. 存储与临时文件目录
7.1 /media
与 /mnt
:设备挂载的 “临时停靠点”
-
/media
:系统自动挂载外部设备的默认目录,例如插入 U 盘后,系统会自动创建/media/用户名/U盘标签
并挂载,拔插设备时会自动卸载。 -
/mnt
:用户手动挂载设备的目录,例如将光盘挂载到/mnt/cdrom
(命令:mount /dev/cdrom /mnt/cdrom
),挂载后可在/mnt/cdrom
查看光盘内容。
7.2 /tmp
与 /var/tmp
:临时文件的 “回收站”
-
/tmp
:存放短期临时文件,所有用户都可读写,系统重启或定期(如每周)会自动清空。例如编译程序时生成的临时文件、应用运行时的缓存文件等。 -
/var/tmp
:存放长期临时文件,保留时间比/tmp
长(即使重启也可能不删除),适合需要长期临时存储的数据(如备份临时文件)。
7.3 /var
:动态数据的 “蓄水池”
-
功能:存放频繁变化的数据,与
/tmp
的 “临时” 不同,/var
下的数据是系统运行必需的,且会长期保留,例如:-
/var/log
:系统日志目录(核心目录),如messages
(系统通用日志)、secure
(安全日志,记录登录、sudo
操作)、nginx/access.log
(Nginx 访问日志); -
/var/spool
:任务队列与邮件目录,如crontabs
(定时任务配置)、mail
(用户邮件); -
/var/www
:部分 Linux 发行版(如 CentOS)默认的 Web 服务根目录(存放网站文件)。
-
-
注意:
/var/log
下的日志文件会不断增大,需定期清理(如通过logrotate
工具自动切割日志),避免占满磁盘。
7.4 /opt
与 /usr/local
:软件安装的 “自定义区域”
-
/opt
:存放第三方可选软件,例如 Oracle 数据库、Java JDK 等大型软件,默认是空目录,安装软件时需手动创建子目录(如/opt/jdk1.8
)。 -
/usr/local
:存放用户手动编译安装的软件,例如从源代码编译的 Nginx、Redis,默认会安装到/usr/local/bin
(命令)、/usr/local/lib
(库)、/usr/local/etc
(配置),与系统自带软件(/usr/bin
)区分开,便于管理和卸载。
8. 服务与资源目录
8.1 /srv
:服务数据的 “专属存储”
- 功能:存放服务运行所需的数据,例如 Web 服务的网站文件(若未放在
/var/www
)、FTP 服务的上传下载目录等,日常使用较少,多数场景下会优先选择/var
或/usr/local
。
8.2 /run
:运行时数据的 “临时缓存”
-
功能:存放系统启动后产生的临时运行数据,如 PID 文件(记录进程 ID,如
/run/nginx.pid
)、Socket 文件(进程间通信文件,如/run/docker.sock
)、临时网络配置等。 -
特点:
/run
目录在系统重启后会自动清空,数据仅在当前运行周期有效,避免残留无效数据。
三、目录功能速记:一张表理清核心分类
为了方便记忆,可将核心目录按功能分为 6 大类,快速定位目录用途:
目录分类 | 包含目录 | 核心功能总结 |
---|---|---|
命令目录 | /bin 、/sbin 、/usr/bin 、/usr/sbin | 存放用户命令与系统管理命令 |
配置目录 | /etc | 系统所有配置文件的集中存放地 |
用户目录 | /home 、/root | 普通用户与 root 用户的主目录 |
系统依赖目录 | /lib 、/lib64 、/boot | 库文件、启动文件,支撑系统运行 |
虚拟文件系统 | /dev 、/proc 、/sys | 设备文件、内核 / 进程信息、硬件接口 |
动态 / 临时目录 | /var 、/tmp 、/run 、/media 、/mnt | 动态数据、临时文件、设备挂载点 |
四、实用技巧:快速定位目录的 3 个方法
-
通过
cd
命令切换目录:例如cd /etc/ssh
进入 SSH 配置目录,cd ~
快速回到当前用户主目录(~
是主目录的快捷符号,root 用户~
对应/root
,普通用户对应/home/用户名
)。 -
通过
which
命令找命令路径:例如which ls
会输出/bin/ls
,which git
会输出/usr/bin/git
,快速了解命令所在目录。 -
通过
find
命令搜索文件:例如find /etc -name "sshd_config"
会在/etc
目录下搜索名为sshd_config
的文件,适合找不到配置文件时使用。
给Linux学习者的小建议:不必死记指令,会查才是关键
刚开始接触Linux的小伙伴,很容易陷入一个误区——把大量时间花在死记硬背指令上:今天背完 ls
的10种参数,明天忘一半;刚记熟 find
的复杂用法,过几天不用又想不起来,越学越有挫败感。
其实大家完全不用焦虑,Linux指令就像英语单词,“用进废退”是常态。哪怕是资深运维工程师,也不会把几百个指令的所有参数都刻在脑子里,他们的秘诀不是“记住”,而是“知道去哪查”。
这里给大家推荐一个超实用的Linux指令查询网站:菜鸟教程Linux命令手册。这个网站把Linux指令按“文件管理”“磁盘管理”“网络通讯”“系统管理”等常用场景分类,每个指令都清晰标注了功能、语法和常用示例。比如你需要“查找文件”,点开“文件管理”分类找到 find
命令,就能快速看到“按名称查找”“按大小查找”“按修改时间查找”等实用用法,复制示例改改参数就能直接用。
后续学习中,遇到不确定的指令或想了解某个参数的具体作用时,不用硬撑着回忆,直接打开网站检索,效率会高很多。随着使用次数增多,常用指令自然会记熟,而那些偶尔用到的“冷门指令”,知道查询路径就足够啦——毕竟在Linux学习中,“解决问题的能力”比“记住多少指令”更重要。