ชีตสรุป

คำสั่ง Linux: ตารางสรุปสำหรับมือใหม่และผู้ดูแลระบบ

อัปเดต: · Skillaria.Top

คำสั่ง 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 file20 บรรทัดแรก
tail -n 50 file50 บรรทัดสุดท้าย
tail -f /var/log/syslogติดตามไฟล์แบบเรียลไทม์
wc -l fileจำนวนบรรทัด
diff a.conf b.confความต่างระหว่างไฟล์

สิทธิ์และเจ้าของ

คำสั่งทำอะไร
chmod +x script.shอนุญาตให้รันได้
chmod 644 filerw-r--r--: เจ้าของเขียนได้ คนอื่นอ่านได้
chmod 755 dirrwxr-xr-x: ใช้กับไดเรกทอรีและ script ทั่วไป
chmod 600 ~/.ssh/id_ed25519เฉพาะเจ้าของ: ใช้กับกุญแจส่วนตัว
sudo chown www-data:www-data fileเปลี่ยนเจ้าของและกลุ่ม
sudo chown -R alice /srv/appเปลี่ยนเจ้าของแบบเรียกซ้ำ
idUID, 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 $PATHshell ค้นหาโปรแกรมจากไดเรกทอรีใดบ้าง
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 nginxPID และบรรทัดคำสั่งจากชื่อ
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 1234system call ของโปรเซส

บริการและ log (systemd)

คำสั่งทำอะไร
systemctl status nginxสถานะบริการและบรรทัด log ล่าสุด
sudo systemctl start|stop|restart nginxเริ่ม หยุด หรือเริ่มใหม่
sudo systemctl reload nginxโหลดการตั้งค่าใหม่โดยไม่หยุดบริการ
sudo systemctl enable --now nginxเปิดให้เริ่มอัตโนมัติและเริ่มทันที
systemctl --failedunit ที่ล้มเหลว
journalctl -u nginx -flog ของบริการแบบเรียลไทม์
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 -akernel และสถาปัตยกรรม
cat /etc/os-releasedistribution และเวอร์ชัน
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

คำถามที่พบบ่อย

ออกจาก man หรือ less อย่างไร?

กด q สำหรับการค้นหาภายใน พิมพ์เครื่องหมายทับตามด้วยคำ และกด n เพื่อไปยังผลลัพธ์ถัดไป

ออกจากโปรแกรมแก้ไข vim อย่างไร?

กด Esc แล้วพิมพ์ :q! และ Enter เพื่อออกโดยไม่บันทึก หรือ :wq เพื่อบันทึกและออก มือใหม่ควรแก้ไขไฟล์ด้วย nano จะง่ายกว่า

ทำไม rm -rf จึงอันตราย?

คำสั่งนี้ลบทันทีโดยไม่ถามยืนยันและไม่มีถังขยะ พิมพ์พาธผิดเพียงนิดเดียว (เช่น เว้นวรรคก่อนเครื่องหมายดอกจัน) ก็อาจลบไดเรกทอรีผิดได้ ควรตรวจพาธด้วย ls ก่อนรันเสมอ

จะรันคำสั่งล่าสุดซ้ำด้วย sudo ได้อย่างไร?

พิมพ์ sudo !! shell จะแทนที่ด้วยคำสั่งก่อนหน้าทั้งบรรทัด

จะหยุดคำสั่งที่ค้างใน terminal อย่างไร?

Ctrl+C ส่งสัญญาณขัดจังหวะ หากคำสั่งยังไม่ตอบสนอง ให้หา PID ด้วย ps หรือ pgrep ในอีก terminal หนึ่ง แล้วจบด้วย kill

เรียนหัวข้อนี้ผ่านวิดีโอ

หัวข้อนี้สอนอย่างละเอียดพร้อมฝึกปฏิบัติในคอร์ส “Linux: с нуля до уверенного администрирования”

ไปที่คอร์ส