Linux CLI DevOps

Linux Command Line — คำสั่งพื้นฐานที่ DevOps ต้องรู้

By Anirach Mingkhwan DevOps & Vibe Coding 2026
Linux Command Line — dog with Tux penguin

ในซีรีส์ DevOps เราพูดถึง Docker, K8s, Terraform, Ansible มาเยอะแล้ว แต่ทุกเครื่องมือเหล่านั้นล้วนรันบน Linux ทั้งนั้น!

ถ้าใช้ Linux command ไม่เป็น... เหมือนเชฟที่ถือมีดไม่เป็น 🔪

มาเรียนรู้คำสั่ง Linux ที่ DevOps ใช้ทุกวัน ตั้งแต่พื้นฐานไปจนถึง shell scripting 🐧🐕


Navigation — เดินทางใน File System

ก่อนจะทำอะไรใน Linux ต้อง "เดินทาง" ใน file system เป็นก่อน — Linux จัดโครงสร้างไฟล์เป็น tree เริ่มจาก / (root) ลงไป /home, /etc, /var ไม่มี drive letter เหมือน Windows คำสั่ง 3 ตัวที่ต้องจำ: pwd (อยู่ที่ไหน), ls (มีอะไรบ้าง), cd (ไปที่ไหน):

# อยู่ไหน?
pwd
# /home/deploy

# ไปที่ไหน?
cd /var/log           # ไปตาม path
cd ~                  # กลับ home
cd ..                 # ขึ้น 1 ระดับ
cd -                  # กลับไปที่เดิม (toggle)

# มีอะไรอยู่?
ls                    # list files
ls -la                # list แบบละเอียด + hidden files
ls -lh                # ขนาดอ่านง่าย (1.5M, 2.3G)
ls -lt                # เรียงตามเวลา (ใหม่สุดบน)

# หา path แบบ tree
tree -L 2             # แสดงโครงสร้าง 2 ระดับ
💡 Tip: กด Tab เพื่อ auto-complete ชื่อไฟล์/โฟลเดอร์ — กด 2 ครั้งเพื่อดูตัวเลือก

จัดการไฟล์ — สร้าง ลบ ย้าย คัดลอก

การจัดการไฟล์ใน Linux ทำผ่าน command line ได้เร็วกว่า GUI มาก — สร้างโฟลเดอร์ 10 ตัวพร้อมกัน, ลบไฟล์ตาม pattern, ย้าย/copy แบบ batch ⚠️ ระวัง rm -rf — ลบแล้วลบเลย ไม่มีถังขยะ! ถ้าไม่แน่ใจ ใช้ rm -i (ถามก่อนลบ):

# สร้าง
mkdir -p projects/myapp/src    # สร้างโฟลเดอร์ (nested)
touch index.js                  # สร้างไฟล์เปล่า

# คัดลอก
cp file.txt backup.txt          # copy ไฟล์
cp -r src/ src-backup/          # copy โฟลเดอร์ (recursive)

# ย้าย / เปลี่ยนชื่อ
mv old.txt new.txt              # rename
mv file.txt /tmp/               # ย้ายไป /tmp

# ลบ (ระวัง! ไม่มี Recycle Bin)
rm file.txt                     # ลบไฟล์
rm -r folder/                   # ลบโฟลเดอร์
rm -rf node_modules/            # ลบแบบ force (ไม่ถาม)

# ลิงก์
ln -s /usr/bin/python3 /usr/bin/python   # symbolic link
🐕 ระวัง! rm -rf / จะลบทุกอย่างในเครื่อง — อย่าทำเด็ดขาด! ใช้ rm -ri (ถามก่อนลบ) ถ้าไม่แน่ใจ

อ่านไฟล์ — ดูเนื้อหาแบบต่างๆ

Linux มีคำสั่งอ่านไฟล์หลายตัวเหมาะกับสถานการณ์ต่างกัน — cat แสดงทั้งไฟล์ (เหมาะกับไฟล์สั้น), less เลื่อนอ่านได้ (เหมาะกับไฟล์ยาว), head/tail ดูแค่ต้น/ท้ายไฟล์, tail -f ดู log แบบ real-time — DevOps ใช้ tail -f ตลอดเวลาตอน debug:

