0

Linux Survival Kit: Những câu lệnh "bất ly thân" giúp Developer làm chủ màn hình đen

Chúng ta thường dành hàng giờ để trau chuốt logic trong IDE hào nhoáng, nhưng sự thật là code chỉ thực sự 'sống' khi nó chạy trên Server – nơi không có chuột, không giao diện đồ họa, chỉ có dòng lệnh. Đối với một Developer, việc đối mặt với lỗi Permission denied hay loay hoay tìm file log giữa đêm khuya là chuyện như cơm bữa. Bài viết này sẽ không biến bạn thành System Admin, nhưng sẽ trang bị cho bạn bộ kỹ năng sinh tồn quan trọng nhất: từ việc hiểu rõ chmod, chown để quản lý quyền hạn, cho đến các thao tác file 'vỡ lòng' để bạn tự tin làm chủ hạ tầng ứng dụng của mình.

Phần 1: Định vị & Di chuyển (GPS trong bóng tối)

Khi SSH vào server, bạn không thể nhìn thấy các icon folder như trên Windows. Bạn cần hỏi hệ điều hành xem mình đang ở đâu.

1. pwd (Print Working Directory): "Tôi đang ở đâu ?"

  • Hỏi: "Tôi đang đứng ở đâu?"
  • Đáp: /home/project/backend-service (Đường dẫn tuyệt đối).

2. ls (List): "Ở đây có gì ?"

  • Liệt kê file và thư mục con.

  • Combo phải biết:

    • ls: Liệt kê đơn giản.

    • ls -l : Liệt kê chi tiết (xem quyền, người sở hữu, ngày giờ tạo).

    • ls -a (All): Cực quan trọng với Developer. Nó hiện các file ẩn (tên bắt đầu bằng dấu chấm .).

Ví dụ: Thư mục .git, file .env, file cấu hình .bashrc chỉ hiện khi có -a.

3. cd (Change Directory): "Đi đến chỗ khác"

  • Di chuyển giữa các thư mục.

  • Các phím tắt "thần thánh":

    • cd tênthưmục: Đi vào thư mục đó.

    • cd .. : Lùi ra ngoài 1 cấp (Ví dụ từ /home/user lùi về /home).

    • cd ~ : Bay thẳng về thư mục gốc của user (Home).

    • cd -: Quay lại thư mục vừa đứng trước đó (giống nút "Back" trên TV remote).

Phần 2. Nhóm Lệnh Thao Tác File (Cầm, Nắm, Đập, Xây)

1. mkdir (Make Directory) - Tạo thư mục

Cú pháp: mkdir [Tênthưmục]

Mẹo: Dùng mkdir -p A/B/C để tạo một lèo cả cây thư mục cha lẫn con (Nếu B chưa có nó tự tạo B luôn).

2. touch - Tạo file rỗng

  • Tác dụng: Tạo nhanh một file mới chưa có nội dung.

  • Ví dụ: touch README.md hoặc touch .gitignore.

3. cp (Copy) - Sao chép

  • Lưu ý sống còn: Mặc định cp chỉ copy file. Nếu muốn copy thư mục, bắt buộc phải thêm -r (recursive).

  • Ví dụ:

    • cp file.txt filebackup.txt (Copy file).

    • cp -r src/ srcbackup/ (Copy cả thư mục source code).

4. mv (Move) - Di chuyển & Đổi tên

  • Cú pháp: mv [Cũ] [Mới]

  • Trong Linux không có lệnh rename riêng, ta dùng mv để đổi tên.

  • Ví dụ:

    • mv file.txt /tmp/ (Di chuyển file.txt vào thư mục tmp).

    • mv oldname.jar newname.jar (Đổi tên file ngay tại chỗ).

5. rm (Remove) - Xóa (Cẩn thận!)

  • Cảnh báo: Linux không có thùng rác (Recycle Bin). Xóa là mất vĩnh viễn.

  • Combo "Hủy diệt": rm -rf [Tên]

    • -r : Xóa đệ quy (xóa thư mục và con của nó).

    • -f : Force (xóa cưỡng ép, không hỏi "Bạn có chắc không?").

