我正在查看軟體包列表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]nstall
indselect
顯然是 的前端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