學習Linux的檔案系統指令與檔案權限

Jack CHiu
追蹤我

圖片來源:我自己畫的

在學習Linux的過程中,若對檔案系統不了解,則會非常沒有頭緒,很多指令都是伴隨著目錄去執行的。例如:若想要做磁碟分割,就必須用到/dev, /mnt的路徑。路徑裡面會擺放著磁碟分割的檔案。

圖片顯示說明,每一個目錄有著不同的功用。完整了解File System之後,才知道微軟有多好,不讓消費者知道檔案系統這種東西,只讓使用者習慣使用C磁碟區和D磁碟區。完全不讓使用者去了解是如何系統運作的。讓使用者習慣後,就變得不會改變和沒有創意。這點在Mac OS也沒有發生,只有Windows…

在了解上圖之前,我認為有必要去了解大型電腦系統Unix發展的歷史,UNIX一種電腦作業系統,具有多工、多用戶的特徵。於1969年,在美國AT&T公司的貝爾實驗室開發類UNIX(UNIX-like)*1。

柏克萊大學在1979年發展出自己的作業系統1BSD*2,發展出各種作業系統,包含MacOS,下圖綠色的是OpenSource的作業系統,粉紅色的是ClosedSource作業系統,還有一半開放一半封閉的電腦系統,一般消費者比較知道就是MacOS,下圖便是整個譜系。

我們現在使用的Linux便是由Linux之父Linus Torvalds,在1991年使用Unix開發出來的Unix-Like系統(大型商業主機搬到小型家用系統),並且開放原始碼,供所有的人下載使用。時至今日Linux也廣泛流行於伺服器、超級電腦、嵌入式裝置(RaspberryPi)、手機(Android)….*3


圖片來源:https://zh.wikipedia.org/wiki/UNIX

*1 UNIX https://zh.wikipedia.org/wiki/UNIX
*2 BSP https://zh.wikipedia.org/wiki/BSD
*3 Linux https://zh.wikipedia.org/wiki/Linux

檔案目錄Directory

大致上了解歷史後,接著就要了解檔案系統的功能。檔案系統其實就是依照不同的功能,將執行檔放到不同的目錄(Directory)

目錄名稱 目錄功用
用來存放核心 (kernel) 及開機必備的檔案,諸如︰/boot、/etc、/bin、/sbin、/dev、/mnt、/modules、/root、/stand、/tmp 等目錄,皆是預設放置於此分割區空間。
此分割區也是當系統出現問題,以單使用者模式進入時唯一自動掛載的可運行空間,所以除了 /tmp 目錄外,通常都不會再將其他目錄另行掛載到其他分割區上。
它所需的空間不會很大,剛安裝完大約十幾 MB 左右,分個 100 ~ 300 MB 給它是個不錯的抉擇。
/boot 開機流程中所需的檔案及設定檔皆存放於此。
/bin & /sbin 在『單使用者 (Single User)』與『多使用者 (Multi-User)』模式下,都會用得到的一般使用者指令,這些指令都是開機時必備的。
它們將被安置於 root 分割區。/bin 與 /sbin 的差別在於 /bin 存放著一般操作性的指令;而 /sbin 則存放著與系統管理有關的操作指令。Linux有非常多指令是用來設定系統環境的,這些指令只有root才能夠利用來『設定』系統,其他使用者最多只能用來『查詢』而已。 放在/sbin底下的為開機過程中所需要的,裡面包括了開機、修復、還原系統所需要的指令。 至於某些伺服器軟體程式,一般則放置到/usr/sbin/當中。至於本機自行安裝的軟體所產生的系統執行檔(system binary), 則放置到/usr/local/sbin/當中了。常見的指令包括:fdisk, fsck, ifconfig, mkfs等等。
/dev 裝置節點檔 (device node) 的存放目錄。
Unix-Like 系統是透過裝置檔與您的所有週邊裝置做溝通的,這點與 Window 系統有極大的不同。pvcreate, lvcreate, fdisk是產生這些節點檔的工具程式
/etc 系統設定檔及指令稿 (script) 所存放的所在目錄。
使用者密碼檔以及群組設定檔也放置於此,因此,/etc 目錄可說是最重要的目錄了。
/home 使用者的家目錄。
如果沒有為此目錄規劃專屬分割區的話,它將會歸屬到 /usr/home 的模式,並於根目錄下做一 /home 的連結目錄。
/mnt 這個目錄通常是空的,專們用來當作暫時掛載 (mount) 檔案系統之用,如︰光碟片或磁碟片。
/modules 核心 (kernel) 模組存放的地方。
/root 系統管理者 (root) 帳號的家目錄。
/stand 在安裝過程中所用到的指令皆存放於此,另外亦存放了許多系統指令,供您做緊急修復時使用。
/tmp 暫存檔案區。
大部份程式皆會於運作中建立暫存檔,此目錄即為此存在。
/usr 此目錄包含了大部份的使用者指令、應用程式、資料庫及技術手冊。
/usr/bin & /usr/sbin 存放一般的使用者指令、程式編輯器、應用軟體、系統服務程式 (daemon)、系統工具等等。
與 /bin & /sbin 相同,/bin 存放一般操作產的指令,而 /sbin 存放與系統管理或服務程式有關的指令。
/usr/include 存放著標準的 C 語言標頭檔,供程式開發使用。
/usr/lib 系統函式庫
/usr/libdata 系統工具的資料庫。
/usr/libexec 供其他程式呼叫執行的系統服務程式 (daemon) 及系統工具。
/usr/share 系統軟體的資料庫
/var 存放使用者信件、系統記錄檔、系統暫存檔以及輸出緩衝區。
SWAP 記憶體交換空間 (即俗稱的虛擬記憶體)。
系統開始執行後,便會使用到記憶體,再加上您的操作軟體,再多的記憶體都會有使用完的時刻,然而有些軟體雖然尚在執行中,但其在記憶體中所佔用的容量並未在運作或無需馬上運作,此時 SWAP 便發揮其作用了。
系統會將佔用著記憶體但並未或無需馬上運作的程序,先移到 SWAP 上,將空間挪出來給真正需要的程序來使用,待有空間之後,再將 SWAP 上需要運作的程序移到實體記憶體上運作。

