ตามที่เราเรียนรู้มาแล้วว่าลินุกซ์มองทุกอย่างเป็นไฟล์หรือเหมือนไฟล์ (file-like object) ดังนั้นการใช้งานหลักๆจะเป็นการดำเนินการกับไฟล์นั่นเอง ถึงแม้ว่าเราจะสามารถใช้ GUI ในการดำเนินการกับไฟล์ได้ แต่ในการใช้งานแบบเฉพาะเจาะจงลงไปบางครั้งการใช้ GUI ก็ไม่ตอบโจทย์ความต้องการของเรา และหากเราใช้คำสั่งได้อย่างคล่องแคล่วจะทำงานได้รวดเร็วกว่าการใช้ GUI มาก รวมถึงการใช้งานลินุกซ์ในแบบเซอร์ฟเวอร์หรือในอุปกรณ์ขนาดเล็กจะใช้คำสั่งเป็นหลักเพราะการติดตั้ง GUI จะเป็นการสิ้นเปลืองทรัพยากรของเครื่องหรืออุปกรณ์ ลินุกซ์มีคำสั่งพื้นฐานในการดำเนินการกับไฟล์และไดเร็คทอรี่ที่เราควรใช้ให้เป็น ไม่ว่าจะเป็นการสร้าง แสดง แก้ไข ลบ แก้ไขคุณสมบัติ หรือแก้ไขสิทธิของไฟล์และไดเร็คทอรี่

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

 *  (เครื่องหมายดอกจัน) ใช้แทนตัวอักษรมากกว่า 1 ตัว เช่น ls *.doc เพื่อแสดงทุกไฟล์ที่มีนามสกุล .doc 

 ?  (เครื่องหมายคำถาม) ใช้แทนตัวอักษร 1 ตัว เช่น ls test? เพื่อแสดงทุกไฟล์ที่มีชื่อขึ้นต้นด้วย test ตามด้วยตัวอักษรหรือตัวเลขอะไรก็ได้

[ตัวอักษรหรือตัวเลข]  เพื่อหาไฟล์ที่มีตัวอักษรหรือตัวเลขตามที่กำหนด ซึ่งจะช่วยให้เรากำหนดวงการค้นหาได้แคบกว่าการใช้  *  หรือ  ?  เช่น ls test[abc] หรือ ls test[a-c] เพื่อแสดงทุกไฟล์ที่มีชื่อขึ้นตอนด้วย test ตามด้วยตัวอักษร a หรือ b หรือ c

[!ตัวอักษรหรือตัวเลข] เพื่อหาไฟล์ที่ไม่มีตัวอักษรหรือตัวเลขตามที่กำหนด ซึ่งจะช่วยให้เรากำหนดวงการค้นหาได้แคบกว่าการใช้  *  หรือ  ?  เช่น ls test[!abc] หรือ ls test[!a-c ]เพื่อแสดงทุกไฟล์ที่มีชื่อขึ้นตอนด้วย test ตามด้วยตัวตัวอักษรที่ไม่ใช่ a หรือ b หรือ c

คำสั่ง file

     เนื่องจากชื่อไฟล์และนามสกุลของไฟล์ในลินุกซ์ไม่ได้เป็นตัวบอกว่าไฟล์นั้นเป็นไฟล์อะไร เช่น  ไฟล์ชื่อ file1.txt ก็ไม่ได้ยืนยันว่าไฟล์ดังกล่าวจะเป็นไฟล์ข้อความ (text file)  หรือไฟล์ชื่อ command.exe ก็ไม่ได้ยืนยันว่าไฟล์ดังกล่าวจะเป็นไฟล์โปรแกรม (execution file) โดยซอฟต์แวร์ที่จะใช้งานไฟล์จะดูเองว่าไฟล์ที่จะดำเนินการนั้นเป็นไฟล์อะไร เราสามารถใช้คำสั่ง file ในการดูว่าไฟล์นั้นเป็นไฟล์อะไรได้ตามตัวอย่างด้านล่าง

ภาพแสดงการใช้คำสั่ง file

