หลังจากที่คุณได้อ่าน “การเรียนรู้การใช้งาน Terminal เบื้องต้น” และ “คู่มือเริ่มต้นสำหรับบรรทัดคำสั่ง Linux” แล้วจะทำให้มีความเข้าใจพื้นฐานเกี่ยวกับการทำงานในสภาพแวดล้อมบรรทัดคำสั่ง (Command Line) ได้ดีขึ้น (หากยังไม่ได้อ่าน แนะนำให้อ่านก่อนนะคะ) แต่สำหรับหลายๆ คนที่เพิ่งเริ่มต้นใช้งาน อาจยังรู้สึกว่ามันใช้งานยากหรือจำกัดอยู่มาก บทความนี้จึงออกแบบมาเพื่อช่วยให้คุณเข้าใจพื้นฐานเพิ่มเติม พร้อมคำแนะนำเกี่ยวกับการปรับแต่ง และวิธีการทำให้เทอร์มินัลใช้งานได้ข้ามแพลตฟอร์ม จุดมุ่งหมายคือทำให้คุณรู้สึกสะดวกสบายกับการใช้เทอร์มินัลมากขึ้น เช่นเดียวกับที่คุณใช้คอมพิวเตอร์ในแบบอื่นๆ
เนื่องจากการเริ่มต้นใช้งานเทอร์มินัลใน Windows อาจดูไม่ง่ายเท่าแพลตฟอร์มอื่นๆ เราจะเริ่มต้นบทความด้วยส่วนที่เกี่ยวกับการใช้เทอร์มินัลใน Windows ถ้าคุณใช้ macOS หรือ Linux สามารถข้ามไปได้เลย
ปรับปรุงประสบการณ์การใช้งานเทอร์มินัลใน Windows
ใน Windows มีหลายตัวเลือกสำหรับการใช้งานเทอร์มินัล แต่ในอดีต Windows ไม่ได้ใช้ Shell แบบ Unix (เช่น bash) เหมือน macOS หรือ Linux ซึ่งมีมานานตั้งแต่ช่วงปี 2000 Windows เองยังขาดฟีเจอร์สำคัญ เช่น การไฮไลต์ข้อความ การเปิดหลายแท็บ ฯลฯ
Shell แบบดั้งเดิมใน Windows
Windows มี Command Line ของตัวเอง 2 แบบ คือ
- Command Prompt (cmd.exe)
- ใช้ไวยากรณ์แบบ MS-DOS
- มีฟีเจอร์จำกัดและเหมาะกับงานพื้นฐาน
- PowerShell
- มีไวยากรณ์ที่ทันสมัยกว่า cmd.exe
- เหมาะสำหรับผู้ดูแลระบบ (Admin) ที่ต้องจัดการซอฟต์แวร์ใน Windows
อย่างไรก็ตาม ทั้งสองอย่างยังไม่รองรับฟีเจอร์ขั้นสูงที่พบใน Shell ของ Unix และไม่เหมาะกับการพัฒนา Cloud หรือการใช้งาน Server
ทางเลือกเพิ่มเติม
สำหรับคนที่ต้องการใช้งาน Unix Shell บน Windows มีโปรแกรมหลายตัวที่ได้รับความนิยม เช่น
- PuTTY: ใช้สำหรับการเชื่อมต่อกับ Server ผ่าน SSH
- mobaXterm หรือ ConEmu: เป็นเทอร์มินัลที่รองรับหลายฟีเจอร์ เช่น การจัดการแท็บ
นอกจากนี้ยังสามารถติดตั้ง Linux Shell บน Windows ได้ เช่น
- Cygwin: รวมชุดเครื่องมือ Linux ไว้บน Windows
- Git Bash: ใช้ Shell แบบ bash พร้อมเครื่องมือพื้นฐานของ Linux
การจัดการแพ็กเกจบน Windows
แม้ว่าเครื่องมือ Linux บน Windows เช่น Cygwin และ Git Bash จะใช้งานได้ดี แต่ยังมีข้อจำกัด เช่น
- ไม่มี Package Manager ที่ครอบคลุมเหมือนใน Linux (เช่น apt) หรือ macOS (เช่น Homebrew)
- ผู้ใช้งานมือใหม่อาจพบว่ายุ่งยาก เนื่องจากต้องแปลงคำสั่งจากคู่มือ Linux ให้เข้ากับ Windows
ในปัจจุบัน Windows มี Package Manager ของตัวเอง เช่น
- Chocolatey
- Scoop
Package Manager เหล่านี้ช่วยติดตั้งทั้งเครื่องมือบรรทัดคำสั่งและโปรแกรมเดสก์ท็อปได้ แต่ยังไม่สมบูรณ์เท่าใน Linux
Windows Terminal และ WSL2
ปัจจุบัน Windows ได้พัฒนาโซลูชันที่สะดวกขึ้นมาก ได้แก่
- Windows Terminal:
- รองรับฟีเจอร์ทันสมัย เช่น แท็บ การไฮไลต์ข้อความ และการแสดงผลแบบทันสมัย
- ใช้งานร่วมกับ Shell ใดก็ได้ เช่น cmd.exe, PowerShell หรือ Git Bash
- WSL2 (Windows Subsystem for Linux):
- เป็นสภาพแวดล้อม Linux ที่รันบน Windows
- สามารถติดตั้งโปรแกรม Linux ด้วย apt หรือ Homebrew ได้
- ช่วยให้ผู้ใช้งานทำงานใน Linux ได้เหมือนกับบนเซิร์ฟเวอร์
แม้ว่า WSL2 จะไม่สามารถรันซอฟต์แวร์เดสก์ท็อปแบบ Windows ได้ แต่ถ้าคุณต้องการใช้งานผสมผสาน คุณสามารถตั้งค่าต่าง Shell ไว้ใน Windows Terminal เช่น
- Git Bash สำหรับโปรแกรมของ Windows
- WSL2 สำหรับงานที่ใช้ Linux
Zsh และตัวแปลคำสั่งอื่นๆ
แม้ว่า bash จะเป็น Shell ที่พบได้บ่อยที่สุดในระบบ Linux สมัยใหม่ และมีไวยากรณ์ที่เข้ากันได้กับหลายสภาพแวดล้อม แต่มันไม่ใช่ตัวเลือกเดียวที่มีอยู่ Bourne shell หรือ /bin/sh เป็นเวอร์ชันที่เล็กกว่า bash และยังใช้ในระบบที่ต้องการความเรียบง่าย เช่น คอนเทนเนอร์ นอกจากนี้ยังมี Z shell (zsh) ซึ่งได้รับความนิยมเพิ่มขึ้นเพราะมีใบอนุญาตที่ยืดหยุ่นกว่า (MIT License) และสามารถปรับแต่งได้มากขึ้น
การเปลี่ยน Shell เริ่มต้น
คุณสามารถเปลี่ยน Shell เริ่มต้นได้ในทุกสภาพแวดล้อม โดยใช้คำสั่ง chsh ทำให้สามารถสลับระหว่าง bash, zsh หรือ Shell อื่นๆ ได้ตามต้องการ
ข้อดีของ Zsh
- การปรับแต่งง่าย: zsh รองรับธีม การไฮไลต์ข้อความ และการแสดงสัญลักษณ์พิเศษ (glyphs) ได้ดีมาก ซึ่งดีกว่า bash ในหลายสภาพแวดล้อม
- เครื่องมือเสริมที่หลากหลาย: มีระบบปรับแต่ง เช่น Oh My Zsh และฟอนต์พิเศษ เช่น Powerline fonts เพื่อช่วยแก้ปัญหาการแสดงผล
ข้อเสียที่อาจพบ
- ไวยากรณ์ของ zsh และ bash ไม่เหมือนกันทั้งหมด โดยเฉพาะเมื่อเขียนสคริปต์ Shell
- สคริปต์ bash เป็นที่นิยมมากกว่า zsh มาก ทำให้การแชร์หรือใช้งานร่วมกันอาจไม่สะดวก
แต่คุณไม่ต้องกังวล เพราะส่วนใหญ่แล้วทุกระบบที่รัน zsh ได้ จะมี bash ติดตั้งมาด้วยเสมอ คุณจึงสามารถใช้ bash สำหรับรันสคริปต์ได้โดยไม่มีปัญหา
การค้นหาแบบขั้นสูงด้วย Globstars
Globbing และการใช้ ‘ ** ’
Globbing คือการค้นหาไฟล์หรือโฟลเดอร์แบบคลุมเครือด้วยอักขระพิเศษ เช่น *
- ตัวอย่างเช่น ค้นหาไฟล์ config.txt ในโฟลเดอร์บ้าน (home directory) แต่ไม่รู้ว่าอยู่ตรงไหน
- ใน bash คุณอาจต้องใช้คำสั่ง find เพื่อค้นหาแบบละเอียด
- แต่ใน zsh คุณสามารถใช้ globstar (**) ได้ทันที โดยเขียนคำสั่งเป็น ~/**/config.txt
ใน bash หากต้องการใช้งาน globstar ต้องเปิดใช้งานด้วยคำสั่ง
shopt -s globstar
การปรับปรุงเครื่องมือในเทอร์มินัลด้วย Rust
Rust เป็นภาษาโปรแกรมใหม่ที่ได้รับความนิยมในการพัฒนาเครื่องมือในเทอร์มินัล เนื่องจากมีไวยากรณ์ทันสมัยและปลอดภัยกว่า C หลายเครื่องมือที่ใช้กันมานาน เช่น ssh, curl, และ cat เขียนด้วยภาษา C ซึ่งยังคงมีการใช้งานอย่างแพร่หลาย แต่ Rust ถูกใช้เพื่อสร้างเครื่องมือใหม่ที่มีฟังก์ชันการทำงานที่ทันสมัยขึ้น
ตัวอย่างเครื่องมือที่เขียนด้วย Rust
- bat: ใช้แทน cat และมีฟีเจอร์ syntax highlighting
- dust: ใช้แทน du สำหรับตรวจสอบพื้นที่ดิสก์ พร้อมผลลัพธ์ที่ดูง่าย
- ripgrep (rg): ค้นหาไฟล์ได้รวดเร็วกว่า grep
แม้ว่าจะมีฟีเจอร์ใหม่ๆ เหล่านี้ แต่คุณไม่จำเป็นต้องเปลี่ยนมาใช้ Rust แทนเครื่องมือดั้งเดิมทันที เพราะสิ่งนี้ยังคงเป็นตัวเลือกเพิ่มเติม
Profile file และ Alias
หนึ่งในปัญหาสำคัญของเครื่องมือใหม่ที่พัฒนาด้วย Rust คือผู้ใช้อาจลืมใช้งาน เนื่องจากเคยชินกับคำสั่งเดิม เช่น cat หรือ grep วิธีแก้ปัญหานี้คือการใช้ โปรไฟล์ไฟล์ (Profile File) เพื่อปรับแต่งสภาพแวดล้อมของ Shell และช่วยให้การใช้งานง่ายขึ้น
โปรไฟล์ไฟล์คืออะไร?
โปรไฟล์ไฟล์เป็นไฟล์ที่ใช้ตั้งค่าการทำงานเบื้องต้นของ Shell โดยอัตโนมัติเมื่อเริ่มต้นใช้งาน ตัวอย่างไฟล์โปรไฟล์สำหรับ Shell ต่างๆ ได้แก่:
- bash: ใช้ไฟล์ ~/.bash_profile หรือ ~/.bashrc
- zsh: ใช้ไฟล์ ~/.zshrc
ไฟล์เหล่านี้มักถูกสร้างขึ้นอัตโนมัติเมื่อคุณเปิด Shell ครั้งแรก แต่จะถูกซ่อนโดยระบบเนื่องจากชื่อไฟล์ขึ้นต้นด้วยจุด (.) หากต้องการแก้ไข คุณต้องเปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความ เช่น nano หรือ vim
การสร้าง Alias เพื่อใช้ Rust Tools
Alias คือคำสั่งลัดที่ช่วยให้คุณเรียกใช้งานคำสั่งอื่นๆ ได้ง่ายขึ้น ตัวอย่างเช่น การตั้งค่าให้ grep ใช้งาน ripgrep (rg) แทน สามารถทำได้ดังนี้
1.ติดตั้ง ripgrep ให้ติดตั้ง rg ด้วย Homebrew
brew install ripgrep
2. แก้ไขไฟล์โปรไฟล์ เปิดไฟล์โปรไฟล์ที่เหมาะกับ Shell ของคุณ
nano ~/.bash_profile
3.เพิ่ม Alias เพิ่มบรรทัดคำสั่งดังนี้ที่ท้ายไฟล์
alias grep='rg'
4.บันทึกไฟล์และปิด จากนั้นเปิดเทอร์มินัลใหม่ หรือใช้คำสั่งเพื่อโหลดไฟล์โปรไฟล์ทันที
source ~/.bash_profile
5.ตรวจสอบการทำงาน ด้วยการทดสอบด้วยคำสั่ง
grep --version
หากการตั้งค่าสำเร็จ จะเห็นว่า grep ถูกแทนที่ด้วย rg
คำแนะนำเกี่ยวกับการใช้งาน Alias
แม้ Alias จะช่วยให้ใช้งานสะดวกขึ้น แต่ควรใช้อย่างระมัดระวัง โดยเฉพาะการแทนคำสั่งเดิม เช่น grep เพราะถ้าสคริปต์หรือคำสั่งที่คุณคัดลอกมาจากแหล่งอื่นต้องการฟังก์ชันที่ rg ไม่รองรับ อาจเกิดข้อผิดพลาดได้
หากต้องการ Alias ที่ปลอดภัยและไม่รบกวนคำสั่งเดิม คุณสามารถสร้างชื่อใหม่ เช่น
alias pyserver='python -m http.server 8000'
ตัวแปรสภาพแวดล้อม (Environment Variables) ในเทอร์มินัล
ในแต่ละเซสชันของเทอร์มินัล จะมีการตั้งค่าตัวแปรสภาพแวดล้อม (Environment Variables) หลายตัวโดยอัตโนมัติ ตัวแปรเหล่านี้ส่วนใหญ่ตั้งค่าโดยระบบ แต่คุณสามารถแก้ไขหรือเพิ่มตัวแปรเองได้ผ่านไฟล์ ~/bash_profile หรือกำหนดค่าแบบชั่วคราวในเซสชันปัจจุบัน
การดูตัวแปรสภาพแวดล้อมในปัจจุบัน
ใช้คำสั่งต่อไปนี้เพื่อดูตัวแปรสภาพแวดล้อมทั้งหมดที่ตั้งค่าอยู่
env
ตัวแปรเหล่านี้หลายตัวจะเกี่ยวข้องกับข้อมูลของ Shell เอง ซึ่งอาจไม่มีประโยชน์สำหรับผู้ใช้ทั่วไป แต่มีตัวแปรหนึ่งที่สำคัญคือ PATH
ตัวแปร PATH
ตัวแปร PATH มีข้อมูลรายการโฟลเดอร์ที่ระบบจะตรวจสอบโดยอัตโนมัติเมื่อคุณรันคำสั่งในเทอร์มินัล คุณสามารถใช้คำสั่งนี้เพื่อดูค่า PATH โดยเฉพาะ
env | grep PATH
รายการโฟลเดอร์ใน PATH จะถูกคั่นด้วยเครื่องหมาย : ตัวอย่างเช่น
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
ความยาวของ PATH ในระบบต่างๆ
- บน Windows และ macOS ตัวแปร PATH มักจะยาวกว่า เพราะซอฟต์แวร์มักถูกติดตั้งในโฟลเดอร์ที่หลากหลาย ซึ่งต้องเพิ่มเข้าไปใน PATH
- บน Linux โปรแกรมส่วนใหญ่จะติดตั้งในไดเรกทอรีมาตรฐาน เช่น /bin หรือ /usr/local/bin เพื่อลดความซับซ้อน
เมื่อคุณติดตั้งซอฟต์แวร์ผ่าน Package Manager เช่น Homebrew หรือ apt ตัวจัดการแพ็กเกจจะเพิ่มโฟลเดอร์ที่เกี่ยวข้องเข้าไปใน PATH ให้อัตโนมัติ
การตรวจสอบตำแหน่งของโปรแกรมคุณสามารถใช้คำสั่ง which เพื่อตรวจสอบตำแหน่งที่ติดตั้งโปรแกรม เช่น
which python
Output
/Users/john/.pyenv/shims/python
คำสั่งนี้จะบอกว่าโปรแกรม python ที่เรียกใช้งานมาจากโฟลเดอร์ใดใน PATH
ความสำคัญของลำดับโฟลเดอร์ใน PATH
ถ้าโปรแกรมเดียวกันมีอยู่ในหลายโฟลเดอร์ใน PATH โปรแกรมที่อยู่ในโฟลเดอร์ที่ปรากฏก่อนจะถูกเรียกใช้งาน ตัวอย่างเช่น Python บน macOS และ Linux มักจะมีเวอร์ชันที่ติดตั้งมาพร้อมกับระบบอยู่แล้ว แต่บางครั้งเวอร์ชันนี้อาจเก่าหรือใหม่เกินไป เครื่องมืออย่าง pyenv ช่วยให้คุณติดตั้ง Python รุ่นที่ต้องการ และตั้งค่าให้ PATH ของโปรแกรมนี้อยู่ลำดับแรก ทำให้คุณมั่นใจได้ว่าโปรแกรมเสริมจะทำงานกับ Python ที่คุณติดตั้งผ่าน pyenv