Linux—目錄文件屬性和權限管理詳解


技術公眾號:后端技術解憂鋪
關注微信公眾號:CodingTechWork,一起學習進步。

引言

  Linux中了解用戶和用戶組概念后,我們就需要對文件目錄進行賦權操作,以便於文件訪問權限的管控,這就涉及到文件的屬性,那用戶和用戶組,以及讀寫執行權限對於文件來說具有數據安全性的影響。

文件屬性

ls介紹

  常用命令有:ls -al [file],其中:lslist的意思,顯示文件的文件名及相關屬性。-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. 第1列:表示文件是目錄、文件、或鏈接文件等。后面是3個為一組,即為文件權限,其中r表示read可讀,w表示write可寫,x表示execute可執行,且位置固定rwx,若無對應權限則為-。第1組為文件所有者權限,第2組為同用戶組的權限,第3組為其他非本用戶組的權限
  2. 第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個,分別是ownergroupothers三種身份帶上各自的readwriteexecute權限,如[-rwxrwxrwx],3個一組,每一組我們都可以使用數字來對應。

權限 說明 數字
r read讀權限 4
w write寫權限 2
x execute執行權限 1

  每種身份(ownergroupothers)對應的(readwriteexecute)權限都需要累加。如[-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符號方式

  每種身份ownergroupothers,其實還對應縮寫ugo。另外,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系統文件的三種身份(所有者、用戶組與其他人)至關重要,學習這三種身份對應的三個權限(讀、寫、執行)是我們對於變更權限的基礎。再加以使用chgrpchownchmod命令去實操,發現玩轉文件屬性和權限不再那么難了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM