หัดใช้ Command-line Interface เถอะ
หัดใช้ Command-line Interface เถอะ
Buy on Leanpub
หัดใช้ Command-line Interface เถอะ

Table of Contents

บทนำ

ก่อนอื่นผมคงต้องกล่าวคำทักทายซึ่งคงไม่มีคำใดเหมาะสมไปกว่าคำว่า “สวัสดีครับ” :D

ในช่วงที่ผมยังทำงานประจำอยู่ได้มีโอกาสพบเด็กๆ จบใหม่ที่เพิ่งเริ่มต้นทำงาน เด็กๆ พวกนี้เติบโตมากับยุคสมัยที่คอมพิวเตอร์สั่งงานด้วยการ “คลิก” ผมมักจะพบว่าเด็กๆ พวกนี้จะมีปัญหาทันทีที่ต้องทำงานผ่าน command prompt ต่างๆ

เมื่อมานึกย้อนวัยดูแล้วผมนี้โชคดีชะมัดที่เกิดมาในยุคสมัย MS-DOS อยากจะให้คอมพิวเตอร์ทำงานอะไรก็สั่งมันไปตรงๆ ทีละคำสั่ง เป็นขั้นเป็นตอน เหมือนเรากำลังคุยอยู่กับเพื่อนที่คอยทำงานให้เราอยู่ แถมโชคดีไปอีกตรงเป็นเด็กติดเกมคอมพิวเตอร์ ยุคสมัยนั้นการจะเล่นเกมได้สักเกมไม่ใช่เรื่องง่าย บางเกมต้องทำแผ่น boot เขียน autoexec.bat, config.sys สำหรับบูตเครื่องเพื่อเล่นเกมนั้นโดยเฉพาะ ทำให้การสั่งงานคอมพิวเตอร์ด้วย Command-line เป็นเรื่องที่ผมคุ้นชิน ถึงแม้ว่าต่อๆ มา GUI (Graphical User Interface) จะเข้ามาแทนที่ไปแล้วแต่สำหรับงานบางงาน การทำงานด้วย Command-line ก็ยังจำเป็นอยู่ดี

ว่าด้วยหนังสือเล่มนี้

ผมเขียนหนังสือเล่มนี้ขึ้นมาเพื่อเป็นจุดเริ่มต้นสำหรับผู้ที่สนใจใช้งานคอมพิวเตอร์ผ่าน Command-line Interface หรือที่เรียกกันแบบย่อๆ ได้ว่า CLI

มุ่งหวังให้สำหรับคนที่ไม่เคยหรือพอมีประสบการณ์มาบ้างเล็กน้อยได้ทำความรู้จักและสนิทสนมกับ CLI ให้มากขึ้นครับ โดยแนวการเขียนจะยึดหลัก “Learning by doing” คือคนอ่านต้องทำและเรียนรู้จากสิ่งที่เกิดขึ้น ต้องหัดสังเกต และค้นหาส่ิงที่ตนสงสัยด้วยตนเอง

ใครที่เหมาะกับหนังสือเล่มนี้?

หากคุณมีคุณสมบัติดังนี้

  1. เป็นคนที่ใช้งานคอมพิวเตอร์อยู่ก่อนแล้ว หมายรวมถึงสามารถลงโปรแกรมเองได้ แก้ปัญหาคอมพิวเตอร์เบื้องต้นได้
  2. รู้จักและใช้ CLI มาก่อนเล็กน้อยหรือไม่เคยใช้มาก่อนเลย
  3. กำลังสนใจและตั้งใจที่จะเรียนรู้การใช้งาน CLI

หนังสือเล่มนี้เหมาะสำหรับคุณครับ

 

กรกต รักห่วง

http://about.me/rkorakot

บทที่ 00

ทำความเข้าใจกันก่อน

เมื่อคุณจบจากหนังสือเล่มนี้ คุณจะสามารถใช้งานคำสั่งพื้นฐานที่มักจะใช้กันบ่อยๆ สำหรับทุกระบบปฏิบัติการที่อยู่บนพื้นฐานของ Unix ได้ ไม่ว่าจะเป็น Linux, Free BSD รวมไปถึง Mac OS X ก็ด้วยเช่นกัน และยังเข้าใจพื้นฐานของโครงสร้าง directories และแนวคิดอื่นๆ อีกเล็กน้อยด้วย

ถ้าหากคุณคิดจะหาหนังสือเล่มที่สอนให้คุณเป็น Unix/Linux System Admin ระดับเทพแบบพิมพ์คำสั่งรัวๆ เหมือนในหนังแล้วละก็ หนังสือเล่มนี้คงได้เป็นเพียงบันไดก้าวแรกเพื่อไปถึงระดับนั้น เท่านั้นเอง

อย่ากลัวที่จะพิมพ์คำสั่งลงไปแล้วกดปุ่ม Enter ให้มันทำงานแล้วดูผลลัพท์ของคำสั่ง พิมพ์เถอะครับ…!!!

วิธีอ่านหนังสือเล่มนี้

  1. อยู่ให้ห่างจากเพื่อนที่ใช้ command-line ได้ในระดับเทพแล้ว เพื่อนพวกนี้จะทำให้คุณไขว้เขว ด้วยกระบวนท่าสุดพิศดารที่จะเอามาถมทับคุณ ไว้อ่านหนังสือเล่มนี้จบแล้วค่อยไปคุยกับพวกเขาอีกครั้ง
  2. ให้อ่านไปทีละบทห้ามข้ามบทเด็ดขาด (เมื่ออ่านจบแล้วค่อยกลับมาใช้เป็นแหล่งอ้างอิงได้)
  3. ในแต่ละบทจะมี “แบบฝึกหัด” ให้ทำตาม ให้ “พิมพ์ด้วยมือตัวเองแล้วสังเกตผลลัพธ์ที่ได้”
    • หากบอกว่าให้กดปุ่ม Ctrl+Alt+t หมายความว่า ให้กด ปุ่ม Ctrl ปุ่ม Alt และ ปุ่ม t พร้อมกัน
    • ในคำสั่งหรือตัวอย่างจะขึ้นต้นด้วย $ ให้คุณพิมพ์ตามคำสั่งที่อยู่หลังเครื่องหมาย $ แล้วกดปุ่ม Enter เพื่อสั่งงาน เช่น ผมพิมพ์ว่า $ pwd ให้คุณพิมพ์ pwd และตามด้วย ปุ่ม Enter เท่านั้นพอ (เข้าใจตรงกันนะครับ)
  4. อย่ากลัวที่จะลองทดสอบคำสั่งที่เพิ่งเรียนมาในรูปแบบที่ต่างออกไปหรือนอกเหนือคำสั่ง เช่น ลองเปลี่ยน option ของคำสั่งต่างๆ แล้วสังเกตผลลัพธ์ (ถ้าอ่านแล้วไม่เข้าใจไม่ต้องตกใจเดี๋ยวรู้เอง)
  5. ทำซ้ำๆ กับคำสั่งในแต่ละบทที่ได้เรียนมาจนเกิดความคุ้นชิน

ลิขสิทธิ์และความเป็นเจ้าของ

หนังสือเล่มนี้เขียนภายใต้ลิขสิทธิ์แบบ Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) นั้นคือ

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

บทที่ 01

Terminal เส้นทางสู่ CLI

ในบทนี้เราจะมาเตรียมตัวสำหรับการทำงานผ่าน Command-line โดยจะทำงานผ่านโปรแกรม Terminal emulator หรือที่มักจะเรียกกันแบบย่อๆ ว่า Terminal กันครับ

ผู้ใช้ Mac OS X

สำหรับผู้ใช้ Mac OS X อยู่แล้ววิธีที่ง่ายที่สุดสำหรับการเรียกโปรแกรม Terminal ให้ทำตามนี้ครับ

  • ไปที่ Spotlight Search
  • พิมพ์คำว่า Terminal
  • คลิกที่ Terminal Application (หน้าตาจะเป็นกล่องดำๆ มีสัญลักษณ์ >_ อยู่ข้างใน)
  • ตอนนี้คุณน่าจะเปิด Terminal ขึ้นมาได้แล้ว อย่าลืม Keep in Dock เอาไว้เพื่อเรียกใช้ได้สะดวกขึ้นในภายหลังนะครับ

ผู้ใช้ Windows

สำหรับผู้ใช้ Windows ผมแนะนำให้ติดตั้ง Linux ที่รันอยู่บน VirtualBox อีกทีหนึ่ง ดังนี้ครับ

  • ให้ดาวน์โหลด VirtualBox ที่หน้าดาวน์โหลดในเว็บไซต์หลักที่ https://www.virtualbox.org/wiki/Downloads
  • ดูที่ VirtualBox platform packages เลือกเวอร์ชั่นสำหรับ Windows
  • ทำการติดตั้ง VirtualBox เลยครับ
  • ให้ดาวน์โหลด Ubuntu Desktop ที่หน้าดาวน์โหลดในเว็บไซต์ http://www.ubuntu.com/download/desktop/
  • ระหว่างรอดาวน์โหลด Ubuntu อยู่ ระหว่างนี้ให้ศึกษาวิธีการติดตั้ง Linux บน VirtualBox รวมถึงวิธีใช้งานจากอินเตอร์เน็ตไปก่อนนะครับ
  • ให้ติดตั้ง Ubuntu ลงบน VirtualBox ขั้นตอนนี้น่าจะใช้เวลาอีกซักพักครับ
  • เสร็จแล้วเปิด Ubuntu ขึ้นมาทำการ login เข้าหน้า Desktop
  • ดูต่อที่ หัวข้อ “ผู้ใช้ Linux”

ผู้ใช้ Linux

สำหรับผู้ใช้งาน Linux อยู่ก่อนหน้าแล้วผมคิดว่าคุณน่าจะหาวิธีเปิด Terminal กันได้เองนะครับ สำหรับน้องใหม่ที่ไม่เคยสัมผัส Linux Desktop เลย ให้ทำดังนี้ครับ

  • กดปุ่ม Ctrl+Alt+t
  • Terminal เปิดแล้วนะครับ

สำหรับผู้ที่เครื่องคอมพิวเตอร์ไม่แรง

อันนี้น่าเห็นใจครับแต่ไม่ใช่ปัญหา สำหรับคนที่คอมพิวเตอร์ RAM มีจำกัดหรือ CPU แรงไม่พอที่จะรัน VirtualBox ได้ ผมแนะนำ 3 ทางเลือกครับ

1. ติดตั้ง Cygwin

โปรเจค Cygwin ถูกพัฒนาขึ้นเพื่อให้ผู้ใช้งาน Windows สามารถทำงานได้เหมือนทำงานอยู่บน Unix เลยครับ สามารถอ่านวิธีติดตั้งและดาวน์โหลดตัวโปรแกรมได้ที่ https://cygwin.com/install.html ครับ

2. สมัครเว็บไซต้ Koding.com (ฟรี)

เว็บไซต์ koding.com จะให้ VMs ฟรีเรามาหนึ่งเครื่องสามารถทำงานบนนั้นได้โดยผ่าน Browser เลยครับ ข้อเสียก็คือช้า สามารถสมัครได้ที่ https://www.koding.com ครับ

3. ลงเครื่องใหม่แบ่ง partition สำหรับ Linux

จริงๆ วิธีนี้ไม่ค่อยจะแนะนำเท่าไหร่สำหรับมือใหม่ แต่ถ้าคิดว่าการศึกษาคือการลงทุน ผมว่าคุ้มมากที่จะลองครับ ลองค้นหาวิธีการทำในอินเตอร์เน็ตได้เลยครับ

บทนี้เรียนรู้อะไร?

  • การเปิด Terminal ขึ้นมาใช้งาน
  • สำหรับผู้ใช้งาน Windows ได้เรียนรู้วิธีการติดตั้ง Ubuntu เป็นของแถม

เพิ่มเติม

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

บทที่ 02

ทำความรู้จักกับ Shell

หลังจากเปิด Terminal ขึ้นมาเราจะพบกับ Shell prompt รอรับคำสั่งอยู่ ซึ่งหน้าตาของแต่ละเครื่อง(คน) จะไม่เหมือนกันแต่ส่วนใหญ่แล้วจะลงท้ายด้วยสัญลักษณ์ $

ให้คุณพิมพ์ตามแบบฝึกหัดด้านล่างนะครับ วิธีการอ่านหนังสือเล่มนี้ผมเขียนไว้ที่ บทที่ 00 หากยังไม่อ่านกรุณากลับไปอ่านก่อนครับ

แบบฝึกหัด

 1 $ learning by doing
 2 learning: command not found
 3 
 4 $ let learn CLI right now.
 5 bash: let: now.: syntax error: invalid arithmetic operator (error token is ".")
 6 
 7 $ echo $SHELL
 8 /bin/bash
 9 
10 $ uname
11 Linux
12 
13 $ uname -a
14 Linux ubuntu 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:30:01 UTC 2014 i686 \
15 i686 i686 GNU/Linux
16 
17 $ hostname
18 ubuntu
19 
20 $ whoami
21 korakot
22 
23 $ ls -lR /
24   # ในระหว่างที่คำสั่งกำลังทำงานอยู่ให้กดปุ่ม Ctrl+c
25 
26 $ !!
27 
28 $ echo "Opps, I did it again."
29 Opps, I did it again.
30 
31 $ !!
32 
33 $ clear

เก่งมากครับ!!! :) หากผลลัพธ์แต่ละคำสั่งของคุณไม่เหมือนในแบบฝึกหัดก็ไม่ต้องกังวลนะครับ ทีนี้ผมอยากให้คุณลองกดปุ่ม ลูกศรขึ้น ดูครับจะเห็นว่าเป็นการเรียกคำสั่งล่าสุดออกมาโดยที่เราไม่ต้องพิมพ์ใหม่ ลองกดขึ้นอีกซัก 4 ครั้งแล้วลองกดปุ่ม ลูกศรลง ดูครับ ใช่แล้วครับตัว Shell มีการจดจำคำสั่งของเราเอาไว้ (Command History)

บทนี้เรียนรู้อะไร?

  • ตัว Shell จะแจ้ง error ออกมาหากคำสั่งนั้นไม่ถูกต้อง
  • Shell ที่เราใช้อยู่ชื่อว่า bash shell ครับ
  • คุณสามารถตรวจสอบได้ว่า OS ที่คุณกำลังใช้งานอยู่คืออะไรและสามารถเพิ่มรายละเอียดได้ด้วยการใส่ option -a
  • คุณสามารถตรวจสอบได้ว่าเครื่องที่คุณกำลังทำงานอยู่ชื่อว่าอะไร
  • คุณสามารถตรวจสอบได้ว่า username ที่คุณใช้ login อยู่ชื่อว่าอะไร
  • คุณสามารถยกเลิกการทำงานของแต่ละคำสั่งกลางคันได้ด้วยการกด Ctrl+c
  • คุณไม่จำเป็นต้องพิมพ์คำสั่งเดิมๆ ใหม่ทุกครั้งเพราะเรามี command history
  • คุณสามารถพิมพ์ข้อความออกมาด้วยด้วยคำสั่ง echo
  • คุณสามารถ clear หน้าจออันรกรุงรังของคุณได้

เพิ่มเติม

  • ลองค้นหาดูว่านอกจาก bash shell แล้วยังมี shell อื่นๆ อีกหรือไม่?
  • ลองกด Ctrl+p , Ctrl+n และ Ctrl+l
  • สำหรับผู้ใช้ Mac OS X ทำไมเมื่อคุณสั่ง uname ผลลัพธ์ถึงเป็น Darwin ไม่ใช่ Mac OS X หรือ Yosemite

บทที่ 03

รู้จัก Path, Directory (pwd)

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

ย่อหน้าที่แล้วอธิบายเพื่อให้คนที่ยังไม่เคยได้ยินคำว่า Directory ได้เข้าใจและไม่สับสนครับ

จริงๆ แล้วเรากำลังทำงานอยู่บน Unix ซึ่งใช้ ระบบไฟล์ (File System) เป็นแบบ โครงสร้างระดับชั้น (Hierarchical Directory Structure) หมายความว่า file หรือ directory จะต้องถูกเก็บอยู่ใน Directory ใดๆ ที่อยู่ในชั้นเหนือกว่าไปเรื่อยๆ โดยจะมี directory หนึ่งที่อยู่เหนือสุดๆ (ชั้นบนสุด) เรียกว่า Root Directory

และด้วยคุณสมบัติอีกอย่างของ Unix ที่เป็น Single Root ทำให้ไม่ว่าเครื่องคุณจะมี Disk หลายลูกหรือแบ่ง Partition เป็นหลายส่วน ระบบก็จะมองส่ิงเหล่านี้เป็นเพียง Directory หนึ่งของระบบเท่านั้นเองครับ ต่างกับ Windows ที่เป็นแบบ Multiple Root ที่แบ่ง Disk หรือ Partition ด้วย C: D: E: ฯลฯ

ทีนี้มาว่ากันเรื่อง Path

ให้คุณนึกถึง File Explorer ของ Windows หรือ Finder ของ Mac OS นะครับ วิธีการที่จะท่องไปใน Folder ต่างๆ เราใช้วิธีการคลิกเข้าไปในแต่ละ Folder และลงไปในระดับ Folder ย่อยๆ ไปเรื่อยๆ จนเจอ File หรือ Folder ที่ต้องการ แต่สำหรับใน Shell เราสามารถที่จะอ้างอิง Path ได้ตรงๆ เลย โดยใช้ / เป็นตัวแบ่งระดับชั้น(Directory) เช่น

/usr/local/src เป็น path ของ directory src อยู่ภายใต้ directory local อยู่ภายใต้ directory usr และอยู่ภายใต้ directory root อีกทีหนึ่ง

แบบฝึกหัด

1 $ whoami
2 korakot
3 
4 $ pwd
5 /home/korakot

เช่นเคยครับ ผลลัพธ์ของคำสั่งของแต่ละคนจะไม่เหมือนกัน ถ้าผมสั่งคำสั่งนี้บน Mac OS X ผลลัพธ์จะเป็น /Users/korakot ให้คุณจำเอาไว้ว่านี้คือ Full Path ของ Home Directory ของคุณครับ

บทนี้เรียนรู้อะไร?

  • ได้เรียนรู้พื้นฐานของ Unix File System
  • ได้เรียนรู้คำสั่ง pwd (print working directory) เป็นคำสั่งที่แสดง Full Path ของ Directory ที่เรากำลังทำงานอยู่
  • เราแทน Root Directory ด้วยเครื่องหมาย / เดี่ยวๆ
  • เรารู้จัก Home Directory ของเราแล้ว โดย Linux คือ /home/ชื่อursername บน Mac OS จะเป็น /Users/ชื่อusername

บทที่ 04

สร้าง Directory (mkdir)

ถ้ายังไม่รุ้ว่า Directory คืออะไรกลับไปอ่าน บทที่ 03 ก่อนครับ ถ้ายังสับสนเรื่อง Path อยู่ไม่ต้องกังวลครับ ทำแบบฝึกหัดบทนี้และบทต่อๆ ไปคุณจะซึมซับไปเอง

แบบฝึกหัด

 1 $ pwd
 2 /home/korakot
 3 
 4 $ mkdir learncli
 5 
 6 $ mkdir learncli/right
 7 
 8 $ mkdir learncli/right/now
 9 
10 $ mkdir learncli/"very funny"
11 
12 $ mkdir -p learncli/we/can/make/directory

ยอดเยี่ยมครับ!! หลังจากจบคำสั่งสุดท้ายแล้วให้คุณลองเปิดโปรแกรมประเภท File Explorer ของคุณแล้วลองสำรวจหา Directory (Folder) ที่เราเพิ่งสร้างดูนะครับ (Ubuntu ใช้ Files, Mac ใช้ Finder)

บทนี้เรียนรู้อะไร?

  • ได้เรียนรู้คำสั่ง mkdir (make directory)
  • คำสั่ง mkdir จะสร้าง directory ตาม path ที่เราระบุ
  • เราสามารถสร้าง directory ชื่อมีเว้นวรรคได้ด้วยการครอบ ”“ ชื่อ directory ที่ต้องการ
  • option -p ใช้เมื่อเราต้องการสร้างหลายๆ subdirectory ทีเดียวพร้อมกัน

เพิ่มเติม

  • ลองสร้าง subdirectory อื่นๆ ภายใน directory learncli/ ด้วยตนเอง แล้วดูผลลัพธ์ผ่าน File Explorer
  • ลองใช้ mkdir -v , mkdir -vp , mkdir -pv
  • ลองสร้าง directory ที่ชื่อเหมือนกันแต่ใช้ตัวอักษรเล็กใหญ่ต่างกันเช่น mydirectory และ MyDirectory
  • ค้นหาข้อกำหนดการตั้งชื่อ file และ directory ของ Unix/Linux ในอินเตอร์เน็ต

บทที่ 05

สร้าง Empty File แบบด่วน (touch)

สำหรับการสร้าง File บนระบบ Unix/Linux เราสามารถทำได้หลายวิธี แต่วิธีที่ง่ายและเร็วที่สุดน่าจะเป็นคำสั่ง touch

แบบฝึกหัด

 1 $ pwd
 2 /home/korakot
 3 
 4 $ touch learncli/make.txt
 5 
 6 $ touch learncli/right/empty.txt
 7 
 8 $ touch learncli/right/now/file.txt
 9 
10 $ touch learncli/"very funny"/"very easy.txt"

เหมือนเดิมครับ ให้คุณลองเปิดโปรแกรมประเภท File Explorer ของคุณแล้วลองสำรวจ directory ต่างๆ ที่เราเพิ่งสร้าง file เอาไว้ดูนะครับ

บทนี้เรียนรู้อะไร?

  • ได้เรียนรู้คำสั่ง touch สำหรับสร้าง empty file
  • คำสั่ง touch จะสร้าง file ตาม path ที่เราระบุ
  • เราใช้ ”“ ครอบชื่อ file หรือ directory ที่มีการเว้นวรรคใน path

เพิ่มเติม

  • ลองสร้าง directory และ file อื่นๆ ภายใน directory learncli/ และ subdirectory อื่นๆ ด้วยตนเอง แล้วดูผลลัพธ์ผ่าน File Explorer
  • จริงแล้วคำสั่ง touch ไม่ใช่คำสั่งในการสร้าง empty file ซะทีเดียว เราแค่ใช้ประโยชน์จากความสามารถบางประการของมันเท่านั้น ลองค้นหาในอินเตอร์เน็ตดูว่าจริงๆ แล้วคำสั่ง touch ทำหน้าที่อะไร? ;P

บทที่ 06

เปลี่ยน Directory (cd)

บทที่ 04 คุณได้สร้าง directory เอาไว้แล้ว บทนี้คุณจะได้เรียนรู้คำสั่งที่จะเข้าๆ ออกๆ เคลื่อนที่ไปมาระหว่าง directory ครับ

นั้นคือ คำสั่ง cd ย่อมาจาก Change Directory (จำให้ขึ้นใจเลยครับ)

สำหรับคนที่ยังไม่ค่อยคล่องเรื่อง path ในบทนี้ไม่ต้องรีบครับ พิมพ์คำสั่งตามแบบฝึกหัดและสังเกต path ณ ปัจจุบันของคุณให้ดี (ด้วยคำสั่ง pwd) ระหว่างทำแบบฝึกหัดให้คิดตามไปเรื่อยๆ ว่า ณ ตอนนี้เราอยู่ directory ไหนแล้ว? และอย่าลืมว่า path home directory ของแต่ละคนไม่เหมือนกันด้วยนะครับ

แบบฝึกหัด 06-1

 1 $ pwd
 2 /home/korakot
 3 
 4 $ cd learncli
 5 $ pwd
 6 /home/korakot/learncli
 7 
 8 $ cd right
 9 $ pwd
10 /home/korakot/learncli/right
11 
12 $ cd now
13 $ pwd
14 /home/korakot/learncli/right/now
15 
16 $ cd ..
17 $ pwd
18 /home/korakot/learncli/right
19 
20 $ cd ..
21 $ pwd
22 /home/korakot/learncli
23 
24 $ cd ..
25 $ pwd
26 /home/korakot
27 
28 $ cd learncli
29 $ pwd
30 /home/korakot/learncli
31 
32 $ cd "very funny"
33 $ pwd
34 /home/korakot/learncli/very funny
35 
36 $ cd ..
37 $ pwd
38 /home/korakot/learncli
39 
40 $ cd ..
41 $ pwd
42 /home/korakot

จุดสังเกต 06-1

  • คุณใช้ คำสั่ง cd แล้วตามด้วย ชื่อ directory เพื่อเปลี่ยน working directory
  • คุณใช้ คำสั่ง cd แล้วตามด้วย .. เพื่อกลับ(ถอย)ไปยัง parent directory (บทที่ 03 ผมได้บอกไว้แล้วเรื่อง file system ที่มีลักษณะเป็นโครงสร้างลำดับชั้น)

แบบฝึกหัด 06-2

 1 $ cd learncli/right/now
 2 $ pwd
 3 /home/korakot/learncli/right/now
 4 
 5 $ cd ../..
 6 $ pwd
 7 /home/korakot/learncli
 8 
 9 $ cd -
10 /home/korakot/learncli/right/now
11 $ pwd
12 /home/korakot/learncli/right/now
13 
14 $ cd ../../..
15 $ pwd
16 /home/korakot

จุดสังเกต 06-2

  • คุณใช้ คำสั่ง cd แล้วตามด้วย path เพื่อเปลี่ยน working directory ของเราได้เช่นกัน
  • คุณใช้ คำสั่ง cd .. ในลักษณะของ path ได้เช่นกัน
  • คุณใช้ คำสั่ง cd แล้วตามด้วย - เพื่อกลับไปยัง directory ก่อนหน้า

แบบฝึกหัด 06-3

 1 $ pwd
 2 /home/korakot
 3 
 4 $ cd /
 5 $ pwd
 6 /
 7 
 8 $ cd /home/korakot
 9   # ตรง path เป็น path ของ home directory ของคุณเองนะครับ
10 $ pwd
11 /home/korakot
12 
13 $ cd /usr/bin
14 $ pwd
15 /usr/bin
16 
17 $ cd
18 $ pwd
19 /home/korakot
20 
21 $ cd -
22 $ pwd
23 /usr/bin
24 
25 $ cd ~
26 $ pwd
27 /home/korakot
28 
29 $ cd -
30 $ pwd
31 /usr/bin
32 
33 $ cd ~/learncli/right/now
34 $ pwd
35 /home/korakot/learncli/right/now
36 
37 $ cd ~
38 $ pwd
39 /home/korakot

จุดสังเกต 06-3

  • คุณใช้ คำสั่ง cd แล้วตามด้วย / เพื่อไปยัง root directory
  • วิธีที่จะกลับไปยัง home directory ของคุณแบบสั้นๆ สามารถทำได้โดย คำสั่ง cd หรือ cd ~
  • สัญลักษณ์ ~ (Tilde) เป็นสัญลักษณ์ที่ใช้แทน home directory ของเรา สามารถนำมาใช้ใน path ได้

บทนี้เรียนรู้อะไร?

  • ได้เรียนรู้คำสั่ง cd = Change Directory สำหรับไปยัง directory ที่ต้องการ
  • ได้เรียนรู้เรื่องการอ้างอิง path มากขึ้น
  • การทำงานบน CLI การอ้างอิง path เป็นเรื่องที่สำคัญมาก

เพิ่มเติม

  • สร้าง directory และ subdirectory ไว้ภายใน home directory ของคุณตั้งชื่อตามใจชอบ
  • ฝึกใช้คำสั่ง cd ในรูปแบบต่างๆ
  • ลองค้นหาดูว่า Absolute path และ Relative path คืออะไร? และ ต่างกันอย่างไร?

บทที่ 07

List Directory (ls)

บทที่ 06 คุณได้ใช้คำสั่ง cd (change directory) สำหรับเข้าๆ ออกๆ directory ต่างๆ กันไปแล้ว

แต่เหมือนเป็นการเข้าออกซอยบ้านตัวเองที่คุณรู้ก่อนอยู่แล้วว่าทางข้างหน้าจะมีกี่เลี้ยว แต่ในชีวิตจริงคุณไม่มีทางรู้เสมอไปหรอกครับ ว่าเส้นทางข้างหน้าจะเจออะไรบ้าง?… (พิมพ์ไปพร้อมทำหน้าหล่อ อะฮ๊าๆ)

คำสั่ง ls = List จะทำหน้าที่บอกคุณว่าใน directory มีอะไรอยู่บ้าง

แบบฝึกหัดบทนี้และบทต่อๆ ไปผมจะพิมพ์แค่คำสั่งและจะแสดงผลลัพธ์ของบางคำสั่งเท่าที่จำเป็นนะครับ

แบบฝึกหัด 07-1

 1 $ cd ~
 2 $ pwd
 3 
 4 $ cd learncli
 5 $ ls
 6 make.txt  right  very funny  we
 7 
 8 $ cd right
 9 $ pwd
