Introduction to UNIX
เมื่อก่อนเคยเขียนบทความเกี่ยวกับ Linux Command เบื้องต้น ไปแล้ว เนื่องจากตอนนั้นกำลังหัดใช้งาน Ubuntu ใหม่ๆ ก็เลยจดบันทึกเอาไว้อ่านด้วย
มาวันนี้ทางที่ทำงานอยู่ บริษัท Nextzy Technologies มีการจัด Introduction to UNIX โดยให้ทุกคนในทีมทำการศึกษาและค้นคว้าในหัวข้อที่ตนเองได้รับ แล้วนำมาแชร์ความรู้กัน แม้แต่น้องฝึกงานหรือไม่ใช่ Dev ก็ต้องหัดใช้เหมือนกัน สำหรับบรรยากาศการแชร์ความรู้ ก็ประมาณรูปด้านล่างเลยครับ :)
จุดเริ่มต้นของการศึกษาหัวข้อ Introduction to UNIX ก็เนื่องจากว่าอยากให้ทุกคนในทีมได้รู้และใช้งาน Unix Command เบื้องต้นได้ แน่นอน Environment ในทีมจะเป็น Mac OS X ฉะนั้นในส่วนเนื้อหา อาจจะไม่ได้พูดถึง UNIX โดยตรงนะครับ
ในบทความนี้ผมพยายามจดหัวข้อต่างๆ ตามที่จำได้และได้ไปศึกษาเพิ่มเติมจากที่พี่ๆน้องๆได้นำเสนอ เพื่อมาเผยแพร่ต่อ เผื่อมีคนสนใจ หากมีส่วนไหนผิดพลาด สามารถแนะนำ ติชม มาได้ครับ
Introduction to UNIX
UNIX เป็น Operating Systems (OS) ตัวหนึ่งที่ถูกพัฒนามาตั้งแต่ช่วงปี ค.ศ. 1960 ปัจจะบัน OS หลายๆตัว ก็ถูกพัฒนาต่อยอดมาจาก UNIX แทบทั้งสิ้น ไม่ว่าจะเป็นตระกูล Linux หรือแม้แต่ Mac OS X ก็ตาม
UNIX System
ส่วนประกอบสำคัญของระบบ Unix นั้นมี 3 ส่วนหลักๆ ประกอบไปด้วย
-
Kernel : ถือเป็นหัวใจของ Unix เลยก็ว่าได้ เพราะเป็นส่วนสำคัญที่ใช้สำหรับประมวลผลและเป็นส่วนที่ไว้เชื่อมต่อการทำงานส่วนต่างๆของ Computer เช่น Keyboard หรือหน้าจอ เป็นต้น
-
Shell : เป็นส่วนของ Interface เชื่อมระหว่าง User และ Kernel เพื่อรับคำสั่งจาก User เช่น เมื่อผู้ใช้งานพิมพ์คำสั่ง สำหรับ Shell สามารถเป็นได้ทั้ง
-
แบบ Command Line Interface (CLI) ตัวอย่างเช่น
- Bourne Shell (sh)
- Bourne Again Shell (bash)
- Z Shell (zsh)
-
แบบ Graphical User Interface (GUI) เช่น
- KDE
- GNOME
- Programs & Utilities : เป็นชุดคำสั่งต่างๆในระบบ UNIX เช่น ls, cp, grep, awk, sed, more เป็นต้น
Note: สำหรับบางคนที่เพิ่งหัดใช้ Linux หรือ Mac OS X เวลาล็อคอิน หรือใช้สิทธิ์ sudo แล้วมีให้ใส่ password ก็กดพิมพ์ไปได้เลยครับ เพราะ password มันจะไม่แสดง ไม่ใช่ว่าโปรแกรมมันค้าง :)
Folder Structure
สำหรับโครงสร้างของ File และ Folder ส่วนนี้ไม่ได้อ้างอิงจาก UNIX โดยตรง แต่ว่าอ้างอิงจาก Mac OS X ทำให้อาจจะแต่งกันบ้าง
Applications
: เป็นส่วนของ Application ในเครื่องLibrary
: รวม Library ต่างๆที่เราใช้งานhome
: โฟลเดอร์ของ User เช่น/home/USERNAME
bin
: ชุดคำสั่งต่างๆ ที่ใช้ในเครื่องdev
: Device Port เช่น CD, DVD หรือ USB
Permissions
ในระบบ Unix จะมีการแบ่งสิทธิ์การเข้าถึงไฟล์และโฟลเดอร์ต่างๆ เราเรียกว่า Permissions โดย Permission ก็จะแบ่งเป็น 3 ส่วนคือ
- READ Permission (r) : สิทธิ์ในการอ่านไฟล์หรือโฟลเดอร์
- WRITE Permission (w) : สิทธิ์ในการเขียนและแก้ไขไฟล์หรือโฟลเดอร์
- EXECUTE Permission (x) : สิทธิ์ในการสั่งรันโปรแกรม (Execute)
ซึ่งนอกเหนือจากสิทธิ์ด้านบนแล้ว ก็จะมีแบ่งเงื่อนไขออกเป็น 3 กลุ่ม ได้แก่
- User : ให้สิทธ์ในการ READ/WRITE/EXECUTE เฉพาะ User นั้นๆ
- Group : ให้สิทธิ์ในการ READ/WRITE/EXECUTE เฉพาะ Group นั้นๆ
- Other: ให้สิทธิ์สำหรับบุคคลอื่นที่ไม่ใช่ User
การนับเลข Permission เราจะใช้ r = 4 , w = 2 และ x = 1 โดยทุกๆไฟล์และโฟลเดอร์จะมี Permission แสดงคล้ายๆรูปด้านล่างนี้
- ชุดแรกมี rwx : (4 + 2 + 1 = 7) หมายถึง User นี้สามารถที่จะอ่าน แก้ไข หรือรันโปรแกรมได้
- ชุดสองมี r-x : (4 + 0 + 1 = 5) หมายถึง Group นี้สามารถที่จะอ่านและรันโปรแกรมได้ แต่ไม่สามารถแก้ไขหรือเขียนไฟล์ได้
- ชุดสามมี r-x : (4 + 0 + 1 = 5) หมายถึง Others หรือยูเซอร์อื่นๆสามารถที่จะอ่านและรันโปรแกรมได้อย่างเดียว ไม่สามารถแก้ไขหรือเขียนใหม่ได้
Basic Command
สำหรับการใช้งาน Basic Command เบื้องต้น ให้รันด้วย Terminal และมี default shell เป็นแบบ bash หลักการพิมพ์คำสั่ง Command Line จะมี syntax คือ
คำสั่งพื้นฐานอื่นๆ
ls
ls : เป็นคำสั่งที่เอาไว้ list directory content คือการแสดงรายชื่อไฟล์และโฟลเดอร์ วิธีการใช้งาน :
ls
: (list directory content) เป็นคำสั่งสำหรับแสดงไฟล์และโฟลเดอร์-l
: เป็น option เพื่อแสดงแบบ Long format
cd
cd : change directory เอาไว้สำหรับเปลี่ยน directory (folder) โดยระบุ path ปลายทางที่ต้องการ วิธีการใช้งาน :
ตัวอย่าง เช่น
pwd
pwd (Print Working Directory) : เอาไว้สำหรับแสดง path ที่อยู่ปัจจะบัน เช่น
man
man : เอาไว้สำหรับเรียกดู Manual หรือคู่มือต่างๆของคำสั่งที่เราต้องการ เช่น
touch
touch : เปลี่ยน timestamp ของไฟล์ หรือเป็นการสร้างไฟล์ใหม่ เช่น
mkdir
mkdir (Make Directories) : เอาไว้สำหรับสร้าง Folder เช่น
rmdir
rmdir (Remove Empty Directory) : คำสั่งที่เอาไว้ลบโฟลเดอร์ เฉพาะโฟลเดอร์ที่ว่างอยู่เท่านั้น เช่น
rm
rm (Remove File or Directories) : เอาไว้ลบได้ทั้งไฟล์ หรือว่าโฟลเดอร์ เช่น
cp
cp (Copy File and Directories) : เอาไว้สำหรับ copy ไฟล์หรือโฟลเดอร์ เช่น
mv
mv (Move file) : เอาไว้สำหรับทำการย้ายไฟล์หรือโฟลเดอร์ ไปยัง directory ที่ต้องการ
cat
cat : เอาไว้สำหรับแสดงเนื้อหาของไฟล์นั้นๆ ผ่านหน้าจอ command line
more
more : เอาไว้แสดงเนื้อหาของไฟล์นั้นๆ โดยสามารถที่จะ scroll ขึ้น ลง หรือว่าค้นหาคำต่างๆ ในไฟล์ได้
ในขณะที่อยู่โหมด more
เราสามารถที่จะ scroll ขึ้น/ลง ได้ด้วยปุ่มลูกศร หรือใช้ j
และ k
ก็ได้ รวมถึงสามารถที่จะค้นหาคำ ด้วยการพิมพ์ /
แล้วตามด้วยคำที่ต้องการค้นหา หากคำที่ค้นหามีมากกว่า 1 ก็กด n
เพื่อกระโดดไปคำที่สอง สุดท้ายหากต้องการออกจากโหมด more
ก็กดปุ่ม q
less
less : เหมือนกับ more เป็นคำสั่งที่เพิ่มความสามารถจาก more
การใช้งานก็แทบเหมือนกันเลย
head
head : เอาไว้แสดงส่วนเริ่มต้นของไฟล์ เช่น ไฟล์ที่จำนวนเป็น ร้อยๆบรรทัด โดย default จะแสดง 10 บรรทัดแรกของไฟล์
tail
tail : ตรงข้ามกับ head คือเอาไว้แสดงส่วนท้ายของไฟล์ default จะแสดง 10 บรรทัดสุดท้ายของไฟล์ โดยจุดเด่นของ tail โดยมากจะเอาไว้สำหรับดู log ไฟล์ต่างๆ
Part 1 ขอจบเพียงเท่านี้ก่อนนะครับ Part 2 จะมาต่อเรื่อง Pipe (|) , find, wc, sort, grep, chmod, chown กันครับ
Additional Resources
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust