Linux實戰教學筆記08:Linux 文件的屬性(上半部分)

来源:http://www.cnblogs.com/chensiqiqi/archive/2017/01/04/6247146.html
-Advertisement-
Play Games

第八節 Linux 文件的屬性(上半部分) 標簽(空格分隔):Linux實戰教學筆記 第1章 Linux中的文件 1.1 文件屬性概述(ls lhi) linux里一切皆文件 Linux系統中的文件或目錄的屬性主要包括:索引節點(inode),文件類型,許可權屬性,鏈接數,所歸屬的用戶和用戶組,最近修 ...


第八節 Linux 文件的屬性(上半部分)

標簽(空格分隔):Linux實戰教學筆記


第1章 Linux中的文件

1.1 文件屬性概述(ls -lhi)

linux里一切皆文件
Linux系統中的文件或目錄的屬性主要包括:索引節點(inode),文件類型,許可權屬性,鏈接數,所歸屬的用戶和用戶組,最近修改時間等內容:
QQ20170103-162333@2x.png-96.4kB

文字解釋:
第一列:inode索引節點編號(相當於人的身份證,全國唯一)
第二列:文件類型及許可權
第二列共11個字元:其中第一個字元為文件類型,隨後的9個字元為文件的對應許可權,最後一個字元點號“.”是和selinux有關的一個標識;
第三列:硬鏈接個數(詳細參看ln命令的講解);
相當於超市的多個入口,可以從不同的文件入口進入文件,還可以互為備份(消防通道)
第四列:文件或目錄所屬的用戶 文件的所有者(屬主);
linux裡面文件和程式的存在必須要有用戶和組滿足相應的存在需求。
第五咧:文件或目錄所屬的組
第六列:文件或目錄的大小;
第七八九列:文件或目錄的修改時間:預設月日時分
第十列:實際的文件或目錄名
文件名不算文件的屬性

下麵我們以chensiqi文件為例進行說明,具體列的內容參考下上面的圖:

1736707 -rwx-xr-x- 1 root root 35 Oct 28 11:29 chensiqi

  • inode索引節點編號:1736707
  • 文件類型,文件類型是-,表示這是一個普通文件;
  • 文件許可權:文件許可權是rwxr-xr-x,表示文件屬主可讀,可寫,可執行,文件歸屬的用戶組可讀可執行,其他用戶可執行。
  • 硬鏈接個數:表示chensiqi這個文件沒有其它的硬鏈接,因為連接數是1,就是他本身;
  • 文件屬主:這個文件所屬的用戶,這裡意思是chensiqi文件被root用戶擁有,註意,是第一個root;
  • 文件屬組:這個文件所屬的用戶組,在這裡是root用戶組,是顯示信息里的第二個root
  • 文件大小:文件大小是35個位元組
  • 文件修改時間:這裡的時間是該文件最後被更新(包括文件創建,內容更新,文件名更新等)的時間,可用如下命令查看文件的修改,訪問,創建的時間

1.2 索引節點inode

1.2.1 inode 概述

  • 硬碟要存儲數據,首先要分區,然後格式化創建文件系統,最後掛載,才能存數據。
  • Inode,中文意思是索引節點(index node)。在每個linux存儲設備或存儲設備的分區(存儲設備可以是硬碟,軟盤,U盤...)被格式化為ext4(CentOS6.8)文件系統後,一般生成兩部分:第一部分是Inode(很多個),第二部分是Block(很多個)。
  • 這個Block是用來存儲實際數據用的,例如:照片,視頻等普通文件數據。
  • 而inode就是用來存儲這些數據屬性信息的(也就是ls -l的結果),inode屬性信息包括不限於文件大小,屬主(用戶),歸屬的用戶組,文件許可權,文件類型,修改時間,還包含指向文件實體的指針功能(inode節點--block的對應關係)等,但是,inode裡面唯獨不包含文件名本身

身份證號 ==== inode號
身高體重三圍有沒有頭髮(屬性)====inode

  • Inode除了記錄文件屬性的信息外,還會為每個文件進行信息索引,所以就有了inode的數值。操作系統根據指令,即可通過inode的值最快的找到相對應的文件實體。文件,inode,block之間的關係見下圖:

QQ20170103-174728@2x.png-97kB

為了能讓大家更形象的理解,我舉個例子。假如有一本書,存儲設備和分區就相當於這本書,Block相當於書中的每一頁內容,而inode就相當於這本書前面的目錄,一本書有很多內容,一個知識點可能有多頁,如果想查找某部分或某知識點的內容,我們一般先查書的目錄,通過目錄能更快的找到我們想要看的知識點的內容。雖然不太恰當,但還是比較形象。
QQ20170103-175608@2x.png-770.7kB

當我們用ls查看某個目錄或文件時,如果加上-i參數,就可以看到inode節點了;

root@chensiqi /】# ls -i

QQ20170103-180200@2x.png-34.7kB

  • 上圖第一列inode值259615;查看一個文件或目錄的inode,通過ls命令的-i參數即可。
  • 因為inode要存放文件的屬性信息,所以每個inode本身是有大小的,Centos5系列inode的預設大小是128位元組,而Centos6系列inode的預設大小是256位元組,inode的大小在分區被格式化創建文件系統之後定下來的,格式化以後就無法更改inode大小,格式化前可以通過參數指定inode的大小,但是一般企業工作環境沒這個需求
  • 不同Centos版本inode大小不同
    QQ20170103-211412@2x.png-16.3kB

查看文件系統inode總量以及剩餘量

root@chensiqi /】# df -i

屏幕快照 2017-01-03 下午9.22.57.png-19.4kB

查看磁碟使用量

[root@chensiqi /]# df -h

屏幕快照 2017-01-03 下午9.40.54.png-20.9kB

Inode:存放文件的屬性+文件內容的位置(block的位置) df - l 查看使用量
Block:存放實際數據

1.2.2 企業案例模擬:

模擬磁碟滿的情況

磁碟滿的一個特征(no space left on device)

1.block 滿了 磁碟空間滿了

QQ20170103-215903@2x.png-49.7kB

2.inode 滿了 創建一個文件就需要一個inode

QQ20170103-220516@2x.png-40.5kB

1.2.3 有關inode的小結

學會給階段性的知識做小結是學好linux運維的好習慣。

  1. 誕生:磁碟被分區並格式化為ext4文件系統後,會生成一定數量的inode和block
  2. inode稱為索引(目錄)節點,它的作用是存放文件的屬性信息以及作為文件的索引(指向文件的實體block)
  3. ext3/ext4 文件系統的block 存放的是文件的實際內容(數據)。
  4. inode是磁碟上的一塊存儲空間,CentOS6非啟動分區inode預設大小256位元組,CentOS5是128位元組
  5. inode的表現是形式一串數字,不同的文件對應的inode(一串數字)在文件系統里是唯一的。
  6. inode節點號相同的文件,互為硬鏈接文件,可以認為是一個文件的不同入口。
  7. ext3/ext4文件系統下,一個文件至少要占用一個inode和一個block。(文件size比較大)
  8. ext3/ext4文件系統下,正常情況一個文件占用且只能占用一個inode(人和身份證號)
  9. block是用來存儲實際數據的,每個block的大小一般有1k,2k,4k幾種。其中引導分區等為1k,其他普通分區多為4K(CentOS6)
  10. 如果一個文件很大(高清大片4G),需要占用多個block,如果文件很小(0.01k),至少占一個block,並且這個block的剩餘空間就浪費了,即無法在存儲其他數據