คำสั่ง find

     เป็นคำสั่งที่มีประโยชน์มากเพื่อใช้ในการค้นหาไฟล์ภายใต้ไดเร็คทอรี่ที่ต้องการ โดยจะค้นหาลงไปในทุกๆไดเร็คย่อยภายใต้ไดเร็คทอรี่ที่กำหนดด้วย และแสดงผลลัพธ์พร้อมกับพาธในแบบ relative path ของไฟล์นั้น ตัวอย่างการใช้งาน เช่น ถ้าเราใช้ find เฉยๆจะแสดงชื่อไฟล์ทั้งหมดภายใต้ present working directory รวมถึงไฟล์ในไดเร็คทอรี่ย่อยด้วย เราสามารถกำหนดให้ค้นหาตามพาธอื่นที่ต้องการได้โดยที่เราไม่ต้องเปลี่ยนไปยังพาธที่ต้องการค้นหาโดยการกำหนด absolute path เช่น  find /usr/bin เราสามารถกำหนดชื่อไฟล์หรือไดเร็คทอรี่ที่ต้องการค้นหาโดยใช้ option -name  หรือ -iname  โดย -name คือการค้นหาตามชื่อที่กำหนด และ -iname คือการค้นหาชื่อที่ไม่ใช่ชื่อนี้ ตัวอย่างการใช้งาน เช่น find -name gcc เพื่อแสดงเฉพาะไฟล์หรือไดเร็คทอรี่ชื่อ gcc เรายังสามารถกำหนดให้ค้นหาเฉพาะไฟล์ หรือ ไดเร็คทอรี่ หรือ ลิ้งค์ ได้โดยใช้ option -type ตามด้วย  d คือไดเร็คทอรี่ หรือ l คือ ลิ้งค์ หรือ f คือ ไฟล์ เช่น find -type d -name gcc จะแสดงเฉพาะไดเร็คทอรี่ชื่อ gcc

ภาพแสดงการใช้คำสั่ง find

     นอกจากนี้คำสั่ง find ยังสามารถใช้งานร่วมกับคำสั่งอื่นได้ด้วยโดยจะส่งผลลัพธ์จากการค้นหาให้คำสั่งดังกล่าวไปดำเนินการต่อโดยการใช้ option -exec  เช่น  find -name “*.swp” -exec rm {} ’;’ เป็นคำสั่งให้ค้นหาไฟล์ที่มีนามสกุล swp ทั้งหมดและลบออกโดยใช้คำสั่ง rm โดยการใช้เครื่องหมายปีกกา {} เป็นตัวบอกให้รับผลจากการค้นหาในแบบหนึ่งต่อหนึ่งคือพอ find เจอไฟล์ที่ต้องการก็ส่งให้ rm ลบออก วนๆไปและท้ายคำสั่งต้องปิดด้วย ’;’ หรือ \; เสมอ นอกจากนี้เราสามารถใช้ option -ok ซึ่งจะทำงานเหมือน option -exec แต่จะรอให้เรายืนยันก่อนการดำเนินการ 

     บางครั้งเราอาจจะต้องการค้นหาไฟล์จากคุณสมบัติของมัน เช่น ไฟล์ถูกสร้างเมื่อไร  ถูกอ่านครั้งล่าสุดเมื่อไร ถูกแก้ไขครั้งล่าสุดเมื่อไร หรือค้นหาจากขนาดของไฟล์ เราสามารถทำได้โดยใช้ option -ctime, -atime, -mtime ตามด้วย n หรือ +n หรือ -n โดย -ctime หมายถึงวันที่สร้างไฟล์ -atime หมายถึงวันที่ไฟล์ถูกอ่านล่าสุด และ -mtime หมายถึงวันที่ไฟล์ถูกแก้ไขล่าสุด ส่วน n หมายถึงจำนวนวัน +n หมายถึงมากกว่าจำนวนวันที่กำหนด และ -n หมายถึงน้อยกว่าจำนวนวันที่กำหนด เช่น find gcc -ctime 3 คือการค้าหาไฟล์ชื่อ gcc ที่สร้างเมื่อ 3 วันก่อน

     การค้นหาไฟล์ฺจากขนาดของไฟล์ทำได้โดยใช้ option -size ตามด้วย nx -nx หรือ +nx โดย n คือเลขขนาดของไฟล์ และ x คือหน่วยของขนาด bytes (c), kilobytes (k), megabytes (M), gigabytes (G) เช่น find / -size +10M คือการหาไฟล์ขนาดเกิน 10M ภายใต้ root

