1 Linux檔案屬性

ls是『list』的意思,重點在顯示檔案的檔名與相關屬性。

而選項『-al』則表示列出所有的檔案詳細的權限與屬性 (包含隱藏檔,就是檔名第一個字元為『 . 』的檔案)。

如上所示,在你第一次以root身份登入Linux時, 如果你輸入上述指令後,應該有上列的幾個東西,先解釋一下上面七個欄位個別的意思:

 

圖5.2.1、檔案屬性的示意圖

 

  • 第一欄代表這個檔案的類型與權限(permission):

這個地方最需要注意了!仔細看的話,你應該可以發現這一欄其實共有十個字元:(圖5.2.1及圖5.2.2內的權限並無關係)

檔案的類型與權限之內容
圖5.2.2、檔案的類型與權限之內容
    • 第一個字元代表這個檔案是『目錄、檔案或連結檔等等』:
      • 當為[ d ]則是目錄,例如上表檔名為『.config』的那一行;
      • 當為[ - ]則是檔案,例如上表檔名為『initial-setup-ks.cfg』那一行;
      • 若是[ l ]則表示為連結檔(link file);
      • 若是[ b ]則表示為裝置檔裡面的可供儲存的周邊設備(可隨機存取裝置);
      • 若是[ c ]則表示為裝置檔裡面的序列埠設備,例如鍵盤、滑鼠(一次性讀取裝置)。

 

接下來的字元中,以三個為一組,且均為『rwx』 的三個參數的組合。

其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。

要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號[ - ]而已。

    • 第一組為『檔案擁有者可具備的權限』,以『initial-setup-ks.cfg』那個檔案為例, 該檔案的擁有者可以讀寫,但不可執行;
    • 第二組為『加入此群組之帳號的權限』;
    • 第三組為『非本人且沒有加入本群組之其他帳號的權限』。

例題:

若有一個檔案的類型與權限資料為『-rwxr-xr--』,請說明其意義為何?

答:

先將整個類型與權限資料分開查閱,並將十個字元整理成為如下所示:
[-][rwx][r-x][r--]
 1  234  567  890
 1 為:代表這個檔名為目錄或檔案,本例中為檔案(-);
234為:擁有者的權限,本例中為可讀、可寫、可執行(rwx);
567為:同群組使用者權限,本例中為可讀可執行(rx);
890為:其他使用者權限,本例中為可讀(r),就是唯讀之意

同時注意到,rwx所在的位置是不會改變的,有該權限就會顯示字元,沒有該權限就變成減號(-)就第二欄表示有多少檔名連結到此節點(i-node):

每個檔案都會將他的權限與屬性記錄到檔案系統的i-node中,

不過,我們使用的目錄樹卻是使用檔名來記錄,

因此每個檔名就會連結到一個i-node囉!這個屬性記錄的,

就是有多少不同的檔名連結到相同的一個i-node號碼去就是了。

 

  • 第三欄表示這個檔案(或目錄)的『擁有者帳號』
  • 第四欄表示這個檔案的所屬群組

 

  • 第五欄為這個檔案的容量大小,預設單位為bytes
  • 第六欄為這個檔案的建檔日期或者是最近的修改日期:

      這一欄的內容分別為日期(月/日)及時間。如果這個檔案被修改的時間距離現在太久了,那麼時間部分會僅顯示年份而已。

 

  • 第七欄為這個檔案的檔名

這個欄位就是檔名了。比較特殊的是:如果檔名之前多一個『 . 』,

則代表這個檔案為『隱藏檔』,例如上表中的.config那一行,該檔案就是隱藏檔。

你可以使用『ls』及『ls -a』這兩個指令去感受一下什麼是隱藏檔囉!

 

這七個欄位的意義是很重要的!務必清楚的知道各個欄位代表的意義!尤其是第一個欄位的九個權限, 那是整個Linux檔案權限的重點之一。底下我們來做幾個簡單的練習,你就會比較清楚囉!

例題:
假設test1, test2, test3同屬於testgroup這個群組,如果有下面的兩個檔案,請說明兩個檔案的擁有者與其相關的權限為何?
-rw-r--r--  1 root     root          238 Jun 18 17:22 test.txt 
-rwxr-xr--  1 test1    testgroup    5238 Jun 19 10:25 ping_tsai
答:
  • 檔案test.txt的擁有者為root,所屬群組為root。至於權限方面則只有root這個帳號可以存取此檔案,其他人則僅能讀此檔案;

  • 另一個檔案ping_tsai的擁有者為test1,而所屬群組為testgroup。其中:
    • test1 可以針對此檔案具有可讀可寫可執行的權力;
    • 而同群組的test2, test3兩個人與test1同樣是testgroup的群組帳號,則僅可讀可執行但不能寫(亦即不能修改);
    • 至於沒有加入testgroup這一個群組的其他人則僅可以讀,不能寫也不能執行!


例題:
承上一題如果我的目錄為底下的樣式,請問testgroup這個群組的成員與其他人(others)是否可以進入本目錄?
    drwxr-xr--   1 test1    testgroup    5238 Jun 19 10:25 groups/
答:
  • 檔案擁有者test1[rwx]可以在本目錄中進行任何工作;
  • 而testgroup這個群組[r-x]的帳號,例如test2, test3亦可以進入本目錄進行工作,但是不能在本目錄下進行寫入的動作;
  • 至於other的權限中[r--]雖然有r ,但是由於沒有x的權限,因此others的使用者,並不能進入此目錄!

 

 

  • Linux檔案權限的重要性:

其實,最大的用途是在『資料安全性』上面的。

 

2 如何改變檔案屬性與權限

常用於群組、擁有者、各種身份的權限之修改的指令,如下所示:

  • chgrp :改變檔案所屬群組
  • chown :改變檔案擁有者
  • chmod :改變檔案的權限, SUID, SGID, SBIT等等的特性

 

  • 改變所屬群組, chgrp

請記得,要被改變的群組名稱必須要在/etc/group檔案內存在才行,否則就會顯示錯誤!

發現了嗎?檔案的群組被改成users了,但是要改成testing的時候,

就會發生錯誤~注意喔!發生錯誤訊息還是要努力的查一查錯誤訊息的內容才好! 將他英文翻譯成為中文,就知道問題出在哪裡了

 

  • 改變檔案擁有者, chown

要注意的是, 使用者必須是已經存在系統中的帳號,也就是在/etc/passwd 這個檔案中有紀錄的使用者名稱才能改變。

 

  • 改變權限, chmod

檔案權限的改變使用的是chmod這個指令,

但是,權限的設定方法有兩種, 分別可以使用數字或者是符號來進行權限的變更。

 

數字類型改變檔案權限

檔案的權限字元為:『-rwxrwxrwx』, 這九個權限是三個三個一組的!其中,我們可以使用數字來代表各個權限,各權限的分數對照表如下:

r:4
w:2
x:1

每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為: [-rwxrwx---] 分數則是:

owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0

所以等一下我們設定權限的變更時,該檔案的權限數字就是770啦!變更權限的指令chmod的語法是這樣的:

舉例來說,如果要將.bashrc這個檔案所有的權限都設定啟用,那麼就下達: 

 

例題:
將剛剛你的.bashrc這個檔案的權限修改回-rw-r--r--的情況吧!
答:
-rw-r--r--的分數是644,所以指令為:
chmod 644 .bashrc

 

符號類型改變檔案權限

 

還有一個改變權限的方法呦!從之前的介紹中我們可以發現,

基本上就九個權限分別是(1)user (2)group (3)others三種身份啦!

那麼我們就可以藉由u, g, o來代表三種身份的權限!

此外, a 則代表 all 亦即全部的身份!那麼讀寫的權限就可以寫成r, w, x囉!也就是可以使用底下的方式來看:

chmod u
g
o
a
+(加入)
-(除去)
=(設定)
r
w
x
檔案或目錄


來實作一下吧!假如我們要『設定』一個檔案的權限成為『-rwxr-xr-x』時,基本上就是:

  • user (u):具有可讀、可寫、可執行的權限;
  • group 與 others (g/o):具有可讀與執行的權限。


所以就是:

 

那麼假如是『 -rwxr-xr-- 』這樣的權限呢?

可以使用『 chmod u=rwx,g=rx,o=r filename 』來設定。

此外,如果我不知道原先的檔案屬性,而我只想要增加.bashrc這個檔案的每個人均可寫入的權限, 那麼我就可以使用:

而如果是要將權限去掉而不更動其他已存在的權限呢?例如要拿掉全部人的可執行權限,則:

 

3 目錄與檔案之權限意義:

  • 權限對檔案的重要性

檔案是實際含有資料的地方,包括一般文字檔、資料庫內容檔、二進位可執行檔(binary program)等等。 因此,權限對於檔案來說,他的意義是這樣的:

  • r (read):可讀取此一檔案的實際內容,如讀取文字檔的文字內容等;
  • w (write):可以編輯、新增或者是修改該檔案的內容(但不含刪除該檔案);
  • x (eXecute):該檔案具有可以被系統執行的權限。

在Linux底下,我們的檔案是否能被執行,則是藉由是否具有『x』這個權限來決定的!跟檔名是沒有絕對的關係的!

當你對一個檔案具有w權限時,你可以具有寫入/編輯/新增/修改檔案的內容的權限, 但並不具備有刪除該檔案本身的權限!

 

 

  • 權限對目錄的重要性

檔案是存放實際資料的所在,那麼目錄主要是儲存啥玩意啊?目錄主要的內容在記錄檔名清單,檔名與目錄有強烈的關連啦! 所以如果是針對目錄時,那個 r, w, x 對目錄是什麼意義呢?

    • r (read contents in directory):

      表示具有讀取目錄結構清單的權限,所以當你具有讀取(r)一個目錄的權限時,表示你可以查詢該目錄下的檔名資料。 所以你就可以利用 ls 這個指令將該目錄的內容列表顯示出來!

    • w (modify contents of directory):

      這個可寫入的權限對目錄來說,是很了不起的! 因為他表示你具有異動該目錄結構清單的權限,也就是底下這些權限:

      • 建立新的檔案與目錄;
      • 刪除已經存在的檔案與目錄(不論該檔案的權限為何!)
      • 將已存在的檔案或目錄進行更名;
      • 搬移該目錄內的檔案、目錄位置。

      總之,目錄的w權限就與該目錄底下的檔名異動有關就對了啦!

    • x (access directory):

      咦!目錄的執行權限有啥用途啊?目錄只是記錄檔名而已,總不能拿來執行吧?沒錯!目錄不可以被執行,目錄的x代表的是使用者能否進入該目錄成為工作目錄的用途! 所謂的工作目錄(work directory)就是你目前所在的目錄啦!舉例來說,當你登入Linux時, 你所在的家目錄就是你當下的工作目錄。而變換目錄的指令是『cd』(change directory)囉!

現在假設『檔案是一堆文件資料夾』,所以你可能可以在上面寫/改一些資料。而『目錄是一堆抽屜』,因此你可以將資料夾分類放置到不同的抽屜去。 因此抽屜最大的目的是拿出/放入資料夾喔!

 

現在讓我們彙整一下資料:

 

元件 內容 疊代物件 r w x
檔案 詳細資料data 文件資料夾 讀到文件內容 修改文件內容 執行文件內容
目錄 檔名 可分類抽屜 讀到檔名 修改檔名 進入該目錄的權限(key)

 

大致的目錄權限概念是這樣,底下我們來看幾個範例,讓你瞭解一下啥是目錄的權限囉!

例題:
有個目錄的權限如下所示:
drwxr--r--  3  root  root  4096   Jun 25 08:35   .ssh
系統有個帳號名稱為vbird,這個帳號並沒有支援root群組,請問vbird對這個目錄有何權限?是否可切換到此目錄中?
答:
vbird對此目錄僅具有r的權限,因此vbird可以查詢此目錄下的檔名列表。因為vbird不具有x的權限,亦即 vbird 沒有這個抽屜的鑰匙啦! 因此vbird並不能切換到此目錄內!(相當重要的概念!)

 

 

如果你在某目錄下不具有x的權限, 那麼你就無法切換到該目錄下,也就無法執行該目錄下的任何指令,即使你具有該目錄的r或w的權限。

 

要開放目錄給任何人瀏覽時,應該至少也要給予r及x的權限,但w權限不可隨便給

 

為什麼w不能隨便給,我們來看下一個例子:

 

例題:
假設有個帳號名稱為dmtsai,他的家目錄在/home/dmtsai/,dmtsai對此目錄具有[rwx]的權限。 若在此目錄下有個名為the_root.data的檔案,該檔案的權限如下:
-rwx------ 1 root  root  4365 Sep 19 23:20  the_root.data
請問dmtsai對此檔案的權限為何?可否刪除此檔案?
答:
如上所示,由於dmtsai對此檔案來說是『others』的身份,因此這個檔案他無法讀、無法編輯也無法執行, 也就是說,他無法變動這個檔案的內容就是了。

但是由於這個檔案在他的家目錄下, 他在此目錄下具有rwx的完整權限,因此對於the_root.data這個『檔名』來說,他是能夠『刪除』的! 結論就是,dmtsai這個用戶能夠刪除the_root.data這個檔案!

 

 

還是看不太懂?有聽沒有懂喔!

沒關係~我們底下就來設計一個練習, 讓你實際玩玩看,應該就能夠比較進入狀況啦!

不過,由於很多指令我們還沒有教, 所以底下的指令有的先瞭解即可,詳細的指令用法我們會在後面繼續介紹的。

  • 先用root的身份建立所需要的檔案與目錄環境

我們用root的身份在所有人都可以工作的/tmp目錄中建立一個名為testing的目錄,

該目錄的權限為744且目錄擁有者為root。

另外,在testing目錄下在建立一個空的檔案, 檔名亦為testing。

建立目錄可用mkdir(make directory),建立空檔案可用touch(下一章會說明)來處理。

所以過程如下所示:

  • 一般用戶的讀寫權限為何?觀察中

在上面的例子中,雖然目錄是744的權限設定,一般用戶應該能有 r 的權限, 但這樣的權限使用者能做啥事呢?

由於鳥哥的系統中含有一個帳號名為 dmtsai 的,請再開另外一個終端機,使用 dmtsai 登入來操作底下的任務!

  • 如果該目錄屬於用戶本身,會有什麼狀況?

上面的練習我們知道了只有r確實可以讓使用者讀取目錄的檔名列表,

不過詳細的資訊卻還是讀不到的, 同時也不能將該目錄變成工作目錄(用 cd 進入該目錄之意)。

那如果我們讓該目錄變成使用者的, 那麼使用者在這個目錄底下是否能夠刪除檔案呢?底下的練習做看看:

 

 

  • 使用者操作功能與權限

剛剛講這樣如果你還是搞不懂~沒關係,我們來處理個特殊的案例!假設兩個檔名,分別是底下這樣:

  • /dir1/file1
  • /dir2

假設你現在在系統使用 dmtsai 這個帳號,

那麼這個帳號針對 /dir1, /dir1/file1, /dir2 這三個檔名來說,

分別需要『哪些最小的權限』才能達成各項任務?

鳥哥彙整如下,如果你看得懂,恭喜你,如果妳看不懂~沒關係~未來再來繼續學!

操作動作 /dir1 /dir1/file1 /dir2 重點
讀取 file1 內容 x r - 要能夠進入 /dir1 才能讀到裡面的文件資料!
修改 file1 內容 x rw - 能夠進入 /dir1 且修改 file1 才行!
執行 file1 內容 x rx - 能夠進入 /dir1 且 file1 能運作才行!
刪除 file1 檔案 wx - - 能夠進入 /dir1 具有目錄修改的權限即可!
將 file1 複製到 /dir2 x r wx 要能夠讀 file1 且能夠修改 /dir2 內的資料

你可能會問,上面的表格當中,很多時候 /dir1 都不必有 r 耶!為啥?

我們知道 /dir1 是個目錄,也是個抽屜!

那個抽屜的 r 代表『這個抽屜裡面有燈光』, 所以你能看到的抽屜內的所有資料夾名稱 (非內容)。

但你已經知道裡面的資料夾放在哪個地方,那,有沒有燈光有差嘛?

你還是可以摸黑拿到該資料夾的!對吧!

因此,上面很多動作中,你只要具有 x 即可!r 是非必備的!

只是,沒有 r 的話,使用 [tab] 時,他就無法自動幫你補齊檔名了!這樣理解乎?

 

4 Linux檔案種類與副檔名

任何裝置在Linux底下都是檔案,

不僅如此,連資料溝通的介面也有專屬的檔案在負責~

所以,你會瞭解到,Linux的檔案種類真的很多~

除了前面提到的一般檔案(-)與目錄檔案(d)之外,還有哪些種類的檔案呢?

 

  • 檔案種類:

我們在剛剛提到使用『ls -l』觀察到第一欄那十個字元中,第一個字元為檔案的類型。、

除了常見的一般檔案(-)與目錄檔案(d)之外,還有哪些種類的檔案類型呢?

 

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

      • 純文字檔(ASCII):這是Linux系統中最多的一種檔案類型囉, 稱為純文字檔是因為內容為我們人類可以直接讀到的資料,例如數字、字母等等。 幾乎只要我們可以用來做為設定的檔案都屬於這一種檔案類型。 舉例來說,你可以下達『 cat ~/.bashrc 』就可以看到該檔案的內容。 (cat 是將一個檔案內容讀出來的指令)

      • 二進位檔(binary):還記得我們在『 第零章、計算機概論 』裡面的軟體程式的運作中提過, 我們的系統其實僅認識且可以執行二進位檔案(binary file)吧?沒錯~ 你的Linux當中的可執行檔(scripts, 文字型批次檔不算)就是這種格式的啦~ 舉例來說,剛剛下達的指令cat就是一個binary file。

      • 資料格式檔(data): 有些程式在運作的過程當中會讀取某些特定格式的檔案,那些特定格式的檔案可以被稱為資料檔 (data file)。舉例來說,我們的Linux在使用者登入時,都會將登錄的資料記錄在 /var/log/wtmp那個檔案內,該檔案是一個data file,他能夠透過last這個指令讀出來! 但是使用cat時,會讀出亂碼~因為他是屬於一種特殊格式的檔案。瞭乎?

    • 目錄(directory):
      就是目錄囉~第一個屬性為 [ d ],例如 [drwxrwxrwx]。

    • 連結檔(link):
      就是類似Windows系統底下的捷徑啦! 第一個屬性為 [ l ](英文L的小寫),例如 [lrwxrwxrwx] ;

    • 設備與裝置檔(device):
      與系統周邊及儲存等相關的一些檔案, 通常都集中在/dev這個目錄之下!通常又分為兩種:

      • 區塊(block)設備檔 :就是一些儲存資料, 以提供系統隨機存取的周邊設備,舉例來說,硬碟與軟碟等就是啦! 你可以隨機的在硬碟的不同區塊讀寫,這種裝置就是區塊裝置囉!你可以自行查一下/dev/sda看看, 會發現第一個屬性為[ b ]喔!

      • 字元(character)設備檔:亦即是一些序列埠的周邊設備, 例如鍵盤、滑鼠等等!這些設備的特色就是『一次性讀取』的,不能夠截斷輸出。 舉例來說,你不可能讓滑鼠『跳到』另一個畫面,而是『連續性滑動』到另一個地方啊!第一個屬性為 [ c ]。
    • 資料接口檔(sockets):
      既然被稱為資料接口檔, 想當然爾,這種類型的檔案通常被用在網路上的資料承接了。我們可以啟動一個程式來監聽用戶端的要求, 而用戶端就可以透過這個socket來進行資料的溝通了。第一個屬性為 [ s ], 最常在/run或/tmp這些個目錄中看到這種檔案類型了。

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

 

 

  • Linux檔案副檔名:

基本上,Linux的檔案是沒有所謂的『副檔名』的,我們剛剛就談過,

一個Linux檔案能不能被執行,與他的第一欄的十個屬性有關,

與檔名根本一點關係也沒有。

這個觀念跟Windows的情況不相同喔!

在Windows底下, 能被執行的檔案副檔名通常是 .com .exe .bat等等

而在Linux底下,只要你的權限當中具有x的話,例如[ -rwxr-xr-x ] 即代表這個檔案具有可以被執行的能力喔!

 

雖然如此,不過我們仍然希望可以藉由副檔名來瞭解該檔案是什麼東西,所以, 通常我們還是會以適當的副檔名來表示該檔案是什麼種類的。底下有數種常用的副檔名:

    • *.sh : 腳本或批次檔 (scripts),因為批次檔為使用shell寫成的,所以副檔名就編成 .sh 囉;

    • *Z, *.tar, *.tar.gz, *.zip, *.tgz: 經過打包的壓縮檔。這是因為壓縮軟體分別為 gunzip, tar 等等的,由於不同的壓縮軟體,而取其相關的副檔名囉!

    • *.html, *.php:網頁相關檔案,分別代表 HTML 語法與 PHP 語法的網頁檔案囉! .html 的檔案可使用網頁瀏覽器來直接開啟,至於 .php 的檔案, 則可以透過 client 端的瀏覽器來 server 端瀏覽,以得到運算後的網頁結果呢!

 

 

  • Linux檔案長度限制(註1):
  • 單一檔案或目錄的最大容許檔名為 255bytes,以一個 ASCII 英文佔用一個 bytes 來說,則大約可達 255 個字元長度。若是以每個中文字佔用 2bytes 來說, 最大檔名就是大約在 128 個中文字之譜!
  • Linux檔案名稱的限制:
  • 由於Linux在文字介面下的一些指令操作關係,一般來說,你在設定Linux底下的檔案名稱時, 最好可以避免一些特殊字元比較好!例如底下這些:

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

    因為這些符號在文字介面下,是有特殊意義的!另外,檔案名稱的開頭為小數點『.』時, 代表這個檔案為『隱藏檔』喔!同時,由於指令下達當中,常常會使用到 -option 之類的選項, 所以你最好也避免將檔案檔名的開頭以 - 或 + 來命名啊!

 

posted on 2016-05-16 14:39  Sharpest  阅读(295)  评论(0编辑  收藏  举报