1.2.4 有關Block的知識小結

  1. 磁碟讀取數據是按block為單位讀取的
  2. 一個文件可能占用多個block。每讀取一個block就會消耗一次磁碟I/O
  3. 如果要提升磁碟I/O性能,那麼就要儘可能一次性讀取數據儘量的多。
  4. 一個block只能存放一個文件的內容,無論內容多小。如果block預設是4K大小,那麼存放一個1K的文件,剩餘3K就不能存放別的文件,只能浪費了
  5. Block並非越大越好。Block太大對於存放小文件就會浪費磁碟空間,例如:1000K的文件,Block大小為4K,占用250個Block,如果Block預設為1K,則需要占用1000個Block。訪問效率誰更高?消耗I/O分別為250次和1000次。
  6. 根據業務需求,確定預設的block大小,如果是大文件(大於16K)一般設置block大一點,小文件(小於1K)一般設置block小一點
  7. block太大,例如4K,文件都是0.1K的,大量浪費磁碟空間,但是訪問性能高
  8. block太小,例如1K,文件都是1000K,消耗大量磁碟I/O
  9. 企業里文件都會比較大(一般會大於4K),block設置大一些會提升磁碟訪問效率。
  10. ext3/ext4文件系統(CentOS5和CentOS6),一般都設置為4K。
    當前的生產環境一般設置為4K,特殊的業務,如視頻可以加大block大小
  • Block塊越大對於單個的小文件多(0.5K)的業務,會非常浪費空間,因為,一個文件無論多大都會必須占用至少一個inode和一個block,磁碟讀取數據是按Block為單位讀取的,但是對於大文件,可以提升讀取的效率,因為如果block太小,就要讀多個block,這樣就消耗磁碟I/O,如果block大,則會讀較少的aBlock就讀完數據,從而減少磁碟I/O
  • Block塊太小又會影響硬碟讀取大文件數據的效率,Block塊越小,同樣存儲一個文件就需要更多的Block,這樣硬碟讀取數據時就要讀取多個block,因此效率就越低。

  • Block分大了,浪費空間,分小了,影響磁碟讀取性能

1.2.5 inode與block總的小結

  1. 磁碟被分區格式化文件系統後,會分為inode和block兩部分內容
  2. inode存放文件的屬性以及指向文件實體的指針(block的位置),文件名不在inode里,一般在上級目錄的block里
  3. 訪問文件的過程,通過文件名(上一級目錄的block)--->inode--->blocks
  4. inode centos6一般情況預設非啟動分區大小256B,block大小1,2,4K,預設是4K,註意,引導分區等特殊分區除外
  5. 通過df -i 查看inode的數量及使用情況,dumpe2fs /dev/sda3 查看inode及block的大小及數量
  6. 一個文件至少要占用一個inode及一個block,多個文件可以占用同一個inode(硬鏈接),相同文件
  7. 一個block只能被一個文件使用,如果文件很小block很大,剩餘空間浪費,無法繼續被其他文件使用
  8. block不是越大越好,要根據業務的文件大小進行選擇,一般CentOS6就是預設4K
  9. 可以在格式化的時候改變inode及block的大小

1.2.6 企業面試題一:

一個100M(100000K)的磁碟分區,分別寫入1K的文件或寫入1M的文件,分別可以寫多少個?

  • 1K文件雖小,但是block一般預設4K,即使1K的數據也會占用4K大小,比如大家創建一個空文件,然後du -sk 看看大小是多少。(如果大家此時認為應該100000/4的話,那麼你就掉坑了-_-!別忘了存儲數據,消耗的不光是block還有inode,inode預設只有256K(centos6),每個文件至少占用一個block的同時還會占用一個inode)
  • 1M的數據他剛好能被4整除。所以不會浪費空間,大約為100個左右,inode充足。
    總上對於大文件一般inode是足夠的,大文件基本也不會浪費空間,整除就可以;但是對於小文件來說,inode是不足夠的,因此能夠存儲的數量就是inode的數量

1.27 企業面試題二:

