Introduction to UNIX

Introduction to UNIX Cover Image

เมื่อก่อนเคยเขียนบทความเกี่ยวกับ Linux Command เบื้องต้น ไปแล้ว เนื่องจากตอนนั้นกำลังหัดใช้งาน Ubuntu ใหม่ๆ ก็เลยจดบันทึกเอาไว้อ่านด้วย

มาวันนี้ทางที่ทำงานอยู่ บริษัท Nextzy Technologies มีการจัด Introduction to UNIX โดยให้ทุกคนในทีมทำการศึกษาและค้นคว้าในหัวข้อที่ตนเองได้รับ แล้วนำมาแชร์ความรู้กัน แม้แต่น้องฝึกงานหรือไม่ใช่ Dev ก็ต้องหัดใช้เหมือนกัน สำหรับบรรยากาศการแชร์ความรู้ ก็ประมาณรูปด้านล่างเลยครับ :)

Intro to UNIX

จุดเริ่มต้นของการศึกษาหัวข้อ Introduction to UNIX ก็เนื่องจากว่าอยากให้ทุกคนในทีมได้รู้และใช้งาน Unix Command เบื้องต้นได้ แน่นอน Environment ในทีมจะเป็น Mac OS X ฉะนั้นในส่วนเนื้อหา อาจจะไม่ได้พูดถึง UNIX โดยตรงนะครับ

ในบทความนี้ผมพยายามจดหัวข้อต่างๆ ตามที่จำได้และได้ไปศึกษาเพิ่มเติมจากที่พี่ๆน้องๆได้นำเสนอ เพื่อมาเผยแพร่ต่อ เผื่อมีคนสนใจ หากมีส่วนไหนผิดพลาด สามารถแนะนำ ติชม มาได้ครับ

Introduction to UNIX

UNIX เป็น Operating Systems (OS) ตัวหนึ่งที่ถูกพัฒนามาตั้งแต่ช่วงปี ค.ศ. 1960 ปัจจะบัน OS หลายๆตัว ก็ถูกพัฒนาต่อยอดมาจาก UNIX แทบทั้งสิ้น ไม่ว่าจะเป็นตระกูล Linux หรือแม้แต่ Mac OS X ก็ตาม

Linux Distro

UNIX System

ส่วนประกอบสำคัญของระบบ Unix นั้นมี 3 ส่วนหลักๆ ประกอบไปด้วย

  1. Kernel : ถือเป็นหัวใจของ Unix เลยก็ว่าได้ เพราะเป็นส่วนสำคัญที่ใช้สำหรับประมวลผลและเป็นส่วนที่ไว้เชื่อมต่อการทำงานส่วนต่างๆของ Computer เช่น Keyboard หรือหน้าจอ เป็นต้น

  2. 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
  1. 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 ส่วนคือ

  1. READ Permission ® : สิทธิ์ในการอ่านไฟล์หรือโฟลเดอร์
  2. WRITE Permission (w) : สิทธิ์ในการเขียนและแก้ไขไฟล์หรือโฟลเดอร์
  3. EXECUTE Permission (x) : สิทธิ์ในการสั่งรันโปรแกรม (Execute)

ซึ่งนอกเหนือจากสิทธิ์ด้านบนแล้ว ก็จะมีแบ่งเงื่อนไขออกเป็น 3 กลุ่ม ได้แก่

  1. User : ให้สิทธ์ในการ READ/WRITE/EXECUTE เฉพาะ User นั้นๆ
  2. Group : ให้สิทธิ์ในการ READ/WRITE/EXECUTE เฉพาะ Group นั้นๆ
  3. Other: ให้สิทธิ์สำหรับบุคคลอื่นที่ไม่ใช่ User

การนับเลข Permission เราจะใช้ r = 4 , w = 2 และ x = 1 โดยทุกๆไฟล์และโฟลเดอร์จะมี Permission แสดงคล้ายๆรูปด้านล่างนี้

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

Chai Chai Phonbopit : Software Engineer @Nextzy • ผู้ชายธรรมดาๆ ที่ชื่นชอบ Android, JavaScript (Node.js) และ Open Source มีงานอดิเรกเป็น Acoustic Guitar และ Football

บทความล่าสุด