linux 文件屬性與權限

內容源於: 鳥哥的linux私房菜 連接以下: Linux 的文件權限與目錄配置 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.一、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 分別是 四、二、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 之類的選項, 因此你最好也避免將文件檔名的開頭以 - 或 + 來命名啊!
相關文章
相關標籤/搜索