Command Line cho Developer · Part 1 - Terminal, Files & Navigation
Nền tảng terminal cho developer: prompt, cwd, command/args/flags, exit code, path, ls/cd/pwd, tạo-di chuyển-copy-xóa file, shortcut và bài tập.
Đây là Phần 1 của series 10 bài về command line mà lập trình viên dùng hằng ngày. Series này không biến bạn thành “người sống trong terminal” cho vui. Mục tiêu thực dụng hơn: đọc project nhanh hơn, debug log gọn hơn, gọi API chính xác hơn, xử lý file hàng loạt an toàn hơn, và biết khi nào nên viết bash script thay vì click lặp lại.
Nếu series Bash & Shell Scripting dạy bạn ngôn ngữ Bash, series này dạy bạn workflow terminal của developer.
Bản đồ series
| Phần | Chủ đề | Bạn dùng để làm gì |
|---|---|---|
| 1 | Terminal, file, navigation | Không lạc trong project |
| 2 | Đọc file và log | Inspect output nhanh |
| 3 | Tìm kiếm code | Tìm symbol, config, TODO |
| 4 | Pipe, redirection, xargs | Ghép lệnh thành workflow |
| 5 | Git hằng ngày | Review, commit, rollback an toàn |
| 6 | curl và jq | Debug API từ terminal |
| 7 | Process, port, system | Tìm app giữ port, kill process, xem tài nguyên |
| 8 | Node/package manager | Chạy script, debug dependency |
| 9 | Docker, SSH, remote files | Làm việc với container và server |
| 10 | Bash automation | Gom workflow thành script chắc chắn |
Terminal là gì?
Terminal là giao diện để bạn nói chuyện với shell. Shell đọc dòng lệnh, parse nó, expand biến/glob, rồi nhờ hệ điều hành chạy chương trình thật.
Một dòng lệnh thường có dạng:
command --flag value argument
Ví dụ:
ls -la src/content/posts
Trong đó:
lslà command.-lalà flag ngắn, tương đương-l -a.src/content/postslà argument.
Mỗi lệnh trả về exit code:
echo "$?" # 0 là thành công, khác 0 là lỗi
Exit code là thứ làm cho if, &&, ||, script deploy, CI/CD và automation hoạt động.
Cwd: bạn đang đứng ở đâu?
Shell luôn có một thư mục hiện tại gọi là current working directory.
pwd # in thư mục hiện tại
ls # liệt kê thư mục hiện tại
ls src # liệt kê thư mục src
cd src/content # chuyển thư mục
cd .. # lên một cấp
cd - # quay lại thư mục trước đó
cd ~ # về home
Khi debug project, việc đầu tiên nên làm:
pwd
ls
git status --short
Ba lệnh này cho bạn biết: mình đang ở đâu, có gì trong repo, và working tree đang sạch hay bẩn.
Path: absolute, relative, dotfiles
Có hai kiểu path:
/Users/me/project/src/index.ts # absolute path
src/index.ts # relative path, tính từ cwd
Ký hiệu hay dùng:
| Ký hiệu | Nghĩa |
|---|---|
. | thư mục hiện tại |
.. | thư mục cha |
~ | home directory |
./script.sh | file script trong thư mục hiện tại |
.env | dotfile, thường bị ẩn khỏi ls mặc định |
Muốn thấy file ẩn:
ls -la
Trong repo JavaScript/TypeScript, các file quan trọng thường là dotfile: .env, .gitignore, .npmrc, .prettierrc, .eslintrc, .github.
Tạo, copy, move, xóa file
Nhóm lệnh bạn sẽ dùng mỗi ngày:
mkdir logs # tạo thư mục
mkdir -p tmp/cache/images # tạo cả cây thư mục nếu thiếu
touch app.log # tạo file rỗng hoặc cập nhật mtime
cp app.log app.log.bak # copy file
cp -R src src-backup # copy thư mục
mv old.ts new.ts # rename/move
rm app.log # xóa file
rmdir empty-dir # xóa thư mục rỗng
Với rm, hãy chậm lại một nhịp. rm không đi qua thùng rác.
rm -i important.txt # hỏi trước khi xóa
rm -rf dist # xóa thư mục và con bên trong
rm -rf hợp để xóa dist, coverage, .turbo, node_modules khi bạn hiểu rõ path. Không dùng nó với biến chưa kiểm tra.
Mở project và file nhanh
Một workflow thường gặp:
cd ~/Works/source/personal/personal-blog
code .
npm run dev
Nếu bạn dùng editor khác:
nvim .
zed .
open . # macOS: mở Finder tại thư mục hiện tại
Để tạo một cấu trúc nhỏ:
mkdir -p src/lib src/components src/pages
touch src/lib/api.ts src/pages/index.ts
Shortcut terminal nên nhớ
| Shortcut | Tác dụng |
|---|---|
Ctrl+C | dừng command đang chạy |
Ctrl+D | đóng input hiện tại, thoát shell khi dòng trống |
Ctrl+L | clear màn hình |
Ctrl+A | về đầu dòng |
Ctrl+E | về cuối dòng |
Ctrl+U | xóa từ cursor về đầu dòng |
Ctrl+K | xóa từ cursor tới cuối dòng |
Ctrl+W | xóa một từ trước cursor |
Ctrl+R | tìm trong history |
Ctrl+R là vũ khí thật sự. Thay vì gõ lại lệnh deploy dài, bấm Ctrl+R, nhập vài ký tự bạn nhớ, rồi Enter.
Checklist khi mở một repo lạ
pwd
ls -la
git status --short
find . -maxdepth 2 -type f | sort | head -50
Sau đó đọc những file này nếu có:
README.md
package.json
pnpm-lock.yaml
package-lock.json
docker-compose.yml
.env.example
Không cần hiểu toàn bộ repo ngay. Chỉ cần xác định: app chạy bằng lệnh nào, source ở đâu, config ở đâu, và test/lint/build nằm trong script nào.
Bài tập
- Tạo thư mục
cli-lab, bên trong cósrc/index.shvàlogs/app.log. - Di chuyển vào
cli-lab, inpwd, rồi liệt kê tất cả file kể cả file ẩn. - Copy
logs/app.logthànhlogs/app.log.bak, sau đó rename thànhlogs/app-2026.log. - Dùng
Ctrl+Rđể tìm lại lệnhmkdir -pbạn vừa chạy.
Lời giải tham khảo
mkdir -p cli-lab/src cli-lab/logs
touch cli-lab/src/index.sh cli-lab/logs/app.log
cd cli-lab
pwd
ls -la
cp logs/app.log logs/app.log.bak
mv logs/app.log.bak logs/app-2026.logĐiều cốt lõi
Terminal không đáng sợ nếu bạn luôn biết cwd, hiểu path, và đọc command theo mẫu command + flags + arguments. Phần tiếp theo đi vào thứ developer làm suốt ngày: đọc file, xem log, và inspect output mà không cần mở editor.