Linux下如何做到一個檔案即可讀寫,又只讀?
在Linux運維過程中,經常會遇到某個應用的存儲目錄跑滿,提前又沒有做任何規劃,目錄或磁碟無法擴容,這個時候,我們常用的解決方法是做軟鏈接,通過ln,將原先儲存的目錄軟連結到另外大的磁碟中的目錄下,以此達到目的。
軟鏈的弊端就是,多層軟鏈之後,會被繞暈,很容易造成誤操作,今天再介紹一種方法
mount –bind
#mount指令運維小夥伴應該很熟悉,不做太多介紹
先來看man裡面的介紹

透過mount –bind可以將檔案目錄結構重新掛載,連接兩個目錄,它是將前一個目錄掛載到後一個目錄上,所有對後一個目錄的存取其實都是對前一個目錄的存取
範例
透過範例看下,分別建立兩個不同的目錄,並在兩個不同的目錄下建立不同的檔案

查看文件的inode

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

可以看到,inode號碼和文件,都是test1的
接著對test2目錄下的檔案存取修改,實際上改動的就是test1目錄,我們測試下,在test2目錄建立檔案

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

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

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

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器