10分鐘了解Linux虛擬檔案系統和檔案描述符

2021-10-14 15:04:05 字數 2417 閱讀 5436

linux虛擬檔案系統和檔案描述符.md

linux設計哲學之一切皆檔案.

linux通過vfs, 虛擬檔案系統管理檔案系統,這個儲存在記憶體中, 對映到物理位置.

為了解決使用者(應用)儲存到各種各樣的裝置上,虛擬的,物理的,網路的等等. 提供乙個統一的訪問方式. 這樣可以跟硬體解耦.

io裝置指的是網絡卡,磁碟,鍵盤,滑鼠,u盤等等外部裝置.

虛擬檔案系統的一些結構

inode:

唯一的檔案號

pagecache:

核心讀檔案快取到記憶體;如果不同程序讀同乙個檔案,則不同程序共享此pagecache

fd:檔案描述符

每個程序持有自己的.當程序開啟現有檔案或建立新檔案時,核心向程序返回乙個檔案描述符,檔案描述符就是核心為了高效管理已被開啟的檔案所建立的索引,用來指向被開啟的檔案,所有執行i/o操作的系統呼叫都會通過檔案描述符。

有自己的seek(指標)

任何程式都有0,1,2三個檔案描述符(u,w,r分別表示讀寫,寫,讀)

exec 8< ooxx.txt

lsof -op $$

能看到乙個為8的檔案描述符,顯示8r表示這個檔案描述符為8唯讀,加上-o選項表示offset

pagecache一致性

標誌dirty,什麼時候刷到磁碟,可以使用不同策略,有引數可以設定(安全性(掉電丟失)和效能)

一般4k大小,可以調整

檔案系統的基本組成及管理

/: 跟目錄(root的),一般都掛載在這個地方

swap: centos某些版本,顯示的是/dev/shm 記憶體交換分割槽

/boot: 啟動分割槽,核心儲存的方,啟動會載入到記憶體中,然後再對映回來

df命令

可以通過df命令看掛載情況

filesystem表示分割槽

mounted on:表示分割槽掛載到哪個目錄下了

mount/unmount

掛載/解除安裝

你可以對你的目錄掛載一些物理裝置,比如usr儲存資料的,你可以單獨掛載一塊硬碟

你甚至可以把乙個檔案當做乙個硬體裝置掛載上去

比如losetup /dev/loop0 mydisk.img // loop0是乙個裝置, mydisk.img是我生成的乙個檔案,這樣這個裝置就不是指向物理的東西了而是指向乙個檔案系統的東西. mke2fs /dev/loop0 這個是格式化這個裝置.然後你可以把這個裝置再掛載到某個目錄下,就可以看到這個了.

boot分割槽

引導分割槽會首先把核心**拷貝記憶體中,然後啟動起來

核心啟動之後會接管磁碟系統生成自己vfs(包括接管boot,自己管理. 就是說其實有兩個boot, 核心用自己的boot覆蓋了原有的boot.當你umount boot時,這個操作是把原有分割槽的boot解除安裝了. 使用df是看不到boot分割槽的,但是你回到根目錄還能看到乙個boot目錄,因為元分割槽被解除安裝所以沒有內容了,重新掛載這個分割槽內容就回來了)

然後你通過df就可以看到vfs的情況了

檔案型別

-: 普通檔案,執行文字..

d: 目錄

b: 塊裝置, 磁碟

c: 字元裝置, 鍵盤,終端

s: socket, socket

p: pipeline, 管道

[eventpoll]: epoll的記憶體區域

l: 鏈結

/dev/zero

無限大的空,但是卻不占用空間

一般用來填充空檔案用

/dev

目錄主要都是裝置

命令dd命令

拷貝生成檔案

dd if=/dev/zero of=mydisk.img bs=1048576 count=100 // if=inputfile of=outfile bs=表示塊1m  bs*count=檔案大小

通過dd命令可以備份磁碟

也可以兩個分割槽內容對烤

lsof

程序開啟了哪些檔案

lsof -p $$

fd欄位欄表示的各種檔案型別

$$當前bash程序pid

$bashpi

當前bash程序pid

$$優先順序高於管道,所有當應用於管道時,可能取到的是父程序的pid

mount/unmount

dfmmap

read

read a 0<& 8 // 把檔案描述符8讀到a這個變數.

read讀到換行符結束

重定向符

如果接的的檔案描述符則重定向字元必須加個&才能識別,否則就當成檔名了

pcstat

檢視程序涉及的pagecache

page cache stat

檢視髒頁

cat /proc/vmstat |grep dirty

docker的執行

先掛載img檔案->切換根目錄->讀取程序裡邊的可執行檔案->準備命名空間和程序空間->跑在命名空間中->跑起來

10分鐘了解ZooKeeper

zookeeper是乙個開放原始碼的分布式應用程式協調服務,它包含乙個簡單的原語集,分布式應用程式可以基於它實現同步服務,配置維護和命名服務等。1.最終一致性 client不論連線到哪個server,展示給它都是同乙個檢視,這是zookeeper最重要的功能。2.可靠性 具有簡單 健壯 良好的效能,...

10分鐘了解熟悉date型別

有好久沒碰csdn了,加上考試後症候群,讓我遲遲不能進入狀態,前幾天複習js的時候發現之前好像沒寫關於date整體的部落格,特總結如下 date型別使用utc1970 1 1零點開始經過的毫秒數來儲存日期 也就是最大精確度為毫秒 使用時,第一步,建立乙個日期物件 var time new date ...

10分鐘了解常用推薦演算法

下面總結了常用的一些推薦演算法的分類和概念,幫助你快速了解推薦系統。1 根據系統使用者的基本資訊發現使用者的相關程度,然後將相似使用者喜愛的其他物品推薦給當前使用者。2.使用者資訊標籤化的過程又稱為使用者畫像。使用者畫像就是企業通過收集與分析消費者社會屬性 生活習慣 消費行為等主要資訊的資料之後,完...