个人整理笔记
韩顺平一周学会 linux 2021 部分笔记 10-11节
10. 组管理和权限管理
linux中的每个用户,必须属于一个组,不能独立于组外。
linux中的每个文件/目录,都有且仅有一个所有者。
在liunx中有 所有者、所在组、其他组 等概念
- 所有者
文件/目录的所有者,一般来说文件/目录由谁创建则所有者就是谁,可以修改 - 所在组
用于多个相同权限用户的管理,用户必须属于至少一个组,一个用户可以属于多个组,一个组可以包含多个用户 - 其他组
对一个文件而言,除了所有者所属用户组以外的其他用户组,成为其他组,其他组对此文件也可设定一定权限
1. 文件/目录 所有者
每个文件/目录都有且只要一个所有者。所有者默认为文件的创建者。但所有者也可更改
1. ls -l 查看文件的所有者
- 相关参数说明
-l
以列表的形式显示文件/目录清单,显示内容包括:名称、大小、所有者、权限信息 - 常用参数
ls -alh
列表显示、显示所有文件、按常见单位显示
列表显示的内容(从左往右):权限、包含的文件/目录总数、所有者、所在组、大小、修改时间、名称
2. chown 修改文件的所有者/所在组
- 基本语法
chown 用户名 文件名
将文件所有者修改为对应用户,所在组不变
chown :用户组 文件名
将文件所在组更改,所有者不变
chown 用户名AAA:组名BBB 文件名
将文件 所有者/所在组 修改为 AAA/BBB - 常用参数
-R
修改目录及其子文件、子目录的所有者和所在组
-h
修改子文件中的软链接,而不是修改软链接指向的文件
-v
显示详细操作 - 文件案例:
- 使用 root 账户创建 apple.txt 文件,然后将所有者改为 lilixxs
chown lilixxs apple.txt
- 将 apple.txt 文件,所有者修改为 root,所在组修改为 lilixxs
chown root:lilixxs apple.txt
- 使用 root 账户创建 apple.txt 文件,然后将所有者改为 lilixxs
2. 用户 所在组
groupadd:创建一个组 Baosight
groupadd Baosight
groupmod -n:修改组的名称:Baosight --> Ba0sight
groupmod -n Ba0sight Baosight
usermod -g:改变用户 lxy-baosight 所在组为 Ba0sight
usermod -g Ba0sight lxy-baosight
usermod -aG:将用户 hjy-baosight 添加到组 Ba0sight 中
usermod -aG Ba0sight hjy-baosight
useradd -g:新建用户 pig 并直接将此用户分配到 Ba0sight 组中
useradd -g Ba0sight pig
id:查看用户 lilixxs 的状态:用户id、所在组
id lilixxs
groupdel:删除用户组 Ba0sight
groupdel Ba0sight
3. 文件 所在组
当用户创建一个文件后,用户所在的组就是文件的所在组
1. 应用实例
1. 创建用户 lxy 并将 lxy 添加到 lilixxs 用户组中
```bash
useradd -g lilixxs lxy
```
2. 使用 lxy 账户创建文件 lxy.txt,并查看此文件的所在组
```bash
touch lxy.txt
ls -alh
```
2. chgrp 修改文件的所在组
-
基本指令
chgrp [参数] +组名 +文件/目录名
-
常用参数
-R
修改此目录下所有子目录/子文件的所在组
-h
修改此目录下软链接的所在组,而不是修改软链接指向的文件的所在组 -
应用实例
使用 root 用户创建文件 orange.txt,然后查看此文件的所有者和所在组。之后将此文件的所有者更改为 lilixxs,所在组更改为 lilixxs# 切换为 root 用户 su - root # 使用 root 用户,创建 orange.txt touch orange.txt # 查看此文件的所有者、所在组 ls -alh # a. 将此文件所有者更改为 lilixxs chown -hR lilixxs orange.txt # b. 将此文件所在组更改为 lilixxs chgrp -hR lilixxs orange.txt # a+b 两步也可用 chown 一步完成 # chown -hR lilixxs:lilixxs orange.txt
-
使用细节
也可使用chmod
指令来修改文件所在组
chown -R AAA:BBB 文件/目录名
更改文件/目录的所有者为AAA,所在组为BBB
4. 文件 其他组
除了文件所有者属于的用户组、文件的所在组以外,其他的用户组都称为其他组。修改了文件的所有者、所在组,则其他组也会改变
5. 权限管理
1. 权限的基本介绍
使用ls -l
命令后,可以看到一下以下输出
-rw-r--r-- 1 lilixxs lilixxs 0 4月 17 15:04 test2.txt
其中前边包含 r/w/x/- 等字符的部分,有 10 位。为文件类型、对应文件/目录的权限。
- 0-9位介绍
每 3 位一组第 0 位
:文件类型(d, -, l, c, b)
d
:目录(directory,即文件夹)
-
:文件
l
:链接(link,即快捷方式)
c
:字符设备(character devices),如鼠标、键盘
b
:块设备(block devices),如硬盘等第 1-9 位
:所有者、所在组、其他组的权限第 1-3 位
:所有者(Owner)的权限第 4-6 位
:所在组(Group)的权限第 7-9 位
:其他组(Other)的权限
- 权限介绍(rwx的含义)
- 总体介绍
3位一组,3位顺序为读->写->执行(r–>w–>x),若没有对应权限,则此位为横线(-)
文件与文件件的目录是相互独立的 - 对文件的 rwx
r
:可读(read)——可以读取、查看文件内容
w
:可写(write)——可以修改
rw
:可读写(read&write)——可以查看、修改、删除。只有同时具备读写权限才能删除文件
x
:可执行(execute)——可以运行
-
:不具备此权限 - 对目录的 rwx
r
:可读(read)——可以查看此目录包含的内容,可用ls
指令
w
:可写(write)——可以修改,可重命名目录,可在此目录内新建、修改、重命名、删除子文件/子目录,但不一定能进入文件或修改文件内容
rw
:可读写(read&write)——可以查看、修改、删除。只有同时具备读写权限才能删除文件
x
:可执行(execute)——可以进入此目录
-
:不具备此权限
- 总体介绍
2. 实际案例
ls -l
指令的显示内容如下:
-rw-r--r-- 1 lilixxs root 0 4月 17 15:04 test2.txt
- 前 10 个字符表示文件类型、文件权限
- 第 0 个字符:
-
——文件类型为“文件” (-/l/d/c/b) - 第 1-3 字符:
rw-
——所有者的权限,可读写、重命名、删除,不可执行,不可进入此目录 - 第 4-6 字符:
r--
——所在组的权限,可读、不可写、不可重命名、不可删除、不可执行、不可进入 - 第 7-9 字符:
r--
——其他组的权限,可读、不可写、不可重命名、不可删除、不可执行、不可进入
- 第 0 个字符:
- 权限也可用数字表示(3 位二进制)
r
= 4,w
= 2,x
= 1 --> 因此,rwx
权限 = 7 ls
指令输出的其他内容
1
包含的子目录数(若为文件则 = 1,包含子目录数最少为2:上一级目录、本级目录,不计算包含的子文件数)
lilixxs
所有者:此文件所有者为 lilixxs
root
所在组:此文件所在组为 root 组
0
文件大小(单位Byte)(若使用-h
参数,则将以K/M/G/T等单位显示)
4月17 15:04
文件/目录的修改日期
test2.txt
文件/目录名
3. chmod 修改权限
-
基本说明
通过chmod
指令,可以修改文件/目录的权限 -
基本语法
chmod [选项] 权限表达式 文件/目录名
-
常用选项
-R
递归的修改权限,同时修改目录、子目录、子文件的权限
-v
权限修改的详细信息 -
权限表达式
-
字母形式
- 详解
u=rwx,g+rw,o-r
u,g,o三者顺序任意,省略不写则权限不变,逗号前后不能有间隔
u
= 所有者 (用户,user) 权限
g
= 所在组 (组,group) 权限
r
= 其他组 (others) 权限
a
= 所有组(包括以上全部 3 者)的权限
r,w,x三者顺序任意,省略不写则认为无此权限
r
= 可读 (read)
w
= 可写 (write)
x
= 可执行 (execute)
=,+,-为权限的设置模式
+
= 添加权限
-
= 减少权限
=
= 设置权限
字母形式适用于对部分用户/组进行精细化的权限操作,可简单的实现权限的追加、去除操作。但要修改多个组/用户权限时表达式较长。 - 举例:
# 1. 给 abc 文件设置权限,所有者权限不变,给所在组设置读写执行权限,给其他组设置读执行权限 chmod g=rwx,o=rx abc # 2. 给 abc 文件的所有者除去执行权限,增加读写的权限 chmod u-x,u+rw abc # 3. 给 abc 文件的所有用户添加读写权限,除去执行权限 chmod a+rw,a-x abc
- 详解
-
数字形式
-
详解
751
3 位 10 进制数字,分别表示:所有者、所在组、其他组的权限
数字与权限的对应关系:
将 rwx 视为 3 位二进制数,对应位 = 1,则表示有此权限;对应位 = 0,则表明无此权限。10进制数字 2进制数字 对应字母形式 意义 0 000 — 不可读写,不可重命名,不可删除,不可执行,不可进入 1 001 –x 不可读写,不可重命名,不可删除,可执行,可进入 2 010 -w- 不可读,可写,可重命名,不可删除,不可执行,不可进入 3 011 -wx 不可读,可写,可重命名,不可删除,不可执行,不可进入 4 100 r– 可读,不可重命名,不可删除,不可执行,不可进入 5 101 r-x 可读,不可写,不可重命名,不可删除,可执行,可进入 6 110 rw- 可读,可写,可重命名,可删除,不可执行,不可进入 7 111 rwx 可读写,可重命名,可删除,可执行,可进入 数字形式相当于字母形式的
=
模式,且各个用户、组的权限都要同时设置。适用于要同时设置所有用户和组的权限,追加、去除权限要根据计算后数字结果直接赋值 -
举例:
# 给 abc 文件设置权限,所有者设置读写执行权限,所在组设置读写权限,其他组设置读执行权限 chmod 765 abc
-
-
11. 任务调度
1. crontab crond任务调度
-
概述
- 任务调度:系统定时、按照一定周期或规则,执行特定的命令或程序
- 任务调度分类:
- 系统任务:某些重要的任务需要周而复始的执行,如病毒扫描等
- 个别用户任务:个别用户希望执行的任务,如对 mysql 数据库的备份
-
基本语法
crontab [选项]
-
常用选项
-e
编辑 crontab 定时任务
-l
查询 crontab 任务
-r
删除当前用户所有的 crontab 任务 -
快速入门
- 打开任务调度文件
- 使用文本编辑器,便捷 crontab 任务列表:
/etc/crontab
- 使用指令,直接进入 crontab 任务列表:
crontab -e
若使用指令,则
- 使用文本编辑器,便捷 crontab 任务列表:
- 配置定时任务——cron 表达式
A B C D E +要执行的指令
A,B,C,D,E 是对应指令执行的周期,若为*
则为不使用此单位
单位 含义 范围 - 打开任务调度文件
| A | 每小时的第几分钟 | 0-59 |
| B | 每天的第几小时 | 0-23 |
| C | 每月的第几天 | 1-31 |
| D | 每年中的第几月 | 1-12 |
| E | 每周中的星期几 | 0-7 (0=7=周日) |
各单位时间的具体含义与语法如下:
- `*` 任意时间都匹配
如`A`中的`*`表示:一小时中的每分钟都执行
- `X,Y,Z` 不连续的时间:X 或 Y 或 Z
```bash
# 在每天的 8:00、12:00、16:00 执行一次 命令X
0 8,12,16 * * * 命令X
```
- `X-Y` 持续的时间:从 X 持续到 Y
```bash
# 在 周一到周六 每天的 5:00 执行一次命令Y
0 5 * * 1-6 命令Y
```
- `*/X` 每隔 X 时间执行一次
```bash
# 每隔 10 分钟执行一次 命令Z
*/10 * * * * 命令Z
```
1. 保存任务调度文件,则 crond 定时任务开始执行
1. 控制定时任务——crontab 指令
`crontab -l` list:列出当前的所有定时任务
`crontab -e` edit:编辑任务调度文件
`crontab -r` remove:取消当前所有定时任务(移除当前任务调度文件)
`service crond restart/stop/start/status` 定时任务服务重启(刷新)/停止/启动/查看服务状态
`systemctl start/stop/restart/status crond` 同上
- 配置定时举例
- cron 表达式举例
# 在 每天的 22:45 执行命令 45 22 * * * 命令 # 在 每周一的 17:00 执行命令 0 17 * * 1 命令 # 在 每月的 1 号和 15 号的凌晨 5:00 执行命令 0 5 1,15 * * 命令 # 在 每周一到周五的凌晨 4:40 执行命令 40 4 * * 1-5 命令 # 在 每天的凌晨 4:00-4:59 每隔 10 分钟执行一次命令 */10 4 * * * 命令 # 在 每月的 1 号和 15 号,每周一的 0:00 执行一次命令 # 在实际的任务中,最好不要这样写 # 同时出现日、星期,容易让管理维护者产生混乱 0 0 1,15 * 1 命令 # 每晚 21:30 执行命令 30 21 * * * 命令 # 每月 1、10、22 日的 4:45 执行命令 45 4 1,10,22 * * 命令 # 每月 1 到 10 日的 4:45 执行命令 45 4 1-10 * * 命令 # 每隔 2 分钟 (偶数分钟) 执行命令 */2 * * * * 命令 # 每隔 2 分钟 (奇数分钟) 执行命令 1-59/2 * * * * 命令 # 晚上 11 点至早上 7 点之间,每隔 1 小时执行命令 0 23-7/1 * * * 命令 0 23-7 * * * 命令 # 每天 18:00 至 23:00 之间,每隔 30 分钟执行命令 */30 18-22 * * * 命令
- 应用实例
# 每隔 1 分钟,将当前日期信息,追加到 /tmp/maydate 文件中 */1 * * * * date # 每隔 10 分钟,将当前日期和日历都追加到 /home/mycal 文件中 */10 * * * * date +%c;cal >> /home/mycal # 或者写一个脚本,然后在任务调度文件中调用脚本 # 每天凌晨 2:00 将 mysql 数据库中 testdb 库,备份到 /home/db.bak 文件中 # 提示:备份指令 mysqldump -u 用户名 -p密码 数据库 0 2 * * * mysqldump -u 用户名 -p密码 testdb >> /home/db.bak
- cron 表达式举例
2. at 定时任务
-
基本介绍
at
命令时一次性定时计划任务,at
的守护进程atd
会以后台模式运行,检查作业队列并运行- 默认情况下,
atd
守护进程每 60 秒检查作业队列。队列有作业时,检查作业运行时间,若计划时间与当前时间匹配,则运行此作业。at
定时任务的最小间隔为 1 分钟 at
命令是一次性定时计划任务,一个作业执行后不再执行该计划- 在使用
at
命令时,一定要保证atd
进程启动,可使用相关指令查看
-
命令格式
at [选项] [时间] at> 命令 (Ctrl + D) (Ctrl + D)
第一行:at 指令输入结束后,回车到下一行输入指令
第二行:开头的 at> 无需输入,是系统自动添加的
命令输入结束后:Ctrl + D 结束命令的输入,要输入两次 -
常用选项
-m
当前任务执行后,向用户发送邮件
-l
(=atq
指令)list:列出当前用户的 at 任务队列
-d
(=atrm
指令)delete:删除 at 任务
-v
显示任务的将被执行的时间
-c
输出任务内容(任务指令)
-V
显示版本信息
-f <文件>
从指定的文件读入,而不是从标准输入
-t <时间参数>
以时间参数的形式提交要运行的任务,时间参数MMDDhhmm
(月日时分) -
at 时间定义
格式 含义 举例 HH:MM 当天 HH:MM 执行,若当天时间已过,则在明天 HH:MM 执行 当天 4:00 (若超时则为明天 4:00): 4:00
英文粗略时间单次 midnight(午夜,00:00)、noon(中午,12:00)、teatime(下午茶时间,16:00) midnight、noon、teatime 英文月名A 日期B [年份C] C年A月B日执行 在 2018 年 1 月 15 日执行: January 15 2018
日期时间戳形式 绝对计时法
时间+日期
时间:HH:MM
日期:MMDDYY
或MM/DD/YY
或MM.DD.YY
在 2018 年 1 月 15 日执行: 011518
或01/15/18
或01.15.18
now + 数量 单位 相对计时法
以 minutes、hours、days 或 weeks 为单位5 天后的此时此刻执行:
now + 5 days
-
其他指令
# 守护进程 atd 查看状态 service atd status systemctl status atd ps -ef | grep "atd" ps -aux | grep "atd" # 守护进程 atd 启动/停止/重启/查看进程状态 service atd start/stop/restart/status systemctl start/stop/restart/status atd
-
应用实例
# 2 天后的下午 5 点执行 /bin/ls /home at 5pm + 2 days at> bin/ls /home (Ctrl + D) (Ctrl + D) # 查看当前用户中的 at 任务队列 atq # 也可用替代指令 at- l at -l # 明天 17 点,将时间+日期、日历追加输出到 /home/date100.log 文件 at 17:00 tomorrow at> date +%c;cal >> /home/date100.log (Ctrl + D) (Ctrl + D) # at 时间也可写为 5pm + 1 day / 5pm tomorrow / 17:00 + 1 day # 2 分钟后,将时间覆写输出到 /root/date200.log 文件 at now + 2 minutes at> date +%T > /root/date200.log (Ctrl + D) (Ctrl + D) # 2018 年 5 月 10 日 16:00 执行 /home/mycentos.sh 脚本 at 16:00 5/10/18 at> /home/mycentos.sh (Ctrl + D) (Ctrl + D) # at 日期也可写为:4pm May 10 2018 / 4pm 051018 / 16:00 05.10.18 # 删除任务号 8 的 at 任务 at -d 8 # 也可用 atrm 指令 atrm 8