這篇文章為大家整理了一些linux基本概念,Linux和UNIX中的檔案系統是一個以「/」為根的樹狀式檔案結構,「/」是Linux和UNIX中的根目錄,同樣它也是檔案系統的起點,希望對大家有幫助。
Linux 和UNIX 中的檔案系統是一個以/ 為根的樹狀檔案結構,/ 是Linux 和UNIX 中的根目錄,同樣它也是檔案系統的起點。所有的檔案和目錄都位於 / 路徑下,包括我們常聽到的 /usr、/etc、/bin、/home 等。在早期的 UNIX 系統中,各個廠商都定義了自己檔案系統的命名組成,比較混亂,而且難以區分。
為了避免在Linux 系統上也出現這種命名混亂的問題,在1994 年推出了FSSTND(FileSystem Standard) 的Linux 檔案系統層次結構標準,後來UNIX 團隊把FSSTND發揚光大,成為了後來的FHS(FileSystem Hierarchy Standard) 。
FHS 標準使得眾多的 Linux distributions(Linux 發行版) 有了統一的檔案系統命名標準,換一種說法:FHS 就是一種檔案系統的命名標準。一般來說,Linux distributions 都需要遵循FHS 規定的
但是,FHS 僅僅定義了兩層規範,第一層是/ 下面的各個目錄要放什麼文件數據,例如/etc 下面需要放設定文件,/bin 和/sbin 下面需要放可執行檔等;第二層是針對/usr 和/var 這兩個目錄來定義的,例如/usr/share 需要放共享數據,/var/log需要放系統登入檔案等。
下面我就來為你介紹一下 Linux 在 / 下有哪些定義和規格。
我下面介紹的這些規範,只是FHS 文件指定的目錄和文件的一部分,完整的標準可在http://www.pathname.com/fhs/ 在線獲得。
首先來介紹根目錄的重要性和意義:
根目錄是整個系統中最重要的一個目錄,後續的目錄都是以根目錄為基礎進行衍生,更重要的一點,根目錄與開機、還原、系統修復有關,由於系統開機需要特定的環境,所以當系統出現錯誤時,根目錄也必須要包含有能夠修復檔案系統的程式才行。所以 FHS 規定不要將根目錄的分區大小設定的太大,實際上是越小越好,以減少出錯率。
FHS 同樣規定了根目錄下面應該要有這些目錄的存在。
/home 目錄是系統預設的使用者主資料夾(home directory)。
/boot 目錄包含啟動作業系統所需的靜態文件,例如 Linux 內核,這些文件對系統的啟動至關重要。 Linux Kernel 常用的檔案名稱 vmlinuz, 但是如果你使用的是 grub2 這個開機程序,還會存在 /boot/grub2 這個目錄。
我剛剛搭建完成的 Linux ,boot 下面是這樣的。
千萬不要刪除 /boot 目錄,這樣做可能會導致系統無法啟動。
/dev 目錄都是一些裝置節點,這些裝置節點是 Linux 系統中的裝置或是核心提供的虛擬裝置。這些設備節點同樣對系統正常運作至關重要。 /dev 目錄和子目錄下的裝置是字元裝置和區塊裝置。字元設備就是滑鼠、鍵盤、數據機,塊設備就是硬碟、軟碟機。儲存 /dev 目錄下的檔案就相當於儲存某個裝置。
比較重要的檔案有
/dev/hda:主IDE 通道上的主設備,當提到IDE/ATA 硬碟時,主通道是第一和第二個驅動器連接到主機板或介面卡的通道。
/dev/hdb:主 IDE 通道上的從裝置。
/dev/tty0:第一個虛擬控制台。虛擬控制台又被稱為 VC,也稱為虛擬終端 VT,是用於電腦使用者介面的鍵盤和顯示器的概念組合。
/dev/tty1:第二個虛擬控制台。
/dev/sda:主 SCSI 和 SATA 頻道上的第一個裝置。
/dev/lp0:第一個並行埠。
下面是我 Linux 下面的目錄。
/etc 目錄是為電腦本地的設定檔保留的,系統主要的設定檔都放在這個目錄下,例如帳號密碼,服務的啟動停,一般來說,這個目錄下面一般使用者只有讀取權限,只有root 使用者有修改權限(關於權限的問題,可以閱讀筆者的上一篇文章看完這篇Linux 權限,通透了!)
/etc 下比較重要的幾個檔案有
/etc/modprobe.d核心驅動程式模組
/etc/passwd儲存使用者密碼
#/etc/fstab 儲存掛載資訊
/etc/issue儲存系統啟動是顯示的內容
/etc 目錄下不要存放二進位文件,二進位檔案最好放在 /sbin 和/bin。
/etc 目錄下有兩個重要的文件,/etc/x11 用來存放X Window 系統設定文件,例如xorg.conf,/etc/opt 這個主要存放第三方協力軟體/opt 的相關設定檔。
系統的函式庫有很多,而/lib 目錄就像一個倉庫,它用來存放執行/bin 和/sbin 中二進位檔案所需的庫,這些共享庫映像對於系統boot 和執行根檔案系統中的命令特別重要。
media 是媒體的英文,也就是說/media#下可以存放用於可移動媒體(例如USB、DVD、CD-ROM 和Zip 磁碟)的安裝點和子目錄。
如果你想要暫時掛載某些額外的設備,你可以放在/mnt 這個目錄下,其實最早的時候,/mnt 用途和/media 一樣,只是後來有了/media 之後,這個目錄就被用來臨時掛載了。
/opt/ 目錄為大多數應用程式軟體包提供儲存空間,將檔案放置在/opt/ 目錄中的套件會建立一個與包同名的目錄。反過來,該目錄保存了原本會分散在整個文件系統中的文件,從而為系統管理員提供了一種簡單的方法來確定特定包中每個文件的角色。
例如,如果sample 是位於/opt/ 目錄中的特定軟體包的名稱,那麼所有檔案都放置在/opt/sample/ 目錄中的目錄中,例如/opt/sample/bin/ 表示二進位檔案和/opt/sample/man/ 用於手冊頁。
/proc 目錄本身就是一個虛擬檔案系統(virtual filesystem),他放置的數據是在內存中,例如係統核心信息,行程信息,週邊設備已經網絡狀態等。因為這個目錄下的資料都是在記憶體中的,所以本身不佔用磁碟空間。
這個目錄下比較重要的檔案有/proc/cpuinfo、/proc/dma、/proc/interrupts、 /proc/net/。
/sbin 目錄儲存 root 使用者使用的可執行檔。 /sbin 中的可執行檔在啟動時使用,用於系統管理和執行系統復原操作。除了 /bin 中的二進位之外,/sbin 還包含啟動、復原和修復系統所需的二進位檔案。
/sbin 目錄下包含 arp、clock、halt、init、grub、ifconfig、route、shutdown 等。
這個目錄下面存放的都是一些臨時文件,這些文件在系統重新啟動時被清除。
這個目錄其實和 /proc 非常類似,也是一個虛擬檔案系統,主要是記錄核心與系統硬體相關資訊。這個目錄同樣也不佔用磁碟空間。
/usr 目錄是需要好好聊聊得一個目錄了,很多讀者都誤以為/usr 是user 的縮寫,其實usr 是Unix Software Resource 的縮寫,FHS 建議軟體開發者應該將資料合理的放置在這個目錄的次目錄下,不要自己創建軟體獨立的目錄。
所有系統預設的軟體都會放在/usr 下面,因此這個目錄有點類似Windows 中的C:\Windows\ C:\Program files\ 這兩個目錄的綜合,一般來說,系統剛安裝完畢後,這個目錄會佔用較多的磁碟容量,/usr 的次目錄建議有下面這些內容
*/usr/bin/*一般用戶能夠使用的指令都放在這個目錄下,CentOS 7 開始,/usr/bin 下指令和/bin 目錄下指令一毛一樣。
*/usr/lib/*基本上,與 /lib 功能相同,所以 /lib 就是連結到這個目錄的。
/usr/local 系統管理員在本機下載的軟體都建議安裝到這個目錄下,以便於管理。
/usr/sbin 非系統正常運作所需的系統指令,最常見的就是某些網路伺服器軟體的服務指令,不過基本功能與/sbin 差不多,因此目前/ sbin 就是連結到此目錄中的。
/usr/share 共享檔案放置區,這個目錄下還有這些次目錄/usr/share/man ,/usr/share/doc,/usr/share/zoneinfo
/usr/games 與遊戲相關的資料放置處
/usr/include C/C 等程式語言的header 和include 放置處,也是直接連結的。
/usr/src 一般原始碼建議放在這,src 是 source 的意思,至於核心原始碼則建議放在 /usr/src/linux 目錄下。
早期的FHS 規定係統開機後所產生的各項資訊應該要放置到/var/run 目錄下,新版的FHS 則規範到/run 下面。
如果說/usr 是安裝時會佔用較大磁碟容量的目錄,那麼/var#就是在系統運作後才會漸漸佔用磁碟容量的目錄。 /var 主要包括高速緩存、登入檔案以及某些軟體運作所產生的目錄,包括程式文件,例如MySQL 資料庫檔案等,常見的目錄有
/var/cache應用程式快取目錄
/var/crash 系統錯誤訊息
#/var/log 日誌記錄
/var/run 程序的識別資料
/var/tmp 暫存檔案目錄
/var/lock 檔案鎖定記錄
srv 可以看做service 的縮寫,是一些網路服務啟動之後,這些服務所需要取用的資料目錄,常見的服務例如WWW, FTP 。
CentOS 7 在目錄的編排上與過去的版本不同,上面已經大致描述過了,這裡做個匯總,比較大的差異就是將許多原本應該在根目錄裡面的目錄,將全部數據挪到了/usr 裡面去,然後進行連結設置,這些內容包括
為了方便大家直覺的看到這些目錄都是做什麼的,我手繪了一個圖,圖中的這些目錄之間的關係很像一棵樹,所以這個目錄又叫目錄樹。
這個目錄樹已經很清楚了,就沒什麼好說的了。
和其他系統一樣,Linux 中的路徑也分為絕對路徑(absolute)和相對路徑(relative),這兩種的寫法依據如下:
這裡需要注意一點,相對路徑是以你當前所在路徑的相對位置來移動的,例如你當前在/boot 這個目錄下,你想要移動到/usr/src 這個目錄
絕對路徑表示法:/usr/src
相對路徑表示法:…/usr/src
這裡還需要注意兩個特殊的目錄:
關於絕對路徑和相對路徑的取捨問題:當檔案路徑很長時,建議使用相對路徑,因為你不用向絕對路徑一樣,把所有的路徑都寫一遍,而直接使用…/ 即可;
但是從檔案路徑的正確性來說,絕對路徑要比相對路徑要好。
如果你是在寫程式來管理系統,務必使用絕對路徑,因為絕對路徑不管你的檔案路徑在哪,都會找到指定的檔案;而相對路徑如果檔案移動後,就可能會存在找不到文件的情況。
下面我們就來聊一聊和目錄相關的幾條指令
# 就是change directory 的縮寫,這條指令能夠切換目前工作目錄,有以下四種切換方式
cd /路径名 # 表示切换到指定的工作目录cd ./ # 表示切换到当前工作目录(无任何切换)cd .. # 表示切换到当前工作目录的上一层目录cd ~ # 表示返回到当前用户目录
下面我們來示範這四個cd 切換方式的動作
可以看到,我們分別使用cd /usr/local 切換到了指令目錄下;使用cd ./ 沒有切換任何目錄(白浪費了兩秒鐘);使用cd … 切換到了目前工作目錄的上一層;使用cd ~ 切換到了目前登入使用者的預設工作目錄。
這裡要注意的就是 cd ~ ,如果你直接使用 cd ,切換效果和 cd ~ 一樣,也就是說 "cd ~ == cd "。
上面還有一條指令是pwd ,這個指令是我們最常用的指令,它的使用頻率幾乎跟cd 一樣,因為一條cd 指令往往後面跟著一條pwd 指令,所以你可以看出pwd 指令有多重要了把。
pwd 是 Print Working Directory 的縮寫,它是列印出目前所在目錄的指令。
但是pwd 不一定只用來顯示目前工作路徑,它也可以用來顯示指定工作目錄下的檔案路徑
不過這個指令好像沒什麼用,因為我們已經知道工作目錄下的路徑了,還要印出來做什麼?
mkdir 用來建立新目錄,它是 make directory 的縮寫,一般來說,它後面會跟著兩個參數。
下面是使用mkdir 建立檔案目錄的操作
如上圖所示,我們在/tmp 檔案目錄下建立了一個叫做test1 的空目錄,並列印出了目前的工作目錄。
如果你想要建立不想讓其他使用者存取的目錄,你可以使用下面的指令
mkdir -m 711 test2
上圖中的ls -ld 列出文件目錄的詳細信息,可以看到,詳細資料最前面的是文件的權限。
一個一個建立目錄太麻煩了,現在我們想要快速建立這些目錄,例如我們想要建立/test1/test2/test3/test4 這種目錄格式,我們使用了下面程式碼
Linux 會提出我們不能使用這種創建方式。
此時就需要-p 這個參數的出現了,這個參數能夠允許我們遞歸創建目錄,如下所示
只不過使用-p這種方式並不建議使用,因為很容易打錯字。 。 。
rmdir 用來刪除空目錄,它的使用和 mkdir 非常類似,mkdir -p 用於遞歸建立目錄,同樣的,rmdir -p 也能夠遞歸刪除目錄。如下圖所示
這裡要注意,rmdir 只是刪除空目錄,這也表示目錄裡面有內容的話是無法刪除的,那該如何刪除呢?可以直接使用 rm -r 來進行刪除。
使用mv 能夠修改目錄的名稱,例如我們創建了一個叫做test 的目錄,後來我們覺得這個目錄無法體現出來它的所有者,我們想要改變它的名字,這時候就可以用mv 指令就可以修改。
在了解完基本的目錄操作之後,下面來想一個問題,為什麼我們能夠在各種目錄下執行ls 指令都能夠顯示內容?照理說 ls 不應該只是在其存放路徑下才能夠使用嗎?
首先大家需要先了解一個PATH 的概念,PATH 是環境變數,當我們在執行一條指令的時候,首先系統會按照PATH 的設定去每個PATH 下搜尋文件名為ls 的可執行文件,如果有多個可執行文件,那麼優先搜尋到的先被執行。
原文連結:用了這麼久 Linux ,才知道這些概念。 。 。
相關推薦:《Linux影片教學》
以上是技術解答linux在/下的定義與規範的詳細內容。更多資訊請關注PHP中文網其他相關文章!