linux 查看文件系統的方法「linux系統類型都有哪些」

Linux系統文件類型和Linux系統目錄結構詳解

1. Linux系統文件類型

Linux 支持多種文件系統,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,為了對各類文件系統進行統一管理,Linux引入了虛擬文件系統VFS(Virtual File System),為各類文件系統提供一個統一的操作界面和應用編程接口。

Linux啟動時,第一個必須掛載的是根文件系統;若系統不能從指定設備上掛載根文件系統,則系統會出錯而退出啟動。之後可以自動或手動掛載其他的文件系統。因此,一個系統中可以同時存在不同的文件系統。

不同的文件系統類型有不同的特點,因而根據存儲設備的硬件特性、系統需求等有不同的應用場合。在嵌入式Linux應用中,主要的存儲設備為 RAM(DRAM, SDRAM)和ROM(常採用FLASH存儲器),常用的基於存儲設備的文件系統類型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs等。

1.1 基於Flash的文件系統

Flash(閃存)作為嵌入式系統的主要存儲媒介,有其自身的特性。Flash的寫入操作只能把對應位置的1修改為0,而不能把0修改為1(擦除Flash就是把對應存儲塊的內容恢復為1),因此,一般情況下,向Flash寫入內容時,需要先擦除對應的存儲區間,這種擦除是以塊(block)為 單位進行的。

  閃存主要有NOR和NAND兩種技術。Flash存儲器的擦寫次數是有限的,NAND閃存還有特殊的硬件接口和讀寫時序。因此,必須針對Flash的硬件特性設計符合應用要求的文件系統;傳統的文件系統如ext2等,用作Flash的文件系統會有諸多弊端。

  在嵌入式Linux下,MTD(Memory Technology Device,存儲技術設備)為底層硬件(閃存)和上層(文件系統)之間提供一個統一的抽象接口,即Flash的文件系統都是基於MTD驅動層的(參見上面的Linux下的文件系統結構圖)。使用MTD驅動程序的主要優點在於,它是專門針對各種非易失性存儲器(以閃存為主)而設計的,因而它對Flash有更好的支持、管理和基於扇區的擦除、讀/寫操作接口。

  順便一提,一塊Flash芯片可以被劃分為多個分區,各分區可以採用不同的文件系統;兩塊Flash芯片也可以合併為一個分區使用,採用一個文件系統。即文件系統是針對於存儲器分區而言的,而非存儲芯片。

支持在Flash上運行的常用文件系統有cramfs、jffs、jffs2、yaffs、yaffs2等。

如果想在Flash上實現讀寫操作,通常在NorFlash上我們會選取jffs及jffs2文件系統,在NandFlash上選用yaffs或yaffs2文件系統。Yaffs2文件系統支持大頁(大於512字節/頁)的NandFlash存儲器。

它們也都是基於文件系統+mtd+flash設備的架構。linux-2.6.27後,內核加入了一種新型的flash文件系統UBI(Unsorted Block Images)。

1.1.1 jffs2

  JFFS文件系統最早是由瑞典 Axis Communications公司基於Linux2.0的內核為嵌入式系統開發的文件系統。JFFS2是RedHat公司基於JFFS開發的閃存文件系統,最初是針對RedHat公司的嵌入式產品eCos開發的嵌入式文件系統,所以JFFS2也可以用在Linux, uCLinux中。

  Jffs2: 日誌閃存文件系統版本2 (Journalling Flash FileSystem v2)

  主要用於NOR型閃存,基於MTD驅動層,特點是:可讀寫的、支持數據壓縮的、基於哈希表的日誌型文件系統,並提供了崩潰/掉電安全保護,提供“寫平衡”支持等。缺點主要是當文件系統已滿或接近滿時,因為垃圾收集的關係而使jffs2的運行速度大大放慢。

  目前jffs3正在開發中。關於jffs系列文件系統的使用詳細文檔,可參考MTD補丁包中mtd-jffs-HOWTO.txt。

jffsx不適合用於NAND閃存主要是因為NAND閃存的容量一般較大,這樣導致jffs為維護日誌節點所佔用的內存空間迅速增大,另外,jffsx文件系統在掛載時需要掃描整個FLASH的內容,以找出所有的日誌節點,建立文件結構,對於大容量的NAND閃存會耗費大量時間。

1.1.2 affs/yaffs2

yaffs/yaffs2是專為嵌入式系統使用NAND型閃存而設計的一種日誌型文件系統。與jffs2相比,它減少了一些功能(例如不支持數據壓縮),所以速度更快,掛載時間很短,對內存的佔用較小。另外,它還是跨平台的文件系統,除了Linux和eCos,還支持WinCE, pSOS和ThreadX等。

yaffs/yaffs2自帶NAND芯片的驅動,並且為嵌入式系統提供了直接訪問文件系統的API,用戶可以不使用Linux中的MTD與VFS,直接對文件系統操作。當然,yaffs也可與MTD驅動程序配合使用。

yaffs與yaffs2的主要區別在於,前者僅支持小頁(512 Bytes) NAND閃存,後者則可支持大頁(2KB) NAND閃存。同時,yaffs2在內存空間佔用、垃圾回收速度、讀/寫速度等方面均有大幅提升。

  • yaffs製作工具:mkyaffsimage
  • yaffs2製作工具:mkyaffs2image(適合64M)、mkyaffs2image-128(適合128M以上)

命令:

  • 生成yaffs2鏡像文件:./mkyaffs2image-128M rootfs/ rootfs.yaffs2
  • 生成yaffs鏡像文件:./mkyaffsimage rootfs/ rootfs.yaffs

燒寫:

tftp 0x30008000 rootfs.yaffs2
nand erase 0x580000 7a80000
nand write.yaffs 0x30008000 0x580000 dbb040

更多Linux後台架構師學習資料,視頻,面試題,請私信

Linux系統文件類型和Linux系統目錄結構詳解

設置內核啟動參數:

setenv bootargs "noinitrd root=/dev/mtdblock3 rootfstyle=yaffs2 console=ttySAC0,115200 init=/linuxrc mem=64M"
setenv bootcmd "nand read 0x30008000 0x80000 0x500000;bootm 0x30008000"

1.1.3 Cramfs:Compressed ROM File System

  Cramfs是Linux的創始人Linus Torvalds參與開發的一種只讀的壓縮文件系統。它也基於MTD驅動程序。

  在cramfs文件系統中,每一頁(4KB)被單獨壓縮,可以隨機頁訪問,其壓縮比高達2:1,為嵌入式系統節省大量的Flash存儲空間,使系統可通過更低容量的FLASH存儲相同的文件,從而降低系統成本。

  Cramfs文件系統以壓縮方式存儲,在運行時解壓縮,所以不支持應用程序以XIP(eXecute In Place,芯片內執行)方式運行,所有的應用程序要求被拷到RAM里去運行,但這並不代表比Ramfs需求的RAM空間要大一點,因為Cramfs是採用分頁壓縮的方式存放檔案,在讀取檔案時,不會一下子就耗用過多的內存空間,只針對目前實際讀取的部分分配內存,尚沒有讀取的部分不分配內存空間,當我們讀取的檔案不在內存時,Cramfs文件系統自動計算壓縮後的資料所存的位置,再即時解壓縮到RAM中。

  另外,它的速度快,效率高,其只讀的特點有利於保護文件系統免受破壞,提高了系統的可靠性。

  由於以上特性,Cramfs在嵌入式系統中應用廣泛。

但是它的只讀屬性同時又是它的一大缺陷,使得用戶無法對其內容對進擴充。Cramfs映像通常是放在Flash中,但是也能放在別的文件系統里,使用loopback 設備可以把它安裝別的文件系統里。

1.1.4 Romfs

傳統型的Romfs文件系統是一種簡單的、緊湊的、只讀的文件系統,不支持動態擦寫保存,按順序存放數據,因而支持應用程序以 XIP(eXecute In Place,片內運行)方式運行,在系統運行時,節省RAM空間。uClinux系統通常採用Romfs文件系統。

1.1.5 ubifs

a)配置內核支持UBIFS

Device Drivers —>Memory Technology Device (MTD) support —>UBI – Unsorted block images —>Enable UBI

配置mtd支持UBI接口

File systems —>Miscellaneous filesystems —>UBIFS file system support

配置內核支持UBIFS文件系統

b)將一個MTD分區4掛載為UBIFS格式

● flash_eraseall /dev/mtd4 //擦除mtd4

● ubiattach /dev/ubi_ctrl -m 4 //和mtd4關聯

● ubimkvol /dev/ubi0 -N rootfs -s 100MiB //設定volume 大小(不是固定值,可以用工具改變)及名稱

● mount -t ubifs ubi0_0 /mnt/ubi或mount -t ubifs ubi0:rootfs /mnt/ubi

c)製作UBIFS文件系統

在製作UBI鏡像時,需要首先確定以下幾個參數:

MTD partition size; //對應的FLASH分區大小

flash physical eraseblock size; // FLASH物理擦除塊大小

minimum flash input/output unit size; //最小的FLASH輸入輸出單元大小

for NAND flashes – sub-page size; //對於nand flash來說,子頁大小

logical eraseblock size.//邏輯擦除塊大小

參數可以由幾種方式得到

a)如果使用的是2.6.30以後的內核,這些信息可以通過工具從內核獲得,如:mtdinfo –u。

b)之前的內核可以通過以下方法:

● MTD partition size:從內核的分區表或cat /proc/mtd獲得

● flash physical eraseblock size:從flash芯片手冊中可以得到FLASH物理擦除塊大小,或cat /proc/mtd

● minimum flash input/output unit size:

1)nor flash:通常是1個字節

2)nand falsh:一個頁面

● sub-page size:通過flash手冊獲得

● logical eraseblock size:對於有子頁的NAND FLASH來說,等於“物理擦除塊大小-1頁的大小”

c)也可以通過ubi和mtd連接時的產生的信息獲取,如:

#modprobe ubi mtd=4 //ubi作為模塊加載

#ubiattach /dev/ubi_ctrl -m 4 //通過ubiattach關聯MTD
UBI: attaching mtd4 to ubi0
UBI: physical eraseblock size: 131072 bytes (128 KiB)
UBI: logical eraseblock size: 129024 bytes
UBI: smallest flash I/O unit: 2048
UBI: sub-page size: 512
UBI: VID header offset: 512 (aligned 512)
UBI: data offset: 2048
UBI: attached mtd4 to ubi0

更詳細的解釋參見
http://www.linux-mtd.infradead.org/doc/ubi.html#L_overhead

#mkfs.ubifs -r rootfs -m 2048 -e 129024 -c 812 -o ubifs.img
#ubinize -o ubi.img -m 2048 -p 128KiB -s 512 /home/lht/omap3530/tools/ubinize.cfg
  • -r:制定文件內容的位置
  • -m:頁面大小
  • -e:邏輯擦除塊大小
  • -p:物理擦除塊大小
  • -c:最大的邏輯擦除塊數量
  • 對我們這種情況,文件系統最多可以訪問卷上的129024*812=100M空間
  • -s:最小的硬件輸入輸出頁面大小,如:k9f1208為256(上下半頁訪問)

其中,ubinize.cfg的內容為:

[ubifs]
    mode=ubi
    image=ubifs.img
    vol_id=0
    vol_size=100MiB
    vol_type=dynamic
    vol_name=rootfs
    vol_flags=autoresize

利用uboot燒寫、啟動UBIFS鏡像

a)燒寫UBIFS鏡像

OMAP3 DevKit8000 # mmcinit
    OMAP3 DevKit8000 # fatload mmc 0:1 81000000 ubi.img
    reading ubi.img
    12845056 bytes read
    OMAP3 DevKit8000 # nand unlock
    device 0 whole chip
    nand_unlock: start: 00000000, length: 268435456!
    NAND flash successfully unlocked
    OMAP3 DevKit8000 # nand ecc sw
    OMAP3 DevKit8000 # nand erase 680000 7980000
    NAND erase: device 0 offset 0x680000, size 0x7980000
    Erasing at 0x7fe0000 -- 100% complete.
    OK
    OMAP3 DevKit8000 # nand write.i 81000000 680000 $(filesize)
    NAND write: device 0 offset 0x680000, size 0xc40000
    Writing data at 0x12bf800 -- 100% complete.
    12845056 bytes written: OK

燒寫過程和燒寫內核鏡像的過程一致,所以UBI文件系統應該不像yaffs文件系統那樣用到了nand的OOB區域。

b)設置UBIFS文件系統作為根文件系統啟動的參數

OMAP3 DevKit8000 # setenv bootargs console=ttyS2,115200n8 ubi.mtd=4 root=ubi0:rootfs
    rootfstype=ubifs video=omapfb:mode:4.3inch_LCD
    OMAP3 DevKit8000 # setenv bootcmd nand read.i 80300000 280000 200000;bootm 80300000

其他文件系 統:fat/fat32也可用於實際嵌入式系統的擴展存儲器(例如PDA, Smartphone, 數碼相機等的SD卡),這主要是為了更好的與最流行的Windows桌面操作系統相兼容。ext2也可以作為嵌入式Linux的文件系統,不過將它用於 FLASH閃存會有諸多弊端。

1.2 基於RAM的文件系統

1.2.1 Ramdisk

RamDisk 就是將內存中的一塊區域作為物理磁盤來使用的一種技術。它並非一個實際的文件系統,而是一種將實際的文件系統裝入內存的機制,並且可以作為根文件系統。將一些經常被訪問而又不會更改的文件(如只讀的根文件系統)通過Ramdisk放在內存中,可以明顯地提高系統的性能。在Linux的啟動階段,initrd提供了一套機制,可以將內核映像和根文件系統一起載入內存。

為了能夠使用RamDisk 你的內核必須要支持:在編譯內核時,要選中RAM disk support這一選項,會在配置文件中定義CONFIG_BLK_DEV_RAM。

