linux系统管理员
一 认识系统服务
二认识与分析登录文件
三启动流程、模组管理与loader
四网络设定与备份策略
五软件的安装 源代码与tarball
六软件的安装rpm srpm与yum
七 xwindow 设置
八核心编译
一认识系统服务
daemon
命令规则 无论如何 这些服务的名称后面都加上一个d
centos7之前通过init来管理
服务启动 关闭与观察方式:
/etc/init.d/下 的脚本文件
语法:/etc/init.d/daemon start
/etc/init.d/daemon stop
/etc/init.d/daemon restart
/etc/init.d/daemon status
服务启动的分类:
stand alone 独立启动 该服务直接常驻在内存中 提供本机或用户的服务行为 反应比较快
super daemon 总管程序 由特殊的哦xinetd或inetd这两个纵观程序提供socket对应或port对应的管理。
服务的相依性
服务的执行等级的分类
init 根据user自定的执行等级 runlevel 来唤醒不同的服务 进入不同的操作界面 共分为7个等级 0 单人 模式 3 文本模式 5图形界面 各个执行等级通过/etc/rc.d/rc[0-6]/sxxdaemon 链接到/etc/init.d/daemon 链接文 件名称功能为S为启动该服务 xx为数字 即启动的顺序 所以在开机时 可以依序执行所有需要的服务,同时也能解 决相依服务的问题。
制定执行等级预设要启动的服务:
开机启动和开机不启动
chkconfig daemon on
chkconfig daemon off
chkconfig --list daemon 列表
执行等级切换
runlevel 3 切换到5 使用 init 5 命令
systemd使用的unit分类 与systemv 的启动服务相比较
平行处理所有服务
init 启动方式为一项一项的启动 按照顺序 但是systemd是让所有服务同时启动的
有要求就回应的on-demand启动方式
systemd全部就是仅有一只systemd服务搭配systemctl指令来处理 不需要其他的指令,systemd 常驻内存 服务依赖性的自检
b服务启动前 需要先启动a服务 systemd 会自动启动a服务来帮助b服务的成功运行
按照daemon功能分类
unit 服务单位类型分为service socket target path snapshot timer
将多个daemons 集合成为一个群组
如同systemv的init里有个runlevel systemd将许多的功能集合成为一个target项目 此项目 用在设计操作环境上 所以集合了许多的daemons 所以是执行某个target就是执行多个daemon的意思
向下兼容init
systemd 的设置文件目录
上面提到的服务类型包括 系统服务 service ; 文件监听与交换 socket ; 储存系统状态快照类型 snapshot;提供不同类型执行等级的环境target等
/usr/lib/systemd/system:每个服务主要的启动脚本设置 最主要的 相当于/etc/init.d
/run/systemd/system:执行过程中所产生的服务脚本 优先级比上面的高
/etc/systemd/system/根据主机要求 所建立的执行脚本 类似于/etc/rc.d/rc5.d/Sxx 优先级比上面的run中的文件高
systemd的unit类型分类说明
扩展名来区分服务类型
.service .target
.service 一般类型的服务 主要的系统服务 包括服务器本身需要的本机服务和网络服务 为大多数
.socket 内部程序数据交换 的插槽服务 主要是IPC inter -process-communication 监控 当有此插槽问及那传递信息需要连接某个服务时,就按照当时的状态将该用户的要求传送到对应的daemon 如果daemon尚未启动 则启动daemon后再传送用户的要求。
.target 执行环境 很多unit的集合 例如multi-user.target 执行此服务就是执行一堆其他的.service和.socket之类的服务
.mount .automount 为系统挂载服务 例如来自网络的自动挂载 NFS文件系统与文件系统相关性较高的程序管理
.path 目录服务 检测 例如打印
.timer 循环执行的服务 类似anacrontab
通过systemctl来管理服务
语法:systemctl [command] [unit]
start stop restart reload enable开机启动 disable开机不启动 status is-active检测是否正在运行 is-enable 检测开机是否启动
状态注意:
active(exited) 仅执行一次就正常结束的服务 当前并没有在系统中执行 并非一直执行 大部分自己写的bash 脚本
active(waiting) 正在执行当中 不过需要等待其他的事件才能继续处理
inactive 当前未运行
daemon的预设状态有
enabled 开机启动
disabled 开机不启动
static 不能自己启动 需要被其他的enabled的服务来唤醒 想依赖性
mask 注销 非删除 不能启动 用unmask方式改回
练习:1.依赖性
cups 服务的依赖性
cups.service cups.socket cups.path
通常.socket 负责监听(启动) cups.service和.path(未启动) 此时当有服务请求的时候 socket再唤醒service 和path 所以需要关闭cups服务的时候 需要同时关闭三个服务 不能仅仅关闭service 。
2.mask 强迫注销
上面的例子中可以同时关闭三个服务
但是也可以用mask强制注销的方法 针对.service 来是cups服务不能提供服务
3.通过systemctl观察系统上所有的服务
语法:systemctl [command] [--type=TYPE] [--all]
list-units list-unit-files 更加详细
systemctl list-units --type=service --all 显示unit的某一个类别 service的类别daemon 不管是否启动
4.通过systemctl管理不同的操作环境 target unit
graphical.target 文字加图形
multi-user.target 文字
rescue.target root无法登入 时 救援模式
emergency.target root能够登录 的紧急处理系统错误模式
shutdown.target 关机流程设置
getty.target 设置你需要几个tty之类的
命令语法systemctl [command] [unit.target]
get-default 获取当前target
set-default 设置后面的target为预设的操作环境
isolate 切换到后面接的模式
例如:systemctl set-default mluti-user.target 设定下次开机为文本模式
systemctl isolate graphical.target 切换到图形界面
systemctl + poweroff
reboot
suspend 暂停模式将文件保存在内存中 然后关闭大部分硬件
hibernate 休眠模式将状态保存到硬盘中 完毕后 将电脑关机
rescue
emergency
5.通过systemctl分析各个服务之间的依赖关系
语法:systemctl list-dependencies [unit] [--reverse]
reverse 反向追踪谁使用此unit的意思
树的形式列出想依赖关系 正向为根节点用到下面的各个服务 向下
reverse反向:为根节点被下面的叶子节点用到
6.与systemd的daemon运行过程相关的目录简介
除了/usr/lib/systemd/system/和/etc/systemd/system/目录下 还有与daemon相关的文件
/usr/lib/systemd/system/ 发行版 预设的启动脚本原始位置 尽量不修改 如果需要修改用/etc/systemd/system
/run/systemd/system/ 系统执行过程中产生的服务脚本 优先级比上面的高
/etc/systemd/system/ 根据主机要求自定义的执行脚本
/etc/sysconfig/* 几乎所有的系统服务都会初始化的选项放在此目录下 例如网络的设定目录为network- scripts
/var/lib/ 产生数据的服务都会讲数据写入/var/lib的目录中 例如数据库管理系统mariadb的数据 默认写入/var/lib/mysql中
/run/ 放置很多的daemon的缓存文件 包括lock file以及PID file等等
7. 网络服务与端口对应
/etc/services 此文件列出了每个协议服务的端口
观察网络服务的端口 netstat -tlunp
例如ssh的服务应该加上防火墙 有些则可以不用 有些不了解的监听网络服务 可以关闭
systemctl针对service类型的设定文件
1.目录简介
vsftpd.service
vsftpd.service.d/custom.conf
在/etc/systemd/system底下建立与配置文件相同名的目录 然后加上.d的扩展名 然后在该目录下建立配置文件即 可,配置文件最好文件名取名为.comf 此目录下的文件设置会追加到/usr/lib/systemd/system/vsftpd.service 里
vsftpd.service.wants/* 此目录内的文件为链接文件 设置相依赖服务的链接,意思是启动了 vsftpd.service之后,最好再加上这个目录下的建议的服务
vsftpd.service.requires/* 链接文件,设置相依性服务的链接 意思是启动vsftpd.service之前 需要先启动哪些服务
2.systemctl配置文件的项目简介
大约有一下几个项目
unit unit本身的说明 以及与其他想依赖的daemon的设定
service socket timer mount path不同的unit type就得要使用相对应的设定
install 此unit安装到哪个target里面
重复设置的项目 后面会覆盖前面
布尔值判定 可以使用1 yes true on来代表启动
0 no false off代表关闭
空白航 开头为#或者;的哪一行 代表注解
execstart 实际执行此daemon的指令或脚本 也可以使用execstartpre之前以及execstartpost之后两个设定项目来实际启动服务前,进行额外的指令行为
实例
3.举例两个vsftpd服务 两个端口一个555另一个21
先建立需要的配置文件
cd /etc/vsftpd
cp vsftpd.conf vsftpd2.conf
讲第一个监听的端口改为555
diff vsftpd.conf vsftpd2.conf 检测不同内容
开始处理启动脚本
cd /etc/systemd/system
cp /usr/lib/systemd/system/vsftpd.service vsftpd2.service
vim vsftpd2.service
更改描述的信息
description=.....
/etc/vsftpd/vsftpd2.conf
重新载入systemd的脚本配置文件
systemctl daemon-reload
systemctl list-unit-files --all | grep vsftpd
systemctl restart vsftpd.service vsftpd2.service
systemctl enable vsftpd.service vsftpd2.service
systemctl status vsftpd.service vsftpd2.service
netstat -tlnp
4.多重的重复设置方式 getty 为例
agetty 程序管控 getty
主要管理文件为getty.target 这个unit 实际产生的tty1~tty6的则是由getty@.service 所提供的
先查看/usr/lib/systemd/system/getty@.service
其中重要的信息为
execstart=-/sbin/agetty --noclear %I $TERM
其中的@原因需要看 getty@.service上面的文件 getty.target
systemctl show getty.target
after=getty@tty1.service getty@tty2.service ......
在启动完getty.target服务之后会要求持续启动getty1.target getty2.target getty3.target...
所以可以判断 systemd的运行方式
a 先看/usr/lib/systemd/system/ /etc/systemd/system/ 下面有没有getty@tty1.service的设置 ,如有就 执行,如过没有就执行下一步
b 找getty@.service 的设置 如过有就将@后面的资料带入成%I的变量 进入getty@.service 执行。
原始文件:执行服务名@.service
执行文件:执行服务名@范例名称.service
5.更改tty数量
vim /etc/systemd/logind.conf
=4
ReserveVT=0
之后重启 systemctl stop getty@tty5.service getty@tty6.service
systemctl restart systemd-logind.service
6.重新打开一个全新的终端
getty@tty8.service
7.新增vsftpd到新的端口2121
cat /usr/lib/systemd/system/vsftpd@.service
%i.conf %i或者%I 代表@后面接的范例文件的名称
a 建立vsftpd3.conf文件 通过此文件来启动新服务
cd /etc/vsftpd
cp vsftpd.conf vsftpd3.conf
vim vsftpd3.conf
listen_port=2121
b 暂时启动这个服务 不要永久启动
vsftpd3.service
vsftpd3.service
netstat -tlunp
所以vsftpd@vsftpd3.service 代表要使用的配置文件在/etc/vsftpd/vsftpd3.conf 的意思
*****注意在增加的端口小于1024的时候 需要root的权限 如过端口大于1024则 不需要root的权限 但是 同样危险
8.自己的服务自己作 模拟一个可以备份自己系统的服务
a 服务文件放在/backups 文件夹下
vim /backups/backup.sh
#!/bin/bash
source="/etc /home /root /var/lib /var/spool/{cron,at,mail} "
target="/backups/backup-system-$(date +%Y-%m-%d).tar.gz"
[! -d /backups ] && mkdir /backups
tar -zcvf ${target} ${source} &> /backups/backup.log
chmod a+x /backups/backup.sh
ll /backups/backup.sh
b 接下来 需要设计一只名称为backup.service的启动脚本
vim /etc/systemd/system/backup.service
[unit]
description=backup my server
requires=atd.service
[service]
type=simple
execstart=/bin/bash -c "echo /backups/backup.sh | at now"
[install]
wantedby=multi-user.target 因为需要at这个命令 所以 atd.service 是必须启动的服务
测试命令
systemctl daemon-reload
systemctl start backup.service
systemctl status backup.service
再出现的结果显示中 出现的inactive 原因是执行完成就完毕了 不会继续存在内存当中
systemctl针对timer的配置
原来的at和crond这个服务
systemd.timer 的优点
所有systemd服务产生的信息都会被记录 log
各个timer的工作可以跟systemd的服务相结合
各个timer的工作可以跟control group (cgroup 用来取代/etc/secure/limit.conf 结合)来限制该工作的资源利用
缺点timer没有email的功能 但是可以自己写脚本 时间单位可以精确到ms
任务需求
必要条件
系统的timer.target 一定要启动
需要sname.service的服务存在 sname是自定义的名称
需要sname.timer的时间启动服务存在
sname.timer的设定值
你可以到/etc/systemd/system底下去建立这个*.timer文件
onactivesec timer.target启动多久之后才执行此unit
onbootsec 开机完成多久之后才执行
onstartupsec systemd第一次启动之后多久才执行
onunitactivesec 此timer设定文件所管理的那个unit服务在最后一次启动后,隔多久后再执行一次的意思
onunitinactivesec 此timer设定文件所管理的那个unit服务在最后一次停止后,隔多久后再执行一次的意思
oncalendar 用实际时间启动服务
unit 名称
persistent 使用oncalendar设定时,指定该功能不需要持续进行
如何使用oncalendar的时间
如果想要从crontab转成这个timer功能 需要了解timer的时间格式
语法:英文周名 YYYY-MM-DD HH:MM:SS
范例:THU 2015-08-13 13:40:00
英语口语:now today tomorrow hourly daily weekly monthly +3h10m 2015-08-16
实例:
需求:开机后2小时开始执行一次这个backup.service
自从第一次执行后,未来我每两天要执行一次 backup.service
vim /etc/systemd/system/backup.timer
[unit]
description=backup my server timer
[timer]
onbootsec=2hrs
onunitactivesec=2days
[install]
wantedby=multi-user.target
systemctl daemon-reload
systemctl enable backup.timer
systemctl restart backup.timer
systemctl list-unit-files | grep backup
systemctl show timers.target
systemctl show backup.service
systemctl show backup.timer
一个固定日期运行的案例
需求 星期天凌晨2点运行这个备份程序一遍 名称为backup2.timer
vim /etc/systemd/system/backup2.timer
[unit]
description=backup my server timer2
[timer]
oncalendar=sun *-*-* 02:00:00
persistent=true
unit=backup.service
[install ]
wantedby=multi-user.target
systemctl daemon-reload
systemctl enable backup2.timer
systemctl start backup2.timer
systemctl show bakcup2.timer
出现的执行时间nextelapseusecrealtime是与unix标准时间的比较值 1970-01-01 00:00:00
centos 7.x预设启动的服务简易说明
常见的服务 daemon
abrtd 登录出错时的机制 根据此服务进行错误克服
accounts-daemon 可关闭 使用accountsservice计划 账号管理, 可关闭
alsa-x可关闭 音效 不开图形界面 可关闭
atd 单一的例行性工作排程 at服务
auditd selinux相关
avahi-daemon 可关闭 用户端服务通过zeroconf自动的分析与管理网络 常用在笔记本电脑上
brandbot rhel-* 大多数用于开机过程中需要的各种侦测环境的脚本 同时也提供界面的启动与关闭
chronyd
ntpd
ntpdate
cpupower cpu运行情况
crond 定时服务 与at类似 周期性
cups 可关闭 打印机服务
dbus d-bus的方式在不同的应用程序之间传送信息 应用程序之间的信息传递,每个使用者登录时提供的信息 资料等
dm-event multipathd 系统监控对应表 device mapper的主要服务 不能关
dmraid-activation mdmonitor 用来启动软raid的重要服务 尽量不关闭
dracut-shutdown 处理initramfs的相关行为 与开机流程相关性较高
ebtables 系统或网络服务类似iptables的防火墙规则 设定如果没有使用虚拟化或者使用了firewalld 此服务可禁用
emergency
rescue
firewalld制好防火墙系统
gdm gnome的登入管理员 就是图形界面上一个很重要的登录管理服务
getty@ 本机系统产生文字界面 tty登入的服务
hyper*
ksm*
libvirt*
vmtoolsd
irqbalance 如果硬件为多核心的硬件 则需要启动 可以自动分配系统终端IRQ 之类的硬件资源
iscsi 网络磁盘服务 如果没有挂载 则可以关闭
kdump 可关闭 主要用在 linux核心出错的时候 ,用来记录内存数据的服务 可以关闭
lvm2-* 跟lvm相关性较高的许多服务 不可关闭
microcode intel的cpu指令集 如果没有下载intel的相关指令文件 则可以不启动
modemmanager
network
networkmanager* 数据,网络设定等服务 建议使用networkmanager搭配nmcli指令来处理网络设置
quotaon 启动quota要用到的服务
rc-local /etc/rc.d/rc.local 需要具有x的执行权限
rsyslog
smartd 自动检测硬盘状态 报告管理员
sysstat sar的指令记录 某时间点 系统的资源使用情况 包括cpu io输入出等 当此服务启动后 这些记录的数 据会写入log中
sysstemd-* 系统运行过程中需要的服务
plymount*
upower
上面的服务为centos7中默认启动的
注意管理员应该使用man systemd.unit man systemd.service man systemd.timer查询/etc/systemd/system/目录下设定文件的语法 然后使用systemctl daemon-reload载入后 再自行编写服务于管理服务