1 文件系统目录结构
1.1 文件系统目录结构
- 文件系统的目录结构成树形结构
- 一切文件的路径起点都是从根目录开始,用 / 表示
- 文件名大小写敏感
- 以 . 开头的文件都是隐藏文件
- 路径通过 / 进行分割
- 不同颜色的文件,它的类型是不同的
- 每个文件都有两类数据:元数据和数据,元数据存放的是文件的属性信息,数据存放的是文件里的内容
1.2 常见的文件系统目录功能
1.3 文件类型
通过下面命令查看文件类型,其中列出的信息中第一个字符表示文件类型。
Linux系统中的七种文件类型:
文件类型 | 标识符 | 说明 |
普通文件 | - | file |
目录文件 | d | directory |
符号链接文件 | l | link |
字符设备文件 | c | character |
块设备文件 | b | block |
管道文件 | p | pipe |
套接字文件 | s | socket |
范例:
2 文件操作命令
2.1 绝对路径和相对路径
绝对路径:
- 以根 / 开始的都是绝对路径
- 描述的是一个文件存放的完整位置
- 任何时候都可以通过绝对路径找到文件
相对路径:
- 不以 / 开始的都是相对路径
- 描述的是文件以某个目录位置为参考的路径
- 可以快速找到文件所在位置
相关命令:(写脚本可能会用到)
范例:
2.2 显示当前工作目录
范例:
2.3 更改目录
命令说明:
2.4 列出目录内容
命令说明:
范例:
注意:ls -l 看到的文件大小不一定是文件实际占用的大小
2.5 查看文件状态
命令说明:
范例:
2.6 确定文件内容
命令说明:
范例一:判断文件类型
范例二:Linux的文件格式与windows的文件格式
- 首先判断文件类型,并以ASCII编码的十六进制格式查看文件内容的区别
- 将Linux格式的文件转换为windows格式的文件
- 将windows格式的文件转换为Linux格式的文件
2.7 创建空文件
命令说明:
范例:
2.8 创建空目录
命令说明:
范例:
2.9 文件通配符
文件通配符是用来匹配文件名的,与后面要学到的正则表达式有区别,正则表达式是用来匹配字符串的,也就是筛选数据信息。某些通配符与正则表达式的符号相同,功能也相同,但不是全部。与之相比正则表达式更为强大。
常见的文件通配符:
Linux中预定义的通配符:
范例:
2.10 复制文件
命令说明:
范例:
2.11 移动文件或重命名
命令说明:
范例:移动或重命名文件
范例:批量重命名
2.12 删除文件
命令说明:
范例:
3 文件元数据和节点表结构
3.1 inode表结构
在Linux中,一切皆文件:
- 每个文件分为两部分:元数据部分和具体内容数据部分
- 文件的元数据和具体内容数据在磁盘分区上是分开存放的
- 存储文件元数据的区域叫inode,中文译作“索引节点”
- 每个文件都有一个inode和n(n>=1)个block数据块,inode存储文件元数据,数据块存储文件具体内容数据
我们所说的inode存放的元数据,所谓元数据就例如:
- inode编号
- 文件类型
- 权限
- 属主属组
- 链接数
- 文件大小
- 文件的各种时间戳
- 指向具体block数据库的指针
- 等等
以上概念引入到磁盘中:
- 磁盘在格式化时,系统自动将磁盘分为两个区域
- 一个是inode区,用来存放文件的inode
- 一个是数据区,分成很多个block(块),用来存放文件具体内容数据
- 一个磁盘分区上有多少个inode和多少个block,由系统决定,跟文件系统,磁盘分区大小,数据块大小有关
- inode编号可重复使用,当删除一个文件后,其inode编号会被回收,以供下次新文件使用
目录是特殊文件
- 目录文件的内容保存了此目录中文件的列表以及inode编号的对应关系
- 文件引用的是inode号
- 目录是目录下的文件名和文件inode号之间的映射
查看磁盘分区利用率:
范例:
3.2 软硬链接
3.2.1 硬链接
硬链接的要点:
创建硬链接的命令:
范例:
3.2.2 软链接
软链接的要点:
创建软链接的命令:
范例:
3.2.3 软硬链接的区别总结
区别 | 硬链接 | 软链接 |
本质 | 与源文件是同一个文件 | 与源文件不是同一个文件 |
跨设备 | 不支持 | 支持 |
inode号 | 相同 | 不同 |
链接数 | 每创建一个硬链接,链接数加一,反之 | 创建或删除,链接数不变 |
文件夹 | 不支持 | 支持 |
文件类型 | 与源文件类型相同 | 链接文件 |
删除源文件 | 不影响硬链接文件的访问 | 影响软链接文件的访问 |
文件大小 | 与源文件大小相等 | 等于链接路径的字符长度 |
相对路径 | 源文件的相对路径是相对于当前工作目录路径 | 源文件的相对路径是相对于链接文件的目录路径 |
3.3 生产案例
3.3.1 inode资源用完
案例:如下图提示空间满 No space left on device,但 df 可以看到空间还有很多,为什么,怎么解决?
案例环境准备:
案例分析:
解决办法:
3.3.2 大文件的正确删除方式
案例:如下图提示空间已满或快满了,使用rm命令删除很大的无用文件后,df 命令仍然看到空间不足,为什么如何解决?
案例环境准备:
范例分析:
解决办法:
4 IO重定向和管道
4.1 标准输入和输出
Linux系统中有三个最基本的IO设备
- 标准输入设备(stdin):对应终端键盘,对应的设备文件是/dev/stdin -> /proc/self/fd/0
- 标准正确输出设备(stdout):对应终端显示器,对应的设备文件是/dev/stdout -> /proc/self/fd/1
- 标准错误输出设备(stdout):对应终端显示器,对应的设备文件是/dev/stderr -> /proc/self/fd/2
范例:查看标准输入和输出设备信息
4.2 IO重定向
4.2.1 标准正确输出和标准错误输出重定向
相关符号:
范例:覆盖操作符(重定向)
范例:追加操作符
范例:将标准正确输出和标准错误输出重定向到不同文件中
4.2.2 标准输入重定向
相关符号:
说明:< 经常和一些支持标准输入的命令使用,例如cat,cat命令的本身支持标准输入,直接执行cat命令的效果就是你在键盘输入什么,cat程序就打印什么。
范例:
相关命令:
范例:
4.2.3 多行重定向
多行重定向一般用于在脚本中编辑多行配置文件
输入多行重定向的格式:
范例:
4.3 管道
管道同标准输入一样需要结合命令来使用,管道的含义就是将前一个命令的标准正确输出作为后一个命令的标准输入a。所有的命令都会在当前的shell进程的子进程中进行。
管道的符号:
范例:
相关命令:
范例: