Linux Là Gì và Vì Sao Developer Nên Học

K
Kai··5 min read

Trong series này chúng ta học Linux qua dòng lệnh, theo hướng thực dụng cho developer và DevOps. Trước khi gõ lệnh đầu tiên, bài này trả lời: Linux là gì, vì sao nên học, và ta sẽ thực hành ở đâu khi máy bạn là Mac hay Windows.

Linux là gì: nhân và distro

"Linux" theo nghĩa chính xác chỉ là nhân (kernel) — phần lõi quản lý phần cứng, tiến trình, bộ nhớ, hệ thống file. Bản thân nhân không dùng trực tiếp được; nó cần thêm các công cụ, shell, trình quản lý gói... xung quanh.

Một distro (distribution) là nhân Linux đóng gói cùng tất cả thứ đó thành một hệ điều hành hoàn chỉnh. Bạn nghe nhiều tên — Ubuntu, Debian, Fedora, Alpine, Arch — đó là các distro. Chúng dùng chung nhân Linux nhưng khác nhau ở công cụ đi kèm, trình quản lý gói, lịch cập nhật.

Với người mới, điều cần nhớ: kỹ năng dòng lệnh bạn học gần như giống nhau giữa các distro. Khác biệt chủ yếu nằm ở cách cài phần mềm (Bài 8). Nắm chắc một distro thì chuyển sang distro khác rất nhanh.

Vì sao developer và DevOps phải biết Linux

Lý do rất thực tế: gần như mọi nơi code của bạn chạy đều là Linux.

  • Server: phần lớn web server, database, dịch vụ cloud chạy trên Linux.
  • Container: như đã thấy trong series Docker — container Linux chạy trên nhân Linux. Image base phổ biến (Ubuntu, Alpine) đều là Linux.
  • Cloud: instance EC2, máy ảo trên mọi nhà cung cấp, mặc định và rẻ nhất là Linux.
  • CI/CD: runner build/test (như GitHub Actions ubuntu-latest) chạy Linux.

Bạn có thể code trên Mac hay Windows, nhưng khi deploy, gỡ lỗi production, vào server xử lý sự cố — bạn đối mặt với một dấu nhắc dòng lệnh Linux. Không biết Linux thì kẹt ngay ở bước đó.

Triết lý Unix: vì sao dòng lệnh Linux mạnh

Linux kế thừa triết lý từ Unix, và hiểu nó giúp bạn dùng dòng lệnh hiệu quả thay vì học vẹt từng lệnh:

  • Mỗi công cụ làm tốt một việc. grep chỉ tìm kiếm, sort chỉ sắp xếp, wc chỉ đếm. Không có công cụ "làm tất cả".
  • Ghép các công cụ nhỏ lại để giải việc lớn. Bạn nối đầu ra của lệnh này vào đầu vào của lệnh kia (pipe, Bài 5) để tạo ra thao tác phức tạp từ các mảnh đơn giản.
  • Mọi thứ là file. Văn bản, thiết bị, thậm chí thông tin tiến trình và phần cứng đều được biểu diễn như file mà bạn đọc/ghi bằng các lệnh thông thường (Bài 2).

Vì vậy học Linux không phải là nhớ vài trăm lệnh, mà là nắm một số ít công cụ cốt lõi và cách ghép chúng. Series đi theo hướng đó.

Thực hành ở đâu: một container Linux

Bạn đang dùng Mac hoặc Windows? Không sao. Cách gọn nhất để có một Linux thật để nghịch là chạy nó trong một container Docker — đúng công cụ ta đã học. Container cho bạn một Ubuntu đầy đủ trong vài giây, nghịch thoải mái, hỏng thì xóa tạo lại, không đụng gì tới máy thật.

Nếu chưa có Docker, xem lại Bài 3 của series Docker để cài. Có rồi thì mở một Ubuntu để thử ngay:

docker run -it --name linuxlab ubuntu:24.04 bash

Bạn vừa vào một shell Linux. Thử:

cat /etc/os-release | grep PRETTY_NAME
uname -sr
PRETTY_NAME="Ubuntu 24.04 LTS"
Linux 6.12... 

exit để ra. Bài 1 sẽ dựng môi trường thực hành này bài bản hơn (giữ dữ liệu, cài công cụ) và làm quen shell.

Vài chủ đề ở cuối series — như systemd (Bài 15) và cron (Bài 17) — là các dịch vụ nền, không chạy mặc định trong container thường. Tới đó mình sẽ chỉ cách bật chúng trong container, hoặc gợi ý dùng một máy ảo Linux nếu bạn muốn môi trường đầy đủ. Phần lớn series chạy ngon trong container.

Lộ trình của series

  1. Dựng môi trường Linux và làm quen shell — container thực hành, dấu nhắc, lệnh đầu tiên.
  2. Hệ thống file và FHS — cây thư mục Linux, "mọi thứ là file", di chuyển.
  3. Thao tác file và thư mục — tạo, copy, di chuyển, xóa, tìm file.
  4. Trình soạn thảo: nano và vim — sửa file ngay trên terminal.
  5. Đọc và xử lý văn bản — cat, less, grep, sed, awk, sort...
  6. Pipe, redirect và luồng dữ liệu — nối lệnh, stdin/stdout/stderr.
  7. Quyền truy cập — user/group, chmod, chown, và cơ chế rwx.
  8. Tiến trình và tín hiệu — ps, top, kill, signal, job nền.
  9. Nén và giải nén — tar, gzip, zip; backup và gói file.
  10. Ổ đĩa và dung lượng — df, du, lsblk, mount.
  11. Quản lý gói phần mềm — apt, dnf, apk; cài và gỡ phần mềm.
  12. User, group và sudo — quản lý người dùng và quyền quản trị.
  13. Mạng cơ bản trên Linux — ip, ss, cổng, DNS, kiểm tra kết nối.
  14. SSH và truyền file — kết nối server từ xa, key, scp, rsync.
  15. systemd và dịch vụ — quản lý service, log với journalctl.
  16. Shell scripting — viết script bash: biến, điều kiện, vòng lặp, hàm.
  17. Cron và tác vụ định kỳ — tự động chạy lệnh theo lịch, và tổng kết.

Cần chuẩn bị

  • Docker đã cài (làm môi trường Linux). Hoặc, nếu bạn đã có sẵn một máy Linux/VPS, dùng thẳng cũng được.
  • Quen mở terminal và gõ lệnh ở mức cơ bản.
  • Không cần biết trước gì về Linux.

Hết bài này chưa cần làm gì. Bài 1 ta dựng môi trường thực hành và làm quen với shell — nơi mọi thứ còn lại của series diễn ra.