0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux的文件類型介紹

阿銘linux ? 來源:阿銘linux ? 作者:阿銘linux ? 2022-10-19 09:19 ? 次閱讀

5.6更改文件的權(quán)限

上面講了那么多文件的屬性,你雖然不能一下子明白每列信息所表示的具體含義,但隨著后續(xù)章節(jié)的逐步深入,阿銘相信你一定能理解和掌握它們。

5.6.1命令chgrp

chgrp(change group的簡(jiǎn)寫)命令可以更改文件的所屬組,其格式為:chgrp[組名] [文件名],示例命令如下:

# groupadd testgroup
# mkdir /tmp/4_6 //創(chuàng)建實(shí)驗(yàn)用的目錄
# cd /tmp/4_6
# touch test1
# ls -l test1
-rw-r--r-- 1 root 0 12月 30
07:43 test1
# chgrp testgroup test1
# ls -l test1
-rw-r--r-- 1 root testgroup 0 12月 30 07:43 test1

上例中用到了groupadd命令,其含義為增加一個(gè)用戶組。

chgrp命令還可以更改目錄的所屬組,示例命令如下:

# mkdir dir2
# touch dir2/test2
# ls –ld dir2
drwxr-xr-x 2 root 19 12月 30
07:44 dir2
# chgrp testgroup dir2
# ls -ld dir2
drwxr-xr-x 2 root testgroup 19 12月 30 07:44 dir2
# ls –l dir2
總用量 0
-rw-r--r-- 1 root 0 12月 30
07:44 test2

上例中,chgrp命令只更改了目錄本身,而目錄下的文件并沒有更改。如果要想級(jí)聯(lián)更改子目錄以及子文件,加-R選項(xiàng)可以實(shí)現(xiàn),示例命令如下:

# chgrp -R testgroup dir2
# ls -l dir2
總用量 0
-rw-r--r-- 1 root testgroup 0 12月 30 07:44 test2

chgrp命令阿銘不常用,因?yàn)檫€有一個(gè)命令可以替代它,那就是chown。

5.6.2命令chown

chown(change owner的簡(jiǎn)寫)命令可以更改文件的所有者,其格式為:chown [ -R ]賬戶名 文件名或者chown [ -R ]賬戶名:組名 文件名。這里的-R選項(xiàng)只適用于目錄,作用是級(jí)聯(lián)更改,即不僅更改當(dāng)前目錄,連目錄里的目錄或者文件也全部更改。示例命令如下:

# mkdir dir3
# useradd user1 // 創(chuàng)建用戶user1,useradd命令會(huì)在5.2.3節(jié)中介紹
# touch dir3/test3 // 在dir3目錄下創(chuàng)建test3文件
# chown user1 dir3
# ls -ld dir3 // dir3目錄所有者已經(jīng)由root改為user1
drwxr-xr-x 2 user1 root 19 12月 30
07:46 dir3
# ls -l dir3 // 但是dir3目錄下的test3文件的所有者依舊是root
總用量 0
-rw-r--r-- 1 root 0 12月 30
07:46 test3
# chown -R user1:testgroup dir3
# ls -l dir3
總用量 0
-rw-r--r-- 1 user1 testgroup 0 12月 30 07:46 test3

上例中,chown -R user1:testgroup會(huì)把test目錄以及該目錄下的文件都修改成所有者為user1,所屬組為testgroup。

5.6.3命令chmod

為了方便更改文件的權(quán)限,Linux使用數(shù)字代替rwx,具體規(guī)則為:r等于4,w等于2,x等于1,-等于0。例如,rwxrwx---用數(shù)字表示就是770,其具體算法為:rwx=4+2+1=7,rwx=4+2+1=7,---=0+0+0=0。

命令chmod(change mode的簡(jiǎn)寫)用于改變用戶對(duì)文件/目錄的讀寫執(zhí)行權(quán)限,其格式為:chmod [-R] xyz文件名(這里的xyz表示數(shù)字)。其中,-R選項(xiàng)的作用等同于chown命令的-R選項(xiàng),也表示級(jí)聯(lián)更改。值得注意的是,在Linux系統(tǒng)中,一個(gè)目錄的默認(rèn)權(quán)限為755,而一個(gè)文件的默認(rèn)權(quán)限為644。下面我們舉例說明一下:

# ls -ld dir3
drwxr-xr-x 2 user1 testgroup 19 12月 30 07:46 dir3
# ls -l dir3
總用量 0
-rw-r--r-- 1 user1 testgroup 0 12月 30 07:46 test3
# chmod 750 dir3
# ls -ld dir3
drwxr-x--- 2 user1 testgroup 19 12月 30 07:46 dir3
# ls -l dir3/test3
-rw-r--r-- 1 user1 testgroup 0 12月 30 07:46 dir3/test3
# chmod 700 dir3/test3
# ls -l dir3/test3
-rwx------ 1 user1 testgroup 0 12月 30 07:46 dir3/test3
# chmod -R 700 dir3
# ls -ld dir3
drwx------ 2 user1 testgroup 19 12月 30 07:46 dir3
# ls -l dir3
總用量 0
-rwx------ 1 user1 testgroup 0 12月 30 07:46 test3

