清空文件

清空文件 在处理服务器磁盘占用时, 比如有比较大的日志文件, 服务还在运行, 所以文件是不能删的, 又因为文件太大了不适合用文本编辑器打开, 比如 vi 之类, 想清空文件就要用以下方法了. BTW: 删除一个正在使用的文件是另外一个问题… wiloon.com/deleteonwrite truncate truncate -s 0 foo.log -s 0 表示将文件大小设置为 0 字节,即清空文件内容。也可以指定其他大小,truncate 从文件末尾截断,保留开头部分(即最旧的数据): truncate -s 100M foo.log # 保留前 100MB(最旧的数据) truncate -s 1G foo.log # 保留前 1GB truncate -s 500K foo.log # 保留前 500KB 如果想保留最新的 100MB,需要用 tail: tail -c 100M foo.log > foo.log.tmp && mv foo.log.tmp foo.log truncate 可被用来将一个文件缩小或者扩展到某个给定的大小。 你可以利用它和 -s 参数来特别指定文件的大小。要清空文件的内容, 则在下面的命令中将文件的大小设定为 0 本命令缩减或扩充指定文件的大小为指定值。 参数所指定的文件如果不存在, 那么该命令会创建这个文件。 如果一个文件的大小比参数指定的大, 那么超出的部分就会被丢弃。 如果一个文件比参数指定的小, 那么文件会被扩充, 并且被扩充的部分 (空洞) 在被读取的时候是字节0。 ...

Created 7076-05-07 · Updated 7076-05-07 · 4 min · 789 words · -

inode

inode An inode stores all the information about a regular file, directory, or other file system object, except its data and name. 每个文件都对应一个 inode, inode 存储了除文件名和文件内容之外的所有信息。 inode (发音: eye-node) 译成中文就是索引节点, 它用来存放文件和目录的基本信息, 包含时间、档名、使用者,群组,权限, 一个文件占用一个inode,同时记录此文件的数据所在的 block 号码; http://www.ruanyifeng.com/blog/2011/12/inode.html inode是什么? inode是一个重要概念, 是理解 Unix/Linux 文件系统和硬盘储存的基础。 我觉得,理解 inode, 不仅有助于提高系统操作水平, 还有助于体会 Unix 设计哲学, 即如何把底层的复杂性抽象成一个简单概念, 从而大大简化用户接口。 下面就是我的inode学习笔记,尽量保持简单。 理解inode 作者: 阮一峰 inode是什么? Inode 用于存储文件或目录的信息. 理解inode, 要从文件储存说起。 扇区 (Sector) 文件储存在硬盘上, 硬盘的最小存储单位叫做"扇区" (Sector) 。每个扇区储存 512 字节。(现在新的硬盘每个扇区有4K) 注意:硬盘的最小存储单位就是扇区了,而且硬盘本身并没有 block 的概念。 ...

Created 27276-04-27 · Updated 27276-04-27 · 4 min · 702 words · -

文件存储和删除的过程

查找文件 通过文件名打开文件时,通过文件名先找到对应的inode,然后通过inode找到文件内容所在的block来读取数据。 文件存储和删除的过程 https://blog.csdn.net/MyySophia/article/details/107696414 创建文件 /tmp/a.txt 首先从 inode table 中找一个空闲的 inode 号分配给 a.txt,例如 2222。再将 inode map(imap) 中 2222 这个 inode 标记为已使用。 在 /tmp 的 data block 中添加一条 a.txt 文件的记录。该记录中包括一个指向 inode 的指针,例如 “0x2222”。 然后从 block map (bmap) 中找出空闲的 data block,并开始将 a.txt 中的数据写入到 data block 中。每写一段空间 ( ext4 每次分配一段空间 ) 就从 bmap 中找一次空闲的 data block, 直到存完所有数据。 设置 inode table 中关于 2222 这条记录的 data block 指针, 通过该指针可以找到 a.txt 使用了哪些 data block。 删除文件的过程 /tmp/a.txt 在 inode table 中删除指向 a.txt 的 data block 指针。这里只要一删除,外界就找不到 a.txt 的数据了。但是这个文件还存在,只是它是被"损坏"的文件,因为没有任何指针指向数据块。 在 imap 中将 2222 的 inode 标记为未使用。于是这个 inode 就被释放,可以被后续的文件重用。 删除父目录 /tmp 的 data block 中关于 a.txt 的记录。 这里只要一删除,外界就看不到也找不到这个文件了。 在 bmap 中将 a.txt 占用的 block 标记为未使用。这里被标记为未使用后,这些 data block 就可以被后续文件覆盖重用。 考虑一种情况,当一个文件被删除时,但此时还有进程在使用这个文件,这时是怎样的情况呢?外界是看不到也找不到这个文件的,所以删除的过程已经进行到了第 3 步。但进程还在使用这个文件的数据,也能找到这个文件的数据,是因为进程在加载这个文件的时候就已经获取到了该文件占用哪些 data block,虽然删除了文件,但 bmap 中这些 data block 还没有标记为未使用。 ...

Created 23236-04-23 · Updated 23236-04-23 · 1 min · 120 words · -

VFS

VFS Linux 采用 Virtual Filesystem(VFS)的概念,通过内核在物理存储介质上的文件系统和用户之间建立起一个虚拟文件系统的软件抽象层,使得 Linux 能够支持目前绝大多数的文件系统,不论它是 windows、unix 还是其他一些系统的文件系统,都可以挂载在 Linux 上供用户使用。 VFS 在 Linux 中是一个处理所有 unix 文件系统调用的软件层,同时给不同类型的文件系统提供一个统一的接口。VFS 支持以下归类的三种类型的文件系统: 磁盘文件系统,存储在本地磁盘、U盘、CD等的文件系统,它包含各种不同的文件系统格式,比如 windows NTFS、VFAT,BSD 的 UFS,CD的 CD-ROM 等 网络文件系统,它们存储在网络中的其他主机上,通过网络进行访问,例如 NFS 特殊文件系统,例如 /proc、sysfs 等 VFS 背后的思想就是建立一个通用的文件模型,使得它能兼容所有的文件系统,这个通用的文件模型是以 Linux 的文件系统 EXT 系列为模版构建的。每个特定的文件系统都需要将它物理结构转换为通用文件模型。例如,通用文件模型中,所有的目录都是文件,它包含文件和目录;而在其他的文件类型中,比如 FAT,它的目录就不属于文件,这时,内核就会在内存中生成这样的目录文件,以满足通用文件模型的要求。同时,VFS 在处理实际的文件操作时,通过指针指向特定文件的操作函数。可以认为通用文件模型是面向对象的设计,它实现了几个文件通用模型的对象定义,而具体的文件系统就是对这些对象的实例化。通用文件模型包含下面几个对象: superblock 存储挂载的文件系统的相关信息 inode 存储一个特定文件的相关信息 file 存储进程中一个打开的文件的交互相关的信息 dentry 存储目录和文件的链接信息 https://wushifublog.com/2020/05/22/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3Linux%E5%86%85%E6%A0%B8%E2%80%94%E2%80%94VFS/ VFS并不是一种实际的文件系统,它只存在于内存中,不存在任何外存空间,VFS在系统启动时建立,在系统关闭时消亡。 VFS由超级块、inode、dentry、vfsmount等结构来组成。

Created 25256-02-25 · Updated 25256-02-25 · 1 min · 49 words · -