28 April 2005

Top 10 Linux Console Applications

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

  1. Screen
    อันนี้เป็นโปรแกรมหลักสำหรับทำผลการทดลองต่างๆ เลย screen คือโปรแกรมจำลองเทอร์มินัลบนเทอร์มินัลอีกที หรืออาจจะเรียกว่าเป็นโปรแกรมจัดการวินโดว์บนเทอร์มินัลก็ได้ ทำให้เราสามารถรันโปรแกรมหลายๆ โปรแกรมบนเทอร์มินัลตัวเดียวกันได้ โดยจะดีกว่าการรันแบบแบคกรานด์ตรงที่ screen จะจำลองเทอร์มินัลให้เรา ทำให้สามารถเรียกดูโปรแกรมที่กำลังรันได้ โดยไม่จำเป็นต้องสั่งให้เก็บผลการทำงานลงไฟล์ เช่นแต่เดิมเราอาจจะเรียกโปรแกรมโดย
    myprogram &> output.log &
    tail -f output.log (เรียกดูผลที่เก็บไว้ในไฟล์)
    
    จะสามารถเปลี่ยนไปใช้แค่ว่า
    screen myprogram
    
    จากนั้นก็กด Ctrl-A-D เพื่อให้กลับมายัง command prompt เดิม เวลาจะเรียกดูการทำงาน ก็ใช้
    screen -r
    
    นอกจากนี้ถ้าต้องการให้เก็บผลการทำงานไว้ในไฟล์โดยอัตโนมัติ ก็แค่ไปสร้างไฟล์ .screenrc ไว้ใน home แล้วเขียนในไฟล์นั้นว่า
    deflog on
    
    จะทำให้ screen สร้างไฟล์ screenlog.0 เพื่อเก็บผลการทำงานให้ทุกครั้ง
  2. Pine
    โปรแกรมสำหรับอ่านเมลบนคอนโซล ใช้บ่อยมากสมัยเรียนอยู่จุฬาฯ ซึ่งโปรแกรมอ่านเมลแบบที่ใช้ POP3 ยังไม่เป็นที่นิยมเหมือนทุกวันนี้ ตอนนี้ไม่ได้ใช้แล้ว เปลี่ยนมาใช้ Mail บน OS X กับ Thunderbird อ่านแทน เนื่องจากมีคุณสมบัติต่างๆ ดีกว่า รวมถึงพวกภาษาไทย และจัดการแยกเมลขยะให้อัตโนมัติด้วย
  3. Lynx
    โปรแกรมเบราเซอร์บนคอนโซล โปรแกรมนี้ก็ใช้บ่อยเหมือนกันตอนอยู่จุฬาฯ เดี๋ยวนี้ไม่ค่อยได้ใช้บ่อยนัก แต่จะได้ใช้เสมอ เวลาติดตั้ง Gentoo Linux เนื่องจากช่วงแรกยังต้องรอคอมไพล์ xorg-x11 ให้เสร็จก่อน ระหว่างนั้น ถ้าต้องการค้นหาข้อมูลมาใช้กำหนดค่าต่างๆ ก็ต้องพึ่ง lynx เป็นหลัก
  4. MySQL
    โปรแกรมจัดการฐานข้อมูลยอดนิยม ซึ่งได้ใช้เสมอๆ โดยเวลาต้องการทำเว็บเก็บข้อมูล หรือรับลงทะเบียนต่างๆ แหะๆ เนื่องจากขี้เกียจเขียนฟังก์ชันจัดการข้อมูลเอง ใช้ MySQL ไปเลยก็ง่ายดี แถมเร็วด้วย ที่จริงในแง่ของระบบจัดการฐานข้อมูลแล้ว MySQL ยังมีข้อจำกัดอยู่เยอะ แต่ถ้าทำงานง่ายๆ ก็ไม่ค่อยได้ใช้หรอก ถ้าต้องการความสามารถแปลกๆ ก็อาจจะเปลี่ยนไปใช้ PostgreSQL แทนได้ (แต่เคยได้อ่านที่ไหนว่า ประสิทธิภาพในแง่ความเร็ว จะสู้ MySQL ไม่ได้)

