首页 > 系统相关 >Linux文件系统的功能规划

Linux文件系统的功能规划

时间:2023-11-07 22:32:28浏览次数:24  
标签:文件 一个 文件系统 描述符 参数 Linux 规划 目录

对于运行的进程来说,内存就像一个纸箱子,仅仅是一个暂存数据的地方,而且空间有限。如果我们想要进程结束之后,数据依然能够保存下来,就不能只保存在内存里,而是应该保存在外部存储中。就像图书馆这种地方,不仅空间大,而且能够永久保存。

我们最常用的外部存储就是硬盘,数据是以文件的形式保存在硬盘上的。为了管理这些文件,我们在规划文件系统的时候,需要考虑到以下几点。

第一点,文件系统要有严格的组织形式,使得文件能够以块为单位进行存储。这就像图书馆里,我们会设置一排排书架,然后再把书架分成一个个小格子,有的项目存放的资料非常多,一个格子放不下,就需要多个格子来存放。我们把这个区域称为存放原始资料的仓库区。

第二点,文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置。这就好比,图书馆的书太多了,为了方便查找,我们需要专门设置一排书架,这里面会写清楚整个档案库有哪些资料,资料在哪个架子的哪个格子上。这样找资料的时候就不用跑遍整个档案库,在这个书架上找到后,直奔目标书架就可以了。

Linux文件系统的功能规划_文件系统

第三点,如果文件系统中有的文件是热点文件,近期经常被读取和写入,文件系统应该有缓存层。这就相当于图书馆里面的热门图书区,这里面的书都是畅销书或者是常常被借还的图书。因为借还的次数比较多,那就没必要每次有人还了之后,还放回遥远的货架,我们可以专门开辟一个区域,放置这些借还频次高的图书。这样借还的效率就会提高。

第四点,文件应该用文件夹的形式组织起来,方便管理和查询。这就像在图书馆里面,你可以给这些资料分门别类,比如分成计算机类、文学类、历史类等等。这样你也容易管理,项目组借阅的时候只要在某个类别中去找就可以了。

在文件系统中,每个文件都有一个名字,这样我们访问一个文件,希望通过它的名字就可以找到。文件名就是一个普通的文本。当然文件名会经常冲突,不同用户取相同的名字的情况还是会经常出现的。

要想把很多的文件有序地组织起来,我们就需要把它们成为目录或者文件夹。这样,一个文件夹里可以包含文件夹,也可以包含文件,这样就形成了一种树形结构。而我们可以将不同的用户放在不同的用户目录下,就可以一定程度上避免了命名的冲突问题。

Linux文件系统的功能规划_文件系统_02

有了目录结构,定位一个文件的时候,我们还会分绝对路径(Absolute Path)和相对路径(Relative Path)。所谓绝对路径,就是从根目录开始一直到当前的文件,例如“/ 根目录 / 用户 A 目录 / 目录 1/ 文件 2”就是一个绝对路径。而通过 cd 命令可以改变当前路径,例如“cd / 根目录 / 用户 A 目录”,就是将用户 A 目录设置为当前目录,而刚才那个文件的相对路径就变成了“./ 目录 1/ 文件 2”。

第五点,Linux 内核要在自己的内存里面维护一套数据结构,来保存哪些文件被哪些进程打开和使用。这就好比,图书馆里会有个图书管理系统,记录哪些书被借阅了,被谁借阅了,借阅了多久,什么时候归还。

当一个 Linux 系统插入了一块没有格式化的硬盘的时候,我们可以通过命令 fdisk -l,查看格式化和没有格式化的分区。

文件描述符,就是用来区分一个进程打开的多个文件的。它的作用域就是当前进程,出了当前进程这个文件描述符就没有意义了。open 返回的 fd 必须记录好,我们对这个文件的所有操作都要靠这个 fd,包括最后关闭文件。

在 Open 函数中,有一些参数:

  • O_CREAT 表示当文件不存在,创建一个新文件;
  • O_RDWR 表示以读写方式打开;
  • O_TRUNC 表示打开文件后,将文件的长度截断为 0。

write 要用于写入数据。第一个参数就是文件描述符,第二个参数表示要写入的数据存放位置,第三个参数表示希望写入的字节数,返回值表示成功写入到文件的字节数。

lseek 用于重新定位读写的位置,第一个参数是文件描述符,第二个参数是重新定位的位置,第三个参数是 SEEK_SET,表示起始位置为文件头,第二个参数和第三个参数合起来表示将读写位置设置为从文件头开始 0 的位置,也即从头开始读写。

