Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

สำหรับผู้ที่เพิ่งเข้าสู่ Debian-based Linux distros การจัดการแพ็กเกจอาจดูซับซ้อน บางบทช่วยสอนบอกให้ใช้ "apt" บางอัน "apt-get" และบางอันเก่าๆ ใช้ "aptitude" ก็ถึงเวลาที่จะลงลึกอธิบาย "ทำไม ที่ไหน อะไร และอย่างไร" ของโลกแปลกๆ และแยกแยะในมุมเล็กๆ ของจักรวาล Linux นี้

釐清 Apt 的困惑

ไม่ว่าจะรายละเอียดเล็กๆ น้อยๆ ที่แตกต่างกันไป apt, apt-get, และ aptitude ก็เป็นแค่บัตรเรียกที่ต่างกันของระบบจัดการแพ็กเกจของ Debian ที่โต้ตอบกับ online repositories นอกจากนี้ยังมีเครื่องมือจัดการแพ็กเกจอีกตัวใน Debian ที่จัดการการติดตั้งบนดิสก์: dpkg

dpkg คือเครื่องมือที่ใช้ทุกครั้งที่ดาวน์โหลดแพ็กเกจ .deb จากเว็บและดับเบิลคลิกติดตั้ง คล้ายกับไฟล์ MSI ใน Windows Solus มี EOPKG Fedora มี RPM Arch มี AUR แม้ Android ก็มีแพ็กเกจเรียกว่า APK และ repository ใหญ่ที่สุดคือ Google Play Store คุณคงเห็นได้แล้วว่าโครงสร้าง Linux คุ้นเคยกับ OS อื่นๆ แม้จะไม่ใช่ desktop/laptop

Aptitude คืออะไร?

Aptitude เป็นศูนย์ประสาทของ APT ทำหน้าที่เป็น front-end ให้ดูรายละเอียดแพ็กเกจทั้งหมดที่ดิสทริบิวชันเสนอใน repository และที่คุณเพิ่มเข้ามา มันยังเป็นหนึ่งใน GUI แบบเก่าๆ ที่คลิกได้ และรันอยู่ในเทอร์มินัลโดยตรง

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

APT คืออะไร?

APT (Advanced Packaging Tool) คือโซลูชันของ Debian สำหรับทำให้กระบวนการลบ ติดตั้ง ค้นหา และจัดการแอปพลิเคชันต่างๆ ในระบบปฏิบัติการเป็นกระแสหลัก ทุกดิสทริบิวชันที่ based on Debian ใช้ APT แต่ไม่ได้หมายความว่า APT ทุกตัวเท่าเทียมกัน จะกลับมาอธิบายต่อไป

สำคัญคือ APT بصفته package manager ไม่ใช่ คำสั่ง apt มันครอบคลุมคำสั่งที่เกี่ยวกับ APT หลายตัว เช่น apt-get, apt-mark, apt-cache

ดิสทริบิวชันไหนใช้ APT?

หากดิสทริบิวชันของคุณถูกอธิบายว่า "Debian-based" มันใช้ APT โลดูหน่อย รวมถึงแต่ไม่จำกัดเพียง:

  • Debian
  • Ubuntu
  • Linux Mint
  • MX Linux
  • Grml
  • Kali Linux
  • Tails
  • PureOS
  • Raspberry Pi OS
  • Elementary OS
  • SteamOS (ไม่ได้ใช้ Debian อีกต่อไป ย้ายไป Arch ในปี 2021 สำหรับ Steam 3.0)

ยังมีอีกมากมาย หากไม่ได้อยู่ในรายการ ลองพิมพ์ apt-get ในเทอร์มินัล ถ้าระบบบอกว่า command not found แสดงว่าไม่ได้ใช้ระบบ Debian-based

Apt-get vs Apt

ในหลายบทช่วยสอนออนไลน์เกี่ยวกับการติดตั้งแพ็กเกจ จะเห็น apt-get และ apt ใช้สลับกันได้บนระบบ Debian-based ใดๆ เมื่อพูดถึงการติดตั้งและลบ ไม่มีความแตกต่างว่าจะใช้คำสั่งไหน แต่别把這當成它們是彼此的版本

