Linux 的文件系统以 / 为根,把磁盘文件、设备节点和内核提供的虚拟信息统一挂到同一棵目录树中。理解目录用途,有助于安装软件、查配置、排错和判断哪些数据可以清理。
1. 内核、发行版和 Shell 的边界
跳转到“1. 内核、发行版和 Shell 的边界”Linux 严格说是内核;Ubuntu、Debian 等发行版把内核、工具、库、包管理器和配置组合成可使用的操作系统。Bash 等 Shell 是用户空间程序。应用通常经库调用或系统调用使用内核服务;库文件与根文件系统都不是内核本身。
查看环境时,区分发行版与内核:
cat /etc/os-release # 发行版标识,很多现代发行版提供uname -r # 内核版本uname -m # 机器架构lsb_release -a 需要安装相应工具;hostnamectl 常见于 systemd 系统。不能仅凭 uname 的内核版本判断 Ubuntu/Debian 的发行版版本。
2. 目录地图
跳转到“2. 目录地图”下面用文字取代容易失效的外链目录截图。目录约定以 FHS 3.0及Linux 的 hier(7) 手册为参考;具体发行版可能采用合并目录或附加路径。
/├── etc/ 主机配置├── home/ 普通用户的个人目录├── root/ root 用户的个人目录├── usr/ 程序、库、头文件、文档等│ ├── bin/ 可执行程序│ ├── sbin/ 系统管理程序│ ├── lib/ 库及程序内部文件│ ├── share/ 与体系结构无关的数据│ └── local/ 本机管理员安装的软件├── var/ 持久且可变的数据│ ├── lib/ 应用状态、数据库等│ ├── log/ 日志│ └── cache/ 可重建缓存├── run/ 本次启动期间的运行状态├── tmp/ 临时文件├── boot/ 启动相关文件├── dev/ 设备节点├── proc/ 进程和内核信息虚拟文件系统├── sys/ 内核对象、设备与驱动信息├── opt/ 附加软件包├── srv/ 本机提供的服务数据├── media/ 可移动介质挂载点└── mnt/ 临时挂载点/bin、/sbin、/lib 在传统布局中分别存放基础命令、管理命令和基础库;现代发行版中可能是指向 /usr 下相应目录的符号链接。/usr 不是用户主目录,用户文档通常位于 /home/<用户名>。
目录名也不是权限规则:普通用户可以运行某些 /sbin 工具,root 也可以运行 /bin 命令。某项操作能否成功取决于文件权限、进程身份、能力及其他安全策略。
3. 常见配置文件应该怎样理解
跳转到“3. 常见配置文件应该怎样理解”| 路径 | 用途与边界 |
|---|---|
/etc/passwd | 用户账户信息;通常不是密码正文的保存位置 |
/etc/shadow | 受限访问的密码散列及账户期限信息;散列不等同于可逆加密 |
/etc/group | 组及成员信息 |
/etc/fstab | 文件系统及交换空间的静态挂载配置 |
/etc/mtab | 当前挂载信息;不少系统把它链接到 /proc 中的挂载视图 |
/etc/issue、/etc/motd | 登录前提示和登录消息,实际显示受登录程序配置影响 |
/etc/profile | Bourne 兼容 Shell 登录环境的系统级初始化入口 |
/etc/shells | 系统认可的登录 Shell 列表,部分工具据此校验 |
/etc/login.defs | 账户管理工具使用的默认策略;并非全部认证策略的唯一位置 |
/etc/magic | file 类型识别规则可能使用的位置,实际数据库路径由发行版决定 |
原笔记中的 /etc/inittab、/etc/rc.d 主要涉及传统 init 布局;systemd 系统通常使用 unit。/etc/fdprm 是历史软盘参数文件,/etc/printcap 是传统打印配置,/etc/securetty 是否生效取决于登录/认证栈。看到这些路径缺失时,不应直接判断系统损坏。
4. 持久数据、临时数据与虚拟数据
跳转到“4. 持久数据、临时数据与虚拟数据”/var/lib往往保存服务的真实状态,可能含数据库;体积大不代表可删除。/var/cache按约定放可再生成的缓存,但清理仍应优先用对应应用或包管理器的方法。/tmp的保留策略由系统决定;/var/tmp一般用于需要跨重启保留的临时文件,不能假定两者相同。/run常见为易失运行目录,PID、套接字等文件可能正被服务使用。/proc、/sys是虚拟文件系统,展示运行时状态;它们并不简单对应同等大小的磁盘文件。其中部分节点可写,写入会改变系统行为。/dev里的设备节点是访问设备的接口,并不是设备内容的普通副本。lost+found常见于 ext 系列文件系统,供文件系统修复时重新连接孤立对象;不是每次异常关机都会自动出现恢复文件。/selinux是旧布局;现代系统常通过/sys/fs/selinux暴露 SELinux 接口,是否存在取决于内核与挂载配置。
5. Bash 的 profile 与 bashrc
跳转到“5. Bash 的 profile 与 bashrc”需要先判断是 登录 Shell、交互式非登录 Shell,还是脚本使用的 非交互式 Shell。
| 启动方式 | Bash 默认读取规则 |
|---|---|
| 登录 Shell | 先读 /etc/profile,再按顺序检查 ~/.bash_profile、~/.bash_login、~/.profile,只读第一个存在且可读的文件 |
| 交互式非登录 Shell | 读取 ~/.bashrc;发行版也可能通过配置加入系统级文件 |
| 普通非交互式脚本 | 不按上面两种规则自动读全部配置;可通过 BASH_ENV 指定初始化文件 |
登录配置可以显式加载 .bashrc,于是一次登录会间接读取两个文件。图形终端、SSH、bash -l 的行为取决于实际启动参数和配置;不能用“打开终端一定读某个文件”来概括。Bash 以 sh 名称运行、POSIX 模式或远程命令场景还有专门规则,见 Bash 启动文件文档。
可用以下只读命令辅助判断当前 Bash:
printf 'shell options: %s\n' "$-" # 含 i 表示交互式shopt -q login_shell && printf 'login shell\n'printf 'Bash version: %s\n' "$BASH_VERSION"需要修改环境变量时,先明确变量应在哪些进程中生效,再选择配置位置;修改文件不会自动改变已经运行的全部进程。
6. 从问题反查目录
跳转到“6. 从问题反查目录”| 要解决的问题 | 先查看 |
|---|---|
| 程序从哪里启动 | command -v 程序名,再检查符号链接和包归属 |
| 配置保存在哪里 | 程序手册、/etc、用户配置目录 |
| 磁盘为何增长 | 挂载点占用、应用数据、日志和缓存分别统计 |
| 进程/驱动当前状态 | 服务管理器、/proc、/sys 的相应只读信息 |
| 登录环境为何与脚本不同 | Shell 启动类型、初始化文件、环境变量继承 |
目录层次是定位线索。最终应结合程序配置和实际挂载关系判断文件用途,不能仅凭目录名字决定清理。