当前位置: 首页 > news >正文

Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作

注:英文引文,机翻未校


在 RHEL/CentOS 系统上使用 YUM history 命令回滚升级操作

作者: 2daygeek
译者: LCTT DarkSun

为服务器打补丁是 Linux 系统管理员的一项重要任务,为的是让系统更加稳定,性能更加优化。厂商经常会发布一些安全/高危的补丁包,相关软件需要升级以防范潜在的安全风险。

Yum (Yellowdog Update Modified) 是 CentOS 和 RedHat 系统上用的 RPM 包管理工具,yum history 命令允许系统管理员将系统回滚到上一个状态,但由于某些限制,回滚不是在所有情况下都能成功,有时 yum 命令可能什么都不做,有时可能会删掉一些其他的包。

我建议你在升级之前还是要做一个完整的系统备份,而 yum history 并不能用来替代系统备份的。系统备份能让你将系统还原到任意时候的节点状态。

某些情况下,安装的应用程序在升级了补丁之后不能正常工作或者出现一些错误(可能是由于库不兼容或者软件包升级导致的),那该怎么办呢?

与应用开发团队沟通,并找出导致库和软件包的问题所在,然后使用 yum history 命令进行回滚。

回滚 / 降级注意事项:

  • 它不支持回滚 selinux,selinux-policy-*,kernel,glibc (以及依赖 glibc 的包,比如 gcc)。
  • 不建议将系统降级到更低的版本(比如 CentOS 6.9 降到 CentOS 6.8),这会导致系统处于不稳定的状态

让我们先来看看系统上有哪些包可以升级,然后挑选出一些包来做实验。

# yum update
Loaded plugins: fastestmirror, security
Setting up Update Process
Loading mirror speeds from cached hostfile
epel/metalink | 12 kB 00:00* epel: mirror.csclub.uwaterloo.ca
base | 3.7 kB 00:00
dockerrepo | 2.9 kB 00:00
draios | 2.9 kB 00:00
draios/primary_db | 13 kB 00:00
epel | 4.3 kB 00:00
epel/primary_db | 5.9 MB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
updates/primary_db | 2.5 MB 00:00
Resolving Dependencies
--> Running transaction check
---> Package git.x86_64 0:1.7.1-8.el6 will be updated
---> Package git.x86_64 0:1.7.1-9.el6_9 will be an update
---> Package httpd.x86_64 0:2.2.15-60.el6.centos.4 will be updated
---> Package httpd.x86_64 0:2.2.15-60.el6.centos.5 will be an update
---> Package httpd-tools.x86_64 0:2.2.15-60.el6.centos.4 will be updated
---> Package httpd-tools.x86_64 0:2.2.15-60.el6.centos.5 will be an update
---> Package perl-Git.noarch 0:1.7.1-8.el6 will be updated
---> Package perl-Git.noarch 0:1.7.1-9.el6_9 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
=================================================================================================Package Arch Version Repository Size
=================================================================================================
Updating:git x86_64 1.7.1-9.el6_9 updates 4.6 Mhttpd x86_64 2.2.15-60.el6.centos.5 updates 836 khttpd-tools x86_64 2.2.15-60.el6.centos.5 updates 80 kperl-Git noarch 1.7.1-9.el6_9 updates 29 k
Transaction Summary
=================================================================================================
Upgrade 4 Package(s)
Total download size: 5.5 M
Is this ok [y/N]: n

你会发现 git 包可以被升级,那我们就用它来实验吧。运行下面命令获得软件包的版本信息(当前安装的版本和可以升级的版本)。

# yum list git
Loaded plugins: fastestmirror, security
Setting up Update Process
Loading mirror speeds from cached hostfile* epel: mirror.csclub.uwaterloo.ca
Installed Packages
git.x86_64 1.7.1-8.el6 @base
Available Packages
git.x86_64 1.7.1-9.el6_9 updates

运行下面命令来将 git1.7.1-8 升级到 1.7.1-9

# yum update git
Loaded plugins: fastestmirror, presto
Setting up Update Process
Loading mirror speeds from cached hostfile* base: repos.lax.quadranet.com* epel: fedora.mirrors.pair.com* extras: mirrors.seas.harvard.edu* updates: mirror.sesp.northwestern.edu
Resolving Dependencies
--> Running transaction check
---> Package git.x86_64 0:1.7.1-8.el6 will be updated
--> Processing Dependency: git = 1.7.1-8.el6 for package: perl-Git-1.7.1-8.el6.noarch
---> Package git.x86_64 0:1.7.1-9.el6_9 will be an update
--> Running transaction check
---> Package perl-Git.noarch 0:1.7.1-8.el6 will be updated
---> Package perl-Git.noarch 0:1.7.1-9.el6_9 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
=================================================================================================Package Arch Version Repository Size
=================================================================================================
Updating:git x86_64 1.7.1-9.el6_9 updates 4.6 M
Updating for dependencies:perl-Git noarch 1.7.1-9.el6_9 updates 29 k
Transaction Summary
=================================================================================================
Upgrade 2 Package(s)
Total download size: 4.6 M
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
Processing delta metadata
Package(s) data still to download: 4.6 M
(1/2): git-1.7.1-9.el6_9.x86_64.rpm | 4.6 MB 00:00
(2/2): perl-Git-1.7.1-9.el6_9.noarch.rpm | 29 kB 00:00
-------------------------------------------------------------------------------------------------
Total 5.8 MB/s | 4.6 MB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running TransactionUpdating : perl-Git-1.7.1-9.el6_9.noarch 1/4Updating : git-1.7.1-9.el6_9.x86_64 2/4Cleanup : perl-Git-1.7.1-8.el6.noarch 3/4Cleanup : git-1.7.1-8.el6.x86_64 4/4Verifying : git-1.7.1-9.el6_9.x86_64 1/4Verifying : perl-Git-1.7.1-9.el6_9.noarch 2/4Verifying : git-1.7.1-8.el6.x86_64 3/4Verifying : perl-Git-1.7.1-8.el6.noarch 4/4
Updated:git.x86_64 0:1.7.1-9.el6_9
Dependency Updated:perl-Git.noarch 0:1.7.1-9.el6_9
Complete!

验证升级后的 git 版本.

# yum list git
Installed Packages
git.x86_64 1.7.1-9.el6_9 @updates
或
# rpm -q git
git-1.7.1-9.el6_9.x86_64

现在我们成功升级这个软件包,可以对它进行回滚了。步骤如下。

使用 YUM history 命令回滚升级操作

首先,使用下面命令获取 yum 操作的 id。下面的输出很清晰地列出了所有需要的信息,例如操作 id、谁做的这个操作(用户名)、操作日期和时间、操作的动作(安装还是升级)、操作影响的包数量。

首先,使用下面命令获取 yum 操作的 id。下面的输出很清晰地列出了所有需要的信息,例如操作 id、谁做的这个操作(用户名)、操作日期和时间、操作的动作(安装还是升级)、操作影响的包数量。

# yum history# yum history list all
Loaded plugins: fastestmirror, presto
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------13 | root | 2017-08-18 13:30 | Update | 212 | root | 2017-08-10 07:46 | Install | 111 | root | 2017-07-28 17:10 | E, I, U | 28 EE10 | root | 2017-04-21 09:16 | E, I, U | 162 EE9 | root | 2017-02-09 17:09 | E, I, U | 20 EE8 | root | 2017-02-02 10:45 | Install | 17 | root | 2016-12-15 06:48 | Update | 16 | root | 2016-12-15 06:43 | Install | 15 | root | 2016-12-02 10:28 | E, I, U | 23 EE4 | root | 2016-10-28 05:37 | E, I, U | 13 EE3 | root | 2016-10-18 12:53 | Install | 12 | root | 2016-09-30 10:28 | E, I, U | 31 EE1 | root | 2016-07-26 11:40 | E, I, U | 160 EE

上面命令显示有两个包受到了影响,因为 git 还升级了它的依赖包 perl-Git。 运行下面命令来查看关于操作的详细信息。

# yum history info 13
Loaded plugins: fastestmirror, presto
Transaction ID : 13
Begin time : Fri Aug 18 13:30:52 2017
Begin rpmdb : 420:f5c5f9184f44cf317de64d3a35199e894ad71188
End time : 13:30:54 2017 (2 seconds)
End rpmdb : 420:d04a95c25d4526ef87598f0dcaec66d3f99b98d4
User : root
Return-Code : Success
Command Line : update git
Transaction performed with:Installed rpm-4.8.0-55.el6.x86_64 @baseInstalled yum-3.2.29-81.el6.centos.noarch @baseInstalled yum-plugin-fastestmirror-1.1.30-40.el6.noarch @baseInstalled yum-presto-0.6.2-1.el6.noarch @anaconda-CentOS-201207061011.x86_64/6.3
Packages Altered:Updated git-1.7.1-8.el6.x86_64 @baseUpdate 1.7.1-9.el6_9.x86_64 @updatesUpdated perl-Git-1.7.1-8.el6.noarch @baseUpdate 1.7.1-9.el6_9.noarch @updates
history info

运行下面命令来回滚 git 包到上一个版本。

# yum history undo 13
Loaded plugins: fastestmirror, presto
Undoing transaction 53, from Fri Aug 18 13:30:52 2017Updated git-1.7.1-8.el6.x86_64 @baseUpdate 1.7.1-9.el6_9.x86_64 @updatesUpdated perl-Git-1.7.1-8.el6.noarch @baseUpdate 1.7.1-9.el6_9.noarch @updates
Loading mirror speeds from cached hostfile* base: repos.lax.quadranet.com* epel: fedora.mirrors.pair.com* extras: repo1.dal.innoscale.net* updates: mirror.vtti.vt.edu
Resolving Dependencies
--> Running transaction check
---> Package git.x86_64 0:1.7.1-8.el6 will be a downgrade
---> Package git.x86_64 0:1.7.1-9.el6_9 will be erased
---> Package perl-Git.noarch 0:1.7.1-8.el6 will be a downgrade
---> Package perl-Git.noarch 0:1.7.1-9.el6_9 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
=================================================================================================Package Arch Version Repository Size
=================================================================================================
Downgrading:git x86_64 1.7.1-8.el6 base 4.6 Mperl-Git noarch 1.7.1-8.el6 base 29 k
Transaction Summary
=================================================================================================
Downgrade 2 Package(s)
Total download size: 4.6 M
Is this ok [y/N]: y
Downloading Packages:
Setting up and reading Presto delta metadata
Processing delta metadata
Package(s) data still to download: 4.6 M
(1/2): git-1.7.1-8.el6.x86_64.rpm | 4.6 MB 00:00
(2/2): perl-Git-1.7.1-8.el6.noarch.rpm | 29 kB 00:00
-------------------------------------------------------------------------------------------------
Total 3.4 MB/s | 4.6 MB 00:01
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running TransactionInstalling : perl-Git-1.7.1-8.el6.noarch 1/4Installing : git-1.7.1-8.el6.x86_64 2/4Cleanup : perl-Git-1.7.1-9.el6_9.noarch 3/4Cleanup : git-1.7.1-9.el6_9.x86_64 4/4Verifying : git-1.7.1-8.el6.x86_64 1/4Verifying : perl-Git-1.7.1-8.el6.noarch 2/4Verifying : git-1.7.1-9.el6_9.x86_64 3/4Verifying : perl-Git-1.7.1-9.el6_9.noarch 4/4
Removed:git.x86_64 0:1.7.1-9.el6_9 perl-Git.noarch 0:1.7.1-9.el6_9
Installed:git.x86_64 0:1.7.1-8.el6 perl-Git.noarch 0:1.7.1-8.el6
Complete!

回滚后,使用下面命令来检查降级包的版本。

# yum list git# rpm -q git
git-1.7.1-8.el6.x86_64

使用YUM downgrade 命令回滚升级

此外,我们也可以使用 YUM downgrade 命令回滚升级。

# yum downgrade git-1.7.1-8.el6 perl-Git-1.7.1-8.el6
Loaded plugins: search-disabled-repos, security, ulninfo
Setting up Downgrade Process
Resolving Dependencies
--> Running transaction check
---> Package git.x86_64 0:1.7.1-8.el6 will be a downgrade
---> Package git.x86_64 0:1.7.1-9.el6_9 will be erased
---> Package perl-Git.noarch 0:1.7.1-8.el6 will be a downgrade
---> Package perl-Git.noarch 0:1.7.1-9.el6_9 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
=================================================================================================Package Arch Version Repository Size
=================================================================================================
Downgrading:git x86_64 1.7.1-8.el6 base 4.6 Mperl-Git noarch 1.7.1-8.el6 base 29 k
Transaction Summary
=================================================================================================
Downgrade 2 Package(s)
Total download size: 4.6 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): git-1.7.1-8.el6.x86_64.rpm | 4.6 MB 00:00
(2/2): perl-Git-1.7.1-8.el6.noarch.rpm | 28 kB 00:00
-------------------------------------------------------------------------------------------------
Total 3.7 MB/s | 4.6 MB 00:01
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running TransactionInstalling : perl-Git-1.7.1-8.el6.noarch 1/4Installing : git-1.7.1-8.el6.x86_64 2/4Cleanup : perl-Git-1.7.1-9.el6_9.noarch 3/4Cleanup : git-1.7.1-9.el6_9.x86_64 4/4Verifying : git-1.7.1-8.el6.x86_64 1/4Verifying : perl-Git-1.7.1-8.el6.noarch 2/4Verifying : git-1.7.1-9.el6_9.x86_64 3/4Verifying : perl-Git-1.7.1-9.el6_9.noarch 4/4
Removed:git.x86_64 0:1.7.1-9.el6_9 perl-Git.noarch 0:1.7.1-9.el6_9
Installed:git.x86_64 0:1.7.1-8.el6 perl-Git.noarch 0:1.7.1-8.el6
Complete!

注意: 你也需要降级依赖包,否则它会删掉当前版本的依赖包而不是对依赖包做降级,因为 downgrade 命令无法处理依赖关系。

至于 Fedora 用户

命令是一样的,只需要将包管理器名称从 yum 改成 dnf 就行了。

# dnf list git
# dnf history
# dnf history info
# dnf history undo
# dnf list git
# dnf downgrade git-1.7.1-8.el6 perl-Git-1.7.1-8.el6

How to display Date and Time in history command

如何在历史记录命令中显示日期和时间

January 20, 2020

We all are familiar with the history command. It stores all the commands executed by bash in the terminal into the .bash_history file, which helps us recheck the previously executed commands for further investigation.

我们都熟悉 history 命令。它将 bash 在终端执行的所有命令存储到 .bash_history 文件中,这将有助于我们重新检查用户之前执行的命令以进行进一步调查。

By default, the history command shows only the commands executed by users and does not print the date and time, although it logs the time when the command was run.

默认情况下,history 命令仅显示用户执行的命令,不会打印日期和时间,但会记录命令运行的时间。

Whenever you run the history command, it looks for an environment variable called HISTTIMEFORMAT, which tells it how to format the date and time with the history command.

每当你运行 history 命令时,它会寻找一个名为 HISTTIMEFORMAT 的环境变量,该变量用于指定如何在 history 命令中格式化日期和时间。

If the value is null or not set, it will show default results, like most systems do (without date and time).

如果该值为空或未设置,则会显示默认结果,就像大多数系统一样(不显示日期和时间)。

HISTTIMEFORMAT takes values from strftime (strftime – convert date and time to a string). When you have date and time in the history command output, it might help you track issues more easily.

HISTTIMEFORMAT 从 strftime(strftime — 将日期和时间转换为字符串)中获取值。当 history 命令的输出中包含日期和时间时,它可以帮助你更轻松地跟踪问题。

  • %T: Replaced by the time (%H:%M:%S).
    %T:替换为时间(%H:%M:%S)。

  • %F: Equivalent to %Y-%m-%d (the ISO 8601:2000 standard date format).
    %F:相当于 %Y-%m-%d(ISO 8601:2000 标准日期格式)。

See below for the default history command output.

请参阅下面的默认 history 命令输出。

# history1  yum install -y mysql-server mysql-client2  service mysqld start3  sysdig proc.name=sshd4  sysdig -c topprocs_net5  sysdig proc.name=sshd6  sysdig proc.name=sshd | more7  sysdig fd.name=/var/log/auth.log | more8  sysdig fd.name=/var/log/mysqld.log9  sysdig -cl10  sysdig -i httplog11  sysdig -i proc_exec_time12  sysdig -i topprocs_cpu13  sysdig -c topprocs_cpu14  sysdig -c tracers_2_statsd15  sysdig -c topfiles_bytes16  sysdig -c topprocs_cpu17  sysdig -c topprocs_cpu "fd.name contains sshd"18  sysdig -c topprocs_cpu "proc.name contains sshd"19  csysdig20  sysdig -c topprocs_cpu21  rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public22  curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo23  yum install -y epel-release24  yum update25  yum makecache26  yum -y install kernel-devel-$(uname -r)27  yum -y install sysdig28  sysdig29  yum install httpd mysql30  service httpd start

We can set this environment variable in three ways based on our requirements.

我们可以根据需求以三种方式设置这个环境变量。

  • Temporarily for the current user
    临时对当前用户生效

  • Permanently for the current user or another user
    永久对当前用户或其他用户生效

  • Permanently for all users
    永久对所有用户生效

Note: Don’t forget to add a space before the last single quote, otherwise the output will be messy.

注意:不要忘记在最后一个单引号之前添加空格,否则输出会很混乱。

Method 1: Temporarily for the Current User

方法 1:临时对当前用户生效

Run the following command to set the HISTTIMEFORMAT variable temporarily for the current user. This setting will be lost after a reboot.

执行以下命令,将 HISTTIMEFORMAT 变量临时设置为当前用户。重启后该设置将失效。

# export HISTTIMEFORMAT='%F %T '

Method 2: Permanently for the Current User

方法 2:永久对当前用户生效

Append the following HISTTIMEFORMAT variable to the .bashrc or .bash_profile file to make it permanent for the current user.

将以下 HISTTIMEFORMAT 变量追加到 .bashrc 或 .bash_profile 文件中,使其对当前用户永久生效。

# echo 'HISTTIMEFORMAT="%F %T "' >> ~/.bashrc

or

# echo 'HISTTIMEFORMAT="%F %T "' >> ~/.bash_profile

Run the following command to apply the changes made to the file.

运行以下命令以使文件中的更改生效。

# source ~/.bashrc

or

# source ~/.bash_profile

Method 3: Permanently for All Users

方法 3:永久对所有用户生效

Append the following HISTTIMEFORMAT variable to the /etc/profile file to make it permanent for all users.

将以下 HISTTIMEFORMAT 变量追加到 /etc/profile 文件中,使其对所有用户永久生效。

# echo 'HISTTIMEFORMAT="%F %T "' >> /etc/profile

Run the following command to apply the changes made to the file.

运行以下命令以使文件中的更改生效。

# source /etc/profile

See the sample output below.

请参阅以下示例输出。

# history1  2017-08-16 15:30:15 yum install -y mysql-server mysql-client2  2017-08-16 15:30:15 service mysqld start3  2017-08-16 15:30:15 sysdig proc.name=sshd4  2017-08-16 15:30:15 sysdig -c topprocs_net5  2017-08-16 15:30:15 sysdig proc.name=sshd6  2017-08-16 15:30:15 sysdig proc.name=sshd | more7  2017-08-16 15:30:15 sysdig fd.name=/var/log/auth.log | more8  2017-08-16 15:30:15 sysdig fd.name=/var/log/mysqld.log9  2017-08-16 15:30:15 sysdig -cl10  2017-08-16 15:30:15 sysdig -i httplog11  2017-08-16 15:30:15 sysdig -i proc_exec_time12  2017-08-16 15:30:15 sysdig -i topprocs_cpu13  2017-08-16 15:30:15 sysdig -c topprocs_cpu14  2017-08-16 15:30:15 sysdig -c tracers_2_statsd15  2017-08-16 15:30:15 sysdig -c topfiles_bytes16  2017-08-16 15:30:15 sysdig -c topprocs_cpu17  2017-08-16 15:30:15 sysdig -c topprocs_cpu "fd.name contains sshd"18  2017-08-16 15:30:15 sysdig -c topprocs_cpu "proc.name contains sshd"19  2017-08-16 15:30:15 csysdig20  2017-08-16 15:30:15 sysdig -c topprocs_cpu21  2017-08-16 15:30:15 rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public22  2017-08-16 15:30:15 curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo23  2017-08-16 15:30:15 yum install -y epel-release24  2017-08-16 15:30:15 yum update25  2017-08-16 15:30:15 yum makecache26  2017-08-16 15:30:15 yum -y install kernel-devel-$(uname -r)27  2017-08-16 15:30:15 yum -y install sysdig28  2017-08-16 15:30:15 sysdig29  2017-08-16 15:30:15 yum install httpd mysql30  2017-08-16 15:30:15 service httpd start

via:

  • How To Use YUM History Command To Rollback An Updates In RHEL/CentOS Systems | 2DayGeek
    https://www.2daygeek.com/rollback-fallback-updates-downgrade-packages-centos-rhel-fedora/

    作者:2daygeek 译者:lujun9972 校对:wxy 本文由 LCTT 原创编译,Linux中国. 荣誉推出 | 2018-01-18 08:47

  • How To Display Date And Time In History Command
    https://www.2daygeek.com/display-date-time-linux-bash-history-command/

相关文章:

Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作

注:英文引文,机翻未校。 在 RHEL/CentOS 系统上使用 YUM history 命令回滚升级操作 作者: 2daygeek 译者: LCTT DarkSun 为服务器打补丁是 Linux 系统管理员的一项重要任务,为的是让系统更加稳定,性能更加…...

JavaScript基础(函数及面向对象)

函数 定义函数 Java定义方法: public 返回值类型 方法名(){ return 返回值 } 定义函数方法一 eg:定义一个绝对值函数 function abs(x) {if (x>0){return x;}else {return -x;}} 调用函数: 注意:一旦执行到return代表函数…...

Open WebUI中的Pipelines是什么

Open WebUI中的Pipelines是什么 Open WebUI中的Pipelines(管道或流水线)是一种允许开发者定制使用大模型流程的机制,能为OpenAI兼容的UI客户端带来模块化、定制化的工作流。以下是一些Pipelines实例及使用方法: 函数调用管道(Function Calling Pipeline) 实例:假设要让…...

伪404兼容huawei生效显示404

根据上述思考,以下是详细的中文分步说明: --- **步骤 1:获取目标设备的User-Agent信息** 首先,我们需要收集目标设备的User-Agent字符串,包括: 1. **iPhone设备的User-Agent**: Mozi…...

Linux 病毒扫描工具 ClamAV 使用

Linux 病毒扫描工具 ClamAV 使用 功能安装包管理器安装手动安装RPM/DEB包配置用户与目录更新病毒库 基本使用命令扫描文件/目录常用参数 高级配置实时监控(clamd服务)定时自动扫描 常见问题解决病毒库更新失败权限错误扫描速度慢 功能 官网:h…...

Mobaxterm服务器常用命令(持续更新)

切换文件夹 cd path # for example, cd /gpu03/deeplearning/进入不同GPU ssh mgmt ssh gpu01 ssh gpu03寻找文件位置 find /path -name file_name #for example, find / -name lib #在根目录下搜寻名为lib文件 #for example, find /home/deeplearning -name "lib"…...

[特殊字符]《封印adb的黑暗通道:让系统文件成为魔法禁书区的终极指南》[特殊字符]

第一章:当adb变成泄密特洛伊木马 "曾经,adb是程序员的阿拉丁神灯,如今却成了产品经理的噩梦!" —— 某秃头CTO的血泪控诉 某日,产品经理惊恐发现:自家黑科技APP竟被竞争对手用adb pull轻松窃取…...

LangChain教程 - RAG - 支持的100种向量数据库

系列文章索引 LangChain教程 - 系列文章 随着人工智能和机器学习应用的快速发展,尤其是在自然语言处理(NLP)、图像识别、推荐系统等领域,对高效的向量存储和检索需求日益增长。向量存储用于保存来自深度学习模型或其他机器学习算…...

如何使用tushare pro获取股票数据——附爬虫代码以及tushare积分获取方式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据 总结 一、Tushare 介绍 Tushare 是一个提供中国股市数据的API接口服务,它允许用户…...

ESP32S3:解决RWDT无法触发中断问题,二次开发者怎么才能使用内部RTC看门狗中断RWDT呢?

目录 基于ESP32S3:解决RWDT无法触发中断问题引言解决方案1. 查看报错日志2. 分析报错及一步一步找到解决方法3.小结我的源码基于ESP32S3:解决RWDT无法触发中断问题 引言 在嵌入式系统中,RWDT(看门狗定时器)是确保系统稳定性的重要组件。然而,在某些情况下,RWDT可能无法…...

如何在视频中提取关键帧?

在视频处理中,提取关键帧是一项常见的任务。下面将介绍如何基于FFmpeg和Python,结合OpenCV库来实现从视频中提取关键帧的功能。 实现思路 使用FFmpeg获取视频的关键帧时间戳:FFmpeg是一个强大的视频处理工具,可以通过命令行获取…...

基于 Python 的电影市场预测分析系统设计与实现(源码 + 文档)

大家好,今天要和大家聊的是一款基于 Python 的“电影市场预测分析”系统的设计与实现。项目源码以及部署相关事宜请联系我,文末附上联系方式。 项目简介 基于 Python 的“电影市场预测分析”系统主要面向以下用户角色:电影制片方、电影发行…...

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题6)-网络部分解析-附详细代码

目录 附录1:拓扑图 附录2:地址规划表 1.SW1 2.SW2 3.SW3 4.SW4 5.VSU 6.SW7 7.R1 8.R2 9.R3 10.AC1 11.AC2 12.EG1 13.EG2 附录1:拓扑图 附录2:地址规划表...

道路三维数字化技术产品方案介绍(软硬件一体,适用于各等级公路)

目录 1、方案介绍2、设备系统简介3、设备系统技术指标4、数据处理软件简介5、数据管理平台简介6、成果展示 1、方案介绍 交通运输部印发《关于推进公路数字化转型加快智慧公路建设发展的意见》,推动公路建设、养护、运营等全流程数字化转型。提出了2027年和2035年的…...

速通HTML

目录 HTML基础 1.快捷键 2.标签 HTML进阶 1.列表 a.无序列表 b.有序列表 c.定义列表 2.表格 a.内容 b.合并单元格 3.表单 a.input标签 b.单选框 c.上传文件 4.下拉菜单 5.文本域标签 6.label标签 7.按钮标签 8.无语义的布局标签div与span 9.字符实体 HTML…...

从 Spring Boot 2 升级到 Spring Boot 3 的终极指南

一、升级前的核心准备 1. JDK 版本升级 Spring Boot 3 强制要求 Java 17 及以上版本。若当前项目使用 Java 8 或 11,需按以下步骤操作: 安装 JDK 17:从 Oracle 或 OpenJDK 官网下载,配置环境变量(如 JAVA_HOME&…...

Java 大视界 —— Java 大数据在智慧能源微电网能量管理中的关键技术(100)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...

springboot实现多文件上传

springboot实现多文件上传 代码 package com.sh.system.controller;import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMap…...

vue自定义指令千分位

问题 开发的时候经常会遇到需要在输入框中输入数字转为千分位,点击填写时又转为数字的情况 解决 因此直接在vue中注入自定义指令,通过使用自定义指令达到效果;限制input输入框只能输入数字和一位小鼠带你 自定义指令-千分位 // 自定义指令-千…...

深入理解Redis:数据类型、事务机制及其应用场景

在当今快速发展的技术领域中,Redis作为一种高性能的内存数据库,已经被广泛应用于各种场景,从简单的缓存实现到复杂的数据处理任务。其灵活性和高效性主要来源于对多种数据结构的支持以及强大的功能特性,如事务处理、持久化选项、高…...

JVM生产环境问题定位与解决实战(三):揭秘Java飞行记录器(JFR)的强大功能

提到飞行记录器,或许你的脑海中并未立刻浮现出清晰的画面,但一说起“黑匣子”,想必大多数人都能恍然大悟,知晓其重要性及用途。在航空领域,黑匣子作为不可或缺的设备,默默记录着飞行过程中的每一项关键数据…...

MongoDB私人学习笔记

俗话说“好记性不如烂笔头”,编程的海洋如此的浩大,养成做笔记的习惯是成功的一步! 此笔记主要是ZooKeeper3.4.9版本的笔记,并且笔记都是博主自己一字一字编写和记录,有错误的地方欢迎大家指正。 一、基础知识&#xf…...

Ant Design按钮样式深度适配:实现<Button>与<a>标签颜色完美同步

Ant Design按钮样式深度适配&#xff1a;实现与标签颜色完美同步 问题现象诊断 组件结构原型 <Button type"link" disabled{disabled}><a href"...">下载</a> </Button>样式冲突表现 状态按钮颜色链接颜色视觉问题启用态Ant蓝…...

linux下软件安装、查找、卸载

目录 常见安装方式有三种&#xff1a; 1.源码安装。 2.rpm安装方式。 3.yum/apt工具级别安装。 对于前两种安装方式&#xff0c;因为软件可能有依赖关系&#xff08;安装的软件依赖于某些库&#xff0c;而这些库又依赖于某些库&#xff0c;这些都需要手动安装&#xff09;…...

鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar)

鸿蒙开发深入浅出01&#xff08;基本环境搭建、页面模板与TabBar&#xff09; 1、效果展示2、下载 DevEco Studio3、创建项目4、新建页面模板5、更改应用信息6、新建以下页面7、Index.ets8、真机运行9、图片资源文件 1、效果展示 2、下载 DevEco Studio 访问官网根据自己的版本…...

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片 根据您的需求&#xff0c;目前需要了解以下几个关键点及分步解决方案&#xff1a; --- 一、现状分析 1. Ollama 的限制&#xff1a; - 目前Ollama主要面向文本大模型&#xff0c;原生不支持直接上传/处理图片 …...

微信小程序源码逆向 MacOS

前言 日常工作中经常会遇到对小程序的渗透测试&#xff0c;微信小程序的源码是保存在用户客户端本地&#xff0c;在渗透的过程中我们需要提取小程序的源码进行问题分析&#xff0c;本篇介绍如何在苹果电脑 MacOS 系统上提取微信小程序的源码。 0x01 微信小程序提取 在苹果电…...

2025年2月科技热点深度解析:AI竞赛、量子突破与开源革命

引言 2025年的科技领域持续呈现爆发式增长&#xff0c;AI大模型竞争白热化、量子计算商业化加速、开源工具生态繁荣成为本月最受关注的议题。本文结合最新行业动态&#xff0c;从技术突破、商业布局到开发者生态&#xff0c;全面解析当前科技热点&#xff0c;为读者提供深度洞…...

Wireshark简单教程

1.打开Wireshark,点击最上面栏目里面的“捕获”中的“选项” 2.进入网卡选择界面,选择需要捕获的选择&#xff0c;这里我选择WLAN 3.双击捕获选择出现下面界面 4.点击如下图红方框即可停止捕获 5.点击下图放大镜可以进行放大 6.你也可以查询tcp报文如下图...

stm32单片机个人学习笔记16(SPI通信协议)

前言 本篇文章属于stm32单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 STM32入门教程-2023版 细…...

面试题——简述Vue 3的服务器端渲染(SSR)是如何工作的?

面试题——简述Vue3的服务器端渲染&#xff08;SSR&#xff09;是如何工作的&#xff1f; 服务器端渲染&#xff08;SSR&#xff09;已经成为了一个热门话题。Vue 3&#xff0c;作为一款流行的前端框架&#xff0c;也提供了强大的SSR支持。那么&#xff0c;Vue 3的SSR究竟是如何…...

Ubuntu 22.04安装K8S集群

以下是Ubuntu 22.04安装Kubernetes集群的步骤概要 一、设置主机名与hosts解析 # Master节点执行 sudo hostnamectl set-hostname "k8smaster" # Worker节点执行 sudo hostnamectl set-hostname "k8sworker1"# 所有节点的/etc/hosts中添加&#xff1a; ca…...

Ubuntu搭建esp32环境 配置打开AT指令集 websocket功能

1&#xff0c;搭建前提 环境搭建参考乐鑫官网给的本地编译 ESP-AT 工程方法 因为公司电脑和网络的特殊性&#xff0c;不能正确解析域名&#xff08;仅在浏览器上可以访问&#xff09; &#xff0c;所以这边访问的时候改成了ssh 未了避免使用外网困难的问题&#xff0c;这里用…...

java八股文-消息队列

一、MQ基础篇 1. 什么是消息队列&#xff1f; 消息队列&#xff08;MQ&#xff09;是分布式系统中实现异步通信的中间件&#xff0c;解耦生产者和消费者。 2. 使用场景有哪些&#xff1f; 异步处理&#xff08;如注册后发送邮件&#xff09;系统解耦&#xff08;不同服务通过…...

[晕事]今天做了件晕事65,gcc,cmake, pragam

文章目录 晕事cmake,unity,对gcc pragma指令有没有影响pragma指令的影响pragma指令的使用规范使用注意事项:晕事 最近在某些不能有优化的函数前加了指令 #pragma GCC optimize ("O0")我记得是这个指令只影响当前编译单元。 但是被人找上来了, 因为这个文件所牵…...

SAP-ABAP:使用ST05(SQL Trace)追踪结构字段来源的步骤

ST05 是 SAP 提供的 SQL 跟踪工具&#xff0c;可以记录程序运行期间所有数据库操作&#xff08;如 SELECT、UPDATE、INSERT&#xff09;。通过分析跟踪结果&#xff0c;可以精准定位程序中结构字段对应的数据库表。 步骤1&#xff1a;激活ST05跟踪 事务码 ST05 → 点击 Activa…...

STM32--SPI通信讲解

前言 嘿&#xff0c;小伙伴们&#xff01;今天咱们来聊聊STM32的SPI通信。SPI&#xff08;Serial Peripheral Interface&#xff09;是一种超常用的串行通信协议&#xff0c;特别适合微控制器和各种外设&#xff08;比如传感器、存储器、显示屏&#xff09;之间的通信。如果你…...

cpu、mem监控

deepseek 1、安装依赖2、psutil库3、streamlit库4、实战4.1 单机CPU和内存使用率监控4.2 多机CPU和内存使用率监控 1、安装依赖 /usr/bin/python3 -m pip install psutil streamlit2、psutil库 psutil是一个跨平台的Python库&#xff0c;用于获取系统使用情况的信息&#xf…...

工程实践中常见的几种设计模式解析及 C++ 实现

工程实践中常见的几种设计模式解析及 C 实现 在软件工程中&#xff0c;设计模式是一种通用的解决方案&#xff0c;用于解决常见问题和优化代码结构。它们通过提供一种规范化的编程思想&#xff0c;帮助开发者写出更高效、可维护和可扩展的代码。本文将介绍几种在工程实践中常见…...

ollama在linux上进行部署——离线安装说明

1. 官网下载ollama压缩包 https://ollama.com/download/ollama-linux-amd64.tgz sudo tar -C /usr -xzf ollama-linux-amd64.tgz #解压安装 2. 添加systemctl服务启动文件 添加服务文件&#xff1a;/etc/systemd/system/ollama.service [Unit] DescriptionOllama …...

(一)趣学设计模式 之 单例模式!

目录 一、啥是单例模式&#xff1f;二、为什么要用单例模式&#xff1f;三、单例模式怎么实现&#xff1f;1. 饿汉式&#xff1a;先下手为强&#xff01; &#x1f608;2. 懒汉式&#xff1a;用的时候再创建&#xff01; &#x1f634;3. 枚举&#xff1a;最简单最安全的单例&a…...

基于无人机遥感的烟株提取和计数研究

一.研究的背景、目的和意义 1.研究背景及意义 烟草作为我国重要的经济作物之一&#xff0c;其种植面积和产量的准确统计对于烟草产业的发展和管理至关重要。传统的人工烟株计数方法存在效率低、误差大、难以覆盖大面积烟田等问题&#xff0c;已无法满足现代烟草种植管理的需求…...

在windows下安装windows+Ubuntu16.04双系统(上)

这篇文章的内容主要来源于这篇文章&#xff0c;给文章很详细的介绍了如何从windows下安装windowsubuntu16.04双系统。我刚开始装双系统都是参照这个方法&#xff0c;该作者前后更新了两个版本&#xff0c;在这里对其稍微进行整理一下。 一、准备&#xff1a;&#xff08;这里推…...

TensorFlow 是一个由 Google 开发的开源机器学习库

TensorFlow 是一个由 Google 开发的开源机器学习库&#xff0c;被广泛应用于深度学习和人工智能领域。它的基本概念包括以下几点&#xff1a; 张量&#xff08;Tensors&#xff09;&#xff1a;在 TensorFlow 中&#xff0c;数据的基本单位是张量&#xff0c;它类似于多维数组或…...

C++ day4 练习

一、练习1 找到第一天mystring练习&#xff0c;实现以下功能&#xff1a; mystring str "hello"; mystring ptr "world"; str str ptr; str ptr; str[0] H; 【代码】&#xff1a; #include <iostream> #include <cstring> #include &l…...

利用机器学习实现实时交易欺诈检测

以下是一个基于Python的银行反欺诈AI应用示例代码,演示如何利用机器学习实现实时交易欺诈检测。该示例使用LightGBM算法训练模型,并通过Flask框架构建实时检测API: python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preproc…...

基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍爬虫数据概览HIve表设计Cars Database Tables 1. cars_data2. annual_sales_volume3. brand_sales_volume4. city_sales_volume5. sales_volume_by_year_and_brand6. sales_distri…...

安宝特科技 | Vuzix Z100智能眼镜+AugmentOS:重新定义AI可穿戴设备的未来——从操作系统到硬件生态,如何掀起无感智能革命?

一、AugmentOS&#xff1a;AI可穿戴的“操作系统革命” 2025年2月3日&#xff0c;Vuzix与AI人机交互团队Mentra联合推出的AugmentOS&#xff0c;被业内视为智能眼镜领域的“iOS时刻”。这款全球首个专为智能眼镜设计的通用操作系统&#xff0c;通过三大突破重新定义了AI可穿戴…...

蓝桥杯之日期题

文章目录 1.蓝桥杯必备知识点2. 题型13.需求2 1.蓝桥杯必备知识点 蓝桥杯是一个面向全国高校计算机相关专业学生的学科竞赛&#xff0c;涵盖多个赛道&#xff0c;常见的有软件类&#xff08;如 C/C 程序设计、Java 软件开发、Python 程序设计&#xff09;和电子类&#xff08;…...

sklearn中的决策树-分类树:实例-分类树在合成数据集上的表现

分类树实例&#xff1a;分类树在合成数据集上的表现 代码分解 在不同结构的据集上测试一下决策树的效果&#xff08;二分型&#xff0c;月亮形&#xff0c;环形&#xff09; 导入 import numpy as np from matplotlib import pyplot as plt from matplotlib.colors import Li…...