你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Linux文件权限模型——chmod命令是如何工作的

[复制链接]
gaosmile 发布时间:2020-11-6 22:58
Linux中的Chmod命令用于更改或分配文件和目录的权限。在Linux/Unix系统中,文件和目录的可访问性是由文件所有权和权限决定的。在上一篇文章中,我们了解了如何使用chown命令管理文件和目录的所有权。在本教程中,我们将介绍chmod命令。
chmod命令(change mode的缩写)用于管理文件和目录权限,并确定谁可以访问它们。现在让我们深入了解文件和目录权限的本质,以及如何修改它们。
% W' x; F0 U+ r' c$ y# a& o8 F  }  C

, o+ N6 `# _6 n- u: fLinux权限  d9 m$ u8 ~  |% Y3 y# v& A+ \

# R# _6 `& V7 m* E7 f9 e+ o! F8 e4 A
, z! B. X) ]' r
为了更好地理解chmod命令是如何工作的,我们该谨慎地研究Linux文件权限模型。在Linux中,我们具有3种类型的文件权限:读(r),写(w)和执行(x)权限。这些权限确定哪些用户可以读取,写入或执行文件。您可以使用文本或八进制(数字)表示法来分配这些权限,我们将在本教程后面讨论。文件和目录可以属于文件(u),组(g)或其他(o)的所有者
  • u - 所有人的权限
  • g - 所有组的权限
  • o- 其他人的权限, T& {% S2 @+ k& v
使用ls -l命令以长格式的形式查看当前目录下所有可见文件的详细属性。该-l标志列出文件的权限。权限分为三组:用户(user)组(group)和其他(others)。为了更好地理解文件权限,我们将列出目录的内容,如下所示:linuxmi@linuxmi:~/www.linuxmi.com$ ls -l4 m  |# T" `2 Q$ ^' Z  m
微信图片_20201106225531.png ' }6 l. D. `' }; d  z( Z
从最左端开始,第一个字符/符号表示文件类型。一个连字符( - ) ,表示该文件是一个普通文件。符号d表示它是目录。符号l表示它是符号链接。其余的9个字符分成3个三元组,每个三元组带有三个符号r(read),w(write)和x(execute)。如前所述,第一部分指向所有者权限,第二部分指示组权限,最后一部分指定其他用户对该文件或目录具有的权限。从输出中,我们可以看到我们有4个文件和2个目录。让我们查看下第一个文件-rw-rw-r-- 1 linuxmi linuxmi 1087 10月 3 20:23 linuxmi.com.cpp对于第一个文件,-rw-rw-r–权限表示该文件的所有者具有读取和写入权限,该组还具有读取和写入权限,而其他用户仅具有读取权限。再看看目录的权限:drwxrwxr-x 3 linuxmi linuxmi 4096 10月 12 13:31 Linux迷我们可以看到目录和组的所有者拥有所有权限(读取,写入和执行),而其他用户仅具有读取和执行权限。在三重连字符符号-表示没有权限已被授予该文件,小组或其他用户的所有者。
; C6 Y; ?4 d* V  t- p0 q
3 d. `9 i* [5 y* X
9 ?$ T% C$ y  a; t9 _9 X) z: q
使用chmod命令设置文件和目录权限6 n% S/ Q0 Y3 j" D6 D% u

4 O/ {8 x' {6 d4 I
1 V! K  H! U( a) u. A+ c! W* B
在查看了文件权限以及如何查看它们之后,我们不再关注如何修改这些权限。Linux中的chmod命令用于使用文本(符号)或数字(八进制)表示法更改文件和目录权限。它采用以下语法:
$ chmod [选项]模式文件名
只有root用户或具有sudo特权的普通用户才能更改文件或目录权限。您可以在命令语法中传递多个文件或目录,并用空格分隔。现在让我们深入研究并查看chmod命令的不同示例。7 y& V* Y0 o' ~2 M% ^2 |
2 U! p- ]/ v% @: s7 f  Q0 H
- s, B4 Y3 X0 X9 Q5 P! g
示例1)使用数字符号分配权限
; n) i) |- C! j& E$ ~4 Y4 V  r0 t' n  O5 O3 z  }3 p1 z3 u- o: v

3 n" N) U0 i6 p- D6 _) s使用数字样式/符号设置权限时,请使用以下语法:$ sudo chmod [选项]数字值文件名数值可以为3或4个数字。但是,在大多数情况下,使用3个数字。读取,写入和执行权限采用以下值:

9 r2 M- k0 ?5 U' \9 K( k
  • 读取权限=> 4
  • 写权限=> 2
  • 执行权限=> 18 I: n! b9 @: K

& [& a% W% ]6 e+ J  C" x
权限值的总和,即在三个段中的每一个中的读取,写入和执行,都占给定文件或目录的完整权限。
+ E7 i7 D$ d1 K/ |% r
; B" R6 ^6 t5 ?! {- X" ]3 J/ h
' X( Q2 {/ r6 n0 ^& k: p& x
这是什么意思?
$ Y( G  C# U6 ~. A4 ^- W! f. r! Y8 g. p, F2 J" v9 A$ v3 H
) D* [) V/ {5 l, e! H2 j1 r' m% _
假设所有者具有读取,写入和执行权限,该组具有读取和执行权限,而其他用户仅具有读取权限,可以将其细分如下:u:rwx = 7( _+ H/ s/ W1 V: H4 O5 V, `
g:rx = 55 S' {- [- s7 K
o:r– = 4
因此,我们得到的值为754,作为给定文件的文件权限的数值。要将读取,写入和执行权限分配给所有者,而仅将读取权限分配给组和其他用户,请运行以下命令:$ chmod 744 www.linuxmi.com.txt要将所有权限分配给文件的所有者,请对该组读取和执行权限,而对其他用户则完全没有权限,请执行:$ chmod 750 www.linuxmi.com.txt要将所有权限分配给文件的所有者,请对该组具有读写权限,其他用户请运行以下命令:$ chmod 755 linuxmi.txt
5 [  }6 h5 u2 s9 v" O2 c: o. N7 D: B" @3 n4 {0 ]

% n+ w( U1 ~4 f' d- i: c示例2)递归分配目录权限
1 z) d: s" o' t7 K4 g. v
4 w% A2 n  ^* w
" f; K! Q! V4 o# ?
为目录分配权限时,请使用-R标志以递归方式为其目录和子文件夹分配权限。例如:$ chmod 755 -R 目录名$ chmod 755 -R /home/linuxmi/linux5 y4 y# J6 d4 l1 x3 e' J9 Y8 ?

' o3 X0 r( d6 L* {$ R

* f* X% n; L/ V示例3)使用文本表示法指定权限3 o$ s& T. _2 A- z. C

