ProgrammingSố chữ 6150Thời gian đọc16 phút

Hướng dẫn cơ bản về dòng lệnh terminal: từ ls, cd, mkdir đến Bash, Git và triển khai công cụ AI

Một hướng dẫn nhập môn terminal dành cho người mới bắt đầu, giải thích các khái niệm cơ bản về Terminal, Shell, Bash, Zsh, đường dẫn, lệnh ls, cd, mkdir, git clone, npm run dev.

Rất nhiều người lần đầu tiếp xúc với dòng lệnh terminal đều thấy nó như một "cửa sổ hacker": không có nút, không có biểu tượng, chỉ toàn lệnh tiếng Anh nối nhau. Đặc biệt khi làm việc với GitHub, Vercel, Node.js, Python, Claude Code, Codex hay các dự án AI Agent, các tài liệu thường xuất hiện các lệnh như lscdmkdirgit clonenpm installnpm run dev, khiến người mới dễ nản.

Nhưng command line không hề bí ẩn như vậy. Về bản chất, nó chỉ là một cách vận hành máy tính khác: thay vì dùng chuột để mở thư mục, tạo file, di chuyển file, mở dự án như bình thường, bạn dùng lệnh bằng chữ để thực hiện những thao tác tương tự.

Bài viết này sẽ giải thích theo hướng trực quan nhất về terminal, Shell, Bash, Zsh, đường dẫn, các lệnh phổ biến, và mối liên hệ giữa chúng với GitHub, Vercel, Python, Node.js và triển khai công cụ AI. Khi nắm các khái niệm này, việc đọc tài liệu open-source, hướng dẫn triển khai website, hay tài liệu của AI tools sẽ nhẹ nhàng hơn rất nhiều.

Một, Terminal, Shell, Bash, Zsh là gì?

Trước khi học command line, cần tách bạch một vài khái niệm thường bị nhầm lẫn.

TênCó thể hiểu như thế nàoGiải thích
Terminal / Dòng lệnhCửa sổ nhập lệnhGiao diện dòng lệnh bạn mở trên Mac, Linux hoặc Windows
ShellChương trình giải thích lệnhChịu trách nhiệm hiểu lệnh bạn nhập rồi giao cho hệ thống thực thi
BashMột loại Shell phổ biếnNhiều tutorial Linux mặc định dùng Bash
ZshMột loại Shell khácTrên macOS hiện nay phổ biến hơn là Zsh
PowerShellShell phổ biến trên WindowsMột trong những môi trường dòng lệnh hiện đại trên Windows
Git BashMôi trường mô phỏng lệnh kiểu Unix trên WindowsThường có sau khi cài Git for Windows, phù hợp chạy nhiều lệnh trong tutorial GitHub

Hiểu nhanh như sau:

Bạn nhập lệnh trong Terminal, Shell chịu trách nhiệm diễn giải lệnh, rồi hệ điều hành mới thực thi.

Vì vậy, khi nhiều tutorial nói "mở Bash để chạy lệnh", với người mới có thể hiểu tạm:

Mở terminal, rồi nhập các lệnh này.

Lưu ý rằng môi trường dòng lệnh giữa các hệ điều hành có khác nhau một chút. Những lệnh như ls, cd, mkdir, rm trong tutorial Mac/Linux không phải lúc nào cũng giống hệt trên PowerShell của Windows; nhưng nếu dùng Git Bash, WSL hoặc môi trường kiểu Unix thì các lệnh này thường gần với hướng dẫn Mac/Linux hơn.

Hai, Bash thực chất là gì? Vì sao tutorial cứ nhắc tới nó?

Bash là viết tắt của Bourne Again Shell, một trình thông dịch lệnh rất phổ biến. Nhiều máy chủ Linux, tutorial triển khai, README của project open-source đều mặc định dùng Bash hoặc cú pháp Shell gần Bash.

Những cách viết bạn thấy trong tutorial thường liên quan đến thói quen của Bash:

cd my-project && npm install
export OPENAI_API_KEY="your_api_key"
python main.py --input data.txt

