บทความนี้เป็นบทความแรกในการที่จะสอนพื้นฐานของ Linux ซึ่งครอบคลุมการเริ่มต้นใช้งาน terminal หรือ command line ของ Linux และการใช้งานคำสั่งต่าง ๆ หากคุณเป็นผู้เริ่มต้นใช้งานใน Linux การทำความเข้าใจกับ terminal จะช่วยให้คุณสามารถทำงานกับเซิร์ฟเวอร์ Linux ได้อย่างมีประสิทธิภาพ เนื่องจาก terminal เป็นวิธีการหลักในการสื่อสารกับเซิร์ฟเวอร์ Linux
Terminal Emulator
Terminal Emulator คือโปรแกรมที่ช่วยให้เราใช้ terminal ในระบบปฏิบัติการที่มีกราฟิก (GUI) โดยปกติแล้วผู้ใช้จะใช้ระบบปฏิบัติการที่มี GUI สำหรับการใช้งานทั่วไป ดังนั้น Terminal Emulator จึงเป็นสิ่งที่จำเป็นสำหรับผู้ใช้เซิร์ฟเวอร์ Linux
ต่อไปนี้เป็น Terminal Emulator ที่ใช้กันอย่างแพร่หลายและสามารถใช้ได้ฟรี แบ่งตามระบบปฏิบัติการ:
- Mac OS X: Terminal (ค่าเริ่มต้น), iTerm 2
- Windows: ConEmu, Windows Terminal, PuTTy
- Linux: Gnome Terminal, Konsole, XTerm
แต่ละโปรแกรมมีคุณสมบัติที่แตกต่างกัน แต่ทั่วไปแล้ว terminal emulator ในปัจจุบันควรมีฟังก์ชันเช่น การเปิดหลายแท็บพร้อมกันและการไฮไลต์ข้อความ
Shell
ในระบบ Linux Shell คือส่วนที่ใช้รับคำสั่งจากผู้ใช้และส่งคำสั่งเหล่านั้นไปยังระบบปฏิบัติการเพื่อทำงาน ซึ่งมีหลาย shell ที่ใช้กันอย่างแพร่หลาย เช่น Bourne-Again shell (bash) และ Z shell (zsh) แต่ละ shell มีคุณสมบัติและวิธีการรับคำสั่งที่แตกต่างกันเล็กน้อย แต่ทั้งหมดสามารถทำงานได้คล้าย ๆ กัน เช่น การเปลี่ยนเส้นทางของข้อมูล (input/output redirection), การใช้ตัวแปร, และการทดสอบเงื่อนไข
บทความนี้ใช้ Bourne-Again shell หรือที่เรียกว่า bash ซึ่งเป็น shell ที่ใช้กันทั่วไปใน Linux หลายรุ่น เช่น Ubuntu, Fedora และ RHEL
Command Prompt
เมื่อคุณเข้าสู่ระบบเซิร์ฟเวอร์ สิ่งแรกที่คุณจะพบคือ Message of the Day (MOTD) ซึ่งมักเป็นข้อความให้ข้อมูลเกี่ยวกับเซิร์ฟเวอร์ เช่น เวอร์ชันของ Linux ที่ใช้งานอยู่ จากนั้นคุณจะถูกนำไปที่ command prompt หรือ shell prompt ซึ่งเป็นจุดที่คุณสามารถพิมพ์คำสั่งเพื่อใช้งานเซิร์ฟเวอร์ได้
ข้อมูลที่แสดงบน command prompt สามารถปรับแต่งได้โดยผู้ใช้ ต่อไปนี้คือตัวอย่าง command prompt ของ Ubuntu 20.04
john@server:~$
คำอธิบายของ prompt นี้:
- john: ชื่อผู้ใช้ปัจจุบัน
- server: ชื่อเซิร์ฟเวอร์
- ~: ไดเรกทอรีปัจจุบัน โดยใน bash เครื่องหมาย ~ หรือ tilde จะแสดงถึงไดเรกทอรีของผู้ใช้ที่ล็อกอินอยู่ ซึ่งในที่นี้คือ /home/john
- $: เครื่องหมายที่สิ้นสุด command prompt ซึ่งบอกให้รู้ว่าตอนนี้พร้อมรับคำสั่งใหม่แล้ว
นี่คือตัวอย่างของ command prompt เมื่อเข้าสู่ระบบในฐานะ root และอยู่ในไดเรกทอรี /var/log
root@server:/var/log#
สังเกตว่าเครื่องหมายสิ้นสุด command prompt เปลี่ยนเป็น # ซึ่งเป็นเครื่องหมายมาตรฐานของ root ใน Linux ซึ่ง root คือบัญชีผู้ใช้พิเศษที่มีสิทธิ์จัดการระบบทุกอย่าง
การรันคำสั่ง
คำสั่งสามารถพิมพ์ใน command prompt โดยการระบุชื่อของไฟล์โปรแกรมที่ต้องการ ซึ่งอาจจะเป็นโปรแกรมที่เขียนเป็นไฟล์ไบนารีหรือสคริปต์ โดยคำสั่งใน Linux มีหลายแบบที่ติดตั้งมากับระบบปฏิบัติการ เช่น คำสั่งสำหรับนำทางในระบบไฟล์, ติดตั้งและจัดการโปรแกรม, และกำหนดค่าระบบหรือแอปพลิเคชันต่าง ๆ
เมื่อคำสั่งทำงาน จะถูกเรียกว่า process ซึ่งเมื่อรันคำสั่งในแบบ foreground (โหมดหลัก) ผู้ใช้ต้องรอจนกระทั่ง process นั้นเสร็จสิ้นก่อน จึงจะสามารถพิมพ์คำสั่งถัดไปได้
สิ่งสำคัญที่ควรทราบคือใน Linux ทุกอย่างมีความไวต่อการใช้ตัวอักษรเล็ก-ใหญ่ (case-sensitive) เช่น ชื่อไฟล์ ชื่อโฟลเดอร์ คำสั่ง ข้อความเสริม และตัวเลือก ถ้าอะไรไม่ทำงานตามที่คาดไว้ ให้ตรวจสอบการสะกดและตัวพิมพ์ของคำสั่งอีกครั้ง
คำสั่งแบบไม่มี Argument หรือ Option
การรันคำสั่งโดยไม่ระบุ argument หรือ option ให้พิมพ์ชื่อคำสั่งแล้วกด Enter
การทำงานของคำสั่งในรูปแบบนี้จะเป็นไปตามค่าเริ่มต้น ซึ่งแตกต่างกันไปตามคำสั่ง เช่น การใช้คำสั่ง cd โดยไม่มี argument จะนำเรากลับไปที่ไดเรกทอรีหลักของผู้ใช้ ในขณะที่ ls จะแสดงรายการไฟล์และไดเรกทอรีในไดเรกทอรีปัจจุบัน และคำสั่ง ip จะพิมพ์วิธีการใช้งานคำสั่งนี้
ลองรันคำสั่ง ls โดยไม่มี argument เพื่อดูรายการไฟล์และไดเรกทอรีในไดเรกทอรีปัจจุบัน (ซึ่งอาจจะมีไฟล์หรือไม่มีเลย)
ls
คำสั่งที่มี Argument
หลายคำสั่งรับ argument หรือพารามิเตอร์ที่มีผลกับการทำงานของคำสั่ง ตัวอย่างเช่น การใช้คำสั่ง cd ที่มักจะใส่ argument ระบุว่าเราต้องการเปลี่ยนไปที่ไดเรกทอรีไหน เช่น
cd /usr/bin
cd คือคำสั่ง และ /usr/bin คือ argument ที่ระบุไดเรกทอรีที่ต้องการเปลี่ยนไป สังเกตว่าข้อมูลเส้นทางปัจจุบันใน command prompt จะอัปเดตตาม
คำสั่งที่มี Options
หลายคำสั่งรับ options หรือที่เรียกว่า flags หรือ switches ที่ปรับเปลี่ยนการทำงานของคำสั่ง โดย options จะตามหลังคำสั่ง และแสดงด้วยเครื่องหมาย – แล้วตามด้วยตัวอักษรเล็กหรือใหญ่ ส่วน options ที่เป็นคำยาว ๆ จะเริ่มด้วย —
ตัวอย่างการใช้ options เช่น คำสั่ง ls มี options ที่นิยมใช้ดังนี้:
- -l: แสดงรายการแบบ “long listing” ที่มีรายละเอียดเพิ่มเติม เช่น สิทธิ์การเข้าถึง, เจ้าของไฟล์, ขนาดไฟล์, และเวลา
- -a: แสดงไฟล์ทั้งหมดรวมถึงไฟล์ที่ซ่อนอยู่ (ขึ้นต้นด้วย .)
การใช้ option -l กับ ls จะเป็นดังนี้
ls -l
สังเกตว่าการแสดงผลจะมีข้อมูลเพิ่มเติมเกี่ยวกับแต่ละไฟล์
โดย option สามารถรวมกันได้ ถ้าต้องการใช้ทั้ง -l และ -a เราสามารถพิมพ์ ls -l -a หรือรวมเป็น ls -la
ls -la
ผลลัพธ์จะแสดงไดเรกทอรีที่ซ่อนอยู่ด้วย เช่น . และ .. เนื่องจากเราใช้ option -a
คำสั่งที่มี Options และ Arguments
สามารถรวมการใช้ options และ arguments ได้ในคำสั่งเดียวกัน
ตัวอย่างเช่น หากต้องการตรวจสอบไฟล์ในไดเรกทอรี /home โดยไม่ต้องเปลี่ยนไดเรกทอรีปัจจุบัน สามารถใช้คำสั่งนี้
ls -la /home
ls คือคำสั่ง, -la คือ options และ /home คือ argument ที่ระบุไดเรกทอรี ผลลัพธ์จะแสดงไฟล์ในไดเรกทอรี /home พร้อมรายละเอียดของผู้ใช้ทั้งหมดในเซิร์ฟเวอร์
Environment Variables (ตัวแปรสภาพแวดล้อม)
Environment Variables คือค่าที่ตั้งไว้เพื่อปรับเปลี่ยนการทำงานของคำสั่งและ process โดยปกติแล้วเมื่อคุณเข้าสู่ระบบ ตัวแปรเหล่านี้จะถูกตั้งตามไฟล์กำหนดค่าเริ่มต้น
ดูตัวแปร Environment ทั้งหมด
หากต้องการดูตัวแปร Environment ที่ตั้งไว้ในเซสชันนี้ สามารถใช้คำสั่ง env
env
คำสั่งนี้จะแสดงรายการตัวแปรทั้งหมด ดูตัวแปรที่ชื่อ PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ตัวแปร PATH เป็นรายการของไดเรกทอรีที่ใช้ในการค้นหาโปรแกรมหรือสคริปต์
การดูค่าของตัวแปร
ค่าของ environment variable สามารถดึงมาใช้ได้โดยใส่เครื่องหมาย $ นำหน้าชื่อตัวแปร การทำแบบนี้จะทำให้ระบบแสดงค่าของตัวแปรที่เรียกใช้ออกมา
ตัวอย่างเช่น ถ้าต้องการดูค่าของตัวแปร PATH สามารถใช้คำสั่ง echo ดังนี้
echo $PATH
หรือใช้ตัวแปร HOME ซึ่งกำหนดเป็นไดเรกทอรีหลักของผู้ใช้โดยค่าเริ่มต้น เพื่อกลับไปที่ไดเรกทอรีของผู้ใช้แบบนี้
cd $HOME
หากพยายามเรียกใช้ environment variable ที่ยังไม่ได้ถูกตั้งค่า มันจะถูกแสดงเป็นค่าว่าง หรือเป็นสตริงเปล่า ๆ
การตั้งค่า Environment Variable
เมื่อรู้วิธีดูค่า environment variable แล้ว เรามาดูวิธีการตั้งค่าตัวแปรเหล่านี้กัน
ในการตั้งค่า environment variable ให้เริ่มด้วยชื่อของตัวแปร ตามด้วยเครื่องหมาย = และตามด้วยค่าที่ต้องการตั้งให้กับตัวแปรนั้น
VAR=value
โปรดสังเกตว่า หากตั้งค่าตัวแปรที่มีอยู่แล้ว ค่าที่ตั้งไว้เดิมจะถูกเขียนทับ หากตัวแปรยังไม่เคยถูกตั้งค่ามาก่อน ตัวแปรนั้นจะถูกสร้างขึ้นมาใหม่ Bash มีคำสั่ง export ซึ่งจะทำการส่งออก (export) ตัวแปร เพื่อให้ตัวแปรนี้ถูกใช้งานได้ใน process ที่เกิดจากเซสชันนี้ คำสั่งนี้มีประโยชน์เมื่อคุณต้องการให้สคริปต์ที่อ้างอิงถึงตัวแปรที่ export ไว้สามารถเข้าถึงได้
สามารถใช้ตัวแปรที่มีอยู่แล้วเมื่อตั้งค่าตัวแปรใหม่ได้ด้วย เช่น หากคุณติดตั้งแอปพลิเคชันไว้ที่ /opt/app/bin และต้องการเพิ่มเส้นทางนี้ในตัวแปร PATH ให้ใช้คำสั่งดังนี้
export PATH=$PATH:/opt/app/bin
หลังจากนั้น ลองตรวจสอบดูว่า /opt/app/bin ถูกเพิ่มเข้าไปในท้ายของตัวแปร PATH โดยใช้คำสั่ง echo
echo $PATH
โปรดจำไว้ว่า การตั้งค่า environment variable ในวิธีนี้จะมีผลแค่ในเซสชันปัจจุบันเท่านั้น ซึ่งหมายความว่าถ้าคุณออกจากระบบ หรือเปลี่ยนไปใช้เซสชันใหม่ การเปลี่ยนแปลงตัวแปรที่ทำไว้จะไม่ถูกเก็บไว้