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
├── Library
├── Network
├── System
├── Users
├── Volumes
├── bin
├── cores
├── data
├── dev
├── etc -> private/etc
├── home
├── net
├── private
├── sbin
├── tmp -> private/tmp
├── usr
└── var -> private/var
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 คือ
[commands] [options] [name]
คำสั่งพื้นฐานอื่นๆ
ls
ls : เป็นคำสั่งที่เอาไว้ list directory content คือการแสดงรายชื่อไฟล์และโฟลเดอร์ วิธีการใช้งาน :
ls -l
ls
: (list directory content) เป็นคำสั่งสำหรับแสดงไฟล์และโฟลเดอร์-l
: เป็น option เพื่อแสดงแบบ Long format
cd
cd : change directory เอาไว้สำหรับเปลี่ยน directory (folder) โดยระบุ path ปลายทางที่ต้องการ วิธีการใช้งาน :
cd PATH/TO/FOLDER
ตัวอย่าง เช่น
cd ~ # ไปที่โฟลเดอร์ home
cd .. # กลับไปโฟลเดอร์ก่อนหน้า (parent)
cd ../.. # กลับไปโฟลเดอร์ก่อนหน้า 2 ลำดับ
cd / # ไปที่โฟลเดอร์ของ system
pwd
pwd (Print Working Directory) : เอาไว้สำหรับแสดง path ที่อยู่ปัจจะบัน เช่น
pwd
/Users/phonbopit # output
man
man : เอาไว้สำหรับเรียกดู Manual หรือคู่มือต่างๆของคำสั่งที่เราต้องการ เช่น
man pwd # ดูว่า pwd มันใช้ยังไง
man ls # ดูว่า ls ใช้ยังไง และมี options อะไรบ้าง
touch
touch : เปลี่ยน timestamp ของไฟล์ หรือเป็นการสร้างไฟล์ใหม่ เช่น
touch hello.txt # สร้างไฟล์ใหม่ชื่อ hello.txt
mkdir
mkdir (Make Directories) : เอาไว้สำหรับสร้าง Folder เช่น
mkdir folder1 # สร้างโฟลเดอร์ชื่อ folder1
mkdir folder2 -v # สร้างโฟลเดอร์พร้อม Print ผลลัพธ์
rmdir
rmdir (Remove Empty Directory) : คำสั่งที่เอาไว้ลบโฟลเดอร์ เฉพาะโฟลเดอร์ที่ว่างอยู่เท่านั้น เช่น
rmdir folder1
rmder folder2
rm
rm (Remove File or Directories) : เอาไว้ลบได้ทั้งไฟล์ หรือว่าโฟลเดอร์ เช่น
rm file.txt # ลบไฟล์ชื่อ file.txt
rm folder1 # ลบโฟลเดอร์เปล่าๆชื่อ folder1
rm -r # ลบโฟลเดอร์พร้อมไฟล์ข้างใน ( -r คือ recursive)
cp
cp (Copy File and Directories) : เอาไว้สำหรับ copy ไฟล์หรือโฟลเดอร์ เช่น
cp FILEต้นทาง FILEปลายทาง
cp path/to/file path/to/destination
cp text.txt /Desktop/text2.txt # copy ไฟล์ text.txt ไปที่ /Desktop ในชื่อ text2.txt
cp -rf folder1 path/to/folder1 # copy ทั้งโฟลเดอร์
mv
mv (Move file) : เอาไว้สำหรับทำการย้ายไฟล์หรือโฟลเดอร์ ไปยัง directory ที่ต้องการ
mv FILEต้นทาง FILEปลายทาง
mv folder1 ~/Desktop/folder1 # ย้ายโฟลเดอร์ folder1 ไปยัง desktop`
cat
cat : เอาไว้สำหรับแสดงเนื้อหาของไฟล์นั้นๆ ผ่านหน้าจอ command line
cat index.html # print เนื้อหาทั้งหมดในไฟล์ index.html
cat -n index.html # print เนื้อหา พร้อมแสดงเลขบรรทัด
more
more : เอาไว้แสดงเนื้อหาของไฟล์นั้นๆ โดยสามารถที่จะ scroll ขึ้น ลง หรือว่าค้นหาคำต่างๆ ในไฟล์ได้
more index.html # แสดงเนื้อหาของ index.html โดยสามารถ scroll ขึ้น/ลง หรือค้นหาคำได้
ในขณะที่อยู่โหมด more
เราสามารถที่จะ scroll ขึ้น/ลง ได้ด้วยปุ่มลูกศร หรือใช้ j
และ k
ก็ได้ รวมถึงสามารถที่จะค้นหาคำ ด้วยการพิมพ์ /
แล้วตามด้วยคำที่ต้องการค้นหา หากคำที่ค้นหามีมากกว่า 1 ก็กด n
เพื่อกระโดดไปคำที่สอง สุดท้ายหากต้องการออกจากโหมด more
ก็กดปุ่ม q
less
less : เหมือนกับ more เป็นคำสั่งที่เพิ่มความสามารถจาก more
การใช้งานก็แทบเหมือนกันเลย
less index.html
head
head : เอาไว้แสดงส่วนเริ่มต้นของไฟล์ เช่น ไฟล์ที่จำนวนเป็น ร้อยๆบรรทัด โดย default จะแสดง 10 บรรทัดแรกของไฟล์
head index.html # แสดงเนื้อหา 10 บรรทัดแรกของไฟล์
head -20 index.html # ใส่ออปชั่น เพื่อบอกว่า แสดง 20 บรรทัดแรก
tail
tail : ตรงข้ามกับ head คือเอาไว้แสดงส่วนท้ายของไฟล์ default จะแสดง 10 บรรทัดสุดท้ายของไฟล์ โดยจุดเด่นของ tail โดยมากจะเอาไว้สำหรับดู log ไฟล์ต่างๆ
tail index.html # แสดงเนื้อหา 10 บรรทัดสุดท้ายของไฟล์
tail -5 index.html # แสดงเนื้อหา 5 บรรทัดสุดท้ายของไฟล์
tail -f app.log # แสดงเนื้อหา 10 บรรทัดสุดท้ายของไฟล์ โดยไม่ต้องหยุดทำงาน (เหมาะสำหรับดู log)
Part 1 ขอจบเพียงเท่านี้ก่อนนะครับ Part 2 จะมาต่อเรื่อง Pipe (|) , find, wc, sort, grep, chmod, chown กันครับ
Additional Resources
- Authors
- Name
- Chai Phonbopit
- Website
- @Phonbopit