10 $ ls
11 
12 $ cd now
13 $ pwd
14 $ ls
15 
16 $ cd ~/learncli
17 $ pwd
18 
19 $ ls we
20 can
21 $ ls we/can
22 make
23 $ ls we/can/make
24 directory
25 $ ls we/can/make/directory
26 
27 $ pwd
28 ~/learncli
29 $ ls
30 make.txt  right  very funny  we
31 $ ls -a
32 .  ..  make.txt  right  very funny  we
33 $ ls -a we/can/make/directory
34 .  ..
35 
36 $ ls .
37 $ ls -a .
38 $ ls ..
39 $ ls ../..
40 $ ls ~
41 $ ls ~/..
42 $ ls /

แบบฝึกหัด 07-2

ให้ทำแบบฝึกหัดที่ 07-1 อีกรอบครับ แต่ใช้คำสั่ง ls -l แทน ls และ ls -la แทน ls -a

แบบฝึกหัด 07-3

1 $ cd ~/learncli
2 $ ls
3 $ mkdir .secret
4 $ touch .hidden
5 $ ls -a

บทนี้เรียนรู้อะไร?

  • ได้เรียนรู้คำสั่ง ls
    • ls = list files and directories
    • ls -a = list all files and directories
    • ls -l = list files and directories with long listing format
    • จริงๆ แล้วคำสั่ง ls ยังมี option ให้ใช้อีกมากมายเลยครับ เดี๋ยวบทหลังๆ ผมจะบอกว่าจะรู้ได้ยังไง
  • ในการใช้ -a เราได้เห็นสอง directory พิเศษ นั้นคือ . และ ..
    • . แทน directory ปัจจุบัน (current directory)
    • .. แทน parent directory (รู้ถึงที่มา cd .. แล้วใช้ไหมครับ)
  • file และ directory ที่ชื่อขึ้นต้นด้วย . เรียกว่า dot files หรือ hidden file สุดแท้แต่จะเรียก ต้องใช้ ls -a เท่านั้นถึงจะมองเห็น ส่วนใหญ่จะเป็น file หรือ directory ที่สำคัญ เช่น พวก file config ต่างๆ (จริงเอาไว้ซ่อน file ลับๆ ของคุณก็ได้นะครับ)

เพิ่มเติม

  • ลองใช้คำสั่ง ls -R , ls -F ดูครับ (อย่าลืมลองผสม option อื่นๆ ดูด้วยนะครับ)
  • ใช้คำสั่ง cd และ ls ท่องเที่ยวไปตาม directory ต่างๆ ในเครื่องดูนะครับ
  • ในระหว่างที่ cd และ ls อยู่ตาม directory ต่างๆ ให้ลองใช้คำสั่ง $ file แล้วตามด้วยชื่อ file หรือ directory ดูครับ
  • อย่าลืมนะครับแค่อ่านไม่พอนะครับต้องฝึกฝนด้วย!

บทที่ 08

ลบ Directory (rmdir)

แบบฝึกหัด 08-1

 1 $ cd ~/learncli
 2 $ ls
 3 $ cd we/can/make/
 4 $ ls
 5 $ rmdir directory
 6 $ ls -a
 7 $ cd ..
 8 $ ls -a
 9 $ rmdir make
10 $ ls -a
11 $ cd ..
12 $ ls -a
13 $ rmdir can
14 $ cd ..
15 $ pwd
16 ~/learncli
17 $ rmdir we
18 $ ls

แบบฝึกหัด 08-2

1 $ mkdir -p dir1/dir2/dir3/dir4
2 $ ls -aRF dir1
3 $ rmdir dir1
4 rmdir: failed to remove ‘dir1’: Directory not empty
5 $ rmdir -p dir1
6 rmdir: failed to remove ‘dir1’: Directory not empty
7 $ rmdir -p dir1/dir2/dir3/dir4
8 $ ls

แบบฝึกหัด 08-3

สำหรับแบบฝึกหัด 08-3 ต้องเป็นหน้าที่ของคุณนะครับ หาทางลบ directory ebooks ที่สร้างตามคำสั่งด้านล่างให้ได้ครับ

1 $ mkdir -p ebooks/programming/java
2 $ mkdir ebooks/programming/php
3 $ mkdir ebooks/network
4 $ mkdir -p ebooks/os/unix
5 $ mkdir ebooks/os/windows
6 $ mkdir ebooks/os/macosx

บทนี้เรียนรู้อะไร?

  • rmdir สามารถลบ empty directory ได้เท่านั้น ไม่สามารถลบ directory ที่ภายในมี subdirectory หรือ file อื่นๆ อยู่ได้
  • เราสามารถใช้ rmdir -p ในการลบ directory แบบถอนรากถอนโคนได้ ถ้าทุก directory ที่อยู่ใน path เป็น empty directory

เพิ่มเติม

  • จะเห็นว่าในการทำงานจริงคำสั่ง rmdir ดูจะใช้งานได้ไม่ค่อยสะดวกเท่าที่ควร บทหลังๆ เราจะได้เรียนรู้คำสั่งในการลบ file และ directory ที่ใช้งานได้สะดวกขึ้นครับ

บทที่ 09

Copy File และ Directory (cp)

แบบฝึกหัด

 1 $ cd ~/learncli
 2 $ ls -F
 3 make.txt  right/  very funny/
 4 $ mkdir copydir
 5 $ ls -F
 6 copydir/  make.txt  right/  very funny/
 7 
 8 $ cp make.txt copydir/
 9 $ cd copydir/
10 $ ls
11 make.txt
12 
13 $ pwd
14 ~/learncli/copydir
15 $ cp make.txt make.bak
16 $ ls
17 $ cp make.txt newmake.txt
18 $ ls
19 $ cp make.txt ../makefromcpdir.txt
20 $ cd ..
21 $ ls
22 
23 $ pwd
24 ~/learncli
25 $ cp copydir/ copydir2/
26 cp: omitting directory ‘copydir/’
27 $ cp -r copydir/ copydir2/
28 $ ls
29 $ ls copydir/
30 $ ls copydir2/

บทนี้เรียนรู้อะไร?

  • เรียนรู้คำสั่ง cp = copy
  • รูปแบบคำสั่ง คือ cp ต้นฉบับ สำเนา
    • ต้นฉบับ และ สำเนา จะอยู่ในรูป ชื่อ file ชื่อ directory หรือ path
    • สำเนา เป็นชื่อใหม่ได้ตามต้องการ
    • ถ้าต้องการ copy directory ให้ใช้ cp -r
  • ถ้าสังเกตผมจะจบชื่อ directory ด้วย / เพื่อให้มั่นใจว่านี้คือ directory นะ

เพิ่มเติม

  • ตั้งคำถามและสร้างแบบฝึกหัดขึ้นมาเอง และ ฝึกๆๆๆ ครับ เช่น
    • ถ้าต้องการ copy file จาก Desktop ของคุณ (หรือจาก path อื่น) มายัง current directory ปัจจุบันของคุณ ต้องทำยังไง?

บทที่ 10

Move/Rename File และ Directory (mv)

แบบฝึกหัด

 1 $ cd ~/learncli
 2 $ ls
 3 $ mv copydir2/ movedir/
 4 $ ls
 5 $ cd movedir/
 6 $ ls
 7 
 8 $ mkdir txt/ bak/
 9 
10 $ mv make.txt ./txt/
11 $ mv newmake.txt ./txt/
12 $ mv make.bak ./bak/
13 $ ls
14 $ ls txt/
15 $ ls bak/
16 
17 $ pwd
18 $ mv txt/newmake.txt .
19 $ ls
20 
21 $ mv newmake.txt bak/make2.bak
22 $ ls
23 $ ls bak/

บทนี้เรียนรู้อะไร?

  • เรียนรู้คำสั่ง mv = move
  • รูปแบบคำสั่งเหมือน cp แต่เป็นการย้ายที่อยู่ของ file หรือ directory
  • ในขณะเดียวกันสามารถใช้เป็นคำสั่งสำหรับ rename file หรือ directory ได้ด้วย

เพิ่มเติม

  • ทบทวนและฝึกฝนครับ คำสั่ง cp , mv และอีกหลายๆ คำสั่งการใช้งานจริงต้องใช้อย่างรอบคอบและระมัดระวังครับ มีสติทุกครั้งก่อนกด Enter ครับ

บทที่ 11

อ่าน Text File (cat , more , less)

สำหรับบทนี้ก่อนที่คุณจะไปทำแบบฝึกหัด คุณต้องใช้ text editor ที่คุณถนัดจัดเตรียม text file ชื่อ cat.txt, fox.txt และ toolong.txt โดยแต่ละ file ให้พิมพ์ตามด้านล่างนะครับ (จริงๆ ไม่ต้องตามก็ได้ครับ พิมพ์อะไรก็ได้)

fox.txt ถ้าไม่รู้จะพิมพ์อะไรพิมพ์ตามนี้ครับ

1 The quick brown fox jumped over the lazy dogs.

cat.txt ถ้าไม่รู้จะพิมพ์อะไรพิมพ์ตามนี้ครับ

1 My Cat by Emily Krauss
2 
3    It's nice to hold my cat in my arms.
4    I like to feel its soft fur against my face.
5    I like to hear my cat purring.
6    I like to rub noses with my cat.
7    I like to see, hear and feel my cat breathing.
8    It's nice to hold my cat in my arms.

toolong.txt ให้หา บทความภาษาอังกฤษตามเว็บที่ชอบนะครับ เอายาวๆ เลยมาแปะ ถ้าหาไม่ได้จริงๆ ผมแนะนำลองไปที่ http://www.lipsum.com หรือ http://www.blindtextgenerator.com แล้วสร้างเอาเลยนะครับ

โดยทั้ง 3 file นี้ให้ save ไว้ใน path ~/learncli/ ครับ

แบบฝึกหัด

ในแต่ละคำสั่งที่พิมพ์ให้ลองสังเกตผลลัพธ์นะครับว่า 3 คำสั่งนี้ต่างกันยังไง?

  • สำหรับคำสั่ง more
    • กด ปุ่ม space bar สำหรับแสดงหน้าถัดไป
    • กด ปุ่ม q สำหรับออกจากคำสั่ง
  • สำหรับคำสั่ง less
    • เหมือนคำสั่ง more
    • และลองกดปุ่ม PageUp PageDown ดูด้วยนะครับ
 1 $ cd ~/learncli
 2 $ ls
 3 cat.txt  fox.txt            make.txt  right        very funny
 4 copydir  makefromcpdir.txt  movedir   toolong.txt
 5 
 6 $ cat fox.txt
 7 $ cat cat.txt
 8 $ cat toolong.txt
 9 $ cat fox.txt cat.txt
10 $ cat cat.txt fox.txt
11 
12 $ more fox.txt
13 $ more cat.txt
14 $ more toolong.txt
15 $ more fox.txt cat.txt
16 $ more cat.txt fox.txt
17 
18 $ less fox.txt
19 $ less cat.txt
20 $ less toolong.txt

บทนี้เรียนรู้อะไร?

  • ได้เรียนรู้คำสั่งในการอ่าน text file ที่น่าจะใช้กันบ่อยๆ
  • คำสั่ง cat เหมาะกับ file ที่มีจำนวนบรรทัดสั้นๆ และ สามารถ concatenate files ได้
  • จะเห็นว่าคำสั่ง less และ more ทำงานคล้ายกันแต่ less จะเก่งกว่า

เพิ่มเติม

  • ระหว่างที่อยู่ในคำสั่ง more และ less ลองกดปุ่ม h ดูครับ
  • ลองใช้ 3 คำสั่งนี้กับ empty file ดูครับ
  • สำหรับคำสั่ง cat
    • ที่ $ ลองพิมพ์คำสั่ง cat แล้วกดปุ่ม Enter เลยไม่ต้องมีชื่อ file ตามหลัง
    • จะเห็นว่าตัว cursor ตกลงมาอยู่อีกบรรทัดหนึ่ง
    • ให้พิมพ์อะไรก็ได้ลงไป จนพอใจ
    • กดปุ่ม Ctrl+d

บทที่ 12

ลบ File และ Directory (rm)

มาถึงคำสั่งที่ต้องใช้ความระมัดระวังในการใช้งานมากๆ อีกคำสั่งแล้วนะครับ

แบบฝึกหัด

 1 $ cd ~/learncli
 2 $ ls -F
 3 cat.txt   fox.txt            make.txt  right/       very funny/
 4 copydir/  makefromcpdir.txt  movedir/  toolong.txt
 5 
 6 $ rm make.txt
 7 $ rm makefromcpdir.txt 
 8 $ ls -F
 9 cat.txt  copydir/  fox.txt  movedir/  right/  toolong.txt  very funny/
10 
11 $ ls -a "very funny"/
12 $ rm "very funny"/
13 rm: cannot remove ‘very funny/’: Is a directory
14 $ rm -r "very funny"/
15 $ ls -aF
16 ./   cat.txt   fox.txt  movedir/  .secret/
17 ../  copydir/  .hidden  right/    toolong.txt
18 $ rm .hidden
19 $ rm -r .secret
20 $ ls -aF
21 ./  ../  cat.txt  copydir/  fox.txt  movedir/  right/  toolong.txt

ทำแบบฝึกหัดเสร็จแล้วให้คุณลองเข้าไปดูใน Trash (ถังขยะ) นะครับว่ามี file และ directory ที่เราเพิ่งลบไปด้วยคำสั่ง rm หรือไม่?

บทนี้เรียนรู้อะไร?

  • ได้เรียนรู้คำสั่ง rm = remove ใช้ในการลบ file
  • ใช้ rm -r เมื่อต้องการลบ directory
  • file และ directory ที่ลบด้วยคำสั่ง rm จะไม่สามารถนำกลับมาได้ ดังนั้น การใช้คำสั่ง rm จึงต้องใช้ด้วยความระมัดระวังเป็นพิเศษนะครับ

เพิ่มเติม

  • สร้าง directory และ file ขึ้นมาตามต้องการโดยพยายามให้มีลักษณะการแตกกิ่งก้านสาขา หรือ สร้าง directory และ file ตามโครงสร้างท้ายบทเลยครับ
  • แล้วลองใช้คำสั่ง rm -i และ rm -ri
  • และ จงระวัง rm -r / ไว้ครับ (คุณรู้ใช้ไหมครับว่าคำสั่งนี้หมายความว่าอะไร?)

Ebooks Tree

บทที่ 13

คำสั่งช่วยเหลือ (man)

มาถึงบทนี้ก็ต้องเอ่ยปากชมคุณกันหน่อยละครับ คุณเก่งมาก :D

แบบฝึกหัด

1 $ man pwd
2 $ man mkdir
3 $ man rmdir
4 $ man touch

บทนี้เรียนรู้อะไร?

  • ครับ man = Manual หรือ คู่มือ นั้นเองงง..ง (ทำเสียงทีวีแชมป์เปี้ยนด้วยครับ)
  • เอาไว้สำหรับดูว่าแต่ละคำสั่ง เอาไว้ทำอะไร มี option อะไรบ้าง ครับ

เพิ่มเติม

  • ที่ไม่สอนคำสั่ง man ในบทต้นๆ ก็เพราะไม่ต้องการให้คุณออกนอกแบบฝึกหัดมากเกินไปครับ แต่มาถึงบทนี้แล้วคิดว่าคุณคงมีความชำนาญมากขึ้นมาเยอะแล้วและสามารถเรียนรู้คำสั่งใหม่ๆ ได้ด้วยตนเองแล้ว
  • อย่ารอช้าครับ ลอง man ทุกคำสั่งที่คุณเรียนผ่านมาเลยครับแล้วลองเล่น option ต่างๆ ของแต่ละคำสั่งดูครับ
  • RTFM! ครับผม ;P

บทที่ 14

Pipes ส่งผ่านผลลัพธ์ไปอีกคำสั่ง ( | )

หนึ่งในเสน่ห์อย่างหนึ่งในการทำงานผ่าน CLI คือเรากำลังบอกให้คอมพิวเตอร์ทำงานที่เราต้องการด้วยภาษาสัญลักษณ์ที่เข้าใจง่าย ตรงไปตรงมา ในแต่ละคำสั่งทำงานหนึ่งอย่างตามที่เราต้องการ แล้วถ้างานที่เราต้องการมันไม่จบในคำสั่งเดียวหละ?

ใน Unix/Linux command-line มีวิธีการหนึ่งที่เรียกว่า “Pipeline” เป็นการส่งผ่านผลลัพธ์ของคำสั่งหนึ่งไปให้อีกคำสั่งหนึ่งประมวลผลต่อ อุปมาได้ว่าเป็นการ “ต่อท่อ (Pipes)” ส่งผ่านข้อมูลจากคำสั่งหนึ่งไปอีกคำสั่งหนึ่ง ประมาณนั้น

แบบฝึกหัด

 1 $ cd ~/learncli
 2 $ ls
 3 cat.txt  copydir  fox.txt  movedir  right  toolong.txt
 4 
 5 $ cat fox.txt cat.txt toolong.txt
 6 $ cat fox.txt cat.txt toolong.txt | more
 7 $ cat fox.txt cat.txt toolong.txt | less
 8 
 9 $ more fox.txt cat.txt toolong.txt | less
10 
11 $ ls -lR | more
12 $ ls -lR | less

บทนี้เรียนรู้อะไร?

  • เราใช้ | ในการส่งผ่าน Output ของ คำสั่งด้านซ้ายไปเป็น Input ให้กับคำสั่งด้านขวา

เพิ่มเติม

  • สำหรับผู้ใช้ Mac OS X ลอง $ cat fox.txt | say ดูครับ
  • ลองทำความเข้าใจกับคำสั่งนี้ดูนะครับ
    • $ cat fox.txt | tr " " "\n" | sort | wc -w
  • อย่าลืมว่าตอนนี้คุณรู้จักคำสั่ง man แล้วนะครับ
  • สำหรับคนที่ไม่รู้ว่า \n หมายความว่าอะไรลองค้นหาในอินเตอร์เน็ตดูนะครับ

บทที่ 15

I/O Redirection (< , > , >>)

ตั้งแต่บทที่ 02 เป็นต้นมาจะเห็นว่าเราป้อนคำสั่งผ่านทางคีบอร์ดและแสดงผลออกมาทางหน้าจอ ซึ่งเจ้าคีบอร์ดและหน้าจอของเราก็คือ Input/Output Standard นั้นเอง

แต่เราสามารถที่จะเปลี่ยนทิศทาง (Redirection) จากรับ input ผ่านคีบอร์ดเป็นรับจาก file แทน หรือ เราจะเปลี่ยนทิศทางการแสดงผลจากหน้าจอเป็นการบันทึกลง text file แทนก็ได้..(เก่งจัง)

แบบฝึกหัด

 1 $ cd ~/learncli
 2 $ ls -F
 3 cat.txt  copydir/  fox.txt  movedir/  right/  toolong.txt
 4 
 5 $ cat fox.txt cat.txt
 6 $ cat fox.txt cat.txt > foxcat.txt
 7 $ cat cat.txt fox.txt > catfox.txt
 8 $ ls
 9 $ cat foxcat.txt
10 $ cat catfox.txt
11 
12 $ cat > colors.txt
13 Red
14 Green
15 Blue
16 ^D  <-- บรรทัดนี้หมายความว่าให้กดปุ่ม Ctrl+d นะครับ
17 
18 $ cat colors.txt
19 
20 $ cat > colors.txt
21 Black
22 White
23 Yellow
24 ^D
25 
26 $ cat colors.txt
27 
28 $ cat >> colors.txt
29 Red
30 Green
31 Blue
32 ^D
33 
34 $ cat colors.txt
35 
36 $ cat >> colors.txt
37 Pink
38 Purple
39 ^D
40 
41 $ cat colors.txt
42 
43 $ cat < colors.txt
44 $ more < colors.txt
45 $ less < colors.txt
46 
47 $ sort < colors.txt
48 $ sort < colors.txt > sortcolors.txt
49 $ cat sortcolors.txt	

บทนี้เรียนรู้อะไร?

  • ’>’ เป็นการกำหนดให้ส่ง Output ไปยัง file ที่ระบุ ถ้า file ที่ระบุมีอยู่แล้วจะเป็นการเขียนข้อมูลทับ file เดิม
  • ’<’ เป็นการกำหนดให้รับ Input จาก file ที่ระบุ
  • ’>>’ เป็นการกำหนดให้ส่ง Output ไปยัง file ที่ระบุ ถ้า file ที่ระบุมีอยู่แล้วจะเป็นการเขียนข้อมูลต่อจากข้อมูลเดิม

เพิ่มเติม

  • ลองเล่นผสมกันระหว่างการ Redirection และ Pipes ดูนะครับ

บทที่ 16

Wildcards (* , ?)

มาต่อกันอีกหนึ่งความสามารถอันโดดเด่นของ CLI กันครับ (จริงๆ ต้องบอกว่าความสามารถของ Shell) Wildcards เป็นการแทนที่ตัวอักษรด้วยสัญลักษณ์ ทำให้เราสามารถที่จะพลิกแพลงประยุกต์ใช้งาน Command-line ได้อย่างมีประสิทธิภาพมากยิ่งขึ้น ซึ่งถ้าให้อธิบายอาจจะพางงกันได้ ผมว่าไปลองดูกันที่แบบฝึกหัดกันดีกว่าครับ ขอให้คุณตั้งใจสังเกตผลลัพธ์หน่อยนะครับ

แบบฝึกหัด 16-1

 1 $ cd ~/learncli
 2 $ ls
 3 catfox.txt  colors.txt  foxcat.txt  movedir  sortcolors.txt
 4 cat.txt     copydir     fox.txt     right    toolong.txt
 5 
 6 $ ls c*
 7 $ ls *.txt
 8 $ cat *.txt > mixtext.txt
 9 $ less mixtext.txt
10 
11 $ ls *cat*.txt
12 $ ls *fox*.txt
13 $ mkdir cattxt/ foxtxt/
14 
15 $ cp *cat*.txt cattxt/
16 $ cp *fox*.txt foxtxt/
17 $ ls cattxt/
18 $ ls foxtxt/

