搜尋
首頁系統教程LinuxLinux下如何做到一個檔案即可讀寫,又只讀?

Linux下如何做到一個檔案即可讀寫,又只讀?

Feb 14, 2024 pm 05:00 PM
linuxlinux教程linux系統linux指令shell腳本嵌入式linuxlinux入門linux學習

在Linux運維過程中,經常會遇到某個應用的存儲目錄跑滿,提前又沒有做任何規劃,目錄或磁碟無法擴容,這個時候,我們常用的解決方法是做軟鏈接,通過ln,將原先儲存的目錄軟連結到另外大的磁碟中的目錄下,以此達到目的。

軟鏈的弊端就是,多層軟鏈之後,會被繞暈,很容易造成誤操作,今天再介紹一種方法

mount –bind

#mount指令運維小夥伴應該很熟悉,不做太多介紹

先來看man裡面的介紹

Linux下如何做到一個檔案即可讀寫,又只讀?

透過mount –bind可以將檔案目錄結構重新掛載,連接兩個目錄,它是將前一個目錄掛載到後一個目錄上,所有對後一個目錄的存取其實都是對前一個目錄的存取

範例

透過範例看下,分別建立兩個不同的目錄,並在兩個不同的目錄下建立不同的檔案

Linux下如何做到一個檔案即可讀寫,又只讀?

查看文件的inode

Linux下如何做到一個檔案即可讀寫,又只讀?

透過mount –bind將test1掛載到test2上,重新查看inode和目錄下內容

Linux下如何做到一個檔案即可讀寫,又只讀?

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

接著對test2目錄下的檔案存取修改,實際上改動的就是test1目錄,我們測試下,在test2目錄建立檔案

Linux下如何做到一個檔案即可讀寫,又只讀?

然後接觸mount之後,我們再查看下兩個目錄下的內容

Linux下如何做到一個檔案即可讀寫,又只讀?

可以看到,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 掛載一個只讀目錄,原目錄可寫,掛載出來的目錄只讀,只需要將唯讀目錄權限給開發人員即可

以上是Linux下如何做到一個檔案即可讀寫,又只讀?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:良许Linux教程网。如有侵權,請聯絡admin@php.cn刪除
Linux和Windows之間的用戶帳戶管理有什麼區別?Linux和Windows之間的用戶帳戶管理有什麼區別?May 02, 2025 am 12:02 AM

Linux和Windows在用戶賬戶管理上的主要區別在於權限模型和管理工具。 Linux使用基於Unix的權限模型和命令行工具(如useradd、usermod、userdel),而Windows採用自己的安全模型和圖形用戶界面(GUI)管理工具。

Linux的命令行環境如何使其比Windows更安全?Linux的命令行環境如何使其比Windows更安全?May 01, 2025 am 12:03 AM

Linux'scommandlinecanbemoresecurethanWindowsifmanagedcorrectly,butrequiresmoreuserknowledge.1)Linux'sopen-sourcenatureallowsforquicksecurityupdates.2)Misconfigurationcanleadtovulnerabilities.Windows'commandlineismorecontrolledbutlesscustomizable,with

如何在Linux中自動製作USB驅動器安裝如何在Linux中自動製作USB驅動器安裝Apr 30, 2025 am 10:04 AM

本指南說明瞭如何在Linux的啟動下自動安裝USB驅動器,從而節省了時間和精力。 步驟1:確定您的USB驅動器 使用LSBLK命令列出所有塊設備。 您的USB驅動器可能會標記為 /dev /sdb1, /dev /sdc1等

2025年,最佳Linux,Windows和Mac的最佳跨平台應用程序2025年,最佳Linux,Windows和Mac的最佳跨平台應用程序Apr 30, 2025 am 09:57 AM

跨平台應用程序已徹底改變了軟件開發,從而在Linux,Windows和MacOS等操作系統上實現了無縫功能。 這消除了根據您的設備切換應用程序的需求,提供一致的體驗

2025年AI和機器學習的最佳Linux工具2025年AI和機器學習的最佳Linux工具Apr 30, 2025 am 09:44 AM

人工智能(AI)正在迅速改變許多部門,從醫療保健和金融到藝術和音樂等創意領域。 Linux具有開源性,適應性和性能功能,已成為首要的Platfo

5最佳輕巧的Linux發行版,不帶GUI5最佳輕巧的Linux發行版,不帶GUIApr 30, 2025 am 09:38 AM

尋找沒有圖形用戶界面(GUI)的快速,最小和高效的Linux分佈? 輕巧,無GUI-Linux發行版非常適合較舊的硬件或服務器和嵌入式系統(例如服務器和嵌入式系統)。他們消耗較少的res

如何在Redhat發行中安裝葡萄酒10.0如何在Redhat發行中安裝葡萄酒10.0Apr 30, 2025 am 09:32 AM

Wine 10.0穩定版發布:在Linux上運行Windows應用更上一層樓 Wine,這款開源免費的應用程序,讓Linux用戶能夠在Unix/Linux類操作系統上運行Windows軟件和遊戲,迎來了10.0穩定版的發布!此版本已提供源代碼和二進制包下載,支持Linux、Windows和Mac等多種發行版。 這一版本凝聚了一年的辛勤工作和超過8600項改進,帶來了諸多令人興奮的提升。主要亮點包括: 增強對藍牙設備的支持。 提升對HID輸入設備的支持。 優化了32位和64位應用程序的運行性能。

如何在RHEL上安裝和配置SQL Server如何在RHEL上安裝和配置SQL ServerApr 30, 2025 am 09:27 AM

該教程通過在RHEL 8.x或9.x上安裝SQL Server 2022,通過SQLCMD命令行工具,數據庫創建和基本查詢連接。 先決條件 開始之前,請確保: 支持的RHEL版本(RHEL 8或9)。 Sudo

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器