Linux 基础操作(中)

118 阅读2分钟

日新计划6月更文 Day 5

  在上一篇使用ls -l查看文件详细信息的时候,我们看到的结果大致如下:

ls -l
-rw-r--r-- cat cat  0 B Sun Jun  4 19:36:41 2023 bar
drwxr-xr-x cat cat 40 B Sun Jun  4 19:36:36 2023 foo

  一开始的十个字符表示这个文件的类型与权限:

  • 第一位表示文件类型,如普通文件(-)、目录(d)、字符文件(c)、块文件(b)、符号链接(l)等
  • 后九位分三组,三组分别表示文件所有者、文件所在组、其他用户对文件是否有读取(r)、写入(w)、执行(x)权限(-表示没有对应权限)

  后面是文件的所有者与所在组、大小、修改时间与文件名。

  1. 可使用id查看当前用户与该用户所在组

  可以使用chmod命令修改文件权限,其其修改参数应符合[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+,如:

  • 直接使用权限代码覆盖文件权限:

    # 将 foo 的权限改为 rwxr-x---
    chmod 750 foo
    
  • 使用“ugoa”+“+-=”+“rwxXst”的方式增删改某组权限:

    # 去掉 foo 所在组(g)和其他用户(o)的写(w)权限
    chmod go-w foo
    
  1. "权限代码"的计算方法(以“rwxr-xr-x”为例):
    • 将该九位字符转换为是否有该权限的二进制数111101101
    • 将该二进制数转换为八进制755
  2. “权限代码”不可直接进行算术运算,增加权限应进行按位或运算;删除权限则更加复杂

  在上述 chmod 的使用中,除了“rwx”我们还发现了“s”和“t”这两个怪东东,这是“SUID”、“SGID”与“SBIT”:

  • SUID:“Set UID” ,文件所有者和执行者对该文件有 r 和 x 权限且时,设置 SUID 的文件被执行时执行者暂时取得文件所有者的权限(仅对二进制文件有效),用于passwd(修改密码)、sudo(管理员权限审批)等
  • SGID:“Set GID” ,与 SUID 类似,使用者可暂时进入该文件所在组(可用于目录)
  • SBIT:“Sticky Bit”,仅对目录有效,使用者对该目录有 w 和 x 权限时,可在该目录下创建属于自己的文件和目录且仅自己和root有权删除,常用于/tmp等全局公共读写目录

  当然还有更细化的权限管理方式——ACL(Access Control Lists,访问控制列表),可使用getfaclsetfacl查看/修改文件的ACL。