• 18-Linux系统服务


    1. Linux启动流程

    1.1 CentOS6启动流程
    CentOS6启动流程:
    https://www.runoob.com/linux/linux-system-boot.html
    
    • 1
    • 2

    image-20220909193039200

    1.2 CentOS7启动流程
    CentOS6 VS Centos7开机启动流程图解: https://www.processon.com/view/link/5bffde0ae4b0f012f2382181
    
    • 1

    2022-09-09_00885

    2. Linux运行级别

    2.1 运行级别介绍
    运行级别, 运行级别就是操作系统当前正在运行的功能级别.
    
    • 1
    System V init运行级别systemd目标名称作用
    0runlevel0.target, poweroff.target关机
    1runlevel1.target, rescue.target单用户模式
    2runlevel2.target, multi-user.target暂未使用
    3runlevel3.target, multi-user.target多用户的文本界面(黑框)
    4runlevel4.target, multi-user.target没有使用
    5runlevel5.target, graphical.target多用户的图形界面
    6runlevel6.target, reboot.target重启
    2.2 查看所有运行级别
    # 查看所有运行级别 0-6
    [root@kid ~]# ls /usr/lib/systemd/system/runlevel*  
    /usr/lib/systemd/system/runlevel0.target  /usr/lib/systemd/system/runlevel4.target
    /usr/lib/systemd/system/runlevel1.target  /usr/lib/systemd/system/runlevel5.target
    /usr/lib/systemd/system/runlevel2.target  /usr/lib/systemd/system/runlevel6.target
    /usr/lib/systemd/system/runlevel3.target
    
    /usr/lib/systemd/system/runlevel1.target.wants:
    systemd-update-utmp-runlevel.service
    
    /usr/lib/systemd/system/runlevel2.target.wants:
    systemd-update-utmp-runlevel.service
    
    /usr/lib/systemd/system/runlevel3.target.wants:
    systemd-update-utmp-runlevel.service
    
    /usr/lib/systemd/system/runlevel4.target.wants:
    systemd-update-utmp-runlevel.service
    
    /usr/lib/systemd/system/runlevel5.target.wants:
    systemd-update-utmp-runlevel.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    2.4 查看默认启动级别
    # 查看系统默认运行级别(3 multi-user.target 黑框显示)
    # runlevel 6 7版本通用
    [root@kid ~]# runlevel
    N 3
    
    [root@kid ~]# systemctl get-default 
    multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    2.5 修改默认启动级别
    CentOS7的systemd使用targets而不是runlevels. (runlevels几.targets)
    默认情况下, 有两个主要目标:
    
    multi-user.target: 类似于运行级别3  黑框
    graphical.target: 类似于运行级别5   图形化界面
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 没有安装图形化界面就不尝试了
    # 切换图形界面
    [root@student ~]# systemctl set-default graphical.target   
    # 切换命令界面 
    [root@student ~]# systemctl set-default multi-user.target  
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3. Linux systemd

    3.1 systemd的由来
    Linux一直以来都是采用init进程作为祖宗进程, 但是init有两个缺点:  
    
    1. 启动时间长. Init进程是串行启动, 只有前一个进程启动完, 才会启动下一个进程.
    
    2. 启动脚本复杂, 初始化完成后系统会加载很多脚本, 脚本都会处理各自的情况, 
       这会让脚本多而复杂.  
    
    Centos5 是启动速度最慢的, 串行启动过程, 无论进程相互之间有无依赖关系.  
    
    Centos6 相对启动速度有所改进.
    有依赖的进程之间依次启动而其他与之没有依赖关系的则并行同步启动. 
    
    Centos7 所有进程无论有无依赖关系则都是并行启动
    (当然很多时候进程没有真正启动而是只有一个信号或者说是标记而已, 
    在真正利用的时候才会真正启动.)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    img

    3.2 什么是systemd
    systemd即为system
    daemon守护进程, systemd主要解决上文的问题而诞生, 
    systemd的目标是, 为系统的启动和管理提供一套完整的解决方案.
    
    • 1
    • 2
    • 3
    3.3 systemd的优势
    1. 最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15等)
    2. Centos7支持开机并行启动服务, 显著提高开机启动效率.  
    3. Centos7关机只关闭正在运行的服务, 而Centos6全部都关闭一次.  
    4. Centos7服务的启动与停止不在使用脚本进行管理, 也就是/etc/init.d下不在有脚本. 
    5. Centos7使用systemd解决原有模式缺陷, 比如原有service不会关闭程序产生的子进程.
    
    systemd相关配置文件  
    /usr/lib/systemd/system/ # 类似Centos6系统的启动脚本 /etc/init.d/  
    /etc/systemd/system/     # 类似Centos6系统的 /etc/rc.d/rcN.d/  
    /etc/systemd/system/multi-user.target.wants/, 开机要启动的程序
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    3.4 systemd管理服务相关命令
    systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令
    
    • 1
    systemctl命令作用
    systemctl start crond.service启动服务
    systemctl stop crond.service停止服务
    systemctl restart crond.service重启服务
    systemctl reload crond.service重新加载配置
    systemctl status crond.servre查看服务运行状态
    systemctl is-active sshd.service查看服务是否在运行中
    systemctl mask crond.servre禁止服务运行
    systemctl unmask crond.servre取消禁止服务运行
    systemctl cat vsftpd查看启动文件
    # centos6启动
    /etc/init.d/network restart  # 找到服务文件 执行启动
    service network restart  # 子进程不会被杀死
    
    # 在centos7中可以执行但是不推荐使用
    [root@kid ~]# service network restart
    Restarting network (via systemctl):                        [  OK  ]
    
    # centos7启动服务  
    systemctl restart network 
    
    # 所有服务都放在 /usr/lib/systemd/system/目录下
    [root@kid ~]# ll /usr/lib/systemd/system/vsftpd.service  
    -rw-r--r--. 1 root root 171 Jun 10  2021 /usr/lib/systemd/system/vsftpd.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    3.5 服务状态
    当我们使用systemctl启动一个守护进程后, 
    可以通过sysytemctl status查看此守护进程的状态.
    
    • 1
    • 2
    状态描述
    loaded服务单元的配置文件已经被处理
    active(running)服务持续运行
    active(exited)服务成功完成一次的配置
    active(waiting)服务已经运行但在等待某个事件
    inactive
    enabled服务设定为开机运行
    disabled服务设定为开机不运行
    static服务开机不启动, 但可以被其他服务调用启动
    # 查看nginx服务的状态
    [root@kid ~]# systemctl status nginx -l 
    ● nginx.service - The nginx HTTP and reverse proxy server
       Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
       # 活动:服务没有在运行(死的)
       Active: inactive (dead)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    3.6 服务开机启动相关
    systemctl 设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令
    
    • 1
    systemctl命令(7系统)作用
    systemctl enable crond.service开机自动启动
    systemctl disable crond.service开机不自动启动
    systemctl list-unit-files查看各个级别下服务的启动与禁用
    systemctl is-enabled crond.service查看特定服务是否为开机自启动
    systemctl daemon-reload创建新服务文件需要重载变更
    CentOS7系统, 管理员可以使用 systemctl 命令来管理服务器启动与停止
    
    • 1
    # 关机相关命令  
    systemctl poweroff  # 立即关机, 常用  
    # 重启相关命令  
    systemctl reboot  # 重启命令, 常用  
    
    • 1
    • 2
    • 3
    • 4
    3.7 journalctl日志
    journalctl是systemctl的日志, 记录包括了手动执行以及开机启动的服务操作记录...
    
    • 1
    journalctl -n 20     查看最后20  
    journalctl -f        动态查看日志  
    journalctl -p err    查看日志的级别  
    journalctl -u crond 查看某个服务的单元的日志  
    journalctl -xe     
    # -x 是目录(catalog)的意思,在报错的信息下会,附加解决问题的网址 
    # -e  pager-end 从末尾开始看
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.8 制作系统服务
    通过yum安装的软件一般都会配置在/usr/lib/systemd/system/创建服务文件.
    二进制编译安装的软件, 则需要自己制作系统服务.
    制作系统服务后则可以通过systemd来管理这个软件.
    
    • 1
    • 2
    • 3
    # 查看vsftpd服务配置文件(参照)
    [root@kid ~]# cat /usr/lib/systemd/system/vsftpd.service  
    [Unit]
    # 描述  
    Description=Vsftpd ftp daemon
    # 在XX后启动 
    After=network.target
    
    [Service]
    # 程序后台运行  
    Type=forking
    # 命令  
    ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
    # ExecStartPre 启动之前执行  
    # ExecStop 停止  
    # ExecRestart 重启  
    # ExecReload 重新加载 
    
    [Install]
    # 在哪个运行级别下  
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    源码方式安装nginx, 否则自定义服务/usr/local/nginx/sbin/nginx目录不存在.
    安装方式 https://blog.csdn.net/qq_46137324/article/details/126728149
    
    • 1
    • 2
    # 制作系统服务
    # 先切换到/usr/lib/systemd/system/ 目录下
    [root@kid ~]# cd /usr/lib/systemd/system/ 
    
    # 编辑自定义的nginx服务 服务后缀为.service
    [root@kid system]# vim mynginx.service  
    [Unit]  
    # 描述  
    Description=my nginx  
    # 在XX后启动, 需要网络服务启动, nginx才启动, 否则直接报错
    After=network.target  
      
    [Service]  
    # 程序后台运行 
    Type=forking  
    # 命令
    # 启动命令
    ExecStart=/usr/local/nginx/sbin/nginx
    # 停止命令
    ExecStop=/usr/local/nginx/sbin/nginx -s stop  
    # 重启命令
    ExecRestart=/usr/local/nginx/sbin/nginx -s restart  
    # 重载命令
    ExecReload=/usr/local/nginx/sbin/nginx -s reload   
    
    [Install]  
    # 在哪个运行级别下 
    WantedBy=multi-user.target   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    注释和配置不能在同一行否则会提示无效的配置 #...
    
    • 1
    # 修改文件的权限(主要是root用户有执行权限)
    [root@kid system]#  chmod 754 mynginx.service  
    
    # 启动nginx, .service 都可以省略掉
    [root@kid system]# systemctl start mynginx           
    # 如果启动出现错误 使用 journalctl -xe 查看报错信息 , 一般就是端口占用报错
    
    # 开机启动  
    [root@kid system]# systemctl enable mynginx.service 
    # 创建一个软链接
    Created symlink from /etc/systemd/system/multi-user.target.wants/mynginx.service to /usr/lib/systemd/system/mynginx.service.
    
    # 查看是否成功  
    [root@kid system]# systemctl status mynginx.service 
    ● mynginx.service - my nginx
       # enabled 开机自启
       Loaded: loaded (/usr/lib/systemd/system/mynginx.service; enabled; vendor preset: disabled)
       Active: inactive (dead)
    
    Sep 11 17:53:11 kid systemd[1]: [/usr/lib/systemd/system/mynginx.service:13] Unk...ce'
    Sep 11 17:53:11 kid systemd[1]: [/usr/lib/systemd/system/mynginx.service:13] Unk...ce'
    Hint: Some lines were ellipsized, use -l to show in full.
    
    # 取消开机启动 (移除软链接)
    [root@kid system]# systemctl disable mynginx.service  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    重启电脑, 使用本地浏览器访问 10.0.0.3:80
    出现下图提示则说明设置成功...
    
    • 1
    • 2

    image-202209111811127294. Linux单用户模式破解密码

    如何使用单用户模式进行变更系统密码?
    以Centos7系统为例:(Centos6破解方式请自行百度)
    
    • 1
    • 2
    1:重启Linux系统主机并出现引导界面时, 按下键盘上的e键进入内核编辑界面  
    
    • 1

    img

    2:在linux16这行的后面添加 enforcing=0 init=/bin/bash,
    然后按下Ctrl + X组合键来运行修改过的内核程序  
    
    • 1
    • 2

    img

    3:大约5秒过后, 进入到系统的单用户模式, 依次输入以下命令, 
    待系统重启操作完毕, 然后就可以使用新密码来登录Linux系统了.
    命令行执行效果如图所示.  
    
    • 1
    • 2
    • 3

    img

    5. Linux下救援模式

    5.1 场景1
    当系统坏了, 无法登陆系统, 但需要把里面的数据复制出来, 怎么办?
    
    • 1
    * 1. 先挂载光盘, 然后选择光盘引导为第一位  
    
    • 1

    img

    * 2. 进入故障排除模式–>然后选择救援模式  
    
    • 1

    img
    img

    * 3. 挂载真实系统后, 发现数据都还存在  
    
    • 1

    img

    5.2 场景2
    修复MBR, 主要出现在安装双系统时, 后安装的系统把原来系统的MBR删除了, 需要修复.
    
    • 1
    # 破坏硬盘的前446字节,模拟MBR引号损坏,会发现重启无法启动系统
    [root@kid ~]# dd if=/dev/zero of=/dev/sda bs=1 count=446  
    
    • 1
    • 2

    img

    * 1. 重启系统, 然后按照之前的操作进入救援模式, 然后分配一个shell终端, 
         挂载真实的操作系统进行修复  
    
    • 1
    • 2

    img

    * 2. 修复MBR引导, 然后重启连接服务器
    
    • 1
    # 1.使用grub修复  
    grub2-install /dev/sda  
    
    # 2.然后退出  
    # exit  
      
    # 3.最后重启进入系统  
    # reboot  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    5.3 场景3
    Centos7误删除grub文件如何进行修复.  
    
    • 1
    # 模拟误删故障
    # 1.删除grub2   
    [root@m01 ~]# rm -rf  /boot/grub2   
    # 2.重启计算机   
    [root@m01 ~]# reboot  
    
    • 1
    • 2
    • 3
    • 4
    • 5

    img

    * 1. 重启系统, 然后按照之前的操作进入救援模式, 然后分配一个shell终端, 
         挂载真实的操作系统进行修复  
    
    • 1
    • 2

    img

    * 2. 使用grub2-install、grub2-mkconfig恢复配置文件  
    
    • 1

    img

    PS: 最后别忘记修改 BIOS 引导, 让硬盘回归到第一引导
    
    • 1

    ————————————————
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低.
    ————————————————

  • 相关阅读:
    offline RL | Pessimistic Bootstrapping (PBRL):在 Q 更新中惩罚 uncertainty,拉低 OOD Q value
    【H5写雷达图】使用h5写雷达图等动态图表(两种方式实现)
    01_ARM架构内存映射简介
    k8s常用命令1
    聊聊前端性能指标那些事儿
    JavaScript 到底放在哪个位置,不同位置效果又是怎么样
    VMware12下安装Windows7虚拟机---详细多图教程(沙盒环境)
    JS中内置的日期类Date,显示系统时间、停止系统时间
    Ionic header content footer toolbar UI实例
    OBS Studio免费开源录屏工具
  • 原文地址:https://blog.csdn.net/qq_46137324/article/details/126807834