File & Dir. Commands

คำสั่งเกี่ยวกับการจัดการไฟล์และไดเรกทอรี (File and Directory Managements)

ภายในระบบปฏิบัติการลีนุกซ์เกือบทุกสิ่งทุกอย่างที่อยู่ภายในระบบคือไฟล์ทั้งสิ้น (Everything is File) ได้แก่

  • ไฟล์ปกติทั่วไป (Regular files) เช่นไฟล์เอกสาร ไฟล์มัลติมีเดีย ไฟล์โปรแกรม

  • ไดเรกทอรี (Directories) ไฟล์ที่บรรจุรายการของไฟล์ต่างๆ

  • ไฟล์เชื่อมสัญลักษณ์ (Symbolic links) ไฟล์ที่อ้างอิงไปยังไฟล์อื่น

  • ไฟล์ท่อซ็อกเก็ต (Socket) ไฟล์ที่เป็นเป็นท่อเชื่อมต่อการสื่อสารข้อมูลระหว่างโปรเซส ที่อยู่ในเครื่องเดียวกัน หรือต่างเครื่องผ่านระบบเครือข่ายได้

  • ไฟล์ท่อส่งข้อมูล (Name Pipe) ไฟล์ที่ใช้เป็นท่อเชื่อมระหว่างโปรแกรม เพื่อส่งค่าผลลัพธ์ (output) ของโปรแกรมหนึ่ง ให้เป็นค่านำเข้า (input) ของอีกโปรแกรมหนึ่ง

  • ไฟล์อุปกรณ์ (Devices and Peripherals) ไฟล์ที่เชื่อมต่อกับอุปกรณ์ฮาร์ดแวร์ของระบบ

    • character device ไฟล์ที่เชื่อมต่อกับอุปกรณ์ฮาร์ดแวร์ที่สื่อสารแบบอนุกรม (ตัวอักษร)

    • block device ไฟล์ที่เชื่อมต่อกับอุปกรณ์ฮาร์ดแวร์ที่สื่อสารข้อมูลขนาดใหญ่

โครงสร้างไดเรกทอรีภายในระบบปฏิบัติการลีนุกซ์

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

ls, cp, mv และ rm

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

ภายในระบบไฟล์ จะเก็บข้อมูลไฟล์หรือไดเรกทอรี ซึ่งจะถูกเก็บในลักษณะของบล็อค (block) และข้อมูลของแต่ละไฟล์จะถูกเก็บใน ไอโหนด (inode) โดยจะมีรายละเอียดเช่น เจ้าของไฟล์ วันที่ใช้งานล่าสุด ขนาดไฟล์ และสิทธิ์การใช้งานต่างๆ โดยใช้้คำสั่ง ls –al นอกจากนั้นถ้าเราอยากได้ข้อมูลที่เกี่ยวกับไดเรกทอรีเท่านั้น ก็สามารถใช้ -ld ได้เมื่อต้องการที่จะคัดลอกไฟล์ เปลี่ยนชื่อไฟล์ ย้ายไฟล์ หรือลบไฟล์ เราจะต้องใช้คำสั่งต่อไปนี้

cp

เป็นคำสั่งที่ใช้ในการคัดลอกไฟล์ (ทั้งไฟล์เดียวและหลายไฟล์) โดยระบุ source และ target

mv

เป็นคำสั่งที่ใช้ในการโยกย้ายไฟล์หรือเปลี่ยนชื่อไฟล์ โดยการใช้งานจะคล้ายกับคำสั่ง cp แต่ค่า inode ของไฟล์ที่ย้ายหรือเปลี่ยนชื่อจะไม่ถูกเปลี่ยน ยกเว้นมีการย้ายของในระดับ filesystem ใหม่

rm

เป็นคำสั่งที่ใช้ในการลบไฟล์ โดยสามารถใช้ได้ทั้งไฟล์เดียวหรือหลายไฟล์

แสดงประเภทไฟล์ต่างๆ

แสดงเฉพาะไฟล์ชนิดทั่วไป (regular file)

แสดงเฉพาะไฟล์ชนิดไดเรกทอรี

แสดงเฉพาะไฟล์ชนิดเชื่อมสัญลักษณ์ (symbolic link file)

แสดงเฉพาะไฟล์ชนิดเชื่อมต่อกับอุปกรณ์ฮาร์ดแวร์ (character and block device file)

แสดงไฟล์ชนิดไฟล์ไปบ์ (Name pipe file)

Recursive listing

เราสามารถใช้คำสั่ง ls –R ในการดูรายการไฟล์และไดเรกทอรีรวมถึงไดเรกทอรีย่อยที่อยู่ภายในได้ แต่การใช้คำสั่งนี้จะไม่แสดงรายการของไฟล์ที่อยู่ในไดเรกทอรีย่อย

Recursive copy

