กลเม็ดการ search ใน aptitude

จำนวนแพกเกจใน Debian มีมากมายมหาศาล เวลาที่ใช้ aptitude ติดตั้งโปรแกรม สิ่งที่ต้องการมากอย่างหนึ่งจึงเป็นเรื่องการสืบค้น โดยมากแล้วเรามักจะใช้ apt-cache ค้นหาแพกเกจที่มีคำค้นอยู่ในชื่อหรือคำบรรยายแพกเกจ แต่ความจริงแล้ว aptitude เองก็สามารถสืบค้นได้ไม่แพ้ apt-cache แถมยังค้นได้ละเอียดกว่าอีกด้วย

ถ้าอยู่ในหน้าจอ fullscreen ของ aptitude ก็สามารถเริ่มค้นได้โดยกดปุ่ม '/' ซึ่งจะปรากฎกล่องโต้ตอบขึ้นมาให้ป้อนคำค้น หรือถ้าจะค้นย้อนกลับก็ใช้ปุ่ม '\' แทน เมื่อพบรายการแรกแล้ว จะค้นต่อไปก็กดปุ่ม 'n'

ถ้าอยู่ที่บรรทัดคำสั่ง ก็สามารถสืบค้นได้ด้วยคำสั่ง

$ aptitude search query

โดยปกติ ถ้า query เป็นคำธรรมดา ก็จะเป็นการค้นหาแพกเกจที่มีคำที่ต้องการอยู่ในชื่อแพกเกจ (ไม่รวมคำบรรยายแพกเกจ) แต่ตรง query ที่ไม่ใช่คำธรรมดานี่แหละ คือความเก่งกาจของ aptitude

ลองดู query แบบที่เด่น ๆ ก่อน

~dข้อความ
หาแพกเกจที่มี ข้อความ อยู่ในคำบรรยายแพกเกจ
~nข้อความ
หาแพกเกจที่มี ข้อความ อยู่ในชื่อแพกเกจ
~mชื่อ
หาแพกเกจที่มีผู้ดูแลเป็น ชื่อ ที่กำหนด
~b
หาแพกเกจที่พัง (broken) อยู่ เทียบเท่ากับกด 'b' ใน fullscreen
~Vรุ่น
หาแพกเกจที่มี รุ่น ที่กำหนดอยู่ในเลขรุ่น

ตัวอย่างเช่น

ค้นหาแพกเกจที่มีคำว่า "youtube" อยู่ในชื่อ:

$ aptitude search youtube
p   libwebservice-youtube-perl      - Perl module that provides an interface to 
i   youtube-dl                      - download videos from youtube.com

ค้นหาแพกเกจที่มีคำว่า "youtube" อยู่ในคำบรรยาย:

$ aptitude search ~dyoutube
i   clive                           - Video extraction utility for YouTube, Goog
p   conkeror                        - keyboard focused web browser with Emacs lo
p   libgdata1.4-cil                 - Google GData CLI client library           
p   libwebservice-youtube-perl      - Perl module that provides an interface to 
p   metacafe-dl                     - download videos from metacafe.com         
p   monodoc-gdata-manual            - compiled XML documentation for GData      
p   nicovideo-dl                    - Download videos from www.nicovideo.jp     
i A python-gdata                    - Google Data Python client library         
i A totem-plugins                   - Plugins for the Totem media player        
i   youtube-dl                      - download videos from youtube.com

ค้นหาแพกเกจที่ "thep" (อีเมล) หรือ "Theppitak" (ชื่อ) เป็นผู้ดูแล:

$ aptitude search ~mthep
...
$ aptitude search ~mTheppitak
...

ระวังว่า predicate ต้องตามด้วยคำค้นทันที ไม่มีช่องว่างคั่น และ query เหล่านี้สามารถใช้ได้ทั้งในโหมด fullscreen และที่บรรทัดคำสั่ง

predicate เหล่านี้ สามารถใช้ผสมกันได้ โดยปกติแล้วจะเป็นแบบ และ (and) เช่น "~mthep ~b" จะค้นหาแพกเกจที่ thep เป็นผู้ดูแลและพังอยู่ แต่ถ้าต้องการเชื่อมกันแบบ หรือ (or) ก็ทำได้โดยใช้เครื่องหมาย "|" เช่น "~mthep | ~mneutron" เป็นการหาแพกเกจที่ดูแลโดย thep หรือ neutron

predicate สามารถใส่วงเล็บเพื่อจัดกลุ่มได้ เช่น "~b (~mthep | ~mneutron)" จะหาแพกเกจที่พังอยู่ ซึ่งอยู่ในความดูแลของ thep หรือ neutron

predicate สามารถใช้รูปแบบ regular expression ประกอบได้ โดยถ้าจะใช้วงเล็บใน regular expression ก็สามารถ escape ได้โดยใส่อักขระ "~" นำหน้าวงเล็บ เช่น "~n^~(lib~)?gtk" จะเป็นการค้นหาแพกเกจที่ชื่อขึ้นต้นด้วย "libgtk" หรือ "gtk"

ยังมี predicate อื่น ๆ ที่ยังไม่ได้พูดถึงอีกเพียบ โดยดูรายการทั้งหมดได้จาก คู่มือของ aptitude

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

$ aptitude search ~Odebclub

จะเป็นการค้นหาแพกเกจที่มี Origin มาจาก debclub นั่นเอง คำสั่งนี้จะเป็นประโยชน์สำหรับผู้ใช้ที่ใช้หลาย repository ผสมกัน หรือใช้ระบบที่เป็น Debian-derivative เช่น Ubuntu ในการแยกแยะแหล่งที่มาของแพกเกจ

หรือจะหาว่า แพกเกจนี้มีใคร depends อยู่บ้าง:

$ aptitude search ~Dlibthai0

อีกเรื่องหนึ่งคือการค้นหาโดยอาศัยแท็ก ซึ่ง โครงการ debtags ของ Debian ได้จัดทำฐานข้อมูลแท็กสำหรับแพกเกจต่าง ๆ ไว้ คุณต้องติดตั้งแพกเกจ debtags เสียก่อน จึงจะสืบค้นผ่าน debtags ได้ โดยอาศัย predicate "~Gtag" เช่น

$ aptitude search ~Gweb::browser
...

เป็นการค้นหาแพกเกจทั้งหมดที่ถูกแท็กว่าเป็นเว็บเบราว์เซอร์ เป็นต้น

Comments

หามานาน คราวนี้ผมจะเลิกใช้ apt-cache search ...| grep ... ได้สักที แจ่มแจ้งแล้วครับ

Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้