หากใครได้ลองสร้างเว็บขึ้นมาสักอันนึงก็คงจะหลีกไม่พ้นการใช้งานหน้าต่าง Terminal และหากได้ลอง deploy เว็บไซต์ ถ้าไม่ได้ใช้บริการในส่วนของ PaaS ในยุคนี้ก็น่าจะต้องไปเช่า VPS มาใช้ซึ่งก็คงหลีกเลี่ยงไม่ได้เลยที่จะได้ลองใช้ linux หรือไม่ว่าจะเป็นด้าน Embeded อย่างบอร์ด raspberry pi หากคุณใช้ rasbian ถึงจะมี gui มาให้แต่หากทำการ ssh เข้าไปก็จำเป็นต้องมีความรู้พื้นฐานเช่นกัน สำหรับในบล็อคนี้ ชื่อจะเน้นไปที่ linux แต่อาจจะมีการเปรียบเทียบให้ดูบ้างใน windows เพื่อให้เห็นภาพ(ส่วนตัวผู้เขียนใช้ windows)
ในสำหรับ ep นี้เราจะมาเรียนรู้การใช้งานพื้นฐานการจัดการไฟล์ path ต่างๆอ่านแล้วยัง งงๆ ลองนึกถึง File Explorer ที่เราใช้งานใน Windows กันทุกวัน(ถ้าคุณไม่ได้ใช้ linux หรือ Mac นะ)
ที่เราเห็นก็จะเป็นโปรแกรมแบบ gui มี ui ต่างๆให้ใช้งานได้อย่างสะดวก Command Line ก็มีหน้าที่ต่างๆแนวๆนี้เช่นกันแค่เปลี่ยนจากการลากคลิ้ก เป็นการใช้คีย์บอร์ดในการพิมคำสั่งต่างๆแทนเช่นหากคุณต้องการเปิดอ่าน file1.txt คุณกดดับเบิ้ลคลิ้ก โปรแกรม notepad.exe ซึ่งเป็น default ก็จะเป็นแสดงผล file1.txt ขึ้นมาให้คุณ แต่หากคุณใช้เป็น command line ก็จะต้องใช้เป็น
notepad.exe file1.txt
ซึ่งจะหมายถึงเรียกใช้ notepad.exe กับไฟล์ file1.txt (ในที่นี้ notepad.exe ถึงแม้จะไม่ได้อยู่ใน folder นี้แต่มีการ set path ในระบบไว้แล้ว ให้ลองนึกถึงตอนพิม python ใน terminal ที่ไหนก็ตามก็จะขึ้น python shell มาให้เพราะระบบจะไปหา path ของ python นั่นเอง)
ลองเรียกดู path ของ python,notepad ด้วยคำสั่ง Get-command ใน Powershell
Shell Terminal Bash ?
หน้าต่างที่เราพิมพ์ข้อความลงไปจะเรียกว่า terminal (รูปด้านบน) ส่วนตัว process ข้อความเราจะเรียกว่า Shell Scripting Language ซึ่งมีได้หลายตัวเช่น zsh fish bash ส่วนของ window จะเป็น cmd shell หรือ powershell
สาธยายมาเยอะแล้ว มาลองดูคำสั่งกันเลย!
แสดง path ปัจจุบันที่เราอยู่
ว่าแต่เราจะใช้มันไปทำไมในเมื่อมันก็มี path บอกน่าชื่ออยู่แล้วใช่ใหม? ในบางสถานการณ์อย่างการใช้ shell อื่นๆนั้นอาจจะไม่มีบอกเช่นตอนสร้าง user ไม่จะถูกเด้งไปใช้ sh shell ไปเราก็จะสามารถใช้คำสั่งนี้ได้
ข้อสังเกตุ
เมื่อคุณใช้ user ที่มีสิทธิ root ในการรันคำสั่งข้างหน้าจะมีเครื่องหมาย #ใช้สำหรับบอกถึงข้อมูลภายใน directory นั้นๆ(หากไม่ใส่อะไรตามหลังจากหมายถึง path ปัจจุบัน(ตามpwd))
ตัวพิเศษต่างๆ
ls -l แสดงแบบยาว
ls -a แสดงไฟล์ที่ซ่อนอยู่
cd-change directory
cd หรือ change directory จะเป็นการเปลี่ยน pathปัจจุบัน สามารถใส่ path ที่ต้องการจะไปได้โดยจะมีกรณีพิเศษอยู่คือหากใส่เป็น
cd .. จะหมายถึงย้อนกลับไปยัง parent directory
cd ~ จะย้อนไปยัง home directory ของ user
cd - ย้ายไป directory ก่อนหน้า (ที่เคยไปมา)
cp file1 file2 เป็นการก็อปปี้ไฟล์ต่างๆ
cp -i file1 file2 หากต้องการให้ถามก่อนทำการ overwrite สามารถใส่ -i ได้
cp file1 file2 /directory/ หากต้องการก็อบหลายๆไฟล์ไปไว้โฟลเดอร์เดียวกันก็ทำได้
rm file1 file2 เป็นการลบไฟล์นั้นๆ
หากต้องการลบ directory เราสามารถใช้เป็น
rm -r จะเป็นการลบแบบ recursive(ใช้ลบในโฟลเดอร์)
rm -f ลบแบบเกลี้ยง(จะไม่มีการถามใดๆแต่จะลบ directory ไม่ได้)
rm -i เป็นการไล่ถามแต่ละไฟล์ก่อนจะลบ
rm -v บอกรายละเอียดว่าลบอะไรไปบ้าง
สามารถเอา argumentมาผสมกันได้เช่น
rm -rf ลบเกลี้ยงหายหมดทั้งโฟลเดอร์
rm -riv ลบแบบถามทั้งโฟลเดอร์และแสดงด้วยว่าลบอะไรไปบ้าง
rm -rv ลบหมดพร้อมแสดงว่าไรไรบ้าง
เป็นการสร้างโฟลเดอร์ขึ้นมาใหม่
touch
เป็นการสร้างไฟล์ว่างๆขึ้นมาเปล่าๆเช่น
/etc/nginx/sites-enabled/
นั่นก็คือการสร้าง soft link หรือ symbolic link นั่นคือหากมีการแก้ไขค่าใน site-avaliable ค่าใน enabled ก็จะเปลี่ยนแปลงตามไปด้วยการ symlinkจะเป็นเหมือนการเชื่อมสองไฟล์เข้าด้วยกันโดยมีสองประเภทคือ
Soft link - เป็นการเชื่อมไฟล์โดยไฟล์ที่สองจะเก็บค่า path ของไฟล์แรกเมื่อไฟล์ต้นทางหายตัว soft link ก็จะสลายไปด้วยเช่นกัน(ควรระวัง)
ใช้คำสั่งเป็น ln -s source dest
Hard link - hard link จะเก็บค่า inode และมี permission แบบเดียวกันและอัพเดทกับทางต้นทาง หากต้นทางหายปลายทางก็จะยังอยู่
ใช้คำสั่งเป็น ln -l source dest
*แล้วมันต่างจาก copy ยังไง? ต่างกันตรงที่หากเรา copy ไฟล์แล้วเราอัพเดทต้นทางไฟล์เราจะต้องคอยมานั่งแก้ไขไฟล์ปลายทางเอง ซึ่งตรงนี้ symlink หากเปลี่ยนต้นฉบับ ปลายทางก็จะเปลี่ยนให้ด้วย
คุณสามารถใช้ asterisk (*)แทนการเรียกไฟล์ทั้งหมดได้เช่นหากใน directory มีสิบไฟล์คุณต้องการก็อบปี้ไฟล์ทั้งหมดก็จะใช้เป็น เรื่องนี้จะอยู่ในหัวข้อ wildcard ซึ่งจะมาเขียนต่อใน blog หน้า
cp /somepath/* /newpath/
ใช้สำหรับแสดงข้อความของไฟล์ต่างๆ
cat - แสดงผลข้อความทั้งหมดลง terminal
more - แสดงในอีกหน้าแต่จะโหลดไฟล์ทั้งหมดไว้
less - แสดงในอีกหน้าแต่จะไม่โหลดไฟล์มาทั้งหมด
man, help, info
สำหรับอธิบายคำสั่งต่างๆใน linux
sudo - super user do เปรียบเสมือนรันแบบ administrative ใน windows
| grep message - สำหรับการกรองข้อความต่างๆ
nano, vi - ตัว text editor ใน linux
รายละเอียดเพิ่มเติมนอกจากนี้ รับชมได้ที่ YouTube ของ STACKPYTHON กันได้เลยครับตามลิ้งค์ด้านล่าง
กดไลก์ แชร์ หรือคอมเมนต์ เพื่อเป็นกำลังใจกันด้วยนะครับ แล้วพบกัน Ep ถัดไปครับผม
กิจกรรมที่กำลังจะมาถึง
ไม่พลาดกิจกรรมเด็ด ๆ ที่น่าสนใจ
Event นี้จะเริ่มขึ้นใน April 25, 2023
รายละเอียดเพิ่มเติม/สมัครเข้าร่วมคอร์สเรียนไพธอนออนไลน์ที่เราได้รวบรวมและได้ย่อยจากประสบการณ์จริงและเพื่อย่นระยะเวลาในการเรียนรู้ ลองผิด ลองถูกด้วยตัวเองมาให้แล้ว เพราะเวลามีค่าเป็นอย่างยิ่ง พร้อมด้วยการซัพพอร์ตอย่างดี