SRE云计算运维之基础篇二:权限管理,VIM工具,文件查询及shell基础
2025-08-22 15:59:37,

目录

简单总结一下Linux中的权限

1.首先介绍一下关于Linux中的用户:
Linux中每个用户是通过 User Id (UID)来唯一标识的,且Linux中可以将一个或多个用户加入用户组中,用户组是通过Group ID(GID) 来唯一标识的。在这其中我们需要明白用户和组之间的关系。

  • 用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建
    和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
  • 用户的附加组(supplementary group): 一个用户可以属于零个或多个辅助组,附属组
    2.用户和组的主要配置文件:
* /etc/passwd:用户及其属性信息(名称、UID、主组ID等)
* /etc/shadow:用户密码及其相关属性
* /etc/group:组及其属性信息
* /etc/gshadow:组密码及其相关属性

passwd文件格式:

etc/passwd
* login name:登录用名(wang)
* passwd:密码 (x)
* UID:用户身份编号 (1000)
* GID:登录默认所在组编号 (1000)
* GECOS:用户全名或注释
* home directory:用户主目录 (/home/wang)
* shell:用户默认使用shell (/bin/bash)

gshdow文件格式:

etc/gshdow
* 群组名称:就是群的名称
* 群组密码:
* 组管理员列表:组管理员的列表,更改组密码和成员
* 以当前组为附加组的用户列表:多个用户间用逗号分隔

shadow文件格式:

etc/shadow
* 登录用名
* 用户密码:一般用sha512加密
* 从1970年1月1日起到密码最近一次被更改的时间
* 密码再过几天可以被变更(0表示随时可被变更)
* 密码再过几天必须被变更(99999表示永不过期)
* 密码过期前几天系统提醒用户(默认为一周)
* 密码过期几天后帐号会被锁定
* 从1970年1月1日算起,多少天后帐号失效

3.用户和组管理常用命令
用户管理命令:

* useradd:添加用户
* usermod:修改用户属性
* userdel:删除用户

格式:

user[options] [options] username
useradd -r  -u 1001 mqh #添加用户
usermod -u 1002 mqh #修改用户属性
userdel -f mqh #删除用户

添加用户常见选项

-u UID 
-o 配合-u 选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r 创建系统用户 CentOS 6之前: ID<500,CentOS7 以后: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
-p 指定加密的密码

修改用户属性常见选项:

-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 ! 
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限,即宽限期

删除用户常见选项:

-f, --force   强制
-r, --remove 删除用户家目录和邮箱

组命令


* groupadd
* groupmod
* groupdel
group[options] [options] groupname
groupadd -g  -r 1001 mqh #添加组
groupmod -g 1002 mqh #修改组属性
groupdel -f mqh #删除组

组的常用选项

etc/passwd
* login name:登录用名(wang)
* passwd:密码 (x)
* UID:用户身份编号 (1000)
* GID:登录默认所在组编号 (1000)
* GECOS:用户全名或注释
* home directory:用户主目录 (/home/wang)
* shell:用户默认使用shell (/bin/bash)
0

添加/修改用户密码

etc/passwd
* login name:登录用名(wang)
* passwd:密码 (x)
* UID:用户身份编号 (1000)
* GID:登录默认所在组编号 (1000)
* GECOS:用户全名或注释
* home directory:用户主目录 (/home/wang)
* shell:用户默认使用shell (/bin/bash)
1

常见选项

etc/passwd
* login name:登录用名(wang)
* passwd:密码 (x)
* UID:用户身份编号 (1000)
* GID:登录默认所在组编号 (1000)
* GECOS:用户全名或注释
* home directory:用户主目录 (/home/wang)
* shell:用户默认使用shell (/bin/bash)
2

查看用户相关id信息

etc/passwd
* login name:登录用名(wang)
* passwd:密码 (x)
* UID:用户身份编号 (1000)
* GID:登录默认所在组编号 (1000)
* GECOS:用户全名或注释
* home directory:用户主目录 (/home/wang)
* shell:用户默认使用shell (/bin/bash)
3

文件权限管理

程序访问文件时的权限,取决于此程序的发起者。

  • 进程的发起者,同文件的属主:则应用文件属主权限
  • 进程的发起者,属于文件属组;则应用文件属组权限
  • 应用文件“其它”权限
    文件权限说明
    举例:-rwxrw----
    从右往左看,一共10个字符,分成三段,第一段“---”代表的是“o”及other,表其他组和用户,第二段“rw-”代表的是“g”及group,表文件所属的组,第三段“rwx”代表的是“u”及owner,表文件所属的主(用户),第四段“-”代表文件类型。
etc/passwd
* login name:登录用名(wang)
* passwd:密码 (x)
* UID:用户身份编号 (1000)
* GID:登录默认所在组编号 (1000)
* GECOS:用户全名或注释
* home directory:用户主目录 (/home/wang)
* shell:用户默认使用shell (/bin/bash)
4

对文件的权限:

  • r 可使用文件查看类工具,比如:cat,可以获取其内容
  • w 可修改其内容,文件的是否被删除和文件的权限无关
  • x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)
    文件权限常见组合
etc/passwd
* login name:登录用名(wang)
* passwd:密码 (x)
* UID:用户身份编号 (1000)
* GID:登录默认所在组编号 (1000)
* GECOS:用户全名或注释
* home directory:用户主目录 (/home/wang)
* shell:用户默认使用shell (/bin/bash)
5

数学法的权限:
八进制数学

etc/passwd
* login name:登录用名(wang)
* passwd:密码 (x)
* UID:用户身份编号 (1000)
* GID:登录默认所在组编号 (1000)
* GECOS:用户全名或注释
* home directory:用户主目录 (/home/wang)
* shell:用户默认使用shell (/bin/bash)
6

举例:

etc/passwd
* login name:登录用名(wang)
* passwd:密码 (x)
* UID:用户身份编号 (1000)
* GID:登录默认所在组编号 (1000)
* GECOS:用户全名或注释
* home directory:用户主目录 (/home/wang)
* shell:用户默认使用shell (/bin/bash)
7

设置文件的所有者chown

etc/passwd
* login name:登录用名(wang)
* passwd:密码 (x)
* UID:用户身份编号 (1000)
* GID:登录默认所在组编号 (1000)
* GECOS:用户全名或注释
* home directory:用户主目录 (/home/wang)
* shell:用户默认使用shell (/bin/bash)
8

设置文件的属组信息chgrp

etc/passwd
* login name:登录用名(wang)
* passwd:密码 (x)
* UID:用户身份编号 (1000)
* GID:登录默认所在组编号 (1000)
* GECOS:用户全名或注释
* home directory:用户主目录 (/home/wang)
* shell:用户默认使用shell (/bin/bash)
9

修改文件权限chmod

etc/gshdow
* 群组名称:就是群的名称
* 群组密码:
* 组管理员列表:组管理员的列表,更改组密码和成员
* 以当前组为附加组的用户列表:多个用户间用逗号分隔
0

访问控制列表ACL

ACL:Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限。
ACL生效顺序:所有者,自定义用户,所属组|自定义组,其他人
1.ACL相关命令
setfacl 用于设置文件或目录的ACL

etc/gshdow
* 群组名称:就是群的名称
* 群组密码:
* 组管理员列表:组管理员的列表,更改组密码和成员
* 以当前组为附加组的用户列表:多个用户间用逗号分隔
1

getfacl 可查看设置的ACL权限

etc/gshdow
* 群组名称:就是群的名称
* 群组密码:
* 组管理员列表:组管理员的列表,更改组密码和成员
* 以当前组为附加组的用户列表:多个用户间用逗号分隔
2


从上图可以看出使用setfacl后再ll,可以发现文件权限出现了一些小变化,多了一个加号,加号代表额外的ACL规则。而且从现有的发现来看,我们修改的是u权限,按理来说-rw-r--r--应该变成-rwxr--r--,但事实并非如此。原因是:ls -l 命令显示的基本权限位只反映了文件的基本权限,而不是ACL设置的权限。即使使用 setfacl 修改了某个用户的权限,基本权限位不会自动更新为反映ACL的变化。所以这个时候可以使用getfacl来查看这个文件的ACL规则。

