Công cụ 22/09/2026 5 phút

tar và nén: vì sao tar không nén, và cái bẫy thứ tự cờ khiến bạn mất file

tar chỉ GỘP nhiều file thành một — nén là bước riêng (gzip/zstd/xz). Hiểu lầm này cùng cái bẫy thứ tự cờ -f khiến nhiều người tạo nhầm archive hoặc ghi đè mất dữ liệu. Bài này chạy thật: tar cf vs czf, so gzip vs zstd về kích thước và tốc độ, xem nội dung không cần giải nén, và minh chứng tar -cf data goi.tar báo lỗi.

Công cụ 22/09/2026 6 phút

Quyền file Unix: chmod 755 nghĩa là gì, và vì sao thư mục thiếu x lại chặn cả file bên trong

chmod 755, 644, 600 — những con số ai cũng gõ nhưng ít người hiểu. Bài này chạy thật: giải mã số bát phân r=4 w=2 x=1, dạng ký hiệu u/g/o, và một điểm hay nhầm — x trên THƯ MỤC nghĩa là quyền đi vào (chạy với user nobody chứng minh thư mục thiếu x chặn đọc file bên trong), cùng umask quyết định quyền mặc định của file mới.

Công cụ 22/09/2026 5 phút

cron: vì sao job "chạy tay thì được, cron thì không" — bẫy PATH và môi trường tối giản

Cron chạy job với môi trường tối giản, không nạp .bashrc, PATH rất ngắn — đó là lý do #1 khiến job cron im lặng thất bại dù chạy tay hoàn hảo. Bài này chạy crond THẬT: job fire lúc 10:24:01 báo 'go: command not found' vì PATH=/usr/bin:/bin, rồi sau khi set PATH trong crontab lại chạy đúng lúc 10:25:01. Kèm cú pháp năm trường và cách bắt log.

DevOps 22/09/2026 5 phút

Container không phải máy ảo: nó chỉ là một tiến trình bị cô lập

"Container là VM nhẹ" là hiểu lầm phổ biến nhất về Docker. Thực ra container là một tiến trình thường trên host, được cô lập bằng namespace và giới hạn bằng cgroup — dùng chung kernel host. Bài này chạy thật: alpine và ubuntu cùng thấy một kernel, tự tạo cô lập bằng unshare không cần docker (shell thành PID 1), và đo khởi động 164ms.

DevOps 22/09/2026 6 phút

PID namespace: ứng dụng trong container là PID 1 — và vì sao điều đó khiến docker stop chậm

Trong container, ứng dụng của bạn chạy với PID 1 như init của cả một hệ. Kernel bảo vệ PID 1: nó BỎ QUA các tín hiệu không có handler — nên app không xử lý SIGTERM sẽ phớt lờ docker stop. Bài này chạy thật: PID 1 sống sót sau SIGTERM, docker stop mất 3.1s (chờ grace rồi SIGKILL), và --init (tini) kéo xuống 0.1s.

DevOps 22/09/2026 5 phút

Mount namespace: vì sao mỗi container có cây thư mục gốc / của riêng nó

Container dùng chung kernel host nhưng thấy một hệ thống file hoàn toàn riêng — / của nó khác / của host. Bài này chạy thật ba tầng cơ chế: alpine thấy rootfs riêng không có thư mục của host, mount namespace cô lập bảng mount (tmpfs chỉ ns đó thấy), và chroot tự dựng đổi / thành một rootfs tối giản. Nền tảng của filesystem container.