Linux文件系统目录有什么用?

news2024/10/6 1:36:43

学习文件系统的意义在于文件系统有很多设计思路可以迁移到实际的工作场景中,比如:

  1. MySQL 的 binlog 和 Redis AOF 都像极了日志文件系统的设计;
  2. B Tree用于加速磁盘数据访问的设计,对于索引设计也有通用的意义。
    特别是近年来分布式系统的普及,学习分布式文件系统,也是理解分布式架构最核心的一个环节。其实文件系统最精彩的还是虚拟文件系统的设计,比如 Linux 可以支持每个目录用不同的文件系统 。这些文件看上去是一个个目录和文件,实际上可能是磁盘、内存、网络文件系统、远程磁盘、网卡、随机数产生器、输入输出设备等,这样虚拟文件系统就成了整合一切设备资源的平台。大量的操作都可以抽象成对文件的操作,程序的书写就会完整而统一,且扩展性强。从 Linux 的目录结构和用途开始,带你认识 Linux 的文件系统。Linux 所有的文件都建立在虚拟文件系统(Virtual File System ,VFS)之上,如下图所示:

在这里插入图片描述
当你访问一个目录或者文件,虽然用的是 Linux 标准的文件 API 对文件进行操作,但实际操作的可能是磁盘、内存、网络或者数据库等。因此,Linux 上不同的目录可能是不同的磁盘,不同的文件可能是不同的设备

分区结构

在 Linux 中,/是根目录。每个目录可以是不同的文件系统(不同的磁盘或者设备)。/是对应一个磁盘还是多个磁盘呢?在/创建目录的时候,目录属于哪个磁盘呢?
在这里插入图片描述
可以用df -h查看上面两个问题的答案,在上图中我的/挂载到了/dev/sda3上。如果你想要看到更多信息,可以使用df -T,如下图所示:

/的文件系统类型是ext4。这是一种常用的日志文件系统。
在这里插入图片描述
可能还有一个疑问,/dev/sda3究竟是一块磁盘还是别的什么?这个时候你可以用fdisk -l查看,结果如下图:
在这里插入图片描述
可以看到我的 Linux 虚拟机上,有一块 30G 的硬盘(当然是虚拟的)。然后这块硬盘下有3 个设备(Device):/dev/sda1, /dev/sda2 和 /dev/sda3。在 Linux 中,数字 1~4 结尾的是主分区,通常一块磁盘最多只能有 4 个主分区用于系统启动。主分区之下,还可以再分成若干个逻辑分区,4 以上的数字都是逻辑分。例如:/dev/sda2和/dev/sda5是主分区包含逻辑分区的关系。

挂载

分区结构最终需要挂载到目录上。上面例子中/dev/sda3分区被挂载到了/下。 这样在/创建的文件都属于这个/dev/sda3分区。 另外,/dev/sda3采用ext4文件系统。可见不同的目录可以采用不同的文件系统。
将一个文件系统映射到某个目录的过程叫作挂载(Mount)。当然这里的文件系统可以是某个分区、某个 USB 设备,也可以是某个读卡器等。你可以用mount -l查看已经挂载的文件系统。
在这里插入图片描述
上图中的sysfsprocdevtmpfstmpfsext4都是不同的文件系统,下面我们来说说它们的作用。

  • sysfs让用户通过文件访问和设置设备驱动信息。
  • proc是一个虚拟文件系统,让用户可以通过文件访问内核中的进程信息。
  • devtmpfs在内存中创造设备文件节点。
  • tmpfs用内存模拟磁盘文件。
  • ext4是一个通常意义上我们认为的文件系统,也是管理磁盘上文件用的系统。
    可以看到挂载记录中不仅有文件系统类型,挂载的目录(on 后面部分),还有读写的权限等。可以用mount指令挂载一个文件系统到某个目录,比如说:mount /dev/sda6 /abc。这个命令将/dev/sda6挂载到目录abc。

目录结构

