第三次作業
一、軟鏈接與硬鏈接的區別
硬鏈接就是同一個文件使用了多個別名(他們有共同的 inode)。
硬鏈接可由命令 link 或 ln 創建,如:
1
2
|
#link oldfile newfile #ln oldfile newfile |
由于硬鏈接是有著相同 inode 號僅文件名不同的文件,因此,刪除一個硬鏈接文件并不影響其他有相同 inode 號的文件。有防止誤刪除的功能
硬連接大小和源文件一樣
硬鏈接不能對目錄進行創建,只可對文件創建。
軟鏈接(也叫符號鏈接)與硬鏈接不同,文件用戶數據塊中存放的內容是另一文件的路徑名的指向。軟鏈接就是一個普通文件,只是數據塊內容有點特殊。不能防止誤刪除
軟鏈接大小和源文件不一致
軟鏈接可對文件或目錄創建。
1
2
|
ln -s old. file soft.link ln -s old. dir soft.link. dir |
加-s選項表示創建的是軟鏈接。
刪除軟鏈接并不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接就變成了死鏈接。
二、inode 工作原理
1、什么是inode
首先文件的數據分為兩部分:元數據和數據(內容)
文件存儲在硬盤上,而硬盤的最小存儲單位叫做“扇區”(Sector)。每個扇區存儲512字節(相當于0.5KB)
而操作系統讀取硬盤的時候,不會一個個扇區的讀取,而是一次連續讀取多個扇區,即一次性讀取一個“塊”(block)。這種有多個扇區組成的“塊”,是文件存取的最小單位,“塊”的大小,最常見的是4KB,即連續八個sector組成的一個block
文件的數據存儲在“塊”中,那文件的元數據也要存儲在一個地方,而這個地方就叫做inode,中文為:“索引節點”。
也就是說inode=存儲文件元數據的區域=索引節點
2、inode的組成
inode存儲文件元數據的,包括文件的權限、所屬主、組、時間戳、大小等;具體情況如下
文件的讀(r)、寫(w)、執行(x)權限;例如-rwxrw-rw-
鏈接數,既有多少文件名指向這個inode(也就是硬鏈接數)
文件數據block的位置
文件的大小字節數byte
文件的擁有者屬主User ID=UID
文件的屬組Group ID=GID
文件的時間戳:共有三個,atime=訪問時間;mtime=修改(內容)時間;ctime=更改(由元數據)時間(因為inode存儲元數據,所以也可以說是修改inode的時間)
可以用stat命令查看文件的inode信息:
從上圖我們可以看到用stat查看文件的元數據的內容都有哪些(除了文件名),而事實上文件除文件名以外的所有信息都存儲在inode中,而文件名另有存儲區。
3、inode的大小
inode中存儲著文件的元數據,所以inode也是要占用存儲空間的;所以在硬盤格式化時,操作系統會自動將硬盤分成兩個區域。一個是數據去,存放文件數據,一個是inode區,存儲文件的元數據。inode節點大小在格式化時,就會設定。一般是128字節或256字節。例如一塊1GB硬盤,每個inode節點大小為128字節,每1KB設置一個inode,那么inode table的大小就會達到128MB,占整塊硬盤的12.8%
查看每個分區的inode總數和使用率,可以使用df -i命令
由于每個文件都要有inode,而每個分區提供的inode也是有限的,所以存在硬盤空間未滿,inode已滿,而不能夠創建新文件的情況
4、inode號碼
在每個分區中每一個inode都有唯一一個號碼,不同分區,inode號碼有可能相同,所以每個分區都有自己的inode table,操作系統通過分區內唯一的inode號碼來識別查找不同的文件。
而在linxu系統內部,系統本身是不使用文件名來識別文件的,文件名在系統內只是inode號碼便于用戶使用的別稱。在實際操作過程中,用戶像是通過文件名找到并對文件進行操作,但事實上在系統中,系統顯示用文件名找到對應的inode號碼–>獲取inode的信息(元數據和指針)–>找到文件數據所在的數據塊block,最后讀出數據的。
可是使用ls -i命令查看文件的inode號碼
1
|
ls -i 文件 |
5、目錄文件
在linux系統中,目錄也是文件;而與inode table對應的這是目錄項(dirent)。每個目錄項,由兩部分組成:包含文件的文件名,以及該文件名對應的inode號碼
可以用ls -i命令查看目錄的inode號碼
1
|
ls -i 目錄 |
6、inode的特殊作用
1. 有時,文件名包含特殊字符,無法正常刪除。這時,直接刪除 inode 節點,就能起
到刪除文件的作用。
2. 移動文件或重命名文件,只是改變文件名,不影響 inode 號碼。
3. 打開一個文件以后,系統就以 inode 號碼來識別這個文件,不再考慮文件名。因此,
通常來說,系統無法從 inode 號碼得知文件名。
4.刪除文件,實質上是刪除對應文件的inode,而數據并沒有刪除,如果恢復數據,則恢復對應的inode號碼即可;而如果有新文件占用原inode號碼,則數據會被覆蓋
三、課前預習
1 、將/etc/issue 文件中的內容轉換為大寫后保存至/tmp/issue.out 文件中
1
|
cat /etc/issue | tr [[:lower:]] [[:upper:]] > /tmp/issue .out |
2 、將當前系統登錄用戶的信息轉換為大寫后保存至/tmp/who.out 文件中
1
|
who | tr [[:lower:]] [[:upper:]] > /tmp/who .out |
3 、一個linux 用戶給root 發郵件,要求郵件標題為”help” ,郵件正文如下:
Hello, I am 用戶名,the system version is here,please help me to
check it ,thanks!
操作系統版本信息
1
2
3
4
5
6
7
|
mail -s Help root <<end > Hello,I am ` whoami `, > the system version is here, > please help me to check it, > thank! > `lsb_release` > end |
或者可以將命令 whoami 換成$(echo $USER)也可以
4 、將/root/ 下文件列表,顯示成一行,并文件名之間用 空格 隔開
1
|
ls /root/ | tr "\n" " " |
注意:ls輸出結果在終端上之間顯示是橫向排序!但是實際輸出結果在重定向到文本文件中時,是以列的形式排序,所以要注意
命令解析:ls /root/產生的文件列表結果通過管道傳給tr命令
tr "\n" " " > Output.txt 是將列表信息中的換行符 \n 替換成空白字符(空格)然后把輸出結果重定向到Output.txt文本文件中
5 、file1 文件 的 內容為:”1 2 3 4 5 6 7 8 9 10” 計算出所有數字的總和
1
2
|
echo "1 2 3 4 5 6 7 8 9 10" > file1 cat file1 | tr " " "+" | bc |
6 、刪除Windows 文本文件中的'^M' 字符
現在windows創建文本文件test.txt,輸入a、b、c、d每個字母都回車換行
1
2
3
|
cat -A test .txt #這一步是查看text.txt文件內的^M符號的,不看也行 cat -A test .txt | tr -d "\r" >Output.txt cat Output.txt #檢查結果 |
命令解析:window中的換行符號是^M,而linux的是\n所以很容易識別
利用cat -A test.txt將包括^M在內的所有內容通過管道 | 傳給tr
tr -d "^M" >Output.txt 將傳過來結果中的"^M"刪除,然后輸出重定向到Output.txt文本文件中
7 、處理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4 ”,只保留其中的數字和空格
1
|
echo 'xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4 ' | tr - cd [[:digit:] " " ] |
命令解析:echo 'xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4 '將結果傳遞給tr
值得注意的是在此字符串中存在!$,而如果不用''強引用,則會相當于上一命令最后一項
tr -cd [[:digit:]" "] 中 -c 為補集 -d 是刪除 所以意思是將數字和空白字符的補集,即除了數字和空白字符意外的刪除
8 、將PATH 變量每個目錄顯示在獨立的一行
1
|
echo $PATH | tr ":" "\n" |
命令解析:echo $PATH 得到的變量結果通過管道 | 傳給tr,而$PATH變量中分割符為“:”
tr ":" "\n" 將分割符“:”替換成“\n”換行符
9 、刪除指定文件的空行
1
|
cat Output.txt | tr -s "\n" |
命令解析:cat Output.txt 將結果傳給tr
tr -s "\n" 將重復的"\n" 換行符刪掉壓縮
10、將文件中每個單詞(字母)顯示在獨立的一行,并無空行
1
|
cat Output.txt | tr -cs [:alpha:] "\n" |
命令解析:cat Output.txt將結果傳遞給tr
tr -cs [:alpha:] "\n" -c 將大小寫字母[:alpha:]的補集,即除字母意外的,全部替換為換行符"\n",然后利用 -s 將除字母意外的重復的空白字符壓縮刪除;
原創文章,作者:NameLess,如若轉載,請注明出處:http://www.www58058.com/28163