溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

uhe理解Linux系統(tǒng)中的文件名和文件種類以及文件權(quán)限

發(fā)布時(shí)間:2021-09-26 16:44:59 來源:億速云 閱讀:116 作者:iii 欄目:系統(tǒng)運(yùn)維

本篇內(nèi)容主要講解“uhe理解Linux系統(tǒng)中的文件名和文件種類以及文件權(quán)限”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“uhe理解Linux系統(tǒng)中的文件名和文件種類以及文件權(quán)限”吧!

Linux文件種類與副文件名

一直強(qiáng)調(diào)一個(gè)概念,那就是:任何裝置在Linux底下都是文件, 不僅如此,連資料溝通的介面也有專屬的文件在負(fù)責(zé)~所以,你會(huì)瞭解到,Linux的文件種類真的很多~ 除了前面提到的一般文件(-)與目錄文件(d)之外,還有哪些種類的文件呢?

    * 文件種類:

我們在剛剛提到使用‘ls -l’觀察到第一欄那十個(gè)字元中,第一個(gè)字元為文件的類型。 除了常見的一般文件(-)與目錄文件(d)之外,還有哪些種類的文件類型呢?

    * 正規(guī)文件(regular file ):
      就是一般我們在進(jìn)行存取的類型的文件,在由 ls -al 所顯示出來的屬性方面,第一個(gè)字元為 [ - ],例如 [-rwxrwxrwx ]。另外,依照文件的內(nèi)容,又大略可以分為:

          o 純文字文件(ASCII):這是Linux系統(tǒng)中最多的一種文件類型啰, 稱為純文字文件是因?yàn)閮?nèi)容為我們?nèi)祟惪梢灾苯幼x到的資料,例如數(shù)字、字母等等。 幾乎只要我們可以用來做為設(shè)定的文件都屬于這一種文件類型。 舉例來說,你可以下達(dá)‘ cat ~/.bashrc ’就可以看到該文件的內(nèi)容。 (cat 是將一個(gè)文件內(nèi)容讀出來的指令)

          o 二進(jìn)位文件(binary):還記得我們在‘ 第零章、計(jì)算機(jī)概論 ’里面的軟體程式的運(yùn)作中提過, 我們的系統(tǒng)其實(shí)僅認(rèn)識且可以執(zhí)行二進(jìn)位文件(binary file)吧?沒錯(cuò)~ 你的Linux當(dāng)中的可執(zhí)行文件(scripts, 文字型批次文件不算)就是這種格式的啦~ 舉例來說,剛剛下達(dá)的指令cat就是一個(gè)binary file。

          o 資料格式文件(data): 有些程式在運(yùn)作的過程當(dāng)中會(huì)讀取某些特定格式的文件,那些特定格式的文件可以被稱為資料文件 (data file)。舉例來說,我們的Linux在使用者登入時(shí),都會(huì)將登錄的資料記錄在 /var/log/wtmp那個(gè)文件內(nèi),該文件是一個(gè)data file,他能夠透過last這個(gè)指令讀出來! 但是使用cat時(shí),會(huì)讀出亂碼~因?yàn)樗菍儆谝环N特殊格式的文件。瞭乎?

    * 目錄(directory):
      就是目錄啰~第一個(gè)屬性為 [ d ],例如 [drwxrwxrwx]。

    * 連結(jié)文件(link):
      就是類似Windows系統(tǒng)底下的捷徑啦! 第一個(gè)屬性為 [ l ](英文L的小寫),例如 [lrwxrwxrwx] ;

    * 設(shè)備與裝置文件(device):
      與系統(tǒng)周邊及儲(chǔ)存等相關(guān)的一些文件, 通常都集中在/dev這個(gè)目錄之下!通常又分為兩種:

          o 區(qū)塊(block)設(shè)備文件 :就是一些儲(chǔ)存資料, 以提供系統(tǒng)隨機(jī)存取的周邊設(shè)備,舉例來說,硬碟與軟碟等就是啦! 你可以隨機(jī)的在硬碟的不同區(qū)塊讀寫,這種裝置就是區(qū)塊裝置啰!你可以自行查一下/dev/sda看看, 會(huì)發(fā)現(xiàn)第一個(gè)屬性為[ b ]喔!

          o 字元(character)設(shè)備文件:亦即是一些序列埠的周邊設(shè)備, 例如鍵盤、滑鼠等等!這些設(shè)備的特色就是‘一次性讀取’的,不能夠截?cái)噍敵觥?舉例來說,你不可能讓滑鼠‘跳到’另一個(gè)畫面,而是‘滑動(dòng)’到另一個(gè)地方??!第一個(gè)屬性為 [ c ]。

    * 資料接口文件(sockets):
      既然被稱為資料接口文件, 想當(dāng)然爾,這種類型的文件通常被用在網(wǎng)路上的資料承接了。我們可以啟動(dòng)一個(gè)程式來監(jiān)聽用戶端的要求, 而用戶端就可以透過這個(gè)socket來進(jìn)行資料的溝通了。第一個(gè)屬性為 [ s ], 最常在/var/run這個(gè)目錄中看到這種文件類型了。

    * 資料輸送文件(FIFO, pipe):
      FIFO也是一種特殊的文件類型,他主要的目的在解決多個(gè)程序同時(shí)存取一個(gè)文件所造成的錯(cuò)誤問題。 FIFO是first-in-first-out的縮寫。第一個(gè)屬性為[p] 。

