Linux journalctl命令详解

文章目录

  • 1.介紹
  • 2.概念
  • 设置system time
  • 基本的日志查阅方法
    • 按时过滤日志(by Time)
    • 显示本次启动以来的日志(Current Boot)
    • 按Past Boots
    • 按时间窗口
    • 按感兴趣的消息筛选
      • 按unit
      • 按进程、用户、Group ID
      • 按组件路径
      • 显示内核消息
      • 按消息优先级
  • 修改Journal输出格式
    • 截断或扩展输出
    • 输出日志到标准输出
    • 输出格式
  • 主动进程监控
    • 显示最近的日志
    • Follow日志
  • Journal维护
    • 查找当前磁盘空间使用量
    • 删除旧的日志
    • 限制日志扩展

1.介紹

systemd
systemd 的一些最瞩目的优点是涉及进程和系统日志记录。 使用其他工具时,日志通常分散在整个系统中,由不同的守护程序和进程处理,并且当它们跨越多个应用程序时可能相当难以解释。 systemd 试图通过提供一个集中管理解决方案来记录所有内核和用户态进程来解决这些问题。 收集和管理这些日志的系统称为journal.
日志是通过journald守护进程实现的,它处理内核、initrd、服务等产生的所有消息

2.概念

systemd journal背后的推动力之一是集中管理日志,无论消息源自何处。 由于大部分启动过程和服务管理都是由 systemd 进程处理的,因此标准化日志收集和访问的方式是有意义的。 journal守护进程从所有可用来源收集数据,并将其以二进制格式存储,以便于动态操作。
通过使用单个工具与数据进行交互,管理员可以根据自己的需要动态显示日志数据。 或者按顺序组合来自两个相关服务的日志条目以调试通信问题。

以二进制格式存储log数据还意味着数据可以根据当前的需要以任意输出格式显示。 例如,对于日常日志管理,可能习惯于以标准syslog格式查看日志,但如果以后决定用图形方式显示服务中断情况,则可以将每个条目输出为 JSON 对象,以使其可供图表服务使用。 由于数据不是以纯文本形式写入磁盘,因此当需要不同的按需格式时无需转换。
systemd journal可以与现有的 syslog 实现一起使用,也可以替换 syslog 功能,具体取决于需求。 虽然 systemd journal将满足大多数管理员的日志记录需求,但它也可以补充现有的日志记录机制。 例如,可能有一个集中式 syslog 服务器,用于编译来自多个服务器的数据,但您也可能希望将来自单个系统上多个服务的日志与 systemd 日志交错。 可以通过组合这些技术来实现这两个目标。

设置system time

使用二进制日志进行日志记录的好处之一是能够随意查看 UTC 或本地时间的日志记录。 默认情况下,systemd 将按当地时间显示结果。
因此,在开始使用journal之前,我们将确保时区设置正确。 systemd 套件实际上附带了一个名为 timedatectl 的工具,可以帮助解决此问题。
First, see what timezones are available with the list-timezones option:
首先,通过 list-timezones 选项查看哪些时区可用:

timedatectl list-timezones

这将列出系统上可用的时区。 当找到与服务器位置匹配的时区时,可以使用 set-timezone 选项进行设置:

sudo timedatectl set-timezone zone

要确保计算机现在使用正确的时间,单独使用 timedatectl 命令,或与 status 选项一起使用。 显示将是相同的:

timedatectl status

Output
Local time: Fri 2024-02-09 14:44:30 EDT
Universal time: Fri 2024-02-09 18:44:30 UTC
RTC time: Fri 2024-02-09 18:44:31
Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

第一行应显示正确的时间。

基本的日志查阅方法

要查看journald守护程序收集的日志,请使用journalctl 命令。
单独使用时,系统中的每个日志条目都会显示在一页内(通常less)中供浏览。 最旧的条目将位于顶部:

journalctl

Output
– Logs begin at Tue 2015-02-03 21:48:52 UTC, end at Tue 2015-02-03 22:29:38 UTC. –
Feb 03 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49.
Feb 03 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49.
Feb 03 21:48:52 localhost.localdomain systemd-journald[139]: Received SIGTERM from PID 1 (systemd).
Feb 03 21:48:52 localhost.localdomain kernel: audit!: type=1404 audit(1423000132.274:2): enforcing=1 old_en
Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules.
Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules.
Feb 03 21:48:52 localhost.localdomain kernel: input: ImExPS/2 Generic Explorer Mouse as /devices/platform/
Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 8 users, 102 roles, 4976 types, 294 bools, 1 sens,
Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 83 classes, 104131 rules
. . .

可能需要滚动一页又一页的数据,如果 systemd 已在系统上运行很长时间,那么这些数据可能长达数万或数十万行。

对于那些习惯于标准syslog记录的人来说,这种格式会很熟悉。 然而,这实际上从比传统系统日志实现更多的来源收集数据。 它包括来自早期boot过程、内核、initrd 以及应用程序标准错误和标准输出的日志。 这些都可以在journal中找到。

您可能会注意到显示的所有时间戳都是当地时间。 现在我们已经在系统上正确设置了本地时间,这对于每个日志条目都是可用的。 所有日志均使用此新信息显示。

如果您想显示 UTC 时间戳,可以使用 --utc 标志:

journalctl --utc

按时过滤日志(by Time)

虽然访问如此大量的数据集合绝对有用,但手动检查和处理如此大量的信息可能很困难或不可能。 因此,journalctl 最重要的功能之一就是它的过滤选项。

显示本次启动以来的日志(Current Boot)

每天可能会使用的最基本的标志是 -b 选项。 这将显示自最近重新启动以来收集的所有日记条目。

journalctl -b

这将帮助识别和管理与当前环境相关的信息。

如果没有使用此功能并且显示超过一天的启动时间,则只要系统出现宕机重启,您就会看到journalctl 插入了如下所示的一行:

Output
. . .

– Reboot –

. . .

这可用于帮助您在逻辑上将信息分离到boot会话中。

按Past Boots

虽然通常希望显示当前启动的信息,但有时过去的启动也会有所帮助。 journal可以保存许多以前启动的信息,因此可以使journalctl轻松显示信息。

某些发行版默认启用保存以前的boot信息,而其他发行版则禁用此功能。 要启用持久化boot信息,可以通过键入以下内容来创建存储日志的目录:

sudo mkdir -p /var/log/journal

或者可以编辑日志配置文件:

sudo nano /etc/systemd/journald.conf

Under the [Journal] section, set the Storage= option to “persistent” to enable persistent logging:
在 [Journal] 部分下,将 Storage= 选项设置为“persistent”以启用持久日志记录:

/etc/systemd/journald.conf
. . .
[Journal]
Storage=persistent

当您的服务器上启用保存之前的boot信息时,journalctl 会提供一些命令来帮助您将boot作为划分单位。 要查看journald保存的“boot”,在journalctl中使用–list-boots选项:

journalctl --list-boots

Output:

-2 caf0524a1d394ce0bdbcff75b94444fe Tue 2024-02-03 21:48:52 UTC—Tue 2024-02-03 22:17:00 UTC
-1 13883d180dc0420db0abcb5fa26d6198 Tue 2024-02-03 22:17:03 UTC—Tue 2024-02-03 22:19:08 UTC0 bed718b17a73415fade0e4e7f4bea609 Tue 2024-02-03 22:19:12 UTC—Tue 2024-02-03 23:01:01 UTC

This will display a line for each boot. The first column is the offset for the boot that can be used to easily reference the boot with journalctl. If you need an absolute reference, the boot ID is in the second column. You can tell the time that the boot session refers to with the two time specifications listed towards the end.
这将为每个boot显示一行。 第一列是系统启动的偏移量,可用于通过journalctl轻松引用每个boot。 如果您需要绝对引用,boot ID 位于第二列中。 可以通过最后列出的两个时间字段来判断boot会话所指的时间。

