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

    文章

    316

    浏览量

    21644
  • Hash算法
    +关注

    关注

    0

    文章

    43

    浏览量

    7382
  • vfs
    vfs
    +关注

    关注

    0

    文章

    14

    浏览量

    5255

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

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

收藏 人收藏

    评论

    相关推荐

    如何做到好的照明设计

    如何做到好的照明设计,本文中作者从较高的角度为读者详细讲解了设计过程的整个构思。
    发表于 09-13 13:58 1153次阅读

    Linux中常用的MySQL脚本

    Linux中,使用MySQL进行常见的任务时,可以编写些脚本来简化操作。以下是些常用的
    发表于 09-07 09:49 745次阅读

    老男孩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

    Linux都要会哪些shell技能

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

    linux怎么排查

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

    如何做到USB仿真两CPU的?

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

    利用6 Linux 典型问题来分析处理问题的思路

    结合上面介绍的 Linux 问题的解决思路后,下面我们挑选了6比较典型的 Linux
    的头像 发表于 01-13 10:37 2938次阅读

    工程师的四阶段

    Linux系统目前主要应用在企业服务器上,学习Linux,更多的是向Linux系统/工程师方向进军。比如云计算系统工程师,大数据
    的头像 发表于 03-26 16:22 5871次阅读

    如何定义linux工程师

    相信读者们必定听说过linux,也听说过工程师。那么工程师是什么概念
    的头像 发表于 08-21 15:51 3115次阅读

    Linux工程师的定义

    作爲互联网的幕后英雄,Linux工程师临时藏匿群众认知范围之外,关于的讨论依旧是
    的头像 发表于 08-31 11:34 3850次阅读

    Linux经常使用的40命令总结

    本文档的主要内容详细介绍的是Linux经常使用的40命令总结
    的头像 发表于 11-22 11:14 2563次阅读

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

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

    17linux高效操作技巧

    今天浩道跟大家分享17linux高效操作技巧 ! 1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录:   find . -
    的头像 发表于 11-01 09:40 1242次阅读