มาฝึก Linux command กันเถอะ 👨‍💻
Tags: linux, katakoda, tutorial
Published: 2022-02-18 16:20:14

สำหรับการเรียน Kakkai Pre-academy by Jumpbox ครั้งที่ 6 นั้น อาจารย์โจ้ต้องการปูพื้น Basic Linux ให้ทุกคนได้เข้าใจ ก่อนอื่นเรามารู้จัก [Linux ](https://en.wikipedia.org/wiki/Linux) กันก่อนดีกว่า ว่าคืออะไรกันแน่ ???

> **Linux** คือ ระบบปฏิบัติการ ([Operating System](https://en.wikipedia.org/wiki/Operating_system) หรือ OS) ที่เปิดให้ทุกคนสามารถใช้ได้ฟรี (open source) ช่วยให้เราสามารถควบคุมและจัดการอุปกรณ์ฮาร์ดแวร์ต่างๆภายในเครื่องคอมพิวเตอร์ ไม่ว่าจะเป็น CPU, RAM, หรือ storage ผ่านซอฟต์แวร์หรือชุดคำสั่ง (Command)

ซึ่งในส่วนของ [command](https://en.wikipedia.org/wiki/Command_(computing))นี้ จะทำหน้าที่ในการรับคำสั่งผ่าน [command line interface](https://en.wikipedia.org/wiki/Command-line_interface) ยกตัวอย่าง เช่น [shell](https://en.wikipedia.org/wiki/Shell_(computing)) เพื่อสั่งการให้ระบบปฏิบัติการทำงานต่อไป

นี่คือตัวอย่างการรับคำสั่งผ่านสิ่งที่เรียกว่า command line interface ผ่านระบบปฏิบัติการ Window (รูปที่ 1) และ Linux (รูปที่ 2)

รูปที่ 1 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y6em8yxqsvjt6evu1eqq.png)

รูปที่ 2
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/da8wvyfjn67ys6og8ajh.jpg)

> ก่อนที่เราจะเข้าสู่การใช้งาน Linux โดยใช้ command line ข้างต้น จริง ๆ Linux นั้นมีสิ่งที่สำคัญที่เรียกว่า เป็นหัวใจสำหรับการทำงานของระบบ ที่มีส่วนทำให้เกิดการ interactive กับระบบ และส่งผลต่อการจัดการ หรือควบคุมฮาร์ดแวร์ภายใต้ระบบปฏิบัติการ ส่วนนั้นเรียกว่า **"File system"**

**หัวใจของ Linux**
เมื่อพูดถึง File system บน Linux ให้นึกถึงโครงสร้างของบริษัท ที่เป็นแบบ structure organization ตำแหน่งบนสุดนี้คือ Root Directory สัญลักษณ์อ้างอิงในระบบคือ `/` (เครื่องหมายสแลช) ถัดมาเป็น Directory ย่อยๆ


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g8q6rrferpxc8vtpx3o0.png)

เมื่อพูดถึงใน DOS และ Windows ระบบมีการเก็บ Directory ลงบนหลายๆ Partition ได้ ซึ่ง Partition ก็คือไดร์ฟที่เราเรียกกัน เช่น c:\ (Root ของไดร์ฟ C) และถ้ามี d:\ (Root ของไดร์ฟ D) ซึ่งแปลว่าในระบบ Dos/Windows มี Root ได้มากกว่า 1

> แต่ลินุกไม่ได้เก็บแบบนั้น เพราะมันยอมให้มี Root ได้เพียงที่เดียวเท่านั้น ส่วน Partition อื่น หรืออุปกรณ์ต่อพ่วงอื่นๆ ที่จะนำมาใช้งานก็ต้องทำการ Mount เข้าระบบไปก่อน จึงจะสามารถใช้งานได้ ในการอ้างถึงแบบ Directory แทน

คราวนี้ เรามาดูประโยชน์ของ Directory สำคัญต่าง ๆ ที่มีเบื้องต้น ตั้งแต่เริ่มมีการติดตั้ง OS

- `/bin` และ `/usr/bin` — ใช้สำหรับเก็บ user command
- `/boot` — เป็นที่อยู่ของไฟล์ทั้งหมดที่ใช้ในการ boot เครื่อง
- `/dev` — เป็นที่อยู่ของไฟล์ที่ใช้ในการเข้าถึงฮาร์ดแวร์
- `/etc` — เป็นที่อยู่ของไฟล์ที่ใช้กำหนดค่าต่างๆ (Configuration files)
- `/home` — เป็นที่อยู่ของไฟล์และ directory ที่เราต้องการจัดเก็บข้อมูล เช่น Documents, Videos, Music etc.
- `/root` — เป็น home directory ของบัญชีผู้ใช้ที่เป็น superuser
- `/run` — เป็นที่อยู่ของข้อมูลที่เกี่ยวกับการบูท
- `/sbin` และ `/usr/sbin` — ใช้สำหรับเก็บ system command
- `/tmp` — ใช้สำหรับเก็บไฟล์แบบชั่วคราว ไฟล์ที่มีอายุเกิน 10 วัน จะถูกลบโดยอัตโนมัติ
- `/var` — เป็นที่อยู่ของไฟล์และ directory ที่มีการเปลี่ยนแปลงอยู่เสมอ เช่น databases, log files, mails, cache directories, Web data etc.

ดังนั้น จากข้อมูลข้างต้น เราจะเห็นแล้วว่า File system เป็นหัวใจของการทำงานทั้งหมดในระบบปฏิบัติการ ในกรณีที่ File มีขนาดโตขึ้นมาก เกินกว่าระบบจะรองรับได้ นั่นก็มีส่วนที่จะทำให้ฮาร์ดแวร์ไม่สามารถรองรับการทำงานได้ไหว หรือมีประสิทธิภาพเช่นกัน

จาก File system เรามาพูดถึง command line หรือชุดคำสั่งพื้นฐานที่เป็นประโยชน์ต่อการใช้งานในระบบปฏิบัติการ Linux กันบ้างดีกว่า สิ่งนี้เพื่อช่วยให้มือใหม่เข้าใจวิธีการในการส่งคำสั่งต่อระบบอย่างดียิ่งขึ้นอีกด้วย

**คำสั่งพื้นฐานที่พบบ่อยในการใช้งาน**

- `man` (manual) — ใช้สำหรับแสดงคู่มือการใช้งานของแต่ละคำสั่ง

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/24vyivo3ito3pknoaa9i.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rbwy1zzovfzx2l1hdpkw.png) 

