Linux操做系統文件系統基礎知識詳解

一 、Linux文件結構
  文件結構是文件存放在磁盤等存貯設備上的組織方法。主要體如今對文件和目錄的組織上。
  目錄提供了管理文件的一個方便而有效的途徑。
  Linux使用標準的目錄結構,在安裝的時候,安裝程序就已經爲用戶建立了文件系統和完整而固定的目錄組成形式,並指定了每一個目錄的做用和其中的文件類型。
                      /根目錄
                              ┃
┏━━┳━━━┳━━━┳━━━╋━━━┳━━━┳━━━┳━━━┓
┃   ┃      ┃     ┃     ┃     ┃      ┃     ┃     ┃
bin  home    dev     etc     lib     sbin    tmp      usr    var
                      ┃                               ┃
                  ┏━┻━┓     ┏━━┳━━┳━━┳━┻━┳━━┓
                  ┃      ┃    ┃   ┃    ┃    ┃     ┃    ┃
                 rc.d   cron.d X11R6  src   lib   local    man  bin
                  ┃                              
┏━━━┳━━┳━┻━┳━━━┓        
┃      ┃    ┃      ┃      ┃
init.d rc0.d  rc1.d  rc2.d …… linux bin lib src
  Linux採用的是樹型結構。最上層是根目錄,其餘的全部目錄都是從根目錄出發而生成的。微軟的DOS和windows也是採用樹型結構,可是在DOS和 windows中這樣的樹型結構的根是磁盤分區的盤符,有幾個分區就有幾個樹型結構,他們之間的關係是並列的。可是在linux中,不管操做系統管理幾個磁盤分區,這樣的目錄樹只有一個。從結構上講,各個磁盤分區上的樹型目錄不必定是並列的。

  若是這樣講很差理解的話,我來舉個例子:
  有一塊硬盤,分紅了4個分區,分別是/;/boot;/usr和windows下的fat
  對於/和/boot或者/和/usr,它們是從屬關係;對於/boot和/usr,它們是並列關係。

  若是我把windows下的fat分區掛載到/mnt/winc下,(掛載??哦,別急,呵呵,一會就講,一會就講。)那麼對於/mnt/winc和/usr或/mnt/winc和/boot來講,它們是從屬於目錄樹上沒有任何關係的兩個分支。
  由於linux是一個多用戶系統,制定一個固定的目錄規劃有助於對系統文件和不一樣的用戶文件進行統一管理。但就是這一點讓不少從windows轉到linux的初學者感到頭疼。下面列出了linux下一些主要目錄的功用。
  /bin 二進制可執行命令
  /dev 設備特殊文件
  /etc 系統管理和配置文件
  /etc/rc.d 啓動的配置文件和腳本
  /home 用戶主目錄的基點,好比用戶user的主目錄就是/home/user,能夠用~user表示
  /lib 標準程序設計庫,又叫動態連接共享庫,做用相似windows裏的.dll文件
  /sbin 系統管理命令,這裏存放的是系統管理員使用的管理程序
  /tmp 公用的臨時文件存儲點
  /root 系統管理員的主目錄(呵呵,特權階級)
  /mnt 系統提供這個目錄是讓用戶臨時掛載其餘的文件系統。
  /lost+found 這個目錄平時是空的,系統非正常關機而留下「無家可歸」的文件(windows下叫什麼.chk)就在這裏
  /proc 虛擬的目錄,是系統內存的映射。可直接訪問這個目錄來獲取系統信  息。
  /var 某些大文件的溢出區,比方說各類服務的日誌文件
  /usr 最龐大的目錄,要用到的應用程序和文件幾乎都在這個目錄。其中包  含:
  /usr/X11R6 存放X window的目錄
  /usr/bin 衆多的應用程序
  /usr/sbin 超級用戶的一些管理程序
  /usr/doc linux文檔
  /usr/include linux下開發和編譯應用程序所須要的頭文件
  /usr/lib 經常使用的動態連接庫和軟件包的配置文件
  /usr/man 幫助文檔
  /usr/src 源代碼,linux內核的源代碼就放在/usr/src/linux裏
  /usr/local/bin 本地增長的命令
  /usr/local/lib 本地增長的庫
  二 、linux文件系統

  文件系統指文件存在的物理空間,linux系統中每一個分區都是一個文件系統,都有本身的目錄層次結構。linux會將這些分屬不一樣分區的、單獨的文件系統按必定的方式造成一個系統的總的目錄層次結構。一個操做系統的運行離不開對文件的操做,所以必然要擁有並維護本身的文件系統。
  Llinux文件系統使用索引節點來記錄文件信息,做用像windows的文件分配表。
  索引節點是一個結構,它包含了一個文件的長度、建立及修改時間、權限、所屬關係、磁盤中的位置等信息。一個文件系統維護了一個索引節點的數組,每一個文件或目錄都與索引節點數組中的惟一一個元素對應。系統給每一個索引節點分配了一個號碼,也就是該節點在數組中的索引號,稱爲索引節點號。
