คุณยังมีความคิดที่ว่า คอมมานด์ไลน์เป็นเหมือนร่องรอยอารยธรรมในอดีต เป็นวิธีการใช้คอมพิวเตอร์แบบล้าสมัยอยู่ไหมครับ? คุณจะเปลี่ยนความคิดเมื่อมาลองใช้ลีนุกซ์ เพราะคอมมานด์ไลน์ที่แท้จริงเป็นเครื่องมือที่ยืดหยุ่นและทรงพลังอย่างยิ่ง ยกตัวอย่างเช่น การค้นหาไฟล์ .tmp ทั้งหมดในไดเรกทอรี (และไดเรกทอรีย่อย) แล้วลบทิ้งนั้น ถ้าทำงานผ่านยูเซอร์อินเทอร์เฟซแบบกราฟิกที่ทันสมัยในปัจจุบันอาจต้องกดสั่งอยู่หลายขั้นตอน ขณะที่สามารถจบการทำงานได้ในคำสั่งบรรทัดเดียวถ้าทำผ่านคอมมานด์ไลน์
ดังนั้นบทความนี้ผมจะสอนพื้นฐานของการใช้คอมมานด์ไลน์บนลีนุกซ์ ทั้งการสืบค้นในแต่ละไดเรกทอรี, การจัดการไฟล์และไดเรกทอรี, และการค้นหาข้อมูลต่างๆ เป็นต้น
หมายเหตุ: บทความนี้เคยถูกตีพิมพ์ครั้งแรกเมื่อวันที่ 19 มิถุนายน 2557 ซึ่งครั้งนี้นำกลับมาปัดฝุ่นลงให้ใหม่อีกครั้งนั้น เนื่องจากปัจจุบันพื้นฐานการเรียนรู้เกี่ยวกับลีนุกซ์แบบนี้ยังคงใช้ได้อยู่เสมอ ถือเป็นส่วนหนึ่งของกิจกรรม #ThrowbackThursday ของเรา
- ไดเรกทอรี Home ในลีนุกซ์คืออะไร?
ลีนุกซ์เป็นระบบปฏิบัติการแบบมัลติยูเซอร์ นั่นคือผู้ใช้หลายคนสามารถเข้าถึงโอเอสเดียวกันนี้พร้อมกันได้ โดยผู้ใช้แต่ละคนจะถูกจัดสรรไดเรกทอรีสำหรับจัดเก็บไฟล์ส่วนตัว ซึ่งโฟลเดอร์เหล่านั้นเรียกว่าโฟลเดอร์ Home ของผู้ใช้รายนั้นๆ
ไดเรกทอรี Home ของผู้ใช้แต่ละคนจะอยู่ภายใต้ไดเรกทอรีใหญ่ที่ชื่อ Home เช่น ชื่อผู้เขียนคือ Himanshu ไดเรกทอรี Home ของผู้เขียนจึงอยู่ที่ /home/himanshu สังเกตได้ว่า ชื่อไดเรกทอรี Home ของผู้ใช้ จะตรงกับชื่อล็อกอิน ซึ่งถ้าคุณเคยใช้วินโดวส์ ก็สามารถเปรียบเทียบได้กับไดเรกทอรีของผู้ใช้แต่ละรายที่อยู่ใน C:\Documents and Settings หรือ C:\Users เป็นต้น
ผู้ใช้จะมีสิทธิ์ควบคุมเหนือไดเรกทอรี Home ของตัวเองได้อย่างสมบูรณ์ โดยรวมถึงไดเรกทอรีย่อยภายในทั้งหมดด้วย นั่นคือสามารถบริหารจัดการไฟล์และไดเรกทอรีทั้งสร้างใหม่หรือลบ, ติดตั้งโปรแกรม, หรือการกระทำอื่นๆ ภายในโฮมไดเรกทอรีของตัวเองได้อย่างอิสระ
- จะดูไดเรกทอรีที่กำลังใช้งานอยู่ได้อย่างไร?
ทุกครั้งที่คุณเปิดเชลล์คอมมานด์ไลน์ในลีนุกซ์ จะเริ่มต้นที่โฮมไดเรกทอรีของคุณก่อนเสมอ ซึ่งถือเป็นไดเรกทอรีที่ใช้ทำงานอยู่ปัจจุบัน คุณสามารถเปลี่ยนไปอยู่บนไดเรกทอรีอื่นๆ ได้ ปกติคุณสามารถใช้คำสั่ง pwd เพื่อตรวจสอบพาธเต็มๆ ของไดเรกทอรีปัจจุบันได้ตลอด
ตัวอย่างเช่น:
การแสดงผลของคำสั่ง pwd ดังที่แสดงในรูปข้างต้น ชี้ว่าปัจจุบันผู้ใช้กำลังอยู่บนไดเรกทอรีที่ชื่อ Pictures ซึ่งอยู่ภายใต้ไดเรกทอรีชื่อ himanshu ซึ่งก็เป็นไดเรกทอรีย่อยในไดเรกทอรีชื่อ home อีกทอดหนึ่ง ในที่นี้ ข้อความ himanshu@ubuntu:~/Pictures$ เป็นพร็อมพ์รับคำสั่ง
- วิธีเปลี่ยนไปอยู่อีกไดเรกทอรีหนึ่ง
ให้ใช้คำสั่ง cd ในการเคลื่อนย้ายไปอยู่ไดเรกทอรีต่างๆ ในระบบไฟล์ลีนุกซ์ ซึ่งคำสั่งนี้ต้องตามด้วยข้อมูลป้อนเข้าหรืออากิวเมนต์ ที่ไม่ว่าจะเป็นชื่อไดเรกทอรีหรือพาธเต็มๆ แล้วแต่ว่าไดเรกทอรีที่เราต้องการไปอยู่ตรงไหน
ตัวอย่างเช่น ถ้าปัจจุบันคุณอยู่ที่ไดเรกทอรี /hone/himanshu/pictures แล้วต้องการไปที่ /home/himanshu/pictures/vacations ก็สามารถใส่พารามิเตอร์แค่ชื่อไดเรกทอรีได้ โดยพิมพ์เป็นคำสั่งว่า cd vacations ซึ่งคำสั่งนี้เป็นการสั่งให้เชลล์ค้นหาไดเรกทอรีชื่อ vacations ที่อยู่ภายใน pictures การเข้าไปยังโฟลเดอร์ที่สัมพันธ์กับโฟลเดอร์แม่เดิมนี้ เราเรียกพาธลักษณะนี้ว่า Relative Path
แต่ถ้าเป็นกรณีที่ต้องการย้ายไปอยู่ที่ /home/techspot คุณจำเป็นต้องใช้คำสั่ง cd /home/techspot โดยระบุพาธเต็มแทน ซึ่งจะเริ่มต้นจากเครื่องหมายสแลช (/) พาธเต็มที่ระบุตั้งแต่ไดเรกทอรีใหญ่สุดเรียงออกมานี้เรียกว่า Absolute Path นอกจากนี้ยังมีคำสั่งลัดในการเลื่อนกลับมาอยู่ไดเรกทอรีแม่ก่อนหน้าด้วย คือ cd .. หรือถ้าต้องการกลับไปอยู่ในไดเรกทอรีก่อนหน้าที่เคยจากมา ให้พิมพ์ว่า cd – เป็นต้น
4. จะเรียกดูรายการเนื้อหาภายในไดเรกทอรีได้อย่างไร?
ใช้คำสั่ง ls (แอลเอส มาจากคำว่า list) เพื่อแสดงรายการเนื้อหาภายในไดเรกทอรี โดยถ้าพิมพ์คำสั่งนี้โดยไม่ใส่อากิวเมนต์อื่นกำกับ จะเป็นการแสดงเนื้อหาภายในไดเรกทอรีปัจจุบัน
ตัวอย่างดังรูป: สำหรับการเรียกดูเนื้อหาในไดเรกทอรีอื่นนั้น คุณสามารถป้อนอากิวเมนต์เป็นทั้งชื่อไดเรกทอรี (กรณีเป็นไดเรกทอรีย่อยของไดเรกทอรีปัจจุบัน) หรือพาธเต็ม (กรณีที่ไม่ใช่ไดเรกทอรีย่อยบนไดเรกทอรีปัจจุบัน) ต่อท้ายคำสั่ง ls ได้
ถ้าลองสังเกตเอาต์พุตดูดีๆ จะเห็นว่าเอาต์พุตของคำสั่ง ls จะแยกเป็นสีต่างๆ ซึ่งแต่ละสีหมายถึงประเภทของไฟล์แต่ละชนิด ทำให้ง่ายต่อการจำแนก ซึ่งความหมายของแต่ละสีที่ควรทราบได้แก่ สีน้ำเงิน (ไดเรกทอรี), สีขาว (ไฟล์ข้อความ), สีแดง (ไฟล์ที่บีบอัดข้อมูล), สีฟ้าอ่อน (ลิงค์), สีเขียว (ไฟล์ที่สั่งรันในตัวเองหรือ Executable), และสีชมพู (ไฟล์ภาพ) เป็นต้น
- ทำอย่างไรถึงจะดูข้อมูลภายในไฟล์ได้?
ใช้คำสั่ง cat เพื่อแสดงเนื้อหาภายในไฟล์ที่ต้องการ โดยคำสั่งนี้ต้องการอากิวเมนต์เป็นชื่อไฟล์ ดังตัวอย่างการใช้งานในภาพด้านล่าง ที่คำสั่ง cat ใช้แสดงเนื้อหาภายในไฟล์ชื่อ arg.c แต่อย่างไรก็ดี ถ้าไฟล์มีขนาดมหึมาเกินไป การแสดงผลภายในเชลล์อาจจะเยอะเกินกว่าที่จะใช้งานได้นะครับ
ปัญหาดังกล่าวจะหมดไป (บ้าง) เมื่อต่อท้ายคำสั่งด้วยคำสั่ง less ด้วยวิธีส่งต่อข้อมูลไปยังคำสั่งถัดไปผ่านไปป์ไลน์ นั่นคือ คำสั่งที่ต้องพิมพ์จะอยู่ในรูป cat (ชื่อไฟล์) | less โดยสัญลักษณ์ | แสดงถึงไปป์หรือท่อที่ส่งผ่านเอาต์พุตไปยังคำสั่งด้านขวาถัดไป ในกรณีนี้คือคำสั่ง less ซึ่งจะทำให้คุณสามารถกดปุ่มลูกศรเลื่อนขึ้นลงเพื่อดูเนื้อหาเฉพาะหน้าที่ต้องการ โดยสามารถกดออกมาหน้าพร็อมพ์ปกติได้โดยกดปุ่ม q
- สร้างไฟล์ใหม่ได้อย่างไร?
ใช้คำสั่ง touch เพื่อสร้างไฟล์ใหม่ โดยอากิวเมนต์ของคำสั่งนี้คือชื่อของไฟล์ที่ต้องการ ตัวอย่างเช่น การสร้างไฟล์ชื่อ test.log บนไดเรกทอรีที่ทำงานอยู่ปัจจุบัน จะใช้คำสั่งว่า touch test.log
แต่ถ้าต้องการสร้างไฟล์ใหม่ในตำแหน่งอื่นนอกจากบนไดเรกทอรีที่ทำงานอยู่ปัจจุบัน ก็เพียงแค่ใส่พาธเต็มๆ ให้ชื่อไฟล์ เช่น touch /home/himanshu/practice/test.log
ทริคพิเศษ: สำหรับการเขียนข้อความใดๆ ลงในไฟล์ที่เพิ่งสร้างใหม่ ให้ใช้โปรแกรมแก้ไขเนื้อหาไฟล์บนคอมมานด์ไลน์อย่าง Vi หรือ Vim เป็นต้น
- แล้วการเปลี่ยนชื่อ/คัดลอก/ลบไฟล์ ทำอย่างไร?
ใช้คำสั่ง mv สำหรับการเปลี่ยนชื่อไฟล์ เช่น การที่จะเปลี่ยนชื่อไฟล์จาก log.txt เป็น new_log.txt ให้ใช้คำสั่งว่า mv log.txt new_log.txt ซึ่งถ้าไฟล์ดังกล่าวไม่ได้อยู่บนไดเรกทอรีที่ทำงานอยู่ปัจจุบัน ก็เพียงใส่พาธเต็มของไฟล์นั้น เช่นเดียวกับกรณีทั่วไป
นอกจากนี้ คุณยังสามารถใช้คำสั่ง mv เพื่อย้ายไฟล์จากตำแหน่งหนึ่งไปอยู่อีกตำแหน่งได้ ซึ่งลักษณะการทำงานคล้ายกับการกด Cut > Paste ในโอเอสแบบกราฟิกทั่วไป ตัวอย่างเช่น การย้ายไฟล์ log.txt (ที่อยู่ในไดเรกทอรีที่ใช้งานอยู่ปัจจุบัน) ไปยังไดเรกทอรี /home/himanshu ให้พิมพ์คำสั่งว่า mv log.txt /home/himanshu
ส่วนการคัดลอกไฟล์จากไดเรกทอรีหนึ่งไปสู่อีกไดเรกทอรีหนึ่งนั้น ใช้คำสั่ง cp ซึ่งการป้อนอากิวเมนต์เหมือนกับในคำสั่ง mv กรณีย้ายไฟล์ โดยต้องระบุต้นทางและปลายทาง เช่น cp log.txt /home/himanshu จะเป็นการคัดลอกไฟล์ log.txt (โดยไฟล์ที่ถูกคัดลอกมีชื่อไฟล์เหมือนต้นฉบับ) ไปยังไดเรกทอรี /home/himanshu เป็นต้น
สำหรับการลบไฟล์ทิ้ง ให้ใช้คำสั่ง rm โดยคำสั่งนี้ต้องการอากิวเมนต์เป็นชื่อไฟล์ที่ต้องการลบทิ้ง เช่น คำสั่ง rm log.txt จะลบไฟล์ข้อความ log.txt ที่อยู่บนไดเรกทอรีที่ใช้งานอยู่ปัจจุบันทิ้งไป ขณะที่ถ้าพิมพ์ rm /home/himanshu/practice/log.txt จะเป็นการลบไฟล์ดังกล่าวที่อยู่ภายในไดเรกทอรี practice ทิ้งแทน
ในการลบไดเรกทอรี ให้พิมพ์ออพชั่น -r ในคำสั่ง rm เพิ่ม ตัวอย่างเช่น rm –r /home/himanshu/practice/ จะเป็นลบไดเรกทอรี practice พร้อมกับไดเรกทอรีย่อยและไฟล์ภายในทั้งหมดทิ้ง
- วิธีค้นหาไฟล์
การค้นหาไฟล์ภายในไดเรกทอรีที่ต้องการ เราจะใช้คำสั่ง find ซึ่งคำสั่งนี้ต้องการพาธของไดเรกทอรีเป้าหมาย และชื่อไฟล์เป็นอากิวเมนต์ ตัวอย่างเช่น การค้นหาไฟล์ที่ชื่อ inheritance.cpp ภายในไดเรกทอรี /home/himanshu นั้น เราจะใช้คำสั่งในลักษณะตามรูปด้านล่าง
ผมใช้คำสั่ง sudo ขึ้นต้นก่อนคำสั่งอื่น เพื่อให้สิทธิ์การสั่งคำสั่งถัดไปนี้เป็นระดับเจ้าของระบบ (Super User) เนื่องจากถ้าไดเรกทอรีเป้าหมายเป็นของผู้ใช้คนอื่น หรือผู้ใช้ปัจจุบันไม่มีสิทธิ์เข้าถึง จะไม่สามารถรันคำสั่งนี้ได้ เป็นต้น (แต่สำหรับคุณแล้วอาจไม่จำเป็นต้องใช้ sudo นี้ก็ได้ หรือถ้าจะใช้ คุณก็ต้องรู้รหัสผ่านของเจ้าของระบบ)
ถ้าไม่ได้ระบุพาธเป็นอากิวเมนต์เพิ่มนอกจากชื่อไฟล์ คำสั่ง find จะทำการค้นหาไฟล์ชื่อดังกล่าวในไดเรกทอรีปัจจุบันแทน
นอกจากนี้ คุณยังสามารถใช้ไวลด์การ์ด (เช่น เครื่องหมาย * ที่แทนข้อมูลใดๆ ทั้งหมดในส่วนนั้น) กับคำสั่ง find เพื่อค้นหาไฟล์ที่ตรงกับกฎที่ระบุไว้ทั้งหมด เช่น ถ้าคุณต้องการค้นหาไฟล์ที่สกุล .c ที่อยู่ในไดเรกทอรี /home/himanshu/practice ทั้งหมด ให้ใช้คำสั่ง find ตามรูปด้านล่าง ซึ่งเครื่องหมาย “*” นี้ เป็นไวลด์การ์โ (Wildcard) ที่ใช้แทนค่าข้อมูลที่เป็นตัวเลขหรือตัวอักษรใดๆ ตัวอย่างเช่น tech* อาจแทนคำว่า tech, techspot, techreport เป็นต้น
- เราจะค้นหาข้อความภายในไฟล์ต่างๆ ได้อย่างไร?
การค้นหาข้อความภายในไฟล์ต่างๆ นั้น ใช้คำสั่ง grep ซึ่งคำสั่งนี้ต้องการอากิวเมนต์เป็นข้อความที่ต้องการค้นหาหรือ Keyword กับชื่อไฟล์เป้าหมาย โดยเอาต์พุตที่ได้จะเป็นข้อความแต่ละบรรทัดที่มีคีย์เวิร์ดอยู่ภายใน ตัวอย่างเช่น การค้นหาทุกบรรทัดภายในไฟล์ /home/himanshu/practice/wazi/gdb/test.c ที่มีคีย์เวิร์ด ptr เราจะใช้คำสั่ง grep ดังรูปต่อไปนี้
นอกจากนี้ เราสามารถใส่ออพชั่น –n กรณีที่ต้องการให้คำสั่ง grep แสดงเลขที่บรรทัดในเอาต์พุตด้วย ดังนี้
เทคนิค: สำหรับการค้นหาคีย์เวิร์ดที่ต้องการ ในไฟล์หลายไฟล์ที่อยู่บนไดเรกทอรีปัจจุบันนั้น สามารถใช้ไวลด์การ์ด * แทนชื่อไฟล์ได้
แต่จำไว้ว่า คำสั่ง grep นี้ ไม่ได้ค้นหาไฟล์ภายในไดเรกทอรีย่อยโดยดีฟอลต์ด้วยเหมือนในคำสั่ง find แต่อย่างไรก็ดี คุณสามารถเปิดให้ค้นไฟล์เป้าหมายในไดเรกทอรีย่อยได้ด้วยการใส่ออพชั่น –R ในคำสั่ง grep
- ฟีเจอร์ Auto-complete ในคอมมานด์ไลน์เป็นอย่างไร?
ขณะที่ทำงานบนคอมมานด์ไลน์ของลีนุกซ์นั้น การพิมพ์พาธ, ชื่อไฟล์, หรืออากิวเมนต์ยาวๆ ก็ดูน่ารำคาญพอสมควร แต่คุณสามารถใช้ปุ่ม tab ในการเติมข้อความให้สมบูรณ์โดยอัตโนมัติ (ฟีเจอร์ Auto-complate) สำหรับชื่อไฟล์หรือพาธยาวๆ ได้อย่างง่ายได้ เช่น การพิมพ์พาธ /home คุณอาจพิมพ์แค่ /ho แล้วกด tab ซึ่งเชลล์ของคอมมานด์ไลน์จะเติมข้อความที่เหลือให้คุณโดยอัตโนมัติ
จากกรณีข้างต้น เชลล์สามารถเดาชื่อเต็มๆ เป็น home ได้ง่ายเพราะไม่มีไดเรกทอรีชื่ออื่นที่ขึ้นต้นเหมือนกันในไดเรกทอรีรูท / แต่กรณีที่เชลล์เจอชื่อที่ขึ้นต้นเหมือนกันขณะกำลัง Auto-complete เชลล์จะแสดงผลรายการข้อความที่เป็นไปได้ทั้งหมดให้คุณดู แล้วเปิดโอกาสให้คุณพิมพ์ตัวอักษรเพิ่มเติมให้เชลล์ทราบว่าคุณต้องการพิมพ์ข้อความไหน
ตัวอย่างดังรูป:
เชลล์ได้แสดงชื่อไดเรกทอรีทั้งหมดที่สามารถทำ Auto-complete ให้ได้ ดังนั้น ถ้าคุณต้องการพิมพ์คำว่า techspot ก็เพียงแค่พิมพ์ตัว c อีกตัวเพิ่มก่อนกด tab เพื่อให้เชลล์รู้ว่าคุณต้องการข้อความไหน เป็นต้น
- รูท (Root) คืออะไร?
รูท (Root) คือผู้ใช้ที่มีอำนาจควบคุมระบบลีนุกซ์บนเครื่องทั้งหมด ซึ่งมีความสามารถหลายอย่างที่ผู้ใช้ทั่วไปทำไม่ได้ เช่น เปลี่ยนผู้ใช้เจ้าของไฟล์แต่ละไฟล์ หรือเพิ่มหรือลบไฟล์จากไดเรกทอรีของระบบ เป็นต้น ดังนั้น บัญชีผู้ใช้ที่เป็นรูทจะใช้กับผู้ที่ทำหน้าที่ดูแลระบบ หรือซิสเต็มแอดมินเท่านั้น
โดยไดเรกทอรีที่อยู่สูงสุดของระบบลีนุกซ์ จะแทนด้วยแค่เครื่องหมายสแลช (/) เรียกไดเรกทอรีนี้ว่า รูทไดเรกทอรี ซึ่งเป็นไดเรกทอรีเดียวกันกับที่มีไดเรกทอรี home ที่บรรจุไดเรกทอรีจำเพาะของแต่ละผู้ใช้อยู่ภายใน อย่างไรก็ดี อย่าสับสนกับไดเรกทอรี home ของผู้ใช้ที่เป็น root ซึ่งก็คือไดเรกทอรีชื่อ root ที่อยู่บนรูทไดเรกทอรีหรือ / อีกทีนั่นเอง
- แล้วหน้า “man” คืออะไร?
ถ้าคุณต้องการศึกษารายละเอียดเพิ่มเติมของคำสั่งต่างๆ บนลีนุกซ์ คุณสามารถเปิดดูคู่มือการใช้คำสั่งต่างๆ นั้นได้ในหน้า man (ย่อมาจาก Manual) ซึ่งมีมาให้ตั้งแต่ติดตั้งระบบ สำหรับการเปิดหน้า man นี้ เพียงพิมพ์คำสั่ง man ตามด้วยชื่อคำสั่งที่ต้องการศึกษา ตัวอย่างเช่น พิมพ์คำสั่งว่า man rm จะเป็นการเปิดหน้าคู่มือที่เกี่ยวกับการใช้คำสั่ง rm ทั้งอากิวเมนต์และออพชั่นที่ใช้ เป็นต้น นั่นคือ คุณสามารถศึกษาการใช้งานลีนุกซ์เพิ่มเติมได้ด้วยตนเองผ่าน Manual ลักษณะนี้
ทั้งหมดที่ผมกล่าวในบทความนี้ เป็นเพียงแค่บันไดก้าวแรกเท่านั้น คอมมานด์ไลน์บนลีนุกส์ยังสามารถใช้ทำงานได้หลากหลายมากมาย การฝึกฝนและเชี่ยวชาญในแต่ละคำสั่งที่กล่าวไว้ข้างต้นจะเป็นพื้นฐานให้ต่อยอดการใช้งานแบบมืออาชีพต่อไปในอนาคต
ที่มา : http://www.techspot.com/guides/835-linux-command-line-basics/