為了讓內核有能力在內核加載階段就能裝入RAMDISK,並運行其中的內容,要選中initial RAM disk(initrd) support 選項,會在配置文件中定義CONFIG_BLK_DEV_INITRD。

RamDisk是臨時性的,所以沒有帶日誌的文件系統的必要,所以我們一般做 ext2 就可以了。製作方式:

genext2fs -b 81920 -d rootfs ramdisk
gzip -9 -f ramdisk
mkimage -A arm -O linux -T ramdisk -C none -a 0x88080000 -n "ramdisk" -d ramdisk.gz ramdisk.img

在設置啟動參數時:

setenv bootargs console=${console} ${optargs} root=/dev/ram0 rw ramdisk_size=81920 
initrd=${rdaddr},80M rootfstype=${ramrootfstype}

其中,ramdisk_size=N這個參數告訴RAM磁盤驅動將RAM磁盤的大小設置為N k。RAM磁盤的大小會根據需要動態的增長,因此其大小有個上限加以限制以免它用光所有可用的內存而壞事。ramdisk_size這個參數實際是設置這個上限值的。

我們可以通過命令:dmesg | grep RAMDISK來查看這個上限值。要注意的是,這個值在系統運行階段是不能再被修改的。儘管RAM磁盤的大小有個最大值,但我們可以指定需要使用的RAM磁盤的容量。當我們沒有指定需要使用的RAM磁盤的容量,而直接在其上掛載文件系統時,它的容量是其上限值。

1.2.2 ramfs/tmpfs

Ramfs是Linus Torvalds開發的一種基於內存的文件系統,工作於虛擬文件系統(VFS)層,不能格式化,可以創建多個,在創建時可以指定其最大能使用的內存大 小。(實際上,VFS本質上可看成一種內存文件系統,它統一了文件在內核中的表示方式,並對磁盤文件系統進行緩衝。)

  Ramfs/tmpfs文件系統把所有的文件都放在RAM中,所以讀/寫操作發生在RAM中,可以用ramfs/tmpfs來存儲一些臨時性或經常要修改的數據,例如/tmp和/var目錄,這樣既避免了對Flash存儲器的讀寫損耗,也提高了數據讀寫速度。

  Ramfs/tmpfs相對於傳統的Ramdisk的不同之處主要在於:不能格式化,文件系統大小可隨所含文件內容大小變化。

Tmpfs的一個缺點是當系統重新引導時會丟失所有數據。

1.3 網絡文件系統NFS (Network File System)

NFS是由Sun開發並發展起來的一項在不同機器、不同操作系統之間通過網絡共享文件的技術。在嵌入式Linux系統的開發調試階段,可以利用該技術在主機上建立基於NFS的根文件系統,掛載到嵌入式設備,可以很方便地修改根文件系統的內容。

  以上討論的都是基於存儲設備的文件系統(memory-based file system),它們都可用作Linux的根文件系統。實際上,Linux還支持邏輯的或偽文件系統(logical or pseudo file system),例如procfs(proc文件系統),用於獲取系統信息,以及devfs(設備文件系統)和sysfs,用於維護設備文件。

2. Linux系統目錄結構

在 Linux 或 Unix 操作系統中,所有的文件和目錄都被組織成以一個根節點開始的倒置的樹狀結構。

linux文件系統的最頂端是/,我們稱/為Linux的root(根目錄),也就是 Linux操作系統的文件系統。Linux的文件系統的入口就是/,所有的目錄、文件、設備都在/之下,/就是Linux文件系統的組織者,也是最上級的領導者。在根目錄之下的既可以是目錄,也可以是文件,而每一個目錄中又可以包含子目錄文件。如此反覆就可以構成一個龐大的文件系統。

2.1 FHS誕生

由於linux是開放源代碼,最開始各大公司和團體根據linux的核心代碼做各自的操作,編程。這樣就造成在根下的目錄的不同。這樣就造成個人不能使用他人的linux系統的PC。因為你根本不知道一些基本的配置,文件在哪裡,這就造成了混亂。這就是FHS(Filesystem Hierarchy Standard )機構誕生的原因。該機構是linux愛好者自發的組成的一個團體,主要是是對linux做一些基本的要求,不至於是操作者換一台主機就成了linux的‘文盲’。