ที่ติดอันดับมีแค่นี้แหละ นอกนั้นขอพูดถึงโปรแกรมยอดนิยมส่วนตัว ที่ไม่ติดอันดับบ้าง

  1. Vim
    โปรแกรมบรรณาธิกรณ์หลักที่ใช้อยู่ทุกวันนี้ จำได้ว่าครั้งแรกอ.ญาใจซึ่งสอนภาษาซีตอนปีหนึ่งแนะนำให้ใช้ ความรู้สึกแรกคือทำไมมันใช้ยากอย่างนี้(วะ) เช่น มีแบ่งเป็นโหมดด้วย ว่าจะสั่งงาน หรือจะพิมพ์ข้อความ แถมคำสั่งต่างๆ ก็ต้องจำหมด ไม่สะดวกเอาซะเลย จำได้ว่าตอนนั้นไม่ได้ใช้หรอกใช้ pico แทน มาเริ่มใช้งาน vi จริงๆ จังๆ ก็ตอนไปอยู่ญี่ปุ่นมั้ง หลังจากเริ่มเบื่อ Mule ซึ่งอืดมากๆ สำหรับเครื่องในยุคนั้น พอเริ่มใช้งาน เริ่มคุ้นและจำคำสั่งต่างๆ ได้ ก็จะรู้สึกว่า vi สะดวกมาก ยิ่งเป็น vim ด้วย จะมีคำสั่งเพิ่มเติมหลายๆ อย่าง ทำให้สามารถเขียนโปรแกรมหรือพิมพ์งานต่างๆ ได้เร็วกว่าโปรแกรมบรรณาธิกรณ์อื่นๆ เยอะ ไม่จำเป็นต้องยกมือไปจับเมาส์ด้วย ตัวอย่างเช่น ถ้าจะค้นหาข้อความ ก็แค่กด escape แล้วก็กด / ตามด้วยข้อความแค่นั้นเอง จะแทรกบรรทัดใหม่ไปอยู่ที่บรรทัดก่อนตำแหน่งที่จะแทรก กด o แล้วเริ่มพิมพ์ได้เลย ไม่จำเป็นต้องกด end ไปท้ายบรรทัดก่อน แล้วตามด้วย enter แถมเวลาเขียนโปรแกรมก็มีระบบจัดย่อหน้าให้พร้อม
  2. Awk
    โปรแกรมสำหรับจัดการและแก้ไขข้อมูลในไฟล์ข้อความ เวลามีไฟล์ซึ่งเก็บข้อมูลในลักษณะที่หนึ่งบรรทัดเท่ากับหนึ่งเรคคอร์ด และแต่ละเรคคอร์ดมีข้อมูลหลายๆ อย่าง คั่นด้วยตัวอักษรอะไรสักอย่าง เช่น , หรือ : แล้วเกิดอยากได้ข้อมูลบางตัว อยากตัดบางตัวออก หรืออยากหาผลการคำนวณบางอย่าง จะทำงานได้เร็วมาก ถ้าใช้ awk เพราะเขาออกแบบมาเพื่องานแบบนี้โดยเฉพาะ ไม่จำเป็นต้องไปเสียเวลาเขียน perl ซึ่งอาจจะไม่ช้ามาก แต่ก็ไม่น่าจะเร็วกว่า awk ยิ่งถ้าใช้ C ด้วย ไม่มีทางสู้ awk ได้เลย เพราะกว่าจะเขียนโปรแกรมเสร็จก็แย่แล้ว เช่น ถ้ามีข้อมูลว่า
    0001:12:23
    0002:13:45
    0003:15:78
    0004:22:90
    
    แล้วต้องการหาผลรวมของแต่ละเรคคอร์ด ก็จะใช้ awk ว่า
    awk 'BEGIN {FS=":"}; { sum = $2 + $3; print $1":"sum }'
    
    โดย BEGIN {}; เป็นส่วนสำหรับกำหนดค่า หรือสั่งงานก่อนเริ่มอ่านไฟล์ โดยมีการกำหนดให้แบ่งฟิลด์ด้วยเครื่องหมาย : ส่วน {} ถ้ดมาจะถูกเรียกทำงานเรคคอร์ดละครั้ง ซึ่งจะกำหนดให้หาผลรวมระหว่างฟิลด์ที่สองกับฟิลด์ที่สาม แล้วก็พิมพ์ค่าฟิลด์ที่หนึ่งกับผลรวม
  3. Find
    โปรแกรมนี้ก็ใช้บ่อยเหมือนกัน เวลาหาไฟล์ไม่เจอ ที่จริงคำสั่งนี้ยืดหยุ่นมาก สามารถค้นหาไฟล์โดยกำหนดเงื่อนไขได้หลายรูปแบบมากๆ ไม่ได้จำกัดเฉพาะชื่อไฟล์เท่านั้น สามารถหาไฟล์โดยกำหนดขนาด กำหนดวันที่เปลี่ยนแปลงหลังสุดก็ได้ แถมสร้างเป็นลิสต์ของไฟล์ที่ต้องการส่งต่อไปให้คำสั่งอื่นๆ ได้อีก เคยใช้ find สำหรับแบคอัพข้อมูลเหมือนกัน โดยใช้สร้างลิสต์ของไฟล์ที่มีการเปลี่ยนแปลงใหม่กว่าไฟล์ที่กำหนด เพื่อจะได้เลือกเฉพาะไฟล์นั้นไปเก็บไว้ เป็นการแบคอัพเฉพาะส่วนที่เปลี่ยนแปลง ใช้ง่ายดีเหมือนกันนะ
  4. Tail
    โปรแกรมนี้ใช้บ่อยเหมือนกัน เวลาต้องการแก้ปัญหาต่างๆ ให้เครื่อง เพราะเวลาดู log ถ้าใช้ less ก็จะเสียเวลาเลื่อนไปบรรทัดท้ายๆ เนื่องจากไฟล์จะยาวมากๆ การใช้ tail จะช่วยแสดงส่วนท้ายๆ ของไฟล์ได้ง่ายกว่า

ที่ใช้บ่อยๆ ก็มีแค่นี้ล่ะมั้ง ไว้นึกออกแล้วจะมาเขียนต่อ

1 comment:

Anonymous said...

แต่ก่อนสมัย Internet ยังเป็นคล้ายๆ BBS
คือ โทรเข้าไป แล้วก็ขึ้นมาเป็น Prompt ให้ใส่ Username แบบ Telnet เลย

เคยลองซ่าเปิด vi ขึ้นมาเล่น (หลังจากไปอ่านจากที่ไหนมาไม่รู้)
แล้วออกจากโปรแกรมไม่ได้ !!!
จะ Ctrl-C, Alt-X ฯลฯ ก็แล้ว ก็ไม่มีปัญญาออกซะที
สุดท้ายต้องตัดสายโมเด็ม เสียตังค์ฟรีเลย -_-"