每次看到Linux的檔案名前有一堆rwx字母,一直搞不懂是什麼意思?這次帶你一次性搞懂!
此文介紹了檔案的權限分類、各種設定權限的方法、設定使用者群組的方法,最後還列出了Linux常見的目錄結構,幫助需要的朋友從大體上了解熟悉Linux。
檔案可存取的身份分類:
- owner(所有者/擁有者)
- group(群組)
- others(其他人)
檔案的權限分類:
- read(讀)
- write(寫)
- execute(執行)
檔案屬性解析:
示例:
dr-xr-x---. 5 root root 4096 May 29 16:08 .
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
[檔案類型][權限][連接配接數][擁有者名稱][所屬群組][檔案大小,機關預設是Bytes][最新修改的日期]
以上是一個檔案各屬性值,現在來解讀每個值的含義:
- 檔案類型:第一行的 “d” 表示此檔案是一個目錄,第二行的 “-” 表示是一個普通檔案,檔案類型有下列幾種:
- d 為目錄
- - 為檔案
- | 為連結檔案,即符号連結/軟連接配接
- b 為裝置檔案裡面的存取裝置
- c 為裝置檔案裡面的鍵盤、滑鼠之類的一次性讀取裝置
- 權限:以三個為一組,rwx三個字母的組合,順序不會改變,r(read)表示可讀,w(write)表示可寫,x(execute)表示可執行,如果沒有權限,用減号 “-” 代替
- 權限的第一組是擁有者的權限
- 權限的第二組是群組的權限
- 權限的第三組是其他人的權限
- 第一行的權限:擁有者和群組都是可讀、可執行,而其他使用者是沒有權限的
- 第二行的權限:擁有者是可讀、可寫,群組和其他人是可讀的權限。
- 連接配接數:每個檔案都會将他的權限與屬性記錄到檔案系統的i-node中,這個屬性記錄的,就是有多少不同的檔案名連結到相同的一個i-node
- 擁有者名稱即賬号的名稱
- 所屬群組即群組的名稱
- 檔案大小容量
- 最新修改的日期,如果修改的時間距離目前時間過遠,則隻顯示年份
改變檔案屬性與權限的指令
- chgrp:修改檔案的所屬群組
文法:
// chgrp即change group的縮寫
chgrp [-R] groupname filename
文法解析:-R 選項表示遞歸子目錄修改群組,groupname表示組名,filename表示檔案名
示例:
// 修改test.txt檔案的所屬組為users,如果users這個群組名不在/etc/group中,則報無效的群組,建立新群組的指令:groupadd [option] groupname,例如:sudo groupadd users
chgrp users test.txt
- chown:修改檔案的擁有者
文法:
// chown即change owner的縮寫
chown [-R] ownername filename
文法解析:-R 選項表示遞歸子目錄修改擁有者,ownername表示擁有者名稱,filename表示檔案名
示例:
// 修改test.txt檔案的擁有者為alan,如果alan不在/etc/passwd中,則報無效使用者名,建立新使用者的指令:useradd [option] username,例如:sudo useradd alan
chown alan test.txt
chown修改擁有者時還可以同時修改群組
文法:
chown ownername:groupname filename
文法解析:先接擁有者名稱,再接群組名稱,使用冒号 “:” 隔開
示例:
chown alan:users test.txt
使用chown隻修改群組的方法
文法:
chown .groupname filename
文法解析:在群組名前加上 “.” 英文句号,則表示隻修改群組名
示例:
chown .users test.txt
- chmod:修改檔案的權限
方法一:使用數字的方式來修改
r(可讀)、w(可寫)、x(可執行)三者對應的數字是4、2、1,總數為7,那麼在修改權限時,4代表r,2代表w,1代表x
文法:
chmod [-R] xyz filename
文法解析:xyz表示權限數字的組合
示例:
// 第一個7是擁有者的權限(4+2+1),即可讀、可寫、可執行,後兩個5是群組和其他使用者的權限(4+1),即可讀、可執行
chmod 755 test.txt
// 三個7則表示擁有者、群組、其他人都是可讀、可寫、可執行的權限
chmod 777 test.txt
方法二:使用符号類型來改變權限
因為權限的有三種身份:user、group、others,那麼就用單詞的首字母代替:u、g、o,a表示所有者都具有
// 示例1:要設定一個檔案的權限為:-rwxr-xr-x,
chmod u=rwx,go=rx text.txt
// 以上所有者為可讀、可寫、可執行,群組和其他人是可讀、可執行
// 示例2:要設定一個檔案的權限為:-rwxr-xr--
chmod u=rwx,g=rx,o=r text.txt
// 以上所有者的為可讀、可寫、可執行,群組是可讀、可執行,其他人隻有可讀的權限
// 示例3:使用+-來設定單個權限,适用于不知道原檔案的權限的場景
chmod a+x text.txt // 設定這個檔案增加一個可執行的權限,a表示是所有人都具有
chmod a-x text.txt // 去除所有人可執行的權限
目錄的權限解析:
- r:表示可以讀取到目錄的檔案結構
- w:表示可以移動、重命名、删除,建立的權限
- x:表示可以進入該目錄
Tips
在使用者的家目錄中,有一個不屬于他的權限的檔案,不可讀、不可寫、不可執行,但是可以删除;舉個例子:在家裡有一個掉落一個不是自己的東西,可以還給人家或者丢棄
檔案種類
- -:表示規則檔案
- d:表示目錄檔案
- l:連結檔案/符号連結檔案
- b:區塊裝置檔案
- c:字元裝置檔案
- s:資料接口檔案(sockets)
- p:資料輸送檔(FIFO, pipe)
Linux檔案長度限制
單一檔案或目錄最大長度是255位元組,中文是128中文字
Linux目錄結構詳解:
- /bin:可執行檔案的目錄,其中指令可被所有使用者執行,例如:cat, chmod, chown, date, mv, mkdir, cp, bash等
- /boot:這個目錄主要在放置開機會使用到的檔案,包括Linux核心檔案以及開機菜單與開機所需配置檔案等等。
- /dev:存放裝置和周邊裝置的目錄
- /etc:系統主要的配置檔案放置的目錄,隻有root使用者才有權限修改配置檔案
- /lib:放置的是在開機時會用到的函數庫,以及在/bin或/sbin下面的指令會調用的函數庫
- /media:放置的是媒體裝置,軟碟、硬碟、DVD等裝置都挂載在這
- /mnt:臨時裝置挂載的目錄
- /opt:安裝第三方軟體的目錄,非原本的distribution提供的
- /run:存放系統開機後所産生的各項資訊
- /srv:service的縮寫,是一些網絡服務啟動之後,這些服務所需要取用的資料目錄。 常見的服務例如WWW, FTP等等
- /tmp:臨時目錄
- /usr:unix軟體資源目錄
- /var:放置經常變動資料的目錄
- /home:使用者主目錄
- /root:系統管理者的主檔案夾
- /lost+found:這個目錄是使用标準的ext2/ext3/ext4檔案系統格式才會産生的一個目錄,目的在于當檔案系統發生錯誤時,将一些遺失的片段放置到這個目錄下
- /proc:是一個虛拟檔案系統,存放的資料都在記憶體中,例如:系統核心、行程資訊、周邊裝置、網絡狀态等
- /sys:與/proc類似,也是虛拟檔案系統,主要也是記錄核心與系統硬體資訊較相關的資訊
- /usr/bin/:/bin的軟連接配接
- /usr/lib/:/lib的軟連接配接
- /usr/local:系統管理者在本機自行安裝自己下載下傳的軟體(非distribution預設提供者)
- /usr/sbin/:/sbin的軟連接配接,非系統正常運作所需要的系統指令,最常見的就是某些網絡伺服器軟體的服務指令(daemon)
- /usr/share/:放置隻讀架構的資料檔案
- /usr/games/:放置遊戲相關的檔案
- /usr/include/:放置C/C++頭檔案和include引入的包,以tarball方式 (*.tar.gz 的方式安裝軟體)安裝某些資料時
- /usr/libexec/:某些不被一般使用者慣用的可執行檔案或腳本(script)
- /usr/src/:放置軟體源碼,Linux核心源碼放置在/usr/src/linux/目錄
- /var/cache/:程式運作過程中,産生的緩存檔案
- /var/lib/:程式運作過程中,需要使用到的資料檔案放置的目錄,例如:MySQL的資料庫放置到/var/lib/mysql/,而rpm的資料庫則放到/var/lib/rpm
- /var/lock/:并發鎖檔案,已經移動到/run/lock
- /var/log/:程式運作過程中,産生的日志檔案,例如:/var/log/messages、 /var/log/wtmp,為登入者的資訊
- /var/main:放置郵箱檔案,與/var/spool/mail/互為軟連接配接
- /var/run/:某些程式或者是服務啟動後,會将他們的PID放置在這個目錄,是/run的軟連接配接
- /var/spool/:放置的隊列等待執行的檔案資料,/var/spool/mqueue/,crontab放置在/var/spool/cron/