[Linux] 文件和目录的权限管理

文章目录

  • 权限管理的基本思想
  • 改变文件所属用户
  • 改变文件所属用户组
  • 改变文件权限
    • 数字类型改变文件权限
    • 符号类型改变文件权限
  • 权限对于文件和目录的意义
    • 权限对于文件的意义
      • 读权限
      • 写权限
      • 执行权限
    • 权限对于目录的意义
      • 读权限
      • 写权限
      • 执行权限

权限管理的基本思想

Linux系统大体来说只有两种角色:用户、文件。从权限管理上说,用户只是文件的一种属性。

一个用户可以访问哪些文件,一个文件可以被哪些用户访问?从这个问题展开,就诞生出了Linux的权限管理思想。

理解权限管理的思想,需要站在文件的角度上看用户。从文件角度看用户,用户分为三类:用户、用户组、其它用户。

一个文件只能属于一个用户,也只能属于一个用户组,除此之外的所有用户,对文件来讲都是其它用户。

因此,讨论一个文件的访问权限,需要分为三种情况:

  1. 文件所属用户对该文件的访问权限如何?
  2. 文件所属用户组对该文件的访问权限如何?
  3. 除此之外的其它用户对该文件的访问权限如何?

使用命令ls -al查看文件属性,可以看到文件的权限信息:

dr-xr-x---.  15 root root     4096 5月  19 23:42 .
dr-xr-xr-x.  18 root root     4096 7月  14 2020 ..
-rw-------    1 root root    17723 5月  20 02:04 .bash_history
-rw-r--r--.   1 root root       18 12月 29 2013 .bash_logout
-rw-r--r--.   1 root root      176 12月 29 2013 .bash_profile
-rw-r--r--    1 root root      194 8月  28 2017 .bashrc
drwxr-xr--    9 git  git      4096 11月  9 2019 nginx-1.16.1

每一行就是一个文件(目录也是文件的一种类型),其对应的权限信息包含在第一列中,类似于drwxr-xr--这样的字符串。

第一个字母d表示文件类型,可以先忽略不看。

从第二个字母开始往后数九个rwxr-xr--,就是文件的权限信息,每三个字母一组:

  1. rwx:文件所属用户对该文件的访问权限
  2. r-x:文件所属用户组对该文件的访问权限
  3. r--:除此之外的其它用户对该文件的访问权限

其中,每组的三个字母分别代表“读权限(r)”、“写权限(w)”、“执行权限(x)”,字母-代表没有权限。

  1. 第一组rwx表示用户对该文件拥有“读、写、执行权限”。
  2. 第二组r-x表示用户组对该文件拥有“读、执行权限”,没有“写权限”。
  3. 第三组r--表示其它用户对该文件拥有“读权限”,没有“写、执行权限”。

理解了Linux权限管理的思想,以后登陆系统对文件进行访问操作时,就要时刻明白当前登陆用户对具体文件来说,他是个什么身份。是文件的所属用户,还是文件的所属用户组内的用户,又或者其它用户?不同身份对应着不同的权限!

在Linux系统中,还有一个非常特殊的用户root,这个用户是系统诞生时就会产生的用户,具有最高权限!啥事儿都能做!记住,root用户是拿来管理整个系统的,慎重使用!

改变文件所属用户

命令: chown  # change owner 的含义

用法:
chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:组名 文件或目录

参数:
-R : 递归(recursive)作用,即连同子目录下的所有文件都更改

范例:
chown bin install.log
chown root:root install.log

注意一点,用户必须是已经存在于系统中的账号,也就是在/etc/passwd中有记录的账户名称

改变文件所属用户组

命令: chgrp  # change group 的含义

用法:
chgrp [-R] 用户组名 文件或目录

参数:
-R : 递归(recursive)作用,即连同子目录下的所有文件和目录都更改

范例:
chgrp users install.log
chgrp users running.log startup.sh  # 多个文件同时改变

注意一点,用户组必须是已经存在于系统中的组,也就是在/etc/group中有记录的组名

改变文件权限

改变文件权限稍微复杂一点,有两种方式:

  1. 数字类型改变文件权限
  2. 符号类型改变文件权限

实际效果都是一样的,只是写法上略有区别而已。

大道至简,文件权限的精髓只有一句话:

Linux文件的基本权限就9个,分别是owner、group、others三种身份各有自己的read、write、execute权限

权限字符由此衍生:读权限r,写权限w,执行权限x,没有权限-

数字类型改变文件权限

权限数字对应产生:读权限4,写权限2,执行权限1,没有权限0

每种身份(owner、group、others)各自的三个权限(r、w、x)数字相加,可以得出一个唯一的值。

例如,要将文件startup.sh设置成这样的权限集合:

owner  = rwx = 4+2+1 = 7  # 可读、可写、可执行
group  = rwx = 4+2+1 = 7  # 可读、可写、可执行
others = --- = 0+0+0 = 0  # 不可读、不可写、不可执行

可以说该文件的权限是rwxrwx---(字符形式),也可以更简单的表达成770(数字形式)。

所以,数字类型改变文件权限的语法:

命令: chmod

用法:
chmod [-R] xyz 文件或目录

参数:
-R : 递归(recursive)作用,即连同子目录下的所有文件和目录都更改
xyz : 数字类型的权限属性,就是每种身份rwx权限数值相加的结果

范例:
# 文件 startup.sh 设置 rwxrwx--- 权限
chmod 770 startup.sh

# 文件 startup.sh 设置 rwxr-xr-x 权限
chmod 755 startup.sh

符号类型改变文件权限

这种方式更语义化些,也更加符合人类思考问题的方式。

要点就是两个:

  1. u代表user身份,用g代表group身份,用o代表others身份,用a代表全部身份
  2. +代表添加权限,用-代表除去权限,用=代表设置权限

所以,符号类型改变文件权限的语法:

命令: chmod

用法:
chmod [-R] 身份字母=符号权限 文件或目录

参数:
-R : 递归(recursive)作用,即连同子目录下的所有文件和目录都更改

范例:
# 文件 startup.sh 设置 rwxr-xr-x 权限
chmod u=rwx,g=rx,o=rx startup.sh
chmod u=rwx,go=rx startup.sh  # 权限一样,g和o可以简写到一起

# 文件 startup.sh 给所属用户组添加写权限
chmod g+w startup.sh

# 文件 startup.sh 除去所有人的执行权限
chmod a-x startup.sh

权限对于文件和目录的意义

Linux的世界,一切皆是文件,目录也是文件。

但是站在用户实际使用的角度上,把文件和目录区分对待,还是很有好处的。

区分文件和目录,可做如下定义:

  1. 文件是存放实际数据的地方
  2. 文件和文件名称要分开理解
  3. 目录是存放文件名称的集合

系统寻找文件是根据文件名称去搜索的,文件名称就相当于文件的指针。

文件名称和目录有强烈的关联性,一个文件名称必然要存放于一个具体目录中。

同理,目录也是一种特殊的文件,所以一个目录名称必然也会存在于一个父目录中。

以此类推,最终可以到达Linux顶层的根目录/,根目录是一个非常特殊的存在,可以说/就是Linux世界的起源!

权限对于文件的意义

读权限

可读取该文件的实际内容,这个很好理解,没什么好解释的。

执行cat命令需要文件的读权限。

写权限

可以编辑、新增、修改该文件内容,但是不能删除该文件。

因为对于文件来说,rwx权限都是针对“文件内容”来说的,而删除文件需要的是能够删除“文件名称”的权限,文件名称是不属于文件内容的。

执行vim命令需要文件的写权限。

执行权限

该文件可以被系统执行!更确切的说,是该文件的实际内容可以被系统执行。通俗理解,就是文件内容是可以被系统理解的一段程序代码。

最常见的可被执行文件通常都是类似于xxx.sh这样的,文件名称会习惯性的以.sh作为后缀结尾,但这只是一种人为的习惯,跟执行权限x没有任何联系!

文件名称无论怎么命名,只要用户对这个文件有x权限,就可以让系统执行该文件,前提是系统认识该文件的实际内容。

执行bash命令需要文件的执行权限。

权限对于目录的意义

读权限

可以读取目录结构列表,也就是目录中的存放的文件名称,以及文件的一些基本属性。

执行ls命令需要目录的读权限。

写权限

可以更改该目录的结构列表,也就是对该目录存放的文件名称进行变更操作。

  1. 创建新的文件和子目录
  2. 删除已存在的文件和子目录,无视文件本身的权限
  3. 对文件和子目录进行重命名
  4. 移动文件和子目录的位置

执行mkdir命令需要目录的写权限。

执行权限

目录执行权限和文件执行权限完全不是一个概念,没有可比性。

用户对某个目录具有执行权限,其意思是用户可以通过cd命令进入该目录,将这个目录变成工作目录。

所谓工作目录就是用户当前所在的目录,可以通过命令pwd显示出来。

如果用户不具备该目录的x权限,就不能切换到该目录下,也就无法让系统执行该目录下的可执行文件。

你可能感兴趣的:(Linux,linux,权限,权限管理,文件权限,目录权限)