如果你創(chuàng)建了一個(gè)目錄,但又不想讓其他人看到該目錄的內(nèi)容,則只需設(shè)置成rwxr-----(740)即可。

chmod還支持使用rwx的方式來設(shè)置權(quán)限。從之前的介紹中可以發(fā)現(xiàn),基本上就9個(gè)屬性。我們可以使用u、g和o來分別表示user、group和others的屬性,用a代表all(即全部)。下面阿銘舉例來介紹它們的用法,示例命令如下:

# chmod u=rwx,og=rx dir3/test3
# ls -l dir3/test3
-rwxr-xr-x 1 user1 testgroup 0 12月 30 07:46 dir3/test3

這樣可以把dir3/test3的文件權(quán)限修改為rwxr-xr-x。此外,我們還可以針對(duì)u、g、o和a,增加或者減少它們的某個(gè)權(quán)限(讀、寫或執(zhí)行),示例命令如下:

# chmod u-x dir3/test3
# ls -l dir3
總用量 0
-rw-r-xr-x 1 user1 testgroup 0 12月 30 07:46 test3
# chmod a-x dir3/test3
# ls -l dir3/test3
-rw-r--r-- 1 user1 testgroup 0 12月 30 07:46 dir3/test3
# chmod u+x dir3/test3
# ls -l dir3/test3
-rwxr--r-- 1 user1 testgroup 0 12月 30 07:46 dir3/test3

5.6.4命令umask

默認(rèn)情況下,目錄的權(quán)限值為755,普通文件的權(quán)限值為644,那么這個(gè)值是由誰規(guī)定的呢?究其原因,便涉及umask了。

命令umask用于改變文件的默認(rèn)權(quán)限,其格式為:umask xxx(這里的xxx代表3個(gè)數(shù)字)。如果要查看umask的值,只要在命令行輸入umask,然后回車即可,如下所示:

# umask
0022

這里umask的預(yù)設(shè)值是0022,這表示什么含義呢?咱們先來看以下兩條規(guī)則。

若用戶建立普通文件,則預(yù)設(shè)沒有可執(zhí)行權(quán)限,只有r、w兩個(gè)權(quán)限,最大值為666(-rw-rw-rw-)。

若用戶建立目錄,則預(yù)設(shè)所有權(quán)限均開放,即777(drwxrwxrwx)。

umask數(shù)值代表的含義為以上兩條規(guī)則中的默認(rèn)值(文件為666,目錄為777)需要減掉的權(quán)限,所以:

目錄的權(quán)限為rwxrwxrwx - ----w--- = rwxr-xr-x

普通文件的權(quán)限為rw-rw-rw- -----w--- = rw-r--r--

umask的值是可以自定義的,比如設(shè)定umask為002,你再創(chuàng)建目錄或者文件時(shí),默認(rèn)權(quán)限分別為:

rwxrwxrwx - -------w- = rwxrwxr-x(目錄的權(quán)限)

rw-rw-rw- - -------w- = rw-rw-r--(文件的權(quán)限)

示例命令如下:

# umask 002
# mkdir dir4
# ls -ld dir4
drwxrwxr-x 2 root 6 12月 30
07:53 dir4
# touch test4
# ls -l test4
-rw-rw-r-- 1 root 0 12月 30
07:54 test4

這里我們可以看到創(chuàng)建的目錄的默認(rèn)權(quán)限變?yōu)?75,而文件的默認(rèn)權(quán)限變?yōu)?64。如果要把umask改回來,具體操作方法如下:

# umask 022
# touch test5
# ls -l test5
-rw-r--r-- 1 root 0 12月 30
07:54 test5

關(guān)于umask的計(jì)算方法,有的朋友喜歡換算成數(shù)字去做減法,比如rwxrwxrwx–----w--w-= 777–022 = 755。乍一看這好像沒有任何問題,但有時(shí)會(huì)出錯(cuò),比如當(dāng)umask值為033時(shí),如果使用單純的減法,文件的默認(rèn)權(quán)限則為666–033=633,但實(shí)際權(quán)限應(yīng)該為rw-rw-rw-–----wx-wx = rw-r--r-- =644。

umask可以在/etc/bashrc里面更改,默認(rèn)情況下,root的umask為022,而一般使用者則為002??蓪懙臋?quán)限非常重要,因此預(yù)設(shè)會(huì)去掉寫權(quán)限??赡艽蠹乙恢庇幸粋€(gè)疑問,阿銘介紹的umask值一直都是3位數(shù),但為什么系統(tǒng)里面是4位呢?最前面還有一個(gè)0呢,這個(gè)0加與不加沒有影響,它表示umask數(shù)值是八進(jìn)制的。

5.6.5修改文件的特殊屬性

1.命令chattr

命令chattr(change attribute)的格式為:chattr [+-=][Asaci][文件或者目錄名],其中,+、-和=分別表示增加、減少和設(shè)定。各個(gè)選項(xiàng)的含義如下。

A:增加該屬性后,表示文件或目錄的atime將不可修改。

s:增加該屬性后,會(huì)將數(shù)據(jù)同步寫入磁盤中。

a:增加該屬性后,表示只能追加不能刪除,非root用戶不能設(shè)定該屬性。

c:增加該屬性后,表示自動(dòng)壓縮該文件,讀取時(shí)會(huì)自動(dòng)解壓。