因为 Linux 内文件系统较多,用途繁杂,Linux 对文件系统中的目录进行了一定的归类,如下图所示
在这里插入图片描述
最顶层的目录称作根目录, 用/表示。/目录下用户可以再创建目录,但是有一些目录随着系统
创建就已经存在。
/bin(二进制)包含了许多所有用户都可以访问的可执行文件,如 ls, cp, cd 等。这里的大多数程序都是二进制格式的,因此称作bin目录。bin是一个命名习惯,比如说nginx中的可执行文件会在 Nginx 安装目录的 bin 文件夹下面。
/dev(设备文件) 通常挂载在devtmpfs文件系统上,里面存放的是设备文件节点。通常直接和内存进行映射,而不是存在物理磁盘上。值得一提的是其中有几个有趣的文件,它们是虚拟设备。
/dev/null是可以用来销毁任何输出的虚拟设备。你可以用>重定向符号将任何输出流重定向到/dev/null来忽略输出的结果。
/dev/zero是一个产生数字 0 的虚拟设备。无论你对它进行多少次读取,都会读到 0。
/dev/ramdom是一个产生随机数的虚拟设备。读取这个文件中数据,你会得到一个随机数。你不停地读取这个文件,就会得到一个随机数的序列。
/etc(配置文件),/etc名字的含义是and so on……,也就是“等等及其他”,Linux 用它来保管程序的配置。比如mysql通常会在/etc/mysql下创建配置。再比如说/etc/passwd是系统的用户配置,存储了用户信息。
/proc(进程和内核文件) 存储了执行中进程和内核的信息。比如你可以通过/proc/1122目录找到和进程1122关联的全部信息。还可以在/proc/cpuinfo下找到和 CPU 相关的全部信息。
/sbin(系统二进制) 和/bin类似,通常是系统启动必需的指令,也可以包括管理员才会使用的指令。
/tmp(临时文件) 用于存放应用的临时文件,通常用的是tmpfs文件系统。因为tmpfs是一个内存文件系统,系统重启的时候清除/tmp文件,所以这个目录不能放应用和重要的数据。
/var (Variable data file,,可变数据文件) 用于存储运行时的数据,比如日志通常会存放在/var/log目录下面。再比如应用的缓存文件、用户的登录行为等,都可以放到/var目录下,/var下的文件会长期保存。
/boot(启动) 目录下存放了 Linux 的内核文件和启动镜像,通常这个目录会写入磁盘最头部
的分区,启动的时候需要加载目录内的文件。
/opt(Optional Software,可选软件) 通常会把第三方软件安装到这个目录。以后你安装软件的时候,可以考虑在这个目录下创建。
/root(root 用户家目录) 为了防止误操作,Linux 设计中 root 用户的家目录没有设计在/home/root下,而是放到了/root目录。
/home(家目录) 用于存放用户的个人数据,比如用户lagou的个人数据会存放到/home/lagou下面。并且通常在用户登录,或者执行cd指令后,都会在家目录下工作。 用户通常会对自己的家目录拥有管理权限,而无法访问其他用户的家目录。
/media(媒体) 自动挂载的设备通常会出现在/media目录下。比如你插入 U 盘,通常较新版本的 Linux 都会帮你自动完成挂载,也就是在/media下创建一个目录代表 U 盘。
/mnt(Mount,挂载) 我们习惯把手动挂载的设备放到这个目录。比如你插入 U 盘后,如果Linux 没有帮你完成自动挂载,可以用mount命令手动将 U 盘内容挂载到/mnt目录下。
/svr(Service Data,,服务数据) 通常用来存放服务数据,比如说你开发的网站资源文件(脚本、网页等)。不过现在很多团队的习惯发生了变化, 有的团队会把网站相关的资源放到/www目录下,也有的团队会放到/data下。总之,在存放资源的角度,还是比较灵活的。
/usr(Unix System Resource) 包含系统需要的资源文件,通常应用程序会把后来安装的可执行文件也放到这个目录下,比如说

  • vim编辑器的可执行文件通常会在/usr/bin目录下,区别于ls会在/bin目录下
  • /usr/sbin中会包含有通常系统管理员才会使用的指令。
  • /usr/lib目录中存放系统的库文件,比如一些重要的对象和动态链接库文件。
  • /usr/lib目录下会有大量的.so文件,这些叫作Shared Object,类似windows下的
    dll文件。
  • /usr/share目录下主要是文档,比如说 man 的文档都在/usr/share/man下面

总结