จำได้ไหมว่า apt-get เป็นเพียงหนึ่งในคำสั่งของ Advanced Packaging Tool? สำหรับมือใหม่ อาจสับสนที่ต้องจดจำว่าคำสั่งไหนใช้กับ apt-get, apt-mark, apt-cache ได้ ตัวอย่าง คำสั่งค้นหาแพ็กเกจคือ apt-cache search

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

ถ้าฟังก์ชันที่มีประโยชน์ที่สุดของทั้งสามคำสั่งนี้ถูกรวมกันจะเป็นอย่างไร?

นี่คือสิ่งที่คำสั่ง apt ทำโดยตรง ตัวอักษรสามตัวนี้เมื่อพิมพ์ในเทอร์มินัล ทำหน้าที่เป็น "wrapper" ของระบบนิเวศ APT ทำให้กระบวนการง่ายขึ้นสำหรับคนที่ใช้เวลามากกับเทอร์มินัล

เมื่อค้นหาแพ็กเกจ apt search ควรคืนผลลัพธ์ส่วนใหญ่ เหมือน apt-cache search

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

เรื่องของ APT Flags

หากสังเกตเอาต์พุตของคำสั่ง search ทั้งสอง จะเห็นข้อมูลต่างกันเล็กน้อย เพราะ apt command ดึงข้อมูลสถานะของแอปพลิเคชันในระบบ เพิ่มเติมจากสิ่งที่ apt-cache search แสดง

ตอนนี้ควรอธิบายว่า "i" ข้างชื่อแพ็กเกจในเอาต์พุต apt search หมายถึงอะไร มันคือ flag ที่ aptitude (front-end ของ Debian package tool) วางไว้

รายการ flags ที่จะเห็นในเทอร์มินัลและความหมาย:

  • A – ติดตั้งอัตโนมัติ อาจเป็นส่วนของ meta-package ขนาดใหญ่ หรือการติดตั้ง OS เอง
  • B – แพ็กเกจถูก flag ว่า broken ต้องติดตั้งใหม่
  • H – Half-installed แพ็กเกจต้องติดตั้งให้เสร็จ
  • c – แพ็กเกจถูกลบ แต่ "ผี" ของมันคงอยู่ในรูป config files แก้ได้ด้วย apt-get purge หรือ apt purge ตามด้วยชื่อแพ็กเกจที่มี flag นี้
  • p – แพ็กเกจถูก purge หรือไม่เคยติดตั้ง
  • v – แพ็กเกจถูกใช้โดยอื่นๆ เพื่อให้ฟังก์ชัน เช่น Firefox ให้ความสามารถในการเบราว์ซ์ที่แอปอื่นใช้ได้ ทำให้เป็น virtual package
  • i – แพ็กเกจนี้ติดตั้งอยู่ในระบบ
  • h – มี hold บนแพ็กเกจนี้ ป้องกันไม่ให้อัปเดตเป็นเวอร์ชันใหม่

Not All Apts Are Equal!

ก่อนจะไปต่อเรื่องจัดการแพ็กเกจ ต้องทราบว่า คำสั่ง apt อาจมี arguments ที่ใช้ได้มากกว่าในดิสทริบิวชันหนึ่งเทียบกับอีกตัว เช่น Ubuntu ขาด "hold" แต่ Mint มี

เพื่อเข้าใจอย่างลึกซึ้ง ต้องดูรายการ arguments ของ apt ใน Ubuntu และ Mint จะเห็นความแตกต่างที่ชัดเจน

นี่คือ Ubuntu บน test-bed ใหม่ของผม

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

และนี่คือ Linux Mint

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

Mint มี wrapper ที่สมบูรณ์ที่สุดใน Debian-based distros ที่เคยเห็น ไม่แปลกใจเพราะถูกสร้างโดยชุมชน Mint เอง เพื่อรองรับทั้งมือใหม่ที่อยากติดตั้งแอปด้วยคำสั่งสั้น และ geek ที่อยากปรับแต่งทุกอย่างอย่างละเอียด

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง APT