i:增加該屬性后,表示文件不能刪除、重命名、設(shè)定鏈接、寫入以及新增數(shù)據(jù)。

以上選項(xiàng)中,常用的為a和i這兩個(gè)選項(xiàng)。下面阿銘舉例說明其用法,示例命令如下:

# chattr +i dir2
# touch dir2/test5
touch: 無法創(chuàng)建"dir2/test5":權(quán)限不夠
# chattr -i dir2
# touch dir2/test5
# chattr +i dir2
# rm -f dir2/test5
rm: 無法刪除"dir2/test5":權(quán)限不夠

上例中,給dir2目錄增加i權(quán)限后,即使是root賬戶,也不能在dir2目錄中創(chuàng)建或刪除test5文件。

下面再來看看a權(quán)限的作用,示例命令如下:

# chattr -i dir2
# touch dir2/test6
# ls dir2
test2 test5  test6
# chattr +a dir2
# rm -f dir2/test6
rm: 無法刪除"dir2/test6":不允許的操作
# touch dir2/test7
# ls dir2
test2 test5  test6 test7

上例中,dir2目錄增加a權(quán)限后,只可以在里面創(chuàng)建文件,而不能刪除文件。

文件同樣適用以上權(quán)限,示例命令如下:

# chattr +a dir2/test7
# echo '11111' > dir2/test7
-bash: dir2/test7: 不允許的操作
# echo '11111' >> dir2/test7
# cat dir2/test7
11111
# chattr +i dir2/test6
# echo '11111' >> dir2/test6
-bash: test2/test3: 權(quán)限不夠
# echo '11111' > dir2/test6
-bash: dir2/test6: 權(quán)限不夠
# rm -f dir2/test6
rm: 無法刪除"dir2/test6":權(quán)限不夠

2.命令lsattr

lsattr(list attribute),該命令用于讀取文件或者目錄的特殊權(quán)限,其格式為:lsattr [-aR] [文件/目錄名]。下面先來看看-a和-R這兩個(gè)選項(xiàng)的含義。

-a:類似于ls的-a選項(xiàng),即連同隱藏文件一同列出。

-R:連同子目錄的數(shù)據(jù)一同列出。

這個(gè)命令的用法和ls類似,示例命令如下:

# lsattr dir2
---------------- dir2/test2
---------------- dir2/test5
----i----------- dir2/test6
-----a---------- dir2/test7
# lsattr -aR dir2
-----a---------- dir2/.
---------------- dir2/..
---------------- dir2/test2
---------------- dir2/test5
----i----------- dir2/test6
-----a---------- dir2/test7

3.setuid、setgidstickybit

前面介紹權(quán)限的時(shí)候,我們一直都是用3位數(shù),其實(shí)最前面還有一位,那就是下面要講的set uid、set gid和sticky bit。

set uid:該權(quán)限針對(duì)二進(jìn)制可執(zhí)行文件,使文件在執(zhí)行階段具有文件所有者的權(quán)限。比如,passwd這個(gè)命令就具有該權(quán)限。當(dāng)普通用戶執(zhí)行passwd命令時(shí),可以臨時(shí)獲得root權(quán)限,從而可以更改密碼。

set gid:該權(quán)限可以作用在文件上(二進(jìn)制可執(zhí)行文件),也可以作用在目錄上。當(dāng)作用在文件上時(shí),其功能和set uid一樣,它會(huì)使文件在執(zhí)行階段具有文件所屬組的權(quán)限。目錄被設(shè)置這個(gè)權(quán)限后,任何用戶在此目錄下創(chuàng)建的文件都具有和該目錄所屬的組相同的組。

sticky bit:可以理解為防刪除位。文件是否可以被某用戶刪除,主要取決于該文件所在的目錄是否對(duì)該用戶具有寫權(quán)限。如果沒有寫權(quán)限,則這個(gè)目錄下的所有文件都不能刪除,同時(shí)也不能添加新的文件。如果希望用戶能夠添加文件但不能刪除該目錄下其他用戶的文件,則可以對(duì)父目錄增加該權(quán)限。設(shè)置該權(quán)限后,就算用戶對(duì)目錄具有寫權(quán)限,也不能刪除其他用戶的文件。

例如,passwd命令設(shè)置了set uid權(quán)限,而/tmp/目錄則設(shè)置了sticky bit權(quán)限。下面我們來看看它們的權(quán)限,示例命令如下:

# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root 27832 5月  11 2019 /usr/bin/passwd
# ls -ld /tmp/
drwxrwxrwt. 21 root 4096 12月 30
07:43 /tmp/

可以發(fā)現(xiàn),passwd顯示的是rws而非傳統(tǒng)的rwx,用數(shù)字表示為4755。/tmp/顯示的rwt而非rwx,用數(shù)字表示為1777。那么,這個(gè)4和1是如何計(jì)算出來的呢?當(dāng)有特殊權(quán)限時(shí),第一位數(shù)字可以是0、1(--t)、2(-s-)、3(-st)、4(s--)、5(s-t)、6(ss-)或7(sst)。再回過頭來看passwd,它是s--,所以是4;而/tmp/是--t,所以是1。

配置這些特殊權(quán)限的方法和之前一樣。比如,我想給一個(gè)文件增加set uid權(quán)限,那么命令為chmod u+s filename,而去掉這個(gè)權(quán)限的命令則為chmod u-s filename。同理,想設(shè)置set gid權(quán)限的命令為chmod g+s dirname,設(shè)置sticky bit權(quán)限的命令為chmod o+t dirname。

有時(shí)候,你可能會(huì)發(fā)現(xiàn)set_uid上的權(quán)限為大寫的S,而不是小寫的s,比如rwS,這是因?yàn)樵撐募]有x權(quán)限所致,不管是大寫的S還是小寫的s,都表示它存在set_uid或者set_gid權(quán)限,同理sticky bit也一樣。

5.7在Linux下搜索文件

在Windows下有一個(gè)搜索工具,可以讓我們很快找到文件,這很有用。然而在Linux下,搜索功能更加強(qiáng)大。

5.7.1用which命令查找可執(zhí)行文件的絕對(duì)路徑

前面已經(jīng)用過which命令,但需要注意的是,which只能用來查找PATH環(huán)境變量中出現(xiàn)的路徑下的可執(zhí)行文件。這個(gè)命令比較常用,有時(shí)我們不知道某個(gè)命令的絕對(duì)路徑,用which查找就很容易知道了。例如,查找vi和cat的絕對(duì)路徑,示例命令如下:

# which vi
/usr/bin/vi
# which cat
/usr/bin/cat

5.7.2用whereis命令查找文件

whereis命令通過預(yù)先生成的一個(gè)文件列表庫查找與給出的文件名相關(guān)的文件,其格式為whereis [-bms][文件名稱],其中各選項(xiàng)的含義如下所示。

-b:只查找二進(jìn)制文件。

-m:只查找?guī)椭募ㄔ趍an目錄下的文件)。

-s:只查找源代碼文件。

例如,用whereis查看ls的示例命令如下:

# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

可以看到,這里找到了2個(gè)文件。這個(gè)命令類似于模糊查找,只要文件名包含“l(fā)s”字符,就會(huì)列出來。此外,whereis命令阿銘很少用到。

5.7.3用locate命令查找文件

locate命令類似于whereis,也是通過查找預(yù)先生成的文件列表庫來告訴用戶要查找的文件在哪里,后面直接跟文件名。如果你的Linux沒有這個(gè)命令,請(qǐng)安裝mlocate軟件包,安裝命令如下:

# yum install -y mlocate
# locate passwd
locate: 無法執(zhí)行 stat ()
`/var/lib/mlocate/mlocate.db': 沒有那個(gè)文件或目錄

安裝好mlocate軟件包后,初次運(yùn)行l(wèi)ocate命令會(huì)報(bào)錯(cuò),這是因?yàn)橄到y(tǒng)還沒有生成那個(gè)文件列表庫??梢允褂胾pdatedb命令立即生成(或更新)這個(gè)庫。如果你的服務(wù)器上正執(zhí)行著重要的業(yè)務(wù),那么最好不要去運(yùn)行這個(gè)命令,因?yàn)橐坏┻\(yùn)行,服務(wù)器的壓力會(huì)增大。默認(rèn)情況下,這個(gè)數(shù)據(jù)庫每周更新一次。如果使用locate命令搜索一個(gè)文件,而該文件正好是在兩次更新時(shí)間段內(nèi)創(chuàng)建的,那肯定得不到結(jié)果。我們可以到文件/etc/updated.conf中配置這個(gè)數(shù)據(jù)庫生成(或更新)的規(guī)則。

locate所搜索到的文件列表,不管是目錄名還是文件名,只要包含我們要搜索的關(guān)鍵詞,都會(huì)列出來,所以locate不適合精準(zhǔn)搜索。這個(gè)命令阿銘也不常用。

5.7.4使用find搜索文件

find這個(gè)搜索工具是阿銘用得最多的一個(gè),請(qǐng)務(wù)必熟記,其格式為:find [路徑] [參數(shù)]。下面介紹阿銘常用的幾個(gè)參數(shù)。

-atime +n/-n:表示訪問或執(zhí)行時(shí)間大于或小于n天的文件。

-ctime +n/-n:表示寫入、更改inode屬性(如更改所有者、權(quán)限或者鏈接)的時(shí)間大于或小于n天的文件。

-mtime +n/-n:表示寫入時(shí)間大于或小于n天的文件,該參數(shù)用得最多。

下面我們先來做個(gè)簡(jiǎn)單的試驗(yàn),示例命令如下:

# find /tmp/4_6/ -mtime -1
/tmp/4_6/
/tmp/4_6/test1
/tmp/4_6/dir2
/tmp/4_6/dir2/test2
/tmp/4_6/dir2/test5
/tmp/4_6/dir2/test6
/tmp/4_6/dir2/test7
/tmp/4_6/dir3
/tmp/4_6/dir3/test3
/tmp/4_6/dir4
/tmp/4_6/test4
/tmp/4_6/test5

上例中,-mtime -1表示,mtime在1天之內(nèi)的文件,單位是天。而-mtime +10表示mtime在10天以上的文件。還有一種用法-mmin -10,表示mtime在10分鐘內(nèi)的文件。有時(shí)候,也可以不加+或者-,比如-mtime 10,這表示正好為10天,這種用法就少了。

看到這里,你可能不太理解這三個(gè)time屬性,那阿銘就先介紹一下它們。文件的access time(即atime)是在讀取文件或者執(zhí)行文件時(shí)更改的。文件的modified time(即mtime)是在寫入文件時(shí)隨文件內(nèi)容的更改而更改的。文件的change time(即ctime)是在寫入文件、更改所有者、權(quán)限或鏈接設(shè)置時(shí)隨inode內(nèi)容的更改而更改的。

其中,inode(索引節(jié)點(diǎn))用來存放檔案及目錄的基本信息,包含時(shí)間信息、文檔名、所有者以及所屬組等。inode是Unix操作系統(tǒng)中的一種數(shù)據(jù)結(jié)構(gòu),其本質(zhì)是結(jié)構(gòu)體,在文件系統(tǒng)創(chuàng)建時(shí)生成,且個(gè)數(shù)有限。在Linux下,可以通過命令df -i來查看各個(gè)分區(qū)的inode總數(shù)以及使用情況。

因此,更改文件的內(nèi)容即會(huì)更改mtime和ctime,但是文件的ctime可能會(huì)在mtime未發(fā)生任何變化時(shí)更改。例如,更改了文件的權(quán)限,但是文件內(nèi)容沒有變化,那么,如何獲得一個(gè)文件的atime、mtime以及ctime呢?stat命令可用來列出文件的atime、ctime和mtime,示例命令如下:

# stat dir2/test2
文件:"dir2/test2"
大?。?               塊:0          IO 塊:4096   普通空文件
設(shè)備:803h/2051d        Inode:25689396    硬鏈接:1
權(quán)限:(0644/-rw-r--r--)  Uid:(    0/    root)  Gid:( 1000/testgroup)
最近訪問:2019-12-30 0710.706789647 -0500
最近更改:2019-12-30 0710.706789647 -0500
最近改動(dòng):2019-12-30 0737.978885268 -0500
創(chuàng)建時(shí)間:-

atime不一定在訪問文件之后被修改,因?yàn)樵谑褂胑xt3文件系統(tǒng)時(shí),如果mount使用了noatime參數(shù),那么就不會(huì)更新atime的信息??傊?,這三個(gè)time屬性值都放在了inode中。若mtime、atime被修改,那么inode就一定會(huì)改,既然inode改了,那ctime也跟著要改了。

下面阿銘繼續(xù)介紹find的常用選項(xiàng)。

-name filename:表示直接查找該文件名的文件,這個(gè)選項(xiàng)比較常用,示例命令如下:

# find . -name test2  //.表示當(dāng)前目錄,當(dāng)前目錄在/tmp/4_6下面
./dir2/test2
# find . -name "test*" //支持用*通配
./test1
./dir2/test2
./dir2/test5
./dir2/test6
./dir2/test7
./dir3/test3
./test4
./test5

-type filetype:表示通過文件類型查找文件。文件類型在前面已經(jīng)簡(jiǎn)單介紹過,相信你已經(jīng)基本了解了。filetype包含了f、b、c、d、l、s等類型,示例命令如下:

# find . -type d
.
./dir2
./dir3
./dir4

5.8Linux文件系統(tǒng)簡(jiǎn)介

Windows系統(tǒng)格式化硬盤時(shí),會(huì)指定格式FAT或者NTFS,而Linux的文件系統(tǒng)格式為ext3、ext4或者xfs。早期的Linux使用ext2格式,CentOS 5默認(rèn)使用ext3,CentOS 6默認(rèn)使用ext4,而CentOS 7和RHEL8/Rocky8默認(rèn)使用xfs格式。ext2文件系統(tǒng)雖然高效、穩(wěn)定,但隨著Linux系統(tǒng)在關(guān)鍵業(yè)務(wù)中的應(yīng)用,Linux文件系統(tǒng)的弱點(diǎn)也逐漸顯露出來。因?yàn)閑xt2文件系統(tǒng)不是日志文件系統(tǒng),這在關(guān)鍵行業(yè)是一個(gè)致命的弱點(diǎn)。

ext3文件系統(tǒng)是直接從ext2文件系統(tǒng)發(fā)展而來的,它帶有日志功能,可以跟蹤記錄文件系統(tǒng)的變化,并將變化內(nèi)容寫入日志。寫操作首先是對(duì)日志記錄文件進(jìn)行操作,若整個(gè)寫操作由于某種原因(如系統(tǒng)掉電)而中斷,當(dāng)系統(tǒng)重啟時(shí),會(huì)根據(jù)日志記錄來恢復(fù)中斷前的寫操作,而且這個(gè)過程費(fèi)時(shí)極短。目前,ext3文件系統(tǒng)已經(jīng)非常穩(wěn)定、可靠,它完全兼容ext2文件系統(tǒng),用戶可以平滑地過渡到一個(gè)日志功能健全的文件系統(tǒng)。這實(shí)際上也是ext3日志文件系統(tǒng)設(shè)計(jì)的初衷。

而ext4文件系統(tǒng),較ext3文件系統(tǒng)又有很多好的特性,其中最明顯的特征是ext4支持的最大文件系統(tǒng)容量和單個(gè)最大文件大小比ext3大了許多,二者之間的詳細(xì)區(qū)別阿銘不再介紹。雖然ext4支持的單個(gè)文件大小已經(jīng)達(dá)到了16TB,最大文件支持到40多億,但依然還是有瓶頸的,xfs支持的量級(jí)要比ext4大得多。CentOS 7默認(rèn)采用xfs也是必然的,還有一個(gè)原因,xfs的開發(fā)者目前受雇于Red Hat公司,ext4的開發(fā)者受雇于Google公司。

Linux文件系統(tǒng)在Windows中是不能識(shí)別的,但在Linux系統(tǒng)中可以掛載Windows文件系統(tǒng)。Linux目前支持MS-DOS、VFAT、FAT、BSD等格式,如果你使用的是RHEL或者Rocky,那么請(qǐng)不要妄圖掛載NTFS格式的分區(qū)到Linux下,因?yàn)樗恢С諲TFS。當(dāng)有這方面的需求時(shí),我們可以通過安裝ntfs-3g軟件包來解決這個(gè)問題。

除了ext3/ext4文件系統(tǒng)外,有些Linux發(fā)行版(如SUSE)默認(rèn)的文件系統(tǒng)為ReiserFS,它在處理小于1KB的文件時(shí)的速度是ext文件系統(tǒng)的10倍。另外,ReiserFS空間浪費(fèi)較少,它不會(huì)為一些小文件分配inode,而是打包存放在同一個(gè)磁盤塊中。而ext是把它們單獨(dú)存放在不同的塊上。例如,塊大小為4KB,那么兩個(gè)100字節(jié)的文件會(huì)占用兩個(gè)塊,ReiserFS則只占用一個(gè)塊。當(dāng)然,ReiserFS也有缺點(diǎn),就是每升級(jí)一個(gè)版本,都要將磁盤重新格式化一次。

5.9Linux文件類型

前面我們簡(jiǎn)單介紹了普通文件-、目錄d等文件類型,為了加深理解,阿銘將詳細(xì)介紹Linux的文件類型。

5.9.1常見文件類型

在Linux文件系統(tǒng)中,主要有以下幾種類型的文件。

普通文件(regular file):即一般類型的文件,當(dāng)用命令ls -l查看某個(gè)目錄時(shí),第一個(gè)屬性為“-”的文件就是普通文件。它又可分成純文本文件(ASCII)和二進(jìn)制文件(binary)。純文本文件可以通過cat、more、less等工具直接查看內(nèi)容,而二進(jìn)制文件不能。例如,我們用的命令/usr/bin/ls就是一個(gè)二進(jìn)制文件。

目錄(directory):它與Windows下的文件夾類似,只不過在Linux中我們不將其稱為“文件夾”,而稱為“目錄”。用命令ls -l查看的第一個(gè)屬性值為d的文件就是目錄。

鏈接文件(link file):用命令ls -l查看的第一個(gè)屬性為l的文件就是鏈接文件,它類似于Windows下的快捷方式。這種文件在Linux中很常見,阿銘在日常系統(tǒng)運(yùn)維工作中經(jīng)常用到,所以你要特別留意一下這類文件。

設(shè)備(device):即與系統(tǒng)周邊相關(guān)的一些文件,通常都集中在/dev目錄下。這種文件一般分為兩種,一種是塊(block)設(shè)備,就是一些存儲(chǔ)數(shù)據(jù),以提供系統(tǒng)存取的接口設(shè)備,簡(jiǎn)稱硬盤。例如,第一塊硬盤是/dev/sda1,用命令ls-l查看的第一個(gè)屬性值為b的文件就是塊設(shè)備。另一種是字符(character)設(shè)備,是一些串行端口的接口設(shè)備,例如鍵盤、鼠標(biāo)等,用命令ls-l查看的第一個(gè)屬性為c的文件就是字符設(shè)備。

5.9.2Linux文件后綴名

對(duì)于“后綴名”這個(gè)概念,相信你并不陌生。在Linux系統(tǒng)中,文件的后綴名沒有具體意義,加或者不加都無所謂。但是為了便于區(qū)分,我們習(xí)慣在定義文件名時(shí)加一個(gè)后綴名。這樣當(dāng)用戶看到這個(gè)文件名時(shí),就會(huì)很快知道它到底是一個(gè)什么文件,例如1.sh、2.tar.gz、my.cnf、test.zip等。

如果你首次接觸這些文件,也許會(huì)很疑惑,但沒關(guān)系,深入學(xué)習(xí)之后,你就會(huì)逐漸了解這些文件。阿銘所列舉的幾個(gè)文件名中,1.sh代表它是一個(gè)shell腳本,2.tar.gz代表它是一個(gè)壓縮包,my.cnf代表它是一個(gè)配置文件,test.zip代表它是一個(gè)壓縮文件。

另外需要知道,早期的UNIX系統(tǒng)文件名最多允許14個(gè)字符,而新的UNIX或者Linux系統(tǒng)中,文件名最長(zhǎng)可達(dá)255個(gè)字符。

5.9.3Linux的鏈接文件

前面阿銘多次提到了“鏈接文件”這個(gè)概念,它分為硬鏈接(hard link)和軟鏈接(symbolic link)兩種。兩種鏈接的本質(zhì)區(qū)別在于inode。下面阿銘就來介紹一下這兩種鏈接文件。

硬鏈接:當(dāng)系統(tǒng)要讀取一個(gè)文件時(shí),會(huì)先讀inode信息,然后再根據(jù)inode中的信息到塊區(qū)域?qū)?shù)據(jù)取出來。而硬鏈接是直接再建立一個(gè)inode鏈接到文件放置的塊區(qū)域,即進(jìn)行硬鏈接時(shí)該文件內(nèi)容沒有任何變化,只是增加了一個(gè)指向這個(gè)文件的inode,并不會(huì)額外占用磁盤空間。硬鏈接有兩個(gè)限制:(1)不能跨文件系統(tǒng),因?yàn)椴煌奈募到y(tǒng)有不同的inode table;(2)不能鏈接目錄。

軟鏈接:與硬鏈接不同,軟鏈接是建立一個(gè)獨(dú)立的文件,當(dāng)讀取這個(gè)鏈接文件時(shí),它會(huì)把讀取的行為轉(zhuǎn)發(fā)到該文件所鏈接的文件上。例如,現(xiàn)在有一個(gè)文件a,我們做了一個(gè)軟鏈接文件b(只是一個(gè)鏈接文件,非常小),b指向了a。當(dāng)讀取b時(shí),b就會(huì)把讀取的動(dòng)作轉(zhuǎn)發(fā)到a上,這樣就讀取了文件a。當(dāng)我們刪除文件a時(shí),鏈接文件b不會(huì)被刪除;但如果再次讀取b時(shí),會(huì)提示無法打開文件。然而,當(dāng)我們刪除b時(shí),a是不會(huì)有任何影響的。

由此看來,似乎硬鏈接比較安全,因?yàn)閯h除任何一個(gè)硬鏈接文件,還會(huì)有其他文件指向那個(gè)inode,既然inode存在,那文件的數(shù)據(jù)塊也就存在。但由于硬鏈接的限制太多了(包括無法做目錄的鏈接),所以用途上比較受限,而軟鏈接的使用方向較廣。那么,如何建立軟鏈接和硬鏈接呢?這就用到了下面我們要介紹的ln(link)命令。

ln命令的格式為:ln [-s][來源文件] [目的文件],該命令常用的選項(xiàng)是-s。如果不加-s選項(xiàng)就是建立硬鏈接,加上-s選項(xiàng)就建立軟鏈接。示例命令如下:

# mkdir /tmp/4_9
# cd /tmp/4_9
# cp /etc/passwd ./
# ll
總用量 4
-rw-r--r-- 1 root 1121 12月 30
08:03 passwd
# du -sk //du命令用來計(jì)算文件或者目錄的大小,-k表示以KB為單位,這里的4,就是4KB
4 .
# ln passwd passwd-hard
# ll
總用量 8
-rw-r--r-- 2 root 1121 12月 30
08:03 passwd
-rw-r--r-- 2 root 1121 12月 30
08:03 passwd-hard
# du -sk
4 .

這里的ll命令等同于ls -l,請(qǐng)使用which命令查看一下。一開始目錄下面只有一個(gè)passwd文件,目錄總大小為4KB,做了硬鏈接后,雖然兩個(gè)文件的大小都為1121B,但目錄的總大小并沒有變化。我們不妨先刪除源文件,然后再來比較一下,示例命令如下:

# rm -f passwd
# ll
總用量 4
-rw-r--r-- 1 root 1121 12月 30
08:03 passwd-hard
# du -sk
4 .

上例中,刪除源文件passwd后,文件大小依舊不變。這說明硬鏈接文件并不會(huì)復(fù)制數(shù)據(jù)塊,額外占用磁盤空間。再來看硬鏈接的另外一個(gè)限制——不允許目錄做硬鏈接,示例命令如下:

# mkdir 123
# ln 123 456
ln: "123": 不允許將硬鏈接指向目錄

下面我們?cè)賮砜纯窜涙溄拥囊恍┨匦?。首先建立一個(gè)測(cè)試目錄456,然后復(fù)制/etc/passwd文件來做測(cè)試,再給它做一個(gè)軟鏈接文件,示例命令如下:

# mkdir 456
# cd 456
# cp /etc/passwd ./
# ln -s passwd passwd-soft
# ll
總用量 4
-rw-r--r-- 1 root 1121 12月 30
08:05 passwd
lrwxrwxrwx 1 root 6 12月 30 08:05 passwd-soft -> passwd
# head -n1 passwd-soft
root0root:/root:/bin/bash
# head -n1 passwd
root0root:/root:/bin/bash
# rm -f passwd
# head -n1 passwd-soft
head:無法打開"passwd-soft"讀取數(shù)據(jù):沒有那個(gè)文件或目錄
# ll
總用量 0
lrwxrwxrwx 1 root 6 12月 30
08:05 passwd-soft -> passwd

上例中,如果刪除源文件,則不能讀取軟鏈接文件,而且使用命令ll查看,發(fā)現(xiàn)顏色也有所變化。另外,目錄不可以做硬鏈接,但可以做軟鏈接,示例命令如下:

# cd ..
# In 456 789
In: "456": 不允許將硬鏈接指向目錄
# ln -s 456 789
# ls -ld 456 789
drwxrwxr-x 2 root 25 12月 30
08:06 456
lrwxrwxrwx1root312月3008:07789->45
審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 硬盤
    +關(guān)注

    關(guān)注

    3

    文章

    1269

    瀏覽量

    56978
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207892
  • WINDOWS
    +關(guān)注

    關(guān)注

    3

    文章

    3503

    瀏覽量

    87877
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    551

    瀏覽量

    24559

原文標(biāo)題:第5章 Linux文件和目錄管理(下)

文章出處:【微信號(hào):aming_linux,微信公眾號(hào):阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux操作系統(tǒng)下常見文件類型分析

    Linux操作系統(tǒng)下常見文件類型分析,壓縮和打包文件,普通文件格式,系統(tǒng)文件
    發(fā)表于 01-06 17:00 ?960次閱讀

    嵌入式Linux入門(二、Linux文件系統(tǒng)、文件類型及權(quán)限管理)

    嵌入式 Linux入 門第二課, linux 文件系統(tǒng)、文件類型及權(quán)限管理。 ...... 矜辰所致
    的頭像 發(fā)表于 06-20 11:44 ?1848次閱讀
    嵌入式<b class='flag-5'>Linux</b>入門(二、<b class='flag-5'>Linux</b><b class='flag-5'>文件</b>系統(tǒng)、<b class='flag-5'>文件類型</b>及權(quán)限管理)

    詳解Linux文件類型

    普通文件類型Linux中最多的一種文件類型, 包括 純文本文件(ASCII);二進(jìn)制文件(binary);數(shù)據(jù)格式的
    發(fā)表于 07-17 07:32

    linux文件類型

    1.1 文件類型linux系統(tǒng)的兩大核心思想:一為linux系統(tǒng)下一切皆為文件,二為所有文件都具備各自的特性和
    發(fā)表于 03-04 17:50

    Linux中主要的文件類型分為哪幾種

    嵌入式Linux應(yīng)用程序開發(fā)標(biāo)準(zhǔn)教程(第2版)課后習(xí)題個(gè)人答案第一章5.Linux中的文件有哪些類,這樣分類有什么好處?答:Linux中主要的文件類
    發(fā)表于 11-04 08:41

    Linux總共有哪幾種文件類型

    一、前言Linux系統(tǒng)不同于Wndows系統(tǒng),在Linux系統(tǒng)下,“一切皆文件”。而關(guān)于文件Linux總共有七種
    發(fā)表于 12-15 07:12

    Linux快速入門之文件類型文件屬性

    《嵌入式Linux應(yīng)用程序開發(fā)詳解》第一章 Linux 快速入門1.3.1 文件類型文件屬性1.文件類型1)普通
    發(fā)表于 12-17 07:58

    C#教程之獲取文件類型

    C#教程之獲取文件類型,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 09:59 ?4次下載

    Linux文件文件系統(tǒng)分析

    1.3 Linux文件文件系統(tǒng) 在安裝完Linux之后,下面先對(duì)Linux中一些非常重要的概念做一些
    發(fā)表于 10-18 14:24 ?0次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>文件</b>及<b class='flag-5'>文件</b>系統(tǒng)分析

    詳解嵌入式linux文件類型

    學(xué)習(xí)嵌入式linux系統(tǒng)開發(fā),對(duì)于linux文件類型需要有很深的理解。Linux文件類型常見的有普通
    發(fā)表于 06-11 16:29 ?960次閱讀
    詳解嵌入式<b class='flag-5'>linux</b><b class='flag-5'>文件類型</b>

    學(xué)習(xí)嵌入式linux系統(tǒng)開發(fā),文件類型一定要分清

    學(xué)習(xí)嵌入式linux系統(tǒng)開發(fā),對(duì)于linux文件類型需要有很深的理解。Linux文件類型常見的有普通
    發(fā)表于 07-05 07:01 ?814次閱讀

    嵌入式linux系統(tǒng)開發(fā)幾大文件類型

      同學(xué)們學(xué)習(xí)嵌入式linux系統(tǒng)開發(fā)的熱情日益旺盛,而對(duì)于linux文件類型需要有很深的理解。Linux文件類型有很多,常見的有普通
    發(fā)表于 08-06 16:28 ?306次閱讀

    嵌入式linux系統(tǒng)開發(fā)文件類型

      隨著計(jì)算機(jī)嵌入式系統(tǒng)開發(fā)的不斷普及,越來越多的人開始學(xué)習(xí)計(jì)算機(jī)嵌入式系統(tǒng)開發(fā),學(xué)習(xí)嵌入式linux系統(tǒng)開發(fā),對(duì)于linux文件類型需要有很深的理解。Linux
    發(fā)表于 08-27 11:31 ?373次閱讀

    Linux中有哪些常見的文件類型?

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux中有哪些常見的文件類型?
    發(fā)表于 10-12 18:02 ?0次下載

    你知道嵌入式linux文件類型?

    學(xué)習(xí)嵌入式linux系統(tǒng)開發(fā),對(duì)于linux文件類型需要有很深的理解。Linux文件類型常見的有普通文件
    發(fā)表于 05-04 17:09 ?694次閱讀
    你知道嵌入式<b class='flag-5'>linux</b><b class='flag-5'>文件類型</b>?