如果向磁碟寫入數據提示如下錯誤:No space left on device,通過df -h查看磁碟空間,發現沒滿,請問可能原因是什麼?企業場景什麼情況下會導致這個問題發生?

  • 磁碟沒滿但是不能卸乳文件,最可能的原因就是inode被耗盡了
    企業工作中郵件臨時隊列/var/spool/clientmquene或/var/spool/postfix/maildrop這裡很容易被大量小文件占滿導致No space left on device的錯誤。clientmquene目錄只有安裝了sendmail服務,才會有,是sendmail的臨時隊列。centos5.8預設就會裝sendmail,centos6預設沒有sendmail,但是有postfix

1.3文件類型及文件擴展名

1.3.1 文件類型介紹

  • windows擴展名讓系統區分不同文件類型,擴展名錯誤導致文件無法打開。
  • linux通過擴展名讓人區分文件類型,為了易讀,錯誤也可以正常使用

例如:
windows圖片文件擴展名:jpg,jpeg,png,gif等
文本文件擴展名:doc,docx,txt,pdf

1.3.2 Linux中的文件類型

對於這裡我不想說太多,因為實在感覺對於實際應用意義不大,大家只需要知道通過ls -l查看目錄的時候,
1,如果許可權那裡是-rw--r--r--,第一個字元是‘-’就代表是普通文件
2,如果第一個字元是d例如drw--r--r--.就代表是個文件夾
3,如果第一個字元是l例如lrw--r--r--,就代表是個軟鏈接

1.3.3 軟連接

軟連接文件可通過:
ln -s 源文件名 新文件名 的方式來創建(如果不使用-s,則會創建硬鏈接,但不適合目錄)
這個軟連接和windows的快捷方式是相似的。
屏幕快照 2017-01-04 上午12.41.06.png-142kB

1.3.4 Linux下擴展名的作用

在linux中,雖然擴展名沒什麼意義,但是為了相容windows,同時,便於我們大多數windows用戶區分文件的不同,所以,我們還是習慣通過擴展名來表示不同文件的類型。

如下

  1. tar,tar.gz,tgz,zip,tar.bz表示壓縮文件,創建命令一般為tar,gzip,unzip等
  2. .sh表示shell腳本文件,通過shell語言開發的程式
  3. .pl表示perl語言文件,通過perl語言開發的程式
  4. .py表示python語言文件,通過python語言開發的程式
  5. .html,.htm,.php,.jsp,.do表示網頁語言的文件
  6. .conf表示系統的配置文件
  7. .rpm表示rpm安裝包文件

1.4 知識擴展(企業實際經驗)

問題: Linux文件系統如何選擇?

通過綜合使用多種標準文件系統Benchmarks對Ext3,Ext4,Reiserfs,XFS,JFS,Reiser4的性能測試對比,對不同應用選擇合適的文件系統給出以下方案,供大家參考。

  1. 大量小文件(LOSF,Lost of small files)I/O應用(如小圖片)
  • Reiserfs(首選),Ext4文件系統適合這類負載特征,IO調度演算法選擇deadline,block size=4096,ext4關閉日誌功能
  • reiserfs mount參數:-o defaults,async,noatime,nodiratime,notail,data=writeback
  • ext4 mount參數:-o defaults,async,noatime,nodiratime,data=writeback,barrier=0
  • 關閉ext4日誌:tune2fs -O^has_joumal /dev/sdXX

2.大文件I/O應用(如視頻下載,流媒體)

  • EXT4文件系統適合此類負載特征,IO調度演算法選擇anticipatory,block size=4096,關閉日誌功能,啟用extent(default)
  • mount參數:-o defaults,async,noatime,nodiratime,data=writeback,barrier=0
  • 關閉ext4日誌:tune2fs -O^has_joumal /dev/sdXX

3.SSD文件系統選擇

EXT4/Reiserfs可以作為SSD文件系統,但未對SSD做優化,不能充分發揮SSD性能,並影響SSD使用時間
Btrfs對SSD作了優化,mount通過參數啟用。但Btrfs扔處於試驗階段,生產環境謹慎使用
JFFS2/Nilfs2/YAFFS是常用的flash file system,在嵌入式環境廣泛應用,建議使用。性能目前還未作測試評估