⛔️ Tuyệt đối tránh gõ: rm -rf / (Nó sẽ xóa sạch hệ điều hành của bạn).

Phần 3: Nhóm Lệnh Xem & Sửa Nhanh

1. cat - Xem nội dung ngắn

  • Tác dụng: In toàn bộ nội dung file ra màn hình.

  • Dùng khi: File cấu hình ngắn, ví dụ xem file chứa password hoặc config.

  • Ví dụ: cat config.json

2. nano hoặc vi - Trình soạn thảo văn bản

  • Trên server không có Notepad hay VS Code, bạn phải dùng cái này để sửa code nóng.

  • nano: Dễ dùng nhất cho người mới. Giao diện thân thiện, có hướng dẫn phím tắt bên dưới màn hình.

    • nano filename, sửa xong nhấn Ctrl+O (Lưu) và ***Ctrl+X (Thoát)***.
  • vi (hoặc vim): Mạnh mẽ, chuyên nghiệp nhưng khó dùng.

    • Nếu lỡ lạc vào vi mà không biết cách thoát, hãy nhấn: ESC, sau đó gõ :q! rồi Enter.

Phấn 4: Nhóm lệnh Quyền hạn & Sở hữu (Cánh cổng bảo mật)

1. Hiểu về quyền truy cập trong Linux

Trước khi dùng lệnh, bạn cần hiểu cấu trúc quyền. Khi bạn gõ ls -l trong terminal, bạn sẽ thấy một chuỗi ký tự như -rwxr-xr--

Nó được chia thành 3 nhóm đối tượng:

  1. Owner (u): Chủ sở hữu file (thường là người tạo ra nó).
  2. Group (g): Nhóm người dùng được gán quyền chung với file.
  3. Others (o): Tất cả những người dùng khác trong hệ thống.

Mỗi nhóm có 3 loại quyền cơ bản:

Quyền Ký hiệu Giá trị số Ý nghĩa (với File) Ý nghĩa (với Thư mục)
Read r 4 Được xem nội dung file. Được liệt kê file bên trong (ls).
Write w 2 Được sửa, xóa nội dung file. Được thêm, xóa file bên trong.
Execute x 1 Được chạy file (nếu là script/app). Được truy cập vào thư mục (cd).
None - 0 Không có quyền gì. Không truy cập được.

2. Hai cách sử dụng chmod

Có hai cách để thay đổi quyền: Dùng Chế độ Số (Octal) hoặc Chế độ Ký tự (Symbolic).

Cách 1: Chế độ Số (Octal Mode) - Phổ biến nhất

Bạn cộng các giá trị số (4, 2, 1) lại để ra quyền mong muốn cho từng nhóm (Owner - Group - Others).

🚩Công thức: chmod [SốOwner] [SốGroup] [SốOther] [TênFile]

Các lệnh thường dùng:

  • chmod 777 file.txt: Trao toàn quyền cho tất cả mọi người (⚠️ Rủi ro bảo mật, hạn chế dùng).

  • chmod 755 script.sh: Chủ sở hữu được toàn quyền; Nhóm và Người khác chỉ được đọc và chạy (Thường dùng cho Web server hoặc script).

  • chmod 644 file.txt: Chủ sở hữu đọc/ghi; Người khác chỉ được đọc (Chuẩn cho file văn bản).

  • chmod 600 key.pem: Chỉ chủ sở hữu được đọc/ghi (Thường dùng cho SSH Key, file mật).

Cách 2: Chế độ Ký tự (Symbolic Mode) - Dễ nhớ

Dùng các ký tự để thêm hoặc bớt quyền cụ thể mà không cần tính toán số.

Cú pháp: chmod [Đốitượng][Toántử][Quyền] [TênFile]

  • Đối tượng: u (user), g (group), o (others), a (all - tất cả).
  • Toán tử: + (thêm quyền), - (bớt quyền), = (gán đúng quyền này).

Ví dụ:

  • chmod +x script.sh: Thêm quyền chạy (execute) cho tất cả mọi người.
  • chmod u+w file.txt: Thêm quyền ghi (write) cho chủ sở hữu (user).
  • chmod g-r file.txt: Xóa quyền đọc (read) của nhóm (group).
  • chmod o=r file.txt: Đặt quyền của người khác (others) chỉ là đọc (bất kể trước đó là gì).

3. Tùy chọn quan trọng: Đệ quy (-R)

Khi bạn muốn thay đổi quyền cho một thư mục và tất cả các file/thư mục con bên trong nó, bạn cần dùng tham số -R (Recursive).

chmod -R 755 /var/www/html

⚠️Lưu ý: Hãy cực kỳ cẩn thận khi dùng -R với quyền 777 hoặc dùng trên các thư mục hệ thống, vì nó có thể làm hỏng bảo mật của toàn bộ server.

Bảng tóm tắt nhanh (Cheat Sheet)

Mục đích Lệnh cần nhớ Ví dụ
Biến file thành file chạy được chmod +x file Thêm quyền execute.
File cấu hình web/public chmod 644 file Owner sửa được, người ngoài chỉ xem.
Thư mục web/public chmod 755 folder Ai cũng vào xem được, nhưng không sửa được.
File bí mật (SSH key, password) chmod 600 file Chỉ mình bạn xem và sửa được.
Cấm tất cả mọi người (trừ root) chmod 000 file Khóa file hoàn toàn.

4. Lệnh chown (Change Owner) - "Người anh em" của chmod

Nếu chmod quy định quyền hạn (làm được gì), thì chown quy định danh phận (ai là chủ).

  • Tại sao cần: Khi bạn copy file từ máy tính lên server (hoặc dùng Docker mount volume), file thường bị gán nhầm chủ sở hữu là root, khiến ứng dụng của bạn (ví dụ user app-user) không đọc/ghi được, gây lỗi "Permission denied".

  • Cú pháp: chown [Chủmới]:[Nhómmới] [TênFile]

Ví dụ thực tế:

chown tomcat:developers app.jar: Chuyển quyền sở hữu file app.jar cho user tên là tomcat thuộc nhóm developers.

chown -R www-data:www-data /var/www/html: Chuyển quyền sở hữu toàn bộ thư mục web và file con bên trong (đệ quy -R) cho user www-data.

Phần 5. Nhóm lệnh Debug và Soi log (Log Monitoring)

"Soi log" (Log monitoring) là kỹ năng sinh tồn quan trọng nhất. Log không chỉ là file text, nó là "hộp đen" ghi lại toàn bộ sự việc.

Dưới đây là tổng hợp các cách xem log từ cơ bản đến "Pro", được chia theo mục đích sử dụng để bạn chọn cách nhanh nhất cho tình huống của mình.

1. Lệnh tail -f (Kinh điển)

  • Cú pháp: tail -f /var/log/syslog

  • Biến thể hay hơn: tail -n 100 -f file.log

    • -n 100: Hiện sẵn 100 dòng cuối cùng trước khi bắt đầu theo dõi tiếp (để nắm ngữ cảnh trước đó).
  • Ưu điểm: Đơn giản, có sẵn trên mọi Linux.

Tuy nhiên nếu chưa tail thôi thì chưa đủ, bạn đã có thể xem được log rồi giờ muốn lọc nội dung thì sao. Hãy kết hợp tail với cặp bài trùng của nó grep

Khi kết hợp lại bằng dấu gạch đứng | (gọi là Pipe), nó tạo ra sức mạnh cực lớn: "Livestream log nhưng chỉ hiện những dòng quan trọng".

  • Cú pháp: tail tail -f catalina.out | grep "ERROR"

    • Màn hình sẽ đứng yên, chỉ khi nào có chữ "ERROR" xuất hiện trong file log thì nó mới hiện lên.

Nâng cao hơn sẽ lọc lỗi kèm ngữ cảnh (cái này quan trọng).

Nếu chỉ hiện mỗi dòng "ERROR NullPointerException" thì bạn sẽ không biết lỗi do đoạn code nào gây ra. Bạn cần xem cả stack trace (các dòng xung quanh lỗi đó).

Hãy dùng tham số -C (Context) , -B (Before) , hoặc -A (After) của grep.

  • tail -f app.log | grep -A 10 "Exception"

    • -A 10: Hiện dòng lỗi + 10 dòng phía sau nó (để xem nguyên nhân)
  • tail -f file.log | grep -C 5 "ERROR"

    • -C 5: Hiện thêm 5 dòng trên và 5 dòng dưới của dòng lỗi để hiểu nguyên nhân (Context).

Đôi khi log bắn ra quá nhiều dòng vô nghĩa (ví dụ: health check từ load balancer cứ 1 giây 1 lần), che mất nội dung chính. Bạn dùng grep -v để ẩn những dòng đó đi.

  • tail -f access.log | grep -v "HealthCheck"

    • Xem log nhưng ĐỪNG hiện các dòng chứa chữ "HealthCheck"

Lưu ý nhỏ cho Pro

Khi dùng tail với grep, đôi khi log sẽ bị trễ (delay) một chút do cơ chế đệm (buffer) của Linux. Để log hiện ra ngay lập tức, hãy thêm --line-buffered:

  • tail -f app.log | grep --line-buffered "ERROR"

2. Lệnh less (Trình đọc mạnh mẽ nhất)

  • Cú pháp: less file.log

  • Các phím tắt "Thần thánh" trong less:

    • Shift + G: Nhảy ngay xuống cuối file (xem log mới nhất).

    • g: Nhảy lên đầu file.

    • /keyword: Tìm kiếm từ khóa (ví dụ gõ /Exception).

    • n: Tìm kết quả tiếp theo.

    • Shift + F: Chuyển sang chế độ tail -f ngay bên trong less (vừa xem cũ, vừa chờ mới). Bấm Ctrl+C để quay lại xem cũ.

3. Xem log của Systemd

Với các server hiện đại (Ubuntu 20.04+, CentOS 7+), log không phải lúc nào cũng nằm trong file text mà được quản lý bởi journald.

Xem log của một service cụ thể: journalctl -u nginx (hoặc journalctl -u my-java-app)

  • Xem log realtime (giống tail -f): journalctl -u nginx -f

  • Xem log từ lúc khởi động lại máy đến giờ: journalctl -b

  • Xem log ngược (Mới nhất nằm trên cùng): journalctl -r

4. Xem Log Docker (Vì bạn đang dùng Docker)

Nếu bạn triển khai ứng dụng qua Docker container.

  • Xem log hiện tại: docker logs [containerid]

  • Xem log realtime: docker logs -f [containerid]

  • Xem 50 dòng cuối và follow: docker logs --tail 50 -f [containerid] (Đây là lệnh dùng nhiều nhất).

5. Công cụ "Hạng nặng" (Tool cài thêm) - Dành cho Pro

Nếu bạn được quyền cài phần mềm lên server, hãy thử cài lnav.

  • Lệnh: lnav file.log

  • Tại sao nó "đỉnh":

    • Tự động tô màu log (Error đỏ, Warn vàng, Info xanh).

    • Tự động phân giải định dạng ngày tháng, JSON, XML.

    • Có thể gõ SQL để query log (Ví dụ: SELECT * FROM log WHERE status = 500).

    • Gộp nhiều file log vào một màn hình xem chung theo thời gian.

Phần 6: Kết bài

Linux không hề khô khan hay đáng sợ, nó chỉ đòi hỏi sự chính xác. Với bộ 'Survival Kit' này trong tay, bạn đã có đủ vốn liếng để sinh tồn: biết mình đang ở đâu, biết cách sửa file và biết cách tìm ra nguyên nhân khi hệ thống gặp lỗi. Lời khuyên cuối cùng của tôi: Đừng chỉ đọc, hãy mở Terminal lên và thử ngay (tốt nhất là trên máy ảo hoặc môi trường Dev). Sai thì sửa, hỏng thì cài lại – đó là cách nhanh nhất để trưởng thành. Happy Coding & Safe Deploying!

"Bạn còn biết câu lệnh 'cứu cánh' nào khác không? Hãy comment bên dưới để anh em cùng học hỏi nhé!"


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí