Introduction
หากใครได้ลองสร้างเว็บขึ้นมาสักอันนึงก็คงจะหลีกไม่พ้นการใช้งานหน้าต่าง Terminal และหากได้ลอง deploy เว็บไซต์ ถ้าไม่ได้ใช้บริการในส่วนของ PaaS ในยุคนี้ก็น่าจะต้องไปเช่า VPS มาใช้ซึ่งก็คงหลีกเลี่ยงไม่ได้เลยที่จะได้ลองใช้ linux หรือไม่ว่าจะเป็นด้าน Embeded อย่างบอร์ด raspberry pi หากคุณใช้ rasbian ถึงจะมี gui มาให้แต่หากทำการ ssh เข้าไปก็จำเป็นต้องมีความรู้พื้นฐานเช่นกัน สำหรับในบล็อคนี้ ชื่อจะเน้นไปที่ linux แต่อาจจะมีการเปรียบเทียบให้ดูบ้างใน windows เพื่อให้เห็นภาพ(ส่วนตัวผู้เขียนใช้ windows)
GUI and Command Line
ในสำหรับ ep นี้เราจะมาเรียนรู้การใช้งานพื้นฐานการจัดการไฟล์ path ต่างๆอ่านแล้วยัง งงๆ ลองนึกถึง File Explorer ที่เราใช้งานใน Windows กันทุกวัน(ถ้าคุณไม่ได้ใช้ linux หรือ Mac นะ)
Windows File explorer
ที่เราเห็นก็จะเป็นโปรแกรมแบบ 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
หน้าต่าง terminal กับ powershell
สาธยายมาเยอะแล้ว มาลองดูคำสั่งกันเลย!
หัวข้อและคำสั่งในบทนี้
- File Navigation(cd, ls, pwd)
- File Manipulation(mv, cp, ln, rm, mkdir, touch)
- Display command(file, man, help, more, less)
******
pwd - print working directory
แสดง path ปัจจุบันที่เราอยู่
ว่าแต่เราจะใช้มันไปทำไมในเมื่อมันก็มี path บอกน่าชื่ออยู่แล้วใช่ใหม? ในบางสถานการณ์อย่างการใช้ shell อื่นๆนั้นอาจจะไม่มีบอกเช่นตอนสร้าง user ไม่จะถูกเด้งไปใช้ sh shell ไปเราก็จะสามารถใช้คำสั่งนี้ได้
จะพบว่าพอเปลี่ยน user ไป isarafx path ข้างต้นจะหายไปเนื่องจากถูกย้ายไป sh shell(bourne)
ข้อสังเกตุ
เมื่อคุณใช้ user ที่มีสิทธิ root ในการรันคำสั่งข้างหน้าจะมีเครื่องหมาย # แต่สำหรับ user ธรรมดาจะเป็นเครื่องหมาย $
ls-list directory content
ใช้สำหรับบอกถึงข้อมูลภายใน directory นั้นๆ(หากไม่ใส่อะไรตามหลังจากหมายถึง path ปัจจุบัน(ตามpwd))
ตัวพิเศษต่างๆ ls -l แสดงแบบยาว ls -a แสดงไฟล์ที่ซ่อนอยู่
cd-change directory
cd หรือ change directory จะเป็นการเปลี่ยน pathปัจจุบัน****สามารถใส่ path ที่ต้องการจะไปได้โดยจะมีกรณีพิเศษอยู่คือหากใส่เป็น
cd .. จะหมายถึงย้อนกลับไปยัง parent directory cd ~ จะย้อนไปยัง home directory ของ user cd - ย้ายไป directory ก่อนหน้า (ที่เคยไปมา)
****
mv-move
- เป็นการย้ายไฟล์หรืออาจจะใช้สำหรับการเปลี่ยนชื่อไฟล์ mv file1 file2
- หากต้องการให้ถามก่อนทำการ overwrite สามารถใส่ -i ได้ mv -i file1 file2
****
cp-copy
cp file1 file2 เป็นการก็อปปี้ไฟล์ต่างๆ
cp -i file1 file2 หากต้องการให้ถามก่อนทำการ overwrite สามารถใส่ -i ได้
cp file1 file2 /directory/ หากต้องการก็อบหลายๆไฟล์ไปไว้โฟลเดอร์เดียวกันก็ทำได้
rm-remove
rm file1 file2 เป็นการลบไฟล์นั้นๆ
หากต้องการลบ directory เราสามารถใช้เป็น
rm -r จะเป็นการลบแบบ recursive(ใช้ลบในโฟลเดอร์) rm -f ลบแบบเกลี้ยง(จะไม่มีการถามใดๆแต่จะลบ directory ไม่ได้) rm -i เป็นการไล่ถามแต่ละไฟล์ก่อนจะลบ rm -v บอกรายละเอียดว่าลบอะไรไปบ้าง
สามารถเอา argumentมาผสมกันได้เช่น rm -rf ลบเกลี้ยงหายหมดทั้งโฟลเดอร์ rm -riv ลบแบบถามทั้งโฟลเดอร์และแสดงด้วยว่าลบอะไรไปบ้าง rm -rv ลบหมดพร้อมแสดงว่าไรไรบ้าง
mkdir
เป็นการสร้างโฟลเดอร์ขึ้นมาใหม่
touch
เป็นการสร้างไฟล์ว่างๆขึ้นมาเปล่าๆเช่น
ln-การ link file แบบ soft,hard
การ link file คือการเชื่อมไฟล์สองอันเข้าหากัน หากใครเคยลองเล่น nginx ก็จะพบว่าเราจะต้องใช้คำสั่งอย่าง
ln -s /etc/nginx/site-available/site.com /etc/nginx/sites-enabled/
นั่นก็คือการสร้าง soft link หรือ symbolic link นั่นคือหากมีการแก้ไขค่าใน site-avaliable ค่าใน enabled ก็จะเปลี่ยนแปลงตามไปด้วยการ symlinkจะเป็นเหมือนการเชื่อมสองไฟล์เข้าด้วยกันโดยมีสองประเภทคือ
Soft link - เป็นการเชื่อมไฟล์โดยไฟล์ที่สองจะเก็บค่า path ของไฟล์แรกเมื่อไฟล์ต้นทางหายตัว soft link ก็จะสลายไปด้วยเช่นกัน(ควรระวัง)``ใช้คำสั่งเป็น ln -s source destHard link - hard link จะเก็บค่า inode และมี permission แบบเดียวกันและอัพเดทกับทางต้นทาง หากต้นทางหายปลายทางก็จะ``ยังอยู่``ใช้คำสั่งเป็น ln -l source dest
``
*แล้วมันต่างจาก copy ยังไง? ต่างกันตรงที่หากเรา copy ไฟล์แล้วเราอัพเดทต้นทางไฟล์เราจะต้องคอยมานั่งแก้ไขไฟล์ปลายทางเอง ซึ่งตรงนี้ symlink หากเปลี่ยนต้นฉบับ ปลายทางก็จะเปลี่ยนให้ด้วย
``
เกร็ดเล็กๆน้อยๆ
คุณสามารถใช้ asterisk (*)แทนการเรียกไฟล์ทั้งหมดได้เช่นหากใน directory มีสิบไฟล์คุณต้องการก็อบปี้ไฟล์ทั้งหมดก็จะใช้เป็น เรื่องนี้จะอยู่ในหัวข้อ wildcard ซึ่งจะมาเขียนต่อใน blog หน้า
cp /somepath/* /newpath/
cat, more, less
ใช้สำหรับแสดงข้อความของไฟล์ต่างๆ cat - แสดงผลข้อความทั้งหมดลง terminal more - แสดงในอีกหน้าแต่จะโหลดไฟล์ทั้งหมดไว้ less - แสดงในอีกหน้าแต่จะไม่โหลดไฟล์มาทั้งหมด
man, help, info
สำหรับอธิบายคำสั่งต่างๆใน linux
worth mentioning
มีบางตัวที่อาจจะกลับมาอธิบายให้ละเอียดในภายหลังนั่นคือ
sudo - super user do เปรียบเสมือนรันแบบ administrative ใน windows | grep message - สำหรับการกรองข้อความต่างๆ nano, vi - ตัว text editor ใน linux
รายละเอียดเพิ่มเติมนอกจากนี้ รับชมได้ที่ YouTube ของ STACKPYTHON กันได้เลยครับตามลิ้งค์ด้านล่าง
กดไลก์ แชร์ หรือคอมเมนต์ เพื่อเป็นกำลังใจกันด้วยนะครับ แล้วพบกัน Ep ถัดไปครับผม
