1、Systemdctl服务管理
2、yum管理
课程前置内容导入
1、思考Linux开机的过程是怎么样的?!

一、Systemd简介
1、查看Systemd语法:man systemd
2、以树状图显示进程PID:pstree -p
3、systemd 进程简介
-
由 linux 内核加载运行/usr/lib/systemd/systemd 程序
-
是系统中的第一个进程,所有进程的父进程
-
PID(进程标记)号永远为 1
总结:systemd是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序。
二、Systemd与Unit的关系
1、Systemd 可以管理所有系统资源,将每个系统资源称为一个 Unit(元)。Unit 是 Systemd 管理系统资源的基本单位。根据不同的Unit类型,Systemd可以管理系统中不同的资源和服务。systemd提供的Unit类型有下面的这12种。
| 单元类型 | 文件后缀 | 描述 |
|---|---|---|
| Service | .service | 定义了系统服务,包括启动,重启,关闭服务的相关指令 |
| Target | .target | 定义了一组单元的集合,通常作为单元启动的同步点,某个target启动成功就意味着一组相关的service启动成功 |
| Automount | .automount | 定义了系统引导时会进行自动挂载的挂载点 |
| Device | .device | 定义了由systemd管理的硬件设备 |
| Mount | .mount | 定义了由systemd管理的文件系统挂载点 |
| Path | .path | 定义了一条用于基于路径激活服务的文件路径。例如,可以基于某一条文件路径的状态(是否存在等)来启动某个服务。 |
| Scope | .scope | 定义了来自systemd总线接口的信息,通常用来管理额外的系统进程 |
| Slice | .slice | 定义了资源限额,基于Linux cgroup nodes实现。 |
| Snapshot | .snapshot | 定义了一次当前的systemd状态,通常在对systemd做修改后回滚使用 |
| Socket | .socket | 定义了进程间通信使用的socket,往往socket会与service相关联 |
| Swap | .swap | 定义了系统中的交换空间 |
| Timer | .timer | 定义了一个定时激活另一个单元的定时器 |
2、Unit的命名:是由一个与配置文件同名的名字和类型组成的。例如httpd.service就是一个Unit。
3、Unit的配置文件:每一个 Unit 都有一个配置文件,作用是告诉 Systemd 怎么启动这个 Unit 。
Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,真正的配置文件存放在/usr**/lib/systemd/system/目录下**,如果是运行过程中产生的配置文件放在/run/systemd/system/。

三、Unit的组成-以ssh服务的Unit为例
1、文件的路径:/usr/lib/systemd/system/sshd.service
2、文件的组成:Unit(用于记录Unit文件的通用信息)、Service(用于记录Service信息)、Install(用于记录安装信息)
3、文件的内容:

补充:
Before、After表示以这个服务为准的启动顺序,如果在服务中定义了Before=aaa.service,After=bbb.service,则启动顺序为aaa服务>本服务>bbb服务
WantedBy表示服务何种运行级别下启动。例如WantedBy=multi-user.target多用户环境。
四、Systemd管理服务-Systemctl
systemd 的体系架构
1.最底层:systemd 内核层面依赖 cgroup、autofs、kdbus
2.第二层:systemd libraries 是 systemd 依赖库
3.第三层:systemd Core 是 systemd 自己的库
4.第四层:systemd daemons 以及 targets 是自带的一些基本 unit、target,类似于 sysvinit 中自带的脚本
5.最顶层:就是和 systemd 交互的一些工具,例如:systemctl、journal、loginctl等。

systemctl工具语法:systemctl [选项] 命令 [名称]
1、Unit列表查看
查看正在运行的Unit:systemctl list-units
查看所有的Unit:systemctl list-units -all
2、显示当前Unit状态
查看sshd服务的状态(运行):systemctl status sshd.service
查看服务的状态(未启动):systemctl status systemd-readahead-done.timer


3、Unit生命周期管理
停止指定的服务sshd:systemctl stop sshd.service
启动指定的服务sshd:systemctl start sshd.service
重启指定的服务sshd:systemctl restart sshd.service
4、设置Unit开机自启动
设置sshd服务开机不自启动:systemctl disable sshd.service
设置sshd服务开机自启动:systemctl enable sshd.service
5、屏蔽启动Unit
屏蔽ntpdate服务:systemctl mask ntpdate.service
取消屏蔽ntpdate服务:systemctl unmask ntpdate.service
6、其他指令
关闭系统:systemctl poweroff
重启系统:systemctl reboot
系统进入休眠:systemctl hibernate
五、Systemd其他管理命令
1、journald 是 systemd 的系统日志。journalctl是一个日志分析工具
查看指定服务sshd的日志:journalctl -u sshd.service
查看指定时间段的日志:journalctl --since yesterday
2、loginctl是systemd 的登录管理器,用来管理系统已登录用户和session的信息。
显示当前登录的用户列表:loginctl
3、hostnamectl用于查看和修改系统的主机名和主机信息。
显示当前主机名称和版本信息:hostnamectl status
修改主机的名字:hostnamectl set-hostname ah1 --> bash
六、课堂实操练习创建创建服务
可以通过命令:man 5 systemd.service获得unit格式
1、创建名为学号-safe.service
2、将***学号-safe**.service移动至/usr/lib/systemd/system,方便systemd启动这个unit*
*3**、**创建学号.sh脚本*
*4、设置****学号-safe.service**开机自启动***
**5、查看**/**tmp**/date的内容******
七、Linux软件管理(rpm包安装、yum安装、源码安装)
1、rpm包管理(RPM是Red-Hat Package Manager的缩写,即RPM软件包管理器)
(1)rpm包管理
(2)RPM软件包查询
| 命令 | 功能 |
|---|---|
| rpm -**qa** | 查询**Linux**系统中的所有软件包 |
| rpm -**q 包名称** | 查询指定名称的软件包是否安装 |
| rpm -qi 包名称 | 查询指定名称软件包的详细信息 |
| rpm -ql 包名称 | 查询指定名称软件包中所包括的文件列表 |
| rpm -qf 文件名称 | 查询指定文件所属的软件包 |
| rpm -**qpi 包文件名** | 查询指定**RPM包文件的详细信息** |
| rpm -**qpl 包文件名** | 查询指定**RPM包文件中包含的文件列表** |
-
rpm -qa :查看所有安装的rpm包
-
rpm -q setup:查看setup软件包是否安装
-
rpm -qa |grep "^gcc" :查看以gcc来头的软件是否安装
-
rpm -qi gcc :查看gcc软件包的详细信息
-
rpm -ql gcc :查看gcc所包含的文件列表
-
rpm -qf /bin/ls :查看ls所有属的软件包(举反例:rpm -qf test)
-
rpm -qpi net-tools-2.0-0.25.20131004git.el7.x86_64.rpm : 查看net-tool工具包的详细信息
附注:net-tools-2.0-0.25.20131004git.el7.x86_64.rpm快速下载地址:
http://mirror.centos.org/centos/7/os/x86_64/Packages/net-tools-2.0-0.25.20131004git.el7.x86_64.rpm
(3)光盘挂载
- 确保虚拟机【已使用】ISO镜像且设备状态处理【已连接】的状态;

-
mount /dev/cdrom /media/ :将光盘进行挂载
-
umount /dev/sr0 :将光盘进行卸载
(4)RPM软件包安装
-
rpm -qa | grep ftp :查询是否安装有ftp
-
rpm -ivh /media/Packages/ftp-0.17-67.el7.x86_64.rpm : 使用rpm命令安装ftp软件包

-
rpm -qa | grep bind-chroot:查看是否安装bind-chroot(在域名服务器中使用)
-
rpm -ivh /media/Packages/bind-chroot-9.11.4-26.P2.el7.x86_64.rpm:使用rpm命令安装bind-chroot

(5)RPM软件包卸载
-
rpm -qa | grep ftp:先查询ftp安装情况
-
rpm -e ftp : 卸载ftp
-
rpm -qa | grep ftp:查看ftp卸载的情况

2、yum管理
什么是yum?

(1)yum源配置
-
yum源配置:详细参见教程:https://www.jianshu.com/p/792e75581614
-
epel源配置:略
-
本地yum源配置:略
(2)yum管理
-
yum –y install zip(-y可以自动回答yes):安装zip
-
yum remove zip :卸载zip软件包
-
yum list installed | grep "vim":在已安装的软件包中查找vim相关软件包
-
yum info zip :查看zip软件包的信息
3、源码安装-实操安装Nginx
实验要求一、安装环境,准备wget命令获取Nginx最新版本的安装包。
1、Nginx下载网址:https://nginx.org/en/download.html
2、获取Linux版本下载链接:https://nginx.org/download/nginx-1.24.0.tar.gz

3、在RHEL中下载Nginx:wget https://nginx.org/download/nginx-1.24.0.tar.gz

4、安装编译工具和函数库文件:yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel
实验二、源码包安装部署Nginx。
1、解压源码压缩包:tar -zxvf nginx-1.24.0.tar.gz
tar:解压
z:表示tar包是被gzip压缩过的,所以解压时需要用gunzip解压(以压缩的方式进行操作)
x:从tar包中把文件提取出来(代表解开压缩包)
v:显示详细信息(展现解压的过程)
f:xxx.tar.gz,指定被处理的文件时xxx.tar.gz(指定文件进行操作)

2、配置与检测:./configure --prefix=/usr/local/nginx-1.24.0 --with-http_ssl_module --with-http_stub_status_module
#配置configure --prefix 代表安装的路径,--with-http_ssl_module 安装ssl,--with-http_stub_status_module查看nginx的客户端状态
#配置成功后出现如下的结果以及目录中多出现一个Makefile文件


如果安装的过程遇到报错:./configure: error: C compiler cc is not found
需要执行命令解决:yum -y install gcc gcc-c++ autoconf automake make
3、编译安装nginx:make & make install

4、进入安装目录:cd /usr/local/nginx-1.24.0/sbin/

5、配置防火墙策略
开放80端口:firewall-cmd --permanent --add-port=80/tcp
防火墙重新加载:firewall-cmd --reload
查询端口是否开放:firewall-cmd --query-port=80/tcp

6、启动Nginx:./nginx

如启动的端口被占用,可以通过命令:ps -A | grep nginx查看被占用的端口,再将对应的端口杀死kill -9 pid1
7、查看IP地址并使用浏览器访问


实验三、将Nginx服务添加到Systemd中,使该服务可以被Systemctl管理。
1、在/lib/systemd/system目录下创建名为nginx.service的Unit文件:vim /lib/systemd/system/nginx.service;
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx-1.24.0/sbin/nginx
ExecReload=/usr/local/nginx-1.24.0/sbin/nginx -s reload
ExecStop=/usr/local/nginx-1.24.0/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
2、测试nginx服务是否可以正常启动
先杀死nginx进程:pkill nginx
再加载新的unit 配置文件:systemctl daemon-reload
最后启动nginx:systemctl start nginx

3、使用Systemd命令对Nginx服务进行管理
查看Nginx服务的状态:systemctl status nginx
设置Nginx服务开机自启动:systemctl enable nginx





Comments NOTHING