Vai trò của Bash không phải để lập trình phức tạp như viết code, mà giúp bạn gộp nhiều thao tác hệ thống lại: vào thư mục dự án, cài dependency, đặt biến môi trường, chạy script, xem log, triển khai dự án.

Với người mới, không cần học ngay Bash script toàn diện. Ban đầu chỉ cần nắm vững mấy nhóm sau là đủ:

  • Cách chuyển thư mục;
  • Cách xem file;
  • Cách tạo, sao chép, di chuyển, xóa file;
  • Cách chạy chương trình;
  • Cách hiểu tham số và tuỳ chọn;
  • Cách đọc các ký hiệu như &&|>>>;
  • Cách nhận biết một lệnh có nguy hiểm hay không.

Khi đã quen các nền tảng này rồi, việc học biến, vòng lặp, điều kiện, và file script sẽ không còn gấp gáp nữa.

Ba, cấu trúc cơ bản của command line

Một lệnh đầy đủ thường gồm ba phần:

command [options] [arguments]

Ví dụ:

ls -la ~

Có thể tách như sau:

PhầnVí dụÝ nghĩa
Lệnh CommandlsHành động cần thực hiện
Tuỳ chọn Options-laThay đổi hành vi của lệnh
Đối số Arguments~Đối tượng mà lệnh tác động

Lấy thêm ví dụ:

mkdir -p images/icons

Nghĩa là: tạo đường dẫn thư mục images/icons; nếu thư mục images chưa có thì cũng tạo luôn.

Nhiều người mới ngại command line vì xem cả dòng lệnh như một chuỗi tiếng Anh khó hiểu. Thực chất chỉ cần tách ra, thường đọc được như sau:

python main.py --input data.txt --output result.md

Lệnh này có thể hiểu là:

  • python: chạy bằng Python;
  • main.py: file script cần chạy;
  • --input data.txt: file đầu vào là data.txt;
  • --output result.md: file đầu ra là result.md.

Bốn, đường dẫn: "địa chỉ" trong thế giới command line

Đường dẫn là vị trí của file hoặc thư mục trên máy.

Ví dụ trên Mac:

~/GitHub/LamjinlabWebsite

Nó giống như địa chỉ một thư mục:

用户主目录 ~
└── GitHub
    └── LamjinlabWebsite

Các ký hiệu đường dẫn thường gặp:

Ký hiệuÝ nghĩaVí dụ
/Dấu phân cách đường dẫn, cũng có thể là thư mục gốc/Users/yourname
~Thư mục chính của người dùng hiện tại~/Desktop
.Thư mục hiện tại./package.json
..Thư mục chacd ..

Ví dụ:

cd ..

Nghĩa là quay lên một cấp thư mục.

Ví dụ khác:

cd ~/GitHub/LamjinlabWebsite

Nghĩa là vào thư mục GitHub/LamjinlabWebsite dưới thư mục chính.

Nếu đường dẫn có khoảng trắng, nên đặt trong dấu nháy:

cd "My Projects"

Hoặc dùng dấu gạch chéo ngược để escape dấu cách:

cd My\ Projects

Với người mới, cách dùng dấu nháy trực quan hơn và ít lỗi hơn.

Năm, các lệnh cơ bản thường dùng

Đây là các lệnh mới nên học trước.

1. pwd: xem vị trí hiện tại

pwd = print working directory, nghĩa là in thư mục đang làm việc.

pwd

Ví dụ đầu ra:

/Users/yourname/GitHub/LamjinlabWebsite

Khi không chắc đang ở thư mục nào, gõ pwd trước.

2. ls: liệt kê file và thư mục

ls = list, nghĩa là liệt kê nội dung thư mục hiện tại.

ls

Cách dùng phổ biến:

ls -l

Hiển thị chi tiết.

ls -a

Hiển thị file ẩn.

ls -la

Hiển thị cả chi tiết và file ẩn.

File ẩn thường bắt đầu bằng . như:

.env
.gitignore
.DS_Store

Trong đó .env, .env.local thường dùng để lưu cấu hình nhạy cảm như API Key, địa chỉ database, nên không nên đưa lên GitHub bừa bãi.