แบบฝึกหัด 16-2

 1 $ cat > red.color
 2 red
 3 ^D
 4 
 5 $ cat > green.color
 6 green
 7 ^D
 8 
 9 $ cat > blue.color
10 blue
11 ^D
12 
13 $ ls *.color
14 $ cat *.color
15 $ cat *.color | sort -r > rgb.color
16 $ cat rgb.color

แบบฝึกหัด 16-3

 1 $ ls
 2 $ ls *.*
 3 $ ls *.txt
 4 $ ls *.color
 5 $ ls *.???
 6 $ ls *.????
 7 $ ls *.?????
 8 $ ls ???.*
 9 $ ls ????.*
10 
11 $ mkdir art/
12 $ mv *color* art/
13 $ ls
14 $ ls art/
15 
16 $ rm *.txt
17 $ ls
18 $ rm -rv *dir
19 $ ls

บทนี้เรียนรู้อะไร?

  • คุณสามารถกรองผลลัพธ์หรือคัดเลือก file หรือ directory ได้โดยใช้ * หรือ ?
  • คุณสามารถใช้สัญลักษณ์ * แทนตัวอักษรอะไรก็ได้และกี่ตัวก็ได้
  • คุณสามารถใช้สัญลักษณ์ ? แทนตัวอักษรอะไรก็ได้แต่แทนได้แค่หนึ่งตัว

เพิ่มเติม

  • สัญลักษณ์ที่ใช้สำหรับ wildcards ยังมีอีกลองค้นหาดูในอินเตอร์เน็ตครับ

บทที่ 17

ค้นหา Files (find)

แบบฝึกหัด

 1 $ cd ~/learncli
 2 
 3 $ find . -name "*.txt"
 4 
 5 $ find . -name "*.color"
 6 
 7 $ find ~ -name "*.txt"
 8 
 9 $ find ~ -name "*.color"
10 
11 $ find . -type d
12 
13 $ find . -type f
14 
15 $ find . -name "*.txt" | grep "fox"
16 
17 $ find . -name "*.txt" | grep "fox" | wc -l
18 
19 $ find . -type d | wc -l
20 
21 $ find . -type f | wc -l

บทนี้เรียนรู้อะไร?

  • คำสั่งในการค้นหา file หรือ directory
    • ค้นหาแบบระบุชื่อ
    • ค้นหาแบบระบุชนิด file หรือ directory

เพิ่มเติม

  • man find
  • man grep
  • man wc
  • ลอง find ใน home directory ของคุณ แล้ว grep เอาเฉพาะ file รูป .jpg แล้วอยากรู้ด้วยว่ามีทั้งหมดกี่ file จัดเก็บ path ที่ได้ลง file ชื่อ list_jpg.txt
  • ถ้าอยากหา file ที่มีขนาด file size ใหญ่กว่า 1MB คุณหาได้ไหมครับ?
  • ถ้าอยากหา file หรือ directory ที่เป็น .dotfile (hidden file) คุณหาได้ไหมครับ?
  • ตั้งโจทย์เองแล้วฝึกเยอะๆ ครับ พลังแห่งการค้นหาอยู่ที่ปลายนิ้วคุณแล้วครับ :P

บทที่ 18

คำสั่งสำหรับ Backup ข้อมูล (zip , unzip , tar)

ในการทำงานจริง Backup file ที่เรามักจะเจอบ่อยๆ น่าจะมี .zip .tar.gz และ .tar.bz2 ครับ

แบบฝึกหัด

 1 $ cd ~/learncli
 2 $ ls -F
 3 art/  cattxt/  foxtxt/  right/
 4 
 5 $ mkdir backup/
 6 
 7 $ zip -r ./backup/art.zip art/
 8 
 9 $ tar -zcvf ./backup/cattxt.tar.gz cattxt/
10 
11 $ tar -jcvf ./backup/foxtxt.tar.bz2 foxtxt
12 
13 $ cd backup/
14 $ ls
15 
16 $ unzip art.zip
17 
18 $ tar -zxvf cattxt.tar.gz
19 
20 $ tar -jxvf foxtxt.tar.bz2
21 
22 $ ls

บทนี้เรียนรู้อะไร?

  • การ Backup ด้วยคำสั่ง zip , tar

เพิ่มเติม

  • ลองทำ Backup directory ไหนของคุณก็ได้ที่เก็บ file เอาไว้เยอะๆ แล้วลองเปรียบเทียบว่า .zip , tar.gz และ tar.bz2 อันไหนบีบอัดได้ดีกว่ากัน

บทที่ 19

ก้าวต่อไป

ถ้าคุณเปิดมาถึงบทนี้โดยค่อยๆ ผ่านมาทีละบทผมก็ขอขอบคุณมากครับที่ คุณทำตามกติกาที่ผมบอกเอาไว้ในบทที่ 00 และต้องชมคุณว่า “คุณนี้ไม่ได้หน้าตาดีอย่างเดียวนะครับ เก่งมากด้วย” มีทั้งวินัยและความพยายาม ตบมือรัวๆ ให้เลยครับ :D

มาถึงตอนนี้คุณน่าจะคุ้นเคยกับ CLI มากขึ้นแล้วนะครับ ถ้ายังไม่ชำนาญไม่เป็นไรนะครับ ของอย่างนี้มันต้องฝึกกันบ่อยๆ

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

สิ่งที่ควรเรียนรู้ต่อไป

  • ศึกษาคำสั่งอื่นๆ เพิ่มเติมโดยการตั้งโจทย์และค้นหาในอินเตอร์เน็ต เช่น
    • การติดตั้ง Sofeware Packages ผ่าน apt-get, yum, หรือ download มา compile ด้วยตัวเอง
    • ฝึกเป็น Unix/Linux Administrator
    • ศึกษาในหัวข้อเรื่อง Permissions, Processes, คำสั่งในการจัดการระบบ ฯลฯ
    • ถ้าสนใจทางด้าน Network ก็สบายแล้วครับ
    • ศึกษา Text Editor อย่างเช่น nano , vim , emac
    • ศึกษาเลยเถิดไปจนถึงการเขียน Shell Script ไปเลยครับ
  • ผมสอนคุณเกี่ยวกับ Bash Shell ก็จริง แต่ในโลกนี้ยังมี Shell อีกหลายตัว คุณลองหาทางเปลี่ยนไปใช้ Shell ตัวอื่นดูบ้างก็ได้นะครับ เช่น zsh
  • สำหรับผู้ใช้ Windows คุณรู้จัก PowerShell ไหมครับ? คุณลองใช้หนังสือเล่มนี้เป็นแนวทางในการใช้งาน PowerShell ดูก็ได้นะครับ

สุดท้ายก็ขอบคุณทุกท่านที่สนใจหนังสือเล่มนี้นะครับ ผมหวังว่าจะเป็นประโยชน์ให้กับคุณไม่มากก็น้อยครับ

 

กรกต รักห่วง

http://about.me/rkorakot

บทสุดท้าย

เกี่ยวกับผู้เขียน

โลกจริง

  • กรกต รักห่วง
  • ภรรยา 1 คนถ้วน (ไม่คิดจะมีเพิ่มแล้วครับ)
  • หนีเมืองกรุงฯ ใช้ชิวิตอยู่จังหวัดตรัง
  • เป็นแฟนบอลทีม Liverpool
  • เล่น DOS Game เป็นงานอดิเรก

โลกออนไลน์

เกี่ยวกับหนังสือ