read 用于读取数据,第一个参数是文件描述符,第二个参数是读取来的数据存到指向的空间,第三个参数是希望读取的字节数,返回值表示成功读取的字节数。

opendir 函数打开一个目录名所对应的 DIR 目录流。并返回指向 DIR 目录流的指针。流定位在 DIR 目录流的第一个条目。

readdir 函数从 DIR 目录流中读取一个项目,返回的是一个指针,指向 dirent 结构体,且流的自动指向下一个目录条目。如果已经到流的最后一个条目,则返回 NULL。

closedir() 关闭参数 dir 所指的目录流。

Linux文件系统的功能规划_文件系统_03

标签:文件,一个,文件系统,描述符,参数,Linux,规划,目录
From: https://blog.51cto.com/key3feng/8240269

相关文章

  • NETCore,离线部署Linux ,离线部署 libgdiplus
    背景错误信息:Unabletoloadsharedlibrary‘libgdiplus‘oroneofitsdependencies解析:libgdiplus是Linux支持Netcore的图形库,比如System.Drawing要用,在线安装都容易,离线就处理起来恶心了以下事爬坑记录,思路:在有网的Linux下载依赖包,然后再拷贝rmp包去离线服务器安装参......
  • linux print_hex_dump()
    linuxprint_hex_dump()linux/lib/hexdump.c/***print_hex_dump-printatexthexdumptosyslogforabinaryblobofdata*@level:kernelloglevel(e.g.KERN_DEBUG)*@prefix_str:stringtoprefixeachlinewith;*callersuppliestrailingspac......
  • Linux命令之用户管理
    Linux系统时多用户、多任务的分时操作系统,所以说对于多用户的管理也是十分重要的,每个用户都属于一个用户组或多个组,系统可以对一个用户组中的所有用户进行集中管理。组与组的控制权限时不同的,系统根据不同的需求,把用户分别放在不同的组中。1.id命令查看当前用户登录信息:[root@h......
  • Linux命令
    1、man查看帮助手册man-f 简要信息man+数字可以查看第几章man-kdisk搜索所有和disk有关的帮助手册 ......
  • Linux终端快捷键
    ctrl+b光标向后ctrl+f光标向前ctrl+a移到行首ctrl+e移到行末ctrl+p上一条命令ctrl+n下一条ctrl+d删除前一个字符ctrl+u删除光标前所有字符ctrl+k光标所在以及后面所有都删除 ctrl+y撤销删除tab补全敲击两次可以提示 ......
  • 网安--Linux文件
    Linux中万物皆文件,以文件的形式存在,配置、文档、U盘或者是都是以文件的形式存在的Linux操作系统没有分盘,以根目录开始,树状结构/root根目录下的目录介绍:/bin:存放最常用的使用命令/boot:存放启动Linux时使用的核心文件,包括一些镜像文件。/dev:该目录存放Linux的外部设备,在Linu......
  • linux第五周
    这周学了如何给centos7配置网络以及怎么连接xshell刚开始ping命令www.baidu.com一直ping不通,然后再网上找了教程,首先使用ipa命令查看了ens33网卡下面的ip地址,发现没有ip地址,使用cd/etc/sysconfig/net命令切换到当前目录,使用cd/etc/sysconfig/network-scripts命令切换到......
  • Linux-虚拟机配置网络
    第一步:安装完系统之后,在开启系统之前,点击“编辑虚拟机设置”来设置网卡模式。第二步:点击“网络适配器”,选择NAT模式第三步:设置虚拟机中NAT模式的选项,打开VMware,点击“编辑”下的“虚拟网络编辑器”,设置NAT参数及DHCP参数最后重启虚拟机!使用ping命令ping外网ip,测试能否......
  • linux分析日志
    查看日志tail-n-50021_12_17.log-f查找日志中指定内容cat21_12_17.log|grep'INFO:用户id:'去重统计结果,先排序cat21_12_17.log|grep'INFO:用户id:'|sort|uniq-c197INFO:用户id:8956412457INFO:用户id:354841260INFO:用户id:274569528152INFO:......
  • linux上防火墙操作
    防火墙操作1、开启防火墙systemctlstartfirewalld2、重启防火墙systemctlrestartfirewalld3、关闭防火墙systemctlstopfirewalld4、查看开放端口firewall-cmd--list-port5、开放某个端口firewall-cmd--add-port=8081/tcp--parmanentfirewall-cmdreload6、......