Linux 各个目录的作用:从根目录理解系统结构
如果你刚开始接触 Linux,打开终端输入 ls /,会看到一组看起来很固定的目录:bin、etc、home、usr、var、proc、dev 等。它们不是随意命名的文件夹,而是 Linux 系统长期演化出来的一套目录分工。
理解这些目录的作用,有助于你知道配置文件在哪里、日志在哪里、用户数据在哪里、程序通常安装在哪里,也能避免误删系统关键文件。本文会以 Linux 根目录 / 为起点,逐一讲解常见目录的用途。
1. /:根目录,所有路径的起点#
Linux 的文件系统是一个单一的树状结构,最顶层就是 /,也叫根目录。
无论是系统文件、用户文件、磁盘分区、U 盘、网络挂载目录,最终都会挂载到这棵目录树的某个位置。和 Windows 常见的 C:、D: 盘符不同,Linux 更强调“从 / 开始的一棵树”。
例如:
/etc/ssh/sshd_config
/home/alice/document.txt
/var/log/syslog
这些路径都从 / 开始。
日常使用时,不建议直接在 / 下随意创建文件或目录。根目录通常只放系统约定好的一级目录。
2. /bin:基础命令目录#
/bin 用来存放系统启动和基本维护所需的常用命令。
常见命令包括:
ls
cp
mv
rm
cat
mkdir
sh
这些命令是系统最基础的工具,即使系统处在较小的维护环境中,也通常需要它们。
在一些现代 Linux 发行版中,/bin 可能只是一个指向 /usr/bin 的符号链接。这是因为许多发行版已经采用了 /usr 合并的目录布局,但从使用者角度看,/bin 仍然可以理解为“基础命令所在的位置”。
3. /sbin:系统管理命令目录#
/sbin 中通常存放系统管理相关命令,很多命令主要供 root 用户或系统管理员使用。
常见命令包括:
ip
reboot
shutdown
fsck
mount
其中不少命令和系统启动、磁盘检查、网络配置、关机重启有关。
和 /bin 类似,现代发行版中 /sbin 也可能链接到 /usr/sbin。
4. /etc:系统配置文件目录#
/etc 是 Linux 中非常重要的目录,主要存放系统级配置文件。
常见内容包括:
/etc/passwd # 用户账户信息
/etc/group # 用户组信息
/etc/hostname # 主机名
/etc/hosts # 本地域名解析
/etc/fstab # 文件系统挂载配置
/etc/ssh/ # SSH 服务配置
/etc/nginx/ # Nginx 配置,取决于是否安装
很多服务的配置文件都在 /etc 下。例如你安装了 Nginx、MySQL、Redis、SSH 服务,通常都能在 /etc 下找到相关配置。
需要注意的是,修改 /etc 下的文件往往会影响整个系统或某个服务的运行。修改前最好备份,例如:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
5. /home:普通用户的家目录#
/home 用来存放普通用户的个人文件和用户级配置。
例如用户 alice 的家目录通常是:
/home/alice
用户自己的文档、下载、项目代码、图片、桌面文件等一般都放在这里。很多程序也会把用户级配置写到家目录下的隐藏文件或隐藏目录中,例如:
/home/alice/.bashrc
/home/alice/.ssh/
/home/alice/.config/
以点 . 开头的文件或目录默认是隐藏的,可以用下面的命令查看:
ls -la ~
其中 ~ 表示当前用户的家目录。
6. /root:root 用户的家目录#
/root 是超级用户 root 的家目录,不是普通用户目录。
这点容易和 / 根目录混淆:
/是整个系统的根目录。/root是 root 用户的个人目录。
普通用户的家目录通常在 /home/用户名,而 root 用户比较特殊,家目录直接放在 /root。
通常不建议长期使用 root 用户进行日常操作。更推荐使用普通用户登录,在需要管理员权限时通过 sudo 执行特权命令。
7. /usr:用户级程序和共享资源目录#
/usr 是 Linux 中体积通常很大的目录之一,里面存放大量应用程序、库文件、文档和共享资源。
常见子目录包括:
/usr/bin # 大多数普通应用命令
/usr/sbin # 管理类命令
/usr/lib # 程序库文件
/usr/share # 共享数据,如文档、图标、语言文件
/usr/local # 本地手动安装的软件
很多通过包管理器安装的软件,其可执行文件会进入 /usr/bin,库文件进入 /usr/lib,文档或资源进入 /usr/share。
/usr/local 的作用#
/usr/local 通常用于存放本机管理员手动安装的软件,区别于发行版包管理器安装的软件。
例如你从源码编译安装某个程序,可能会安装到:
/usr/local/bin
/usr/local/lib
/usr/local/etc
这样做的好处是减少和系统包管理器管理的文件发生冲突。
8. /var:经常变化的数据目录#
/var 的名字来自 variable,意思是“可变的”。它用于存放运行过程中会不断变化的数据。
常见内容包括:
/var/log # 日志文件
/var/cache # 缓存文件
/var/tmp # 临时文件
/var/spool # 队列数据,如邮件、打印任务
/var/lib # 服务运行状态和数据
其中 /var/log 非常常用。排查系统问题或服务异常时,经常会查看日志,例如:
/var/log/syslog
/var/log/auth.log
/var/log/nginx/access.log
/var/log/nginx/error.log
不同发行版日志文件名称可能不同。例如 Debian、Ubuntu 常见 syslog,而一些使用 systemd 的系统会更多使用 journalctl 查看日志。
/var/lib 也很重要。许多服务会把自己的持久化数据放在这里,例如数据库、容器、包管理器状态等。不要把 /var/lib 简单理解成“缓存”,它里面可能有非常关键的数据。
9. /tmp:临时文件目录#
/tmp 用来存放临时文件,系统和应用程序都可能在这里创建短期使用的数据。
特点是:
- 通常任何用户都可以写入。
- 文件不保证长期保存。
- 有些系统会在重启后清理
/tmp。
因此,不要把重要文件长期放在 /tmp。如果只是临时解压、临时测试、短时间中转文件,放在这里比较合适。
还有一个类似目录是 /var/tmp。一般来说,/var/tmp 中的临时文件保存时间可能比 /tmp 更长,但具体清理策略取决于发行版和系统配置。
10. /dev:设备文件目录#
Linux 有一个经典理念:一切皆文件。硬盘、分区、终端、随机数生成器等设备,都可以通过文件形式暴露在 /dev 下。
常见示例:
/dev/sda # 一块磁盘,名称视系统而定
/dev/sda1 # 磁盘上的一个分区
/dev/null # 丢弃所有写入内容的特殊设备
/dev/zero # 持续输出 0 字节的设备
/dev/random # 随机数设备
/dev/tty # 当前终端设备
例如把输出重定向到 /dev/null,表示丢弃输出:
command > /dev/null 2>&1
普通用户不应该随意修改 /dev 下的内容。很多设备文件由内核和 udev 等机制动态管理。
11. /proc:进程和内核信息的虚拟文件系统#
/proc 并不是普通磁盘目录,而是一个虚拟文件系统。它由内核动态生成,用来暴露进程、内核和系统运行状态信息。
常见内容包括:
/proc/cpuinfo # CPU 信息
/proc/meminfo # 内存信息
/proc/version # 内核版本信息
/proc/1/ # PID 为 1 的进程信息
/proc/self/ # 当前进程信息
例如查看 CPU 信息:
cat /proc/cpuinfo
查看内存信息:
cat /proc/meminfo
/proc 下很多文件看起来像普通文件,但它们不是实际存储在硬盘上的文本文件,而是读取时由内核即时生成的内容。
12. /sys:设备和内核对象信息#
/sys 也是虚拟文件系统,主要用于展示和管理内核设备模型、硬件设备、驱动、总线、电源等信息。
常见路径包括:
/sys/class
/sys/devices
/sys/block
/sys/bus
很多系统工具会读取 /sys 中的信息来识别硬件和设备状态。某些文件还可以写入,用于调整内核或设备行为。
不过,普通用户不建议随意修改 /sys 下的文件,因为这可能直接影响硬件和内核运行状态。
13. /run:运行时状态目录#
/run 用来存放系统启动后产生的运行时数据,通常位于内存文件系统中,重启后会消失。
它常用于存放:
/run/*.pid # 进程 PID 文件
/run/lock # 锁文件
/run/user/UID # 用户会话运行时目录
很多服务启动后,会在 /run 下记录自己的进程 ID、套接字文件或临时状态。
/run 的特点是“只对当前这次启动有效”。如果机器重启,里面的内容通常会重新生成。
14. /boot:启动相关文件目录#
/boot 存放系统启动所需文件,例如内核镜像、initramfs、bootloader 配置等。
常见内容包括:
/boot/vmlinuz-...
/boot/initrd.img-...
/boot/grub/
如果 /boot 空间满了,系统可能无法安装新内核,甚至影响启动配置更新。服务器维护中经常会检查旧内核是否过多占用了 /boot 空间。
不要随意删除 /boot 下的文件,尤其是当前正在使用的内核文件。需要清理旧内核时,应优先使用发行版提供的包管理工具。
15. /lib、/lib64:基础共享库目录#
/lib 和 /lib64 存放系统启动和基础命令运行所需的共享库文件。
共享库可以理解为程序运行时依赖的公共组件,类似 Windows 中的 DLL 文件。
例如,/bin/ls 这样的命令运行时也需要加载一些动态库。可以用 ldd 查看某个程序依赖哪些库:
ldd /bin/ls
在现代发行版中,/lib、/lib64 也可能被链接到 /usr/lib、/usr/lib64。
普通用户一般不需要手动操作这些目录。误删库文件可能导致大量命令无法运行。
16. /opt:第三方大型软件目录#
/opt 通常用于安装可选的、第三方的、相对独立的软件包。
例如某些商业软件、独立发行的软件、开发工具套件,可能会安装到:
/opt/google/
/opt/idea/
/opt/company-app/
它和 /usr/local 有些相似,都可能用于非系统默认软件。但 /opt 更常见于“一个软件一个独立目录”的安装方式。
17. /mnt:临时挂载点目录#
/mnt 通常用作临时挂载文件系统的位置。
例如临时挂载一块磁盘分区:
sudo mount /dev/sdb1 /mnt
然后就可以通过 /mnt 访问这个分区中的内容。
如果只是临时维护、救援系统、手动挂载磁盘,/mnt 很常见。
18. /media:可移动设备挂载目录#
/media 通常用于自动挂载可移动设备,例如 U 盘、移动硬盘、光盘等。
桌面版 Linux 插入 U 盘后,系统可能会自动挂载到类似路径:
/media/alice/USB_DISK
它和 /mnt 的区别可以粗略理解为:
/mnt更偏向管理员手动临时挂载。/media更偏向系统自动挂载可移动介质。
实际行为会因发行版和桌面环境而不同。
19. /srv:服务数据目录#
/srv 用于存放系统对外提供服务的数据。srv 可以理解为 service 的缩写。
例如:
/srv/www
/srv/ftp
/srv/git
如果一台服务器主要用于提供网站、FTP、Git 仓库等服务,把服务数据放在 /srv 是一种比较清晰的组织方式。
不过实际生产环境中,也有很多团队会把网站放在 /var/www,或者把业务数据放在单独的数据盘目录中。关键是保持团队内约定一致,并做好权限和备份规划。
20. /lost+found:文件系统修复目录#
在 ext 系列文件系统中,每个分区的根目录下可能会有一个 lost+found 目录。
当文件系统检查工具修复磁盘错误时,可能会把无法确定原位置的文件片段放到这里。
普通使用中很少需要进入这个目录。如果你看到它,不必惊讶,它是文件系统维护机制的一部分。
21. 常见目录如何快速记忆#
可以用下面这种方式建立直觉:
/ 整个系统的起点
/bin 基础命令
/sbin 系统管理命令
/etc 系统配置
/home 普通用户数据
/root root 用户家目录
/usr 大量应用程序和共享资源
/var 日志、缓存、状态等可变数据
/tmp 临时文件
/dev 设备文件
/proc 进程和内核信息,虚拟文件系统
/sys 设备和内核对象信息,虚拟文件系统
/run 本次启动后的运行时状态
/boot 启动文件和内核
/lib 基础共享库
/opt 第三方独立软件
/mnt 手动临时挂载点
/media 可移动设备挂载点
/srv 服务数据
22. 新手最常见的几个误区#
误区一:把 / 当成普通文件夹乱放东西#
根目录是系统目录树的顶层,不适合随意存放个人文件。个人文件应放在自己的家目录,例如 /home/用户名。
误区二:以为 /root 就是根目录#
/root 是 root 用户的家目录,根目录是 /。两者不是一回事。
误区三:随意删除 /var 下的内容#
/var/log 中是日志,部分旧日志可以按策略清理;但 /var/lib 中常常有服务的重要数据,不能随便删除。
误区四:觉得 /proc 和 /sys 是普通文件#
它们大多是虚拟文件系统,由内核动态提供信息。很多内容不占用普通磁盘空间,也不应该随意修改。
误区五:手动改系统目录但不备份#
修改 /etc、/boot、/lib 等目录下的内容前,应先确认影响范围,并保留备份。服务器环境中还应配合版本管理、配置管理或快照策略。
23. 排查问题时常用哪些目录#
如果系统或服务出现问题,可以优先想到这些位置:
服务配置:/etc
服务日志:/var/log
服务数据:/var/lib 或 /srv
用户配置:/home/用户名/.*
启动相关:/boot
设备状态:/dev、/sys
进程状态:/proc
临时文件:/tmp、/run
例如 SSH 登录异常,可以查看:
/etc/ssh/sshd_config
/var/log/auth.log
例如 Nginx 网站异常,可以查看:
/etc/nginx/
/var/log/nginx/
/var/www/ 或 /srv/www/
例如磁盘空间不足,可以检查:
du -sh /var/log/*
du -sh /var/lib/*
du -sh /home/*
执行清理前,一定要先确认文件用途,尤其是生产服务器。
总结#
Linux 的目录结构看起来复杂,但背后有清晰的分工:配置放 /etc,用户文件放 /home,日志和可变数据放 /var,程序和共享资源大量集中在 /usr,设备在 /dev,内核和进程信息通过 /proc、/sys 暴露。
掌握这些目录的作用,能够帮助你更快理解 Linux 系统的运行方式,也能在安装软件、修改配置、排查日志、挂载磁盘和维护服务器时少走很多弯路。
对于新手来说,最重要的原则是:先弄清楚目录用途,再修改或删除文件;涉及系统目录时先备份;个人数据尽量放在自己的家目录中。这样使用 Linux 会更加稳妥,也更容易建立系统化的理解。