Linux文件系統(tǒng)及操作

作者:xcbeyond
瘋狂源自夢想,技術成就輝煌!微信公眾號:《程序猿技術大咖》號主,專注后端開發(fā)多年,擁有豐富的研發(fā)經(jīng)驗,樂于技術輸出、分享,現(xiàn)階段從事微服務架構項目的研發(fā)工作,涉及架構設計、技術選型、業(yè)務研發(fā)等工作。對于Java、微服務、數(shù)據(jù)庫、Docker有深入了解,并有大量的調(diào)優(yōu)經(jīng)驗。 









對于初次接觸Linux的人來說,與window相比而言,最大的不同之處就是文件啦。一般的文件大家都是很容易理解的,例如:Word文檔,txt文檔這都屬于常規(guī)文件吧,但是在Linux環(huán)境下,設備也成了文件,使得初次接觸Linux的人來說或多有些困惑吧,不過慢慢就習慣了。所以說,在Linux中,一切都是文件。也就是說,在Linux中,所有的東西都可以被看成文件,所有的操作都可以歸結到對文件的操作,這樣就使得Linux操作系統(tǒng)可以像處理普通文件一樣來使用所有東西(磁盤文件,串口,鍵盤,顯示器,打印機以及其他的設備)。

一、Linux文件系統(tǒng)結構

       無論學習什么東西,起初都會引入結構之類的話語來總領全體,使得對整個體系有了明了的認識與影像。而文件結構是文件存放在磁盤等存儲設備中的組織方式,主要體現(xiàn)在對文件和目錄的組織上。Linux文件系統(tǒng)是以目錄和文件的層次來安排的(windows也是如此),目錄或者文件都是擁有其屬性(文件類型,長度,所有者,訪問權限等)的,尤其是設置的目錄和文件權限,以便提高其訪問的安全性。

      其文件結構呈現(xiàn)一種多級樹形結構,通過這種樹形結構用戶可以瀏覽整個系統(tǒng)下已經(jīng)擁有權限的目錄及文件。一般Linux系統(tǒng)安裝完了后,會有形成固定的目錄結構,其不同的目錄存放著不同類別的文件,以此完成一些特定的任務。Linux根目錄下包含的目錄及其用途如下:
 

二、文件類型 

    [xcbeyond@bogon tmp]$ ls -al
    total 120
    drwxrwxrwt. 27 root     root     4096 Nov  2 06:26 .
    dr-xr-xr-x. 22 root     root     4096 Oct 19 01:45 ..
    drwx------.  2 root     root     4096 Oct 12 01:31 .esd-0
    drwx------.  2 xcbeyond xcbeyond 4096 Nov  2 05:23 .esd-500
    drwxrwxrwt.  2 root     root     4096 Nov  2 05:23 .ICE-unix
    drwx------.  2 xcbeyond xcbeyond 4096 Jul 20 07:02 keyring-B651js
    drwx------.  2 root     root     4096 Oct 12 01:31 keyring-dKrzCB
    drwx------.  2 xcbeyond xcbeyond 4096 Oct  7 05:45 keyring-G6gJe4
    drwx------.  2 xcbeyond xcbeyond 4096 Nov  2 05:23 keyring-JaMrno
    (省略……)

       從上述示例中,可以看到列出的文件信息中包含有文件類型、文件屬性、用戶名、用戶所在組、文件大小、修改日期、文件名等。其中第一列信息(drwxrwxrwt)是比較重要的,也即是接下來著重說明的內(nèi)容。

      第一列信息包含了10個字符,分為4組:

      ①第一組(第1位):文件類型
 

  不同的字符代表不同的文件類型,如:d代表目錄文件。






         Linux文件類型符號見下表:

 

