Bài viết mới nhất

Tổng 2300 bà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.

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

Vì sao script shell hỏng: shellcheck bắt cả loạt bẫy trước khi chạy

Mọi bẫy đã gặp suốt loạt Unix — quên quote biến, rm -rf $var/* với biến rỗng, lặp qua ls, biến chưa gán — đều bị một công cụ bắt tự động: shellcheck. Bài này chạy shellcheck thật trên một script đầy lỗi, xem nó chỉ ra SC2086/SC2115/SC2045 kèm cách sửa, và dùng exit code để chặn bug trong CI.

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.