不少程序员把程序装到了/home目录,也看到过不少程序员将数据放到了/root目录。这样做并不会带来致命性问题,但是会给其他和你一起工作的同事带来困扰。这些规范是整个世界通用的,如果每个人都能遵循规范的原则,工作起来就会有很好的默契。登录一台linux服务器,你可以通过目录结构快速熟悉。你可以查阅/etc下的配置,看看/opt下装了什么软件,这就是规范的好处。
socket 文件都存在哪里?
socket 没有实体文件,只有 inode,所以 socket 是没有名字的文件。socket 没有实体文件,只有 inode,所以 socket 是没有名字的文件。
在这里插入图片描述
可以用lsof -i -a -p [pid查找某个进程的 socket 使用情况。下面结果和用ls/proc/[pid]/fd看到的 fd 是一致的,如下图所示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java|golang】1010. 总持续时间可被 60 整除的歌曲

在歌曲列表中&#xff0c;第 i 首歌曲的持续时间为 time[i] 秒。 返回其总持续时间&#xff08;以秒为单位&#xff09;可被 60 整除的歌曲对的数量。形式上&#xff0c;我们希望下标数字 i 和 j 满足 i < j 且有 (time[i] time[j]) % 60 0。 示例 1&#xff1a; 输入&…

【LangChain】如何本地部署基于chatGPT的实时文档和表格数据的助手,在自己的数据上构建chatGPT?

【LangChain】如何本地部署基于chatGPT的实时文档和表格数据的助手&#xff0c;在自己的数据上构建chatGPT 1 相关技术 &#xff08;1&#xff09;LangChain 是一个用于自然语言处理的 Python 库&#xff0c;它的目标是尝试简化自然语言处理任务&#xff0c;提高处理效率和准…

渲染对电脑伤害大吗_如何减少渲染伤机?

虽然说摄影穷三代&#xff0c;但想要自己的本地配置跟上自己的创作速度&#xff0c;高昂的硬件配置支出也可以让自己穷一段时间。CG制作过程中&#xff0c;渲染是必不可少的一步&#xff0c;而且这一步也是很吃“机器”的&#xff0c;那很多人也会担心&#xff0c;如果经常用自…

如何构建产品帮助中心?

据研究表明超过50%的互联网用户&#xff0c;更愿意使用网站中的自助服务支持去解决产品使用中的问题。那么这个时候在线帮助中心&#xff08;即在线帮助页面&#xff09;&#xff0c;就满足了用户这个需求。 在线帮助中心是一个丰富的知识库&#xff0c;可以指导企业的潜在客户…

asp.net+sqlserver漫画绘本借阅管理系统

摘 要1 第1章 系统概述5 1.1 研究背景5 1.2 研究的意义5 1.3 主要研究内容5 第2章 系统开发环境7 2.1 ASP.NET概述7 2.2 动态网站技术介绍8 2.3 数据库技术8 第3章 需求分析9 3.1 需求分析9 3.1.1 功能需求9 3.2 可行性分析9 3.2.1 可行性分析9 3.2.2 技术可行性9 3.2.3 运行可…

OpenCV4 学习指导1 —— Mat:最基本的图像容器

Mat: CV基本的数据结构 1、认识数字图像2、CV的发展历程3、Mat的基本结构3.1、Mat—浅拷贝3.2、Mat—深拷贝 4、颜色的表示方法5、创建Mat对象方法集合5.1、Mat类的常用成员函数5.2、Mat类的成员函数举例 6、Mat的输出样式7、Point 数据存储结构8、参考资源 1、认识数字图像 我…

Yolov8改进---注意力机制:Polarized Self-Attention,效果秒杀CBAM、SE

1. Polarized Self-Attention 论文:https://export.arxiv.org/pdf/2107.00782.pdf Polarized self-attention是一种改进的自注意力机制,旨在提高自注意力模型的效率和准确性。传统的自注意力机制通常需要计算所有位置对所有位置的注意力,这会导致计算复杂度的增加和模型的训…

君子签:助力高校毕业、就业协议电子签,打通就业最后一公里

据介绍&#xff0c;2023届全国普通高校毕业生规模预计达1158万人&#xff0c;同比增加82万人。毕业季即将来临&#xff0c;全国各大高校毕业、就业材料签署压力大&#xff0c;盖章需求激增&#xff0c;如何快捷、高效地处理各类毕业、就业材料签署问题呢&#xff1f; 在教育部…

间隔损失函数

度量损失&#xff1a; Contrastive Loss 核心含义&#xff1a;同类的样本要更近&#xff0c;不同类的样本要更远 正样本不用管&#xff0c;把负样本分开就行&#xff0c;最小化损失函数就是最大化决策边界和负样本的距离 Triplet Loss Triplet Loss是一种用于训练深度学习中…

7-2 哈利·波特的考试

哈利波特要考试了&#xff0c;他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha&#xff0c;将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念&#xff0c;例如ahah可以将老鼠变成猫。另外&…

git的学习2

文章目录 一、Git 创建仓库二、Git 基本操作1总结 一、Git 创建仓库 git init Git 使用 git init 命令来初始化一个 Git 仓库&#xff0c;Git 的很多命令都需要在 Git 的仓库中运行&#xff0c;所以 git init 是使用 Git 的第一个命令。 在执行完成 git init 命令后&#xf…

Opencascad开发(C#)-建模-反向片体(SheetBody)的法向矢量

文章目录 1、前言2、在UG NX中构建一个片体3、在UG NX中查看片体的法向矢量4、采用UFun函数来实现法向反向5、代码实现6、测试效果1、前言 在UG NX中,一张曲面获取其所属的片体(SheetBody)对象,其在构建时有默认的法向矢量,有时处于功能的需求,比如加工时工件的材料去除方…

根据IP获取地理位置信息 — Golang

根据IP获取地理位置信息 — Golang 1 介绍1.1 ip2region1.2 geoip2-golang1.3 总结 2 使用2.1 ip2region2.2 geoip2-golang 1 介绍 1 ip2region 2 geoip2-golang 1.1 ip2region ip2region 是一个离线IP地址定位库和IP定位数据管理框架&#xff0c;10微秒级别的查询效率&…

ipad密码忘了怎么解锁?教你40秒轻松移除!

无论是手机还是平板&#xff0c;相信大部分都会去给它们设上密码&#xff0c;来保证自己的隐私安全。同理&#xff0c;无论是苹果设备还是安卓设备&#xff0c;一旦设了锁屏密码&#xff0c;就会遇到密码忘记的情况&#xff0c;多次输入错误密码还会导致设备被停用。 近日&…

上海亚商投顾:沪指放量上涨创年内新高 中字头个股掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日高开高走&#xff0c;盘中一度涨近2%&#xff0c;站上3400点关口&#xff0c;深成指、创业板指走势较弱。…

openssl一套证书-配置文件和证书签发

dn-param 和 extend 配置文件 CA的dn-param 和 extend CA的dn-param 和 extend CI-csr.cnf 的内容如下&#xff1a; #openssl x509 extfile params extensions extend # This prevent the user to be prompted for values prompt nodistinguished_name dn-param [dn-param…

【C++】-对于自定义类型的输入输出运算符重载

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 文章目录 前言一、案例引入二、<<的重载三、>>的…

智慧城市3d可视化管理大屏系统有效提高服务质量和效率

随着新一代信息技术飞速融入传统产业&#xff0c;农业数字化、网络化、智能化逐步成为农业现代化发展的基石。实现农业生产环境的智能感知、智能预警、智能决策、智能分析等功能&#xff0c;为农业生产提供精准化保障、高质量运营水平、智能化决策支撑。 3D可视化智慧管理 1&am…

在docker上安装运行Python文件

目录 一、在docker中安装python 1.1 输入镜像拉取命令 1.2 查看镜像 1.3 运行 1.4 查看是否成功 1.5 查看python版本 二、运行py文件 2.1准备运行所需文件 2.2 准备文件夹 2.3 大概是这幅模样 2.4 打包上传到服务器上 2.5 构建镜像示例 2.6 查看镜像 2.7 优化镜像的…

微星GT77HX-13VI2023原厂Windows11重建F3一键恢复

MSI微星系列原厂预装正版系统恢复镜像有原机所有驱动&#xff0c;主题&#xff0c;Logo 安装后自动重建f3 msirestore功能 系统带所有驱动以及msi center小红龙 恢复至出厂状态 文件地址https://pan.baidu.com/s/1snKOsH3OMl3GZLqeAf-GLA?pwd8888 其他型号: 微星 GE76-12代…