linux文件系統將文件索引節點號和文件名同時保存在目錄中。因此,目錄只是將文件的名稱和它的索引節點號結合在一塊兒的一張表,目錄中每一對文件名稱和索引節點號稱爲一個鏈接。

  對於一個文件來講有惟一的索引節點號與之對應,對於一個索引節點號,卻能夠有多個文件名與之對應。所以,在磁盤上的同一個文件能夠經過不一樣的路徑去訪問它。
  能夠用ln命令對一個已經存在的文件再創建一個新的鏈接,而不復制文件的內容。鏈接有軟鏈接和硬鏈接之分,軟鏈接又叫符號鏈接。它們各自的特色是:
  硬鏈接:原文件名和鏈接文件名都指向相同的物理地址。
目錄不能有硬鏈接;硬鏈接不能跨越文件系統(不能跨越不一樣的分區)
文件在磁盤中只有一個拷貝,節省硬盤空間;

  因爲刪除文件要在同一個索引節點屬於惟一的鏈接時才能成功,所以能夠防止沒必要要的誤刪除。
  符號鏈接:用ln -s命令創建文件的符號鏈接符號鏈接是linux特殊文件的一種,做爲一個文件,它的數據是它所鏈接的文件的路徑名。相似windows下的快捷方式。

  能夠刪除原有的文件而保存鏈接文件,沒有防止誤刪除功能。
  這一段的的內容過於抽象,又是節點又是數組的,我已經儘可能通俗再通俗了,又很差加例子做演示。你們若是仍是雲裏霧裏的話,我也沒有什麼辦法了,只有先記住,往後在實際應用中慢慢體會、理解了。這也是我學習的一個方法吧。
三 、掛載文件系統
  由上一節知道,linux系統中每一個分區都是一個文件系統,都有本身的目錄層次結構。linux會將這些分屬不一樣分區的、單獨的文件系統按必定的方式造成一個系統的總的目錄層次結構。這裏所說的「按必定方式」就是指的掛載。
將一個文件系統的頂層目錄掛到另外一個文件系統的子目錄上,使它們成爲一個總體,稱爲掛載。把該子目錄稱爲掛載點。
舉個例子吧:
  根分區:
  /根目錄

┏━━━━┳━━━━━┳━━━━━┳━━━━━╋━━━━━┳━━━━━┳━━━━━┳━━━━━┓
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
bin home dev etc lib sbin tmp usr var

┏━┻━┓
┃ ┃
rc.d cron.d

┏━━━┳━━━┳━┻━┳━━━━┓
┃ ┃ ┃ ┃ ┃
init.d rc0.d rc1.d rc2.d ……
  /usr分區 :
  usr

┏━━━━┳━━━╋━━━┳━━━┳━━━┓
┃ ┃ ┃ ┃ ┃ ┃
X11R6 src lib local man bin
┃ ┃
┃ ┏━━━╋━━━┓
┃ ┃ ┃ ┃
linux bin lib src
  掛載以後就造成了文章開始時的那個圖。像不像掛上去的?
  注意:一、掛載點必須是一個目錄。
  二、一個分區掛載在一個已存在的目錄上,這個目錄能夠不爲空,但掛載後這個目錄下之前的內容將不可用。
對於其餘操做系統創建的文件系統的掛載也是這樣。可是須要理解的是:光盤、軟盤、其餘操做系統使用的文件系統的格式與linux使用的文件系統格式是不同的。光盤是ISO9660;軟盤是fat16或ext2;windows NT是fat1六、NTFS;windows98是fat1六、fat32;windows2000和windowsXP是fat1六、fat3二、 NTFS。掛載前要了解linux是否支持所要掛載的文件系統格式。
  掛載時使用mount命令:
格式:mount [-參數] [設備名稱] [掛載點]
  其中經常使用的參數有

  -t 指定設備的文件系統類型,常見的有:
  minix linux最先使用的文件系統
  ext2 linux目前經常使用的文件系統
  msdos MS-DOS的fat,就是fat16
  vfat windows98經常使用的fat32
  nfs 網絡文件系統
  iso9660 CD-ROM光盤標準文件系統
  ntfs windows NT 2000的文件系統
  hpfs OS/2文件系統
  auto 自動檢測文件系統
  -o 指定掛載文件系統時的選項。有些也可用在/etc/fstab中。經常使用的  有
  codepage=XXX 代碼頁
  iocharset=XXX 字符集
  ro 以只讀方式掛載
  rw 以讀寫方式掛載
  nouser 使通常用戶沒法掛載
  user 可讓通常用戶掛載設備
  提醒一下,mount命令沒有創建掛載點的功能,所以你應該確保執行mount命令時,掛載點已經存在。(不懂?說白了點就是你要把文件系統掛載到哪,首先要先建上個目錄。這樣OK?)
  例子:windows98裝在hda1分區,同時計算機上還有軟盤和光盤須要掛載。
  # mk /mnt/winc
  # mk /mnt/floppy
  # mk /mnt/cdrom
  # mount -t vfat /dev/hda1 /mnt/winc
  # mount -t msdos /dev/fd0 /mnt/floppy
  # mount -t iso9660 /dev/cdrom /mnt/cdrom
  如今就能夠進入/mnt/winc等目錄讀寫這些文件系統了。
  要保證最後兩行的命令不出錯,要確保軟驅和光驅裏有盤。(要是硬盤的磁盤片也能夠常常隨時更換的話,我想就不會犯這樣的錯誤了 :-> )
若是你的windows98目錄裏有中文文件名,使用上面的命令掛載後,顯示的是一堆亂碼。這就要用到 -o 參數裏的codepage iocharset選項。codepage指定文件系統的代碼頁,簡體中文中文代碼是936;iocharset指定字符集,簡體中文通常用cp936或 gb2312。
  當掛載的文件系統linux不支持時,mount必定報錯,如windows2000的ntfs文件系統。能夠從新編譯linux內核以得到對該文件系統的支持。關於從新編譯linux內核,就不在這裏說了。
  四 、自動掛載

  每次開機訪問windows分區都要運行mount命令顯然太煩瑣,爲何訪問其餘的linux分區不用使用mount命令呢?
  其實,每次開機時,linux自動將須要掛載的linux分區掛載上了。那麼咱們是否是能夠設定讓linux在啓動的時候也掛載咱們但願掛載的分區,如windows分區,以實現文件系統的自動掛載呢?
  這是徹底能夠的。在/etc目錄下有個fstab文件,它裏面列出了linux開機時自動掛載的文件系統的列表。個人/etc/fstab文件以下:
  /dev/hda2 / ext3 defaults 1 1
  /dev/hda1 /boot ext3 defaults 1 2
  none /dev/pts devpts gid=5,mode=620 0 0
  none /proc proc defaults 0 0
  none /dev/shm tmpfs defaults 0 0
  /dev/hda3 swap swap defaults 0 0
  /dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0
  /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
  /dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0
  /dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0
  在/etc/fstab文件裏,第一列是掛載的文件系統的設備名,第二列是掛載點,第三列是掛載的文件系統類型,第四列是掛載的選項,選項間用逗號分隔。第五六列不知道是什麼意思,還望高手指點。
  在最後兩行是我手工添加的windows下的C;D盤,加了codepage=936和iocharset=cp936參數以支持中文文件名。參數defaults實際上包含了一組默認參數:
  rw 以可讀寫模式掛載
  suid 開啓用戶ID和羣組ID設置位
  dev 可解讀文件系統上的字符或區塊設備
  exec 可執行二進制文件
  auto 自動掛載
  nouser 使通常用戶沒法掛載
  async 以非同步方式執行文件系統的輸入輸出操做

  你們能夠看到在這個列表裏,光驅和軟驅是不自動掛載的,參數設置爲noauto。(若是你非要設成自動掛載,你要確保每次開機時你的光驅和軟驅裏都要有盤,呵呵。)

linux

相關文章
相關標籤/搜索