檔案權限說明Permissions

在windows一般來說,比較不會有檔案權限的概念,只知道系統管理者有最大的權限。但在Linux檔案系統,便有使用者、使用者群組、其他及系統管理者(Root),可以分別設定可讀(read)、可寫入(write)、可執行(exec),三種不同的類型。在Linux會使用分數來表示三種不同的權限:r:4, w:2, x:1

在終端機輸入#ll 就會看到檔案的資訊如下:

-rw-r–r–  1 jack  student  0 Jun 23 17:07 file1

  • 有多少連結到這個檔案 (1)
  • 擁有者名稱 (jack)
  • 群組名稱 (student)
  • 檔案位元大小 (0)
  • 建立日期 (Feb 23)
  • 建立時間 (17:07)
  • 檔案名稱 (file1)

圖片來源:https://pressidium.com/blog/2017/deciphering-linux-file-system-permissions/

檔案顯示格式分別是10個字元,由左到右是從1到0。

[-] [rwx] [r-x] [r–]
1  234  567  890          

Windows用戶被蒙蔽的地方 

windows用戶就一定不明白,為什麼還要分權限。稍微解釋一下,在Linux系統中,最高權限像神一般的化身就是root(系統管理員),他所建立的檔案,基本上他是一定可以讀寫執行(rwx),但是其他用戶卻不是這樣的,他必須指定哪個用戶可以讀寫(rw),哪個群組可以讀讀,不是一般使用者則只有唯讀。但在windows裡面,我們只有在重灌電腦或執行某些核心系統檔案的時候,才知道需要系統管理員權限。一般很少人會特別去設定檔案的讀取權限。即使有這個功能,我們還是不太會去使用,因為windows就是給一般家用電腦單一用戶使用,不會去想到要設定權限的功能,也不會去共用電腦。

Linux除了當家用電腦外,大部分都是當作伺服器在使用,那麼登入伺服器的使用者,就必須給予不同的權限,避免亂更動檔案系統。若入侵者取得root權限,入侵者等於直接掌握那台伺服器的生殺大權,進入使用者目錄就可以竊取出所有用戶的帳號密碼,若是電商伺服器當然就包含信用卡資料,另外Mobile app也很多都是架構在Linux系統上的,所以信用卡資料也很容易被竊取。所以設定檔案權限,一方面也是有資安的考量。

 

實作指令

一般在指定一個檔案使用權限時,會使用#setfacl指令or #chgrp,  #chmod, #chown指令,實際執行範例來試試看。

root要讓用戶jack可以看 蟻人與黃蜂女的預告片檔案Ant-Man.mp4
#setfacl -m u:jack:rx Ant-Man.mp4

如果要讓使用者群組student的用戶都可以用看Ant-Man.mp4,其他人都不能看
#setfacl -m g:student:rx Ant-Man.mp4

也可以這樣寫
#chgrp student Ant-Man.mp4
#chmod 750 Ant-Man.mp4

若Ant-Man.mp4是在movie目錄底下,我希望student群組的學生們都可以在movie目錄,看後面新增的電影。
#chgrp student movie/
#chmod 750 movie/

若我希望學生jack可以完全管理movie目錄,可以自由新增或刪除電影,以節省磁碟空間
#chown -R jack:student movie/

最後,若想了解更多FileSystem的內容可以參考下面的詳細圖。

圖片來源:https://fsocietybrasil.org/a-arvore-de-diretorios-do-linux/

若有興趣想學習更深入的LinuxLinux+ 技巧可以上Udemy 中文課程
Linux系統管理教程(Linux運維+雲計算學科發布)
本教程是專為Linux初學者打造的入門課程,從Linux系統安裝部署講起,涵蓋常用操作命令、軟件包管理、用戶和權限管理等內容
目前黑色星期五購物節,只要原價NT$7800,現在只要台幣300元!
 

你會學到

  • 學習linux基礎知識,為從事IT行業打下堅實基礎知識
  • 從Linux系統安裝部署講起,涵蓋常用操作命令、軟件包管理、用戶和權限管理、文件系統管理、Shell編程、服務管理、日誌管理等Linux系統管理方方面面的內容。
Jack CHiu
追蹤我

看完這篇文章,幫自己拍拍手👏,也請幫我5下拍手👏👏👏👏👏支持我繼續寫下去,謝謝你耶!然後,我其實很好聊的,你可以直接IG私訊@jackskyhigh和我聊聊!或email:jack@jackskyhigh.com

💡想要即時收到更多我的文章嗎?

每周一早上 08:30 ,我會發一封《我的FIRE生活提案》的電子報~內容是我所閱讀、FIRE實驗、生產力與FIRE財務自由有關的內容(偶爾稍微插播一些跟家庭親子生活、運動訓練)。

強烈建議在按下訂閱之前,我建議花5分鐘先來我的訂閱註冊頁,了解為什麼我會開始經營部落格和發電子報,確認是你想要看的內容,再按下訂閱

如果你有朋友也需要FIRE提早退休的建議,請分享給他。