จะดูประวัติการติดตั้ง apt-get ได้อย่างไร?


18

ฉันจะดูประวัติapt-get installคำสั่งที่ฉันดำเนินการด้วยตนเองได้อย่างไร

สำหรับฉันแล้วดูเหมือนว่าวิธีการทั้งหมดที่มีอยู่จะแสดงทุกอย่างที่ติดตั้งตั้งแต่เริ่มการติดตั้ง Ubuntu

ฉันจะดูประวัติของapt-get installตั้งแต่เวลาที่กระบวนการติดตั้งระบบเสร็จสมบูรณ์ได้อย่างไร


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

@terdon โอเคทำการแก้ไขใหม่
TellMeWhy

1
มีบันทึกของอยู่ในdpkg /var/log/dpkg.log*
Velkan

1
@ParanoidPanda ที่ล้มเหลวในหลาย ๆ ด้าน การตัดทอนประวัติสิ่งต่าง ๆ ที่ทำงานในเปลือกหอยอื่น ๆ สิ่งที่ถูกลบออกจากประวัติศาสตร์หรือไม่เคยใส่ในตำแหน่งแรกสิ่งต่าง ๆ ที่ติดตั้งจากสคริปต์สิ่งต่าง ๆ ที่ดำเนินการโดยผู้ใช้อื่น ๆ ฯลฯ
Squidly

1
@MrBones: ฉันรู้และฉันได้ระบุไว้ในคำตอบของฉัน (และในความคิดเห็นด้านล่าง) อย่างไรก็ตาม OP ขอวิธีในการดูอินสแตนซ์ทั้งหมดเมื่อพวกเขาได้ดำเนินการapt-get installคำสั่งด้วยตนเองเพื่อติดตั้งแพคเกจและฉันได้ให้วิธีการแก้ปัญหาซึ่งให้ข้อมูลนี้เว้นแต่ไฟล์ประวัติมีการเปลี่ยนแปลงในบางวิธี (เช่น: รายการมี ถูกลบออก)

คำตอบ:


20

ผมคิดว่าคำตอบที่ได้รับที่นี่โดยคอสเป็นวิธีที่ดีที่สุดที่ผมเคยเห็นเพื่อให้ห่างไกล แม้ว่าในขณะที่ Software Center ใช้อยู่aptสิ่งใดก็ตามที่ติดตั้งไว้จะแสดงอยู่ด้วย

คำสั่งคือ:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

ฉันจะทดสอบสิ่งนี้เมื่อฉันกลับถึงบ้านและยอมรับว่ามันใช้งานได้ดี:)
TellMe ทำไม

มันไม่ใช่! ตรวจสอบการอัปเดต: askubuntu.com/a/680405/320386
kos

ใช้สิ่งนี้เป็นวิธีที่ปลอดภัยยิ่งขึ้นสำหรับงานนี้zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?=.* install ) \K.*' | sed '1,4d':: grep -Po '^Commandline:(?=.* install ) \K.*'จะกรองเฉพาะapt-getคำสั่งที่installมีพื้นที่ชั้นนำและส่วนท้ายsed '1,4d' อาจขึ้นอยู่กับการติดตั้งเฉพาะ ในเหมือง1,4จะลบจำนวนรายการที่มาจาก Ubiquity ซึ่งเป็นรายการที่คุณต้องการลบ แจ้งให้เราทราบว่าหมายเลขนั้นเหมือนกันในการติดตั้งของคุณหรือไม่อย่างน้อยเราก็มีพื้นฐาน: |
kos

@ kos ฉันจะได้รับบรรทัดพิเศษเช่นapt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericกับคำสั่งใหม่ พวกเขาเป็นสายแพร่หลายหรือไม่
Arronical