# ดูทั้งไฟล์
cat config.yml                  # แสดงทั้งหมด
less /var/log/syslog            # เลื่อนดูได้ (กด q ออก)
more /var/log/syslog            # เหมือน less แต่ทำได้น้อยกว่า

# ดูเฉพาะส่วน
head -20 access.log             # 20 บรรทัดแรก
tail -50 error.log              # 50 บรรทัดท้าย
tail -f /var/log/nginx/access.log   # ดู real-time! (follow)

# นับ
wc -l file.txt                  # จำนวนบรรทัด
wc -w file.txt                  # จำนวนคำ
du -sh folder/                  # ขนาดโฟลเดอร์
df -h                           # ขนาด disk ที่เหลือ

Search & Filter — หาของเก่ง

ความสามารถในการ "หาของ" คือ superpower ของ Linux — grep หาข้อความในไฟล์ (regex supported), find หาไฟล์ตาม name/size/date, awk และ sed ประมวลผลข้อความ เมื่อ combine กับ pipes จะทำงานที่ซับซ้อนได้ในบรรทัดเดียว:

# grep — ค้นหาข้อความในไฟล์
grep "error" /var/log/syslog              # หาบรรทัดที่มี "error"
grep -i "warning" app.log                 # case-insensitive
grep -r "TODO" src/                       # ค้นหาในทุกไฟล์ (recursive)
grep -n "password" config.yml             # แสดงเลขบรรทัด
grep -c "404" access.log                  # นับจำนวนที่เจอ
grep -v "DEBUG" app.log                   # แสดงบรรทัดที่ไม่มี "DEBUG"

# find — หาไฟล์
find / -name "nginx.conf"                 # หาไฟล์ชื่อ nginx.conf
find . -name "*.log" -mtime -7            # ไฟล์ .log ที่แก้ไขใน 7 วัน
find /var -size +100M                     # ไฟล์ที่ใหญ่กว่า 100MB
find . -type d -name "node_modules"       # หาโฟลเดอร์ชื่อ node_modules
find . -name "*.tmp" -delete              # หาแล้วลบ

# awk & sed — text processing
awk '{print $1}' access.log               # แสดงคอลัมน์แรก
awk -F: '{print $1}' /etc/passwd          # แสดง username ทั้งหมด
sed 's/old/new/g' file.txt                # แทนที่ข้อความ
sed -i 's/8080/3000/g' config.yml         # แทนที่ในไฟล์จริง

Pipes & Redirection — ต่อท่อ

พลังที่แท้จริงของ Linux คือการ ต่อคำสั่งเข้าด้วยกัน ด้วย pipe |:

# Pipe: output ของคำสั่งซ้าย → input ของคำสั่งขวา
cat access.log | grep "POST" | wc -l
# → นับจำนวน POST requests

# หา 10 IP ที่เข้ามาบ่อยสุด
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

# หา process ที่ใช้ memory เยอะสุด
ps aux | sort -k4 -rn | head -5

# Redirect: บันทึก output ลงไฟล์
echo "Hello" > file.txt          # เขียนทับ
echo "World" >> file.txt         # เขียนต่อท้าย
ls /fake 2> errors.txt           # redirect error
ls /fake > output.txt 2>&1       # redirect ทั้ง output + error

# /dev/null — หลุมดำ (ทิ้ง output)
command > /dev/null 2>&1         # ไม่แสดงอะไรเลย
💡 DevOps Pro Tip: | (pipe) คือสิ่งที่ทำให้ Linux ทรงพลัง — คำสั่งเล็กๆ หลายตัว ต่อกันแล้วทำสิ่งซับซ้อนได้!

Process Management — จัดการโปรเซส

ทุกโปรแกรมที่รันบน Linux คือ "process" ที่มี PID (Process ID) — การจัดการ processes สำคัญมากสำหรับ DevOps: ดูว่า server ใช้ CPU/RAM เท่าไร, หา process ที่กิน resource, kill process ที่ค้าง, รัน process ใน background ให้ทำงานต่อแม้ปิด terminal:

# ดู process
ps aux                          # แสดงทุก process
ps aux | grep nginx             # หา process nginx
top                             # real-time monitor (กด q ออก)
htop                            # top เวอร์ชันสวยกว่า

# จัดการ process
kill 1234                       # ส่ง SIGTERM (ปิดอย่างสุภาพ)
kill -9 1234                    # ส่ง SIGKILL (บังคับปิด)
killall nginx                   # kill ทุก process ชื่อ nginx
pkill -f "node server.js"       # kill ตาม pattern

# Background / Foreground
./script.sh &                   # รันใน background
nohup ./script.sh &             # รัน background + ไม่ตายเมื่อปิด terminal
jobs                            # ดู background jobs
fg %1                           # ดึงกลับมา foreground

# systemd — จัดการ services
sudo systemctl start nginx      # เริ่ม
sudo systemctl stop nginx       # หยุด
sudo systemctl restart nginx    # restart
sudo systemctl status nginx     # ดูสถานะ
sudo systemctl enable nginx     # เปิดอัตโนมัติตอน boot
sudo journalctl -u nginx -f     # ดู log real-time

Permissions — สิทธิ์การเข้าถึง

Linux permissions ควบคุมว่าใครทำอะไรกับไฟล์ได้บ้าง — แบ่งเป็น 3 กลุ่ม: owner (เจ้าของ), group (กลุ่ม), others (คนอื่น) แต่ละกลุ่มมี 3 สิทธิ์: r (read), w (write), x (execute) เข้าใจ permissions เป็นพื้นฐาน security ที่สำคัญที่สุด — web server ไม่ควรรันด้วย root, config files ที่มี secrets ต้อง 600 (owner read/write เท่านั้น):

# ดู permissions
ls -la
# -rw-r--r-- 1 deploy deploy 1234 Mar  7 09:00 app.js
# │├─┤├─┤├─┤
# │ │  │  └── Others: r-- (read only)
# │ │  └───── Group:  r-- (read only)
# │ └──────── Owner:  rw- (read + write)
# └────────── Type:   - (file) / d (directory)

# เปลี่ยน permissions
chmod 755 script.sh             # rwxr-xr-x (owner ทำได้หมด, คนอื่น read+execute)
chmod 644 config.yml            # rw-r--r-- (owner อ่าน+เขียน, คนอื่นอ่านอย่างเดียว)
chmod +x deploy.sh              # เพิ่มสิทธิ์ execute
chmod -R 755 /var/www           # recursive ทั้งโฟลเดอร์

# เปลี่ยนเจ้าของ
chown deploy:deploy app.js      # เปลี่ยน owner + group
chown -R www-data:www-data /var/www   # recursive
ตัวเลข สิทธิ์ ใช้กับ
755 rwxr-xr-x Scripts, โฟลเดอร์
644 rw-r--r-- Config files, HTML
600 rw------- SSH keys, secrets
700 rwx------ .ssh directory

Package Management — ติดตั้ง software

Package manager คือ "app store" ของ Linux — ติดตั้ง, อัพเดท, ลบ software ได้ง่ายๆ แต่ละ distro ใช้คนละตัว: apt (Ubuntu/Debian), yum/dnf (CentOS/RHEL/Fedora), apk (Alpine — ที่ใช้ใน Docker) สิ่งสำคัญคือ apt update ก่อน apt install เสมอ เพื่อให้ได้ package list ล่าสุด:

# Ubuntu/Debian (apt)
sudo apt update                 # อัพเดท package list
sudo apt upgrade                # อัพเดท software ทั้งหมด
sudo apt install nginx          # ติดตั้ง
sudo apt remove nginx           # ลบ
sudo apt autoremove             # ลบ dependencies ที่ไม่ใช้
apt search docker               # ค้นหา package
dpkg -l | grep nginx            # ดู package ที่ติดตั้ง

# CentOS/RHEL (yum/dnf)
sudo dnf install nginx
sudo dnf update
sudo dnf remove nginx

# Alpine (apk) — ใช้ใน Docker images
apk add --no-cache nginx curl

User Management — จัดการ users

