Essential Command Line Linux/ Mac

ตัวอย่าง terminal ของ macOS

Important Note

คอมพิวเตอร์ที่แอดใช้สอนเป็น Windows 10 ที่ติดตั้ง Subsystem for Linux เอาไว้ สำหรับนักเรียนที่ใช้ Windows และอยากทำตามบทเรียนนี้ อ่านวิธีการติดตั้ง Linux ได้ที่นี่ (แอดใช้ Ubuntu 18.04 LTS)

คอมมานด์ของ linux/ mac os ที่แอดใช้สอนใน module นี้เรียกว่า bash ย่อมาจากคำว่า Bourne Again SHell พัฒนาโดย Brian Fox เป็น command line ตัวมาตรฐานที่ใช้กันมาตั้งแต่ปี 1989

The Linux Command Line by William E. Shotts Jr.

Module นี้เราจะเรียนกันแบบ text-based + tutorial นะครับ นักเรียนต้องอ่านบทความและลองทำตามใน terminal/ shell ของตัวเอง สำหรับ bash version ใหม่นักเรียนสามารถ copy & paste โค้ดหรือกด CTRL+C CTRL+V ใน terminal ได้แล้ว (สะดวกขึ้น แต่แอดแนะนำว่าเขียนโค้ดเองดีกว่า จะได้ฝึกไปในตัวนะครับ)

หลังจากเรียนโมดูลนี้จบแล้ว นักเรียนที่ใช้ linux/ mac os สามารถข้ามไปเรียน SQLite ในโมดูลสามได้เลยนะครับ ถ้าใครติดตั้ง Parallels แอดแนะนำให้ลองเรียนเนื้อหาของ Windows ด้วยจะมีประโยชน์มากเวลาจบไปทำงานจริง (บริษัทส่วนใหญ่ยังนิยมใช้ windows laptop มากกว่า macbook)

Download

ดาวน์โหลดไฟล์ตัวอย่างสำหรับ module นี้ได้ที่นี่

Key Concept

Command Line คือ instruction หรือคอมพิวเตอร์โค้ดที่ถูกสร้างขึ้นมาเพื่อทำงานหนึ่งๆ ยิ่งเรารู้จัก commands มากขึ้นเท่าไหร่ เรายิ่งทำงานได้มากขึ้นเท่านั้น โปรแกรมที่ใช้เขียน command line ของ mac เรียกว่า Terminal หรือ Shell

👩‍💻 ทำไมต้องเรียน Command Line?

เพราะไม่ใช่ทุกคอมพิวเตอร์จะมีหน้าจอ GUI (Graphical User Interface) ให้เราใช้งาน ยกตัวอย่างเช่น server ในบริษัทของเราหรือการทำงานกับบริการต่างๆของ cloud platforms อย่าง Google Cloud, AWS, Microsoft Azure เราจำเป็นต้องเขียน command line เองทั้งหมดเลย

คลิกเพื่อดูตัวอย่าง gcloud commands ของ Google Cloud Platform

Review

Essential Command Lines (Linux/ Mac OS) ที่ควรรู้จักและใช้ให้เป็น

  • echo – แสดงข้อความใน terminal/ shell
  • pwd – แสดง working directory ปัจจุบัน (print working directory)
  • ls – แสดงข้อมูลไฟล์และโฟลเดอร์ใน working directory
  • cd – เปลี่ยน working directory
  • mkdir – สร้าง directory ใหม่
  • rmdir – ลบโฟลเดอร์หรือ directory
  • rm – ลบไฟล์
  • mv – ย้ายไฟล์หรือโฟลเดอร์/ เปลี่ยนชื่อไฟล์หรือโฟลเดอร์
  • cp – copy ไฟล์หรือโฟลเดอร์
  • nano – เปิดโปรแกรม nano text editor ของ linux/ mac
  • touch – สร้าง text file ง่ายๆ
  • cat – แสดงข้อมูลใน text file
  • man – เรียกคู่มือ manual ของคอมมานด์นั้นๆ
  • clear – เคลียร์หน้าจอ terminal/ shell

Note – ในคอร์สนี้ คำว่า directory กับ folder คือสิ่งเดียวกันนะครับ เราสามารถ navigate file systems ใน Linux/ Mac OS ได้สองวิธีคือ 1. Finder (GUI) หรือ 2. terminal/ shell (command line)

วิธีการเปิด terminal ใน mac

เราสามารถเปิด terminal ได้สองวิธี 1. คลิกที่ไอคอน launchpad และพิมพ์ “terminal” หรือ 2. เปิด Finder ไปที่โฟลเดอร์ /Applications/Utilities และเปิด terminal

อ่านเพิ่มเติมได้ที่บทความช่วยเหลือของ apple

วันที่ เวลา ปฏิทิน

เมื่อเปิด terminal/ shell ขึ้นมา โปรแกรมจะรอรับคำสั่งจากเราโดยตัว prompt จะแสดงชื่อของ user ตามด้วยชื่อของ machine (คอมพิวเตอร์) ที่เราตั้งค่าไว้ ตัวอย่างเช่น toyeiei@LAPTOP-6BQFCRRP ตามด้วยเครื่องหมาย $

วิธีการเขียนคอมมานด์ ให้เราพิมพ์ command ที่ต้องการหลัง $ และเคาะ Enter ได้เลย

พิมพ์และรันคอมมานด์ date และ cal ตามลำดับเพื่อเรียกดูวันที่ เวลา และปฏิทิน (cal ย่อมาจาก calendar)

date
cal
แสดงผลข้อความ

echo เทียบเท่ากับฟังก์ชัน print() ของภาษาอื่นๆ ใช้สำหรับแสดงผลข้อมูลใน terminal/ shell

echo hello world
echo I am learning command line for linux and mac os

ถ้าเราต้องการเคลียร์หน้าจอ terminal/ shell ให้พิมพ์คอมมานด์ clear ถ้าต้องการปิด terminal/ shell ให้พิมพ์คอมมานด์ exit และคลิกปุ่มแดงเพื่อปิดโปรแกรม

clear
exit

Note – ตอนเราเรียนถึงบท Python เราสามารถพิมพ์ข้อความเดียวกันด้วยฟังก์ชัน print(“I am learning command line in linux and mac os!”)

คลิกเพื่อดูวีดีโอ echo

echo แสดงผลข้อความใน terminal และ clear หรือ CTRL+L เพื่อเคลียร์หน้าจอ

สร้าง Directory ใหม่

หัวข้อนี้เราจะเรียน 3 commands ที่ใช้เยอะที่สุดใน linux/ mac os คือ pwd mkdir และ ls

  • pwd – print working directory
  • mkdir – make directory
  • ls – list contents in directory

เราใช้คอมมานด์ pwd ย่อมาจาก print working directory เพื่อดูชื่อโฟลเดอร์ปัจจุบันของเรา (ศัพท์เทคนิคเราเรียกว่า PATH) โดย linux/ mac os จะใช้ตัว slash / เพื่อเขียนชื่อ path ตัวอย่างเช่น /home/user_name

pwd

mkdir ย่อมาจาก make directory ใช้สำหรับสร้างโฟลเดอร์หรือ directory ใหม่ syntax การเขียนให้พิมพ์ mkdir ตามด้วยชื่อโฟลเดอร์ เราสามารถใช้ mkdir สร้างหลายๆโฟลเดอร์พร้อมกันตามตัวอย่างด้านล่าง

mkdir newFolder1
mkdir newFolder2 newFolder3

เสร็จแล้วใช้คอมมานด์ ls ย่อมาจาก list contents เพื่อเรียกดูไฟล์และโฟลเดอร์ใน working directory ของเรา นักเรียนจะเห็นชื่อโฟลเดอร์ newFolder1 newFolder2 newFolder3 ที่เราเพิ่งสร้างขึ้นมาใน terminal

ls
เปลี่ยน PATH

linux/ mac os ใช้ slash /home/user_name  สำหรับเขียนชื่อ path เราใช้ cd command (ย่อมาจาก change directory) เพื่อเปลี่ยนไปยัง path ที่เราต้องการ

  • ถ้าเราพิมพ์ cd เฉยๆ จะกลับไปสู่ root directory ของคอมพิวเตอร์เรา ใน linux/ mac คือ path /home/user_name
  • cd ตามด้วยชื่อ folder ที่อยู่ใน working directory คือการย้ายไปที่โฟลเดอร์ใหม่
  • cd .. คือการย้อนกลับหนึ่ง step (กลับไปที่ parent)
  • cd ตามด้วยชื่อ absolute path เต็มๆ เช่น /home/user_name/folder/sub_folder คือการย้ายไปที่โฟลเดอร์นั้นในคอมพิวเตอร์ของเราเลย
คลิกเพื่อดูวีดีโอ cd

cd คือคอมมานด์หลักที่ใช้ในการ navigate file systems ของ linux/ mac os ตอนจบของวีดีโอนี้เราย้ายกลับมาอยู่ที่ /home/toyeiei ใน path นี้มีทั้งหมด 4 โฟลเดอร์คือ newFolder1 newFolder2 newFolder3 และ travel

มาลองสร้างโฟลเดอร์ใหม่ mkdir travel ใน current path ของเรากันก่อน

pwd
mkdir travel

ใช้คอมมานด์ cd navigate ไปที่โฟลเดอร์ travel แล้วลองปริ้นท์ชื่อ path ด้วย pwd

cd travel
pwd

พิมพ์ cd .. เพื่อกลับไปที่ path ก่อนหน้า ปริ้นท์ชื่อ path ด้วย pwd อีกครั้งหนึ่ง

cd ..
pwd

เราสามารถเขียน cd ตามด้วยชื่อ path เต็มๆ (absolute path) ตามตัวอย่างด้านล่าง

cd /home/user_name/country/thailand

Tip – เวลาเราเขียนชื่อโฟลเดอร์หรือไฟล์ใน terminal/ shell สามารถคลิกปุ่ม TAB บนคีย์บอร์ดเพื่อทำ auto complete ชื่อได้ด้วย (ประหยัดเวลาตอนเขียนชื่อ path หรือชื่อไฟล์และโฟลเดอร์ยาวๆ)

สร้าง Text File ง่ายๆ

หัวข้อนี้มาเรียนวิธีการสร้าง text file และการเรียกใช้งาน nano text editor ผ่าน terminal/ shell

วิธีออกจาก nano ให้กด CTRL+O เพื่อเซฟไฟล์ และ CTRL+X เพื่อปิด nano ตามลำดับ

เราใช้คอมมานด์ touch เพื่อสร้าง text file เปล่าๆ (ยังไม่มีข้อมูลในไฟล์)

touch cities.txt

เราสามารถแก้ไขข้อมูลในไฟล์นี้ด้วยโปรแกรม text editor ของ linux/ mac ชื่อว่า nano วิธีการ edit ไฟล์ให้พิมพ์ nano ตามด้วยชื่อไฟล์ ลองเขียนชื่อ 2-3 เมืองในไฟล์นี้

nano cities.txt

Bangkok
London
Tokyo

หลังจากแก้ไข เพิ่มเติมข้อมูลเสร็จแล้ว เราจะกดปุ่ม CTRL+O บนคีย์บอร์ดเพื่อ save file เคาะ Enter หนึ่งครั้งเพื่อคอนเฟิร์มชื่อไฟล์ และกดปุ่ม CTRL+X เพื่อปิดโปรแกรม nano กลับสู่ terminal/ shell

เราใช้คอมมานด์ cat เพื่อปริ้นท์ content ของ text file ใน terminal

cat cities.txt
ปรับพารามิเตอร์

คอมมานด์ส่วนใหญ่จะมีพารามิเตอร์ที่เราสามารถปรับเปลี่ยนได้ โดย bash parameter จะเขียนตามหลังเครื่องหมาย - และชื่อพารามิเตอร์จะมีสองแบบ คือแบบสั้น -l หรือแบบยาว --reverse (อธิบาย แบบสั้นจะใช้ - ตามด้วยหนึ่งตัวอักษร แบบยาวจะใช้ -- ตามด้วย word เช่น help หรือ reverse)

สังเกต output ที่ได้จาก ls ชื่อโฟลเดอร์จะมีไฮไลท์สีเขียวด้วย ส่วนชื่อไฟล์ปกติจะไม่มีไฮไลท์

มาลองดูตัวอย่างพารามิเตอร์ของ ls ตัวที่เราใช้บ่อยที่สุดคือ -l ย่อมาจาก long listing format ใช้แสดงผลข้อมูลไฟล์และโฟลเดอร์ใน working directory ของเราแบบเต็มๆ มีชื่อ user ที่สร้างไฟล์นั้นๆขึ้นมา วันและเวลาที่อัพเดทไฟล์ล่าสุด และขนาดไฟล์ (size)

ls
ls -l

