一、Linux文件系統
1、創建文件系統
Linux中當磁盤格式化創建文件系統時,會創建一定數量的節點索引Inode以及一定數量的塊block,其中inode具有存儲文件屬性以及指向文件實體block的指針的功能,而block則具有存放文件內容的功能,CentOS6.X系統中非啟動分區的默認Inode大小為256字節,啟動分區的inode默認大小為128字節。Linux讀取文件的過程是先通過文件名找到對應的inode,再通過inode訪問其指向的block,最后從block中讀取文件內容輸出到屏幕上。
2、刪除文件的原理
Linux刪除文件的依據是檢查文件的i_link和i_count是否都為0,其中i_count指的是文件的硬鏈接數,而i_link指的是調用文件的進程數,當源文件和所有硬鏈接被刪除且沒有進程調用該文件時,該文件的磁盤空間將會在存儲新數據時被占用或在磁盤fsck檢查時被系統回收。
二、文件屬性
Linux系統中我們使用ls -lhi命令可以查看到目錄下所有文件以及文件對應的屬性,每個文件共有十列數據,除了最后一列的文件名外都是文件的屬性,因此文件名不存儲在inode中而是存儲在目錄的block中。所有十列數據的具體含義如下:
第一列:Inode編號
1、inode稱為索引節點,它的作用時存放文件的屬性信息以及作為文件的索引
2、inode是磁盤上的一塊存儲空間,CentOS非啟動分區默認256字節,啟動分區默認128字節
3、inode的表現形式是一串數字,不同的文件對應的inode在文件系統中是唯一的
4、inode節點號相同的文件,互為硬鏈接文件,可以認為是一個文件的不同入口
5、ext3/ext4文件系統下,一般情況一個文件被創建后占用一個inode和至少一個block
6、block的大小一般有1K,2K,4K幾種,其中引導分區等為1K,其他普通分區為4K
7、如果一個文件很大,可能占多個block,如果文件很小,至少占用一個並且剩余空間浪費了
8、查看inode以及block的大小和總量 dumpe2fs /dev/sda3|grep -iE 'inode size|block size' dumpe2fs /dev/sda3|grep -iE 'inode count|block count'
9、查看inode總量以及使用量 df -i
10、查看文件inode信息 ls -li stat 文件名
11、格式化時指定inode以及block的大小 mkfs.ext4 -l 256 -b 2048 /dev/sda5
12、Inode編號在系統中是唯一的
與inode關聯的block知識總結如下:
1、磁盤讀取數據是按block為單位讀取的
2、一個文件可能占用多個block,每讀取一個block就會消耗一次磁盤I/O
3、如果要提升磁盤I/O性能,那么就要盡可能一次性讀取數據盡量多
4、一個block只能存放一個文件的內容,無論文件有多小。
5、block並非越大越好,block太大對於小文件存放就會浪費磁盤空間
6、大文件(大於16K)一般設置block大一點,小文件(小於1K)一般設置block小一點
7、如果文件都是小文件而block太大就會浪費磁盤空間
8、如果文件都是大文件而block太小就會浪費磁盤I/O、
9、文件較大時,block設置大一些會提升磁盤訪問效率
10、ext3/ext4文件一般設置為4K
11、block大小在格式化時設置
第二列:文件類型及文件權限
第一位代表的是文件類型
Linux系統不像Windows系統一樣以擴展名區別文件類型,Linux文件類型在文件創建時就已經確定了,無法修改。
Linux系統中常用的文件類型有普通文件以“-”表示、目錄以“d”表示、符號鏈接以“l”表示、塊設備以"b"表示,除此之外還有字符設備以“c”表示、套接字文件以“s”表示和管道文件以“c”表示
Linux系統中普通文件大致分為文本文件、二進制文件比如系統命令文件、數據格式文件,數據格式文件只能用命令讀取比如/var/log/wtmp文件只能用last命令讀取
第二到四位代表的是文件屬主的權限
第五到七位代表的是文件屬組的權限
第八到十位代表的是其他用戶的權限
文件權限的設置通過chmod命令
文件的默認權限通過umask命令,目錄的默認權限是777-umask的值,文件的默認權限是666-umask的值
文件權限分為普通權限和特殊權限,普通權限有r讀取權限數字表示為4、w寫入權限數字表示為2、x執行權限數字表示為1,特殊權限有suid、sgid、t
數字方式設置權限,將三個位置各自的權限轉為數字然后相加得出一組三位數字或四位數字,如rw-r--r--的數字表示就是42-4--4--,所以設置權限就是chmod 644
字符方式設置權限,字符方式設置權限時用u代表文件屬主的權限,g代表文件屬組的權限,o代表其他用戶的權限,+代表增加權限,-代表取消權限,=代表修改權限,於是rw-r--r--的權限設置就是chmod u=rw,g=r,o=r
目錄的普通權限r代表可以瀏覽目錄的內容,沒有x權限時會提示不能訪問目錄下的文件和子目錄但仍可以看到文件名和目錄名,w代表增加,刪除,修改目錄下文件名,需要有x權限才能實際操作,x代表可以進入目錄
suid顯示在文件屬主的x權限位上,當沒有x權限時顯示為S,否則顯示為s,該權限只對命令和二進制程序文件有效,讓非root用戶可以以root身份運行只有root才能使用的命令
被設置suid的命令在運行時,用戶具有root對該命令的所有權限
sgid與suid不同,不僅可以對文件設置,也可以對目錄設置,對目錄設置時可以讓其他用戶在該目錄下創建的文件和目錄具有和該目錄相同的組設置
suid與sgid是一把雙刃劍,對系統安全有一定威脅,應該取消不必要的系統默認suid和sgid命令,通過find命令的perm參數可以找出suid和sgid命令
t權限讓其他用戶不能刪除文件
特殊權限還有i不可修改權限和a只追加權限,需要通過chattr設置,lsattr查看,i權限讓任何人不可以修改文件,a權限讓文件只能被動追加不能認為主動追加內容
第三列:文件硬鏈接數
創建鏈接的方式 ln -s 源文件名 鏈接文件名 -s 創建軟鏈接
硬鏈接知識點:
1、具有相同Inode節點號的多個文件互為硬鏈接文件
2、刪除硬鏈接文件或源文件任意之一,文件實體並未被刪除
3、只有刪除源文件與所有硬鏈接文件,文件實體才會被刪除
4、當所有硬鏈接文件及源文件被刪除后,在存放新數據時會占用該文件空間或者磁盤fsck檢查時空間被系統回收
5、硬鏈接文件就是文件的另一個入口
6、可以通過創建硬鏈接來防止重要文件被誤刪
7、通過命令ln 源文件名 鏈接文件名 來創建硬鏈接
8、硬鏈接文件可以用rm命令刪除
9、對於沒有進程調用的文件,硬鏈接數為0,文件就會被刪除
軟鏈接知識點:
1、軟連接類似Windows的快捷方式(可以用readlink命令查看其指向)
2、軟連接類似一個文本文件,里面存放的時源文件的路徑,指向源文件實體
3、刪除源文件,軟連接文件依然存在,但是無法訪問指向的源文件路徑內容了
4、失效的時候一般是白字紅底閃爍提示
5、軟連接文件可以用命令ln -s 源文件名 鏈接文件名 來創建
6、軟連接和源文件是不同類型的文件,也是不同的文件,inode號不相同
7、刪除軟連接文件可以用rm命令
文件鏈接結論:
1、刪除軟連接文件對源文件和硬鏈接文件無任何影響
2、刪除硬鏈接文件對源文件和軟連接文件無任何影響
3、刪除源文件對硬鏈接文件無影響,但是軟連接文件會失效
4、同時刪除源文件和硬鏈接文件會使文件真正被刪除
5、很對硬件設備的快照功能就是利用了硬鏈接的原理
6、源文件和硬鏈接文件具有相同的inode節點號,可以認為是一個文件或一個文件的多個入口
7、源文件和軟連接文件inode節點號不相同,是不同的文件,軟連接相當於源文件的快捷方式,含有源文件的位置指向
目錄鏈接結論:
1、目錄不能創建硬鏈接但是可以創建軟連接
2、目錄的軟連接是運維中的常用技巧,可以生成一個固定的訪問路徑又不影響軟件升級
3、目錄的硬鏈接不能跨越文件系統
4、每個目錄都有一個硬鏈接"."號,以及對應上級目錄的硬鏈接".."
5、在父目錄里創建子目錄,父目錄的連接數加一,但是在父目錄創建文件,父目錄的鏈接數不會增加
第四列:文件屬主
第五列:文件屬組
useradd命令創建用戶,會修改passwd,shadow,group,gshadow四個文件
groupadd命令創建組
chown命令修改文件屬主,也可以修改屬組
chgrp命令修改文件屬組
Linux角色通過UID和GID區分
在Linux中UID為0的用戶即為超級用戶
Linux用戶分為超級用戶,普通用戶和虛擬用戶
超級用戶UID為0,GID也為0
虛擬用戶UID為1~499,GID也為1~499
普通用戶UID為500~65535,GID也為500~65535
/etc/passwd文件即用戶賬號信息文件,必須了解,文件中每行以冒號分隔共有七列
第一列為賬號名稱
第二列為賬號密碼
第三列為賬號UID
第四列為賬號GID
第五列為用戶說明
第六列為用戶家目錄
第七列為shell解釋器
/etc/shadow文件即用戶密碼文件,文件中每行以冒號分隔共有九列
第一列賬號名稱
第二列賬號密碼
第三列最近更改密碼的時間
第四列禁止修改密碼的天數
第五列用戶必須更改密碼的天數
第六列警告更改密碼的期限
第七列不活動時間
第八列失效時間
第九列標志
/etc/group文件即組信息文件,文件中每行以冒號分隔共四列
第一列組名
第二列組密碼
第三列GID
第四列組成員
/etc/gshadow文件即組密碼文件,文件中每行以冒號分隔共四列
第一列組名
第二列組密碼
第三列組管理員賬號
第四列組成員
第六列:文件大小
第七、八、九列:文件修改時間
stat命令查看文件詳細屬性
文件訪問時間:文件內容被訪問就改變
文件修改時間:文件內容被修改就改變
文件改變時間:文件屬性改變時就改變
第十列:文件名
三、相關面試題
1、軟鏈接和硬鏈接的區別,答題思路從以下四方面回答:
1)軟硬鏈接的概念
2)軟硬鏈接的創建方式
3)軟硬鏈接對於文件的區別
4)軟硬鏈接對於目錄的區別
2、一個100M(100000K)的磁盤分區,分別寫入1K的文件或寫入1M的文件,分別可以寫多少個
假設block為4K的情況下,寫入1K的文件分兩種情況
inode足夠,那么寫入文件數量就是block的數量,浪費3/4的容量
inode數量小於block數量,那么寫入文件數量就是inode的數量,浪費3/4的容量
寫入1M的文件的數量等於總的block數量/(1M/block大小),基本可以寫入250個1M的文件
3、如果向磁盤寫入數據提示如下錯誤:No sapce left on device,通過df -h查看磁盤空間發現沒有滿,可能是什么原因,發生這種情況的原因是什么
磁盤空間滿了有兩種情況,一是inode消耗完了,二是block消耗完了,根據df -h結果可知block沒有消耗完,那么可能就是inode消耗完了,產生的原因可能是系統臨時郵件目錄生成了太多小文件