redhat linux笔记存档
第1次笔记
- LINUX的重要性
- Linux应用广泛:电子商务网站;股票市场;为智能电视提供支持等
- Linux提供了推动云革命的基础技术,用来构建下一代基于容器的微服务应用
- 在云计算中,私有云或公有云环境中的云实例使用Linux作为操作系统
- Linux优点
- 开源软件
- 访问可脚本化的命令行接口(CLI)
- 模块化操作系统,轻松替换或删除组件
- 红帽介绍
- 世界领先的开源软件解决方案供应商,通过社区驱动的方式提供可靠和高性能的云,Linux,存储和虚拟化等技术
- 红帽负责帮助客户和开源社区及其合作伙伴建立联系,提供开源软件解决方案。除了参与linux社区之外,红帽还参与了其它开源社区,如:0penstack,Openshift等
- 介绍Linux发行版本
- Fedora:一个开发和发布完整,免费,基于Linux的操作系统的社区项目。Fedora项目将所有内容回馈给自由的开源世界,任何人都可以参与其中。
- Fedora优点注重创新,缺点缺乏长期稳定性。每6个月进行一次新的重要更新,更新可能会带来重大变化。Fedora仅为发行版本提供大约一年的支持(两次重要更新),不适合企业使用。
- 红帽企业Linux(RHEL) :红帽提供的企业级商业化发行版本。RHEL经过广泛测试,拥有庞大的合作伙伴生态系统,硬件和软件认证,咨询服务,培训及为期多年的支持和维护保障。
- CentOS:社区驱动型Linux发行版,源自大量开源红帽企业Linux代码库和其它来源。此发行版本免费,易于安装,由一个独立于红帽运营的志愿者用户社区提供人员配备和支持。
- 演示安装VM workstation和安装RHEL8.2
-
安装程序资料链接
链接:https://pan.baidu.com/s/1komV7EMshK1ilNErXqWD5w
提取码:xh36
-
复制这段内容后打开百度网盘手机App,操作更方便哦安装步骤文档已发微信群
- BASH SHELL简介
- Linux命令行由名为shell的程序提供;命令行:基于文本的界面,用于向计算机系统输入指令
- RHEL为用户提供的默认shell是:GNU Bourne-Again Shell(Bash)
- Shell提示符:等待用户输入命令时显示的一个字符串($或者#)
- Bash shell:提供脚本语言,支持自动化任务
- Shell基础知识
- shell提示符下输入的命令由三个基本部分组成
- 运行的命令
- 调整命令行为的选项
- 命令目标的参数
- 举例:usermod -L user1
- 登录本地计算机
- 物理控制台
- 虚拟控制台:切换方式ctrl+alt+F1~F6
- RHEL8:默认图形登录界面显示在tty1
- 图形界面登录,图形环境将使用当前未被使用的第一个虚拟控制台登录
- 图形界面登录后,在不注销当前用户的情况下,使用其它用户登录,会占用下一个空闲虚拟控制台
- 网络登陆
- Linux用户通过网络连接到远程系统获取对远程系统的shell访问权限,通常使用SSH
- SSH命令格式:ssh remoteuser@remotehost
- 开启终端窗口如下图
- 设置终端窗口快捷键方法
-
在系统桌面鼠标右键-----点击settings-----点击Devices-----点击keyboard
-
点击下图中的加号
-
如下图输入快捷键名字和命令,然后点击图中红色箭头
-
然后出现如下图,按照英文提示在键盘输入自己需要的快捷键,举例ctrl和t
-
然后出现如下图,点击添加即可
- 终端窗口字体大小调节快捷键:ctrl+shift和加号(扩大字体);ctrl和减号(缩小字体)
- 基本命令语法
- 分号作为命令分隔符:command1;command2
- 简单命令演示:ls;date;passwd;file;cat;less;head;tail;wc
[root@localhost ~]# ls
[root@localhost ~]# date
[root@localhost ~]# date --help
[root@localhost ~]# file /etc/passwd
[root@localhost ~]# cat /etc/passwd
[root@localhost ~]# less /etc/passwd
[root@localhost ~]# head /etc/passwd
[root@localhost ~]# head -n 2 /etc/passwd
[root@localhost ~]# tail /etc/passwd
[root@localhost ~]# tail -n 2 /etc/passwd
[root@localhost ~]# wc /etc/passwd
[root@localhost ~]# wc -l /etc/passwd
- TAB键补全
- 反斜杠\(转义字符):忽略紧跟在后面的字符含义,回车进入新行(>符号显示),增强命令可读性
- 命令历史记录
- history
- !number
- !String
- 编辑命令行
-
ESC键+点:调用上一个命令最后使用的参数
-
快捷键
- 课堂练习
- 显示当前的日期和时间
- 以12小时制显示当前时间
- 使用wc命令显示/etc/passwd文件行数,字节数
- 显示/etc/passwd前5行
- 完成第4题后,结合使用Bash快捷键,显示/etc/passwd后10行
- 同时显示/etc/passwd文件的前2行和后2行
- 使用历史记录再次运行第4题
- 课堂练习参考答案
- [root@localhost ~]#date
- [root@localhost ~]#date +%r
- [root@localhost ~]#wc -l -c /etc/passwd
- [root@localhost ~]#head -n 5 /etc/passwd
- [root@localhost ~]#tail 使用ESC+点调用第4题的/etc/passwd
- [root@localhost ~]#head -n 2 /etc/passwd;tail -n 2 /etc/passwd
- [root@localhost ~]#history
- 文件系统层次结构:Linux系统中的所有文件存储在文件系统中,它们被组织到一个颠倒的目录树中,称为文件系统层次结构。
- /目录是根目录;字符/也用于文件名中的目录分隔符
- 目录内容简介
第2次笔记
- 绝对路径:指定文件在文件系统结构中的确切位置,从根目录开始
- 相对路径:指定从工作目录到达该文件所需的路径
- 判断绝对路径和相对路径的方法:第一个字符是正斜杠(/)是绝对路径,反之是相对路径
- 导航路径常用命令:pwd;ls(-l,-a,-A,-d,-R);cd;cd -;cd ~;cd ..
- .(点)表示当前目录;..(点点)表示父目录
- touch命令:创建空文件,将文件的时间戳更新为当前日期和时间
- 常用文件管理命令
- 注意
- mkdir -p 创建目录时为请求目标位置创建缺失的父目录
- rm -f: 强制删除
- 课堂练习题
- 用户主目录中创建3个子目录:stu1,stu2,stu3
- 用户主目录中创建文件名为songX.mp3,snapX.jpg,filmX.avi(X取值1~6)
- 将songX.mp3文件移动到stu1目录中,将snapX.jpg文件移动到stu2目录中,将filmX.avi文件移动到stu3目录中
- 用户主目录中,创建3个新的子目录:friend,family,work,将含有数字1和2的文件(所有类型)复制到friend子目录中,将含有数字3和4的文件(所有类型)复制到family子目录中,将含有数字5和6的文件(所有类型)复制到work子目录中
- 用户主目录中,创建1个名为shida的子目录,将目录work及work目录中的文件复制到shida目录中
- 删除work目录及work目录中的文件,删除时需要有提示信息
- 课堂练习参考答案
- [root@localhost ~]# mkdir stu1 stu2 stu3
- [root@localhost ~]# touch song1.mp3 song2.mp3 song3.mp3 song4.mp3 song5.mp3 song6.mp3
[root@localhost ~]# touch snap1.jpg snap2.jpg snap3.jpg snap4.jpg snap5.jpg snap6.jpg \回车
> film1.avi film2.avi film3.avi film4.avi film5.avi film6.avi
- [root@localhost ~]# mv ~/song1.mp3 ~/song2.mp3 ~/song3.mp3 ~/song4.mp3 ~/song5.mp3 ~/song6.mp3 stu1
[root@localhost ~]# cd stu2
[root@localhost stu2]# mv ~/snap1.jpg ~/snap2.jpg ~/snap3.jpg ~/snap4.jpg ~/snap5.jpg ~/snap6.jpg .
[root@localhost ~]# mv ~/film1.avi ~/film2.avi ~/film3.avi ~/film4.avi ~/film5.avi ~/film6.avi stu3
- [root@localhost ~]# mkdir friend family work
[root@localhost ~]# cp ~/stu1/song1.mp3 ~/stu1/song2.mp3 ~/stu2/snap1.jpg ~/stu2/snap2.jpg ~/stu3/film1.avi ~/stu3/film2.avi friend
[root@localhost ~]# cp ~/stu1/song3.mp3 ~/stu1/song4.mp3 ~/stu2/snap3.jpg ~/stu2/snap4.jpg ~/stu3/film3.avi ~/stu3/film4.avi family
[root@localhost ~]# cp ~/stu1/song5.mp3 ~/stu1/song6.mp3 ~/stu2/snap5.jpg ~/stu2/snap6.jpg ~/stu3/film5.avi ~/stu3/film6.avi work
- [root@localhost ~]# mkdir shida
[root@localhost ~]# cp -r work/ shida/
- [root@localhost ~]# rm -r work/
- 管理文件间的链接:创建指向同一文件的多个名称。方法:硬链接和软链接
- 硬链接概念:从初始名称到文件系统上的数据,每个文件都以一个硬链接开始。当创建指向文件的新硬链接时,也会创建另一个指向同一数据的名称。新的硬链接与原始文件名的作用完全相同。
- 创建硬链接语法格式:ln 源文件名 新建链接文件名
- 硬链接的局限性
- 只能用于常规文件,不能用于创建指向目录或者特殊文件
- 只有位于同一文件系统上的两个文件才能创建硬链接
- 软连接(符号链接)概念:软连接是指向现有文件或目录的特殊类型的文件。
- 创建软链接语法格式:ln -s 源文件名 新建链接文件名
- 软链接优势
- 可以链接位于不同文件系统上的两个文件
- 不限于常规文件,可以指向目录或者特殊文件
- 软链接注意事项
- 建议使用绝对路径
- 悬挂链接:源文件被删除,软连接仍然指向该文件
- 目录软链接,进入软链接的目录时,使用-P选项可直接进入源目录
- 硬链接课堂练习
[root@localhost ~]#mkdir test
[root@localhost ~]#touch file1
[root@localhost ~]#ln ~/file1 ~/test/hard
- 软连接课堂练习
[root@localhost ~]#touch file2
[root@localhost ~]#ln -s ~/file2 ~/test/soft1 文件软连接
[root@localhost ~]#ln -s ~/shida ~/test/soft2 目录软连接
- 模式匹配:使用“扩展”的元字符匹配需要寻找的文件名和路径
- 波形符扩展:波形符(~)可以匹配当前用户的主目录
举例:echo ~root;echo ~user;echo显示波形符字符的值
举例:ls ~root;ls ~user
- 大括号扩展:大括号扩展用于生产任意字符串
举例:file{1..3}
举例:file{a..b}
举例:file{1,2}{a,b}
- 命令替换:允许命令的输出替换命令行上的命令本身,格式$(命令)
举例:echo today is $(date +%A)
第3次笔记
- 课堂练习
- 用户家目录下的shida子目录中创建名为project的空目录,在新创建的project目录中创建两个空文件:tv_season1_.odf和tv_season2_.odf
- 用户家目录下创建名为tv_seasonX_Y.ogg文件,X替换为季数,Y替换为该季的集数,共2季,每季6集
- 用户家目录下为悬疑小说创建名为mystory_chapterX.odf的文件,将X替换为数字1到8
- 用户家目录下的videos子目录下创建两个子目录:seasnon1和season2
- 将tv第一季和第二季分别移动到season1和season2目录中
- 用户家目录下的shida子目录中创建my_bestseller/chapters目录用于整理悬疑小说
- my_bestseller子目录下创建3个子目录,名字分别为editor,changes,vacation
- 进入chapters目录,将悬疑小说的所有文件移动到当前目录
- 将悬疑小说第1章和第2章移动到目录editor
- 将悬疑小说第3章和第4章移动到目录vacation
- 将悬疑小说第5章和第6章移动到目录changers
- 进入project中,将悬疑小说目录chapters和悬疑小说的第7,8章一起复制到project目录中
- 进入season1目录中,将第1季的第1,2集移动到用户家目录
- 接着13题,将season2目录中的第2季的第1,2集移动到用户家目录
- 为子目录shida创建新的软件链,并命名为/boot/soft
- 使用cd命令进入/boot/soft的时候直接进入到链接的源目录
- 删除所有新建立的目录和文件
- 课堂练习答案
- [root@localhost ~]# mkdir -p shida/project
[root@localhost ~]# touch shida/project/tv_season{1,2}_.odf
- [root@localhost ~]# touch tv_season{1,2}_{1..6}.ogg
- [root@localhost ~]# touch mystory_chapter{1..8}.odf
- [root@localhost ~]# mkdir -p videos/season{1,2}
- [root@localhost ~]# mv tv_season1 videos/season1*
[root@localhost ~]# cd videos/season2
[root@localhost season2]# mv ~/tv_season2_ .*
- [root@localhost ~]# mkdir -p shida/my_bestseller/chapters
- [root@localhost my_bestseller]# mkdir editor changes vacation
- [root@localhost my_bestseller]# cd chapters/
[root@localhost chapters]# mv ~/my .*
- [root@localhost chapters]# mv mystory_chapter{1,2} ../editor/*
- [root@localhost chapters]# mv mystory_chapter{3,4} ../vacation/*
- [root@localhost chapters]# mv mystory_chapter{5,6} ../changes/*
- [root@localhost chapters]# cd ~/shida/project/
[root@localhost project]# cp -r ~/shida/my_bestseller/chapters .
- [root@localhost project]# cd ~/videos/season1
[root@localhost season1]# mv tv_season1_{1,2} ~/*
- [root@localhost season1]# mv ../season2/tv_season2_{1,2} ~/*
- [root@localhost ~]# ln -s ~/shida/ /boot/soft
- [root@localhost ~]# cd -P /boot/soft
- man page:本地系统上的一个文档(系统手册页);使用man命令访问
阅读man page
- 标准输入,标准输出和标准错误
- 一个运行的程序或者为进程需要从某位置读取输入,并将输出写入某位置;从shell提示符运行的命令通常从键盘读取其输入,并将输出发送到终端窗口
- 一个进程使用称为文件描述符的编号通道获取输入并发送输出;所有进程开始时至少有三个文件描述符
- 通道(文件描述符)
- 将输出重定向到文件
-
file 2>&1 将标准输出重定向到file,然后将标准错误作为标准输出重定向到相同位置file
- 2>&1 >file 将标准错误重定向到标准输出的默认位置(终端窗口),然后仅将标准输出重定向到file
- 构建管道
- 管道:一个或多个命令的序列,用竖线字符(|)分隔;管道将第一个命令的标准输出连接到下一个命令的标准输入
- 管道和重定向组合使用
- 管道输出后使用重定向: cat /etc/passwd | tail -1 >file1
- 管道中间使用输出重定向:cat /etc/passwd >file1 | tail -n 2 观察现象,如何解决?
- tee命令:在管道中,将标准输入复制到标准输出,并且将标准输出重定向到指定文件
cat /etc/hosts | tee file1
cat /etc/hosts | tee file1 | tail -n 1
cat /etc/hosts | tail -n 1 | tee file1
- tee -a 选项:附加到指定文件
课堂练习:cat /etc/hosts aa bb cc 完成如下需求
- 向终端显示输出并忽略所有错误
cat /etc/hosts aa bb cc 2>/dev/null
- 将标准输出发送到文件f1;将错误发送到另一个文件f2
cat /etc/hosts aa bb cc >f1 2>f2
- 将标准输出和错误发送到同一个文件f2,且保留原文件内容
cat /etc/hosts aa bb cc >>f2 2>&1
- 将f1文件和f2文件中的内容连接到1个新文件f3
cat f1 f2 >f3
- Vim(vi improved)编辑器:是vi编辑器的改进版,兼容vi指令,语法高亮。
- Vim管理模式:命令模式,编辑模式,扩展模式(末行模式),可视模式
- 命令模式按键说明
- 编辑模式:命令模式中使用字母 i 进入
- 末行模式:命令模式中使用冒号进入;下表为末行模式操作
- 可视模式:命令模式中使用字母 v 进入后,使用上下左右键移动
- 可视模式包含:字符模式(v);行模式(shift+v);块模式(ctrl+v);屏幕底部分别显示VISUAL;VISUAL LINE;VISUAL BLOCK
- 课堂练习
- 用户家目录下执行ls -al命令将所有内容重定向到名为test文件中
ls -al >test
- vim编辑文件test,显示行号
vim test后使用shift冒号进入扩展模式,输入 :set number回车即可
- 可视化模式的行模式删除前三行
shift+v进入可视化的行模式,选中删除内容后,x删除
- 可视化模式的字符模式删除第一行第一列点后面的所有字符
v进入可视化模式的字符模式,选中删除内容后,x删除
- 可视化模式的块模式删除第二行到最后一行的第一列(不含点)
ctrl+v进入可视化的块模式,选中删除内容后,x删除
- 删除月份所在列,保存退出
ctrl+v进入可视化的块模式,选中删除内容后,x删除
- 使用复制方法为文件test做备份,新文件名在原文件名后面加日期的秒数。提示:%s
cp test test$(date +%s)
- 在原文件test中附加1条虚线,虚线中包含15个短划线---------------
echo “---------------” >>test
- 1条命令将tmp目录列表附加到文件test,同时将tmp列表附加到一个文件file中,且在屏幕显示最后2行
ls /tmp | tee -a test | tee file | tail -n 2
- 用户账户和组概念
- 用户账户概念:用于在运行命令的不同人员和程序之间提供安全界限;标识UID
- 用户账户的类型:超级用户,系统用户,普通用户
- 超级用户账户:用于管理系统;超级用户的名称root;UID=0;对系统具有完全访问权限。
- 系统用户账户:提供服务进程使用;进程或守护进程通常不需要以超级用户身份运行
- 普通用户账户:用于处理日常工作,对系统具有有限的访问权限;UID=>1000
- /etc/passwd文件存储本地用户信息
该用户的用户名
固定值x
该用户账户的UID
该用户账户的GID
该用户账户的描述信息
该用户账户的主目录
该用户的默认shell程序,登录时运行/bin/bash
- 组概念:共享文件和其它系统资源访问权限的用户集合;标识GID
- /etc/group 文件存储本地用户组信息
该组的组名称
固定值x
该组的GID
属于作为附属组的该组成员的用户列表
- 主要组和附属组
- 获取超级用户访问权限
用户切换
su 方式:启动非登录shell,仅以该用户身份启动shell,使用原始用户的环境设置
su - 方式:启动登录shell,将shell环境设置为如同使用该用户身份重新登录一样
sudo 命令
sudo 要求用户输入自己的密码进行身份验证
执行sudo需要配置sudo的配置文件
- 配置sudo
方法1:使用visudo或者vim修改sudo配置文件,位置:/etc/sudoers
方法2:使用vim在/etc/sudoer.d目录中添加需要提升权限的用户文件
第4次笔记
- 创建用户:useradd username
- 创建新用户时在/home目录中自动创建1个和该用户同名的目录作为该用户的家目录
- 创建新用户时在/etc/passwd文件和/etc/shadow文件中自动添加新用户信息
- 创建新用户时在/var/spool/mail 目录中创建1个和该用户同名的文件作为该用户的邮箱文件
- 创建新用户时自动创建1个和该用户同名的组作为该用户的主要组
- 现有用户修改:usermod 可选项 用户名
- 删除用户:userdel 可选项 用户名
注意:userdel 用户名:将保留用户的主目录,同时系统将回收未分配的UID,具有未分配UID的所拥有文件;如果未分配的UID分配给了新用户,那么新用户将拥有被删除用户文件的所有权!
- 创建本地组:groupadd [选项] 组名
- 修改本地组:groupmod [选项] 组名
- 删除本地组:groupdel [选项] 组名;如果组是任何现有用户的主要组则无法删除
- 组管理命令:gpasswd
- 课堂练习及参考答案
- 创建新用户u1,u2,u3,u4,密码均为redhat123
[root@localhost ~]# useradd u1
[root@localhost ~]# useradd u2
[root@localhost ~]# useradd u3
[root@localhost ~]# useradd u4
[root@localhost ~]# echo redhat123 | passwd --stdin u1
[root@localhost ~]# echo redhat123 | passwd --stdin u2
[root@localhost ~]# echo redhat123 | passwd --stdin u3
[root@localhost ~]# echo redhat123 | passwd --stdin u4
- 修改配置文件的方式赋予用户u1所有命令权限且免密
[root@localhost ~]# echo "u1 ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers
- 在/etc/sudoers.d/目录中添加文件赋予用户u2所有命令权限且不免密
[root@localhost ~]# echo "u2 ALL=(ALL) ALL" >>/etc/sudoers.d/u2
- 使用u1用户创建2个新组:group1,GID=30000;group2
[u1@localhost ~]$ sudo groupadd -g 30000 group1
[u1@localhost ~]$ sudo groupadd group2
- 使用u2用户将u1添加到group1和group2,u2和u3添加到group1
[u2@localhost ~]$ sudo usermod -aG "group1,group2" u1
[u2@localhost ~]$ sudo usermod -aG group1 u2
[u2@localhost ~]$ sudo usermod -aG group1 u3
- 使用root用户将组group1现在和未来的组成员可以使用的命令权限设置为ALL,用u3验证
[root@localhost ~]# echo "%group1 ALL=(ALL) ALL">> /etc/sudoers
[root@localhost ~]# su - u3
[u3@localhost ~]$ sudo cat /etc/shadow
- 设置用户u4是组group1和group2的管理员,使用用户u4将group1和group2的组成员清空
[root@localhost ~]# gpasswd -A u4 group1
[root@localhost ~]# gpasswd -A u4 group2
[root@localhost ~]# su - u4
[u4@localhost ~]$ gpasswd -d u1 group1
[u4@localhost ~]$ gpasswd -d u2 group1
[u4@localhost ~]$ gpasswd -d u3 group1
[u4@localhost ~]$ gpasswd -d u1 group2
- 完成上述实验后,使用root用户删除所有新建的用户,组以及sudo命令提权配置
[root@localhost ~]# userdel -rf u1
[root@localhost ~]# userdel -rf u2
[root@localhost ~]# userdel -rf u3
[root@localhost ~]# userdel -rf u4
[root@localhost ~]# groupdel group1
[root@localhost ~]# groupdel group2
[root@localhost ~]# rm -f /etc/sudoers.d/u2
[root@localhost ~]# vim /etc/sudoers 然后删除如下信息后,保存退出
- 管理用户密码
- 配置文件/etc/shadow介绍
- 3号:上次更改密码的日期距离1970-1-1的天数,按UTC时区计算
- 4号:上次更改密码到可以再次更改密码之前必须经过的最短天数(0表示可随时更改)
- 5号:在密码过期之前不进行密码更改可以经过的最长天数
- 6号:警告期:用户在截至日期之前登陆到达该天数时,收到密码过期警告
- 7号:非活动期。密码过期后,指定天数内仍然可以登陆。过了这个时间,账户被锁定
- 8号:密码过期日期。距离1970-1-1起的天数,按UTC时区计算
- 加密密码的格式:哈希算法;salt;加密哈希;每段信息由$符号分隔
- 使用的哈希算法:6表示SHA-512(默认);1表示MD5;5表示SHA-256
- 用于加密密码的salt
- 用户密码加密的哈希值:salt和未加密密码组合并加密,生成加密的密码哈希
- 不同用户使用相同相同,生成加密的密码哈希不同,因为salt不同
- chage命令配置密码期限
- chage -d 0 user:强制用户user登录时必须更新密码
- chage -E 2021-12-12 user:用户user于2021年12月12日到期
- 设置密码非活动日期前,必须先设置密码到期日
- 限制访问
- chage设置用户账户到期日期
- usermod命令通过-L选项锁定用户账户
- nologin shell
- 文件具有三个应用权限的用户类别:文件所有者;文件所属组;其它
- 权限优先级:用户权限覆盖组权限;组权限覆盖其它权限
第1个字符:表示文件类型(-常规文件;d目录;l软连接;b和c硬件设备)
第2个字符到第4个字符为一组:表示文件或目录所有者的权限
第5个字符到第7个字符为一组:表示文件或目录所属组的权限
第8个字符到第10个字符为一组:表示其它用户对文件或目录的权限
第11位表示是否有特殊权限
第12位表示硬链接数
- 课堂练习题如图
- 哪个常规文件归operator1所有并可被所有用户读取?
- 哪个文件可以被contractor1用户修改
- 哪个文件无法被operator2用户读取?
- 哪个文件的组所有者为consultant1?
- 哪些文件可以被operator1用户删除?
- 哪些文件可以被operator2用户删除?
答案:① rfile1 ② lfie2 ③ rfile2 ④ lfile1 ⑤ 都可以 ⑥ 都不可以
第5次笔记
- 更改文件和目录权限:符号法和数值法
- 符号法
- u代表用户,g代表组,o代表其它,a代表全部
- +代表添加,-代表删除,=代表精确设置
- R选项以递归方式对目录及目录中的文件设置权限
- 数值法
- 更改文件和目录的所有者或组所有权
- 只有root用户可以更改文件的所有者
- 文件组所有权可以由root用户或者文件所有者更改
- root用户可以将文件所有权授予任何组
- 普通用户只能将文件所有权授予普通用户所属的组(这个组可以是主要组或附属组)
- 命令格式
chown 所有者 文件或目录
chown :所属组 文件或目录
chown 所有者:所属组 文件或目录
注意:建议不要用. 替换:
- 课堂练习
-
root用户创建目录/home/shida和1个名为group1组
[root@localhost ~]# mkdir /home/shida
[root@localhost ~]# groupadd group1
-
目录/home/shida所属组修改group1
[root@localhost ~]# chown :group1 /home/shida/
-
group1组成员可以在/home/shida目录中创建和删除文件,禁止其它用户访问文件
[root@localhost ~]# chmod 770 /home/shida/
-
创建两个新用户u1和u2,密码都是redhat123,group1是两个新用户的附属组
[root@localhost ~]# useradd u1
[root@localhost ~]# useradd u2
[root@localhost ~]# echo redhat123 | passwd --stdin u1
[root@localhost ~]# echo redhat123 | passwd --stdin u2
[root@localhost ~]# gpasswd -a u1 group1
[root@localhost ~]# gpasswd -a u2 group1
-
u1用户在/home/shida目录中创建名为u1.txt文件
[u1@localhost ~]$ touch /home/shida/u1.txt
-
u1用户将文件u1.txt所属组修改为组group1
[u1@localhost ~]$ chown :group1 /home/shida/u1.txt
-
思考u2用户是否可以向u1.txt文件中写入内容
可以
-
特殊权限:强制位(suid),冒险位(sgid),黏贴位(stick)
-
设置特殊权限
- 符号法:setuid=u+s;setgid=g+s;stick=o+t
- 数值法:setuid=4;setgid=2;stick=1 如:chmod 2770 目录
- 影响默认文件权限的因素
- 创建的是文件还是目录
- 使用的是root用户还是普通用户
- 新目录权限值0777;新文件权限制0666
- umask值:限制初始设置的权限,清除创建的新文件和新目录的权限
- root用户umask默认0022;普通用户umask值默认0002
- umask值设置:xxxx;关闭终端,重新开启终端设置的新umask值失效
-
Bash shell 用户可以在用户主目录的~/.bashrc文件中覆盖系统默认值,重新登录终端生效
举例:echo “umask 0022” >>~/.bashrc
-
课堂练习
-
root用户创建3个新用户tech1,tech2,database1,密码redhat123和1个组sd
[root@localhost ~]# useradd tech1
[root@localhost ~]# useradd tech2
[root@localhost ~]# useradd database1
[root@localhost ~]# echo redhat123 | passwd --stdin tech1
[root@localhost ~]# echo redhat123 | passwd --stdin tech2
[root@localhost ~]# echo redhat123 | passwd --stdin database1
[root@localhost ~]# groupadd sd
-
root用户创建名为/home/sd的目录,且将/home/sd的所属组修改为sd
[root@localhost ~]# mkdir /home/sd
[root@localhost ~]# chown :sd /home/sd
-
root用户将用户tech1,tech2加入组sd
[root@localhost ~]# gpasswd -a tech1 sd
[root@localhost ~]# gpasswd -a tech2 sd
-
tech1用户尝试在/home/sd目录中创建1个文件techf1.txt,观察现象
不能
-
root用户对/home/sd目录设置冒险位,且目录所有者和组具rwx权限,其它用户无权限
[root@localhost ~]# chmod 2770 /home/sd/
-
tech1用户再次尝试在/home/sd中创建techf1.txt文件
[tech1@localhost ~]$ touch /home/sd/techf1.txt
-
tech2用户尝试向/home/sd/techf1.txt文件中添加hello world
[tech2@localhost ~]$ vim /home/sd/techf1.txt
-
database1用户是否可以使用vim修改文件/home/sd/techf1.txt,观察现象
不能
-
root用户将/home/sd的其它位权限设置为rwx,且设置黏贴位(黏贴位会影响第10题结果)
[root@localhost ~]# chmod 3777 /home/sd/
-
database1用户此时是否可以修改文件/home/sd/techf1.txt,观察现象
- 除文件所有者和文件的组从属关系之外的用户和组被称为指定用户和指定组
- ACL访问控制列表概念:为指定的用户和指定的组以不同的文件权限来访问文件
- ACL权限解释如图
用户:显示用户acl设置,与标准的用户文件设置相同;rwx
组: 显示当前acl掩码设置,而不是组所有者设置;rw
其它:显示其它acl设置,与标准的其它文件设置相同;---
注意:chmod更改具有acl的文件的组权限时,更改的不是组所有者权限,实际更改的是acl掩码
文件ACL
① 前三条注释:文件名;文件所有者;组所有者(operators)
② 用户条目:文件所有者权限,user的权限rwx;指定用户权限,consultant3用户没有任何权限;指定用户权限,UID=1005的权限rwx,掩码将有效权限限制为rw
③ 组条目:组所有者权限,operators权限rwx,掩码将有效权限限制为rw;指定组权限,consultant1权限r;指定组权限,GID=2210权限rwx,掩码将有效权限限制为rw
④ 掩码
⑤ 其它
目录ACL
① flag:如果存在任何其它特殊权限setuid,setgid,sticky,就会出现第四行注释显示所设置的标志,本例为setgid
- ACL掩码
- 掩码定义可以授予指定用户,组所有者和指定组的最大权限
- 它不限制文件所有者和其它用户的权限
- 默认系统自动计算掩码
- 可以使用setfacl 设置掩码
- 默认添加,修改或删除任何受影响的ACL(指定用户或组所有者或指定组)时,会重新计算掩码
- ACL权限优先级
- 如果以文件所有者身份运行进程,则应用文件的用户ACL权限
- 如果以指定用户ACL条目中列出的用户身份运行进程,则应用指定用户ACL权限(只要掩码允许)
- 如果以与文件的组所有者相匹配的组身份运行进程,或者以指定组ACL条目的组身份运行进程,则应用相匹配的ACL权限(只要掩码运行)
-
更改ACL文件权限练习
setfacl -m u:natasha:rw file
setfacl -m u::rw file
setfacl -m g:group1:rw file
setfacl -m g::rw file
setfacl -m u::rwx,g:group1:rw,o::r file
setfacl -m m::r file
setfacl -x u:natasha file // 删除指定用户和指定组,任何其它现有ACL条目均保持活动
setfacl -b file // 删除文件或目录的所有ACL条目
getfacl file1 | setfacl --set-file=- file2 // file1的权限给文件file2
-
课堂练习
-
root用户在/tmp创建文件f1,f1内容是12345,查看文件f1权限
[root@localhost ~]#echo 12345 >>/tmp/f1
-
root用户使用acl设置用户u1可以对文件f1进行读取和编辑(u1用户如果不存则创建),验证
[root@localhost ~]# setfacl -m u:u1:rw /tmp/f1
- root用户使用acl设置用户u2对文件f1没有任何权限(u2用户如果不存则创建),验证
[root@localhost ~]# setfacl -m u:u2:--- /tmp/f1
-
root用户执行误操作:chmod g-r /tmp/f1,u1,u2是否可以读文件f1,u1是否可以编辑文件f1?
u1和u2不可以读取f1;u1可以修改f1
-
root用户再次执行误操作:chmod g-w /tmp/f1,u1,u2是否可以读文件f1,u1是否可以修改文件f1?
u1和u2可以读取f1;u1不可以修改f1
-
root用户执行操作:setfacl -m m::r /tmp/f1,u1,u2是否可以读取文件f1?
u1可以读取f1,u2不可以读取f1
第6次笔记
- 进程概述
- 进程概念:进程是已启动的可执行程序,占用系统资源(如CPU,内存等);进程请求资源时进入睡眠状态,包括等待磁盘,网络,用户输入等;进程完成任务后正常情况下自动进行“自杀”,释放系统资源
- 父进程概念:现有的进程(父)复制自己的地址空间(fork)创建1个新的子进程;每个新的进程分配有一个唯一进程ID(PID);任何进程都可以创建子进程;所有进程都是第一个系统进程的后代;RHEL8的第一个系统进程是systemd
- 子进程概念:子进程执行自己的程序代码,父进程在子进程运行期间处于睡眠状态,设置一个在子进程完成时发出信号的请求;子进程退出时会向其父进程发出信号, 释放除PID之外的所有资源。父进程收到子进程的信号被唤醒,清理子进程的条目,释放进子进程的最后一个资源,然后父进程继续执行自己的程序代码
- 僵尸进程:进程应该结束,但没有结束,依然占用系统资源
- 进程命令
- ps 命令:用于查看系统的进程
- pidof 命令:用于查询某个指定服务进程的PID值;举例:pidof sshd
- 进程控制
- jobs:查看后台进程
- crtl+z:暂停前台正在运行的进程
- bg %作业编号:将后台暂停的进程恢复在后台继续运行
- fg %作业编号:将后台暂停的进程调回前台继续运行
- 符号&:在命令行的结尾处附加符号&表示将放到后台运行
- bg和fg执行条件:进程已经在后台被挂起
- 课堂演示:打开两个终端
- 左边窗口执行 (while true; do echo -n “ rhcsa ” >> ~/outfile;sleep 1; done)
- 右边窗口执行tail -f ~/outfile
- 左边窗口执行crtl+z
- 左边窗口先执行jobs,然后执行执行bg %作业编号
- 左边窗口使用第1题的方法添加“rhce”和“rhca”直接到后台运行
(while true; do echo -n “ rhce ” >> ~/outfile;sleep 1; done) &
(while true; do echo -n “ rhca ” >> ~/outfile;sleep 1; done) &
- 左边窗口将后台运行调到前台,然后终止(命令参考:fg %作业编号;然后使用ctrl+c终止)
- 信号控制进程:kill -l 查看信号
- 信号编号视不同的Linxu硬件平台而不同,但信号名称和含义是标准化的,使用时建议使用信号名称
- kill命令举例
- kill -s SIGKILL PID
- kill -9 PID
- kill 信号 %序号
- killall命令:用于终止某个指定名称的服务所对应的全部进程
- pkill:向一个或多个符合选择条件的进程发送信号。选择条件可以是命令名称,特定用户拥有的进程,或者所有系统范围进程
- UID---由某一Linux用户账户拥有的进程
- GID---由某一Linux组账户拥有的进程
- 终端---运行于特定控制终端的进程
- 课堂演示:打开两个终端
- 左边窗口执行如下命令
(while true; do echo -n “ rhcsa” >> ~/outfile;sleep 1; done) &
(while true; do echo -n “ rhce” >> ~/outfile;sleep 1; done) &
(while true; do echo -n “ rhca” >> ~/outfile;sleep 1; done) &
- 右边窗口tail -f ~/outfile查看
- 左边窗口使用kill命令暂停“rhcsa”输入;整洁终止“rhce”输入
命令参考:kill -19 %作业编号
- 左边窗口使用kill命令恢复“rhcsa”输入;终结“rhcsa”和“rhca”输入
命令参考:kill -18 %作业编号
- 左边窗口使用kill命令暴力终结“redhat”和“rhce”输入
命令参考:kill -9 %作业编号
- 左边窗口使用pkill命令结束tail显示
命令参考:pkill tail
- 监控进程活动
- 负载平均值概念:Linux内核提供的一种度量方式;表示一段时间内感知的系统负载
- 每5秒钟收集一次当前负载数,汇总这些数值,得到最近1分钟,5分钟,15分钟内的指数移动平均值
- top监控
- 课堂演示:打开两个终端
- 右边终端执行top实时监控系统进程
- 左边窗口执行命令:dd if=/dev/zero of=/dev/null &
- 右边窗口查看dd进程
- 左边窗口再执行1次dd命令;右边窗口观察
- 左边窗口再执行5次dd命令;右边窗口观察
- 右边窗口top中杀掉1个dd进程,左边窗口使用pkill杀掉其余dd进程
- 进程优先级
- nice级别取值范围介于-20~19,数值越小越抢占CPU资源,默认nice级别为0
- root用户可以降低进程nice级别;普通用户只能提高自己的nice级别
- NI显示进程的nice值;PR显示其调度的优先级
- nice -n [-20…19] command:启动进程时设置nice级别
- renice -n [-20…19] -p PID:调整已经运行的应用程序或命令的nice级别
- 实验演示:两个终端窗口
- 左边窗口执行2次命令:dd if=/dev/zero of=/dev/null &
- 右边窗口执行:top查看
- 左边窗口执行命令: nice –n 10 dd if=/dev/zero of=/dev/null &
- 使用renice调整刚刚nice级别为10的进程,调整为-10
renice -n -10 -p PID(进程ID)
-
systemd简介
Systemd守护进程管理linux的启动,包括服务启动和服务管理;它可以在系统引导时以及运行中的系统上激活系统资源,服务器守护进程和其它进程
-
守护进程概念:在执行各种任务的后台等待或运行的进程,在系统引导时自动启动并持续运行至关机或被手动停止,通常守护进程的名称以字母d结尾
-
红帽中Linux的systemd 守护进程功能(PID=1)
- 同时启动多个服务,提高系统的启动速度
- 按需启动守护进程,不需要单独的服务
- 自动服务依赖关系管理。例如:只有网络可用时,依赖网络的服务才会尝试启动
- systemd 使用单元管理不同类型的对象
-
服务单元(.service):代表系统服务,用于启动经常访问的守护进程,如web服务器
-
举例: systemctl status sshd.service
-
systemctl输出的服务状态
-
控制服务命令
systemctl status sshd.service
systemctl is-active sshd.service
systemctl is-enabled sshd.service
systemctl enable sshd.service
systemctl disable sshd.service
systemctl stop sshd.service
systemctl start sshd.service
systemctl restart sshd.service
systemctl reload sshd.service
systemctl reload-or-restart sshd.service:
systemctl is-failed sshd.service
systemctl mask UNIT
systemctl unmask UNIT
-
OpenSSH:Secure Shell 协议使系统能够以加密的方式进行通信
-
SSH登录方式
- 交互式shell会话方式:ssh username@IP address
- 非交互式shell会话方式:ssh user@IP address hostname
- SSH服务器配置文件位置:/etc/ssh/sshd_config
- 客户端首次登录服务器过程
- 服务器开启SSH服务时自动创建3组6个key文件,作为未来服务器指纹信息,位置/etc/ssh/
- 客户端首次登录服务器时,服务器将公钥副本发送给客户端,客户端存储服务器公钥副本的默认位置:~/.ssh/known_hosts,作为之后登录服务器的指纹信息
-
客户端存储的主机公钥信息字段含义
第一个字段:共享该公钥的主机名和IP地址列表
第二个字段:公钥加密算法
第三个字段:公钥本身
-
基于SSH密钥的身份验证概念:在不使用密码的情况下进行身份验证,身份验证基于1对秘钥(公钥和私钥)
客户端
-
ssh-keygen:生成密钥文件,一把公钥,一把私钥
-
公钥和私钥位置:~/.ssh/
-
ssh-copy-id username@IP address:将公钥副本发送给服务器,用于验证私钥
服务器存放客户端公钥副本位置:~/.ssh/authorized_keys
ssh-keygen -f :指定保存公钥和私钥的新目录位置
ssh-copy-id -i:指定复制的公钥的文件位置
- 自定义OPENSSH服务配置:/etc/ssh/sshd_config
- 禁止root用户远程登录:PermitRootLogin no
- 只允许root用户基于密钥登录:PermitRootLogin without-password
- 禁止使用密码登录:PasswordAuthentication no
- 网络概念
-
TCP/IP网络模型
-
IPv4地址和掩码
-
网关和路由
-
子网划分
-
网络配置基础命令
ip [-s ] link show 网卡名:显示指定网卡链路层信息(-s表示统计信息)
ip [-s ] address show 网卡名:显示指定网卡网络层信息(-s表示统计信息)
ping:检测主机之间的连通性
ip route:路由信息
route -n:显示内核路由表
第7次笔记
- RHEL8:systemd-journald服务和rsyslog服务处理RHEL8的日志消息
-
systemd-journald服务:是操作系统事件日志架构的核心。收集的事件消息包括:内核,引导过程早期阶段的输出,守护进程,运行时的标准输出以及标准错误,以及syslog事件,将收到的消息写进带有索引的结构化系统日志中,默认该日志存储在系统重启后不保留的文件系统上
-
rsyslog服务:从日志中读取systemd-journald收到的syslog消息,对syslog消息进行排序,将它们写入到在系统重启后不保留的日志文件中,或者根据配置将它们转发给其它服务
-
syslog优先级
-
rsyslog 配置规则位于:/etc/rsyslog.conf和/etc/rsyslog.d目录中扩展名为.conf的任何文件。左侧表示与规则匹配的syslog消息的类型和严重性;右侧表示要将日志消息保存到的文件或者消息要发送到的其它位置;*表示匹配所有值
- 记录该日志条目的时间戳
- 发送该日志消息的主机
- 发送该日志消息的程序或进程名称和PID编号
- 发送的实际消息
-
手动发送syslog消息:logger命令默认将优先级为notice(user.notice)消息发送到rsyslog服务,-p 选项指定其它级别
-
举例:向rsyslog服务发送消息并记录在/var/log/boot.log日志文件中
logger -p local7.notice “Log entry create on host”
cat /var/log/boot.log
-
课堂练习
-
添加配置文件/etc/rsyslog.d/debug.conf
vim /etc/rsyslog.d/debug.conf
-
将任何服务的优先级为debug或以上的所有消息记录到新的/var/log/message-debug日志文件中
- .debug /var/log/messages-debug
systemctl restart rsyslog.service
-
logger测试:使用-p指定user.debug,显示的消息是debug message test 123456
logger -p user.debug "debug message test 123456“
- 日志检索:journalctl
- n:设置显示日志最后的条数,默认显示最后10条日志
- f: 动态输出系统日志最后10行,新日志条目写入到日志中时,继续输出它们
- p:接受优先级的名称或编号作为参数,显示该优先级别以上的日志条目
- 举例:journalct -p err
- -since和--until选项:限制特定时间段。格式”YYYY-MM-DD hh:mm:ss”,必须使用双引号,以保留选项中的空格,也可以使用yesterday,today,tomorrow
- journalctl --since today;journalctl --since "2020-12-12 12:12:00" --until "2021-1-1 12:12:00"
- journalctl --since “-1 hour” 上一小时的所有条目
- 系统日志常用字段用于搜索与特定进程或事件相关的行
- _COMM:命令的名称
- _PID:进程的PID
- _UID:运行该进程的用户的UID
- _SYSTEMD_UNIT:启动该进程的systemd单元
- 举例:journalctl _SYSTEMD_UNIT=sshd.service
- 永久存储系统日志
- 系统日志默认保存位置:/run/log/journal目录中,系统重启日志会被清除
- 配置文件 :/etc/systemd/journal.conf
- storage 参数决定系统日志存储方式(默认方式auto)
- persistent:系统重启后持久保留,日志存储位置/var/log/journal目录中
- volatile:系统重启后不保留,日志存储位置/run/log/journal目录中
- auto:由rsyslog决定是否持久保留。如果/var/log/journal目录存在,那么rsyslog会使用持久保留;否则使用易失性存储。
- systemctl restart systemd-journald.service
- 设置本地时钟和时区
- timedatectl:显示当前的时间相关系统设置(当地时间;伦敦时间;硬件时间)
- timedatectl list-timezones:显示时区
- timedatectl set-ntp:设置启动或禁用NTP同步(true;false)
-
配置和监控Chronyd服务
Chronyd服务通过与配置的NTP服务器进行同步,调整本地硬件时钟(RTC)
server和peer:在配置文件/etc/chrony.conf中配置
chronyd指向本地时间源:server classroom.example.com iburst
systemctl restart chronyd.service
-
举例:配置系统,使其成为vvv.zzz.example.com的NTP客户端
-
systemctl status chronyd.service
-
vim /etc/chrony.conf
server vvv.zzz.example.com iburst
systemctl restart chronyd.service
-
tar命令:归档和压缩文件;提取和解压缩文件
-
归档文件和目录
- 归档语法格式:tar cvf 创建的存档的文件名.tar 目标文件(源文件)
- 归档文件需要文件的读取权限;归档目录需要目录的读取和执行权限
- 创建归档时忽略没有读取权限的文件和没有读取,执行权限的目录
- 创建归档如果不指定归档后的目录位置,那么归档后的文件会创建在当前目录中
- 提取文件
- 提取归档文件和目录语法格式:tar xvf 归档文件名
- 提取归档文件不指定路径默认提取后的文件存在当前路径下
- 建议:提取归档文件到指定的空目录,避免覆盖现有任何文件
- root用户提取存档时保留文件的原始用户和组所有权;普通用户提取存档时,文件所有权将属于从存档中提权文件的用户
- tar xvf new.tar -C 目标位置 // -C指定提取后的文件存在指定位置
- 创建压缩归档
- 使用gzip归档时压缩: tar czvf new.tar.gz 目标文件(源文件)
- 使用bzip2归档时压缩: tar cjvf new.tar.bz2 目标文件(源文件)
- 使用xz归档时压缩: tar cJvf new.tar.xz 目标文件(源文件)
- du -sh new.tar // 显示大小
- tar tf new.tar.gz
- 提取压缩的存当
- tar xzvf new.tar.gz -C 目标位置 // -C 指定提取后的文件存在指定位置
- tar xjvf new.tar.bz2 - C 目标位置 // -C 指定提取后的文件存在指定位置
- tar xJvf new.tar.xz -C 目标位置 // -C 指定提取后的文件存在指定位置
- 系统间安全传输文件:scp和sftp
- scp(secure copy):OpenSSH套件,文件从远程系统复制到本地系统或者从本地系统复制到远程系统
- 语法格式:user@host(IP):/path;user@可选项,如果未指定,使用当前本地用户名
- 文件复制到远程系统举例: scp /tmp/file user@x.x.x.x:/home/user
- 从远程系统复制到本地举例:scp user@x.x.x.x:/tmp/userfile /root
- r 选项以递归方式复制整个目录:scp -r user@x.x.x.x:/var/log /root/test
- sftp:交互的方式从SSH服务器上传或下载文件
- 语法格式:user@host(IP);如果未指定用户,使用本地用户作为远程用户名进行登录
- 举例:sftp remoteuser@remotehost(或IP):回车出现提示符sftp>
- get:从远程系统下载文件
- put:将文件上载到到远程系统
- 命令举例:ls,cd,mkdir,pwd,rmdir
- 系统间安全同步文件
-
rsync:仅同步已更改的文件部分来将复制的数据最小化(即复制文件的差异部分)
-
a:启动“存档模式”,实现递归复制并开启多个选项,存档模式与表中指定的蓝色选项的作用相同
-
同步本地文件或目录
rsync -av /var/log (源) /tmp(目的) 在tmp目录下自动建名为log的目录
rsync -av /var/log/(源) /tmp (目的) 源目录加上尾斜杠,不在目标目录中创建新的子目录
-
本地文件或目录与远程计算机上的文件或目录同步
语法格式: user@host(IP):/path
rsync -av /var/log remotehost@remotehost:/tmp 本地同步到远程
rsync -av remotehost@remotehost:/var/log /tmp 远程同步到本地
-
RPM(Redhat package manager)由红帽开发的软件包安装和管理程序,可以对rpm格式的软件包进行安装,升级,卸载,效验和查询等相关操作。
-
RPM软件包文件命名格式:软件包名称-版本号-发行号.操作系统版本.硬件平台类型.rpm
举例:openssl-1.0.1e-60.el7.x86_64.rpm
- openssl软件包名称
- 1.0.1e-60 版本号和发行号(包括主版本,次版本,修订号和微调号)
- el7 表示该软件包提供给Enterprise linux7版本操作系统使用
- x86_64 表示该软件包可以运行的CPU架构( 64位和兼容32位的x86架构)
-
noarch表示软件包不限定架构;aarch64表示64位ARM架构
-
rpm 软件包安装
- mount | grep sr0
- 语法格式:rpm 选项 安装包名
- rpm -ivh zenity-3.28.1-1.el8.x86_64.rpm
- i 安装软件包;v 显示安装信息;h 以#号显示进度
- Yum(yellow dog updater modified)安装,更新,删除和获取有关软件包及其依赖项的信息;获取已执行事务的历史记录并可以使用除红帽外的第三方软件仓库
- RHEL8启用软件仓库
-
软件仓库来源:本地ISO镜像;RHEL系统需要购买订阅;CentOS系统;EPEL
-
/etc/yum.repos.d/目录中配置软件仓库文件,必须以.repo结尾
3)举例
vim /etc/yum.repos.d/dvd.repo
[app]
name=app
enable=1
gpgcheck=0
baseurl=file:///run/media/root/RHEL-8-2-0-BaseOS-x86_64/AppStream
[base]
name=base
enable=1
gpgcheck=0
baseurl=file:///run/media/root/RHEL-8-2-0-BaseOS-x86_64/BaseOS
- yum安装和删除各组软件
-
组:针对特定目的而一起安装的相关软件集合
-
RHEL8组类型:常规组(软件包的集合)和环境组(常规组的集合)
-
1个组提供的软件包或组可能为:mandatory(安装该组时必须安装);default(安装该组时通常会安装);optional(安装该组时不予安装,除非特别要求)
- 事务历史记录
- yum histroy:显示安装和删除事务的摘要
- yum history undo ID:撤销事务
第8次笔记
- 从命令行配置网络
-
NetworkManager.service监控和管理网络设置的守护进程。命令行和图形工具与NetworkManager通信,将配置文件保存在/etc/sysconfig/network-scripts目录中
-
nmcli基础命令
nmcli device status:显示所有网络设备的状态
nmcli connection show:显示所有连接的列表
nmcli connection add con-name shida type ethernet:添加一个名为shida的连接
nmcli connection up shida:激活shida连接
nmcli connection down shida:关闭shida连接
nmcli connection delete shida:删除shida连接及其配置文件
nmcli device disconnect ens160(网络接口名称):关闭网络接口
nmcli connection add con-name shida ifname ens160 type ethernet ipv4.addresses 1.1.1.1/24 ipv4.gateway 1.1.1.2
nmcli connection modify ens160 con-name abc:修改网络连的名字
nmcli connection reload:重新读取网络连接配置文件,使其生效
-
图形化桌面配置网络
-
nmtui配置网络
-
配置文件编辑网络
-
配置主机名和名称解析
-
置系统主机名
hostname xxxx:立刻生效(重新开启下终端),重启失效
配置文件/etc/hostname:当前不生效,重启生效
hostnamectl set-hostname xxxx:立刻生效(重新开启下终端),重启仍有效
- 配置名称解析
-
默认查找文件/etc/hosts;如果没有,那么使用DNS域名服务器查询
-
/etc/nsswitch.conf:存储名称切换文件
hosts: dns files:当/etc/hosts和DNS发生冲突时候,DNS优先!
hosts: files dns:当/etc/hosts和DNS发生冲突时候,hosts文件优先(默认)
- 配置本地DNS
- 配置文件位置:/etc/resolv.conf
- nameserver:查询的名称服务器IP地址,最多指定3个;修改dns服务器地址不需要重启
-
存储管理概念:Linux服务器上的文件通过文件系统层次结构进行访问。该文件系统层次结构由系统可用的存储设备所提供的文件系统组成。每个文件系统都是一个已格式化的存储设备,用于存储文件;通过将文件系统附加到文件系统层次结构中的目录,来访问文件系统
-
挂载点概念:让文件系统中的内容在文件系统层次结构中可用,必须将它挂载到一个空目录上,该目录被称为挂载点。
-
磁盘分区
-
存储设备划分为更小的区块,称为分区
-
分区用于划分硬盘,不同的部分可以通过不同的文件系统进行格式化或用于不同的用途
- df 命令
- 格式:df [选项] [文件]
- a:列出包括虚拟文件系统在内的所有文件系统
- T:显示文件系统类型
- h:以KiB,MiB或GiB显示
- H:以KB,MB或GB显示
- 手动挂载文件系统
- 语法格式:mount 挂载的文件系统 挂载点的目录
- 按块设备名称挂载举例: mount /dev/sdd1 /mnt/dd
- 按文件系统UUID挂载举例:mount UUID=“xxxxxx” /mnt/dd
- 查看文件系统UUDI命令:lsblk --fs 和 blkid
- 手动挂载文件系统缺点:系统重启后自动卸载文件系统
- 手动卸载文件系统:umunt 挂载点
- UUID概念:与文件系统关联的唯一标识符,只要文件系统没有重新创建过,它就不会变
- find:通过在文件系统层次结构中执行实时搜索查找文件,速度慢,准确率高。而且可以根据文件名以外的条件搜索文件。例如:文件权限,文件类型,文件大小等
- 调用find命令的用户必须具有查看其内容的目录的读取和执行权限
- find /home -name test 根据文件名搜索
- find /home -name‘filename’ 使用通配符根据文件名搜索
- find /home -iname test 不区分大小写根据文件名搜索
- find /home -user syb 根据指定相同文件所有者搜索
- find /home -user syb -or -user u1 根据指定不同文件所有者搜索
- find /home -not -user syb 根据文件所有者搜索
- find /home -group group1 根据文件所属组搜索
- find /home -user syb -group group1 根据文件所有者和所属组搜索
- find /home -perm 664 根据文件指定权限搜索
- /222:用户,组,其它,三个权限中至少一位匹配即可 rw-r--r--匹配
- 324:用户,组,其它,三个权限中用户至少有写入和执行,且组至少有写入,且其它至少有读取
- find / -nouser -nogroup 根据文件指定没有所属者和没有所属组搜索
- find / -uid 1000 根据uid搜索
- find /home -type d 根据文件指定类型搜索
- find /home -size 500M 根据文件指定大小搜索(等于500M)
- find /home -size +500M 根据文件指定大小搜索(大于500M)
- find /home -mmin 120 指的是120分钟这个时间点
- find /home -mmin +120 超过120分以前修改的所有文件
- find /home -mmin -120 过去120分钟之内修改的所有文件
- find高级应用:调用-exec将搜索出来的文件进行二次操作
- exec ls -l {} ; 表示将花括号里找出的文件执行ls -l命令,以转义符和分号结束
- find /home/syb -name ‘*’ -exec ls -l {} ;
- find /home/ -user syb -exec cp -af {} /root/dfiles ;
- 文件检索:grep
- 语法格式:grep 关键字 搜索位置
grep a test 检索文件test中的字符小a
grep -i a test 检索文件test中的字符a,忽略大小写
grep -n a test 列出文件test中的字符a所在行
第9次笔记
- MBR分区方案:指定在运行BIOS固件的系统上如何对磁盘进行分区
- 分区表记录在硬盘的第一个扇区即MBR,大小512字节
- MBR分为三个部分:主引导程序446字节;分区表64字节;分区结束标记2字节
- 主分区的分区信息记录在MBR中;扩展分区的分区信息记录在扩展分区中
- 三个主分区和一个扩展分区
- 扩展分区是特殊的主分区,不能存放数据,用于存放其它的分区(逻辑分区)
- 最大磁盘和分区大小为2TiB
- GPT分区方案:对于运行统一可扩展固件接口(UEFI)固件的系统,解决基于MBR分区方案中的限制。
- GPT最多可以提供128个分区;最大磁盘和分区大小为8ZiB
- GPT使用全局唯一标识符GUID识别每个磁盘和分区
- GPT提供分区表信息的冗余:主GPT位于磁盘头部;备份副本位于磁盘尾部
- 磁盘分区步骤
第一步:划分分区
lsblk或者lsblk --fs查看
fdisk命令划分分区:#fdisk /dev/sda
m:获取帮助;p:打印当前的硬盘分区表
n:新建分区;d:删除分区
l:列出可用分区标识符号;82 linux swap;83 linux;8e lvm;t:更改分区标识
w:保存分区表并退出;q:直接退出不保存
- 第二步:刷新保存分区表
partprobe /dev/sda
- 第三步:定义文件系统类型
RHEL8支持的文件系统:ext和xfs
创建ext文件系统#mkfs.ext4 /dev/sda1 或者 #mkfs -t ext4 /dev/sda1
创建xfs文件系统命令:#mkfs.xfs /dev/sda1
- 第四步:挂载到指定目录下:手动挂载和持久挂载
mount /dev/sda1 /mnt/a1
- 持久挂载文件系统:挂载后系统重启时会自动挂载文件系统
- 编辑/etc/fstab文件的6个字段
- 文件系统标识符:分区标识符号;UUID;卷标(Label)
- 挂载点:空目录
- 文件系统类型
- 挂载参数:default
- dump做全盘备份:0 | 1
- fsck顺序字段:开机第几顺位做自检:1 2 3…;0代表不自检
- 编辑/etc/fstab文件后,必须使用#mount -a 重新挂载所有编辑过的内容
- RHEL8使用PARTED分区编辑器程序管理分区,MBR方案步骤
- 向新磁盘中写入磁盘标签,磁盘标签定了所用的分区方案
parted /dev/sdb mklabel msdos,将MBR磁盘标签写入磁盘
创建MBR分区:# parted /dev/sdb
创建主分区:mkpart 回车;primary 回车
指定分区上创建的文件系统类型:xfs 回车
指定起始大小:2048s(不提供后缀默认MB)
指定结束大小:1001
退出:quit
- udevadm settle 等待系统检测新分区
- 创建文件系统:# mkfs.xfs /dev/sdb1
- 手动挂载: #mount /dev/sdb1 /mnt/b1
- 自动挂载:挂载后执行systemctl daemon-reload,systemd注册新配置
- RHEL8使用PARTED分区编辑器程序管理分区,GPT方案步骤
- 向新磁盘中写入磁盘标签,磁盘标签定义了所用的分区方案
parted /dev/sdc mklabel gpt,将GPT磁盘标签写入磁盘
创建GPT分区:# parted /dev/sdc
创建分区:mkpart 回车;user1 (起个名字)回车
指定分区创建的文件系统类型:xfs 回车
指定起始大小:2048s(不提供后缀默认MB)
指定结束大小:1001
退出:quit
- udevadm settle 等待系统检测新分区
- 创建文件系统:# mkfs.ext4 /dev/sdc1
- 手动挂载: #mount /dev/sdc1 /mnt/c1
- 自动挂载:挂载后执行systemctl daemon-reload,systemd注册新配置
- 交换空间:受linux内核内存管理子系统控制的磁盘区域。内核使用交换空间,通过保存不活动的内存页来补充系统RAM。系统RAM和交换空间组合在一起成为虚拟内存。
- RAM和交换空间建议
- 新建分区类型交换内存步骤
- 划分分区:#fdisk /dev/sdd;注意将分区标识符修改为82
- 刷新保存分区表:#partprobe /dev/sdd
- 定义文件系统类型为swap: #mkswap /dev/sdd1
- 激活新的交换空间:#swapon /dev/sdd1
- 查看交换空间容量:#free -m
- 持久激活交换空间
- 编辑/etc/fstab:/dev/sdd1 swap swap defaults 0 0
- 使用swapon -a
- RHEL8使用PARTED分区编辑器程序管理分区,GPT方案步骤
- 向新磁盘中写入磁盘标签,磁盘标签定义了所用的分区方案
parted /dev/sdd mklabel gpt,将GPT磁盘标签写入磁盘
创建GPT分区:# parted /dev/sdd
创建分区:mkpart 回车;user1 (起个名字)回车
指定分区创建的文件系统类型:linux-swap 回车
指定起始大小:2048s(不提供后缀默认MB)
指定结束大小:1001
退出:quit
- udevadm settle 等待系统检测新分区
- 创建文件系统:# mkswap /dev/sdd1
- 启用交换空间:#swapon /dev/sdd1
- 查看交换空间容量:#free -m
- 持久激活交换空间
- 编辑/etc/fstab:/dev/sdd1 swap swap defaults 0 0
- systemctl daemon-reload,systemd注册新配置
- 设置交换空间优先级
- 默认情况下系统按照顺序使用交换空间,内核先使用第一个已激活的交换空间;第一个交换空间满了后,开始使用第二个交换空间。
- 设置内存空间优先级,内核优先使用优先级最高的交换空间,数值越大越优先
举例:vim /etc/fstab
/dev/sdd1 swap swap defaults,pri=5 0 0
查看交换空间优先级命令:swapon --show
- 逻辑卷管理(LVM)概念:在线动态调整分区大小,业务不中断。如果托管逻辑卷的文件系统需要更多空间,可以将卷组中的可用空间分配给逻辑卷,并且可以调整文件系统大小。
- 物理卷(PV):在LVM系统中使用设备之前,必须将设备初始化为物理卷。LVM工具将物理卷划分为物理区块(PE, physical extent),PE默认4MB的基本单元
- 整块硬盘作为物理卷:/dev/sda pv1;/dev/sdb pv2
- 普通分区作为物理卷:/dev/sdd1 pv1;/dev/sdd2 pv2
- 一个PV只能分配给1个VG
- 卷组(VG):存储池,由一个或多个物理卷组成的集合。
- 逻辑卷(LV):根据卷组中的空闲物理区块创建,用户和操作系统所使用的“存储”设备。LV是逻辑区块(LE)集合,LE映射到物理区块(PE);默认每个LE映射到1个PE。
- 逻辑卷路径两种表示方式
- /dev/卷组名/逻辑卷名
- /dev/mapper/卷组名-逻辑卷名
- 创建逻辑卷步骤
- 划分分区:fdisk,分区标识符修改为8e
- 保存分区表:partprobe
- 创建物理卷(PV):# pvcreate /dev/sdd1 /dev/sdd2; 查看 pvs
- 创建卷组 (VG):# vgcreate rhcsa /dev/sdd1 /dev/sdd2; 查看 vgs
- 创建逻辑卷(LV):# lvcreate -n 1ceshi -L 1000M rhcsa; 查看 lvs
- 定义文件系统类型:# mkfs.xfs /dev/mapper/rhcsa-1ceshi
- 持久挂载文件系统:/dev/mapper/rhcsa-1ceshi /mnt/dd xfs defaults 0 0
- mount -a
- RHEL8使用PARTED分区编辑器程序管理分区,MBR方案
- 向新磁盘中写入磁盘标签,磁盘标签定义了所用的分区方案
parted /dev/sdd mklabel msdos,将MBR磁盘标签写入磁盘
- 创建MBR分区:# parted /dev/sdd
- 创建主分区:mkpart 回车;primary 回车
- 指定分区创建的文件系统类型:xfs回车
- 指定起始大小:2048s(不提供后缀默认MB)
- 指定结束大小:256MB
- set 1 lvm on
- udevadm settle 等待系统检测新分区
- 创建物理卷PV:# pvcreate /dev/sdd1 /dev/sdd2;
- 创建卷组 VG:# vgcreate rhce /dev/sdd1 /dev/sdd2;
- 创建逻辑卷LV:# lvcreate -n 2ceshi -L 200M rhce
- 创建文件系统: # mkfs.xfs /dev/mapper/rhce-2ceshi
- 持久挂载文件系统:/dev/mapper/rhce-2ceshi /mnt/dd xfs defaults 0 0
- systemctl daemon-reload:注册新配置
- 删除逻辑卷步骤
- 卸载文件系统:手动删除挂载, 删除/etc/fstab条目
- 删除逻辑卷: lvremove DEVICE_NAME: lvremove /dev/rhcsa/1ceshi
- 删除卷组: vgremove VG_NAME: vgremove rhcsa
- 删除物理卷: pvremove /dev/sdd1 /dev/sdd2
- 卷组扩展和缩减
- 卷组扩展:添加新的物理卷为卷组增加磁盘空间
- 卷组缩减:从卷组中删除未使用的物理卷组
- 扩展卷组和缩减卷组举例
- 添加1个新分区/dev/sdd3,设置为物理卷
新的物理卷添加到现有卷组中: # vgextend rhcsa /dev/sdd3
缩减现有卷组的大小: # vgreduce rhcsa /dev/sdd3
- 逻辑卷扩展步骤
- 首先查看卷组是否有空余空间;如果有直接分配给逻辑卷;如果没有先扩充卷组
- 扩展逻辑卷:# lvextend -L +100M /dev/rhcsa/1ceshi // +号表示增加
- 扩展文件系统
- xfs文件系统扩展: #xfs_growfs /mnt/dd
- ext文件系统扩展: #resize2fs /dev/rhcsa/1ceshi
- 交换空间扩展步骤
- 停用交换空间:swapoff /dev/
- 扩展逻辑卷
- 逻辑卷格式化为交换空间:mkswap /dev/vgname/lvname
- 激活交换空间:swapon -a /dev/vgname/lvname
- 注意事项
- 逻辑卷扩容后不要格式化
- 逻辑卷扩容后必须扩展文件系统
- ext文件系统:可扩大(不能超过分区大小);可缩小(不能小于已占用空间大小);在线放大,离线缩小(umount);扩大空间先扩大逻辑卷,后扩大文件系统;缩小空间先缩小文件系统,再缩小逻辑卷
- xfs文件系统:只能扩大,不能缩小
第10次笔记
- Stratis:以管理物理存储设备池服务的形式运行
- Stratis 文件系统没有固定大小,也不再预分配未使用的块空间。文件系统的空间就是它所驻留的池设备中仍未使用的空间量。多个文件系统可以驻留在同一磁盘设备池中,共享可用空间
- 使用Stratis存储管理解决方案管理精简配置的文件系统需要安装两个软件包
- stratis-cli:提供stratis命令,将用户请求转换为stratisd服务
- stratisd: 提供stratisd服务,管理和监控stratis的元素(如块设备,池和文件系统)
- Stratis安装和激活
- yum install stratis-cli stratisd.x86_64 -y
- systemctl enable stratisd --now
- 使用Stratis存储管理解决方案常见操作
stratis pool create pool1 /dev/sda //创建存储池pool1,成员设备为/dev/sda
stratis pool list //列出当前已经存在的存储池
stratis pool add-data pool1 /dev/sdb //向池中添加额外的块设备
stratis blockdev list //列出所有成员设备,并显示关联到哪个存储池
stratis filesystem create pool1 filesystem1 //为池创建动态灵活的文件系统filesystem1
stratis filesystem list //列出当前可用的文件系统的信息
手动挂载
mkdir /stratis-vol
mount /stratis/pool1/filesystem1 /stratis-vol
持久性挂载
UUID=… /stratis-vol xfs defaults,x-systemd.requires=stratisd.service 0 0
注意
x-systemd.requires=stratisd.service 挂载选项表示可延迟挂载文件系统,直到systemd在启动过程中启动stratisd.service服务为止;如果不加此选项会导致计算机重启时引导至emergency.target
- 销毁文件系统,销毁存储池
umount /stratis-vol
stratis filesystem destroy pool1 filesystem1
stratis filesystem list
stratis pool destroy pool1
stratis pool list
- 安装VDO软件包:yum install vdo -y
- 创建VDO卷步骤
- vdo create --name=vdo1 --device=/dev/vdd --vdoLogicalSize=30G
- vdo list
- udevadm settle // 注册新设备节点
- mkfs.xfs /dev/mapper/vdo1
- mount /dev/mapper/vdo1 /mnt/vdo1
- 持久挂载: /dev/mapper/vdo1 /mnt/vdo1 xfs defaults,x-systemd.requires=vdo.service 0 0
注意:x-systemd.requires=vdo.service 挂载选项表示可延迟挂载文件系统,直到systemd在启动过程中启动stratisd.service服务为止;如果不加此选项会导致计算机重启时引导至emergency.target
- 自动挂载网络附加存储服务autofs:根据需要自动挂载NFS共享,不再使用NFS共享时自动卸载共享
- 客户端自动挂载步骤
- 安装autofs软件包:yum install autofs -y
- 创建主映射文件,用于确定挂载点的目录,并创建自动挂载的映射文件
vim /etc/auto.master
/shares /etc/auto.misc
- 编辑映射文件:每个映射文件确定一组自动挂载的挂载点,挂载选项及挂载的源位置
vim /etc/auto.misc
work -fstype=nfs,rw server.example.com:/shares/work // 挂载点;挂载选项;源位置
- 启动并启用自动挂载器服务:systemctl enable --now autofs;systemctl restart autofs
- 间接通配符映射:当nfs服务器导出一个目录中的多个子目录时,可将自动挂载程序配置为使用单个映射条目访问这些子目录其中的任何一个
- 编辑映射文件/etc/auto.misc: **** -fstype=nfs,rw serverb:/shares/&
- 号是挂载点,&是源位置;用户尝试访问/share/work时,*将代替源位置中的&符号,并挂载
- 实例需要2台虚拟机
- NFS服务器端
mkdir /d1
yum install nfs-utils-2.3.3-31.el8.x86_64 -y (通常nfs-utils已经安装)
- 启动nfs-server服务
[root@localhost ~]# systemctl start nfs-server.service
- 配置/etc/exports文件
[root@localhost ~]# vim /etc/exports
/d1 *(rw,no_root_squash) // 允许root用户访问挂载上来的NFS卷
- 重启nfs-server服务
[root@localhost ~]# systemctl restart nfs-server
[root@localhost ~]# firewall-cmd --set-default-zone=trusted
- 客户端配置
- 安装autofs服务且开机启动
[root@localhost ~]# yum install autofs –y
[root@localhost ~]# systemctl enable autofs.service
- 配置/etc/auto.master和/etc/auto.misc
[root@localhost ~]# vim /etc/auto.master
/misc /etc/auto.misc // /misc目录会自动创建,不要人工创建,它是高层目录
[root@localhost ~]# vim /etc/auto.misc
abc -fstype=nfs,rw 192.168.45.128:/d1 // abc是客户端/misc下的次级别目录 (地址是你的服务器的不是我的,注意了!)
或者 * -fstype=nfs,rw,sync 192.168.45.128:/d1/&
- 重启autofs服务
[root@localhost ~]# systemctl restart autofs.service
- showmount -e 服务器IP地址 // 查看检测服务器的输出项目
测试:必须使用cd进入到客户的目录触发,才可以看到 cd /misc/abc 需要进入挂载的目录触发
第11次笔记
- SElinux三种模式
强制(enforcing):强制执行访问控制规则
许可(permissive):活动状态,不强制执行访问控制规则,记录违反规则警告;用于测试和故障排除
禁用(disabled):关闭selinux
- SELinux是用于确定哪个进程可以访问哪些文件,目录和端口的一组安全规则。每个文件,进程,目录和端口都具有专门的安全标签,称为SELinux上下文。
- SElinux策略使用SELinux上下文来确定某个进程能否访问文件,目录或端口。
- SElinux标签具有多种上下文:用户,角色,类型和敏感度。RHEL中启用的默认策略,根据第三个上下文(即类型上下文)来制定自己的规则。类型上下文名称通常以_t结尾
- 举例说明:MariaDB服务器具有类型上下文mysqld_t;默认情况下,在/data/mysql中找到的文件具有mysqld_db_t类型上下文。该类型上下文运行MariaDB访问这些文件,但禁止其它服务访问。如:Apache
- ps,ls,cp和mkdir都可以使用-Z选项显示或设置selinux上下文
- SELinux配置文件位置:/etc/sysconfig/selinux,修改SELinux模式后重启系统生效
- getenforce:查看当前selinux模式
- setenforce 0 | 1 0 代表permissive;1 代表enforcing,重启修改失效
- 控制SELinux文件上下文
- 新文件通常从父目录继承selinux上下文,从而确保它们具有适当的上下文
- 移动到新目录的文件保留自己原始标签;复制到新目录的文件继承了新目录标签
- 演示实验:/tmp/下建立两个文件,1个移动到/var/www/html下,1个复制到/var/www/html下
- 更改文件SELinux上下文命令包括:semanage fcontext;restorecon;chcon
- semanage fcontext:声明文件的默认标签(修改)
- restorecon:将上下文应用于文件
- chcon:更改SELinux上下文,它的设置存储在文件系统中的文件安全上下文,不会将上下文更改保存到SELinux上下文数据库;当使用restorecon命令运行时,chcon的更改无法保留;当对整个文件系统重新标记,使用chcon更改的文件的SELinux上下文将恢复
- 演示实验:创建1个/shida目录,使用chcon -t httpd_sys_content_t /shida修改目录的上下文标签,;使用restorecon -v /shida,然后查看/shida目录的最后标签
- 定义SELinux默认文件上文规则演示
- /tmp/下建立两个文件,1个移动到/var/www/html下,1个复制到/var/www/html下
- restorecon -Rv /var/www
- 新目录添加上下文演示
- mkdir /d1;touch /d1/index.html;查看它俩的上下文标签
- semanage fcontext -a -t httpd_sys_content_t ‘/d1(/.*)?’// 定义1条selinux文件上下文规则,以便将/d1目录及目录中所有文件的上下文类型设置为httpd_sys_content_t
- 扩展正则表达式(/.*)? 表示匹配在表达式前面列出的目录并递归的匹配该目录中的所有内容
- restorecon -Rv /d1 // 更改文件上下文
- 演示实验
- 安装httpd服务,开启httpd服务,设置开机自动启动
- echo hello >> /var/www/html/index.html
- 打开火狐浏览器输入http://x.x.x.x/index.html,观察现象
- 删除/var/www/html/index.html文件,其它位置做1个新文件index.html,移动到/var/www/html
- 打开火狐浏览器输入http://x.x.x.x/index.html,观察现象
- semanage fcontext -a -t httpd_sys_content_t /var/www/html/index.html
- restorecon -v /var/www/html/index.html
- 打开火狐浏览器输入http://x.x.x.x/index.html,观察现象
- SELinux布尔值:启用或者禁用SELinux策略
- getsebool -a // 查看所有selinux布尔值及状态
- setsebool httpd_enable_homedirs off(on)
- setsebool -P httpd_enable_homedirs on: -P选项重启后持久保留
- semanage boolean -l:查看布尔值是否为持久值,并提供该布尔值简短描述
- semanage boolean -l -C:列出当前状态与默认状态不同的布尔值
- SELinux端口标记:SELinux除了进行文件和进程标记,还可以通过标记网络端口来控制网络流量。例如:某个进程希望侦听端口时, SELinux检查是否允许与该进程相关联的标签绑定该端口标签。
- 列出端口标签:semanage port -l
- 管理端口标签:分配新端口标签;删除端口标签;改端口标签
- 向现有端口标签中添加端口:a 添加;t 类型;p 协议
semanage port -a -t port_label -p tcp|udp PORTNUMBER
semanage port -a -t http_port_t -p tcp 82
semanage port -l –C:查看对默认策略的本地更改
- 删除端口标签: # semanage port -d -t http_port_t -p tcp 82
- 修改端口绑定:-m 选项
- 单次计划任务at:基于atd守护进程,需用启用atd守护进程
- at now +1day | now +5min | now +2hour | now +1mon | now +1year
- 举例:at now +1day回车,然后一行一个命令(touch file1),使用crtl+d退出
- atq;at -l查看计划任务的列表
- at -c 编号 //查看计划任务的详细信息(包含环境变量信息)
- atrm 编号 //删除尚未执行的计划任务
- 周期性计划任务crond:基于crond守护进程,需用启用crond守护进程
- Crontab的配置文件位置:/etc/crontab
第一个星号:分钟(0-59)
第二个星号:小时(0-23)
第三个星号:号(天)(1-31)
第四个星号:月(1-12)
第五个星号:星期几(0-6)
user-name:周期性计划任务的执行者(如果使用命令在外部指定,这里就不需要)
0 3-5 * * * /bin/echo hh // 每天3点,4点,5点执行输出hh,合计3次
- 3-5 * * * /bin/echo hh // 每天3点到5点每分钟都执行1次输出hh,合计180次
crontab -e 编辑当前用户的作业
crontab -l 列出当前用户的计划作业
crontab -r 删除当前用户的所有作业
- 通过命令行管理配置文件
- 安装并启用tuned守护进程:yum install tuned -y;systemctl enable tuned --now
- 命令
tuned-adm list // 列出所有可用的profile
tuned-adm active // 列出当前使用的profile
tuned-adm recommend // 查看当前系统推荐的profile
tuned-adm profile PROFILE // 切换profile
tuned-adm off // 关闭调优程序
- Firewalld:动态防火墙管理器。检查进入系统的每个数据包源地址。如果该源地址被分配给特定区域,则应用该区域规则;如果源地址未分配给特定区域,则将数据包与传入网络接口所在区域相关联,并应用该区域规则;如果网络接口未定义区域,则将数据包与默认区域相关联。
- 区域允许与特定端口和协议或者预定义服务的列表匹配的流量通过防火墙。如果流量与允许的端口和协议或者服务不匹配,则会被拒绝通过。
- Firewalld区域默认配置
- Trusted区域:允许所有传入流量
- Home域:拒绝传入流量,除非与传出流量相关,或者匹配相关预定义的服务ssh,mdns,ipp-client,samba-client,dhcpv6-client
- Internal域:拒绝传入流量,除非与传出流量相关,或者匹配相关预定义的服务ssh,mdns,ipp-client,samba-client,dhcpv6-client
- Work域:拒绝传入流量,除非与传出流量相关,或者匹配相关预定义的服务ssh,ipp-client,dhcpv6-client
- Public域:拒绝传入流量,除非与传出流量相关,或者匹配相关预定义的服务ssh,dhcpv6-client;新添加的网路接口的默认区域
- External域:拒绝传入流量,除非与传出流量相关,或者匹配相关预定义的服务ssh
- Dmz域:拒绝传入流量,除非与传出流量相关,或者匹配相关预定义的服务ssh
- Block域:拒绝所有传入流量,除非域传出流量相关
- Firewalld 预定义服务:firewalld-cmd --get-service列出预定义服务
- Firewalld 预定义服务的配置位于:/usr/lib/firewalld/services目录中
- Firewall-cmd命令行配置防火墙基础命令介绍
firewall-cmd --list-all-zones:列出系统预制的防火墙
- 设置默认规则
firewall-cmd --set-default-zone=drop 互联网环境
firewall-cmd --set-default-zone=block 企业局域网环境
firewall-cmd --set-default-zone=trusted 自己试验的主机之间
- 放行服务
firewall-cmd --add-service=http
firewall-cmd --get-services 查看当前firewalld支持的服务名称
firewall-cmd --add-port=80/tcp 直接指定端口号
firewall-cmd --remove-service=http 从放行列表中删除指定服务,执行默认规则
firewall-cmd --remove-port=80/tcp 从放行列表中删除指定端口,执行默认规则
以上放行操作代表单次行为,如果需要下次启动生效,需要指定--permanent,并且通过运行firewall-cmd --reload命令激活设置
- 当前和下次启动系统都放行http服务
firewall-cmd --add-service=http
firewall-cmd --add-service=http --permanent
firewall-cmd --list-all //列出当前所在的zone,已经生效的规则
firewall-cmd --get-zones //列出当前可用的zone
firewall-cmd --list-all-zones //列出所有可用的zone已经所包含的默认规则
- 临时切换运行级别命令
systemctl isolate poweroff.target
systemctl isolate multi-user.target
systemctl isolate graphical.target
systemctl isolate reboot.target
- 设置启动默认运行级别
systemctl get-default
systemctl set-default multi-user.target
第12次笔记
- 容器技术简介
- 传统软件应用部署
依赖于运行时环境提供的库,配置文件或者服务
软件应用的运行时环境安装在物理主机
- 传统方式部署软件应用问题
依赖项会受到运行时环境的束缚
应用所需的支持软件的版本可能比操作系统提供的软件更旧或者更新
同一系统上的两个应用可能需要同一软件互不兼容的不同版本
- 解决冲突方法:虚拟化和容器
- 虚拟化特点总结
单一硬件平台运行多个操作系统
Hypervisor将硬件拆分成多个虚拟硬件,允许多个操作系统并行运行
需要一个完整的操作系统来支持应用程序运行
- 容器特点总结
直接在操作系统上运行
跨系统上的所有容器共享硬件和操作系统资源;
共享相同的操作系统内核,将容器化应用进程与系统其余进程隔离开,并使用与该内核兼容的软件
需要的硬件资源比虚拟机少,能够快速启动和停止
由于物理机底层系统是Linux,所以执行的应用只能是基于linux应用
- 从容器镜像运行容器
容器镜像作为创建容器的蓝图
容器镜像将应用与其所有依赖项一起打包:例如系统库,编程语言库,配置设置,静态数据文件等
容器镜像只读,不可更改;但是可以在它上面增加新层产生新的镜像
容器镜像构建规范:OCI定义镜像的格式,镜像支持的容器主机操作系统以及硬件架构的元数据
- 设计基于容器的结构
一个容器中运行一个完整的应用。例如:有前端,有后端,php,mysql,apache
一个容器只运行一个应用的一个组件,组件之间通过网络连;优点:轻量化,便于后期维护,简化升级
- 使用Podman管理容器
RHEL提供了一组可用于执行操作的容器工具(container-tools)
podman:直接管理容器和容器镜像
skopeo:用于检查,复制,删除和签署镜像
注意:这些工具与开放容器项目(OCI)兼容,可用于管理有OCI兼容的容器引擎(如:docker)创建的任何linux容器,它们被设计用于在单节点容器主机上的RHEL下运行容器
- 无根容器
在容器主机上,可以以root用户或者普通非特权用户运行容器。非特权用户运行的容器称为无根容器
无根容器更安全,但有限制,无根容器无法通过容器主机的特权端口(低于1024的)发布其网络服务
- 安装容器管理工具
- 选择容器镜像image和注册表registry
容器注册表:用于存储和检索容器镜像的存储库,包括共有镜像仓库和私有镜像仓库
- 红帽镜像仓库
registry.redhat.io:适用于基于官方红帽产品的容器
registry.connect.redhat.com:适用于基于第三方产品的容器
https://access.redhat.com/containers:基于web界面
- 容器命名规则
容器镜像命名格式:registry_name/user_name/image_name:tag
registry_name:存储镜像的注册表的名称,通常是注册表的完全限定域名
user_name:镜像所属的用户或组织
image_name:镜像名,在用户命名空间中必须唯一
tag:区分镜像版本,如果镜像名称中不含tag,将默认使用latest
- 运行容器
本地系统上运行容器,通过命令podman search ubi 搜索
- 从registry中下载镜像:podman pull registry.access.redhat.com/ubi8/ubi:latest
- 查看本地存储镜像:podman images
- 从镜像运行一个容器:podman run -it registry.access.redhat.com/ubi7/ubi:latest
- i 容器接受标准输入
- t 给容器分配一个终端
- d 容器在后台运行
podman run -it --name=rhel7 registry.access.redhat.com/ubi7/ubi:latest
- -name 设置容器名称,容器名称必须唯一
若不指定--name,随机生成
podman login registry.redhat.io
podman ps: 查看正在运行的容器
podman ps -a:查看所有容器
podman start -i container id :开启容器
podman exec -it container id /bin/bash:进入正在运行的容器
podman run --rm:在不与容器交互的情况运行容器且在容器中运行命令后直接删除容器
- 容器隔离
容器使用namespace提供独立的隔离环境
容器内运行的进程与主机上的所有其它进程隔离
- 配置容器注册表
- 注册表信息:cat /etc/containers/registries.conf
[registries.search]:配置搜索的注册表列表;搜索时可以补全域名
registries = ['registry.access.redhat.com', 'registry.redhat.io']
[registries.insecure]:配置搜索的不安全的注册表列表(注册表被列为不安全,则不会使用TLS加密)
registries = []
[registries.block]:配置不要搜索的注册表列表
registries = []
- podman info:显示podman配置信息,包括其配置的注册表
- podman search 搜索特定容器镜像的容器注册表
- podman search registry.redhat.io/rhel8 // 在容器注册表registry.redhat.io中搜索包含名称rhel8的所有镜像
- podman search 命令选项列表
- skopeo inspect:检查注册表中的远程容器镜像,显示它的相关信息
- podman inspect:检查本地存储的镜像信息
- 移除本地容器镜像
- 默认删除容器镜像前,先删除使用此镜像的容器
- 容器镜像更新时,发布者通过修改latest标签
- 由红帽提供的 image 受益于红帽在管理 RHEL 和其他产品的安全 漏洞和缺陷方面的长期经验。红帽安全团队加固这些 images。当发现新的漏洞时,它们将被重新构建,并通过质保流程
- podman rmi 移除本地容器的image
- 配置容器(高级容器管理)
- 使用podman run命令从容器镜像启动容器,当运行容器时,在容器内启动进程,进程可能是web服务或者数据库服务等应用,此应用可能需要通过网络与其它系统通信,所以需要进行配置。
- 提供对容器的网络访问权限,需要客户端必须连接到容器主机上的端口,通过主机端口将网络流量传递到容器中的端口,通常使用自定义设置向容器传递一些环境变量
- 将容器主机端口映射到容器
- 将容器主机上的网络端口映射到容器中的端口,容器将接受发送到主机网络端口的网络流量
- 举例:podman run -d --name=web -p 8000:8080 registry.redhat.io/rhel8/httpd-24
- p 主机端口号 :容器端口号
- podman port 容器ID或者容器名称:列出使用中指定的容器的端口映射
- 容器主机上的防火墙必须允许外部客户端连接到其映射的端口
- 传递环境变量以配置容器
- 将环境变量传递到容器,容器使用环境变量的值来配置应用
- podman run -e 将环境变量传递到容器内的进程
- 管理容器:启动容器;停止容器;重启容器;删除容器
podman ps -a 列出所有容器,包括停止的
podman stop 停止容器运行
podman rm 删除容器
podman rm -f 强制删除正在运行的容器
podman rm -a 删除主机中所有停止运行的容器
podman restart 重新启动已停止的容器
- 在容器中运行命令
- 当容器启动时,它会执行容器镜像的入口点命令
- podman exec 命令在已经运行中的容器内启动额外的进程
演示实验---端口映射
[user1@localhost ~]$podman run -d --name mydb -e MYSQL_USER=user1 -e MYSQL_PASSWORD=redhat123 -e MYSQL_DATABASE=db -p 3306:3306 rhel8/mariadb-103
[root@localhost ~]#yum install mariadb* -y
[user1@localhost ~]$mysql -u user1 -p --port=3306 --host=127.0.0.1
MariaDB [(none)]> show databases; (必须有分号)
演示实验---entry point 被压制
[user1@localhost ~]$ podman run -it --name apache registry.redhat.io/rhel8/httpd-24 /bin/bash
bash-4.4$ ps -ef
bash-4.4$ exit
[user1@localhost ~]$ podman run -it --name shida registry.redhat.io/rhel8/httpd-24
[root@localhost ~]# ssh username@x.x.x.x
[user1@localhost ~]$ podman exec -it shida /bin/bash
bash-4.4$ ps -ef
- 容器主机提供持久存储
容器中的存储是短暂的,内容在重新启动容器或者删除容器会丢失
持久存储可以使用容器主机上的目录;容器化应用将这些主机目录视为容器存储的一部分
删除容器系统不会回收容器主机目录中的内容,新容器可以挂载它来访问之前保存的数据
- 准备主机目录:
为了容器内的进程能够访问主机目录:设置目录的所有权和权限 ;设置 SELinux context
SELinux context 配置主机目录 container_file_t
- 卷挂载
创建并配置主机目录之后,将该目录挂载到容器中
命令格式: podman run --volume | -v host_dir:container_dir
使用Z 选项,podman 自动将 SELinux container_file_t context 应用到主机目录
演示实验---附加永久存储
[user1@localhost ~]$ mkdir -p webcontent/html
[user1@localhost ~]$ echo "this is a test" > webcontent/html/index.html
[user1@localhost ~]$ podman run -d --name myweb -p 8080:8080 -v ~/webcontent:/var/www:Z registry.redhat.io/rhel8/httpd-24:1-105
[user1@localhost ~]$ curl http://localhost:8080
[user1@localhost ~]$ podman stop myweb
[user1@localhost ~]$ podman rm myweb
[user1@localhost ~]$ podman run -d --name myweb -p 8080:8080 -v ~/webcontent:/var/www:Z registry.redhat.io/rhel8/httpd-24:latest
[user1@localhost ~]$ curl http://localhost:8080
- Systemd 服务管理容器
容器主机运行少量容器时,可以设置基于用户systemd user unit文件,配置它们自动启动容器
无根(rootless)容器创建 systemd user unit 文件
普通用户可以使用systemd管理用户服务,并且可以自己创建user unit文件
当用户服务类型为非根用户时,通过文本或图形控制台或使用ssh打开第一个会话时,服务将自动启动;关闭最后一次会话时,服务将停止;与系统服务不同,系统服务在系统启动时启动,系统关闭时服务停止
- 创建和管理Systemd用户服务器
定义systemd user service,创建 ~/.config/systemd/user/ 目录存储单元文件,参考systemd.unit(5)和systemd.service(5)的man 手册
使用systemctl和--user选项控制用户服务 ;必须在控制台登录或者直接通过ssh登录;sudo或su无效
示例
- systemd 系统服务和 user services 区别
- 创建用于运行容器的专用用户帐户
创建一个专用的普通用户帐户用于简化无根容器的管理,管理所有容器
对所有容器进行分组而创建的帐户必须是常规用户帐户
- 创建 systemd user unit文件
通过podman命令从现有容器自动生成 systemd user unit文件
- -name:指定现有容器名称,使用该名称构建单元文件的名称为:container-container_name.service
- -files:指示podman在当前目录中生成单元文件,如果不使用该选项,将在标准输出中显示此文件
- -new:指示podman将systemd服务配置为在服务启动时创建容器,在服务停止时删除容器;如果不使用--new选项,podman会将服务配置为启动和停止现有容器,而不会将其删除
例1:podman generate systemd --new
- 启动时,systemd执行podman run命令,创建并启动新容器
- 停止时,systemd执行podman stop命令停止容器
- 在systemd停止容器后,systemd使用podman rm命令将其移除
例2:podman generate systemd命令不带 --new 选项
- 启动时,systemd执行podman start命令以启动现有容器
- 停止时,systemd执行podman stop命令停止容器,不会删除该容器
- Systemd 启动和停止容器
- Systemd管理以root用户身份运行的容器
- Root用户运行的容器,使用systemd unit文件进行管理
- Podman generate systemd创建unit文件时,在目录/etc/systemd/system中运行
- 不需要使用--user选项;不需要以root身份运行loginctl enable-linger
- 优点:unit文件配置与普通unit单元文件完全相同的工作方式,不需要特定的普通用户
演示实验---不使用new选项生成服务
[root@localhost ~]# ssh syb@192.168.45.128
[user1@localhost ~]$ echo "hello world" > ~/webcontent/html/index.html
[user1@localhost ~]$ podman run -d --name myweb -p 8080:8080 -v ~/webcontent:/var/www:Z registry.redhat.io/rhel8/httpd-24:1-105
[user1@localhost ~]$ curl http://localhost:8080
[user1@localhost ~]$ mkdir -p ~/.config/systemd/user/
[user1@localhost user]$ podman generate systemd --name myweb --files
[user1@localhost user]$ podman stop myweb
[user1@localhost user]$ systemctl --user daemon-reload
[user1@localhost user]$ systemctl --user enable --now container-myweb.service
本文来自博客园,作者:泥烟,CSDN同名, 转载请注明原文链接:https://www.cnblogs.com/Knight02/p/redhat.html