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

 接下来   需要设计一只名称为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载入后  再自行编写服务于管理服务