ไม่มีวิธีเข้าใจพลังของระบบแพ็กเกจ APT ดีกว่าการลองคำสั่งสำคัญๆ รายการจะประกอบด้วยคำสั่ง APT ตามด้วย apt simplification ในวงเล็บ (ถ้ามี) หาก simplification ไม่ทำงานในดิสทริบิวชันของคุณ อาจเพราะไม่ได้รวมไว้ หรือคุณไม่ได้ใช้ Mint ที่มี wrapper ใหญ่โต ในกรณีนี้ ให้ fallback ไปใช้คำสั่ง vanilla โดยไม่สูญเสียอะไรมาก

  • add-apt-repository (apt add-repository) – เพิ่ม repository ใหม่ในแหล่งซอฟต์แวร์จากผู้ดูแลแพ็กเกจ

ตัวอย่าง: อยากเพิ่ม repository ล่าสุดของ Lutris สำหรับ Mint 20 พิมพ์ sudo add-apt-repository หรือ sudo apt add-repository ตามด้วย ppa:lutris-team/lutris แต่ละ repository แตกต่างกัน นักพัฒนาที่ไม่มีแพ็กเกจใน official repo จะแนบคำแนะนำ

  • apt-get clean & apt-get autoremove (apt clean & apt autoremove) – มักใช้ร่วมกัน สองคำสั่งนี้กวาดฝุ่นในระบบ ได้แก่ สคริปต์ติดตั้งและสื่อติดตั้งที่ไม่ต้องการ (clean) รวมถึง釋放พื้นที่จัดเก็บจากแพ็กเกจที่ไม่มีใครใช้หรือพึ่งพา (autoremove)

ตัวอย่าง: sudo apt autoremove && sudo apt clean จะขูดคาบเว็บทั้งหมดจากดิสก์หลักในบรรทัดเดียว

  • apt-get changelog (apt changelog) – ดูการเปลี่ยนแปลงล่าสุดของแพ็กเกจ

ตัวอย่าง: apt-get changelog brave-browser จะบอกว่าล่าสุดของ Brave browser มีอะไรเพิ่มจาก revision ก่อนหน้า

  • apt contains – พบเฉพาะ Linux Mint และอาจจะ Ubuntu-derived distros บางตัว ใช้เมื่อเจอ error "file not found" ในโปรแกรม ด้วยโชค apt contains จะหาไฟล์นั้นให้ในโฟลเดอร์ไกลของแอปที่ติดตั้ง!

ตัวอย่าง: apt contains gettext.sh จะหาแอปที่มี shell script สำหรับ gettext หากติดตั้ง gettext-base ใน Mint จะเจอทันที!

  • apt-get install (apt install) – ติดตั้งแพ็กเกจ การส่งฟลาก --reinstall บน apt-get จะติดตั้งแพ็กเกจใหม่ทันที

ตัวอย่างติดตั้ง: sudo apt-get install firefox ตัวอย่าง reinstall: sudo apt-get install --reinstall firefox รูปแบบง่ายกว่าผ่าน apt wrapper: sudo apt reinstall firefox

  • apt-get remove (apt remove) – เครื่องมือที่ใช้บ่อยในอาร์เซนัลของนักสำรวจถ้ำเทอร์มินัล คำสั่งนี้จะ uninstall อะไรก็ตามที่ติดตั้งโดย APT ecosystem หรือ DPKG package manager