除了設(shè)備文件是我們系統(tǒng)中很重要的文件,最好不要隨意修改之外(通常他也不會(huì)讓你修改的啦!), 另一個(gè)比較有趣的文件就是連結(jié)文件。如果你常常將應(yīng)用程式捉到桌面來的話,你就應(yīng)該知道在 Windows底下有所謂的‘捷徑’。同樣的,你可以將 linux下的連結(jié)文件簡單的視為一個(gè)文件或目錄的捷徑。 至于socket與FIFO文件比較難理解,因?yàn)檫@兩個(gè)咚咚與程序(process)比較有關(guān)系, 這個(gè)等到未來你瞭解process之后,再回來查閱吧!此外, 你也可以透過man fifo及man socket來查閱系統(tǒng)上的說明!

    * Linux文件副文件名:

基本上,Linux的文件是沒有所謂的‘副文件名’的,我們剛剛就談過,一個(gè)Linux文件能不能被執(zhí)行,與他的第一欄的十個(gè)屬性有關(guān), 與文件名根本一點(diǎn)關(guān)系也沒有。這個(gè)觀念跟Windows的情況不相同喔!在Windows底下, 能被執(zhí)行的文件副文件名通常是 .com .exe .bat等等,而在Linux底下,只要你的權(quán)限當(dāng)中具有x的話,例如[ -rwx-r-xr-x ] 即代表這個(gè)文件可以被執(zhí)行喔!

不過,可以被執(zhí)行跟可以執(zhí)行成功是不一樣的~舉例來說,在root家目錄下的install.log 是一個(gè)純文字文件,如果經(jīng)由修改權(quán)限成為 -rwxrwxrwx 后,這個(gè)文件能夠真的執(zhí)行成功嗎? 當(dāng)然不行~因?yàn)樗膬?nèi)容根本就沒有可以執(zhí)行的資料。所以說,這個(gè)x代表這個(gè)文件具有可執(zhí)行的能力, 但是能不能執(zhí)行成功,當(dāng)然就得要看該文件的內(nèi)容啰~

雖然如此,不過我們?nèi)匀幌M梢越逵筛蔽募麃聿t解該文件是什么東西,所以, 通常我們還是會(huì)以適當(dāng)?shù)母蔽募麃肀硎驹撐募鞘裁捶N類的。底下有數(shù)種常用的副文件名:

    * *.sh : 批次文件( scripts ),因?yàn)榕挝募槭褂胹hell寫成的,所以副文件名就編成 .sh 啰;

    * *Z, *.tar, *.tar.gz, *.zip, *.tgz: 經(jīng)過打包的壓縮文件。這是因?yàn)閴嚎s軟體分別為 gunzip, tar 等等的,由于不同的壓縮軟體,而取其相關(guān)的副文件名啰!

    * *.html, *.php:網(wǎng)頁相關(guān)文件,分別代表 HTML 語法與 PHP 語法的網(wǎng)頁文件啰! .html 的文件可使用網(wǎng)頁瀏覽器來直接開啟,至于 .php 的文件, 則可以透過 client 端的瀏覽器來 server 端瀏覽,以得到運(yùn)算后的網(wǎng)頁結(jié)果呢!

基本上,Linux系統(tǒng)上的文件名真的只是讓你瞭解該文件可能的用途而已, 真正的執(zhí)行與否仍然需要權(quán)限的規(guī)范才行!例如雖然有一個(gè)文件為可執(zhí)行文件, 如常見的/bin/ls這個(gè)顯示文件屬性的指令,不過,如果這個(gè)文件的權(quán)限被修改成無法執(zhí)行時(shí), 那么ls就變成不能執(zhí)行啰!

上述的這種問題最常發(fā)生在文件傳送的過程中。例如你在網(wǎng)路上下載一個(gè)可執(zhí)行文件,但是偏偏在你的 Linux系統(tǒng)中就是無法執(zhí)行!呵呵!那么就是可能文件的屬性被改變了!不要懷疑,從網(wǎng)路上傳送到你的 Linux系統(tǒng)中,文件的屬性與權(quán)限確實(shí)是會(huì)被改變的喔!

    * Linux文件長度限制:

在Linux底下,使用預(yù)設(shè)的Ext2/Ext3文件系統(tǒng)時(shí),針對文件的文件名長度限制為:

    * 單一文件或目錄的最大容許文件名為 255 個(gè)字元;
    * 包含完整路徑名稱及目錄 (/) 之完整文件名為 4096 個(gè)字元。

是相當(dāng)長的文件名喔!我們希望Linux的文件名稱可以一看就知道該文件在干嘛的, 所以文件名通常是很長很長!而用慣了Windows的人可能會(huì)受不了,因?yàn)槲募Q通常真的都很長, 對于用慣Windows而導(dǎo)致打字速度不快的朋友來說,嗯!真的是很困擾.....不過,只得勸你好好的加強(qiáng)打字的訓(xùn)練啰!

   * Linux文件名稱的限制:

由于Linux在文字介面下的一些指令操作關(guān)系,一般來說,你在設(shè)定Linux底下的文件名稱時(shí), 最好可以避免一些特殊字元比較好!例如底下這些:

    * ? > < ; & ! [ ] | \ ' " ` ( ) { }

因?yàn)檫@些符號在文字介面下,是有特殊意義的!另外,文件名稱的開頭為小數(shù)點(diǎn)&lsquo;.&rsquo;時(shí), 代表這個(gè)文件為&lsquo;隱藏文件&rsquo;喔!同時(shí),由于指令下達(dá)當(dāng)中,常常會(huì)使用到 -option 之類的選項(xiàng), 所以你最好也避免將文件文件名的開頭以 - 或 + 來命名??!

目錄與文件權(quán)限
現(xiàn)在我們知道了Linux系統(tǒng)內(nèi)文件的三種身份(擁有者、群組與其他人),知道每種身份都有三種權(quán)限(rwx), 已知道能夠使用chown, chgrp, chmod去修改這些權(quán)限與屬性,當(dāng)然,利用ls -l去觀察文件也沒問題。 前兩小節(jié)也談到了這些文件權(quán)限對于資料安全的重要性。那么,這些文件權(quán)限對于一般文件與目錄文件有何不同呢? 有大大的不同??!底下就讓鳥哥來說清楚,講明白!

* 權(quán)限對文件的重要性

文件是實(shí)際含有資料的地方,包括一般文字文件、資料庫內(nèi)容文件、二進(jìn)位可執(zhí)行文件(binary program)等等。 因此,權(quán)限對于文件來說,他的意義是這樣的:

* r (read):可讀取此一文件的實(shí)際內(nèi)容,如讀取文字文件的文字內(nèi)容等;
* w (write):可以編輯、新增或者是修改該文件的內(nèi)容(但不含刪除該文件);
* x (eXecute):該文件具有可以被系統(tǒng)執(zhí)行的權(quán)限。

那個(gè)可讀(r)代表讀取文件內(nèi)容是還好瞭解,那么可執(zhí)行(x)呢?這里你就必須要小心啦! 因?yàn)樵赪indows底下一個(gè)文件是否具有執(zhí)行的能力是藉由&lsquo; 副文件名 &rsquo;來判斷的, 例如:.exe, .bat, .com 等等,但是在Linux底下,我們的文件是否能被執(zhí)行,則是藉由是否具有&lsquo;x&rsquo;這個(gè)權(quán)限來決定的!跟文件名是沒有絕對的關(guān)系的!

至于最后一個(gè)w這個(gè)權(quán)限呢?當(dāng)你對一個(gè)文件具有w權(quán)限時(shí),你可以具有寫入/編輯/新增/修改文件的內(nèi)容的權(quán)限, 但并不具備有刪除該文件本身的權(quán)限!對于文件的rwx來說, 主要都是針對&lsquo;文件的內(nèi)容&rsquo;而言,與文件文件名的存在與否沒有關(guān)系喔!因?yàn)槲募涗浀氖菍?shí)際的資料嘛!

* 權(quán)限對目錄的重要性

文件是存放實(shí)際資料的所在,那么目錄主要是儲(chǔ)存啥玩意???目錄主要的內(nèi)容在記錄文件名清單,文件名與目錄有強(qiáng)烈的關(guān)連啦! 所以如果是針對目錄時(shí),那個(gè) r, w, x 對目錄是什么意義呢?

* r (read contents in directory):

   表示具有讀取目錄結(jié)構(gòu)清單的權(quán)限,所以當(dāng)你具有讀取(r)一個(gè)目錄的權(quán)限時(shí),表示你可以查詢該目錄下的文件名資料。 所以你就可以利用 ls 這個(gè)指令將該目錄的內(nèi)容列表顯示出來!

* w (modify contents of directory):

   這個(gè)可寫入的權(quán)限對目錄來說,是很了不起的! 因?yàn)樗硎灸憔哂幸苿?dòng)該目錄結(jié)構(gòu)清單的權(quán)限,也就是底下這些權(quán)限:

          o 建立新的文件與目錄;
          o 刪除已經(jīng)存在的文件與目錄(不論該文件的權(quán)限為何!)
          o 將已存在的文件或目錄進(jìn)行更名;
          o 搬移該目錄內(nèi)的文件、目錄位置。

      總之,目錄的w權(quán)限就與該目錄底下的文件名移動(dòng)有關(guān)就對了啦!

* x (access directory):

      咦!目錄的執(zhí)行權(quán)限有啥用途???目錄只是記錄文件名而已,總不能拿來執(zhí)行吧?沒錯(cuò)!目錄不可以被執(zhí)行,目錄的x代表的是使用者能否進(jìn)入該目錄成為工作目錄的用途! 所謂的工作目錄(work directory)就是你目前所在的目錄啦!舉例來說,當(dāng)你登入Linux時(shí), 你所在的家目錄就是你當(dāng)下的工作目錄。而變換目錄的指令是&lsquo;cd&rsquo;(change directory)啰!

目錄的x權(quán)限決定用戶是否可以進(jìn)入該目錄。

大致的目錄權(quán)限概念是這樣,底下我們來看幾個(gè)范例,讓你瞭解一下啥是目錄的權(quán)限啰!

例題:
有個(gè)目錄的權(quán)限如下所示:

代碼如下:


drwxr--r--  3  root  root  4096   Jun 25 08:35   .ssh


系統(tǒng)有個(gè)帳號名稱為vbird,這個(gè)帳號并沒有支援root群組,請問vbird對這個(gè)目錄有何權(quán)限?是否可切換到此目錄中?
答:
vbird對此目錄僅具有r的權(quán)限,因此vbird可以查詢此目錄下的文件名列表。因?yàn)関bird不具有x的權(quán)限,因此vbird并不能切換到此目錄內(nèi)!(相當(dāng)重要的概念!)

上面這個(gè)例題中因?yàn)関bird具有r的權(quán)限,因?yàn)槭莚乍看之下好像就具有可以進(jìn)入此目錄的權(quán)限,其實(shí)那是錯(cuò)的。 能不能進(jìn)入某一個(gè)目錄,只與該目錄的x權(quán)限有關(guān)啦!此外, 工作目錄對于指令的執(zhí)行是非常重要的,如果你在某目錄下不具有x的權(quán)限, 那么你就無法切換到該目錄下,也就無法執(zhí)行該目錄下的任何指令,即使你具有該目錄的r的權(quán)限。

很多朋友在架設(shè)網(wǎng)站的時(shí)候都會(huì)卡在一些權(quán)限的設(shè)定上,他們開放目錄資料給網(wǎng)際網(wǎng)路的任何人來瀏覽, 卻只開放r的權(quán)限,如上面的范例所示那樣,那樣的結(jié)果就是導(dǎo)致網(wǎng)站伺服器軟體無法到該目錄下讀取文件(最多只能看到文件名), 最終用戶總是無法正確的查閱到文件的內(nèi)容(顯示權(quán)限不足啊!)。要注意:要開放目錄給任何人瀏覽時(shí),應(yīng)該至少也要給予r及x的權(quán)限,但w權(quán)限不可隨便給! 為什么w不能隨便給,我們來看下一個(gè)例子:

例題:
假設(shè)有個(gè)帳號名稱為dmtsai,他的家目錄在/home/dmtsai/,dmtsai對此目錄具有[rwx]的權(quán)限。若在此目錄下有個(gè)名為the_root.data的文件,該文件的權(quán)限如下:

代碼如下:


-rwx------ 1 root  root  4365 Sep 19 23:20  the_root.data


請問dmtsai對此文件的權(quán)限為何?可否刪除此文件?
答:
如上所示,由于dmtsai對此文件來說是&lsquo;others&rsquo;的身份,因此這個(gè)文件他無法讀、無法編輯也無法執(zhí)行,也就是說,他無法變動(dòng)這個(gè)文件的內(nèi)容就是了。

但是由于這個(gè)文件在他的家目錄下,他在此目錄下具有rwx的完整權(quán)限,因此對于the_root.data這個(gè)&lsquo;文件名&rsquo;來說,他是能夠&lsquo;刪除&rsquo;的!結(jié)論就是,dmtsai這個(gè)用戶能夠刪除the_root.data這個(gè)文件!

還是看不太懂?有聽沒有懂喔!沒關(guān)系~我們底下就來設(shè)計(jì)一個(gè)練習(xí), 讓你實(shí)際玩玩看,應(yīng)該就能夠比較近入狀況啦!不過,由于很多指令我們還沒有教, 所以底下的指令有的先瞭解即可,詳細(xì)的指令用法我們會(huì)在后面繼續(xù)介紹的。

    * 先用root的身份建立所需要的文件與目錄環(huán)境

我們用root的身份在所有人都可以工作的/tmp目錄中建立一個(gè)名為testing的目錄, 該目錄的權(quán)限為744且目錄擁有者為root。另外,在testing目錄下在建立一個(gè)空的文件, 文件名亦為testing。建立目錄可用mkdir(make directory),建立空文件可用touch(下一章會(huì)說明)來處理。 所以過程如下所示:

代碼如下:


[root@www ~]# cd /tmp                     <==切換工作目錄到/tmp
[root@www tmp]# mkdir testing             <==建立新目錄
[root@www tmp]# chmod 744 testing         <==變更權(quán)限
[root@www tmp]# touch testing/testing     <==建立空的文件
[root@www tmp]# chmod 600 testing/testing <==變更權(quán)限
[root@www tmp]# ls -ald testing testing/testing
drwxr--r-- 2 root root 4096 Sep 19 16:01 testing
-rw------- 1 root root    0 Sep 19 16:01 testing/testing


# 仔細(xì)看一下,目錄的權(quán)限是 744 ,且所屬群組與使用者均是 root 喔!
# 那么在這樣的情況底下,一般身份使用者對這個(gè)目錄/文件的權(quán)限為何?

* 一般用戶的讀寫權(quán)限為何?觀察中

在上面的例子中,雖然目錄是744的權(quán)限設(shè)定,一般用戶應(yīng)該能有 r 的權(quán)限, 但這樣的權(quán)限使用者能做啥事呢?假設(shè)鳥哥的系統(tǒng)中含有一個(gè)帳號名為 vbird 的, 我們可以透過&lsquo; su - vbird &rsquo;這個(gè)指令來變換身份喔!看看底下的操作先!

代碼如下:


[root@www tmp]# su - vbird <==切換身份成為 vbird 啰!
[vbird@www ~]$ cd /tmp     <==看一下,身份變了喔!提示字元也變成 $ 了!
[vbird@www tmp]$ ls -l testing/
?--------- ? ? ? ?             ? testing
# 因?yàn)榫哂?r 的權(quán)限可以查詢文件名。不過權(quán)限不足(沒有x),所以會(huì)有一堆問號。
[vbird@www tmp]$ cd testing/
-bash: cd: testing/: Permission denied
# 因?yàn)椴痪哂?x ,所以當(dāng)然沒有進(jìn)入的權(quán)限啦!有沒有呼應(yīng)前面的權(quán)限說明啊!</p> <p>* 如果該目錄屬于用戶本身,會(huì)有什么狀況?


上面的練習(xí)我們知道了只有r確實(shí)可以讓使用者讀取目錄的文件名列表,不過詳細(xì)的資訊卻還是讀不到的, 同時(shí)也不能將該目錄變成工作目錄(用 cd 進(jìn)入該目錄之意)。那如果我們讓該目錄變成使用者的, 那么使用者在這個(gè)目錄底下是否能夠刪除文件呢?底下的練習(xí)做看看:

代碼如下:


[vbird@www tmp]$ exit               <==讓 vbird 變回原本的 root 身份喔!
[root@www tmp]# chown vbird testing <==修改權(quán)限,讓vbird擁有此目錄
[root@www tmp]# su - vbird          <==再次變成vbird來操作
[vbird@www ~]$ cd /tmp/testing      <==可以進(jìn)入目錄了呢!
[vbird@www testing]$ ls -l
-rw------- 1 root root 0 Sep 19 16:01 testing  <==文件不是vbird的!
[vbird@www testing]$ rm testing     <==嘗試殺掉這個(gè)文件看看!
rm: remove write-protected regular empty file `testing'? y
# 竟然可以刪除!這樣理解了嗎?!

到此,相信大家對“uhe理解Linux系統(tǒng)中的文件名和文件種類以及文件權(quán)限”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI