Linux 系统目录结构详解
在 Linux 系统的世界里,一切皆文件,而目录则是组织这些文件的基石。理解 Linux 系统的目录结构,就像掌握了一把打开 Linux 世界大门的钥匙。它不仅决定了文件和程序的存放位置,还深刻影响着系统的运行、管理和维护方式。
Linux 系统采用树状目录结构,根目录为起点。主要目录包括/bin 存放基本命令,/sbin 存放管理命令,/lib 存放库文件,/etc 存放配置,/home 为用户主目录,/usr 为用户程序,/var 存放变化数据,/dev 为设备入口,/proc 和/sys 为虚拟文件系统,/tmp 为临时文件,/opt 为可选软件,/boot 为启动文件,/mnt 和/media 为挂载点,/run 为运行时状态,/srv 为服务数据。理解这些目录有助于系统管理和维护。

在 Linux 系统的世界里,一切皆文件,而目录则是组织这些文件的基石。理解 Linux 系统的目录结构,就像掌握了一把打开 Linux 世界大门的钥匙。它不仅决定了文件和程序的存放位置,还深刻影响着系统的运行、管理和维护方式。
Linux 系统采用一种树状的目录结构,这种结构类似于一棵倒置的树,其中根目录(/)位于最顶端。所有的文件和目录都从根目录开始,通过不同的分支延伸至各个角落。这种统一的结构使得 Linux 系统具有高度的一致性和可预测性,便于用户和系统管理员进行管理和操作。
核心特点:
根目录是整个 Linux 文件系统结构的起点,所有其他目录和文件都直接或间接地隶属于它。它是整个文件系统的最高级别目录,通常被称作 /。
特点:
示例: 查看根目录下的内容。
# 查看根目录内容
ls /
代码示例: 使用 pwd 和 ls 命令查看当前工作目录和根目录内容。
# 当前工作目录
pwd
# 输出:/home/username
# 查看根目录
ls /
# 输出:bin dev home lib64 mnt proc run srv tmp var ...
/bin 目录存放着系统启动和运行必需的基本命令(Binary)。这些命令通常在单用户模式下也能使用,是系统运行不可缺少的部分。
常见文件:
ls, cp, mv, rm:基础文件操作命令。cat, grep, find:文本处理和搜索命令。sh, bash:Shell 解释器。示例: 查看 /bin 目录下的常用命令。
# 查看 /bin 目录下的 ls 命令
ls -l /bin/ls
# 查看 /bin 目录下的 shell 命令
ls -l /bin/bash
代码示例: 使用 which 命令查找命令所在位置。
# 查找 ls 命令的位置
which ls
# 查找 grep 命令的位置
which grep
/sbin 目录存放着系统管理员使用的系统管理命令。这些命令通常用于系统维护、配置和故障排查,需要 root 权限才能执行。
常见文件:
ifconfig, iptables:网络配置命令。fdisk, mkfs:磁盘分区和格式化命令。reboot, shutdown:系统重启和关机命令。mount, umount:挂载和卸载文件系统命令。示例: 查看 /sbin 目录下的系统管理命令。
# 查看 /sbin 目录下的 mount 命令
ls -l /sbin/mount
# 查看 /sbin 目录下的 ifconfig 命令
ls -l /sbin/ifconfig
代码示例: 使用 ls 查看 /sbin 目录内容。
# 查看 /sbin 目录下的命令 (简化输出)
ls /sbin | head -10
/lib 和 /lib64 目录分别存放着 32 位和 64 位的共享库文件(Shared Libraries)。这些库文件是程序运行时依赖的动态链接库,包含了许多通用函数和功能模块。
区别:
常见文件:
libc.so.6:C 标准库。libm.so.6:数学库。libpthread.so.0:线程库。示例: 查看 /lib 目录下的库文件。
# 查看 /lib 目录下的 libc 库
ls -l /lib/libc.so.6
# 查看 /lib64 目录下的 libc 库 (如果存在)
ls -l /lib64/libc.so.6
代码示例: 使用 ldd 命令查看程序依赖的库。
# 查看 ls 命令依赖的库
ldd /bin/ls
/etc 目录是 Linux 系统的配置文件集中地。这里存放着几乎所有系统和服务的配置文件,是系统管理和维护的关键区域。这些文件通常是纯文本格式,供系统管理员编辑和修改。
常见目录和文件:
passwd:用户账户信息。group:用户组信息。fstab:文件系统挂载表。hosts:主机名和 IP 地址映射。crontab:定时任务配置。/etc/init.d/:系统服务启动脚本。/etc/rc.d/:运行级别脚本。示例: 查看 /etc 目录下的关键配置文件。
# 查看 /etc/passwd 文件 (用户信息)
head -5 /etc/passwd
# 查看 /etc/group 文件 (用户组信息)
head -5 /etc/group
代码示例: 使用 grep 命令在配置文件中查找信息。
# 在 /etc/passwd 中查找用户名为 'root' 的条目
grep "^root:" /etc/passwd
# 在 /etc/group 中查找组名为 'wheel' 的条目
grep "^wheel:" /etc/group
/home 目录是用户主目录的存放位置。每个用户都有一个独立的子目录,通常以用户名命名,用于存放用户的个人文件、设置和配置。这是用户数据的主要存储区域。
特点:
示例: 查看 /home 目录下的用户目录。
# 查看 /home 目录下的用户
ls -la /home
# 查看用户 'user' 的主目录
ls -la /home/user
代码示例: 使用 pwd 和 ls 查看当前用户主目录。
# 查看当前用户主目录
echo $HOME
# 查看当前工作目录 (通常就是主目录)
pwd
# 查看主目录内容
ls -la ~
/usr 目录是一个非常重要的目录,它包含了大量用户程序、库文件、文档和帮助文件。它是 Linux 系统中最大的目录之一,通常包含许多子目录来组织不同类型的内容。
常见子目录:
/usr/bin:用户可执行命令。/usr/lib:用户程序使用的库文件。/usr/share:共享的数据文件。/usr/include:头文件(C/C++ 程序开发时使用)。/usr/local:本地安装的软件。示例: 查看 /usr 目录结构。
# 查看 /usr 目录内容
ls /usr
# 查看 /usr/bin 目录
ls /usr/bin | head -10
# 查看 /usr/share 目录
ls /usr/share | head -10
代码示例: 查看 /usr/bin 目录下的命令。
# 查看 /usr/bin 目录下的 python 命令
ls -l /usr/bin/python*
# 查看 /usr/share/doc 目录
ls /usr/share/doc | head -5
/var 目录用于存放经常变化的文件,如日志文件、数据库文件、邮件队列、缓存等。这些文件随着系统的运行而不断增长或改变,因此需要专门的目录来管理。
常见子目录:
/var/log:系统日志文件。/var/tmp:临时文件(比 /tmp 更持久)。/var/spool:排队等待处理的任务(如打印任务)。/var/lib:系统运行时需要的持久化数据(如数据库文件)。/var/cache:应用程序缓存数据。示例: 查看 /var 目录下的日志文件。
# 查看 /var/log 目录
ls /var/log | head -10
# 查看最近的日志文件
ls -lt /var/log | head -5
# 查看 /var/lib 目录
ls /var/lib
代码示例: 查看日志文件。
# 查看最近的登录日志
tail -n 10 /var/log/auth.log
# 查看系统日志
tail -n 10 /var/log/syslog
/dev 目录包含了系统中所有设备文件的入口点。这些是特殊的文件,代表了系统中的物理设备(如硬盘、键盘、鼠标)和虚拟设备(如终端、伪终端)。通过这些设备文件,用户和程序可以与硬件进行交互。
常见设备文件:
/dev/null:空设备,丢弃写入的所有数据。/dev/zero:产生无限的零字节流。/dev/tty:当前终端。/dev/sda:第一个 IDE 硬盘。/dev/loop0:循环设备(用于挂载 ISO 文件等)。示例: 查看 /dev 目录下的设备文件。
# 查看 /dev 目录内容 (简化输出)
ls /dev | head -10
# 查看 /dev 目录下的终端设备
ls -l /dev/tty*
# 查看 /dev 目录下的硬盘设备
ls -l /dev/sd*
代码示例: 使用 cat 和 dd 命令与设备文件交互。
# 读取 /dev/zero 设备 (产生零)
dd if=/dev/zero bs=1024 count=1 | hexdump -C | head -1
# 向 /dev/null 写入数据 (丢弃)
echo "This is a test" > /dev/null
/proc 是一个虚拟文件系统,它不是存储在磁盘上的物理文件,而是由内核动态生成的。它提供了关于系统进程、内存、硬件等信息的实时视图。通过读取 /proc 目录下的文件,可以获取系统内部的详细信息。
常见子目录和文件:
/proc/cpuinfo:CPU 信息。/proc/meminfo:内存信息。/proc/partitions:磁盘分区信息。/proc/pid:特定进程的信息(如 /proc/1 表示 init 进程)。/proc/self:指向当前进程的符号链接。示例: 查看 /proc 目录下的信息。
# 查看 /proc 目录内容 (简化输出)
ls /proc | head -10
# 查看 CPU 信息
cat /proc/cpuinfo | grep "model name"
# 查看内存信息
cat /proc/meminfo | grep MemTotal
# 查看当前进程的详细信息 (假设当前进程 ID 为 1234)
ls -l /proc/1234
代码示例: 获取当前进程信息。
# 获取当前进程的 PID
echo $$
# 查看当前进程的命令行参数
cat /proc/$$/cmdline | tr '\0' ' '
# 查看当前进程的状态
cat /proc/$$/status | grep "VmRSS"
/sys 目录也是一个虚拟文件系统,它提供了关于系统硬件、内核模块和设备驱动的详细信息。它与 /proc 类似,但更侧重于设备和硬件的结构化信息。
常见内容:
/sys/class:设备类信息。/sys/devices:设备信息。/sys/block:块设备信息。/sys/bus:总线信息。示例: 查看 /sys 目录下的硬件信息。
# 查看 /sys 目录内容 (简化输出)
ls /sys | head -10
# 查看系统中的块设备 (硬盘等)
ls /sys/block/
# 查看硬盘 sda 的信息
ls /sys/block/sda/
# 查看硬盘 sda 的型号
cat /sys/block/sda/device/model
代码示例: 获取系统信息。
# 查看系统中的 USB 设备
ls /sys/bus/usb/devices/
# 查看 CPU 核心数量
cat /sys/devices/system/cpu/present
# 查看内存大小
cat /sys/devices/system/memory/*/size
/tmp 目录用于存放临时文件。这些文件通常在系统重启后会被清除,也可以手动清理。它是用户和应用程序临时存储文件的地方,但不适合存放重要数据。
特点:
示例: 查看 /tmp 目录。
# 查看 /tmp 目录内容
ls -la /tmp
# 查看 /tmp 目录的权限
ls -ld /tmp
代码示例: 创建和清理临时文件。
# 在 /tmp 目录下创建一个临时文件
touch /tmp/my_temp_file.txt
# 查看临时文件
ls -l /tmp/my_temp_file.txt
# 删除临时文件
rm /tmp/my_temp_file.txt
/opt 目录用于安装第三方或可选的软件包。它为非系统自带的软件提供了一个标准化的安装位置,避免了与系统软件混合在一起。
特点:
示例: 查看 /opt 目录。
# 查看 /opt 目录内容
ls /opt
# 查看某个软件包的安装路径
ls -la /opt/java/
代码示例: 创建一个简单的 /opt 目录结构。
# 创建一个示例软件包目录
sudo mkdir -p /opt/myapp/{bin,lib,etc}
# 查看创建的目录
ls -la /opt/myapp/
/boot 目录包含了系统启动所需的文件,如内核镜像(vmlinuz)、初始 RAM 磁盘(initrd)和引导加载程序(如 GRUB)的配置文件。
常见文件:
vmlinuz-*:内核镜像。initrd.img-*:初始 RAM 磁盘。grub/:GRUB 引导加载程序配置文件。示例: 查看 /boot 目录内容。
# 查看 /boot 目录内容
ls /boot
# 查看内核镜像和初始化 RAM 磁盘
ls -l /boot/vmlinuz* /boot/initrd.img*
代码示例: 查看当前使用的内核版本。
# 查看当前内核版本
uname -r
# 查看 /boot 目录下与当前内核相关的文件
ls -l /boot/vmlinuz-$(uname -r) /boot/initrd.img-$(uname -r)
/mnt 和 /media 目录通常用作临时挂载点。它们用于挂载外部设备(如 USB 驱动器、CD/DVD、网络文件系统等)。
区别:
示例: 查看 /mnt 和 /media 目录。
# 查看 /mnt 目录 (可能为空)
ls /mnt
# 查看 /media 目录 (可能包含挂载的设备)
ls /media
# 挂载一个示例设备 (假设存在一个挂载点)
sudo mount /dev/sdb1 /mnt/test_mount
ls /mnt
代码示例: 挂载和卸载文件系统。
# 创建一个挂载点
sudo mkdir -p /mnt/example
# 查看当前挂载情况
mount | grep example
# 假设有一个虚拟磁盘设备 /dev/loop0
# sudo losetup /dev/loop0 /path/to/image.iso
# sudo mount /dev/loop0 /mnt/example
# 查看挂载情况
mount | grep example
# 卸载设备
sudo umount /mnt/example
/run 目录用于存放系统运行时产生的临时文件,如进程 ID 文件(PID 文件)、套接字文件等。它通常在系统启动时自动创建,并在系统关闭时被清除。
特点:
示例: 查看 /run 目录。
# 查看 /run 目录内容 (简化输出)
ls /run
# 查看 systemd 进程 ID 文件
ls -l /run/systemd/
代码示例: 查看系统运行时信息。
# 查看系统运行时间
cat /proc/uptime
# 查看系统启动时间
who -b
# 查看运行中的进程 (使用 /run 目录)
ls -l /run/systemd/
/srv 目录用于存放特定服务提供的数据。这是一个可选目录,用于存放服务相关的数据,如 Web 服务器内容、FTP 服务器文件等。
示例: 查看 /srv 目录。
# 查看 /srv 目录内容
ls /srv
# 查看 Web 服务目录
ls -la /srv/www/
代码示例: 创建一个简单的服务目录结构。
# 创建一个 Web 服务目录
sudo mkdir -p /srv/www/{css,js,images}
# 创建一个示例 HTML 文件
sudo tee /srv/www/index.html <<EOF
<!DOCTYPE html>
<html>
<head>
<title>My Service</title>
</head>
<body>
<h1>Welcome to My Service</h1>
</body>
</html>
EOF
# 查看创建的目录和文件
ls -la /srv/www/
Linux 系统的目录结构经过精心设计,遵循了 Filesystem Hierarchy Standard (FHS),确保了不同发行版之间的兼容性和一致性。理解并合理利用这些目录,对于 Linux 系统的日常管理和维护至关重要。
关键要点回顾:
/) 是起点:所有目录都从这里开始。/bin 和 /sbin 存放命令:分别是用户命令和系统管理命令。/lib 和 /lib64 存放库文件:程序运行时依赖的共享库。/etc 是配置中心:存放所有系统和服务的配置文件。/home 是用户空间:每个用户拥有自己的主目录。/usr 是用户程序宝库:包含大部分用户程序和数据。/var 是变化的数据中心:存放日志、缓存等经常变动的文件。/dev 是设备入口:通过特殊文件访问硬件设备。/proc 和 /sys 是虚拟文件系统:提供系统内部信息。/tmp 是临时文件区:存放临时数据。/opt 是可选软件安装区:第三方软件的独立安装位置。/boot 是启动文件区:包含内核和引导程序。/mnt 和 /media 是挂载点:临时挂载外部设备。/run 是运行时信息区:存放运行时状态文件。/srv 是服务数据区:存放特定服务的数据。最佳实践建议:
/home 和 /var 等目录预留足够的空间。/tmp:避免临时文件占用过多空间。/etc 目录:配置文件是系统稳定运行的关键,定期备份很重要。/bin、/sbin、/lib 等,修改可能导致系统无法启动。/var 目录:定期检查日志文件大小,防止磁盘空间被占满。希望这篇详细的目录结构详解能帮助您更好地理解和管理 Linux 系统。随着实践经验的积累,您将更加熟练地运用这些知识,成为一名出色的 Linux 系统管理员或开发者。
graph TD
Root[根目录 /] --> Core[系统核心目录]
Core --> Bin[/bin]
Core --> Sbin[/sbin]
Core --> Lib[/lib & /lib64]
Core --> Etc[/etc]
Core --> Boot[/boot]
Core --> Dev[/dev]
Core --> Proc[/proc]
Core --> Sys[/sys]
Core --> Run[/run]
Core --> Mnt[/mnt & /media]
Core --> Opt[/opt]
Core --> Srv[/srv]
Root --> User[用户与数据目录]
User --> Home[/home]
User --> Usr[/usr]
User --> Var[/var]
Root --> Temp[临时文件]
Temp --> Tmp[/tmp]

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online