ไม่ดูเหมือนว่ามาจาก Software Updater ไม่มีวิธีที่จะแยกความแตกต่างจากคำสั่งที่เรียกใช้จากผู้ใช้และคำสั่งที่ดำเนินการโดยส่วนapt-getหน้านอกเหนือจาก Ubiquity ที่ทำงานเพียงครั้งเดียว (เช่นaptdaemonรายการจะแสดงโดยคำสั่งนั้นเช่นกัน) ทางออกที่ดีที่สุดแม้ว่าจะยังคงใช้คำสั่งนั้นซึ่งอย่างน้อยก็แยกรายการ Ubiquity
kos

9

เพียงพิมพ์คำสั่งต่อไปนี้ในเทอร์มินัลของคุณเพื่อดูบันทึกการติดตั้งทั้งหมด

grep " install " /var/log/dpkg.log

3

เพื่อลดความซับซ้อนของ @Arronical Answer, เคล็ดลับเรียบร้อยที่ฉันได้เรียนรู้เมื่อเร็ว ๆ นี้คือคุณสามารถใช้zcat -qfทั้งไฟล์ txt และ txt gzipped

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

กลายเป็น

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

จากผู้ชาย zcat:

   -q --quiet
          Suppress all warnings.
   -f --force
          Force  compression  or  decompression  even if the file has multiple links or the corre‐
          sponding file already exists, or if the compressed data is read from  or  written  to  a
          terminal.  If  the  input  data is not in a format recognized by gzip, and if the option
          --stdout is also given, copy the input data without change to the standard  output:  let
          zcat  behave  as  cat.  If -f is not given, and when not running in the background, gzip
          prompts to verify whether an existing file should be overwritten.

2

นี่คือสคริปต์ที่พิมพ์เฉพาะแพ็คเกจระดับบนสุดที่ติดตั้งอยู่ในปัจจุบันโดยที่ "แพ็คเกจระดับบนสุด" ถูกกำหนดเป็นแพ็กเกจ atp ซึ่งไม่มีแพ็กเกจ atp อื่นขึ้นอยู่ หากโปรแกรมระดับบนสุดดังกล่าวถูกติดตั้งโดย atp หรือตัวจัดการแพคเกจเช่น synaptic ผู้ใช้จะถูกเลือกด้วยตนเอง

#!/bin/sh
NumDaysAgo=18
find /var/lib/dpkg/info -name "*.list" -mtime -$NumDaysAgo \
    -exec stat -c $'%y\t%n' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list,,' | \
sort -r | \
while read Date Time Xxx Pkg
do 
    lncnt=$(apt-cache --installed rdepends $Pkg | wc -l)
    if [ $lncnt -eq "2" ]
        then echo "$Date $Time $Pkg"
    fi
done
echo "JOB COMPLETED: $BASH_SOURCE"

แพคเกจจะถูกพิมพ์ในลำดับย้อนกลับภายใต้สมมติฐานที่ว่าผู้ใช้มีแนวโน้มที่จะต้องการข้อมูลที่ใหม่กว่าเร็วกว่าและเนื่องจากโปรแกรมช้า

การไหลของโปรแกรม:

  • /var/lib/dpkg/info/โปรแกรมรวบรวมครั้งแรกในรายการทุกแพคเกจติดตั้งโดยการอ่านชื่อไฟล์ที่อยู่ภายใต้ เวลา mod ของไฟล์คือเวลาการติดตั้ง
  • รายการนั้นเรียงลำดับย้อนกลับ
  • สำหรับแพ็กเกจที่ติดตั้งในแต่ละ$Pkgการเรียกร้องให้ขอย้อนกลับพึ่งพาapt-cache rdepends $Pkg $Pkgหากไม่มีการขึ้นต่อกันแสดงว่าเป็นแพคเกจระดับบนสุดและข้อมูลแพคเกจจะถูกพิมพ์: วันที่แพ็ก