②第二組(第2-4位):文件所有者(user)權限

      ③第三組(第5-7位):文件所有者的同組用戶(group)權限

      ④第四組(第8-10位):其他組用戶(權限

      ※權限分為:讀、寫、執(zhí)行三種

      1、普通文件

             普通文件是計算機用戶用來存放的數(shù)據(jù)、程序等信息文件,一般被長期存放在存儲設備(硬盤)中。普通文件一般又分為文本文件和二進制文件。

      2、目錄文件

              目錄文件是文件系統(tǒng)中一個目錄所包含的目錄項組成的文件,其只允許系統(tǒng)進行修改,用戶進程可以讀取目錄文件,但不能對它們進行修改,只有內(nèi)核才可以寫目錄文件。

      3、設備文件

              設備文件是用于為操作系統(tǒng)與I/O設備提供鏈接的一種文件,分為字符設備文件和塊設備文件,其對應于字符設備和塊設備。Linux把對設備的I/O作為普通文件的讀取/寫入,操作內(nèi)核提供了對設備處理和對文本處理的統(tǒng)一接口。每一種I/O設備對應一個設備文件,存放在/dev目錄下,如:行式打印機對應于文件/dev/lp。目前在最新的Linux發(fā)行版本中,一般不用用戶創(chuàng)建設備文件,因為這些文件是和內(nèi)核相關聯(lián)的。

               在設備文件中有一個極其特殊的文件是/dev/null,學習shell腳本時,就會知道了,又本叫做“無底洞文件”,一般用于寫入一些不想在console控制顯示的message。

            (1)字符設備(Character Device):這是一個順序的數(shù)據(jù)流設備,對這種設備的讀寫是按照字符進行的,而且這些字符是連續(xù)地形成一個數(shù)據(jù)流。字符設備不具有緩沖區(qū),所以對這種設備的讀寫是實時的。

             (2)塊設備(Block Device):這是一種具有一定結構的隨機存取設備,對這種設備的讀取是按照塊進行的,它使用緩沖區(qū)來存儲暫時的數(shù)據(jù),待時機成熟后,從緩存一次性寫入設備或從設備中一次性讀出放入緩沖區(qū),如磁盤和文件系統(tǒng)等。   

[xcbeyond@bogon dev]$ pwd
/dev                                              ※ /dev目錄
[xcbeyond@bogon dev]$ ls -al
total 4
drwxr-xr-x. 18 root root        3920 Nov  3 06:28 .
dr-xr-xr-x. 22 root root        4096 Nov  3 06:28 ..
crw-rw----.  1 root video    10, 175 Nov  3 06:28 agpgart
drwxr-xr-x.  2 root root         640 Nov  3 06:28 block                ※目錄
drwxr-xr-x.  2 root root         100 Nov  3 06:28 bsg
drwxr-xr-x.  3 root root          60 Nov  3 06:28 bus
lrwxrwxrwx.  1 root root           3 Nov  3 06:28 cdrom -> sr0         ※link文件
lrwxrwxrwx.  1 root root           3 Nov  3 06:28 cdrom1 -> sr1
lrwxrwxrwx.  1 root root           3 Nov  3 06:28 cdrw -> sr0
lrwxrwxrwx.  1 root root           3 Nov  3 06:28 cdrw1 -> sr1
drwxr-xr-x.  2 root root        3020 Nov  3 06:28 char
crw-------.  1 root root      5,   1 Nov  3 06:28 console              ※字符設備文件
lrwxrwxrwx.  1 root root          11 Nov  3 06:28 core -> /proc/kcore
drwxr-xr-x.  3 root root          80 Nov  3 06:28 cpu
crw-rw----.  1 root root     10,  61 Nov  3 06:28 cpu_dma_latency
crw-rw----.  1 root root     10,  62 Nov  3 06:28 crash
drwxr-xr-x.  5 root root         100 Nov  3 06:28 disk
crw-rw----+  1 root audio    14,   9 Nov  3 06:28 dmmidi
lrwxrwxrwx.  1 root root           3 Nov  3 06:28 dvd -> sr0
lrwxrwxrwx.  1 root root           3 Nov  3 06:28 dvd1 -> sr1
lrwxrwxrwx.  1 root root           3 Nov  3 06:28 dvdrw -> sr0
lrwxrwxrwx.  1 root root           3 Nov  3 06:28 dvdrw1 -> sr1
lrwxrwxrwx.  1 root root           3 Nov  3 06:28 fb -> fb0
crw-rw----.  1 root root     29,   0 Nov  3 06:28 fb0
lrwxrwxrwx.  1 root root          13 Nov  3 06:28 fd -> /proc/self/fd
crw-rw-rw-.  1 root root      1,   7 Nov  3 06:28 full
crw-rw-rw-.  1 root root     10, 229 Nov  3 06:28 fuse
crw-rw----.  1 root root    250,   0 Nov  3 06:28 hidraw0
crw-rw----.  1 root root     10, 228 Nov  3 06:28 hpet
drwxr-xr-x.  2 root root          40 Nov  3 06:28 hugepages
crw-------.  1 root root    229,   0 Nov  3 06:28 hvc0
drwxr-xr-x.  4 root root         260 Nov  3 06:28 input
crw-rw----.  1 root root      1,  11 Nov  3 06:28 kmsg
srw-rw-rw-.  1 root root           0 Nov  3 06:28 log
brw-rw----.  1 root disk      7,   0 Nov  3 06:28 loop0             ※塊設備文件
brw-rw----.  1 root disk      7,   1 Nov  3 06:28 loop1
brw-rw----.  1 root disk      7,   2 Nov  3 06:28 loop2
brw-rw----.  1 root disk      7,   3 Nov  3 06:28 loop3

     4、鏈接文件

       鏈接文件又稱為符號鏈接文件,類似于window下的快捷方式文件,它提供了共享文件的一種方法,在鏈接文件中不是通過文件名實現(xiàn)文件共享,而是通過鏈接文件所包含的指向文件的指針來實現(xiàn)對文件的訪問。普通用戶可以建立鏈接文件,并通過其指針方式訪問其所指向的那個文件。根據(jù)鏈接對象不同,鏈接文件可以分為硬鏈接文件和符號鏈接文件。

    5、管道文件

     管道文件主要用于進程間傳遞數(shù)據(jù),它是Linux進程間的一種通信機制。管道是將某一個進程數(shù)據(jù)寫入管道的一端,另一個進程從管道另一端讀取數(shù)據(jù)。管道文件也可以分為匿名管道和命名管道兩種。

     6、套接字文件

     套接字(Socket)文件主要用于在不同計算機的進程間的通信。套接字是操作系統(tǒng)內(nèi)核中的一個數(shù)據(jù)結構,它是網(wǎng)絡中的節(jié)點進行相互通信的通道。套接字有3種類型:流式套接字、數(shù)據(jù)報套接字和原始套接字。流式套接字也是TCP套接字(面向連接的套接字),數(shù)據(jù)報套接字也就是UDP套接字(無連接的套接字),原始套接字通常用“SOCK_RAW”表示。

三、文件訪問權限

     文件訪問權限是指文件系統(tǒng)為了進行安全管理需要在對文件操作時進行的用戶身份認證。合法權限的用戶進行操作,而沒有權限的用戶就不能對其文件進行操作。由于Linux系統(tǒng)是一個典型的多用戶操作系統(tǒng),不同的用戶處于不同的地位。為了保護系統(tǒng)的安全性,Linux系統(tǒng)對不同用戶訪問相同文件做了不同訪問權限的設定,即不同用戶對于相同文件具有不同的讀、寫、執(zhí)行的權限差異。

     用戶在登錄Linux系統(tǒng)時,系統(tǒng)會自動分配一個UID,來區(qū)分不同用戶的權限級別,root用戶具有最高的用戶權限,其UID=0。