根據FHS(
http://www.pathname.com/fhs/)的官方文件指出, 他們的主要目的是希望讓使用者可以了解到已安裝軟件通常放置於那個目錄下, 所以他們希望獨立的軟件開發商、操作系統製作者、以及想要維護系統的用戶,都能夠遵循FHS的標準。 也就是說,FHS的重點在於規範每個特定的目錄下應該要放置什麼樣子的數據而已。 這樣做好處非常多,因為Linux操作系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風格。

可分享的(shareable)不可分享的(unshareable)
不變的(static)/usr (軟件放置處)/etc (配置文件)
/opt (第三方協力軟件)/boot (開機與核心檔)
可變動的(variable)/var/mail (使用者郵件信箱)/var/run (程序相關)
/var/spool/news (新聞組)/var/lock (程序相關)

四種類型:

1. 可分享的:

可以分享給其他系統掛載使用的目錄,所以包括執行文件與用戶的郵件等數據, 是能夠分享給網絡上其他主機掛載用的目錄;

2. 不可分享的:

自己機器上面運作的裝置文件或者是與程序有關的socket文件等, 由於僅與自身機器有關,所以當然就不適合分享給其他主機了。

3. 不變的:

有些數據是不會經常變動的,跟隨着distribution而不變動。 例如函式庫、文件說明文件、系統管理員所管理的主機服務配置文件等等;

4. 可變動的:

經常改變的數據,例如登錄文件、一般用戶可自行收受的新聞組等。

事實上,FHS針對目錄樹架構僅定義出三層目錄底下應該放置什麼數據而已,分別是底下這三個目錄的定義:

  • / (root, 根目錄):與開機系統有關;
  • /usr (unix software resource):與軟件安裝/執行有關;
  • /var (variable):與系統運作過程有關。

2.1.1 根目錄 (/) 的意義與內容

根目錄是整個系統最重要的一個目錄,因為不但所有的目錄都是由根目錄衍生出來的, 同時根目錄也與開機/還原/系統修復等動作有關。 由於系統開機時需要特定的開機軟件、核心文件、開機所需程序、 函式庫等等文件數據,若系統出現錯誤時,根目錄也必須要包含有能夠修復文件系統的程序才行。 因為根目錄是這麼的重要,所以在FHS的要求方面,他希望根目錄不要放在非常大的分區, 因為越大的分區內你會放入越多的數據,如此一來根目錄所在分區就可能會有較多發生錯誤的機會。

因此FHS標準建議:根目錄(/)所在分區應該越小越好, 且應用程序所安裝的軟件最好不要與根目錄放在同一個分區內,保持根目錄越小越好。 如此不但效能較佳,根目錄所在的文件系統也較不容易發生問題。說白了,就是根目錄和Windows的C盤一個樣。

根據以上原因,FHS認為根目錄(/)下應該包含如下子目錄:

/bin

系統有很多放置執行檔的目錄,但/bin比較特殊。因為/bin放置的是在單人維護模式下還能夠被操作的指令。在/bin底下的指令可以被root與一般帳號所使用,

主要有:cat,chmod(修改權限), chown, date, mv, mkdir, cp, bash等等常用的指令。

/boot

主要放置開機會使用到的檔案,包括Linux核心檔案以及開機選單與開機所需設定檔等等。Linux kernel常用的檔名為:vmlinuz ,如果使用的是grub這個開機管理程式,則還會存在/boot/grub/這個目錄。

/dev

在Linux系統上,任何裝置與周邊設備都是以檔案的型態存在於這個目錄當中。 只要通過存取這個目錄下的某個檔案,就等於存取某個裝置。比要重要的檔案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等

/etc

系統主要的設定檔幾乎都放置在這個目錄內,例如人員的帳號密碼檔、各種服務的啟始檔等等。 一般來說,這個目錄下的各檔案屬性是可以讓一般使用者查閱的,但是只有root有權力修改。 FHS建議不要放置可執行檔(binary)在這個目錄中。 比較重要的檔案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。 另外,其下重要的目錄有:/etc/init.d/ :所有服務的預設啟動script都是放在這裡的,例如要啟動或者關閉iptables的話: /etc/init.d/iptables start、/etc/init.d/ iptables stop

/etc/xinetd.d/

這就是所謂的super daemon管理的各項服務的設定檔目錄。

/etc/X11/

與X Window有關的各種設定檔都在這裡,尤其是xorg.conf或XF86Config這兩個X Server的設定檔。

/home

這是系統預設的使用者家目錄(home directory)。 在你新增一個一般使用者帳號時,預設的使用者家目錄都會規範到這裡來。比較重要的是,家目錄有兩種代號:

~ :代表當前使用者的家目錄,而 ~guest:則代表用戶名為guest的家目錄。

/lib

系統的函式庫非常的多,而/lib放置的則是在開機時會用到的函式庫,以及在/bin或/sbin底下的指令會呼叫的函式庫而已 。 什麼是函式庫呢?妳可以將他想成是外掛,某些指令必須要有這些外掛才能夠順利完成程式的執行之意。 尤其重要的是/lib/modules/這個目錄,因為該目錄會放置核心相關的模組(驅動程式)。

/media

media是媒體的英文,顧名思義,這個/media底下放置的就是可移除的裝置。 包括軟碟、光碟、DVD等等裝置都暫時掛載於此。 常見的檔名有:/media/floppy, /media/cdrom等等。

/mnt

如果妳想要暫時掛載某些額外的裝置,一般建議妳可以放置到這個目錄中。在古早時候,這個目錄的用途與/media相同啦。 只是有了/media之後,這個目錄就用來暫時掛載用了。

/opt

這個是給第三方協力軟體放置的目錄 。 什麼是第三方協力軟體啊?舉例來說,KDE這個桌面管理系統是一個獨立的計畫,不過他可以安裝到Linux系統中,因此KDE的軟體就建議放置到此目錄下了。 另外,如果妳想要自行安裝額外的軟體(非原本的distribution提供的),那麼也能夠將你的軟體安裝到這裡來。 不過,以前的Linux系統中,我們還是習慣放置在/usr/local目錄下。

/root

系統管理員(root)的家目錄。 之所以放在這裡,是因為如果進入單人維護模式而僅掛載根目錄時,該目錄就能夠擁有root的家目錄,所以我們會希望root的家目錄與根目錄放置在同一個分區中。

/sbin

Linux有非常多指令是用來設定系統環境的,這些指令只有root才能夠利用來設定系統,其他使用者最多只能用來查詢而已。放在/sbin底下的為開機過程中所需要的,裡面包括了開機、修復、還原系統所需要的指令。至於某些伺服器軟體程式,一般則放置到/usr/sbin/當中。至於本機自行安裝的軟體所產生的系統執行檔(system binary),則放置到/usr/local/sbin/當中了。常見的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。

/srv

srv可以視為service的縮寫,是一些網路服務啟動之後,這些服務所需要取用的資料目錄。 常見的服務例如WWW, FTP等等。 舉例來說,WWW伺服器需要的網頁資料就可以放置在/srv/www/裡面。呵呵,看來平時我們編寫的代碼應該放到這裡了。

/tmp

這是讓一般使用者或者是正在執行的程序暫時放置檔案的地方。這個目錄是任何人都能夠存取的,所以你需要定期的清理一下。當然,重要資料不可放置在此目錄啊。 因為FHS甚至建議在開機時,應該要將/tmp下的資料都刪除。

事實上FHS針對根目錄所定義的標準就僅限於上表,不過仍舊有些目錄也需要我們了解一下,具體如下:

/lost+found

這個目錄是使用標準的ext2/ext3檔案系統格式才會產生的一個目錄,目的在於當檔案系統發生錯誤時,將一些遺失的片段放置到這個目錄下。 這個目錄通常會在分割槽的最頂層存在,例如你加裝一個硬盤於/disk中,那在這個系統下就會自動產生一個這樣的目錄/disk/lost+found

/proc

這個目錄本身是一個虛擬文件系統(virtual filesystem)喔。 他放置的資料都是在內存當中,例如系統核心、行程資訊(process)(是進程嗎?)、周邊裝置的狀態及網絡狀態等等。因為這個目錄下的資料都是在記憶體(內存)當中,所以本身不佔任何硬盤空間。比較重要的檔案(目錄)例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。呵呵,是虛擬內存嗎[guest]?

/sys

這個目錄其實跟/proc非常類似,也是一個虛擬的檔案系統,主要也是記錄與核心相關的資訊。 包括目前已載入的核心模組與核心偵測到的硬體裝置資訊等等。 這個目錄同樣不佔硬盤容量。

除了這些目錄的內容之外,另外要注意的是,因為根目錄與開機有關,開機過程中僅有根目錄會被掛載, 其他分區則是在開機完成之後才會持續的進行掛載的行為。就是因為如此,因此根目錄下與開機過程有關的目錄, 就不能夠與根目錄放到不同的分區去。那哪些目錄不可與根目錄分開呢?有底下這些:

  • /etc:配置文件
  • /bin:重要執行檔
  • /dev:所需要的裝置文件
  • /lib:執行檔所需的函式庫與核心所需的模塊
  • /sbin:重要的系統執行文件

這五個目錄千萬不可與根目錄分開在不同的分區。

更多Linux後台架構師學習資料,視頻,面試題,請私信

Linux系統文件類型和Linux系統目錄結構詳解

2.1.2 /usr的意義與內容

依據FHS的基本定義,/usr裡面放置的數據屬於可分享的與不可變動的(shareable, static), 如果你知道如何透過網絡進行分區的掛載(例如在服務器篇會談到的NFS服務器),那麼/usr確實可以分享給局域網絡內的其他主機來使用喔。

/usr不是user的縮寫,其實usr是Unix Software Resource的縮寫, 也就是Unix操作系統軟件資源所放置的目錄,而不是用戶的數據啦。這點要注意。 FHS建議所有軟件開發者,應該將他們的數據合理的分別放置到這個目錄下的次目錄,而不要自行建立該軟件自己獨立的目錄。

因為是所有系統默認的軟件(distribution發布者提供的軟件)都會放置到/usr底下,因此這個目錄有點類似Windows 系統的C:Windows + C:Program files這兩個目錄的綜合體,系統剛安裝完畢時,這個目錄會佔用最多的硬盤容量。 一般來說,/usr的次目錄建議有底下這些:

/usr/X11R6/

為X Window System重要數據所放置的目錄,之所以取名為X11R6是因為最後的X版本為第11版,且該版的第6次釋出之意。

/usr/bin/

絕大部分的用戶可使用指令都放在這裡。請注意到他與/bin的不同之處。(是否與開機過程有關)

/usr/include/

c/c++等程序語言的檔頭(header)與包含檔(include)放置處,當我們以tarball方式 (*.tar.gz 的方式安裝軟件)安裝某些數據時,會使用到裡頭的許多包含檔。

/usr/lib/

包含各應用軟件的函式庫、目標文件(object file),以及不被一般使用者慣用的執行檔或腳本(script)。 某些軟件會提供一些特殊的指令來進行服務器的設定,這些指令也不會經常被系統管理員操作, 那就會被擺放到這個目錄下啦。要注意的是,如果你使用的是X86_64的Linux系統, 那可能會有/usr/lib64/目錄產生

/usr/local/

統管理員在本機自行安裝自己下載的軟件(非distribution默認提供者),建議安裝到此目錄, 這樣會比較便於管理。舉例來說,你的distribution提供的軟件較舊,你想安裝較新的軟件但又不想移除舊版, 此時你可以將新版軟件安裝於/usr/local/目錄下,可與原先的舊版軟件有分別啦。 你可以自行到/usr/local去看看,該目錄下也是具有bin, etc, include, lib…的次目錄

/usr/sbin/

非系統正常運作所需要的系統指令。最常見的就是某些網絡服務器軟件的服務指令(daemon)

/usr/share/

放置共享文件的地方,在這個目錄下放置的數據幾乎是不分硬件架構均可讀取的數據, 因為幾乎都是文本文件嘛。在此目錄下常見的還有這些次目錄:/usr/share/man:聯機幫助文件

/usr/share/doc

軟件雜項的文件說明

/usr/share/zoneinfo

與時區有關的時區文件

/usr/src/

一般原始碼建議放置到這裡,src有source的意思。至於核心原始碼則建議放置到/usr/src/linux/目錄下。

2.1.3 /var的意義與內容

如果/usr是安裝時會佔用較大硬盤容量的目錄,那麼/var就是在系統運作後才會漸漸佔用硬盤容量的目錄。 因為/var目錄主要針對常態性變動的文件,包括緩存(cache)、登錄檔(log file)以及某些軟件運作所產生的文件, 包括程序文件(lock file, run file),或者例如MySQL數據庫的文件等等。常見的次目錄有:

/var/cache/

應用程序本身運作過程中會產生的一些暫存檔

/var/lib/

程序本身執行的過程中,需要使用到的數據文件放置的目錄。在此目錄下各自的軟件應該要有各自的目錄。 舉例來說,MySQL的數據庫放置到/var/lib/mysql/而rpm的數據庫則放到/var/lib/rpm去

/var/lock/

某些裝置或者是文件資源一次只能被一個應用程序所使用,如果同時有兩個程序使用該裝置時, 就可能產生一些錯誤的狀況,因此就得要將該裝置上鎖(lock),以確保該裝置只會給單一軟件所使用。 舉例來說,刻錄機正在刻錄一塊光盤,你想一下,會不會有兩個人同時在使用一個刻錄機燒片? 如果兩個人同時刻錄,那片子寫入的是誰的數據?所以當第一個人在刻錄時該刻錄機就會被上鎖, 第二個人就得要該裝置被解除鎖定(就是前一個人用完了)才能夠繼續使用

/var/log/

非常重要。這是登錄文件放置的目錄。裡面比較重要的文件如/var/log/messages, /var/log/wtmp(記錄登入者的信息)等。

/var/mail/

放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中,通常這兩個目錄是互為鏈接文件。

/var/run/

某些程序或者是服務啟動後,會將他們的PID放置在這個目錄下

/var/spool/

這個目錄通常放置一些隊列數據,所謂的“隊列”就是排隊等待其他程序使用的數據。 這些數據被使用後通常都會被刪除。舉例來說,系統收到新信會放置到/var/spool/mail/中, 但使用者收下該信件後該封信原則上就會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue/中, 等到被送出後就被刪除。如果是工作排程數據(crontab),就會被放置到/var/spool/cron/目錄中。

由於FHS僅是定義出最上層(/)及次層(/usr, /var)的目錄內容應該要放置的文件或目錄數據, 因此,在其他次目錄層級內,就可以隨開發者自行來配置了。

2.1.4 目錄樹(directory tree)

在Linux底下,所有的文件與目錄都是由根目錄開始的。那是所有目錄與文件的源頭, 然後再一個一個的分支下來,因此,我們也稱這種目錄配置方式為:目錄樹(directory tree), 這個目錄樹的主要特性有:

目錄樹的啟始點為根目錄 (/, root)

每一個目錄不止能使用本地端的 partition 的文件系統,也可以使用網絡上的 filesystem 。舉例來說, 可以利用 Network File System (NFS) 服務器掛載某特定目錄等。

每一個文件在此目錄樹中的文件名(包含完整路徑)都是獨一無二的。

如果我們將整個目錄樹以圖的方法來顯示,並且將較為重要的文件數據列出來的話,那麼目錄樹架構就如下圖所示:

Linux系統文件類型和Linux系統目錄結構詳解

以下是對這些目錄的解釋:

/:根目錄

一般根目錄下只存放目錄,不要存放文件,/etc、/bin、/dev、/lib、/sbin應該和根目錄放置在一個分區中。

/bin

/usr/bin:bin是Binary的縮寫, 這個目錄存放着最經常使用的命令。例如cp、ls、cat,等等。

/boot

這裡存放的是啟動Linux時使用的一些核心文件,包括一些連接文件以及鏡像文件。/boot/vmlinuz為linux的內核文件,以及/boot/gurb。建議單獨分區,分區大小100M即可。

/dev

dev是Device(設備)的縮寫, 該目錄下存放的是Linux的外部設備文件,在Linux中訪問設備的方式和訪問文件的方式是相同的。訪問該目錄下某個文件,相當於訪問某個設備,其功能類似DOS下的.sys和Win下的.vxd。例如:/dev/hda代表第一個物理IDE硬盤。常用的是掛載光驅mount /dev/cdrom /mnt。

/etc

這個目錄用來存放所有的系統管理所需要的配置文件和子目錄。不建議在此目錄下存放可執行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前記得備份。註:/etc/X11存放與x windows有關的設置。

/home

用戶的主目錄,在Linux中,系統默認的用戶家目錄,新增用戶賬號時,用戶的家目錄都存放在此目錄下,~表示當前用戶的家目錄,比如說有個用戶叫zhong,那他的主目錄就是/home/zhong也可以用~zhong表示。建議單獨分區,並設置較大的磁盤空間,方便用戶存放數據。

/lib

/usr/lib:/usr/local/lib:這個目錄里存放着系統最基本的動態連接共享庫,其作用類似於Windows里的DLL文件。幾乎所有的應用程序都需要用到這些共享庫。系統使用的函數庫的目錄,程序在執行過程中,需要調用一些額外的參數時需要函數庫的協助,比較重要的目錄為/lib/modules。

/lost+found

這個目錄一般情況下是空的,當系統不正常關機後,這裡就成了一些無家可歸的文件的避難所。對了,有點類似於DOS下的.chk文件。系統異常產生錯誤時,會將一些遺失的片段放置於此目錄下,通常這個目錄會自動出現在裝置目錄下。如加載硬盤於/disk 中,此目錄下就會自動產生目錄/disk/lost+found

/media

linux系統會自動識別一些設備,例如U盤、光驅等等,當識別後,linux會把識別的設備掛載到這個目錄下。

/mnt

系統提供該目錄是為了讓用戶臨時掛載別的文件系統的,我們可以將光驅掛載在/mnt/上,然後進入該目錄就可以查看光驅里的內容了。光盤默認掛載點,通常光盤掛載於/mnt/cdrom下,也不一定,可以選擇任意位置進行掛載。

/opt

這是給主機額外安裝軟件所擺放的目錄。比如你安裝一個ORACLE數據庫則就可以放到這個目錄下。默認是空的。如:FC4使用的Fedora 社群開發軟件,如果想要自行安裝新的KDE 桌面軟件,可以將該軟件安裝在該目錄下。以前的 Linux 系統中,習慣放置在 /usr/local 目錄下。

/proc

此目錄的數據都在內存中,如系統核心,外部設備,網絡狀態,由於數據都存放於內存中,所以不佔用磁盤空間,比較重要的目錄有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等。這個目錄是一個虛擬的目錄,它是系統內存的映射,我們可以通過直接訪問這個目錄來獲取系統信息。

這個目錄的內容不在硬盤上而是在內存里,我們也可以直接修改裡面的某些文件,比如可以通過下面的命令來屏蔽主機的ping命令,使別人無法ping你的機器:echo 1 >
/proc/sys/net/ipv4/icmp_echo_ignore_all

/root

該目錄為系統管理員,也稱作超級權限者的用戶主目錄。系統管理員root的家目錄,系統第一個啟動的分區為/,所以最好將/root和/放置在一個分區下。

/sbin

/usr/sbin:/usr/local/sbin:s就是Super User的意思,這裡存放的是系統管理員使用的系統管理程序。放置系統管理員使用的可執行命令,如fdisk、shutdown、mount等。與/bin不同的是,這幾個目錄是給系統管理員root使用的命令,一般用戶只能”查看”而不能設置和使用。

/selinux

這個目錄是Redhat/CentOS所特有的目錄,Selinux是一個安全機制,類似於windows的防火牆,但是這套機制比較複雜,這個目錄就是存放selinux相關的文件的。

/srv

該目錄存放一些服務啟動之後需要提取的數據。服務啟動之後需要訪問的數據目錄,如www服務需要訪問的網頁數據存放在/srv/www內。

/sys

這是linux2.6內核的一個很大的變化。該目錄下安裝了2.6內核中新出現的一個文件系統 sysfs 。sysfs文件系統集成了下面3種文件系統的信息:針對進程信息的proc文件系統、針對設備的devfs文件系統以及針對偽終端的devpts文件系統。該文件系統是內核設備樹的一個直觀反映。當一個內核對象被創建的時候,對應的文件和目錄也在內核對象子系統中被創建。

/tmp

這個目錄是用來存放一些臨時文件的。一般用戶或正在執行的程序臨時存放文件的目錄,任何人都可以訪問,重要數據不可放置在此目錄下。

/var

這個目錄中存放着在不斷擴充着的東西,包括各種日誌文件。為了保持/usr的相對穩定,那些經常被修改的目錄可以放在這個目錄下,實際上許多系統管理員都是這樣乾的。順帶說一下系統的日誌文件就在/var/log目錄中。放置系統執行過程中經常變化的文件,如隨時更改的日誌文件/var/log,/var/log/message:所有的登錄文件存放目錄,/var/spool/mail:郵件存放的目錄,/var/run:程序或服務啟動後,其PID存放在該目錄下。建議單獨分區,設置較大的磁盤空間。

/usr

這是一個非常重要的目錄,用戶的很多應用程序和文件都放在這個目錄下,類似與windows下的program files目錄。應用程序存放目錄,/usr/bin存放應用程序,/usr/share存放共享數據,/usr/lib存放不能直接運行的,卻是許多程序運行所必需的一些函數庫文件。/usr/local:存放軟件升級包。/usr/share/doc:系統說明文件存放目錄。/usr/share/man: 程序說明文件存放目錄,使用 man ls時會查詢
/usr/share/man/man1/ls.1.gz的內容建議單獨分區,設置較大的磁盤空間。

2.1.5 絕對路徑與相對路徑

除了需要特別注意的FHS目錄配置外,在文件名部分我們也要特別注意。因為根據檔名寫法的不同,也可將所謂的路徑(path)定義為絕對路徑(absolute)與相對路徑(relative)。 這兩種文件名/路徑的寫法依據是這樣的:

  • 絕對路徑:由根目錄(/)開始寫起的文件名或目錄名稱, 例如 /home/dmtsai/.bashrc;
  • 相對路徑:相對於目前路徑的文件名寫法。

例如 ./home/dmtsai 或
http://www.cnblogs.com/home/dmtsai/ 等等。反正開頭不是 / 就屬於相對路徑的寫法

而你必須要了解,相對路徑是以你當前所在路徑的相對位置來表示的。舉例來說,你目前在 /home 這個目錄下, 如果想要進入 /var/log 這個目錄時,可以怎麼寫呢?

cd /var/log (absolute)
cd ../var/log (relative)

因為你在 /home 底下,所以要回到上一層 (../) 之後,才能繼續往 /var 來移動的,特別注意這兩個特殊的目錄:

. :代表當前的目錄,也可以使用 ./ 來表示;

.. :代表上一層目錄,也可以 ../ 來代表。

這個 . 與 .. 目錄概念是很重要的,你常常會看到 cd .. 或 ./command 之類的指令下達方式, 就是代表上一層與目前所在目錄的工作狀態。

如果一個目錄或文件名以一個點 . 開始,表示這個目錄或文件是一個隱藏目錄或文件(如:.bashrc)。即以默認方式查找時,不顯示該目錄或文件。ls -a 能看見所有目錄或文件(包括隱藏的)。

實例1:如何先進入/var/spool/mail/目錄,再進入到/var/spool/cron/目錄內?

命令:

cd /var/spool/mail
cd ../cron

說明:

由於/var/spool/mail與/var/spool/cron是同樣在/var/spool/目錄中。如此就不需要在由根目錄開始寫起了。這個相對路徑是非常有幫助的,尤其對於某些軟件開發商來說。 一般來說,軟件開發商會將數據放置到/usr/local/裡面的各相對目錄。 但如果用戶想要安裝到不同目錄呢?就得要使用相對路徑。

實例2:網絡文件常常提到類似 ./run.sh之類的數據,這個指令的意義為何?

說明:

由於指令的執行需要變量的支持,若你的執行文件放置在本目錄,並且本目錄並非正規的執行文件目錄(/bin, /usr/bin等為正規),此時要執行指令就得要嚴格指定該執行檔。./代表本目錄的意思,所以./run.sh代表執行本目錄下, 名為run.sh的文件。

2.1.6 幾個比較重要的目錄

在linux系統中,有幾個目錄是比較重要的,平時需要注意不要誤刪除或者隨意更改內部文件。

/etc

這個目錄相當重要,如前所述,這個是系統中的配置文件,如果你更改了該目錄下的某個文件可能會導致系統不能啟動。你的開機與系統數據文件均在這個目錄之下,因此當這個目錄被破壞,那你的系統大概也就差不多該死掉了!而在往後的文件中,你會發現我們常常使用這個目錄下的 /etc/rc.d/init.d 這個子目錄,因為這個 init.d 子目錄是開啟一些 Linux 系統服務的 scripts的地方。而在 /etc/rc.d/rc.local 這個文件是開機的執行檔。

/bin, /sbin, /usr/bin, /usr/sbin

這是系統預設的執行文件的放置目錄,比如 ls 就是在/bin/ls 目錄下的,例如 root 常常使用的 userconf, netconf, perl, gcc, c++ 等等的數據都放在這幾個目錄中,所以如果你在提示字符下找不到某個執行檔時,可以在這四個目錄中查一查!其中, /bin, /usr/bin 是給系統用戶(除root外的通用戶)使用的指令,而 /sbin, /usr/sbin 則是給系統管理員使用的指令!

/usr/local

這是系統預設的讓你安裝你後來升級的套件的目錄。例如,當你發現有更新的 Web 套件(如 Apache )可以安裝,而你又不想以 rpm 的方式升級你的套件,則你可以將 apache 這個套件安裝在 /usr/local 底下。安裝在這裡有個好處,因為目前大家的系統都是差不多的,所以如果你的系統要讓別人接管的話,也比較容易上手呀!也比較容易找得到數據!因此,如果你有需要的話,通常我都會將 /usr/local/bin 這個路徑加到我的 path 中。

/home

這個是系統將有賬號的人口的家目錄設置的地方。

/var

這是一個非常重要的目錄,系統上跑了很多程序,那麼每個程序都會有相應的日誌產生,而這些日誌就被記錄到這個目錄下,具體在/var/log 目錄下,不論是登入、各類服務的問題發生時的記錄、以及常態性的服務記錄等等的記錄目錄,所以當你的系統有問題時,就需要來這個目錄記錄的文件數據中察看問題的所在啰!另外mail的預設放置也是在這裡。

/usr/share/man, /usr/local/man

這兩個目錄為放置各類套件說明檔的地方,例如你如果執行 man man,則系統會自動去找這兩個目錄下的所有說明文件。

2.1.7 詳解幾個目錄

/dev

dev是設備(device)的英文縮寫。/dev這個目錄對所有的用戶都十分重要。因為在這個目錄中包含了所有Linux系統中使用的外部設備。但是這裡並不是放的外部設備的驅動程序,這一點和windows,dos操作系統不一樣。它實際上是一個訪問這些外部設備的端口。我們可以非常方便地去訪問這些外部設備,和訪問一個文件,一個目錄沒有任何區別。

Linux沿襲Unix的風格,將所有設備認成是一個文件。

  設備文件分為兩種:塊設備文件(b)和字符設備文件(c)

  設備文件一般存放在/dev目錄下,對常見設備文件作如下說明:

  /dev/hd[a-t]:IDE設備
  /dev/sd[a-z]:SCSI設備
  /dev/fd[0-7]:標準軟驅
  /dev/md[0-31]:軟raid設備
  /dev/loop[0-7]:本地迴環設備
  /dev/ram[0-15]:內存
  /dev/null:無限數據接收設備,相當於黑洞
  /dev/zero:無限零資源
  /dev/tty[0-63]:虛擬終端
  /dev/ttyS[0-3]:串口
  /dev/lp[0-3]:並口
  /dev/console:控制台
  /dev/fb[0-31]:framebuffer
  /dev/cdrom => /dev/hdc
  /dev/modem => /dev/ttyS[0-9]
  /dev/pilot => /dev/ttyS[0-9]
  /dev/random:隨機數設備
  /dev/urandom:隨機數設備
  /dev目錄下的節點是怎麼創建的?  --->   devf或者udev會自動幫你創建得。
  kobject是sysfs文件系統的基礎,udev通過監測、檢測sysfs來獲取新創建的設備的。

/etc

包含很多文件.許多網絡配置文件也在/etc 中

./etc/rc or /etc/rc.d or /etc/rc*.d :啟動、或改變運行級時運行的scripts或scripts的目錄.

/etc/passwd:用戶數據庫,其中的域給出了用戶名、真實姓名、家目錄、加密的口令和用戶的其他信息.

/etc/fstab:啟動時mount -a命令(在/etc/rc 或等效的啟動文件中)自動mount的文件系統列表. Linux下,也包括用swapon -a啟用的swap區的信息.

/etc/group:類似/etc/passwd ,但說明的不是用戶而是組.

/etc/inittab:init 的配置文件.

/etc/issue:getty 在登錄提示符前的輸出信息.通常包括系統的一段短說明或歡迎信息.內容由系統管理員確定.

/etc/motd:Message Of The Day,成功登錄後自動輸出.內容由系統管理員確定.經常用於通告信息,如計劃關機時間的警告.

/etc/mtab:當前安裝的文件系統列表.由scripts初始化,並由mount 命令自動更新.需要一個當前安裝的文件系統的列表時使用,例如df 命令.

/etc/shadow:在安裝了影子口令軟件的系統上的影子口令文件.影子口令文件將/etc/passwd 文件中的加密口令移動到/etc/shadow 中,而後者只對root可讀.這使破譯口令更困難.

/etc/login.defs:login 命令的配置文件.

/etc/printcap:類似/etc/termcap ,但針對打印機.語法不同.

/etc/profile , /etc/csh.login , /etc/csh.cshrc:登錄或啟動時Bourne或C shells執行的文件.這允許系統管理員為所有用戶建立全局缺省環境.

/etc/securetty:確認安全終端,即哪個終端允許root登錄.一般只列出虛擬控制台,這樣就不可能(至少很困難)通過modem或網絡闖入系統並得到超級用戶特權.

/etc/shells:列出可信任的shell.chsh 命令允許用戶在本文件指定範圍內改變登錄shell.提供一台機器FTP服務的服務進程ftpd 檢查用戶shell是否列在 /etc/shells 文件中,如果不是將不允許該用戶登錄.

/etc/sysconfig:網絡配置相關目錄

2.2 /proc:目錄

檔名 文件內容

/proc/cmdline: 加載 kernel 時所下達的相關參數!查閱此文件,可了解系統是如何啟動的!

/proc/cpuinfo :本機的 CPU 的相關資訊,包含時脈、類型與運算功能等

/proc/devices :這個文件記錄了系統各個主要裝置的主要裝置代號,與 mknod 有關呢!

/proc/filesystems: 目前系統已經加載的文件系統羅!

/proc/interrupts :目前系統上面的 IRQ 分配狀態。

/proc/ioports :目前系統上面各個裝置所配置的 I/O 位置。

/proc/kcore :這個就是內存的大小啦!好大對吧!但是不要讀他啦!

/proc/loadavg:還記得 top 以及 uptime 吧?沒錯!上頭的三個平均數值就是記錄在此!

/proc/meminfo :使用 free 列出的內存資訊,嘿嘿!在這裡也能夠查閱到!

/proc/modules :目前我們的 Linux 已經加載的模塊列表,也可以想成是驅動程序啦!

/proc/mounts :系統已經掛載的數據,就是用 mount 這個命令呼叫出來的數據啦!

/proc/swaps :到底系統掛加載的內存在哪裡?呵呵!使用掉的 partition 就記錄在此啦!

/proc/partitions: 使用 fdisk -l 會出現目前所有的 partition 吧?在這個文件當中也有紀錄喔!

/proc/pci :在 PCI 匯流排上面,每個裝置的詳細情況!可用 lspci 來查閱!

/proc/uptime: 就是用 uptime 的時候,會出現的資訊啦!

/proc/version :核心的版本,就是用 uname -a 顯示的內容啦!

/proc/bus/* :一些匯流排的裝置,還有 U盤 的裝置也記錄在此喔!

檔名 文件內容

/proc/cmdline: 加載 kernel 時所下達的相關參數!查閱此文件,可了解系統是如何啟動的!

/proc/cpuinfo :本機的 CPU 的相關資訊,包含時脈、類型與運算功能等

/proc/devices :這個文件記錄了系統各個主要裝置的主要裝置代號,與 mknod 有關呢!

/proc/filesystems: 目前系統已經加載的文件系統羅!

/proc/interrupts :目前系統上面的 IRQ 分配狀態。

/proc/ioports :目前系統上面各個裝置所配置的 I/O 位址。

/proc/kcore :這個就是內存的大小啦!好大對吧!但是不要讀他啦!

/proc/loadavg:還記得 top 以及 uptime 吧?沒錯!上頭的三個平均數值就是記錄在此!

/proc/meminfo :使用 free 列出的內存資訊,嘿嘿!在這裡也能夠查閱到!

/proc/modules :目前我們的 Linux 已經加載的模塊列表,也可以想成是驅動程序啦!

/proc/mounts :系統已經掛載的數據,就是用 mount 這個命令呼叫出來的數據啦!

/proc/swaps :到底系統掛加載的內存在哪裡?呵呵!使用掉的 partition 就記錄在此啦!

/proc/partitions: 使用 fdisk -l 會出現目前所有的 partition 吧?在這個文件當中也有紀錄喔!

/proc/pci :在 PCI 匯流排上面,每個裝置的詳細情況!可用 lspci 來查閱!

/proc/uptime: 就是用 uptime 的時候,會出現的資訊啦!

/proc/version :核心的版本,就是用 uname -a 顯示的內容啦!

/proc/bus/* :一些匯流排的裝置,還有 U盤 的裝置也記錄在此喔!

2.3 /usr:目錄

/usr :文件系統經常很大,因為所有程序安裝在這裡. /usr 里的所有文件一般來自Linux distribution;本地安裝的程序和其他東西在/usr/local 下.這樣可能在升級新版系統或新distribution時無須重新安裝全部程序.

/usr/etc: 存放設置文件

/usr/games: 存放遊戲和教學文件

/usr/include :存放C開發工具的頭文件

/usr/share :存放結構獨立的數據

/usr/bin :幾乎所有用戶命令.有些命令在/bin 或/usr/local/bin 中.

/usr/sbin :根文件系統不必要的系統管理命令,例如多數服務程序.

/usr/share/man , /usr/share/info , /usr/share/doc: 手冊頁、GNU信息文檔和各種其他文檔文件.

/usr/include: C編程語言的頭文件.為了一致性這實際上應該在/usr/lib 下,但傳統上支持這個名字.

/usr/lib :程序或子系統的不變的數據文件,包括一些site-wide配置文件.名字lib來源於庫(library); 編程的原始庫存在/usr/lib 里.

/usr/local :本地安裝的軟件和其他文件放在這裡.

/usr/src: 存放程序的源代碼

2.4 /var:目錄

/var :包括系統一般運行時要改變的數據.每個系統是特定的,即不通過網絡與其他計算機共享.

/var/catman:當要求格式化時的man頁的cache.man頁的源文件一般存在/usr/man/man* 中;有些man頁可能有預格式化的版本,存在/usr/man/cat* 中.而其他的man頁在第一次看時需要格式化,格式化完的版本存在/var/man 中,這樣其他人再看相同的頁時就無須等待格式化了. (/var/catman 經常被清除,就像清除臨時目錄一樣.)

/var/lib :系統正常運行時要改變的文件.

/var/local:/usr/local 中安裝的程序的可變數據(即系統管理員安裝的程序).注意,如果必要,即使本地安裝的程序也會使用其他/var 目錄,例如/var/lock .

Linux系統文件類型和Linux系統目錄結構詳解

1. Linux系統文件類型

Linux 支持多種文件系統,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,為了對各類文件系統進行統一管理,Linux引入了虛擬文件系統VFS(Virtual File System),為各類文件系統提供一個統一的操作界面和應用編程接口。

Linux啟動時,第一個必須掛載的是根文件系統;若系統不能從指定設備上掛載根文件系統,則系統會出錯而退出啟動。之後可以自動或手動掛載其他的文件系統。因此,一個系統中可以同時存在不同的文件系統。

不同的文件系統類型有不同的特點,因而根據存儲設備的硬件特性、系統需求等有不同的應用場合。在嵌入式Linux應用中,主要的存儲設備為 RAM(DRAM, SDRAM)和ROM(常採用FLASH存儲器),常用的基於存儲設備的文件系統類型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs等。

1.1 基於Flash的文件系統

Flash(閃存)作為嵌入式系統的主要存儲媒介,有其自身的特性。Flash的寫入操作只能把對應位置的1修改為0,而不能把0修改為1(擦除Flash就是把對應存儲塊的內容恢復為1),因此,一般情況下,向Flash寫入內容時,需要先擦除對應的存儲區間,這種擦除是以塊(block)為 單位進行的。

  閃存主要有NOR和NAND兩種技術。Flash存儲器的擦寫次數是有限的,NAND閃存還有特殊的硬件接口和讀寫時序。因此,必須針對Flash的硬件特性設計符合應用要求的文件系統;傳統的文件系統如ext2等,用作Flash的文件系統會有諸多弊端。

  在嵌入式Linux下,MTD(Memory Technology Device,存儲技術設備)為底層硬件(閃存)和上層(文件系統)之間提供一個統一的抽象接口,即Flash的文件系統都是基於MTD驅動層的(參見上面的Linux下的文件系統結構圖)。使用MTD驅動程序的主要優點在於,它是專門針對各種非易失性存儲器(以閃存為主)而設計的,因而它對Flash有更好的支持、管理和基於扇區的擦除、讀/寫操作接口。

  順便一提,一塊Flash芯片可以被劃分為多個分區,各分區可以採用不同的文件系統;兩塊Flash芯片也可以合併為一個分區使用,採用一個文件系統。即文件系統是針對於存儲器分區而言的,而非存儲芯片。

支持在Flash上運行的常用文件系統有cramfs、jffs、jffs2、yaffs、yaffs2等。

如果想在Flash上實現讀寫操作,通常在NorFlash上我們會選取jffs及jffs2文件系統,在NandFlash上選用yaffs或yaffs2文件系統。Yaffs2文件系統支持大頁(大於512字節/頁)的NandFlash存儲器。

它們也都是基於文件系統+mtd+flash設備的架構。linux-2.6.27後,內核加入了一種新型的flash文件系統UBI(Unsorted Block Images)。

1.1.1 jffs2

  JFFS文件系統最早是由瑞典 Axis Communications公司基於Linux2.0的內核為嵌入式系統開發的文件系統。JFFS2是RedHat公司基於JFFS開發的閃存文件系統,最初是針對RedHat公司的嵌入式產品eCos開發的嵌入式文件系統,所以JFFS2也可以用在Linux, uCLinux中。

  Jffs2: 日誌閃存文件系統版本2 (Journalling Flash FileSystem v2)

  主要用於NOR型閃存,基於MTD驅動層,特點是:可讀寫的、支持數據壓縮的、基於哈希表的日誌型文件系統,並提供了崩潰/掉電安全保護,提供“寫平衡”支持等。缺點主要是當文件系統已滿或接近滿時,因為垃圾收集的關係而使jffs2的運行速度大大放慢。

  目前jffs3正在開發中。關於jffs系列文件系統的使用詳細文檔,可參考MTD補丁包中mtd-jffs-HOWTO.txt。

jffsx不適合用於NAND閃存主要是因為NAND閃存的容量一般較大,這樣導致jffs為維護日誌節點所佔用的內存空間迅速增大,另外,jffsx文件系統在掛載時需要掃描整個FLASH的內容,以找出所有的日誌節點,建立文件結構,對於大容量的NAND閃存會耗費大量時間。

1.1.2 affs/yaffs2

yaffs/yaffs2是專為嵌入式系統使用NAND型閃存而設計的一種日誌型文件系統。與jffs2相比,它減少了一些功能(例如不支持數據壓縮),所以速度更快,掛載時間很短,對內存的佔用較小。另外,它還是跨平台的文件系統,除了Linux和eCos,還支持WinCE, pSOS和ThreadX等。

yaffs/yaffs2自帶NAND芯片的驅動,並且為嵌入式系統提供了直接訪問文件系統的API,用戶可以不使用Linux中的MTD與VFS,直接對文件系統操作。當然,yaffs也可與MTD驅動程序配合使用。

yaffs與yaffs2的主要區別在於,前者僅支持小頁(512 Bytes) NAND閃存,後者則可支持大頁(2KB) NAND閃存。同時,yaffs2在內存空間佔用、垃圾回收速度、讀/寫速度等方面均有大幅提升。

  • yaffs製作工具:mkyaffsimage
  • yaffs2製作工具:mkyaffs2image(適合64M)、mkyaffs2image-128(適合128M以上)

命令:

  • 生成yaffs2鏡像文件:./mkyaffs2image-128M rootfs/ rootfs.yaffs2
  • 生成yaffs鏡像文件:./mkyaffsimage rootfs/ rootfs.yaffs

燒寫:

tftp 0x30008000 rootfs.yaffs2
nand erase 0x580000 7a80000
nand write.yaffs 0x30008000 0x580000 dbb040

更多Linux後台架構師學習資料,視頻,面試題,請私信

Linux系統文件類型和Linux系統目錄結構詳解

設置內核啟動參數:

setenv bootargs "noinitrd root=/dev/mtdblock3 rootfstyle=yaffs2 console=ttySAC0,115200 init=/linuxrc mem=64M"
setenv bootcmd "nand read 0x30008000 0x80000 0x500000;bootm 0x30008000"

1.1.3 Cramfs:Compressed ROM File System

  Cramfs是Linux的創始人Linus Torvalds參與開發的一種只讀的壓縮文件系統。它也基於MTD驅動程序。

  在cramfs文件系統中,每一頁(4KB)被單獨壓縮,可以隨機頁訪問,其壓縮比高達2:1,為嵌入式系統節省大量的Flash存儲空間,使系統可通過更低容量的FLASH存儲相同的文件,從而降低系統成本。

  Cramfs文件系統以壓縮方式存儲,在運行時解壓縮,所以不支持應用程序以XIP(eXecute In Place,芯片內執行)方式運行,所有的應用程序要求被拷到RAM里去運行,但這並不代表比Ramfs需求的RAM空間要大一點,因為Cramfs是採用分頁壓縮的方式存放檔案,在讀取檔案時,不會一下子就耗用過多的內存空間,只針對目前實際讀取的部分分配內存,尚沒有讀取的部分不分配內存空間,當我們讀取的檔案不在內存時,Cramfs文件系統自動計算壓縮後的資料所存的位置,再即時解壓縮到RAM中。

  另外,它的速度快,效率高,其只讀的特點有利於保護文件系統免受破壞,提高了系統的可靠性。

  由於以上特性,Cramfs在嵌入式系統中應用廣泛。

但是它的只讀屬性同時又是它的一大缺陷,使得用戶無法對其內容對進擴充。Cramfs映像通常是放在Flash中,但是也能放在別的文件系統里,使用loopback 設備可以把它安裝別的文件系統里。

1.1.4 Romfs

傳統型的Romfs文件系統是一種簡單的、緊湊的、只讀的文件系統,不支持動態擦寫保存,按順序存放數據,因而支持應用程序以 XIP(eXecute In Place,片內運行)方式運行,在系統運行時,節省RAM空間。uClinux系統通常採用Romfs文件系統。

1.1.5 ubifs

a)配置內核支持UBIFS

Device Drivers —>Memory Technology Device (MTD) support —>UBI – Unsorted block images —>Enable UBI

配置mtd支持UBI接口

File systems —>Miscellaneous filesystems —>UBIFS file system support

配置內核支持UBIFS文件系統

b)將一個MTD分區4掛載為UBIFS格式

● flash_eraseall /dev/mtd4 //擦除mtd4

● ubiattach /dev/ubi_ctrl -m 4 //和mtd4關聯

● ubimkvol /dev/ubi0 -N rootfs -s 100MiB //設定volume 大小(不是固定值,可以用工具改變)及名稱

● mount -t ubifs ubi0_0 /mnt/ubi或mount -t ubifs ubi0:rootfs /mnt/ubi

c)製作UBIFS文件系統

在製作UBI鏡像時,需要首先確定以下幾個參數:

MTD partition size; //對應的FLASH分區大小

flash physical eraseblock size; // FLASH物理擦除塊大小

minimum flash input/output unit size; //最小的FLASH輸入輸出單元大小

for NAND flashes – sub-page size; //對於nand flash來說,子頁大小

logical eraseblock size.//邏輯擦除塊大小

參數可以由幾種方式得到

a)如果使用的是2.6.30以後的內核,這些信息可以通過工具從內核獲得,如:mtdinfo –u。

b)之前的內核可以通過以下方法:

● MTD partition size:從內核的分區表或cat /proc/mtd獲得

● flash physical eraseblock size:從flash芯片手冊中可以得到FLASH物理擦除塊大小,或cat /proc/mtd

● minimum flash input/output unit size:

1)nor flash:通常是1個字節

2)nand falsh:一個頁面

● sub-page size:通過flash手冊獲得

● logical eraseblock size:對於有子頁的NAND FLASH來說,等於“物理擦除塊大小-1頁的大小”

c)也可以通過ubi和mtd連接時的產生的信息獲取,如:

#modprobe ubi mtd=4 //ubi作為模塊加載

#ubiattach /dev/ubi_ctrl -m 4 //通過ubiattach關聯MTD
UBI: attaching mtd4 to ubi0
UBI: physical eraseblock size: 131072 bytes (128 KiB)
UBI: logical eraseblock size: 129024 bytes
UBI: smallest flash I/O unit: 2048
UBI: sub-page size: 512
UBI: VID header offset: 512 (aligned 512)
UBI: data offset: 2048
UBI: attached mtd4 to ubi0

更詳細的解釋參見
http://www.linux-mtd.infradead.org/doc/ubi.html#L_overhead

#mkfs.ubifs -r rootfs -m 2048 -e 129024 -c 812 -o ubifs.img
#ubinize -o ubi.img -m 2048 -p 128KiB -s 512 /home/lht/omap3530/tools/ubinize.cfg
  • -r:制定文件內容的位置
  • -m:頁面大小
  • -e:邏輯擦除塊大小
  • -p:物理擦除塊大小
  • -c:最大的邏輯擦除塊數量
  • 對我們這種情況,文件系統最多可以訪問卷上的129024*812=100M空間
  • -s:最小的硬件輸入輸出頁面大小,如:k9f1208為256(上下半頁訪問)

其中,ubinize.cfg的內容為:

[ubifs]
    mode=ubi
    image=ubifs.img
    vol_id=0
    vol_size=100MiB
    vol_type=dynamic
    vol_name=rootfs
    vol_flags=autoresize

利用uboot燒寫、啟動UBIFS鏡像

a)燒寫UBIFS鏡像

OMAP3 DevKit8000 # mmcinit
    OMAP3 DevKit8000 # fatload mmc 0:1 81000000 ubi.img
    reading ubi.img
    12845056 bytes read
    OMAP3 DevKit8000 # nand unlock
    device 0 whole chip
    nand_unlock: start: 00000000, length: 268435456!
    NAND flash successfully unlocked
    OMAP3 DevKit8000 # nand ecc sw
    OMAP3 DevKit8000 # nand erase 680000 7980000
    NAND erase: device 0 offset 0x680000, size 0x7980000
    Erasing at 0x7fe0000 -- 100% complete.
    OK
    OMAP3 DevKit8000 # nand write.i 81000000 680000 $(filesize)
    NAND write: device 0 offset 0x680000, size 0xc40000
    Writing data at 0x12bf800 -- 100% complete.
    12845056 bytes written: OK

燒寫過程和燒寫內核鏡像的過程一致,所以UBI文件系統應該不像yaffs文件系統那樣用到了nand的OOB區域。

b)設置UBIFS文件系統作為根文件系統啟動的參數

OMAP3 DevKit8000 # setenv bootargs console=ttyS2,115200n8 ubi.mtd=4 root=ubi0:rootfs
    rootfstype=ubifs video=omapfb:mode:4.3inch_LCD
    OMAP3 DevKit8000 # setenv bootcmd nand read.i 80300000 280000 200000;bootm 80300000

其他文件系 統:fat/fat32也可用於實際嵌入式系統的擴展存儲器(例如PDA, Smartphone, 數碼相機等的SD卡),這主要是為了更好的與最流行的Windows桌面操作系統相兼容。ext2也可以作為嵌入式Linux的文件系統,不過將它用於 FLASH閃存會有諸多弊端。

1.2 基於RAM的文件系統

1.2.1 Ramdisk

RamDisk 就是將內存中的一塊區域作為物理磁盤來使用的一種技術。它並非一個實際的文件系統,而是一種將實際的文件系統裝入內存的機制,並且可以作為根文件系統。將一些經常被訪問而又不會更改的文件(如只讀的根文件系統)通過Ramdisk放在內存中,可以明顯地提高系統的性能。在Linux的啟動階段,initrd提供了一套機制,可以將內核映像和根文件系統一起載入內存。

為了能夠使用RamDisk 你的內核必須要支持:在編譯內核時,要選中RAM disk support這一選項,會在配置文件中定義CONFIG_BLK_DEV_RAM。

為了讓內核有能力在內核加載階段就能裝入RAMDISK,並運行其中的內容,要選中initial RAM disk(initrd) support 選項,會在配置文件中定義CONFIG_BLK_DEV_INITRD。

RamDisk是臨時性的,所以沒有帶日誌的文件系統的必要,所以我們一般做 ext2 就可以了。製作方式:

genext2fs -b 81920 -d rootfs ramdisk
gzip -9 -f ramdisk
mkimage -A arm -O linux -T ramdisk -C none -a 0x88080000 -n "ramdisk" -d ramdisk.gz ramdisk.img

在設置啟動參數時:

setenv bootargs console=${console} ${optargs} root=/dev/ram0 rw ramdisk_size=81920 
initrd=${rdaddr},80M rootfstype=${ramrootfstype}

其中,ramdisk_size=N這個參數告訴RAM磁盤驅動將RAM磁盤的大小設置為N k。RAM磁盤的大小會根據需要動態的增長,因此其大小有個上限加以限制以免它用光所有可用的內存而壞事。ramdisk_size這個參數實際是設置這個上限值的。

我們可以通過命令:dmesg | grep RAMDISK來查看這個上限值。要注意的是,這個值在系統運行階段是不能再被修改的。儘管RAM磁盤的大小有個最大值,但我們可以指定需要使用的RAM磁盤的容量。當我們沒有指定需要使用的RAM磁盤的容量,而直接在其上掛載文件系統時,它的容量是其上限值。

1.2.2 ramfs/tmpfs

Ramfs是Linus Torvalds開發的一種基於內存的文件系統,工作於虛擬文件系統(VFS)層,不能格式化,可以創建多個,在創建時可以指定其最大能使用的內存大 小。(實際上,VFS本質上可看成一種內存文件系統,它統一了文件在內核中的表示方式,並對磁盤文件系統進行緩衝。)

  Ramfs/tmpfs文件系統把所有的文件都放在RAM中,所以讀/寫操作發生在RAM中,可以用ramfs/tmpfs來存儲一些臨時性或經常要修改的數據,例如/tmp和/var目錄,這樣既避免了對Flash存儲器的讀寫損耗,也提高了數據讀寫速度。

  Ramfs/tmpfs相對於傳統的Ramdisk的不同之處主要在於:不能格式化,文件系統大小可隨所含文件內容大小變化。

Tmpfs的一個缺點是當系統重新引導時會丟失所有數據。

1.3 網絡文件系統NFS (Network File System)

NFS是由Sun開發並發展起來的一項在不同機器、不同操作系統之間通過網絡共享文件的技術。在嵌入式Linux系統的開發調試階段,可以利用該技術在主機上建立基於NFS的根文件系統,掛載到嵌入式設備,可以很方便地修改根文件系統的內容。

  以上討論的都是基於存儲設備的文件系統(memory-based file system),它們都可用作Linux的根文件系統。實際上,Linux還支持邏輯的或偽文件系統(logical or pseudo file system),例如procfs(proc文件系統),用於獲取系統信息,以及devfs(設備文件系統)和sysfs,用於維護設備文件。

2. Linux系統目錄結構

在 Linux 或 Unix 操作系統中,所有的文件和目錄都被組織成以一個根節點開始的倒置的樹狀結構。

linux文件系統的最頂端是/,我們稱/為Linux的root(根目錄),也就是 Linux操作系統的文件系統。Linux的文件系統的入口就是/,所有的目錄、文件、設備都在/之下,/就是Linux文件系統的組織者,也是最上級的領導者。在根目錄之下的既可以是目錄,也可以是文件,而每一個目錄中又可以包含子目錄文件。如此反覆就可以構成一個龐大的文件系統。

2.1 FHS誕生

由於linux是開放源代碼,最開始各大公司和團體根據linux的核心代碼做各自的操作,編程。這樣就造成在根下的目錄的不同。這樣就造成個人不能使用他人的linux系統的PC。因為你根本不知道一些基本的配置,文件在哪裡,這就造成了混亂。這就是FHS(Filesystem Hierarchy Standard )機構誕生的原因。該機構是linux愛好者自發的組成的一個團體,主要是是對linux做一些基本的要求,不至於是操作者換一台主機就成了linux的‘文盲’。

根據FHS(
http://www.pathname.com/fhs/)的官方文件指出, 他們的主要目的是希望讓使用者可以了解到已安裝軟件通常放置於那個目錄下, 所以他們希望獨立的軟件開發商、操作系統製作者、以及想要維護系統的用戶,都能夠遵循FHS的標準。 也就是說,FHS的重點在於規範每個特定的目錄下應該要放置什麼樣子的數據而已。 這樣做好處非常多,因為Linux操作系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風格。

可分享的(shareable)不可分享的(unshareable)
不變的(static)/usr (軟件放置處)/etc (配置文件)
/opt (第三方協力軟件)/boot (開機與核心檔)
可變動的(variable)/var/mail (使用者郵件信箱)/var/run (程序相關)
/var/spool/news (新聞組)/var/lock (程序相關)

四種類型:

1. 可分享的:

可以分享給其他系統掛載使用的目錄,所以包括執行文件與用戶的郵件等數據, 是能夠分享給網絡上其他主機掛載用的目錄;

2. 不可分享的:

自己機器上面運作的裝置文件或者是與程序有關的socket文件等, 由於僅與自身機器有關,所以當然就不適合分享給其他主機了。

3. 不變的:

有些數據是不會經常變動的,跟隨着distribution而不變動。 例如函式庫、文件說明文件、系統管理員所管理的主機服務配置文件等等;

4. 可變動的:

經常改變的數據,例如登錄文件、一般用戶可自行收受的新聞組等。

事實上,FHS針對目錄樹架構僅定義出三層目錄底下應該放置什麼數據而已,分別是底下這三個目錄的定義:

  • / (root, 根目錄):與開機系統有關;
  • /usr (unix software resource):與軟件安裝/執行有關;
  • /var (variable):與系統運作過程有關。

2.1.1 根目錄 (/) 的意義與內容

根目錄是整個系統最重要的一個目錄,因為不但所有的目錄都是由根目錄衍生出來的, 同時根目錄也與開機/還原/系統修復等動作有關。 由於系統開機時需要特定的開機軟件、核心文件、開機所需程序、 函式庫等等文件數據,若系統出現錯誤時,根目錄也必須要包含有能夠修復文件系統的程序才行。 因為根目錄是這麼的重要,所以在FHS的要求方面,他希望根目錄不要放在非常大的分區, 因為越大的分區內你會放入越多的數據,如此一來根目錄所在分區就可能會有較多發生錯誤的機會。

因此FHS標準建議:根目錄(/)所在分區應該越小越好, 且應用程序所安裝的軟件最好不要與根目錄放在同一個分區內,保持根目錄越小越好。 如此不但效能較佳,根目錄所在的文件系統也較不容易發生問題。說白了,就是根目錄和Windows的C盤一個樣。

根據以上原因,FHS認為根目錄(/)下應該包含如下子目錄:

/bin

系統有很多放置執行檔的目錄,但/bin比較特殊。因為/bin放置的是在單人維護模式下還能夠被操作的指令。在/bin底下的指令可以被root與一般帳號所使用,

主要有:cat,chmod(修改權限), chown, date, mv, mkdir, cp, bash等等常用的指令。

/boot

主要放置開機會使用到的檔案,包括Linux核心檔案以及開機選單與開機所需設定檔等等。Linux kernel常用的檔名為:vmlinuz ,如果使用的是grub這個開機管理程式,則還會存在/boot/grub/這個目錄。

/dev

在Linux系統上,任何裝置與周邊設備都是以檔案的型態存在於這個目錄當中。 只要通過存取這個目錄下的某個檔案,就等於存取某個裝置。比要重要的檔案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等

/etc

系統主要的設定檔幾乎都放置在這個目錄內,例如人員的帳號密碼檔、各種服務的啟始檔等等。 一般來說,這個目錄下的各檔案屬性是可以讓一般使用者查閱的,但是只有root有權力修改。 FHS建議不要放置可執行檔(binary)在這個目錄中。 比較重要的檔案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。 另外,其下重要的目錄有:/etc/init.d/ :所有服務的預設啟動script都是放在這裡的,例如要啟動或者關閉iptables的話: /etc/init.d/iptables start、/etc/init.d/ iptables stop

/etc/xinetd.d/

這就是所謂的super daemon管理的各項服務的設定檔目錄。

/etc/X11/

與X Window有關的各種設定檔都在這裡,尤其是xorg.conf或XF86Config這兩個X Server的設定檔。

/home

這是系統預設的使用者家目錄(home directory)。 在你新增一個一般使用者帳號時,預設的使用者家目錄都會規範到這裡來。比較重要的是,家目錄有兩種代號:

~ :代表當前使用者的家目錄,而 ~guest:則代表用戶名為guest的家目錄。

/lib

系統的函式庫非常的多,而/lib放置的則是在開機時會用到的函式庫,以及在/bin或/sbin底下的指令會呼叫的函式庫而已 。 什麼是函式庫呢?妳可以將他想成是外掛,某些指令必須要有這些外掛才能夠順利完成程式的執行之意。 尤其重要的是/lib/modules/這個目錄,因為該目錄會放置核心相關的模組(驅動程式)。

/media

media是媒體的英文,顧名思義,這個/media底下放置的就是可移除的裝置。 包括軟碟、光碟、DVD等等裝置都暫時掛載於此。 常見的檔名有:/media/floppy, /media/cdrom等等。

/mnt

如果妳想要暫時掛載某些額外的裝置,一般建議妳可以放置到這個目錄中。在古早時候,這個目錄的用途與/media相同啦。 只是有了/media之後,這個目錄就用來暫時掛載用了。

/opt

這個是給第三方協力軟體放置的目錄 。 什麼是第三方協力軟體啊?舉例來說,KDE這個桌面管理系統是一個獨立的計畫,不過他可以安裝到Linux系統中,因此KDE的軟體就建議放置到此目錄下了。 另外,如果妳想要自行安裝額外的軟體(非原本的distribution提供的),那麼也能夠將你的軟體安裝到這裡來。 不過,以前的Linux系統中,我們還是習慣放置在/usr/local目錄下。

/root

系統管理員(root)的家目錄。 之所以放在這裡,是因為如果進入單人維護模式而僅掛載根目錄時,該目錄就能夠擁有root的家目錄,所以我們會希望root的家目錄與根目錄放置在同一個分區中。

/sbin

Linux有非常多指令是用來設定系統環境的,這些指令只有root才能夠利用來設定系統,其他使用者最多只能用來查詢而已。放在/sbin底下的為開機過程中所需要的,裡面包括了開機、修復、還原系統所需要的指令。至於某些伺服器軟體程式,一般則放置到/usr/sbin/當中。至於本機自行安裝的軟體所產生的系統執行檔(system binary),則放置到/usr/local/sbin/當中了。常見的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。

/srv

srv可以視為service的縮寫,是一些網路服務啟動之後,這些服務所需要取用的資料目錄。 常見的服務例如WWW, FTP等等。 舉例來說,WWW伺服器需要的網頁資料就可以放置在/srv/www/裡面。呵呵,看來平時我們編寫的代碼應該放到這裡了。

/tmp

這是讓一般使用者或者是正在執行的程序暫時放置檔案的地方。這個目錄是任何人都能夠存取的,所以你需要定期的清理一下。當然,重要資料不可放置在此目錄啊。 因為FHS甚至建議在開機時,應該要將/tmp下的資料都刪除。

事實上FHS針對根目錄所定義的標準就僅限於上表,不過仍舊有些目錄也需要我們了解一下,具體如下:

/lost+found

這個目錄是使用標準的ext2/ext3檔案系統格式才會產生的一個目錄,目的在於當檔案系統發生錯誤時,將一些遺失的片段放置到這個目錄下。 這個目錄通常會在分割槽的最頂層存在,例如你加裝一個硬盤於/disk中,那在這個系統下就會自動產生一個這樣的目錄/disk/lost+found

/proc

這個目錄本身是一個虛擬文件系統(virtual filesystem)喔。 他放置的資料都是在內存當中,例如系統核心、行程資訊(process)(是進程嗎?)、周邊裝置的狀態及網絡狀態等等。因為這個目錄下的資料都是在記憶體(內存)當中,所以本身不佔任何硬盤空間。比較重要的檔案(目錄)例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。呵呵,是虛擬內存嗎[guest]?

/sys

這個目錄其實跟/proc非常類似,也是一個虛擬的檔案系統,主要也是記錄與核心相關的資訊。 包括目前已載入的核心模組與核心偵測到的硬體裝置資訊等等。 這個目錄同樣不佔硬盤容量。

除了這些目錄的內容之外,另外要注意的是,因為根目錄與開機有關,開機過程中僅有根目錄會被掛載, 其他分區則是在開機完成之後才會持續的進行掛載的行為。就是因為如此,因此根目錄下與開機過程有關的目錄, 就不能夠與根目錄放到不同的分區去。那哪些目錄不可與根目錄分開呢?有底下這些:

  • /etc:配置文件
  • /bin:重要執行檔
  • /dev:所需要的裝置文件
  • /lib:執行檔所需的函式庫與核心所需的模塊
  • /sbin:重要的系統執行文件

這五個目錄千萬不可與根目錄分開在不同的分區。

更多Linux後台架構師學習資料,視頻,面試題,請私信

Linux系統文件類型和Linux系統目錄結構詳解

2.1.2 /usr的意義與內容

依據FHS的基本定義,/usr裡面放置的數據屬於可分享的與不可變動的(shareable, static), 如果你知道如何透過網絡進行分區的掛載(例如在服務器篇會談到的NFS服務器),那麼/usr確實可以分享給局域網絡內的其他主機來使用喔。

/usr不是user的縮寫,其實usr是Unix Software Resource的縮寫, 也就是Unix操作系統軟件資源所放置的目錄,而不是用戶的數據啦。這點要注意。 FHS建議所有軟件開發者,應該將他們的數據合理的分別放置到這個目錄下的次目錄,而不要自行建立該軟件自己獨立的目錄。

因為是所有系統默認的軟件(distribution發布者提供的軟件)都會放置到/usr底下,因此這個目錄有點類似Windows 系統的C:Windows + C:Program files這兩個目錄的綜合體,系統剛安裝完畢時,這個目錄會佔用最多的硬盤容量。 一般來說,/usr的次目錄建議有底下這些:

/usr/X11R6/

為X Window System重要數據所放置的目錄,之所以取名為X11R6是因為最後的X版本為第11版,且該版的第6次釋出之意。

/usr/bin/

絕大部分的用戶可使用指令都放在這裡。請注意到他與/bin的不同之處。(是否與開機過程有關)

/usr/include/

c/c++等程序語言的檔頭(header)與包含檔(include)放置處,當我們以tarball方式 (*.tar.gz 的方式安裝軟件)安裝某些數據時,會使用到裡頭的許多包含檔。

/usr/lib/

包含各應用軟件的函式庫、目標文件(object file),以及不被一般使用者慣用的執行檔或腳本(script)。 某些軟件會提供一些特殊的指令來進行服務器的設定,這些指令也不會經常被系統管理員操作, 那就會被擺放到這個目錄下啦。要注意的是,如果你使用的是X86_64的Linux系統, 那可能會有/usr/lib64/目錄產生

/usr/local/

統管理員在本機自行安裝自己下載的軟件(非distribution默認提供者),建議安裝到此目錄, 這樣會比較便於管理。舉例來說,你的distribution提供的軟件較舊,你想安裝較新的軟件但又不想移除舊版, 此時你可以將新版軟件安裝於/usr/local/目錄下,可與原先的舊版軟件有分別啦。 你可以自行到/usr/local去看看,該目錄下也是具有bin, etc, include, lib…的次目錄

/usr/sbin/

非系統正常運作所需要的系統指令。最常見的就是某些網絡服務器軟件的服務指令(daemon)

/usr/share/

放置共享文件的地方,在這個目錄下放置的數據幾乎是不分硬件架構均可讀取的數據, 因為幾乎都是文本文件嘛。在此目錄下常見的還有這些次目錄:/usr/share/man:聯機幫助文件

/usr/share/doc

軟件雜項的文件說明

/usr/share/zoneinfo

與時區有關的時區文件

/usr/src/

一般原始碼建議放置到這裡,src有source的意思。至於核心原始碼則建議放置到/usr/src/linux/目錄下。

2.1.3 /var的意義與內容

如果/usr是安裝時會佔用較大硬盤容量的目錄,那麼/var就是在系統運作後才會漸漸佔用硬盤容量的目錄。 因為/var目錄主要針對常態性變動的文件,包括緩存(cache)、登錄檔(log file)以及某些軟件運作所產生的文件, 包括程序文件(lock file, run file),或者例如MySQL數據庫的文件等等。常見的次目錄有:

/var/cache/

應用程序本身運作過程中會產生的一些暫存檔

/var/lib/

程序本身執行的過程中,需要使用到的數據文件放置的目錄。在此目錄下各自的軟件應該要有各自的目錄。 舉例來說,MySQL的數據庫放置到/var/lib/mysql/而rpm的數據庫則放到/var/lib/rpm去

/var/lock/

某些裝置或者是文件資源一次只能被一個應用程序所使用,如果同時有兩個程序使用該裝置時, 就可能產生一些錯誤的狀況,因此就得要將該裝置上鎖(lock),以確保該裝置只會給單一軟件所使用。 舉例來說,刻錄機正在刻錄一塊光盤,你想一下,會不會有兩個人同時在使用一個刻錄機燒片? 如果兩個人同時刻錄,那片子寫入的是誰的數據?所以當第一個人在刻錄時該刻錄機就會被上鎖, 第二個人就得要該裝置被解除鎖定(就是前一個人用完了)才能夠繼續使用

/var/log/

非常重要。這是登錄文件放置的目錄。裡面比較重要的文件如/var/log/messages, /var/log/wtmp(記錄登入者的信息)等。

/var/mail/

放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中,通常這兩個目錄是互為鏈接文件。

/var/run/

某些程序或者是服務啟動後,會將他們的PID放置在這個目錄下

/var/spool/

這個目錄通常放置一些隊列數據,所謂的“隊列”就是排隊等待其他程序使用的數據。 這些數據被使用後通常都會被刪除。舉例來說,系統收到新信會放置到/var/spool/mail/中, 但使用者收下該信件後該封信原則上就會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue/中, 等到被送出後就被刪除。如果是工作排程數據(crontab),就會被放置到/var/spool/cron/目錄中。

由於FHS僅是定義出最上層(/)及次層(/usr, /var)的目錄內容應該要放置的文件或目錄數據, 因此,在其他次目錄層級內,就可以隨開發者自行來配置了。

2.1.4 目錄樹(directory tree)

在Linux底下,所有的文件與目錄都是由根目錄開始的。那是所有目錄與文件的源頭, 然後再一個一個的分支下來,因此,我們也稱這種目錄配置方式為:目錄樹(directory tree), 這個目錄樹的主要特性有:

目錄樹的啟始點為根目錄 (/, root)

每一個目錄不止能使用本地端的 partition 的文件系統,也可以使用網絡上的 filesystem 。舉例來說, 可以利用 Network File System (NFS) 服務器掛載某特定目錄等。

每一個文件在此目錄樹中的文件名(包含完整路徑)都是獨一無二的。

如果我們將整個目錄樹以圖的方法來顯示,並且將較為重要的文件數據列出來的話,那麼目錄樹架構就如下圖所示:

Linux系統文件類型和Linux系統目錄結構詳解

以下是對這些目錄的解釋:

/:根目錄

一般根目錄下只存放目錄,不要存放文件,/etc、/bin、/dev、/lib、/sbin應該和根目錄放置在一個分區中。

/bin

/usr/bin:bin是Binary的縮寫, 這個目錄存放着最經常使用的命令。例如cp、ls、cat,等等。

/boot

這裡存放的是啟動Linux時使用的一些核心文件,包括一些連接文件以及鏡像文件。/boot/vmlinuz為linux的內核文件,以及/boot/gurb。建議單獨分區,分區大小100M即可。

/dev

dev是Device(設備)的縮寫, 該目錄下存放的是Linux的外部設備文件,在Linux中訪問設備的方式和訪問文件的方式是相同的。訪問該目錄下某個文件,相當於訪問某個設備,其功能類似DOS下的.sys和Win下的.vxd。例如:/dev/hda代表第一個物理IDE硬盤。常用的是掛載光驅mount /dev/cdrom /mnt。

/etc

這個目錄用來存放所有的系統管理所需要的配置文件和子目錄。不建議在此目錄下存放可執行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前記得備份。註:/etc/X11存放與x windows有關的設置。

/home

用戶的主目錄,在Linux中,系統默認的用戶家目錄,新增用戶賬號時,用戶的家目錄都存放在此目錄下,~表示當前用戶的家目錄,比如說有個用戶叫zhong,那他的主目錄就是/home/zhong也可以用~zhong表示。建議單獨分區,並設置較大的磁盤空間,方便用戶存放數據。

/lib

/usr/lib:/usr/local/lib:這個目錄里存放着系統最基本的動態連接共享庫,其作用類似於Windows里的DLL文件。幾乎所有的應用程序都需要用到這些共享庫。系統使用的函數庫的目錄,程序在執行過程中,需要調用一些額外的參數時需要函數庫的協助,比較重要的目錄為/lib/modules。

/lost+found

這個目錄一般情況下是空的,當系統不正常關機後,這裡就成了一些無家可歸的文件的避難所。對了,有點類似於DOS下的.chk文件。系統異常產生錯誤時,會將一些遺失的片段放置於此目錄下,通常這個目錄會自動出現在裝置目錄下。如加載硬盤於/disk 中,此目錄下就會自動產生目錄/disk/lost+found

/media

linux系統會自動識別一些設備,例如U盤、光驅等等,當識別後,linux會把識別的設備掛載到這個目錄下。

/mnt

系統提供該目錄是為了讓用戶臨時掛載別的文件系統的,我們可以將光驅掛載在/mnt/上,然後進入該目錄就可以查看光驅里的內容了。光盤默認掛載點,通常光盤掛載於/mnt/cdrom下,也不一定,可以選擇任意位置進行掛載。

/opt

這是給主機額外安裝軟件所擺放的目錄。比如你安裝一個ORACLE數據庫則就可以放到這個目錄下。默認是空的。如:FC4使用的Fedora 社群開發軟件,如果想要自行安裝新的KDE 桌面軟件,可以將該軟件安裝在該目錄下。以前的 Linux 系統中,習慣放置在 /usr/local 目錄下。

/proc

此目錄的數據都在內存中,如系統核心,外部設備,網絡狀態,由於數據都存放於內存中,所以不佔用磁盤空間,比較重要的目錄有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等。這個目錄是一個虛擬的目錄,它是系統內存的映射,我們可以通過直接訪問這個目錄來獲取系統信息。

這個目錄的內容不在硬盤上而是在內存里,我們也可以直接修改裡面的某些文件,比如可以通過下面的命令來屏蔽主機的ping命令,使別人無法ping你的機器:echo 1 >
/proc/sys/net/ipv4/icmp_echo_ignore_all

/root

該目錄為系統管理員,也稱作超級權限者的用戶主目錄。系統管理員root的家目錄,系統第一個啟動的分區為/,所以最好將/root和/放置在一個分區下。

/sbin

/usr/sbin:/usr/local/sbin:s就是Super User的意思,這裡存放的是系統管理員使用的系統管理程序。放置系統管理員使用的可執行命令,如fdisk、shutdown、mount等。與/bin不同的是,這幾個目錄是給系統管理員root使用的命令,一般用戶只能”查看”而不能設置和使用。

/selinux

這個目錄是Redhat/CentOS所特有的目錄,Selinux是一個安全機制,類似於windows的防火牆,但是這套機制比較複雜,這個目錄就是存放selinux相關的文件的。

/srv

該目錄存放一些服務啟動之後需要提取的數據。服務啟動之後需要訪問的數據目錄,如www服務需要訪問的網頁數據存放在/srv/www內。

/sys

這是linux2.6內核的一個很大的變化。該目錄下安裝了2.6內核中新出現的一個文件系統 sysfs 。sysfs文件系統集成了下面3種文件系統的信息:針對進程信息的proc文件系統、針對設備的devfs文件系統以及針對偽終端的devpts文件系統。該文件系統是內核設備樹的一個直觀反映。當一個內核對象被創建的時候,對應的文件和目錄也在內核對象子系統中被創建。

/tmp

這個目錄是用來存放一些臨時文件的。一般用戶或正在執行的程序臨時存放文件的目錄,任何人都可以訪問,重要數據不可放置在此目錄下。

/var

這個目錄中存放着在不斷擴充着的東西,包括各種日誌文件。為了保持/usr的相對穩定,那些經常被修改的目錄可以放在這個目錄下,實際上許多系統管理員都是這樣乾的。順帶說一下系統的日誌文件就在/var/log目錄中。放置系統執行過程中經常變化的文件,如隨時更改的日誌文件/var/log,/var/log/message:所有的登錄文件存放目錄,/var/spool/mail:郵件存放的目錄,/var/run:程序或服務啟動後,其PID存放在該目錄下。建議單獨分區,設置較大的磁盤空間。

/usr

這是一個非常重要的目錄,用戶的很多應用程序和文件都放在這個目錄下,類似與windows下的program files目錄。應用程序存放目錄,/usr/bin存放應用程序,/usr/share存放共享數據,/usr/lib存放不能直接運行的,卻是許多程序運行所必需的一些函數庫文件。/usr/local:存放軟件升級包。/usr/share/doc:系統說明文件存放目錄。/usr/share/man: 程序說明文件存放目錄,使用 man ls時會查詢
/usr/share/man/man1/ls.1.gz的內容建議單獨分區,設置較大的磁盤空間。

2.1.5 絕對路徑與相對路徑

除了需要特別注意的FHS目錄配置外,在文件名部分我們也要特別注意。因為根據檔名寫法的不同,也可將所謂的路徑(path)定義為絕對路徑(absolute)與相對路徑(relative)。 這兩種文件名/路徑的寫法依據是這樣的:

  • 絕對路徑:由根目錄(/)開始寫起的文件名或目錄名稱, 例如 /home/dmtsai/.bashrc;
  • 相對路徑:相對於目前路徑的文件名寫法。

例如 ./home/dmtsai 或
http://www.cnblogs.com/home/dmtsai/ 等等。反正開頭不是 / 就屬於相對路徑的寫法

而你必須要了解,相對路徑是以你當前所在路徑的相對位置來表示的。舉例來說,你目前在 /home 這個目錄下, 如果想要進入 /var/log 這個目錄時,可以怎麼寫呢?

cd /var/log (absolute)
cd ../var/log (relative)

因為你在 /home 底下,所以要回到上一層 (../) 之後,才能繼續往 /var 來移動的,特別注意這兩個特殊的目錄:

. :代表當前的目錄,也可以使用 ./ 來表示;

.. :代表上一層目錄,也可以 ../ 來代表。

這個 . 與 .. 目錄概念是很重要的,你常常會看到 cd .. 或 ./command 之類的指令下達方式, 就是代表上一層與目前所在目錄的工作狀態。

如果一個目錄或文件名以一個點 . 開始,表示這個目錄或文件是一個隱藏目錄或文件(如:.bashrc)。即以默認方式查找時,不顯示該目錄或文件。ls -a 能看見所有目錄或文件(包括隱藏的)。

實例1:如何先進入/var/spool/mail/目錄,再進入到/var/spool/cron/目錄內?

命令:

cd /var/spool/mail
cd ../cron

說明:

由於/var/spool/mail與/var/spool/cron是同樣在/var/spool/目錄中。如此就不需要在由根目錄開始寫起了。這個相對路徑是非常有幫助的,尤其對於某些軟件開發商來說。 一般來說,軟件開發商會將數據放置到/usr/local/裡面的各相對目錄。 但如果用戶想要安裝到不同目錄呢?就得要使用相對路徑。

實例2:網絡文件常常提到類似 ./run.sh之類的數據,這個指令的意義為何?

說明:

由於指令的執行需要變量的支持,若你的執行文件放置在本目錄,並且本目錄並非正規的執行文件目錄(/bin, /usr/bin等為正規),此時要執行指令就得要嚴格指定該執行檔。./代表本目錄的意思,所以./run.sh代表執行本目錄下, 名為run.sh的文件。

2.1.6 幾個比較重要的目錄

在linux系統中,有幾個目錄是比較重要的,平時需要注意不要誤刪除或者隨意更改內部文件。

/etc

這個目錄相當重要,如前所述,這個是系統中的配置文件,如果你更改了該目錄下的某個文件可能會導致系統不能啟動。你的開機與系統數據文件均在這個目錄之下,因此當這個目錄被破壞,那你的系統大概也就差不多該死掉了!而在往後的文件中,你會發現我們常常使用這個目錄下的 /etc/rc.d/init.d 這個子目錄,因為這個 init.d 子目錄是開啟一些 Linux 系統服務的 scripts的地方。而在 /etc/rc.d/rc.local 這個文件是開機的執行檔。

/bin, /sbin, /usr/bin, /usr/sbin

這是系統預設的執行文件的放置目錄,比如 ls 就是在/bin/ls 目錄下的,例如 root 常常使用的 userconf, netconf, perl, gcc, c++ 等等的數據都放在這幾個目錄中,所以如果你在提示字符下找不到某個執行檔時,可以在這四個目錄中查一查!其中, /bin, /usr/bin 是給系統用戶(除root外的通用戶)使用的指令,而 /sbin, /usr/sbin 則是給系統管理員使用的指令!

/usr/local

這是系統預設的讓你安裝你後來升級的套件的目錄。例如,當你發現有更新的 Web 套件(如 Apache )可以安裝,而你又不想以 rpm 的方式升級你的套件,則你可以將 apache 這個套件安裝在 /usr/local 底下。安裝在這裡有個好處,因為目前大家的系統都是差不多的,所以如果你的系統要讓別人接管的話,也比較容易上手呀!也比較容易找得到數據!因此,如果你有需要的話,通常我都會將 /usr/local/bin 這個路徑加到我的 path 中。

/home

這個是系統將有賬號的人口的家目錄設置的地方。

/var

這是一個非常重要的目錄,系統上跑了很多程序,那麼每個程序都會有相應的日誌產生,而這些日誌就被記錄到這個目錄下,具體在/var/log 目錄下,不論是登入、各類服務的問題發生時的記錄、以及常態性的服務記錄等等的記錄目錄,所以當你的系統有問題時,就需要來這個目錄記錄的文件數據中察看問題的所在啰!另外mail的預設放置也是在這裡。

/usr/share/man, /usr/local/man

這兩個目錄為放置各類套件說明檔的地方,例如你如果執行 man man,則系統會自動去找這兩個目錄下的所有說明文件。

2.1.7 詳解幾個目錄

/dev

dev是設備(device)的英文縮寫。/dev這個目錄對所有的用戶都十分重要。因為在這個目錄中包含了所有Linux系統中使用的外部設備。但是這裡並不是放的外部設備的驅動程序,這一點和windows,dos操作系統不一樣。它實際上是一個訪問這些外部設備的端口。我們可以非常方便地去訪問這些外部設備,和訪問一個文件,一個目錄沒有任何區別。

Linux沿襲Unix的風格,將所有設備認成是一個文件。

  設備文件分為兩種:塊設備文件(b)和字符設備文件(c)

  設備文件一般存放在/dev目錄下,對常見設備文件作如下說明:

  /dev/hd[a-t]:IDE設備
  /dev/sd[a-z]:SCSI設備
  /dev/fd[0-7]:標準軟驅
  /dev/md[0-31]:軟raid設備
  /dev/loop[0-7]:本地迴環設備
  /dev/ram[0-15]:內存
  /dev/null:無限數據接收設備,相當於黑洞
  /dev/zero:無限零資源
  /dev/tty[0-63]:虛擬終端
  /dev/ttyS[0-3]:串口
  /dev/lp[0-3]:並口
  /dev/console:控制台
  /dev/fb[0-31]:framebuffer
  /dev/cdrom => /dev/hdc
  /dev/modem => /dev/ttyS[0-9]
  /dev/pilot => /dev/ttyS[0-9]
  /dev/random:隨機數設備
  /dev/urandom:隨機數設備
  /dev目錄下的節點是怎麼創建的?  --->   devf或者udev會自動幫你創建得。
  kobject是sysfs文件系統的基礎,udev通過監測、檢測sysfs來獲取新創建的設備的。

/etc

包含很多文件.許多網絡配置文件也在/etc 中

./etc/rc or /etc/rc.d or /etc/rc*.d :啟動、或改變運行級時運行的scripts或scripts的目錄.

/etc/passwd:用戶數據庫,其中的域給出了用戶名、真實姓名、家目錄、加密的口令和用戶的其他信息.

/etc/fstab:啟動時mount -a命令(在/etc/rc 或等效的啟動文件中)自動mount的文件系統列表. Linux下,也包括用swapon -a啟用的swap區的信息.

/etc/group:類似/etc/passwd ,但說明的不是用戶而是組.

/etc/inittab:init 的配置文件.

/etc/issue:getty 在登錄提示符前的輸出信息.通常包括系統的一段短說明或歡迎信息.內容由系統管理員確定.

/etc/motd:Message Of The Day,成功登錄後自動輸出.內容由系統管理員確定.經常用於通告信息,如計劃關機時間的警告.

/etc/mtab:當前安裝的文件系統列表.由scripts初始化,並由mount 命令自動更新.需要一個當前安裝的文件系統的列表時使用,例如df 命令.

/etc/shadow:在安裝了影子口令軟件的系統上的影子口令文件.影子口令文件將/etc/passwd 文件中的加密口令移動到/etc/shadow 中,而後者只對root可讀.這使破譯口令更困難.

/etc/login.defs:login 命令的配置文件.

/etc/printcap:類似/etc/termcap ,但針對打印機.語法不同.

/etc/profile , /etc/csh.login , /etc/csh.cshrc:登錄或啟動時Bourne或C shells執行的文件.這允許系統管理員為所有用戶建立全局缺省環境.

/etc/securetty:確認安全終端,即哪個終端允許root登錄.一般只列出虛擬控制台,這樣就不可能(至少很困難)通過modem或網絡闖入系統並得到超級用戶特權.

/etc/shells:列出可信任的shell.chsh 命令允許用戶在本文件指定範圍內改變登錄shell.提供一台機器FTP服務的服務進程ftpd 檢查用戶shell是否列在 /etc/shells 文件中,如果不是將不允許該用戶登錄.

/etc/sysconfig:網絡配置相關目錄

2.2 /proc:目錄

檔名 文件內容

/proc/cmdline: 加載 kernel 時所下達的相關參數!查閱此文件,可了解系統是如何啟動的!

/proc/cpuinfo :本機的 CPU 的相關資訊,包含時脈、類型與運算功能等

/proc/devices :這個文件記錄了系統各個主要裝置的主要裝置代號,與 mknod 有關呢!

/proc/filesystems: 目前系統已經加載的文件系統羅!

/proc/interrupts :目前系統上面的 IRQ 分配狀態。

/proc/ioports :目前系統上面各個裝置所配置的 I/O 位置。

/proc/kcore :這個就是內存的大小啦!好大對吧!但是不要讀他啦!

/proc/loadavg:還記得 top 以及 uptime 吧?沒錯!上頭的三個平均數值就是記錄在此!

/proc/meminfo :使用 free 列出的內存資訊,嘿嘿!在這裡也能夠查閱到!

/proc/modules :目前我們的 Linux 已經加載的模塊列表,也可以想成是驅動程序啦!

/proc/mounts :系統已經掛載的數據,就是用 mount 這個命令呼叫出來的數據啦!

/proc/swaps :到底系統掛加載的內存在哪裡?呵呵!使用掉的 partition 就記錄在此啦!

/proc/partitions: 使用 fdisk -l 會出現目前所有的 partition 吧?在這個文件當中也有紀錄喔!

/proc/pci :在 PCI 匯流排上面,每個裝置的詳細情況!可用 lspci 來查閱!

/proc/uptime: 就是用 uptime 的時候,會出現的資訊啦!

/proc/version :核心的版本,就是用 uname -a 顯示的內容啦!

/proc/bus/* :一些匯流排的裝置,還有 U盤 的裝置也記錄在此喔!

檔名 文件內容

/proc/cmdline: 加載 kernel 時所下達的相關參數!查閱此文件,可了解系統是如何啟動的!

/proc/cpuinfo :本機的 CPU 的相關資訊,包含時脈、類型與運算功能等

/proc/devices :這個文件記錄了系統各個主要裝置的主要裝置代號,與 mknod 有關呢!

/proc/filesystems: 目前系統已經加載的文件系統羅!

/proc/interrupts :目前系統上面的 IRQ 分配狀態。

/proc/ioports :目前系統上面各個裝置所配置的 I/O 位址。

/proc/kcore :這個就是內存的大小啦!好大對吧!但是不要讀他啦!

/proc/loadavg:還記得 top 以及 uptime 吧?沒錯!上頭的三個平均數值就是記錄在此!

/proc/meminfo :使用 free 列出的內存資訊,嘿嘿!在這裡也能夠查閱到!

/proc/modules :目前我們的 Linux 已經加載的模塊列表,也可以想成是驅動程序啦!

/proc/mounts :系統已經掛載的數據,就是用 mount 這個命令呼叫出來的數據啦!

/proc/swaps :到底系統掛加載的內存在哪裡?呵呵!使用掉的 partition 就記錄在此啦!

/proc/partitions: 使用 fdisk -l 會出現目前所有的 partition 吧?在這個文件當中也有紀錄喔!

/proc/pci :在 PCI 匯流排上面,每個裝置的詳細情況!可用 lspci 來查閱!

/proc/uptime: 就是用 uptime 的時候,會出現的資訊啦!

/proc/version :核心的版本,就是用 uname -a 顯示的內容啦!

/proc/bus/* :一些匯流排的裝置,還有 U盤 的裝置也記錄在此喔!

2.3 /usr:目錄

/usr :文件系統經常很大,因為所有程序安裝在這裡. /usr 里的所有文件一般來自Linux distribution;本地安裝的程序和其他東西在/usr/local 下.這樣可能在升級新版系統或新distribution時無須重新安裝全部程序.

/usr/etc: 存放設置文件

/usr/games: 存放遊戲和教學文件

/usr/include :存放C開發工具的頭文件

/usr/share :存放結構獨立的數據

/usr/bin :幾乎所有用戶命令.有些命令在/bin 或/usr/local/bin 中.

/usr/sbin :根文件系統不必要的系統管理命令,例如多數服務程序.

/usr/share/man , /usr/share/info , /usr/share/doc: 手冊頁、GNU信息文檔和各種其他文檔文件.

/usr/include: C編程語言的頭文件.為了一致性這實際上應該在/usr/lib 下,但傳統上支持這個名字.

/usr/lib :程序或子系統的不變的數據文件,包括一些site-wide配置文件.名字lib來源於庫(library); 編程的原始庫存在/usr/lib 里.

/usr/local :本地安裝的軟件和其他文件放在這裡.

/usr/src: 存放程序的源代碼

2.4 /var:目錄

/var :包括系統一般運行時要改變的數據.每個系統是特定的,即不通過網絡與其他計算機共享.

/var/catman:當要求格式化時的man頁的cache.man頁的源文件一般存在/usr/man/man* 中;有些man頁可能有預格式化的版本,存在/usr/man/cat* 中.而其他的man頁在第一次看時需要格式化,格式化完的版本存在/var/man 中,這樣其他人再看相同的頁時就無須等待格式化了. (/var/catman 經常被清除,就像清除臨時目錄一樣.)

/var/lib :系統正常運行時要改變的文件.

/var/local:/usr/local 中安裝的程序的可變數據(即系統管理員安裝的程序).注意,如果必要,即使本地安裝的程序也會使用其他/var 目錄,例如/var/lock .

/var/lock:鎖定文件.許多程序遵循在/var/lock 中產生一個鎖定文件的約定,以支持他們正在使用某個特定的設備或文件.其他程序注意到這個鎖定文件,將不試圖使用這個設備或文件.

/var/log:各種程序的Log文件,特別是login (/var/log/wtmp log所有到系統的登錄和註銷) 和syslog (/var/log/messages 里存儲所有核心和系統程序信息. /var/log 里的文件經常不確定地增長,應該定期清除.

/var/run:保存到下次引導前有效的關於系統的信息文件.例如, /var/run/utmp 包含當前登錄的用戶的信息.

/var/spool:mail, news, 打印隊列和其他隊列工作的目錄.每個不同的spool在/var/spool 下有自己的子目錄,例如,用戶的郵箱在/var/spool/mail 中.

/var/tmp:比/tmp 允許的大或需要存在較長時間的臨時文件. (雖然系統管理員可能不允許/var/tmp 有很舊的文件.)

/var/lock:鎖定文件.許多程序遵循在/var/lock 中產生一個鎖定文件的約定,以支持他們正在使用某個特定的設備或文件.其他程序注意到這個鎖定文件,將不試圖使用這個設備或文件.

/var/log:各種程序的Log文件,特別是login (/var/log/wtmp log所有到系統的登錄和註銷) 和syslog (/var/log/messages 里存儲所有核心和系統程序信息. /var/log 里的文件經常不確定地增長,應該定期清除.

/var/run:保存到下次引導前有效的關於系統的信息文件.例如, /var/run/utmp 包含當前登錄的用戶的信息.

/var/spool:mail, news, 打印隊列和其他隊列工作的目錄.每個不同的spool在/var/spool 下有自己的子目錄,例如,用戶的郵箱在/var/spool/mail 中.

/var/tmp:比/tmp 允許的大或需要存在較長時間的臨時文件. (雖然系統管理員可能不允許/var/tmp 有很舊的文件.)

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/251277.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-13 17:22
下一篇 2024-12-13 17:22

相關推薦

發表回復

登錄後才能評論