楼层: 首页/ 软件技术/ Linux/ 文件系统与目录结构
02

文件系统与目录结构

Filesystem Hierarchy · FHS

Windows 是"每个盘一根树"(C:、D:、E:),Linux 是"全世界只有一棵树":从根目录 / 出发,所有硬盘、U盘、外接设备全都"挂载"进这棵树里。搞懂目录结构,你就不会在系统里迷路。

念"Linux 一切皆文件"

这句话是 Linux 的哲学。在 Linux 眼里,普通文件是文件、目录是文件、硬盘是文件、键盘和内存也是文件。你想跟设备打交道,很多时候就是去读它对应的那个"文件"(比如 /dev/sda 就是第一块硬盘)。统一了世界,命令自然就统一了。

FHS 标准:这棵树长什么样

所有人约定俗成的目录职责叫 FHS(文件系统层次标准)。不用背,混个眼熟,用到再回来查:

目录里面放什么(人话版)
/根目录,整棵树的起点。没有盘符,一切从这里出发。
/bin /sbin最基础的命令和管理员命令(ls、cp、shutdown)。现代系统多是指向 /usr/bin 的软链。
/etc系统和服务的配置文件全在这。改配置先来这翻,比如 /etc/ssh/sshd_config。
/home每个普通用户的家目录,/home/jianma、/home/bob。放你自己的文档、代码、下载。
/root超级用户 root 的家目录。注意它不在 /home 里,是个特殊户。
/var"会变"的数据:日志(/var/log)、数据库、网站文件、缓存。服务器出问题先来这看。
/usr安装的软件和共享资源:/usr/bin(命令)、/usr/lib(库)、/usr/share(文档图标)。像 Windows 的 Program Files。
/tmp临时文件,重启可能被清空,别往这放重要东西。
/opt"可选软件"的自留地,手动安装的大型第三方软件常放这。
/dev设备文件:/dev/sda 硬盘、/dev/null "黑洞"、/dev/random 随机数。一切皆文件的最佳展厅。
/proc /sys内存里的"虚拟文件系统":/proc/cpuinfo 看 CPU、/proc/meminfo 看内存。没占磁盘,是内核实时吐出来的。
/mnt /media挂载点:U盘、外接硬盘临时挂在这两个目录下。

整棵树长这样

/ ├── bin -> usr/bin # 基础命令 ├── etc/ # 配置文件集中地 │ ├── ssh/sshd_config │ └── nginx/nginx.conf ├── home/ │ └── jianma/ # 你的家目录 ├── var/ │ └── log/ # 日志 ├── usr/bin/ # 装的软件 ├── tmp/ # 临时,重启可能没 └── proc/ # 内核吐出来的硬件信息

绝对路径 vs 相对路径

绝对路径 → 从根 / 开始写
写法如 /home/jianma/doc/report.txt。不管你现在在哪,这条路径指向同一个文件。
什么时候用:写脚本、配置文件里,永远写绝对路径,免得"当前目录变了就找不到"。
相对路径 → 从当前目录出发
. 是当前目录、.. 是上一级、~ 是家目录。比如 ../doc 表示"上一级里的 doc"。
什么时候用:手工敲命令时图快。cd .. 就是回到上一层,每天用几百次。

用命令"逛"一遍这棵树

# 我在哪? pwd # 看看根目录里都有什么 ls / # 用绝对路径直接看别人的配置文件 ls /etc/ssh/ # 用相对路径:先回到家,再进 Documents cd ~ cd Documents cd .. # .. 表示上一级,回家了
$ pwd /home/jianma $ ls / bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var $ ls /etc/ssh/ ssh_config sshd_config ssh_host_rsa_key ...

inode:文件名背后的真相

文件实际存哪?每个文件有个 inode(索引节点),里面记着文件大小、权限、属主、数据块位置——唯独不记文件名。文件名只是目录里的一个"指向 inode 的标签"。这解释了两件事:为什么硬链接(第 3 章)改一个另一个也变;为什么 ls -i 能看到 inode 号。

看一眼 inode

# -i 显示 inode 号 ls -i report.txt stat report.txt
$ ls -i report.txt 132187 report.txt $ stat report.txt File: report.txt Size: 2048 Blocks: 8 IO Block: 4096 regular file Device: 8,2 Inode: 132187 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ jianma)
坑:把 Windows 的文件习惯搬过来

三个高频水土不服:① Linux 文件名严格区分大小写,Report.txt 和 report.txt 是两个文件;② 路径分隔符是正斜杠 /不是反斜杠;③ Linux 不靠后缀判断类型,file.txt 内容可能是张图片,用 file 命令看真身。

记
本章小结

① Linux 只有一棵树,根是 /;背不住目录没关系,记住 /etc 配置、/var/log 日志、/home 家目录、/proc 看硬件这四个高频区。

② 脚本里写绝对路径保证不出错,手敲用 . .. ~ 图快。

③ 文件 = inode(元数据)+ 数据块;文件名只是个标签,大小写敏感,不用后缀判类型。