Những Lệnh Linux Command Line Cơ Bản Mà Mọi Developer Nên Biết
Tài liệu tham khảo thực tế về các lệnh Linux được sử dụng hàng ngày trong phát triển phần mềm — điều hướng hệ thống tệp, phân quyền, quản lý tiến trình, xử lý văn bản và mạng.
Linux command line là giao diện phổ quát cho máy chủ, container, CI pipeline và môi trường phát triển. Dù bạn đang SSH vào máy chủ production lúc 2 giờ sáng hay debug một Docker container, thành thạo các lệnh này chính là ranh giới giữa bối rối và tự tin.
Điều hướng và quản lý tệp
# Điều hướng thư mục
pwd # in thư mục đang làm việc
cd /var/log # đường dẫn tuyệt đối
cd .. # lên một cấp
cd - # quay lại thư mục trước
cd ~ # thư mục home
# Liệt kê tệp
ls # liệt kê cơ bản
ls -la # định dạng chi tiết + tệp ẩn
ls -lh # kích thước tệp dễ đọc
ls -lt # sắp xếp theo thời gian sửa đổi (mới nhất trước)
# Tạo, sao chép, di chuyển, xóa
mkdir -p path/to/dir # tạo thư mục + các thư mục cha
cp -r source/ dest/ # sao chép đệ quy
mv oldname newname # đổi tên hoặc di chuyển
rm -rf directory/ # xóa thư mục và nội dung (không thể hoàn tác!)
touch file.txt # tạo tệp rỗng / cập nhật timestamp
# Xem và điều hướng tệp
cat file.txt # in toàn bộ tệp
less file.txt # xem phân trang (q để thoát, / để tìm kiếm)
head -n 20 file.txt # 20 dòng đầu
tail -n 20 file.txt # 20 dòng cuối
tail -f /var/log/app.log # theo dõi log theo thời gian thực
Phân quyền tệp
Phân quyền Linux được biểu diễn dưới dạng ba nhóm bit đọc/ghi/thực thi cho chủ sở hữu, nhóm và người khác:
-rwxr-xr-- 1 alice devs 4096 Apr 8 10:00 script.sh
Đọc chuỗi phân quyền: -rwxr-xr--
-— loại tệp (d = thư mục, l = symlink)rwx— chủ sở hữu: đọc, ghi, thực thir-x— nhóm: đọc, thực thi (không ghi)r--— người khác: chỉ đọc
chmod — thay đổi phân quyền
# Ký hiệu symbolic
chmod u+x script.sh # thêm quyền thực thi cho chủ sở hữu
chmod g-w file.txt # xóa quyền ghi cho nhóm
chmod o=r file.txt # đặt người khác thành chỉ đọc
chmod a+r file.txt # thêm quyền đọc cho tất cả (a = all)
# Ký hiệu số (octal)
chmod 755 script.sh # rwxr-xr-x (phổ biến cho file thực thi)
chmod 644 file.txt # rw-r--r-- (phổ biến cho tệp thông thường)
chmod 600 ~/.ssh/id_rsa # rw------- (bắt buộc cho SSH key)
chmod 700 ~/.ssh/ # rwx------ (bắt buộc cho thư mục .ssh)
Dùng Chmod Calculator của chúng tôi để tạo chuỗi phân quyền trực quan và hiểu ý nghĩa từng giá trị octal.
Tìm kiếm và xử lý văn bản
# Tìm tệp
find /var/log -name "*.log" # tìm theo tên
find . -name "*.ts" -newer package.json # tệp mới hơn package.json
find . -type f -size +10M # tệp lớn hơn 10MB
find . -name "node_modules" -prune # loại trừ thư mục
# Tìm kiếm nội dung tệp
grep "error" app.log # tìm kiếm trong tệp
grep -r "TODO" ./src # tìm kiếm đệ quy
grep -i "error" app.log # không phân biệt hoa thường
grep -n "error" app.log # hiển thị số dòng
grep -v "DEBUG" app.log # dòng KHÔNG khớp
grep -E "error|warning" app.log # regex: error HOẶC warning
# Xử lý văn bản dạng stream
cat access.log | grep "404" | wc -l # đếm lỗi 404
cat data.csv | cut -d',' -f1,3 # trích xuất cột 1 và 3
cat file.txt | sort | uniq # sắp xếp và loại bỏ trùng lặp
cat file.txt | sort | uniq -c | sort -rn # đếm số lần xuất hiện, sắp xếp theo tần suất
awk — xử lý theo trường
# In các trường cụ thể (mặc định phân tách bằng tab)
awk '{print $1, $3}' file.txt
# Xử lý CSV (phân tách bằng dấu phẩy)
awk -F',' '{print $2}' data.csv
# Tính tổng một cột
awk -F',' '{sum += $3} END {print sum}' data.csv
# In các dòng khớp với mẫu
awk '/ERROR/ {print $0}' app.log
sed — trình soạn thảo stream
# Thay thế văn bản
sed 's/foo/bar/' file.txt # thay thế lần xuất hiện đầu tiên mỗi dòng
sed 's/foo/bar/g' file.txt # thay thế tất cả (toàn cục)
sed -i 's/foo/bar/g' file.txt # chỉnh sửa trực tiếp (sửa đổi tệp)
# Xóa dòng
sed '/^#/d' file.txt # xóa dòng comment
sed '5,10d' file.txt # xóa dòng 5-10
# In các dòng cụ thể
sed -n '10,20p' file.txt # in dòng 10-20
Quản lý tiến trình
# Xem tiến trình đang chạy
ps aux # tất cả tiến trình với chi tiết
ps aux | grep nginx # tìm tiến trình nginx
top # trình xem tiến trình tương tác
htop # trình xem tương tác tốt hơn (nếu đã cài)
# Điều khiển tiến trình
kill PID # gửi SIGTERM (dừng có kiểm soát)
kill -9 PID # gửi SIGKILL (buộc dừng)
pkill nginx # dừng theo tên
killall node # dừng tất cả tiến trình khớp
# Công việc nền
command & # chạy ở nền
jobs # liệt kê các công việc nền
fg %1 # đưa công việc 1 lên foreground
nohup command & # chạy không bị ảnh hưởng bởi hangup (tồn tại sau logout)
# Tài nguyên hệ thống
free -h # mức sử dụng bộ nhớ
df -h # mức sử dụng dung lượng đĩa
du -sh /var/log/ # kích thước thư mục
lsof -i :3000 # cái gì đang dùng cổng 3000
Lệnh mạng
# Kết nối
ping google.com # kiểm tra kết nối
curl -I https://example.com # chỉ xem HTTP header
curl -o file.zip https://example.com/file.zip # tải tệp xuống
wget https://example.com/file.zip # trình tải xuống thay thế
# Kiểm tra kết nối
ss -tulpn # cổng đang lắng nghe và tiến trình
netstat -tulpn # thay thế (hệ thống cũ hơn)
lsof -i :80 # cái gì đang dùng cổng 80
# DNS
dig example.com # tra cứu DNS
dig example.com MX # bản ghi MX
host example.com # tra cứu DNS đơn giản
nslookup example.com # truy vấn DNS tương tác
SSH và truy cập từ xa
# Kết nối tới máy chủ
ssh user@server.com
ssh -p 2222 user@server.com # cổng không chuẩn
ssh -i ~/.ssh/id_rsa user@server.com # key cụ thể
# Sao chép tệp
scp file.txt user@server.com:~/ # sao chép tới thư mục home từ xa
scp user@server.com:~/file.txt . # sao chép từ xa về máy
scp -r ./dist user@server.com:~/app/ # sao chép đệ quy
# SSH tunneling (chuyển tiếp cổng)
ssh -L 5432:localhost:5432 user@server.com # tunnel DB từ xa về cổng cục bộ
Tạo cặp SSH key để xác thực bảo mật với SSH Key Generator của chúng tôi.
Môi trường và shell
# Biến môi trường
export API_KEY=abc123 # đặt cho phiên hiện tại và tiến trình con
echo $API_KEY # in biến
env # liệt kê tất cả biến môi trường
printenv PATH # in biến cụ thể
unset API_KEY # xóa biến
# Lịch sử shell
history # liệt kê các lệnh trước đó
!! # lặp lại lệnh cuối
!grep # lặp lại lệnh grep cuối cùng
Ctrl+R # tìm kiếm ngược lịch sử (gõ để tìm)
# Phím tắt hữu ích
Ctrl+C # ngắt tiến trình hiện tại
Ctrl+Z # tạm dừng ra nền
Ctrl+L # xóa màn hình (giống lệnh clear)
Ctrl+A # nhảy tới đầu dòng
Ctrl+E # nhảy tới cuối dòng
Ctrl+U # xóa dòng trước con trỏ
Pipe và chuyển hướng
# Pipe — kết nối lệnh
ls -la | grep ".log" | wc -l
# Chuyển hướng đầu ra
command > file.txt # ghi đè tệp bằng stdout
command >> file.txt # thêm stdout vào cuối tệp
command 2> errors.txt # chuyển hướng stderr
command > all.txt 2>&1 # chuyển hướng stdout + stderr vào cùng tệp
command &> all.txt # viết tắt của lệnh trên
# /dev/null — bỏ qua đầu ra
command > /dev/null 2>&1 # bỏ qua toàn bộ đầu ra (chạy im lặng)
Các lệnh một dòng hữu ích cho developer
# Tìm và thay thế trong tất cả tệp trong một thư mục
find . -name "*.tsx" | xargs sed -i 's/OldComponent/NewComponent/g'
# Lấy IP công khai
curl -s ifconfig.me
# Theo dõi tệp khi có thay đổi
watch -n 2 "ls -la uploads/"
# Nén một thư mục
tar -czf archive.tar.gz ./directory/
# Giải nén tar.gz
tar -xzf archive.tar.gz
# Hiển thị 10 tệp lớn nhất trong thư mục hiện tại
du -sh * | sort -rh | head -10
# Đếm số dòng code theo loại tệp
find . -name "*.ts" | xargs wc -l | sort -rn | head -20
Command line xứng đáng để bạn đầu tư thời gian. Mỗi lệnh bạn học được trở thành một mảnh ghép để tạo nên những tổ hợp mạnh mẽ hơn. Hãy bắt đầu với điều hướng và grep, rồi thêm pipe, rồi awk — và bạn sẽ xử lý được bất kỳ tác vụ xử lý văn bản nào gặp phải.