linux 文件在磁盘上的表示
基本构成
分区就是把磁盘像比萨饼一样切成大小一样的扇形, 当然分区大小不一样扇形的大小也就不一样
上下一串盘片中,相同半径的磁道所组成的一个圆柱型的环壁,就称为柱面
在柱面组中, 比较重要的两个结构是:i节点集合和数据块集合
i节点和数据块
数据块集合是由大小固定的数据块组成, 在很多系统中数据块的大小为4K
以4K为例, 如果一个文件的大小是12K,那么它会占用3个数据块
读取三个数据块就可以知道文件的内容, 可是我们要如何知道这三个数据块的位置?
如果三个数据块不是连在一起而是东一块西一块又该如何?
i节点的作用就是记录文件的数据块数量和数据块在磁盘上的位置的
不仅如此,i节点还包含文件的其它属性信息,文件属性struct stat的内容便是来自于i节点
读取文件内容
每个i节点都有一个号码, 操作系统用不同的号码来识别不同的文件
文件读取: 当我们打开一个文件读取时, 系统找到文件名对应的i节点, 然后通过i节点找到数据块, 再把文件内容拼凑出来
文件夹读取: 就是读取一系列目录项(dirent), 每个目录项由两部分组成: a.文件或文件夹的名称 b.该文件名对应的i节点
链接
引用计数: 当有很多指针都需要访问同一块内存的数据时, 我们记下来当前在访问的指针总数, 来一个就把总数加1, 当有指针调用free操作时, 我们不释放这块内存, 只是把刚刚记下的总数减一, 直到最后一个指针调用free时才真正把内存释放掉
硬链接: 引用计数在磁盘文件上同样适应, 那个总数保存i节点中. 对一个已存在的文件执行link操作, 生成一个新的文件, 新旧文件都指向同一个i节点, 删除新旧文件中的一个只是把i节点中的链接总数减一, 并不会删除数据块.
软链接: 与硬链接相对. 像windows系统中的快捷方式, 不会增加链接总数, 依赖于原先的旧文件
如果i节点中硬链接总数减为0时, 就会释放对应的数据块, 但数据块内容不会被立即擦除, 这些数据块原先被i节点保护不会被系统随意征用, 现在可以被系统重新分配给其它程序使用, 在未重新分配给其它程序写入内容之前, 我们还是可以通过技术恢复数据块内容的.
文件的复制和删除
复制: 在不跨分区的情况下, 文件复制只是多了一个别名, 然后对应的i节点链接总数加1.
删除: 对应的i节点链接总数减1, 如果是最后一个链接就释放数据块.
linux 文件在磁盘上的表示的更多相关文章
- Linux 文件读写操作与磁盘挂载
文件读写 [文件描述符] Linux下,通常通过open打开一个文件,它然后返回给我们一个整数,通过这个整数便可以操作文件,这个整数我们称文件描述符(fd).对应被打开的文件,它也是一种系统资源,那么 ...
- 十二、文件和目录——Linux文件系统结构
12.1 Linux文件系统结构 12.1.1 文件操作基本元素 文件操作相关的最基本元素是:目录结构,索引节点和文件的数据本身 目录结构(目录项) 索引节点(i 节点) 文件的数据 12.1.2 文 ...
- linux文件 面试知识
1. 文件存储结构 Linux正统的文件系统(如ext2.ext3)中,一个文件由目录项.inode和数据块组成. 目录项:包括文件名和inode节点号. inode:又称文件索引节点, ...
- Linux文件IO操作函数概述
文件概述 Linux中,一切皆文件.文件为操作系统服务和设备提供了一个简单而一致的接口.这意味着程序完全可以像使用文件那样使用磁盘文件.串行口.打印机和其他设备. 也就是说,大多数情况下,你只需要使用 ...
- linux下的磁盘和文件系统管理
一.硬盘分区知识 1.分区类型 硬盘分区一共有3种:主分区.扩展分区和逻辑分区.扩展分区只不过是逻辑分区的“容器”,实际上只有主分区和逻辑分区进行数据存储.在一块硬盘上最多只能有4个主分区,可以另外建 ...
- Linux查看文件以及磁盘空间大小管理(转)
(1)查看文件大小 查看当前文件夹下所有文件大小(包括子文件夹) du -sh # du -h15M ./package16K ./.fontconfig4.0K . ...
- 如何将本地大文件通过终端上传到linux服务器
第一种方式: SecureCRT下 上传文件只需在shell终端仿真器中输入命令“rz”,即可从弹出的对话框中选择本地磁盘上的文件,利用Zmodem上传到服务器当前路径下. 下载文件只需在s ...
- 如何将本地文件通过终端上传到linux服务器或从linux主机下载文件到本地
第一种方式: SecureCRT下上传文件只需在shell终端仿真器中输入命令“rz”,即可从弹出的对话框中选择本地磁盘上的文件,利用Zmodem上传到服务器当前路径下.下载文件只需在shell终端仿 ...
- Linux文件访问流程及磁盘inode和block总结
Linux文件访问流程 inode是文件的唯一标识,文件名和inode的对应关系存放在上一级目录的block中:inode里有指向文件block的指针和文件的属性,从而通过block获得文件数据. 磁 ...
随机推荐
- c++ 的几种强制转换的讨论
http://www.cnblogs.com/jerry19880126/archive/2012/08/14/2638192.html static_cast : 同 c 的强制转换类似: rei ...
- 实用技术——Eclipse 常用快捷键
Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率. 和编辑相关的快捷键 Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户编 ...
- 使用 mina 传输大字节数组
转载自:http://seara520.blog.163.com/blog/static/16812769820103214817781/ 使用mina传输超过2k以上的数据时(采用tcp方式,如果是 ...
- jq使用手册
jq 使用手册 翻译整理:Young.J 官方网站:http://jquery.com jQuery是一款同prototype一样优秀js开发库类,特别是对css和XPath的支持,使我们写 ...
- Java Lock
JVM中的另一种锁Lock的实现.与synchronized不同的是,Lock完全用Java写成,在java这个层面是无关JVM实现的.在java.util.concurrent.locks包中有很多 ...
- 【Linux】gdb调试core文件
编写服务器端程序,很容易遇到Crash问题,比较幸运的是Linux提供了core file,保留了Crash的现场.有时候,根据当前的调用栈,并且打印出当前栈的变量就可以分析出crash的原因,但是, ...
- ASP.NET 状态的传递和保存
1,HTTP协议是无状态的.服务器不会记住上次给浏览器的处理结果,如果需要上次处理结果(上次状态)就需要浏览器把处理结果值(上次状态)再次给服务器. 2,URL传值:通过URL参数或者通过Form表单 ...
- 基于AE连通性分析
曾经做管线连通性分析,总觉得ARCGIS应该有现成的方案可以实现,但最终没有找到,后来只好自己写了套代码,但在搜索过程中找到了这样一估代码,当时留了下来,那我现在也把它留下来. Dim pLayer ...
- Android异步下载网络图片
最近新做的一个项目,里面需要下载网络上的图片,并显示在UI界面上,学Android有个常识,就是Android中在主线程中没法直接更新UI的,要想更新UI必须另外开启一个线程来实现,当开启的线程完成图 ...
- Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口
package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...