ทำไมบางครั้ง `sudo apt-get install XXXX` ขอการยืนยันไม่ใช่คนอื่น?


29

เพียงแค่อยากรู้อยากเห็นบางครั้งในขณะที่ติดตั้งซอฟต์แวร์ผ่านapt-get install software_nameสถานีแจ้งให้ฉันยืนยัน "ประเภทใช่หรือไม่ใช่" แต่ไม่ใช่ allways

ฉันไม่ได้หมายถึงพรอมต์รหัสผ่าน sudo แต่ข้อความ "จะถูกดาวน์โหลดและกำหนดค่า XXX Kb ดำเนินการต่อหรือไม่" (หรือสิ่งที่คล้ายกัน)

ทำไม?


2
โดยพื้นฐานแล้วหากแพ็กเกจอื่นนอกเหนือจากที่กล่าวถึงในอาร์กิวเมนต์ต้องติดตั้งมันจะถาม
muru

คำตอบ:


24

โดยปกติจะถามคุณว่ามีแพ็คเกจแนะนำหรือแนะนำที่ขึ้นอยู่กับซอฟต์แวร์ที่คุณพยายามติดตั้งหรือไม่ทั้งนี้ขึ้นอยู่กับขนาดของโปรแกรมหรือความปลอดภัยของพื้นที่เก็บข้อมูลที่คุณกำลังดาวน์โหลด


ฉันคิดว่าแรงจูงใจเดียวกัน .. แต่ฉันต้องการความปลอดภัยของคำตอบ
Strae

ใช่คำตอบนี้ถูกต้อง ฉันจะเพิ่มที่คุณสามารถ (มีประโยชน์หากคุณกำลังพยายามที่จะทำให้บางสิ่งบางอย่างโดยอัตโนมัติ) ใช้-yธงถ้าคุณไม่ต้องการที่จะได้รับแจ้ง
Umang

@Umang: ขอบคุณสำหรับคำแนะนำ แต่ฉันไม่จำเป็นต้องอะไรโดยอัตโนมัติในขณะนี้เป็นเพียงการอยากรู้อยากเห็น;)
Straßeการเดินทาง

12

apt-get install new-package จะขอการยืนยันก็ต่อเมื่อมันยังติดตั้งการพึ่งพาของแพคเกจที่กำหนด

หากแพ็คเกจเดียวที่คุณระบุจะถูกติดตั้งโดยไม่มีสิ่งใดเพิ่มเติมแพคเกจก็จะเงียบเนื่องจากคุณ "ยืนยัน" แล้วว่าคุณต้องการใช้แพ็คเกจนั้นโดยพิมพ์
แต่ถ้ามีบางแพ็คเกจพึ่งพาคุณอาจเปลี่ยนใจและต้องการหยุดการติดตั้ง (เช่นเพราะหนึ่งในนั้นก่อให้เกิดปัญหามาก่อน) ดังนั้นมันจะพร้อมท์ให้คุณใส่ y / n

ตอนนี้ถ้าคุณต้องการดูว่ามันจะทำอะไรคุณสามารถทำคำสั่ง install / run-จำลอง / dry คุณตั้งสวิตช์นี้โดยการเพิ่ม-sข้อโต้แย้ง ตัวอย่าง: การติดตั้งแพ็กเกจเดียวsudoku

bytecommander@AlkaliMetal:~$ sudo apt-get install sudoku -s
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  sudoku
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst sudoku (1.0.1-5 Ubuntu:14.10/utopic [i386])
Conf sudoku (1.0.1-5 Ubuntu:14.10/utopic [i386])

นั่นแสดงให้คุณเห็นว่าจะเกิดอะไรขึ้น แต่ไม่ใช่ว่าการดาวน์โหลดจะมีขนาดใหญ่เพียงใด

ดังนั้นอาจใช้สวิตช์อื่น, --print-uris. ตัวอย่างเดียวกัน:

bytecommander@AlkaliMetal:~$ sudo apt-get install sudoku --print-uris
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  sudoku
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 28.4 kB of archives.
After this operation, 106 kB of additional disk space will be used.
'http://ftp.uni-stuttgart.de/ubuntu/pool/universe/s/sudoku/sudoku_1.0.1-5_i386.deb' sudoku_1.0.1-5_i386.deb 28426 MD5Sum:ecd0e3cd4fc1e4e4edfe6c59d1c54847

--print-urisสวิทช์จะไม่เพียง แต่ป้องกันติดตั้งจริง แต่แสดงดาวน์โหลดและติดตั้งขนาดและข้อมูลเพิ่มเติมเกี่ยวกับแพคเกจ (ที่อยู่เว็บและ MD5Sum)
เรียนไม่ได้ใช้--print-uris และ -sร่วมกัน มันจะมีลักษณะเช่น-sเดียวกับ
โปรดทราบว่าคุณควรเพิ่ม-yสวิตช์ (= ถือว่าใช่ในทุกคำถาม) หากคุณต้องการประมวลผลเอาต์พุตเนื่องจากจะแจ้งให้คุณยืนยันตามกฎเดียวกันกับการติดตั้งปกติโดยไม่ใช้สวิตช์


ตอนนี้ถ้าคุณต้องการกรองข้อมูลการดาวน์โหลดและติดตั้งขนาดไฟล์เท่านั้นโดยไม่ต้องอ่านสิ่งอื่นทั้งหมดคุณสามารถใช้คำสั่งต่อไปนี้เพื่อให้บรรลุสิ่งนี้ (ขอบคุณ @terdon สำหรับการช่วยเหลือ) อีกครั้งด้วยตัวอย่างsudoku:

bytecommander@AlkaliMetal:~$ LANG=C sudo apt-get -y --print-uris install sudoku | grep -Po '^(Need to|After this).*?\K[0-9.]+[ a-zA-Z]+? '
28.4 kB
106 kB

คุณเห็นว่าบรรทัดแรกของผลลัพธ์คือขนาดการดาวน์โหลดและบรรทัดที่สองอธิบายถึงพื้นที่ที่จำเป็นสำหรับการติดตั้ง

เนื่องจากคำสั่งนี้ไม่ง่ายในการพิมพ์และจำได้ยากขึ้นให้คัดลอกคำสั่งต่อไปนี้ลงในไฟล์สคริปต์เช่นชื่อapt-get-install-checker.sh:

#! /bin/bash

LANG=C sudo apt-get install -y --print-uris $* |
grep -Po '^(Need to|After this).*?\K[0-9.]+[ a-zA-Z]+? ' |
sed '1,1s/^/Download size: /;2,2s/^/Installed size: /'

อย่าลืมchmod +x apt-install-checker.shก่อนที่จะรัน!

ตัวอย่างผลลัพธ์:

bytecommander@AlkaliMetal:~/bin$ ./apt-install-checker.sh sudoku
Download size: 28.4 kB 
Installed size: 106 kB 

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


แต่มีวิธีที่จะขอให้คุณทุกครั้งหรือไม่ แม้โดยการเปลี่ยนรหัสจริงของโปรแกรม

@Toroidal การเปลี่ยนรหัสของโปรแกรมอยู่นอกขอบเขตเล็กน้อย - คุณอาจต้องขุดaptหรือapt-getmanpages เพื่อหาวิธีเปลี่ยนการตั้งค่าเนื่องจากเป็นไปได้ว่ามีการตั้งค่าที่คุณสามารถเปลี่ยนเพื่อบังคับได้
Thomas Ward

9

จากสิ่งที่ฉันเข้าใจ apt-get ถามเพื่อยืนยันเฉพาะเมื่อมีการอ้างอิงเพิ่มเติมเพื่อติดตั้ง ไม่มีวิธีใดที่จะบังคับให้มีการยืนยันตามค่าเริ่มต้นสำหรับแพ็คเกจทั้งหมด

อย่างไรก็ตามมันเป็นไปได้ที่จะบังคับให้ยืนยันคำสั่งติดตั้งเมื่อใช้ความถนัด

echo 'Aptitude::CmdLine::Always-Prompt "true";' | sudo tee -a /etc/apt/apt.conf.d/05aptitude

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