ฉันจะตรวจสอบว่ามีการติดตั้งแพ็คเกจบนเซิร์ฟเวอร์ของฉันได้อย่างไร?


174

ฉันเพิ่งติดตั้ง Ubuntu Server edition 13.10 (Saucy Salamander) แต่ฉันมีปัญหาเล็กน้อย

ในตอนท้ายของการติดตั้งมันจะถามคุณสำหรับแพคเกจพิเศษหลายอย่างไม่ว่าคุณต้องการหรือไม่เช่นเซิร์ฟเวอร์ OpenSSH และโฮสต์เครื่องเสมือน นี่คือสิ่งที่ฉันดู:

ป้อนคำอธิบายภาพที่นี่

ตอนนี้ปัญหาของฉันคือฉันจำไม่ได้ว่าได้เลือกช่องทำเครื่องหมาย "virtual machine host" แล้ว ฉันจะตรวจสอบว่าเซิร์ฟเวอร์ของฉันมีแพ็คเกจที่เกี่ยวข้องได้อย่างไร

แพ็คเกจใดมาพร้อมกับโฮสต์เครื่องเสมือน


1
$ apt-cache policy <package-name>เช่น$ apt-cache policy dillo
Daniel

คำตอบ:


230

คุณต้องการทราบเกี่ยวกับคำสั่ง dpkg ทั้งหมดพร้อมตัวเลือกหรือไม่? ได้อ่านจากลิงค์ด้านล่าง

15 คำสั่ง dpkg เพื่อจัดการเซิร์ฟเวอร์ Linux ที่ใช้ Debian

ในการแสดงรายการแพ็คเกจที่ติดตั้งทั้งหมด

นี่คือ "less" เป็นตัวอ่านข้อความอย่างง่ายที่ใช้ในการเลื่อนดูรายการแพ็คเกจในบัฟเฟอร์ใหม่ที่เปิดในหน้าต่างเทอร์มินัลที่มีอยู่ รายการจะไม่ถูกผสมกับคำสั่งเทอร์มินัลและเอาท์พุทอื่น ๆ กด 'q' เพื่อกลับไปที่หน้าจอพร้อมรับคำของเครื่อง ดู "คนน้อย" สำหรับข้อมูลเพิ่มเติม

dpkg -l | less

วิธีตรวจสอบว่ามีการติดตั้งแพ็คเกจหรือไม่:

dpkg -l {package_name}
dpkg -l vlc

เพื่อตรวจสอบว่ามีการติดตั้งแพ็คเกจหรือไม่ (ตัวอย่างเช่นvlc) หากติดตั้งแล้วให้เปิดแพ็คเกจ:

dpkg -l | grep vlc

แสดงตำแหน่งที่ติดตั้งแพ็คเกจ "-S" (ตัวอักษร S) หมายถึง "ค้นหา"

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

วิธีใช้ Grep เพื่อค้นหา:

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

1
ความแตกต่างระหว่างสิ่งนี้กับdpkg-query -l "packagename"
อะไร

4
อย่าขึ้นอยู่กับรหัสทางออกdpkg -l packagenameเนื่องจากอาจส่งคืนพร้อมรหัสทางออก 0 แม้ว่าแพคเกจจะไม่ได้รับการติดตั้งอย่างสมบูรณ์ - ดู: github.com/bitrise-io/bitrise/issues/433
Viktor Benei

dpkg -l | cut -d " " -f 3 | grep "^vlc"เพื่อแสดงชื่อแพ็กเกจทั้งหมดที่ขึ้นต้นด้วยvlc
Anatoly techtonik

FYI สิ่งนี้ใช้ไม่ได้กับแพ็คเกจเมตาเนื่องจากมันไม่สัมพันธ์โดยตรงกับ dpkg คำตอบของคุณจะตอบคำถามตามที่ถาม
mtalexan

34

ใช้ dpkg

คำสั่งนี้เป็นผู้จัดการแพคเกจเดเบียน

คุณสามารถแสดงรายการแพ็คเกจทั้งหมดที่ติดตั้งด้วย

dpkg -l

คุณสามารถดูรายละเอียดสำหรับแพ็คเกจเฉพาะด้วย

dpkg -p packagename

และเพื่อเรียนรู้ว่ามีการติดตั้งหรือไม่ให้ใช้

dpkg -s packagename | grep Status

คุณสามารถเรียนรู้แพ็คเกจที่มีซอฟต์แวร์ที่คุณต้องการ

apt-cache search name*  

ในกรณีของคุณคุณควรใช้คำสั่งนี้เพื่อค้นหาชื่อแพ็คเกจที่คุณต้องการ

apt-cache search virtual machine host 

29

apt -qq list PACKAGE สามารถใช้สำหรับตรวจสอบว่ามีการติดตั้งแพคเกจหรือไม่

หากติดตั้งแล้วมันจะพิมพ์สิ่งที่ชอบ (ด้วย[installed]ที่ส่วนท้ายของบรรทัด):

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

หากไม่ได้ติดตั้งเอาต์พุตจะเป็น:

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

1
คุณสามารถใส่ดาวไว้ท้ายชื่อแพ็คเกจสำหรับสัญลักษณ์แทน
Brannon

3
คุณยังสามารถใช้ตัวเลือก - ติดตั้งสำหรับคำสั่งนั้นเพื่อ จำกัด การจับคู่ที่ติดตั้งจริง
mtalexan

2
อะไร-qqหา? ดูเหมือนว่าจะทำงานได้เหมือนกันหากไม่มีมันและตัวเลือกนั้นไม่อยู่ในคู่มือman apt
Gabriel Staples

3
@GabrielStaples ดูเหมือนว่าapt listคำสั่งยังไม่ได้รับการบันทึกไว้อย่างสมบูรณ์ การทดสอบอย่างรวดเร็วในวันที่ 16.04 ดูเหมือนว่าบ่งบอกว่า-qเป็นคำพ้องความหมายสำหรับ--quietตัวเลือก สิ่งแรกคือ-qป้องกันคำว่า "เสร็จสิ้น" ที่ถูกพิมพ์ออกมา ที่สองยังป้องกัน "รายชื่อ ... " จากการถูกพิมพ์
Anthony Geoghegan

14

ฉันพบวิธีตรวจสอบการติดตั้งแพ็กเกจด้วยคำสั่ง dpkg-query และไม่มีไพพ์

ฉันค้นหาวิธีการแก้ปัญหาดังกล่าวในขณะที่เขียนงานสำหรับเพลย์บุ๊ค ansible

ดังนั้นคุณสามารถทำสิ่งนี้:

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

นี่เป็นอีกวิธีหนึ่งในการทำสิ่งนั้น


ไปป์ที่สามารถใช้กับshellโมดูลได้
sjas

4

ฉันกำลังเขียนคำตอบใหม่เป็นTasksel 'Task task ' อย่าแสดงdpkgหรือaptสอบถาม ความหมายคำตอบอื่น ๆ ไม่สมบูรณ์ (หรือผิด)

"ฉันจำไม่ได้ถ้าฉันเลือกช่องทำเครื่องหมาย 'virtual machine host' .. "

sudo taskselตรวจสอบว่ามีเครื่องหมายดอกจันโดยชื่ออีกครั้งหลังจากการทำงาน
(หรือ ' i ' ถ้าวิ่งtasksel --list-tasks)

หากคุณไม่เห็นสิ่งนี้แสดงว่าคุณอาจไม่ได้ติดตั้ง'taskel meta-package '


".. ฉันจะตรวจสอบได้อย่างไรว่าเซิร์ฟเวอร์ของฉันมีแพ็คเกจที่ตรงกันหรือไม่"

หากคุณต้องการค้นหาสิ่งที่ติดตั้งภายใต้ meta-package งานเครื่องเสมือนของโฮสต์:

tasksel --list-tasks

(ในกรณีของคุณtasksel --list-tasks | grep virtเพียงพอ)

สิ่งนี้จะให้ชื่อภารกิจที่เหมาะสมและการบ่งชี้ว่ามีการติดตั้งหรือไม่

ในกรณีของคุณชื่อ tasksel virt-hostนี้อยู่


"แพ็คเกจใดมาพร้อมกับโฮสต์เครื่องเสมือน"

จากคำสั่งสุดท้ายค้นหาชื่อภารกิจ taskel
สิ่งนี้จำเป็นสำหรับคำสั่งถัดไป:

tasksel --task-packages virt-host

นี่แสดงรายการเมตาแพคเกจ Tasksel แต่ละอัน (เขียนแทนด้วย '^' ต่อท้าย) ซึ่งประกอบขึ้นเป็นชื่อ ในกรณีของคุณมันเป็น
virt-host^

เมื่อคุณพบชื่อเมตาที่เหมาะสมแล้วคุณสามารถใช้ apt:

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

(หรือapt-cache show ...หากapt showไม่ได้ผล)

นี่จะแสดงแพ็คเกจทั้งหมดที่ประกอบขึ้นเป็นแพ็คเกจเมตา

แล้ว:

 dpkg -l {each individual pkg name listed above}

สิ่งนี้จะบอกคุณว่ามีการติดตั้ง / ถอนการติดตั้งแพคเกจแต่ละรายการหรือไม่ (ระบุด้วยตัวอักษรตัวที่ 2: สถานะ 'i' หมายถึงการติดตั้ง) ทำสิ่งนี้สำหรับแพ็คเกจทั้งหมดที่แสดงรายการภายใต้ task / meta package

สิ่งนี้ควรตอบคำถามต้นฉบับ

หมายเหตุด้านข้าง: /usr/share/tasksel/descs/ubuntu-tasks.desc ยังมีคำอธิบายของ Tasksel meta-packages หากคุณ: grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.descมันจะแสดงชื่อเมตาแพคเกจ APT ที่เหมาะสม (ในกรณีของคุณเป็นแบบนี้ubuntu-virt-server) คุณยังสามารถใช้aptคำสั่งด้วยชื่อเมตานี้

หากคุณต้องการลบแพ็กเกจ taskel สิ่งนี้จะเข้ามาในวัชพืชเล็กน้อย โปรดศึกษาhttps://askubuntu.com/a/88897/169878หรือคำตอบอื่น ๆ

โปรดทราบว่าแพ็คเกจ apt "meta" ไม่ตรงกับชื่อแพคเกจ Tasksel โปรดปรึกษาหน้าชุมชน Taskselสำหรับข้อมูลเพิ่มเติม


1
ตอบคำถามทั้งสองอย่างถูกต้อง ถ้าคุณลงคะแนนเสียงให้เหตุผลหรือบอกฉันว่าทำไมพวกเขาไม่
bshea

3

ใช้ tasksel ( sudo apt-get install taskselถ้าคุณไม่ได้มีมัน) tasksel --list-tasksและเรียกใช้

taskel จะพิมพ์รายการงานและจะมีiถัดจากแต่ละงานที่ติดตั้งและuถัดจากงานแต่ละงานที่ไม่ได้ติดตั้ง

tasksel install <task>หากคุณต้องการติดตั้งงานที่ใช้ virt-hostชื่อของงานที่คุณกำลังมองหาคือ

รายการเลือกซอฟต์แวร์เรียกว่า "งาน"


ขอบคุณที่บอกชื่อของงานให้ฉันซึ่งเป็นหนึ่งในปัญหาของฉันไม่แน่ใจว่าจะหาแพ็คเกจไหน
D.Zou

2

หากมีใครสนใจฉันสร้างสคริปต์เล็กน้อยที่คุณสามารถติดตั้งได้โดยอัตโนมัติจากรายการแพคเกจหรือแอปพลิเคชันหรือเพียงตรวจสอบว่าติดตั้งแล้ว:

#!/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

หวังว่าจะช่วยใครซักคน


2

วิธีที่ง่ายกว่า:

ขณะนี้มีapt listคำสั่งที่แสดงรายการแพ็คเกจที่ติดตั้ง คุณยังสามารถค้นหาแพ็คเกจที่ต้องการได้ด้วย

apt list <package>

ดูman aptข้อมูลเพิ่มเติม หากคุณไม่ทราบชื่อแพคเกจที่ถูกต้องคุณสามารถใช้apt searchตามด้วยส่วนหนึ่งของมันเพื่อดูรายการแพ็คเกจที่เกี่ยวข้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.