คำสั่ง Linux พื้นฐานแบ่งออกเป็นกลุ่ม ได้แก่ การนำทาง (pwd, ls, cd) การจัดการไฟล์ (cp, mv, rm, mkdir) สิทธิ์ (chmod, chown) แพ็กเกจ (apt) โปรเซส (ps, top, kill) การค้นหาและประมวลผลข้อความ (find, grep, sed, awk) เครือข่าย (ip, ss, curl) และบริการ (systemctl, journalctl) ด้านล่างเป็นตารางคำสั่งพร้อมตัวอย่างที่ครอบคลุมงานส่วนใหญ่ในแต่ละวันบน terminal
ตารางสรุปคำสั่ง Linux นี้จัดตามกลุ่มงาน เช่น หาไฟล์ ติดตั้งแพ็กเกจ ปิดโปรเซสที่ค้าง ดึงบรรทัดจาก log หรือตรวจสอบพอร์ต คำสั่งทั้งหมดผ่านการทดสอบบน Ubuntu และ Debian เกือบทั้งหมดใช้ได้กับ distribution อื่นด้วย ต่างกันหลักๆ ที่ตัวจัดการแพ็กเกจ
ความช่วยเหลือและคำแนะนำ
| คำสั่ง | ทำอะไร |
man ls | คู่มือฉบับเต็มของคำสั่ง ออกด้วย q ค้นหาด้วย /คำ |
ls --help | สรุปตัวเลือกแบบย่อ |
type cd | บอกว่าเป็นคำสั่งในตัว alias หรือไฟล์ |
which python3 | พาธของไฟล์ที่รันได้ |
history | ประวัติคำสั่ง; !123 รันคำสั่งหมายเลข 123 อีกครั้ง |
Ctrl+R | ค้นหาในประวัติคำสั่ง |
Ctrl+C / Ctrl+D | หยุดคำสั่ง / ปิด shell |
การนำทางในระบบไฟล์
| คำสั่ง | ทำอะไร |
pwd | ไดเรกทอรีปัจจุบัน |
ls -la | ไฟล์ทั้งหมดรวมถึงไฟล์ซ่อน พร้อมสิทธิ์และขนาด |
ls -lh | ขนาดในรูปแบบอ่านง่าย (K, M, G) |
ls -lt | เรียงตามเวลาที่แก้ไขล่าสุด |
cd /var/log | ไปยังพาธแบบสัมบูรณ์ |
cd .. / cd ~ / cd - | ขึ้นไปหนึ่งระดับ / กลับบ้าน / กลับไปไดเรกทอรีก่อนหน้า |
tree -L 2 | แสดงโครงสร้างไดเรกทอรี 2 ระดับ (แพ็กเกจ tree) |
การทำงานกับไฟล์และไดเรกทอรี
| คำสั่ง | ทำอะไร |
touch file.txt | สร้างไฟล์ว่างหรืออัปเดตเวลาที่แก้ไข |
mkdir -p a/b/c | สร้างไดเรกทอรีพร้อมไดเรกทอรีแม่ |
cp file.txt backup.txt | คัดลอกไฟล์ |
cp -r src/ dst/ | คัดลอกไดเรกทอรีแบบเรียกซ้ำ |
mv old.txt new.txt | เปลี่ยนชื่อหรือย้ายไฟล์ |
rm file.txt | ลบไฟล์ (ไม่มีถังขยะ) |
rm -r dir/ | ลบไดเรกทอรีพร้อมเนื้อหา; -f ไม่ถามซ้ำ ใช้ด้วยความระมัดระวัง |
rmdir dir | ลบไดเรกทอรีที่ว่าง |
ln -s /opt/app/current app | สร้าง symbolic link |
stat file.txt | รายละเอียด: ขนาด สิทธิ์ inode วันที่ |
file image.bin | ตรวจชนิดของไฟล์จากเนื้อหา |
การดูเนื้อหา
| คำสั่ง | ทำอะไร |
cat file | แสดงไฟล์ทั้งหมด |
less file | อ่านทีละหน้า ค้นหาด้วย / ออกด้วย q |
head -n 20 file | 20 บรรทัดแรก |
tail -n 50 file | 50 บรรทัดสุดท้าย |
tail -f /var/log/syslog | ติดตามไฟล์แบบเรียลไทม์ |
wc -l file | จำนวนบรรทัด |
diff a.conf b.conf | ความต่างระหว่างไฟล์ |
สิทธิ์และเจ้าของ
| คำสั่ง | ทำอะไร |
chmod +x script.sh | อนุญาตให้รันได้ |
chmod 644 file | rw-r--r--: เจ้าของเขียนได้ คนอื่นอ่านได้ |
chmod 755 dir | rwxr-xr-x: ใช้กับไดเรกทอรีและ script ทั่วไป |
chmod 600 ~/.ssh/id_ed25519 | เฉพาะเจ้าของ: ใช้กับกุญแจส่วนตัว |
sudo chown www-data:www-data file | เปลี่ยนเจ้าของและกลุ่ม |
sudo chown -R alice /srv/app | เปลี่ยนเจ้าของแบบเรียกซ้ำ |
id | UID, GID และกลุ่มของคุณ |
sudo -i | เปิด shell ของ root |
sudo usermod -aG docker alice | เพิ่มผู้ใช้เข้ากลุ่ม |
แพ็กเกจ (apt, Debian และ Ubuntu)
| คำสั่ง | ทำอะไร |
sudo apt update | อัปเดตรายการแพ็กเกจจาก repository |
sudo apt upgrade | อัปเกรดแพ็กเกจที่ติดตั้งแล้ว |
sudo apt install nginx | ติดตั้งแพ็กเกจ |
sudo apt remove nginx | ถอนการติดตั้ง คงไฟล์ตั้งค่าไว้; purge ลบพร้อมไฟล์ตั้งค่า |
sudo apt autoremove | ลบ dependency ที่ไม่ได้ใช้แล้ว |
apt search htop | ค้นหาแพ็กเกจ |
apt show nginx | คำอธิบายและเวอร์ชัน |
dpkg -l | grep nginx | ตรวจว่าติดตั้งแพ็กเกจแล้วหรือยัง |
dpkg -L nginx | แพ็กเกจติดตั้งไฟล์อะไรบ้าง |
บน RHEL, Fedora, Rocky Linux คำสั่งที่เทียบเท่าคือ dnf install, dnf remove, dnf upgrade, rpm -qa
สภาพแวดล้อมและโปรไฟล์
| คำสั่ง | ทำอะไร |
echo $PATH | shell ค้นหาโปรแกรมจากไดเรกทอรีใดบ้าง |
env | ตัวแปรสภาพแวดล้อมทั้งหมด |
export APP_ENV=prod | ตั้งตัวแปรสำหรับเซสชันปัจจุบันและโปรเซสลูก |
alias ll='ls -la' | ทางลัดของคำสั่ง |
source ~/.bashrc | โหลดโปรไฟล์ใหม่โดยไม่ต้องล็อกอินอีกครั้ง |
crontab -e / crontab -l | แก้ไข / แสดงงาน cron |
โปรเซส
| คำสั่ง | ทำอะไร |
ps aux | โปรเซสทั้งหมดพร้อมผู้ใช้ CPU และหน่วยความจำ |
ps aux | grep nginx | ค้นหาโปรเซส |
pgrep -a nginx | PID และบรรทัดคำสั่งจากชื่อ |
top / htop | ภาระงานของระบบแบบเรียลไทม์ |
kill 1234 | ขอให้โปรเซสจบการทำงาน (SIGTERM) |
kill -9 1234 | บังคับจบ (SIGKILL) เป็นทางสุดท้าย |
pkill -f "python app.py" | จบโปรเซสที่บรรทัดคำสั่งตรงกับข้อความ |
command &, jobs, fg | รันเบื้องหลังและจัดการงาน |
nohup ./job.sh & | โปรเซสทำงานต่อหลังปิด terminal |
free -h | หน่วยความจำและ swap |
uptime | เวลาที่ระบบทำงานและโหลดเฉลี่ย |
strace -p 1234 | system call ของโปรเซส |
บริการและ log (systemd)
| คำสั่ง | ทำอะไร |
systemctl status nginx | สถานะบริการและบรรทัด log ล่าสุด |
sudo systemctl start|stop|restart nginx | เริ่ม หยุด หรือเริ่มใหม่ |
sudo systemctl reload nginx | โหลดการตั้งค่าใหม่โดยไม่หยุดบริการ |
sudo systemctl enable --now nginx | เปิดให้เริ่มอัตโนมัติและเริ่มทันที |
systemctl --failed | unit ที่ล้มเหลว |
journalctl -u nginx -f | log ของบริการแบบเรียลไทม์ |
journalctl -u nginx --since "1 hour ago" | log ย้อนหลังหนึ่งชั่วโมง |
journalctl -p err -b | ข้อผิดพลาดตั้งแต่บูตครั้งล่าสุด |
การค้นหาไฟล์
| คำสั่ง | ทำอะไร |
find /var/log -name "*.log" | ค้นหาตามชื่อ |
find . -type f -mtime -1 | ไฟล์ที่ถูกแก้ไขภายใน 24 ชั่วโมงล่าสุด |
find / -size +500M 2>/dev/null | ไฟล์ขนาดใหญ่ ซ่อนข้อผิดพลาดการเข้าถึง |
find . -name "*.tmp" -delete | ค้นหาแล้วลบ |
du -sh * | ขนาดของแต่ละรายการในไดเรกทอรี |
df -h | พื้นที่ว่างบนระบบไฟล์ |
การค้นหาและประมวลผลข้อความ: grep, sed, awk, jq
| คำสั่ง | ทำอะไร |
grep "error" app.log | บรรทัดที่มีคำที่ต้องการ |
grep -i -n "error" app.log | ไม่สนใจตัวพิมพ์ใหญ่เล็ก พร้อมหมายเลขบรรทัด |
grep -r "listen" /etc/nginx/ | ค้นหาแบบเรียกซ้ำในไดเรกทอรี |
grep -v "DEBUG" app.log | บรรทัดที่ไม่มีคำนั้น |
grep -c "500" access.log | จำนวนครั้งที่พบ |
grep -E "warn|error" app.log | นิพจน์ทั่วไปแบบขยาย |
sed 's/old/new/g' file | แทนที่ข้อความและแสดงผลลัพธ์ |
sed -i 's/8080/9090/' app.conf | แทนที่ในไฟล์โดยตรง |
sed -n '10,20p' file | แสดงบรรทัดที่ 10–20 |
awk '{print $1}' access.log | ฟิลด์แรกของทุกบรรทัด |
awk -F: '{print $1}' /etc/passwd | ชื่อผู้ใช้ (ตัวคั่นคือ :) |
awk '$9 == 500' access.log | บรรทัดที่ฟิลด์ที่เก้ามีค่าเท่ากับ 500 |
sort | uniq -c | sort -rn | นับจำนวนครั้งที่ซ้ำและเรียงตามความถี่ |
cut -d, -f2 data.csv | คอลัมน์ที่สองของ CSV |
jq '.items[].name' data.json | ดึงฟิลด์จาก JSON |
ตัวอย่างไปป์ไลน์: ที่อยู่ IP สิบอันดับแรกที่ส่งคำขอไปยัง nginx มากที่สุด
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
การเปลี่ยนทิศทางและไปป์ไลน์
| โครงสร้าง | ทำอะไร |
cmd > out.txt | เขียนผลลัพธ์ลงไฟล์ (เขียนทับ) |
cmd >> out.txt | เขียนต่อท้ายไฟล์ |
cmd 2> err.txt | เปลี่ยนทิศทางข้อผิดพลาด |
cmd > all.log 2>&1 | ผลลัพธ์และข้อผิดพลาดลงไฟล์เดียวกัน |
cmd1 | cmd2 | ส่งผลลัพธ์ของคำสั่งหนึ่งเป็นอินพุตของอีกคำสั่ง |
cmd | tee out.txt | แสดงบนหน้าจอและบันทึกไว้ด้วย |
cmd1 && cmd2 | รันคำสั่งที่สองเฉพาะเมื่อคำสั่งแรกสำเร็จ |
cmd1 || cmd2 | รันคำสั่งที่สองเมื่อคำสั่งแรกล้มเหลว |
การบีบอัดไฟล์
| คำสั่ง | ทำอะไร |
tar -czf backup.tar.gz dir/ | รวมและบีบอัดด้วย gzip |
tar -xzf backup.tar.gz | แตกไฟล์ |
tar -tzf backup.tar.gz | ดูเนื้อหาในไฟล์ |
zip -r site.zip site/ / unzip site.zip | ไฟล์ zip |
เครือข่าย
| คำสั่ง | ทำอะไร |
ip a | อินเทอร์เฟซและที่อยู่ IP |
ip r | ตารางเส้นทาง (routing) |
ping -c 4 8.8.8.8 | ตรวจสอบว่าโฮสต์เข้าถึงได้หรือไม่ |
ss -tulpn | พอร์ตที่เปิดอยู่และโปรเซสที่ใช้พอร์ตนั้น |
dig example.com / nslookup example.com | คำขอ DNS |
curl -I https://example.com | เฉพาะ header ของการตอบกลับ |
curl -s https://api.example.com | jq | เรียก API และแสดง JSON ให้อ่านง่าย |
wget URL | ดาวน์โหลดไฟล์ |
traceroute example.com | เส้นทางของแพ็กเก็ตไปยังโฮสต์ |
ssh user@host | เชื่อมต่อเซิร์ฟเวอร์ |
ssh-keygen -t ed25519 | สร้างคู่กุญแจ SSH |
scp file user@host:/tmp/ | คัดลอกไฟล์ไปยังเซิร์ฟเวอร์ |
rsync -avz dir/ user@host:/srv/dir/ | ซิงโครไนซ์ไดเรกทอรี |
sudo ufw status | กฎของไฟร์วอลล์ |
ระบบและดิสก์
| คำสั่ง | ทำอะไร |
uname -a | kernel และสถาปัตยกรรม |
cat /etc/os-release | distribution และเวอร์ชัน |
hostnamectl | ชื่อโฮสต์และข้อมูลระบบ |
lsblk | ดิสก์และพาร์ทิชัน |
sudo mount /dev/sdb1 /mnt | เมานต์พาร์ทิชัน |
who / w | ใครกำลังใช้งานระบบอยู่ |
sudo reboot / sudo shutdown -h now | รีบูต / ปิดเครื่อง |
สรุป
สำหรับงานประจำวัน คำสั่งเพียงไม่กี่สิบตัวก็เพียงพอ ได้แก่ ls, cd, cp, mv, rm, chmod, sudo, apt, ps, kill, systemctl, journalctl, grep, find, ss, curl และ ssh จงเก็บตารางสรุปคำสั่ง Linux นี้ไว้และเปิดดูจนกว่าคำสั่งเหล่านี้จะกลายเป็นความเคยชิน กลุ่มคำสั่งทั้งหมดถูกสอนแบบลงมือทำในหลักสูตร Linux