神兵利刃:shell 文件权限学习, sudo | ls | chmod

“这是我参与更文挑战的第14天,活动详情查看: 更文挑战

前文神兵利刃:shell 初入门 介绍了一些 shell 的基础知识,本文我们将学习权限相关的操作。

root usersudo

根用户(root user)在类 Unix 系统中是非常特殊的一类用户。它几乎不受任何限制,他可以创建、读取、更新和删除系统中的任何文件。

用根用户直接登录系统是非常危险的,因为可能会因为某些错误的操作而破坏系统。

通常并不会以根用户的身份直接登录系统,我们只在需要的时候使用 sudo 命令,它的作用是让您可以以 su(super userroot 的简写)的身份执行一些操作。

当您遇到拒绝访问(permission denied)的错误时,通常是因为此时您必须是根用户才能操作。然而,请再次确认您是真的要执行此操作。一般执行 sudo 命令时,都需要你输入当前用户的密码。

查看文件的操作权限 ls -l

通过 ls -l 可以查看文件权限,输出效果如下:

shellLearn:~$ ls -l 
drwxr-xr-x   4 oracle dba       4096 May 20 11:47 oralog1
drwxr-x---  18 root   root      4096 May 20 13:51 root
复制代码

可以看到会有类似的 drwxr-xr-xdrwxr-x--- 10个字母组成的字符串出现在第一列,这是什么含义呢。

文件权限解读

首先我们需要知道用户组的概念。某个文件归属者用户 useruser 又属于某个用户组 user group ,那么自然也会有不在用户组内的其他用户 other user 的概念。

每个文件对应用户或者用户组又有三种操作 读(r)写(w)执行(x)。以下各个字段相对应的权限含义。

permission.png

具体到 drwxr-xr-x

  • d 表示文件类型是目录
  • rwx :第2-4位表示这个文件的属主拥有的权限。r是读、w是写、x是执行
  • r-x :第5-7位表示和这个文件属主所在同一个组的用户所具有的权限,只有读和执行。
  • r-x :第8-10位表示其他用户所具有的权限,只有读和执行。

ls -al 输出内容的各段含义

drwxr-xr-x   4 oracle dba       4096 May 20 11:47 oralog1
复制代码

表示 oralog1 是个目录,其下面有4个文件(夹),其拥有者是 oracle,文件大小为 4096 字节 ,创建时间是 5月20日11:47oracle 拥有读写执行的权限,和 oracle 所在同一个 dba 组里的用户拥有只读和执行权限,剩下其他用户拥有只读和执行权限。

具体明细解释如下:

  • 第1字段: 文件属性字段

文件属性字段总共有10个字母组成,第一个字母表示文件类型。其他字段含义上述已经介绍。
请注意,一个目录或者说一个文件夹是一个特殊文件,这个特殊文件存放的是其他文件和文件夹的相关信息。

文件类型有以下几种

`d` 是目录文件
`l` 是链接文件
`-` 是普通文件
`p` 是管道
复制代码
  • 第2字段:文件硬链接数或目录子目录数
  • 第3字段: 文件拥有者
  • 第4字段: 文件拥有者所在的组
  • 第5字段: 文件文件大小(以字节为单位)
  • 第6字段: 文件创建月份
  • 第7字段: 文件创建日期
  • 第8字段: 文件创建时间
  • 第9字段: 文件名 (如果是一个符号链接,那么会有一个 “->”箭头符号,后面根一个它指向的文件)

修改文件的操作权限 chmod

如果需要修改文件的权限,我们需要用到 chmod 命令。 它的使用方式简单如下:

chmod options fileName
复制代码

该命令将根据 options 的配置 对 fileName 做操作,配置有两种方式。

通过字符标志 symbols 输入控制

chmod u=rwx,g=rx,o=r myfile
复制代码

以上操作的含义是将 myfile的权限修改为文件拥有者可以读写执行,其所在的用户组可以读和执行,其他用户只能读。解释如下:

  • 字母 ugo 代表 usergroupother
  • 等号(=)赋值相应的权限。
  • 字母 rwx 分别代表 readwriteexecute
  • 逗号用来分隔不同用户的权限,中间没有任何空格。

通过八进制数(0-7)控制

以上操作等同于:

chmod 754 myfile
复制代码

这是为什么呢。原因如下:

数字 754 分别按顺序一一代表着 usergroupothers 的权限。每个数字都是4210这四个数字的求和。

  • 4 代表 读read
  • 2 代表 写write
  • 1 代表 执行execute
  • 0 代表 无权限no permission

所以 74+2+1 (read, write, execute)的求和,54+0+1 (read, no write, execute), 44+0+0 (read, no write, no execute)。

小结致谢

本文主要学习了:

  • 用户组和根用户的概念
  • 文件的权限的查看命令
  • 文件权限的修改命令

学习之后就明白了常见的 777 代表是什么含义了。

本文有参考以下链接,一并致谢:

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享