關注微信公眾號:CodingTechWork,一起學習進步。
引言
Linux中了解用戶和用戶組概念后,我們就需要對文件目錄進行賦權操作,以便於文件訪問權限的管控,這就涉及到文件的屬性,那用戶和用戶組,以及讀寫執行權限對於文件來說具有數據安全性的影響。
文件屬性
ls介紹
常用命令有:ls -al [file]
,其中:ls
是list
的意思,顯示文件的文件名及相關屬性。-al
表示列出所有的文件詳細的權限和屬性(也包含了隱藏文件,即文件名第一個自復位"."
的文件)
ls示例
[root@linux-01 ~/test01]# ls -al t1.txt
-rw-r----- 1 root root 33 2月 8 11:07 t1.txt
[root@linux-01 ~/test01]# ls -al
總用量 20
drwxr-x--- 4 root root 4096 2月 8 11:07 .
dr-xr-x---. 11 root root 4096 2月 8 11:07 ..
drwxr-x--- 2 root root 4096 2月 8 11:04 t01
drwxr-x--- 2 root root 4096 2月 8 11:04 t02
-rw-r----- 1 root root 33 2月 8 11:07 t1.txt
rwx
讀(r
)、寫(w
)、執行(x
)這三種權限一點也不陌生了。對於文件和目錄有着不一樣的意義。
文件rwx
r
:read,讀權限,可讀取文件的實際目錄,如讀取這個文件的內容。w
:write,寫權限,可以新增或編輯該文件的內容,但不具備刪除該文件的權限。x
:execute,執行權限,表示該文件具有可以被系統執行的權限。
目錄rwx
r
:read,讀權限,表示具有讀取目錄結構列表的權限,如查詢該目錄下的文件名數據,使用ls
命令等。w
:write,寫權限,表示具有更改該目錄結構列表的權限,如新建新的文件和子目錄、刪除已經存在的文件和目錄、對已存在的文件或目錄進行重命名、轉移該目錄中的文件和子目錄位置等。x
:execute,執行權限,表示用戶能夠進入該目錄成為工作目錄,如cd
命令。
文件屬性
屬性說明
- 第1列:表示文件是目錄、文件、或鏈接文件等。后面是3個為一組,即為文件權限,其中
r
表示read可讀,w
表示write可寫,x
表示execute可執行,且位置固定rwx
,若無對應權限則為-
。第1組為文件所有者權限
,第2組為同用戶組的權限
,第3組為其他非本用戶組的權限
。 - 第2列:
示例1詳解
drwxr-x--- 2 root root 4096 2月 8 11:04 t01
d
:表示目錄;rwxr-x---
:表示目錄所有者權限為(rwx)可讀、可寫、可執行,同用戶組的權限為(r-x)可讀、不可寫、可執行,其他非本用戶組的權限為(---)無。2
:表示有2個目錄名連接到此節點(i-node),每個目錄都會將它的權限與屬性記錄到文件系統的i-node中,不過我們使用的目錄樹卻是使用文件名來記錄,所以每個目錄名就會連接到一個i-node,這個屬性就是記錄有多少不同的目錄名連接到相同的一個i-node中。root
:表示這個目錄的所有者賬號是root。root
:表示這個目錄的所屬用戶組是root。4096
:表示這個目錄的容量大小是4096B,默認單位為B。2月 8 11:04
:表示這個目錄的創建文件日期或者最近的修改日期是2月8日11點4分。t01
:表示該目錄名為t01。
示例2詳解
-rw-r----- 1 root root 33 2月 8 11:07 t1.txt
-
:表示為文件。rw-r-----
:表示文件所有者權限為(rw-)可讀、可寫、不可執行,同用戶組的權限為(r--)可讀、不可寫、不可執行,其他非本用戶組的權限為(---)無。1
:表示有1個文件連接到此節點(i-node)。root
:一個i-node中。root
:表示這個文件的所有者賬號是root。root
:表示這個文件的所屬用戶組是root。33
:表示這個文件的容量大小是33B。2月 8 11:07
:表示這個目錄的創建文件日期或者最近的修改日期是2月8日11點7分。t1.txt
:表示該文件名為t1.txt。
改變屬性
chgrp改變所屬用戶組
被改變的組名必須在/etc/group
文件內存在。若不在,使用該命令時,會報錯。
[root@linux-01 ~/test01]# ls -al t1.txt
-rw-r----- 1 root root 33 2月 8 11:07 t1.txt
[root@linux-01 ~/test01]# chgrp u3 t1.txt
[root@linux-01 ~/test01]# ls -al t1.txt
-rw-r----- 1 root u3 33 2月 8 11:07 t1.txt
[root@linux-01 ~/test01]# chgrp u4 t1.txt
chgrp: 無效的組:"u4"
[root@linux-01 ~/test01]# ls -al t1.txt
-rw-r----- 1 root u3 33 2月 8 11:07 t1.txt
其中,用戶組可以改成u3,但是不可以改成u4。我們查看/etc/group
中是否包含這些組。
[root@linux-01 ~/test01]# grep 'u3' /etc/group
u3:x:992:
[root@linux-01 ~/test01]# grep 'u4' /etc/group
[root@linux-01 ~/test01]#
chown改變文件所有者
被改變的用戶名必須在/etc/passwd
文件內存在。若不在,使用該命令時,會報錯。
[root@linux-01 ~/test01]# ls -al t1.txt
-rw-r----- 1 root u3 33 2月 8 11:07 t1.txt
[root@linux-01 ~/test01]# chown u3 t1.txt
[root@linux-01 ~/test01]# ls -al t1.txt
-rw-r----- 1 u3 u3 33 2月 8 11:07 t1.txt
[root@linux-01 ~/test01]# chown u4 t1.txt
chown: 無效的用戶: "u4"
[root@linux-01 ~/test01]# ls -al t1.txt
-rw-r----- 1 u3 u3 33 2月 8 11:07 t1.txt
其中,所屬用戶可以改成u3,但是不可以改成u4。我們查看/etc/passwd
中是否包含這些組。
[root@linux-01 ~/test01]# grep 'u3' /etc/passwd
u3:x:996:992::/home/u3:/bin/bash
[root@linux-01 ~/test01]# grep 'u4' /etc/passwd
[root@linux-01 ~/test01]#
當然,我們也可以使用chown對用戶和用戶組同時賦權。
[root@linux-01 ~/test01]# ls -al t1.txt
-rw-r----- 1 u3 u3 33 2月 8 11:07 t1.txt
[root@linux-01 ~/test01]# chown u1:u1 t1.txt
[root@linux-01 ~/test01]# ls -al t1.txt
-rw-r----- 1 u1 u1 33 2月 8 11:07 t1.txt
遞歸賦權
若遇到遞歸目錄需要賦權,我們可以通過chown [-R] 賬號名稱 目錄
的方式進行賦權。
[root@linux-01 ~/test01]# chown u2:u2 *
[root@linux-01 ~/test01]# ls -al
總用量 20
drwxr-x--- 4 root root 4096 2月 8 11:07 .
dr-xr-x---. 11 root root 4096 2月 9 00:01 ..
drwxr-x--- 2 u2 u2 4096 2月 8 11:04 t01
drwxr-x--- 2 u2 u2 4096 2月 8 11:04 t02
-rw-r----- 1 u2 u2 33 2月 8 11:07 t1.txt
[root@linux-01 ~/test01]# cd t01
[root@linux-01 ~/test01/t01]# mkdir t0101
[root@linux-01 ~/test01/t01]# cd ..
[root@linux-01 ~/test01]# chown u2:u2 *
[root@linux-01 ~/test01]# ll
總用量 12
drwxr-x--- 3 u2 u2 4096 2月 9 15:18 t01
drwxr-x--- 2 u2 u2 4096 2月 8 11:04 t02
-rw-r----- 1 u2 u2 33 2月 8 11:07 t1.txt
[root@linux-01 ~/test01]# cd t01
[root@linux-01 ~/test01/t01]# ll
總用量 4
drwxr-x--- 2 root root 4096 2月 9 15:18 t0101
[root@linux-01 ~/test01/t01]# cd ..
[root@linux-01 ~/test01]# chown -R u2:u2 *
[root@linux-01 ~/test01]# cd t01/
chmod改變文件權限
可以通過使用chmod
命令對文件權限作出變更,有兩種使用形式,一種是使用數字,另一種使用符號。
chmod數字方式
計算方式
上述總結中,我們了解到文件的基本權限有9個,分別是owner
,group
,others
三種身份帶上各自的read
、write
、execute
權限,如[-rwxrwxrwx]
,3個一組,每一組我們都可以使用數字來對應。
權限 | 說明 | 數字 |
---|---|---|
r | read讀權限 | 4 |
w | write寫權限 | 2 |
x | execute執行權限 | 1 |
每種身份(owner
,group
,others
)對應的(read
、write
、execute
)權限都需要累加。如[-rw-r--r--]
,該文件的權限數字是644
,計算方式如下:
owner
=rw-=4+2+0=6;group
=r--=4+0+0=4;others
=r--=4+0+0=4;
使用語法
語法:
chmod [-R] xyz 文件或目錄
參數:
-R
:進行遞歸更改,連同子目錄下的所有文件都會更改權限。xyz
:表示數字類型的權限屬性,即rwx
對應的屬性數值相加。
示例
[root@linux-01 ~/t1]# ls -al test1.txt
-rw-r----- 1 root root 0 3月 7 11:13 test1.txt
[root@linux-01 ~/t1]# chmod 644 test1.txt
[root@linux-01 ~/t1]# ls -al test1.txt
-rw-r--r-- 1 root root 0 3月 7 11:13 test1.txt
原權限為[-rw-r-----]
,將其改為本用戶可讀寫,其他都只是可讀,那就改為[-rw-r--r--]
即數字為644。
chmod符號方式
每種身份owner
,group
,others
,其實還對應縮寫u
、g
、o
。另外,a
代表all
,就是所有身份。
命令 | 身份 | 操作 | 權限 | 對象 |
---|---|---|---|---|
chmod | u g o a |
+(加入) -(除法) =(設置) |
r w x |
文件或目錄 |
使用語法
語法:
chmod u=rw,g=r,o=x 文件目錄
chmod u+rw,g-x,o+r 文件目錄
chmod a-x 文件目錄
示例
[root@linux-01 ~/t1]# ls -al test1.txt
-rw-r--r-- 1 root root 0 3月 7 11:13 test1.txt
[root@linux-01 ~/t1]# chmod u+x,o+w test1.txt
[root@linux-01 ~/t1]# ls -al test1.txt
-rwxr--rw- 1 root root 0 3月 7 11:13 test1.txt
[root@linux-01 ~/t1]# chmod a+x test1.txt
[root@linux-01 ~/t1]# ls -al test1.txt
-rwxr-xrwx 1 root root 0 3月 7 11:13 test1.txt
[root@linux-01 ~/t1]# chmod a-wx test1.txt
[root@linux-01 ~/t1]# ls -al test1.txt
-r--r--r-- 1 root root 0 3月 7 11:13 test1.txt
[root@linux-01 ~/t1]# chmod o+wx test1.txt
[root@linux-01 ~/t1]# ls -al test1.txt
-r--r--rwx 1 root root 0 3月 7 11:13 test1.txt
chmod參數詳解
[root@linux-01]# chmod --help
用法:chmod [選項]... 模式[,模式]... 文件...
或:chmod [選項]... 八進制模式 文件...
或:chmod [選項]... --reference=參考文件 文件...
Change the mode of each FILE to MODE.
With --reference, change the mode of each FILE to that of RFILE.
-c, --changes like verbose but report only when a change is made
-f, --silent, --quiet suppress most error messages
-v, --verbose output a diagnostic for every file processed
--no-preserve-root do not treat '/' specially (the default)
--preserve-root fail to operate recursively on '/'
--reference=RFILE use RFILE's mode instead of MODE values
-R, --recursive change files and directories recursively
--help 顯示此幫助信息並退出
--version 顯示版本信息並退出
總結
了解學習Linux系統文件的三種身份(所有者、用戶組與其他人)至關重要,學習這三種身份對應的三個權限(讀、寫、執行)是我們對於變更權限的基礎。再加以使用chgrp
、chown
和chmod
命令去實操,發現玩轉文件屬性和權限不再那么難了。