簡單分析一下選擇Reiserfs和ext4文件系統的原因

1、Reiserfs

 大量小文件訪問,衡量指標是IOPS,文件系統性能瓶頸在於文件元數據操作、目錄操作、數據定址。reiserfs對小文件作了優化,並使用B+ tree組織數據,加速了數據定址,大大降低了open/create/delete/close等系統調用開銷。mount時指定noatime,nodiratime,notail,減少不必要的inode操作,notail關閉tail package功能,以空間換取更高性能。因此,對於隨機的小I/O讀寫,reiserfs是很好的選擇。

2、Ext4

 大文件順序訪問,衡量指標是IO吞吐量,文件系統性能瓶頸在於數據塊佈局(layout)、數據定址。Ext4對ext3主要作了兩方面的優化:
:是inode預分配。這使得inode具有很好的局部性特征,同一目錄文件inode儘量放在一起,加速了目錄定址與操作性能。因此在小文件應用方面也具有很好的性能表現。
:是extent/delay/multi的數據塊分配策略。這些策略使得大文件的數據塊保持連續存儲在磁碟上,數據定址次數大大減少,顯著提高I/O吞吐量。
因此,對於順序大I/O讀寫,EXT4是很好的選擇。另外,XFS性能在大文件方面也相當不錯。




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 出於安全性的考慮,不建議在bash腳本中註釋掉不使用的代碼。也就是說如果某段代碼不使用了,那麼應該刪除掉,而不是簡單地註釋掉。假如你突然意識到這一點,而以前並沒有遵從這個原則,現在需要找出腳本中的註釋性代碼,這可能是一個不小的工作量,讓我們寫一個腳本來幫助你吧,準確性無法達到百分之百,但是能夠提升效 ...
  • 一、共用庫 共用庫使得可執行文件中不再需要包含常用的庫函數,而只需在所有進程都可存取的存儲區中保存這種庫常式的一個副本。程式第一次執行的時候或第一次調用某個庫函數的時候,用動態鏈接方法將程式與共用庫函數相鏈接,這減少了每個可執行文件的長度,但增加了一些運行時間開銷。另一個優點就是可以用庫函數的新版本 ...
  • 一. 準備工作 1. 樹莓派主板 型號:樹莓派3 B型 處理器:四核64位ARM Cortex-A53 CPU 內核架構:ARMv8 2. 一張大於8G的TF卡(本人用的是32G的,也作為PiLFS用) 3. 一臺筆記本電腦,一根網線 4. 點擊此找到並下載 Raspbian 系統 初學者建議推薦選 ...
  • 什麼是Vim? Vim 是經典的 UNIX 編輯器 Vi 的深度改良版本。它增加了許多功能,包括:多級撤銷、格式高亮、命令行歷史、線上幫助、拼寫檢查、文件名補完、塊操作、腳本支持,等等。除了字元界面版本之外,它也有圖形界面版本(比如 gVim)。雖然 Vi 還在繼續維護當中,但是大部分人都只在使用 ...
  • 最近看到Arduino可以利用pwm及蜂鳴器播放音樂,想到樹莓派上也有類似的pwm輸出,所以決定把相應的內容移植到樹莓派上,並給出了樹莓派播放鐵血丹心的例子! ...
  • 1、到Oracle公司的官網裡下載好jdk,網址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2、把下載好的jdk上傳到Linux系統里,這裡我藉助了一個工具WinSCP 3、 ...
  • 1、下載好VMware 2、準備好CentOS的鏡像文件 3、打開VMware創建新的虛擬機 選擇自定義高級後按下一步 繼續下一步 選擇稍後安裝操作系統 客戶機操作系統選擇Linux,版本選擇CentOS 64位(我的是64位的CentOS) 設置虛擬機名稱和安裝路徑 分配處理器 設置虛擬機的記憶體 ...
  • 1.Nginx安裝環境: gcc: 安裝nginx需要先將官網下載的源碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc:yum install gcc-c++ pcre:<!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:A ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...