0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在Linux运维下如何做到只读一个文件的呢?

dyquk4xk2p3d 来源:运维研习社 2023-04-10 09:19 次阅读

Linux运维过程中,经常会遇到某个应用的存储目录跑满,提前又没有做任何规划,目录或磁盘无法扩容,这个时候,我们常用的解决方法是做软链接,通过ln,将原先存储的目录软链接到另外大的磁盘中的目录下,以此达到目的。

软链的弊端就是,多层软链之后,会被绕晕,很容易造成误操作,今天再介绍一种方法

mount --bind

mount命令运维小伙伴应该很熟悉,不做过多介绍

先来看下man里面的介绍

c2e9c8d0-d72f-11ed-bfe3-dac502259ad0.png

通过mount --bind可以将文件目录结构重新挂载,连接两个目录,它是将前一个目录挂载到后一个目录上,所有对后一个目录的访问其实都是对前一个目录的访问

例子

通过例子看下,分别创建两个不同的目录,并在两个不同的目录下创建不同的文件

c2f8b26e-d72f-11ed-bfe3-dac502259ad0.png

查看文件的inode

c302c178-d72f-11ed-bfe3-dac502259ad0.png

通过mount --bind将test1挂载到test2上,重新查看inode和目录下内容

c3107fca-d72f-11ed-bfe3-dac502259ad0.png

可以看到,inode号和文件,都是test1的

然后对test2目录下的文件访问修改,实际上改动的就是test1目录,我们测试下,在test2目录创建文件

c328b95a-d72f-11ed-bfe3-dac502259ad0.png

然后接触mount之后,我们再查看下两个目录下的内容

c3340b5c-d72f-11ed-bfe3-dac502259ad0.png

可以看到,test1目录保持修改后的状态,test2目录文件仍然存在,且保持原来的不变

原理

以mount --bind test1 test2为例,当mount --bind命令执行后,Linux将会把被挂载目录的目录项(也就是该目录文件的block,记录了下级目录的信息)屏蔽,即test2的下级路径被隐藏起来了(注意,只是隐藏不是删除,数据都没有改变,只是访问不到了)。同时,内核将挂载目录(test1)的目录项记录在内存里的一个s_root对象里,在mount命令执行时,VFS会创建一个vfsmount对象,这个对象里包含了整个文件系统所有的mount信息,其中也会包括本次mount中的信息,这个对象是一个HASH值对应表(HASH值通过对路径字符串的计算得来),表里就有 /test1 到 /test2 两个目录的HASH值对应关系

命令执行完后,当访问 /test2下的文件时,系统会告知 /test2 的目录项被屏蔽掉了,自动转到内存里找VFS,通过vfsmount了解到 /test2 和 /test1 的对应关系,从而读取到 /test1 的inode,这样在 /test2 下读到的全是 /test1 目录下的文件

注意

两个目录的对应关系是存在于内存中的,一旦重启,挂载关系就没有了,所以需要将挂载关系,写入/etc/fstab中

高级用法

临时配置文件读取测试 有些应用场景下,需要修改配置文件进行测试,但是又不能影响正在运行中的业务,在没有把握的情况下,不愿意直接修改原有配置文件的话,我们可以通过在/tmp等目录,写一个测试的配置文件,通过mount --bind的方式挂载到配置文件读取目录,运行程序读取该临时配置文件,测试完成后,只需要umount,不影响原来的配置

只读挂载 在一些场景下,比如需要给开发人员查看一些配置的权限,但是又不允许它们修改配置的情况下,可以通过mount --bind,ro 挂载一个只读目录,原目录可写,挂载出来的目录只读,只需要将只读目录权限给开发人员即可

以上就是mount --bind的简单介绍,更多使用方法,各位小伙伴可以自行尝试。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LINUX内核
    +关注

    关注

    1

    文章

    312

    浏览量

    21408
  • Hash算法
    +关注

    关注

    0

    文章

    43

    浏览量

    7366
  • vfs
    vfs
    +关注

    关注

    0

    文章

    13

    浏览量

    5219

原文标题:Linux下如何做到一个文件即可读写,又只读?

文章出处:【微信号:良许Linux,微信公众号:良许Linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    网管员的手机有妙用:键报障与工单IT系统

    IT的日常和平,也要保证突发事件的升级。如何做到心中有底,扼制事态的危险漫延,重要是防范于未然和快速了解问题,能及时知道故障,随时随地发现问题,有
    发表于 06-01 14:36

    labview如何做到到指定文件夹下抓取图片

    labview如何做到到指定文件夹下抓取图片
    发表于 08-20 20:37

    老男孩Linux培训教程

    `  继《跟老男孩学习Linux:Web集群实战》和《跟老男孩学习Linux:Shell
    发表于 12-15 15:16

    linux命令大全

    是对Linux高端实用命令的简单汇总:1. bash常用任务管理命令&,Ctrl-Z,Ctrl-C,jobs,fg,bg,kill等2. 基本的文件管理命令ls,ls-l, les
    发表于 03-15 16:36

    学习Linux发展方向

    发布等工作需求,如果公司较小的话,可能还会兼职一下网管、网络工程师、数据库管理员、安全工程师、威廉希尔官方网站 支持等职务。  那么,涉及到的Linux平台上的工具有哪些
    发表于 07-25 17:15

    (转)6 Linux 典型问题,大牛的分析解决思路在这里

    。问题排查:既然有了解决思路,那么接下来看看是否有进程一直在向 access_log 文件中写入数据,这里需要用到 linux 的 losf 命令,通过这个命令可以获取
    发表于 08-13 14:10

    Linux都要会哪些shell技能

    充斥着各种的互联网+的数字时代,Linux也越来越趋于自动化方向发展,越来越多的工作者
    发表于 11-30 17:38

    人员到底要不要学习开发

    人员的困惑:做要掌握网络,系统,服务,数据库,现在还要精通各种开发语言,精力都耗尽了,还能学好吗?以上5大点如果能精通点就很牛叉了
    发表于 01-28 17:59

    linux阶段职位说明

    linux发展路线规划
    发表于 05-07 16:36

    linux中的路由操作全面概述

    日常作业中,经常会碰到路由表的操作。下面就linux中的路由操作做
    发表于 07-09 08:41

    请问只有气压计的情况如何做到定高模式键起飞?

    ,满电的时候给30%就非常高了,快没电的时候给到50%才行。。还有就是气压计刚起飞的时候非常不稳定,设定高度也不太好确认。请问只有气压计的情况如何做到定高模式
    发表于 07-12 04:36

    linux怎么排查

    linux排查常用命令(开发专享)
    发表于 11-11 06:34

    单电源放电路如何做

    源,用电路去生成负电源也是不划算的,没人会这么做。那么要用放的时候这么办?----将双电源放电路改为单电源放电路。那么如何做
    发表于 12-27 07:10

    如何做到USB仿真两CPU的?

    请问一下如何做到USB仿真两CPU的? 编译从核的工程, 它的固件怎么就能直接写入到主核的工程里去的?
    发表于 05-26 06:10

    使用tree命令在Linux终端中显示文件

    使用 Linux 上的 tree 命令,您可以以分层树状表示形式查看整个文件系统。这是如何做到的。
    的头像 发表于 09-13 14:13 2814次阅读