Linux——服务和进程管理
by XiaoGuaauthor:XiaoGua
os:ubuntu6.04
sudo su:/root
一、初始化程序
Linux的内核是由GRUB加载的。而内核会接下来加载Linux的初始化程序(init)。
由初始化程序完成后面的启动程序。
初始化程序是Linux程序启动时的第一个进程,该进程的进程号ID为1,是所有其他的进程的祖先。
在初始化程序的发展过程中,出现了不同的分支,其中主要有System V和BSD这两种类型。
一)、System V利用sbin/init程序进行初始化操作,pstree看出init在所有进程中的地位
二)、目前,绝大部分的Linux发行版都采用了systemd作为初始化程序
by XiaoGua
1、systemd的系统架构
by XiaoGua
在ubuntu6.04中,进程列表
by XiaoGua
2、systemd基本配置文件
systemd的基本配置文件都位于/etc/systemd中,如果配置系统级的服务,修改system.conf
如果配置用户级别的服务,修改user.conf
by XiaoGua
3、systemd单元
systemd可以管理所有的系统资源。不同的资源称为单元。
systemd通过单元来组织和管理任务,每个单元都有相应的配置文件和类型。
1)、systemd的单元并不是独立的,它们之间的可以存在着相互依赖。systemd的依赖就是.wants为扩展名的目录来表示。
2)、.wants为扩展名的目录位于两个地方。分别为/etc/systemd/system和/lib/systemd/system,这两个目录的功能有区别
3)、/lib/systemd/system目录中的.wants是由系统维护的,用户不可以修改
/etc/systemd/system是由用户维护的,用户可以将自己的依赖配置放在这个目录下
by XiaoGua
4、列出单元
systemctl可以认为是systemd的大管家
列出当前运行的系统
systemctl list-units
by XiaoGua
输入:q离开
-a :列出当前系统中全部的单元
systemctl -a list_units
by XiaoGua
--state:指定列出的单元的LOAD,SUB以及ACTIVE状态,多状态间逗号相隔。
by XiaoGua
--type:指定类型
by XiaoGua XiaoGua
5、查看单元状态
systemctl status
by XiaoGua
查看某个服务的状态
systemctl status firewalld.service
by XiaoGua
已知服务的进程号id
systemctl status
by XiaoGua
判断服务是否运行
is-active
by XiaoGua
是否启动失败
is-failed
by XiaoGua
是否开机启用
is-enabled
iby XiaoGua
判断某个单元是否启用,通常是指对应得.wants目录是否建立符号链接
6、单元依赖
在systemd中,各个单元之间可能会存在着依赖关系。
如果A单元依赖着单元B,那么在启动A单元的同时,需要启动B。
当某个单元启动失败,就是依赖单元出现问题。
systemctl list-dependencies sshd
by XiaoGua
绿色表示正在运行,白色表示不在运行
list-dependencies不会展开所有的分支,用户查看更加详细的要加--all
by XiaoGua
7、单元配置文件
systemd中,每个单元都有一个配置文件,告诉systemd怎么开启这个服务。默认情况下,systemd会从/etc/systemd/system,和/lib/systemd/system目录中读取单元配置文件
/etc/的优先级高于/lib
用户自定义的单元配置文件需要在/etc/systemd/system这个目录中建立符号链接,不能直接添加到/lib/systemd/system
实际中,/etc/systemd/system目录中的绝大部分是指向/lib/systemd/system中对应的文件符号链接,而真实的单元配置文件位于/lib/systemd/system
1)、查看系统的单元文件
systemctl list-unit-files
by XiaoGua
2)、systemd单元配置文件的状态
enabled:已经建立启动符号链接。已启用
disabled:没有建立符号链接,已禁用
static:该配置文件没有install部分,无法自己执行,只能作为其他配置文件的依赖。
masked:该配置文件被禁止建立启动符号链接。完全被禁用
generated:该单元由其他的API动态创建
bad:无效的文件
indirect:该单元文件本身没有被启用。但是他的install部分配置了also选项
--type:通过单元类型进行筛选
by XiaoGua
以m开头,.service结尾的文件
systemctl list-unit-files m*.service
by XiaoGua
systemctl cat sshd.service
by XiaoGua
8、systemd单元管理
systemd 【管理命令】 服务名
start:启动服务
stop:停止服务
restart:重启服务
reload:重新加载服务
status:查看服务状态
enable : 配置开机自启动
disable:禁止开机自启动
daemon-reload:重新加载配置文件,单元被修改后,重新加载
show:显示服务属性
set-property:设置服务属性
开启后的状态
by XiaoGua
关闭后的状态
by XiaoGua
cat命令查看其他单元文件的配置信息
by XiaoGua
值为:18446744073709551615表示没有任何限制
by XiaoGua
9、常用systemd的命令
1)、hostnamectl命令:
查看或修改命令、
by XiaoGua
修改当前主机名
hostnamectl set-hostname ubuntu-server
by XiaoGua
2)、localectl命令
查看或者修改当前系统的区域和键盘布局
by XiaoGua
LANG为当前系统所采用的默认的区域,当前系统的语言是en_US,编码是UTF-8
修改为zh_CN.UTF-8
by XiaoGua
3)、timedatectl命令
查看或者修改当前系统的时区设置
by XiaoGua
修改为Asia/Chongqing(CST,+0800)
by XiaoGua
3)、systemd-analyze命令
分析系统启动时的性能
systemd-analyze time 输出系统启动时间
by XiaoGua
systemd-analyze blame 按照花费时间从长到短的顺序列出当前系统的正在运行的单元
by XiaoGua
systemd-analyze plot > system.png 输出一个可缩放的SVG矢量图。
4)、loginctl命令
查看当前登录的用户
loginctl
loginctl list-users
by XiaoGua
进一步了解某个用户的详细信息,show-user
loginctl show-user xiaogua
by XiaoGua
loginctl命令列出的仅仅是当前已登录的用户,而非系统的用户
三)、目标
systemd的基本功能是单元。启动计算机的时候,就是需要启动大量的单元。
目标就是一个单元组。目标中包含大量的功能相关的单元。启动目标时,systemd就会启动目标中的所有的单元。
目标与运行级别相似。但是目标更高级。多个目标是可以同时启动的
目标也是一种类型的systemd单元
runlevel0.target : 关闭系统 运行级别是0
runlevel1.target:单用户模式。运行级别是1
runleve2.target:用户自定义运行级别,通常识别为级别3
runlevel3.target:多用户,无图形界面。用户可以通过终端或者网络登录
runlevel4.target:多用户,无图像界面。用户可以通过终端或者网络登录
runlevelr5.target:多用户,图形界面。继承级别3的服务,并启动图形界面服务
runlevlel6.target:重新启动
systemctl list-units --type=target 目标也是一类特殊的单元
by XiaoGua
查看某个目标包含的目标
systemctl list-dependencies multi-user.target
by XiaoGua
systemctl cat multi-user.target
by XiaoGua
查看系统中已经启动的目标
systemctl list-units --state=active --type=target
by XiaoGua
切换目标
systemctl isolate rescue.target
默认目标
by XiaoGua
ls -l /lib/systemd/system/default.target 查看符号链接
by XiaoGua
修改默认的目标
systemctl systemctl set-default multi-user.target