马哥教育N36第八周作业

1、systemd查看日志文件有隐藏该如何处理?

systemd 日志的配置文件是 /etc/systemd/journald.conf ,查看日志可以用下面这些方法:

  • systemctl status xxx 这个命令可以查看服务的部分日志
  • journalctl 命令专门用来查看systemd内核日志和应用日志的工具,journalctl -o verbose 查看所有的字段。
  journalctl 语法如下:
  journalctl [OPTIONS...] [MATCHES...]
  常用选项:
  -a : 查看所有的日志信息,包含不可输出字符
  -k : 查看当此启动的内核日志
  -b : 查看启动日志
  --list-boots : 查看引导日志
  --since : 查看指定时间之前的日志条目,格式是这样:--since="2017-10-30 18:10:30" 、-–since yesterday。可以使用“yesterday”、“today”、“tomorrow”或者“now”等表达时间。
  --util : 查看指定时间之后的日志条目
  -u : 按照 unit 名称过滤日志
  -F :列出指定字段的所有值,字段包括 _UID,_GID,_PID
  -p : 显示特定优先级的日志信息,优先级由高到低分别为 0: emerg    1: alert    2: crit    3: err    4: warning    5: notice    6: info    7: debug
  -o : 修改默认的输出模式,比如json,verbose。常用于分析日志的工具使用。
  -f : 追踪日志
  -n :指定日志显示的条数
  --disk-usage : 查看日志的磁盘占用空间
    
  Examples:
  * journalctl -p err -b                                         <==只显示本次启动的错误等级或更高等级的信息
  * journalctl -F _GID                                           <==显示全部journal已经存储至群组ID字段内的值
  * journalctl _UID=33 --since today                             <==只显示uid是33并且在今天之前的日志
  * journalctl _PID=8088                                         <==只显示进程8088的日志
  * journalctl --since "2017-01-10" --until "2017-01-11 03:00"   <==查看某一时间段的日志
  * journalctl --since "20 min ago"                              <==查看20分钟之前的日志
  * journalctl -u httpd.service                                  <==过滤显示httpd的日志信息
  * journalctl -u httpd -o  json-pretty                          <==显示信息为json格式
  * journalctl --disk-usage                                      <==查看当前日志占用磁盘的空间的总大小
  * journalctl --vacuum-time=1years                              <==指定日志文件保存多久
  * journalctl --vacuum-size=1G                                  <==指定日志文件最大空间
2、自己动手写一个systemd的配置文件, 让nginx服务可以开机启动

在 /etc/systemd/system 目录中创建 nginx.service

[Unit]
Description=nginx web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target

systemd服务文件分为三个部分,详细信息查看 systemctl.unit 的帮助信息

  • unit
    description 描述信息
    after 表示当前服务应该在制定的unit后启动,它定义了服务的启动顺序
    wants 当前服务依赖到其他的服务

  • service
    type 定义了当前服务的启动类型
    execstart 指明了当前服务要运行的命令或脚本的绝对路径
    execstop 指明停止服务要执行的命令或脚本
    restart 设置为1时,服务意外终止会自动再启动

  • install
    wantedby 被哪些服务所依赖

3、SIGHUP、SIGQUIT、SIGTERM、SIGINTERRUPT的区别

SIGHUP:让进程重新读取配置文件
SIGQUIT:让进程退出执行
SIGTERM:终止正在运行的进程
SIGINTERRUPT:信号处理函数

4、用awk查看tcp连接处于TIMEOUT的连接个数
# 方法一
ss -an |awk '/^tcp/{print $2}' |sort |uniq -c |sort -nr
# 方法二
netstat -an | awk '/^tcp/ {++state[$NF]} END {for(name in state) print name,"\t",state[name]}'
5、详细说明 https 的原理

HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。
一个HTTPS请求实际上包含了两次HTTP传输,可分以下几步步:

  • 客户端向服务器的443端口发送连接请求
  • 服务器收到请求,将自己的公钥发送给客户端
  • 客户端收到服务器发来公钥,进行验证。通过验证后客户端生成一个随机密码,用服务器的公钥加密客户端密码。第一次 HTTP 传输完成。
  • 客户端发起第二次 HTTP 传输请求,将加密后客户端密码传送到服务器
  • 服务器使用自己的私钥解密客户端密码,然后使用客户端密码加密数据再传送给客户端
  • 客户端收到加密后的数据,使用密码解密得到了服务器发来的数据,这样第二次 HTTP 传输完成。
6、详细叙述 centos7 的开机流程
  • UEFi或BIOS初始化,运行POST开机自检
  • 选择启动设备
  • 引导装载程序, centos7是grub2
  • 加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
  • 加载initramfs驱动模块
  • 加载内核选项
  • 内核初始化,centos7使用systemd代替init
  • 执行initrd.target所有单元,包括挂载/etc/fstab
  • 从initramfs根文件系统切换到磁盘根目录
  • systemd执行default.target配置,配置文件/etc/systemd/system/default.target,其实这一个链接到graphical.target的软连接。这阶段层层依赖到 graphical.target–>multi-user.target–>basic.target–>sysinit.target–>local-fs.target 必须在依赖启动后才能启动
  • local-fs.target 所有的用户服务都不启动,这阶段只处理核心底层的服务。扮演的是 /etc/fstab 和 /etc/inittab 这样的角色。
  • sysinit.target 这阶段启动重要的系统服务,像文件系统挂载,swap,设备,内核补充选项
  • basic.target 这阶段启动普通服务,特别是图形管理服务
  • multi-user.target 这一阶段启动非root用户进程,防火墙相关的服务也是这时启动的。
  • systemd启动multi-user.target下的本机与服务器服务
  • systemd执行multi-user.target下的/etc/rc.d/rc.local
  • Systemd执行multi-user.target下的getty.target及登录服务
  • systemd执行graphical需要的服务
# default.target 本质是graphical.target 的软连接
ll /usr/lib/systemd/system/default.target
lrwxrwxrwx. 1 root root 16 Feb  7 17:23 /usr/lib/systemd/system/default.target -> graphical.target
# graphical.target 配置文件
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes
# multi-user.target
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
# basic.target
[Unit]
Description=Basic System
Documentation=man:systemd.special(7)

Requires=sysinit.target
After=sysinit.target
Wants=sockets.target timers.target paths.target slices.target
After=sockets.target paths.target slices.target
# sysinit.target
[Unit]
Description=System Initialization
Documentation=man:systemd.special(7)
Conflicts=emergency.service emergency.target
Wants=local-fs.target swap.target
After=local-fs.target swap.target emergency.service emergency.target
# local-fs.target
[Unit]
Description=Local File Systems
Documentation=man:systemd.special(7)
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs-pre.target
OnFailure=emergency.target
OnFailureJobMode=replace-irreversibly
7、用shell脚本实现自动登录机器
#!/bin/expect
set ip [lindex $argv 0]
set user root
set password 123
spawn ssh $user@$ip
expect {
  "yes/no" { send "yes\n";exp_continue }
  "password" { send "$password\n" }
}
interact
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值