Các Câu Lệnh Linux Cơ Bản & Thực Chiến

Cẩm nang lệnh Linux thực chiến dành cho DevOps và SRE: Thao tác file, phân tích log, lọc dữ liệu nâng cao, phân quyền và phím tắt terminal tăng tốc độ làm việc.

Trong môi trường Linux và Cloud Native, giao diện dòng lệnh (CLI) là công cụ giao tiếp chính của kỹ sư vận hành. Bạn không cần phải nhớ hàng trăm lệnh với hàng nghìn cờ (flags) phức tạp. Một Kỹ sư SRE / Systems Engineer giỏi chỉ cần nắm vững khoảng 20% các lệnh cốt lõi nhưng hiểu sâu cách kết hợp chúng qua đường ống (Pipes |) để xử lý 80% công việc hàng ngày.


🎯 Triết Lý Unix & Tư Duy Dòng Lệnh

"Viết các chương trình làm tốt một việc duy nhất. Viết các chương trình có khả năng phối hợp với nhau." – Doug McIlroy

Mọi câu lệnh cơ bản trên Linux đều tuân theo nguyên tắc:

  1. Đầu vào chuẩn (stdin) và Đầu ra chuẩn (stdout): Dễ dàng xâu chuỗi kết quả lệnh này làm đầu vào cho lệnh khác qua ký tự pipe |.
  2. Không có tin tức là tin tốt (Silence is golden): Lệnh chạy thành công thường sẽ im lặng và không in ra gì (exit code = 0). Nếu có thông báo, thường là có lỗi xảy ra.

1. Điều Hướng & Thao Tác Tệp Tin

1.1. Di chuyển và định vị (pwd, cd)

# Xem đường dẫn tuyệt đối thư mục hiện tại
pwd

# Di chuyển về thư mục cá nhân (~/ hoặc /home/username)
cd ~
cd

# 💡 Mẹo chuyên nghiệp: Nhảy nhanh về thư mục vừa đứng trước đó
cd -

1.2. Liệt kê nội dung (ls)

Thay vì chỉ gõ ls đơn thuần, hãy tập thói quen sử dụng các cờ sau:

# Xem chi tiết quyền hạn, chủ sở hữu, dung lượng (dễ đọc: KB, MB, GB) và cả file ẩn
ls -lah

# 💡 Mẹo bắt bệnh: Sắp xếp theo thời gian sửa đổi (mới nhất nằm dưới cùng)
# Cực kỳ hữu dụng khi bạn vừa trigger tác vụ và muốn biết file log nào vừa sinh ra
ls -ltr

1.3. Tạo & Sao chép (mkdir, cp, mv)

# Tạo cây thư mục lồng nhau an toàn (không báo lỗi nếu thư mục đã tồn tại)
mkdir -p /app/backend/config

# Sao chép thư mục kèm giữ nguyên quyền hạn và mốc thời gian (-p hoặc -a)
cp -r -p /etc/nginx /etc/nginx.backup

# Di chuyển hoặc đổi tên file/thư mục
mv old_name.txt new_name.txt

1.4. Xóa tệp tin an toàn (rm)

[!WARNING] Trên Linux không có "Thùng rác" (Recycle Bin). Một khi lệnh rm đã chạy với quyền root, dữ liệu gần như biến mất vĩnh viễn.

# Xóa file đơn lẻ (có hỏi xác nhận để an toàn)
rm -i config.yaml

# Xóa cả thư mục chứa dữ liệu
rm -rf /tmp/cache_folder

# 🛡️ Quy tắc an toàn: Không bao giờ gõ 'rm -rf /*'. 
# Khi cần dọn dẹp thư mục nhạy cảm, hãy cd vào đó rồi mới xóa:
cd /var/log/my-app && rm -f *.log

2. Đọc & Theo Dõi Nội Dung File

2.1. Đọc nhanh & Ghép nối (cat, tac)

  • cat file.txt: In toàn bộ nội dung ra màn hình (chỉ dùng cho file ngắn).
  • cat -n file.txt: In kèm số dòng.
  • tac file.txt: Đọc ngược từ dòng cuối cùng lên dòng đầu tiên.

2.2. Trích xuất đầu & cuối (head, tail)

