題主一共有三個問題:
Linux檔案型別有什麼?如何修改檔案許可權?軟連結和硬連結的區別是什麼?
我想第一個問題想要問的是Linux的檔案系統型別是什麼?因為如果說單個檔案本身的型別的話,不是由Linux來決定的,而是由建立這個檔案的應用程式決定的,跟windows一樣,.txt
.pdf
.doc
.xls
......
等等.... 無法窮舉,如果是Linux檔案系統的型別的話,這個問題就有意義了,因為檔案系統是由作業系統本身決定的,下面我來一一回答這三個問題:
第一個問題,Linux的檔案系統型別有什麼?
首先,我們來說一下我們如何用最簡單的檢視一個Linux的檔案系統型別,假設你現在已經登入到了一個臺Linux系統(比如CentOS/Ubuntu等),並打開了一個命令列視窗,那麼只要用一個簡單命令即可:mout, 就這個命令
紅線標註的地方就是Linux的檔案系統型別,叫做ext4, 啥意思啊?它的中文翻譯是第四代拓展檔案系統,英文原文是 Fourth extended filesystem, 縮寫成ext4.
為什麼突然出來一個ext4第四代呢?有1,2,3代嗎? 有!
Linux發展到今天一共經歷了4代檔案系統的更替,當然是一代比一代好。
第一代ext, 1992年4月釋出,居於Unix的檔案系統做了一些最佳化,主要還是採用Unix檔案系統的元資料結構,因為支援的檔案系統大小不是太理想,現在已經基本上不用。
第二代ext2, 1993年釋出,它在一代的基礎上做了增強,檔案系統支援大到2TB, 在Linux的核心釋出到2.6的時候,它最大可以支援32TB的大小, 檔案系統也比較高效穩定,所以使用了很長一段時間,弱點是非正常關機導致檔案系統損壞(機率非常大)。
第三代ext3, 從ext2發展而來,主要加入了日誌功能,高可用性進一步提高:
高可用性:系統使用了ext3檔案系統後,即使在非正常關機後,檔案系統也不容易損壞。
資料的完整性:避免了意外宕機對檔案系統的破壞。
檔案系統的速度:ext3的日誌功能對磁碟的驅動器讀寫頭進行了演算法最佳化,效能有所提升
相容性:由ext2檔案系統轉換成ext3檔案系統非常容易
第四代ext4, 現行檔案系統型別,其實是ext3的改進版,在ext3的基礎上提供更佳的效能和可靠性,也提供了更多的功能
改進一,單個檔案可以達到16TB, 而ext3單個檔案最多2TB。
改進二,無限多個子目錄支援,而ext3最多隻能支援約32000個子目錄,有人說32000個夠用了啊,是的,對你夠但對工程應用遠遠不夠。
改進三,採用現代檔案系統的extents理念,每個extent為一組連續資料塊使得讀寫更加流暢順滑,提高效能。
改進四,多塊分配(multiblock allocator), 一次程式呼叫可以分配多個數據塊,簡化了呼叫控制流程,效率更高。
改進五, 線上資料整理.....
所以它是現行linux檔案系統,大資料系統hadoop的最最底層也是使用ext4作為物理儲存,當然它還加上了軟體定義儲存的理念,所以可以無限拓展。
關於Linux的檔案系統型別大概是這些,還有其他的方向等待其他的答主補充。
第二個問題,如何修改檔案系統的許可權?
很簡單,登陸到命令列視窗
這裡我建了一個目錄叫做demo, 和一個檔案叫做
demofile.txt
, 用ls -l 命令檢視他的許可權,我們可以看到有-rw- r-- r-- 的標記,意思是目前這個檔案的許可權是:檔案擁有者(Owner)擁有讀寫的許可權rw- ,跟Owner同一個工作組的成員只有只讀的許可權 r-- ,其他使用者也只有只讀的許可權r--,那麼下面我們來改變它的許可權分配,給同工作組的成員也加上可寫的許可權,因為他們有可能要跟我一起共同編輯這個檔案,做法如下:
chmod g=rw demofile.txt
,就是這麼簡單
g代表group就是組的意思,chmod是專門用來改變檔案和目錄許可權的命令,g=rw就是讓組成員擁有rw即讀寫的許可權,另外還可以把執行許可權賦給組成員,這樣做:chmod g=rwx demofile.txt
這樣做之後我們檢視檔案發現組的許可權變成了rwx 同時檔案變綠了,x代表這個檔案是可以被執行的,當然執行什麼內容要自己往檔案裡面新增。
比如我們想要讓其他使用者也擁有讀取和執行的許可權,這樣做:chmod o=rx demofile.txt, o代表others的意思。
用同樣的方法可以改變其他許可權,比如改變自己的許可權,給自己新增該檔案的可執行許可權:
chmod u=rwx
,這樣自己也有執行許可權了。
改變檔案的許可權基本上就是這麼簡單,就一個命令 chmod.
第三個問題,軟連結和硬連結的區別是什麼?
為了說清楚這個事情我們最好還是動手建立一個軟連線和一個硬連結吧,憑空說很抽象,建立軟連線和硬連結的方法如下:
圖中我們看到,當我們用ls -li 檢視目錄下的檔案時,我們發現很有意思的事情,我們發現檔案file1的編號和硬連結名稱f1的編號是一樣的是吧?而軟連線f2跟file1的編號是不一樣的,差別就在這裡:
這個編號就是linux檔案系統裡面大名鼎鼎的inode,中文可以翻譯成索引節點。
那差別在什麼地方呢?是這樣的,現在f1是file1的硬連結,從檔案系統的角度看,f1和file1是完全對等的,相當於同一個資料塊有兩個不同的檔名稱,他們都指向系統中的同一個儲存塊,你這個時候如果刪掉file1的話,f1同樣可以訪問,你刪掉f1的話file1也同樣可以訪問,東西都還在,不影響。但軟連線就不一樣了,如果你這個時候刪除file1那麼軟連線f2就不可訪問了,也就是它找不著資料塊了,變空了。
Linux裡面對於每個檔案都給了一個唯一編號inode index, 但允許一個檔案存在兩個或多個不同的名字,指向同一個儲存空間,他們是完全平等的,互不干擾。而Linux系統在真正刪除一個檔案的磁碟內容的時候它會判斷是否還有使用同樣inode的檔名指向這個資料塊,如果還有,資料塊就不會被刪除,如果沒有了就真刪除。
軟連線簡單的可以理解成只是原檔案的一個快捷方式,在建立軟連線的同時會建立一個與原始檔不同的inode, 它是透過原始檔的其中一個檔名間接找到資料塊的,相當於 f2-->file1--> data block, 現在你刪除了file1這個檔名,那麼連線就從中間斷開了,快捷方式就沒有地方可以指向了,所以就空了,差別就在這裡。
補充一句人話:
硬連結是每個連線名(可以理解為檔名)直接指向資料塊本身,所以他們擁有相同的inode編號。
軟連線是透過資料塊的其中一個檔名作為中介轉連線到資料塊的,它跟資料塊本身沒有直接關聯,所以使用不同的inode編號,區別在這。
我發現工作中很多系統管理員和開發人員都沒有真正的理解這二者之間的差別。
題主一共有三個問題:
Linux檔案型別有什麼?如何修改檔案許可權?軟連結和硬連結的區別是什麼?
我想第一個問題想要問的是Linux的檔案系統型別是什麼?因為如果說單個檔案本身的型別的話,不是由Linux來決定的,而是由建立這個檔案的應用程式決定的,跟windows一樣,.txt
.pdf
.doc
.xls
......
等等.... 無法窮舉,如果是Linux檔案系統的型別的話,這個問題就有意義了,因為檔案系統是由作業系統本身決定的,下面我來一一回答這三個問題:
第一個問題,Linux的檔案系統型別有什麼?
首先,我們來說一下我們如何用最簡單的檢視一個Linux的檔案系統型別,假設你現在已經登入到了一個臺Linux系統(比如CentOS/Ubuntu等),並打開了一個命令列視窗,那麼只要用一個簡單命令即可:mout, 就這個命令
紅線標註的地方就是Linux的檔案系統型別,叫做ext4, 啥意思啊?它的中文翻譯是第四代拓展檔案系統,英文原文是 Fourth extended filesystem, 縮寫成ext4.
為什麼突然出來一個ext4第四代呢?有1,2,3代嗎? 有!
Linux發展到今天一共經歷了4代檔案系統的更替,當然是一代比一代好。
第一代ext, 1992年4月釋出,居於Unix的檔案系統做了一些最佳化,主要還是採用Unix檔案系統的元資料結構,因為支援的檔案系統大小不是太理想,現在已經基本上不用。
第二代ext2, 1993年釋出,它在一代的基礎上做了增強,檔案系統支援大到2TB, 在Linux的核心釋出到2.6的時候,它最大可以支援32TB的大小, 檔案系統也比較高效穩定,所以使用了很長一段時間,弱點是非正常關機導致檔案系統損壞(機率非常大)。
第三代ext3, 從ext2發展而來,主要加入了日誌功能,高可用性進一步提高:
高可用性:系統使用了ext3檔案系統後,即使在非正常關機後,檔案系統也不容易損壞。
資料的完整性:避免了意外宕機對檔案系統的破壞。
檔案系統的速度:ext3的日誌功能對磁碟的驅動器讀寫頭進行了演算法最佳化,效能有所提升
相容性:由ext2檔案系統轉換成ext3檔案系統非常容易
第四代ext4, 現行檔案系統型別,其實是ext3的改進版,在ext3的基礎上提供更佳的效能和可靠性,也提供了更多的功能
改進一,單個檔案可以達到16TB, 而ext3單個檔案最多2TB。
改進二,無限多個子目錄支援,而ext3最多隻能支援約32000個子目錄,有人說32000個夠用了啊,是的,對你夠但對工程應用遠遠不夠。
改進三,採用現代檔案系統的extents理念,每個extent為一組連續資料塊使得讀寫更加流暢順滑,提高效能。
改進四,多塊分配(multiblock allocator), 一次程式呼叫可以分配多個數據塊,簡化了呼叫控制流程,效率更高。
改進五, 線上資料整理.....
......
所以它是現行linux檔案系統,大資料系統hadoop的最最底層也是使用ext4作為物理儲存,當然它還加上了軟體定義儲存的理念,所以可以無限拓展。
關於Linux的檔案系統型別大概是這些,還有其他的方向等待其他的答主補充。
第二個問題,如何修改檔案系統的許可權?
很簡單,登陸到命令列視窗
這裡我建了一個目錄叫做demo, 和一個檔案叫做
demofile.txt
, 用ls -l 命令檢視他的許可權,我們可以看到有-rw- r-- r-- 的標記,意思是目前這個檔案的許可權是:檔案擁有者(Owner)擁有讀寫的許可權rw- ,跟Owner同一個工作組的成員只有只讀的許可權 r-- ,其他使用者也只有只讀的許可權r--,那麼下面我們來改變它的許可權分配,給同工作組的成員也加上可寫的許可權,因為他們有可能要跟我一起共同編輯這個檔案,做法如下:
chmod g=rw demofile.txt
,就是這麼簡單
g代表group就是組的意思,chmod是專門用來改變檔案和目錄許可權的命令,g=rw就是讓組成員擁有rw即讀寫的許可權,另外還可以把執行許可權賦給組成員,這樣做:chmod g=rwx demofile.txt
這樣做之後我們檢視檔案發現組的許可權變成了rwx 同時檔案變綠了,x代表這個檔案是可以被執行的,當然執行什麼內容要自己往檔案裡面新增。
比如我們想要讓其他使用者也擁有讀取和執行的許可權,這樣做:chmod o=rx demofile.txt, o代表others的意思。
用同樣的方法可以改變其他許可權,比如改變自己的許可權,給自己新增該檔案的可執行許可權:
chmod u=rwx
demofile.txt
,這樣自己也有執行許可權了。
改變檔案的許可權基本上就是這麼簡單,就一個命令 chmod.
第三個問題,軟連結和硬連結的區別是什麼?
為了說清楚這個事情我們最好還是動手建立一個軟連線和一個硬連結吧,憑空說很抽象,建立軟連線和硬連結的方法如下:
圖中我們看到,當我們用ls -li 檢視目錄下的檔案時,我們發現很有意思的事情,我們發現檔案file1的編號和硬連結名稱f1的編號是一樣的是吧?而軟連線f2跟file1的編號是不一樣的,差別就在這裡:
這個編號就是linux檔案系統裡面大名鼎鼎的inode,中文可以翻譯成索引節點。
那差別在什麼地方呢?是這樣的,現在f1是file1的硬連結,從檔案系統的角度看,f1和file1是完全對等的,相當於同一個資料塊有兩個不同的檔名稱,他們都指向系統中的同一個儲存塊,你這個時候如果刪掉file1的話,f1同樣可以訪問,你刪掉f1的話file1也同樣可以訪問,東西都還在,不影響。但軟連線就不一樣了,如果你這個時候刪除file1那麼軟連線f2就不可訪問了,也就是它找不著資料塊了,變空了。
Linux裡面對於每個檔案都給了一個唯一編號inode index, 但允許一個檔案存在兩個或多個不同的名字,指向同一個儲存空間,他們是完全平等的,互不干擾。而Linux系統在真正刪除一個檔案的磁碟內容的時候它會判斷是否還有使用同樣inode的檔名指向這個資料塊,如果還有,資料塊就不會被刪除,如果沒有了就真刪除。
軟連線簡單的可以理解成只是原檔案的一個快捷方式,在建立軟連線的同時會建立一個與原始檔不同的inode, 它是透過原始檔的其中一個檔名間接找到資料塊的,相當於 f2-->file1--> data block, 現在你刪除了file1這個檔名,那麼連線就從中間斷開了,快捷方式就沒有地方可以指向了,所以就空了,差別就在這裡。
補充一句人話:
硬連結是每個連線名(可以理解為檔名)直接指向資料塊本身,所以他們擁有相同的inode編號。
軟連線是透過資料塊的其中一個檔名作為中介轉連線到資料塊的,它跟資料塊本身沒有直接關聯,所以使用不同的inode編號,區別在這。
我發現工作中很多系統管理員和開發人員都沒有真正的理解這二者之間的差別。