; x. D( S1 O* s

! {4 l" u( G1 a) l7 k( X1 f分配权限的另一种方法是使用文本表示法。在此方法中,chmod命令采用标志或符号,这些标志或符号代表语法中的所有者,组,其他或所有用户(u,g和o)。该方法不像以前的方法那样简单明了,应注意避免分配错误的权限。这是语法的样子$ chmod [选项] [ugoa] [– + =] [r,w,x]文件让我们分解一下。第一组参数[ugoa]指定权限将更改的用户类别
  • u:用户
  • g:组
  • o:其他
  • a:全部(包括以上所有内容)
    - p4 q. v9 u0 q: @+ s% o6 Z& j/ Z
如果省略了这个集合,那么默认选项是a选项。第二组选项–操作员选项[– + =] –确定是要添加权限还是要从用户类别中删除权限。选项删除
  • –     :该标志从指定的用户中删除文件权限。
  • +    :将权限添加/添加到指定用户。
  • =    :为指定的用户分配不同的权限,并删除该用户段的先前权限。
  • 4 u+ }, j$ ~  g3 \! E. D
  • 示例4)为文件分配读取权限
    / f( P% }0 u# Z

- p6 G& j/ U& U# n- G* N) D/ p$ chmod o = r 文件名上面的命令仅将用符号“ o”表示的其他用户分配给该文件的读取权限,并删除先前分配给' others '段的权限。取得具有以下权限的linuxmi.txtlinuxmi@linuxmi:~/www.linuxmi.com$ ls -l linuxmi.txt
  n' b% w. ~/ p6 j  I$ y. |/ ^-rwxrwxr-x 1 linuxmi linuxmi 1087 10月 3 20:23 linuxmi.txt
% g. z/ ]% e& L" \0 K; f
微信图片_20201106225535.png
2 T# k, g1 Y: M/ r. T5 T5 X2 f分配“others (o)”段的读权限,请仅运行linuxmi@linuxmi:~/www.linuxmi.com$ sudo chmod o=r linuxmi.txt9 Y& y/ Q" p# p
[sudo] linuxmi 的密码:* o( M3 J5 |, t) ?1 W  ?9 d9 L
linuxmi@linuxmi:~/www.linuxmi.com$ ls -l linuxmi.txt
9 n9 _& f' \3 v  R* e' U4 ~4 j-rwxrwxr-- 1 linuxmi linuxmi 1087 10月 3 20:23 linuxmi.txt

  |5 S" A" l" P* ]3 ~  U 微信图片_20201106225537.png $ W' B1 S% S$ P! @* {1 g& c
从输出中,我们可以看到已为“others”段分配了读取权限,而同时又失去了执行权限。这意味着=运算符将分配新的权限,而同时会删除以前的权限。
" h' X) K8 u2 [' Z% a$ Q) L& r, C
* K2 J# n( b6 H! l2 [( g
示例5)向文件和组所有者分配执行权限0 Z- l/ W1 z( {
+ H# e( Y8 L7 G$ O* B

; i! h2 \5 g3 H: [5 plinuxmi@linuxmi:~/www.linuxmi.com$ sudo chmod ug+x linuxmi.txt
' `- Q. V: M) x1 L  Vlinuxmi@linuxmi:~/www.linuxmi.com$ ls -l linuxmi.txt
8 c8 R* b2 y$ N9 P- P-rwxrwxr-- 1 linuxmi linuxmi 1087 10月 3 20:23 linuxmi.txt
上面的命令将执行权限添加到文件的所有者和组。使用我们的文件,它将变成:1 L! Y1 l6 H; c1 E3 m
微信图片_20201106225543.png ; h- v' Q2 [# x  v3 y
. H; A& _* E1 U! k

+ ~# p5 p/ o0 Q; G) Y示例6)为文件,组和其他分配不同的权限
& O* w1 m8 Y8 y* b9 f# ^3 I, x
0 O4 s) w& [1 W7 E- j6 ?  Q2 S9 I
, F$ v. }) F& a. g% W) V  y# {4 u& ~0 ^
sudo chmod u=rwx,g=rw,o=r filename上面的命令将所有权限分配给文件的所有者,将读写权限分配给组,仅将读取权限授予其他用户。
; e. v# _: B- }% A6 d1 b! Z 微信图片_20201106225540.png
+ c% F" [7 w* P& D9 T8 z# X% S) s/ h9 ]9 l* n+ N; G
注意:
( s8 p( Z- ]5 ?1 _. M4 d8 t/ q* M, z# Y
0 b2 C) d7 Z3 Y
如果在=运算符之后未指定任何权限,则将删除该用户段中的所有权限。
- G" l7 t6 s8 n# S/ L( B; B( \) R, i# C& L& Z" x6 K
% [7 _. U% w8 r# z- i3 a) U
示例7)删除其他用户的所有权限
4 ?5 `7 c0 ?! U3 A  v
& {5 X# y7 x3 [
" O# j$ R" [7 J+ v) Z2 ]
$ sudo chmod o= filenamesudo chmod o= linuxmi.txt$ sudo chmod o-rwx linuxmi.txt上面的命令从“其他”用户段中删除指定文件的所有权限。该命令与以下命令具有相同的作用:$ sudo chmod o-rwx filenamelinuxmi@linuxmi:~/www.linuxmi.com$ sudo chmod o= linuxmi.txt
* Q) r1 z  j' @/ d: `! `$ S" Zlinuxmi@linuxmi:~/www.linuxmi.com$ ls -l linuxmi.txt( u& k( z+ q2 R- ?% X7 s/ e# X! [: P
-rwxrw---- 1 linuxmi linuxmi 1087 10月 3 20:23 linuxmi.txt9 C# W$ C$ J! ~" L, s# M- e/ P+ W
linuxmi@linuxmi:~/www.linuxmi.com$ sudo chmod o-rwx linuxmi.txt
+ K8 ]8 Z, R0 Z3 f) O# \linuxmi@linuxmi:~/www.linuxmi.com$ ls -l linuxmi.txt
3 O: z- q( @( a% q-rwxrw---- 1 linuxmi linuxmi 1087 10月 3 20:23 linuxmi.txt

; S& u! U( M  e) _
微信图片_20201106225546.png 3 t& W1 Z1 @3 X# V6 C& ]: g

* J9 N6 z6 L  W" ^6 R' Y
% z0 H6 v  L% g2 y* O0 D
示例8)使用模板文件分配权限+ k% a7 d# `; V& H. N7 H* Q
) w# b' f1 l$ W: X& h

- T+ ^9 O% l+ K5 W) l6 t! x3 M0 \分配文件权限的另一种便捷方法是使用参考文件。在此方法中,您使用--reference=<模板文件> 选项将文件的权限设置为与另一个参考文件的权限相同。使用以下语法$ sudo chmod –reference=ref_file filename例如,要将linuxmi.txt的文件权限设置为与www.linuxmi.com.py的权限相同,请运行以下命令:$ sudo chmod --reference=www.linuxmi.com.py linuxmi.txt模板文件是www.linuxmi.com.py,将linuxmi.txt更改为模板文件相同的权限。
) Z4 ?) M3 q" R4 q 微信图片_20201106225549.png
& w8 J+ D6 F; J! _3 A# v$ k1 T, e
. j3 F. C. E; R0 u+ q
6 r( y" D2 B3 w* `  K
示例9)仅将执行权限分配给目录
% o6 J6 M+ T. l/ m) l; k& }* Q; q2 w6 [0 d9 M, z* F
# p0 o9 \0 ?1 I# |: p
假设我们有一个包含文件和子目录的目录,并且我们希望仅对目录分配执行权限,而不接触文件。因此,这可以通过使用以下chmod命令来实现,$ chmod a+X *如果您已经注意到,我们已经使用大写的X作为执行权限,以上命令将在当前工作目录的所有目录上设置执行权限。
& w2 c$ L3 I4 k; S# f# a4 B, R( H* b0 b1 o# F: B2 {3 b3 X

0 K9 ^+ A8 B8 x, J7 }: N. i总结7 N: I3 _1 w+ W' }. y( u/ `: d% q
! K6 `" c# M$ d. h
$ M8 U. O5 E7 v4 J% Q
这个话题暂时到此结束。我们查看了chmod命令,并了解了可以使用该命令更改文件权限的各种示例。. R7 E9 p: X, w2 I

  m- ]' Q/ \) M: q; G" y) G. T
赞 收藏 评论0 发布时间:2020-11-6 22:58

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版