RHCE学习笔记
一、 红帽系统管理员I:RH124
1.1红帽企业Linux入门
Linux优点:
1. Linux是开源软件
2. 拥有强大的命令行
3. 模块化系统
开源软件是任何人都可以使用、研究、修改和共享其源代码的软件。
开源软件不仅由志愿者开发,也有专业的人员由组织支付费用参与软件开发。
发行版是由Linux内核和用户程序组成,是可安装的完整操作系统。
红帽是比较著名的Linux的社区参与者,发行的版本有:
1. RHEL,RedHat Enterprise Linux红帽企业Linux的简称,最稳定的版本,兼容性也非常好。目前最新版本是8.3.0
2. Fedora,是完整、免费、基于Linux的社区发行版,由红帽提供赞助,并作为创新产品的试验田,主要在桌面版使用。由于有许多新功能测试,稳定性不好,所以企业一般不会使用。目前最新版本是Fedora 33
3. CentOS,Community Enterprise Operating System社区企业操作系统的简称,是由RHEL克隆版本,发布时间晚于RHEL,完全免费,唯一不同是遇到问题没有专业技术支持,只能去社区寻求帮助,而RHEL版本是可以有专业人士处理问题,并在正式勘误发布之前得到修补的程序,目前最新的也是8.3
1.2访问命令行
Shell(n.壳)是一个程序,是用户和Linux内核之间的桥梁,用户通过程序达到控制Linux内核的功能;另一个层面是一种命令语言,一种程序设计语言。Shell Script(Shell脚本)是用Shell编写的一组命令。Shell有很多版本,RHEL默认的是GNU Bourne-Again Shell(bash),大部分Linux系统、Unix以及macOS中都是该版本。与win server 2008R2中的PowerShell类似。
bash命令行开始:[user@host ~]$
user是当前登录的用户名
host是当前操作系统的名称
~是代表当前所在目录是家目录
$是代表该用户是普通用户,如果是#表示是root用户
每个命令由三部分组成:命令、选项、参数
tty是电传打字机(TeleType)的缩写,可以理解为输入输出设备,意思是终端,每台Linux都可以开很多终端,使用Control+Alt+F1-F7切换,某些终端是图形化界面,某些是调用bash。
SSH是Secure Shell的缩写,表示安全的Shell连接
Open SSH是开源的Shell程序,提供网络连接linux的接口。
直接使用ssh命令是使用密码验证方式登录,使用ssh -i是使用密钥身份登录,本地主机存储私钥,远程主机存储公钥,实现认证。
红帽linux桌面环境由GNOME3提供,是个图形化操作界面。
在bash中;作为特殊字符,称之为元字符,可以在一行中执行多个命令,以;隔开
date:用于显示系统时间
passwd:用于修改用户密码
file:用于显示文件类型,Linux中不需要扩展名
cat:(concatenate连接)查看文件内容,一次显示全部不分页
less:(adv.少)查看文件内容,分页显示,用回车和空格控制
head:查看文件内容头行数,默认10行
tail:查看文件内容末尾行数,默认10行
wc:word count缩写,统计文件的单词数量,-l表示行数,-w表示字数,-c表示字符数
一次tab键可以补全唯一的命令
两次tab键可以搜索以此开头支持的命令
\(转义字符)+回车:用于输入长命令换行,系统在下一行首显示>
history:显示历史执行的命令
!是元字符,!+数字执行上一条命令编号,!+字符执行上一条最匹配的命令
Alt+.:截取上一命令中的参数部分显示出来,不用重复输入参数或路径
Control+A:跳转至命令开头
Control+左右键:以单词的形式左右跳转
Control+L:清屏
命令 --help:查看命令帮助信息
1.3从命令行管理文件
大部分Linux系统文件系统遵从FHS(Filesystem Hierarchy Standard文件系统层次化标准)
常用的根目录下的文件夹及用途:
/usr:全名Unix Software Resource(Unix软件资源),存放安装的软件、共享的库,文件或只读程序。
/usr/bin:用户命令
/usr/sbin:系统管理命令
/usr/local:本地自定义软件
/etc:全名是etcetera(附加物),存放配置文件
/var:全名是variable(变化的),存放系统的可变数据
/run:系统启动以来的运行数据,重启系统会重新创建
/home:普通用户的家目录,存放普通用户的个人数据
/root:超级管理员root的家目录
/tmp:全名是temp,存放临时文件,10天不修改自动删除
/boot:存放系统启动所需的文件
/dev:全名是device(设备),硬件设备文件,用于访问硬件设备。
绝对路径:指文件在硬盘上真正的存放路径,以根目录/开头
相对路径:指相对当前目录的路径,.代表当前路径,..代表父目录
路径导航命令:
pwd:是Print working directory打印工作目录的缩写,用于显示当前绝对路径
cd:切换当前目录,cd不带参数是切换到家目录,cd -是切换到上一次所在目录,方便来回切换。
ls:是list列表的缩写,用于查看目录下的文件列表
ls -l[李1] :表示long长,以长列表格式查看文件列表
ls -a[李2] :表示all所有,显示所有文件,包括隐藏文件
ls -R[李3] :以递归方式显示文件列表
文件管理命令:
touch:翻译为触碰,用于更新文件的时间戳为现在时间,如果文件名不存在就创建该文件。
mkdir:全名是make directory制作目录,用于创建一个或多个目录;
mkdir -p[李4] :创建目录并强制创建不存在的父目录
cp:全名copy复制,复制一个或多个文件,最后一个参数是目录,如果是文件名代表并重命名。
cp -r:r是recursive递归的缩写,可用于复制目录
mv:是move移动的缩写,用于移动文件或文件夹,也可重命名
rm:是remove去掉的缩写,用于删除文件
rm -r:r是recursive递归的缩写,可用于删除有内容的目录
rmdir:是remove directory的缩写,可用于删除空目录
rm -i[李5] :是interactive交互的,表示删除之前交互式询问
rm -f[李6] :是force强制,表示强制执行不需要询问
ls -i:是inode索引节点的缩写,显示文件的索引号,每个文件都有一个索引号,索引号一致说明是一个文件不同的硬链接。
硬链接:创建一个指向硬盘文件的别名,和原来的没有任何区别,权限一致,删除文件时,只要有一个硬链接文件不会真实从磁盘删除。
ln:是link链接的缩写,建立文件的硬链接(别名)
硬链接的局限:
1) 只能是常规文件,对于目录和特殊文件无法创建
2) 只能在同一文件系统内创建硬链接
软连接:也称为“符号链接”,类似于快捷方式,是指向文件或目录的特殊文件,没有局限性,软链接前面的标识是l
ln -s:是symbolic象征性的缩写,表示建立软链接
shell的通配符:
*表示零个或多个任何字符串
?表示一个字符
[abc]表示里面的任何一个字符
[!abc]表示不在里面的任何一个字符
[^abc]表示不在里面的任何一个字符
{a..z}表示顺序的字符,可以一次创建很多文件
=表示变量赋值
$表示获取变量的值
$( )表示命令替换,用括号内的命令输出替换该部分参数
\是转义字符,用于转换其后的字符的意思
“”是阻止大部分shell扩展,双引号内的仅表示普通字符
‘’是阻止所有shell扩展,单引号内的仅表示普通字符
1.4在红帽企业Linux中获取帮助
阅读man page获取帮助:
man是manual手动的、手册的缩写,munual page翻译为手册页。
man命令用于查看手册页,格式如下:
man 章节 命令
章节1:用户命令(可执行命令和shell程序)
章节5:文件格式(用于许多配置文件和结构)
章节8:系统管理和特权命令(维护任务)
man命令内容导航:
空格:翻动一屏,也可使用鼠标
上下箭头:翻动一行
/:启动搜索功能
N:搜索下一个
Shift+N:搜索上一个
Q:退出
Man命令内容包括几个部分:
NAME:名称,主题/命令名称,简单描述
SYNOPSIS:概要,命令语法的概要
DESCRIPTION:描述,对命令的深度描述
EXAMPLES:示例,命令的举例
FILES:文件,与命令相关的文件或目录的列表
SEE ALSO:参阅,相关的信息可以参考阅读
BUGS:错误/漏洞,软件中的已知的错误
AUTHOR:作者,参与编写的人员信息
man -k+字符,根据关键字搜索manual page
GNU INFO文档
man page的格式更为正式,内容通常记录的是软件包中的特定命令或功能,而且采用独立文本文件的结构。Info文档则涵盖整个特定的软件包,其内容往往是有关如何使用软件的更为实用的示例,而且采用了超文本文档结构。
典型的man page具有少量的内容,侧重于主题、命令、工具或文件,info文档则是一个综合性的文档。通常而言,info文档的内容将更加深入。
pinfo命令是打开info文档在顶级目录中。
Info文档的导航和man page类似
1.5创建、查看和编辑文本文件
进程使用文件描述符的编号通道:
0:stdin,standard input标准输入,默认连接键盘,仅读取
1:stdout,standard output标准输出,默认连接终端,仅写入
2:stderr,standard error标准错误,默认连接终端,仅写入
3及以上:filename文件名,无默认连接,可读写
特殊文件/etc/null会丢弃重定向的输出并始终为空。
输出重定向操作符:
>:重定向标准输出(stdout 1)以覆盖文件
>>:重定向标准输出(stdout 1)以附加到文件
2>或2>>:重定向标准错误(stderr 2)以覆盖或附加到文件
>/etc/null:重定向到null,即丢弃
&>或&>>:重定向标准输出和标准错误到同一文件以覆盖或附加
管道符 | 是将前一个命令的标准输出连接到下一个命令的标准输入。
管道符类似于建立了一个单向管道,无法做到即重定向到文件也在终端显示,tee命令克服了这一缺点。
tee:翻译是发球区,命令将标准输出输入到下一个命令的标准输入并可同时输出到文件,类似于T形的管道。
tee命令格式:第一个命令 | tee 重定向目录 | 第三个命令
或第一个命令 | 第二个命令 | tee 重定向目录
区别在于上面的命令先将结果保存到文件,再执行第三个命令,下面的命令先执行第二个命令,将最终的结果输出到文件。
vi/vim编辑器:
vi是visual editer可视化编辑器的缩写,m是improved增强版的缩写。因此vi是原始的版本,vim是增强后的版本。
模式有四种:
命令模式:默认进入的模式,可以浏览文件,u撤销最近的编辑,x删除单个字符。
扩展命令模式:按:键进入,按回车键退回命令模式,使用q退出、q!强制退出不保存、wq保存并退出、w保存文件等命令
编辑模式(插入模式):按i键或Insert键进入,按Esc键退回,可以对文档进行内容修改。
可视模式:按v键进入,按v键退出,可以选择多个字符进行操作,按Shift+v是进入行模式,Ctl+v进入块模式,可进行字符选择,高亮显示,按y(yank拉)进行复制,按p(put推)进行粘贴。
Shell变量赋值使用=,例如:COUNT=20
Shell变量对于每个shell程序都是独立的。
set:列出所有变量
unset:取消变量值
变量前面加上$表示获取变量的值
export命令将shell变量导出为环境变量
export -n:取消导出变量
env:列出特定shell的环境变量
1.6管理本地用户和组
linux用户账户类型:
1. 超级用户,即root,UID=0,具有完全权限
2. 系统用户,UID=1-999,给提供服务的进程使用,该类账户无法登陆交互界面,只为特定的进程服务。
3. 普通用户,UID=1000-65535,大部分用户都有用于处理日常事务的普通用户账户,对系统具有有限的访问权限。
id命令:查看用户信息,不带参数表示查看当前登录用户的信息。
ps命令:是Process Status的缩写,用于查看进程信息。
本地用户信息存储文件位置:/etc/passwd,该文件用:划分七个段:
1. 用户名,例如kiosk
2. 用户密码,大部分会是X,表示迁移至/etc/shadow(shadow影子)
3. 账户UID,系统内以UID标识,并可以看出账户类型
4. 账户主要组的GID
5. 用户真实姓名
6. 用户主目录(家目录),例如/home/kiosk
7. 用户默认shell程序,通常是/bin/bash,如果是系统用户不允许进行交互登录会是/sbin/nologin
组是需要共享文件和其他系统资源访问权限的用户集合。默认存储路径是/etc/group文件中。
/etc/group文件使用:分割成四个段:
1. 组名称
2. 组密码,过时了,始终是X
3. 组ID即GID
4. 用户列表
主要组和补充组:每个用户只能有一个主要组,默认新建用户时会创建同名的主要组,无论是主要组还是补充组都使用户具有权限。
su:是Switch User的缩写,切换至另一个用户,格式是su – 用户名,
如果不带用户名是切换到root用户,需输入root密码:
su:切换到root用户,保留现在用户的环境
su -:切换到root用户,使用新的环境,常用。
sudo:是superuser do的意思,以管理员身份运行一个命令,用于临时获取root权限,需要输入该用户密码,而不是root密码。
sudo su -:将获得root的交互式shell
sudo -i:获取root的交互式shell,与上面稍有不同
sudo的主要配置文件是/etc/sudoers
useradd:创建新用户,默认配置在/etc/login.defs文件中
usermod:是user modify(修改)的缩写,修改现有用户的参数
-g:--gid,为账户指定主要组
-G:--groups为账户指定补充组,用逗号隔开
-L:--lock锁定账户
-U:--unlock解锁账户
userdel:是user delete(删除)缩写,用于删除用户账户,从/etc/passwd中删除用户,保留主目录
-r:删除用户,同时删除主目录。
passwd:为用户修改或设置密码,非8位以上强密码会提示。
groupadd:创建组,默认配置也在/etc/login.defs
-g:指定组的gid
groupmod:是group modify(修改)缩写,可以修改组的属性
-n:name缩写,指定组的新名称
-g:group缩写,指定组的新gid
groupdel:删除组,只有不是任何用户的主要组才能删除
修改用户所属组:
usermod -g:修改用户的主要组
usermod -aG:增补用户的补充组
usermod -G:指定用户所属补充组列表,不在的则表示删除
/etc/shadow影子文件用于存储用户的密码相关信息,每个用户都会在文件内有一行,一行用冒号分割成9段:
1. 用户名,此用户的用户名
2. 密码,此用户的加密密码
3. 上次更改密码的日期,数字是自1970.1.1(UTC)至今的天数
4. 密码更改最短天数
5. 密码可以有效的最长天数,空表示不失效
6. 警告期,失效之前收到密码过期的警告
7. 非活动期,密码过期后还可以登录时期
8. 密码过期日期,数字是自1970.1.1(UTC)至今的天数
9. 空,预留
加密密码用$分割三段信息:
1. 所用的哈希算法,6表示SHA-512算法,Redhat8默认算法
2. salt盐,随机的字符串,防止密码相同的账户条目相同
3. 加密哈希值,使用密码+salt使用算法生成的哈希值
密码验证方式:将用户输入密码+salt使用指定的加密算法得到哈希值,和存储的哈希值对比,一致则通过。
chage:修改密码期限
-m:修改最短期限
-M:修改最长期限
-W:修改警告期限
-I(是大写i):修改失效期限
-l(是小写的L):显示账户密码相关信息
-d:用户最晚修改密码的时间,0表示强制下次登录修改密码
-E:设置密码从今天算过期天数
如果有些用户不需要通过shell登录交互访问,可以设置用户shell目录为nologin来限制,命令是:usermod -s /sbin/nologin user03
1.7控制对文件的访问
文件权限分为三个:r(read读),w(write),x(execute执行)
对文件和目录的作用:
r读 | w写 | x执行 | |
文件- | 读取文件内容 | 修改文件内容 | 执行文件 |
目录d | 读取目录内容 | 创建删除文件 | cd到目录下 |
ls -ld:查看文件长列表,d是只看当前目录本身的信息,不包含文件
常见三种类型:
-表示文件
d表示目录
l表示软链接
chmod,是change mode更改模式(权限也称为文件的模式)的缩写,可以修改文件或目录的权限,有符号法和数值法两种方法。
符号法修改文件权限:
chmod WhoWhatWhich 文件或目录
Who:谁,可以是u(user用户),g(group组),o(other其他),a(all所有)的组合
What:什么,是操作,可以是+(增加权限),-(减少权限),=(重新赋予权限)
Which,哪些,可以是r、w、x表示读写执行
chmod -R:表示递归对整个目录设置权限,此时大写X仅对目录执行权限生效,小写x对所有文件和目录生效。
数值法修改文件权限:
chmod ### 文件或目录
#号是数值,分别表示ugo的权限值。
chown:是change owner更改所有者的缩写,用于更改文件的所有者。语法是chown 用户 文件或目录
chown :组名 文件或目录(更改文件目录的组所有者)
也可以两者同时修改:chown 用户:组名 文件或目录
chown -R:递归方式将目录所有文件更改所有者
只有root用户可以更改文件的所有者和授予任何组,普通用户仅可以将文件授予其所属组。
chgrp:是change group更改组的缩写,仅用于更改文件目录所属组,区别是组前面不用加:了
特殊权限:
s:set的缩写,以拥有文件的用户或组执行文件,而不是运行文件的用户。
t:sticky粘性的缩写,对目录拥有写权限时仅可以删除目录内文件。
特殊权限表示:u+s(最高第四位为4),g+s(最高第四位为2),o+t(最高第四位为1)
默认权限:
创建新目录,系统会为其分配0777(drwxrwxrwx)权限;
创建新文件,系统会为其分配0666(-rw-rw-rw-)权限
创建文件或目录时的默认权限还会与umask运算,umask置位为1的表示删除某个权限,为0的表示保留某个权限。
umask:是user mask用户掩码的缩写,不带参数可以显示当前默认的umask值,如果uid>=200并且用户名和主要组名相同,umask为0002,否则为0022
umask 数值:可以修改当前的umask值。永久修改需要在/etc/profile或/etc/bashrc进行修改,重新登录后生效。
1.8监控和管理Linux进程
进程是已启动的可执行程序的运行中实例。英文process
进程组成部分:已分配的内存地址空间、安全属性、一个或多个线程、进程状态。
第一个系统进程是systemd,d是daemon守护进程(后台进程)的意思,所有其他进程都是systemd的子进程。
每个进程都有唯一的进程ID(简称PID),父进程称为PPID
进程状态:
1. Task_Running,运行状态(任务运行中),标志是R
2. Task_Interruptible,可中断的睡眠状态,标志是S
3. Task_Uninterruptible,不可中断的睡眠状态,标志是D
4. Task_Killable,可杀死的睡眠状态,类似D,可响应被中断信号,标志是K
5. Task_Report_Idle,报告空闲的睡眠状态,D的子集,接受致命信号,标志是I
6. Task_Stopped,停止状态,标志是T
7. Task_Traced,跟踪状态,标志也是T,被调用的进程停止。
8. Exit_Zombie,僵尸(僵停)状态,标志是Z,已结束进程,资源都已收回,仅剩空壳,未删除的进程会成为僵停状态
9. Exit_Dead,死亡状态,进程已彻底释放,标志是X,不会看到
top:实时刷新显示进程状态。
ps -aux:显示当前的进程的详细状态process status
在后台运行作业,在命令后面加上&
jobs:显示作业列表
fg %作业编号:是foreground前景的缩写,将作业转至前台
bg %作业编号:是background背景的缩写,启动背景暂停的作业
ps j:显示与作业相关的信息
CTRL+Z:暂停正在运行的进程
CTRL+C:终止正在运行的进程
使用信号控制进程,使用kill -l查看系统支持的信号,常用的有:
信号编号 | 名称 | 长名称 | 短名称 | 定义用途 |
1 | signal hangup信号挂起 | SIGHUP | HUP | 挂起,报告进程的终止,也用于请求重置进程 |
2 | signal interrupt信号中断 | SIGINT | INT | 键盘中断,在用户按CTRL+C时发出,用于中断信号 |
3 | signal quit 信号退出 | SIGQUIT | QUIT | 键盘退出,与上面类似,终止时添加进程转储,通常是用户按CTRL+\时发出 |
9 | signal kill 信号杀死 | SIGKILL | KILL | 中断无法拦截,立即终止程序 |
15 | signal terminate信号结束 | SIGTERM | TERM | 终止结束,可以被拦截,不强制,“友好”得结束,允许自我清理(不带参数,默认行为) |
18 | signal continue 信号继续 | SIGCONT | CONT | 继续,发送至进程使其恢复,无法被拦截 |
19 | signal stop 信号停止 | SIGSTOP | STOP | 停止,无法拦截,暂停进程 |
20 | signal tty stop 信号终端停止 | SIGTSTP | TSTP | 键盘停止,可以被拦截,用户通过按CTRL+Z键发送 |
kill:通过PID向进程发信号,kill -l列出支持的信号名称和编号
killall:根据命令名称向多个进程发信号
pkill:process kill缩写,向一个或多个符合条件的进程发信号
w:显示登录系统的用户信息
grep:global regular expression print全局正则表达式显示的缩写,用于查找字符串,类似于include
pgrep:process grep进程全局正则表达式显示缩写,用于通过进程的名称查找进程的工具
pstree:process status tree进程状态树缩写,查看进程树
uptime:查看系统运行了多久,当前时间,用户数量及近1、5、15min内的系统负责情况。
top命令是系统进程的动态视图,也可以查看系统的负载
top显示内的键盘操作:
l t m:切换到负责、线程、内存标题行
shift+m:按照内存利用率降序排列
shift+p:按照CPU利用率降序排列
shift+w:保存显示配置,下次top时启动
q:退出top命令模式
1.9控制服务和守护进程
守护进程是在执行各种任务的后台等待或运行的进程,systemd通常是指一个或多个守护进程,使用“单元”来管理不同的对象,有以下:
.service结尾的表示系统服务
.socket结尾的表示进程间通讯套接字
.path结尾的表示路径单元,用于将服务推迟到特定文件更改之后
systemctl:是system control系统控制的缩写,用于管理单元,作用是显示系统当前的状态,例如服务情况等
systemctl list-units:系统控制列表单元缩写,列出系统单元,分别表示:UNIT——服务单元名称;LOAD——systemd是否正确解析了单元的配置并加载到内存中;ACTIVE——单元激活状态表示是否启动;
SUB——单元低级别激活状态显示更多的单元信息;DESCRIPTION——单元的描述信息。
systemctl list-units –type=service:列出服务单元
systemctl status:查看服务状态
服务状态包括
1.loaded:单元配置文件已处理
2.active(running)正在运行
3.active(exited)已完成一次性配置
4.active(waiting)运行中,但等待事件
5.inactive不在运行
6.enabled在系统引导时启动
7.static无法启用,但可以由某一启用的单元自动启动。
systemctl is-active:查看服务单元是否处于激活(运行)状态
systemctl is-enabled:查看服务单元是否在引导时自启动
systemctl is-failed:查看服务单元是否运行正常
systemctl start:启动服务单元
systemctl stop:停止服务单元
systemctl restart:重启服务单元,重启进程
systemctl reload:重新加载服务单元,重新加载配置文件,不重启进程
systemctl reload-or-restart:不确定是否重新加载文件,二选一
systemctl list-dependencies:列出服务单元依赖项
systemctl mask:屏蔽服务,阻止服务运行
systemctl unmask:取消屏蔽服务
systemctl enable:系统引导时启动服务,添加自启动列表
systemctl disable:取消系统引导自启动,取消自启动列表
1.10配置和保护SSH
ssh 服务器名称:以当前用户名名字登录服务器
ssh 用户@服务器:以某用户登录服务器
ssh 用户@服务器 命令:以某用户登录服务器执行命令,不进入交互式shell
exit:退出ssh登录
w:显示登录当前计算机的用户列表
ssh公钥存储位置:/etc/ssh/ssh_known_hosts或~/.ssh/knows_hosts
ssh-keygen:key generator密码注册缩写,创建一对私钥和公钥
ssh-copy-id:将公钥复制到目标主机,默认路径是/home/user/.ssh/id_rsa.pub
ssh-agent:将密码缓存到内存中,减少输入密码的次数,图形桌面默认启动该程序,在文本控制台需要使用eval $(ssh-agent)启动
ssh-add:将私钥密码添加到内存命令,ssh-agent注销会话时会自动从内存中清除密码。
open ssh由守护进程为sshd的提供,其配置文件位于/etc/ssh/sshd_config,会默认允许远程直接登录root账户,并且默认使用密钥登录,密钥登录失败再使用密码登录,这些存在一些安全隐患,解决方法如下:
1. 修改/etc/ssh/sshd_config中的PermitRootLogin参数设置为no,或设置为without-password(不用密码),来只接收私钥身份验证。
2. 修改/etc/ssh/sshd_config中的PasswordAuthentication参数设置为no
最后重新加载配置文件命令:systemctl reload sshd
修改/etc/ssh/sshd_config中的PubKeyAuthentication参数设置为no,是禁用公钥认证,只是用密码认证,该参数默认被注释。
1.11分析和存储日志
系统以文本的形式存储日志,通常存储路径是/var/log目录。
RHEL中建立了基于Syslog协议的标准日志体系。
systemd-journald(系统守护进程日志)和rsyslog两个服务是处理linux中的syslog消息
system-journald是日志的核心,负责从各个来源收集消息,将他们重构成标准格式,写入带索引的结构化日志中,默认重启不保留。
rsyslog负责读取systemd-journald的syslog消息,对消息分级并转发给其他服务。
常见的的日志文件:
1) /var/log/messages:大部分系统消息日志记录在此文件
2) /var/log/secure:记录与安全和身份验证事件有关的syslog日志
3) /var/log/mallog:记录与邮件服务器相关的syslog日志
4) /var/log/cron:记录与调度作业执行相关的syslog日志
5) /var/log/boot.log:记录与系统启动相关的非syslog控制台日志
syslog日志优先级分类
代码 | 优先级 | 严重性 |
0 | emerg(系统不可用) | 系统不可用 |
1 | alert(警报) | 必须立即采取措施 |
2 | crit(临界) | 临界情况 |
3 | err(error错误) | 非常严重的错误 |
4 | warning(警告) | 警告情况 |
5 | notice(注意) | 正常但重要的事件 |
6 | info(信息) | 信息性事件 |
7 | debug(调试) | 调试级别消息 |
rsyslog服务按照日志消息的设备和优先级确定如何处理,具体的配置规则位于/etc/rsyslog.conf中定义
日志轮转(logrotate)是将日志文件以日期重命名,然后新建日志文件文件,大多数以一周轮转一次,具体周期还试文件大小而定。
syslog日志写入文件时末尾的是最新的日志,rsyslog服务写入时具有特定的格式,主要有一下几个部分:
1) 时间戳,例如Feb 11 20:34:23
2) 主机名,发送该日志消息的主机,例如localhost
3) 进程名和PID:发送该消息的程序或进程名和PID,例如sshd[122]
4) 消息内容,发送的实际消息内容。
监控日志:可以使用tail -f命令,f是follow(跟随,跟着)的缩写,意思是显示文件最后10行并持续跟随,有新消息马上显示。
logger命令可以向rsyslog发送日志消息。
journalctl:翻译为日志控制,可以查看所有日志消息
-n:number缩写,默认显示最后10条日志,可以加数字自定义
-f:follow缩写,持续输出新日志
-p:priority(优先级)缩写,定义输出的优先级类型
--since --until(从*到*):-S -u定义输出的时间范围,还可以支持yesterday、today、tomorrow昨天今天明天
-o verbose:output输出详细的(冗长的)日志
还可以检索日志的字段:
_COMM:指定命令名称
_EXE:指定进程可执行文件路径
_PID:指定进程PID
_UID:指定运行进程的用户UID
_SYSTEM_UNIT:指定进程的system单元
默认情况下系统日志会保存在/run/log/journal文件中,在系统重启时会丢失,可以修改/etc/system/journald.conf文件中的Storage参数更systemd-journald服务的配置,参数可以修改为:
1) auto:自动,默认值,由rsyslog决定使用持久存储还是易失存储,如果/var/log/journal目录存在就使用持久存储,否则使用易失存储
2) persistent:(持续的)将日志存储在/var/log/journal目录中,重启将持续保留,如果目录不存在就创建。
3) volatile:(易变的)将日志存储在易失/run/log/journal目录中,重启后会丢失。
GMT:Greenwich Mean Time格林威治标准时间,以英国格林威治定位0经度开始的时间,划分全球24时区,中国东八区
UTC:Universal Time Coordinated世界协调时间简称,严格计算得到的时间,精确到秒,比GMT更加精确的时间。
DST:Daylight Saving Time夏季(日光)节约时间,即夏令时,北美欧洲实行,中国不实行。
CST:China Standard Time:中国标准时间,UT+8:00
NTP(Network Time Protocol网络时间协议):是计算机通过网络获取时间的协议和方法。
RTC(Real_Time Clock实时时钟):硬件时钟芯片时间,计算机硬件维护的时间,系统时间可以来自该时间
timedatectl:time date control时间日期控制,设置当前时间、时区、NTP同步设置,不带参数为显示这些参数。
set-timezone用于修改时区
set-time用于修改时间
set-ntp用户启用或禁用ntp,后面根true或false
chrony保护是和ntp一样的时间同步软件,chronyd服务是通过与配置的ntp服务器进行同步,使本地硬件时钟(RTC)保持正确,如果没有网络连接将计算RTC的时钟漂移,配置文件为/etc/chorny.conf
chronyd会从NTP Pool Project的服务器同步时间,不需要额外配置,如果需要更改本地NTP源,需修改/etc/chrony.conf中的server * iburst参数实现,最后重启服务systemctl restart chronyd
tzselect:用交互式查询地区所在时区。
chronyc sources -v:查看系统时间同步源
1.12管理网络
网络接口命名,通常有一下几部分:
1) 接口类型:en(ethernet)表示以太网接口,wl(wlan)表示无线局域网络,ww(wwan)无线公网网络
2) o表示板载设备,许多服务器不提供此信息,一般没有
3) p表示PCI插槽编号
4) s表示slot板卡编号
5) f表示function功能编号
enp0s1f1表示PCI0上板卡1上第1个功能口以太网接口
本机缓存的DNS域名解析在目录/etc/hosts文件中。
本机DNS客户端配置在文件/etc/resolv.conf中
ip link:查看或修改网络接口
ip address:查看或修改网络IP地址
ip -statistics:查看接口的统计信息
ping6用于ping ipv6地址,-c指定发包数量
ping6对端link local地址时需要在后面加%接口名称
ip route查看路由表
ip -6 route查看ipv6路由表
traceroute和tracepath都可以最终路由,默认都使用UDP流量追踪,traceroute可以指定-I(ICMP)和-T(TCP)来追踪流量,默认没有安装该命令。
traceroute -6和tracepath6是追踪IPv6的流量。
netstat和ss(socket statistics套接字状态)都是显示系统套接字状态,即ip、协议、端口号的对应关系,netstat命令为旧工具,一般不安装该命令。
netstat和ss的选项:
-n:numeric(值、分数)显示接口和端口编号,不显示名称
-t:tcp,显示TCP套接字
-u:udp,显示UDP套接字
-l:listening,显示侦听中的套接字
-a:all,显示所有套接字
-p:process,显示使用套接字的进程
NetworkManager是监控和管理网络设置的守护进程,配置文件保存在/etc/sysconfig/network-scripts中
nmcli:Network Manager Command Line网络管理命令行是
nmcli device status:显示所有网络设备的状态
nmcli connection show:显示所有连接的网络设备列表
nmcli connection add:添加网络连接
nmcli connection up/down:激活网络接口,后面使用连接的名称
nmcli device disconnect:断开连接并关闭接口,后面使用设备名称
nmcli connection modify :修改网络连接配置
nmcli connection delete:删除网络连接
ssh登录普通用户在成为root之前无权更改网络权限,
nmcli general permissions(常规权限)用于查看当前网络修改权限
通过nmcli命令和修改/etc/sysconfig/network-scripts/ifcfg-name(name是网络连接名称)参数都可以修改网络配置信息,对比如下:
功能 | nmcli connection modify 网卡名 参数 | /etc/sysconfig/network-scripts/ifcfg-网卡名 |
配置IPv4地址获取方式 | ipv4.method manual (方法,手动) ipv4.method auto | BOOTPROTO=static BOOTPROTO=dhcp |
配置IP地址、掩码和网关 | ipv4.address 1.1.1.1/24 1.1.1.2 | IPADDR0=1.1.1.1 PREFIX0=24 GATEWAY0=1.1.1.2 |
配置DNS | ipv4.dns 8.8.8.8 | DNS0=8.8.8.8 |
修改域 | ipv4.dns-search example.com | DOMAIN=example.com |
同步DNS配置到resolv.conf | ipv4.ignore-auto-dns true | PEERDNS=yes |
系统启动自动连接该网口 | connection.autoconnect yes | ONBOOT=yes |
网络连接名称 | connection.id ens3 | NAME=ens3 |
绑定的网络接口 | connection.interface-name ens3 | DEVICE=ens3 |
MAC地址 | 802-3-ethernet.mac-address | HWADDR= |
hostname:显示主机全名,默认在/etc/hostname中定义
hostnamectl:用于修改该文件或参数
set-hostname:修改主机名
status:显示关于主机名的状态信息
名称解析查找顺序在/etc/nsswitch.conf中定义,默认情况下:
1. 先查找/etc/hosts,为本地缓存域名解析,可使用getent host查询
2. 在使用DNS服务器解析域名,/etc/resolv.conf控制(dhcp时会同步自网卡配置的DNS)
search:短主机名搜索的域名列表
nameserver:最多设置三个DNS服务器地址
host:执行解析或反向解析
getent:get entries(entry复数,条目的意思)获取条目的缩写。
1.13归档和传输文件
tar:tape archive磁带归档的缩写,最初是将文件备份到磁带上,现在是归档、压缩的作用。
tar可以将大型文件汇聚到一个文件(归档),tar是结构化的文件数据序列,包括文件和索引的元数据,压缩方式支持gzip、bzip2和xz,gzip最老,使用最广泛,跨平台较好,bzip2和xz较新,压缩率高
tar命令操作选项:
-c、--create:创建一个新存档
-x、--extract:提取、解压,从现有存档提取
-t、--list:列出存档的目录
tar命令一般选项:
-v、--verbose:显示存档或提取的文件详细信息
-f、--file=:后面跟文件名,创建的文件名或提取的文件名
-p、--preserve-permissions:保留许可,提取文件时保留权限。
tar命令压缩选项:
-z、--gzip:使用gzip压缩方式,产生.tar.gz或.tgz
-j、-bzip2:使用bzip2压缩方式,产生.tar.gz2或,压缩率高
-J、--xz:使用xz压缩方式,产生.tar.xz,压缩率更高
归档文件:tar -cf 归档文件名 一个或多个被归档的文件
列出归档内容:tar -tf 归档文件名
提取文件到当前目录:tar -xf 归档文件名
提取文件到当前目录并保留权限:tar -xpf 归档文件名
归档文件并压缩为gzip:tar -czf 归档文件 被归档文件
归档文件并压缩为bzip2:tar -cjf 归档文件 被归档文件
归档文件并压缩为xz:tar -cJf 归档文件 被归档文件
gzip、bzip2、xz也是单独的压缩命令,对tar文件进行压缩
gunzip、bunzip2、unxz也是单独的解压命令,解压为tar文件
scp:secure copy安全复制,文件传输的命令,带:的表示远端,: 将远端主机和目录分隔开。默认是将源文件复制到目标目录,可以使用-r选项以递归方式复制源目录到目标目录。
sftp:以交互式传输文件,先登录sftp服务器,然后使用ls、cd、mkdir、rmdir和pwd等导航,使用get下载文件,用put上传文件。
rsync:remote synchronization远程同步的缩写,只复制差异部分
-v、--verbose:显示同步详细输出,排障或查看进度使用
-a、--archive:启用存档模式,保留大部分特征
-r、--recursive:以递归方式同步整个目录
-l、--links:同步符号链接
-p、--perms:保留权限
-t、--times:保留时间戳
-g、--group:保留组所有权
-o、--owner:保留文件所有者
-D、--devices:同步设备文件
在源目录加上尾斜杠/是同步目录的内容,而不创建该目录
1.14安装和更新软件包
redhat如果有购买订阅可以和系统绑定,以及时获取系统更新和相应服务,和windows的激活系统类似。可以使用图形界面Subscriptions(订阅)来绑定账户,也可以使用命令行:
subscription-manager register +用户名密码
RPM(Redhat Package Manager红帽软件包管理器)是红帽开发的,文件名由四部分组成(后缀为.rpm):
name.version.release.architecture.rpm
1. name是描述其内容的一个或多个词语
2. version是软件的原始版本号
3. release(发行、释放)发行版本号,由大包商设置,不一定是原始开发商。
4. architecture(架构、结构)软件包运行的处理器架构。noarch(no architecture不限架构的缩写)表示不限制架构,x86_64表示x86架构的64位系统,aarch64表示arm架构的64位系统。
每个软件包的内容主要有三部分组成:
1. 安装文件
2. 软件包的相关信息,包括名称、版本、摘要描述、许可、日志等
3. 脚本,安装、更新、删除软件时运行的脚本
红帽为其所有发行的软件包进行数字签名,来验证安装包的完整性,使用GPG密钥,如果签名不匹配将拒绝安装。
rpm -q:query(查询、询问)缩写,列出当前安装软件的版本,后面跟软件名称。
-qa:query all:列出所有已安装的软件包
-qf:query file:列出提供文件名称的软件包,后面跟文件目录
-qi:query info:列出关于软件包的详细信息
-ql:query list:获取软件包的文件
-qc:query config:列出软件包的配置文件
-qd:query doc:列出软件包的文档文件
-q –scripts:列出安装包的脚本
-q –changelog:列出软件包的更改日志
-p:packet:列出软件包的安装包信息
-ivh:install verbose hash安装详细进度
rpm2cpio:将软件包内容提取出来。
yum(Yellowdog Updater Modified黄狗更新修改的缩写)是从存储库里面下载rpm软件包,并解决了依赖关系。
yum list:显示已安装和可用的软件包
yum list kernel:显示已安装和可用的内核
yum search:根据名称和摘要搜索软件包
yum all search :根据所有(名称、摘要和描述)搜索软件包
yum info:显示与软件包相关的详细信息
yum provides:(指定、提供)显示与指定的路径匹配的软件包
yum install:获取并安装软件包,包含所有依赖项
yum update:获取并安装软件包新版本,包含所有依赖项,不加名称是更新所有软件,大部分情况会保留配置文件。
yum remove:删除安装的软件包,包含受支持的软件包
uname(unix name):是类unix系统显示当前操作系统信息的命令
uname -r:kernel release内核发行,显示内核的版本和发行版本
uname -a:all,显示内核发行版本和其他信息。
yum也有组的概念,常规组是软件包的集合,环境组是常规组的集合。
组内的软件分为三种:mandatory(强制的,法定的)安装该组时必须安装,default(默认)安装该组时通常默认会安装,optional(可选)安装该组时不予安装,除非特殊要求。
yum group list:显示已安装和可用的组名称
yum group list hidden:显示隐藏组
yum group info:显示组的相关信息
yum group install:安装一个组,安装必选和默认软件包及依赖的包
所有软件安装和删除的事务日志记录在:/var/log/dnf.rpm.log中
yum history:显示安装和删除事务的摘要
yum history undo 5:撤销5步事务
yum repolist all:repositories list仓库列表,查看所有可用的存储库
yum-config-manager --enable:启用一个存储库
要启用对第三方存储库的支持,可以在/etc/yum.repos.d/目录下创建一个以.repo结尾的存储库配置文件,文件内定义存储库URL、名称和是否使用GPG密钥检查。
yum-config-manager --add-repo :添加存储库
linux8内容通过两个主要的软件存储库进行分发:BaseOS和应用流(AppStream)
yum module list:显示可用模块的列表
yum module info:显示模块的详细信息
yum module install:使用默认流和配置文件安装模块
yum module remove:删除已安装的模块
yum module reset:重置模块流
1.15访问Linux文件系统
挂载点:要让文件系统的内容在文件系统层次结构中可用,必须将它挂载到一个空目录上,该目录称为挂载点
SATA/SAS/USB附加存储命名:/dev/sda b c 分区1 2 3
虚拟化存储:/dev/vda b c
NVMe附加存储(很多SSD):/dev/nvme0 1 2 分区P1 P2 P3
SD/MMC/eMMC存储(SD卡):/dev/mmcblk0 1 2
逻辑卷是将一个或多个块设备(b)汇聚为一个存储池,称为卷组,他们功能类似于分区。
df:disk free磁盘空间,显示文件系统的设备及空间使用情况。
-h:human-readable人性化阅读,可以把空间数字折合到MB GB
-H:人性化阅读,以SI单位折合到MB GB,十进制
du:disk usage磁盘使用量,以递归形式显示目录树中所有文件大小
-h:human-readable人性化阅读,可以把空间数字折合到MB GB
lsblk:list blocks列出块存储,列出所有可用设备的详细信息
mount 设备 挂载点:挂载文件系统,/mnt或可作为临时挂载点,这种挂载方式可能因为系统重置发生变化,因此不稳定。
UUID:Universally Unique Identifier通用唯一识别码,一个稳定且与文件系统关联的标志符称为UUID,是一个很长的十六进制数,只要文件系统不重建,UUID不会发生变化。
lsblk -fp:列出设备的完整路径、UUID和挂载点
mount UUID=”46fd……” /mnt/data:使用UUID挂载,稳定。
图形桌面环境下,可移动设备会自动挂载到/run/media/用户名/文件系统名称
umount 挂载点:卸载文件系统,前提是所有进程停止访问挂载点数据
lsof:list open file列出打开文件,列出打开文件及访问它们的进程。
locate:(定位、找到……的位置)从预生成索引(mlocate.db数据库)中检索文件名或文件路径,优点是速度快,缺点是新文件更新不及时可能无法搜索到,默认每天更新一次,可用updatedb强制更新。
-i:ignore case忽略大小写,用于执行不区分大小写的搜索
-n:number数量,指定搜索结果返回数量
find:(找到)在文件系统层次结构中遍历搜索文件,比locate准确,但是速度慢。此外还支持搜索文件名以外的搜索,例如按照文件权限、文件类型、文件大小、修改日期等进行搜索。
-name:以文件名搜索,支持通配符,搜索内容用引号以免被翻译
-iname:不区分大小写以文件名搜索
-user:按照文件所有者搜索
-group:按照组所有权搜索
-uid:按照用户ID数搜索
-gid:按照组ID数搜索
-perm:permission许可,按照文件权限集搜索文件,权限以数字形式体现,数字前面加/表示用户、组、其他人至少匹配一位,数字前面加-表示三位必须都匹配。
-size:按照文件大小搜索文件,支持k M G,不带+-的表示向上取整文件大小,并且可以用+表示以上,-表示以下
-mmin:medified minutes修改分钟数,表示在过去n分钟内修改的所有文件。也可以用+ -
-type:按照文件类型搜索,支持f(file普通文件)、d(directory目录)、l(link软链接)、b(blcok块设备)
-links:按照文件的硬链接数量搜索,后面跟数字,可以用+ -
1.16分析服务器和获取支持
RHEL8支持Web控制台,专门管理和监控服务器而设计,基于服务Cockpit(驾驶舱),可以监控系统日志、查看系统性能图标、更改设置、全功能交互式终端会话等。
启用Web控制台:
yum install cockpit:安装Web控制台服务,除最小安装默认安装
systemctl enable --now cockpit.socket:启动cockpit服务
firewall-cmd --add-service=cockpit –-permanent(永久的):将服务添加到防火墙允许列表内,开启端口9090
firewall-cmd –reload:重启防火墙配置以生效
红帽客户门户网站:https://access.redhat.com
红帽开发者网站:https://developer.redhat.com
redhat-support-tool是红帽支持工具搜索知识库,需要联网,只有命令行交互式,没有图形界面。
红帽智能分析工具是一种预测分析工具,可以帮助识别和修复系统的安全性、性能、可用性和稳定性威胁。是SaaS,需要订阅
yum install insights-client:安装智能分析客户端,8以上默认
insights-client –register:注册智能分析工具并上传初始系统数据,在网站(https://cloud.redhat.com/insights)上就能看到该系统。
二、 红帽系统管理员II:RH134
2
2.1提高命令行生产率
脚本第一行是指定命令解释器,以#!开头,例如#!/bin/bash
执行脚本的方法:
sh 脚本名称:使用shell程序执行脚本命令,不需要对脚本有执行权限
./脚本名称:在当前路径下执行脚本,需有x权限,并切换到当前目录
.脚本名称:在当前的shell环境中执行脚本
for循环语句可以执行重复的命令,语法是:
for 变量 in 列表;
do 执行命令;
done
在脚本中可以使用退出代码,使用“exit 数字”命令,数字可以是0-255之间的数字,0表示没有错误,非0表示有错误,可以使用不同的数字表示不同的错误。
test命令用于测试某个条件是否成立,$?表示退出代码值
条件结构if/then或if/then/else或if/then/elif/then/else等
正则表达式提供了一种便于查询的特定内容匹配机制,自成体系,与通配符不一样,vim、grep和less命令可以使用正则表达式。通配符常用于文件名匹配,正则表达式大多用于对文件内容的匹配。通配符比较简单,可以理解只有*?{}[],正则表达式则比较复杂。
正则表达式符号:
.表示单个字符
?表示最多匹配一次
*表示任意字符
^表示以字符开头
$表示以字符结尾
grep:(global regular expression print,全局正则表达式输出) 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
-i:ignore-case忽略大小写
-v:invert-match翻转匹配,不含有匹配项的行
2.2计划将来的任务
at软件使用atd守护进程提供了a-z共26个延迟执行队列
at命令从stdin通道中读取要执行的命令,也可以使用<重定向到脚本来执行。
now +5min:相对时间,5分钟后执行
02:00pm:相对时间,指定时间执行
teatime tomorrow:明天下午茶时间(16:00)
noon +4 days:四天以后的中午
5pm august 3 2021:特定日期时间执行
atq或at -l:查询和管理延迟作业,包括作业编号、执行时间、队列号、所有者
at -c:查询作业具体执行的命令,后面加作业编号
atrm:删除作业,后面加作业编号
cronie(编年史)软件使用服务名为crond的守护进程提供周期运行作业的功能
crontab:管理周期性作业
-l:list列出当前用户的周期作业
-r:remove删除当前用户所有周期作业
-e:edit编辑当前用户周期作业
filename:删除所有周期作业,并替换为从文件读取的作业
编辑周期作业显示的顺序为:分钟、小时、几号、月、星期、命令,如果是*代表任意时间,*/x表示每隔x时间执行一次。例如:
每年2月2日上午9点执行myjob:0 9 2 2 * myjob
七月每个周五上午9点到10点,每隔5分钟执行输出单词chime:
*/5 9-10 * Jul 5 echo “chime”
每个工作日每个午夜前2分钟执行myjob:58 23 * * 1-5 myjob
计划周期性系统作业需要在命令前面加上系统用户名
systemd启动系统后,最先启动的服务是systemd-tmpfiles-setup,作用是清理指定的系统临时文件,并且系统运行过程中,systemd-tmpfiles-clean.timer的定时器会触发,定期清理系统临时文件
systemctl cat system-tmpfiles-clean.timer命令查看定时清理的定时器内容
systemctl daemon-reload命令重新加载system管理器配置
systemctl enable –now system-tmpfiles-clean.timer命令激活定时清理定时器
system-tmpfiles –clean命令用于手动清理临时文件
2.3调优系统性能
tuned:调整、调优、调音
RHEL8最小化安装中包含并启用了tuned软件包,手动安装启用的命令是:
yum install tuned
systemctl enable –now tuned
Tuned应用提供的配置文件有以下几个类别:
节能型配置文件
性能提升型配置文件
存储和网络的低延迟
存储和网络的高吞吐量
虚拟机性能
虚拟机主机性能
RHEL8中分发的调优配置文件有:
balanced:均衡,适合在节能和性能之间折中的系统
desktop:桌面,从balanced衍生而来,加快交互式相应速度
throughput-performance:吞吐量性能,调优系统以获得最大吞吐量
latency-performance:延迟性能,适合需要牺牲能耗来获取低延迟的系统
network-latency:网络延迟,从延迟性能衍生而来,可以启用额外网络调优参数
network-throughput:网络吞吐量,从吞吐量性能衍生而来,应用网络调优参数
powersave:节能,调优系统以实现最大程度节能
oracle:基于吞吐量性能,针对oracle数据库负载进行优化
virtual-guest:虚拟来宾,当系统在虚拟机上运行时,调优系统以获取最高性能
virtual-host:虚拟主机,当系统充当虚拟机的主机时,调优系统以获取最高性能
tuned-adm:更改tuned守护进程的设置,提供查询、列出、推荐、更改、关闭等功能。
tuned-adm active:查看当前活动的调优配置文件
tuned-adm list:列出所有可用的调优配置文件,包括内置的和自定义的。
tuned-adm profile:更改活动的调优配置文件
tuned-adm recommend:为系统推荐调优配置文件
tuned-adm off:关闭tuned调优活动
也可以在web控制台更改系统调优配置文件
nice:美好的,优先排序
renice:取消优先排序
nice级别共40个,从-20到19,默认为0,值越小越优先,越大越不优先
root用户才能降低nice级别(提高优先级),其他用户只能提高nice级别(降低优先级)
top和ps命令都可以显示nice级别,NI表示nice显示值,PR表示调度的优先级
nice:加命令可以添加命令到优先级中,默认是10
-n:指定nice的级别值
renice:更改现有进程的nice级别
-n 19 3221 :将PID为3221的进程修改nice级别为19
2.4使用ACL控制对文件的访问
当文件由单个所有者和指定的一组人使用时,linux标准的文件权限即可满足要求,但是如果要求多个指定的用户和组不同的文件权限集时就需要使用访问控制列表ACL来实现。除了文件所有者和文件的组从属关系之外,这些额外的用户和组分别称为指定用户和指定组,因为他们不是在长列表中指定的,而是在ACL中指定的权限。
XFS和红帽较新的ext3和ext4文件系统中默认开启对ACL的支持,早期的linux版本需要查看是否使用ACL选项。
ls -l命令输出的长列表中最后一个权限值为+表示有扩展ACL结构
getfacl:get file acl获取文件访问控制列表,用于显示文件上的ACL设置,也可用于显示目录的acl,后面根目录即可
前三行注释表明文件名(file)、所有者(owner)、组(group)
第四行为标志位flags,可有可无,三位标志分别是setuid、setgid、sticky
用户条目(user)
1. user::rwx表示文件所有者权限为rwx
2. user:consultant3:---表示指定用户权限,用户consultant3没有任何权限
3. user:1005:rwx #effective:rw-表示指定用户权限,UID1005具有rwx,但是掩码将有效权限仅限制为rw,effective翻译为有效的
组条目(group)
1.group::rwx #effective:rw-表示组所有者权限为rwx,但掩码将有效权限限制rw
2.group:consultant1:r-- 表示指定组权限,consultant1组仅有r权限
3.group:2210:rwx #effective:rw-表示指定组权限,GID2210有rwx,但掩码限制rw
掩码条目(mask)
mask::rw-表示掩码,掩码设置显示可能为所有指定用户、组所有者和指定组提供的最大权限
其他条目(other)
other::---表示其他或“全局”权限,所有其他的UID和GID均无任何权限
默认用户条目(default user)
default:user::rwx表示默认文件所有者ACL权限
default:user:consultant3:---表示默认指定用户ACL权限
默认组条目(default group)
default:group::rwx表示默认组所有者ACL权限
default:group:consultant1:r-x表示默认指定组ACL权限
默认ACL掩码条目(default mask)
default:mask::rwx表示默认掩码
默认其他条目(default other)
default:other::---表示默认其他全局权限
ACL掩码定义可授权给指定用户、组所有者和指定组的最大权限。
比对权限优先级以此为:所有者——指定用户——组所有者或指定组——其他ACL
setfacl:set file acl设置文件访问控制列表,用于添加、修改或删除文件和目录的标准ACL,使用wrx-四个表示相应的权限,同chmod类似
-m:通过命令行设置ACL
-M:通过文件传递ACL
-R:以递归法方式应用ACL
-x:删除某行ACL
-b:删除所有文件的ACL,长列表不显示+
-d:设置默认ACL
也可以使用getfacl作为setfacl的输入:getfacl file-a | setfacl --set-file=- file-b
2.5管理SELINUX安全性
SELinux:Securiyt Enhanced Linux安全增强型Linux,它实施了一组可以防止一个应用程序的弱点影响其他应用或基础系统的访问规则,该规则比文件权限更加细致,例如针对写权限,可以指定允许特定的程序写入,有三种模式:
1. 强制:SElinux强制执行访问控制规则,通常在该模式下运行
2. 许可:SElinux处于活动状态,但不强制执行访问控制规则,而是违反规则的警告,主要用于测试和故障排除。
3. 禁用:禁用SElinux,不拒绝违规,也不记录,不建议禁用SElinux
SElinux是额外的系统安全层,目的是防止已糟泄露的系统服务访问用户数据。
SElinux是用于确定哪个进程可以访问哪些文件、目录和端口的一组安全规则。每个文件、进程、目录和端口都具有专门的安全标签,称为SElinux上下文。默认情况下不允许任何交互,需要添加允许规则。
类型上下文名称通常以_t结尾。httpd_t
SElinux文件上下文:User以_u结尾,Role以_r结尾,Type以_t结尾,Level例如s0,后面是文件路径
getenfoce:获取强制执行,显示当前的SElinux模式
setenforce:设置强制执行,设置当前的SElinux模式,或者更/etc/selinux/config文件
selinux布尔值可更改selinux的策略行为,可以启用或禁用
getsebool:列出布尔值及状态
setsebool:修改布尔值
-P:更改selinux策略并永久生效
semannage boolean -l:报告布尔值是否为永久,并提供布尔值的简短描述
2.6管理基本存储
MBR分区最大磁盘和分区为2T,现在最新的GPT分区
parted:分开,分区,对磁盘进行分区,后面跟
parted /dev/vdb mklabel msdos:将MBR磁盘标签写入磁盘
parted /dev/bdb mklabel gpt:写入GPT磁盘标签
parted /dev/bdb:指定在某磁盘上创建分区,启动交互式
mkpart:创建新的主分区或扩展分区
mkfs.xfs:创建xfs文件系统
交换空间是内存的扩充,保存不活动的内存页,建议大小:
1. 内存小于2G,两倍内存——三倍内存
2. 内存2-8G之间,同等——两倍内存
3. 内存8-64G之间,至少4G——1.5倍内存
4. 内存64G以上,至少4G——无
mkswap:格式化设备,向设备应用交换签名。
swapon:激活交换空间
--show:查看交换空间的优先级
2.7管理逻辑卷
LVM(Logical Volume Manager)逻辑卷管理的概念:
物理设备:可以是分区、整个磁盘、RAID阵列、SAN磁盘等
物理卷(Physical Volume):
卷组(Volume Group):存储池,由一个或多个物理卷组成
逻辑卷(Logical Volume):提供用户、程序使用的虚拟“存储”设备
pvcreate:创建物理卷
vgcreat:创建卷组
lvcreate:创建逻辑
mkfs:添加文件系统
mkdir:创建挂载点
mount:挂载
umount:卸载文件系统
lvremove:删除逻辑卷
vgremove:删除卷组
pvremove:删除物理卷
pvdisplay:查看物理卷
vgdisplay:查看卷组
lvdispaly:查看逻辑卷
vgextend:扩展卷组
vgreduce:缩减卷组
lvextend:扩展逻辑卷
xfs_growfs:扩展文件系统
2.8实施高级存储功能
stratis卷文件管理系统,是红帽RHEL8中的存储管理解决方案,简化磁盘设置
yum install stratis-cli stratisd:安装stratis-cli和stratisd软件
systemctl enable --now statisd:开启stratisd服务
stratis pool create:创建块设备池
stratis pool list:查看块设备池
stratis pool add-data:向块设备池中添加块设备
stratis filesystem create:为块设备池创建文件系统
stratis filesystem list:查看文件系统
VDO(Virtual Data Optimize虚拟数据优化)是对存储上的数据进行压缩并删重来优化空间的使用。
两个模块:kvdo以透明的方式控制数据压缩
uds用于数据删重
yum install vdo kmod-kvdo:安装vdo软件
vdo create:创建vdo卷
vdo status:查看分析vdo卷状态
vdo list:查看vdo列表
2.9访问网络附加存储
NFS(Network File System网络文件系统)是linux和unix使用的互联网标准协议,RHEL8中默认的版本为4.2,支持NFSv4和NFSv3的主要版本,NFSv2已经不支持,使用TCP协议与服务器进行通讯。
挂载NFS共享的方法:mount命令手动挂载,在/etc/fstab中增加条目启动自动挂载,使用autofs服务或system.automount功能挂载。
挂载方式:
1. 临时挂载,sudo mount -t nfs -o rw,sync serverb:/share mountpoint
sudo使用管理员身份,必须使用root或sudo使用管理员运行挂载
-t nfs表示类型是nfs的类型存储
-o rw,sync表示立即与nfs服务器同步写操作,默认是异步
临时挂载重启即失效,对一次性访问很有用
2. 永久挂载,sudo vim /etc/fstab sudo mount /mountpoint
增加一条挂载记录并挂载之
卸载NFS共享,sudo umount
nfsconf工具用于管理nfsv4和nfsv3的客户端和服务器端,工具的配置文件在/etc/nsf.conf
sudo nfsconf --set nfsd vers4.2 y用于设置/etc/nsfconf内的参数
sudo nsfconf --get nfsd vers4.2用于获取/etc/nsfconf的参数
sudo nfsconf --unset nfsd vers4.2用于取消/etc/nfsconf的参数设置
配置仅限使用NFSv4的客户端:
sudo nfsconf --set nfsd udp n禁用UDP协议传输
sudo nfsconf --set nfsd vers2 n禁用NFSv2
sudo nfsconf --set nfsd vers3 n禁用NFSv3
sudo nfsconf --set nfsd tcp y启用TCP协议传输
sudo nfsconf --set nfsd vers4 y启用NFSv4
sudo nfsconf --set nfsd vers4.0 y启用NFSv4.0
sudo nfsconf --set nfsd vers4.1 y启用NFSv4.1
sudo nfsconf --set nfsd vers4.2 y启用NFSv4.2
cat /etc/nfs.conf查看NFS配置文件确认是否生效。
启动挂载器是一种服务(autofs服务),可以按需自动挂载NFS共享,并且在不使用时自动卸载共享。
sudo yum install autofs安装autofs软件
sudo vim /etc/auto.master.d/demo.autofs向目录中添加一个主映射文件
sudo vim /etc/auto.demo创建映射文件,映射文件确定一组自动挂载点、挂载选项和挂载源位置。
sudo systemctl enable --now autofs启动自动挂载服务
2.10控制启动过程
系统启动过程:
1. 计算机接通电源,系统固件(UEFI或BIOS)运行开机自检(POST,Power On Self Test),初始化部分硬件。
2. 系统固件搜索可启动设备,可在UEFI中配置或BIOS中配置启动顺序,搜索所有磁盘的主启动记录(MBR)
3. 从磁盘读取启动加载器,RHEL8中启动加载器为GRUB2
4. GRUB2从/boot/grub2/grub.cfg中加载配置,窗口显示菜单选择启动的内核。
5. 启动加载器从磁盘加载内核和initramfs并放入内存,其中包含必要内核的内核模块、初始化脚本等,RHEL8中其实就是整个系统。
6. 启动加载器将控制权交给内核,传递内核命令选项以及initramfs内存位置
7. 内核在initramfs中找到驱动程序的所有硬件并初始化它们,然后作为PID1从initramfs执行/sbin/init,在RHEL8中/sbin/init是指向systemd的链接。
8. system实例会执行initrd.target目标的所有单元,包括磁盘挂载目录等
9. 内核将root切换为/sysroot中的root文件系统,同时systemd会安装副本自动执行。
10.systemd查找内核命令传递或系统中配置的默认目标,启动或停止单元,这些目标通常基于文本的登录或图形登录界面。
systemctl poweroff或poweroff停止所有服务,卸载所有文件系统,关闭系统
systemctl halt或halt停止系统,系统进入能安全地手动关闭的状态
systemctl reboot或reboot停止所有服务,卸载所有文件系统,重启系统
system目标是一组系统启动所需达到的状态,常见目标:
graphical.target:图形的,支持多用户、图形和文本的登录
multi-user.target:多用户的,支持多用户、基于文本的登录
rescue.target:救援、抢救,sulogin提示,表示系统初始化完成
emergency.target:突发事件,sulogin提示,表示initramfs回转完成,且系统以只读挂载在/上
systemctl isolate:切换其他目标
systemctl get-default:获取现在系统默认目标
systemctl set-default:设置系统默认目标
从启动加载器重置root密码步骤:
1. 重启系统
2. 按任意键(Enter键除外)终端启动加载器倒计时
3. 将光标移至启动的内核条目
4. 按e键编辑选定的条目
5. 将光标移到内核命令行(以linux开头的行)
6. 附加rd.break。利用该选项,在系统从initramfs向实际系统移交控制权前,系统将中断
7. 按Ctrl+x使这些更改生效启动
系统会显示root shell,磁盘文件系统会在/sysroot中以只读方式挂载
8. 以读写形式重新挂载/sysroot:mount -o remount,rw /sysroot
9. 切换为chroot存放位置,其中/sysroot被视为文件系统数的根:chroot /sysroot
10.设置新root密码:passwd root
11.确保所有未标记文件在启动过程重新获得标记:touch /.autorelabel
12.两次exit,第一个退出chroot,第二个退出initramfs调试shell
系统继续启动,执行完整的SELinux重新标记,然后再次重新启动
启动失败日志会保存在/etc/system/journald.conf
修复systemd启动问题:
1. 启动早起调试shell,通过systemctl enable debug-shell.service启动调试shell,系统会在启动中生产一个root shell,可以在系统仍在启动时进行调试,用完需禁用该服务。
2. 使用紧急情况和救援目标,从启动器将systemd.unit-rescue.target附加到内核命令。
3. 识别阻塞的作业,使用systemctl list-jobs
诊断和修复文件系统故障
损坏文件系统:systemd会尝试修复文件系统,如果无法修复会转至紧急shell
/etc/fstab中引用的设备UUID不存在:系统会等待设备变得可用,或转至紧急shell
/etc/fstab中的挂载点不存在:系统转至紧急shell
/etc/fstab中指定的挂载点错误:系统转至紧急shell
2.11管理网络安全
Linux内核中包含netfilter,也是RHEL8防火墙的主要组件,任何流量通过编程方式来检查、修改、丢弃或路由。
nftables是netfilter的增强版
firewalld是动态防火墙管理器,是nftables框架的前端,使用nft命令管理防火墙规则集
firewalld的默认区域和默认策略:
trusted:允许所有流量出入
home:拒绝入流量,但常见的流量ssh等允许
internal:同home
work:拒绝入流量,但ssh等流量允许,少于home
public:拒绝入流量,但ssh等流量允许,少于work
external:拒绝入流量,但ssh流量允许
dmz:同external
block:拒绝所有入流量
drop:同block
firewalld预定义的服务:
SSH:TCP22的流量
dhcpv6-client:到fe80::/64网络中UDP546的流量
IPP-client:本地IPP打印,到UDP631的流量
samba-client:windows文件和打印机共享客户端,UDP137、138的流量
MDNS:多播DNS解析,到UDP5353指向224.0.0.251或ff02::fb
配置防火墙方式:直接编辑/etc/firewalld中的配置文件,Web图形控制台,firewall-cmd命令工具。
firewall-cmd:配置防火墙
--get-default-zone:查询当前默认区域
--set-default-zone=ZONE:设置默认区域
--get-zones:列出所有可用区域
--get-active-zones:列出正在使用的所有区域
--add-source=:将网络流量添加到制定区域
--remove-source=:删除网络流量从区域中
--add-interface=:将接口流量添加到区域中
--change-interface=:更改接口所属区域
--list-all:列出区域所有的接口、源、服务、端口等
--list-all-zones:检索所有区域的所有信息
--add-service=:允许到特定服务的流量
--add-port=:允许到特定端口的流量
--remove-service=:删除允许到特定服务的流量
--remove-port=:删除允许到特定端口的流量
--reload:删除所有配置,加载默认配置
SELINUX会对端口标记,如果应用在非标准端口运行,会被selinux拦截,就需要修改selinux的端口标记。
semanage port -l:列出所有端口标记,可以使用 | grep进行优化搜索
semanage port -a:添加新端口标签
-t:表示类型
-p:表示协议
-d:删除端口标签
-m:修改端口标签
2.12安装红帽企业LINUX
RHEL8安装介质:DVD、ISO、QCOW2映像
RHEL8支持的处理器架构:x86_64,IBM Power Systems,IBM Z,ARM64
RHEL8图形界面安装步骤(主要用到Anaconda):
1. 选择语言,安装后的默认语言
2. 安装概要界面,是安装之前自定义参数的中心位置,有以下项目:
Keyboard:键盘布局
Language Support:安装的其他语言
Time&Date:设置时区、城市、时间以及NTP
Installation Source:指定安装源
Software Selection:选择安装的基本环境组件,最小安装将只安装基本组件
Installation Destination:选择安装目的,选择磁盘或分区。
KDUMP:一个内核功能,可在内核崩溃时收集内存内容,可以禁用或启用
Network&Host Name:设置网络和主机名
Security Policy:激活安装策略配置文件
System Purpose:系统用途,可用于分配与预期系统用途吻合的有效系统权利
最后点击Begin Installation
3. 用户设置,必须设置root密码,可选新建一个其他用户
4. 点击Reboot重启系统,安装完成
使用KICKSTART自动安装,kickstart无人值守安装,快速安装的意思
kickstart文件有很多命令,包括安装命令、分区命令、网络命令、位置和安全命令、其他命令
使用kickstart安装系统需要三步:创建kickstart文件,将文件发布到anaconda,启动anaconda并指向kickstart文件。
KVM(Kernel-based Virtual Machine基于内核的虚拟机)是标准linux内核中内置的完整虚拟机解决方案。
红帽OpenStack平台是管理平台,类似于VMware的Vcenter,可以管理多个KVM物理机形成集群,方便迁移等操作。
yum module list virt查看虚拟化软件模块
yum module install virt安装virt模块,为系统变成虚拟化主机做准备
virt-host-validate:检查硬件是否满足虚拟主机的要求,需要支持虚拟化的cpu
yum install cockpit-machines:安装cockpit软件,用于管理虚拟机
systemctl enable --now cockpit.socket启动cockpit软件
此时,在Web控制台虚拟机菜单就可以管理虚拟机了。
三、 红帽系统管理员III:RH294
3
3.1介绍ANSIBLE
Ansible是一款开源自动化平台,是第一款可以在整个IT范围读取和编写的自动化语言,适用于整个生命周期,受控主机不需要代理。
几个重要的优点:
1. 跨平台,提供windows、Linux、Unix和网络设备无代理支持,适用于物理、虚拟、云和容器环境。
2. 人类可读,Ansible Playbook采用YAML文本文件编写,易于阅读
3. 全面描述应用,用它进行更改,并描述和记录应用环境的每一个方面
4. 轻松管理版本控制,存文本形式,可以作为源代码放入现有版本控制系统中
5. 动态清单,可以从外部来源动态更新计算机列表,不受架构和位置的影响。
6. 轻松集成,可集成HP SA、Puppet等其他系统
Ansible架构有两种计算机类型:控制节点和受控主机,控制节点可以是管理员的笔记本电脑、多管理员共享系统或红帽Ansible Tower的服务器,受控主机列在清单中,可以手动定义也可以动态获取。
Ansible无需编写脚本,只需要建立Play来确保主机位于某个状态,并按照Play执行任务,Play采用YAML文本格式表达,包含一个或多个Play的文件称为Playbook
Ansible需安装在控制节点上,控制节点必须是Linux或Unix,不能是windows;但受控主机可以是windows
控制节点安装Ansible需要先安装Python,RHEL8中Ansible2.8集成Python。
红帽Ansible支持订阅,提供高级功能,不订阅也可以使用,使用过程:
1. subscription-manager refresh
subscription-manager repos --enable ansible-2-for-rhel-8-x86_64-rpms
启用红帽Ansible引擎存储库
2. yum install ansible 安装红帽Ansible
受控主机想支持更多的功能,也需要安装Python,如果是windows受控主机需要有PowerShell和.net支持。受控主机也可以是网络设备,通常使用CLI控制。
3.2部署ANSIBLE
Ansible清单是受控主机的列表,单个主机可以是域名或IP地址,组名用中括号[ ]括起来,也可以嵌套组
Ansible配置文件位置/etc/ansible/ansible.cfg
Ansible也可以单独执行某个主机的某个命令,称为临时命令
3.3实施PLAYBOOK
playbook是以YAML文本形式编写,扩展名为yml
---三个破折号是文档开始
相同级别的play具有相同的缩进
Playbook有三个键:Name、hosts、tasks,分别表示命名(可选)、哪些主机、执行的任务。tasks键又有子键:Name和user,分别表示名称(可选)和任务运行的模块
ansible-playbook可以运行playbook,后面跟以yml结尾的文件名称
ansible-playbook命令可以指定输出的详细程度
-v:显示任务结果
-vv:显示任务结果和配置
-vvv:包含与受控主机连接的信息
-vvvv:增加了连接插件相关的额外详细信息
ansible-playbook --syntax-check用于检查playbook文件的语法是否正确
ansible-playbook -C执行空运行,展示将发生哪些更改但不实际更改受控主机
Ansible附带了很多管理任务工具,使用ansible-doc查看本地的工具模块信息
3.4管理变量和事实
变量必须以字母开头,并只能包含字母、数字和下划线
可以在playbook开头的vars中定义变量,方便后面使用。
ansible-vault用于对密码进行保密,可以创建、编辑、加密、解谜和查看文件。
-create创建加密文件
-view查看加密文件
-edit编辑加密文件
-encrypt加密文件
-dectypt揭秘文件
-rekey更改加密文件密码
Ansible事实(Fact)是Ansible在受控主机上自动检测到的变量。
受控主机上收集的事实包括:主机名、内核版本、网络接口、IP地址、操作系统版本、环境变量、CPU数量、内存、磁盘空间等。
可以根据事实快速检索受控主机的状态,并根据状态执行操作。
可以运行事实的playbook来查看主机的环境变量:ansible-playbook facts.yml
选定的Ansible事实以Ansible变量的形式展示,例如ansilble_hostname
默认会自动在受控主机上收集事实,可以手动关闭
也可以自定义事实,在受控主机中保存在/etc/ansible/facts.d目录下的以.fact结尾的文件中。
魔法变量非事实或通过setup配置,但是也由Ansible自动设置,主要有四个:hostvars、group_names、groups、inventory_hostname
3.5实施任务控制
loop关键字用于对一组项目迭代执行任务
With_关键字是旧版本Ansible的loop迭代执行项目
register关键字可以获取循环任务的输出
when语句用于有条件地执行任务,条件中可以包括基本运算,也可以同时多个条件用and或or一起使用
处理程序可视为非活动任务,只有被notify语句调用才触发运行
Ansible执行时如果遇到错误,默认会终止并跳过后续任务,可以在play中使用ignore_errors:yes来忽略错误继续执行后续任务
force_handlers:yes用于任务失败后强制执行处理程序
failed_when用于指定任务失败的条件
Change_when用于指定何时报告更改的通知
block定义要运行的主任务
rescue语句用于和when一起对失败后的执行该语句进行修复
always定义独立运行的任务,始终会执行
3.6在被管理节点上创建文件和目录
红帽Ansible引擎自带了开源项目一部分开发的模块合集,称为模块库,并对这些模块库进行了分组,这些模块库可以完成大部分文件管理相关的任务。如下列表
blockinfile:插入、更新或删除多行文本块
copy:将文件从本地或远程主机复制到受控主机某个位置
fetch:将文件从受控主机复制到控制节点上
file:设置权限、所有权、SElinux上下文及常规文件、符号链接、硬链接、时间戳等
lineinfile:确保特定行位于某文件或反向引用正则表达式替换现有行
stat:检索文件的状态信息
synchronize:围绕rsync命令的一个打包程序,可以加快和简化常见任务。
红帽linux自带的模块有时候也不一定适用,可以使用JINJA2模版来自定义文件。
3.7管理大项目
主机模式用于指定作为play或临时命令的目标主机。也可以使用通配符来匹配特定的一类主机模式
动态主机清单可以从很多平台获取,开源社区也有很多脚本,可以从很多云平台或虚拟平台。
使用forks可以配置并行任务,默认为5
serial关键字可以管理滚动更新
import_playbook可以导入指定的playbook
3.8利用角色简化PLAYBOOK
大型项目很多的play、密码、文件等,可以使用角色对内容进行管理。常见角色:
defaults:目录中的main.yml优先级最低,有其他角色时可以覆盖该角色
files:包含静态文件
handlers:包含处理程序的定义
meta:包含角色相关的信息,如作者、许可证、平台等
tasks:包含角色的任务定义
templates:包含角色任务引用的jinja2模块
tests:用于测试角色
vars:包含角色的变量值
ansible角色基本全面支持红帽系统角色
yum install rhel-system-roles安装RHEL系统角色
也可以自定义角色,需要有三步:创建角色目录结构、定义角色内容、在playbook中使用角色。
3.9对ANSIBLE进行故障排除
可以使用任务执行详细信息、playbook测试工具、空执行进行排障,命令前面有。
3.10 自动执行LINUX管理任务
可以使用ansible任务在远程主机安装软件包
ansible user模块允许管理远程主机的用户账户
group模块管理远程主机的组
at模块用于管理引导过程和调度的进程
parted模块用于管理存储
[李1]-l:是long的缩写,表示长的显示方式
[李2]-a:是all的缩写,表示所有
[李3]-r或-R:是recursive递归的方式
[李4]-p:是parents父母的缩写,表示创建父目录
[李5]-i:interactive交互的,执行前交互询问
[李6]-f:force强制,强制执行不需要询问