เราสามารถเขียนหลายๆพารามิเตอร์พร้อมกันได้สองวิธี คือ -l -S หรือเขียน -lS ติดกันเลยก็ได้ โดยที่ S (ตัวพิมพ์ใหญ่) คือการเรียงไฟล์ตามขนาด (sorted by size) จากสูงไปต่ำ ตัวอย่างด้านล่างคือการสั่ง terminal ให้แสดงผลข้อมูลไฟล์แบบ long listing format และ sort files by size

ls -l -S
ls -lS

เราสามารถใช้ wildcard * กับคอมมานด์ ls เพื่อ any match character ค้นหาชื่อไฟล์หรือ .extension ที่ต้องการ ตัวอย่างด้านล่างเราค้นหาไฟล์ .pdf .jpg และไฟล์ที่ชื่อขึ้นต้นด้วยตัว a ตามลำดับ

ls *.pdf
ls *.jpg
ls a*

ถ้าต้องการดูว่าคอมมานด์ ls มีพารามิเตอร์อะไรบ้าง ให้พิมพ์ ls --help เพื่อเรียกคู่มือขึ้นมาอ่าน อ่านจบแล้วกด q บนคีย์บอร์ดเพื่อกลับสู่ terminal (ถ้าใครพิมพ์ ls --help ไม่ได้ ให้ลองพิมพ์ man ls แทนนะครับ)

ls --help

Note – ไม่ใช่ทุกคอมมานด์จะสามารถใช้ --help เพื่อเรียกคู่มือขึ้นมาอ่านได้ พารามิเตอร์พวกนี้จะขึ้นอยู่กับ developers ที่เขียนมันขึ้นมา ถ้าหาคู่มือไม่เจอ แอดแนะนำให้ลอง Google หาข้อมูลเองได้เลย

ย้ายและเปลี่ยนชื่อไฟล์

คอมมานด์ mv ย่อมาจาก move ใช้สำหรับย้ายไฟล์หรือโฟลเดอร์ syntax การเขียนคือ mv file folder ตัวอย่างด้านล่างเราย้ายไฟล์ hello.txt ไปที่โฟลเดอร์ new_folder

mv hello.txt new_folder

เราสามารถใช้ mv เพื่อเปลี่ยนชื่อไฟล์ได้ด้วย ตัวอย่างนี้เรา rename ชื่อไฟล์ hello.txt เป็น helloworld.txt

mv hello.txt helloworld.txt
คลิกเพื่อดูวีดีโอ mv

เราใช้คอมมานด์ mv เพื่อย้ายและเปลี่ยนชื่อไฟล์

การลบไฟล์และโฟลเดอร์

เราใช้คอมมานด์ rm เพื่อลบไฟล์ที่เราไม่ต้องการ ตรงนี้ต้องระวังมากๆ เพราะว่าลบแล้วหายเลย (ไฟล์ไม่ได้ไปอยู่ใน recycly bin) และ terminal/ shell ไม่มีปุ่ม undo ด้วย เราสามารถใช้พารามิเตอร์ -i เพื่อถามเราก่อนอีกครึ่งหนึ่งว่าต้องการจะลบไฟล์นั้นจริงหรือเปล่า พิมพ์ y เพื่อยืนยันการลบไฟล์

rm cities.txt
rm -i cities.txt

เราใช้คอมมานด์ rmdir (remove directory) เพื่อลบโฟลเดอร์เปล่าที่เราไม่ต้องการ

rmdir newFolder3

ถ้าโฟลเดอร์นั้นมีข้อมูลหรือไฟล์อื่นๆอยู่ เราต้องลบไฟล์ทั้งหมดก่อนถึงจะลบโฟลเดอร์ได้ เทคนิคคือการใช้ wildcard * เพื่อลบไฟล์ทั้งหมดใน newFolder3 ตามตัวอย่างด้านล่าง

rm newFolder3/*
rmdir newFolder3
Redirection

เราใช้สัญลักษณ์ > เพื่อ redirect output ของ echo ไปที่ text file ได้ (.txt) และใช้ >> เพื่อ append ข้อความ เสร็จแล้วใช้ cat เพื่อดู content ของ text file ใน terminal/ shell

ตัวอย่างนี้เราสร้างไฟล์ hello.txt ด้วยเทคนิค redirection มีข้อมูลทั้งหมด 3 บรรทัด

echo hello world           >  hello.txt
echo this is a second line >> hello.txt
echo this is a third line  >> hello.txt
cat hello.txt
คลิกเพื่อดูวีดีโอ redirection

เราใช้ >> เพื่อ append ข้อความใน text file ถ้าเราใช้ > จะเป็นการเขียนทับไฟล์เดิม (overwrite)

ค้นหา String Pattern

เราใช้คอมมานด์ grep เพื่อค้นหา pattern ใน text file ได้ โดย grep จะหา pattern ที่เราต้องการทีละบรรทัดใน text file นั้นๆ และแสดงผลเฉพาะบรรทัดที่เจอ matched pattern พร้อมทั้งไฮไลท์สีด้วย

ตัวอย่างนี้เราค้นหาตัวอักษร “a” และ “o” ตามลำดับ ถ้าต้องการให้ grep ค้นหาแบบไม่สนใจ case (ตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ก็ได้) ให้เราใส่พารามิเตอร์ -i ด้วย

cat animals.txt
grep "a" animals.txt
grep "o" animals.txt
grep -i "a" animals.txt
วิธีการอ่าน Manual

สำหรับ commands ส่วนใหญ่ใน linux/ mac จะมีคู่มือ (manual) ให้เราอ่านวิธีการใช้งานแบบละเอียด เราใช้คอมมานด์ man เพื่อเปิดไฟล์คู่มือ ถ้าคู่มือมีหลายหน้าให้กดปุ่ม PgUp PgDn หรือ space bar บนคีย์บอร์ดเพื่อเลื่อนหน้าไปมาได้ ถ้าต้องการออกจากคู่มือให้กด q หนึ่งครั้ง

man pwd
man ls
man mkdir
คลิกเพื่อดูวีดีโอ man

เวลาเจอคอมมานด์ใหม่ๆ สิ่งแรกที่แอดทำคืออ่านคู่มือ วิธีหลักๆที่เราใช้เรียกคู่มือคือ man command หรือ command --help ถ้าไม่มีคู่มือ ลองค้นข้อมูลเพิ่มเติมใน Google ก็ได้ (stackoverflow, quora เป็นต้น)

pipe operator

เราสามารถเชื่อม bash commands ต่างๆเข้าด้วยกันด้วยเครื่องหมาย | (อ่านว่า pipe)

ตัวอย่างด้านล่างเราเชื่อม 3 commands เข้าด้วยกัน เริ่มจาก sort เพื่อเรียงข้อมูลใน animals.txt แบบ ascending order (เรียงจาก A-Z) เสร็จแล้วส่ง output ไปที่คอมมานด์ uniq เพื่อดูชื่อ animals ที่ไม่ซ้ำกันเลย (unique) และสุดท้ายคือคอมมานด์ wc ใช้เพื่อนับจำนวน unique animals ในไฟล์ animals.txt

การใช้ pipe คือการ combo commands ของเรานั่นเอง (powerful technique!)

sort animals.txt
sort animals.txt | uniq
sort animals.txt | uniq | wc

เราสามารถใช้พารามิเตอร์เพื่อปรับผลลัพธ์ของคอมมานด์ได้ด้วย เช่น sort -r เพื่อเปลี่ยนการเรียงข้อมูลเป็นแบบ descending order (Z-A) หรือ wc -l แสดงผลเฉพาะจำนวนแถวของ text file เท่านั้น

sort -r animals.txt | uniq | wc -l

หัวข้อถัดไปแอดจะอธิบาย commands สำหรับจัดการ text file รวมถึง wc อย่างละเอียด

ทำงานกับ Text File

Bash มีคอมมานด์ที่ออกแบบมาสำหรับทำงานกับ text file โดยเฉพาะ หัวข้อนี้เราจะเรียนด้วยกัน 4 ตัวคือ

  • head
  • tail
  • wc
  • less

👩‍💻 เวลาเจอ bash commands ใหม่ๆที่เราไม่เคยใช้มาก่อน ให้ลองศึกษาจากคู่มือ man head หรือลอง Google เพื่อดูตัวอย่างการใช้งานเบื้องต้น

เราใช้ head และ tail เพื่อพรีวิวข้อมูลด้านบนและด้านล่างของ text file โดยเราสามารถใช้พารามิเตอร์ -n เพื่อกำหนดจำนวนแถวที่ต้องการพรีวิวได้ด้วย ตัวอย่างนี้เราพรีวิว 3 แถวบนและล่างของไฟล์ animals.txt

head -n 3 animals.txt
tail -n 3 animals.txt

ถัดมาคือคอมมานด์ wc แอดจำง่ายๆว่า word count โดยเราสามารถใช้คอมมานด์นี้นับจำนวนแถว (new lines) จำนวนคำ (words) และจำนวนตัวอักษร (bytes) ใน text file ได้

ถ้าเรารันคอมมานด์ wc โดยไม่ใส่พารามิเตอร์ bash จะแสดงจำนวนแถว จำนวน word และ bytes ใน terminal เราสามารถใช้พารามิเตอร์ -l -w -c เพื่อแสดงเฉพาะ lines, words, bytes ตามลำดับ

wc animals.txt
wc -l animals.txt
wc -w animals.txt
wc -c animals.txt
คลิกเพื่อดูวีดีโอ wc

output ของ wc จะเป็นตัวเลขสามตัวคือ [1] จำนวนแถว [2] จำนวนคำ [3] จำนวนตัวอักษร (bytes) ตามลำดับ ตัวอย่างในวีดีโอนี้ไฟล์ animals.txt ได้ output 7 7 33 คือ 7 lines, 7 words และ 33 bytes ตามลำดับ เราสามารถใช้พารามิเตอร์ -l -w และ -c เพื่อเรียกดูเฉพาะตัวเลขที่เราต้องการตามลำดับ

ถ้า text file ของเรามีขนาดใหญ่ หลายร้อยบรรทัด (หรือมากกว่านั้น) เราสามารถใช้ less เพื่อเรียกดู content ทีละหน้าได้ โดยกด space bar เพื่อเลื่อนไปหน้าถัดไป หรือกด q เพื่อ quit กลับสู่ terminal

less long_text.txt
HTML
คลิกเพื่อดูวีดีโอ HTML tutorial 4.36 นาที

นักเรียนที่ใช้ linux/ mac os สามารถเรียนวิธีการเขียน HTML ได้ในวีดีโอนี้เลยครับ สำหรับ text editor ให้นักเรียนใช้ nano เมื่อเขียนไฟล์ homepage.html เสร็จให้ลองเปิดไฟลื์นี้ด้วยโปรแกรม Safari (เปิด Finder ไปที่โฟลเดอร์ที่เก็บไฟล์ .html ของเราไว้ double-click เพื่อเปิดไฟล์)

Note – วีดีโอนี้แอดเขียน HTML ใน Windows 10 แต่ถ้านักเรียนดูจบ จะเห็นว่าวิธีการเขียน command line ของทุก OS มีความแตกต่างกันน้อยมาก (ต่างกันแค่ชื่อคอมมานด์ และชื่อพารามิเตอร์)

HTML คือภาษาที่ใช้ใส่ content ในเว็บไซต์และกำหนด structure เบื้องต้น เช่น ข้อความ รูปภาพ วีดีโอ ไฟล์เสียง เป็นต้น เว็บไซต์ที่เราเห็นทั้งหมดจริงๆก็เป็นแค่ text file นามสกุล .html

nano homepage.html

HTML ใช้ <tag> ในการใส่ content

  • <tag> เรียกว่า open tag ส่วน </tag> เรียกว่า closing tag
  • <title> ชื่อ title ที่แสดงบนบาร์ด้านบนของ browser
  • <h1> คือ heading tag ขนาดใหญ่ที่สุด สามารถไล่ระดับฟ้อนท์ได้ถึง h6
  • <p> คือ paragraph tag ใส่ข้อความหรือประโยคยาวๆได้
  • <img> ใช้ใส่รูปภาพ กำหนดค่า attribute src="image.jpg" โดยไฟล์รูปภาพต้องอยู่ใน working directory เดียวกันกับไฟล์ .html
  • <img> เป็น self-closing tag ไม่จำเป็นต้องมี </img> ปิดท้าย
<html>
  <title>My Cool Website</title>
  <h1>Hello World</h1>
  <p>I am learning command line in Windows</p>
  <p>This is my first website ever</p>
  <img src="image.jpg">
</html>

HTML จะทำงานเหมือนเป็น tree structure โค้ดทั้งหมดจะถูก wrap อยู่ใน <html> tag และ content จะแบ่งเป็น <head> กับ <body>

  • ข้อมูลที่อยู่ใน <head> นอกจากชื่อ title จะเป็นพวก metadata อื่นๆ
  • ข้อมูลที่อยู่ใน <body> จะเป็น visible content ที่ถูกเรนเดอร์แสดงผลด้วย browser
<html>
  <head>
    <title>My Cool Website</title>
  </head>
  <body>
    <h1>Hello World</h1>
    <p>I am learning command line in Windows</p>
    <p>This is my first website ever</p>
    <img src="image.jpg">
  </body>
</html>

หลังจากเขียนไฟล์ .html เสร็จแล้ว กดปุ่ม CTRL+O เพื่อ save file เคาะ enter หนึ่งครั้งเพื่อคอนเฟิร์มและกดปุ่ม CTRL+X เพื่อออกจาก nano ลองเปิดไฟล์ homepage.html ด้วยโปรแกรม Safari

อีกสองภาษาที่เรานิยมใช้กับ HTML ในการทำ website development คือ CSS สำหรับ styling ให้เว็บไซต์สวยงามขึ้นและ JavaScript เพื่อเพิ่มลูกเล่นแบบ interactive กับ users

curl website content
คลิกเพื่อดูวีดีโอ curl tutorial 2.32 นาที

Windows ใช้คอมมานด์ findstr สำหรับหา pattern ส่วน mac ใช้คอมมานด์ grep

เราใช้ curl เพื่อดึงข้อมูลจากเว็บไซต์ เทคนิคที่เราใช้บ่อยๆคือการ redirect output ไปที่ text file และใช้ grep เพื่อค้นหา pattern ที่เราต้องการ

ตัวอย่างด้านล่าง เราดึง html content จากเว็บไซต์ wikipedia และค้นหาชื่อ “title” ของเว็บไซต์นั้นๆ

curl https://en.wikipedia.org/wiki/Itaewon_Class

curl https://en.wikipedia.org/wiki/Itaewon_Class > itaewon.txt
grep "<title>" itaewon.txt

สังเกตวิธีการเขียน grep (linux/ mac) หรือ findstr (windows) ตัว syntax พื้นฐานเหมือนกันเลย ถ้าเราเขียน command line ของ OS ที่เราใช้ประจำเป็นแล้ว การเรียน OS ใหม่ ก็จะง่ายขึ้นเยอะเลย

ping website
คลิกเพื่อดูวีดีโอ ping tutorial 2.44 นาที

Mac ใช้ ping -c เพื่อกำหนดจำนวน echo requests ที่ส่งไปหาคอมพิวเตอร์อีกเครื่องหนึ่ง

ping ใช้ในการตรวจสอบการเชื่อมต่อระหว่างคอมพิวเตอร์ เช่น แล๊บท๊อปของเรากับเซอร์เวอร์ในอินเตอร์เน็ต วิธีการใช้งานแค่พิมพ์ ping ตามด้วยชื่อเว็บไซต์ (domain name) หรือ IP address ก็ได้

  • Domain Name คือชื่อเว็บไซต์ ออกแบบมาให้ users ค้นหาเว็บไซต์ได้ง่ายๆ เช่น google.com, facebook.com, wikipedia.org เราสามารถจองและซื้อชื่อโดเมนที่ต้องการได้ จ่ายเงินเป็นรายปี ราคาเริ่มต้นประมาณ 200-300 บาท ลองดูรายชื่อ available domains ได้ที่เว็บไซต์ domains.google
  • IP address เปรียบเสมือนเลขทะเบียนบ้านของเว็บไซต์ ออกแบบมาสำหรับการสื่อสารระหว่างคอมพิวเตอร์ด้วยกันเอง IP มีอยู่สองแบบคือ public external และ internal สำหรับใช้ภายในองค์กร

ping จะส่ง echo request ไปที่เว็บไซต์หรือเซอร์เวอร์นั้นๆ (ping ชื่อโดเมนหรือ ip address ก็ได้) เราใช้พารามิเตอร์ -c เพื่อกำหนดจำนวน echo request ที่เราส่งไปได้ นักเรียนสามารถกดปุ่ม CTRL+C เพื่อหยุดคอมมานด์ ping ได้

ping www.google.co.th
ping 172.253.118.94

ตัวอย่างนี้เราส่ง echo requests ไปทั้งหมด 5 ครั้ง

ping -c 5 www.google.co.th

Note – ถ้าเรารันคอมมานด์ ping เฉยๆโดยไม่ได้กำหนดจำนวน echo ที่ส่งไป ping จะรันไปเรื่อยๆจนกว่าเราจะกดปุ่ม CTRL+Z หรือ CTRL+C บนคีย์บอร์ด

เปรียบเทียบ linux/ mac vs. windows

ตารางนี้แอดเปรียบเทียบให้ดูระหว่างคอมมานด์ของ Linux/ Mac และ Windows ตัวอย่างเช่น pwd และ cd ใช้แสดงชื่อ working directory ปัจจุบัน หรือ ls และ dir ใช้สำหรับแสดงชื่อไฟล์และโฟลเดอร์ใน directory

Note – ใน Windows ถ้าเราพิมพ์ cd เฉยๆ cmd จะแสดงชื่อ working directory ของเรา

การเรียกใช้งานคอมมานด์ของทั้งสอง OS แตกต่างกันนิดเดียว วิธีการปรับพารามิเตอร์ (หรือ option ของคอมมานด์) Linux/ Mac จะใช้ -option ส่วน Windows จะใช้ /option

แอดแนะนำว่านักเรียนควรเขียนพื้นฐานให้ได้ของทั้งสองระบบปฏิบัติการเลย เพราะตอนทำงานจริงมีโอกาสสูงมากที่เราต้องเจอกับ Linux โดยเฉพาะการทำงานกับเซอร์เวอร์หรือ cloud platform (Linux เป็น open source ที่สามารถดาวน์โหลดมาใช้งานฟรีได้เลย แตกต่างกับ Windows หรือ Mac ที่ต้องเสียเงิน)

Linux มีอยู่หลาย distributions ให้เลือกใช้งาน เช่น Ubuntu, Fedora, Kali และ OpenSuse เป็นต้น

References

  • บทความสอนใช้งาน command line ของ Ubuntu สำหรับผู้เริ่มต้น
  • คอร์สเรียนฟรี The UNIX Workbench เรียน command line ระดับพื้นฐานถึงขั้นสูงบน coursera
  • หนังสือ The Linux Command Line โดย William Shotts

Content Reviewer

ขอบคุณคุณยศ นักเรียนคอร์ส ITF และแอดมินเพจมาลองเรียน (Data Analytics Manager @Predictive) ที่ช่วยทดสอบ bash commands ในแมคด้วยนะครับ ตอนนี้ยศเขียนรีวิวคอร์สเรียนออนไลน์ที่เค้าไปลงเรียนมาแล้ว ติดตามอ่านได้ที่เพจมาลองเรียน


Formative Quiz

🏆 Formative quiz คือแบบทดสอบเพื่อรีวิวและทบทวนความรู้ งานวิจัยของ Zhang และ Henderson (2015) พบว่านักเรียนที่ผ่านการทำควิซ จะช่วยให้เข้าใจบทเรียนได้ดียิ่งขึ้น better performance อย่างมีนัยสำคัญ

คลิกเพื่อเริ่มทำแบบสอบถาม 28 ข้อ นักเรียนสามารถทำควิซซ้ำได้เรื่อยๆจนกว่าจะได้คะแนนเต็ม

หลังจากทำแบบทดสอบเสร็จแล้ว แอดรบกวนช่วยตอบแบบสอบถามความพอใจ module นี้ด้วยนะครับ ขอบคุณทุกคนมากๆครับ แล้วพบกันในบทต่อไปนะ


Keep Learning

Module นี้เราเรียนวิธีการเขียน command line พื้นฐานสำหรับ linux/ mac นักเรียนที่ใช้แมคสามารถข้ามไปเรียน module 3 เรื่อง SQLite ได้เลยนะครับ mac os รุ่นใหม่จะมีโปรแกรม SQLite และ Python 3 ติดตั้งมาแล้ว สามารถเรียกใช้งานได้เลยแค่พิมพ์คอมมานด์ sqlite3 หรือ python3 ใน terminal

Roadmap สำหรับนักเรียนที่ใช้ linux/ mac os

แอดแนะนำให้เรียนแค่วันละ 1-2 บท ให้เวลาสมองได้ย่อยเนื้อหาที่เราเรียนก่อน งานวิจัยด้าน neuroscience พบว่าสมองมีการเปลี่ยนแปลงทุกวันเวลาเราได้รับความรู้ใหม่