หมายเหตุ:

  • สคริปต์ขึ้นอยู่กับรูปแบบผลลัพธ์apt-cache rdepends $Pkgที่มีไว้สำหรับสายตามนุษย์และสามารถเปลี่ยนแปลงได้ในเวอร์ชันอนาคตของ apt
  • รหัสสำหรับการรวบรวมชื่อไฟล์ส่วนใต้ / var / lib / dpkg / info / มาจาก โพสต์ unix.stackexchangeนี้ ดังที่โปสเตอร์'mikel'ชี้ให้เห็นdpgkไฟล์บันทึกประวัติไม่น่าเชื่อถือเพราะจะถูกหมุนเวียนออกไปหลังจากที่ถึงระดับหนึ่ง
  • หน้าผู้ชายสำหรับ apt-chache
  • การโทรapt-cache rdepends ...ช้ามากอย่างน่าจะเป็นเพราะการโทรแต่ละครั้งคำนวณโดยการวนซ้ำผ่านการอ้างอิงทั้งหมด ดังนั้นสคริปต์ข้างต้นเริ่มต้นจากการติดตั้งใหม่ล่าสุดเพื่อให้ผู้ใช้พึงพอใจมากที่สุดเท่าที่จะทำได้
  • การ--installedตั้งค่าสถานะหลังจากapt-cacheตรวจสอบว่าแพคเกจ dpkg ติดตั้งนอกจากนี้ยังติดตั้ง apt หากผู้ใช้หรือซอฟต์แวร์ติดตั้งอื่นข้าม apt และใช้ dpkg โดยตรงอาจเป็นไปได้ กรณีนี้ไม่ได้รับการทดสอบ แต่ฉันคิดว่าบางสิ่งที่สังเกตได้จะถูกพิมพ์ในเอาต์พุตมาตรฐานหรือข้อผิดพลาด
  • เอาต์พุตไม่รวมแพ็กเกจที่เลือกด้วยตนเองซึ่งภายหลังขึ้นอยู่กับแพ็กเกจที่สูงกว่า เอาต์พุตยังสามารถรวมแพ็คเกจที่ติดตั้งผ่าน apt โดยซอฟต์แวร์การติดตั้งของบุคคลที่สามอื่น ๆ ด้วยเหตุนี้จึงไม่ได้ติดตั้งด้วยตนเองอย่างแท้จริง อย่างไรก็ตามหากวัตถุประสงค์ของการส่งออกเป็นพื้นฐานสำหรับการตั้งค่าลินุกซ์คืนค่าจาก/homeไดเรกทอรีสำรองซึ่งรวมถึงซอฟต์แวร์บุคคลที่สามกล่าวว่าผลลัพธ์นี้จะเหมาะสม
  • ชื่อแพคเกจบางส่วนมีหมายเลขเวอร์ชันและบางชื่อไม่ กล่าวถึงเพียงเพื่อนำความตระหนักถึงความจริง

1

หากคุณต้องการดูทุกสิ่งที่คุณติดตั้งโดยการเรียกใช้:

sudo apt-get install [package]

และคุณไม่ได้ยุ่งกับประวัติทุบตีและคุณไม่ต้องการดูประวัติของประเภทการติดตั้งประเภทนี้สำหรับผู้ใช้รายอื่น (หรือผู้ใช้ทั้งหมด) จากนั้นคุณสามารถเรียกใช้:

history | grep "apt-get install"

และนั่นควรจะได้ผลลัพธ์ที่เกี่ยวข้องกับคุณเป็นส่วนใหญ่


1
ฉันจะได้รับประวัติทั้งหมดด้วยสิ่งนี้หรือไม่?
TellMe ทำไม

@DevRobot: หากคุณไม่ได้แก้ไขรายการด้วยตนเองapt-get installใน.bash_historyไฟล์หรือลบไฟล์นี้คำสั่งจะแสดงอินสแตนซ์ทั้งหมดเมื่อคุณดำเนินการคำสั่งด้วยสตริงที่apt-get installอยู่ในบัญชีผู้ใช้ของคุณ (แม้ว่าคุณจะ เรียกใช้คำสั่งในฐานะรูทดังนั้นจึงไม่เหมือนกับบัญชีผู้ใช้ของคุณซึ่งเรียกใช้คำสั่งด้วยsudo)

2
อาจมีปัญหาหากคุณป้อนคำสั่งมากกว่า 200 คำสั่ง
Arronical

2
@ หลักฐานทางกฎหมายคาดว่าเมื่อมีการเรียกร้อง ;-)
Rinzwind

1
ฉันเองจะถือว่า 500 เป็นค่าเริ่มต้น ( gnu.org/software/bash/manual/html_node/ ...... )
Rinzwind

1

หากคุณต้องการประวัติapt-get installคำสั่งใช้คำสั่งต่อไปนี้:

grep "apt-get install" .bash_history

เอาท์พุท:

ravan@ravan:~$ grep "apt-get install" .bash_history

sudo apt-get install --no-install-recommends ubuntu-mate-core ubuntu-mate-desktop
sudo apt-get install xfce4
sudo apt-get install xfce4.12
sudo apt-get install pgadmin
sudo apt-get install touchegg
sudo apt-get install aptitude
sudo apt-get install aptitude
sudo gedit .bash_history | grep "apt-get install" 
sudo apt-get installvim
grep "apt-get install" .bash_history
cat .bash_history | grep "apt-get install" 

สำหรับข้อมูลอื่น ๆ ดูข้อมูลเพิ่มเติม

นอกจากนี้ยังมีข้อมูลการติดตั้งเพิ่มเติมใน/var/log/apt/ในhistory.logและhistory.log.X.gzไฟล์และterm.logและterm.log.X.gzไฟล์

หากคุณต้องการประวัติapt-getคำสั่งรวมเท่านั้นแล้ว

history | grep apt-get


apt-mark showmanualแสดงแพ็คเกจทั้งหมดที่ติดตั้งเมื่อติดตั้งระบบปฏิบัติการด้วยแทนที่จะแสดงเฉพาะแพ็คเกจที่ติดตั้งด้วยตนเองเท่านั้น มันเป็นวิธีที่แปลกสำหรับการประพฤติ!
58

1
สิ่งนี้ไม่จำเป็นต้องให้รายละเอียดที่เฉพาะเจาะจงเกี่ยวกับประวัติ สิ่งที่ผู้คนต้องดูคือ/var/log/apt/history.logไฟล์ที่คล้ายกัน คุณจะได้รับรายการของแพ็คเกจที่เลือกด้วยตนเองและเลือกอัตโนมัติ คุณไม่ให้การใด ๆประวัติศาสตร์ตามลำดับเหตุการณ์ของสิ่งที่ถูกติดตั้งสิ่งที่ถูกลบออกสิ่งที่ถูกอัพเกรด ฯลฯ จากคำตอบนี้
Thomas Ward

@Arronical - หน้า man อยู่ที่ไหนapt -mark showmanual? ฉันไม่สามารถดูได้ในหน้า man ของ Ubuntu 16.04 LTS สำหรับapt: < manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html >
Craig Hicks


0

เพื่อดูสิ่งที่คุณได้ติดตั้งและลบออกติดตั้งใหม่และอื่น ๆ ข้อมูลเพิ่มเติมเกี่ยวกับการเดินทางของการติดตั้ง apt-get

คำตอบสามารถแก้ไขได้ในนามแฝง:

alias apted='zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | fgrep Commandline: | cut -d " " -f 2- | grep -P "^|install"'

0

โปรดทราบว่าสามารถตั้งค่าอาร์กิวเมนต์บางตัวก่อนการติดตั้งได้เช่นเดียวกับสคริปต์ virtualmin ระหว่างการติดตั้ง: apt-get -y install packagename

ดังนั้นหากคุณต้องการรวบรวมคำสั่งการติดตั้งทั้งหมดคุณต้องเปลี่ยนการสืบค้น regex

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get.*install (?!.*--reinstall)\K.*'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.