Cửa sổ để bạn nói chuyện với hệ điều hành — mỗi lần một dòng. Mọi thứ bạn chạy, triển khai hay gỡ lỗi đều bắt đầu từ đây.
← / → để chuyển slide · chuyển EN/VI bên dưới
Một cửa sổ văn bản để bạn nói chuyện với hệ điều hành, mỗi lần một dòng — không nút bấm, không chuột.
Một dòng chữ + Enter = một lệnh. Hệ điều hành làm đúng yêu cầu của bạn, rồi in ra kết quả.
Shell (bash, zsh) đọc dòng của bạn và chỉ cho hệ điều hành phải làm gì. Terminal chỉ là cửa sổ hiển thị.
cd, ls, grep — vài từ ngắn ghép lại thành bất cứ thứ gì. AI sẽ viết các lệnh dài cho bạn.
Không undo, không 'bạn có chắc không?' — hệ điều hành làm đúng những gì bạn gõ. Chính xác chính là kỹ năng.
Mỗi lệnh bắt đầu bằng prompt: bạn là ai, máy nào, và đang đứng ở thư mục nào.
Mọi thứ trên server là file, xếp trong các thư mục lồng nhau như nhánh cây. Bạn luôn đứng trong một thư mục nào đó.
Đường dẫn chỉ là một địa chỉ. '/' là gốc của cái cây; đường dẫn là một hành trình đi xuống.
/home/student ← your home folder
├── projects
│ └── app
│ ├── index.py
│ └── config.yml
├── notes
│ └── ideas.md
└── .ssh ← dotfolder (hidden)
/home/student/projects/app ← absolute: full address from /
projects/app ← relative: from where you stand
Đường dẫn tuyệt đối bắt đầu từ gốc; tương đối bắt đầu từ chỗ bạn đang đứng.
Hai cách chỉ cùng một file. Tuyệt đối không bao giờ sai; tương đối ngắn hơn nhưng phụ thuộc chỗ bạn đứng.
Bắt đầu từ /: /home/student/notes/ideas.md. Hoạt động dù bạn đứng ở đâu.
notes/ideas.md nghĩa là 'thư mục notes ngay cạnh chỗ tôi đang đứng'.
~ là viết tắt của /home/<bạn>. ~/notes giúp bạn khỏi phải gõ địa chỉ đầy đủ.
Tương đối cho việc nhanh cục bộ; tuyệt đối khi phải chạy từ mọi nơi (cấu hình, script).
Tên lệnh là những từ tiếng Anh rút gọn — đó là mẹo nhớ: pwd = in thư mục đang làm việc, cd = thay đổi thư mục, ls = liệt kê.
pwd sau mỗi bước — xem địa chỉ thay đổi. Đó là toàn bộ kỹ năng: luôn biết mình đang ở đâu.
Shell giữ một con trỏ: thư mục bạn đang đứng. Đa số lệnh mặc định tác động lên nó.
. = đứng yên, .. = lên một bậc, ~ = về nhà, / = gốc. Đó là toàn bộ cách di chuyển bạn cần.
Gõ notes.md, shell tự tìm trong thư mục hiện tại — khỏi cần địa chỉ đầy đủ.
Bạn không 'chạy chương trình trên server' — bạn là người đi bộ qua các thư mục, mở cửa dọc đường.
Mất đường? pwd cho biết chính xác bạn ở đâu. Lệnh được gõ lại nhiều nhất thế gian.
Năm động từ đáp ứng gần như mọi thao tác với file — và tên lệnh lại là manh mối: tạo, chạm, chép, di chuyển, xóa.
Một phiên quản lý file trọn vẹn — đó là toàn bộ bộ công cụ.
Lỗi nhầm kinh điển: sau mv, file gốc biến mất. Sau cp, nó vẫn còn đó.
cp a b → cả a và b đều tồn tại. File gốc còn nguyên; b là bản sao độc lập (sửa cái này, cái kia không đổi).
mv a b → chỉ còn b. File gốc biến mất. mv cũng là lệnh đổi tên: mv old.html new.html.
Cùng động từ, thêm sức mạnh thư mục: -p xây đường dẫn lồng nhau, -r chép cả thư mục, và mv có thể thả file vào thư mục.
Trên server không có thùng rác. Lệnh bạn gõ là lời phán cuối cùng.
rm xóa dữ liệu ngay lập tức và vĩnh viễn. Không có nút 'khôi phục'.
Với -r nó nuốt chửng cả thư mục và mọi thứ bên trong, đệ quy. Sai một ký tự khi đang ở xa nhà rất đắt.
Dừng lại, đọc to lệnh, kiểm tra đường dẫn. Ngón tay bạn nhanh hơn phán đoán của bạn.
Cờ -i buộc rm hỏi 'chắc không?' trước mỗi lần xóa. Một thói quen rất tốt khi đang học.
Công việc hằng ngày của terminal: nhìn vào trong file và xem các chương trình viết log.
Tên lệnh chính là mẹo nhớ: head và tail là hai đầu của file. cat cho file nhỏ, tail cho cái mới, grep để tìm.
| Lệnh | Vì sao có tên đó — và nó cho bạn gì |
|---|---|
| cat file | 'concatenate' (gộp lại) — in ra cả file, từ đầu đến cuối. Cho file ngắn. |
| head file | 'đầu' của file — 10 dòng đầu. File này bắt đầu bằng gì? |
| tail file | 'đuôi' của file — 10 dòng cuối, nơi nội dung mới nhất. |
| tail -f file | Chế độ trực tiếp: in dòng mới khi chúng xuất hiện. Đây là cách bạn xem log. |
| grep err file | Tìm kiếm — giữ lại chỉ những dòng chứa 'err'. Từ 'get regular expression'. |
| less file | 'less' (ít hơn) — lật trang file lớn bằng phím mũi tên; q để thoát. |
Siêu năng lực của người ship: mở tail -f lên một log và mọi dòng mới hiện ra ngay lúc được ghi. Ctrl-C để dừng.
Khi có thứ hỏng, bạn không đọc 10.000 dòng — bạn lấy 20 dòng cuối, rồi grep những dòng đáng đau.
Gần như mọi 'hỏng rồi' trong khóa học này đều được giải bằng đúng vòng lặp này.
tail -f lên log trước khi thay đổi gì. Xem ứng dụng thực sự đang làm gì.
Kích hoạt lỗi (bấm nút, gửi request) và xem dòng log hiện ra trực tiếp.
Ctrl-C, rồi grep log tìm lỗi: grep 500 access.log. Cô lập những dòng xấu.
Sửa code (AI giúp), khởi động lại, tail -f lần nữa — 500 biến mất, 200 vào liên tục.
Chỉ cần mô hình tư duy: output của một lệnh chảy vào lệnh kế tiếp — hoặc vào một file.
Một ý duy nhất: mọi lệnh đều in ra text, và bốn ký tự này lái text đến chỗ hữu dụng. Xem nó xảy ra ở những slide tiếp theo.
cmd1 | cmd2 — output của cmd1 thành input của cmd2. Mẫu dùng hằng ngày: cat file | grep word.
ls > out.txt — bắt output vào file (ghi đè phần cũ).
ls >> out.txt — thêm vào cuối mà không xóa. Log lớn lên nhờ nó.
Lệnh in lỗi qua một kênh riêng. 2> err.log bắt riêng phần lỗi vào file.
Mỗi lệnh đều in ra text; | đưa text đó cho lệnh kế tiếp. Mẫu kinh điển: cat file | grep word.
Trước khi có pipe, nối chuỗi nghĩa là phải loay hoay với các file tạm. Pipe xóa bỏ bước trung gian.
Mỗi pipe đưa text cho lệnh kế tiếp. Ba công cụ xếp hàng, bạn đã viết một truy vấn — không cần lập trình.
Mũi tên chỉ nơi text đi: > ghi (và ghi đè), >> nối thêm, 2> bắt kênh lỗi.
Cỗ máy vận động dưới ngón tay bạn thế nào — và cửa sổ này đưa bạn đi đâu trong phần còn lại của khóa học.
30 giây để xem qua cỗ máy đằng sau mỗi lệnh.
ls, git, docker — mỗi thứ là một file thực thi nhỏ nằm đâu đó trên đĩa. Bạn chỉ đang nhờ hệ điều hành chạy nó.
Danh sách các thư mục mà shell đi tìm. Đó là lý do bạn gõ git thay vì /usr/bin/git — ở bất cứ đâu.
stdout = kết quả, stderr = lỗi. Đó chính là lý do 2> tồn tại — bạn có thể chỉ bắt riêng phần lỗi.
Mỗi lệnh kết thúc bằng một mã thoát: 0 = ổn, khác 0 = lỗi. Bạn (và script) kiểm tra nó.
Không có cánh cửa thứ hai vào máy. Mọi 'công cụ' bạn sẽ dùng đều chỉ là một lệnh chạy trong cửa sổ này.
…đều chỉ là lệnh trong terminal của bạn. Cùng cửa sổ, cùng prompt, cùng nhịp một dòng mỗi lần.
Mỗi ngày sau — container, web server, HTTPS — là bạn gõ vài dòng ở đây và đọc kết quả.
Bạn sẽ dán lệnh do AI đưa. Kỹ năng là biết mỗi dòng để làm gì — và nhận ra khi output nói dối.
Terminal không giấu việc nó làm: nó in ra chuyện gì đã xảy ra. Biết đọc nó, không gì làm bạn ngạc nhiên.
Bạn sẽ gặp những lệnh này trong những ngày tới — tất cả đều chỉ là lệnh trong cùng cửa sổ này.
| Lệnh | Vai trò trong khóa học |
|---|---|
| docker compose up -d | Khởi động cả stack (app, database…) thành container. |
| nginx -t | Kiểm tra cấu hình hợp lệ trước khi reload. |
| git pull | Lấy code mới nhất từ repo. |
| curl http://localhost/ | Hỏi chính server của bạn một trang — cách thử 'nó còn sống không?' nhanh nhất. |
| systemctl status nginx | Dịch vụ có đang chạy không? Từ khi nào? Đang làm gì? |
Mở một terminal, gõ pwd, và bắt đầu đi. Mọi công cụ trong khóa học này đều sống trong cửa sổ đó.