3. cd: chuyển thư mục

cd = change directory, nghĩa là chuyển sang thư mục khác.

cd Desktop

Vào thư mục Desktop.

cd ..

Lên cấp cha.

cd ~

Quay về thư mục chính của người dùng hiện tại.

cd -

Quay về thư mục vừa rời đi trước đó.

Điểm này rất tiện khi bạn chuyển qua lại giữa các dự án.

4. mkdir: tạo thư mục

mkdir = make directory, nghĩa là tạo thư mục.

mkdir images

Tạo một thư mục tên images.

Cách viết phổ biến, an toàn hơn:

mkdir -p images/icons

Tác dụng của -p là: nếu đường dẫn trung gian chưa có thì tự tạo; nếu thư mục đã tồn tại thì không báo lỗi.

Ví dụ:

mkdir -p ~/ai-agent-workflow-ppt/images

Nghĩa là tạo đường dẫn:

~/ai-agent-workflow-ppt/images

Nếu ai-agent-workflow-ppt chưa tồn tại, nó cũng sẽ được tạo luôn.

5. touch: tạo file rỗng

touch thường dùng để tạo một file rỗng.

touch README.md

Lệnh này tạo file tên README.md.

Trong project website, bạn có thể thấy:

touch .env.local

Thông thường nghĩa là tạo file biến môi trường local để lưu cấu hình như API Key, địa chỉ database.

6. catlessheadtail: xem nội dung file

cat giúp xem nhanh nội dung file văn bản.

cat README.md

Nếu file ngắn, cat rất tiện; với file dài có thể dùng less để xem theo trang:

less README.md

Thao tác hay dùng: nhấn phím Space để lật trang, q để thoát.

Nếu chỉ muốn xem đầu file:

head README.md

Nếu chỉ muốn xem cuối file:

tail README.md

Khi xem log, tail rất thường gặp, ví dụ:

tail -f app.log

-f có nghĩa là theo dõi file liên tục, thường dùng để quan sát log chạy của chương trình.

7. cp: sao chép file hoặc thư mục

cp = copy, nghĩa là sao chép.

Sao chép file:

cp a.txt b.txt

Sao chép thư mục thường cần -r:

cp -r images images-backup

-r là copy đệ quy, tức là sao chép cả nội dung bên trong thư mục.

8. mv: di chuyển hoặc đổi tên

mv = move, nghĩa là di chuyển.

Đổi tên file:

mv old.md new.md

Di chuyển file:

mv article.md content/posts/ai/

Vì vậy mv có hai cách dùng phổ biến: di chuyển file và đổi tên file.

9. rm: xóa file hoặc thư mục

rm = remove, nghĩa là xóa.

Xóa file:

rm test.txt

Xóa thư mục:

rm -r test-folder

Người mới cần hết sức cẩn thận với rm, đặc biệt là:

rm -rf some-folder

-r là xóa đệ quy, -f là xóa cưỡng bức. Lệnh này không đưa file vào thùng rác như GUI, mà xóa trực tiếp, nên phải kiểm tra đường dẫn kỹ trước khi chạy.

10. echo: in chuỗi ký tự

echo dùng để in một đoạn văn bản, thường kết hợp > hoặc >> để ghi vào file.

echo "hello"

Kết quả:

hello

Ghi vào file:

echo "hello" > test.txt

Dòng này ghi hello vào test.txt.

Sáu, mẹo tương tác thường dùng

1. Tự động hoàn thành bằng Tab

Sau khi nhập một phần lệnh hoặc tên file, nhấn Tab, terminal sẽ cố gắng tự động hoàn tất.

Ví dụ trong thư mục hiện tại có folder:

LamjinlabWebsite

Bạn có thể nhập:

cd Lam

Rồi nhấn Tab, hệ thống có thể tự điền thành:

cd LamjinlabWebsite

2. Dùng phím mũi tên lên/xuống xem lịch sử lệnh

Nhấn để lấy lệnh trước, nhấn để đi về phía sau.