- `pwd` (print directory) — ใช้สำหรับแสดงที่อยู่ปัจจุบันว่า ตอนนี้เรากำลังอยู่ภายใต้ directory ไหนของระบบ

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wxh8uyyky4eqqrqjh560.png)

ตอนนี้ เราอยู่ภายใต้ root directory 

- `ls` (listing) — ใช้สำหรับแสดงไฟล์และ directory ทั้งหมด ที่อยู่ใน directory ปัจจุบัน

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ahskn104hepq3dbvqvnm.png)

จากภายใต้ root directory จะเห็นได้ว่ามีไฟล์ `original-ks.cfg` ปรากฎอยู่

- `cd` (Change Directory) - ใช้สำหรับเปลี่ยนที่อยู่จาก directory ปัจจุบัน ไปยัง directory ที่ต้องการได้ ซึ่งตัว directory นี้จะมี parameter เบื้องต้นดังต่อไปนี้

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gu8g5n1n2dcy0he6780u.png)

จะเห็นได้ว่า เรากำลัง change directory ไปที่ `/var/log` 

`cd .` ซึ่ง `.` ในที่นี้หมายถึง directory ปัจจุบัน

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jm5mlckxvnmkgrwet7xc.png)

เมื่อลองรัน `cd .` เราจะยังอยู่ที่ `/var/log` ดังเดิม 

`cd ..` ซึ่ง `..` ในที่นี้หมายถึง directory ก่อนหน้า ของ directory ปัจจุบัน ซึ่งเป็นการถอย directory ลงไปอีกหนึ่งลำดับขั้น

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nv0iuzhgilfkjylcpcyz.png)

เมื่อเรารัน `cd ..` นั่นคือเป็นการถอยจาก `/var/log` ไปหนึ่งขั้น เราจะอยู่ที่ `/var` ณ ปัจจุบัน 

`cd ~` ซึ่ง `~` ในที่นี้หมายถึง /home/<user> เพราะฉะนั้นไม่ว่าตอนนี้เราจะอยู่ใน directory ไหนก็ตาม พอรันคำสั่งนี้ มันจะกลับไปที่ Home ของ user

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gryh7t3fo2vpow58mx2.png)

ตอนนี้ เรากลับไปที่ home ของ root directory เรียบร้อยแล้ว 

`cd /` ซึ่ง `/` ในที่นี้หมายถึง root directory นั่นหมายถึงการ change ไปยัง root directory นั่นเอง

- `mkdir <file_name>` (make directory) — ใช้ในการสร้าง directory ใหม่

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/akkq1bkxhd5xbj5hzbo5.png)

เราจะเห็นว่า จากตอนแรกภายใต้ root directory จะมีเพียงไฟล์หนึ่งไฟล์เมื่อทำการ make directory เราจะเห็น folder ใหม่เกิดขึ้นชื่อว่า "test" 

- `cat <file_name>` - ใช้เปิดดู detail ของ file นั้น ๆ ดังตัวอย่างด้านล่าง

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6p030apmkh6kyjao0yfi.png) 

> ส่วนที่เหลือสามารถศึกษาต่อได้จาก [UNIX command Tutorial](https://www.tutorialspoint.com/unix/unix-useful-commands.htm)

**Reference:**

- Slide ของ KubeSuperOps — Linux for Container Practitioner
- https://www.tutorialspoint.com/unix/unix-useful-commands.htm