linux文件屬性與權限

內容源於: 鳥哥的linux私房菜


目錄

Linux文件屬性 [文件屬性解析(SUID/SGID/SBIT)][隱藏屬性]
修改文件屬性 [chgrp][chown][chmod][umask]
目錄與文件之權限意義 [權限對文件的意義][權限對目錄的意義]
Linux文件種類與擴展名 [文件類型][Linux文件擴展名][Linux文件長度限制]


Linux文件屬性

[文件屬性解析(SUID/SGID/SBIT)][隱藏屬性]

文件屬性解析

以root的身份登入Linux之後,在命令行中輸入『 ls -al 』後可以看到:

[root@www ~]# ls -al
total 156
drwxr-x--- 4 root root 4096 Sep 8 14:06 .
drwxr-xr-x 23 root root 4096 Sep 8 14:21 ..
-rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg
-rw------- 1 root root 199 Sep 8 17:14 .bash_history
-rw-r--r-- 1 root root 24 Jan 6 2007 .bash_logout
-rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile
-rw-r--r-- 1 root root 176 Jan 6 2007 .bashrc
-rw-r--r-- 1 root root 100 Jan 6 2007 .cshrc
drwx------ 3 root root 4096 Sep 5 10:37 .gconf <=範例說明處
drwx------ 2 root root 4096 Sep 5 14:09 .gconfd
-rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log <=範例說明處
-rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog
[ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ] [ 7 ]
[ 權限 ] [連結][擁有者] [羣組] [文件容量] [ 修改日期 ] [ 檔名 ]

以其中install.log爲範例說明:

 

第一欄: 類型與權限(permission)

