[TOC]
## inode
我們文件數據存儲在硬盤上,硬盤最小的單位是扇區,一個扇區是512個字節。操作系統讀取硬盤每次讀取4Kb。成為一個塊。文件都存在塊中。同時操作系統還會有一個區域記錄文件的基本信息。這個基本信息成為文件的**元信息**。
### 一、inode信息
元信息存儲的位置成為inode、中文名索引節點(index node)
inode包括的文件信息如下
* 文件的字節數
* 文件擁有者的User ID
* 文件的Group ID
* 文件的讀、寫、執行權限
* 文件的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指文件內容上一次變動的時間,atime指文件上一次打開的時間。
* 鏈接數,即有多少文件名指向這個inode
* 文件數據block的位置
### 二、inode大小
inode也是存儲在硬盤上。需要耗費硬盤空間。
每個inode節點的大小,一般是128字節或256字節。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設置一個inode
可以使用
```shell
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda1 2621440 262203 2359237 11% /
tmpfs 128788 2 128786 1% /dev/shm
```
### 三、inode id
每個inode都有一個id。操作系統根據這個id識別文件
類似人的身份證號。我們通過識別身份證來區別人。人名只是一個稱號。
打開文件,一般會有三步,
- 找到inode 的id
- 獲取**inode**信息
- 找到文件數據所在的塊。讀取內容
### 四、目錄文件
目錄也是一種文件。linux一切都是文件。目錄文件的讀權限(r)和寫權限(w),都是針對目錄文件本身。由于目錄文件內只有文件名和inode號碼
### 五、硬鏈接
一般情況,文件名和**inode** id是一對 一的關系。但是linux下允許多個文件名指向一個**innode** id
可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有文件名。這種情況就被稱為"硬鏈接"(hard link)。

```shell
ln 源文件 目標文件
```
運行上面這條命令以后,源文件與目標文件的inode號碼相同,都指向同一個inode。inode信息中有一項叫做"鏈接數",記錄指向該inode的文件名總數,這時就會增加1。
這個就像PHP的zval結構。zval中含有一個refcount 和一個is_ref.當有引用的時候。會讓ref_count+1.is_ref設置1。
### 六、軟鏈接
文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。因此,無論打開哪一個文件,最終讀取的都是文件B。這時,文件A就稱為文件B的"軟鏈接"(soft link)或者"符號鏈接(symbolic link)。這種就是類似windows下的快捷方式。
```shell
ln -s 源文文件或目錄 目標文件或目錄
```
- PC
- IO模型
- Inode介紹
- Linux
- Linux基本操作命令
- Linux網絡相關命令
- Crontab計劃任務
- Shell
- Sed命令
- Awk命令
- LAMP/LNMP
- PHP
- 基本語法
- 面向對象
- 錯誤和異常處理
- 命名空間
- PHP7
- 正則表達式
- Hashtable
- 變量的內部實現
- PHP-FPM
- PHP運行原理
- swoole
- mysql
- SQL標準
- mysql三范式
- 存儲引擎
- Mysql事務
- Mysql索引
- Mysql優化
- Explain
- MySQL索引原理及慢查詢優化
- MongoDb
- 計算機網絡
- IP協議
- TCP(傳輸控制協議)
- UDP(用戶數據報協議)
- HTTP 協議
- HTTPS
- HTTP的基本優化
- Websocket協議
- 版本控制器
- Git
- Svn
- 數據結構
- 數組
- 鏈表
- 算法