หน้าแรก Applications คู่มือคอมมานด์ไลน์บน Linux ฉบับมือใหม่

คู่มือคอมมานด์ไลน์บน Linux ฉบับมือใหม่

แบ่งปัน

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

ดังนั้นบทความนี้ผมจะสอนพื้นฐานของการใช้คอมมานด์ไลน์บนลีนุกซ์ ทั้งการสืบค้นในแต่ละไดเรกทอรี, การจัดการไฟล์และไดเรกทอรี, และการค้นหาข้อมูลต่างๆ เป็นต้น

หมายเหตุ: บทความนี้เคยถูกตีพิมพ์ครั้งแรกเมื่อวันที่ 19 มิถุนายน 2557 ซึ่งครั้งนี้นำกลับมาปัดฝุ่นลงให้ใหม่อีกครั้งนั้น เนื่องจากปัจจุบันพื้นฐานการเรียนรู้เกี่ยวกับลีนุกซ์แบบนี้ยังคงใช้ได้อยู่เสมอ ถือเป็นส่วนหนึ่งของกิจกรรม #ThrowbackThursday ของเรา

  1. ไดเรกทอรี Home ในลีนุกซ์คืออะไร?

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

ไดเรกทอรี Home ของผู้ใช้แต่ละคนจะอยู่ภายใต้ไดเรกทอรีใหญ่ที่ชื่อ Home เช่น ชื่อผู้เขียนคือ Himanshu ไดเรกทอรี Home ของผู้เขียนจึงอยู่ที่ /home/himanshu สังเกตได้ว่า ชื่อไดเรกทอรี Home ของผู้ใช้ จะตรงกับชื่อล็อกอิน ซึ่งถ้าคุณเคยใช้วินโดวส์ ก็สามารถเปรียบเทียบได้กับไดเรกทอรีของผู้ใช้แต่ละรายที่อยู่ใน C:\Documents and Settings หรือ C:\Users เป็นต้น

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

  1. จะดูไดเรกทอรีที่กำลังใช้งานอยู่ได้อย่างไร?

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

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

linux1

การแสดงผลของคำสั่ง pwd ดังที่แสดงในรูปข้างต้น ชี้ว่าปัจจุบันผู้ใช้กำลังอยู่บนไดเรกทอรีที่ชื่อ Pictures ซึ่งอยู่ภายใต้ไดเรกทอรีชื่อ himanshu ซึ่งก็เป็นไดเรกทอรีย่อยในไดเรกทอรีชื่อ home อีกทอดหนึ่ง ในที่นี้ ข้อความ himanshu@ubuntu:~/Pictures$ เป็นพร็อมพ์รับคำสั่ง

  1. วิธีเปลี่ยนไปอยู่อีกไดเรกทอรีหนึ่ง

ให้ใช้คำสั่ง 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)  เพื่อแสดงรายการเนื้อหาภายในไดเรกทอรี โดยถ้าพิมพ์คำสั่งนี้โดยไม่ใส่อากิวเมนต์อื่นกำกับ จะเป็นการแสดงเนื้อหาภายในไดเรกทอรีปัจจุบัน

ตัวอย่างดังรูป:linux2 สำหรับการเรียกดูเนื้อหาในไดเรกทอรีอื่นนั้น คุณสามารถป้อนอากิวเมนต์เป็นทั้งชื่อไดเรกทอรี (กรณีเป็นไดเรกทอรีย่อยของไดเรกทอรีปัจจุบัน) หรือพาธเต็ม (กรณีที่ไม่ใช่ไดเรกทอรีย่อยบนไดเรกทอรีปัจจุบัน) ต่อท้ายคำสั่ง ls ได้

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

  1. ทำอย่างไรถึงจะดูข้อมูลภายในไฟล์ได้?

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

linux3

