Linux系统时间服务——Chrony服务器
文章目录
- Linux系统时间服务——Chrony服务器
- 前言
- 时间同步的重要性
- Linux系统的两种时钟
- 系统时钟(System Clock)
- 相关命令
- 硬件时钟 (RTC - Real Time Clock)
- 相关命令
- Chrony介绍
- NTP
- Chronyc相关命令
- 服务管理相关命令
- chronyc 基本命令
- 时间校正和控制命令
- NTP 时间源管理
- 调试和监控命令
- 日志和事件
- 保存和重启相关操作
- 其他命令
- Chrony相关内容解析
- chrony.conf配置文件解析
- 查看时间源的状态
- chronyc sources输出分析
- 符号含义
- 字段含义
- 查看时间源的详细状态
- chronyc sourcestats输出分析
- 主要字段:
Linux系统时间服务——Chrony服务器
前言
时间同步的重要性
- 由于IT系统中,准确的计时非常重要,有很多种原因需要准确计时:
- 在网络传输中,数据包括和日志需要准确的时间戳
- 各种应用程序中,如订单信息,交易信息等 都需要准确的时间戳
Linux系统的两种时钟
系统时钟(System Clock)
- 系统时钟是操作系统运行时维护的时间,通常是从硬件时钟读取的,并在运行时不断更新
- 系统时钟的时间是由操作系统内核管理的,计时基于 CPU 的时钟周期。
- 系统时间是相对的,系统重启后将重置为硬件时钟的时间
- 系统时钟在计算时区、时间同步和系统调度等方面起着关键作用
相关命令
date #查看系统时间
date -s "YYYY-MM-DD HH:MM:SS" #设置系统时间
硬件时钟 (RTC - Real Time Clock)
- 硬件时钟写入主板的BIOS程序,是主板上独立的时钟芯片,由主板的电池供电(通常是 CMOS 电池),即使系统断电或关机,它也能保持计时
- 主要作用是在系统开机时提供一个基础的时间,系统启动后通常会从硬件时钟读取当前时间,初始化系统时钟
相关命令
hwclock --show #查看硬件时钟时间
hwclock --set --date="YYYY-MM-DD HH:MM:SS" #设置硬件时钟
hwclock --systohc #将系统时间写入硬件时钟
Chrony介绍
- chrony是一个开源的自由软件,它能帮助你保持系统时钟与时钟服务器(NTP)同步,因此让你的时间保持精确。
- chrony由两个程序组成,分别是chronyd和chronyc
- chronyd:是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。
- chronyc:提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作
- 注意:Chrony与NTP都是时间同步软件,两个软件不能够同时开启,会出现时间冲突,openeuler中默认使用chrony作为时间服务器,不再支持NTP软件包
NTP
- NTP:(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。
- NTP基于UDP报文进行传输,使用的UDP端口号为123
- NTP可以对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使设备能够提供基于统一时间的多种应用,对于运行NTP的本地系统,既可以接受来自其他时钟源的同步,又可以作为时钟源同步其他的时钟,并且可以和其他设备互相同步。
- NTP的其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms
Chronyc相关命令
服务管理相关命令
systemctl start chronyd #启动 Chrony 服务systemctl stop chronyd #停止 Chrony 服务systemctl restart chronyd #重启 Chrony 服务systemctl status chronyd #检查 Chrony 服务状态
chronyc 基本命令
chronyc sources #检查时间源的状态显示 NTP 时间源的基本信息(例如,阶层、偏移量和可达性)。chronyc sourcestats #查看时间源的详细统计信息提供每个时间源的详细同步性能统计数据,如偏移标准差、频率误差等。chronyc -a makestep #强制系统时间与 NTP 服务器同步如果系统时间与服务器时间偏差过大,使用此命令可立即进行时间同步(跳步调整)。chronyc tracking #显示同步状态显示系统的当前时间跟踪状态,包括系统的时间偏移、频率漂移等。chronyc activity -v #检查时间源活动情况显示所有时间源的当前活动状态,如在线、离线、突发模式等。chronyc hwclock #设置系统时钟与硬件时钟同步将当前的系统时钟时间写入硬件时钟 (RTC)。chronyc enable <source> #启用某个时间源chronyc disable <source> #禁用某个时间源
时间校正和控制命令
chronyc adjtime <time> #调节时间手动调整系统时钟的偏移,`<time>` 为调整的时间(单位为秒)。chronyc makestep #跳步调整时间使用该命令将系统时间立即与 NTP 服务器的时间同步,而不是通过逐渐调整。
NTP 时间源管理
chronyc add server <server_name> iburst #添加新的 NTP 服务器添加一个新的 NTP 服务器到 Chrony 配置中,并立即进行时间同步(`iburst` 选项用于快速同步)。chronyc delete server <server_name> #删除 NTP 服务器chronyc reload sources #刷新 NTP 服务器列表重新加载时间源配置文件,更新时间源列表。
调试和监控命令
chronyc ntpdata #查看 NTP 源的偏移统计数据显示每个时间源的原始 NTP 数据,如延迟、偏移、抖动等。chronyc -a tracking #查看系统时钟与 NTP 服务器的偏差chronyc rtcdata #检查时间源的计时特性显示硬件时钟的相关信息(RTC),包括漂移和同步状态。chronyc -a manualcorr <offset_in_seconds> #查看当前的偏移量(毫秒级)手动调整系统时钟的偏移,偏移量可以是正负的时间差。
日志和事件
journalctl -u chronyd #显示 Chrony 守护进程的日志查看 Chrony 服务的运行日志和时间同步情况
保存和重启相关操作
chronyc hwclock --systohc #将当前系统时间保存到硬件时钟将系统时间写入 RTC 硬件时钟,确保关机后时间保持正确。chronyc reload #重新加载 Chrony 配置当配置文件(例如 `/etc/chrony.conf`)更改后,使用此命令使修改生效。
其他命令
chronyc lastsync #查看 NTP 源的最后偏移时间显示系统最近一次同步的时间和偏移值。chronyc estimate #检查系统时间和 NTP 源时间的精确度估计系统时间和 NTP 服务器时间之间的偏差。
Chrony相关内容解析
chrony.conf配置文件解析
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
'pool 2.rhel.pool.ntp.org iburst- 使用 `rhel`(Red Hat Enterprise Linux)特定的 NTP 服务器池
- `iburst` 选项表示在连接服务器失败时,客户端会快速发送一组请求以尽快获取响应。这有助于加快初次同步的速度。
# Use NTP servers from DHCP.
'sourcedir /run/chrony-dhcp- 该设置允许 Chrony 从 DHCP 分配的 NTP 服务器列表中获取时间源。如果 DHCP 服务器提供了 NTP 服务器信息,它会被自动使用。
- `sourcedir` 选项指示 Chrony 自动加载从指定目录中找到的 NTP 服务器配置。
# Record the rate at which the system clock gains/losses time.
'driftfile /var/lib/chrony/drift- 这个文件记录系统时钟的漂移速率。Chrony 会根据这个文件的内容调整时钟,以提高长期时间同步的准确性。
- 通过记录系统时钟的增减变化,Chrony 可以更好地在不依赖外部时间源的情况下维持系统时钟的准确性。
# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
'makestep 1.0 3
- 这允许在系统启动或 Chrony 启动后的前三次时间更新中,如果系统时钟与 NTP 服务器的时间差超过 1 秒,直接“跳步”同步(即一次性纠正时间)。
- 在前三次更新后,Chrony 通常只会逐渐调整系统时钟,而不进行大幅度的跳步调整。
# Enable kernel synchronization of the real-time clock (RTC).
'rtcsync- 启用这个选项后,Chrony 会将系统时间同步到硬件时钟(RTC,Real-Time Clock),确保系统重启时仍能保持较为准确的时间。
# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *- 这是一个可选的配置,用于启用网络接口的硬件时间戳功能,以提高时间同步的精度。如果网络接口支持该功能,开启硬件时间戳有助于更精确地记录时间。
- 由于它被注释掉(`#`),此时它没有生效。你可以取消注释来启用它。
# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2- **作用**:如果启用,`minsources` 指定系统需要从至少 **2** 个 NTP 服务器接收到时间数据后,才会调整系统时钟。
- **注释掉表示**:没有强制要求多个 NTP 服务器。
# Allow NTP client access from local network.
#allow 192.168.0.0/16- **作用**:允许 IP 范围 `192.168.0.0/16` 的客户端连接到此 Chrony 服务器进行时间同步。如果取消注释,它将允许来自该 IP 地址范围的设备连接。
- **注释掉表示**:默认情况下,不允许本地网络的客户端访问 NTP 服务。
# Serve time even if not synchronized to a time source.
#local stratum 10- **作用**:如果启用,当 Chrony 没有同步到任何外部时间源时,它会根据自身的系统时钟提供时间,成为一个 **本地时间源**,其阶层(Stratum)值设为 10。阶层值较高表示该时间源不太可靠。
- **注释掉表示**:Chrony 不会在未同步到外部时间源时提供时间。
# Require authentication (nts or key option) for all NTP sources.
#authselectmode require- **作用**:如果启用,Chrony 将要求对所有 NTP 源进行身份验证。`nts`(Network Time Security)或 `key` 选项可以用来验证 NTP 服务器的身份,以确保时间来源的可靠性。
- **注释掉表示**:没有强制身份验证。
# Specify file containing keys for NTP authentication.
'keyfile /etc/chrony.keys- **作用**:指定用于 NTP 身份验证的密钥文件的路径。Chrony 使用此文件中的密钥来验证和加密 NTP 服务器之间的通信。
- **默认启用**:需要身份验证时,该文件存储了 NTP 客户端和服务器之间共享的密钥。
# Save NTS keys and cookies.
'ntsdumpdir /var/lib/chrony- **作用**:指定保存 NTS(Network Time Security)密钥和 cookies 的目录路径。NTS 是一种增强 NTP 安全性的协议,防止攻击者伪造时间源。
- **默认启用**:存储 NTS 的临时文件。
# Insert/delete leap seconds by slewing instead of stepping.
#leapsecmode slew- **作用**:启用后,Chrony 会通过**调节(slew)**的方式插入或删除闰秒,而不是突然调整时间(即步进)。调节是逐渐调整时钟速度,而不是一次性跳跃。
- **注释掉表示**:Chrony 默认为**步进**模式来处理闰秒。
# Get TAI-UTC offset and leap seconds from the system tz database.
'leapsectz right/UTC- **作用**:Chrony 使用系统的 `tz`(时区)数据库来获取 TAI-UTC 偏移和闰秒信息,确保系统时钟与全球标准时间保持同步。`right/UTC` 是一种更精确的时区处理方法,跟踪闰秒。
- **启用状态**:Chrony 将从时区数据库中获取相关信息。
# Specify directory for log files.
'logdir /var/log/chrony- **作用**:指定 Chrony 的日志文件保存路径,默认路径为 `/var/log/chrony`。
- **启用状态**:日志文件存储在 `/var/log/chrony` 目录中。
# Select which information is logged.
#log measurements statistics tracking- **作用**:启用后,Chrony 会记录有关时间同步的各种详细信息,如测量值、统计数据、跟踪信息等。
- **注释掉表示**:不会记录这些详细的日志信息。
查看时间源的状态
[root@localhost ~]# chronyc sources -v.-- Source mode '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- makaki.miuku.net 3 9 157 295 +18ms[ +19ms] +/- 75ms
^- ntp.wdc2.us.leaseweb.net 2 9 377 235 +2844us[+3923us] +/- 238ms
^+ ntp5.flashdance.cx 2 9 377 744 +27ms[ +28ms] +/- 164ms
^* tock.ntp.infomaniak.ch 1 9 377 36 +1574us[+2677us] +/- 90ms
chronyc sources输出分析
符号含义
- M:服务器模式
- S:服务器状态
符号 | 含义 |
---|---|
^ | 服务器 |
= | 对等体 |
# | 本地时钟 |
* | 当前最佳的时间源 |
+ | 次级最佳,与最佳组合使用,但不是主要时间源 |
- | 能使用但未组合使用的时间源 |
x | 可能出现错误(与大多数有较大差异)的时间源 |
~ | 波动较大的时间源 |
? | 断开链接,无法使用的时间源 |
字段含义
- Name/IP address:该字段显示时间源的域名或 IP 地址
- Stratum: NTP 时间服务器的阶层(Stratum)表示时间源离真实时间源的距离,数字越小越接近时间源。
Stratum 1
:直接从一个精确的硬件时钟(如 GPS、原子钟)获取时间。Stratum 2
:从Stratum 1
的服务器获取时间,以此类推 - Poll: 这是时间源的轮询间隔,以 2 的幂次表示(单位为秒)。例如,
Poll
值为9
,表示轮询间隔为 2^9=512 秒。 所有服务器的轮询间隔都是9
,即每 512 秒轮询一次。chronyd会根据当时的情况自动改变轮询频率。 - Reach : 这是一个八进制值,表示最近对该时间源的连接状态。该值范围是 0 到 377(八进制),其中 377 表示最近八次尝试都成功连接到该源。
- LastRx : 表示上一次从该时间源成功接收到时间样本的时间,单位是秒。例如:
tock.ntp.infomaniak.ch
的 LastRx 值为36
,表示 36 秒前接收到时间样本。makaki.miuku.net
的 LastRx 值为295
,接收到样本的时间稍长。 - Last sample: Last Sample 列显示最近一次从时间源接收到的时间样本的偏移量、测量的偏移量和估算误差:经过chroncy调整过的偏差[实际系统时钟与时间源之间测得的偏移量]。(
+/- zzzz
):表示偏移估计的误差范围。数值越小,时间同步越准确,+便宜表示系统时钟比时间源快
查看时间源的详细状态
chronyc sourcestats输出分析
[root@localhost ~]# chronyc sourcestats -v.- Number of sample points in measurement set./ .- Number of residual runs with same sign.| / .- Length of measurement set (time).| | / .- Est. clock freq error (ppm).| | | / .- Est. error in freq.| | | | / .- Est. offset.| | | | | | On the -.| | | | | | samples. \| | | | | | |
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
==============================================================================
makaki.miuku.net 3 3 130 -159.586 95588.516 -17ms 14ms
ntp.wdc2.us.leaseweb.net 4 3 195 +22.966 457.776 +5844us 2219us
ntp5.flashdance.cx 3 3 194 +14.040 3093.718 +113us 659us
tock.ntp.infomaniak.ch 4 4 195 -49.956 969.404 -13ms 3592us
主要字段:
- NP:测量集中样本点的数量,表示从该时间源收集到的时间样本数。
- NR:残差的数量,表示具有相同符号的连续测量点的数量,数字越高表示波动越小
- Span:测量集的时间跨度,显示从该时间源收集数据的总时间。
- Frequency:估算的时钟频率误差(ppm),反映系统时钟的漂移,+表示系统实践比时间源快
- Freq Skew:频率偏差,表明频率测量的不确定性,数字越小稳定性越高
- Offset:时间偏移量,表示系统时间与该时间源的时间差,+表示系统实践比时间源快
- Std Dev:标准偏差,表示时间同步的精度,数值越小表示同步约精确及稳定
相关文章:
Linux系统时间服务——Chrony服务器
文章目录 Linux系统时间服务——Chrony服务器前言时间同步的重要性Linux系统的两种时钟系统时钟(System Clock)相关命令硬件时钟 (RTC - Real Time Clock)相关命令 Chrony介绍NTP Chronyc相关命令服务管理相关命令chronyc 基本命令时间校正和控制命令NTP…...
C# 接口(Interface)
C# 接口(Interface) 接口在C#中是一种非常重要的概念,它定义了一个约定,实现该接口的类必须遵循这个约定。接口可以包含方法、属性、事件和索引器,但不包含实现。这使得接口成为定义抽象行为的理想选择。在本文中&…...

《高频电子线路》—— 电容三端LC振荡器
文章内容来源于【中国大学MOOC 华中科技大学通信(高频)电子线路精品公开课】,此篇文章仅作为笔记分享。 电容三端LC振荡器 基本原理(考毕兹电路) 反馈电压从C2上取得,作为输入电压,形成正反馈&a…...

leetcode35.搜索插入位置
1)题目描述: 2)本题要求使用 时间复杂度O(log n)的算法,这里使用二分查找的方法,这道题本身不复杂,但是,在使用递归调用时,笔者经常把递归结束的边界搞错,这里给出几版代…...

Redis全系列学习基础篇之位图(bitmap)常用命令的解析
文章目录 描述常用命令及解析常用命令解析 应用场景统计不确定时间周期内用户登录情况思路分析实现 统计某一特定时间内活跃用户(登录一次即算活跃)的数量思路分析与实现 描述 bitmap是redis封装的用于针对位(bit)的操作,其特点是计算效率高,占用空间少,常被用来统计…...

Copilot功能
Copilot 1、简介:Copilot是由GitHub与OpenAI共同开发的一款AI编程助手,旨在帮助开发者提高工作效率,改善代码质量。 2、主要功能包括: 1.代码补全:Copilot可以在开发者编写代码时提供代码建议,包括函数、循…...
《GBDT 算法的原理推导》 11-13初始化模型 公式解析
本文是将文章《GBDT 算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 公式(11-13)是GBDT算法的第一步,它描述了如何初始化模型。公式如下: f 0 ( x ) arg min c ∑ i 1 N L ( y i , c ) f_0(x) \arg \m…...

# Easysearch 与 LLM 融合打造高效智能问答系统
LangChain通过提供统一的抽象层和丰富的工具,极大地简化了LLM应用程序的开发过程,使得开发者能够更加专注于业务逻辑。RAG技术则通过索引和检索生成两步流程,利用最新数据或私有数据作为背景信息来增强大模型的推理能力。然而,对于…...

本地可以插入表记录,生产不能插入表记录
先说解决方案: 切面没有注入容器,在切面这加上Component详情: 大致是这样一个方法,本地运行会插入数据到sys_log表,但部署到服务器上就不会插入,而服务部署三年多了,一个表一直是空的居然没人…...

11.Three.js使用indexeddb前端缓存模型优化前端加载效率
11.Three.js使用indexeddb前端缓存模型优化前端加载效率 1.简述 在使用Three.js做数字孪生应用场景时,我们常常需要用到大量模型或数据。在访问我们的数字孪生应用时,每次刷新都需要从web端进行请求大量的模型数据或其他渲染数据等等,会极大…...
功能测试:方法、流程与工具介绍
功能测试是对产品的各功能进行验证的一种测试方法,旨在确保软件以期望的方式运行并满足设计需求。以下是对功能测试的详细解释: 一、定义与目的 定义:功能测试(Functional Testing),也称为行为测试&#…...
【Orange Pi 5 Linux 5.x 内核编程】-设备驱动中的sysfs
设备驱动中的sysfs 文章目录 设备驱动中的sysfs1、sysfs介绍2、内核对象(kobject)介绍3、设备驱动中的SysFS31 在/sys中创建目录3.2 创建sysfs文件3.2.1 创建属性3.2.2 创建sysfs文件4、驱动程序实现5、驱动验证1、sysfs介绍 sysfs是内核导出的虚拟文件系统,类似于/proc。sys…...
微信小程序-全局数据共享/页面间通信
一.全局数据共享 声明全局的变量,在app.js文件里 App({//全局共享的数据globalData:{token:},//设置全局数据setToken(token){this.globalData.tokentoken}})使用 getApp() 获取全局App实例 //返回全局唯一的APP实例 const appInstancegetApp()Page({login(){con…...

java计算机毕设课设—Java聊天室(附源码、文章、相关截图、部署视频)
这是什么系统? 资源获取方式再最下方 java计算机毕设课设—Java聊天室(附源码、文章、相关截图、部署视频) Java聊天室系统是一个基于Java语言开发的在线即时通讯平台,旨在为用户提供一个简单、易用的实时交流环境。该系统支持多用户同时在线交流&…...
图像识别基础认识
import numpy as np import pandas as pd import matplotlib.pyplot as plt import cv2 %matplotlib inline读取图像 img = cv2.imread(shuzi.png) # 显示图像 cv2.imshow(shuzi, img) # 设置窗口大小 #cv2.resizeWindow(shuzi, 800, 600) # 设置宽为800,高为600 cv2.waitKe…...
使用 OpenCV 读取和显示图像与视频
概述 OpenCV 是一个强大的计算机视觉库,广泛应用于图像处理和视频处理等领域。本文将详细介绍如何使用 OpenCV 在 Python 中读取和显示图像以及视频,并通过具体的代码示例来展示整个过程。 环境准备 在开始之前,请确保已经安装了 OpenCV 库…...
【1】Elasticsearch 30分钟快速入门
文章目录 一、Elasticsearch 基本概念及工作原理(一)基本概念(二)工作原理二、Elasticsearch 原生 RESTful 方式的增删改查(一)创建索引(二)插入文档(三)查询文档(四)更新文档(五)删除文档(六)删除索引三、Python SDK 实现增删改查(一)安装 Elasticsearch Py…...

教材管理系统设计与实现
教材管理系统设计与实现 1. 系统概述 教材管理系统是一个基于PHP和SQL的Web应用程序,旨在为学校提供一个高效的教材管理平台。该系统可以帮助管理员录入教材信息、教师查询和申请教材、学生查询教材信息,提高教材管理的效率和透明度。 2. 技术栈 前端…...

软考(中级-软件设计师)数据库篇(1101)
第6章 数据库系统基础知识 一、基本概念 1、数据库 数据库(Database ,DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和扩展…...

安装nscd及glibc包冲突降级【centos7】
安装nscd及glibc包冲突降级【centos7】 一、查看当前glibc版本二、查找可用的glibc版本三、备份系统和数据四、降级glibc五、验证降级是否成功六、解决其他依赖问题七、测试和验证八、考虑使用容器技术endl [08:41:07 rootcentos7 ~]# yum -y install nscd Loaded plugins: fas…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...