首页 > 系统相关 >systemd-analyze命令:Linux系统启动分析

systemd-analyze命令:Linux系统启动分析

时间:2024-09-28 17:18:49浏览次数:7  
标签:systemd 系统启动 服务 -- dot Linux analyze 单元

一、命令简介

  • 用途: systemd-analyze ​命令用于分析系统引导过程的时间性能。
  • 标签: 系统管理,性能分析。
  • 相关命令: systemd-bootchart​, systemd-cgtop​, systemd-resolve​.

二、命令参数

命令格式

systemd-analyze [OPTIONS...] COMMAND ...

选项和参数

systemd-analyze [OPTIONS...] COMMAND ...

系统分析,显示单元依赖关系,检查单元文件。

命令:
  [time]                   打印启动系统所需的时间
  blame                    按初始化时间排序打印正在运行的单元列表
  critical-chain [UNIT...] 打印单元的关键时间链的树形结构
  plot                     输出显示服务初始化的SVG图形
  dot [UNIT...]            输出dot(1)格式的依赖图
  dump                     输出服务管理器的状态序列化
  cat-config               显示配置文件和补充配置
  unit-files               列出单元的文件和符号链接
  unit-paths               列出单元的加载目录
  exit-status [STATUS...]  列出退出状态的定义
  capability [CAP...]      列出能力的定义
  syscall-filter [NAME...] 打印seccomp过滤器中的系统调用列表
  condition CONDITION...   评估条件和断言
  verify FILE...           检查单元文件的正确性
  calendar SPEC...         验证重复的日历时间事件
  timestamp TIMESTAMP...   验证时间戳
  timespan SPAN...         验证时间跨度
  security [UNIT...]       分析单元的安全性

选项:
  -h --help                显示此帮助信息
     --version             显示软件包版本
     --no-pager            不要将输出传送到分页器
     --system              在系统 systemd 实例上操作
     --user                在用户 systemd 实例上操作
     --global              在全局用户配置上操作
  -H --host=[USER@]HOST    在远程主机上操作
  -M --machine=CONTAINER   在本地容器上操作
     --order               仅在图中显示顺序
     --require             仅在图中显示需求
     --from-pattern=GLOB   仅在图中显示源
     --to-pattern=GLOB     仅在图中显示目标
     --fuzz=SECONDS        还打印比分支中最新完成时间早SECONDS的服务
     --man[=BOOL]          是否检查man页面的存在
     --generators[=BOOL]   是否运行单元生成器(需要权限)
     --iterations=N        显示指定数量的迭代次数
     --base-time=TIMESTAMP 相对于指定时间计算日历时间

详细信息请参阅 systemd-analyze(1) man 页面。

三、命令示例

1 系统启动耗时-概览

systemd-analyze

总时间=内核时间 + 用户时间

Clip_2024-09-28_14-18-40

2 系统启动耗时-详细

systemd-analyze blame

这个命令会按服务打印出启动所花费的时间,并按照每个服务启动所花费的时间从大到小排序,帮助你识别启动过程中的瓶颈。

Clip_2024-09-28_14-45-43

可使用 tac 命令,让结果升序排列。

systemd-analyze blame | tac

这样你就可以看到系统启动时,服务启动的顺序了。

   27us blk-availability.service
    6ms update-notifier-motd.service
    6ms snapd.socket
    7ms [email protected]
    9ms systemd-update-utmp-runlevel.service
   10ms ufw.service
   10ms plymouth-quit-wait.service
   10ms proc-sys-fs-binfmt_misc.mount
   10ms sys-kernel-config.mount
   11ms sys-fs-fuse-connections.mount
   12ms docker.socket
...
 6.588s fwupd-refresh.service
10.580s apt-daily-upgrade.service
12.108s apt-daily.service

3 特定服务的启动耗时

systemd-analyze critical-chain [unit]

这个命令会显示服务启动的"关键链",你可以指定一个服务单元来查看它的详细启动耗时和依赖关系。

Clip_2024-09-28_14-56-32

  • 第一个依赖在系统启动后 343ms 启动,最后一个依赖在系统启动后 4.449s 启动。
  • 启动 ssh.service 耗时 21ms

4 系统启动耗时-图表

systemd-analyze plot > boot-up.svg

这个命令会生成一个 SVG 图表,显示启动过程中各个服务单元的启动时间和依赖关系。有没有觉得更直观了。

Clip_2024-09-28_17-15-15

​​

5 系统启动日志-等级设置

systemd-analyze log-level

这个命令可以查看系统启动过程中的日志级别设置。

Clip_2024-09-28_15-09-19

输出 info​ 表示 systemd 当前的日志级别设置为 info​。这意味着 systemd 将记录有关单元、服务和其他系统组件状态变化的信息性消息。以下是 systemd 支持的不同日志级别的简要概述:

  • emerg:系统无法使用。
  • alert:必须立即采取行动。
  • crit:临界条件。
  • err:错误条件。
  • warning:警告条件。
  • notice:正常但重要的条件。
  • info:信息性消息。
  • debug:调试级别的消息。

如果你想更改日志级别,可以将上述级别之一作为参数传递给命令。例如,要将日志级别设置为 debug​ 以获取更详细的日志进行故障排除,你可以使用:

systemd-analyze log-level debug

Clip_2024-09-28_15-13-03

请注意,将日志级别更改为更详细的设置(如 debug​)可能会生成大量日志数据,这可能会影响系统性能并迅速填满日志文件。一旦完成故障排除,请务必将日志级别设置回不那么详细的设置,如 info​ 或 notice​。

查看系统启动日志

可以使用以下任一命令查看系统启动日志

  • sudo dmesg
  • sudo journalctl -b -0

6 服务的依赖关系

systemd-analyze dot [unit] > /path/to/graph.dot

这个命令可以生成一个服务的依赖关系图,如果你指定了一个服务单元,它将仅生成该服务的依赖关系图。


sudo systemd-analyze dot > /path/to/graph.dot
# 或者,只为特定的服务生成依赖关系图
sudo systemd-analyze dot sshd.service > /path/to/dbus_graph.dot

在这个例子中,/path/to/graph.dot​ 是你希望保存生成的点格式文件的路径。如果你想要生成特定 systemd 单元的依赖关系图,你可以像第二个命令那样指定该单元的名称(例如 dbus.service​)。
一旦你有了这个 .dot​ 文件,你可以使用 Graphviz 工具集来将其转换为可视化的图形格式,比如 PNG 或 SVG。下面是如何使用 dot​ 命令(来自 Graphviz)来转换 .dot​ 文件为 PNG 图片的示例:

# 安装 Graphviz(如果尚未安装)
sudo apt-get install graphviz
# 将 dot 文件转换为 PNG 图片
dot -Tpng /path/to/graph.dot > /path/to/graph.png

这里,/path/to/graph.dot​ 是你之前创建的 dot 文件,/path/to/graph.png​ 是你希望保存生成的 PNG 图片的路径。

Clip_2024-09-28_15-37-28

最终生成的图像

graph

  • 黑色(black) :表示 “Requires” 关系,即一个服务单元启动需要依赖的其他服务单元。
  • 深蓝色(dark blue) :表示 “Requisite” 关系,这种依赖比 “Requires” 更强,它要求依赖的服务单元必须已经启动成功。
  • 深灰色(dark grey) :表示 “Wants” 关系,这是一个比较弱的依赖关系,表示一个服务单元希望某个其他服务单元也启动,但不是必需的。
  • 红色(red) :表示 “Conflicts” 关系,即一个服务单元与另一个服务单元有冲突,不能同时运行。
  • 绿色(green) :表示 “After” 关系,即一个服务单元需要在另一个服务单元之后启动。

7 查看特定服务的状态

systemd-analyze unit-paths

这个命令显示 systemd​ 单元文件的路径。

Clip_2024-09-28_16-01-04

这些目录中的单元文件定义了 systemd 如何管理服务和系统资源。通过在这些目录中放置或修改单元文件,系统管理员可以定制和控制系统的行为。

8 安全性检查

systemd-analyze security [unit]

这个命令对指定的服务执行安全性检查,并提供一个关于该服务安全配置的详细报告。

所有单元总览

Clip_2024-09-28_16-13-01

浏览指定单元

Clip_2024-09-28_16-16-12

systemd-analyze security [unit]​ 是一个用于分析和调试 systemd 系统管理器的命令,它特别关注于服务的安全性和沙箱设置。这个命令可以帮助您检查和改善 systemd 服务的安全性。

以下是关于这个命令的一些详细信息和使用方法:

  1. 命令功能:

    • 这个命令用于分析指定的服务单元([unit]​)的安全和沙箱设置。
    • 如果没有指定服务单元,它将分析所有服务单元。
    • 对于每个指定的服务单元,命令将检查其安全设置并提供详细的报告。
  2. 输出内容:

    • 输出包括每个服务单元的安全暴露评分,评分范围从 0 到 10。分数越低,表示服务越安全。
    • 输出还会显示每个服务的安全状态,例如“不安全”或“暴露”。
  3. 使用示例:

    • 基本使用方式是 systemd-analyze security [unit]​,其中 [unit]​ 是您想要分析的服务单元名称。
    • 例如,systemd-analyze security sshd.service​ 将分析 sshd​ 服务的安全性。
  4. 安全强化:

    • 这个命令可以帮助识别服务的潜在安全漏洞或弱点。
    • 根据命令的输出,您可以采取适当的措施来加强服务的安全性。
  5. 版本要求:

    • 这个安全审查工具是在 systemd 的版本 240 中添加的,发布于 2018 年 12 月。您需要运行这个版本或更高版本的 systemd 才能使用这个命令。

分析 nginx 服务的安全问题

Clip_2024-09-28_16-16-12

  • PrivateNetwork=​ - 服务可以访问主机的网络。这可能会增加安全风险,因为它可能允许服务与不受信任的网络进行通信。
  • User=/DynamicUser=​ - 服务以 root 用户身份运行。这是不推荐的做法,因为它会给服务过多的权限。
  • CapabilityBoundingSet=~CAP_SET(UID|GID|PCAP)​ - 服务可以更改 UID/GID 身份或捕获网络流量。
  • CapabilityBoundingSet=~CAP_SYS_ADMIN​ - 服务具有管理员权限,这是一个非常高的权限级别,可能会带来严重的安全风险。
  • CapabilityBoundingSet=~CAP_SYS_PTRACE​ - 服务具有调试能力,可以跟踪其他进程。

列表继续列出了服务所具有的各种权限和能力,每个权限旁边都有一个分数,表示它的安全暴露程度。这些权限包括但不限于网络配置、文件系统访问、系统调用权限等。
以下是一些关键点:

  • 表示服务缺少推荐的安全设置。
  • 表示服务已经实施了推荐的安全设置。

最后,命令给出了 nginx.service​ 的总体暴露级别为 9.6 UNSAFE

标签:systemd,系统启动,服务,--,dot,Linux,analyze,单元
From: https://blog.csdn.net/qq_38641599/article/details/142618265

相关文章

  • Linux系统更换镜像源的方法 触觉智能Purple Pi R1双网口开发板演示
    本文适用于触觉智能的SigmaStar、瑞芯微、全志等所有芯片方案产品,搭载Linux系统(Ubuntu/Debian/Buildroot)均可。本次使用到的是触觉智能的PurplePiR1双网口开发板,搭载了SigmaStarSSD201/SSD202D芯片,类树莓派设计,双核A7,带WiFi功能,是嵌入式新人入门学习的高性价比开发板!什么......
  • Linux环境下git仓库的搭建
    (1).参考文献官网在线教程:https://git-scm.com/book/zh/v2官方网站:https://git-scm.com/(2).实验环境2核2GCentOS7.6.1810(3).安装git1)yum或dnf安装[root@VM-0-17-centos~]#dnf-yinstallgit-all2)源码安装安装依赖包[root@VM-0-17-centos~]#dnf......
  • 项目实战:Qt+OSG爆破动力学仿真三维引擎测试工具v1.1.0(加载.K模型,子弹轨迹模拟动画,支持
    若该文为原创文章,转载请注明出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142454993长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…Qt开发专栏:项目实战......
  • Linux线程-POSIX信号量与锁以及条件变量
    POSIX信号量POSIX没有元素这个概念相比于SYSTEM-V更简洁,POSIX不一定适用老版本;二者都是系统范畴,都需要手动删除,POSIX相关函数属于线程库,所有编译时需要末尾加上-lpthread选项POSIXPOSIX有名信号量主要用于进程间通信创建成功后,器特殊文件存放路径:/dev/shm/POSIX无名......
  • 解决安装windows后Linux引导被覆盖的问题
    强烈谴责windows的霸道行径!!!首先安装windows时提示检测到EFI分区为NTFS格式,请格式化为FAT32后重试。但是所有的EFI分区都是FAT32的。然后我尝试着把之前安装Linux时设置的EFI分区删了,使用windows安装程序自己生成的EFI分区,然后就安装成功了,但是Linux就进不去了。方法一:再安装一个......
  • Linux查看固态盘总写入量等信息
    sudoaptinstallgsmartcontrol然后smartctl命令就有了。先尝试直接打开gmartcontrol(通过终端或者启动器)结果发现看不了。这时可以使用smartctl命令查看。首先找到固态盘的设备名。在终端中输入ls/dev/nvm*第一个就是固态盘的设备名。然后输入sudosmartctl-a/dev/......
  • Linux挂载ext4 ramdisk
    划分一块DRAM作为ramdisk在/etc/default/grub改:GRUB_CMDLINE_LINUX="memmap=4G!4G"然后重启就可以看到/dev/pmem0,这就是划分出来的ramdisk了。格式化mkfs-text4/dev/pmem0挂载这里的挂载点设置为了/mnt/pmem。mkdir-p/mnt/pmemmount-text4/dev/pmem0/mnt/pmem......
  • Linux多线程复制目录
    比如有一个目录a需要复制:mkdiratoucha/amkdira/btoucha/b/ctreeaa├──a└──b└──c将其复制为目录d只需要用find找出目录下所有的文件,然后用gnu-parallel开多线程逐个复制即可:mkdirdcdafind.-typef|parallel-j4cp--parents{}../dtre......
  • 编译安装linux内核
    下载内核https://www.kernel.org/一般下载tarball,也就是.tar.xz格式的源码包。如果/够大,可以直接解压到/usr/src,也可以解压到机械盘上。配置.config里面是一些flag,内核编译的时候会读取这个文件,根据这些flag来配置。常用的有:CONFIG_LOCALVERSION附加在在内核的version......
  • 加速clone linux kernel
    tunagitclonehttps://mirrors.tuna.tsinghua.edu.cn/git/linux.gitgiteegitee.com有一个码云极速下载的用户,id是mirrors。这个用户维护了很多github的仓库的镜像,其中就有linuxkernel:[email protected]:mirrors/linux.git实测可以跑满带宽。建议不要用https的方式......