圖釋:

  • 第一個字符代表這個文件的類型(如目錄、文件或鏈接文件等等):
    1. 當爲[ d ]則是目錄,例如上表檔名爲『.gconf』的那一行;
    2. 當爲[ - ]則是文件,例如上表檔名爲『install.log』那一行;
    3. 若是[ l ]則表示爲連結檔(link file);
    4. 若是[ b ]則表示爲裝置文件裏面的可供儲存的接口設備(可隨機存取裝置);
    5. 若是[ c ]則表示爲裝置文件裏面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)
  • 接下來的字符中,以三個爲一組,且均爲『rwx』 的三個參數的組合
    < [ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute) 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號[ - ]而已>
    1. 第一組爲『文件所有者的權限』,以『install.log』那個文件爲例, 該文件的擁有者可以讀寫,但不可執行;
    2. 第二組爲『文件所屬用戶組的權限』;
    3. 第三組爲『其他人對文件的權限』.
  • 特殊權限SUID, SGID, SBIT:
    [root@www ~]# ls -ld /tmp ; ls -l /usr/bin/passwd /usr/bin/locate /var/lib/mlocate/mlocate.db
    drwxrwxrwt 7 root root 4096 Sep 27 18:23 /tmp
    -rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd
    -rwx--s--x 1 root slocate 23856 Mar 15 2007 /usr/bin/locate
    -rw-r----- 1 root slocate 3175776 Sep 28 04:02 /var/lib/mlocate/mlocate.db

    Set UID:
    當 s 這個標誌出現在文件擁有者的 x 權限上時,如上 /usr/bin/passwd 這個文件的權限狀態,此時就被稱爲 Set UID,簡稱爲 SUID 的特殊權限。基本上SUID有這樣的限制與功能:

    • SUID 權限僅對二進位程序(binary program)有效(不能夠用在 shell script 上面)
    • 運行者對於該程序需要具有 x 的可運行權限
    • 本權限僅在運行該程序的過程中有效 (run-time)
    • 運行者將具有該程序擁有者 (owner) 的權限

    以passwd文件爲例:

    vbird 對於 /usr/bin/passwd 這個程序來說是具有 x 權限的,表示 vbird 能運行 passwd;
    passwd 的擁有者是 root 這個帳號;vbird 運行 passwd 的過程中,會『暫時』獲得 root 的權限;
    /etc/shadow 就可以被 vbird 所運行的 passwd 所修改。
    但如果 vbird 使用 cat 去讀取 /etc/shadow 時,他能夠讀取嗎?因爲 cat 不具有 SUID 的權限,所以 vbird 運行 『cat /etc/shadow』 時,是不能讀取 /etc/shadow 的。我們用一張示意圖來說明如下:
    圖4.4.1、SUID程序運行的過程示意圖

    SGID:
    與 SUID 不同的是,SGID 可以針對文件或目錄來配置!

    如果是對文件來說, SGID 有如下的功能:

    • SGID 對二進位程序有用,程序運行者對於該程序來說,需具備 x 的權限
    • 運行者在運行的過程中將會獲得該程序羣組的權限

    如果針對的是目錄,SGID 有如下的功能:

    • 使用者若對於此目錄具有 r 與 x 的權限時,該使用者能夠進入此目錄;
    • 使用者在此目錄下的有效羣組(effective group)將會變成該目錄的羣組;

    Sticky Bit:
    這個 Sticky Bit, SBIT 目前只針對目錄有效作用是:

    • 當使用者對於此目錄具有 w, x 權限,亦即具有寫入的權限時;
    • 當使用者在該目錄下創建文件或目錄時,僅有自己與 root 纔有權力刪除該文件

    換句話說:當甲這個使用者於 A 目錄是具有羣組或其他人的身份,並且擁有該目錄 w 的權限, 這表示『甲使用者對該目錄內任何人創建的目錄或文件均可進行 "刪除/更名/搬移" 等動作。』 不過,如果將 A 目錄加上了 SBIT 的權限項目時, 則甲只能夠針對自己創建的文件或目錄進行刪除/更名/移動等動作,而無法刪除他人的文件。

    [root@www tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 權限
    -rwSrwSrwT 1 root root 0 Sep 29 03:06 test

    user, group 以及 others 都沒有 x 這個可運行的標誌( 因爲 666 ),所以,這個 S, T 代表的就是『空的』

第二欄:多少檔名連結到此節點(i-node)

記錄有多少不同的檔名連結到相同的一個i-node(每個文件都會將他的權限與屬性記錄到文件系統的i-node中,不過,我們使用的目錄樹卻是使用文件名來記錄, 因此每個檔名就會連結到一個i-node)

第三欄:文件(或目錄)的擁有者

第四欄:文件的所屬羣組

在Linux系統下一個賬號會附屬於一個或多個的羣組中(假設某個文件所屬的羣組爲projecta,且該文件的權限如圖所示(-rwxrwx---), 則class1, class2, class3三人對於該文件都具有可讀、可寫、可執行的權限(看羣組權限). 但如果是不屬於projecta的其他賬號,對於此文件就不具有任何權限了)

第五欄:文件的容量大小(默認單位爲bytes)

第六欄:文件的建檔日期或者是最近的修改日期

這一欄的內容分別爲日期(月/日)及時間.如果這個文件被修改的時間距離現在太久了,那麼時間部分會僅顯示年份而已. 如下所示:

[root@www ~]# ls -l /etc/termcap /root/install.log

-rw-r--r-- 1 root root 807103 Jan 7 2007 /etc/termcap
-rw-r--r-- 1 root root 42304 Sep 4 18:26 /root/install.log
# 如上所示,/etc/termcap 爲 2007 年所修改過的文件,離現在太遠之故;
# 至於 install.log 是今年 (2009) 所建立的,所以就顯示完整的時間了.

第七欄:文件的全路徑及其文件名

這個字段就是檔名了. 比較特殊的是:如果檔名之前多一個『 . 』,則代表這個文件爲『隱藏檔』,在上表中的.gconf那一行,該文件就是隱藏檔. 你可以使用『ls』及『ls -a』顯示隱藏文檔

 

隱藏屬性

除了基本r, w, x權限外,在Linux的Ext2/Ext3文件系統下,我們還可以配置其他的系統隱藏屬性. 不過要先強調的是,底下的chattr命令只能在Ext2/Ext3的文件系統上面生效, 其他的文件系統可能就無法支持這個命令了.底下我們就來談一談如何配置與檢查這些隱藏的屬性吧!

chattr (配置文件隱藏屬性)

[root@www ~]# chattr [+-=][ASacdistu] 文件或目錄名稱
選項與參數:
+ :添加某一個特殊參數,其他原本存在參數則不動.
- :移除某一個特殊參數,其他原本存在參數則不動.
= :配置一定,且僅有後面接的參數

A :當配置了 A 這個屬性時,若你有存取此文件(或目錄)時,他的存取時間 atime將不會被修改,可避免I/O較慢的機器過度的存取磁碟.這對速度較慢的計算機有幫助
S :一般文件是非同步寫入磁碟的(原理請參考第五章sync的說明),如果加上 S 這個屬性時,當你進行任何文件的修改,該更動會『同步』寫入磁碟中.
a :當配置 a 之後,這個文件將只能添加數據,而不能刪除也不能修改數據,只有root 才能配置這個屬性.
c :這個屬性配置之後,將會自動的將此文件『壓縮』,在讀取的時候將會自動解壓縮,但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大文件似乎蠻有用的!)
d :當 dump 程序被運行的時候,配置 d 屬性將可使該文件(或目錄)不會被 dump 備份
i :這個 i 可就很厲害了!他可以讓一個文件『不能被刪除、改名、配置連結也無法寫入或新增數據!』對於系統安全性有相當大的助益!只有 root 能配置此屬性
s :當文件配置了 s 屬性時,如果這個文件被刪除,他將會被完全的移除出這個硬盤空間,所以如果誤刪了,完全無法救回來了喔!
u :與 s 相反的,當使用 u 來配置文件時,如果該文件被刪除了,則數據內容其實還存在磁碟中,可以使用來救援該文件喔!
注意:屬性配置常見的是 a 與 i 的配置值,而且很多配置值必須要身爲 root 才能配置

