wiki/运维/Linux/笔记/8.文件管理.md
2026-04-08 19:40:00 +08:00

340 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 1、文件管理概览
Linux 文件管理主要围绕以下几个方面展开:
- 目录结构与路径
- 文件类型与 inode
- 常见目录和文件操作命令
- 文件状态与时间戳
- 通配符与链接文件
这些内容是后续学习权限、查找、文本处理、磁盘管理的基础。
**补充一点:** 每打开一个文件进程通常都会占用一个文件描述符fd
## 2、Linux 目录结构
Linux 文件系统采用**单根倒置树状结构**,一切都从根目录 `/` 开始。
- 单个文件名通常最长 255 字节
- 整个路径通常最长 4096 字节左右(不同系统实现可能略有差异)
### 2.1 绝对路径与相对路径
#### 绝对路径
从根目录 `/` 开始写起的完整路径,例如:
```shell
/etc/passwd
```
#### 相对路径
相对于当前工作目录的位置,例如:
```shell
../logs/app.log
```
### 2.2 常见目录说明
- `/`:根目录
- `/boot`:引导文件、内核、引导加载器相关文件
- `/bin`:基本用户命令
- `/sbin`:基本系统管理命令
- `/lib`:基础共享库和内核模块
- `/lib64`64 位系统库文件目录
- `/etc`:系统配置文件
- `/home/USERNAME`:普通用户家目录
- `/root`root 用户家目录
- `/media`:可移动设备挂载点
- `/mnt`:临时挂载点
- `/dev`:设备文件目录
- `/opt`:第三方软件安装目录
- `/srv`:服务相关数据
- `/tmp`:临时文件目录
- `/usr`:共享只读程序和数据
- `/usr/bin`:大量用户命令
- `/usr/lib`:库文件
- `/usr/include`C 头文件
- `/usr/share`:共享数据
- `/usr/local`:本地手工安装软件目录
- `/var`:经常变化的数据
- `/var/cache`:缓存数据
- `/var/lib`:应用状态数据
- `/var/log`:日志文件
- `/var/run``/run`:运行时数据,如 PID 文件
- `/var/spool`:队列和缓冲池数据
- `/var/tmp`:重启后可能保留的临时文件
- `/proc`:内核和进程信息的伪文件系统
- `/sys`:内核设备和驱动信息
## 3、目录常用操作命令
### 3.1 `pwd`
```shell
pwd
```
示例:
```shell
root@lzc:~# pwd
/root
```
- `pwd` 用于显示当前工作目录
- 常和环境变量 `PWD` 对应
### 3.2 `cd`
用于切换目录。
常见用法:
- `cd -`:回到上一次所在目录
- `cd ..`:进入父目录
- `cd .`:当前目录
- `cd ~`:当前用户家目录
- `cd -P`:按物理路径切换,避免符号链接影响
### 3.3 `ls`
用于列出目录内容。
常见选项:
- `-a`:显示隐藏文件
- `-l`:显示详细信息
- `-R`:递归显示
- `-X`:按扩展名排序
- `-S`:按文件大小排序
- `-h`:配合 `-l` 以易读单位显示大小
### 3.4 `tree`
用于以树状结构显示目录。
常见选项:
- `-d`:只显示目录
- `-L`:限制显示层级
### 3.5 `mkdir`
用于创建目录。
常见选项:
- `-p`:递归创建
- `-m`:创建时直接指定权限
### 3.6 `rmdir`
用于删除空目录。
常见选项:
- `-p`:递归删除空目录
## 4、Linux 文件基础
### 4.1 文件类型
`ls -l` 输出中,第一列第一个字符表示文件类型:
- `-`:普通文件
- `d`:目录
- `l`:符号链接
- `b`:块设备文件
- `c`:字符设备文件
- `p`:管道文件
- `s`:套接字文件
### 4.2 inode 是什么
inodeindex node可以理解为文件的“元数据记录”。
它通常保存的信息包括:
- inode 编号
- 文件类型
- 权限
- UID
- GID
- 链接数
- 文件大小
- 时间戳
- 指向数据块的指针
目录本质上也是特殊文件它记录了“文件名”和“inode 编号”的对应关系。
### 4.3 `cp` 和 `rm` 与 inode 的关系
#### 执行 `cp`
通常会发生:
- 分配新的 inode
- 创建新的目录项
- 复制数据块内容
因此复制后的文件通常拥有**不同 inode**。
#### 执行 `rm`
通常会发生:
- 删除目录项
- 减少链接计数
- 当链接数归零时释放 inode 和数据块
## 5、文件状态与时间戳
### 5.1 `stat`
```shell
stat 1.txt
```
示例:
```shell
root@lzc:~# stat 1.txt
File: 1.txt
Size: 210 Blocks: 8 IO Block: 4096 regular file
Device: fc02h/64514d Inode: 556125 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-12-05 23:55:07.813678618 +0800
Modify: 2023-12-05 23:55:07.005686767 +0800
Change: 2023-12-05 23:55:07.005686767 +0800
Birth: 2023-12-04 23:44:39.861025975 +0800
```
### 5.2 三个常见时间
- `atime`:访问时间,读取文件内容时更新
- `mtime`:修改时间,文件内容变化时更新
- `ctime`:变更时间,元数据变化时更新,例如权限、属主、链接数变化
## 6、文件名通配符
通配符常用于批量匹配文件名:
- `*`:匹配 0 个或多个字符,不包含隐藏文件开头的 `.`
- `?`:匹配任意单个字符
- `~`:当前用户家目录
- `~-`:上一个工作目录
- `[0-9]`:匹配一个数字
- `[a-z]`:匹配一个小写字母
- `[A-Z]`:匹配一个大写字母
- `[abc]`:匹配列表中的任一字符
- `[^abc]`:匹配不在列表中的任一字符
- `[:digit:]`:数字字符类
- `[:lower:]`:小写字母字符类
- `[:upper:]`:大写字母字符类
## 7、常见文件操作命令
### 7.1 `touch`
用于创建空文件或更新时间戳。
- `-a`:仅修改访问时间
- `-m`:仅修改修改时间
### 7.2 `cp`
用于复制文件和目录。
常见选项:
- `-i`:覆盖前提示
- `-n`:不覆盖已有文件
- `-r``-R`:递归复制目录
- `-a`:尽量保留原属性进行归档复制
- `-b`:覆盖前创建备份文件
### 7.3 `mv`
用于移动文件或重命名。
- `-b`:覆盖前先备份
### 7.4 `rename`
用于批量重命名。
示例:
```shell
rename 'old' 'new' *
```
不同发行版的 `rename` 实现可能略有差异,实际使用前最好先看帮助文档。
### 7.5 `rm`
用于删除文件或目录。
常见选项:
- `-i`:交互确认
- `-f`:强制删除
- `-r`:递归删除
## 8、链接文件 `ln`
### 8.1 硬链接
硬链接本质上是让多个文件名指向同一个 inode。
特点:
- inode 相同
- 删除其中一个名字,不代表数据立刻消失
- 不能对目录创建硬链接(通常如此)
- 一般不能跨文件系统
### 8.2 软链接
软链接类似快捷方式。
创建方式:
```shell
ln -s 源文件 软链接名
```
特点:
- inode 不同
- 保存的是目标路径
- 可以跨文件系统
- 原文件删除后,软链接会失效
### 8.3 删除软链接的注意点
```shell
rm -rf /data
```
如果 `/data` 是软链接,这样通常只会删除软链接本身。
```shell
rm -rf /data/
```
如果路径末尾带 `/`,可能会把链接目标目录中的内容删掉,操作时一定要格外小心。
## 9、小结
- Linux 文件系统从根目录 `/` 开始组织
- 绝对路径和相对路径是最基础的路径概念
- `pwd``cd``ls``mkdir``rm``cp``mv` 是最常用的文件操作命令
- inode 记录的是文件元数据,不等于文件名本身
- `stat` 可用于查看文件详细状态和时间戳
- 硬链接和软链接的差异是高频面试和实战知识点