在安裝套件之前重設 dselect 選擇

在安裝套件之前重設 dselect 選擇

我正在查看軟體包列表dselect,但Return錯誤地按了兩次,從而使其確認並退出該[S]elect選項。

當我轉到該[I]nstall選項時,它現在建議安裝一些我不想要的新軟體包(並且與我最初尋找的內容無關)。

由於我還沒有繼續安裝本身,有沒有一種方法可以將選擇重置為選擇新軟體包之前的選擇,而無需逐一瀏覽清單並按-每個軟體包? (無論是透過dselect或透過其他相關命令完成都沒有關係。)

編輯:(新增範例)

我已經在另一台dselect安裝了的機器上嘗試過。我們假設gnugo未安裝該軟體包(這只是一個範例)。

  • 啟動delect並選擇[S]elect取得清單。
  • gnugo在此列表中搜尋(/如果您不熟悉,請使用dselect)。
  • 用 來選擇它+
  • Return驗證建議,然後Return再次驗證返回主選單(我犯的錯誤)。
  • [I]nstall。現在它會說:

    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following NEW packages will be installed
      gnugo:i386 libgpm2:i386 libncurses5:i386 libreadline6:i386 libtinfo5:i386
    0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
    Need to get 1,926 kB of archives.
    After this operation, 9,634 kB of additional disk space will be used.
    Do you want to continue [Y/n]? 
    
  • 此處選擇不繼續(n)。

  • 辭職dselect
  • dpkg --get-selections | grep gnugo什麼也不產生。
  • 再次啟動dselect,直接再次進入[I]nstall,仍會選擇軟體包進行安裝。

當然,我可以返回列表[S]elect,搜索gnugo,按_取消選擇它,但在更複雜的情況下,您可能必須一一瀏覽新的軟體包列表。

[I]nstallindselect顯然是 的前端apt-get install,但我不確定它從哪裡獲得選擇。看來dpkg --get-selection不是。就目前而言dselect,我想將其重置為使用 製作的所有內容***都保持原樣的狀態,但現在標記為 only **(尚未安裝)的內容將返回到__,而無需手動瀏覽建議列表從[I]nstall菜單中。

編輯2:

這顯然與 的內容相關/var/lib/dpkg/status,其中包含以下條目:

Package: gnugo
Status: install ok not-installed
Priority: optional
Section: games

如果我手動將其更改為Status: deinstall ok not-installed,它就會從中的選擇中消失dselect(這是有道理的)。

我想要的是一種將所說的內容變成Status: install ok not-installed的通用方法Status: deinstall ok not-installed(讓包裹說Status: install ok installed不受影響)。

答案1

使用--set-selections* 參數dpkg

echo "<package-name> purge" | dpkg --set-selections

然後您可以用來apt-get dselect-upgrade應用您的包選擇。


如果您需要尋找已選擇安裝但尚未安裝的軟體套件(以便您可以反轉該選擇),請使用下列命令:

dpkg --get-selections | awk '{ if ($2=="install") print $1}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')"

您可以稍微花哨一些,並將其通過管道返回到--set-selections,從而自動取消選擇尚未安裝的任何內容:

dpkg --get-selections | awk '{ if ($2=="install") print $1,"deinstall"}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')" | dpkg --set-selections

*您也可以用來dpkg --get-selections列出所有顯式選擇。這也將向您顯示所需的格式--set-selections

答案2

事實證明,dpkg --get-selections它並沒有列出標記為安裝和尚未安裝的內容,而是dpkg -l '*'列出了這些內容,並以in.

因此,以下行將重設這些選擇:

dpkg -l '*' | grep '^in ' | awk '{ print $2 " deinstall" }' | dpkg --set-selections

答案3

使用資質搜尋能力取得列表。

aptitude -F '%p' search '~ainstall !~i'

將清單傳遞給 將dpkg --set-selections它們標記為要刪除。

aptitude -F '%p deinstall' search '~ainstall !~i' | dpkg --set-selections

旁白:歡迎來到 21 世紀,我建議改用 Aptitude 而不是 Dselect。

相關內容