Linux目录结构与文件类型
Linux目录结构与文件类型
复习定位
Linux的目录树是单根结构——从根/开始向下散开。所有设备(硬盘、USB、终端)都挂载在目录树中的某个节点上。FHS标准规定了主要目录的用途——便于用户和管理员在不同发行版之间快速适应。文件类型中的设备文件、套接字等是Linux"一切皆文件"哲学的基础——普通I/O函数(open/read/write)可以操作设备文件。
FHS目录结构
| 目录 | 用途 | 备注 |
|---|---|---|
| /bin | 基本命令(ls,cp,cat) | 近年来大多发行版链接到/usr/bin |
| /sbin | 系统管理命令(fdisk,fsck) | 通常需要root权限执行 |
| /etc | 系统配置文件(passwd,fstab,ssh) | 纯文本——要定期备份 |
| /dev | 设备文件(sda,tty,random) | /dev/null黑洞写入丢弃——/dev/zero产生无限0字节 |
| /proc | 进程和内核信息(cpuinfo,meminfo) | 虚拟文件系统——反映内核数据结构 |
| /sys | 设备驱动信息(block/class) | 比/proc更结构化——用于修改内核参数 |
| /var | 可变数据(log,spool,cache) | 日志文件随运行时间快速增长需关注 |
| /tmp | 临时文件(重启后清空) | 所有用户可写——权限1777(粘滞位) |
| /home | 普通用户家目录 | 每个用户一个目录 |
| /boot | 引导文件(vmlinuz,initramfs,grub) | 系统启动必需的最小文件集 |
| /usr | 共享只读数据(bin,lib,share) | 用户程序和数据文件 |
| /opt | 第三方商业程序 | 非系统自带软件的安装位置 |
Linux文件类型
ls -l输出每一行第一个字符区分文件类型:
| 字符 | 类型 | 示例 |
|---|---|---|
| - | 普通文件 | ls -l /etc/passwd → -rw-r--r-- |
| d | 目录 | ls -l / → drwxr-xr-x |
| l | 符号链接 | ls -l /proc/mounts → lrwxrwxrwx(实际路径) |
| b | 块设备 | ls -l /dev/sda → brw-rw---- |
| c | 字符设备 | ls -l /dev/tty → crw-rw-rw- |
| s | 套接字 | find / -type s 可查UNIX域套接字 |
| p | 命名管道 | mkfifo fifo 创建 |
设备文件的"类型"字符告诉操作系统这个文件是对应块设备还是字符设备。块设备(如硬盘)以数据块为单位传输、可以随机访问——字符设备(如终端、串口)以字符流方式传输。对设备文件执行open/read/write——VFS将这个请求导向对应的设备驱动——最终操作硬件——这就是"一切皆文件"的落地实现。
文件权限位的深层含义
ls -l的第2-10位分三组:所有者/组/其他人。每组内三位——r读、w写、x执行。
文件上:
- r——可读文件内容(cat/less)
- w——可修改文件内容(vi/echo重定向)
- x——可作为程序执行(./script)
目录上:
- r——可列出目录内容(ls)
- w——可在目录中创建/删除文件(即使不是文件的所有者)——这是粘滞位保护的原因
- x——可进入该目录(cd)、访问目录内的文件(即使不能ls目录——只要知道文件名仍可打开)
复习检查
/proc/cpuinfo位于虚拟文件系统——它不对应磁盘上任何真实文件——为什么
cat /proc/cpuinfo可以立刻显示CPU信息——这些数据是谁在何时构造的?目录的x权限(执行)和r权限的区别——一个目录如果只有r权限没有x权限——可以执行ls查看目录内容吗(lInux限制——必须同时有r和x才能列出目录)?
设备文件b(块设备)和c(字符设备)的区别——为什么硬盘是块设备而键盘是字符设备——它们的读写传输单位分别是块和数据字节。
粘滞位(sticky bit)的用途——
/tmp权限显示为drwxrwxrwt——最后的t是粘滞位标识——粘滞位意味着即使是任何人都可以在/tmp下创建文件——但只能由root或文件所有者删除自己的文件——粘滞位保护文件不被其他用户任意删除。为什么普通文件权限通常设为644(rw-r--r--)而非777——因为大多数程序不需要执行权限——且目录需要x权限才能进入——所以目录的典型权限是755(rwxr-xr-x)。