Linux文件系統(tǒng)及操作
作者:xcbeyond
瘋狂源自夢(mèng)想,技術(shù)成就輝煌!微信公眾號(hào):《程序猿技術(shù)大咖》號(hào)主,專(zhuān)注后端開(kāi)發(fā)多年,擁有豐富的研發(fā)經(jīng)驗(yàn),樂(lè)于技術(shù)輸出、分享,現(xiàn)階段從事微服務(wù)架構(gòu)項(xiàng)目的研發(fā)工作,涉及架構(gòu)設(shè)計(jì)、技術(shù)選型、業(yè)務(wù)研發(fā)等工作。對(duì)于Java、微服務(wù)、數(shù)據(jù)庫(kù)、Docker有深入了解,并有大量的調(diào)優(yōu)經(jīng)驗(yàn)。
對(duì)于初次接觸Linux的人來(lái)說(shuō),與window相比而言,最大的不同之處就是文件啦。一般的文件大家都是很容易理解的,例如:Word文檔,txt文檔這都屬于常規(guī)文件吧,但是在Linux環(huán)境下,設(shè)備也成了文件,使得初次接觸Linux的人來(lái)說(shuō)或多有些困惑吧,不過(guò)慢慢就習(xí)慣了。所以說(shuō),在Linux中,一切都是文件。也就是說(shuō),在Linux中,所有的東西都可以被看成文件,所有的操作都可以歸結(jié)到對(duì)文件的操作,這樣就使得Linux操作系統(tǒng)可以像處理普通文件一樣來(lái)使用所有東西(磁盤(pán)文件,串口,鍵盤(pán),顯示器,打印機(jī)以及其他的設(shè)備)。
一、Linux文件系統(tǒng)結(jié)構(gòu)
無(wú)論學(xué)習(xí)什么東西,起初都會(huì)引入結(jié)構(gòu)之類(lèi)的話語(yǔ)來(lái)總領(lǐng)全體,使得對(duì)整個(gè)體系有了明了的認(rèn)識(shí)與影像。而文件結(jié)構(gòu)是文件存放在磁盤(pán)等存儲(chǔ)設(shè)備中的組織方式,主要體現(xiàn)在對(duì)文件和目錄的組織上。Linux文件系統(tǒng)是以目錄和文件的層次來(lái)安排的(windows也是如此),目錄或者文件都是擁有其屬性(文件類(lèi)型,長(zhǎng)度,所有者,訪問(wèn)權(quán)限等)的,尤其是設(shè)置的目錄和文件權(quán)限,以便提高其訪問(wèn)的安全性。
其文件結(jié)構(gòu)呈現(xiàn)一種多級(jí)樹(shù)形結(jié)構(gòu),通過(guò)這種樹(shù)形結(jié)構(gòu)用戶可以瀏覽整個(gè)系統(tǒng)下已經(jīng)擁有權(quán)限的目錄及文件。一般Linux系統(tǒng)安裝完了后,會(huì)有形成固定的目錄結(jié)構(gòu),其不同的目錄存放著不同類(lèi)別的文件,以此完成一些特定的任務(wù)。Linux根目錄下包含的目錄及其用途如下:
二、文件類(lèi)型
[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
(省略……)
從上述示例中,可以看到列出的文件信息中包含有文件類(lèi)型、文件屬性、用戶名、用戶所在組、文件大小、修改日期、文件名等。其中第一列信息(drwxrwxrwt)是比較重要的,也即是接下來(lái)著重說(shuō)明的內(nèi)容。
第一列信息包含了10個(gè)字符,分為4組:
①第一組(第1位):文件類(lèi)型
不同的字符代表不同的文件類(lèi)型,如:d代表目錄文件。
Linux文件類(lèi)型符號(hào)見(jiàn)下表:
②第二組(第2-4位):文件所有者(user)權(quán)限
③第三組(第5-7位):文件所有者的同組用戶(group)權(quán)限
④第四組(第8-10位):其他組用戶(權(quán)限
※權(quán)限分為:讀、寫(xiě)、執(zhí)行三種
1、普通文件
普通文件是計(jì)算機(jī)用戶用來(lái)存放的數(shù)據(jù)、程序等信息文件,一般被長(zhǎng)期存放在存儲(chǔ)設(shè)備(硬盤(pán))中。普通文件一般又分為文本文件和二進(jìn)制文件。
2、目錄文件
目錄文件是文件系統(tǒng)中一個(gè)目錄所包含的目錄項(xiàng)組成的文件,其只允許系統(tǒng)進(jìn)行修改,用戶進(jìn)程可以讀取目錄文件,但不能對(duì)它們進(jìn)行修改,只有內(nèi)核才可以寫(xiě)目錄文件。
3、設(shè)備文件
設(shè)備文件是用于為操作系統(tǒng)與I/O設(shè)備提供鏈接的一種文件,分為字符設(shè)備文件和塊設(shè)備文件,其對(duì)應(yīng)于字符設(shè)備和塊設(shè)備。Linux把對(duì)設(shè)備的I/O作為普通文件的讀取/寫(xiě)入,操作內(nèi)核提供了對(duì)設(shè)備處理和對(duì)文本處理的統(tǒng)一接口。每一種I/O設(shè)備對(duì)應(yīng)一個(gè)設(shè)備文件,存放在/dev目錄下,如:行式打印機(jī)對(duì)應(yīng)于文件/dev/lp。目前在最新的Linux發(fā)行版本中,一般不用用戶創(chuàng)建設(shè)備文件,因?yàn)檫@些文件是和內(nèi)核相關(guān)聯(lián)的。
在設(shè)備文件中有一個(gè)極其特殊的文件是/dev/null,學(xué)習(xí)shell腳本時(shí),就會(huì)知道了,又本叫做“無(wú)底洞文件”,一般用于寫(xiě)入一些不想在console控制顯示的message。
(1)字符設(shè)備(Character Device):這是一個(gè)順序的數(shù)據(jù)流設(shè)備,對(duì)這種設(shè)備的讀寫(xiě)是按照字符進(jìn)行的,而且這些字符是連續(xù)地形成一個(gè)數(shù)據(jù)流。字符設(shè)備不具有緩沖區(qū),所以對(duì)這種設(shè)備的讀寫(xiě)是實(shí)時(shí)的。
(2)塊設(shè)備(Block Device):這是一種具有一定結(jié)構(gòu)的隨機(jī)存取設(shè)備,對(duì)這種設(shè)備的讀取是按照塊進(jìn)行的,它使用緩沖區(qū)來(lái)存儲(chǔ)暫時(shí)的數(shù)據(jù),待時(shí)機(jī)成熟后,從緩存一次性寫(xiě)入設(shè)備或從設(shè)備中一次性讀出放入緩沖區(qū),如磁盤(pán)和文件系統(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 ※字符設(shè)備文件
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 ※塊設(shè)備文件
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、鏈接文件
鏈接文件又稱(chēng)為符號(hào)鏈接文件,類(lèi)似于window下的快捷方式文件,它提供了共享文件的一種方法,在鏈接文件中不是通過(guò)文件名實(shí)現(xiàn)文件共享,而是通過(guò)鏈接文件所包含的指向文件的指針來(lái)實(shí)現(xiàn)對(duì)文件的訪問(wèn)。普通用戶可以建立鏈接文件,并通過(guò)其指針?lè)绞皆L問(wèn)其所指向的那個(gè)文件。根據(jù)鏈接對(duì)象不同,鏈接文件可以分為硬鏈接文件和符號(hào)鏈接文件。
5、管道文件
管道文件主要用于進(jìn)程間傳遞數(shù)據(jù),它是Linux進(jìn)程間的一種通信機(jī)制。管道是將某一個(gè)進(jìn)程數(shù)據(jù)寫(xiě)入管道的一端,另一個(gè)進(jìn)程從管道另一端讀取數(shù)據(jù)。管道文件也可以分為匿名管道和命名管道兩種。
6、套接字文件
套接字(Socket)文件主要用于在不同計(jì)算機(jī)的進(jìn)程間的通信。套接字是操作系統(tǒng)內(nèi)核中的一個(gè)數(shù)據(jù)結(jié)構(gòu),它是網(wǎng)絡(luò)中的節(jié)點(diǎn)進(jìn)行相互通信的通道。套接字有3種類(lèi)型:流式套接字、數(shù)據(jù)報(bào)套接字和原始套接字。流式套接字也是TCP套接字(面向連接的套接字),數(shù)據(jù)報(bào)套接字也就是UDP套接字(無(wú)連接的套接字),原始套接字通常用“SOCK_RAW”表示。
三、文件訪問(wèn)權(quán)限
文件訪問(wèn)權(quán)限是指文件系統(tǒng)為了進(jìn)行安全管理需要在對(duì)文件操作時(shí)進(jìn)行的用戶身份認(rèn)證。合法權(quán)限的用戶進(jìn)行操作,而沒(méi)有權(quán)限的用戶就不能對(duì)其文件進(jìn)行操作。由于Linux系統(tǒng)是一個(gè)典型的多用戶操作系統(tǒng),不同的用戶處于不同的地位。為了保護(hù)系統(tǒng)的安全性,Linux系統(tǒng)對(duì)不同用戶訪問(wèn)相同文件做了不同訪問(wèn)權(quán)限的設(shè)定,即不同用戶對(duì)于相同文件具有不同的讀、寫(xiě)、執(zhí)行的權(quán)限差異。
用戶在登錄Linux系統(tǒng)時(shí),系統(tǒng)會(huì)自動(dòng)分配一個(gè)UID,來(lái)區(qū)分不同用戶的權(quán)限級(jí)別,root用戶具有最高的用戶權(quán)限,其UID=0。