INODE全稱叫index node
表中包含文件系統所有文件列表
一個節點是在一個表項 包含有關文件的信息 ( 元數據 )
包括: 文件類型,權限,UID,GID 鏈接數(指向這個文件名路徑名稱個數) 該文件的大小和不同的時間戳 指向磁盤上文件的數據塊指針 有關文件的其他數
1 文件引用一個是 inode號
2 我們是通過文件名來引用一個文件
3 一個目錄是目錄下的文件名和文件inode號之間的映射
由於 inode 找數據是不斷地 創建新的節點 所以他的節點創建有侷限性 而他的最大數量可爲 1T
而之前我們所學的 cp mv rm 等命令 都可以用 inode來解釋 例如
rm 命令 刪除
rm 命令相當於鏈接數遞減 從而釋放的inode號可以被重用 把數據塊放在空閒列表中 刪除目錄項 數據實際上不會馬上被刪除 但當另一個文件使用數據塊 時將被覆蓋
硬鏈接
1 創建硬鏈接會增加額外的記錄項以引用文件
2 對應於同一文件系統上一個物理文件
3 每個目錄引用相同的inode號
4 創建時鏈接數遞增
5 刪除文件時 rm命令遞減計數的鏈接 文件要存在
6 至少有一個鏈接數 當鏈接數爲零時 該文件被刪除
7 硬鏈接不能跨越驅動器或分區 指向
8 硬鏈接與硬連接之間 指向同一個文件 地位 等同
語法 ln filename [linkname ]
軟鏈接也稱符號鏈接
1 一個符號鏈接指向另一個文件
2 ls - l的 顯示鏈接的名稱和引用的文件
3 一個符號鏈接的內容是它引用文件的名稱
4 可以對目錄進行 可以跨分區 指向的是另一個文件的路徑
5 其大小爲指向的路徑字符串的 長度 不增加或減少目標文件inode的引用計數
7 軟鏈接可以對應多個文件 但這些文件 都不相同
語法 ln -s filename [linkname]
硬鏈接和軟連接之間的區別
硬鏈接是相對於同一文件系統上的物理文件 可以有多個別名 但只有一個文件 而軟連接可以指向多個文件雖然文件不同 但 軟鏈接可以跨區 指向 創建硬連接時需要佔用節點 而軟連接則直接指向路徑字符串 不增加或減少節點
硬軟連接的簡單 演示 硬盤 到 系統上的文件 到 硬鏈接 再到 軟鏈接
重定向 標準輸入輸出 和管道
標準輸入輸出簡稱 IO
Linux給程序提供三種I/O設備
標準輸入(STDIN)-0 默認接受來自鍵盤的輸入
標準輸出(STDOUT)-1 默認輸出到終端窗口
標準錯誤(STDERR)-2 默認輸出到終端窗口
程序:指令+數據 讀入數據 Input 輸出數據 Output
打開的文件都有一個fd file descriptor 文件描述符
I/O重定向就是 改變默認位置
把輸出和錯誤重新定向到文件
下面是重定向的一些命令
1 > 把STDOUT重定向到文件
2 2> 把STDERR重定向到文件
3 &> 把所有輸出重定向到文件
4 > 文件內容會被覆蓋
5 # set -C 禁止將內容覆蓋已有文件 但可追加
6 強制覆蓋 >|
7 # set +C 允許覆蓋
8 >> 原有內容基礎上 追加內容
9 2> 覆蓋重定向錯誤輸出數據流;
10 2>> 追加重定向錯誤輸出數據流;
11 標準輸出和錯誤輸出各自定向至不同位置:
12 COMMAND > /path/to/file.out 2> /path/to/error.out
13 合併標準輸出和錯誤輸出爲同一個數據流進行重定向:
14 &>:覆蓋重定向 &>> 追加重定向
15 COMMAND > /path/to/file.out 2> &1 (順序很重要)
16 COMMAND >> /path/to/file.out 2>> &1 find /etc -name passwd 2> /dev/null
17 () 合併多個程序的STDOUT ( cal 2007 ; cal 2008 ) > all.txt
重定向 屬於將數據流 導入或導出 一般和管道符使用 最佳
tr命令
tr – 轉換和刪除字符
tr [OPTION]... SET1 [SET2] 選項
-c或——complermen 取字符集的補集
-d或——delete 刪除所有屬於第一字符集的字符
-s或—squeeze-repeats 把連續重複的字符以單獨一個字符 表示
-t或--truncate-set1 將第一個字符集對應字符轉化爲第二 字符集對應的字符
管道
管道(使用符號“|”表示)用來連接命令
例如命令1 | 命令2 | 命令3 | … 將命令1的STDOUT發送給命令2的STDIN 命令2的 STDOUT發送到命令3的STDIN STDERR默認不能通過管道轉發 可利用2>&1 或 |& 實現 最後一個命令會在當前shell進程的子shell進程中執行用來 組合多種工具的功能 ls | tr 'a-z' 'A-Z'
管道是在 shell 腳本中連接 命令 字符 文件 的最佳 粘合劑
通過管道 我們可以把一些單一的命令組織起來 完成一項複雜的任務
例如 重定向到多個目標
$命令1 | tee 文件名 | 命令2 把命令1的STDOUT保存在文件名中,然後管道輸入給命令2 使用 保存不同階段的輸出 複雜管道的故障排除 同時查看和記錄輸出