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。