导图社区 第四部分 Linux 使用者管理
这是一篇关于第四部分 Linux 使用者管理的思维导图,主要介绍了chapter 14Linux账号管理与ACL权限设置、专门管理密码相关数据、有效与初始用户组、账号管理、用户功能、ACL、用户身份切换、手动新增用户等方面的内容,内容涵盖面广,总结到位。
编辑于2021-12-03 16:02:21云计算中的部分存储基础知识整理,包括:开源企业存诸freenas、Account、storage、Sharing。
网络基础知识思维导图,主要内容有网络范围、网络模型(标准)、单位、数据发送方式、数据包装格式、网络层IP协议、网络设备路由器/交换机设置。
这是一篇关于第五部分 Linux 系统管理员的思维导图,从chapter 20 启动流程、模块管理与Loader、内核与内核模块、内核模块查看、initrd的重要性与创建initrd文件、内核功能中的vga设置、init配置文件错误等内容,总结的非常细致全面。
社区模板帮助中心,点此进入>>
云计算中的部分存储基础知识整理,包括:开源企业存诸freenas、Account、storage、Sharing。
网络基础知识思维导图,主要内容有网络范围、网络模型(标准)、单位、数据发送方式、数据包装格式、网络层IP协议、网络设备路由器/交换机设置。
这是一篇关于第五部分 Linux 系统管理员的思维导图,从chapter 20 启动流程、模块管理与Loader、内核与内核模块、内核模块查看、initrd的重要性与创建initrd文件、内核功能中的vga设置、init配置文件错误等内容,总结的非常细致全面。
Linux
第四部分 Linux 使用者管理
chapter 14 Linux 账号管理与ACL权限设置
linux 的账号与用户组
用户标识符
UID
GID
用户账号
管理用户 UID/GID 重要参数
/etc/passwd
系统账号:bin/daemon/adm/nobody 等
结构:七字段
账号名称
就是账号,与第三字段UID对应
密码
数据在 /etc/shadow,c此处只显示 x
UID
用户标识符
对UID的限制 (根据 id 范围)
0 (系统管理员)
UID 为0,代表账号是系统管理员
1~499 (系统账号)
1~99
由 distributions 自行创建的系统账号
100~499
若用户有系统账号的需求时可使用的账号 UID
500~65535 (可登录账号)
给一般用户使用
GID
与 /etc/group 有关,和 /etc/passwd 差不多,用来规定组名与 GID 的对应关系
用户信息说明列
解释账号意义,给 finger 功能提供信息
主文件夹
用户主文件夹
Shell
通过该字段指定用户登录后取得的默认shell
特别的 shell
/sbin/nologin
可用来替代默认shell使账号无法取得shell环境的登录操作

专门管理密码相关数据
/etc/shadow
结构:九字段
账号名称
即账号,必须与/etc/passwd 一致
密码
真正的密码,经过编码(加密),在该字段最前面加上 !或者 * 改变字段长度就可使密码暂时失效
最近更动密码的日期
改动密码的日期,记录的是自1970年1月1日以来的总天数)
密码不可被更动的天数(相比以第三字段)
表示该账号密码在最近一次被更改后需要经过几天才可以被再更改,设置为 0 表示密码随时可改动
密码需要重新更改的天数(相比以第三字段)
强制要求用户更改密码,通过该字段指定在最近一次更改密码后在多少天数内需要再次更改密码才行,设置为 99999表示密码的更改没有强制性
密码需要更改期限前的警告天数(相比以第五字段)
当密码有效期限快到时(第五字段决定)系统依据该字段设置发出警告提醒再过n天密码将过期 e.g: 设置为7 则在密码到期之前的7天内会警告用户
密码过期后账号宽限时间(密码失效日,相比以第五字段)
密码有效期为 “更新日期”(第三字段) + “重新更改日期”(第五字段),过了该期限用户未更新密码就算过期了,但账号可继续使用,只是登录系统时系统会强制要求重新设置密码;而通过该字段设置,在密码过期几天后,若用户依旧未更新密码,则该账号密码失效,也无法再登录
账号失效日期
和第三字段一样是自1970以来的总天数,表示账号在该字段规定的日期后将无法使用("账号失效"),无论密码是否过期该账号都无法使用
保留
保留字段

密码忘记!!
对于一般用户
通过root用户使用 passwd命令修改
root 用户
使用各种可行的方法开机进入Linux 后再修改
重启进入单用户维护模式再以 passwd 修改
有效与初始用户组
/etc/group
结构:四字段
用户组名称
用户组密码
显示 x ,实际密码在 /etc/gshadow
GID
用户组 ID,与 /etc/passwd 第四字段对应
此用户组支持的账号名称
一个账号可以加入多个用户组若需要将某账号加入某个用户组,将该账号填入那个用户组的该字段内即可,多个以逗号隔开

有效用户组与初始用户组
初始用户组
/etc/passwd 中第四字段记录的 GID即为初始用户组
在 /etc/group 中,用户的初始用户组的第四字段不需要填入该账号名称,但非初始用户组必须填入
有效用户组
当新建文件或目录时,新文件或目录的组决定于有效用户组
groups 命令
查看有效用户组与支持的用户组
直接输入 groups 查询当前登录账号的用户组,第一个输出的用户组就是有效用户组
newgrp 命令
切换有效用户组
直接输入 newgrp group1切换当前登录账号的有效用户组为 group1,但先决条件是 group1已经是当前帐号所支持的用户组才能切换
该命令是以另一个(新的)shell来提供切换功能:在新shell中给予用户有效用户组为新用户组,故可通过 exit 回到原来的bash环境
/etc/gshadow
结构:四字段
用户组名
密码列
开头为 ! 表示该用户组没有用户组管理员
用户组管理员账号
该用户组支持的账号
账号管理
新增与删除用户
useradd
useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-mM] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 用户账号名
-u:后面接 UID,一组数字,直接指定一个特定的UID给该账号
-g:后面接要设置为初始用户组的组名,该用户组的GID会被放置到/etc/passwd 的第四字段
-G:后面接的组名则是该账号还可以加入的用户组(次要用户组)
-m:强制!不要创建用户主文件夹(系统账号默认值)
-M:强制!要创建用户主文件夹(一般账号默认值)
-c:/etc/passwd 的第五字段的说明内容
-d:指定某个目录为主文件夹,务必使用绝对路径
-r:创建一个系统的账号,账号的UID会有限制
比如没有主文件夹/UID和GID有范围限制
-s:后面接一个shell,没指定默认为/bin/bash
-e:后面接一个日期(YYYY-MM-DD),会将该参数写入/etc/shadow 的第八字段,即设置账号失效日
-f:后面接 /etc/shadow 第七字段,设定密码是否会失效,0为立刻失效,-1为永远不失效
直接通过useradd user 新增,系统做的默认工作
在/etc/passwd 中创建一行与账号相关的数据,包括创建UID/GID/主文件夹等
在 /etc.shadow 中将账号密码相关的参数填入,但尚未有密码
在/etc/group 中加入一个与账号名称一样的组名
在/home 下面创建一个与账号同名的目录为主文件夹,权限为700
最后 passwd user 即可完成
useradd 参考文件
可通过 useradd -D 命令调出/etc/default/useradd 的内容
GROUP=100
默认用户组
两种机制
私有用户机制
系统会创建一个与账号名称一样的用户组,主文件夹权限将会设置为700,这种机制将不会参考GROUP=100,THEL/CentOS等使用
公共用户机制
新建账号的初始用户组使用 GID 为100 的 users 这个用户组,主文件夹的默认权限会是 “drwxr-xr-x”,主文件夹可互享。SuSE使用
HOME=/home
默认主文件夹所在目录
用户主文件夹的基准目录,用户主文件夹目录是与账号同名的目录,会被放到该设置值的目录后面
INACTIVE=-1
密码失效日,/etc/shadow 第 7 字段
密码过期后是否会失效的设置值,指定 /etc/shadow 第 7 字段日期,0 代表密码过期立刻失效,-1 代表密码永远不会失效,数字(e.g:30)代表过期30天后失效
EXPIRE=
账号失效日,/etc/shadow 第 8 字段
SHELL=/bin/bash
默认 shell
默认使用的shell程序文件名
SKEL=/etc/skel
用户主文件夹的内容参考目录
新增用户主文件夹内的内容是由 /etc/skel 所复制进去的,若想账号新增完用户的环境~/.bashrc 就设置妥当可以通过编辑 /etc/skel 实现,也可以新建/etc/skel/xxx 这个目录,那么新增用户后,其主文件夹下也就会由xxx那个目录
CREATE_MAIL_SPOOL=yes
是否主动帮用户创建邮件信箱

UID/GID 密码参数参考文件
/etc/login.defs

MAIL_DIR
用户默认信箱 mailbox 文件放置目录
/etc/shadow 第 4,5,6 字段内容
PASS_MAX_DAYS
第 5 字段
PASS_MIN_DAYS
第 4 字段
PASS_WARN_AGE
第 6 字段
UID/GID 指定数值
UID_MIN
可登录系统的一般账号的最小 UID
新UID的生成:先参考 UID_MIN 设置值取得最小的,由 /etc/passwd 查找最大 UID 数值,将两者相比取出最大的再加一
UID_MAX
可登录系统的一般账号的最大 UID
用户主文件夹设置值
CREATE_HOME
在不加 -m 和 -M 时是否主动创建主文件夹
主文件夹权限设置值
UMASK
全权限 777 拿掉 umask 的 077,故主文件夹权限为 700
用户删除与密码设置值
USERGROUPS_ENAB
使用 userdel 删除用户时是否会删除初始用户组?即使用 userdel 删除一个账号时,若该账号所属的初始用户组已经没有用户隶属于该用户组了,就会删除该用户组
MD5_CRYPT_ENAB
表示使用MD5来加密密码明文
passwd 设置密码
passwd [--stdin] [-l] [-u] [-S] [-n 天数] [-x 天数] [-w 天数] [-i 日期] 账号
--stdin:通过一个来自管道的数据作为密码输入
-l:Lock之意,会在 /etc/shadow 第 2 列最前面加上 ! 使密码失效
-u:与-l相反,解锁的意思
-S:列出密码相关参数,就是 /etc/shadow 内的大部分信息

那个日期就是密码创建日期
-n:后面接天数,设置 /etc/shadow 第 4 字段,不可修改密码天数
-x:后面接天数,设置 /etc/shadow 第 5 字段,必须修改密码天数
-w:后面接天数,设置 /etc/shadow 第 6字段,密码过期前几天警告
-i:后面接日期,设置 /etc/shadow 第 7 字段,密码到哪一天失效

对于 root 使用“passwd 账号”为一般账号设置密码,而无论是 root 还是一般账号直接使用 passwd 均表示修改自己的密码
chage
chage [-ldEImMW] 账号
-l(小写L):列出该账号详细密码参数
-d:后面接日期,修改 /etc/shadow 第 3 字段(最近修改密码日期),格式:YYYY-MM-DD
使用:为用户新增账号后,强制用户拿到账号密码后要登录重新设置密码

-E:后面接日期,修改 /etc/shadow 第 8 字段(账号失效日期),格式:YYYY-MM-DD
-I(大写i):后面接天数,修改 /etc/shadow 第 7 字段(密码失效日期)
-m:后面接天数,修改 /etc/shadow 第 4 字段(多少天内不能修改)
-M:后面接天数,修改 /etc/shadow 第 5 字段(多久需要修改)
-W:后面接天数,修改 /etc/shadow 第 6 字段(过期警告天数)
usermod
账号数据微调命令
usermod [-cdegGlsuLU] username
-c:后面接账号说明,修改 /etc/passwd 第 5 字段内容
-d:后面接账号主文件夹,修改 /etc/passwd 第 6 字段内容
-e:后面接日期(YYYY-MM-DD),修改/etc/shadow 第 8 字段内容
-f:后面接天数,修改 /etc/shadow 第 7 字段
-g:后面接初始用户组,修改 /etc/passwd 第 4 字段
-G:后面接次要用户组,修改该用户能够支持的用户组,修改的是 /etc/group
-a:与 -G 合用可增加次要用户组的支持而非设置
-l(小写L):后面接账号名称,即修改 /etc/passwd 第 1 字段,账号名称
-s:后面接shell的实际文件 e.g: /bin/bash或/bin/csh
-u:后面接 UID 数字,修改 /etc/passwd 第 3 字段
-L:暂时将用户密码冻结,其实修改的是 /etc/shadow 的密码,前面加了 !
-U:将 /etc/shadow 密码字段的 !去掉

userdel
删除用户相关数据
userdel [-r] username
-r:连同用户主文件夹一起删除
若只是暂时不启用账号可以设置 /etc/shadow 第8字段为0让账号失效,如果确定要删除用户最好先 执行 find / -user username 查找出整个系统内属于 username 的文件,然后再进行删除
用户功能
一般用户常用的账号数据更改与查询命令
finger
查阅用户相关信息(/etc/passwd中的)
finger [-sm] username
-s:仅列出用户账号、全名、终端机代号与登陆时间等

直接执行 finger 可查询当前在系统上登录的用户信息
chfn
修改用户 finger 数据 (change finger)
chfn [-foph] [账号名]
-f:后面接完整的全名
-o:后面接办公室房间号
-p:后面接办公室电话号码
-h:后面接家庭号码
可以直接执行 chfn 按照提示修改
chsh
chsh [-ls]
-l:列出目前系统上可用的shell,就是/etc/shells 的内容
-s:后面接shell文件,设置修改自己的shell
id
id [username]
查询相关 ID 信息
新增或删除用户组
groupadd
groupadd [-d gid] [-r] 用户组名
-g:后面接某个特定的 GID,用来直接给以某个 GID
-r:新建系统用户组,与 /etc/default/defs 中的 GID_MIN 有关 ,优选使用
groupmod
groupmod [-g gid] [-n group_name] 用户组名
-g:修改既有的用户组 GID 数字
-n:修改既有的组名
groupdel
groupdel [groupname]
当发现无法删除某个用户组时,说明系统中还有和账号是以该用户组为初始用户组的
gpasswd
用户组管理员功能
系统管理员的操作
gpasswd groupname
没有任何参数,表示给予groupname 一个密码
gpasswd [-A user1,...] [-M user3,...] groupname
-A:将 groupname 的主控权交给后面的用户管理,即设置该用户组的管理员是谁
-M:将某些账号加入该用户组中
gpasswd [-rR] groupname
-r:将 groupname 的密码删除
-R:让 groupname 的密码失效
用户组管理员的操作
gpasswd [-ad] user groupname
-a:将某位用户加入到 groupname 这个用户组中
-d:将某位用户从 groupname 中删除
ACL
Access Control List,用来提供传统owner,group,other 的 read,write,execute 权限之外的具体权限设置功能,它可以针对单一用户、单一文件或目录进行 r,w,x 权限的设置
控制权限途径
可以针对用户来进行权限设置(user)
可以针对用户组进行权限设置(group)
可以针对默认属性(mask)进行权限设置,即在设置目录下在新建文件或目录时设置新数据的默认权限
启动 ACL
查看文件系统是否支持 ACL