ตัวอย่าง: sudo apt remove grub-customizer

  • apt-get update (apt update) – คำสั่งนี้ ไม่ อัปเดตแอปพลิเคชันในระบบ แค่ refresh APT cache ให้ระบบเปรียบเทียบเวอร์ชันใน repository กับที่ติดตั้งอยู่ แค่ ตรวจสอบ อัปเดต ไม่ได้ ดำเนินการ
  • apt-get upgrade (apt upgrade) – จะดาวน์โหลดอัปเดตของแพ็กเกจที่ระบบพบหากมี ไม่ต้องปิดโปรแกรมที่ทำงานอยู่เพื่อทำนี้
  • apt-mark hold/unhold/showhold (apt hold/unhold/showhold) – ชุดคำสั่งจัดการแอปที่ถูก hold การ hold บอก OS อย่าอัปเดตในอนาคต ด้วย hold และ unhold เริ่มหรือยกเลิก hold บนแอป showhold แสดงรายการที่ hold อยู่

ตัวอย่าง: sudo apt hold pulseaudio ข้อควรระวัง: hold อัปเดตบนแพ็กเกจที่อื่นพึ่งพา อาจทำลายระบบในระยะยาวหากไม่แน่ใจว่ากำลังทำอะไร

  • apt-cache search/show (apt search/show) – คู่นี้เข้ากันดี ใช้แรกค้นหาแพ็กเกจ แล้วใช้ show ตามด้วยชื่อเต็มของแพ็กเกจเพื่อดูรายละเอียด

ตัวอย่าง: sudo apt search gimp

หากอยากอ่านรายละเอียด APT ของดิสทริบิวชันเฉพาะที่ไม่ได้ครอบคลุมในนี้ manual อยู่ในเทอร์มินัลแล้ว พิมพ์ man นำหน้าคำสั่งโดยไม่มี arguments กด Enter ได้เลย!

ปัญหา "apt-get command not found" ที่น่ากลัว

หากติดตั้งอะไรไม่ได้ในเทอร์มินัลเพราะ APT หายไป ไม่ใช่จบโลก ด้วยความพยายามเล็กน้อย จะได้ package manager กลับมา

แรกสุด หากเป็นระบบใหม่ ตรวจสอบก่อนว่ามัน ควร ใช้ APT เป็น package manager หรือไม่ Fedora ใช้ DNF/yum Arch ใช้ Pacman Solus ใช้ EOPKG openSUSE ใช้ zypper Mandriva ใช้ urpmi และอื่นๆ อีกมากใน cheat sheet เหล่านี้ พิมพ์ตัวอักษรเหล่านั้นในเทอร์มินัลเพื่อแน่ใจ

เมื่อแน่ใจว่าเป็น Debian-based และ APT หายไปจริง ขั้นตอนต่อไป

จะแนะนำผ่านขั้นตอนด้วยการ "ทำลาย" ระบบ Ubuntu ของผม และไม่อนุญาตให้หนีง่ายด้วยการติดตั้ง OS ใหม่!

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

ผลลัพธ์คือ error "command not found" หรือไม่สามารถประมวลผลคำสั่งได้

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

ไปหาแพ็กเกจ APT ที่เหมาะกับระบบและติดตั้ง เนื่องจากไม่มี APT จึงไม่สามารถดาวน์โหลด dependencies อัตโนมัติได้

โชคดีที่ Debian's on-disk package manager (dpkg) ช่วยชีวิต! ผมดาวน์โหลดเวอร์ชันล่าสุดของแพ็กเกจ apt ที่ตรงกับ CPU architecture จาก Ubuntu main repo และรัน dpkg -I เพื่อดู dependencies ที่ต้องติดตั้ง

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

ในกรณีของผม พยายามติดตั้ง APT ล่าสุด dependencies ทุกตัวอยู่แล้วแต่วอร์ชันเก่าเกินไป

จะรู้ได้เมื่อพิมพ์ dpkg -i /path/to/your/apt/deb/file แทนที่ path เท่าที่ผมพิมพ์ด้วย path จริงของ .deb ที่ดาวน์โหลดจากเว็บ

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

แทนที่จะใช้ version 2.3.11 ผมเลือก version 2.0.6 ซึ่งเป็นเวอร์ชันที่ติดตั้งใน Mint ณ ขณะเขียน

คู่มือฉบับสมบูรณ์สำหรับคำสั่ง Apt และ Apt-Get

