【问题标题】:How can I uninstall the last installed application (recently installed) with dpkg?如何使用 dpkg 卸载上次安装的应用程序(最近安装的)?
【发布时间】:2011-10-25 17:30:52
【问题描述】:

我需要使用命令和/或脚本来卸载最近安装的应用程序 deb 。在这种情况下,我不能使用 apt-get ,而是使用 dpkg --purge 或类似的东西,例如 dpkg --remove (最近安装的应用程序),但不提供应用程序的名称。

谢谢

【问题讨论】:

    标签: linux ubuntu debian deb dpkg


    【解决方案1】:
    ls -tl /var/lib/dpkg/info/*.list | head -n 1 | awk '{print $8}' | xargs -n1 basename | sed -e "s/.list//"
    

    ls -tl /var/lib/dpkg/info/*.list : 给你按日期排序的包列表

    head -n 1 : 给你第一个项目

    awk '{print $8}' :为您提供完整路径文件名

    xargs -n1 basename : 给出文件名,比如 curl.list

    sed -e "s/.list//" |给你包名

    【讨论】:

    • 这很有用 ls -tl /var/lib/dpkg/info/* |头-n 1 | sed -e "s/.list//" -rw-r--r-- 1 root root 1568 Oct 25 21:34 /var/lib/dpkg/info/ttf-droid
    • 但我只想返回字符串的结尾,应用程序的名称,获取“ttf-droid”并将其保存在变量中,例如
    • LAST_PACKAGE=ls -tl /var/lib/dpkg/info/*.list | head -n 1 | awk '{print $8}' | xargs -n1 basename | sed -e "s/.list//" echo $LAST_PACKAGE 现在你有了一个变量。
    • awk 可以做headbasename 可以删除后缀,但如果没有ls-l 选项,则不需要awk。最后一条评论中的语法是错误的,可能是因为标记吃掉了反引号。试试LAST_PACKAGE=$(ls -t /var/lib/dpkg/info/*.list | sed -e 's%.*/%%' -e 's%\.list$%%' -ep -eq); echo $LAST_PACKAGE
    • 在 ruby​​ 中,我找到了这个解决方案 package = %x[ls -tl /var/lib/dpkg/info/* |头-n 1 | sed -e "s/.list//" | awk '{打印 $9}' | sed -e "s/........//"] ,target = package.to_s.strip 最后是 system ("dpkg --purge #{target }")
    【解决方案2】:

    查找最后安装的包相对简单。这是 /var/lib/pkg/info 中的最新条目。

    但是,卸载它不一定会将系统恢复到之前的状态。

    安装一个包也会安装它的所有依赖项。因此,要真正撤消安装,您还需要撤消这些依赖项。您可以看到“libfoo”与“appbar”几乎同时更新。但是,信息文件不会告诉您之前的状态是不是“libfoo”,还是只是旧版本的“libfoo”。

    【讨论】:

    • 这很有用 ls -tl /var/lib/dpkg/info/* |头-n 1 | sed -e "s/.list//" -rw-r--r-- 1 root root 1568 Oct 25 21:34 /var/lib/dpkg/info/ttf-droid 但我只想返回结尾字符串,应用程序的名称,获取“ttf-droid”并将其保存在变量中,例如
    猜你喜欢
    • 2014-08-11
    • 2019-12-13
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2012-12-01
    • 2012-12-26
    相关资源
    最近更新 更多