Làm cách nào để kiểm tra nếu một gói được cài đặt trên máy chủ của tôi?


174

Gần đây tôi đã cài đặt Ubuntu Server phiên bản 13.10 (Saucy Salamander). Nhưng tôi đã gặp một chút vấn đề.

Khi kết thúc quá trình cài đặt, nó sẽ hỏi bạn một số gói bổ sung cho dù bạn có muốn hay không, như máy chủ OpenSSH và máy chủ ảo. Đây là những gì tôi đang xem:

Nhập mô tả hình ảnh ở đây

Bây giờ, vấn đề của tôi là tôi không thể nhớ nếu tôi đã chọn hộp kiểm "máy chủ ảo". Làm cách nào để kiểm tra xem máy chủ của tôi có các gói tương ứng không?

Những gói đi kèm với máy chủ ảo?


1
$ apt-cache policy <package-name>, Ví dụ:$ apt-cache policy dillo
Daniel

Câu trả lời:


230

Bạn đang muốn biết về tất cả các lệnh dpkg với các tùy chọn? Có một đọc từ liên kết dưới đây.

15 lệnh dpkg để quản lý máy chủ Linux dựa trên Debian

Để liệt kê tất cả các gói đã cài đặt

Ở đây "less" là một trình đọc văn bản đơn giản được sử dụng để cuộn qua danh sách các gói trong bộ đệm mới mở trong cửa sổ terminal hiện có. Danh sách sẽ không được trộn lẫn với các lệnh đầu ra và đầu ra khác. Nhấn 'q' để quay lại dấu nhắc thiết bị đầu cuối. Xem "người đàn ông ít hơn" để biết thêm.

dpkg -l | less

Để kiểm tra xem một gói đã được cài đặt hay chưa:

dpkg -l {package_name}
dpkg -l vlc

Để kiểm tra xem gói đã được cài đặt hay chưa (ví dụ vlc:). Nếu được cài đặt, khởi chạy gói:

dpkg -l | grep vlc

Hiển thị vị trí nơi gói được cài đặt. "-S" (viết hoa S) là viết tắt của "tìm kiếm"

sudo dpkg -S {package_name}
sudo dpkg -S skype

Để sử dụng Grep để tìm kiếm:

dpkg -l | grep {keywords}
dpkg -l | grep pdf

1
Sự khác biệt giữa cái này và dpkg-query -l "packagename"
heypaleblue

4
Không phụ thuộc vào mã thoát của dpkg -l packagename, vì nó có thể trả về với mã thoát 0 ngay cả khi gói chưa được cài đặt đầy đủ - xem: github.com/bitawn-io/bitawn/issues/433
Viktor Benei

dpkg -l | cut -d " " -f 3 | grep "^vlc"để hiển thị tất cả các tên gói bắt đầu bằngvlc
anatoly techtonik

FYI, điều này không hoạt động đối với các gói meta vì chúng không tương quan trực tiếp với một dpkg. Câu trả lời của bạn không trả lời câu hỏi như mặc dù.
mtalexan

34

Sử dụng dpkg

Lệnh này là trình quản lý gói debian.

Bạn có thể liệt kê tất cả các gói đã cài đặt với

dpkg -l

Bạn có thể xem chi tiết cho một gói cụ thể với

dpkg -p packagename

Và để tìm hiểu nếu nó được cài đặt, sử dụng

dpkg -s packagename | grep Status

Bạn có thể tìm hiểu gói nào chứa phần mềm bạn muốn

apt-cache search name*  

Trong trường hợp của bạn, bạn nên sử dụng lệnh này để tìm kiếm tên gói bạn muốn

apt-cache search virtual machine host 

29

apt -qq list PACKAGE cũng có thể được sử dụng để kiểm tra xem GÓI đã được cài đặt chưa.

Nếu được cài đặt, nó sẽ in một cái gì đó như (với [installed]ở cuối dòng):

$ apt -qq list awscli
awscli/stable,now 1.4.2-1 all [installed]

Nếu không được cài đặt, đầu ra sẽ là:

$ apt -qq list awscli
awscli/stable 1.4.2-1 all

1
Bạn có thể đặt một ngôi sao ở cuối tên gói cho ký tự đại diện.
Brannon

3
Bạn cũng có thể sử dụng tùy chọn --installed cho lệnh đó để giới hạn các kết quả khớp thực sự được cài đặt.
mtalexan

2
Để làm gì -qq? Nó dường như hoạt động giống hệt mà không có nó, và tùy chọn đó không có trong hướng dẫnman apt
Gabriel Staples

3
@GabrielStaples Dường như apt listlệnh không được ghi nhận chưa đầy đủ. Một số thử nghiệm nhanh vào ngày 16.04 dường như cho thấy đó -qlà từ đồng nghĩa với --quiettùy chọn. Cái đầu tiên -qngăn chữ "Xong" được in. Cái thứ hai cũng ngăn "Liệt kê ..." được in.
Anthony Geoghegan

14

Tôi đã tìm thấy một cách để kiểm tra cài đặt gói chỉ bằng lệnh truy vấn dpkg và không có đường ống.

Tôi đã tìm kiếm giải pháp như vậy trong khi viết một nhiệm vụ cho một vở kịch ansible.

Vì vậy, yo có thể làm một cái gì đó như thế này:

/usr/bin/dpkg-query --show --showformat='${db:Status-Status}\n' '<your package name>'

Đây chỉ là một cách khác để làm điều đó.


ống trong ansible có thể được sử dụng với các shellmô-đun.
sjas

4

Tôi đang viết một câu trả lời mới dưới dạng T taskel 'Tên tác vụ' KHÔNG hiển thị trong dpkghoặc apttruy vấn. Có nghĩa là các câu trả lời khác là không đầy đủ (hoặc sai).

"Tôi không thể nhớ Nếu tôi đã chọn hộp kiểm 'máy chủ ảo' .."

Kiểm tra nếu có dấu hoa thị theo tên sau khi chạy lại sudo tasksel.
(hoặc một ' i ' nếu đang chạy tasksel --list-tasks).

Nếu bạn không thấy điều này, thì có lẽ bạn chưa cài đặt ' gói meta nhiệm vụ '.


".. Làm thế nào để tôi kiểm tra xem máy chủ của tôi có các gói tương ứng không?"

Nếu bạn muốn tìm hiểu những gì được cài đặt trong gói meta tác vụ của Máy chủ ảo:

tasksel --list-tasks

(trong trường hợp của bạn tasksel --list-tasks | grep virtlà đủ)

Điều này cung cấp tên nhiệm vụ thích hợp và một dấu hiệu cho biết nó có được cài đặt hay không.

Trong trường hợp của bạn, tên taskel này là virt-host.


"Những gói nào đi kèm với máy chủ ảo?"

Từ lệnh cuối cùng, tìm tên tác vụ taskel.
Điều này là cần thiết cho lệnh tiếp theo:

tasksel --task-packages virt-host

Điều này liệt kê gói meta T taskel riêng lẻ (được biểu thị bằng chữ '^') được tạo thành tên.
Trong trường hợp của bạn đó là virt-host^.

Khi bạn tìm thấy tên meta phù hợp, bạn có thể sử dụng apt:

 apt show virt-host^ | grep "Package:"

(hoặc apt-cache show ...nếu apt showkhông hoạt động.)

Điều này sẽ hiển thị tất cả các gói tạo nên gói meta nhất định.

Sau đó:

 dpkg -l {each individual pkg name listed above}

Điều này sẽ cho bạn biết nếu gói riêng lẻ được cài đặt / gỡ cài đặt (ghi chú bằng chữ 2: trạng thái 'i' có nghĩa là đã cài đặt). Làm điều này cho tất cả các gói được liệt kê trong gói nhiệm vụ / meta.

Điều này sẽ trả lời các câu hỏi ban đầu.

Lưu ý bên lề: /usr/share/t taskel/descs/ubfox-t task.desc cũng giữ các mô tả về các gói meta T taskel. Nếu bạn: grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.descnó sẽ hiển thị tên gói APT thích hợp. (Trong trường hợp của bạn đây là ubuntu-virt-server). Bạn cũng có thể sử dụng aptcác lệnh với tên meta này.

Nếu bạn muốn loại bỏ các gói taskel, điều này sẽ vào cỏ dại một chút. Vui lòng tham khảo https://askubfox.com/a/88897/169878 hoặc bất kỳ số câu trả lời khác ngoài đó.

Xin lưu ý rằng các gói apt "meta" không khớp với tên gói T taskel. Vui lòng tham khảo Trang cộng đồng của T taskel để biết thêm thông tin.


1
Cả hai câu hỏi đều được trả lời chính xác. Nếu bạn downvote, đưa ra một lý do, hoặc cho tôi biết lý do tại sao họ không.
bshea

3

Sử dụng taskel ( sudo apt-get install taskselnếu bạn chưa có nó) và chạy tasksel --list-tasks.

taskel sẽ in ra một danh sách các tác vụ và sẽ có một ibên cạnh mỗi tác vụ được cài đặt và ubên cạnh mỗi tác vụ không được cài đặt.

Nếu bạn muốn cài đặt tác vụ, sử dụng tasksel install <task>. Tên của nhiệm vụ bạn đang tìm kiếm là virt-host.

Các mục lựa chọn phần mềm được gọi là "nhiệm vụ".


cảm ơn vì đã cho tôi biết tên của nhiệm vụ, đó là một trong những vấn đề của tôi, không chắc chắn nên tìm gói nào.
D.Zou

2

Nếu ai đó quan tâm, tôi đã tạo một tập lệnh nhỏ mà bạn có thể tự động cài đặt từ danh sách các gói hoặc ứng dụng hoặc chỉ cần kiểm tra xem chúng đã được cài đặt chưa:

#!/bin/bash
apt -qq list YOUR_LIST_GOES_HERE | grep -v "installed" | awk -F/ '{print $1}' > /root/list.txt
packages=$(cat /root/list.txt)
grep -q '[^[:space:]]' < /root/list.txt
CHECK_LIST=$?
if [[ $CHECK_LIST -eq 1 ]]; then
echo "Your packages are already installed"
else
echo "Installing packages"
apt-get  install -y $packages
fi

Hy vọng nó sẽ giúp được ai đó.


2

Giải pháp đơn giản hơn:

Bây giờ có một apt listlệnh liệt kê các gói được cài đặt. Bạn cũng có thể tìm kiếm một gói cụ thể với

apt list <package>

Xem man aptđể biết thêm thông tin. Nếu bạn không biết tên gói chính xác, bạn có thể sử dụng apt searchtheo sau bởi một phần của nó để xem danh sách các gói liên quan.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.