若系统默认没有加入acl的支持
mount -o remount,acl /
设置与查看 ACL
getfacl
取得某个文件/目录的 ACL 设置项目
getfacl filename

user::r-- # 用户列表栏为空代表文件所有者的权限 user:deployer:r-x # 针对 deployer 的权限设置为rx,与所有者并不同 group::r-- # 针对文件用户组的权限设置仅有r mask::r-x # 此文件默认的有效权限 other::r-- # 其他人拥有的权限
显示的数据前面加了 # 代表这个文件的默认属性
setfacl
设置某个文件/目录的 ACL 规定
setfacl [-bkRd] [{-m|-x} acl 参数] 目标文件名
-m:设置后续的 acl 参数给文件使用,不可与 -x 合用
-x:删除后续的 acl 参数,不可与 -m 合用
-b:删除所有的 ACL 设置参数
-k:删除默认的 ACL 参数
-R:递归设置 acl ,即包括子目录也被设置
-d:设置默认 acl 参数,只对目录有效在该目录新建的数据会引用此默认值
特殊权限设置方法
针对特定用户的方式
设置规范:
u:[用户账号列表]:[rwx]
e.g:针对 deployer 的权限规定 rx

若无用户列表,代表设置该文件所有者
针对特定用户组的方式
设置规范:
g:[用户组列表]:[rwx]
针对有效权限 mask 的设置方式
设置规范:
m:[rwx]
用户和组所设置的权限必须要存在于 mask 的权限范围内才会生效,即如果mask 权限为 r-- 即便user权限为 r-x或者group 权限为 rw-,user 和 group 的权限也是有 r 是有效的
针对默认权限的设置方式
设置规范:
d:[ug]:用户列表:[rwx]
e.g:setfacl -m d:u:deployer:rx 目标目录
代表用户 deployer 对目标目录及子目录都具有rx权限
用户身份切换
一般用户转变身份成为 root
以 su - 直接将身份变成 root
需要知道 root 密码
su [-l] [-c 命令] [username]
-:单纯使用 su - 代表使用login-shell的变量文件读取方式来登录系统,若没加用户名,则代表切换为 root 用户
-l:与 - 类似,但后面必须加欲切换的用户账号
-c:后面可加上命令,仅进行一次命令
su 与 su - 的区别
单纯使用 su 切换身份,读取的变量设置方式是 no-login shell 的方式,很多原本的变量不会改变,尤其是 PATH
以 su - 切换身份,读取的变量设置方式是 login-shell方式,会连同 PATH/MAIL/USER 等变量后转成新用户环境

若要完整切换到新用户环境,必须使用 su -username 或 su -l username
若只是想要执行一次 root 的命令 ,可以使用 su - -c "命令串"
以 sudo 命令 执行 root 的命令串
只需要输入用户自己的密码即可,但使用 sudo 命令的用户要提前设置到 /etc/sudoers
sudo [-b] [-u 新用户账号]
-b:将后续的命令让系统自行执行而不影响 目前的 shell
-u:后面可以接欲切换的用户,若无此项代表切换 root
visudo 与 /etc/sudoers
使用 visudo 命令修改
直接 vi /etc/sudoers 若存在语法错误,则sudo命令不可用
设置方式
单一用户可执行 root 所有命令的设置方式
执行 visudo,直接复制 root 行,将 root 改为其他用户即可

利用用户组设置
执行 visudo,将 83 行的注释取消,保存退出后将用户加入 whell 用户组 (usermod -a -G wheel username)即可,在最左边加上 % 代表后面接的是个用户组的意思
利用用户组且免密码的设置
执行 visudo,将 86 行的注释取消,保存退出后将用户加入 whell 用户组 (usermod -a -G wheel username)即可

/etc/sudoers
结构:用户账号 登录者的来源主机名=(可切换的身份) 可执行的命令
用户账号
系统的哪个账号可以使用 sudo 命令
登录者来源主机名
该账号由哪台主机连接到本 linux 主机,意思是这个账号可由哪台网络主机连接过来,该设置值可指定客户端计算机(信任用户)
可切换的身份
这个账号可切换成什么身份来执行后续命令
可执行的命令
这个命令务必使用绝对路径编写
用户的特殊 shell 与 PAM 模块
系统账号的 shell
/sbin/nologin

PAM
常用模块
/etc/pam.d/*
每个程序个别的PAM配置文件
/lib/security/*
PAM 模块文件的实际放置目录
/etc/security/*
其他 PAM 环境的配置文件
/usr/share/doc/pam-*/
详细的 PAM 说明文件
其他相关文件
limits.conf
ulimit 功能除了修改 ~/.bashrc配置文件外,系统管理员还可以同意通过 PAM 设置 /etc/security/limits.conf 来实现

四个字段
第一字段为账号或者用户组,若为用户组则前面加 @
第二字段为限制的依据,是严格限制(hard) 还是警告(soft)
第三字段为相关限制
fsize
限制文件容量,单位为 KB
maxlogins
限制登录用户数
第四字段为限制值
Linux 主机上用户间的信息传递
查询用户
w
who
查询目前已登录用户
last
lastlog
查询每个账号最近登陆时间

用户对谈
write
write 用户账号 [用户所在终端接口],输入完成 按 ctrl+d 结束并发送
mesg
屏蔽功能:不想接收消息 执行 mesg n 但 root 可以屏蔽任何人,一般用户无法拒绝 root 的信息,查看 mesg 状态直接执行 mesg,重新解除屏蔽执行 mesg y
wall
对所有系统上面的用户发送信息(广播)
wall "广播信息"
用户邮件信箱 mail
寄信
mail username@localhost -s "邮件标题" ,输完邮件内容最后一行输入小数点 . 即可 Cc:表示所谓的”副本“,不需要寄给其他人直接回车
代替键盘输入:
mail username@localhost -s "邮件标题" < filename
收信
也是 mail
信件最前面的>代表目前处理的信件,后面的 N 代表该封信件尚未读过,在提示符 & 后面输入 ?可查询 mail 的内部命令
h 命令
列出信件标题头,若要查阅10封信件的标题头: h 10
d 命令
删除后续接的信件号码,单封删除: d5 ,删除10~20封:d10-20,配合 q命令生效
s 命令
将信件保存成文件 e.g: 将第2封信件保存成~/mail.file 则执行 s 5 ~/mail.file
x 命令
不做任何操作离开mail程序,输入 exit 也可以,功能和 vim 的 :q!相似
q 命令
相对于 exit 不操作离开,q 则会进行两项操作:将刚才删除的信件移出 mailbox;将刚才阅读过的信件移入 ~/mbox,并且移出 mailbox
/var/spool/mail/username 可理解为username 的信箱
/home/username/mbox 可理解为 username 的收件箱
读取:mail -f /home/username/mbox
手动新增用户
检查工具
pwck
该命令检查 /etc/passwd 内的信息与实际主文件夹是否存在的信息,还乐意比较 /etc/passwd 与 /etc/shadow 信息是否一致,若 /etc/passwd 内的数据字段错误会提示用户修改
grpck
y用户组检查
pwconv
将 /etc/passwd 内账号与密码移动到 /etc/shadow 中
先比较/etc/passwd 及 /etc/shadow,若/etc/passwd 内存在的账号并没有对应的 /etc/shadow 密码,则pwconv 会去/etc/login.defs 取用相关密码数据并创建该账号的 /etc/shadow 数据;若 /etc/passwd 内存在加密后的密码数据,则pwconv 会将该密码列移动到 /etc/shadow 内,并将原来的 /etc/passwd 中相对应的密码改为列改为 x
pwunconv
相对于 pwconv :将 /etc/shadow 中的密码数据写回到 /etc/passwd 中并删除 /etc/shadow 文件
chpasswd
读入未加密的密码,加密后将加密的密码写入 /etc/shadow 中
e.g: 更新deployer 的密码为Deployer
echo "deployer:Deployer" | chpasswd -m
-m 指使用md5加密
chapter 15 磁盘配额(Quota)与高级文件系统管理
磁盘配额(Quota)的应用与实践
针对 Linux 的多用户、多任务环境,管理员通过 quota 让磁盘容量公平合理分配给用户以妥善分配系统资源
Quota 用途
针对网络服务
针对 WWW server,e.g:每个人的网页空间容量限制
针对 mail server,e.g:每个人邮件空间限制
针对 file server,e.g:每个人最大可用网络硬盘空间
针对 Linux 系统主机
限制某一用户组所能使用的最大磁盘配额(使用用户组限制)
限制某一用户的最大磁盘配额(使用用户限制)
以 Link 的方式来使邮件可以作为限制的配额(更改 /var/spool/mail 这个路径)
Quota 使用限制
仅能针对整个文件系统
内核必须支持 quota
支队一般身份用户有效
Quota 规范设置选项
针对整个文件系统的限制项目
容量限制或文件数量限制(block 或 inode)
限制 inode 用量:管理用户可以创建的“文件数量”
限制 block 用量:管理用户磁盘容量的限制
soft/hard
soft
低于 soft 可以正常使用,超过 soft 低于 hard,每次登录系统会收到警告信息并给予一个宽限时间
hard
用户的用量绝对不能超过的限制值,超过系统会锁住用户的磁盘使用权
会倒计时的宽限时间
默认的宽限时间为 7 天,若 7 天内都不做任何磁盘管理,那么soft 限制值会即刻代替 hard 限制值来作为 quota 的限制
Quota 配置流程:
1st step:查看文件系统
命令:df [-h]

2nd step:查看文件系统类型是否支持 Quota 功能(VFAT 文件系统不支持) 查看文件系统对用户和用户组的磁盘配额支持是否启动,用户与用户组的 quota 文件系统支持参数分别为 usrquota 和 grpquota
命令:mount

3rd step:启动文件系统对用户和用户组的磁盘配额支持
只想在本次开机中使用而启动 (手动挂载)
命令:mount -o remount,usrquota,grpquota /挂载点

每次开机自动启动 (修改/etc/fstab 配置文件)
命令:vim /etc/fstab 在文件系统参数字段添加 usrquota 和 grpquota 保存退出后 重新挂载:umount /挂载点 ;mount -a

4th step:扫描文件系统并创建 Quota 配置文件:quotacheck 命令
quotacheck [-augvfM] [挂载点]
-a:扫描所有在 /etc/mtab 内含有 quota 支持的文件系统,加了此参数 后面的挂载点不必写,代表扫描整个文件系统
-v:显示扫描过程信息
-u:针对用户扫描文件与目录的使用情况,会创建 aquota.user
-g:针对用户组扫描文件与目录的使用情况,会创建 aquota.group
-f:强制扫描文件系统,并写入新的 quota 配置文件
-M:强制以读写的方式扫描文件系统,特殊情况下使用
一般只需要加参数:-avug 即可

5th step:启动 Quota
启动 quota 的服务
quotaon [-avug]
-a:根据 /etc/mtab 内的文件系统设置启动有关的 quota,不加 a 则后面需加上特定的文件系统
-u:针对用户启动 quota (aquota.user)
-g:针对用户组启动 quota (aquota.group)
-v:显示启动过程相关信息

quotaon [-vug] [挂载点]
关闭 quota 服务
quotaoff [-a]
-a:全部文件系统的 quota 都关闭 (根据 /etc/mtab)
quotaoff [-ug] [挂载点]
-u:仅针对后面接的挂载点关闭 user quota
-g:仅针对后面接的关在点关闭 group quota
6th step:设置用户与用户组的 quota 限额
编辑账号/用户组的限值与宽限时间
edquota [-u username] [-g groupname]
-u:后面接账号名称,可以进入 quota 的编辑界面设置 username 的限制值
-g:后面接组名,可以进入 quota 的编辑界面设置 groupname 的限制值
edquota -t
-t:可以修改宽限时间
edquota -p 范本账号 -u 新账号
-p:复制范本,“范本账号”是已经存在并且已设置好 quota 的用户,意思是将 "范本账号" 这个用户的 quota 限制值复制给新账号
quota 编辑界面字段值
filesystem
文件系统,说明该限制值是针对哪个文件系统(partition)
blocks
磁盘容量,该数值是 quota 自己计算出来的,单位是 KB
soft
磁盘容量(block) 的 soft 限制值,单位:KB
hard
block 的 hard 限制值,单位:KB
inodes
文件数量,也是 quota 自己算出来的,单位为个数
soft
inode 的 soft 限制值
hard
inode 的 haed 限制值
soft/hard 为 0 时,代表没有限制 quota 编辑界面中,每一行只要保持 7 个字段就行,并不需要排列整齐

直接于命令中设置 quota 限额
setquota [-u|-g] 名称 block(soft) block(hard) inode(soft) inode(hard) 文件系统

Quota 限制值报表
两种模式
针对每个个人或用户组的 quota 命令
quota [-uvs] [username]
-u:后面可以接 username,表示显示出该用户的 quota 限制值,若不接 username 则显示执行者的 quota 限制值
-v:显示每个用户在文件系统中的 quota 限制值
-s:使用 1024 为倍数来指定单位,会显示 M 单位
quota [-gvs] [groupname]
-g:后面可接 groupname,表示显示出该用户组的 quota 限制值
针对整个文件系统的 repquota 命令
repquota -a [-vugs]
-a:直接到 /etc/mtab 查询具有 quota 标志的文件系统,并报告 quota 结果
-v:输出的数据将包含文件系统相关的详细信息
-u:显示出用户的 quota 限值(默认值)
-g:显示出个别用户组的 quota 限值
-s:使用 M,G 为单位显示结果

Quota 测试与管理
测试

管理:邮件的方式给用户发警告信
warnquota
依据 /etc/warnquota.conf 的设置,找出系统上 quota 用量超过 soft 的账号,通过 Email 的功能将警告信发送到用户的电子邮件信箱,只有当用户的 quota 有超过 soft时,执行 warnquota 才会发出警告信,但命令执行完并不会返回任何信息
若想要改变警告信的格式 就编辑 /etc/warnquota.conf,注意在 MESSAGE 内的 | 代表断行,反斜杠 \ 代表连接下一行

软件磁盘阵列 (Software RAID)
What?
容错磁盘阵列,通过技术(软件或硬件)将多个较小的磁盘整合成一个较大的磁盘设备
等级 (level)
RAID-0
等量模式 (stripe)
组成 RAID-0 的每块磁盘会被切出等量的区块,存文件时,先将文件按照区块的大小切割好,然后数据会被等量放置在各个磁盘(依照文件切割出来的顺序交错存放到各个磁盘)
总容量是每块磁盘的容量加总
越多块磁盘组成 RAID-0 性能越好(因为每块负责的数据量越小)
优点:性能最佳
缺点:RAID-0 只要有任何一块磁盘损毁,在 RAID 上的所有数据都会丢失而无法读取
组成 RAID-0 的每块磁盘型号和容量一样效果较佳,若容量不一样,当数据经等量存放用完小容量磁盘的区块时,那么后续的数据将被写入最大的那块磁盘,此时的性能将会变差

RAID-1
映像模式 (mirror)
同一份数据将完整的保存在两块磁盘上面,存文件时,数据文件传送至 RAID-1 之后会被分成两股,并分别写入到各个磁盘中
总容量是全部磁盘容量的一半,因为磁盘容量有一半用在备份
优点:数据能备份
缺点:总容量减半并且数据写入性能差,如果使用的是软件磁盘阵列,数据传送到 I/O 总线后再复制多份到各个磁盘,依靠一块南桥芯片,性能就不好,若使用硬件磁盘阵列(有磁盘阵列卡),磁盘阵列卡会主动复制数据而不使用系统总线,性能较佳
组成 RAID-1 的每块磁盘最好一模一样(型号和容量),若容量不同,则组成的 RAID-1 总容量将以最小的那块磁盘为主
RAID 0+1,RAID 1+0
RAID 0+1
先让两块磁盘组成 RAID-0 模式,并且这样的设置有两组,再将这两组 RAID-0 再组成 RAID-1 模式
优点:性能好,又能备份
缺点:也具有 RAID-1 的缺点,总容量会少一半用来备份

RAID 1+0
反过来,先组成 RAID-1 ,再组成 RAID-0

RAID-5
至少需 3 块以上的磁盘组成,数据写入类似 RAID-0,不同之处在于再每次循环写入前,在每块磁盘上还加入一个同位检查数据(Parity),该数据会记录其他磁盘的备份数据。每个循环写入时都会有同位检查码(Parity)记录下来且每次都记录在不同的磁盘
总容量是整体磁盘容量减一块的量(整体有一块磁盘用来存放同位检查码)
优点:读取性能较佳,写入性能不太好,因为写入时要计算同位检查码,若为软件磁盘阵列是通过CPU去计算,若为硬件磁盘阵列,由磁盘阵列卡去计算会较佳
仅能支持一块磁盘损毁,若损毁的磁盘数大于等于两块则 RAID 5 的数据就损毁了

RAID-6
使用两块的容量作为 Parity 的存储,整体容量减少两块,但也就允许两块磁盘出错,即同时两块磁盘损毁,数据也可以救回来
预备磁盘(Spare Disk)的功能
磁盘阵列数据的恢复
关机,拔除坏的磁盘插入新的磁盘,顺利启动磁盘阵列后,磁盘阵列就会开始主动重建原本坏掉的磁盘数据到新的磁盘上
通过预备磁盘的辅助能让系统实时地在有坏掉的磁盘时主动重建
spare disk 就是有一块或多块没有包含在原本磁盘阵列等级中的磁盘,该磁盘日常不会被磁盘阵列使用,当磁盘阵列有任何磁盘损毁时,则这块磁盘会被主动拉入磁盘阵列等级中并将坏掉的那块磁盘移出磁盘阵列然后立即重建数据,更换坏的的磁盘后再将新的磁盘设置为 spare disk
磁盘阵列优点
数据安全于可靠
并不是信息安全,而是指当硬件(磁盘)损毁时,数据能否安全救援或使用
读写性能
RAID-0 可加强读写性能,改善系统 I/O
容量
单一文件系统可以有相当大的容量
software,hardware RAID
硬件磁盘阵列通过磁盘阵列卡完成数组
软件磁盘阵列主要是通过软件(mdadm)来仿真数组的任务
mdadm
以分区或磁盘单位,两个以上的分区就可以设计磁盘阵列
磁盘阵列在 linux 上的设备名
硬件磁盘阵列
就是一块实际的大磁盘
/dev/sd[a-p]
软件磁盘阵列
由系统仿真,故就是系统的设备文件
/dev/md0,/dev/md1
software RAID
查看软件磁盘阵列信息
mdadm --detail /dev/md0
--detail:后面所接那个磁盘阵列设备详细信息
创建软件磁盘阵列
mdadm --create --auto=yes /dev/md[0-9] --raid-devices=n --level=[015] --spare-devices=n /dev/sdx /dev/hdx ...
--create:新建 RAID 的参数
--auto=yes:决定新建后面接的软件磁盘阵列设备,即 /dev/md0, /dev/md1 等
--raid-devices=n:使用几个磁盘作为磁盘阵列的设备
--spare-devices=n:使用几个磁盘作为 spare 设备
--level=[015]:设置这组磁盘阵列的等级,支持很多,建议只要用0,1,5 即可
最后面接许多的设备文件名,这些设备文件名可以是整块磁盘比如:/dev/sdb,也可以是分区:/dev/sdb1 之类,但这些设备文件的总数必须等于 --raid-devicdes 与 --spare-devices 的个数总和
仿真 RAID 错误的救援模式
mdadm --manage /dev/md[0-9] [--add 设备] [--remove 设备] [--fail 设备]
--add:会将后面的设备加入到这个 md 中
--remove:会将后面的设备从这个 md 中删除
--fail:会将后面的设备设置为出错状态
开机自启动 RAID 并挂载
创建 software RAID 配置文件
/etc/mdadm.conf
将 RAID 的设备名与 UUID 对应加进去即可

修改 /etc/fstab
保存后:umount /dev/md0;mount -a 即可

关闭 软件 RAID (important!!)
1st step 卸载 /dev/md0

2nd step 删除配置文件内与这个 /dev/md0 有关的设置,删除那行或者注释掉

3rd step 直接关闭 /dev/md0

4th step 再删除配置

practice
期望的 RAID 5 环境
利用 4 个分区组成 RAID 5
每个分区一样大小,1 GB
利用一个分区设置为 spare disk
该 RAID 5 设备挂载到 /mnt/raid 目录下
操作步骤
删除系统中目前用不到的分区

新增用于做磁盘阵列所需的分区

以 mdadm 创建 RAID

查看 RAID 信息及状态
查看信息
mdadm --detail /dev/md0

最好等会再使用 mdadm --detail /dev/md0 查看

查看状态
cat /proc/mdstat

第一行:指出 md0 为 raid 5,且使用了 sda9,sda10,sda8,sda7,sda6 五块磁盘设备,每个设备后中括号中的数字为此磁盘在 RAID 中的顺序,sda10 后面的 S 代表sda10 为 spare
第二行:此磁盘阵列拥有 3011712 个block(每个block 单位为 1KB),使用 RAID 5 等级,写入磁盘的小区块(chunk)大小为64KB,使用 algorithm 2 磁盘阵列算法。[m/n]代表此数组需要 m 个设备,且 n 个设备正常运行,后面的 [UUUU]代表四个所需设备(就是 [m/n] 中的 m)的启动情况,U代表正常运作,若为 _则代表不正常
格式化与挂载使用 RAID
格式化

挂载

仿真 RAID 错误救援
使用中的 RAID 5


置错 RAID 5


过一会后

将出错磁盘删除并加入新磁盘


逻辑卷管理器 LVM (Logical Volume Manager)
What?
简单点
LVM 可以弹性调整文件系统的容量。
LVM 可以整合多个物理分区在一起,让这些分区看起来就像是一块磁盘一样,还可以在将来添加其他的物理分区或者将其从这个 LVM 管理的磁盘中删除
复杂点
LVM 将几个物理的分区(或磁盘)通过软件组合成一块看起来是独立的大磁盘(VG),然后将这块大磁盘再分成可使用分区(LV),最终挂载使用
选项
PV
物理卷 (PhysicalVolume)
分区时通过 fdisk 调整系统标识符(System ID) 为 8e (LVM 的标识符),再经过 pvcreate 命令将其转成 LVM 最底层的物理卷 (PV),之后才能对 PV 加以利用
VG
卷用户组 (Volume Group)
LVM 大磁盘就是将许多 PV 整合成 VG,其容量与 PE 有关,每个 VG 最多仅能包含 65534个 PE ,使用 LVM 默认的参数,则一个 VG 最大可达 256GB容量
PE
物理扩展块 (Physical Extend)
LVM 默认使用 4MB 的 PE,是整个 LVM 最小存储块,文件数据也是由写入 PE 来处理
LV
逻辑卷 (Logical Volume)
最终的 VG 还会被切成 LV 以可以被格式化使用,LV 的大小与在此 LV 中的 PE 总数有关
LV 设备文件名:/dev/vgname/lvname
LVM 弹性更改文件系统容量就是通过交换 PE 来进行数据转换,将原本 LV 内的 PE 移转到其他设备中就降低 LV 容量,将其他设备的 PE 加到此 LV 中就加大容量

VG 内的 PE 会分给 虚线部分的 LV,若 VG 要扩容,加上其他 PV 即可,若最重要的 LV 要扩容,加入 VG 内没有使用到的 PE 即可
LV 创建流程
1st step 分区(partition)阶段
目标:分区并调整 System ID 为 8e
命令:fdisk
2nd step PV 阶段
目标:创建与查看 PV
命令:pvcreate,pvscan
pvcreate
将物理分区新建成为 PV
pvscan
查询目前系统中任何具有 PV 的磁盘
pvdisplay
显示出目前系统上面的 PV 状态
pvremove
将 PV 属性删除,让该分区不具有 PV 属性
3rd step VG 阶段
目标:以 PV 创建 VG
命令:vgcreate,vgdisplay
vgcreate
新建 VG 命令
vgcreate [-s N[mgt]] VG名称 PV名称
-s:后面接 PE 大小(size),单位可以是 m, g, t (大小写均可)
与 PV 不同,VG的名称是自定义,而 PV 的名称其实就是分区的设备文件名
vgscan
查找系统上面是否有 VG 存在
vgdisplay
显示出目前系统上的 VG 状态
vgxtend
在 VG 内增加额外的 PV
vgreduce
在 VG 内删除 PV
vgchange
设置 VG 是否启动 (active)
vgremove
删除一个 VG
4th step LV 阶段
目标:从 VG 中切割出 LV
命令:lvcreate,lvdisplay
lvcreate
新建 LV
lvcreate [-L N[mgt]] [-n LV名称] VG名称
-L:后面接容量,单位可以是M,G,T等注意最小单元为 PE,故这个数量必须为 PE 的整数倍
-n:后面接的就是 LV 的名称
lvcreate [-l N] [-n LV名称] VG名称
-l:后面可以接 PE 的个数而不是数量,需自行计算 PE 数
lvscan
查询系统上面的 LV
lvdisplay
显示系统上面的 LV 状态
lvextend
在 LV 里面增加容量
lvreduce
在 LV 里面减少容量
lvremove
删除一个 LV
lvresize
对 LV 进行容量大小调整
lvresize [-L +/-N[mgt]] LV名称
-L:后面接容量
+:代表增加
-:代表减少
lvresize [-l +/-N] LV名称
-l:后面接PE个数
5th step 文件系统使用阶段
目标:格式化后挂载使用
命令:mkfs,mount
mkfs -t ext3 LV设备文件名
LV 设备文件名必须要用全名:/dev/vgname/lvname
数据写入 LV 方式
线性模式
假如已将 /dev/sda1,/dev/sda2 这两个分区加入到 VG 中并且整个 VG 只有一个 LV时,当 /dev/sda1 的容量用完后 /dev/sda2 的硬盘才会被使用到
交错模式
将数据拆分成两部分,分别写入 /dev/sda1 与 /dev/sda2 的意思
LVM 最主要用途是在实现一个可以弹性调整文件容量的文件系统而不是新建一个以性能为主的磁盘, LVM 默认读写模式是线性模式
放大 LV 容量
流程
fdisk 设置新的 system ID 为 8e 的分区
pvcreate 构建 PV
vgextend 将新建的 PV 加入需放大 LV 的 VG 中
利用 lvresize 将新加入的 PV 内的 PE 加入 LV 中
最后,重要步骤!针对文件系统通过 resize2fs 将文件系统的容量增加
resize2fs [-f] [device] [size]
-f:强制进行 resize 操作
[device]:设备文件名
[size]:可加可不加,如果加了 size 就必须给予一个单位,M,G等,没有 size 默认使用整个分区的容量处理
缩小 LV 容量
流程
参考 practice
LVM 系统快照 snapshot
若系统创建了系统快照区,则系统会拥有 "快照"功能(将当时的系统信息记录下来)
系统"快照"功能意义:
当系统(某区域)有任何数据改动时,改动前系统会将该区域的数据移动至快照区(就如同拍了张照放到快照区)
用途:
利用快照区复原系统
notice:要恢复的数据量不能高于快照区所能负载的实际容量
快照区与被快照的 LV 必须要在同一个 VG 上
because:快照区与原本的 LV 共享很多 PE 区块
快照区的创建
fdisk 设置新的 system ID 为 8e 的分区
pvcreate 构建 PV
vgextend 将新建的 PV 加入需要被快照的 LV 的 VG 中
lvcreate 创建系统快照区
lvcreate [-l N] -s [-n 快照区名称] [要被快照的 LV 完整文件名]
-l:后面接使用多少个 PE 来作为这个快照区使用
-s:代表 snapshot 快照功能之意
-n:后面接快照区的设备名称
最后面的参数是要被快照的 LV 的完整文件名
LVM 相关命令与 LVM 的关闭
相关命令
LVM 的关闭
先卸载系统上面的 LVM 文件系统(包括快照与所有 LV)
使用 lvremove 删除 LV
使用 vgchange -an VGname 让 VGname 这个 VG 不再有 active 的标志
使用 vgremove 删除 VG
使用 pvremove 删除 PV
最后使用 fdisk 将 ID 改回来(82)

practice
期望的 LVM
利用 4 个分区组成 LVM,每个分区一样大小,1.5 GB,system ID 均为 8e
全部分区整合成一个 VG,VG 名称为 vincentvg,且 PE 大小为 16 MB
全部 VG 容量都给 LV, LV 名称为 vincentlv
最终这个 LV 格式化为 ext3 的文件系统,挂载到 /mnt/lvm 目录下
操作步骤·
删除系统中目前用不到的分区

新增用于做LVM所需的分区

PV 阶段

VG 阶段

LV 阶段

文件系统阶段

放大 LV 容量
设置新的 8e 分区

pvcreate 创建新 PV

vgextend 将新建的 PV 加入vincentvg

利用 lvresize 将新加入的 PV 内的 PE 加入 vincentlv 中

子主题

缩小 LV 容量:将 /dev/sda6 抽离出来
pvdisplay 查看/dev/sda6 容量大小,计算文件系统需要缩小多少

resize2fs 降低文件系统容量

lvresize 降低 LV 容量

将 /dev/sda6 移出 vincentvg 这个 VG
先确定 /dev/sda6 里面的 PE 完全不被使用才能将 /dev/sda6 抽离

对于这种情况就需要进行 PE 转移
pvmove 来源PV 目标PV
将 /dev/sda6 内的 PE 全部移动到 /dev/sda10 尚未被使用的 PE 去

再将 /dev/sda6 移出 vincentvg

系统快照区
直接使用之前的 /dev/sda6,通过pvcreate 构建 PV

vgextend 将新建的 PV 加入 vincentvg 中

lvcreate 创建系统快照区

利用快照区复原系统
做点改动

利用快照区将原本的文件系统备份

将 vincents 快照区删除(已经备份了)再使用备份文件还原
先看看还原前的状态

还原

已经还原到复制文件到 /mnt/lvm 之前的状态
chapter 16 例行性工作(crontab)
例行性工作
Linux 工作调度方式
例行性
每个一定周期就要办的事项
linux 上功能实现方式
crontab
crontab 命令所设置的工作将会循环一直进行下去
可循环的时间:
分钟
小时
每周
每月
每年
/etc/crontab
需要的服务
crond
突发性
做完一次就不再需要办的事项
linux 上功能实现方式
at
可以处理仅执行一次就结束调度的命令
需要的服务
atd
Linux 上常见的例行性工作
日志文件的轮替 (log rotate)
日志文件分析任务(logwatch)
新建 locate 的数据库
locate
通过已经存在的文件名数据库来进行系统中文件名的查询
文件名数据库位置
/var/lib/mlocate
whatis 数据库的建立
whatis
与 man page 有关的查询命令,必须要有 whatis 数据库
RPM 软件日志文件的新建
删除临时文件
系统通过例行性工作调度执行名为 tmpwatch 的命令来删除临时文件
与网络服务有关的分析行为
单一工作调度
atd 的启动与 at 运行方式
atd 的启动
/etc/init.d/atd restart
开机自动启动服务
chkconfig atd on
at 运行方式
先寻找 /etc/at.allow 文件,写在这个文件中的用户才能使用 at ,没在这个文件中的用户不能使用 at (即使没有写在 at.deny 当中)
若 /etc/at.allow 不存在,则寻找 /etc/at.deny 文件,若是写在这个文件中的用户则不能使用 at ,而没有在这个文件中的用户就可以使用 at
如果 /etc/at.allow 和 /etc/at/deny 两个文件都不存在,那么只有 root 可以制用 at 命令
at [-mldv] TIME
-m:当 at 工作完成后,即使没有任何信息输出,以 email 通知用户该工作已经完成
-l:at -l 相当于 atq,列出目前系统上所有该用户的 at 调度
-d:at -d 相当于 atrm,可以取消一个在 at 调度中的工作
-v:可以使用较明显的时间格式列出 at 调度中的任务列表
TIME:时间格式
HH:MM
在今日的 HH:MM 时刻进行,若已过时刻则在明天的 HH:MM 进行此工作
e.g:02:00
HH:MM YYYY-MM-DD
强制规定在某年某月的某一天的特殊时刻进行该工作
e.g:02:00 2021-05-17
HH:MM[am|pm] [Month] [Date]
e.g:02pm May 17
HH:MM[am|pm] + number [minuts|hours|days|weeks]
e.g:
now + 5 minuts
02pm + 3 days
输入完 TIME 回车执行后会进入 at shell 的环境设置具体工作,最好使用绝对路径来执行命令,此外,at 的执行与终端机环境无关,所有 stdout/stderr 都会传送到执行者的 mailbox 去!
at -c 工作号码
-c:可以列出后面接的该项工作的实际命令内容
at 的后台执行
在 at 工作调度的使用上,系统会将该项 at工作独立出 bash 环境直接交给系统的 atd 程序接管,使用 at 按完 Ctrl+d 后,系统会在 /var/spool/at 目录下创建用户所设置工作的文本文件以等待 atd 这个服务的取用与执行,执行完即删除 /var/spool/at 目录下对应的那个文件

at 工作管理
atq
查询
atrm
删除
batch
系统有空时才进行后台任务
在 cpu 工作负载小于 0.8 的时候才进行用户所执行的工作任务
用法和 at 一样
batch TIME,查询和删除同样用 atq/atrm
循环执行的例行性工作调度
用户设置
/etc/cron.allow
将可以使用 crontab 的账号写入其中,不在这个文件内的用户则不能使用 crontab
/etc/cron.deny
将不可以使用 crontab 的账号写入其中,未记录到这个文件中的用户就可以使用 crontab
用户使用 crontab 命令新建工作调度后,该项工作就会被记录到 /var/spool/cron/ 里面,且以用户账号判别(/var/spool/cron/用户账号)此外,cron 执行的每一项工作都会记录到 /var/log/cron 日志文件中
crontab
crontab [-u username] [-l|-e|-r]
-u:只有 root 才能执行这个任务,即帮其他用户新建/删除 crontab 工作调度
-e:编辑 crontab 的工作内容
crontab -e 后会进入 vi 环境编辑,一个工作一行
-l:查阅 crontab 的工作内容
-r:删除所有 crontab 的工作内容,若仅删除一项,用 -e 去编辑
crontab -e 的 六字段(从左至右排列:”分时日月周命令“)
0~59
分钟
0~23
小时
1~31
日期
1~12
月份
0~7
周
0或7都代表 ”星期天“
命令
辅助字符
* (星号)
代表任何时刻都接受的意思
e.g:0 12 * * * command
日、月、周都是 * 代表无论何月、何日的周几的 12:00 都执行 command
,(逗号)
代表分隔时段的意思
e.g:0 3,6 * * * command
时间参数还是五列,第二列是 3,6 代表 3 和 6 都适用,意思就是 3:00 和 6:00 执行工作 command
- (减号)
代表一段时间范围内
e.g:8点到12点之间的每小时的20分都进行一项工作, 8-12 代表 8,9,10,11,12都适用
20 8-12 * * * command
/n (斜线)
n 代表数字,每隔 n 单位间隔的意思
e.g:每隔5分钟进行一次
*/5 * * * * command
0-59/5 * * * * command 也行
系统配置文件
/etc/crontab
cron 会每分钟读取一次 /etc/crontab 和 /var/spool/cron 里面的内容,修改完 /etc/crontab 重启 crond 服务:/etc/init.d/crond restart
基本机构和 crontab -e 差不多

MAILTO=root
当 /etc/crontab 这个文件中的例行性工作的命令发生错误时,或者该工作的执行结果有 stdout/stderr 时会将错误信息或屏幕显示信息传给谁,默认给 root 寄发mail
默认的四项工作任务
每小时、每天、每周及每月分别进行一次的工作
与 crontab -e 的区别
五字段后接的不是命令,而是执行后面那串命令的身份
通过 run-parts 这个 script 的辅助
该命令会将后面接的"目录"内的所有文件找出来执行
支持两种命令执行方式
直接执行命令
就是直接将工作任务命令接在 用户身份后面
一目录规划来执行
可以新建一个目录存放工作任务script,在 /etc/crontab 借助 run-parts,在用户身份后面连接该路径即可
注意事项
资源分配不均问题
e.g:将每五分钟执行的工作分配在不同时刻执行,避免让系统繁忙
1,6,11,16,21,26,31,36,41,46,51,56 * * * * root CMD1 2,7,12,17,22,27,32,37,42,47,52,57 * * * * root CMD2 3,8,13,18,23,28,33,38,43,48,53,58 * * * * root CMD3 4,9,14,19,24,29,34,39,44,49,54,59 * * * * root CMD4
取消不要的输出选项
当执行结果或执行选项中有输出数据,该数据会被 mail 给 MAILTO 设置的账号,当调度一直出错就会一直 mail ,利用重定向将输出结果输出到 /dev/null
安全的检测
检查 /var/log/cron 内容是否存在不是自己设置的 cron 被执行,若有很可能是木马
周与日、月不可同时并存
anacron
唤醒停机期间的工作任务
anacron
anacron [-sfn] [job]
-s:开始连续执行各项工作(job),会依据时间记录文件的数据判断是否进行
e.g:anacron -s cron.daily 的运行流程
由 /etc/anacrontab 分析知道 cron.daily 这项工作名称的天数为 1 天
由 /var/spool/anacron/cron.daily 取出最近一次执行 anacron 的时间戳
由上个步骤取得的时间戳与当前时间比较,若差异天数 为 1 天以上(>=1天),就需要执行
根据 /etc/anacrontab 的设置,cron.daily 需要延迟 65 分钟,延时时间到就开始执行后续命令即:run-parts /etc/cron.daily
执行完毕,anacron 程序结束
-f:强制执行而不去判断时间记录文件的时间戳
-n:立刻进行未进行的工作而不延迟等待时间
anacron -u [job]
-u:仅更新时间记录文件时间戳,不进行任何工作
job:由 /etc/crontab 定义的各项工作名称
/etc/anacrontab

anacron配合 /etc/anacrontab 的设置,唤醒停机期间系统未进行的 crontab 任务
chapter 17 程序管理与 SELinux 初探
进程 process
概念
程序被加载到内存当中运行,在内存中的那个数据称之为进程
执行 一个程序或命令从而触发一个事件时,系统系统都会将其定义为一个进程,并给予一个ID ,称为 PID ,同时依据触发这个进程的用户与相关属性关系,给予这个 PID 一组有效的权限设置
程序与进程
程序
通常为为二进制程序放置在存储媒介(硬盘、光盘等)中,以物理文件的形式存在
进程
程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载到内存中,操作系统给予这个内存单元一个标识符(PID),所以说进程就是一个正在运行中的程序
用户登录后取得一个进程,由这个进程衍生出来的其他进程(子进程)在一般状态下也会沿用这个进程的相关权限
过程调用流程
fork and exec
子进程的产生
系统先以 fork 的方式复制一个与父进程相同的暂存进程,该进程与父进程唯一的区别就是 PID 不同,但暂存进程或多一个 PPID(父进程标识符),然后暂存进程开始以 exec 的方式加载实际要执行的程序,最终成为一个子进程的存在
服务 daemon
常驻在内存中的进程(进程启动后在后台当中一直持续不断运行)称之为服务
工作管理 job control
what?
用户登录系统取得 bash shell 后,在单一终端机下同时进行多个工作的行为管理
在进行工作观管理的行为中,其实每个工作都是目前 bash 的子进程,彼此之间是有相关性的,用户无法以 job control 的方式由 tty1 的环境去管理 tty2 的 bash
前台 foreground
可以出现提示符让用户操作的环境
后台 background
可以自行运行的工作,无法使用 ctrl+c 终止,可使用 fg/bg 调用该工作
job control 命令
直接将命令都到后台中"执行"的 &
输入一个命令后,在该命令最后面加上 “&”
后台中执行的命令,如果由有 stdout 或 stderr 时,这些数据依旧是输出到屏幕的,可使用数据流重定向将输出的数据传送至某文件来避免这些数据影响前台
将目前的工作丢到后台 “暂停”ctrl+z
执行命令后出现的 + 代表最近一个被丢到后台的工作,当使用 fg 调用后台工作时默认会被取用该工作
查看目前的后台工作状态 jobs
jobs [-lrs]
-l:除了列出 job number 与命令串之外,同时列出 PID 的号码
-r:仅列出正在后台 run (运行)的工作
-s:仅列出正在后台当中 stop (暂停) 的工作
+/- 区别
+:最近被放到后台的工作
-:代表最近最后第二个被放置到后台中的工作
将后台工作拿到前台处理 fg
fg %jobnumber
让工作在后台下状态变成运行中 bg
bg %jobnumber
管理后台中的的工作
kill -signal %jobnumber
signal:代表给予后面接的那个工作什么样的指示
-1:重新读取一次参数的的配置文件(类似于 reload)
-2:代表与由键盘输入 ctrl+c 同样的操作
-9:立即强制删除一个 job
通常时在强制删除一个不正常的工作时使用
-15:以正常的程序方式终止一项工作
以正常步骤结束一项工作
kill -l
-l:(小写L),列出 kill 能使用的信号 (signal) 有哪些
脱机管理
nohup
可以让用户脱机或注销系统后还能够让工作继续进行
nohup [命令与参数]
在终端机前台中工作
nohup [命令与参数] &
在终端机后台中工作
进程管理
进程的查看
静态的 ps
将某个时间点的进程运行情况选取出来
ps aux
查看系统的所有的进程数据
-a:不与 terminal有关的所有进程
-u:有效用户相关的进程
-x:通常与 -a 参数一起使用,列出较完整的信息
ps -lA
也能够查看所有系统数据
-l:输出的格式设置值,代表较长、较详细的将该 PID 的信息列出
-A:所有进程均显示出来,与 -e 具有同样作用

PS axjf
连同部分进程树状态
-j:输出格式设置值,代表工作的格式
-f:输出格式设置值,代表做一个更为完整的输出

常用的
ps -l
仅查看自己的 bash 相关的进程
字段意义
F
代表这个进程标志 (process flag),说明这个进程权限
若为 4 ,表示此进程的权限为 root
若为 1 ,表示此进程尽可进行复制 (fork) 而无法实际执行 (exec)
S
代表进程状态 (status)
R:(running)表示该进程正在运行中
S:(sleep)表示该进程目前正在睡眠状态(idle),但可以被唤醒(signal)
D:不可被唤醒的睡眠状态,通常该进程可能在等待 I/O 的情况,比如打印
T:停止状态(stop),可能是在工作控制(后台暂停)或排错(traced)状态
Z:(zombie)“僵尸”状态,进程已经停止但无法从内存中删除
若发现某个进程的 CMD 后面还接上 <defunct> 时,就代表该进程时僵尸进程
UID/PID/PPID
代表此进程被该 UID 所拥有/进程的 PID 号码/此进程的父进程 PID 号码
C
代表 CPU 使用率单位百分比
PRI/NI
Priority/Nice 缩写,代表此进程被 CPU 所执行的优先级,数值越小代表该进程越快被 CPU 执行
ADDR/SZ/WCHAN
都与内存有关,ADDR 是kernel function ,指出该进程在内存的哪个部分,如果是 running 的进程一般会显示 - ,SZ 代表此进程用掉多少内存,WCHAN 表示目前进程是否运行中,若为 - 表示运行中
TTY
登录者的终端机位置,若为远程登录则使用动态终端接口 (pts/n)
TIME
使用掉的 CPU 时间,注意是此进程实际花费 CPU 运行的时间
CMD
command 之意,造成此程序的触发进程的命令是什么

ps aux
查看系统所有进程
字段意义
USER
表示该进程属于哪个用户账号
PID
该进程进程标识符
%CPU
该进程使用掉 CPU 资源百分比
%MEM
该进程所占用物理内存百分比
VSZ
该进程使用掉虚拟内存量 (KB)
RSS
该进程占用的固定内存量 (KB)
TTY
该进程在哪个终端机上运行,若与终端机无关则显示 ? ,tty1~tty6 是本机上面的登陆者程序,若为 pts/0 ,则表示为由网络连接进主机的进程
STAT
该进程目前状态,状态显示与 ps -l 一样(R/S/T/Z)
START
该进程被触发启动的时间
TIME
该进程实际使用 CPU 运行的时间
CMMD
该进程的实际命令

动态的 top
动态查看进程变化
top [-d 数字] | top [-bnp]
-d:后面接秒数,即使整个进程界面更新的秒数。默认 5 秒
-b:以批次的方式执行 top ,通常会搭配数据流重定向将批处理的结果输出成文件
-n:与 -b 搭配,意思是需要进行几次 top 的输出结果
-p:指定某些 PID 来进行查看监测
top 执行过程当中可以使用的按键命令
?
显示在 top 当中可以输入的按键命令
P
以 CPU 的使用资源排序显示
M
以内存的使用资源排序显示
N
以 PID 来排序
T
以该进程使用的 CPU 时间累积 (TIME+)排序
k
给予某个 PID 一个信号 (signal)
r
给某个 PID 重新制定一个 nice 值
q
离开 top
查阅程序树之间的关系 pstree
子主题