前言

本文是视频教程韩顺平 一周学会Linux部分章节的归纳总结,内容补充和错误纠正。

概念

Linux系统中的每个文件和目录都有一组权限,用于控制对它们的访问。这些权限分为三个类别:

  • 所有者(Owner)
  • 所属组(Group)
  • 其他人(Others)

权限

每个类别都有读(Read)、写(Write)和执行(Execute)权限。权限可以使用符号表示法来表示,其中每个类别都有一个字母表示权限:

  • r(读权限):表示可以读取文件内容或查看目录中的文件列表。
  • w(写权限):表示可以修改文件内容,或在目录中创建、删除和重命名文件。
  • x(执行权限):对于文件,表示可以执行文件作为可执行程序;对于目录,表示可以进入目录。

注意:如上面所说,如果你对一个文件拥有w权限,你可以修改这个文件,但是你并不能删除这个文件。删除这个文件的前提是你拥有文件所在目录的w权限

在Linux中权限有两种表示方法:

符号表示法

权限符号表示法的格式为:[所有者权限][所属组权限][其他人权限]

例如,rw-r--r--表示所有者具有读写权限,所属组和其他人只有读权限,数字表示法表示为644

数字表示法

权限在数字表示法中使用三位二进制数表示每个权限组的权限。每个权限对应一个二进制位,其中1表示有权限,0表示没有权限。例如:如果一个权限组的权限是rwx(即读、写和执行权限都有),它的二进制表示为111,对应的数字表示为7。

例如,644表示所有者具有读写权限,所属组和其他人只有读权限,即为110 100 100,符号表示法表示为rw-r--r--

命令

因为Linux的权限与组密不可分,所以在讲述权限管理的命令之前,我们会先提及一些组管理的相关命令。

以下一些命令可能需要root用户权限

组管理

创建

我们可以用下面的命令创建一个组,然后创建一个用户并指定组:

  1. groupadd 新组名:创建一个组
  2. useradd -g 用户组 新用户名:创建一个用户并指定用户组

当这个新创建的一个用户创建一个文件之后,文件的所有者就是该用户,所属组就是该用户所属的组

我们可以使用ls -l 指定文件/目录查看指定文件或目录的详细信息,其中就包括了权限信息,文件所有者和所属组信息。

修改

  1. chgrp 组名 文件名/目录名:修改指定文件或目录所属组,加上选项-R可以递归修改。

  2. usermod -g 组名 用户名:修改用户所在的组

扩展:usermod -d 路径 用户名:可以指定用户登录进入的初始化目录,其他是该用户拥有进入该目录的权限

查看

  1. id 用户名:可以查看用户ID信息,其中包括组ID
  2. /etc/group文件中,可以查看所有的组的信息(组名、组密码、组ID(GID)和组成员)

删除

groupdel 用户组:删除用户组

权限管理

查看权限

使用ls -l可以查看文件的详细信息,其中就包括了权限信息(权限信息为符号表示,如rw-r--r--),下面让我们看看具体示例

示例输出:drwxr-xr-x 2 root root 4096 2月 23 12:00 xml

  1. d:文件类型,d表示目录,-表示文件
  2. rwxr-xr-x:权限信息
  3. 2:如果是目录显示子目录数(不包括文件,包括隐藏目录...,所以一个空目录该数值是2),如果是文件则显示硬链接数
  4. root:用户
  5. root:组
  6. 4096:如果是目录则显示4096,如果是文件则显示文件大小(默认单位:字节)
  7. 2月 23 12:00:最后修改时间

扩展:在ls -l查看到详细信息,在权限信息前有一个别的字母(如drwxr-xr-x中的d),该字母表示文件的类型具体含义如下:

  • l:link 表示软链接,类似Windows的快捷方式
  • d:directory 表示目录
  • c:character device 字符设备,如鼠标,键盘
  • b:block device 块设备,如硬盘
  • -:普通文件
  • s:socket 套接字,表示该文件是一个进程间通信的通道,

修改权限

  1. chmod [u或g或o或a][+或-或=][权限] 文件名或者目录
    • u代表所有者,g代表所属组,o代表其他人,a代表所有人(前面三者的总和)
    • =直接修改,+增加,-减少
    • 示例chomd u=rwx,g=rx,o-x dogdog文件所有者权限修改为读写执行,所属组权限修改为读和执行,其他人减少执行权限
  2. chomd 数字表示法权限 文件:我们也可以使用数字表示法表示权限修改文件权限,让我们看看示例
    • chomd 777 dog:把dog文件的权限修改为rwxrwxrwx7是二进制111的十进制表示,详情请看概念
    • chomd 644 hello.txt:把hello.txt文件的权限修改为rw-r--r--,6是二进制110的十进制表示
  3. chown:修改文件或目录的所有者(Owner,我其实觉得翻译为拥有者或者主人更合适)
    • chown 用户名 文件或目录:修改指定文件或者目录的所有者
    • chown 用户名:组名 文件或目录:修改指定文件或者目录的所有者和组名
    • chown 用户名 -R 文件或目录:递归修改修改指定文件或者目录的所有者,一般用于修改整个目录下所有文件的所有者