关于Linux文件系统
Posted 李建明180
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Linux文件系统相关的知识,希望对你有一定的参考价值。
前言
文件系统是在内核中实现,能够对存储在磁盘上的二进制数据进行有效的层次化管理的一种软件。而用户程序为了实现在磁盘上使用或者创建文件,向内核发起系统调用(实际由文件系统向内核发起的系统调用)并转换为对应磁盘设备的电气信号的请求(数据存储在硬盘上,用户的”0,1”代码信号数据转换成磁盘能识别的存储机制)。
MBR:主引导记录
分区信息放在主引导记录中,为了让操作系统能识别分区
MBR(512bytes):
1,bootloader(引导加载器):446bytes
2,fat(文件系统分配表):64bytes(16bytes一个分区,共4个分区)
3,5A(MBR有效性标记):2bytes
注:3个主分区,1扩展分区:引用额外的分区表–划分为逻辑分区
文件系统
特性:
文件系统通常将权限和属性放置于inode中,实际数据则放到data block中,还有一个超级块会记录整个文件系统的整体信息,包括inode和block的总量,使用量和剩余量
super block:记录此文件系统的整体信息,inode和block的总量,使用量和剩余量和文件系统的格式和相关信息
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件数据所在的block号码
block:实际记录文件内容,文件过大时,会占用多个block
基本功能是按文件名称实现存取,所以各文件系统的不同指内部存放读取文件(内部的实现细节)的格式不同。
注:计算器上,当两个层次不能结合时,就需要添加中间层
VFS:虚拟文件系统(中间层)
1,基本文件系统:Ext2,Ext3,Ext4,Reiserfs,xfs,JFS,vfat,NTFS
2,交换分区:Swap
3,集群文件系统:GFS2,OCFS2
4,网络文件系统:NFS,Smbfs(CIFS)
5,光盘文件系统:ISO9660
磁盘管理工具
fdisk查看磁盘分区列表以及实现磁盘分区管理
1 | Sector size (logical/physical): 512 bytes / 512 bytes |
1 | d:删除 |
kpartx|partx通知内核重读硬件设备的分区信息表
1 | -a:添加分区信息 |
1 | cat /proc/partitions: 查看分区信息 |
mke2fs创建ext文件系统
配置文件:/etc/mke2fs.conf
1 | -t 指定文件系统类型 {ext2|ext3|ext4} |
注:超级块中存放块组信息,块分配情况(有备份)
e2label创建ext文件系统
查看卷标和设定卷标
dumpe2fs查看块信息
1 | -h:仅查看超级块中保存的信息 |
tune2fs查看或调整ext文件系统信息
1 | -l:显示超级块信息 |
fsck|e2fsck检查修复文件系统的命令
1 | -t:指定文件系统 |
关于交换分区(虚拟内存)
注:交换分区格式化后内部的存储格式和内存一样,必须是单独分区
当物理内存容量过低时,把部分不经常使用数据置换到交换分区上,单位是页面(page),页面大小取决于cpu。
linux使用物理内存和交换分区的比例通过/proc/sys/vm/swapiness文件定义
mkswap 创建交换分区
1 | -L:指定label |
swapon|swapoff 启动和关闭交换分区
1 | -a:标记所有swap为启用状态 |
hdparm 读取或设置设备信息
1 | -i:从内核读取 |
文件信息查看 大专栏 关于Linux文件系统
1 | /proc/cpuinfo:cpu信息 |
mount|umount 挂载
创建完文件系统后,需要和当前系统上一个空闲目录关联起来,作为其访问入口
1 | mount [options] [-t fstype] [-o option] device 挂载点(空闲目录) |
注:挂载点挂载后,其原有目录下的文件或目录会被隐藏,卸载后能显示
注:内核启动时只挂着根文件系统所在分区,其他分区的文件系统
fuser
1 | -km 挂载点 踢出占用挂载设备的进程 |
df 磁盘空间使用状态报告
1 | -h:hunman-readable |
du 评估文件占用磁盘空间情况
1 | -sh:hunman-readable显示目录占用磁盘总大小 |
dd:更低级别的复制工具
1 | dd if=input_file of=out_file bs=#[b|k|m|g] count=# |
注:copy命令发起系统调用读取一个文件,在新位置创建新文件,把之前读取的文件数据写入到新的文件中;dd命令直接复制磁盘块到另一个位置
关于/etc/fstab
fstab文件中定义了文件系统挂载表,在系统初始化脚本/etc/rc.d/rc.sysinit中定义开机读取fstab
1 | # <file system> <mount point> <type> <options> <dump> <pass> |
文件链接
ln(ln SRC LINKFILE)
硬链接:
> 指向同一个inode号的两个不同路径(inode号指向不能跨分区)
> 不能对目录创建硬链接
> 硬链接会改变文件链接的次数
1 | -rw-r--r-- 1 root root 260 Jul 29 2015 backup-my.cnf |
软链接(符号链接):
> 符号链接文件内记录原文件的路径(**大小为路径的字符串数**)
> 可以跨分区
> 跟原文件不同一个inode
> 可以对目录创建符号链接
> 符号链接不会改变源文件被链接的次数
1 | lrwxrwxrwx 1 root root 7 Apr 5 2016 test1.sh -> test.sh |
压缩工具
gzip
zcat:不解压直接查看压缩文件原内容
后缀为(.gz)
1 | -d:解压缩[gunzip] |
bzip2(压缩比率比gzip大)
bzcat:不解压直接查看压缩文件原内容
后缀为(.bz2)
1 | -d:解压缩[bunzip2] |
xz(压缩比率最大)
xzcat:不解压直接查看压缩文件原内容
后缀为(.xz)
1 | -d:解压缩[unxz] |
zip|unzip:归档压缩工具(可以压缩目录)
tar:归档工具
1 | tar [option] -f file.tar pathname |
注:tar命令可以根据文件后缀在解压缩时自动调用相应的解压缩工具(-xf)
以上是关于关于Linux文件系统的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段