ภาพแสดงการใช้คำสั่ง find

คำสั่ง locate

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

ภาพแสดงการใช้คำสั่ง locate

     เราสามารถเพิ่มตัวกรองในการแสดงผลโดยใช้คำสั่ง grep ซึ่งจะแสดงผลลัพธ์เฉพาะบรรทัดที่มีข้อความตามที่กำหนด เช่น locate iproute2 | grep var ซึ่งจะได้ผลลัพธ์ดังตัวอย่างด้านล่าง การเชื่อมต่อคำสั่งให้ทำงานด้วยกันโดยใช้ | (เครื่องหมายไปป์) จะกล่าวถึงในหัวข้อถัดๆไป

ภาพแสดงการใช้คำสั่ง locate | grape

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

ภาพแสดงการเรียกโปรแกรม updatedb

คำสั่ง touch

     เป็นคำสั่งที่ใช้ในการแก้ไขเวลาของไฟล์โดยหากใช้คำสั่ง touch filename โดย filename คือชื่อไฟล์ที่ต้องการแก้ไขจะเป็นการเปลี่ยนเวลาของไฟล์มาเป็นเวลาปัจจุบัน หากเราต้องการกำหนดเวลาของไฟล์เราจะใช้คำสั่ง touch -t  yymmddhhmm filename เราสามารถใช้ touch ในการสร้างไฟล์ใหม่โดยใช้คำสั่ง touch newfilename ตัวอย่างด้านล่างเป็นการใช้คำสั่ง touch ตามที่กล่าวมา โดยเริ่มจากใช้คำสั่ง ls แสดงชื่อไฟล์ที่มีอยู่และสร้างไฟล์ใหม่ด้วยคำสั่ง touch จากนั้นจะเป็นการเปลี่ยนเวลาของไฟล์และเปลี่ยนกลับมาเป็นเวลาปัจจุบัน

ภาพแสดงการใช้คำสั่ง touch

คำสั่ง cat

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

cat file1 file2 :เป็นการรวมไฟล์ file1 และ file2 และแสดงผลบนหน้าจอโดยเรียงลำดับตามชื่อไฟล์

cat file1 file2 > newfile : เป็นการรวมไฟล์ file1 และ file2 และบันทึกผลลงในไฟล์ newfile

cat file >> existingfile : เป็นการเพิ่มเนื้อหาของไฟล์ file ต่อท้ายลงในไฟล์ existingfile 

cat > file : เป็นการบันทึกบรรทัดที่พิมพ์ใหม่ในไฟล์ file จนกว่าจะกดปุ่ม Ctrl+d โดยทับข้อมูลเดิมในไฟล์

cat >> file : เป็นการเพิ่มบรรทัดที่พิมพ์ใหม่ต่อท้ายข้อมูลที่มีในไฟล์ file จนกว่าจะกดปุ่ม Ctrl+d

ภาพแสดงการใช้คำสั่ง cat

     เราสามารถสร้างไฟล์ใหม่พร้อมกับป้อนข้อมูลลงในไฟล์ได้ด้วยคำสั่ง cat <<EOF > newfilename โดย newfilename คือชื่อไฟล์ที่ต้องการสร้าง และเมื่อป้อนข้อมูลเสร็จแล้วให้ปิดไฟล์ด้วยคำสั่ง Ctrl+d  ตัวอย่างเช่น

ภาพแสดงการใช้คำสั่ง cat สร้างไฟล์

คำสั่ง tac

     เป็นคำสั่งที่ใช้แสดงเนื้อหาในไฟล์บนหน้าจอเหมือนกับ cat แต่จะแสดงจากบรรทัดล่างไปหาบรรทัดบน (สังเกตุว่า tac คือการสะกด cat ถอยหลังนั่นเอง)  คำสั่ง tac ใช้งานเหมือนคำสั่ง cat เช่น tac file หรือ tac file1 file2 > newfile เป็นต้น