範例:請嘗試到/tmp底下創建文件,並加入 i 的參數,嘗試刪除看看.
[root@www ~]# cd /tmp
[root@www tmp]# touch attrtest <==創建一個空文件
[root@www tmp]# chattr +i attrtest <==給予 i 的屬性
[root@www tmp]# rm attrtest <==嘗試刪除看看
rm: remove write-protected regular empty file `attrtest'? y
rm: cannot remove `attrtest': Operation not permitted <==操作不許可
# 看到了嗎?呼呼!連 root 也沒有辦法將這個文件刪除呢!趕緊解除配置!

範例:請將該文件的 i 屬性取消!
[root@www tmp]# chattr -i attrtest

這個命令是很重要的,尤其是在系統的數據安全上面!由於這些屬性是隱藏的性質,所以需要以 lsattr 才能看到該屬性呦!其中,個人認爲最重要的當屬 +i 與 +a 這個屬性了.+i 可以讓一個文件無法被更動,對於需要強烈的系統安全的人來說, 真是相當的重要的!裏頭還有相當多的屬性是需要 root 才能配置的呢!

此外,如果是 log file 這種的登錄檔,就更需要 +a 這個可以添加,但是不能修改舊有的數據與刪除的參數了!怎樣?很棒吧! 未來提到登錄檔 (十九章) 的認知時,我們再來聊一聊如何配置他吧!

lsattr (顯示文件隱藏屬性)

[root@www ~]# lsattr [-adR] 文件或目錄

選項與參數:
-a :將隱藏檔的屬性也秀出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;
-R :連同子目錄的數據也一併列出來!

[root@www tmp]# chattr +aij attrtest
[root@www tmp]# lsattr attrtest
----ia---j--- attrtest

使用 chattr 配置後,可以利用 lsattr 來查閱隱藏的屬性.不過, 這兩個命令在使用上必須要特別小心,否則會造成很大的困擾.例如:某天你心情好,突然將 /etc/shadow 這個重要的密碼記錄文件給他配置成爲具有 i 的屬性,那麼過了若干天之後, 你突然要新增使用者,卻一直無法新增!別懷疑,趕快去將 i 的屬性拿掉吧!


修改文件屬性

[chgrp][chown][chmod][umask]

chgrp :改變文件所屬羣組

[root@www ~]# chgrp [-R] dirname/filename ...

選項與參數:
-R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件、目錄
都更新成爲這個羣組之意。常常用在變更某一目錄內所有的文件之情況。