要显示这些boot的信息,可以使用第一列或第二列中的信息。

例如,要查看上次启动的日志,请使用 -1 相对指针和 -b 标志:

journalctl -b -1

还可以使用boot ID 回调启动数据:

journalctl -b caf0524a1d394ce0bdbcff75b94444fe

按时间窗口

虽然通过boot查看日志条目非常有用,但有时只希望查询某一段时间窗口的日志条目。 在处理显著uptime时间的长时间运行的服务器时尤其如此。

这种情况可以考虑使用 --since 和 --until 选项按任意时间限制进行​​过滤,这分别将显示的条目限制为给定时间之后或之前的条目。

时间值可以有多种格式。 对于绝对时间值,应该使用以下格式:

YYYY-MM-DD HH:MM:SS

例如,我们可以通过输入以下命令查看自 2024年 1 月 10 日下午 5:15 以来的所有条目:

journalctl --since "2024-01-10 17:15:00"

如果省略上述格式的组成部分则将应用一些默认值。 例如,如果省略日期,则将假定当前日期。 如果时间部分缺失,则将替换为“00:00:00”(午夜)。 秒字段也可以省略,默认为“00”:

journalctl --since "2024-01-10" --until "2024-01-11 03:00"

Journal还使用一些相对值和命名的快捷方式。 例如,可以使用“yesterday”、“today”、“tomorrow”或“now”等词。 可以通过在数值前添加“-”或“+”或在句子结构中使用“ago”等单词来计算相对时间。
要获取昨天的数据,可以输入:

journalctl --since yesterday

如果您收到从上午 9:00 开始并持续到一小时前的服务中断报告,可以输入:

journalctl --since 09:00 --until "1 hour ago"

正如上面所看到的,定义灵活的时间窗口使得过滤希望查看的条目变得相对简单。

按感兴趣的消息筛选

上面,我们了解了一些使用时间限制过滤日志数据的方法。 接下来,我们将讨论如何根据您感兴趣的服务或组件进行过滤。systemd 日志提供了多种执行此操作的方法。

按unit

如果要查看某个服务相关的日志,则unit应该是最有效的方式。我们可以使用 -u 选项以这种方式进行过滤。

例如,要查看系统上 Nginx 单元的所有日志,我们可以输入:

journalctl -u nginx.service

通常,可能还希望按时间进行过滤,以便显示感兴趣的行。例如,要检查服务今天的运行情况,您可以键入:

journalctl -u nginx.service --since today

当利用journal整合来自不同unit的日志记录的能力时,这种类型的专注类型变得非常有用。 例如,如果有一个Nginx 进程连接到 PHP-FPM 单元来处理动态内容,则可以通过指定两个unit来按时间顺序合并两个unit中的条目:

journalctl -u nginx.service -u php-fpm.service --since today

这可以更容易地发现不同程序和调试系统之间的交互,而不是单个进程之间的交互。

按进程、用户、Group ID

某些服务会产生各种子进程来完成工作。 如果您已经找出了感兴趣的进程的确切 PID,也可以根据它进行过滤。

为此,可以通过指定 _PID 字段进行过滤。 例如,如果想了解 PID 是 8088的进程,可以输入:

journalctl _PID=8088

有时,可能希望显示从特定用户或组记录的所有条目。 这可以通过 _UID 或 _GID 过滤器来完成。 例如,如果有web服务器在 www-data 用户下运行,可以通过键入以下内容找到用户 :

id -u www-data

Output
33

之后,可以使用返回的 ID 来过滤日志结果:

journalctl _UID=33 --since today