2.mask权限
mask 是一个特殊的ACL条目,它定义了所有用户和组的权限上限。换句话说,mask 决定了哪些权限可以被实际应用于文件或目录,即使ACL中设置了某些权限,如果这些权限超出了mask的范围,它们将不会生效。作用:用于限制所有用户和组的权限上限。

etc/gshdow
* 群组名称:就是群的名称
* 群组密码:
* 组管理员列表:组管理员的列表,更改组密码和成员
* 以当前组为附加组的用户列表:多个用户间用逗号分隔
3

VIM的使用及内容查询

etc/gshdow
* 群组名称:就是群的名称
* 群组密码:
* 组管理员列表:组管理员的列表,更改组密码和成员
* 以当前组为附加组的用户列表:多个用户间用逗号分隔
4
vim基本命令
etc/gshdow
* 群组名称:就是群的名称
* 群组密码:
* 组管理员列表:组管理员的列表,更改组密码和成员
* 以当前组为附加组的用户列表:多个用户间用逗号分隔
5

文件内容查询

cat命令
etc/gshdow
* 群组名称:就是群的名称
* 群组密码:
* 组管理员列表:组管理员的列表,更改组密码和成员
* 以当前组为附加组的用户列表:多个用户间用逗号分隔
6
head和tail命令
etc/gshdow
* 群组名称:就是群的名称
* 群组密码:
* 组管理员列表:组管理员的列表,更改组密码和成员
* 以当前组为附加组的用户列表:多个用户间用逗号分隔
7
wc命令
etc/gshdow
* 群组名称:就是群的名称
* 群组密码:
* 组管理员列表:组管理员的列表,更改组密码和成员
* 以当前组为附加组的用户列表:多个用户间用逗号分隔
8
cut命令
etc/gshdow
* 群组名称:就是群的名称
* 群组密码:
* 组管理员列表:组管理员的列表,更改组密码和成员
* 以当前组为附加组的用户列表:多个用户间用逗号分隔
9

文本查找

locate命令
介绍:
locate 是通过查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db来查询文件的,想要使用locate或者find命令,首先需要安装mlocate包,安装完后执行updatedb更新数据库。索引构建过程需要遍历整个根文件系统,很消耗资源,所以执行updatedb的时候需要系统较为空闲时自动进行。

etc/shadow
* 登录用名
* 用户密码:一般用sha512加密
* 从1970年1月1日起到密码最近一次被更改的时间
* 密码再过几天可以被变更(0表示随时可被变更)
* 密码再过几天必须被变更(99999表示永不过期)
* 密码过期前几天系统提醒用户(默认为一周)
* 密码过期几天后帐号会被锁定
* 从1970年1月1日算起,多少天后帐号失效
0

特点:

  • 查找速度快
  • 模糊查找
  • 非实时查找(新创建or删除的文件无法查询)
  • 搜索的是文件的全路径,不仅仅是文件名
  • 仅支持搜索用户具备读取和执行权限的目录
locate命令
etc/shadow
* 登录用名
* 用户密码:一般用sha512加密
* 从1970年1月1日起到密码最近一次被更改的时间
* 密码再过几天可以被变更(0表示随时可被变更)
* 密码再过几天必须被变更(99999表示永不过期)
* 密码过期前几天系统提醒用户(默认为一周)
* 密码过期几天后帐号会被锁定
* 从1970年1月1日算起,多少天后帐号失效
1

find命令
介绍:
find 是实时查找工具,通过遍历指定路径完成文件查找。

特点:

  • 查找速度略慢
  • 精确查找
  • 实时查找
  • 查找条件丰富
  • 仅支持搜索用户具备读取和执行权限的目录