Linux เป็น multi-user OS — แต่ละ user มีสิทธิ์และ home directory แยกกัน root คือ superuser ที่ทำได้ทุกอย่าง (อันตราย!) ควรสร้าง regular user แล้วใช้ sudo เมื่อต้องการสิทธิ์ admin DevOps ต้องจัดการ users บน servers เป็นประจำ:

# สร้าง user
sudo adduser deploy             # สร้าง user + home directory
sudo usermod -aG sudo deploy    # เพิ่มเข้ากลุ่ม sudo
sudo usermod -aG docker deploy  # เพิ่มเข้ากลุ่ม docker

# ข้อมูล user
whoami                          # เราเป็นใคร
id deploy                       # ดู uid, gid, groups
groups deploy                   # ดู groups

# สลับ user
su - deploy                     # สลับเป็น deploy
sudo -i                         # สลับเป็น root
sudo -u deploy command          # รันคำสั่งในฐานะ deploy

Networking Commands — เครือข่าย

DevOps ต้อง debug network issues บ่อยมาก — server เชื่อมต่อ database ไม่ได้? DNS resolve ผิด? port ถูก firewall block? คำสั่ง networking เหล่านี้ช่วยวินิจฉัยปัญหาได้เร็ว:

# IP & Interface
ip addr show                    # ดู IP address
ip route show                   # ดู routing table
hostname -I                     # ดู IP อย่างย่อ

# ทดสอบ connection
ping -c 4 google.com            # ping 4 ครั้ง
curl -I https://example.com     # ดู HTTP headers
curl -s https://api.example.com/status | jq .   # ดู JSON สวยๆ
wget https://example.com/file.zip   # ดาวน์โหลดไฟล์

# Port & Connection
ss -tlnp                        # ดู port ที่เปิด + process
netstat -tlnp                   # เหมือน ss (เก่ากว่า)
lsof -i :3000                   # ใครใช้ port 3000?

# DNS
dig example.com A +short        # ดู IP ของ domain
nslookup example.com            # ดู DNS record

Shell Scripting — เขียน script อัตโนมัติ

Shell script คือพลังสูงสุดของ Linux CLI — รวมคำสั่งหลายตัวเป็น automation!

Script พื้นฐาน

Shell script เริ่มด้วย #!/bin/bash (shebang) บอกว่าใช้ bash รัน ทำให้ executable ด้วย chmod +x แล้วรันได้เลย ตัวอย่างด้านล่างแสดง deploy script ที่ DevOps ใช้จริง — build, test, deploy ด้วยคำสั่งเดียว:

#!/bin/bash
# deploy.sh — Deploy script

set -e  # หยุดทันทีถ้ามี error

APP_NAME="myapp"
DEPLOY_DIR="/var/www/$APP_NAME"
BACKUP_DIR="/var/backups/$APP_NAME"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

echo "🚀 Deploying $APP_NAME..."

# 1. Backup current version
echo "📦 Creating backup..."
mkdir -p "$BACKUP_DIR"
cp -r "$DEPLOY_DIR" "$BACKUP_DIR/backup_$TIMESTAMP"

# 2. Pull latest code
echo "⬇️ Pulling latest code..."
cd "$DEPLOY_DIR"
git pull origin main

# 3. Install dependencies
echo "📥 Installing dependencies..."
npm ci --production

# 4. Restart service
echo "🔄 Restarting service..."
sudo systemctl restart "$APP_NAME"

# 5. Health check
echo "🏥 Health check..."
sleep 3
if curl -sf http://localhost:3000/health > /dev/null; then
    echo "✅ Deploy successful!"
else
    echo "❌ Health check failed! Rolling back..."
    cp -r "$BACKUP_DIR/backup_$TIMESTAMP"/* "$DEPLOY_DIR/"
    sudo systemctl restart "$APP_NAME"
    echo "⏪ Rolled back to previous version"
    exit 1
fi
# ทำให้รันได้ แล้วรัน
chmod +x deploy.sh
./deploy.sh

Variables, Conditions, Loops

Shell script รองรับ variables, if/else, loops เหมือนภาษาโปรแกรมทั่วไป — แต่ syntax จะแปลกหน่อย (เช่น [[ ]] สำหรับ conditions, $VAR สำหรับอ้างอิงตัวแปร) ตัวอย่างด้านล่างแสดง patterns ที่ใช้บ่อยใน DevOps scripts:

#!/bin/bash
# ตัวแปร
NAME="World"
echo "Hello, $NAME!"

# Condition
if [ -f "/etc/nginx/nginx.conf" ]; then
    echo "Nginx config exists"
else
    echo "Nginx not installed"
fi

# Loop
for server in web1 web2 web3; do
    echo "Checking $server..."
    ssh "$server" "uptime"
done

# Loop ตามไฟล์
for log in /var/log/*.log; do
    echo "$log: $(wc -l < "$log") lines"
done

# While loop
while true; do
    if curl -sf http://localhost:3000/health > /dev/null; then
        echo "$(date): OK"
    else
        echo "$(date): DOWN!"
    fi
    sleep 30
done

Cron Jobs — ตั้งเวลารันอัตโนมัติ

Cron คือ scheduler ของ Linux — ตั้งเวลาให้ script รันอัตโนมัติ เช่น backup ทุกคืน, cleanup logs ทุกสัปดาห์, health check ทุก 5 นาที Cron expression มี 5 ช่อง: นาที ชั่วโมง วัน เดือน วันในสัปดาห์ ดู syntax ด้วย crontab.guru:

# แก้ไข crontab
crontab -e

# รูปแบบ:
# ┌───────── minute (0-59)
# │ ┌─────── hour (0-23)
# │ │ ┌───── day of month (1-31)
# │ │ │ ┌─── month (1-12)
# │ │ │ │ ┌─ day of week (0-7, 0=Sun)
# │ │ │ │ │
# * * * * * command

# ตัวอย่าง
0 2 * * *   /home/deploy/backup.sh       # ทุกวัน 02:00
*/5 * * * * curl -s http://localhost:3000/health   # ทุก 5 นาที
0 9 * * 1   /home/deploy/weekly-report.sh   # ทุกวันจันทร์ 09:00
0 0 1 * *   /home/deploy/monthly-cleanup.sh   # วันที่ 1 ทุกเดือน

# ดู crontab ปัจจุบัน
crontab -l

# ดู cron logs
grep CRON /var/log/syslog

คำสั่งที่ DevOps ใช้บ่อยที่สุด (Cheat Sheet)

สรุปคำสั่งที่ DevOps engineers ใช้ทุกวัน — เก็บไว้เป็น quick reference ไม่ต้องจำทั้งหมด แค่รู้ว่ามี แล้วกลับมาดูเมื่อต้องใช้:

หมวด คำสั่ง ทำอะไร
📁 Filesls -lalist ไฟล์แบบละเอียด
📁 Filesfind . -name "*.log"หาไฟล์ .log
🔍 Searchgrep -r "error" .ค้นหาข้อความ
📊 Monitorhtopดู CPU/Memory real-time
📊 Monitordf -hดู disk space
📊 Monitorfree -hดู memory
🔄 Processps aux | grep appหา process
🔄 Processsystemctl status nginxดูสถานะ service
🌐 Networkss -tlnpดู port ที่เปิด
🌐 Networkcurl -sf URLทดสอบ HTTP
📝 Logstail -f /var/log/app.logดู log real-time
📝 Logsjournalctl -u service -fดู systemd log

สรุป

Linux CLI เป็นทักษะพื้นฐานที่สำคัญที่สุดสำหรับ DevOps — ทุก server, container, CI/CD runner รันบน Linux ยิ่งใช้คล่อง ยิ่งทำงานเร็ว ไม่ต้องจำทุกคำสั่ง แค่รู้ว่า "ทำอะไรได้" แล้ว Google หรือ man command เมื่อต้องการ:

บทความจากซีรีส์ DevOps & Vibe Coding 2026
← Previous
Monitoring & Observability — รู้ทุกอย่างที่เกิดขึ้นใน System
Next →
DevSecOps — Security พื้นฐานที่ DevOps ต้องรู้