linux基础知识|文件系统(代码片段)

_wangjianfeng _wangjianfeng     2022-12-06     755

关键词:

Linux 基础知识 | 文件系统

前言

Linux的传统的文件系统为Ext2(Linux second extended file system,ext2fs),在传统的磁盘和文件系统中,
一个分区就只能被格式化为一个文件系统,所以可以说成一个filesystem就是一个分区,但是由于新技术的利用。这些
技术可以将一个分区格式化为多个文件系统。所以,通常我们称呼一个可被挂载的数据为一个文件系统而不是一个分区。

Ext2文件系统

Linux系统中,一个文件除了文件的实际数据内容之外,还包含着非常多的属性,比如文件的权限和属性等,文件系统通常会将这两部分数据分别存到不同的区块,权限和属性放置到inode中,实际数据则放置在data block中。此外还有一个超级区块super block 记录了整个文件系统的信息,包括inodeblock的总量、使用量、剩余量等。这3个概念的解释如下:

  • superblock: 记录文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息
  • inode: 记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。
  • block: 实际记录文件的内容,若文件太大时,会占用多个block(当你输入ll命令时,第一行显示的total xx则表示该目录占用的block块的个数 * block size)

block 相关知识

文件系统在格式化的时候就已经将inodeblock规划好了,其中block是用来存放数据的地方,在ext2文件系统中所支持的block大小有1k,2k以及4k。由于block大小的差异,会对系统的文件有一些限制:

  • 最大单一文件大小限制:如果block1kb,则单一文件最大的大小支持为16GB2kb支持的最大为256GK4kb支持的最大为2TB
  • 最大文件系统总量限制:1kbblock支持2TB的最大容量,2kbblock支持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(新的ext4xfs可设置到256B)
  • 每个文件占用一个inode
  • 文件系统能创建的文件数量以inode数量有关
  • 系统读取文件的时候,要先找到inode,并分析inode所记录的权限与使用者是否符合,若符合才能开始读block的内容

super block相关知识

super block记录着整个文件系统的相关信息,记录了blockinode的总量和大小。同时保存了一份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改成了XFSXFS几乎兼容Ext4所有的功能,但是为什么要使用XFS呢?这是因为
Ext系列的文件系统在格式化大容量硬盘的时候需要划分inode以及block等需要花费大量时间。而XFS文件系统基本上就是为了适应大容量磁盘的文件系统。XFS也是采用inodeblock的文件内容分布方式,但是inodeblock并不是在格式化磁盘的时候指定的,他是根据创建文件的时候动态计算的。所以速度相对比较快,至于XFS比较深入一点的知识这里就不介绍了。

操作文件系统

列出文件系统磁盘使用量

命令:df

参数:

  • a 列出所有文件系统
  • kKB输出大小
  • mMB输出大小
  • h 以人类易读的格式输出
  • HM = 1000K取代M = 1024K的方式显示
  • T 连同分区的文件系统名称列出
  • iinode的数量来显示文件大小
# 查看 /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 不包括子目录的容量
  • kKB输出大小
  • mMB输出大小

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... 查看详情