ในการคัดลอกไดเรกทอรีย่อยที่อยู่ภายในไดเรกทอรีหลักที่ต้องการนั้นเราต้องใช้ option –R หรือ -rp (หรือ --recursive) ต่อท้ายคำสั่ง cp

Recursive deletion

คำสั่ง rmdir นั้นสามารถลบได้เฉพาะไดเรกทอรีว่างเท่านั้น เราจึงต้องนำ option –R หรือ -rf (หรือ --recursive) ของคำสั่ง rm ซึ่งหลังจากใช้คำสั่งแล้วไดเรกทอรีไฟล์ และไดเรกทอรีย่อยจะถูกลบไปทั้งหมด

Wildcards and globbing

ในบางครั้งเราต้องการแก้ไขข้อมูลไฟล์หลายๆไฟล์พร้อมกัน แต่ไม่ต้องการแก้ทุกไฟล์ในไดเรกทอรีเราสามารถแก้ปัญหานี้ได้โดยใช้ globbing ซึ่งอาศัยตัวอักขระพิเศษในการทำงาน เช่น '?', '*' และ '[',

ตารางตัวดำเนินการ

อักขระพิเศษ
รายละเอียด

?

เปรียบเทียบตัวอักษร

*

เปรียบเทียบข้อความ

[ .. ]

เปรียบเทียบตัวอักษรภายใน [ ]

cat, tac, less, od, และ split

คำสั่ง cat (catenate) คือคำสั่งที่ใช้แสดงข้อมูลที่อยู่ในไฟล์ออกมาแสดงครั้งเดียวพร้อมกันทั้งหมด ในบางครั้งก็ใช้ในการรวมไฟล์หลายไฟล์เข้าด้วยกันมาเป็นไฟล์เดียว ส่วนคำสั่ง tac คือคำสั่งที่ทำงานกลับกันจากผลลัพธ์ของคำสั่ง cat ถ้าไฟล์ที่ต้องการเปิดอ่านข้อมูลมีความยาวมาก ตัวอย่างเช่นไฟล์ที่เก็บ log ของระบบ ถ้าใช้คำสั่ง cat เพื่อเปิดไฟล์ log ย่อมไม่เป็นผลดีกับผู้อ่านเองเพราะจะแสดงข้อมูลออกมาอย่างรวดเร็วเกินกว่าจะจับใจความทันได้ ดังนั้นคำสั่ง less จึงเป็นคำสั่งยอดนิยมอีกคำสั่งหนึ่งที่ผู้ดูแลระบบหรือนักพัฒนาจะนิยมนำมาใช้ เนื่องจากมันจะช่วยให้การแสดงข้อมูลของไฟล์ที่มีขนาดใหญ่ให้สามารถเลื่อนหน้าจอขึ้นลงได้หรือแม้กระทั่งค้นหาคำได้ลักษณะคล้ายกับการใช้ text editor ในการเลื่อนหน้าจอของคำสั่ง less นั้นสามารถใช้งานได้ทั้งลูกศรขึ้นลงหรือการใช้ปุ่ม PageUp PageDown ในการควบคุมสำหรับในการค้นหานั้นจะค้นหาได้โดยการพิมพ์เครื่องหมาย / แล้วตามด้วยข้อความที่ต้องการค้นหา คำสั่ง less จะทำหน้าที่แสดงคำที่ผู้ดูแลระบบต้องการค้นหาออกมา ถ้าหากในกรณีที่ต้องการค้นหาคำถัดไป คำสั่ง less ได้้ออกแบบให้มีการกดแป้นพิมพ์ n เพื่อเลื่อนไปยังคำถัดไป

นอกจากคำสั่ง less จะมีความสามารถในการค้นหาแล้วนั้นความสามารถของคำสั่ง less ยังสามารถแสดงข้อมูลที่มีการเปลี่ยนแปลงที่บรรทัดสุดท้ายได้ โดยการกดปุ่ม F เช่นกรณีของไฟล์ log ที่จะมีข้อมูลเข้ามาตลอดเวลา less สามารถแสดงข้อมูลเหล่านั้นได้ทันทีโดยไม่จำเป็นต้องเปิดไฟล์ใหม่ แม้ไฟล์ log จะถูกบีบอัดเป็น .gz ก็ยังสามารถเปิดได้ด้วยคำสั่ง less ได้ทันที ตัวอย่างการใช้คำสั่งดังแสดงข้างล่าง

รูปแสดงผลลัพธ์การเปิดไฟล์ /var/log/syslog ด้วยคำสั่ง less

