程序员都应该知道的linux文件权限

1,355 阅读5分钟

linux文件权限

小伙伴们,平时我们在linux上查看文件,例如执行ls-l查看文件:

[root@bogon data]# ls -l
总用量 8
drwxr-xr-x  5 root  root   114 5月  20 11:48 51la-dwz
drwxr-xr-x. 9 root  root   148 5月  19 11:06 app
drwxr-xr-x  4 root  root    48 2月  19 15:45 design
-rwxrwxrwx  1 root  root   365 5月  28 10:34 generate.sh
drwxr-xr-x. 2 root  *r*oot  4096 9月  25 2019 install
drwxr-xr-x. 4 mysql mysql   30 9月  25 2019 mysql
drwxr-xr-x  2 root  root    22 4月  22 11:06 scirpt

前面这坨像 drwxr-xr-x 是啥意思?

这其实是表示 文件权限属性,

解释

简单来说,文件权限属性通过十个字母表示这是文件还是文件夹,它的 根用户的读、写、执行权限怎样,同组用户的读、写、执行权限怎样以及其他用户的读、写、执行权限怎样,其中,读权限 简写为r(Read), 写权限w(Write), 执行权限简写为x(Execute)

第一个字母表示文件类型,如果这个字母是一个减号"-",则说明该文件是一个普通文件.字母"d"表示该文件是一个目录,字母"d",是dirtectory(目录)的缩写 后面九个字母分为三组,第2-4位表示root用户对该文件的操作权限,第5-7位代表同组用户对该文件的操作权限,剩下3位代表当前用户对该文件的操作权限。没有权限的那位用 - 表示

举例说明

如上: 51la-dwz 的文件权限为 drwxr-xr-x , 表明这是一个文件夹,root用户拥有读写执行权限,同组用户拥有读与执行权限,当除此之外的用户,只有执行权限。 generate.sh 的文件权限为 -rwxrwxrwx,表明这是一个文件,所有用户都拥有读写与执行权限。但要注意的是这是十分不安全的,容易受到攻击。

如何修改文件权限

1、通过修改权限数值来修改文件/文件夹权限

Linux中,我们倾向用修改权限数值的方式来修改某个文件或文件夹的权限

如何用数值表示权限

一种很简单的方式,例如作为root用户,权限 有、读写、执行,即rwx, 用二进制表示当位权限,有则用1表示,无则0,如只有读权限,即 rwx,可表示为二进制 111, 换算为十进制即7。相似的,假如同组用户权限为 r-x, 则可表示为二进制 101,换算为十进制即5,假如其他用户权限为r--,则可表示为二进制 100,换算为十进制即4。 那么这个文件的权限用数值可表示为754

如何用修改文件权限

可通过 chmod xxx file 的形式表示对该文件/文件夹修改权限 xxx为数值权限值,如上面的754file为文件名或文件路径,如上面的generate.sh文件

假如我要改下generate.sh的权限为-rwxr-xr--我就可以通过 chmod 754 generate.sh 修改。

但要注意,修改权限一定要慎重,涉及到安全问题。尤其是有些小伙伴为了开执行权限,看到网上一些文章说chmod 777添加权限,但要知道这样的结果是任何人都能执行,这样有时候的后果是毁灭性的

2、用一般格式修改文件/文件夹权限

格式 chmod [可选项] <mode> <file...> 直接来看个实际用法:

我想设置所有用户可读取文件 a.conf

chmod ugo+r a.confchmod a+r a.conf

疑惑吗,看完下面你就懂了,我们主要关注是中间表示权限的部分,如ugo+ra+r, 每一个字母跟符号都有特定的作用

参数说明:
[可选项]
-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        显示版本信息
[mode]
  权限设定字串,详细格式如下 :
  [ugoa...][[+-=][rwxX]...][,...],
  其中
  [ugoa...]
  u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示所有(包含上面三者)。
  [+-=]
  + 表示增加权限,- 表示取消权限,= 表示唯一设定权限。
  [rwxX]
  r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。

[file...] 文件列表(单个或者多个文件、文件夹)

简单来说就是对不同用户增加不同权限 如给所有用户开放可读权限,给根用户及同组用户开放写权限,给其他用户取消写权限,可表示为:

chmod a+r,ug+w,o-w a.conf

本文使用 mdnice 排版