Linux拾遺
以前學Linux時的一些筆記,拿出來遛遛~
1 目錄與檔案的本質
Linux系統的檔案資料除了檔案實際內容外,還含有檔案許可權(rwx)與檔案屬性(所有者、群組、時間引數等)等非常多的屬性。檔案系統通常會將這兩部分的資料分別存放在不同的塊。實際資料放到data block塊中,若檔案太大時,會佔用多個block。許可權與屬性放置到inode中,一個檔案佔用一個inode,同時記錄此檔案的資料所在的 block號碼。另外,還有一個超級塊(superblock)會記錄整個檔案系統中的整體資訊,包括inode與block的總量、使用量、剩餘量等。
由於每個inode與block號碼都有編號,而每個檔案都會佔用一個 inode,inode內則有檔案資料放置的block號碼。因此,我們可以知道,如果能夠找到檔案的inode的話,那麼自然就會知道這個檔案所放置數 據的block號碼,當然也就能夠讀出該檔案的實際資料了。這是個比較有效率的做法,因為如此一來我們的磁碟就能夠在短時間內讀取出全部的資料,讀寫效能 比較好。
當我們在Linux下的ext2檔案系統新建一個目錄時,ext2會分配一個 inode與至少一塊block給該目錄。其中,inode記錄該目錄的相關許可權與屬性,並可記錄分配到的那塊block號碼。而block則是記錄在這 個目錄下的檔名與該檔名佔用的inode號碼資料。這就是為什麼在Linux下叫目錄而不像在window下叫資料夾,因為它確實就是一個索引。而且 這也解釋了為什麼明明所有檔案都是在根目錄下,為什麼卻還可以放在不同的磁碟?因為目錄與其下的子目錄和檔案,就不是包含與被包含的關係,而只是一個索引。
2 Linux下檔案的隱藏屬性
顯然,這裡要說的並不是rwx那9個許可權,而是要聊chattr和lsattr這兩個命令。這兩個命令在只能在Ext2/Ext3的檔案系統上面生效,其他檔案系統可能就無法支援了。
2.1 chattr 設定檔案的隱藏屬性
#chattr [+-=] [ASacdistu] 檔案或目錄
引數:
+ :增加某一個特殊引數,其他原本存在引數則不動
- :刪除某一個特殊引數,其他原本存在引數則不動
= :僅有後面的引數
A :設定了A這個屬性時,此檔案(或目錄)的訪問時間atime將不會被修改。可避免I/O較慢的機器過度訪問磁碟。
S :一般檔案是非同步格式寫入磁碟的,如果加上S這個屬性時,對檔案進行任何修改,將會“同步”寫入磁碟中。
a :設定a之後,這個檔案將只能增加資料,而不能刪除也不能修改資料,只有root才能設定這個屬性。
c :這個屬性設定之後,講會自動將此檔案壓縮,在讀取的時候會自動解壓縮,但是在儲存的時候,將會先進行壓縮後再儲存。
d :當dump程式被執行的時候,設定d屬性將可使該檔案(或目錄)不會被dump備份。
i :它可以讓一個檔案不能被刪除、改名,設定連線也無法寫入或新增資料。只有root才能設定這個屬性。
s :當檔案設定了s屬性時,如果這個檔案被刪除,它將會被完全從這個硬碟空間中刪除。
u :與s相反,當使用u來配置檔案時,如果該檔案被刪除了,則資料內容其實還存在磁碟中。
2.2 lsattr 顯示檔案隱藏屬性
#lsattr [-adR] 檔案或目錄
引數:
-a :將隱藏屬性也顯示出來
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名
-R :連同子目錄的資料也一併列出
3 記憶體交換空間(swap)
安裝Linux時需要兩個分割槽,一個是根目錄,另外一個就是swap(記憶體交換空間)。swap的功能就是在應付實體記憶體不足的情況下所造成的記憶體擴充套件記錄的功能。一般來說,如果硬體的配備足夠的話,那麼swap應該不會被我們的系統所使用到。
CPU所讀取的資料都來自記憶體,當記憶體不足的時候,為了讓後續的程式可以順利執行,因此在記憶體中暫不使用的程式與資料就會被挪到swap中了。此時記憶體就會空出來給需要執行的程式載入。swap是用硬碟來暫時放置記憶體中的資訊。
目前主機的記憶體都很大,因此在個人使用上,不設定swap也沒有太大的問題。不過伺服器可就不同了,猶豫不會知道何時會有大量來自網路的請求,因此最好能夠預留一些swap來緩衝一下系統的記憶體用量。
新建swap分割槽的方法:
1,分割槽:先使用fdisk在磁碟中分出一個分割槽給系統作為swap。由於Linux的fdisk預設會將分割槽的ID設定為Linux的檔案系統,所以可能還得要設定一下system ID。
2,格式化:利用新建swap格式的mkswap 裝置檔名
就能夠格式化該分割槽成為swap格式。
3,使用:最後將該swap裝置啟動,方法為swapon 裝置檔名
。
4,檢視:最終通過free
這個命令來檢視一下記憶體的使用情況。
4 核心結構的區分
單核心與微核心是具有代表性的核心結構。
單核心——所有核心服務均在核心空間中存在並執行。直接調出核心服務。
4.1 基於單核心的作業系統:
使用者空間包含:應用、庫
核心包含:檔案系統、程式間通訊、I/O和裝置管理、基本程式管理等。
微核心——核心服務中一部分位於使用者空間。利用訊息傳遞方式呼叫核心服務。
4.2 基於微核心的作業系統:
使用者空間包含:應用、庫、檔案系統、程式伺服器、調頁程式、驅動程式等。
核心包含:微核心
核心結構的區分標準是:所有核心服務是否整合在核心空間執行。
2.6版Linux核心雖然具有支援模組的模組化核心,但模組也是執行在核心空間的,因此仍為單核心。
參考書籍:
《鳥哥的Linux私房菜》
《ARM Linux核心原始碼剖析》
相關文章
- Java Web 拾遺JavaWeb
- [MASM拾遺]OffsetASM
- 前端技能拾遺前端
- OrchardCore Headless建站拾遺
- 物件導向拾遺物件
- 容器化 Confluence 使用拾遺
- golang拾遺:嵌入型別Golang型別
- Confluence 容器化使用拾遺
- docker拾遺-之再入坑Docker
- golang拾遺:指標和介面Golang指標
- Vue.js基礎拾遺Vue.js
- PHP 使用 Kafka 安裝拾遺PHPKafka
- AS拾遺--向PM學習二
- C#拾遺補闕【01】:字串C#字串
- 課時39:類與物件:拾遺物件
- (零) React Native 專案開發拾遺React Native
- 前端拾遺--javascript-ES6基礎前端JavaScript
- [Go]Go 語言基礎拾遺(一)Go
- MIT 6.824拾遺(一)聊聊basic-paxosMIT
- 【105天】前端碎片知識拾遺00003前端
- 【106天】前端碎片知識拾遺00004前端
- JAVA 拾遺 — CPU Cache 與快取行Java快取
- Zepto核心模組之工具方法拾遺
- JSON實戰拾遺之數字精度JSON
- mysql 拾遺提高(函式、事務、索引)MySql函式索引
- React拾遺:Render Props及其使用場景React
- 基礎拾遺---委託,匿名函式,lambda函式
- [C#.NET拾遺補漏]01:字串操作C#字串
- 2萬字 | 前端基礎拾遺90問前端
- iOS拾遺—— Assets Catalogs 與 I/O 優化iOS優化
- JAVA拾遺 — JMH與8個測試陷阱Java
- Git拾遺:一機多SSH-Key管理Git
- golang拾遺:為什麼我們需要泛型Golang泛型
- Netty拾遺(七)——粘包與拆包問題Netty
- 【C++】 68_拾遺: 令人迷惑的寫法C++
- 老工具 fiddler-使用拾遺及一些技巧
- golang拾遺:實現一個不可複製型別Golang型別
- 初級程式設計師的SQL拾遺-②(表操作)程式設計師SQL
- golang拾遺:內建函式len的小知識Golang函式