ภาพแสดงการใช้คำสั่ง tac

คำสั่ง less 

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

ภาพแสดงการใช้คำสั่ง less

คำสั่ง head 

     เป็นคำสั่งที่ใช้แสดงเฉพาะส่วนบนๆของเนื้อหาในไฟล์ ประมาณ 10 บรรทัดสุดแรก เราสามารถบอกให้ head แสดงมากกว่า 10 บรรทัดได้ เช่น  “ head -20 “ เพื่อแสดง 20 บรรทัดแรก เราใช้คำสั่ง head ในกรณีที่เราต้องการดูข้อมูลที่อยู่ในช่วงแรกๆของไฟล์ที่มีขนาดใหญ่

คำสั่ง tail 

     เป็นคำสั่งที่ใช้แสดงเฉพาะส่วนล่างของเนื้อหาในไฟล์ประมาณ 10 บรรทัดสุดท้าย เราสามารถบอกให้ tail แสดงมากกว่า 10 บรรทัดได้เช่น  “ tail -20 “ เพื่อแสดง 20 บรรทัดสุดท้าย เราใช้คำสั่ง tail ในกรณีที่เราต้องการดูข้อมูลที่อยู่ในช่วงท้ายของไฟล์ที่มีขนาดใหญ่ เช่น ดู log ล่าสุดของไฟล์ log ต่างๆ และในกรณีที่เราต้องการให้ log ไฟล์แสดงบรรทัดล่าสุดที่ถูกเขียนลงใน log ไฟล์อย่างต่อเนื่องเราจะใช้ออปชั่น -f เช่น tail -f thisislog.txt

ภาพแสดงการใช้คำสั่ง head และ tail

คำสั่ง mkdir  

     เป็นคำสั่งที่ใช้ในการสร้างไดเร็คทอรี่รูปแบบคือ mkdir directoryname โดย directoryname คือชื่อไดเร็คทอรี่ที่ต้องการสร้าง

ภาพแสดงการใช้คำสั่ง mkdir

คำสั่ง rmdir 

     เป็นคำสั่งที่ใช้ในการลบไดเร็คทอรี่ โดยไดเร็คทอรี่ที่จะลบจะต้องเป็นไดเร็คทอรี่เปล่าๆเท่านั้น รูปแบบคือ rmdir diretoryname โดย directoryname คือชื่อไดเร็คทอรี่ที่จะลบ

ภาพแสดงการใช้คำสั่ง rmdir กรณีไดเร็คทอรี่เปล่า

ภาพแสดงการใช้คำสั่ง rmdir กรณีไดเร็คทอรี่ยังมีไฟล์

คำสั่ง mv 

     เป็นคำสั่งที่ใช้ในการแก้ไขชื่อไฟล์หรือไดเร็คทอรี่ รูปแบบ mv olename newname โดย oldname คือชื่อไฟล์หรือไดเร็คทอรี่ที่

ต้องการแก้ไขและ newname คือชื่อใหม่ที่ต้องการกำหนดให้

ภาพแสดงการใช้คำสั่ง mv

คำสั่ง rm 

     เป็นคำสั่งที่ใช้ในการลบไฟล์ รูปแบบคือ rm filenameโดย filename คือชื่อไฟล์ที่ต้องการลบ เราสามารถใช้ออบชั่น -i เพื่อให้ระบบยืนยันก่อนลบได้ นอกจากนี้เรายังสามารถใช้คำสั่ง rm directoryname -r โดย directoryname คือชื่อไดเร็คทอรี่ที่ต้องการลบ เพื่อลบไดเร็คทอรี่ที่ไม่ว่างได้ด้วย

ภาพแสดงการใช้คำสั่ง rm