Rất hữu ích khi phải chạy lại nhiều lệnh, ví dụ:

npm run dev

Nếu lệnh này vừa chạy gần đây, bấm sẽ lấy lại ngay, không cần gõ lại.

3. Ctrl + C để dừng chương trình

Nếu một lệnh chạy mãi hoặc bạn muốn dừng chương trình hiện tại, nhấn:

Ctrl + C

Ví dụ server dev local, script Python, chương trình Node.js đều có thể dừng bằng cách này.

4. clear xóa màn hình

Nếu nội dung terminal quá nhiều, nhập:

clear

Để làm sạch khu vực hiển thị hiện tại.

5. history xem lịch sử lệnh

Khi cần tìm lại các lệnh đã chạy:

history

Nó sẽ liệt kê một loạt lịch sử. Người mới có thể dùng để rà lại mình vừa làm gì.

Bảy, giải thích các ký hiệu thường gặp

1. &&: chạy lệnh tiếp theo nếu lệnh trước thành công

Ví dụ:

mkdir -p images && ls

Nghĩa là: tạo thư mục images trước, nếu thành công mới chạy ls để xem nội dung thư mục hiện tại.

2. ;: luôn chạy lệnh sau, bất kể lệnh trước thành công hay không

Ví dụ:

mkdir images; ls

Nghĩa là: thử tạo thư mục images, rồi chạy ls; kể cả khi bước trước lỗi, bước sau vẫn có thể tiếp tục chạy.

Vì vậy khi cài dependency hoặc triển khai dự án, nên ưu tiên hiểu && vì nó nhấn mạnh "bước trước thành công mới vào bước tiếp".

3. |: toán tử pipe

Pipe sẽ đưa kết quả đầu ra của lệnh trước cho lệnh sau xử lý tiếp.

Ví dụ:

ls | grep "mdx"

Nghĩa là: liệt kê nội dung thư mục rồi lọc ra các dòng chứa mdx.

4. >>>: chuyển hướng output

> ghi output vào file và ghi đè nội dung cũ:

echo "hello" > test.txt

>> thêm output vào cuối file:

echo "world" >> test.txt

Người mới cần lưu ý: > sẽ ghi đè nội dung, nên hãy kiểm tra trước khi dùng.

5. *: ký tự đại diện

* đại diện cho nhiều ký tự.

Ví dụ:

ls *.md

Nghĩa là liệt kê tất cả file có đuôi .md trong thư mục hiện tại.

Ví dụ khác:

rm *.log

Nghĩa là xóa toàn bộ .log trong thư mục hiện tại. Lệnh này có rủi ro xóa nên hãy xác nhận kỹ vị trí trước khi chạy.

Tám, hiểu lệnh qua ví dụ thực tế

Ví dụ bạn thấy một lệnh như:

mkdir -p ~/ai-agent-workflow-ppt/images && ls ~/ai-agent-workflow-ppt/

Có thể tách thành hai phần:

mkdir -p ~/ai-agent-workflow-ppt/images

Nghĩa là tạo thư mục images trong dự án.

ls ~/ai-agent-workflow-ppt/

Nghĩa là xem nội dung thư mục ai-agent-workflow-ppt.

Ký hiệu && ở giữa nghĩa là:

Lệnh tạo ở trước phải thành công mới thực hiện lệnh xem ở sau.

Như vậy cả lệnh có ý:

Đầu tiên tạo thư mục images, rồi xem nội dung thư mục dự án.

Các lệnh dạng này thường an toàn vì chỉ tạo thư mục và xem danh sách, không có thao tác xóa.

Chín, lệnh dòng lệnh và GitHub liên quan gì nhau?

GitHub là nền tảng lưu trữ của nhiều dự án open-source, còn Git là công cụ quản lý phiên bản. Dự án trên GitHub bạn nhìn thấy thường cần Git để tải về máy.

Lệnh phổ biến nhất là:

git clone https://github.com/example/project.git

Lệnh này nghĩa là sao chép repository GitHub từ xa về máy của bạn.

Sau khi tải, thường vào thư mục dự án:

cd project

Rồi xem file dự án:

ls

Nhiều README open-source viết:

git clone https://github.com/example/project.git
cd project
npm install
npm run dev

Người mới không nên copy toàn bộ rồi chạy một lần. Cách tốt hơn là hiểu từng dòng:

1. git clone: tải dự án; 2. cd project: vào thư mục dự án; 3. npm install: cài dependency; 4. npm run dev: khởi động server phát triển.

Như vậy bạn biết từng bước đang làm gì và dễ truy vết lỗi hơn.

Mười, command line và Node.js, npm liên quan thế nào?

Nhiều dự án web, dự án front-end, Next.js, Vercel đều dùng Node.js và npm.

npm có thể hiểu là công cụ quản lý package trong hệ sinh thái Node.js. Các công dụng phổ biến gồm cài dependency, chạy script, khởi tạo server phát triển, build dự án.

Các lệnh phổ biến:

npm install

Cài dependency dự án, thường đọc file package.json ở thư mục hiện tại.

npm run dev

Chạy script dev được định nghĩa trong package.json, thường dùng để khởi động local dev server.

npm run build

Chạy script build, thường để tạo bản production.

npm start

Chạy script start, hành vi tùy thuộc project định nghĩa trong package.json.

Vì vậy khi thấy npm run dev, bạn không cần chỉ nhớ máy móc. Hãy mở package.json xem ví dụ như:

{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start"
  }
}

Điều này có nghĩa là:

  • npm run dev thực thi thực chất là next dev;
  • npm run build thực thi thực chất là next build;
  • npm start thực thi thực chất là next start.

Nắm được điều này thì tutorial dự án frontend sẽ rõ hơn nhiều.

Mười một, command line và Python, AI tools liên quan gì?

Nếu bạn chỉ duyệt web, có thể không cần command line. Nhưng nếu muốn dùng thêm AI tools, project open-source và workflow tự động hóa, command line gần như không thể tránh.

Ví dụ:

python main.py

Dùng để chạy script Python.

python -m venv .venv

Dùng để tạo virtual environment của Python.

pip install -r requirements.txt

Dùng để cài dependency cho dự án Python.

vercel deploy

Dùng để triển khai dự án website.

claude

Có thể dùng để khởi chạy các công cụ CLI kiểu Claude Code, tùy cách cài đặt của bạn.

Nhiều dự án AI Agent, Claude Code, Codex, Cursor, Next.js, FastAPI, Vercel về bản chất đều nhờ command line để cài, chạy, debug và deploy.

Vì vậy học command line không phải để "trông có vẻ chuyên nghiệp", mà để thực sự kiểm soát project của mình.

Mười hai, lỗi người mới dễ mắc

1. Không biết đang ở thư mục nào

Giải pháp:

pwd

Xác nhận vị trí trước.

2. Gõ sai đường dẫn

Giải pháp: dùng nhiều hơn Tab autocomplete, giảm việc gõ tay đường dẫn dài.

3. Quên phân biệt chữ hoa/thường trong tên file

Nhiều hệ thống, chữ hoa/thường trong tên file ảnh hưởng đến thực thi lệnh.

Ví dụ:

README.md
readme.md

Chúng có thể được xem là hai file khác nhau.

4. Dùng sai lệnh xóa

Đặc biệt:

rm -rf

Cần xác nhận đường dẫn thật kỹ trước khi chạy, không copy nguyên văn lệnh lạ rồi thi hành ngay.

5. Copy lệnh lạ rồi chạy ngay

Đây là thói quen nguy hiểm nhất của người mới. Trước khi chạy bất kỳ lệnh nào, nên hiểu ít nhất ba câu:

  • Lệnh này có thể xóa file không?
  • Lệnh này có thể ghi đè file không?
  • Lệnh này có thể đẩy thông tin nhạy cảm ra ngoài không?

Nếu lệnh có rm -rf, sudo, curl ... | bash, chmod 777, >... thì càng cẩn trọng.

6. Không đọc thông báo lỗi

Nhiều lỗi đã chỉ rõ điểm sai. Ví dụ:

No such file or directory

Thường có nghĩa là file/thư mục không tồn tại, có thể do đường dẫn sai.

Permission denied

Thường có nghĩa là không có quyền thực thi hoặc truy cập.

command not found

Thường có nghĩa là lệnh không tồn tại, có thể do công cụ chưa cài hoặc biến môi trường chưa cấu hình.

EADDRINUSE

Hay gặp ở local dev server, nghĩa là port đã bị chiếm. Ví dụ port 3000 đã có một dự án đang chạy.

Mười ba, trình tự học gợi ý

Nếu bạn là người mới hẳn, mình gợi ý theo thứ tự:

1. Học trước pwdlscd, hiểu mình đang ở đâu; 2. Sau đó học mkdirtouchcpmv, hiểu cách tạo và di chuyển file; 3. Rồi học rm một cách thận trọng, biết cách xóa file nhưng không lạm dụng; 4. Tiếp theo học catlessheadtail, học xem file và log; 5. Tiếp tục học &&|>>>, hiểu cách ghép các lệnh; 6. Cuối cùng học git clonenpm installnpm run devpython main.py, đưa command line vào dự án thực tế.

Chỉ cần nắm các nội dung này, bạn đã có thể hiểu phần lớn lệnh cơ bản trong README của rất nhiều project GitHub.

Mười bốn, kết luận

Command line không phải huyền bí, cũng không phải công cụ cao cấp chỉ dành cho lập trình viên. Nó chỉ là một cách vận hành máy tính khác.

Bạn có thể hiểu như sau:

Giao diện đồ họa thao tác máy tính bằng chuột và nút bấm;
Dòng lệnh thao tác máy tính bằng chữ và chỉ thị.

Khi bạn đã thuộc các lệnh cơ bản như lscdmkdirpwdgit clonenpm run dev, việc học tiếp các tài liệu về GitHub, Vercel, Python, Node.js, Claude Code, AI Agent sẽ mạch lạc hơn nhiều.

Điều quan trọng không phải là nhớ hết lệnh một lần, mà là quen dần qua thực hành. Khi gặp lệnh không hiểu, hãy tách ra đọc: nó làm gì? Tuỳ chọn là gì? Mục tiêu tác động là ai? Như vậy command line sẽ không còn là một dãy ký tự lạ, mà trở thành công cụ bạn hiểu, kiểm soát và tái sử dụng được.

Câu hỏi thường gặp

Bài này phù hợp với trình độ nào?

Xem phần "đối tượng áp dụng" trong nội dung chính; chuyên mục Lập trình của trang này có bài từ cơ bản đến quy trình AI programming ở nhiều cấp độ, mỗi bài đều có nền tảng giả định khác nhau.

Công cụ hoặc lệnh trong bài có khác nhau giữa các hệ thống không?

Có. Môi trường terminal, định dạng đường dẫn và cú pháp lệnh trên macOS, Linux, Windows có khác biệt. Nếu bài không chỉ rõ hệ thống cụ thể, nên đối chiếu tài liệu chính thức để điều chỉnh.

Nên kết hợp học lập trình với công cụ AI nào?

Claude Code và Codex hiện là hai AI coding tool có năng lực mạnh, có thể dùng để giải thích code, hoàn thiện logic, debug lỗi và sinh script. Giới thiệu công cụ có thể tham khảo bài CC Switchbộ câu hỏi phỏng vấn Vibe Coding.

Thói quen quan trọng nhất khi học lập trình là gì?

Làm thực hành quan trọng hơn xem tutorial. Nên sớm chọn một dự án thật (dù nhỏ) để luyện, khi gặp khó khăn hãy đọc tài liệu và code, thay vì chỉ đọc xong lý thuyết rồi dừng.

Nguồn tham khảo

Terminal là môi trường nền tảng của các công cụ AI programming. Nếu muốn tìm hiểu sâu hơn về cách dùng Claude Code hoặc Codex trong terminal, có thể tham khảo Bài giới thiệu công cụ CC Switchbộ câu hỏi phỏng vấn Vibe Coding.

Share

Chia sẻ bài viết