ปัญหาดังกล่าวจะหมดไป (บ้าง) เมื่อต่อท้ายคำสั่งด้วยคำสั่ง less ด้วยวิธีส่งต่อข้อมูลไปยังคำสั่งถัดไปผ่านไปป์ไลน์ นั่นคือ คำสั่งที่ต้องพิมพ์จะอยู่ในรูป cat (ชื่อไฟล์) | less โดยสัญลักษณ์ | แสดงถึงไปป์หรือท่อที่ส่งผ่านเอาต์พุตไปยังคำสั่งด้านขวาถัดไป ในกรณีนี้คือคำสั่ง less ซึ่งจะทำให้คุณสามารถกดปุ่มลูกศรเลื่อนขึ้นลงเพื่อดูเนื้อหาเฉพาะหน้าที่ต้องการ โดยสามารถกดออกมาหน้าพร็อมพ์ปกติได้โดยกดปุ่ม q

  1. สร้างไฟล์ใหม่ได้อย่างไร?

ใช้คำสั่ง touch เพื่อสร้างไฟล์ใหม่ โดยอากิวเมนต์ของคำสั่งนี้คือชื่อของไฟล์ที่ต้องการ ตัวอย่างเช่น การสร้างไฟล์ชื่อ test.log บนไดเรกทอรีที่ทำงานอยู่ปัจจุบัน จะใช้คำสั่งว่า touch test.log

แต่ถ้าต้องการสร้างไฟล์ใหม่ในตำแหน่งอื่นนอกจากบนไดเรกทอรีที่ทำงานอยู่ปัจจุบัน ก็เพียงแค่ใส่พาธเต็มๆ ให้ชื่อไฟล์ เช่น touch /home/himanshu/practice/test.log

ทริคพิเศษ: สำหรับการเขียนข้อความใดๆ ลงในไฟล์ที่เพิ่งสร้างใหม่ ให้ใช้โปรแกรมแก้ไขเนื้อหาไฟล์บนคอมมานด์ไลน์อย่าง Vi หรือ Vim เป็นต้น

  1. แล้วการเปลี่ยนชื่อ/คัดลอก/ลบไฟล์ ทำอย่างไร?

ใช้คำสั่ง 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 พร้อมกับไดเรกทอรีย่อยและไฟล์ภายในทั้งหมดทิ้ง

  1. วิธีค้นหาไฟล์

การค้นหาไฟล์ภายในไดเรกทอรีที่ต้องการ เราจะใช้คำสั่ง find ซึ่งคำสั่งนี้ต้องการพาธของไดเรกทอรีเป้าหมาย และชื่อไฟล์เป็นอากิวเมนต์ ตัวอย่างเช่น การค้นหาไฟล์ที่ชื่อ inheritance.cpp ภายในไดเรกทอรี /home/himanshu นั้น เราจะใช้คำสั่งในลักษณะตามรูปด้านล่าง

linux4

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

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

นอกจากนี้ คุณยังสามารถใช้ไวลด์การ์ด (เช่น เครื่องหมาย * ที่แทนข้อมูลใดๆ ทั้งหมดในส่วนนั้น) กับคำสั่ง find เพื่อค้นหาไฟล์ที่ตรงกับกฎที่ระบุไว้ทั้งหมด เช่น ถ้าคุณต้องการค้นหาไฟล์ที่สกุล .c ที่อยู่ในไดเรกทอรี /home/himanshu/practice ทั้งหมด ให้ใช้คำสั่ง find ตามรูปด้านล่าง ซึ่งเครื่องหมาย “*” นี้ เป็นไวลด์การ์โ (Wildcard) ที่ใช้แทนค่าข้อมูลที่เป็นตัวเลขหรือตัวอักษรใดๆ ตัวอย่างเช่น tech* อาจแทนคำว่า tech, techspot, techreport เป็นต้น

linux5

  1. เราจะค้นหาข้อความภายในไฟล์ต่างๆ ได้อย่างไร?

การค้นหาข้อความภายในไฟล์ต่างๆ นั้น ใช้คำสั่ง grep ซึ่งคำสั่งนี้ต้องการอากิวเมนต์เป็นข้อความที่ต้องการค้นหาหรือ Keyword กับชื่อไฟล์เป้าหมาย โดยเอาต์พุตที่ได้จะเป็นข้อความแต่ละบรรทัดที่มีคีย์เวิร์ดอยู่ภายใน ตัวอย่างเช่น การค้นหาทุกบรรทัดภายในไฟล์ /home/himanshu/practice/wazi/gdb/test.c ที่มีคีย์เวิร์ด ptr เราจะใช้คำสั่ง grep ดังรูปต่อไปนี้

linux6

นอกจากนี้ เราสามารถใส่ออพชั่น –n  กรณีที่ต้องการให้คำสั่ง grep แสดงเลขที่บรรทัดในเอาต์พุตด้วย ดังนี้

linux7

เทคนิค: สำหรับการค้นหาคีย์เวิร์ดที่ต้องการ ในไฟล์หลายไฟล์ที่อยู่บนไดเรกทอรีปัจจุบันนั้น สามารถใช้ไวลด์การ์ด * แทนชื่อไฟล์ได้

แต่จำไว้ว่า คำสั่ง grep นี้ ไม่ได้ค้นหาไฟล์ภายในไดเรกทอรีย่อยโดยดีฟอลต์ด้วยเหมือนในคำสั่ง find แต่อย่างไรก็ดี คุณสามารถเปิดให้ค้นไฟล์เป้าหมายในไดเรกทอรีย่อยได้ด้วยการใส่ออพชั่น –R ในคำสั่ง grep

  1. ฟีเจอร์ Auto-complete ในคอมมานด์ไลน์เป็นอย่างไร?

ขณะที่ทำงานบนคอมมานด์ไลน์ของลีนุกซ์นั้น การพิมพ์พาธ, ชื่อไฟล์, หรืออากิวเมนต์ยาวๆ ก็ดูน่ารำคาญพอสมควร แต่คุณสามารถใช้ปุ่ม tab ในการเติมข้อความให้สมบูรณ์โดยอัตโนมัติ (ฟีเจอร์ Auto-complate) สำหรับชื่อไฟล์หรือพาธยาวๆ ได้อย่างง่ายได้ เช่น การพิมพ์พาธ /home คุณอาจพิมพ์แค่ /ho แล้วกด tab ซึ่งเชลล์ของคอมมานด์ไลน์จะเติมข้อความที่เหลือให้คุณโดยอัตโนมัติ

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

ตัวอย่างดังรูป:

linux8

เชลล์ได้แสดงชื่อไดเรกทอรีทั้งหมดที่สามารถทำ Auto-complete ให้ได้ ดังนั้น ถ้าคุณต้องการพิมพ์คำว่า techspot ก็เพียงแค่พิมพ์ตัว c อีกตัวเพิ่มก่อนกด tab เพื่อให้เชลล์รู้ว่าคุณต้องการข้อความไหน เป็นต้น

  1. รูท (Root) คืออะไร?

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

โดยไดเรกทอรีที่อยู่สูงสุดของระบบลีนุกซ์ จะแทนด้วยแค่เครื่องหมายสแลช (/) เรียกไดเรกทอรีนี้ว่า รูทไดเรกทอรี ซึ่งเป็นไดเรกทอรีเดียวกันกับที่มีไดเรกทอรี home ที่บรรจุไดเรกทอรีจำเพาะของแต่ละผู้ใช้อยู่ภายใน อย่างไรก็ดี อย่าสับสนกับไดเรกทอรี home ของผู้ใช้ที่เป็น root ซึ่งก็คือไดเรกทอรีชื่อ root ที่อยู่บนรูทไดเรกทอรีหรือ / อีกทีนั่นเอง

  1. แล้วหน้า “man” คืออะไร?

ถ้าคุณต้องการศึกษารายละเอียดเพิ่มเติมของคำสั่งต่างๆ บนลีนุกซ์ คุณสามารถเปิดดูคู่มือการใช้คำสั่งต่างๆ นั้นได้ในหน้า man (ย่อมาจาก Manual) ซึ่งมีมาให้ตั้งแต่ติดตั้งระบบ สำหรับการเปิดหน้า man นี้ เพียงพิมพ์คำสั่ง man ตามด้วยชื่อคำสั่งที่ต้องการศึกษา ตัวอย่างเช่น พิมพ์คำสั่งว่า man rm จะเป็นการเปิดหน้าคู่มือที่เกี่ยวกับการใช้คำสั่ง rm ทั้งอากิวเมนต์และออพชั่นที่ใช้ เป็นต้น นั่นคือ คุณสามารถศึกษาการใช้งานลีนุกซ์เพิ่มเติมได้ด้วยตนเองผ่าน Manual ลักษณะนี้

linux9_

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

ที่มา : http://www.techspot.com/guides/835-linux-command-line-basics/