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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux的文件類型介紹

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

5.6更改文件的權限

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

5.6.1命令chgrp

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

# groupadd testgroup
# mkdir /tmp/4_6 //創(chuàng)建實驗用的目錄
# 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命令,其含義為增加一個用戶組。

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命令只更改了目錄本身,而目錄下的文件并沒有更改。如果要想級聯(lián)更改子目錄以及子文件,加-R選項可以實現(xiàn),示例命令如下:

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

chgrp命令阿銘不常用,因為還有一個命令可以替代它,那就是chown。

5.6.2命令chown

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

# mkdir dir3
# useradd user1 // 創(chuàng)建用戶user1,useradd命令會在5.2.3節(jié)中介紹
# touch dir3/test3 // 在dir3目錄下創(chuàng)建test3文件
# chown user1 dir3
# ls -ld dir3 // dir3目錄所有者已經由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會把test目錄以及該目錄下的文件都修改成所有者為user1,所屬組為testgroup。

5.6.3命令chmod

為了方便更改文件的權限,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的簡寫)用于改變用戶對文件/目錄的讀寫執(zhí)行權限,其格式為:chmod [-R] xyz文件名(這里的xyz表示數(shù)字)。其中,-R選項的作用等同于chown命令的-R選項,也表示級聯(lián)更改。值得注意的是,在Linux系統(tǒng)中,一個目錄的默認權限為755,而一個文件的默認權限為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)建了一個目錄,但又不想讓其他人看到該目錄的內容,則只需設置成rwxr-----(740)即可。

chmod還支持使用rwx的方式來設置權限。從之前的介紹中可以發(fā)現(xiàn),基本上就9個屬性。我們可以使用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的文件權限修改為rwxr-xr-x。此外,我們還可以針對u、g、o和a,增加或者減少它們的某個權限(讀、寫或執(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

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

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

# umask
0022

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

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

若用戶建立目錄,則預設所有權限均開放,即777(drwxrwxrwx)。

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

目錄的權限為rwxrwxrwx - ----w--- = rwxr-xr-x

普通文件的權限為rw-rw-rw- -----w--- = rw-r--r--

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

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

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

示例命令如下:

# 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)建的目錄的默認權限變?yōu)?75,而文件的默認權限變?yōu)?64。如果要把umask改回來,具體操作方法如下:

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

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

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

5.6.5修改文件的特殊屬性

1.命令chattr

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

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

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

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

c:增加該屬性后,表示自動壓縮該文件,讀取時會自動解壓。

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

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

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

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

下面再來看看a權限的作用,示例命令如下:

# 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權限后,只可以在里面創(chuàng)建文件,而不能刪除文件。

文件同樣適用以上權限,示例命令如下:

# 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: 權限不夠
# echo '11111' > dir2/test6
-bash: dir2/test6: 權限不夠
# rm -f dir2/test6
rm: 無法刪除"dir2/test6":權限不夠

2.命令lsattr

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

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

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

這個命令的用法和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

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

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

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

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

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

# 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。那么,這個4和1是如何計算出來的呢?當有特殊權限時,第一位數(shù)字可以是0、1(--t)、2(-s-)、3(-st)、4(s--)、5(s-t)、6(ss-)或7(sst)。再回過頭來看passwd,它是s--,所以是4;而/tmp/是--t,所以是1。

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

有時候,你可能會發(fā)現(xiàn)set_uid上的權限為大寫的S,而不是小寫的s,比如rwS,這是因為該文件沒有x權限所致,不管是大寫的S還是小寫的s,都表示它存在set_uid或者set_gid權限,同理sticky bit也一樣。

5.7在Linux下搜索文件

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

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

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

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

5.7.2用whereis命令查找文件

whereis命令通過預先生成的一個文件列表庫查找與給出的文件名相關的文件,其格式為whereis [-bms][文件名稱],其中各選項的含義如下所示。

-b:只查找二進制文件。

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

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

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

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

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

5.7.3用locate命令查找文件

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

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

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

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

5.7.4使用find搜索文件

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

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

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

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

下面我們先來做個簡單的試驗,示例命令如下:

# 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天之內的文件,單位是天。而-mtime +10表示mtime在10天以上的文件。還有一種用法-mmin -10,表示mtime在10分鐘內的文件。有時候,也可以不加+或者-,比如-mtime 10,這表示正好為10天,這種用法就少了。

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

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

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

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

atime不一定在訪問文件之后被修改,因為在使用ext3文件系統(tǒng)時,如果mount使用了noatime參數(shù),那么就不會更新atime的信息。總之,這三個time屬性值都放在了inode中。若mtime、atime被修改,那么inode就一定會改,既然inode改了,那ctime也跟著要改了。

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

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

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

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

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

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

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

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

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

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

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

5.9Linux文件類型

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

5.9.1常見文件類型

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

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

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

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

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

5.9.2Linux文件后綴名

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

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

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

5.9.3Linux的鏈接文件

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

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

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

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

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

# 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命令用來計算文件或者目錄的大小,-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,請使用which命令查看一下。一開始目錄下面只有一個passwd文件,目錄總大小為4KB,做了硬鏈接后,雖然兩個文件的大小都為1121B,但目錄的總大小并沒有變化。我們不妨先刪除源文件,然后再來比較一下,示例命令如下:

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

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

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

下面我們再來看看軟鏈接的一些特性。首先建立一個測試目錄456,然后復制/etc/passwd文件來做測試,再給它做一個軟鏈接文件,示例命令如下:

# 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ù)據:沒有那個文件或目錄
# 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
審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 硬盤
    +關注

    關注

    3

    文章

    1276

    瀏覽量

    57160
  • Linux
    +關注

    關注

    87

    文章

    11161

    瀏覽量

    208459
  • WINDOWS
    +關注

    關注

    3

    文章

    3509

    瀏覽量

    88199
  • 文件
    +關注

    關注

    1

    文章

    555

    瀏覽量

    24633

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

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

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

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

    詳解Linux文件類型

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

    linux文件類型

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

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

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

    Linux總共有哪幾種文件類型

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

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

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

    C#教程之獲取文件類型

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

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

    1.3 Linux文件文件系統(tǒng) 在安裝完Linux之后,下面先對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文件類型

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

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

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

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

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

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

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

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

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

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

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