# Basic Linux Commands (พื้นฐานคำสั่งลินุกซ์) ระบบปฏิบัติการที่เหมาะสมที่สุดสำหรับการใช้งาน **ROS2** คือ **Ubuntu** (ซึ่งเป็น Linux Distribution หนึ่ง) โดยการสั่งงานส่วนใหญ่จะกระทำผ่านหน้าต่างดำๆ ที่เรียกว่า **Terminal** ในบทนี้ เราจะเรียนรู้คำสั่งพื้นฐานที่จำเป็นสำหรับนักพัฒนาหุ่นยนต์ ตั้งแต่การจัดการไฟล์ไปจนถึงการตรวจสอบสถานะของระบบ ## File System Structure (โครงสร้างไฟล์) ก่อนเริ่มพิมพ์คำสั่ง จำเป็นต้องเข้าใจโครงสร้างการเก็บไฟล์ของ Linux ซึ่งแตกต่างจาก Windows เล็กน้อย * **Root Directory (`/`):** เปรียบเสมือนรากแก้วของต้นไม้ หรือ `C:\` ใน Windows ไฟล์ทุกอย่างในระบบจะอยู่ภายใต้เครื่องหมาย `/` นี้ * **Home Directory (`~`):** คือพื้นที่ส่วนตัวของผู้ใช้งาน (User) ปกติจะอยู่ที่ `/home/username` เครื่องหมาย `~` (Tilde) คือทางลัดที่ใช้แทนตำแหน่งนี้ ```{image} images/c2/2.1.png :width: 50% :align: center ``` ## Navigation (การนำทาง) การทำงานใน Terminal เปรียบเสมือนการเดินเข้าไปในห้องต่างๆ ของบ้าน เราต้องรู้ว่า "ตอนนี้อยู่ที่ไหน" และ "จะไปที่ไหน" ### คำสั่งพื้นฐาน 1. **`pwd` (Print Working Directory):** ถามว่า "ตอนนี้ฉันอยู่ที่ไหน?" 2. **`ls` (List):** ดูว่า "ในห้องนี้มีของอะไรบ้าง?" 3. **`cd` (Change Directory):** เดินไปยังห้องอื่น **ตัวอย่างการใช้งาน** ```{code-block} bash # 1. Check current location pwd # Output: /home/batly ``` ```{image} images/c2/2.2.1.1.png :width: 70% :align: center ``` ```{code-block} bash # 2. List files in the current folder ls ``` ```{image} images/c2/2.2.1.2.png :width: 100% :align: center ``` ```{code-block} bash # 3. Go into 'Downloads' folder cd Downloads ``` ```{image} images/c2/2.2.1.3.png :width: 70% :align: center ``` ```{code-block} bash # 4. Go back to the previous folder (Parent directory) cd .. ``` ```{image} images/c2/2.2.1.4.png :width: 70% :align: center ``` ```{code-block} bash # 5. Go back to Home directly cd ~ ``` ```{image} images/c2/2.2.1.5.png :width: 70% :align: center ``` ### Absolute vs Relative Path การระบุตำแหน่งไฟล์ทำได้ 2 วิธี: * **Absolute Path (อ้างอิงจากราก):** ระบุเต็มยศ เริ่มต้นด้วย `/` เสมอ * เช่น `/home/batly/robot_ws/src` (ชัดเจน ไม่หลง) * **Relative Path (อ้างอิงจากจุดปัจจุบัน):** ไม่ขึ้นต้นด้วย `/` * เช่น `src/my_code.py` (หมายถึงไฟล์ที่อยู่ในโฟลเดอร์ src ตรงหน้าเราตอนนี้) ## File Management (การจัดการไฟล์และโฟลเดอร์) คำสั่งสำหรับการสร้าง คัดลอก ย้าย และลบไฟล์ เป็นทักษะที่ต้องใช้งานตลอดเวลา ```{list-table} :widths: 20 30 50 :header-rows: 1 * - Command - Action - Example * - `mkdir` - Make Directory - `mkdir robot_ws` (สร้างโฟลเดอร์ใหม่) * - `touch` - Create empty file - `touch test.py` (สร้างไฟล์เปล่า) * - `cp` - Copy - `cp file1.txt file2.txt` (สำเนาไฟล์) * - `mv` - Move / Rename - `mv file1.txt folder/` (ย้าย) หรือ `mv old.txt new.txt` (เปลี่ยนชื่อ) * - `rm` - Remove file - `rm test.py` (ลบไฟล์ *กู้คืนไม่ได้*) * - `rm -r` - Remove folder - `rm -r my_folder` (ลบโฟลเดอร์และของข้างในทั้งหมด) ``` ```{warning} **ระวัง:** คำสั่ง `rm` (Remove) ใน Linux ไม่มีการถามยืนยันและไม่มีถังขยะ (Recycle Bin) ไฟล์ที่ลบแล้วจะหายไปทันที ``` ## Text Editors (การแก้ไขไฟล์ข้อความ) เมื่อต้องการเขียนโค้ดหรือแก้ไขไฟล์ Config เราต้องเรียกใช้โปรแกรมแก้ไขข้อความ (Text Editor) ซึ่งมี 2 แบบหลักๆ ### GUI Editor (gedit) ใช้งานเหมือน Notepad บน Windows มีหน้าต่างให้ใช้เมาส์คลิกได้ เหมาะสำหรับมือใหม่ ```{code-block} bash # Opens a window to edit the file gedit my_code.py ``` ```{image} images/c2/2.4.1.png :width: 80% :align: center ``` ### Terminal Editor (nano) ทำงานในหน้าจอ Terminal เลย (ไม่มีหน้าต่างแยก) จำเป็นมากเมื่อเรารีโมท (SSH) เข้าไปที่ตัวหุ่นยนต์และไม่มีหน้าจอ ```{code-block} bash # Opens file inside the terminal nano my_code.py ``` ```{image} images/c2/2.4.2.png :width: 80% :align: center ``` **ปุ่มลัดสำหรับ nano:** * `Ctrl + O`, `Enter`: บันทึกไฟล์ (Save) * `Ctrl + X`: ออกจากโปรแกรม (Exit) ## System Management (การจัดการระบบ) ### Superuser (sudo) บางคำสั่งที่มีผลกระทบต่อระบบ เช่น การติดตั้งโปรแกรม จำเป็นต้องขอสิทธิ์ผู้ดูแลระบบ (Administrator) โดยใช้คำสั่ง `sudo` นำหน้า (ระบบจะถามรหัสผ่าน) ### Package Manager (apt) Ubuntu มีระบบติดตั้งโปรแกรมที่สะดวกสบายผ่านคำสั่ง `apt` (Advanced Package Tool) ```{code-block} bash :linenos: # 1. Update the list of available packages (Do this first) sudo apt update # 2. Upgrade installed packages to the latest version sudo apt upgrade # 3. Install a new program sudo apt install python3-pip ``` ### Monitoring (top & htop) ใช้สำหรับดูว่าโปรแกรมไหนกิน CPU หรือ RAM เท่าไหร่ (เหมือน Task Manager) * **`top`:** ติดตั้งมาพร้อมเครื่อง แสดงผลเป็นตัวหนังสือล้วน * **`htop`:** แสดงผลเป็นกราฟแท่งสีสวยงาม ดูง่ายกว่า (แนะนำ) **กรณีศึกษา: ติดตั้งและใช้งาน htop** หากลองพิมพ์ `htop` แล้วระบบแจ้งว่า *command not found* ให้ทำการติดตั้งดังนี้: ```{code-block} bash :linenos: # 1. Install htop sudo apt install htop # 2. Run it htop ``` ```{image} images/c2/2.5.3.png :width: 80% :align: center ``` *(กด `F10` หรือ `q` เพื่อออกจาก htop)* --- ## Mission: File Manipulation (โจทย์ทบทวนความเข้าใจ) เพื่อให้คุ้นเคยกับคำสั่ง ให้ลองทำตามภารกิจต่อไปนี้ทีละขั้นตอน **โจทย์:** 1. สร้างโฟลเดอร์ชื่อ `playground` ที่หน้า Home 2. เข้าไปในโฟลเดอร์นั้น 3. สร้างไฟล์ชื่อ `note.txt` 4. สร้างโฟลเดอร์ซ้อนข้างในชื่อ `backup` 5. คัดลอกไฟล์ `note.txt` ไปไว้ใน `backup` 6. เปลี่ยนชื่อไฟล์ต้นฉบับจาก `note.txt` เป็น `readme.txt` 7. ลบโฟลเดอร์ `backup` ทิ้งไป ````{only} html :::{dropdown} **คลิกเพื่อดูเฉลย (Click to show solution)** :color: primary :icon: check ```{code-block} bash :linenos: # 1. Create folder at Home (~) cd ~ mkdir playground # 2. Enter the folder cd playground # 3. Create a file touch note.txt # 4. Create sub-folder mkdir backup # 5. Copy file into sub-folder cp note.txt backup/ # 6. Rename the original file mv note.txt readme.txt # 7. Remove the sub-folder and everything inside rm -r backup # (Optional) Check the result ls # Should see only: readme.txt ``` ::: ```` ```{only} latex **หมายเหตุ:** สำหรับเฉลย สามารถดูได้ที่เวอร์ชันออนไลน์ ```