ESC
คำสั่ง Bash / Terminal

การนำทาง

คำสั่ง ตัวเลือก ตัวอย่าง ผลลัพธ์ คำอธิบาย
ls -la, -lh, -R ls -la /etc รายการไฟล์ แสดงเนื้อหาในไดเรกทอรี; -l รูปแบบยาว, -a ไฟล์ซ่อน, -h ขนาดแบบอ่านง่าย
cd -, ~, .. cd ~/projects เปลี่ยนไดเรกทอรี เปลี่ยนไดเรกทอรี; cd - กลับไดเรกทอรีก่อนหน้า, cd ~ กลับโฮม
pwd pwd /home/user แสดงไดเรกทอรีปัจจุบัน (พาธเต็ม)
tree -L n, -a tree -L 2 แสดงโครงสร้างต้นไม้ แสดงโครงสร้างไดเรกทอรีแบบต้นไม้; -L จำกัดความลึก (อาจต้องติดตั้งเพิ่ม)
find -name -type -mtime find . -name '*.log' พาธของไฟล์ ค้นหาไฟล์หรือไดเรกทอรีตามเงื่อนไขที่กำหนด
locate -i locate nginx.conf พาธของไฟล์ ค้นหาไฟล์ด่วนโดยใช้ฐานข้อมูล index; รัน updatedb ก่อน

การจัดการไฟล์

คำสั่ง ตัวเลือก ตัวอย่าง ผลลัพธ์ คำอธิบาย
cp -r, -i, -u cp -r src/ dst/ คัดลอกไฟล์ คัดลอกไฟล์; -r สำหรับไดเรกทอรี, -i ถามยืนยันก่อนเขียนทับ
mv -i, -n mv old.txt new.txt ย้าย/เปลี่ยนชื่อ ย้ายหรือเปลี่ยนชื่อไฟล์; -i ถามยืนยันก่อนเขียนทับ
rm -r, -f, -i rm -rf dist/ ลบแล้ว ลบไฟล์หรือไดเรกทอรี; -r recursive, -f บังคับลบ — ใช้ด้วยความระมัดระวัง
mkdir -p mkdir -p a/b/c ไดเรกทอรีใหม่ สร้างไดเรกทอรี; -p สร้างไดเรกทอรีแม่ที่ยังไม่มีด้วย
touch touch index.html ไฟล์ว่าง สร้างไฟล์ว่างหรืออัปเดต timestamp ของไฟล์
ln -s ln -s /etc/nginx nginx symlink สร้าง hard link; -s สำหรับ symbolic link

ดูไฟล์

คำสั่ง ตัวเลือก ตัวอย่าง ผลลัพธ์ คำอธิบาย
cat -n, -A cat -n file.txt เนื้อหาไฟล์ แสดงไฟล์; -n เพิ่มหมายเลขบรรทัด, -A แสดงอักขระที่ไม่พิมพ์ได้
head -n N head -n 20 log.txt N บรรทัดแรก แสดงบรรทัดแรกของไฟล์ (ค่าเริ่มต้น 10 บรรทัด)
tail -n N, -f tail -f app.log N บรรทัดสุดท้าย แสดงบรรทัดสุดท้าย; -f ติดตามเนื้อหาใหม่แบบ real time
less /search, q less large.log ดูแบบแบ่งหน้า เลื่อนดูไฟล์ทีละหน้า; / ค้นหา, q ออก, space เลื่อนหน้า
wc -l, -w, -c wc -l file.txt จำนวน นับคำ; -l นับบรรทัด, -w นับคำ, -c นับไบต์/อักขระ

ค้นหาและประมวลผลข้อความ

คำสั่ง ตัวเลือก ตัวอย่าง ผลลัพธ์ คำอธิบาย
grep -r -i -n -v -E grep -rn 'error' logs/ บรรทัดที่ตรงกัน ค้นหารูปแบบข้อความ; -r recursive, -i ไม่สนตัวพิมพ์เล็ก/ใหญ่, -n แสดงหมายเลขบรรทัด
grep -v grep -v 'debug' app.log บรรทัดที่ไม่ตรง กลับผลการค้นหา — แสดงบรรทัดที่ไม่มีรูปแบบนั้น
grep -E grep -E 'warn|error' log บรรทัดที่ตรงกัน Extended regex — ใช้ | สำหรับ OR, + สำหรับหนึ่งครั้งขึ้นไป
awk '{print $N}' awk '{print $1}' f ค่าคอลัมน์ ประมวลผลข้อความแบบ pattern-action; $1 ฟิลด์แรก, $NF ฟิลด์สุดท้าย
sed -i 's/a/b/g' sed -i 's/foo/bar/g' f ข้อความที่แก้ไขแล้ว Stream editor; s/ค้นหา/แทนที่/g แทนที่ทุกตำแหน่งในไฟล์
sort -n -r -k N sort -n numbers.txt ผลลัพธ์ที่เรียงแล้ว เรียงบรรทัด; -n เรียงตัวเลข, -r ย้อนกลับ, -k เรียงตามคอลัมน์ N
uniq -c, -d sort f | uniq -c บรรทัดที่ไม่ซ้ำ ลบบรรทัดซ้ำที่ติดกัน; มักใช้ต่อจาก sort

สิทธิ์

คำสั่ง ตัวเลือก ตัวอย่าง ผลลัพธ์ คำอธิบาย
chmod 755, 644, +x chmod +x script.sh เปลี่ยนสิทธิ์แล้ว เปลี่ยนสิทธิ์ไฟล์; 755=rwxr-xr-x, 644=rw-r--r--
chown -R user:group chown -R www-data:www-data /var/www เปลี่ยนเจ้าของแล้ว เปลี่ยนเจ้าของและกลุ่มของไฟล์; -R recursive
ls -la ls -la /var/www รายการสิทธิ์ แสดงสิทธิ์, เจ้าของ, กลุ่ม, และขนาดของไฟล์ทั้งหมด
umask 022, 027 umask 022 สิทธิ์เริ่มต้น กำหนด permission mask เริ่มต้นสำหรับไฟล์ใหม่ (022 → ไฟล์ 644)
sudo -u user sudo systemctl restart nginx คำสั่งยกระดับสิทธิ์ รันคำสั่งในฐานะ superuser; -u เพื่อรันในนามผู้ใช้อื่น

การจัดการกระบวนการ

คำสั่ง ตัวเลือก ตัวอย่าง ผลลัพธ์ คำอธิบาย
ps aux, -ef ps aux | grep nginx รายการโปรเซส แสดงรายการโปรเซส; aux=ทุกผู้ใช้, -ef=รูปแบบเต็ม
top q, k, M top มุมมอง live มอนิเตอร์โปรเซสแบบ interactive; q ออก, k ฆ่าโปรเซส, M เรียงตามหน่วยความจำ
htop F3, F9 htop มุมมอง live top แบบสีสันพร้อมปรับปรุง; F3 ค้นหา, F9 ฆ่าโปรเซส (อาจต้องติดตั้งเพิ่ม)
kill -9, -15 kill -9 1234 ส่ง signal แล้ว ส่ง signal ไปยัง PID; -15 SIGTERM (ปิดอย่างสุภาพ), -9 SIGKILL (บังคับ)
killall -9, -u killall node ส่ง signal แล้ว ฆ่าทุกโปรเซสที่มีชื่อตรงกัน
jobs -l jobs -l รายการงาน แสดงรายการงานที่ทำงานเบื้องหลังหรือหยุดชั่วคราวใน shell ปัจจุบัน
bg / fg %N fg %1 กลับมาทำงานแล้ว bg ส่งงานไปเบื้องหลัง, fg ดึงงานกลับมาเบื้องหน้า

เครือข่าย

คำสั่ง ตัวเลือก ตัวอย่าง ผลลัพธ์ คำอธิบาย
curl -o -L -X -H -d curl -O https://example.com/f ผลลัพธ์ ส่งข้อมูลผ่าน HTTP/FTP; -L ติดตาม redirect, -o บันทึกเป็นไฟล์
wget -O -r -q wget -q https://example.com บันทึกไฟล์แล้ว ดาวน์โหลดไฟล์; -O เปลี่ยนชื่อไฟล์ผลลัพธ์, -r recursive, -q เงียบ
ping -c N ping -c 4 google.com RTT ms ทดสอบการเชื่อมต่อเครือข่าย; -c จำกัดจำนวน packet
ssh -i -p -L ssh user@host -p 2222 shell Secure shell; -i ไฟล์ key, -p พอร์ต, -L port forward แบบ local
scp -r -P -i scp file user@host:~/ คัดลอกแล้ว คัดลอกไฟล์ผ่าน SSH อย่างปลอดภัย; -r recursive, -P พอร์ต (ตัวพิมพ์ใหญ่)
netstat -tuln netstat -tuln รายการพอร์ต แสดงการเชื่อมต่อเครือข่าย; -t TCP, -u UDP, -l กำลังฟัง, -n ตัวเลข
ss -tuln ss -tuln รายการพอร์ต ทดแทน netstat รุ่นใหม่; เร็วกว่าและรายละเอียดมากกว่า

การเก็บถาวรและบีบอัด

คำสั่ง ตัวเลือก ตัวอย่าง ผลลัพธ์ คำอธิบาย
tar -czf -czf out.tar.gz tar -czf arc.tar.gz dir/ archive สร้าง tarball บีบอัดด้วย gzip; c=สร้าง, z=gzip, f=ชื่อไฟล์
tar -xzf -xzf file.tar.gz tar -xzf arc.tar.gz -C /tmp แตกไฟล์แล้ว แตกไฟล์ gzip tarball; x=แตก, -C ระบุไดเรกทอรีปลายทาง
tar -tf tar -tf archive.tar.gz รายการไฟล์ แสดงรายการไฟล์ใน tarball โดยไม่แตกออก
zip -r, -9 zip -r out.zip dir/ ไฟล์ zip สร้าง zip archive; -r recursive, -9 บีบอัดสูงสุด
unzip -d, -l unzip archive.zip -d out/ แตกไฟล์แล้ว แตกไฟล์ zip; -d ระบุปลายทาง, -l แสดงรายการโดยไม่แตกออก
gzip / gunzip -k, -d gzip -k file.txt บีบอัดแล้ว บีบอัดไฟล์เดี่ยวด้วย gzip; -k เก็บไฟล์ต้นฉบับ, gunzip เพื่อคลายการบีบอัด

สภาพแวดล้อมและเชลล์

คำสั่ง ตัวเลือก ตัวอย่าง ผลลัพธ์ คำอธิบาย
env env | grep PATH var=value แสดงตัวแปร environment ทั้งหมด; ใช้ pipe กับ grep เพื่อกรอง
export export NODE_ENV=production ตั้งตัวแปรแล้ว ตั้งค่าตัวแปร environment สำหรับ session ปัจจุบันและโปรเซสลูก
echo $VAR echo $HOME ค่า แสดงค่าตัวแปร; ใช้ ${VAR} เพื่อแยกแยะในสตริง
which which node พาธ แสดงพาธเต็มของไฟล์ executable ของคำสั่ง
alias alias ll='ls -la' ทางลัด สร้างชื่อย่อสำหรับคำสั่ง; เพิ่มใน ~/.bashrc เพื่อให้คงอยู่ถาวร
source source ~/.bashrc โหลดใหม่แล้ว รันไฟล์ใน context ของ shell ปัจจุบัน (หรือใช้: . ~/.bashrc)
history !N, !! history | tail -20 รายการคำสั่ง แสดงประวัติคำสั่ง; !! รันคำสั่งล่าสุดซ้ำ, !N รันคำสั่งที่ N

อ้างอิง Git ด่วน

คำสั่ง ตัวเลือก ตัวอย่าง ผลลัพธ์ คำอธิบาย
git init git init my-project สร้าง repo แล้ว สร้าง Git repository ใหม่ในไดเรกทอรี
git clone --depth 1 git clone url clone repo แล้ว clone repository ระยะไกล; --depth 1 สำหรับ shallow clone
git status -s git status -s การเปลี่ยนแปลง แสดงสถานะ working tree; -s รูปแบบย่อ
git add -A, -p git add -p staged แล้ว เพิ่มการเปลี่ยนแปลงเข้า stage; -A ทั้งหมด, -p โหมด interactive patch
git commit -m, --amend git commit -m 'msg' commit แล้ว commit การเปลี่ยนแปลงที่ staged; --amend แก้ไข commit ล่าสุด
git push -u origin git push -u origin main push แล้ว push ไปยัง remote; -u กำหนด upstream tracking branch
git pull --rebase git pull --rebase ซิงค์แล้ว ดึงและรวมการเปลี่ยนแปลงจาก remote; --rebase แทน merge
git log --oneline --graph git log --oneline -10 ประวัติ แสดงประวัติ commit; --oneline แบบย่อ, --graph แสดง branch แบบ visual
git stash pop, list git stash pop กู้คืนแล้ว บันทึกงานที่ยังไม่ commit ชั่วคราว; pop เพื่อกู้คืน
git diff --staged git diff --staged diff แสดงการเปลี่ยนแปลง; --staged แสดงที่ staged แต่ยังไม่ commit

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

sh (Bourne Shell) คือ Unix shell ดั้งเดิม ที่กำหนดมาตรฐานโดย POSIX bash (Bourne Again Shell) คือตัวสืบทอดและ superset ของมัน เพิ่ม arrays, ไวยากรณ์ทดสอบขยาย [[]], การขยายเลขคณิต $(( )), ประวัติ, การเติมแท็บ และอื่นๆ บนระบบ Linux ส่วนใหญ่ /bin/sh เป็น symlink ไปยัง bash หรือ dash (shell เบาที่รองรับแต่ POSIX)

สามขั้นตอน: (1) เพิ่มบรรทัด shebang เป็นบรรทัดแรก: #!/bin/bash (2) ทำให้รันได้ด้วย chmod +x script.sh (3) รันด้วย ./script.sh (ต้องใช้ ./ เพราะไดเรกทอรีปัจจุบันไม่อยู่ใน $PATH โดยค่าเริ่มต้น) เพื่อรันจากที่ใดก็ได้ ย้ายไปยังไดเรกทอรีใน PATH ของคุณ

Bash มี 3 standard streams: stdin (0), stdout (1), stderr (2) เปลี่ยนเส้นทาง stdout ไปยังไฟล์: command > file.txt (เขียนทับ) หรือ command >> file.txt (ต่อท้าย) เปลี่ยนเส้นทาง stderr: command 2> errors.txt เปลี่ยนเส้นทางทั้งคู่: command > output.txt 2>&1 ยกเลิก output: command > /dev/null 2>&1 Pipe stdout: command1 | command2