คำสั่ง chmod 

     เป็นคำสั่งที่ใช้ในการแก้ไขสิทธิในการใช้งานไฟล์และไดเร็คทอรี่ทั้งสิทธิของเจ้าของ (owner) สิทธิของผู้ใช้งานในกลุ่มเดียวกัน (group) และสิทธิของคนอื่น (other) ก่อนที่จะเรียนรู้การใช้คำสั่ง chmod เรามาทำความรู้จักกับการกำหนดสิทธิการใช้งานกันก่อนดังนี้ 

     หากเราใช้คำสั่ง ls -l เพื่อดูรายละเอียดไฟล์ เราจะเห็นรายละเอียดสิทธิการใช้งานอยู่ด้านหน้าของไฟล์และไดเร็คทอรี่แต่ละบรรทัดดังตัวอย่าง

 drwxrwxrwx 2 homeuse homeuse 4096 เม.ย. 29 22:19 testdir

-rwxrwxrwx 1 homeuse homeuse    0 เม.ย. 29 22:19 testfile.txt

     สิทธิจะถูกแบ่งออกเป็น 3 ชุดแทนด้วย rwx rwx rwx โดยชุดแรกคือสิทธิของเจ้าของไฟล์ (owner) ชุดที่สองคือสิทธิของผู้ใช้งานในกลุ่มเดียวกัน (group) และชุดที่สามคือสิทธิของคนอื่น (other) ส่วน r (read) หมายถึงสิทธิในการอ่าน w (write) หมายถึงสิทธิในการเขียน และ x (execute) หมายถึงสิทธิในการประมวลผล ถ้าเราต้องการให้สิทธิใดก็กำหนดสิทธินั้นให้ไป เช่น ถ้าต้องการให้อ่านได้เท่านั้นก็จะให้สิทธิ r– หากต้องการให้อ่านและเขียนได้ก็จะให้สิทธิ rw- หากต้องการให้สิทธิทั้งอ่าน เขียน และประมวลผลได้ก็ให้สิทธิ rwx เป็นต้น 

     การให้สิทธิจะเป็นการมองสิทธิที่จะให้ในลักษณะเลขฐานสองโดยตำแหน่งที่เราต้องการให้สิทธิจะเป็น 1 และ ตำแหน่งที่ไม่ต้องการให้สิทธิจะเป็น 0 จากนั้นจึงแปลงมาเป็นเลขฐานสิบเพื่อใช้ในคำสั่ง เช่น หากต้องการให้สิทธิเพื่ออ่านเท่านั้น คือ r– ซึ่งจะกำหนดเป็นเลขฐานสองได้ 100 ซึ่งก็คือ 4 ในเลขฐานสิบ ดังนั้นถ้าต้องการกำหนดให้ทุกคนอ่านได้เท่านั้นเราสามารถทำได้โดยใช้คำสั่ง chmod 444 filename หรือในกรณีที่เราต้องการให้ทุกคนใช้งานได้เต็มที่ คือ rwx ซึ่งจะกำหนดเป็นเลขฐานสองได้ 111 ซึ่งก็คือ 7 ในเลขฐานสิบ ดังนั้นถ้าต้องการกำหนดให้ทุกคนเรากำหนดโดยใช้คำสั่ง chmod 777 filename สำหรับการแก้ไขไดเร็คทอรี่ก็ทำเช่นเดียวกัน 

ภาพแสดงการใช้คำสั่ง chmod

คำสั่ง chown

     คำสั่ง chown เป็นคำสั่งที่ใช้ในการแก้ไขการเป็นเจ้าไฟล์ของผู้ัใช้งาน โดยรูปแบบการใช้คือ sudo chown  username filename โดย username คือชื่อผู้ใช้งานที่ต้องการเปลี่ยนและ filename คือชื่อไฟล์ที่ต้องการเปลี่ยน หรือจะเปลี่ยนทั้งผู้ใช้งานและกลุ่มผู้ใช้งานสามารถทำได้โดยใช้คำสั่ง sudo chown  username:groupname filename โดย groupname คือชื่อกลุ่มผู้ใช้งานที่ต้องการเปลี่ยน

ภาพแสดงการใช้คำสั่ง chown