# Xem 20 dòng đầu tiên của file
head -n 20 /etc/passwd

# Xem 50 dòng cuối cùng của file log
tail -n 50 /var/log/syslog

2.3. Theo dõi Log thời gian thực (tail -f vs tail -F)

[!TIP] Tại sao kỹ sư SRE luôn dùng -F thay vì -f?

  • tail -f: Theo dõi file dựa trên File Descriptor. Nếu hệ thống tự động quay vòng log (Logrotate) đổi tên file cũ và tạo file mới cùng tên, lệnh sẽ bị dừng lại ở file cũ.
  • tail -F: Theo dõi dựa trên Tên File (File Name). Khi log bị xoay (truncate/recreate), nó sẽ tự động nhận diện và tiếp tục stream file mới mà không bị đứt luồng!
# Luôn dùng -F khi stream log Production
tail -F /var/log/nginx/access.log

2.4. Phân trang tương tác (less)

Khi cần duyệt một file cấu hình hoặc file log nặng hàng trăm MB, đừng bao giờ dùng cat (dễ làm đơ terminal). Hãy dùng less:

  • Mở file: less /var/log/application.log
  • Điều hướng: Dùng phím mũi tên hoặc J (xuống) / K (lên).
  • Tìm kiếm từ khóa: Gõ /từ_khóa rồi nhấn Enter. Nhấn n để đến kết quả kế tiếp, N để quay lại.
  • Chế độ xem realtime tương tự tail -f: Nhấn Shift + F. Nhấn Ctrl + C để thoát chế độ xem live và tiếp tục cuộn ngược xem log cũ.
  • Thoát ra: Nhấn q.

3. Lọc & Tìm Kiếm Nâng Cao

3.1. Tìm kiếm văn bản với grep

# Tìm đệ quy từ khóa trong toàn bộ thư mục kèm hiển thị số dòng
grep -rn "database_password" /app/config/

# Tìm không phân biệt chữ hoa/thường (-i)
grep -i "error" /var/log/syslog

# 💡 Mẹo SRE: Đọc file cấu hình sạch sẽ (bỏ toàn bộ chú thích '#' và dòng trống)
grep -vE '^\s*($|#)' /etc/nginx/nginx.conf

3.2. Tìm kiếm tệp tin mạnh mẽ với find

Lệnh find quét trực tiếp vào filesystem metadata, cực kỳ hữu dụng trong vận hành:

# 1. Tìm file cấu hình theo đuôi mở rộng
find /etc -type f -name "*.conf"

# 2. Tìm các file có dung lượng lớn hơn 500MB để giải phóng đĩa
find /var/log -type f -size +500M

# 3. Tìm các file bị chỉnh sửa trong vòng 30 phút qua (hữu ích khi điều tra sự cố/bị hack)
find /var/www/html -type f -mmin -30

# 4. Tìm và xóa file log cũ hơn 7 ngày
find /var/log/app -name "*.log" -type f -mtime +7 -delete

3.3. Định vị nhị phân thực thi (which, whereis, type)

# Tìm đường dẫn file thực thi của lệnh
which nginx
# Kết quả: /usr/sbin/nginx

# Phân biệt lệnh là binary độc lập hay là shell builtin/alias
type cd
# Kết quả: cd is a shell builtin

4. Quản Lý Quyền Hạn & Sở Hữu (Permissions)

Mỗi file trong Linux đều có 3 nhóm quyền: User (u), Group (g), và Others (o). Mỗi quyền tương ứng một giá trị số:

  • r (Read): Giá trị 4
  • w (Write): Giá trị 2
  • x (Execute): Giá trị 1
Mã sốQuyền hạnÝ nghĩa thường gặp
755rwxr-xr-xThư mục chuẩn hoặc Script thực thi (Chủ sở hữu toàn quyền, người khác chỉ đọc/chạy)
644rw-r--r--File cấu hình, mã nguồn chuẩn (Chủ sở hữu sửa được, người khác chỉ đọc)
600rw-------File nhạy cảm, Private Key SSH (id_rsa) – chỉ chủ sở hữu được đọc/ghi
777rwxrwxrwx⚠️ Cực kỳ nguy hiểm trên Production – Mọi user đều có quyền sửa/xóa
# Phân quyền chạy cho file script
chmod +x deploy.sh

# Khóa chặt quyền cho SSH Key
chmod 600 ~/.ssh/id_rsa

# Đổi chủ sở hữu và nhóm sở hữu cho toàn bộ thư mục mã nguồn
sudo chown -R www-data:www-data /var/www/html

5. Nén, Đóng Gói & Truyền Tải Tệp Tin

5.1. Đóng gói & Nén với tar

Quy tắc nhớ cờ nhanh:

  • Tạo nén (Create): c-z-v-f (c: create, z: gzip, v: verbose, f: file)
  • Giải nén (Extract): x-z-v-f (x: extract)
# Nén thư mục thành file .tar.gz
tar -czvf backup-app-2026.tar.gz /app/data

# Giải nén vào thư mục chỉ định (-C)
tar -xzvf backup-app-2026.tar.gz -C /opt/restore/

5.2. Đồng bộ tệp tin thần tốc với rsync

[!TIP] Luôn ưu tiên dùng rsync thay vì scp khi sao chép dữ liệu giữa các máy chủ. rsync có khả năng nén luồng dữ liệu, bảo toàn permissions, và hỗ trợ tiếp tục truyền file nếu bị đứt mạng giữa chừng (Resume).

# Đồng bộ thư mục sang máy chủ khác với các cờ vàng:
# -a: archive (giữ nguyên timestamp, permission)
# -v: verbose (hiển thị chi tiết)
# -z: nén dữ liệu khi truyền qua mạng
# -P: hiển thị tiến trình và cho phép resume nếu mất mạng
rsync -avzP /backup/ user@192.168.1.100:/remote/backup/

5.3. Kiểm tra mạng & API với curl

# Chỉ lấy Header phản hồi từ máy chủ (kiểm tra mã HTTP Status: 200, 301, 502)
curl -I https://api.cloudnative.vn

# Tải script an toàn và thực thi (chỉ dùng với nguồn tin cậy)
curl -fsSL https://get.docker.com -o get-docker.sh

6. Phím Tắt Terminal Tăng 3x Tốc Độ

Phím tắtTác dụng thực chiến
Ctrl + RTìm kiếm ngược lịch sử lệnh (Reverse History Search): Gõ từ khóa để gọi lại lệnh dài từng gõ trong quá khứ
Ctrl + CNgắt và hủy ngay lập tức lệnh đang chạy
Ctrl + ZTạm dừng tiến trình và đẩy vào background (dùng lệnh fg để lấy lại)
Ctrl + ANhảy con trỏ về đầu dòng
Ctrl + ENhảy con trỏ về cuối dòng
Ctrl + UXóa toàn bộ ký tự từ vị trí con trỏ về đầu dòng
Ctrl + KXóa toàn bộ ký tự từ vị trí con trỏ đến hết dòng
Ctrl + LXóa sạch màn hình terminal (tương đương lệnh clear)
sudo !!Chạy lại lệnh vừa gõ trước đó nhưng kèm thêm quyền sudo (Cứu nguy khi quên gõ sudo)
!$Lấy lại tham số cuối cùng của lệnh trước đó (Ví dụ: mkdir /very/long/path ➔ cd !$)

⚡ Bảng Tra Cứu Tóm Tắt (Cheat Sheet)

Tác vụCâu lệnh khuyên dùng
Xem thư mục chi tiết theo thời gianls -latr
Stream log tự động nhận file mớitail -F /path/to/logfile.log
Đọc log nặng không sợ tràn RAMless /path/to/logfile.log
Lọc config bỏ comment và dòng trống`grep -vE '^\s*($
Tìm file lớn hơn 100MBfind / -type f -size +100M
Gán quyền thực thi cho scriptchmod +x script.sh
Nén thư mục thành tar.gztar -czvf name.tar.gz /source/dir
Đồng bộ file qua mạng có resumersync -avzP source/ user@host:dest/
Kiểm tra HTTP Status codecurl -s -o /dev/null -w "%{http_code}\n" https://domain.com

Bài tiếp theo đề xuất: Ngôn Ngữ Kịch Bản Shell (Bash) – Làm chủ Shell Scripting chuẩn Production, cờ bảo vệ Strict Mode và kỹ thuật bẫy lỗi với trap.