关键词:
Linux 基础知识 | 文件系统
前言
Linux
的传统的文件系统为Ext2(Linux second extended file system,ext2fs)
,在传统的磁盘和文件系统中,
一个分区就只能被格式化为一个文件系统,所以可以说成一个filesystem就是一个分区,但是由于新技术的利用。这些
技术可以将一个分区格式化为多个文件系统。所以,通常我们称呼一个可被挂载的数据为一个文件系统而不是一个分区。
Ext2文件系统
在Linux
系统中,一个文件除了文件的实际数据内容之外,还包含着非常多的属性,比如文件的权限和属性等,文件系统通常会将这两部分数据分别存到不同的区块,权限和属性放置到inode
中,实际数据则放置在data block
中。此外还有一个超级区块super block
记录了整个文件系统的信息,包括inode
和block
的总量、使用量、剩余量等。这3个概念的解释如下:
superblock
: 记录文件系统的整体信息,包括inode/block
的总量、使用量、剩余量,以及文件系统的格式与相关信息inode
: 记录文件的属性,一个文件占用一个inode
,同时记录此文件的数据所在的block号码。block
: 实际记录文件的内容,若文件太大时,会占用多个block(当你输入ll
命令时,第一行显示的total xx
则表示该目录占用的block块的个数 * block size
)
block 相关知识
文件系统在格式化的时候就已经将inode
和block
规划好了,其中block
是用来存放数据的地方,在ext2文件系统中所支持的block
大小有1k,2k以及4k。由于block
大小的差异,会对系统的文件有一些限制:
- 最大单一文件大小限制:如果
block
是1kb
,则单一文件最大的大小支持为16GB
,2kb
支持的最大为256GK
。4kb
支持的最大为2TB
- 最大文件系统总量限制:
1kb
的block
支持2TB
的最大容量,2kb
的block
支持8TB
的最大容量,4kb
支持16TB
最大容量 block
的大小和数量在安装系统前的格式化磁盘就已经决定,无法更改,除非重新格式化- 每个
block
最多存放一个文件的数据。 - 如果文件大小大于
block
,则一个文件会占用多个block
数量 - 如果文件大小小于
block
,则该block
的剩余容量则不能够再使用(磁盘空间会浪费)
可以通过一下命令查看操作系统的block size
(只适用于ext2、ext3、ext4
的文件系统)
# 列出挂载点
df -h
# 根据上一个命令中的挂载点查看block size
tune2fs -l /dev/sda3 |grep -i 'block size'
inode 相关知识
inode
记录的数据有如下几部分:
- 该文件的存取模式
- 该文件的拥有者与群组
- 该文件的容量
- 该文件创建时间或状态改变时间
- 该文件最近一次读取时间
- 该文件最近修改时间
- 该文件真正内容的指向
inode
的数量和大小也是在格式化的时候已经固定,除此之外,inode
还有以下特点:
- 每个
inode
大小固定为128B
(新的ext4
和xfs
可设置到256B
) - 每个文件占用一个
inode
- 文件系统能创建的文件数量以
inode
数量有关 - 系统读取文件的时候,要先找到
inode
,并分析inode
所记录的权限与使用者是否符合,若符合才能开始读block的内容
super block
相关知识
super block
记录着整个文件系统的相关信息,记录了block
与inode
的总量和大小。同时保存了一份inode
和block的对照表,用来记录inode是否已经被使用,已经block
是否为空(可以存数据),通过这些信息可以知道文件应该存在那个地方。
系统目录组成
当我们在Linux
下的文件系统创建一个目录是,文件系统会分配一个inode
和至少一个block
给该目录,如果想要观察某个文件的inode
号码,可以通过输入ll -i
命令来查看。
下面查看根目录的inode
号码
[root@xxx info]# ls -lid /
2 dr-xr-xr-x. 21 root root 4096 Mar 13 11:47 /
如上,查看了根目录的inode
的编号为2。而且可以看到该文件占用大小4096
。由此我们可以猜测该文件系统的block
块大小为4k
。
ext2
文件系统的局限性在于写入数据错误的时候,系统启动恢复的时候需要检查磁盘花费大量时间,所以就有了ext3、
这类日志式文件系统。这些文件系统优化了数据一致性的保障功能,通过日志的方式,可以很快速的检查是否有文件错误。
ext4
挂载点
一个文件系统需要挂载到主机上的某个目录才可以工作。一个目录树可以挂载多个文件系统,而linux
支持很多文件系统,当我们访问某个目录的时候,有可能在目录路径中挂载的文件系统不同,此时会有一个一个Linux VFS(Virtual Filesystem Switch)
的功能帮我们自动切换文件系统。
XFS文件系统
ContOs 7
开始,默认的文件系统由Ext4
改成了XFS
。XFS
几乎兼容Ext4
所有的功能,但是为什么要使用XFS
呢?这是因为
Ext
系列的文件系统在格式化大容量硬盘的时候需要划分inode
以及block
等需要花费大量时间。而XFS
文件系统基本上就是为了适应大容量磁盘的文件系统。XFS
也是采用inode
和block
的文件内容分布方式,但是inode
和block
并不是在格式化磁盘的时候指定的,他是根据创建文件的时候动态计算的。所以速度相对比较快,至于XFS
比较深入一点的知识这里就不介绍了。
操作文件系统
列出文件系统磁盘使用量
命令:df
参数:
a
列出所有文件系统k
以KB
输出大小m
以MB
输出大小h
以人类易读的格式输出H
以M = 1000K
取代M = 1024K
的方式显示T
连同分区的文件系统名称列出i
以inode
的数量来显示文件大小
# 查看 /usr 目录的文件系统
[root@xxxx info]# df -T /usr
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/xvda1 ext4 103079200 19937072 77882972 21% /
# 查看容量使用情况
[root@xxx info]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 99G 20G 75G 21% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 1.6M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 783M 0 783M 0% /run/user/0
显示文件数量
命令: du
默认情况下,这个命令会列出系统总共的文件个数。这个命令有如下参数:
a
列出某个目录的文件以及所占用的空间大小h
以人类易读的格式输出s
列出总量S
不包括子目录的容量k
以KB
输出大小m
以MB
输出大小
linux基础io(代码片段)
目录系统文件IOopenwritereadclose文件描述符fdFILE重定向使用dup2系统调用文件系统磁盘磁盘和内存交互磁盘的分区与格式化Ext2文件系统的存储方案inode软硬链接软连接硬链接文件的三个时间系统文件IOopenopen接口的作用是打开文件。... 查看详情
linux基础知识|文件属性以及权限(代码片段)
Linux基础知识|文件属性以及权限本文为笔者学习Linux笔记内容。参考了以下文章:Linux文件基本属性Linux操作系统是一种多用户系统,不同的用户对某个文件拥有不同的权限。文件属性在Linux中使用ll命令来显示文件的属性[... 查看详情
linux系统安装与实验基础(代码片段)
...题)Centos7虚拟机的安装gcc编译器vim编辑器介绍4.控制文件和目录的存取权限。修改文件权限5.Linux下存储设备的挂载与卸载的方法。挂载卸载方法写在最前面:本文是Linux的基础操作。大家要明白的一个东西是:路径。... 查看详情
linux下的基础io(代码片段)
目录一.C语言文件IO操作(库函数)1.打开文件fopen 2.写入二进制文件fwrite和读取二进制文件fread3.关闭文件fclose 二.系统文件IO(系统调用接口)1.打开文件open系统调用2.读文件read和写文件write3.关闭文件close 三.文件描述符1.系统管理... 查看详情
嵌入式基础(代码片段)
...录操作网络一些命令入门LinuxGCCMakefile函数通用Makefile使用文件IO系统调用函数怎么进入内核?Linux软件架构Linux启动过程如何理解Bootloader与Kernel文件系统概念虚拟文件系统、根文件系统和文件系统VFS:根文件系统其他文件系统ub... 查看详情
嵌入式基础(代码片段)
...录操作网络一些命令入门LinuxGCCMakefile函数通用Makefile使用文件IO系统调用函数怎么进入内核?Linux软件架构Linux启动过程如何理解Bootloader与Kernel文件系统概念虚拟文件系统、根文件系统和文件系统VFS:根文件系统其他文件系统ub... 查看详情
linux学习-linux系统及编程基础笔记(代码片段)
useraddzhangsanpasswdzhangsanvisudo往/etc/sudoers文件中添加zhangsan#visudo找到如下的行rootALL=(ALL)ALL往该行下面添加zhangsanzhangsanALL=(ALL)ALL2.2Linux的基本结构一些根文件系统中较为重要的二级目录:①/boot:存放系统引导时所需的文件... 查看详情
linux入门基础io(代码片段)
基础IO✔回顾C文件的接口✔系统文件I/O✔文件描述符文件描述符的分配规则重定向✔FILE缓冲区fclose和close✔dup2系统调用✔理解文件系统inode硬链接软链接文件的三个时间✔回顾C文件的接口在学习C语言时我们了解了一些C语言的对... 查看详情
linux入门基础io(代码片段)
基础IO✔回顾C文件的接口✔系统文件I/O✔文件描述符文件描述符的分配规则重定向✔FILE缓冲区fclose和close✔dup2系统调用✔理解文件系统inode硬链接软链接文件的三个时间✔回顾C文件的接口在学习C语言时我们了解了一些C语言的对... 查看详情
常用linux命令大全(100%收藏食用❤️)(代码片段)
“明智的放弃胜过盲目的执着。”一、基础知识二、基础操作三、目录操作四、文件操作五、文件权限六、打包与解压七、其他常用命令八、系统管理“博主肝文章的分格一贯是先看小姐姐再写干货”一、基础知识1.1Linux系统的... 查看详情
常用linux命令大全(100%收藏食用❤️)(代码片段)
“明智的放弃胜过盲目的执着。”一、基础知识二、基础操作三、目录操作四、文件操作五、文件权限六、打包与解压七、其他常用命令八、系统管理“博主肝文章的分格一贯是先看小姐姐再写干货”一、基础知识1.1Linux系统的... 查看详情
linux操作系统基础i/o(代码片段)
文章目录1.文件操作1.1写入文件1.2读取文件1.3打开文件的方式1.4stdin、stdout、stderr2.系统文件I/O2.1打开文件2.2写入文件2.3读取文件2.4关闭文件3.文件描述符fd3.1简述3.2关闭fd=1的情况3.3关闭fd=0的情况3.4验证C库FILE结构体内部封... 查看详情
linux基础io(代码片段)
文章目录一.C文件IO相关操作二.系统文件IOopen函数返回值重定向使用dup2系统调用给简易shell中增加重定向功能理解文件系统理解软硬链接三.动态库和静态库制作动静态库一.C文件IO相关操作只有文件名但不带路径的话,默认在... 查看详情
linux基础io(代码片段)
文章目录一.C文件IO相关操作二.系统文件IOopen函数返回值重定向使用dup2系统调用给简易shell中增加重定向功能理解文件系统理解软硬链接三.动态库和静态库制作动静态库一.C文件IO相关操作只有文件名但不带路径的话,默认在... 查看详情
linux文件系统与基础io(代码片段)
文件的宏观理解1⃣️文件在哪里呢?“狭义”上在磁盘,“广义”上一切皆文件。主要研究“狭义”,磁盘为外设,那么对文件的所有操作,本质都是对外设的输入输出,简称IO2⃣️文件是什么?空文... 查看详情
linux基础命令---exportfs管理挂载的nfs文件系统(代码片段)
exportfs exportfs主要用于管理当前NFS服务器的文件系统。 此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora。 1、语法 /usr/sbin/exportfs [-avi] &nbs 查看详情
linux基础基础i/o(代码片段)
文章目录4.文件系统4.1磁盘4.2inode4.3软/硬链接5.文件的ACM6.动静态库4.文件系统4.1磁盘文件=文件内容+文件属性笼统的讲磁盘是我们计算机中的一个机械设备(SSD等等除外)磁盘写入的基本单位是:扇区站在操作系... 查看详情
linux基础命令,目录文件操作,vi编辑器详解(代码片段)
一、linux基础命令linux命令的执行必须依赖于shell命令解释器。shell实际上是在linux系统中运行的一种特殊程序,它位于操作系统内核与用户之间,负责接收用户输入的命令并进行解释,将需要执行的操作传递给系统内核执行,shell... 查看详情