จากคำสั่งข้างต้นจะเน้นการเปิดไฟล์ชนิดข้อความ (text file) ทั่วไป แล้วแสดงผลเป็นข้อความปกติ แต่ในบางกรณีที่นักพัฒนาระบบสมองกลฝังตัวต้องการมองข้อความภายในไฟล์ในลักษณะอื่น เช่น แปลงเป็นเลขฐานแปด ฐานสิบ หรือ ฐานสิบหก คำสั่งที่นิยมใช้กันทั่วไปคือ od (Octal Dump) ซึ่งมีตัวเลือก -A ที่ไว้สำหรับระบุรากที่ต้องการ (Radix) และ -t สำหรับระบุรูปแบบการแสดงว่าจะเป็นเลขฐานต่างๆ เช่น เลขฐานแปด เลขฐานสิบ เลขฐานสิบหก หรือ รหัสแอสกี้ ด้วย ค่า o, d, x, c ตามลำดับ ดังตัวอย่างข้างล่าง

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

สามารถใช้คำสั่ง md5sum ทำการตรวจสอบไฟล์ทั้งสองว่ามีขนาดและข้อมูลภายในเหมือนกันหรือไม่

wc, head, and tail

คำสั่ง wc (Word Count) จะเหมาะกับการตรวจสอบรายละเอียดของข้อมูลภายในไฟล์ว่ามีขนาดใหญ่เท่าไหร่ มีบรรทัดทั้งหมดจำนวนเท่าไหร่ จำนวนคำทั้งหมดเท่าไหร่ นอกจากนั้น 2 คำสั่งที่เหมาะสมในการดูไฟล์ที่มีขนาดใหญ่เช่นเดียวกัน แต่จะเน้นดูเพียงแค่ส่วนหัวไฟล์ด้วยคำสั่ง head และส่วนท้ายไฟล์ด้วยคำสั่ง tail ซึ่งสามารถใช้ตัวเลือก option -n <บรรทัด> เพื่อระบุจำนวนบรรทัดที่ต้องการแสดง ดังตัวอย่างคำสั่งข้างล่าง

ในกรณีที่ผู้ดูแลระบบ หรือนักพัฒนาสมองกลฝังตัว ต้องการเฝ้าดูการเปลี่ยนแปลงของไฟล์ว่ามีข้อมูลเข้ามาหรือไม่ ก็สามารถใช้ตัวเลือก -f สำหรับคำสั่ง tail เพื่อเฝ้าดูเหตุการณ์การเปลี่ยนแปลงได้ทันที ดังรูป

pastedGraphic_2.png
รูปแสดงผลลัพธ์การติดตามการเปลี่ยนแปลงข้อมูลในไฟล์ด้วยคำสั่ง tail

Expand, unexpand and tr

ตัวอย่างในการสร้างไฟล์ text2 จากการใช้แท๊ป (Tab) เพื่อเว้นวรรคข้อความ ซึ่งในบางครั้งเราอาจต้องการเปลี่ยนจากแท๊ป (tab) เป็นช่องว่าง (space) หรือเปลี่ยนจาก space เป็น tab โดยการใช้ชุดคำสั่ง expand และ unexpand มาใช้ตามลำดับ

ตัวอย่างข้างต้นเป็นตัวอย่างการเปลี่ยนแท๊ป (Tab) เป็น space จำนวน 10 spaces (--tab=10 หรือ -t10)

ถ้าต้องการเปลี่ยนจาก space เป็น tab ด้วยคำสั่ง unexpand จะต้องมี space อยู่ติดกันอย่างน้อย 2 ตัวขึ้นไปดังตัวอย่างข้างล่างนี้ แต่อย่างไรก็ตามถ้าต้องการเปลี่ยนที่มี space เพียงตัวเดียวจริงๆ ก็สามารถใช้คำสั่ง tr แทนได้ดังตัวอย่างข้างล่าง

Sort and uniq

คำสั่ง sort เป็นคำสั่งที่ใช้ในการจัดเรียงข้อมูล โดยสามารถกำหนดการเรียงข้อมูลได้ว่าจะเรียงตามลำดับตัวเลขหรือลำดับตัวอักษร

สำหรับคำสั่ง uniq นั้น จะมีตัวอย่างการใช้งานดังแสดงข้างล่างนี้

Cut, paste, and join

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

ตัวอย่างข้างล่างแสดงการรวมข้อมูลจากไฟล์ B.txt มาต่อเป็นอีกคอลัมน์ในไฟล์ A.txt แล้วบันทึกเป็นไฟล์ใหม่ C.txt จะเห็นว่าจะมีช่องว่าง space เป็นค่าปริยาย ถ้าต้องการระบุตัวคั้น (delimiter) เป็นตัวอื่น ก็สามารถระบุโดยใช้ -d ดังแสดงข้างล่าง

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

ตัวอย่างข้างล่างแสดงการ join ข้อมูลจากทั้งสองไฟล์ (people.txt และ age.txt) ที่มีฟิลด์ตรงกัน

คำสั่ง cut นั้นจะถูกใช้ในการตัดทอนฟิลด์ของข้อมูลภายในไฟล์ ซึ่งโดยปกติจะใช้ tab ในการแบ่งข้อมูลแต่ละฟิลด์

Last updated

Was this helpful?