jvinhit//lab

Search posts

Type to search across journal entries.

navigate open esc close

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ầnChủ đềBạn dùng để làm gì
1Terminal, file, navigationKhông lạc trong project
2Đọc file và logInspect output nhanh
3Tìm kiếm codeTìm symbol, config, TODO
4Pipe, redirection, xargsGhép lệnh thành workflow
5Git hằng ngàyReview, commit, rollback an toàn
6curl và jqDebug API từ terminal
7Process, port, systemTìm app giữ port, kill process, xem tài nguyên
8Node/package managerChạy script, debug dependency
9Docker, SSH, remote filesLàm việc với container và server
10Bash automationGom 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 đó:

  • ls là command.
  • -la là flag ngắn, tương đương -l -a.
  • src/content/posts là 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ệuNghĩa
.thư mục hiện tại
..thư mục cha
~home directory
./script.shfile script trong thư mục hiện tại
.envdotfile, 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ớ

ShortcutTác dụng
Ctrl+Cdừng command đang chạy
Ctrl+Dđóng input hiện tại, thoát shell khi dòng trống
Ctrl+Lclear màn hình
Ctrl+Avề đầu dòng
Ctrl+Evề cuối dòng
Ctrl+Uxóa từ cursor về đầu dòng
Ctrl+Kxóa từ cursor tới cuối dòng
Ctrl+Wxóa một từ trước cursor
Ctrl+Rtì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

  1. Tạo thư mục cli-lab, bên trong có src/index.shlogs/app.log.
  2. Di chuyển vào cli-lab, in pwd, rồi liệt kê tất cả file kể cả file ẩn.
  3. Copy logs/app.log thành logs/app.log.bak, sau đó rename thành logs/app-2026.log.
  4. Dùng Ctrl+R để tìm lại lệnh mkdir -p bạ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.