systemd journal有许多可用于过滤的字段。 其中一些是从正在记录的进程传递的,另一些是由journald在日志记录时,使用从系统收集的信息应用的。
Q
前导下划线表示 _PID 字段属于后一种类型。 journal自动记录并索引正在记录的进程的 PID,以供以后过滤。 您可以通过键入以下内容了解所有可用的日记字段:

man systemd.journal-fields

我们稍后将讨论其中的一些内容。 现在,我们先看看一个与按这些字段进行过滤有关的更有用的选项。 -F 选项可用于显示给定journal字段的所有可用值。
例如,要查看 systemd journal有哪些Group ID 的条目,可以输入:

journalctl -F _GID

Output
32
99
102
133
81
84
100
0
124
87

这将显示日journal为Group ID 字段存储的所有值。 这可以帮助您构建过滤。

按组件路径

我们还可以通过提供路径位置进行过滤。
如果路径指向可执行文件,journalctl 将显示涉及相关可执行文件的所有条目。 例如,要查找涉及 bash 可执行文件的条目,您可以输入:

journalctl /usr/bin/bash

通常,如果一个unit可用于可执行文件,则-u或–unit方法更干净并提供更好的信息(有来自于关联子进程的日志条目等等好处)。 否则,by path就能够提供必要的帮助给我们。

显示内核消息

内核消息(通常在 dmesg 输出中找到)也可以从journal中检索。

要仅显示这些消息,我们可以在命令中添加 -k 或 --dmesg 标志:

journalctl -k

默认情况下,这将显示当前boot的内核消息。也可以使用先前讨论过的boot选择标志指定替代boot。例如,要获取五次启动之前的消息,您可以输入:

journalctl -k -b -5

按消息优先级

系统管理员经常感兴趣的过滤器之一是消息优先级。 虽然以非常详细的级别记录信息通常很有用,但在实际消化可用信息时,低优先级日志可能会分散注意力和令人困惑。
可以使用journalctl 通过使用-p 选项仅显示指定优先级或更高优先级的邮件。 这将过滤掉优先级较低的消息。
例如,要仅显示错误级别或更高级别记录的条目,您可以键入:

journalctl -p err -b

这将显示所有标记为 error, critical, alert, 或者emergency的消息。 journal实现标准的系统日志消息级别。 可以使用优先级名称或其相应的数值。 按照优先级从高到低的顺序,这些是:

  • 0: emerg
  • 1: alert
  • 2: crit
  • 3: err
  • 4: warning
  • 5: notice
  • 6: info
  • 7: debug
    上述数字或名称可以与 -p 选项互换使用。 选择优先级将显示标记为指定级别及其之上的消息

修改Journal输出格式

上面演示了通过过滤输出我们想要的日志条目。 不过,还有其他方法可以修改输出。 我们可以调整 Journalctl 显示以满足不同的需求。

截断或扩展输出

我们可以通过告诉journalctl缩小或扩展输出来调整journalctl显示数据的方式。
默认情况下,journalctl 将在分页器中显示整个条目,从而使条目逐渐显示到屏幕右侧。 按向右箭头键可以访问此信息。
如果您希望输出被截断,在删除信息的地方插入省略号,您可以使用 --no-full 选项:

journalctl --no-full

Output
. . .
Output:

Output
. . .Feb 04 20:54:13 journalme sshd[937]: Failed password for root from 83.234.207.60...h2
Feb 04 20:54:13 journalme sshd[937]: Connection closed by 83.234.207.60 [preauth]
Feb 04 20:54:13 journalme sshd[937]: PAM 2 more authentication failures; logname...ot

我们也可以采取相反的方向,告诉journalctl显示其所有信息,无论它是否包含不可打印的字符。
可以使用 -a 标志来做到这一点:

journalctl -a

输出日志到标准输出

默认情况下,journalctl 在分页器中显示输出以便于使用。 但是,如果计划使用文本操作工具处理数据,可能希望能够输出到标准输出。

您可以使用 --no-pager 选项来执行此操作:

journalctl --no-pager

这可以立即通过管道传输到处理实用工具或重定向到磁盘上的文件,具体取决于需要。

输出格式

如果正在处理日志条目,如上所述,假如数据采用更易于使用的格式,能帮助我们更轻松地解析数据。 journal可以根据需要以多种格式显示。可以使用 -o 选项指定输出格式执行此操作。
例如,通过输入以下内容以 JSON 格式输出日记条目:

journalctl -b -u nginx -o json

Output:

Output
{ "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" : "unit_status_log_starting_stopping_reloading", "SYSLOG_IDENTIFIER" : "systemd", "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5", "_TRANSPORT" : "journal", "_PID" : "1", "_COMM" : "systemd", "_EXE" : "/usr/lib/systemd/systemd", "_CMDLINE" : "/usr/lib/systemd/systemd", "_SYSTEMD_CGROUP" : "/", "UNIT" : "nginx.service", "MESSAGE" : "Starting A high performance web server and a reverse proxy server...", "_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973" }. . .

这对使用工具进行解析很有用。可以使用 json-pretty 格式来更好地了解数据结构,然后将其传递给 JSON 使用者。

journalctl -b -u nginx -o json-pretty

Output:

Output
{"__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635","__REALTIME_TIMESTAMP" : "1422990364739502","__MONOTONIC_TIMESTAMP" : "27200938","_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d","PRIORITY" : "6","_UID" : "0","_GID" : "0","_CAP_EFFECTIVE" : "3fffffffff","_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee","_HOSTNAME" : "desktop","SYSLOG_FACILITY" : "3","CODE_FILE" : "src/core/unit.c","CODE_LINE" : "1402","CODE_FUNCTION" : "unit_status_log_starting_stopping_reloading","SYSLOG_IDENTIFIER" : "systemd","MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5","_TRANSPORT" : "journal","_PID" : "1","_COMM" : "systemd","_EXE" : "/usr/lib/systemd/systemd","_CMDLINE" : "/usr/lib/systemd/systemd","_SYSTEMD_CGROUP" : "/","UNIT" : "nginx.service","MESSAGE" : "Starting A high performance web server and a reverse proxy server...","_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973"
}. . .

可以使用以下格式进行显示:

  • cat:仅显示消息字段本身。
  • export:适合传输或备份的二进制格式。
  • json:标准 JSON,每行一个条目。
  • json-pretty:格式化JSON 以便于人类可读性
  • json-sse:JSON 格式的输出,经过包装以使其与服务器推送事件兼容。
  • short:默认的系统日志样式输出
  • short-iso:默认格式,增加了显示 ISO 8601 wallclock时间戳的功能。
  • short-monotonic:具有monotonic时间戳的默认格式。
  • short-precise:具有微秒精度的默认格式。
  • verbose:显示条目中可用的每个日志字段,包括通常在内部隐藏的字段

这些选项允许以最适合您当前需求的任何格式显示journal条目。

主动进程监控

journalctl命令模仿了管理员使用tail来监视活动或最近活动的方式。这种功能内置在journalctl中,使我们能够访问这些功能,而无需将其管道传输到另一个工具。

显示最近的日志

要显示一定数量的记录,可以使用 -n 选项,其作用与 tail -n 完全相同。
默认情况下,它将显示最近的 10 个条目:

journalctl -n

您可以使用 -n 后面指定想要查看的条目数:

journalctl -n 20

Follow日志

主动跟踪正在写入的日志,可以使用 -f 标志。 同样,如果您有使用 tail -f 的经验,这正如所期望的那样:

journalctl -f

退出按 CTRL+C。

Journal维护

有时候可能想知道存储到目前为止我们所看到的所有数据的成本。 此外,也可能会对清理一些较旧的日志并释放空间感到有性趣。

查找当前磁盘空间使用量

journalctl --disk-usage

Output
Archived and active journals take up 8.0M in the file system.

删除旧的日志

如果想缩小日志,可以通过两种不同的方式来实现(systemd 版本 218 及更高版本提供)。

如果使用 --vacuum-size 选项,您可以通过指定大小来缩小日志。 这将删除旧条目,直到磁盘上占用的总日志空间达到请求的大小:

sudo journalctl --vacuum-size=1G

缩小日志的另一种方法是使用 --vacuum-time 选项提供截止时间。超过该时间的任何条目都将被删除。这允许保留在特定时间之后创建的条目。
例如,要保留去年的条目,可以输入:

sudo journalctl --vacuum-time=1years

限制日志扩展

可以配置服务器以限制日志占用的空间。这可以通过编辑 /etc/systemd/journald.conf 文件来完成。
以下项目可用于限制日志增长:

  • SystemMaxUse=:指定journal在持久存储中可使用的最大磁盘空间。
  • SystemKeepFree=: 指定将日志条目添加到持久存储时,日志应保留的空闲空间量。
  • SystemMaxFileSize=:控制单个日志文件在rotation(轮换)之前在持久存储中可以增长到多大。
  • RuntimeMaxUse=:指定易失性存储(/run 文件系统内)中可使用的最大磁盘空间。
  • RuntimeKeepFree=: 指定在将数据写入易失性存储(位于/run文件系统内)时,应留出用于其他用途的空间量。
  • RuntimeMaxFileSize=: 指定在将日志文件进行轮换之前,单个日志文件可以占用的易失性存储空间量(位于/run文件系统内)。

通过设置这些值,可以控制 journald 如何消耗和保留服务器上的空间。SystemMaxFileSize 和 RuntimeMaxFileSize 将会使得归档文件的大小与限制值一致。在vacuum操作后解释文件计数时,记住这一点很重要

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bash 编程精粹:从新手到高手的全面指南之逻辑控制

在 Unix 和 Linux 系统中,Bash(Bourne-Again Shell)是一种广泛使用的 shell,提供了强大的脚本编程能力。本文将详细介绍 Bash 脚本中的逻辑控制结构,包括条件判断、分支选择、循环控制以及退出控制等内容。 条件判断&…

Centos安装MySQL提示公钥尚未安装

一、问题 在Centos7.9使用yum安装MySQL时出现错误,提示:mysql-community-server-5.7.44-1.el7.x86_64.rpm 的公钥尚未安装,如下图所示: 执行命令:systemctl start mysqld也提示错误:Failed to start mysq…

Spark-机器学习(1)什么是机器学习与MLlib算法库的认识

从这一系列开始,我会带着大家一起了解我们的机器学习,了解我们spark机器学习中的MLIib算法库,知道它大概的模型,熟悉并认识它。同时,本篇文章为个人spark免费专栏的系列文章,有兴趣的可以收藏关注一下&…

如何在Windows安装LocalSend并结合内网穿透实现公网跨平台远程文件互传

文章目录 1. 在Windows上安装LocalSend2. 安装Cpolar内网穿透3. 公网访问LocalSend4. 固定LocalSend公网地址 本篇文章介绍在Windows中部署开源免费文件传输工具——LocalSend,并且结合cpolar内网穿透实现公网远程下载传输文件。 localsend是一款基于局域网的文件传…

链表-双指针-虚拟节点-力扣

链表--双指针--虚拟节点 力扣 142 环形链表求循环起点 重点力扣 21 合并两个有序链表力扣 86 分割链表力扣23 合并K个有序链表 -- 优先队列(二叉堆 小顶堆)重点力扣19 找倒数第N个元素 快慢指针 一次遍历 重点力扣876 快慢指针找中间节点力扣 160 相交链…

【C++】模板初阶——泛型编程、函数模板、类模板

1. 泛型编程 如何实现一个通用的交换函数呢? void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {double temp left;left right;right temp; } void Swap(char& left…

es的聚合查询(二)

1、es常用的聚合查询有三种 桶聚合 指标聚合 管道聚合 首先我们创建一个product的索引,并插入数据 PUT /product {"mappings": {"properties": {"category": { "type": "keyword" },"price": { "…

系统思考—时间滞延

“没有足够的时间是所有管理问题的一部分。”——彼得德鲁克 鱼和熊掌可以兼得,但并不能同时获得。在提出系统解决方案时,我们必须认识到并考虑到解决方案的实施通常会有必要的时间滞延。这种延迟有时比我们预想的要长得多,特别是当方案涉及…

2024年大唐杯备考

努力更新中…… 第一章 网络架构和组网部署 1.1 5G的网络整体架构 5G网络中的中传、回传、前传(这里属于承载网的概念) CU和DU之间是中传 BBU和5GC之间是回传 BBU和AAU之间是前传(这个好记) 这里竟然还藏了MEC(…

golang的MQTT的连接操作

最近在使用golang开发后端服务的时候,因为需要和物联网设备进行数据交互,由于需要终端主动上报数据,也需要平台主动下发指令,所以我们选择了mqtt进行通信。 1、MQTT通信逻辑 MQTT采用的是订阅和发布的方式,数据是通过…

前端大屏适配几种方案

一、方案一:remfont-size 动态设置HTML根字体大小和body字体大小,会使用到lib-flexible.js插件lib-flexible.js (function flexible(window, document) {var docEl document.documentElementvar dpr window.devicePixelRatio || 1// adjust body font…

Element-UI 自定义-下拉框选择年份

1.实现效果 场景表达&#xff1a; 默认展示当年的年份&#xff0c;默认展示前7年的年份 2.实现思路 创建一个新的Vue组件。 使用<select>元素和v-for指令来渲染年份下拉列表。 使用v-model来绑定选中的年份值。 3.实现代码展示 <template><div><el-…

智能革命:未来人工智能创业的天地

智能革命&#xff1a;未来人工智能创业的天地 一、引言 在这个数字化迅速变革的时代&#xff0c;人工智能(AI)已经从一个边缘科学发展成为推动未来经济和社会发展的关键动力。这一技术领域的飞速进步&#xff0c;不仅影响着科技行业的每一个角落&#xff0c;更是为创业者提供了…

创建一个flutter的左划重命名,右划隐藏的功能

首先定义一下参数&#xff0c;以及左划右划的方法 double deleteButtonPosition -120;double renameButtonPosition -120;void _onHorizontalDragUpdate(DragUpdateDetails details) {setState(() {if (details.delta.dx < 0) {// 左滑deleteButtonPosition 0; // 显示删…

【vs2019】window10环境变量设置

【vs2019】window10环境变量设置 【先赞后看养成习惯】求关注点赞收藏&#x1f60a; 安装VS2019时建议默认安装地址&#xff0c;最好不要改动&#xff0c;不然容易出问题 以下是安装完VS2019后环境变量的设置情况&#xff0c;C:\Program Files (x86)\Microsoft Visual Studi…

5.3 mybatis之autoMappingUnknownColumnBehavior作用

文章目录 1. NONE2. WARNING3. FAILING autoMappingUnknownColumnBehavior是< settings >配置下的属性&#xff0c;该属性是指定发现自动映射目标未知列&#xff08;或未知属性类型&#xff09;的行为。就是说当数据库中的字段找不到映射java对象的属性或者与java对象对应…

【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;C❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、类的作用域 二、类的实例化 三、类对象模型 四、this指针 1、this指针的引出 2 this指针的特…

AI python

AI python 软件方面程序上的人工智能&#xff0c;和物理那种能跑机器人没关系

cocos creator 实现spine局部换装

1 使用3.7.4版本 2 js代码 3 c Native层修改源码

为什么你的LDO输出不稳定?

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海。 前一阵朋友和我说当初用某型号LDO时&#xff0c;发现输出异常&#xff0c;仔细阅读datasheet后&#x…