一、文件通配符
所谓通配符glob,即使用特定的字符(称之为元字符),可实现对文件的匹配,实现快速引用多个文件的功能。详细介绍请参考帮助:man 7 glob
通配符相关的元字符如下:
:匹配任意长度的任意字符,例如,p\可匹配p开头的所有文件。
?:匹配任意单个字符,例如,p?可匹配p后面有一个字符的文件。
[]:中括号匹配指定集合内的任意单个字符。
例如:
[liuy]:表示l,i,u,y中的任意一个字符。
[0-9]:表示匹配单个数字。
[[:upper:]]:匹配任意单个大写字母。
[[:lower:]]:匹配任意单个小写字母。
[[:digit:]]:匹配任意单个数字,等价于[0-9]。
[[:alpha:]]:匹配任意一个大小写字母。
[[:alnum:]]:匹配任意一个大小写字母或数字。
[[:space:]]:匹配单个空白字符。
[[:punctl:]]:匹配单个标点符号。
[^]:匹配指定集合外的任意单个字符。
实操:
-
复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
-
将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
二、用户和组管理类命令
常用的用户管理命令
-
useradd:创建新用户
格式:useradd [options] LOGIN
常见选项:
选项 说明 -u UID 指定创建用户的UID -o 配合-u选项,不检查UID的唯一性 -g GID 指明用户所属主要组,可为组的名称,也可以是GID -c COMMENT 用户的注释信息 -d HOME_DIR 以指定的路径为家目录 -s SHELL 指明用户默认的shell程序(可用列表 在/etc/shells文件中) -G GROUP 为用户指明附加组,组须事先存在 -N 不创建和用户同名的私用组做主组 -r 创建系统用户。CentOS 6:UID<500,CentOS 7:UID<1000 -m 创建家目录,一般用于系统用户 -M 不创建家目录,一般用于非系统用户 -
usermod:修改用户属性
格式:usermod [options] LOGIN
常见选项:
选项 说明 -u UID 新UID -g GID 新主组 -G GROUP 新附加组,原来的组会被覆盖,若想保留原有,则要同时使用-a选项 -s shell 新的默认shell -c COMMENT 新的注释信息 -d HOME 新家目录不会自动创建,若要创建新家目录并移动原家目录数据,要同时使用-m选项 -L USERNAME lock指定用户(在/etc/shadow密码栏加!) -U USERNAME unlock指定用户(将/etc/shadow密码栏的!拿掉) -
userdel:删除用户
格式:userdel [options] LOGIN
常见选项:
选项 说明 -f --force 强制删除 -r --remove 删除对应用户的家目录以及邮箱文件 -
id:查看用户的UID、GID等信息
格式:id [OPTION]... [USER]
常见选项:
选项 说明 -u 显示UID -g 显示GID -
su:即switch user,可以切换用户身份,并且以指定用户的身份执行命令
格式:su [options] [-] [<user> [<argument>...]]
常见选项:
选项 说明 -,-l --login 开启loginshell,如果后面没有指定用户,默认为root -c --command< command> 使用目标用户身份执行一次命令 切换用户的方式:
- su username:非登录式切换,即不会读取目标用户的配置文件,不会改变当前工作目录,即不完全切换
- su - username:登录式切换,会读取目标用户的配置文件,切换至目标用户家目录,即完全切换
注意:
- root切换至其他用户无需密码,非root用户切换时需要密码。
- su切换新用户后,使用exit退回至旧用户,而不要再用su切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
-
passwd:设置用户密码
格式:passwd [OPTION...] <accountName>
常见选项:
选项 说明 -d 删除指定用户密码 -l 锁定指定用户,同usermod命令的-L选项效果一样 -u 解锁指定用户,同usermod命令的-U选项效果一样 -e 强制用户下次登录修改密码(修改shadow文件第三个字段为0) -f 强制操作 -n mindays 密码最短使用期限(shadow文件第四字段) -x maxdays 密码最大使用期限(shadow文件第五字段) -w warndays 密码过期前的警告天数(shadow文件第六字段) -i inactivedays 密码过期后的宽限天数(shadow文件第七字段) --stdin 从标准输入接收用户密码,Ubuntu无此选项 -
chage:修改用户密码策略
格式:chage [options] LOGIN
常见选项:
选项 说明 -d 修改shadow文件第三个字段,最后一次修改密码时间,格式为YYYY-MM-DD -m 修改shadow文件第四个字段,密码最短使用期限 -M 修改shadow文件第五个字段,密码最长使用期限 -W 修改shadow文件第六个字段,密码失效前的警告天数 -I(大写I字母) 修改shadow文件第七个字段,密码失效后的宽限天数 -E 修改shadow文件第八个字段,账号的有效期限 -l(小写L字母) 显示用户的密码策略
常用的组管理命令
-
groupadd:创建组
格式:groupadd [options] GROUP_NAME
常见选项:
选项 说明 -g 指明GID -r 创建系统组,CentOS 6之前:GID<500;CentOS 7以后:GID<1000 -
groupmod:组属性修改
格式:groupmod [options] GROUP
常见选项:
选项 说明 -n 指定新组名 -g 指定新GID -
groupdel:删除组
格式:groupdel [options] GROUP
常见选项:
选项 说明 -f 强制删除,即使是用户的主组也删除 -
gpasswd:可以更改组密码,也可以修改附加组的成员关系
格式:gpasswd [option] GROUP
常用选项:
选项 说明 -a user 将user添加至指定组中 -d user 从指定组中删除user -A user1,user2,... 设置有管理权限的用户列表 -
newgrp:临时切换主组,如果用户本不属于此组,则需要组密码
格式:newgrp [-] [group]
如果使用 - 选项,可以初始化用户环境。
实例:
-
创建组distro,其ID为2019。
-
创建用户mandriva,其ID号为1005,基本组为distro。
-
创建用户mageia,其ID号为1100,家目录为/home/linux。
-
给用户mageia添加密码,密码为mage,并设置用户密码7天后过期。
-
删除mandriva,但保留其家目录。
-
创建用户slackware,其ID号为2002,基本组为distro,附加组为peguin。
-
修改slackware的默认shell为/bin/tcsh。
-
为用户slackware新增附加组admins,并设置不可登录。
三、文件权限管理
文件权限介绍
文件的权限主要针对三类对象进行定义:owner(属主,u)、group(属组,g)、other(其他,o)。文件的常用权限有三种:r(readable)、w(writable)、x(excutable)。
字符表示 | 权限 | 对文件的含义 | 对目录的含义 |
---|---|---|---|
r | 读权限 | 可以查看文件内容 | 可以查看目录中文件列表 |
w | 写权限 | 可以修改文件内容 | 可以在目录中创建、修改文件 |
x | 执行权限 | 可以执行文件(须为可执行文件) | 可以进入目录 |
文件的三种特殊权限:SUID、SGID、Sticky
SUID:当设有SUID权限的可执行二进制程序被执行时,这个程序的进程所有者为程序文件的所有者身份。也就是说当其他用户执行这个程序时,会暂时获得程序的所有者身份,当然,这个身份只在程序执行过程中有效。SUID只对二进制可执行文件有效,设置在目录上没有意义。
其中passwd文件的属主执行权限位是s,代表passwd属主有执行权限,同时具有SUID权限。假如一个文件没有可执行权限,但是设置了SUID权限,属主的可执行权限位显示为大写的字母S。
SGID:
- 设置在目录上时,用户在这个目录中创建的新文件的属组将自动继承此目录的属组。
- 设置在二进制文件上时,功能和SUID类似,运行这个二进制程序时,其他用户会得到这个程序的所属组的权限。
其中locate文件的属组执行权限位是s,属组是slocate,代表属主外的其他用户执行这个程序时,会暂时获得slocate组权限。
Sticky:只对目录有效,权限用t表示。设置有Sticky权限的目录,用户在该目录下创建的文件只有这个用户和root用户可以进行删除操作。利用此权限可以防止普通用户删除其他人的文件。系统中/tmp目录就是有Sticky权限的目录。
文件的特殊属性
通过文件的特殊属性,可以增加对文件的操作限制,设置了特殊属性的文件即使root这样的超级用户也会被限制。文件特殊属性通过chattr命令来实现,也可以通过lsattr查看到这些属性。
chattr:改变文件特殊属性
格式:chattr [-RVf] [-+=ia] files...
常用选项:
选项 | 说明 |
---|---|
-R | 递归处理,将目录及目录下的子目录和文件一起处理 |
-V | 显示版本信息和设置的权限 |
-f | 隐藏大部分错误信息 |
- | 表示去掉属性 |
+ | 表示添加属性 |
= | 表示重设属性 |
i | 表示不能删除、修改、重命名和创建硬链接 |
a | 表示不能删除、修改和创建硬链接,但是可以追加内容 |
lsattr:查看文件的特殊属性
格式:lsattr [-Rad] [files...]
常用选项:
选项 | 说明 |
---|---|
-a | 显示所有文件和目录,包括以“.”开头的文件 |
-d | 显示目录,而非其内容 |
-R | 递归处理 |
文件的FACL
FACL:File Access Control List
前面介绍的权限,只能针对所有者、所属组、其他人三种不同的用户群体分别设置相应权限,当需要对更多的用户设置不同权限时,传统的方式已经无法实现,利用FACL可以实现更加灵活的权限控制。管理FACL的两个常见命令setfacl和getfacl,其中setfacl可设置FACL权限,getfacl可查看FACL权限。
setfacl:设置FACL权限
格式:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
常用选项:
选项 | 说明 |
---|---|
-m, --modify=acl | 更改文件的访问控制列表 |
-M, --modify-file=file | 从文件读取访问控制列表来设置 |
-x, --remove=acl | 删除文件访问控制列表条目 |
-X, --remove-file=file | 从文件读取访问控制列表并删除 |
-b, --remove-all | 清除所有FACL |
-R, --recursive | 递归操作目录及子目录 |
getfacl:查看FACL权限
格式:getfacl [-aceEsRLPtpndvh] file ...
常用选项:
选项 | 说明 |
---|---|
-a, --access | 显示文件访问控制列表 |
-e, --all-effective | 显示所有有效的权限 |
-E, --no-effective | 显示无效的权限 |
实例:
创建用户user1、user2、user3。在/data/下创建目录test
-
目录/data/test属主、属组为user1。
-
在目录属主、属组不变的情况下,user2对目录有读写权限。
-
user1在/data/test目录下创建文件a1.sh、a2.sh、a3.sh、a4.sh,设置所有用户都不可删除a1.sh、a2.sh文件,除了user1及root之外,所有用户都不可删除a3.sh、a4.sh。
上图可以看到,给a1.sh、a2.sh两个文件设置文件特殊属性后,任何用户都无法删除文件。
给/data/test目录设置Sticky权限后,root和user1用户可以删除这个目录下的文件,但是root和user1以外的用户不能删除这个目录下的文件,所以user2用户不能删除a3.sh、a4.sh。
-
user3增加附加组user1,同时要求user3不能访问/data/test目录及其下所有文件。
-
清理/data/test目录及其下所有文件的acl权限。