linux指令能回滚么,如何在Ubuntu上撤消或回滚“ apt-get upgrade”命令?

我今天必须在Debian系统上执行此操作。首先,我确定了有问题的升级发生的时间范围,并检索了给出升级包的新旧版本号的日志条目:

$ awk '$1=="2016-03-20" && $3=="upgrade"' /var/log/dpkg.log

2016-03-20 16:58:22 upgrade libwebkitgtk-3.0-0:amd64 2.4.9-3 2.4.10-1

2016-03-20 16:58:24 upgrade libjavascriptcoregtk-3.0-0:amd64 2.4.9-3 2.4.10-1

2016-03-20 16:58:26 upgrade traceroute:amd64 1:2.0.22-1 1:2.1.0-1

2016-03-20 16:58:33 upgrade ethtool:amd64 1:4.2-1 1:4.5-1

2016-03-20 16:58:34 upgrade libsdl1.2debian:amd64 1.2.15+dfsg1-3 1.2.15+dfsg1-4

2016-03-20 16:58:34 upgrade subversion:amd64 1.9.3-2+b1 1.9.3-3

2016-03-20 16:58:36 upgrade libsvn1:amd64 1.9.3-2+b1 1.9.3-3

2016-03-20 16:58:56 upgrade linux-image-amd64:amd64 4.3+70 4.4+71

2016-03-20 16:58:56 upgrade linux-libc-dev:amd64 4.3.5-1 4.4.6-1

2016-03-20 16:59:03 upgrade amd64-microcode:amd64 2.20141028.1 2.20160316.1

接下来,我尝试在磁盘上找到仍在缓存的软件包文件(幸运的是,我没有运行autoclean):

$ awk '$1=="2016-03-20" && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld

ls: cannot access '/var/cache/apt/archives/ethtool_1%3a4.2-1_amd64.deb': No such file or directory

-rw-r--r-- 1 root root 28820 Dec 18 2014 /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb

-rw-r--r-- 1 root root 1978874 Dec 10 18:22 /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb

-rw-r--r-- 1 root root 185006 Mar 12 00:41 /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb

-rw-r--r-- 1 root root 1317644 Mar 3 11:30 /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb

-rw-r--r-- 1 root root 7679400 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb

-rw-r--r-- 1 root root 6108 Dec 14 06:59 /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb

-rw-r--r-- 1 root root 1075506 Feb 7 21:36 /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb

-rw-r--r-- 1 root root 983174 Mar 3 11:30 /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb

-rw-r--r-- 1 root root 53376 Feb 28 18:35 /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb

出于某种原因,我似乎没有较旧的ethtool软件包。尽管如此,让我们继续通过强制安装较早的软件包文件来进行操作:

$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb

dpkg: warning: downgrading amd64-microcode from 2.20160316.1 to 2.20141028.1

(Reading database ... 139632 files and directories currently installed.)

Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...

Unpacking amd64-microcode (2.20141028.1) over (2.20160316.1) ...

dpkg: warning: downgrading libjavascriptcoregtk-3.0-0:amd64 from 2.4.10-1 to 2.4.9-3

Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...

Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.10-1) ...

dpkg: warning: downgrading libsdl1.2debian:amd64 from 1.2.15+dfsg1-4 to 1.2.15+dfsg1-3

Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...

Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-4) ...

dpkg: warning: downgrading libsvn1:amd64 from 1.9.3-3 to 1.9.3-2+b1

Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...

Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-3) ...

Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...

Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...

dpkg: warning: downgrading linux-image-amd64 from 4.4+71 to 4.3+70

Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...

Unpacking linux-image-amd64 (4.3+70) over (4.4+71) ...

dpkg: warning: downgrading linux-libc-dev:amd64 from 4.4.6-1 to 4.3.5-1

Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...

Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.4.6-1) ...

dpkg: warning: downgrading subversion from 1.9.3-3 to 1.9.3-2+b1

Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...

Unpacking subversion (1.9.3-2+b1) over (1.9.3-3) ...

dpkg: warning: downgrading traceroute from 1:2.1.0-1 to 1:2.0.22-1

Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...

Unpacking traceroute (1:2.0.22-1) over (1:2.1.0-1) ...

Setting up amd64-microcode (2.20141028.1) ...

update-initramfs: deferring update (trigger activated)

amd64-microcode: microcode will be updated at next boot

Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...

Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...

Setting up libsvn1:amd64 (1.9.3-2+b1) ...

dpkg: dependency problems prevent configuration of libwebkitgtk-3.0-0:amd64:

libwebkitgtk-3.0-0:amd64 depends on libwebkitgtk-3.0-common (>= 2.4.9); however:

Package libwebkitgtk-3.0-common is not installed.

dpkg: error processing package libwebkitgtk-3.0-0:amd64 (--install):

dependency problems - leaving unconfigured

Setting up linux-image-amd64 (4.3+70) ...

Setting up linux-libc-dev:amd64 (4.3.5-1) ...

Setting up subversion (1.9.3-2+b1) ...

Setting up traceroute (1:2.0.22-1) ...

update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode

update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode

update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode

update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode

Processing triggers for libc-bin (2.22-3) ...

Processing triggers for man-db (2.7.5-1) ...

Processing triggers for initramfs-tools (0.123) ...

update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64

Errors were encountered while processing:

libwebkitgtk-3.0-0:amd64

如错误消息所述,我的一个软件包在升级之前就依赖于-common软件包,但是升级将其删除(并且apt-get找不到了)。幸运的是,它的软件包文件仍在/ var / cache / apt中,因此我可以将其添加到列表中,然后重试:

$ ls -ld /var/cache/apt/archives/libwebkitgtk-3.0-common*

-rw-r--r-- 1 root root 452278 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb

$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb

(Reading database ... 139632 files and directories currently installed.)

Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...

Unpacking amd64-microcode (2.20141028.1) over (2.20141028.1) ...

Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...

Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...

Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...

Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-3) ...

Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...

Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-2+b1) ...

Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...

Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...

Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...

Unpacking linux-image-amd64 (4.3+70) over (4.3+70) ...

Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...

Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.3.5-1) ...

Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...

Unpacking subversion (1.9.3-2+b1) over (1.9.3-2+b1) ...

Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...

Unpacking traceroute (1:2.0.22-1) over (1:2.0.22-1) ...

Selecting previously unselected package libwebkitgtk-3.0-common.

Preparing to unpack .../libwebkitgtk-3.0-common_2.4.9-3_all.deb ...

Unpacking libwebkitgtk-3.0-common (2.4.9-3) ...

Setting up amd64-microcode (2.20141028.1) ...

update-initramfs: deferring update (trigger activated)

amd64-microcode: microcode will be updated at next boot

Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...

Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...

Setting up libsvn1:amd64 (1.9.3-2+b1) ...

Setting up linux-image-amd64 (4.3+70) ...

Setting up linux-libc-dev:amd64 (4.3.5-1) ...

Setting up subversion (1.9.3-2+b1) ...

Setting up traceroute (1:2.0.22-1) ...

update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode

update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode

update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode

update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode

Setting up libwebkitgtk-3.0-common (2.4.9-3) ...

Setting up libwebkitgtk-3.0-0:amd64 (2.4.9-3) ...

Processing triggers for libc-bin (2.22-3) ...

Processing triggers for man-db (2.7.5-1) ...

Processing triggers for initramfs-tools (0.123) ...

update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64

成功!实际上,这并不能解决我的问题。但是它成功降级了软件包QED。

Linux 中并没有直接的“回滚命令,类似于 Windows 中的 `undo` 或 `rollback` 这样的操作。然而,Linux 提供了一些机制可以帮助你在系统配置、软件安装或更新过程中遇到问题时恢复到之前的状态。 1. **apt-get** (Debian/Ubuntu 系统):如果你使用的是 apt 或 dpkg 管理包,可以尝试通过 `sudo apt-get install -d package-name` 安装软件时不立即安装,然后用 `sudo apt-get remove package-name` 删除,再用 `sudo apt-get autoremove` 清除残留文件。如果想要撤销特定版本的升级,可以用 `sudo apt-mark hold package-name` 将它标记为保持当前状态,接着 `sudo apt-get upgrade` 即不会自动升级该软件。 2. **yum/dnf** (RPM 系统):对于 yum 和 dnf,你可以通过 `yum history undo` 或 `dnf history redo` 来查看和操作历史记录,但不像 apt 那样可以直接回滚到某个特定版本。 3. **rsync**:如果你定期备份文件系统,可以使用 rsync 的 `--reverse` 参数将目录恢复到备份时间点。 4. **System Restore Point** (某些发行版):虽然不是所有 Linux 发行版都支持,一些桌面环境如 Ubuntu 可能提供了类似的功能,允许创建和恢复系统还原点。 请注意,手动操作可能涉及对系统的深入理解,而且并非总是万无一失,因此在进行重要更改前,务必做好充足的备份工作。如果有误操作导致严重问题,通常需要通过系统还原盘或其他专门的救援工具来解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值