Jak uzyskać listę dostępnych (odinstalowanych) pakietów w Debianie?


19

Zasadniczo to, czego szukam, to odpowiednik Debiana:

yum list available

aby pokazać mi, które pakiety są dostępne (choć nie są obecnie zainstalowane). Wolę coś, co można uruchomić z konsoli, ponieważ jest to na zdalnym serwerze. Dzięki.

Odpowiedzi:


7

grep-dctrla jego pochodne stanowią świetny sposób na zapytanie o pliki apt cache. (Możesz zainstalować te narzędzia na Ubuntu za pomocą sudo apt-get install dctrl-tools)

W przypadku dostępnych (ale niekoniecznie zainstalowanych) pakietów możesz użyć grep-available. Na przykład, aby wyświetlić listę wszystkich dostępnych pakietów:

grep-available  -s Package .

Edytować:

aptitude może wyświetlić listę niezainstalowanych pakietów, po prostu uruchamiając ją.

Możesz również uzyskać listę niezainstalowanych pakietów aptitude, używając:

aptitude -F "%p" search "?not(?installed)"

Zauważ, że dzięki nowym pakietom multi-arch otrzymasz pakiety dla innych architektur wymienionych w tym wyniku. Na przykład otrzymuję:

aptitude -F "%p" search "?not(?installed)"  | grep "^bash:"
bash:i386

Mam bashzainstalowany pakiet, ale jest to wersja amd64, ponieważ mój system operacyjny jest instalowany z wersją Ubuntu Precise dla amd64. Jeśli nie chcesz widzieć tych pakietów dla innych architektur, możesz wykluczyć wiersze zawierające ::

aptitude -F "%p" search "?not(?installed)"  | grep -v ':'

Dzięki, ale problem polega na tym, że musiałbym przeszukiwać całą listę paczek dla moich wybranych repozytoriów. Być może lepszym sposobem wizualizacji problemu byłoby: wyobraź sobie, że X jest uniwersalnym zestawem wszystkich pakietów w repozytoriach pakietów Debiana, na który wskazuje mój serwer, a Y jest zestawem pakietów, które zainstalowałem na tym serwerze; w istocie szukam X - Y. Teraz zdaję sobie sprawę, że mogę to zrobić programowo, ale miałem nadzieję, że będzie stosunkowo proste polecenie, aby osiągnąć ten sam wynik w systemie Debian.
freakwincy,

Właśnie zobaczyłem Twoją zredagowaną odpowiedź. Właśnie tego szukałem! Dzięki.
freakwincy

PS Poparłem twoją odpowiedź, ale nie zgromadziłem jeszcze wystarczającej liczby punktów reputacji.
freakwincy

Nie ma problemu. Przy okazji,
witajcie

16

apt-cache służy do zapytania o pamięć podręczną pakietu:

apt-cache pkgnames | sortować
rzecz wyszukiwania apt-cache
apt-cache search - rzecz tylko-nazwy

dzięki, ale obawiam się, że to nie działa. Porównałem listę wygenerowaną przez pierwsze polecenie z poprzednio wygenerowaną listą zainstalowanych pakietów, które tak wyprowadziłem: code„dpkg --get-selections | grep '[[:::]] install $' | awk '{print $ 1}' > install.txt ”i znaleziono duplikaty. Pozostałe dwa polecenia, które podałeś, nie będą działać, ponieważ nie szukam konkretnego pakietu, a raczej każdego pakietu, który nie jest aktualnie zainstalowany.
freakwincy,

2

Użyj apt-cachedo tego celu:

apt-cache search package

Ponieważ apt-cacheużywa tylko pamięci podręcznej pakietów w systemie, upewnij się, że ta pamięć podręczna jest aktualna:

apt-get update

Możesz także użyć tego narzędzia, apt-filejeśli znasz nazwę pliku, który chcesz wyszukać; należy to jednak dodać do systemu. Na przykład:

apt-file search somefilename

Zwykle używam apt-cachejednego z następujących sposobów:

apt-cache search package | sort | grep item

(To pokazuje rzeczy, które przedmiot faktycznie w ich streszczenia lub nazw.)

apt-cache search thing | sort | less

(Wyszukuje rzecz, a następnie sortuje ją w celu przyjemnego oglądania less.)


2

Moim punktem widzenia jest praca z domyślnie zainstalowanymi poleceniami i unikanie dodatkowych pakietów, jeśli nie ma żadnego konkretnego powodu.

W moim Debianie z GNU bash te proste polecenia

apt list
apt list --all-versions

daje listę wszystkiego (zainstalowanego i niezainstalowanego). Następnie mogę ograniczyć wyniki z grep „Zainstalowany” lub grep -v „Zainstalowany”. Można go również łączyć z jedną lub kilkoma nazwami pakietów (akceptowane są znaki zastępcze).

Przełącznik „-all-wersje” zapewnia w danych wyjściowych osobne wiersze dla każdej wersji pakietu (stabilny, testowy, niestabilny, eksperymentalny).

Prosta „lista apt” daje tylko jedną wersję (o najwyższym priorytecie).


0

Biorąc ściśle swoje pytanie (chcesz wyświetlić listę niezainstalowanych pakietów), spróbuj użyć

(edytowane zgodnie z komentarzami poniżej)

# apt-get update
# dpkg -l '*' | egrep --invert-match '^i'

Nie jestem jednak pewien dokładnej składni, ponieważ piszę to na oknie systemu Windows i nie ma możliwości sprawdzenia. Może spróbuj zmienić to, na co grep


Wyświetla listę zainstalowanych pakietów, które nie zostały odinstalowane .
ℝaphink,

@Raphink: Przepraszam, edytowałem post, aby to naprawić
PPC,

Nie ma problemu, ale nadal nie wyświetlasz pakietów, które nie są zainstalowane. Wykluczając pakiety „ii” (które tak naprawdę nie są tym, co robi twoje wyrażenie, powinieneś '^ii'raczej użyć '[ii]'), brakuje pakietów, które są zainstalowane, ale nie skonfigurowane na przykład (jak iFlub iHna przykład).
ℝaphink,

@PPC: Niestety, to nie działa, ponieważ dpkg -l wyświetla tylko zainstalowane pakiety, tzn. Wszystkie pakiety są poprzedzone przez „ii”, więc pipowanie wyników do grep przy użyciu flag --invert-match lub -v daje tylko seria myślników, która jest separatorem nagłówka listy. W każdym razie dzięki.
freakwincy,

@ freakwincy: Racja! Przepraszamy za brak testowania przed wysłaniem (działa w systemie Windows). Według manpage, powinieneś użyć "dpkg -l '*'", aby wyświetlić listę wszystkich pakietów.
PPC,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.