格式:
find [OPTION] [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所
有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕

find根据文件名和inode查找
etc/shadow
* 登录用名
* 用户密码:一般用sha512加密
* 从1970年1月1日起到密码最近一次被更改的时间
* 密码再过几天可以被变更(0表示随时可被变更)
* 密码再过几天必须被变更(99999表示永不过期)
* 密码过期前几天系统提醒用户(默认为一周)
* 密码过期几天后帐号会被锁定
* 从1970年1月1日算起,多少天后帐号失效
2
find根据属主、属组查找
etc/shadow
* 登录用名
* 用户密码:一般用sha512加密
* 从1970年1月1日起到密码最近一次被更改的时间
* 密码再过几天可以被变更(0表示随时可被变更)
* 密码再过几天必须被变更(99999表示永不过期)
* 密码过期前几天系统提醒用户(默认为一周)
* 密码过期几天后帐号会被锁定
* 从1970年1月1日算起,多少天后帐号失效
3
find根据文件类型查找
etc/shadow
* 登录用名
* 用户密码:一般用sha512加密
* 从1970年1月1日起到密码最近一次被更改的时间
* 密码再过几天可以被变更(0表示随时可被变更)
* 密码再过几天必须被变更(99999表示永不过期)
* 密码过期前几天系统提醒用户(默认为一周)
* 密码过期几天后帐号会被锁定
* 从1970年1月1日算起,多少天后帐号失效
4
根据文件大小来查找
etc/shadow
* 登录用名
* 用户密码:一般用sha512加密
* 从1970年1月1日起到密码最近一次被更改的时间
* 密码再过几天可以被变更(0表示随时可被变更)
* 密码再过几天必须被变更(99999表示永不过期)
* 密码过期前几天系统提醒用户(默认为一周)
* 密码过期几天后帐号会被锁定
* 从1970年1月1日算起,多少天后帐号失效
5

文本三剑客

grep命令

工作模式:
由正则表达式字符及文本字符所编写的过滤条件来帮助用户对目标文本进行匹配检查,并打印到行。

grep命令
etc/shadow
* 登录用名
* 用户密码:一般用sha512加密
* 从1970年1月1日起到密码最近一次被更改的时间
* 密码再过几天可以被变更(0表示随时可被变更)
* 密码再过几天必须被变更(99999表示永不过期)
* 密码过期前几天系统提醒用户(默认为一周)
* 密码过期几天后帐号会被锁定
* 从1970年1月1日算起,多少天后帐号失效
6

sed命令
工作模式:
1.读取输入流里的一行,将其存储在模式空间中。
2.依次执行一个或多个操作命令,如替换,删除,插入等。
3.根据第二步的操作结果,对模式空间内的内容进行修改。
4.输入模式空间的内容。
5.处理完当前行后,清空模式空间,准备处理下一行。

举例说明:

etc/shadow
* 登录用名
* 用户密码:一般用sha512加密
* 从1970年1月1日起到密码最近一次被更改的时间
* 密码再过几天可以被变更(0表示随时可被变更)
* 密码再过几天必须被变更(99999表示永不过期)
* 密码过期前几天系统提醒用户(默认为一周)
* 密码过期几天后帐号会被锁定
* 从1970年1月1日算起,多少天后帐号失效
7
sed命令
etc/shadow
* 登录用名
* 用户密码:一般用sha512加密
* 从1970年1月1日起到密码最近一次被更改的时间
* 密码再过几天可以被变更(0表示随时可被变更)
* 密码再过几天必须被变更(99999表示永不过期)
* 密码过期前几天系统提醒用户(默认为一周)
* 密码过期几天后帐号会被锁定
* 从1970年1月1日算起,多少天后帐号失效
8

awk命令
awk工作模式:
1.读取一行
每次读取输入流中的一行,并将其存储在内部缓冲区中。

2.分割字段
默认使用空格或制表符作为字段分隔符,将每一行分割成多个字段,可以使用-F 选项或 FS 变量指定其他分隔符。

3.执行规则
依次执行在脚本中定义的规则。每个规则由一个模式和一个操作组成,格式为 pattern { action },如果模式匹配当前行,则执行相应的操作。

4.处理内置变量
awk 提供了一些内置变量,用于访问和操作字段、行号等信息。

5.输出结果

awk命令
etc/shadow
* 登录用名
* 用户密码:一般用sha512加密
* 从1970年1月1日起到密码最近一次被更改的时间
* 密码再过几天可以被变更(0表示随时可被变更)
* 密码再过几天必须被变更(99999表示永不过期)
* 密码过期前几天系统提醒用户(默认为一周)
* 密码过期几天后帐号会被锁定
* 从1970年1月1日算起,多少天后帐号失效
9

awk特殊规则

* useradd:添加用户
* usermod:修改用户属性
* userdel:删除用户
0

awk的常见action
print命令

* useradd:添加用户
* usermod:修改用户属性
* userdel:删除用户
1

printf命令

* useradd:添加用户
* usermod:修改用户属性
* userdel:删除用户
2

变量赋值

* useradd:添加用户
* usermod:修改用户属性
* userdel:删除用户
3

if-else语句

* useradd:添加用户
* usermod:修改用户属性
* userdel:删除用户
4

switch 语句

* useradd:添加用户
* usermod:修改用户属性
* userdel:删除用户
5

循环语句

* useradd:添加用户
* usermod:修改用户属性
* userdel:删除用户
6

特殊控制语句

* useradd:添加用户
* usermod:修改用户属性
* userdel:删除用户
7

awk实例
打印/etc/passwd的奇数行

* useradd:添加用户
* usermod:修改用户属性
* userdel:删除用户
8

打印Linux系统的"IP地址,系统版本,CPU核心,内存大小"

* useradd:添加用户
* usermod:修改用户属性
* userdel:删除用户
9

基本正则和扩展正则

基本正则表达式常用用法包括:字符匹配、匹配次数、位置锚定和分组
字符匹配

user[options] [options] username
useradd -r  -u 1001 mqh #添加用户
usermod -u 1002 mqh #修改用户属性
userdel -f mqh #删除用户
0

匹配次数

user[options] [options] username
useradd -r  -u 1001 mqh #添加用户
usermod -u 1002 mqh #修改用户属性
userdel -f mqh #删除用户
1

位置锚定

user[options] [options] username
useradd -r  -u 1001 mqh #添加用户
usermod -u 1002 mqh #修改用户属性
userdel -f mqh #删除用户
2

分组

user[options] [options] username
useradd -r  -u 1001 mqh #添加用户
usermod -u 1002 mqh #修改用户属性
userdel -f mqh #删除用户
3

基本正则(BRE)和扩展正则(ERE)的区别

区别一:
BRE: +、?、{、}、|,使用这些字符时需要转义(\),如\?\+
ERE:不需要转义,可直接使用

区别二:
BRE分组时,使用的是\(\),例:\(abc\)
ERE分组时,使用的是(),例:(abc)

实例

user[options] [options] username
useradd -r  -u 1001 mqh #添加用户
usermod -u 1002 mqh #修改用户属性
userdel -f mqh #删除用户
4

shell脚本之变量

变量命名规则
名称规则:

  • 变量名只能包含字母(a-z, A-Z)、数字(0-9)和下划线(_)。
  • 变量名不能以数字开头。
  • 变量名区分大小写。

赋值规则:

  • 变量赋值时,等号两边不能有空格。
  • 变量引用时,使用 $ 符号加上变量名。

变量类型

普通变量:
生效范围为当前shell进程;一旦关闭终端或脚本执行结束就会销毁。对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效。

环境变量:
生效范围为当前shell进程及其子进程;可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量。

user[options] [options] username
useradd -r  -u 1001 mqh #添加用户
usermod -u 1002 mqh #修改用户属性
userdel -f mqh #删除用户
5

只读变量:
使用 readonly 命令将变量设置为只读,一旦设置为只读,变量的值不能被修改。

user[options] [options] username
useradd -r  -u 1001 mqh #添加用户
usermod -u 1002 mqh #修改用户属性
userdel -f mqh #删除用户
6

位置变量:
表示传递给脚本或函数的参数,通过 $1, $2, $3 等引用。

user[options] [options] username
useradd -r  -u 1001 mqh #添加用户
usermod -u 1002 mqh #修改用户属性
userdel -f mqh #删除用户
7

状态变量
表示当前的状态或信息。

user[options] [options] username
useradd -r  -u 1001 mqh #添加用户
usermod -u 1002 mqh #修改用户属性
userdel -f mqh #删除用户
8

使用shell解决鸡兔同笼问题

user[options] [options] username
useradd -r  -u 1001 mqh #添加用户
usermod -u 1002 mqh #修改用户属性
userdel -f mqh #删除用户
9

结合shell完成循环和条件判断

-u UID 
-o 配合-u 选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r 创建系统用户 CentOS 6之前: ID<500,CentOS7 以后: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
-p 指定加密的密码
0