คำสั่ง chgrp

     คำสั่ง chgrp เป็นคำสั่งที่ใช้ในการแก้ไขการเป็นเจ้าของไฟล์ของกลุ่มผู้ัใช้งาน โดยรูปแบบการใช้คือ  sudo chgrp groupname filename โดย groupname คือชื่อกลุ่มผู้ใช้งานที่ต้องการเปลี่ยนและ filename คือชื่อไฟล์ที่ต้องการเปลี่ยน

ภาพแสดงการใช้คำสั่ง chgrp

คำสั่ง cp 

     เป็นคำสั่งที่ใช้ในการสำเนา (copy) ไฟล์โดยรูปแบบคือ cp originlfilname copiedfilenameโดย originalfilename คือชื่อไฟล์ที่เป็นต้นฉบับ และ copiedfilename คือชื่อไฟล์ที่จะสำเนามา

ภาพแสดงการใช้คำสั่ง cp

คำสั่ง dd 

     เป็นคำสั่งที่ใช้ในการสำเนาข้อมูลพร้อมๆกับสามารถแปลงรูปแบบของข้อมูลตามที่เรากำหนดได้ โดยการสำเนาจะเป็นการอ่านบล๊อคของข้อมูลจากสื่อบันทึกข้อมูลซึ่งเป็นการโคลนข้อมูลจากพี้นที่ที่กำหนดนั่นเอง ประโยชน์ของการอ่านข้อมูลในแบบนี้ทำให้เราสามารถสำเนาข้อมูลที่ไม่สามารถเห็นได้โดยคำสั่งสำเนาแบบอื่นๆ เช่น การทำสำเนา Master Boot Record (MBR) เพราะ MBR จะอยู่บนเซคเตอร์แรกของฮาร์ดดิสก์และไม่ได้แสดงให้เห็นในระบบแฟ้มข้อมูล ดังนั้นคำสั่งสำเนาแบบอื่นๆจะมองไม่เห็นข้อมูลในส่วนนี้ 

     หากเรากำหนดให้มีการแปลงข้อมูลคำสั่ง dd จะแปลงข้อมูลตามที่เรากำหนดก่อนที่จะบันทึกข้อมูลไปยังพื้นที่ที่กำหนด เช่น แปลงรหัสตัวอักษรของข้อมูลจาก EBCDIC ไปเป็น ASCII 

     การใช้งานคำสั่ง dd ค่อนข้างจะอันตรายหากเรากำหนดตัวแปรไม่ถูกต้อง อาจจะทำให้ข้อมูลหายไปทั้งฮาร์ดดิสก์ได้

     รูปแบบการใช้งานคำสั่ง dd คือ   dd if=source of=target [Options]  

โดย source หมายถึงข้อมูลต้นทาง และ target คือสำเนา ตามด้วย option ที่ต้องการ เราสามารถทำความเข้าใจในการใช้งานคำสั่ง dd จากตัวอย่างการใช้งานดังนี้

dd if = /dev/sda of = /dev/sdb   เป็นการโคลนทั้งฮาร์ดดิสก์จาก sda ไป sdb ถ้าไม่กำหนดขนาดบล๊อคคำสั่งจะใช้ค่า 512 ไบต์

dd if = /dev/sda of = /dev/sdb conv=noerror, sync เป็นการโคลนทั้งฮาร์ดดิสก์จาก sda ไป sdb โดยไม่หยุดแม้จะพบข้อผิดพลาดในการอ่านข้อมูลจาก sda  (conv=noerror) และแน่ใจว่าเขียนข้อมูลไปยังที่หมายเสร็จสิ้นก่อนอ่านบล๊อคถัดไป (sync) 

dd if = /dev/hda of = ~/hdadisk.img เป็นการโคลนฮาร์ดิสก์หรือพาร์ทิชั่นไปยังอิมเมจไฟล์

dd if = hdadisk.img of = /dev/hdb เป็นการ restore อิมเมจไฟล์ไปยังฮาร์ดดิสก์

dd if=/dev/hda | gzip -c >/tmp/vdadisk.img.gz เป็นการโคลนฮาร์ดิสก์ชื่อ hda ไปยังอิมเมจไฟล์และบีบอัดอิมเมจไฟล์ให้เล็กลง (zip)

gzip -dc /tmp/vdadisk.img.gz | dd of=/dev/vda เป็นการ restore อิมเมจไฟล์ที่บีบอัด

dd if = /dev/cdrom of = mycd.iso bs = 2048 เป็นการสร้าง iso อิมเมจไฟล์จากข้อมูลใน cdrom โดยให้อ่านบล๊อคละ 2048 ไบต์ และเนื่องจากคำสั่ง dd เป็นการสำเนาข้อมูลเป็นบล๊อคซึ่งจะสำเนาส่วนที่เป็น boot sector ของแผ่น cd มาด้วยดังนั้นเราสามารถเชื่อมต่ออิมเมจไฟล์เป็นเหมือนไดรว์เพื่ออ่านข้อมูลได้ด้วยคำสั่ง mount -o loop /mycd.iso /mnt/cd โดย /mnt/cd ก็คือ mont point 

dd if=/dev/sda of=/tmp/sdambr.img bs=512 count=1 เป็นการโคลน MBR โดยเรากำหนดให้อ่านเป็นบล๊อคขนาด 512 ไบต์ (bs=512) จาก sda และให้อ่านเพียงบล๊อคเดียว (count=1) ซึ่งก็คือการโคลนเฉพาะ 512 ไบต์แรกของ sda นั่นเอง

dd if=/tmp/sdambr.img of=/dev/sda เป็นการ restore MBR ไปยัง sda

dd if=textfile.ebcdic of=textfile.ascii conv=ascii เป็นการแปลงข้อมูลจาก ebcdic ไปเป็น ascii

dd if=textfile.ascii of=textfile.ebcdic conv=ebcdic เป็นการแปลงข้อมูลจาก ascii ไปเป็น ebcdic

dd if=~/file10 of=~/file20 conv=ucase เป็นการแปลงตัวอักษรในไฟล์ให้เป็นตัวอักษรใหญ่ทั้งหมด

dd if=~/file20 of=~/file30 conv=lcase เป็นการแปลงตัวอักษรในไฟล์ให้เป็นตัวอักษรเล็กทั้งหมด

คำสั่ง diff

     คำสั่ง diff เป็นคำสั่งที่ใช้ในการเปรียบเทียบไฟล์และไดเร็คทอรี่รูปแบบการใช้งานคือ 

diff [options] filename1 filename2

     คำสั่ง diff สามารถใช้งานได้ทั้งไฟล์ข้อความ(text file)และไฟล์โปรแกรม(binary file) ตัวอย่างออพชั่น เช่น

-c     แสดงเนื้อหาที่แตกต่างพร้อมข้อมูลบรรทัดก่อนหน้าและบรรทัดที่ตามมา

-r     ใช้เพื่อให้คำสั่ง diff เปรียบเทียบไดเร็คทอรี่ย่อยทั้งหมดภายใต้ไดเร็คทอรี่ที่กำหนด

-i     กำหนดให้ไม่สนใจความแตกต่างของขนาดตัวอักษร เช่น a กับ A ถือว่าไม่แตกต่าง

-w     กำหนดให้ไม่สนใจความแตกต่างของ space และ tab

-q     ต้องการให้แจ้งว่ามีข้อแตกต่างเท่านั้นโดยที่ไม่ต้องแสดงข้อความส่วนที่แตกต่าง

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

diff3 file1 file2 file3

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

diff -Nur originalfile newfile > patchfile

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

patch -p1 < patchfile หรือ patch originalfile patchfile

     คำสั่งแรกเป็นการปรับปรุงไฟล์ทั้งไดเร็คทอรี่ ส่วนคำสั่งที่สองเป็นการปรับปรุงเฉพาะไฟล์ที่กำหนด 

    ตัวอย่างด้านล่างเป็นการสร้างไฟล์ file1 และสมมุติให้ file2 เป็นเวอร์ชั่นใหม่ของ file1 จากนั้นสร้างแพทช์ไฟล์ชื่อ patch12 และนำไปปรับปรุงไฟล์ file1 ด้วยคำสั่ง patch

ภาพแสดงการ patch