範例:
[root@www ~]# chgrp users install.log
[root@www ~]# ls -l
-rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log
[root@www ~]# chgrp testing install.log
chgrp: invalid group name `testing' <== 發生錯誤訊息囉~找不到這個羣組名~

 

chown :改變文件擁有者

[root@www ~]# chown [-R] 賬號名稱 文件或目錄
[root@www ~]# chown [-R] 賬號名稱:組名 文件或目錄
選項與參數:
-R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件都變更

範例:將install.log的擁有者改爲bin這個賬號:
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log

範例:將install.log的擁有者與羣組改回爲root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log

當你複製文件給你之外的其他人時,由於複製行爲(cp)會複製執行者的屬性與權限,那麼別人會無法使用你複製給他的文件所以你要更改這個文件的擁有者與羣組

 

chmod :改變文件的權限, SUID, SGID, SBIT等等的特性

  • 數字類型改變文件權限

    各權限的分數對照表如下:

    1. SUID:4
    2. SGID:2
    3. SBIT:1
    4. r:4
    5. w:2
    6. x:1

    每種身份特殊權限(SUID/SGID/SBIT)和(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的

    例如當權限爲: [-rwxrwx---] 分數則是:
    owner = rwx = 4+2+1 = 7
    group = rwx = 4+2+1 = 7
    others= --- = 0+0+0 = 0

    例如當權限爲: [-rwsr-sr-x] 分數則是:

    特殊權限 = SUID&&SGID = 4+2 = 6
    owner = rws = 4+2+1 = 7
    group = r-s = 4+1 = 5
    others= r-x = 1 = 5

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

    [root@www ~]# chmod [-R] xyzw 文件或目錄

    選項與參數:
    x : 可有可無,代表的是特殊權限,即 SUID/SGID/SBIT
    yzw : 就是剛剛提到的數字類型的權限屬性,爲 rwx 屬性數值的相加
    -R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件都會變更

    [root@www ~]# cd /tmp
    [root@www tmp]# touch test <==創建一個測試用空檔
    [root@www tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的權限
    -rwsr-xr-x 1 root root 0 Sep 29 03:06 test
    [root@www tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 的權限
    -rwsr-sr-x 1 root root 0 Sep 29 03:06 test
    [root@www tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能!
    -rwxr-xr-t 1 root root 0 Sep 29 03:06 test
    [root@www tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 權限
    -rwSrwSrwT 1 root root 0 Sep 29 03:06 test
  • 符號類型改變文件權限

    還有一個改變權限的方法呦!從之前的介紹中我們可以發現,基本上就九個權限分別是(1)user (2)group (3)others三種身份啦!那麼我們就可以藉由u, g, o來代表三種身份的權限!此外, a 則代表 all 亦即全部的身份!那麼讀寫的權限就可以寫成r, w, x!SUID 爲 u+s ,而 SGID 爲 g+s ,SBIT 則是 o+t !也就是可以使用底下的方式來看:

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

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

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

    所以就是:

    [root@www ~]# chmod u=rwx,go=rx .bashrc
    # 注意喔!那個 u=rwx,go=rx 是連在一起的,中間並沒有任何空格!
    [root@www ~]# ls -al .bashrc
    -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
    [root@www tmp]# chmod g+s,o+t test; ls -l test
    -rws--s--t 1 root root 0 Aug 18 23:47 test

 

文件默認權限:umask

umask 就是指定 『目前使用者在創建文件或目錄時候的權限默認值』

[root@www ~]# umask
0022 <==與一般權限有關的是後面三個數字!
[root@www ~]# umask -S
u=rwx,g=rx,o=rx
[root@www ~]# umask 002

umask 的分數指的是『該默認值需要減掉的權限!』因爲 r、w、x 分別是 4、2、1 分

在默認權限的屬性上,目錄與文件是不一樣的。 x 權限對於目錄是非常重要的! 但是一般文件的創建則不應該有運行的權限,默認的情況如下:

  • 若使用者創建爲『文件』則默認『沒有可運行( x )權限』,亦即只有 rw 這兩個項目,也就是最大爲 666 分
  • 若使用者創建爲『目錄』,則由於 x 與是否可以進入此目錄有關,因此默認爲所有權限均開放,亦即爲 777 分

例題:
假設你的 umask 爲 003 ,請問該 umask 情況下,創建的文件與目錄權限爲?
答:
umask 爲 003 ,所以拿掉的權限爲 --------wx,因此:
文件: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--
目錄: (drwxrwxrwx) - (--------wx) = drwxrwxr--


目錄與文件之權限意義

[權限對文件的意義][權限對目錄的意義]

權限對文件的意義:

  • r (read):可讀取此一文件的實際內容,如讀取文本文件的文字內容等;
  • w (write):可以編輯、新增或者是修改該文件的內容(但不含刪除該文件);
  • x (execute):該文件具有可以被系統執行的權限.
    在Windows底下一個文件是否具有執行的能力是藉由『 擴展名 』來判斷的, 例如:.exe, .bat, .com 等等
    在Linux底下,我們的文件是否能被執行,則是藉由是否具有『x』這個權限來決定的!跟檔名是沒有絕對的關係的

 

權限對目錄的意義:

  • r (read contents in directory):
      表示具有讀取目錄結構列表的權限,所以當你具有讀取(r)一個目錄的權限時,表示你可以查詢該目錄下的文件名數據. 所以你就可以利用 ls 這個指令將該目錄的內容列表顯示出來!
  • w (modify contents of directory):
    1. 建立新的文件與目錄;
    2. 刪除已經存在的文件與目錄(不論該文件的權限爲何!)
    3. 將已存在的文件或目錄進行更名;
    4. 搬移該目錄內的文件、目錄位置.
  • x (access directory):
      用戶具備進入該目錄成爲工作目錄的權限

由此可以看出,如果一個人要想進入目錄必須對目錄具有 x 這個權限,但是隻具備 x 這個進入目錄的權限是沒有什麼意義的,因爲你無法讀取目錄下的文件.所以你想要讓以個人進入該目錄並可以讀取目錄下的文件結構必須具備 x 與 r 這兩個權限


Linux文件種類與擴展名

[文件類型][Linux文件擴展名][Linux文件長度限制]

我們在基礎篇一直強調一個概念,那就是:任何裝置在Linux底下都是文件

文件類型:

  • 正規文件(regular file):就是一般我們在進行存取的類型的文件,在由 ls -al 所顯示出來的屬性方面,第一個字符爲 [ - ],例如 [-rwxrwxrwx ].另外,依照文件的內容,又大略可以分爲:
    1. 純文本檔(ASCII):內容爲我們人類可以直接讀到的數據,例如數字、字母等等
    2. 二進制文件(binary):Linux當中的可執行文件(scripts, 文字型批處理文件不算)就是這種格式.
    3. 數據格式文件(data): 有些程序在運作的過程當中會讀取某些特定格式的文件,那些特定格式的文件可以被稱爲數據文件 (data file).舉例來說,我們的Linux在使用者登入時,都會將登錄的數據記錄在 /var/log/wtmp那個文件內,該文件是一個data file,他能夠透過last這個指令讀出來! 但是使用cat時,會讀出亂碼,因爲他是屬於一種特殊格式的文件.
  • 目錄(directory)
  • 連結檔(link)
    1. Hard Link (實體鏈接, 硬式連結或實際連結):

      首先,每個文件都會佔用一個 inode ,文件內容由 inode 的記錄來指向;想要讀取該文件,必須要經過目錄記錄的文件名來指向到正確的 inode 號碼才能讀取.

      也就是說,其實文件名只與目錄有關,但是文件內容則與 inode 有關.簡單的說:hard link 只是在某個目錄下新增一筆檔名鏈接到某 inode 號碼的關連記錄而已. 實現多個文檔名對應到同一個 inode 號碼

      舉個例子來說,假設我係統有個 /root/crontab 他是 /etc/crontab 的實體鏈接,也就是說這兩個檔名連結到同一個 inode , 自然這兩個文件名的所有相關信息都會一模一樣(除了文件名之外).實際的情況可以如下所示:

      [root@www ~]# ln /etc/crontab . <==創建實體鏈接的命令
      [root@www ~]# ll -i /etc/crontab /root/crontab
      1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /etc/crontab
      1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /root/crontab

      可以發現兩個檔名都連結到 1912701 這個 inode 號碼,因爲這兩個『檔名』其實是一模一樣的『文件』!而且你也會發現第二個字段由原本的 1 變成 2 了! 那個字段稱爲『連結』,這個字段的意義爲:『有多少個檔名鏈接到這個 inode 號碼』的意思. 如果將讀取到正確數據的方式畫成示意圖,就類似如下畫面:

      說明:

      1. 可以透過 1 或 2 的目錄之 inode 指定的 block 找到兩個不同的檔名,而不管使用哪個檔名均可以指到 real 那個 inode 去讀取到最終數據!
      2. 如果你將任何一個『檔名』刪除,其實 inode 與 block 都還是存在的! 此時你可以透過另一個『檔名』來讀取到正確的文件數據喔!
      3. 不論你使用哪個『檔名』來編輯, 最終的結果都會寫入到相同的 inode 與 block 中,因此均能進行數據的修改哩!

      要求:

      1. 不能跨 Filesystem
      2. 不能 link 目錄.
    2. Symbolic Link (符號鏈接,亦即是快捷方式)

      相對於 hard link , Symbolic link 可就好理解多了,基本上, Symbolic link 就是在創建一個獨立的文件,而這個文件會讓數據的讀取指向他 link 的那個文件的檔名!由於只是利用文件來做爲指向的動作, 所以,當來源檔被刪除之後,symbolic link 的文件會『開不了』, 會一直說『無法開啓某文件!』.實際上就是找不到原始『檔名』而已!

      舉例來說,我們先創建一個符號鏈接文件鏈接到 /etc/crontab 去看看:

      [root@www ~]# ln -s /etc/crontab crontab2
      [root@www ~]# ll -i /etc/crontab /root/crontab2
      1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /etc/crontab
      654687 lrwxrwxrwx 1 root root 12 Oct 22 13:58 /root/crontab2 -> /etc/crontab

      由上表的結果我們可以知道兩個文件指向不同的 inode 號碼,當然就是兩個獨立的文件存在! 而且連結檔的重要內容就是他會寫上目標文件的『文件名』, 你可以發現爲什麼上表中連結檔的大小爲 12 bytes 呢? 因爲箭頭(-->)右邊的檔名『/etc/crontab』總共有 12 個英文,每個英文佔用 1 個 byes ,所以文件大小就是 12bytes了!

      關於上述的說明,我們以如下圖示來解釋:

      由 1 號 inode 讀取到連結檔的內容僅有檔名,根據檔名鏈接到正確的目錄去取得目標文件的 inode , 最終就能夠讀取到正確的數據了.你可以發現的是,如果目標文件(/etc/crontab)被刪除了,那麼整個環節就會無法繼續進行下去, 所以就會發生無法透過連結檔讀取的問題了!

      這裏還是得特別留意,這個 Symbolic Link 與 Windows 的快捷方式可以給他劃上等號,由 Symbolic link 所創建的文件爲一個獨立的新的文件,所以會佔用掉 inode 與 block 喔!

  • 設備與裝置文件(device):與系統周邊及儲存等相關的一些文件, 通常都集中在/dev這個目錄之下!通常又分爲兩種:
    1. 區塊(block)設備檔 :就是一些儲存數據, 以提供系統隨機存取的接口設備,舉例來說,硬盤與軟盤等就是啦! 你可以隨機的在硬盤的不同區塊讀寫,這種裝置就是成組設備囉!你可以自行查一下/dev/sda看看, 會發現第一個屬性爲[ b ]喔!
    2. 字符(character)設備文件:亦即是一些串行端口的接口設備, 例如鍵盤、鼠標等等!這些設備的特色就是『一次性讀取』的,不能夠截斷輸出. 舉例來說,你不可能讓鼠標『跳到』另一個畫面,而是『滑動』到另一個地方啊!第一個屬性爲 [ c ].
  • 數據接口文件(sockets):既然被稱爲數據接口文件, 想當然爾,這種類型的文件通常被用在網絡上的數據承接了.我們可以啓動一個程序來監聽客戶端的要求, 而客戶端就可以透過這個socket來進行數據的溝通了.第一個屬性爲 [ s ], 最常在/var/run這個目錄中看到這種文件類型了.
  • 數據輸送文件(FIFO, pipe):FIFO也是一種特殊的文件類型,他主要的目的在解決多個程序同時存取一個文件所造成的錯誤問題. FIFO是first-in-first-out的縮寫.第一個屬性爲[p] .

Linux文件擴展名

基本上,Linux系統上的文件名真的只是讓你瞭解該文件可能的用途而已, 真正的執行與否仍然需要權限的規範才行!但是能不能執行成功,當然就得要看該文件的內容

雖然如此,不過我們仍然希望可以藉由擴展名來了解該文件是什麼東西,所以, 通常我們還是會以適當的擴展名來表示該文件是什麼種類的.底下有數種常用的擴展名:

  • *.sh : 腳本或批處理文件 (scripts),因爲批處理文件爲使用shell寫成的,所以擴展名就編成 .sh ;
  • *Z, *.tar, *.tar.gz, *.zip, *.tgz: 經過打包的壓縮文件.這是因爲壓縮軟件分別爲 gunzip, tar 等等的,由於不同的壓縮軟件,而取其相關的擴展名囉!
  • *.html, *.php:網頁相關文件,分別代表 HTML 語法與 PHP 語法的網頁文件囉! .html 的文件可使用網頁瀏覽器來直接開啓,至於 .php 的文件, 則可以透過 client 端的瀏覽器來 server 端瀏覽,以得到運算後的網頁結果呢!

Linux文件長度限制

在Linux底下,使用預設的Ext2/Ext3文件系統時,針對文件的檔名長度限制爲

  • 單一文件或目錄的最大容許文件名爲 255 個字符;
  • 包含完整路徑名稱及目錄 (/) 之完整檔名爲 4096 個字符.

Linux文件名的限制

由於Linux在文字接口下的一些指令操作關係,一般來說,你在設定Linux底下的文件名時, 最好可以避免一些特殊字符比較好!例如底下這些:

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章