หลังจากลองผิดลองถูกกับเวอร์ชันต่างๆ จะเจอเวอร์ชันที่ทำงานกับ setup ปัจจุบันได้ สิ่งนี้เกิดขึ้นกับผมพอดี หลังพิมพ์ sudo dpkg -i ตามด้วยแพ็กเกจ มันติดตั้งได้ราบรื่น

โดยทั่วไป dependencies สำคัญที่สุดของ APT เป็นสิ่งที่ระบบไม่ควรขาด แต่เนื่องจากคุณขาด APT อะไรก็เกิดได้ หากพบขาด dependency หนึ่งจากที่ดูด้วย dpkg -I ไปดูใน parent folders ของ repository ที่ลิงก์ไว้ ควรอยู่ในโฟลเดอร์ตามอักษร

คำถามที่พบบ่อย

1. มีคำสั่ง APT ที่ไม่ปลอดภัยไหม?

โดยทั่วไป หากพิมพ์คำสั่งเกี่ยวกับ APT ในเทอร์มินัล ควรทราบว่าคำสั่งนั้นจะทำอะไร ก่อนอัปเดตใหญ่ๆ โดยเฉพาะที่ติดตั้ง kernel ใหม่ ควรสำรองระบบเต็มรูปแบบเพื่อความปลอดภัย

นอกจากนี้ คำสั่งที่ต้องระวังจริงๆ คือ apt hold และ apt full-upgrade/dist-upgrade คำสั่งแรกอาจทำลายระบบจนกว่าจะ lift hold ตามที่อธิบายไปแล้ว คำสั่งหลังมีประโยชน์เมื่อดิสทริบิวชันปล่อย long-term version ใหม่ที่อยากย้ายไป แต่ก็อาจลบแพ็กเกจที่ติดตั้งไว้และคุ้นเคย คุณอยู่ในพื้นที่ปลอดภัยกว่าด้วยการทำ apt upgrade ปกติ แล้ว apt autoremove เพื่อลบแพ็กเกจที่สะสมฝุ่นจริงๆ

2. Apt ดีกว่า Apt-get ไหม?

รู้ว่าเป็นข้อความเก่าๆ แต่จริงๆ แล้วขึ้นอยู่กับว่าทำอะไรอยู่ นิ้วมือลอยไหมจากการพิมพ์คำสั่งเยอะ? อาจอยากใช้ apt เป็น shortcut หากไม่ต้องการอะไรเฉพาะที่ apt-get เหมาะสมกว่า ในหลายๆ มุมมอง apt ไม่เพียงแต่ streamlines การจัดการแพ็กเกจ แต่ยังให้ข้อมูลเพิ่มเติมเหมือนที่เห็นตอนเปรียบเทียบ apt-get search กับ apt search

อย่างไรก็ตาม หากไม่อยู่บน Mint ที่มี argument list ใหญ่โตของ apt จนเกือบทำให้ apt-get ไม่จำเป็น คุณอาจรู้สึกดีที่มีของเก่าๆ เหลืออยู่ให้ fallback

3. Repository และ App Store ต่างกันยังไง?

สำหรับผู้ใช้ประจำวัน ความแตกต่างไม่ได้ใหญ่โต ในความเป็นจริง เหมือนกันมาก จุดแยกทางคือ software "fungibility" Linux มีตลาดซอฟต์แวร์ที่ไหลไหล ผู้ใช้ได้รับตัวเลือกมากมาย App store บนสมาร์ทโฟนค่อนข้างก้าวหนึ่ง และยากที่จะจินตนาการว่าผู้ใช้จะหาทางเลือกอื่น

ในเวลาเดียวกัน ทฤษฎีแล้ว Personal Package Archives (PPAs) ที่ผู้ใช้ Ubuntu ชอบ อาจถูกขโมยและนำไปเผยแพร่ซอฟต์แวร์ร้ายโดยผู้ประสงค์ร้าย

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

สรุป

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

อ่านต่อเพื่อเรียนรู้วิธีรัน Bash commands ในพื้นหลังบน Linux และ 15 คำสั่ง Linux LS ที่ควรรู้